aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
m---------3rdparty0
-rw-r--r--apps/files/appinfo/app.php39
-rw-r--r--apps/files/css/files.css2
-rw-r--r--apps/files/l10n/cs_CZ.js1
-rw-r--r--apps/files/l10n/cs_CZ.json1
-rw-r--r--apps/files/l10n/de.js1
-rw-r--r--apps/files/l10n/de.json1
-rw-r--r--apps/files/l10n/de_DE.js1
-rw-r--r--apps/files/l10n/de_DE.json1
-rw-r--r--apps/files/l10n/es.js1
-rw-r--r--apps/files/l10n/es.json1
-rw-r--r--apps/files/l10n/fi_FI.js1
-rw-r--r--apps/files/l10n/fi_FI.json1
-rw-r--r--apps/files/l10n/fr.js1
-rw-r--r--apps/files/l10n/fr.json1
-rw-r--r--apps/files/l10n/gl.js3
-rw-r--r--apps/files/l10n/gl.json3
-rw-r--r--apps/files/l10n/it.js1
-rw-r--r--apps/files/l10n/it.json1
-rw-r--r--apps/files/l10n/nb_NO.js1
-rw-r--r--apps/files/l10n/nb_NO.json1
-rw-r--r--apps/files/l10n/nl.js1
-rw-r--r--apps/files/l10n/nl.json1
-rw-r--r--apps/files/l10n/pt_BR.js1
-rw-r--r--apps/files/l10n/pt_BR.json1
-rw-r--r--apps/files/l10n/pt_PT.js1
-rw-r--r--apps/files/l10n/pt_PT.json1
-rw-r--r--apps/files/l10n/ro.js29
-rw-r--r--apps/files/l10n/ro.json29
-rw-r--r--apps/files/l10n/ru.js1
-rw-r--r--apps/files/l10n/ru.json1
-rw-r--r--apps/files/l10n/sr.js1
-rw-r--r--apps/files/l10n/sr.json1
-rw-r--r--apps/files/l10n/tr.js1
-rw-r--r--apps/files/l10n/tr.json1
-rw-r--r--apps/files/l10n/uk.js17
-rw-r--r--apps/files/l10n/uk.json17
-rw-r--r--apps/files_encryption/l10n/fr.js2
-rw-r--r--apps/files_encryption/l10n/fr.json2
-rw-r--r--apps/files_encryption/l10n/gl.js2
-rw-r--r--apps/files_encryption/l10n/gl.json2
-rw-r--r--apps/files_encryption/l10n/sr.js4
-rw-r--r--apps/files_encryption/l10n/sr.json4
-rw-r--r--apps/files_external/3rdparty/composer.lock8
-rw-r--r--apps/files_external/3rdparty/composer/installed.json8
-rw-r--r--apps/files_external/3rdparty/icewind/smb/.gitignore1
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Parser.php12
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/Share.php7
-rw-r--r--apps/files_external/3rdparty/icewind/smb/src/TimeZoneProvider.php35
-rw-r--r--apps/files_external/3rdparty/icewind/smb/tests/AbstractShare.php7
-rw-r--r--apps/files_external/3rdparty/icewind/smb/tests/Parser.php26
-rw-r--r--apps/files_external/ajax/addMountPoint.php26
-rw-r--r--apps/files_external/ajax/removeMountPoint.php23
-rw-r--r--apps/files_external/appinfo/app.php2
-rw-r--r--apps/files_external/appinfo/application.php7
-rw-r--r--apps/files_external/appinfo/routes.php37
-rw-r--r--apps/files_external/controller/globalstoragescontroller.php156
-rw-r--r--apps/files_external/controller/storagescontroller.php167
-rw-r--r--apps/files_external/controller/userstoragescontroller.php191
-rw-r--r--apps/files_external/js/dropbox.js4
-rw-r--r--apps/files_external/js/google.js4
-rw-r--r--apps/files_external/js/settings.js1080
-rw-r--r--apps/files_external/js/sftp_key.js2
-rw-r--r--apps/files_external/l10n/ca.js6
-rw-r--r--apps/files_external/l10n/ca.json6
-rw-r--r--apps/files_external/l10n/fr.js6
-rw-r--r--apps/files_external/l10n/fr.json6
-rw-r--r--apps/files_external/l10n/nb_NO.js2
-rw-r--r--apps/files_external/l10n/nb_NO.json2
-rw-r--r--apps/files_external/l10n/uk.js2
-rw-r--r--apps/files_external/l10n/uk.json2
-rw-r--r--apps/files_external/lib/config.php90
-rw-r--r--apps/files_external/lib/dropbox.php7
-rw-r--r--apps/files_external/lib/notfoundexception.php15
-rw-r--r--apps/files_external/lib/storageconfig.php292
-rw-r--r--apps/files_external/personal.php22
-rw-r--r--apps/files_external/service/globalstoragesservice.php191
-rw-r--r--apps/files_external/service/storagesservice.php389
-rw-r--r--apps/files_external/service/userstoragesservice.php150
-rw-r--r--apps/files_external/settings.php22
-rw-r--r--apps/files_external/templates/settings.php18
-rw-r--r--apps/files_external/tests/controller/globalstoragescontrollertest.php (renamed from lib/private/fileproxy/fileoperations.php)30
-rw-r--r--apps/files_external/tests/controller/storagescontrollertest.php225
-rw-r--r--apps/files_external/tests/controller/userstoragescontrollertest.php114
-rw-r--r--apps/files_external/tests/js/settingsSpec.js167
-rw-r--r--apps/files_external/tests/mountconfig.php58
-rw-r--r--apps/files_external/tests/service/globalstoragesservicetest.php815
-rw-r--r--apps/files_external/tests/service/storagesservicetest.php183
-rw-r--r--apps/files_external/tests/service/userstoragesservicetest.php254
-rw-r--r--apps/files_external/tests/storageconfigtest.php52
-rw-r--r--apps/files_sharing/l10n/pl.js7
-rw-r--r--apps/files_sharing/l10n/pl.json7
-rw-r--r--apps/files_sharing/l10n/uk.js13
-rw-r--r--apps/files_sharing/l10n/uk.json13
-rw-r--r--apps/files_sharing/lib/external/manager.php2
-rw-r--r--apps/files_sharing/lib/external/scanner.php18
-rw-r--r--apps/files_sharing/lib/external/storage.php2
-rw-r--r--apps/files_sharing/public.php2
-rw-r--r--apps/files_sharing/tests/api.php18
-rw-r--r--apps/files_sharing/tests/external/manager.php142
-rw-r--r--apps/files_sharing/tests/sharedstorage.php3
-rw-r--r--apps/files_trashbin/l10n/pl.js4
-rw-r--r--apps/files_trashbin/l10n/pl.json4
-rw-r--r--apps/user_ldap/l10n/gl.js2
-rw-r--r--apps/user_ldap/l10n/gl.json2
-rw-r--r--apps/user_ldap/l10n/sr.js4
-rw-r--r--apps/user_ldap/l10n/sr.json4
-rw-r--r--apps/user_ldap/l10n/uk.js1
-rw-r--r--apps/user_ldap/l10n/uk.json1
-rwxr-xr-xautotest.sh39
-rw-r--r--config/config.sample.php2
-rw-r--r--core/application.php6
-rw-r--r--core/css/share.css7
-rw-r--r--core/js/tests/specHelper.js5
-rw-r--r--core/l10n/af_ZA.js3
-rw-r--r--core/l10n/af_ZA.json3
-rw-r--r--core/l10n/fr.js5
-rw-r--r--core/l10n/fr.json5
-rw-r--r--core/l10n/ja.js3
-rw-r--r--core/l10n/ja.json3
-rw-r--r--core/l10n/pl.js5
-rw-r--r--core/l10n/pl.json5
-rw-r--r--core/l10n/pt_BR.js5
-rw-r--r--core/l10n/pt_BR.json5
-rw-r--r--core/l10n/sr.js7
-rw-r--r--core/l10n/sr.json7
-rw-r--r--core/l10n/tr.js5
-rw-r--r--core/l10n/tr.json5
-rw-r--r--core/l10n/uk.js87
-rw-r--r--core/l10n/uk.json87
-rw-r--r--core/lostpassword/controller/lostcontroller.php24
-rw-r--r--core/templates/403.php2
-rw-r--r--core/templates/404.php2
-rw-r--r--core/templates/error.php2
-rw-r--r--core/templates/exception.php1
-rw-r--r--core/templates/installation.php28
-rw-r--r--core/templates/layout.base.php20
-rw-r--r--core/templates/layout.guest.php21
-rw-r--r--core/templates/layout.user.php22
-rw-r--r--core/templates/login.php12
-rw-r--r--core/templates/singleuser.user.php8
-rw-r--r--core/templates/tags.html4
-rw-r--r--core/templates/untrustedDomain.php6
-rw-r--r--core/templates/update.user.php8
-rw-r--r--lib/base.php32
-rw-r--r--lib/l10n/bg_BG.js3
-rw-r--r--lib/l10n/bg_BG.json3
-rw-r--r--lib/l10n/bs.js1
-rw-r--r--lib/l10n/bs.json1
-rw-r--r--lib/l10n/cs_CZ.js5
-rw-r--r--lib/l10n/cs_CZ.json5
-rw-r--r--lib/l10n/da.js4
-rw-r--r--lib/l10n/da.json4
-rw-r--r--lib/l10n/de.js5
-rw-r--r--lib/l10n/de.json5
-rw-r--r--lib/l10n/de_DE.js5
-rw-r--r--lib/l10n/de_DE.json5
-rw-r--r--lib/l10n/el.js4
-rw-r--r--lib/l10n/el.json4
-rw-r--r--lib/l10n/en_GB.js4
-rw-r--r--lib/l10n/en_GB.json4
-rw-r--r--lib/l10n/es.js5
-rw-r--r--lib/l10n/es.json5
-rw-r--r--lib/l10n/eu.js3
-rw-r--r--lib/l10n/eu.json3
-rw-r--r--lib/l10n/fi_FI.js5
-rw-r--r--lib/l10n/fi_FI.json5
-rw-r--r--lib/l10n/fr.js10
-rw-r--r--lib/l10n/fr.json10
-rw-r--r--lib/l10n/gl.js5
-rw-r--r--lib/l10n/gl.json5
-rw-r--r--lib/l10n/hr.js3
-rw-r--r--lib/l10n/hr.json3
-rw-r--r--lib/l10n/hu_HU.js1
-rw-r--r--lib/l10n/hu_HU.json1
-rw-r--r--lib/l10n/id.js3
-rw-r--r--lib/l10n/id.json3
-rw-r--r--lib/l10n/it.js5
-rw-r--r--lib/l10n/it.json5
-rw-r--r--lib/l10n/ja.js9
-rw-r--r--lib/l10n/ja.json9
-rw-r--r--lib/l10n/ko.js3
-rw-r--r--lib/l10n/ko.json3
-rw-r--r--lib/l10n/nb_NO.js3
-rw-r--r--lib/l10n/nb_NO.json3
-rw-r--r--lib/l10n/nl.js5
-rw-r--r--lib/l10n/nl.json5
-rw-r--r--lib/l10n/pl.js9
-rw-r--r--lib/l10n/pl.json9
-rw-r--r--lib/l10n/pt_BR.js6
-rw-r--r--lib/l10n/pt_BR.json6
-rw-r--r--lib/l10n/pt_PT.js5
-rw-r--r--lib/l10n/pt_PT.json5
-rw-r--r--lib/l10n/ru.js5
-rw-r--r--lib/l10n/ru.json5
-rw-r--r--lib/l10n/sk_SK.js4
-rw-r--r--lib/l10n/sk_SK.json4
-rw-r--r--lib/l10n/sl.js3
-rw-r--r--lib/l10n/sl.json3
-rw-r--r--lib/l10n/sr.js42
-rw-r--r--lib/l10n/sr.json42
-rw-r--r--lib/l10n/sr@latin.js3
-rw-r--r--lib/l10n/sr@latin.json3
-rw-r--r--lib/l10n/sv.js3
-rw-r--r--lib/l10n/sv.json3
-rw-r--r--lib/l10n/tr.js8
-rw-r--r--lib/l10n/tr.json8
-rw-r--r--lib/l10n/uk.js3
-rw-r--r--lib/l10n/uk.json3
-rw-r--r--lib/l10n/zh_CN.js1
-rw-r--r--lib/l10n/zh_CN.json1
-rw-r--r--lib/private/allconfig.php2
-rw-r--r--lib/private/app.php33
-rw-r--r--lib/private/appframework/db/db.php1
-rw-r--r--lib/private/cache/fileglobalgc.php10
-rw-r--r--lib/private/connector/sabre/custompropertiesbackend.php16
-rw-r--r--lib/private/db/adapter.php1
-rw-r--r--lib/private/db/adaptersqlite.php1
-rw-r--r--lib/private/db/connection.php3
-rw-r--r--lib/private/files/cache/cache.php3
-rw-r--r--lib/private/files/cache/watcher.php7
-rw-r--r--lib/private/files/mount/mountpoint.php17
-rw-r--r--lib/private/files/storage/common.php23
-rw-r--r--lib/private/files/storage/storagefactory.php11
-rw-r--r--lib/private/files/view.php2
-rw-r--r--lib/private/helper.php1
-rw-r--r--lib/private/mail.php153
-rw-r--r--lib/private/mail/mailer.php207
-rw-r--r--lib/private/mail/message.php206
-rw-r--r--lib/private/memcache/cache.php3
-rw-r--r--lib/private/mimetypes.list.php17
-rw-r--r--lib/private/navigationmanager.php19
-rw-r--r--lib/private/server.php47
-rw-r--r--lib/private/session/internal.php8
-rw-r--r--lib/private/setup.php5
-rw-r--r--lib/private/share/share.php10
-rw-r--r--lib/private/template.php1
-rw-r--r--lib/private/templatelayout.php6
-rw-r--r--lib/private/urlgenerator.php50
-rw-r--r--lib/private/util.php11
-rw-r--r--lib/public/app.php17
-rw-r--r--lib/public/appframework/db/mapper.php73
-rw-r--r--lib/public/files/mount/imountpoint.php7
-rw-r--r--lib/public/files/storage/istoragefactory.php5
-rw-r--r--lib/public/idbconnection.php1
-rw-r--r--lib/public/inavigationmanager.php7
-rw-r--r--lib/public/iservercontainer.php8
-rw-r--r--lib/public/mail/imailer.php57
-rw-r--r--lib/public/util.php39
-rw-r--r--lib/repair/repairmimetypes.php32
-rw-r--r--settings/admin.php1
-rw-r--r--settings/application.php8
-rw-r--r--settings/controller/mailsettingscontroller.php36
-rw-r--r--settings/controller/userscontroller.php41
-rw-r--r--settings/css/settings.css31
-rw-r--r--settings/js/users/groups.js13
-rw-r--r--settings/l10n/ar.js2
-rw-r--r--settings/l10n/ar.json2
-rw-r--r--settings/l10n/ast.js3
-rw-r--r--settings/l10n/ast.json3
-rw-r--r--settings/l10n/az.js3
-rw-r--r--settings/l10n/az.json3
-rw-r--r--settings/l10n/bg_BG.js3
-rw-r--r--settings/l10n/bg_BG.json3
-rw-r--r--settings/l10n/bn_BD.js2
-rw-r--r--settings/l10n/bn_BD.json2
-rw-r--r--settings/l10n/bs.js3
-rw-r--r--settings/l10n/bs.json3
-rw-r--r--settings/l10n/ca.js3
-rw-r--r--settings/l10n/ca.json3
-rw-r--r--settings/l10n/cs_CZ.js5
-rw-r--r--settings/l10n/cs_CZ.json5
-rw-r--r--settings/l10n/da.js3
-rw-r--r--settings/l10n/da.json3
-rw-r--r--settings/l10n/de.js5
-rw-r--r--settings/l10n/de.json5
-rw-r--r--settings/l10n/de_DE.js5
-rw-r--r--settings/l10n/de_DE.json5
-rw-r--r--settings/l10n/el.js3
-rw-r--r--settings/l10n/el.json3
-rw-r--r--settings/l10n/en_GB.js3
-rw-r--r--settings/l10n/en_GB.json3
-rw-r--r--settings/l10n/eo.js1
-rw-r--r--settings/l10n/eo.json1
-rw-r--r--settings/l10n/es.js4
-rw-r--r--settings/l10n/es.json4
-rw-r--r--settings/l10n/es_AR.js2
-rw-r--r--settings/l10n/es_AR.json2
-rw-r--r--settings/l10n/es_MX.js1
-rw-r--r--settings/l10n/es_MX.json1
-rw-r--r--settings/l10n/et_EE.js3
-rw-r--r--settings/l10n/et_EE.json3
-rw-r--r--settings/l10n/eu.js3
-rw-r--r--settings/l10n/eu.json3
-rw-r--r--settings/l10n/fa.js1
-rw-r--r--settings/l10n/fa.json1
-rw-r--r--settings/l10n/fi_FI.js5
-rw-r--r--settings/l10n/fi_FI.json5
-rw-r--r--settings/l10n/fr.js7
-rw-r--r--settings/l10n/fr.json7
-rw-r--r--settings/l10n/gl.js5
-rw-r--r--settings/l10n/gl.json5
-rw-r--r--settings/l10n/he.js1
-rw-r--r--settings/l10n/he.json1
-rw-r--r--settings/l10n/hr.js2
-rw-r--r--settings/l10n/hr.json2
-rw-r--r--settings/l10n/hu_HU.js2
-rw-r--r--settings/l10n/hu_HU.json2
-rw-r--r--settings/l10n/ia.js2
-rw-r--r--settings/l10n/ia.json2
-rw-r--r--settings/l10n/id.js3
-rw-r--r--settings/l10n/id.json3
-rw-r--r--settings/l10n/it.js5
-rw-r--r--settings/l10n/it.json5
-rw-r--r--settings/l10n/ja.js3
-rw-r--r--settings/l10n/ja.json3
-rw-r--r--settings/l10n/ka_GE.js1
-rw-r--r--settings/l10n/ka_GE.json1
-rw-r--r--settings/l10n/km.js2
-rw-r--r--settings/l10n/km.json2
-rw-r--r--settings/l10n/kn.js3
-rw-r--r--settings/l10n/kn.json3
-rw-r--r--settings/l10n/ko.js3
-rw-r--r--settings/l10n/ko.json3
-rw-r--r--settings/l10n/lt_LT.js1
-rw-r--r--settings/l10n/lt_LT.json1
-rw-r--r--settings/l10n/lv.js3
-rw-r--r--settings/l10n/lv.json3
-rw-r--r--settings/l10n/mk.js1
-rw-r--r--settings/l10n/mk.json1
-rw-r--r--settings/l10n/mn.js1
-rw-r--r--settings/l10n/mn.json1
-rw-r--r--settings/l10n/nb_NO.js7
-rw-r--r--settings/l10n/nb_NO.json7
-rw-r--r--settings/l10n/nl.js5
-rw-r--r--settings/l10n/nl.json5
-rw-r--r--settings/l10n/nn_NO.js1
-rw-r--r--settings/l10n/nn_NO.json1
-rw-r--r--settings/l10n/pl.js3
-rw-r--r--settings/l10n/pl.json3
-rw-r--r--settings/l10n/pt_BR.js5
-rw-r--r--settings/l10n/pt_BR.json5
-rw-r--r--settings/l10n/pt_PT.js5
-rw-r--r--settings/l10n/pt_PT.json5
-rw-r--r--settings/l10n/ro.js2
-rw-r--r--settings/l10n/ro.json2
-rw-r--r--settings/l10n/ru.js5
-rw-r--r--settings/l10n/ru.json5
-rw-r--r--settings/l10n/sk_SK.js3
-rw-r--r--settings/l10n/sk_SK.json3
-rw-r--r--settings/l10n/sl.js3
-rw-r--r--settings/l10n/sl.json3
-rw-r--r--settings/l10n/sq.js1
-rw-r--r--settings/l10n/sq.json1
-rw-r--r--settings/l10n/sr.js23
-rw-r--r--settings/l10n/sr.json23
-rw-r--r--settings/l10n/sv.js3
-rw-r--r--settings/l10n/sv.json3
-rw-r--r--settings/l10n/tr.js4
-rw-r--r--settings/l10n/tr.json4
-rw-r--r--settings/l10n/ug.js1
-rw-r--r--settings/l10n/ug.json1
-rw-r--r--settings/l10n/uk.js29
-rw-r--r--settings/l10n/uk.json29
-rw-r--r--settings/l10n/zh_CN.js2
-rw-r--r--settings/l10n/zh_CN.json2
-rw-r--r--settings/l10n/zh_HK.js1
-rw-r--r--settings/l10n/zh_HK.json1
-rw-r--r--settings/l10n/zh_TW.js2
-rw-r--r--settings/l10n/zh_TW.json2
-rw-r--r--tests/core/lostpassword/controller/lostcontrollertest.php101
-rw-r--r--tests/karma.config.js3
-rw-r--r--tests/lib/appframework/db/mappertest.php10
-rw-r--r--tests/lib/appframework/db/mappertestutility.php69
-rw-r--r--tests/lib/cache/fileglobalgc.php34
-rw-r--r--tests/lib/connector/sabre/custompropertiesbackend.php28
-rw-r--r--tests/lib/files/cache/cache.php22
-rw-r--r--tests/lib/files/pathverificationtest.php26
-rw-r--r--tests/lib/files/storage/storagefactory.php45
-rw-r--r--tests/lib/files/view.php18
-rw-r--r--tests/lib/mail.php53
-rw-r--r--tests/lib/mail/mailer.php121
-rw-r--r--tests/lib/mail/message.php161
-rw-r--r--tests/lib/navigationmanagertest.php160
-rw-r--r--tests/lib/repair/repairmimetypes.php95
-rw-r--r--tests/lib/share/share.php35
-rw-r--r--tests/lib/urlgenerator.php17
-rw-r--r--tests/preseed-config.php40
-rw-r--r--tests/settings/controller/mailsettingscontrollertest.php11
-rw-r--r--tests/settings/controller/userscontrollertest.php121
390 files changed, 7267 insertions, 1797 deletions
diff --git a/3rdparty b/3rdparty
-Subproject 7c536152a16f62797b60c6c06f8c2e23eb8b755
+Subproject 08b820614ae99477d7c9319630f400d22b20e2f
diff --git a/apps/files/appinfo/app.php b/apps/files/appinfo/app.php
index 87791e2558e..528156e1a28 100644
--- a/apps/files/appinfo/app.php
+++ b/apps/files/appinfo/app.php
@@ -1,32 +1,37 @@
<?php
-$l = \OC::$server->getL10N('files');
-OCP\App::registerAdmin('files', 'admin');
+\OCP\App::registerAdmin('files', 'admin');
-OCP\App::addNavigationEntry(array("id" => "files_index",
- "order" => 0,
- "href" => OCP\Util::linkTo("files", "index.php"),
- "icon" => OCP\Util::imagePath("core", "places/files.svg"),
- "name" => $l->t("Files")));
+\OC::$server->getNavigationManager()->add(function () {
+ $l = \OC::$server->getL10N('files');
+ return [
+ 'id' => 'files_index',
+ 'order' => 0,
+ 'href' => \OCP\Util::linkTo('files', 'index.php'),
+ 'icon' => \OCP\Util::imagePath('core', 'places/files.svg'),
+ 'name' => $l->t('Files'),
+ ];
+});
\OC::$server->getSearch()->registerProvider('OC\Search\Provider\File', array('apps' => array('files')));
-$templateManager = OC_Helper::getFileTemplateManager();
+$templateManager = \OC_Helper::getFileTemplateManager();
$templateManager->registerTemplate('text/html', 'core/templates/filetemplates/template.html');
$templateManager->registerTemplate('application/vnd.oasis.opendocument.presentation', 'core/templates/filetemplates/template.odp');
$templateManager->registerTemplate('application/vnd.oasis.opendocument.text', 'core/templates/filetemplates/template.odt');
$templateManager->registerTemplate('application/vnd.oasis.opendocument.spreadsheet', 'core/templates/filetemplates/template.ods');
-\OCA\Files\App::getNavigationManager()->add(
- array(
- "id" => 'files',
- "appname" => 'files',
- "script" => 'list.php',
- "order" => 0,
- "name" => $l->t('All files')
- )
-);
+\OCA\Files\App::getNavigationManager()->add(function () {
+ $l = \OC::$server->getL10N('files');
+ return [
+ 'id' => 'files',
+ 'appname' => 'files',
+ 'script' => 'list.php',
+ 'order' => 0,
+ 'name' => $l->t('All files'),
+ ];
+});
\OC::$server->getActivityManager()->registerExtension(function() {
return new \OCA\Files\Activity(
diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index 1d6b4ad9e07..d09df9d795d 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -488,7 +488,7 @@ table td.filename .uploadtext {
#fileList img.move2trash { display:inline; margin:-8px 0; padding:16px 8px 16px 8px !important; float:right; }
#fileList a.action.delete {
position: absolute;
- right: 0;
+ right: 15px;
padding: 17px 14px;
}
diff --git a/apps/files/l10n/cs_CZ.js b/apps/files/l10n/cs_CZ.js
index e840fb43623..50965e0c1b9 100644
--- a/apps/files/l10n/cs_CZ.js
+++ b/apps/files/l10n/cs_CZ.js
@@ -91,6 +91,7 @@ OC.L10N.register(
"Maximum upload size" : "Maximální velikost pro odesílání",
"max. possible: " : "největší možná: ",
"Save" : "Uložit",
+ "Can not be edited from here due to insufficient permissions." : "Nelze odsud upravovat z důvodu nedostatečných oprávnění.",
"Settings" : "Nastavení",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Použijte tuto adresu pro <a href=\"%s\" target=\"_blank\">přístup k vašim souborům přes WebDAV</a>",
diff --git a/apps/files/l10n/cs_CZ.json b/apps/files/l10n/cs_CZ.json
index c1beb3f627a..118002a6e8d 100644
--- a/apps/files/l10n/cs_CZ.json
+++ b/apps/files/l10n/cs_CZ.json
@@ -89,6 +89,7 @@
"Maximum upload size" : "Maximální velikost pro odesílání",
"max. possible: " : "největší možná: ",
"Save" : "Uložit",
+ "Can not be edited from here due to insufficient permissions." : "Nelze odsud upravovat z důvodu nedostatečných oprávnění.",
"Settings" : "Nastavení",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Použijte tuto adresu pro <a href=\"%s\" target=\"_blank\">přístup k vašim souborům přes WebDAV</a>",
diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js
index 3d9df8f2601..5e741f26d21 100644
--- a/apps/files/l10n/de.js
+++ b/apps/files/l10n/de.js
@@ -91,6 +91,7 @@ OC.L10N.register(
"Maximum upload size" : "Maximale Upload-Größe",
"max. possible: " : "maximal möglich:",
"Save" : "Speichern",
+ "Can not be edited from here due to insufficient permissions." : "Aufgrund unzureichender Berechtigungen kann dies nicht von hier bearbeitet werden.",
"Settings" : "Einstellungen",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Benutze diese Adresse, um <a href=\"%s\" target=\"_blank\">über WebDAV auf Deine Dateien zuzugreifen</a>",
diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json
index 9e19268fe7a..2b27f3b2374 100644
--- a/apps/files/l10n/de.json
+++ b/apps/files/l10n/de.json
@@ -89,6 +89,7 @@
"Maximum upload size" : "Maximale Upload-Größe",
"max. possible: " : "maximal möglich:",
"Save" : "Speichern",
+ "Can not be edited from here due to insufficient permissions." : "Aufgrund unzureichender Berechtigungen kann dies nicht von hier bearbeitet werden.",
"Settings" : "Einstellungen",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Benutze diese Adresse, um <a href=\"%s\" target=\"_blank\">über WebDAV auf Deine Dateien zuzugreifen</a>",
diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js
index 93085d4670d..152ffcc0e20 100644
--- a/apps/files/l10n/de_DE.js
+++ b/apps/files/l10n/de_DE.js
@@ -91,6 +91,7 @@ OC.L10N.register(
"Maximum upload size" : "Maximale Upload-Größe",
"max. possible: " : "maximal möglich:",
"Save" : "Speichern",
+ "Can not be edited from here due to insufficient permissions." : "Aufgrund unzureichender Berechtigungen kann dies nicht von hier bearbeitet werden.",
"Settings" : "Einstellungen",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Benutzen Sie diese Adresse, um <a href=\"%s\" target=\"_blank\">über WebDAV auf Ihre Dateien zuzugreifen</a>",
diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json
index de7ba13200b..2c11f0183bb 100644
--- a/apps/files/l10n/de_DE.json
+++ b/apps/files/l10n/de_DE.json
@@ -89,6 +89,7 @@
"Maximum upload size" : "Maximale Upload-Größe",
"max. possible: " : "maximal möglich:",
"Save" : "Speichern",
+ "Can not be edited from here due to insufficient permissions." : "Aufgrund unzureichender Berechtigungen kann dies nicht von hier bearbeitet werden.",
"Settings" : "Einstellungen",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Benutzen Sie diese Adresse, um <a href=\"%s\" target=\"_blank\">über WebDAV auf Ihre Dateien zuzugreifen</a>",
diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js
index 3d74b3fad34..4341129a1c7 100644
--- a/apps/files/l10n/es.js
+++ b/apps/files/l10n/es.js
@@ -91,6 +91,7 @@ OC.L10N.register(
"Maximum upload size" : "Tamaño máximo de subida",
"max. possible: " : "máx. posible:",
"Save" : "Guardar",
+ "Can not be edited from here due to insufficient permissions." : "No se puede editar desde aquí por permisos insuficientes.",
"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 52a67ae8738..356c1da2169 100644
--- a/apps/files/l10n/es.json
+++ b/apps/files/l10n/es.json
@@ -89,6 +89,7 @@
"Maximum upload size" : "Tamaño máximo de subida",
"max. possible: " : "máx. posible:",
"Save" : "Guardar",
+ "Can not be edited from here due to insufficient permissions." : "No se puede editar desde aquí por permisos insuficientes.",
"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/fi_FI.js b/apps/files/l10n/fi_FI.js
index 1d9cad7b2b2..06975ffff0b 100644
--- a/apps/files/l10n/fi_FI.js
+++ b/apps/files/l10n/fi_FI.js
@@ -91,6 +91,7 @@ OC.L10N.register(
"Maximum upload size" : "Lähetettävän tiedoston suurin sallittu koko",
"max. possible: " : "suurin mahdollinen:",
"Save" : "Tallenna",
+ "Can not be edited from here due to insufficient permissions." : "Ei muokattavissa täällä puutteellisten oikeuksien vuoksi.",
"Settings" : "Asetukset",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Käytä tätä osoitetta <a href=\"%s\" target=\"_blank\">käyttääksesi tiedostojasi WebDAVin kautta</a>",
diff --git a/apps/files/l10n/fi_FI.json b/apps/files/l10n/fi_FI.json
index a3b4f490e46..e21d7566ed1 100644
--- a/apps/files/l10n/fi_FI.json
+++ b/apps/files/l10n/fi_FI.json
@@ -89,6 +89,7 @@
"Maximum upload size" : "Lähetettävän tiedoston suurin sallittu koko",
"max. possible: " : "suurin mahdollinen:",
"Save" : "Tallenna",
+ "Can not be edited from here due to insufficient permissions." : "Ei muokattavissa täällä puutteellisten oikeuksien vuoksi.",
"Settings" : "Asetukset",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Käytä tätä osoitetta <a href=\"%s\" target=\"_blank\">käyttääksesi tiedostojasi WebDAVin kautta</a>",
diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js
index cc54db6ca6d..5f68d603569 100644
--- a/apps/files/l10n/fr.js
+++ b/apps/files/l10n/fr.js
@@ -91,6 +91,7 @@ OC.L10N.register(
"Maximum upload size" : "Taille max. d'envoi",
"max. possible: " : "Max. possible :",
"Save" : "Sauvegarder",
+ "Can not be edited from here due to insufficient permissions." : "Ne peut être modifié ici à cause de permissions insufisantes.",
"Settings" : "Paramètres",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilisez cette adresse pour <a href=\"%s\" target=\"_blank\">accéder à vos fichiers par WebDAV</a>",
diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json
index d37e4dc4ade..a104d6d8424 100644
--- a/apps/files/l10n/fr.json
+++ b/apps/files/l10n/fr.json
@@ -89,6 +89,7 @@
"Maximum upload size" : "Taille max. d'envoi",
"max. possible: " : "Max. possible :",
"Save" : "Sauvegarder",
+ "Can not be edited from here due to insufficient permissions." : "Ne peut être modifié ici à cause de permissions insufisantes.",
"Settings" : "Paramètres",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilisez cette adresse pour <a href=\"%s\" target=\"_blank\">accéder à vos fichiers par WebDAV</a>",
diff --git a/apps/files/l10n/gl.js b/apps/files/l10n/gl.js
index b4b5e36f8e5..6371a1f1522 100644
--- a/apps/files/l10n/gl.js
+++ b/apps/files/l10n/gl.js
@@ -63,7 +63,7 @@ OC.L10N.register(
"File name cannot be empty." : "O nome de ficheiro non pode estar baleiro",
"Your storage is full, files can not be updated or synced anymore!" : "O seu espazo de almacenamento está cheo, non é posíbel actualizar ou sincronizar máis os ficheiros!",
"Your storage is almost full ({usedSpacePercent}%)" : "O seu espazo de almacenamento está case cheo ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A aplicación de cifrado está activada, mais as chaves non foron inicializadas, saia da sesión e volva a acceder de novo",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A aplicación de cifrado está activada, mais as chaves non foron preparadas, saia da sesión e volva a acceder de novo",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "A chave privada para a aplicación de cifrado non é correcta. Actualice o contrasinal da súa chave privada nos seus axustes persoais para recuperar o acceso aos seus ficheiros cifrados.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "O cifrado foi desactivado, mais os ficheiros están cifrados. Vaia á configuración persoal para descifrar os ficheiros.",
"_matches '{filter}'_::_match '{filter}'_" : ["coincidente con «{filter}»","coincidentes con «{filter}»"],
@@ -91,6 +91,7 @@ OC.L10N.register(
"Maximum upload size" : "Tamaño máximo do envío",
"max. possible: " : "máx. posíbel: ",
"Save" : "Gardar",
+ "Can not be edited from here due to insufficient permissions." : "Non pode ser editado desde aquí por mor de falta de permisos.",
"Settings" : "Axustes",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Empregue esta ligazón para <a href=\"%s\" target=\"_blank\">acceder aos seus ficheiros mediante WebDAV</a>",
diff --git a/apps/files/l10n/gl.json b/apps/files/l10n/gl.json
index d181da85256..570f5e22bac 100644
--- a/apps/files/l10n/gl.json
+++ b/apps/files/l10n/gl.json
@@ -61,7 +61,7 @@
"File name cannot be empty." : "O nome de ficheiro non pode estar baleiro",
"Your storage is full, files can not be updated or synced anymore!" : "O seu espazo de almacenamento está cheo, non é posíbel actualizar ou sincronizar máis os ficheiros!",
"Your storage is almost full ({usedSpacePercent}%)" : "O seu espazo de almacenamento está case cheo ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A aplicación de cifrado está activada, mais as chaves non foron inicializadas, saia da sesión e volva a acceder de novo",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A aplicación de cifrado está activada, mais as chaves non foron preparadas, saia da sesión e volva a acceder de novo",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "A chave privada para a aplicación de cifrado non é correcta. Actualice o contrasinal da súa chave privada nos seus axustes persoais para recuperar o acceso aos seus ficheiros cifrados.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "O cifrado foi desactivado, mais os ficheiros están cifrados. Vaia á configuración persoal para descifrar os ficheiros.",
"_matches '{filter}'_::_match '{filter}'_" : ["coincidente con «{filter}»","coincidentes con «{filter}»"],
@@ -89,6 +89,7 @@
"Maximum upload size" : "Tamaño máximo do envío",
"max. possible: " : "máx. posíbel: ",
"Save" : "Gardar",
+ "Can not be edited from here due to insufficient permissions." : "Non pode ser editado desde aquí por mor de falta de permisos.",
"Settings" : "Axustes",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Empregue esta ligazón para <a href=\"%s\" target=\"_blank\">acceder aos seus ficheiros mediante WebDAV</a>",
diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js
index 8783699c41b..8a9338e3bcf 100644
--- a/apps/files/l10n/it.js
+++ b/apps/files/l10n/it.js
@@ -91,6 +91,7 @@ OC.L10N.register(
"Maximum upload size" : "Dimensione massima caricamento",
"max. possible: " : "numero mass.: ",
"Save" : "Salva",
+ "Can not be edited from here due to insufficient permissions." : "Non può essere modificato da qui a causa della mancanza di permessi.",
"Settings" : "Impostazioni",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilizza questo indirizzo per <a href=\"%s\" target=\"_blank\">accedere ai tuoi file con WebDAV</a>",
diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json
index 010f739585d..dfa64cbd284 100644
--- a/apps/files/l10n/it.json
+++ b/apps/files/l10n/it.json
@@ -89,6 +89,7 @@
"Maximum upload size" : "Dimensione massima caricamento",
"max. possible: " : "numero mass.: ",
"Save" : "Salva",
+ "Can not be edited from here due to insufficient permissions." : "Non può essere modificato da qui a causa della mancanza di permessi.",
"Settings" : "Impostazioni",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilizza questo indirizzo per <a href=\"%s\" target=\"_blank\">accedere ai tuoi file con WebDAV</a>",
diff --git a/apps/files/l10n/nb_NO.js b/apps/files/l10n/nb_NO.js
index 247409f9671..f9c21ef3b13 100644
--- a/apps/files/l10n/nb_NO.js
+++ b/apps/files/l10n/nb_NO.js
@@ -70,6 +70,7 @@ OC.L10N.register(
"{dirs} and {files}" : "{dirs} og {files}",
"Favorited" : "Er favoritt",
"Favorite" : "Gjør til favoritt",
+ "An error occurred while trying to update the tags" : "En feil oppstod under oppdatering av taggene",
"A new file or folder has been <strong>created</strong>" : "En ny fil eller mappe ble <strong>opprettet</strong>",
"A file or folder has been <strong>changed</strong>" : "En fil eller mappe ble <strong>endret</strong>",
"A file or folder has been <strong>deleted</strong>" : "En fil eller mappe ble <strong>slettet</strong>",
diff --git a/apps/files/l10n/nb_NO.json b/apps/files/l10n/nb_NO.json
index 6be440c7d09..0eb72dbd2c7 100644
--- a/apps/files/l10n/nb_NO.json
+++ b/apps/files/l10n/nb_NO.json
@@ -68,6 +68,7 @@
"{dirs} and {files}" : "{dirs} og {files}",
"Favorited" : "Er favoritt",
"Favorite" : "Gjør til favoritt",
+ "An error occurred while trying to update the tags" : "En feil oppstod under oppdatering av taggene",
"A new file or folder has been <strong>created</strong>" : "En ny fil eller mappe ble <strong>opprettet</strong>",
"A file or folder has been <strong>changed</strong>" : "En fil eller mappe ble <strong>endret</strong>",
"A file or folder has been <strong>deleted</strong>" : "En fil eller mappe ble <strong>slettet</strong>",
diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js
index b525ee3ce4e..e6039698a66 100644
--- a/apps/files/l10n/nl.js
+++ b/apps/files/l10n/nl.js
@@ -91,6 +91,7 @@ OC.L10N.register(
"Maximum upload size" : "Maximale bestandsgrootte voor uploads",
"max. possible: " : "max. mogelijk: ",
"Save" : "Bewaren",
+ "Can not be edited from here due to insufficient permissions." : "Kan hier niet worden bewerkt wegens onvoldoende permissies.",
"Settings" : "Instellingen",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gebruik deze link <a href=\"%s\" target=\"_blank\">om uw bestanden via WebDAV te benaderen</a>",
diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json
index f2dd21e19e9..da7bfa12cf4 100644
--- a/apps/files/l10n/nl.json
+++ b/apps/files/l10n/nl.json
@@ -89,6 +89,7 @@
"Maximum upload size" : "Maximale bestandsgrootte voor uploads",
"max. possible: " : "max. mogelijk: ",
"Save" : "Bewaren",
+ "Can not be edited from here due to insufficient permissions." : "Kan hier niet worden bewerkt wegens onvoldoende permissies.",
"Settings" : "Instellingen",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gebruik deze link <a href=\"%s\" target=\"_blank\">om uw bestanden via WebDAV te benaderen</a>",
diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js
index bf29fc46d59..151da33a388 100644
--- a/apps/files/l10n/pt_BR.js
+++ b/apps/files/l10n/pt_BR.js
@@ -91,6 +91,7 @@ OC.L10N.register(
"Maximum upload size" : "Tamanho máximo para envio",
"max. possible: " : "max. possível:",
"Save" : "Salvar",
+ "Can not be edited from here due to insufficient permissions." : "Não pode ser editado a partir daqui devido a permissões insuficientes.",
"Settings" : "Configurações",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use este endereço <a href=\"%s\" target=\"_blank\">para ter acesso aos seus Arquivos via WebDAV</a>",
diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json
index 57fe2e8d5ed..6c390ed5137 100644
--- a/apps/files/l10n/pt_BR.json
+++ b/apps/files/l10n/pt_BR.json
@@ -89,6 +89,7 @@
"Maximum upload size" : "Tamanho máximo para envio",
"max. possible: " : "max. possível:",
"Save" : "Salvar",
+ "Can not be edited from here due to insufficient permissions." : "Não pode ser editado a partir daqui devido a permissões insuficientes.",
"Settings" : "Configurações",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use este endereço <a href=\"%s\" target=\"_blank\">para ter acesso aos seus Arquivos via WebDAV</a>",
diff --git a/apps/files/l10n/pt_PT.js b/apps/files/l10n/pt_PT.js
index db383fd70da..3bed206883c 100644
--- a/apps/files/l10n/pt_PT.js
+++ b/apps/files/l10n/pt_PT.js
@@ -91,6 +91,7 @@ OC.L10N.register(
"Maximum upload size" : "Tamanho máximo de envio",
"max. possible: " : "Máx. possível: ",
"Save" : "Guardar",
+ "Can not be edited from here due to insufficient permissions." : "Não pode ser editado a partir daqui devido a permissões insuficientes.",
"Settings" : "Definições",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilize esta ligação para <a href=\"%s\" target=\"_blank\">aceder aos seus ficheiros via WebDAV</a>",
diff --git a/apps/files/l10n/pt_PT.json b/apps/files/l10n/pt_PT.json
index d229427ceda..76c123492fb 100644
--- a/apps/files/l10n/pt_PT.json
+++ b/apps/files/l10n/pt_PT.json
@@ -89,6 +89,7 @@
"Maximum upload size" : "Tamanho máximo de envio",
"max. possible: " : "Máx. possível: ",
"Save" : "Guardar",
+ "Can not be edited from here due to insufficient permissions." : "Não pode ser editado a partir daqui devido a permissões insuficientes.",
"Settings" : "Definições",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilize esta ligação para <a href=\"%s\" target=\"_blank\">aceder aos seus ficheiros via WebDAV</a>",
diff --git a/apps/files/l10n/ro.js b/apps/files/l10n/ro.js
index 93a2e143f16..a6a0e4ad058 100644
--- a/apps/files/l10n/ro.js
+++ b/apps/files/l10n/ro.js
@@ -9,9 +9,9 @@ OC.L10N.register(
"Permission denied" : "Accesul interzis",
"The target folder has been moved or deleted." : "Dosarul țintă a fost mutat sau șters.",
"The name %s is already used in the folder %s. Please choose a different name." : "Numele %s este deja este folosit în dosarul %s. Te rog alege alt nume.",
- "Error when creating the file" : "Eroare la crearea fisierului",
- "Error when creating the folder" : "Eroare la crearea folderului",
- "Unable to set upload directory." : "Imposibil de a seta directorul pentru incărcare.",
+ "Error when creating the file" : "Eroare la crearea fișierului",
+ "Error when creating the folder" : "Eroare la crearea dosarului",
+ "Unable to set upload directory." : "Imposibil de a seta directorul pentru încărcare.",
"Invalid Token" : "Jeton Invalid",
"No file was uploaded. Unknown error" : "Niciun fișier nu a fost încărcat. Eroare necunoscută",
"There is no error, the file uploaded with success" : "Nu a apărut nici o eroare, fișierul a fost încărcat cu succes",
@@ -40,16 +40,16 @@ OC.L10N.register(
"Could not create folder" : "Nu s-a putut crea folderul",
"Rename" : "Redenumește",
"Delete" : "Șterge",
- "Disconnect storage" : "Stocare deconectata",
- "Unshare" : "Anulare",
+ "Disconnect storage" : "Deconectează stocarea",
+ "Unshare" : "Nu mai partaja",
"Download" : "Descarcă",
- "Select" : "Selectează",
+ "Select" : "Alege",
"Pending" : "În așteptare",
"Error moving file." : "Eroare la mutarea fișierului.",
"Error moving file" : "Eroare la mutarea fișierului",
"Error" : "Eroare",
- "Could not rename file" : "Nu s-a putut redenumi fisierul",
- "Error deleting file." : "Eroare la ștergerea fisierului.",
+ "Could not rename file" : "Nu s-a putut redenumi fișierul",
+ "Error deleting file." : "Eroare la ștergerea fișierului.",
"Name" : "Nume",
"Size" : "Mărime",
"Modified" : "Modificat",
@@ -67,13 +67,13 @@ OC.L10N.register(
"_matches '{filter}'_::_match '{filter}'_" : ["","",""],
"{dirs} and {files}" : "{dirs} și {files}",
"Favorite" : "Favorit",
- "A new file or folder has been <strong>created</strong>" : "Un nou fișier sau director a fost <strong>creat</strong>",
- "A file or folder has been <strong>changed</strong>" : "Un nou fișier sau director a fost <strong>modificat</strong>",
- "A file or folder has been <strong>deleted</strong>" : "Un nou fișier sau director a fost <strong>șters</strong>",
- "A file or folder has been <strong>restored</strong>" : "Un fișier sau director a fost <strong>restaurat</strong>",
+ "A new file or folder has been <strong>created</strong>" : "Un nou fișier sau dosar a fost <strong>creat</strong>",
+ "A file or folder has been <strong>changed</strong>" : "Un nou fișier sau dosar a fost <strong>modificat</strong>",
+ "A file or folder has been <strong>deleted</strong>" : "Un nou fișier sau dosar a fost <strong>șters</strong>",
+ "A file or folder has been <strong>restored</strong>" : "Un fișier sau dosar a fost <strong>restaurat</strong>",
"You created %1$s" : "Ai creat %1$s",
"%2$s created %1$s" : "%2$s a creat %1$s",
- "%1$s was created in a public folder" : "%1$s a fost creat în directorul public",
+ "%1$s was created in a public folder" : "%1$s a fost creat în dosarul public",
"You changed %1$s" : "Ai schimbat %1$s",
"%2$s changed %1$s" : "%2$s a schimbat %1$s",
"You deleted %1$s" : "Ai şters %1$s",
@@ -97,9 +97,10 @@ OC.L10N.register(
"Folder" : "Dosar",
"Upload" : "Încărcă",
"Cancel upload" : "Anulează încărcarea",
+ "No files yet" : "Niciun fișier încă",
"Upload too large" : "Fișierul încărcat este prea mare",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Fișierele pe care încerci să le încarci depășesc limita de încărcare maximă admisă pe acest server.",
"Files are being scanned, please wait." : "Fișierele sunt scanate, te rog așteaptă.",
- "Currently scanning" : "Acum scaneaza"
+ "Currently scanning" : "Acum scanează"
},
"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));");
diff --git a/apps/files/l10n/ro.json b/apps/files/l10n/ro.json
index 42242042988..fc44e5bf312 100644
--- a/apps/files/l10n/ro.json
+++ b/apps/files/l10n/ro.json
@@ -7,9 +7,9 @@
"Permission denied" : "Accesul interzis",
"The target folder has been moved or deleted." : "Dosarul țintă a fost mutat sau șters.",
"The name %s is already used in the folder %s. Please choose a different name." : "Numele %s este deja este folosit în dosarul %s. Te rog alege alt nume.",
- "Error when creating the file" : "Eroare la crearea fisierului",
- "Error when creating the folder" : "Eroare la crearea folderului",
- "Unable to set upload directory." : "Imposibil de a seta directorul pentru incărcare.",
+ "Error when creating the file" : "Eroare la crearea fișierului",
+ "Error when creating the folder" : "Eroare la crearea dosarului",
+ "Unable to set upload directory." : "Imposibil de a seta directorul pentru încărcare.",
"Invalid Token" : "Jeton Invalid",
"No file was uploaded. Unknown error" : "Niciun fișier nu a fost încărcat. Eroare necunoscută",
"There is no error, the file uploaded with success" : "Nu a apărut nici o eroare, fișierul a fost încărcat cu succes",
@@ -38,16 +38,16 @@
"Could not create folder" : "Nu s-a putut crea folderul",
"Rename" : "Redenumește",
"Delete" : "Șterge",
- "Disconnect storage" : "Stocare deconectata",
- "Unshare" : "Anulare",
+ "Disconnect storage" : "Deconectează stocarea",
+ "Unshare" : "Nu mai partaja",
"Download" : "Descarcă",
- "Select" : "Selectează",
+ "Select" : "Alege",
"Pending" : "În așteptare",
"Error moving file." : "Eroare la mutarea fișierului.",
"Error moving file" : "Eroare la mutarea fișierului",
"Error" : "Eroare",
- "Could not rename file" : "Nu s-a putut redenumi fisierul",
- "Error deleting file." : "Eroare la ștergerea fisierului.",
+ "Could not rename file" : "Nu s-a putut redenumi fișierul",
+ "Error deleting file." : "Eroare la ștergerea fișierului.",
"Name" : "Nume",
"Size" : "Mărime",
"Modified" : "Modificat",
@@ -65,13 +65,13 @@
"_matches '{filter}'_::_match '{filter}'_" : ["","",""],
"{dirs} and {files}" : "{dirs} și {files}",
"Favorite" : "Favorit",
- "A new file or folder has been <strong>created</strong>" : "Un nou fișier sau director a fost <strong>creat</strong>",
- "A file or folder has been <strong>changed</strong>" : "Un nou fișier sau director a fost <strong>modificat</strong>",
- "A file or folder has been <strong>deleted</strong>" : "Un nou fișier sau director a fost <strong>șters</strong>",
- "A file or folder has been <strong>restored</strong>" : "Un fișier sau director a fost <strong>restaurat</strong>",
+ "A new file or folder has been <strong>created</strong>" : "Un nou fișier sau dosar a fost <strong>creat</strong>",
+ "A file or folder has been <strong>changed</strong>" : "Un nou fișier sau dosar a fost <strong>modificat</strong>",
+ "A file or folder has been <strong>deleted</strong>" : "Un nou fișier sau dosar a fost <strong>șters</strong>",
+ "A file or folder has been <strong>restored</strong>" : "Un fișier sau dosar a fost <strong>restaurat</strong>",
"You created %1$s" : "Ai creat %1$s",
"%2$s created %1$s" : "%2$s a creat %1$s",
- "%1$s was created in a public folder" : "%1$s a fost creat în directorul public",
+ "%1$s was created in a public folder" : "%1$s a fost creat în dosarul public",
"You changed %1$s" : "Ai schimbat %1$s",
"%2$s changed %1$s" : "%2$s a schimbat %1$s",
"You deleted %1$s" : "Ai şters %1$s",
@@ -95,9 +95,10 @@
"Folder" : "Dosar",
"Upload" : "Încărcă",
"Cancel upload" : "Anulează încărcarea",
+ "No files yet" : "Niciun fișier încă",
"Upload too large" : "Fișierul încărcat este prea mare",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Fișierele pe care încerci să le încarci depășesc limita de încărcare maximă admisă pe acest server.",
"Files are being scanned, please wait." : "Fișierele sunt scanate, te rog așteaptă.",
- "Currently scanning" : "Acum scaneaza"
+ "Currently scanning" : "Acum scanează"
},"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"
} \ No newline at end of file
diff --git a/apps/files/l10n/ru.js b/apps/files/l10n/ru.js
index 162910ca152..b81df425d6c 100644
--- a/apps/files/l10n/ru.js
+++ b/apps/files/l10n/ru.js
@@ -91,6 +91,7 @@ OC.L10N.register(
"Maximum upload size" : "Максимальный размер загружаемого файла",
"max. possible: " : "макс. возможно: ",
"Save" : "Сохранить",
+ "Can not be edited from here due to insufficient permissions." : "Невозможно отредактировать здесь из-за нехватки полномочий.",
"Settings" : "Настройки",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Используйте этот адрес для <a href=\"%s\" target=\"_blank\">доступа файлам через WebDAV</a>",
diff --git a/apps/files/l10n/ru.json b/apps/files/l10n/ru.json
index 40350d08bc2..6292bb28d14 100644
--- a/apps/files/l10n/ru.json
+++ b/apps/files/l10n/ru.json
@@ -89,6 +89,7 @@
"Maximum upload size" : "Максимальный размер загружаемого файла",
"max. possible: " : "макс. возможно: ",
"Save" : "Сохранить",
+ "Can not be edited from here due to insufficient permissions." : "Невозможно отредактировать здесь из-за нехватки полномочий.",
"Settings" : "Настройки",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Используйте этот адрес для <a href=\"%s\" target=\"_blank\">доступа файлам через WebDAV</a>",
diff --git a/apps/files/l10n/sr.js b/apps/files/l10n/sr.js
index 4a2fa8950c7..790d95f78a0 100644
--- a/apps/files/l10n/sr.js
+++ b/apps/files/l10n/sr.js
@@ -91,6 +91,7 @@ OC.L10N.register(
"Maximum upload size" : "Највећа величина отпремања",
"max. possible: " : "највише могуће:",
"Save" : "Сачувај",
+ "Can not be edited from here due to insufficient permissions." : "Не може да се мења одавде због недостатка права.",
"Settings" : "Поставке",
"WebDAV" : "ВебДАВ",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Користите ову адресу да <a href=\"%s\" target=\"_blank\"> приступите фајловима преко ВебДАВ-а</a>",
diff --git a/apps/files/l10n/sr.json b/apps/files/l10n/sr.json
index dee14e6218e..bb2e392a3f1 100644
--- a/apps/files/l10n/sr.json
+++ b/apps/files/l10n/sr.json
@@ -89,6 +89,7 @@
"Maximum upload size" : "Највећа величина отпремања",
"max. possible: " : "највише могуће:",
"Save" : "Сачувај",
+ "Can not be edited from here due to insufficient permissions." : "Не може да се мења одавде због недостатка права.",
"Settings" : "Поставке",
"WebDAV" : "ВебДАВ",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Користите ову адресу да <a href=\"%s\" target=\"_blank\"> приступите фајловима преко ВебДАВ-а</a>",
diff --git a/apps/files/l10n/tr.js b/apps/files/l10n/tr.js
index 06196181fc4..4dc78965996 100644
--- a/apps/files/l10n/tr.js
+++ b/apps/files/l10n/tr.js
@@ -91,6 +91,7 @@ OC.L10N.register(
"Maximum upload size" : "Azami yükleme boyutu",
"max. possible: " : "mümkün olan en fazla: ",
"Save" : "Kaydet",
+ "Can not be edited from here due to insufficient permissions." : "Yetersiz izinler buradan düzenlenemez.",
"Settings" : "Ayarlar",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "<a href=\"%s\" target=\"_blank\">Dosyalarınıza WebDAV aracılığıyla erişmek için</a> bu adresi kullanın",
diff --git a/apps/files/l10n/tr.json b/apps/files/l10n/tr.json
index b3d3adfba23..693edb782e5 100644
--- a/apps/files/l10n/tr.json
+++ b/apps/files/l10n/tr.json
@@ -89,6 +89,7 @@
"Maximum upload size" : "Azami yükleme boyutu",
"max. possible: " : "mümkün olan en fazla: ",
"Save" : "Kaydet",
+ "Can not be edited from here due to insufficient permissions." : "Yetersiz izinler buradan düzenlenemez.",
"Settings" : "Ayarlar",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "<a href=\"%s\" target=\"_blank\">Dosyalarınıza WebDAV aracılığıyla erişmek için</a> bu adresi kullanın",
diff --git a/apps/files/l10n/uk.js b/apps/files/l10n/uk.js
index cc4f89fe7cb..3e83db2aa58 100644
--- a/apps/files/l10n/uk.js
+++ b/apps/files/l10n/uk.js
@@ -4,7 +4,7 @@ OC.L10N.register(
"Storage not available" : "Сховище не доступне",
"Storage invalid" : "Неправильне сховище",
"Unknown error" : "Невідома помилка",
- "Could not move %s - File with this name already exists" : "Не вдалося перемістити %s - Файл з таким ім'ям вже існує",
+ "Could not move %s - File with this name already exists" : "Не вдалося перемістити %s - файл з таким ім'ям вже існує",
"Could not move %s" : "Не вдалося перемістити %s",
"Permission denied" : "Доступ заборонено",
"The target folder has been moved or deleted." : "Теку призначення було переміщено або видалено.",
@@ -12,15 +12,15 @@ OC.L10N.register(
"Error when creating the file" : "Помилка створення файлу",
"Error when creating the folder" : "Помилка створення теки",
"Unable to set upload directory." : "Не вдалося встановити каталог завантаження.",
- "Invalid Token" : "Невірний Маркер",
- "No file was uploaded. Unknown error" : "Не завантажено жодного файлу. Невідома помилка",
- "There is no error, the file uploaded with success" : "Файл успішно вивантажено без помилок.",
+ "Invalid Token" : "Неприпустимий маркер",
+ "No file was uploaded. Unknown error" : "Файл не був завантажений. Невідома помилка",
+ "There is no error, the file uploaded with success" : "Файл успішно завантажений. Помилок немає.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Розмір звантаження перевищує upload_max_filesize параметра в php.ini: ",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Розмір відвантаженого файлу перевищує директиву MAX_FILE_SIZE вказану в HTML формі",
- "The uploaded file was only partially uploaded" : "Файл відвантажено лише частково",
- "No file was uploaded" : "Не відвантажено жодного файлу",
+ "The uploaded file was only partially uploaded" : "Файл завантажений лише частково",
+ "No file was uploaded" : "Не завантажено жодного файлу",
"Missing a temporary folder" : "Відсутній тимчасовий каталог",
- "Failed to write to disk" : "Невдалося записати на диск",
+ "Failed to write to disk" : "Помилка запису на диск",
"Not enough storage available" : "Місця більше немає",
"Upload failed. Could not find uploaded file" : "Завантаження не вдалося. Неможливо знайти завантажений файл.",
"Upload failed. Could not get file info." : "Завантаження не вдалося. Неможливо отримати інформацію про файл.",
@@ -91,6 +91,7 @@ OC.L10N.register(
"Maximum upload size" : "Максимальний розмір відвантажень",
"max. possible: " : "макс. можливе:",
"Save" : "Зберегти",
+ "Can not be edited from here due to insufficient permissions." : "Неможливо відредагувати тут через брак повноважень.",
"Settings" : "Налаштування",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Для доступу до файлів через WebDAV використовуйте <a href=\"%s\" target=\"_blank\">це посилання</a>",
@@ -110,6 +111,6 @@ OC.L10N.register(
"Files are being scanned, please wait." : "Файли скануються, зачекайте, будь-ласка.",
"Currently scanning" : "Триває перевірка",
"No favorites" : "Немає обраних",
- "Files and folders you mark as favorite will show up here" : "Файли і папки, які ви помітити як улюблені з'явиться тут"
+ "Files and folders you mark as favorite will show up here" : "Файли і папки, які ви помітили як улюблені з’являться тут"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files/l10n/uk.json b/apps/files/l10n/uk.json
index 2229f97ef77..cf4eb0eb5cb 100644
--- a/apps/files/l10n/uk.json
+++ b/apps/files/l10n/uk.json
@@ -2,7 +2,7 @@
"Storage not available" : "Сховище не доступне",
"Storage invalid" : "Неправильне сховище",
"Unknown error" : "Невідома помилка",
- "Could not move %s - File with this name already exists" : "Не вдалося перемістити %s - Файл з таким ім'ям вже існує",
+ "Could not move %s - File with this name already exists" : "Не вдалося перемістити %s - файл з таким ім'ям вже існує",
"Could not move %s" : "Не вдалося перемістити %s",
"Permission denied" : "Доступ заборонено",
"The target folder has been moved or deleted." : "Теку призначення було переміщено або видалено.",
@@ -10,15 +10,15 @@
"Error when creating the file" : "Помилка створення файлу",
"Error when creating the folder" : "Помилка створення теки",
"Unable to set upload directory." : "Не вдалося встановити каталог завантаження.",
- "Invalid Token" : "Невірний Маркер",
- "No file was uploaded. Unknown error" : "Не завантажено жодного файлу. Невідома помилка",
- "There is no error, the file uploaded with success" : "Файл успішно вивантажено без помилок.",
+ "Invalid Token" : "Неприпустимий маркер",
+ "No file was uploaded. Unknown error" : "Файл не був завантажений. Невідома помилка",
+ "There is no error, the file uploaded with success" : "Файл успішно завантажений. Помилок немає.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Розмір звантаження перевищує upload_max_filesize параметра в php.ini: ",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Розмір відвантаженого файлу перевищує директиву MAX_FILE_SIZE вказану в HTML формі",
- "The uploaded file was only partially uploaded" : "Файл відвантажено лише частково",
- "No file was uploaded" : "Не відвантажено жодного файлу",
+ "The uploaded file was only partially uploaded" : "Файл завантажений лише частково",
+ "No file was uploaded" : "Не завантажено жодного файлу",
"Missing a temporary folder" : "Відсутній тимчасовий каталог",
- "Failed to write to disk" : "Невдалося записати на диск",
+ "Failed to write to disk" : "Помилка запису на диск",
"Not enough storage available" : "Місця більше немає",
"Upload failed. Could not find uploaded file" : "Завантаження не вдалося. Неможливо знайти завантажений файл.",
"Upload failed. Could not get file info." : "Завантаження не вдалося. Неможливо отримати інформацію про файл.",
@@ -89,6 +89,7 @@
"Maximum upload size" : "Максимальний розмір відвантажень",
"max. possible: " : "макс. можливе:",
"Save" : "Зберегти",
+ "Can not be edited from here due to insufficient permissions." : "Неможливо відредагувати тут через брак повноважень.",
"Settings" : "Налаштування",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Для доступу до файлів через WebDAV використовуйте <a href=\"%s\" target=\"_blank\">це посилання</a>",
@@ -108,6 +109,6 @@
"Files are being scanned, please wait." : "Файли скануються, зачекайте, будь-ласка.",
"Currently scanning" : "Триває перевірка",
"No favorites" : "Немає обраних",
- "Files and folders you mark as favorite will show up here" : "Файли і папки, які ви помітити як улюблені з'явиться тут"
+ "Files and folders you mark as favorite will show up here" : "Файли і папки, які ви помітили як улюблені з’являться тут"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files_encryption/l10n/fr.js b/apps/files_encryption/l10n/fr.js
index 64a600500eb..09ddd64cb40 100644
--- a/apps/files_encryption/l10n/fr.js
+++ b/apps/files_encryption/l10n/fr.js
@@ -21,7 +21,7 @@ OC.L10N.register(
"Could not update file recovery" : "Impossible de mettre à jour les fichiers de récupération",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "L'application de chiffrement n'est pas initialisée ! Peut-être que cette application a été réactivée pendant votre session. Veuillez essayer de vous déconnecter et ensuite de vous reconnecter pour initialiser l'application de chiffrement.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée n'est pas valide ! Votre mot de passe a probablement été modifié hors de %s (ex. votre annuaire d'entreprise). Vous pouvez mettre à jour le mot de passe de votre clef privée dans les paramètres personnels pour pouvoir récupérer l'accès à vos fichiers chiffrés.",
- "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de déchiffrer ce fichier, il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire de ce fichier de le repartager avec vous.",
+ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de déchiffrer ce fichier : il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire du fichier de le partager à nouveau avec vous.",
"Unknown error. Please check your system settings or contact your administrator" : "Erreur inconnue. Veuillez vérifier vos paramètres système ou contacter un administrateur.",
"Initial encryption started... This can take some time. Please wait." : "Chiffrement initial démarré... Cela peut prendre un certain temps. Veuillez patienter.",
"Initial encryption running... Please try again later." : "Chiffrement initial en cours... Veuillez ré-essayer ultérieurement.",
diff --git a/apps/files_encryption/l10n/fr.json b/apps/files_encryption/l10n/fr.json
index 1c64ab1f3c0..3b439872250 100644
--- a/apps/files_encryption/l10n/fr.json
+++ b/apps/files_encryption/l10n/fr.json
@@ -19,7 +19,7 @@
"Could not update file recovery" : "Impossible de mettre à jour les fichiers de récupération",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "L'application de chiffrement n'est pas initialisée ! Peut-être que cette application a été réactivée pendant votre session. Veuillez essayer de vous déconnecter et ensuite de vous reconnecter pour initialiser l'application de chiffrement.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée n'est pas valide ! Votre mot de passe a probablement été modifié hors de %s (ex. votre annuaire d'entreprise). Vous pouvez mettre à jour le mot de passe de votre clef privée dans les paramètres personnels pour pouvoir récupérer l'accès à vos fichiers chiffrés.",
- "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de déchiffrer ce fichier, il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire de ce fichier de le repartager avec vous.",
+ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de déchiffrer ce fichier : il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire du fichier de le partager à nouveau avec vous.",
"Unknown error. Please check your system settings or contact your administrator" : "Erreur inconnue. Veuillez vérifier vos paramètres système ou contacter un administrateur.",
"Initial encryption started... This can take some time. Please wait." : "Chiffrement initial démarré... Cela peut prendre un certain temps. Veuillez patienter.",
"Initial encryption running... Please try again later." : "Chiffrement initial en cours... Veuillez ré-essayer ultérieurement.",
diff --git a/apps/files_encryption/l10n/gl.js b/apps/files_encryption/l10n/gl.js
index ade3cd6a2f8..bd44dc65bc7 100644
--- a/apps/files_encryption/l10n/gl.js
+++ b/apps/files_encryption/l10n/gl.js
@@ -30,7 +30,7 @@ OC.L10N.register(
"Following users are not set up for encryption:" : "Os seguintes usuarios non teñen configuración para o cifrado:",
"Go directly to your %spersonal settings%s." : "Vaia directamente aos seus %saxustes persoais%s.",
"Server-side Encryption" : "Cifrado na parte do servidor",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A aplicación de cifrado está activada, mais as chaves non foron inicializadas, saia da sesión e volva a acceder de novo",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A aplicación de cifrado está activada, mais as chaves non foron preparadas, saia da sesión e volva a acceder de novo",
"Enable recovery key (allow to recover users files in case of password loss):" : "Activar a chave de recuperación (permitirá recuperar os ficheiros dos usuarios no caso de perda do contrasinal):",
"Recovery key password" : "Contrasinal da chave de recuperación",
"Repeat Recovery key password" : "Repita o contrasinal da chave de recuperación",
diff --git a/apps/files_encryption/l10n/gl.json b/apps/files_encryption/l10n/gl.json
index 27f4996e153..a1a8e606f1c 100644
--- a/apps/files_encryption/l10n/gl.json
+++ b/apps/files_encryption/l10n/gl.json
@@ -28,7 +28,7 @@
"Following users are not set up for encryption:" : "Os seguintes usuarios non teñen configuración para o cifrado:",
"Go directly to your %spersonal settings%s." : "Vaia directamente aos seus %saxustes persoais%s.",
"Server-side Encryption" : "Cifrado na parte do servidor",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A aplicación de cifrado está activada, mais as chaves non foron inicializadas, saia da sesión e volva a acceder de novo",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A aplicación de cifrado está activada, mais as chaves non foron preparadas, saia da sesión e volva a acceder de novo",
"Enable recovery key (allow to recover users files in case of password loss):" : "Activar a chave de recuperación (permitirá recuperar os ficheiros dos usuarios no caso de perda do contrasinal):",
"Recovery key password" : "Contrasinal da chave de recuperación",
"Repeat Recovery key password" : "Repita o contrasinal da chave de recuperación",
diff --git a/apps/files_encryption/l10n/sr.js b/apps/files_encryption/l10n/sr.js
index 51070c207a5..dec2970e359 100644
--- a/apps/files_encryption/l10n/sr.js
+++ b/apps/files_encryption/l10n/sr.js
@@ -25,7 +25,8 @@ OC.L10N.register(
"Unknown error. Please check your system settings or contact your administrator" : "Непозната грешка. Проверите поставке вашег система или контактирајте администратора.",
"Initial encryption started... This can take some time. Please wait." : "Почетно шифровање је покренуто... Ово може потрајати. Молим, сачекајте.",
"Initial encryption running... Please try again later." : "Почетно шифровање ради... Покушајте касније.",
- "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Проверите да је „OpenSSL“ заједно са „PHP“ проширењем, укључен и прописно подешен. За сада, шифровање је искључено.",
+ "Missing requirements." : "Захтеви нису испуњени.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Проверите да је ОпенССЛ заједно са ПХП проширењем, укључен и прописно подешен. За сада, шифровање је искључено.",
"Following users are not set up for encryption:" : "Следећи корисници нису подешени за шифровање:",
"Go directly to your %spersonal settings%s." : "Идите право на ваше %sличне поставке%s.",
"Server-side Encryption" : "Шифровање на страни сервера",
@@ -41,6 +42,7 @@ OC.L10N.register(
"Repeat New Recovery key password" : "Поновите лозинку кључа опоравка",
"Change Password" : "Измени лозинку",
"Your private key password no longer matches your log-in password." : "Лозинка вашег личног кључа више није иста као ваша лозинка за пријаву.",
+ "Set your old private key password to your current log-in password:" : "Промените ваш стари приватни кључ-лозинку у вашу тренутну улазну лозинку:",
" If you don't remember your old password you can ask your administrator to recover your files." : "Ако се не сећате старе лозинке, можете затражити од администратора да опорави ваше фајлове.",
"Old log-in password" : "Стара лозинка за пријаву",
"Current log-in password" : "Тренутна лозинка за пријаву",
diff --git a/apps/files_encryption/l10n/sr.json b/apps/files_encryption/l10n/sr.json
index 125302e9531..6c39d417e38 100644
--- a/apps/files_encryption/l10n/sr.json
+++ b/apps/files_encryption/l10n/sr.json
@@ -23,7 +23,8 @@
"Unknown error. Please check your system settings or contact your administrator" : "Непозната грешка. Проверите поставке вашег система или контактирајте администратора.",
"Initial encryption started... This can take some time. Please wait." : "Почетно шифровање је покренуто... Ово може потрајати. Молим, сачекајте.",
"Initial encryption running... Please try again later." : "Почетно шифровање ради... Покушајте касније.",
- "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Проверите да је „OpenSSL“ заједно са „PHP“ проширењем, укључен и прописно подешен. За сада, шифровање је искључено.",
+ "Missing requirements." : "Захтеви нису испуњени.",
+ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Проверите да је ОпенССЛ заједно са ПХП проширењем, укључен и прописно подешен. За сада, шифровање је искључено.",
"Following users are not set up for encryption:" : "Следећи корисници нису подешени за шифровање:",
"Go directly to your %spersonal settings%s." : "Идите право на ваше %sличне поставке%s.",
"Server-side Encryption" : "Шифровање на страни сервера",
@@ -39,6 +40,7 @@
"Repeat New Recovery key password" : "Поновите лозинку кључа опоравка",
"Change Password" : "Измени лозинку",
"Your private key password no longer matches your log-in password." : "Лозинка вашег личног кључа више није иста као ваша лозинка за пријаву.",
+ "Set your old private key password to your current log-in password:" : "Промените ваш стари приватни кључ-лозинку у вашу тренутну улазну лозинку:",
" If you don't remember your old password you can ask your administrator to recover your files." : "Ако се не сећате старе лозинке, можете затражити од администратора да опорави ваше фајлове.",
"Old log-in password" : "Стара лозинка за пријаву",
"Current log-in password" : "Тренутна лозинка за пријаву",
diff --git a/apps/files_external/3rdparty/composer.lock b/apps/files_external/3rdparty/composer.lock
index 3da75b2a900..0a7dcf89876 100644
--- a/apps/files_external/3rdparty/composer.lock
+++ b/apps/files_external/3rdparty/composer.lock
@@ -12,12 +12,12 @@
"source": {
"type": "git",
"url": "https://github.com/icewind1991/SMB.git",
- "reference": "ededbfbaa3d7124ce8d4b6c119cd225fa342916d"
+ "reference": "ef4b128143b7272e97665b84862d77faabf7d36d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/icewind1991/SMB/zipball/ededbfbaa3d7124ce8d4b6c119cd225fa342916d",
- "reference": "ededbfbaa3d7124ce8d4b6c119cd225fa342916d",
+ "url": "https://api.github.com/repos/icewind1991/SMB/zipball/ef4b128143b7272e97665b84862d77faabf7d36d",
+ "reference": "ef4b128143b7272e97665b84862d77faabf7d36d",
"shasum": ""
},
"require": {
@@ -45,7 +45,7 @@
}
],
"description": "php wrapper for smbclient and libsmbclient-php",
- "time": "2015-02-10 16:37:37"
+ "time": "2015-03-13 12:17:14"
},
{
"name": "icewind/streams",
diff --git a/apps/files_external/3rdparty/composer/installed.json b/apps/files_external/3rdparty/composer/installed.json
index 03bad8abf36..eae04e877d2 100644
--- a/apps/files_external/3rdparty/composer/installed.json
+++ b/apps/files_external/3rdparty/composer/installed.json
@@ -48,12 +48,12 @@
"source": {
"type": "git",
"url": "https://github.com/icewind1991/SMB.git",
- "reference": "ededbfbaa3d7124ce8d4b6c119cd225fa342916d"
+ "reference": "ef4b128143b7272e97665b84862d77faabf7d36d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/icewind1991/SMB/zipball/ededbfbaa3d7124ce8d4b6c119cd225fa342916d",
- "reference": "ededbfbaa3d7124ce8d4b6c119cd225fa342916d",
+ "url": "https://api.github.com/repos/icewind1991/SMB/zipball/ef4b128143b7272e97665b84862d77faabf7d36d",
+ "reference": "ef4b128143b7272e97665b84862d77faabf7d36d",
"shasum": ""
},
"require": {
@@ -63,7 +63,7 @@
"require-dev": {
"satooshi/php-coveralls": "dev-master"
},
- "time": "2015-02-10 16:37:37",
+ "time": "2015-03-13 12:17:14",
"type": "library",
"installation-source": "source",
"autoload": {
diff --git a/apps/files_external/3rdparty/icewind/smb/.gitignore b/apps/files_external/3rdparty/icewind/smb/.gitignore
index 3ce5adbbde5..4f389129e2d 100644
--- a/apps/files_external/3rdparty/icewind/smb/.gitignore
+++ b/apps/files_external/3rdparty/icewind/smb/.gitignore
@@ -1,2 +1,3 @@
.idea
vendor
+composer.lock
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Parser.php b/apps/files_external/3rdparty/icewind/smb/src/Parser.php
index 645678d9855..381c4917a92 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Parser.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Parser.php
@@ -17,15 +17,15 @@ use Icewind\SMB\Exception\NotFoundException;
class Parser {
/**
- * @var string
+ * @var \Icewind\SMB\TimeZoneProvider
*/
- protected $timeZone;
+ protected $timeZoneProvider;
/**
- * @param string $timeZone
+ * @param \Icewind\SMB\TimeZoneProvider $timeZoneProvider
*/
- public function __construct($timeZone) {
- $this->timeZone = $timeZone;
+ public function __construct(TimeZoneProvider $timeZoneProvider) {
+ $this->timeZoneProvider = $timeZoneProvider;
}
public function checkForError($output, $path) {
@@ -120,7 +120,7 @@ class Parser {
list(, $name, $mode, $size, $time) = $matches;
if ($name !== '.' and $name !== '..') {
$mode = $this->parseMode($mode);
- $time = strtotime($time . ' ' . $this->timeZone);
+ $time = strtotime($time . ' ' . $this->timeZoneProvider->get());
$content[] = new FileInfo($basePath . '/' . $name, $name, $size, $time, $mode);
}
}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Share.php b/apps/files_external/3rdparty/icewind/smb/src/Share.php
index 5c48b1702fa..025a84380a1 100644
--- a/apps/files_external/3rdparty/icewind/smb/src/Share.php
+++ b/apps/files_external/3rdparty/icewind/smb/src/Share.php
@@ -38,8 +38,6 @@ class Share implements IShare {
*/
protected $parser;
- private $serverTimezone;
-
/**
* @param Server $server
* @param string $name
@@ -47,7 +45,7 @@ class Share implements IShare {
public function __construct($server, $name) {
$this->server = $server;
$this->name = $name;
- $this->parser = new Parser($this->server->getTimeZone());
+ $this->parser = new Parser(new TimeZoneProvider($this->server->getHost()));
}
/**
@@ -374,6 +372,9 @@ class Share implements IShare {
* @return string
*/
protected function escapePath($path) {
+ if ($path === '/') {
+ $path = '';
+ }
$path = str_replace('/', '\\', $path);
$path = str_replace('"', '^"', $path);
return '"' . $path . '"';
diff --git a/apps/files_external/3rdparty/icewind/smb/src/TimeZoneProvider.php b/apps/files_external/3rdparty/icewind/smb/src/TimeZoneProvider.php
new file mode 100644
index 00000000000..22406a4f956
--- /dev/null
+++ b/apps/files_external/3rdparty/icewind/smb/src/TimeZoneProvider.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Copyright (c) 2015 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Licensed under the MIT license:
+ * http://opensource.org/licenses/MIT
+ */
+
+namespace Icewind\SMB;
+
+class TimeZoneProvider {
+ /**
+ * @var string
+ */
+ private $host;
+
+ /**
+ * @var string
+ */
+ private $timeZone;
+
+ /**
+ * @param string $host
+ */
+ function __construct($host) {
+ $this->host = $host;
+ }
+
+ public function get() {
+ if (!$this->timeZone) {
+ $command = 'net time zone -S ' . escapeshellarg($this->host);
+ $this->timeZone = exec($command);
+ }
+ return $this->timeZone;
+ }
+}
diff --git a/apps/files_external/3rdparty/icewind/smb/tests/AbstractShare.php b/apps/files_external/3rdparty/icewind/smb/tests/AbstractShare.php
index 117fff1ca19..f8ccb7119ed 100644
--- a/apps/files_external/3rdparty/icewind/smb/tests/AbstractShare.php
+++ b/apps/files_external/3rdparty/icewind/smb/tests/AbstractShare.php
@@ -331,7 +331,7 @@ abstract class AbstractShare extends \PHPUnit_Framework_TestCase {
$this->share->put($this->getTextFile(), $this->root . '/foo.txt');
$dir = $this->share->dir($this->root);
$mtime = $dir[0]->getMTime();
- $this->assertTrue(abs($now - $mtime) <= 1, 'Modified time differs by ' . abs($now - $mtime) . ' seconds');
+ $this->assertTrue(abs($now - $mtime) <= 2, 'Modified time differs by ' . abs($now - $mtime) . ' seconds');
$this->share->del($this->root . '/foo.txt');
}
@@ -531,4 +531,9 @@ abstract class AbstractShare extends \PHPUnit_Framework_TestCase {
$this->assertCount(1, $content);
$this->assertEquals($name, $content[0]->getName());
}
+
+ public function testStatRoot() {
+ $info = $this->share->stat('/');
+ $this->assertInstanceOf('\Icewind\SMB\IFileInfo', $info);
+ }
}
diff --git a/apps/files_external/3rdparty/icewind/smb/tests/Parser.php b/apps/files_external/3rdparty/icewind/smb/tests/Parser.php
index 0dd06d6af33..5caa048a664 100644
--- a/apps/files_external/3rdparty/icewind/smb/tests/Parser.php
+++ b/apps/files_external/3rdparty/icewind/smb/tests/Parser.php
@@ -25,10 +25,24 @@ class Parser extends \PHPUnit_Framework_TestCase {
}
/**
+ * @param string $timeZone
+ * @return \Icewind\SMB\TimeZoneProvider
+ */
+ private function getTimeZoneProvider($timeZone) {
+ $mock = $this->getMockBuilder('\Icewind\SMB\TimeZoneProvider')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $mock->expects($this->any())
+ ->method('get')
+ ->will($this->returnValue($timeZone));
+ return $mock;
+ }
+
+ /**
* @dataProvider modeProvider
*/
public function testParseMode($string, $mode) {
- $parser = new \Icewind\SMB\Parser('UTC');
+ $parser = new \Icewind\SMB\Parser($this->getTimeZoneProvider('UTC'));
$this->assertEquals($mode, $parser->parseMode($string), 'Failed parsing ' . $string);
}
@@ -48,7 +62,8 @@ class Parser extends \PHPUnit_Framework_TestCase {
'mtime' => strtotime('12 Oct 2013 19:05:58 CEST'),
'mode' => FileInfo::MODE_NORMAL,
'size' => 29634
- ))
+ )
+ )
);
}
@@ -56,7 +71,7 @@ class Parser extends \PHPUnit_Framework_TestCase {
* @dataProvider statProvider
*/
public function testStat($output, $stat) {
- $parser = new \Icewind\SMB\Parser('UTC');
+ $parser = new \Icewind\SMB\Parser($this->getTimeZoneProvider('UTC'));
$this->assertEquals($stat, $parser->parseStat($output));
}
@@ -71,7 +86,8 @@ class Parser extends \PHPUnit_Framework_TestCase {
' 62536 blocks of size 8388608. 57113 blocks available'
),
array(
- new FileInfo('/c.pdf', 'c.pdf', 29634, strtotime('12 Oct 2013 19:05:58 CEST'), FileInfo::MODE_NORMAL)
+ new FileInfo('/c.pdf', 'c.pdf', 29634, strtotime('12 Oct 2013 19:05:58 CEST'),
+ FileInfo::MODE_NORMAL)
)
)
);
@@ -81,7 +97,7 @@ class Parser extends \PHPUnit_Framework_TestCase {
* @dataProvider dirProvider
*/
public function testDir($output, $dir) {
- $parser = new \Icewind\SMB\Parser('CEST');
+ $parser = new \Icewind\SMB\Parser($this->getTimeZoneProvider('CEST'));
$this->assertEquals($dir, $parser->parseDir($output, ''));
}
}
diff --git a/apps/files_external/ajax/addMountPoint.php b/apps/files_external/ajax/addMountPoint.php
deleted file mode 100644
index 4e27ef98756..00000000000
--- a/apps/files_external/ajax/addMountPoint.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-OCP\JSON::checkAppEnabled('files_external');
-OCP\JSON::callCheck();
-
-if ($_POST['isPersonal'] == 'true') {
- OCP\JSON::checkLoggedIn();
- $isPersonal = true;
-} else {
- OCP\JSON::checkAdminUser();
- $isPersonal = false;
-}
-
-$mountPoint = (string)$_POST['mountPoint'];
-$oldMountPoint = (string)$_POST['oldMountPoint'];
-$class = (string)$_POST['class'];
-$options = (array)$_POST['classOptions'];
-$type = (string)$_POST['mountType'];
-$applicable = (string)$_POST['applicable'];
-
-if ($oldMountPoint and $oldMountPoint !== $mountPoint) {
- OC_Mount_Config::removeMountPoint($oldMountPoint, $type, $applicable, $isPersonal);
-}
-
-$status = OC_Mount_Config::addMountPoint($mountPoint, $class, $options, $type, $applicable, $isPersonal);
-OCP\JSON::success(array('data' => array('message' => $status)));
diff --git a/apps/files_external/ajax/removeMountPoint.php b/apps/files_external/ajax/removeMountPoint.php
deleted file mode 100644
index 0870911544b..00000000000
--- a/apps/files_external/ajax/removeMountPoint.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-OCP\JSON::checkAppEnabled('files_external');
-OCP\JSON::callCheck();
-
-if (!isset($_POST['isPersonal']))
- return;
-if (!isset($_POST['mountPoint']))
- return;
-if (!isset($_POST['mountType']))
- return;
-if (!isset($_POST['applicable']))
- return;
-
-if ($_POST['isPersonal'] == 'true') {
- OCP\JSON::checkLoggedIn();
- $isPersonal = true;
-} else {
- OCP\JSON::checkAdminUser();
- $isPersonal = false;
-}
-
-OC_Mount_Config::removeMountPoint((string)$_POST['mountPoint'], (string)$_POST['mountType'], (string)$_POST['applicable'], $isPersonal);
diff --git a/apps/files_external/appinfo/app.php b/apps/files_external/appinfo/app.php
index e74ce3594c1..7ea1e96bf2f 100644
--- a/apps/files_external/appinfo/app.php
+++ b/apps/files_external/appinfo/app.php
@@ -6,6 +6,8 @@
* later.
* See the COPYING-README file.
*/
+$app = new \OCA\Files_external\Appinfo\Application();
+
$l = \OC::$server->getL10N('files_external');
OC::$CLASSPATH['OC\Files\Storage\StreamWrapper'] = 'files_external/lib/streamwrapper.php';
diff --git a/apps/files_external/appinfo/application.php b/apps/files_external/appinfo/application.php
index b1605bb98a8..3e6b80ccb48 100644
--- a/apps/files_external/appinfo/application.php
+++ b/apps/files_external/appinfo/application.php
@@ -12,12 +12,13 @@ use \OCA\Files_External\Controller\AjaxController;
use \OCP\AppFramework\App;
use \OCP\IContainer;
- /**
- * @package OCA\Files_External\Appinfo
- */
+/**
+ * @package OCA\Files_External\Appinfo
+ */
class Application extends App {
public function __construct(array $urlParams=array()) {
parent::__construct('files_external', $urlParams);
+
$container = $this->getContainer();
/**
diff --git a/apps/files_external/appinfo/routes.php b/apps/files_external/appinfo/routes.php
index 5c7c4eca909..a090fca20ea 100644
--- a/apps/files_external/appinfo/routes.php
+++ b/apps/files_external/appinfo/routes.php
@@ -22,28 +22,29 @@
namespace OCA\Files_External\Appinfo;
+/**
+ * @var $this \OC\Route\Router
+ **/
$application = new Application();
$application->registerRoutes(
- $this,
- array(
- 'routes' => array(
- array(
- 'name' => 'Ajax#getSshKeys',
- 'url' => '/ajax/sftp_key.php',
- 'verb' => 'POST',
- 'requirements' => array()
- )
- )
- )
+ $this,
+ array(
+ 'resources' => array(
+ 'global_storages' => array('url' => '/globalstorages'),
+ 'user_storages' => array('url' => '/userstorages'),
+ ),
+ 'routes' => array(
+ array(
+ 'name' => 'Ajax#getSshKeys',
+ 'url' => '/ajax/sftp_key.php',
+ 'verb' => 'POST',
+ 'requirements' => array()
+ )
+ )
+ )
);
-/** @var $this OC\Route\Router */
-
-$this->create('files_external_add_mountpoint', 'ajax/addMountPoint.php')
- ->actionInclude('files_external/ajax/addMountPoint.php');
-$this->create('files_external_remove_mountpoint', 'ajax/removeMountPoint.php')
- ->actionInclude('files_external/ajax/removeMountPoint.php');
-
+// TODO: move these to app framework
$this->create('files_external_add_root_certificate', 'ajax/addRootCertificate.php')
->actionInclude('files_external/ajax/addRootCertificate.php');
$this->create('files_external_remove_root_certificate', 'ajax/removeRootCertificate.php')
diff --git a/apps/files_external/controller/globalstoragescontroller.php b/apps/files_external/controller/globalstoragescontroller.php
new file mode 100644
index 00000000000..819cccdbde8
--- /dev/null
+++ b/apps/files_external/controller/globalstoragescontroller.php
@@ -0,0 +1,156 @@
+<?php
+/**
+ * ownCloud - files_external
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Vincent Petry <pvince81@owncloud.com>
+ * @copyright Vincent Petry 2015
+ */
+
+namespace OCA\Files_External\Controller;
+
+
+use \OCP\IConfig;
+use \OCP\IUserSession;
+use \OCP\IRequest;
+use \OCP\IL10N;
+use \OCP\AppFramework\Http\DataResponse;
+use \OCP\AppFramework\Controller;
+use \OCP\AppFramework\Http;
+use \OCA\Files_external\Service\GlobalStoragesService;
+use \OCA\Files_external\NotFoundException;
+use \OCA\Files_external\Lib\StorageConfig;
+
+/**
+ * Global storages controller
+ */
+class GlobalStoragesController extends StoragesController {
+ /**
+ * Creates a new global storages controller.
+ *
+ * @param string $AppName application name
+ * @param IRequest $request request object
+ * @param IL10N $l10n l10n service
+ * @param GlobalStoragesService $globalStoragesService storage service
+ */
+ public function __construct(
+ $AppName,
+ IRequest $request,
+ IL10N $l10n,
+ GlobalStoragesService $globalStoragesService
+ ) {
+ parent::__construct(
+ $AppName,
+ $request,
+ $l10n,
+ $globalStoragesService
+ );
+ }
+
+ /**
+ * Create an external storage entry.
+ *
+ * @param string $mountPoint storage mount point
+ * @param string $backendClass backend class name
+ * @param array $backendOptions backend-specific options
+ * @param array $mountOptions mount-specific options
+ * @param array $applicableUsers users for which to mount the storage
+ * @param array $applicableGroups groups for which to mount the storage
+ * @param int $priority priority
+ *
+ * @return DataResponse
+ */
+ public function create(
+ $mountPoint,
+ $backendClass,
+ $backendOptions,
+ $mountOptions,
+ $applicableUsers,
+ $applicableGroups,
+ $priority
+ ) {
+ $newStorage = new StorageConfig();
+ $newStorage->setMountPoint($mountPoint);
+ $newStorage->setBackendClass($backendClass);
+ $newStorage->setBackendOptions($backendOptions);
+ $newStorage->setMountOptions($mountOptions);
+ $newStorage->setApplicableUsers($applicableUsers);
+ $newStorage->setApplicableGroups($applicableGroups);
+ $newStorage->setPriority($priority);
+
+ $response = $this->validate($newStorage);
+ if (!empty($response)) {
+ return $response;
+ }
+
+ $newStorage = $this->service->addStorage($newStorage);
+
+ $this->updateStorageStatus($newStorage);
+
+ return new DataResponse(
+ $newStorage,
+ Http::STATUS_CREATED
+ );
+ }
+
+ /**
+ * Update an external storage entry.
+ *
+ * @param int $id storage id
+ * @param string $mountPoint storage mount point
+ * @param string $backendClass backend class name
+ * @param array $backendOptions backend-specific options
+ * @param array $mountOptions mount-specific options
+ * @param array $applicableUsers users for which to mount the storage
+ * @param array $applicableGroups groups for which to mount the storage
+ * @param int $priority priority
+ *
+ * @return DataResponse
+ */
+ public function update(
+ $id,
+ $mountPoint,
+ $backendClass,
+ $backendOptions,
+ $mountOptions,
+ $applicableUsers,
+ $applicableGroups,
+ $priority
+ ) {
+ $storage = new StorageConfig($id);
+ $storage->setMountPoint($mountPoint);
+ $storage->setBackendClass($backendClass);
+ $storage->setBackendOptions($backendOptions);
+ $storage->setMountOptions($mountOptions);
+ $storage->setApplicableUsers($applicableUsers);
+ $storage->setApplicableGroups($applicableGroups);
+ $storage->setPriority($priority);
+
+ $response = $this->validate($storage);
+ if (!empty($response)) {
+ return $response;
+ }
+
+ try {
+ $storage = $this->service->updateStorage($storage);
+ } catch (NotFoundException $e) {
+ return new DataResponse(
+ [
+ 'message' => (string)$this->l10n->t('Storage with id "%i" not found', array($id))
+ ],
+ Http::STATUS_NOT_FOUND
+ );
+ }
+
+ $this->updateStorageStatus($storage);
+
+ return new DataResponse(
+ $storage,
+ Http::STATUS_OK
+ );
+
+ }
+
+}
diff --git a/apps/files_external/controller/storagescontroller.php b/apps/files_external/controller/storagescontroller.php
new file mode 100644
index 00000000000..b454dff7027
--- /dev/null
+++ b/apps/files_external/controller/storagescontroller.php
@@ -0,0 +1,167 @@
+<?php
+/**
+ * ownCloud - files_external
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Vincent Petry <pvince81@owncloud.com>
+ * @copyright Vincent Petry 2014
+ */
+
+namespace OCA\Files_External\Controller;
+
+
+use \OCP\IConfig;
+use \OCP\IUserSession;
+use \OCP\IRequest;
+use \OCP\IL10N;
+use \OCP\AppFramework\Http\DataResponse;
+use \OCP\AppFramework\Controller;
+use \OCP\AppFramework\Http;
+use \OCA\Files_external\Service\StoragesService;
+use \OCA\Files_external\NotFoundException;
+use \OCA\Files_external\Lib\StorageConfig;
+
+/**
+ * Base class for storages controllers
+ */
+abstract class StoragesController extends Controller {
+
+ /**
+ * L10N service
+ *
+ * @var IL10N
+ */
+ protected $l10n;
+
+ /**
+ * Storages service
+ *
+ * @var StoragesService
+ */
+ protected $service;
+
+ /**
+ * Creates a new storages controller.
+ *
+ * @param string $AppName application name
+ * @param IRequest $request request object
+ * @param IL10N $l10n l10n service
+ * @param StoragesService $storagesService storage service
+ */
+ public function __construct(
+ $AppName,
+ IRequest $request,
+ IL10N $l10n,
+ StoragesService $storagesService
+ ) {
+ parent::__construct($AppName, $request);
+ $this->l10n = $l10n;
+ $this->service = $storagesService;
+ }
+
+ /**
+ * Validate storage config
+ *
+ * @param StorageConfig $storage storage config
+ *
+ * @return DataResponse|null returns response in case of validation error
+ */
+ protected function validate(StorageConfig $storage) {
+ $mountPoint = $storage->getMountPoint();
+ if ($mountPoint === '' || $mountPoint === '/') {
+ return new DataResponse(
+ array(
+ 'message' => (string)$this->l10n->t('Invalid mount point')
+ ),
+ Http::STATUS_UNPROCESSABLE_ENTITY
+ );
+ }
+
+ // TODO: validate that other attrs are set
+
+ $backends = \OC_Mount_Config::getBackends();
+ if (!isset($backends[$storage->getBackendClass()])) {
+ // invalid backend
+ return new DataResponse(
+ array(
+ 'message' => (string)$this->l10n->t('Invalid storage backend "%s"', array($storage->getBackendClass()))
+ ),
+ Http::STATUS_UNPROCESSABLE_ENTITY
+ );
+ }
+
+ return null;
+ }
+
+ /**
+ * Check whether the given storage is available / valid.
+ *
+ * Note that this operation can be time consuming depending
+ * on whether the remote storage is available or not.
+ *
+ * @param StorageConfig $storage storage configuration
+ */
+ protected function updateStorageStatus(StorageConfig &$storage) {
+ // update status (can be time-consuming)
+ $storage->setStatus(
+ \OC_Mount_Config::getBackendStatus(
+ $storage->getBackendClass(),
+ $storage->getBackendOptions(),
+ false
+ )
+ );
+ }
+
+ /**
+ * Get an external storage entry.
+ *
+ * @param int $id storage id
+ *
+ * @return DataResponse
+ */
+ public function show($id) {
+ try {
+ $storage = $this->service->getStorage($id);
+
+ $this->updateStorageStatus($storage);
+ } catch (NotFoundException $e) {
+ return new DataResponse(
+ [
+ 'message' => (string)$this->l10n->t('Storage with id "%i" not found', array($id))
+ ],
+ Http::STATUS_NOT_FOUND
+ );
+ }
+
+ return new DataResponse(
+ $storage,
+ Http::STATUS_OK
+ );
+ }
+
+ /**
+ * Deletes the storage with the given id.
+ *
+ * @param int $id storage id
+ *
+ * @return DataResponse
+ */
+ public function destroy($id) {
+ try {
+ $this->service->removeStorage($id);
+ } catch (NotFoundException $e) {
+ return new DataResponse(
+ [
+ 'message' => (string)$this->l10n->t('Storage with id "%i" not found', array($id))
+ ],
+ Http::STATUS_NOT_FOUND
+ );
+ }
+
+ return new DataResponse([], Http::STATUS_NO_CONTENT);
+ }
+
+}
+
diff --git a/apps/files_external/controller/userstoragescontroller.php b/apps/files_external/controller/userstoragescontroller.php
new file mode 100644
index 00000000000..86557988ea3
--- /dev/null
+++ b/apps/files_external/controller/userstoragescontroller.php
@@ -0,0 +1,191 @@
+<?php
+/**
+ * ownCloud - files_external
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Vincent Petry <pvince81@owncloud.com>
+ * @copyright Vincent Petry 2015
+ */
+
+namespace OCA\Files_External\Controller;
+
+
+use \OCP\IConfig;
+use \OCP\IUserSession;
+use \OCP\IRequest;
+use \OCP\IL10N;
+use \OCP\AppFramework\Http\DataResponse;
+use \OCP\AppFramework\Controller;
+use \OCP\AppFramework\Http;
+use \OCA\Files_external\Service\UserStoragesService;
+use \OCA\Files_external\NotFoundException;
+use \OCA\Files_external\Lib\StorageConfig;
+
+/**
+ * User storages controller
+ */
+class UserStoragesController extends StoragesController {
+ /**
+ * Creates a new user storages controller.
+ *
+ * @param string $AppName application name
+ * @param IRequest $request request object
+ * @param IL10N $l10n l10n service
+ * @param UserStoragesService $userStoragesService storage service
+ */
+ public function __construct(
+ $AppName,
+ IRequest $request,
+ IL10N $l10n,
+ UserStoragesService $userStoragesService
+ ) {
+ parent::__construct(
+ $AppName,
+ $request,
+ $l10n,
+ $userStoragesService
+ );
+ }
+
+ /**
+ * Validate storage config
+ *
+ * @param StorageConfig $storage storage config
+ *
+ * @return DataResponse|null returns response in case of validation error
+ */
+ protected function validate(StorageConfig $storage) {
+ $result = parent::validate($storage);
+
+ if ($result != null) {
+ return $result;
+ }
+
+ // Verify that the mount point applies for the current user
+ // Prevent non-admin users from mounting local storage and other disabled backends
+ $allowedBackends = \OC_Mount_Config::getPersonalBackends();
+ if (!isset($allowedBackends[$storage->getBackendClass()])) {
+ return new DataResponse(
+ array(
+ 'message' => (string)$this->l10n->t('Invalid storage backend "%s"', array($storage->getBackendClass()))
+ ),
+ Http::STATUS_UNPROCESSABLE_ENTITY
+ );
+ }
+
+ return null;
+ }
+
+ /**
+ * Return storage
+ *
+ * @NoAdminRequired
+ *
+ * {@inheritdoc}
+ */
+ public function show($id) {
+ return parent::show($id);
+ }
+
+ /**
+ * Create an external storage entry.
+ *
+ * @param string $mountPoint storage mount point
+ * @param string $backendClass backend class name
+ * @param array $backendOptions backend-specific options
+ * @param array $mountOptions backend-specific mount options
+ *
+ * @return DataResponse
+ *
+ * @NoAdminRequired
+ */
+ public function create(
+ $mountPoint,
+ $backendClass,
+ $backendOptions,
+ $mountOptions
+ ) {
+ $newStorage = new StorageConfig();
+ $newStorage->setMountPoint($mountPoint);
+ $newStorage->setBackendClass($backendClass);
+ $newStorage->setBackendOptions($backendOptions);
+ $newStorage->setMountOptions($mountOptions);
+
+ $response = $this->validate($newStorage);
+ if (!empty($response)) {
+ return $response;
+ }
+
+ $newStorage = $this->service->addStorage($newStorage);
+ $this->updateStorageStatus($newStorage);
+
+ return new DataResponse(
+ $newStorage,
+ Http::STATUS_CREATED
+ );
+ }
+
+ /**
+ * Update an external storage entry.
+ *
+ * @param int $id storage id
+ * @param string $mountPoint storage mount point
+ * @param string $backendClass backend class name
+ * @param array $backendOptions backend-specific options
+ * @param array $mountOptions backend-specific mount options
+ *
+ * @return DataResponse
+ *
+ * @NoAdminRequired
+ */
+ public function update(
+ $id,
+ $mountPoint,
+ $backendClass,
+ $backendOptions,
+ $mountOptions
+ ) {
+ $storage = new StorageConfig($id);
+ $storage->setMountPoint($mountPoint);
+ $storage->setBackendClass($backendClass);
+ $storage->setBackendOptions($backendOptions);
+ $storage->setMountOptions($mountOptions);
+
+ $response = $this->validate($storage);
+ if (!empty($response)) {
+ return $response;
+ }
+
+ try {
+ $storage = $this->service->updateStorage($storage);
+ } catch (NotFoundException $e) {
+ return new DataResponse(
+ [
+ 'message' => (string)$this->l10n->t('Storage with id "%i" not found', array($id))
+ ],
+ Http::STATUS_NOT_FOUND
+ );
+ }
+
+ $this->updateStorageStatus($storage);
+
+ return new DataResponse(
+ $storage,
+ Http::STATUS_OK
+ );
+
+ }
+
+ /**
+ * Delete storage
+ *
+ * @NoAdminRequired
+ *
+ * {@inheritdoc}
+ */
+ public function destroy($id) {
+ return parent::destroy($id);
+ }
+}
diff --git a/apps/files_external/js/dropbox.js b/apps/files_external/js/dropbox.js
index 2880e910f2c..53b5d5d666f 100644
--- a/apps/files_external/js/dropbox.js
+++ b/apps/files_external/js/dropbox.js
@@ -23,7 +23,7 @@ $(document).ready(function() {
$(token).val(result.access_token);
$(token_secret).val(result.access_token_secret);
$(configured).val('true');
- OC.MountConfig.saveStorage(tr, function(status) {
+ OCA.External.Settings.mountConfig.saveStorageConfig(tr, function(status) {
if (status) {
$(tr).find('.configuration input').attr('disabled', 'disabled');
$(tr).find('.configuration').append('<span id="access" style="padding-left:0.5em;">'+t('files_external', 'Access granted')+'</span>');
@@ -93,7 +93,7 @@ $(document).ready(function() {
$(configured).val('false');
$(token).val(result.data.request_token);
$(token_secret).val(result.data.request_token_secret);
- OC.MountConfig.saveStorage(tr, function() {
+ OCA.External.Settings.mountConfig.saveStorageConfig(tr, function() {
window.location = result.data.url;
});
} else {
diff --git a/apps/files_external/js/google.js b/apps/files_external/js/google.js
index b9a5e66b800..648538f8028 100644
--- a/apps/files_external/js/google.js
+++ b/apps/files_external/js/google.js
@@ -32,7 +32,7 @@ $(document).ready(function() {
if (result && result.status == 'success') {
$(token).val(result.data.token);
$(configured).val('true');
- OC.MountConfig.saveStorage(tr, function(status) {
+ OCA.External.Settings.mountConfig.saveStorageConfig(tr, function(status) {
if (status) {
$(tr).find('.configuration input').attr('disabled', 'disabled');
$(tr).find('.configuration').append($('<span/>')
@@ -115,7 +115,7 @@ $(document).ready(function() {
if (result && result.status == 'success') {
$(configured).val('false');
$(token).val('false');
- OC.MountConfig.saveStorage(tr, function(status) {
+ OCA.External.Settings.mountConfig.saveStorageConfig(tr, function(status) {
window.location = result.data.url;
});
} else {
diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js
index ee3d0b736da..9e4d026980f 100644
--- a/apps/files_external/js/settings.js
+++ b/apps/files_external/js/settings.js
@@ -1,20 +1,24 @@
+/*
+ * Copyright (c) 2014
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
(function(){
-function updateStatus(statusEl, result){
- statusEl.removeClass('success error loading-small');
- if (result && result.status === 'success' && result.data.message) {
- statusEl.addClass('success');
- return true;
- } else {
- statusEl.addClass('error');
- return false;
- }
-}
-
+/**
+ * Returns the selection of applicable users in the given configuration row
+ *
+ * @param $row configuration row
+ * @return array array of user names
+ */
function getSelection($row) {
var values = $row.find('.applicableUsers').select2('val');
if (!values || values.length === 0) {
- values = ['all'];
+ values = [];
}
return values;
}
@@ -31,298 +35,515 @@ function highlightInput($input) {
}
}
-OC.MountConfig={
- saveStorage:function($tr, callback) {
- var mountPoint = $tr.find('.mountPoint input').val();
- var oldMountPoint = $tr.find('.mountPoint input').data('mountpoint');
- if (mountPoint === '') {
- return false;
- }
- var statusSpan = $tr.find('.status span');
- var backendClass = $tr.find('.backend').data('class');
- var configuration = $tr.find('.configuration input');
- var addMountPoint = true;
- if (configuration.length < 1) {
- return false;
- }
- var classOptions = {};
- $.each(configuration, function(index, input) {
- if ($(input).val() === '' && !$(input).hasClass('optional')) {
- addMountPoint = false;
- return false;
- }
- if ($(input).is(':checkbox')) {
- if ($(input).is(':checked')) {
- classOptions[$(input).data('parameter')] = true;
+/**
+ * Initialize select2 plugin on the given elements
+ *
+ * @param {Array<Object>} array of jQuery elements
+ * @param {int} userListLimit page size for result list
+ */
+function addSelect2 ($elements, userListLimit) {
+ if (!$elements.length) {
+ return;
+ }
+ $elements.select2({
+ placeholder: t('files_external', 'All users. Type to select user or group.'),
+ allowClear: true,
+ multiple: true,
+ //minimumInputLength: 1,
+ ajax: {
+ url: OC.generateUrl('apps/files_external/applicable'),
+ dataType: 'json',
+ quietMillis: 100,
+ data: function (term, page) { // page is the one-based page number tracked by Select2
+ return {
+ pattern: term, //search term
+ limit: userListLimit, // page size
+ offset: userListLimit*(page-1) // page number starts with 0
+ };
+ },
+ results: function (data) {
+ if (data.status === 'success') {
+
+ var results = [];
+ var userCount = 0; // users is an object
+
+ // add groups
+ $.each(data.groups, function(i, group) {
+ results.push({name:group+'(group)', displayname:group, type:'group' });
+ });
+ // add users
+ $.each(data.users, function(id, user) {
+ userCount++;
+ results.push({name:id, displayname:user, type:'user' });
+ });
+
+
+ var more = (userCount >= userListLimit) || (data.groups.length >= userListLimit);
+ return {results: results, more: more};
} else {
- classOptions[$(input).data('parameter')] = false;
+ //FIXME add error handling
}
- } else {
- classOptions[$(input).data('parameter')] = $(input).val();
}
- });
- if ($('#externalStorage').data('admin') === true) {
- var multiselect = getSelection($tr);
- }
- if (addMountPoint) {
- var status = false;
- if ($('#externalStorage').data('admin') === true) {
- var isPersonal = false;
- var oldGroups = $tr.find('.applicable').data('applicable-groups');
- var oldUsers = $tr.find('.applicable').data('applicable-users');
- var groups = [];
- var users = [];
- $.each(multiselect, function(index, value) {
- var pos = value.indexOf('(group)');
- if (pos != -1) {
- var mountType = 'group';
- var applicable = value.substr(0, pos);
- if ($.inArray(applicable, oldGroups) != -1) {
- oldGroups.splice($.inArray(applicable, oldGroups), 1);
- }
- groups.push(applicable);
- } else {
- var mountType = 'user';
- var applicable = value;
- if ($.inArray(applicable, oldUsers) != -1) {
- oldUsers.splice($.inArray(applicable, oldUsers), 1);
- }
- users.push(applicable);
- }
- statusSpan.addClass('loading-small').removeClass('error success');
- $.ajax({type: 'POST',
- url: OC.filePath('files_external', 'ajax', 'addMountPoint.php'),
- data: {
- mountPoint: mountPoint,
- 'class': backendClass,
- classOptions: classOptions,
- mountType: mountType,
- applicable: applicable,
- isPersonal: isPersonal,
- oldMountPoint: oldMountPoint
- },
- success: function(result) {
- $tr.find('.mountPoint input').data('mountpoint', mountPoint);
- status = updateStatus(statusSpan, result);
- if (callback) {
- callback(status);
- }
- },
- error: function(result){
- status = updateStatus(statusSpan, result);
- if (callback) {
- callback(status);
- }
- }
- });
- });
- $tr.find('.applicable').data('applicable-groups', groups);
- $tr.find('.applicable').data('applicable-users', users);
- var mountType = 'group';
- $.each(oldGroups, function(index, applicable) {
- $.ajax({type: 'POST',
- url: OC.filePath('files_external', 'ajax', 'removeMountPoint.php'),
- data: {
- mountPoint: mountPoint,
- 'class': backendClass,
- classOptions: classOptions,
- mountType: mountType,
- applicable: applicable,
- isPersonal: isPersonal
- }
- });
- });
- var mountType = 'user';
- $.each(oldUsers, function(index, applicable) {
- $.ajax({type: 'POST',
- url: OC.filePath('files_external', 'ajax', 'removeMountPoint.php'),
- data: {
- mountPoint: mountPoint,
- 'class': backendClass,
- classOptions: classOptions,
- mountType: mountType,
- applicable: applicable,
- isPersonal: isPersonal
+ },
+ initSelection: function(element, callback) {
+ var users = {};
+ users['users'] = [];
+ var toSplit = element.val().split(",");
+ for (var i = 0; i < toSplit.length; i++) {
+ users['users'].push(toSplit[i]);
+ }
+
+ $.ajax(OC.generateUrl('displaynames'), {
+ type: 'POST',
+ contentType: 'application/json',
+ data: JSON.stringify(users),
+ dataType: 'json'
+ }).done(function(data) {
+ var results = [];
+ if (data.status === 'success') {
+ $.each(data.users, function(user, displayname) {
+ if (displayname !== false) {
+ results.push({name:user, displayname:displayname, type:'user'});
}
});
- });
+ callback(results);
+ } else {
+ //FIXME add error handling
+ }
+ });
+ },
+ id: function(element) {
+ return element.name;
+ },
+ formatResult: function (element) {
+ var $result = $('<span><div class="avatardiv"/><span>'+escapeHTML(element.displayname)+'</span></span>');
+ var $div = $result.find('.avatardiv')
+ .attr('data-type', element.type)
+ .attr('data-name', element.name)
+ .attr('data-displayname', element.displayname);
+ if (element.type === 'group') {
+ var url = OC.imagePath('core','places/contacts-dark'); // TODO better group icon
+ $div.html('<img width="32" height="32" src="'+url+'">');
+ }
+ return $result.get(0).outerHTML;
+ },
+ formatSelection: function (element) {
+ if (element.type === 'group') {
+ return '<span title="'+escapeHTML(element.name)+'" class="group">'+escapeHTML(element.displayname+' '+t('files_external', '(group)'))+'</span>';
} else {
- var isPersonal = true;
- var mountType = 'user';
- var applicable = OC.currentUser;
- statusSpan.addClass('loading-small').removeClass('error success');
- $.ajax({type: 'POST',
- url: OC.filePath('files_external', 'ajax', 'addMountPoint.php'),
- data: {
- mountPoint: mountPoint,
- 'class': backendClass,
- classOptions: classOptions,
- mountType: mountType,
- applicable: applicable,
- isPersonal: isPersonal,
- oldMountPoint: oldMountPoint
- },
- success: function(result) {
- $tr.find('.mountPoint input').data('mountpoint', mountPoint);
- status = updateStatus(statusSpan, result);
- if (callback) {
- callback(status);
- }
- },
- error: function(result){
- status = updateStatus(statusSpan, result);
- if (callback) {
- callback(status);
- }
- }
- });
+ return '<span title="'+escapeHTML(element.name)+'" class="user">'+escapeHTML(element.displayname)+'</span>';
}
- return status;
- }
- }
+ },
+ escapeMarkup: function (m) { return m; } // we escape the markup in formatResult and formatSelection
+ }).on('select2-loaded', function() {
+ $.each($('.avatardiv'), function(i, div) {
+ var $div = $(div);
+ if ($div.data('type') === 'user') {
+ $div.avatar($div.data('name'),32);
+ }
+ });
+ });
+}
+
+/**
+ * @class OCA.External.Settings.StorageConfig
+ *
+ * @classdesc External storage config
+ */
+var StorageConfig = function(id) {
+ this.id = id;
+ this.backendOptions = {};
+};
+// Keep this in sync with \OC_Mount_Config::STATUS_*
+StorageConfig.Status = {
+ IN_PROGRESS: -1,
+ SUCCESS: 0,
+ ERROR: 1
};
+/**
+ * @memberof OCA.External.Settings
+ */
+StorageConfig.prototype = {
+ _url: null,
-$(document).ready(function() {
- var $externalStorage = $('#externalStorage');
-
- //initialize hidden input field with list of users and groups
- $externalStorage.find('tr:not(#addMountPoint)').each(function(i,tr) {
- var $tr = $(tr);
- var $applicable = $tr.find('.applicable');
- if ($applicable.length > 0) {
- var groups = $applicable.data('applicable-groups');
- var groupsId = [];
- $.each(groups, function () {
- groupsId.push(this + '(group)');
- });
- var users = $applicable.data('applicable-users');
- if (users.indexOf('all') > -1) {
- $tr.find('.applicableUsers').val('');
- } else {
- $tr.find('.applicableUsers').val(groupsId.concat(users).join(','));
+ /**
+ * Storage id
+ *
+ * @type int
+ */
+ id: null,
+
+ /**
+ * Mount point
+ *
+ * @type string
+ */
+ mountPoint: '',
+
+ /**
+ * Backend class name
+ *
+ * @type string
+ */
+ backendClass: null,
+
+ /**
+ * Backend-specific configuration
+ *
+ * @type Object.<string,object>
+ */
+ backendOptions: null,
+
+ /**
+ * Mount-specific options
+ *
+ * @type Object.<string,object>
+ */
+ mountOptions: null,
+
+ /**
+ * Creates or saves the storage.
+ *
+ * @param {Function} [options.success] success callback, receives result as argument
+ * @param {Function} [options.error] error callback
+ */
+ save: function(options) {
+ var self = this;
+ var url = OC.generateUrl(this._url);
+ var method = 'POST';
+ if (_.isNumber(this.id)) {
+ method = 'PUT';
+ url = OC.generateUrl(this._url + '/{id}', {id: this.id});
+ }
+
+ $.ajax({
+ type: method,
+ url: url,
+ data: this.getData(),
+ success: function(result) {
+ self.id = result.id;
+ if (_.isFunction(options.success)) {
+ options.success(result);
+ }
+ },
+ error: options.error
+ });
+ },
+
+ /**
+ * Returns the data from this object
+ *
+ * @return {Array} JSON array of the data
+ */
+ getData: function() {
+ var data = {
+ mountPoint: this.mountPoint,
+ backendClass: this.backendClass,
+ backendOptions: this.backendOptions
+ };
+ if (this.id) {
+ data.id = this.id;
+ }
+ if (this.mountOptions) {
+ data.mountOptions = this.mountOptions;
+ }
+ return data;
+ },
+
+ /**
+ * Recheck the storage
+ *
+ * @param {Function} [options.success] success callback, receives result as argument
+ * @param {Function} [options.error] error callback
+ */
+ recheck: function(options) {
+ if (!_.isNumber(this.id)) {
+ if (_.isFunction(options.error)) {
+ options.error();
}
+ return;
}
- });
+ $.ajax({
+ type: 'GET',
+ url: OC.generateUrl(this._url + '/{id}', {id: this.id}),
+ success: options.success,
+ error: options.error
+ });
+ },
- var userListLimit = 30;
- function addSelect2 ($elements) {
- if ($elements.length > 0) {
- $elements.select2({
- placeholder: t('files_external', 'All users. Type to select user or group.'),
- allowClear: true,
- multiple: true,
- //minimumInputLength: 1,
- ajax: {
- url: OC.generateUrl('apps/files_external/applicable'),
- dataType: 'json',
- quietMillis: 100,
- data: function (term, page) { // page is the one-based page number tracked by Select2
- return {
- pattern: term, //search term
- limit: userListLimit, // page size
- offset: userListLimit*(page-1) // page number starts with 0
- };
- },
- results: function (data, page) {
- if (data.status === 'success') {
-
- var results = [];
- var userCount = 0; // users is an object
-
- // add groups
- $.each(data.groups, function(i, group) {
- results.push({name:group+'(group)', displayname:group, type:'group' });
- });
- // add users
- $.each(data.users, function(id, user) {
- userCount++;
- results.push({name:id, displayname:user, type:'user' });
- });
-
-
- var more = (userCount >= userListLimit) || (data.groups.length >= userListLimit);
- return {results: results, more: more};
- } else {
- //FIXME add error handling
- }
- }
- },
- initSelection: function(element, callback) {
- var users = {};
- users['users'] = [];
- var toSplit = element.val().split(",");
- for (var i = 0; i < toSplit.length; i++) {
- users['users'].push(toSplit[i]);
- }
+ /**
+ * Deletes the storage
+ *
+ * @param {Function} [options.success] success callback
+ * @param {Function} [options.error] error callback
+ */
+ destroy: function(options) {
+ if (!_.isNumber(this.id)) {
+ // the storage hasn't even been created => success
+ if (_.isFunction(options.success)) {
+ options.success();
+ }
+ return;
+ }
+ var self = this;
+ $.ajax({
+ type: 'DELETE',
+ url: OC.generateUrl(this._url + '/{id}', {id: this.id}),
+ success: options.success,
+ error: options.error
+ });
+ },
- $.ajax(OC.generateUrl('displaynames'), {
- type: 'POST',
- contentType: 'application/json',
- data: JSON.stringify(users),
- dataType: 'json'
- }).done(function(data) {
- var results = [];
- if (data.status === 'success') {
- $.each(data.users, function(user, displayname) {
- if (displayname !== false) {
- results.push({name:user, displayname:displayname, type:'user'});
- }
- });
- callback(results);
- } else {
- //FIXME add error handling
- }
- });
- },
- id: function(element) {
- return element.name;
- },
- formatResult: function (element) {
- var $result = $('<span><div class="avatardiv"/><span>'+escapeHTML(element.displayname)+'</span></span>');
- var $div = $result.find('.avatardiv')
- .attr('data-type', element.type)
- .attr('data-name', element.name)
- .attr('data-displayname', element.displayname);
- if (element.type === 'group') {
- var url = OC.imagePath('core','places/contacts-dark'); // TODO better group icon
- $div.html('<img width="32" height="32" src="'+url+'">');
- }
- return $result.get(0).outerHTML;
- },
- formatSelection: function (element) {
- if (element.type === 'group') {
- return '<span title="'+escapeHTML(element.name)+'" class="group">'+escapeHTML(element.displayname+' '+t('files_external', '(group)'))+'</span>';
- } else {
- return '<span title="'+escapeHTML(element.name)+'" class="user">'+escapeHTML(element.displayname)+'</span>';
- }
- },
- escapeMarkup: function (m) { return m; } // we escape the markup in formatResult and formatSelection
- }).on('select2-loaded', function() {
- $.each($('.avatardiv'), function(i, div) {
- var $div = $(div);
- if ($div.data('type') === 'user') {
- $div.avatar($div.data('name'),32);
- }
- })
- });
+ /**
+ * Validate this model
+ *
+ * @return {boolean} false if errors exist, true otherwise
+ */
+ validate: function() {
+ if (this.mountPoint === '') {
+ return false;
}
+ if (this.errors) {
+ return false;
+ }
+ return true;
}
- addSelect2($('tr:not(#addMountPoint) .applicableUsers'));
-
- $externalStorage.on('change', '#selectBackend', function() {
- var $tr = $(this).closest('tr');
- $externalStorage.find('tbody').append($tr.clone());
- $externalStorage.find('tbody tr').last().find('.mountPoint input').val('');
- var selected = $(this).find('option:selected').text();
- var backendClass = $(this).val();
+};
+
+/**
+ * @class OCA.External.Settings.GlobalStorageConfig
+ * @augments OCA.External.Settings.StorageConfig
+ *
+ * @classdesc Global external storage config
+ */
+var GlobalStorageConfig = function(id) {
+ this.id = id;
+ this.applicableUsers = [];
+ this.applicableGroups = [];
+};
+/**
+ * @memberOf OCA.External.Settings
+ */
+GlobalStorageConfig.prototype = _.extend({}, StorageConfig.prototype,
+ /** @lends OCA.External.Settings.GlobalStorageConfig.prototype */ {
+ _url: 'apps/files_external/globalstorages',
+
+ /**
+ * Applicable users
+ *
+ * @type Array.<string>
+ */
+ applicableUsers: null,
+
+ /**
+ * Applicable groups
+ *
+ * @type Array.<string>
+ */
+ applicableGroups: null,
+
+ /**
+ * Storage priority
+ *
+ * @type int
+ */
+ priority: null,
+
+ /**
+ * Returns the data from this object
+ *
+ * @return {Array} JSON array of the data
+ */
+ getData: function() {
+ var data = StorageConfig.prototype.getData.apply(this, arguments);
+ return _.extend(data, {
+ applicableUsers: this.applicableUsers,
+ applicableGroups: this.applicableGroups,
+ priority: this.priority,
+ });
+ }
+});
+
+/**
+ * @class OCA.External.Settings.UserStorageConfig
+ * @augments OCA.External.Settings.StorageConfig
+ *
+ * @classdesc User external storage config
+ */
+var UserStorageConfig = function(id) {
+ this.id = id;
+};
+UserStorageConfig.prototype = _.extend({}, StorageConfig.prototype,
+ /** @lends OCA.External.Settings.UserStorageConfig.prototype */ {
+ _url: 'apps/files_external/userstorages'
+});
+
+/**
+ * @class OCA.External.Settings.MountConfigListView
+ *
+ * @classdesc Mount configuration list view
+ *
+ * @param {Object} $el DOM object containing the list
+ * @param {Object} [options]
+ * @param {int} [options.userListLimit] page size in applicable users dropdown
+ */
+var MountConfigListView = function($el, options) {
+ this.initialize($el, options);
+};
+/**
+ * @memberOf OCA.External.Settings
+ */
+MountConfigListView.prototype = {
+
+ /**
+ * jQuery element containing the config list
+ *
+ * @type Object
+ */
+ $el: null,
+
+ /**
+ * Storage config class
+ *
+ * @type Class
+ */
+ _storageConfigClass: null,
+
+ /**
+ * Flag whether the list is about user storage configs (true)
+ * or global storage configs (false)
+ *
+ * @type bool
+ */
+ _isPersonal: false,
+
+ /**
+ * Page size in applicable users dropdown
+ *
+ * @type int
+ */
+ _userListLimit: 30,
+
+ /**
+ * List of supported backends
+ *
+ * @type Object.<string,Object>
+ */
+ _allBackends: null,
+
+ /**
+ * @param {Object} $el DOM object containing the list
+ * @param {Object} [options]
+ * @param {int} [options.userListLimit] page size in applicable users dropdown
+ */
+ initialize: function($el, options) {
+ var self = this;
+ this.$el = $el;
+ this._isPersonal = ($el.data('admin') !== true);
+ if (this._isPersonal) {
+ this._storageConfigClass = OCA.External.Settings.UserStorageConfig;
+ } else {
+ this._storageConfigClass = OCA.External.Settings.GlobalStorageConfig;
+ }
+
+ if (options && !_.isUndefined(options.userListLimit)) {
+ this._userListLimit = options.userListLimit;
+ }
+
+ // read the backend config that was carefully crammed
+ // into the data-configurations attribute of the select
+ this._allBackends = this.$el.find('.selectBackend').data('configurations');
+
+ //initialize hidden input field with list of users and groups
+ this.$el.find('tr:not(#addMountPoint)').each(function(i,tr) {
+ var $tr = $(tr);
+ var $applicable = $tr.find('.applicable');
+ if ($applicable.length > 0) {
+ var groups = $applicable.data('applicable-groups');
+ var groupsId = [];
+ $.each(groups, function () {
+ groupsId.push(this + '(group)');
+ });
+ var users = $applicable.data('applicable-users');
+ if (users.indexOf('all') > -1 || users === '') {
+ $tr.find('.applicableUsers').val('');
+ } else {
+ $tr.find('.applicableUsers').val(groupsId.concat(users).join(','));
+ }
+ }
+ });
+
+ addSelect2(this.$el.find('tr:not(#addMountPoint) .applicableUsers'), this._userListLimit);
+
+ this.$el.find('tr:not(#addMountPoint)').each(function(i, tr) {
+ self.recheckStorageConfig($(tr));
+ });
+
+ this._initEvents();
+ },
+
+ /**
+ * Initialize DOM event handlers
+ */
+ _initEvents: function() {
+ var self = this;
+
+ this.$el.on('paste', 'td input', function() {
+ var $me = $(this);
+ var $tr = $me.closest('tr');
+ setTimeout(function() {
+ highlightInput($me);
+ self.saveStorageConfig($tr);
+ }, 20);
+ });
+
+ var timer;
+
+ this.$el.on('keyup', 'td input', function() {
+ clearTimeout(timer);
+ var $tr = $(this).closest('tr');
+ highlightInput($(this));
+ if ($(this).val) {
+ timer = setTimeout(function() {
+ self.saveStorageConfig($tr);
+ }, 2000);
+ }
+ });
+
+ this.$el.on('change', 'td input:checkbox', function() {
+ self.saveStorageConfig($(this).closest('tr'));
+ });
+
+ this.$el.on('change', '.applicable', function() {
+ self.saveStorageConfig($(this).closest('tr'));
+ });
+
+ this.$el.on('click', '.status>span', function() {
+ self.recheckStorageConfig($(this).closest('tr'));
+ });
+
+ this.$el.on('click', 'td.remove>img', function() {
+ self.deleteStorageConfig($(this).closest('tr'));
+ });
+
+ this.$el.on('change', '.selectBackend', _.bind(this._onSelectBackend, this));
+ },
+
+ _onSelectBackend: function(event) {
+ var $target = $(event.target);
+ var $el = this.$el;
+ var $tr = $target.closest('tr');
+ $el.find('tbody').append($tr.clone());
+ $el.find('tbody tr').last().find('.mountPoint input').val('');
+ var selected = $target.find('option:selected').text();
+ var backendClass = $target.val();
$tr.find('.backend').text(selected);
if ($tr.find('.mountPoint input').val() === '') {
- $tr.find('.mountPoint input').val(suggestMountPoint(selected));
+ $tr.find('.mountPoint input').val(this._suggestMountPoint(selected));
}
$tr.addClass(backendClass);
- $tr.find('.status').append('<span></span>');
$tr.find('.backend').data('class', backendClass);
- var configurations = $(this).data('configurations');
+ var configurations = this._allBackends;
var $td = $tr.find('td.configuration');
$.each(configurations, function(backend, parameters) {
if (backend === backendClass) {
@@ -347,7 +568,9 @@ $(document).ready(function() {
highlightInput(newElement);
$td.append(newElement);
});
- if (parameters['custom'] && $externalStorage.find('tbody tr.'+backendClass.replace(/\\/g, '\\\\')).length === 1) {
+ var priorityEl = $('<input type="hidden" class="priority" value="' + parameters['priority'] + '" />');
+ $tr.append(priorityEl);
+ if (parameters['custom'] && $el.find('tbody tr.'+backendClass.replace(/\\/g, '\\\\')).length === 1) {
OC.addScript('files_external', parameters['custom']);
}
$td.children().not('[type=hidden]').first().focus();
@@ -357,11 +580,197 @@ $(document).ready(function() {
$tr.find('td').last().attr('class', 'remove');
$tr.find('td').last().removeAttr('style');
$tr.removeAttr('id');
- $(this).remove();
- addSelect2($tr.find('.applicableUsers'));
- });
+ $target.remove();
+ addSelect2($tr.find('.applicableUsers'), this._userListLimit);
+ },
+
+ /**
+ * Gets the storage model from the given row
+ *
+ * @param $tr row element
+ * @return {OCA.External.StorageConfig} storage model instance
+ */
+ getStorageConfig: function($tr) {
+ var storageId = parseInt($tr.attr('data-id'), 10);
+ if (!storageId) {
+ // new entry
+ storageId = null;
+ }
+ var storage = new this._storageConfigClass(storageId);
+ storage.mountPoint = $tr.find('.mountPoint input').val();
+ storage.backendClass = $tr.find('.backend').data('class');
- function suggestMountPoint(defaultMountPoint) {
+ var classOptions = {};
+ var configuration = $tr.find('.configuration input');
+ var missingOptions = [];
+ $.each(configuration, function(index, input) {
+ var $input = $(input);
+ var parameter = $input.data('parameter');
+ if ($input.attr('type') === 'button') {
+ return;
+ }
+ if ($input.val() === '' && !$input.hasClass('optional')) {
+ missingOptions.push(parameter);
+ return;
+ }
+ if ($(input).is(':checkbox')) {
+ if ($(input).is(':checked')) {
+ classOptions[parameter] = true;
+ } else {
+ classOptions[parameter] = false;
+ }
+ } else {
+ classOptions[parameter] = $(input).val();
+ }
+ });
+
+ storage.backendOptions = classOptions;
+ if (missingOptions.length) {
+ storage.errors = {
+ backendOptions: missingOptions
+ };
+ }
+
+ // gather selected users and groups
+ if (!this._isPersonal) {
+ var groups = [];
+ var users = [];
+ var multiselect = getSelection($tr);
+ $.each(multiselect, function(index, value) {
+ var pos = value.indexOf('(group)');
+ if (pos !== -1) {
+ groups.push(value.substr(0, pos));
+ } else {
+ users.push(value);
+ }
+ });
+ // FIXME: this should be done in the multiselect change event instead
+ $tr.find('.applicable')
+ .data('applicable-groups', groups)
+ .data('applicable-users', users);
+
+ storage.applicableUsers = users;
+ storage.applicableGroups = groups;
+
+ storage.priority = $tr.find('input.priority').val();
+ }
+
+ var mountOptions = $tr.find('input.mountOptions').val();
+ if (mountOptions) {
+ storage.mountOptions = JSON.parse(mountOptions);
+ }
+
+ return storage;
+ },
+
+ /**
+ * Deletes the storage from the given tr
+ *
+ * @param $tr storage row
+ * @param Function callback callback to call after save
+ */
+ deleteStorageConfig: function($tr) {
+ var self = this;
+ var configId = $tr.data('id');
+ if (!_.isNumber(configId)) {
+ // deleting unsaved storage
+ $tr.remove();
+ return;
+ }
+ var storage = new this._storageConfigClass(configId);
+ this.updateStatus($tr, StorageConfig.Status.IN_PROGRESS);
+
+ storage.destroy({
+ success: function() {
+ $tr.remove();
+ },
+ error: function() {
+ self.updateStatus($tr, StorageConfig.Status.ERROR);
+ }
+ });
+ },
+
+ /**
+ * Saves the storage from the given tr
+ *
+ * @param $tr storage row
+ * @param Function callback callback to call after save
+ */
+ saveStorageConfig:function($tr, callback) {
+ var self = this;
+ var storage = this.getStorageConfig($tr);
+ if (!storage.validate()) {
+ return false;
+ }
+
+ this.updateStatus($tr, StorageConfig.Status.IN_PROGRESS);
+ storage.save({
+ success: function(result) {
+ self.updateStatus($tr, result.status);
+ $tr.attr('data-id', result.id);
+
+ if (_.isFunction(callback)) {
+ callback(storage);
+ }
+ },
+ error: function() {
+ self.updateStatus($tr, StorageConfig.Status.ERROR);
+ }
+ });
+ },
+
+ /**
+ * Recheck storage availability
+ *
+ * @param {jQuery} $tr storage row
+ * @return {boolean} success
+ */
+ recheckStorageConfig: function($tr) {
+ var self = this;
+ var storage = this.getStorageConfig($tr);
+ if (!storage.validate()) {
+ return false;
+ }
+
+ this.updateStatus($tr, StorageConfig.Status.IN_PROGRESS);
+ storage.recheck({
+ success: function(result) {
+ self.updateStatus($tr, result.status);
+ },
+ error: function() {
+ self.updateStatus($tr, StorageConfig.Status.ERROR);
+ }
+ });
+ },
+
+ /**
+ * Update status display
+ *
+ * @param {jQuery} $tr
+ * @param {int} status
+ */
+ updateStatus: function($tr, status) {
+ var $statusSpan = $tr.find('.status span');
+ $statusSpan.removeClass('success error loading-small');
+ switch (status) {
+ case StorageConfig.Status.IN_PROGRESS:
+ $statusSpan.addClass('loading-small');
+ break;
+ case StorageConfig.Status.SUCCESS:
+ $statusSpan.addClass('success');
+ break;
+ default:
+ $statusSpan.addClass('error');
+ }
+ },
+
+ /**
+ * Suggest mount point name that doesn't conflict with the existing names in the list
+ *
+ * @param {string} defaultMountPoint default name
+ */
+ _suggestMountPoint: function(defaultMountPoint) {
+ var $el = this.$el;
var pos = defaultMountPoint.indexOf('/');
if (pos !== -1) {
defaultMountPoint = defaultMountPoint.substring(0, pos);
@@ -372,7 +781,7 @@ $(document).ready(function() {
var match = true;
while (match && i < 20) {
match = false;
- $externalStorage.find('tbody td.mountPoint input').each(function(index, mountPoint) {
+ $el.find('tbody td.mountPoint input').each(function(index, mountPoint) {
if ($(mountPoint).val() === defaultMountPoint+append) {
match = true;
return false;
@@ -385,42 +794,12 @@ $(document).ready(function() {
break;
}
}
- return defaultMountPoint+append;
+ return defaultMountPoint + append;
}
+};
- $externalStorage.on('paste', 'td input', function() {
- var $me = $(this);
- var $tr = $me.closest('tr');
- setTimeout(function() {
- highlightInput($me);
- OC.MountConfig.saveStorage($tr);
- }, 20);
- });
-
- var timer;
-
- $externalStorage.on('keyup', 'td input', function() {
- clearTimeout(timer);
- var $tr = $(this).closest('tr');
- highlightInput($(this));
- if ($(this).val) {
- timer = setTimeout(function() {
- OC.MountConfig.saveStorage($tr);
- }, 2000);
- }
- });
-
- $externalStorage.on('change', 'td input:checkbox', function() {
- OC.MountConfig.saveStorage($(this).closest('tr'));
- });
-
- $externalStorage.on('change', '.applicable', function() {
- OC.MountConfig.saveStorage($(this).closest('tr'));
- });
-
- $externalStorage.on('click', '.status>span', function() {
- OC.MountConfig.saveStorage($(this).closest('tr'));
- });
+$(document).ready(function() {
+ var mountConfigListView = new MountConfigListView($('#externalStorage'));
$('#sslCertificate').on('click', 'td.remove>img', function() {
var $tr = $(this).closest('tr');
@@ -429,33 +808,7 @@ $(document).ready(function() {
return true;
});
- $externalStorage.on('click', 'td.remove>img', function() {
- var $tr = $(this).closest('tr');
- var mountPoint = $tr.find('.mountPoint input').val();
-
- if ($externalStorage.data('admin') === true) {
- var isPersonal = false;
- var multiselect = getSelection($tr);
- $.each(multiselect, function(index, value) {
- var pos = value.indexOf('(group)');
- if (pos != -1) {
- var mountType = 'group';
- var applicable = value.substr(0, pos);
- } else {
- var mountType = 'user';
- var applicable = value;
- }
- $.post(OC.filePath('files_external', 'ajax', 'removeMountPoint.php'), { mountPoint: mountPoint, mountType: mountType, applicable: applicable, isPersonal: isPersonal });
- });
- } else {
- var mountType = 'user';
- var applicable = OC.currentUser;
- var isPersonal = true;
- $.post(OC.filePath('files_external', 'ajax', 'removeMountPoint.php'), { mountPoint: mountPoint, mountType: mountType, applicable: applicable, isPersonal: isPersonal });
- }
- $tr.remove();
- });
-
+ // TODO: move this into its own View class
var $allowUserMounting = $('#allowUserMounting');
$allowUserMounting.bind('change', function() {
OC.msg.startSaving('#userMountingMsg');
@@ -484,6 +837,31 @@ $(document).ready(function() {
}
});
+
+ // global instance
+ OCA.External.Settings.mountConfig = mountConfigListView;
+
+ /**
+ * Legacy
+ *
+ * @namespace
+ * @deprecated use OCA.External.Settings.mountConfig instead
+ */
+ OC.MountConfig = {
+ saveStorage: _.bind(mountConfigListView.saveStorageConfig, mountConfigListView)
+ };
});
+// export
+
+OCA.External = OCA.External || {};
+/**
+ * @namespace
+ */
+OCA.External.Settings = OCA.External.Settings || {};
+
+OCA.External.Settings.GlobalStorageConfig = GlobalStorageConfig;
+OCA.External.Settings.UserStorageConfig = UserStorageConfig;
+OCA.External.Settings.MountConfigListView = MountConfigListView;
+
})();
diff --git a/apps/files_external/js/sftp_key.js b/apps/files_external/js/sftp_key.js
index 2b39628247c..55b11b1fac9 100644
--- a/apps/files_external/js/sftp_key.js
+++ b/apps/files_external/js/sftp_key.js
@@ -42,7 +42,7 @@ $(document).ready(function() {
if (result && result.status === 'success') {
$(config).find('[data-parameter="public_key"]').val(result.data.public_key);
$(config).find('[data-parameter="private_key"]').val(result.data.private_key);
- OC.MountConfig.saveStorage(tr, function() {
+ OCA.External.mountConfig.saveStorageConfig(tr, function() {
// Nothing to do
});
} else {
diff --git a/apps/files_external/l10n/ca.js b/apps/files_external/l10n/ca.js
index 78aa5ad5b8d..2786753444a 100644
--- a/apps/files_external/l10n/ca.js
+++ b/apps/files_external/l10n/ca.js
@@ -43,6 +43,7 @@ OC.L10N.register(
"Username as share" : "Nom d'usuari per compartir",
"URL" : "URL",
"Secure https://" : "Protocol segur https://",
+ "Public key" : "Clau pública",
"Access granted" : "S'ha concedit l'accés",
"Error configuring Dropbox storage" : "Error en configurar l'emmagatzemament Dropbox",
"Grant access" : "Concedeix accés",
@@ -52,10 +53,15 @@ OC.L10N.register(
"All users. Type to select user or group." : "Tots els usuaris. Escriu per seleccionar un usuari o grup.",
"(group)" : "(grup)",
"Saved" : "Desat",
+ "Generate keys" : "Generar claus",
+ "Error generating key pair" : "Error en generar el parell de claus",
"<b>Note:</b> " : "<b>Nota:</b> ",
+ "and" : "i",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El suport cURL no està activat o instal·lat a PHP. No es pot muntar %s. Demaneu a l'administrador del sistema que l'instal·li.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El suport FTP per PHP no està activat o no està instal·lat. No es pot muntar %s. Demaneu a l'administrador del sistema que l'instal·li.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> %s no està instal·lat. No es pot muntar %s. Demaneu a l'administrador del sistema que l'instal·li.",
+ "No external storage configured" : "Sense emmagatzematge extern configurat",
+ "You can configure external storages in the personal settings" : "Pot configurar emmagatzematges externs en els ajustos personals",
"Name" : "Nom",
"Storage type" : "Tipus d'emmagatzemament",
"Scope" : "Abast",
diff --git a/apps/files_external/l10n/ca.json b/apps/files_external/l10n/ca.json
index 01f63676b59..a13a9d2335f 100644
--- a/apps/files_external/l10n/ca.json
+++ b/apps/files_external/l10n/ca.json
@@ -41,6 +41,7 @@
"Username as share" : "Nom d'usuari per compartir",
"URL" : "URL",
"Secure https://" : "Protocol segur https://",
+ "Public key" : "Clau pública",
"Access granted" : "S'ha concedit l'accés",
"Error configuring Dropbox storage" : "Error en configurar l'emmagatzemament Dropbox",
"Grant access" : "Concedeix accés",
@@ -50,10 +51,15 @@
"All users. Type to select user or group." : "Tots els usuaris. Escriu per seleccionar un usuari o grup.",
"(group)" : "(grup)",
"Saved" : "Desat",
+ "Generate keys" : "Generar claus",
+ "Error generating key pair" : "Error en generar el parell de claus",
"<b>Note:</b> " : "<b>Nota:</b> ",
+ "and" : "i",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El suport cURL no està activat o instal·lat a PHP. No es pot muntar %s. Demaneu a l'administrador del sistema que l'instal·li.",
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El suport FTP per PHP no està activat o no està instal·lat. No es pot muntar %s. Demaneu a l'administrador del sistema que l'instal·li.",
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> %s no està instal·lat. No es pot muntar %s. Demaneu a l'administrador del sistema que l'instal·li.",
+ "No external storage configured" : "Sense emmagatzematge extern configurat",
+ "You can configure external storages in the personal settings" : "Pot configurar emmagatzematges externs en els ajustos personals",
"Name" : "Nom",
"Storage type" : "Tipus d'emmagatzemament",
"Scope" : "Abast",
diff --git a/apps/files_external/l10n/fr.js b/apps/files_external/l10n/fr.js
index 00be27114a0..e2a3e831275 100644
--- a/apps/files_external/l10n/fr.js
+++ b/apps/files_external/l10n/fr.js
@@ -20,9 +20,9 @@ OC.L10N.register(
"Port" : "Port",
"Region" : "Région",
"Enable SSL" : "Activer SSL",
- "Enable Path Style" : "Activer le style de chemin",
- "App key" : "Clé App",
- "App secret" : "Secret de l'application",
+ "Enable Path Style" : "Accès par path",
+ "App key" : "App key",
+ "App secret" : "App secret",
"Host" : "Hôte",
"Username" : "Nom d'utilisateur",
"Password" : "Mot de passe",
diff --git a/apps/files_external/l10n/fr.json b/apps/files_external/l10n/fr.json
index 21a2925b2aa..f818a018408 100644
--- a/apps/files_external/l10n/fr.json
+++ b/apps/files_external/l10n/fr.json
@@ -18,9 +18,9 @@
"Port" : "Port",
"Region" : "Région",
"Enable SSL" : "Activer SSL",
- "Enable Path Style" : "Activer le style de chemin",
- "App key" : "Clé App",
- "App secret" : "Secret de l'application",
+ "Enable Path Style" : "Accès par path",
+ "App key" : "App key",
+ "App secret" : "App secret",
"Host" : "Hôte",
"Username" : "Nom d'utilisateur",
"Password" : "Mot de passe",
diff --git a/apps/files_external/l10n/nb_NO.js b/apps/files_external/l10n/nb_NO.js
index a54327c8bfd..3981143b9c5 100644
--- a/apps/files_external/l10n/nb_NO.js
+++ b/apps/files_external/l10n/nb_NO.js
@@ -53,6 +53,8 @@ OC.L10N.register(
"All users. Type to select user or group." : "Alle brukere. Tast for å velge bruker eller gruppe.",
"(group)" : "(gruppe)",
"Saved" : "Lagret",
+ "Generate keys" : "Generer nøkler",
+ "Error generating key pair" : "Feil ved nøkkelgenerering",
"<b>Note:</b> " : "<b>Merk:</b> ",
"and" : "og",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> Støtte for cURL i PHP er ikke aktivert eller installert. Oppkobling av %s er ikke mulig. Be systemadministratoren om å installere det.",
diff --git a/apps/files_external/l10n/nb_NO.json b/apps/files_external/l10n/nb_NO.json
index 3af5e7a6320..63290524a82 100644
--- a/apps/files_external/l10n/nb_NO.json
+++ b/apps/files_external/l10n/nb_NO.json
@@ -51,6 +51,8 @@
"All users. Type to select user or group." : "Alle brukere. Tast for å velge bruker eller gruppe.",
"(group)" : "(gruppe)",
"Saved" : "Lagret",
+ "Generate keys" : "Generer nøkler",
+ "Error generating key pair" : "Feil ved nøkkelgenerering",
"<b>Note:</b> " : "<b>Merk:</b> ",
"and" : "og",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> Støtte for cURL i PHP er ikke aktivert eller installert. Oppkobling av %s er ikke mulig. Be systemadministratoren om å installere det.",
diff --git a/apps/files_external/l10n/uk.js b/apps/files_external/l10n/uk.js
index 438359cd979..11b83377308 100644
--- a/apps/files_external/l10n/uk.js
+++ b/apps/files_external/l10n/uk.js
@@ -53,6 +53,8 @@ OC.L10N.register(
"All users. Type to select user or group." : "Всі користувачі. Введіть ім'я користувача або групи.",
"(group)" : "(група)",
"Saved" : "Збереженно",
+ "Generate keys" : "Створити ключі",
+ "Error generating key pair" : "Помилка створення ключової пари",
"<b>Note:</b> " : "<b>Примітка:</b>",
"and" : "і",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примітка:</b> Підтримку cURL в PHP не ввімкнено чи не встановлена. Під'єднатися до %s неможливо. Зверніться до системного адміністратора.",
diff --git a/apps/files_external/l10n/uk.json b/apps/files_external/l10n/uk.json
index 2df70501365..0efe7b17e87 100644
--- a/apps/files_external/l10n/uk.json
+++ b/apps/files_external/l10n/uk.json
@@ -51,6 +51,8 @@
"All users. Type to select user or group." : "Всі користувачі. Введіть ім'я користувача або групи.",
"(group)" : "(група)",
"Saved" : "Збереженно",
+ "Generate keys" : "Створити ключі",
+ "Error generating key pair" : "Помилка створення ключової пари",
"<b>Note:</b> " : "<b>Примітка:</b>",
"and" : "і",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примітка:</b> Підтримку cURL в PHP не ввімкнено чи не встановлена. Під'єднатися до %s неможливо. Зверніться до системного адміністратора.",
diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php
index ddfab439879..85a93a779ae 100644
--- a/apps/files_external/lib/config.php
+++ b/apps/files_external/lib/config.php
@@ -32,6 +32,10 @@ class OC_Mount_Config {
const MOUNT_TYPE_USER = 'user';
const MOUNT_TYPE_PERSONAL = 'personal';
+ // getBackendStatus return types
+ const STATUS_SUCCESS = 0;
+ const STATUS_ERROR = 1;
+
// whether to skip backend test (for unit tests, as this static class is not mockable)
public static $skipTest = false;
@@ -143,15 +147,9 @@ class OC_Mount_Config {
$mountPoints = array();
$datadir = \OC_Config::getValue("datadirectory", \OC::$SERVERROOT . "/data");
- $mount_file = \OC_Config::getValue("mount_file", $datadir . "/mount.json");
$backends = self::getBackends();
- //move config file to it's new position
- if (is_file(\OC::$SERVERROOT . '/config/mount.json')) {
- rename(\OC::$SERVERROOT . '/config/mount.json', $mount_file);
- }
-
// Load system mount points
$mountConfig = self::readData();
@@ -354,9 +352,17 @@ class OC_Mount_Config {
'backend' => $backends[$mount['class']]['backend'],
'priority' => $mount['priority'],
'options' => $mount['options'],
- 'applicable' => array('groups' => array($group), 'users' => array()),
- 'status' => self::getBackendStatus($mount['class'], $mount['options'], false)
+ 'applicable' => array('groups' => array($group), 'users' => array())
);
+ if (isset($mount['id'])) {
+ $config['id'] = (int)$mount['id'];
+ }
+ if (isset($mount['storage_id'])) {
+ $config['storage_id'] = (int)$mount['storage_id'];
+ }
+ if (isset($mount['mountOptions'])) {
+ $config['mountOptions'] = $mount['mountOptions'];
+ }
$hash = self::makeConfigHash($config);
// If an existing config exists (with same class, mountpoint and options)
if (isset($system[$hash])) {
@@ -388,9 +394,17 @@ class OC_Mount_Config {
'backend' => $backends[$mount['class']]['backend'],
'priority' => $mount['priority'],
'options' => $mount['options'],
- 'applicable' => array('groups' => array(), 'users' => array($user)),
- 'status' => self::getBackendStatus($mount['class'], $mount['options'], false)
+ 'applicable' => array('groups' => array(), 'users' => array($user))
);
+ if (isset($mount['id'])) {
+ $config['id'] = (int)$mount['id'];
+ }
+ if (isset($mount['storage_id'])) {
+ $config['storage_id'] = (int)$mount['storage_id'];
+ }
+ if (isset($mount['mountOptions'])) {
+ $config['mountOptions'] = $mount['mountOptions'];
+ }
$hash = self::makeConfigHash($config);
// If an existing config exists (with same class, mountpoint and options)
if (isset($system[$hash])) {
@@ -424,14 +438,23 @@ class OC_Mount_Config {
$mount['class'] = '\OC\Files\Storage\\' . substr($mount['class'], 15);
}
$mount['options'] = self::decryptPasswords($mount['options']);
- $personal[] = array(
+ $config = array(
'class' => $mount['class'],
// Remove '/uid/files/' from mount point
'mountpoint' => substr($mountPoint, strlen($uid) + 8),
'backend' => $backEnds[$mount['class']]['backend'],
- 'options' => $mount['options'],
- 'status' => self::getBackendStatus($mount['class'], $mount['options'], true)
+ 'options' => $mount['options']
);
+ if (isset($mount['id'])) {
+ $config['id'] = (int)$mount['id'];
+ }
+ if (isset($mount['storage_id'])) {
+ $config['storage_id'] = (int)$mount['storage_id'];
+ }
+ if (isset($mount['mountOptions'])) {
+ $config['mountOptions'] = $mount['mountOptions'];
+ }
+ $personal[] = $config;
}
}
return $personal;
@@ -442,11 +465,11 @@ class OC_Mount_Config {
*
* @param string $class backend class name
* @param array $options backend configuration options
- * @return bool true if the connection succeeded, false otherwise
+ * @return int see self::STATUS_*
*/
- private static function getBackendStatus($class, $options, $isPersonal) {
+ public static function getBackendStatus($class, $options, $isPersonal) {
if (self::$skipTest) {
- return true;
+ return self::STATUS_SUCCESS;
}
foreach ($options as &$option) {
$option = self::setUserVars(OCP\User::getUser(), $option);
@@ -454,13 +477,14 @@ class OC_Mount_Config {
if (class_exists($class)) {
try {
$storage = new $class($options);
- return $storage->test($isPersonal);
+ if ($storage->test($isPersonal)) {
+ return self::STATUS_SUCCESS;
+ }
} catch (Exception $exception) {
\OCP\Util::logException('files_external', $exception);
- return false;
}
}
- return false;
+ return self::STATUS_ERROR;
}
/**
@@ -474,6 +498,8 @@ class OC_Mount_Config {
* @param bool $isPersonal Personal or system mount point i.e. is this being called from the personal or admin page
* @param int|null $priority Mount point priority, null for default
* @return boolean
+ *
+ * @deprecated use StoragesService#addStorage() instead
*/
public static function addMountPoint($mountPoint,
$class,
@@ -537,7 +563,7 @@ class OC_Mount_Config {
self::writeData($isPersonal ? OCP\User::getUser() : null, $mountPoints);
$result = self::getBackendStatus($class, $classOptions, $isPersonal);
- if ($result && $isNew) {
+ if ($result === self::STATUS_SUCCESS && $isNew) {
\OC_Hook::emit(
\OC\Files\Filesystem::CLASSNAME,
\OC\Files\Filesystem::signal_create_mount,
@@ -558,6 +584,8 @@ class OC_Mount_Config {
* @param string $applicable User or group to remove mount from
* @param bool $isPersonal Personal or system mount point
* @return bool
+ *
+ * @deprecated use StoragesService#removeStorage() instead
*/
public static function removeMountPoint($mountPoint, $mountType, $applicable, $isPersonal = false) {
// Verify that the mount point applies for the current user
@@ -622,13 +650,10 @@ class OC_Mount_Config {
* @param string|null $user If not null, personal for $user, otherwise system
* @return array
*/
- private static function readData($user = null) {
- $parser = new \OC\ArrayParser();
+ public static function readData($user = null) {
if (isset($user)) {
- $phpFile = OC_User::getHome($user) . '/mount.php';
$jsonFile = OC_User::getHome($user) . '/mount.json';
} else {
- $phpFile = OC::$SERVERROOT . '/config/mount.php';
$datadir = \OC_Config::getValue('datadirectory', \OC::$SERVERROOT . '/data/');
$jsonFile = \OC_Config::getValue('mount_file', $datadir . '/mount.json');
}
@@ -637,11 +662,6 @@ class OC_Mount_Config {
if (is_array($mountPoints)) {
return $mountPoints;
}
- } elseif (is_file($phpFile)) {
- $mountPoints = $parser->parsePHP(file_get_contents($phpFile));
- if (is_array($mountPoints)) {
- return $mountPoints;
- }
}
return array();
}
@@ -652,7 +672,7 @@ class OC_Mount_Config {
* @param string|null $user If not null, personal for $user, otherwise system
* @param array $data Mount points
*/
- private static function writeData($user, $data) {
+ public static function writeData($user, $data) {
if (isset($user)) {
$file = OC_User::getHome($user) . '/mount.json';
} else {
@@ -769,7 +789,7 @@ class OC_Mount_Config {
* @param array $options mount options
* @return array updated options
*/
- private static function encryptPasswords($options) {
+ public static function encryptPasswords($options) {
if (isset($options['password'])) {
$options['password_encrypted'] = self::encryptPassword($options['password']);
// do not unset the password, we want to keep the keys order
@@ -785,7 +805,7 @@ class OC_Mount_Config {
* @param array $options mount options
* @return array updated options
*/
- private static function decryptPasswords($options) {
+ public static function decryptPasswords($options) {
// note: legacy options might still have the unencrypted password in the "password" field
if (isset($options['password_encrypted'])) {
$options['password'] = self::decryptPassword($options['password_encrypted']);
@@ -871,12 +891,14 @@ class OC_Mount_Config {
* This is mostly used to find out whether configurations
* are the same.
*/
- private static function makeConfigHash($config) {
+ public static function makeConfigHash($config) {
$data = json_encode(
array(
'c' => $config['class'],
'm' => $config['mountpoint'],
- 'o' => $config['options']
+ 'o' => $config['options'],
+ 'p' => isset($config['priority']) ? $config['priority'] : -1,
+ 'mo' => isset($config['mountOptions']) ? $config['mountOptions'] : [],
)
);
return hash('md5', $data);
diff --git a/apps/files_external/lib/dropbox.php b/apps/files_external/lib/dropbox.php
index 3dea8515b7b..af0a81e58d5 100644
--- a/apps/files_external/lib/dropbox.php
+++ b/apps/files_external/lib/dropbox.php
@@ -100,7 +100,12 @@ class Dropbox extends \OC\Files\Storage\Common {
return $contents;
} else {
try {
- $response = $this->dropbox->getMetaData($path, 'false');
+ $requestPath = $path;
+ if ($path === '.') {
+ $requestPath = '';
+ }
+
+ $response = $this->dropbox->getMetaData($requestPath, 'false');
if (!isset($response['is_deleted']) || !$response['is_deleted']) {
$this->metaData[$path] = $response;
return $response;
diff --git a/apps/files_external/lib/notfoundexception.php b/apps/files_external/lib/notfoundexception.php
new file mode 100644
index 00000000000..d1d15309d5b
--- /dev/null
+++ b/apps/files_external/lib/notfoundexception.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files_external;
+
+/**
+ * Storage is not found
+ */
+class NotFoundException extends \Exception {
+}
diff --git a/apps/files_external/lib/storageconfig.php b/apps/files_external/lib/storageconfig.php
new file mode 100644
index 00000000000..80d0152db8c
--- /dev/null
+++ b/apps/files_external/lib/storageconfig.php
@@ -0,0 +1,292 @@
+<?php
+/**
+ * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files_external\Lib;
+
+/**
+ * External storage configuration
+ */
+class StorageConfig implements \JsonSerializable {
+
+ /**
+ * Storage config id
+ *
+ * @var int
+ */
+ private $id;
+
+ /**
+ * Backend class name
+ *
+ * @var string
+ */
+ private $backendClass;
+
+ /**
+ * Backend options
+ *
+ * @var array
+ */
+ private $backendOptions = [];
+
+ /**
+ * Mount point path, relative to the user's "files" folder
+ *
+ * @var string
+ */
+ private $mountPoint;
+
+ /**
+ * Storage status
+ *
+ * @var int
+ */
+ private $status;
+
+ /**
+ * Priority
+ *
+ * @var int
+ */
+ private $priority;
+
+ /**
+ * List of users who have access to this storage
+ *
+ * @var array
+ */
+ private $applicableUsers = [];
+
+ /**
+ * List of groups that have access to this storage
+ *
+ * @var array
+ */
+ private $applicableGroups = [];
+
+ /**
+ * Mount-specific options
+ *
+ * @var array
+ */
+ private $mountOptions = [];
+
+ /**
+ * Creates a storage config
+ *
+ * @param int|null $id config id or null for a new config
+ */
+ public function __construct($id = null) {
+ $this->id = $id;
+ }
+
+ /**
+ * Returns the configuration id
+ *
+ * @return int
+ */
+ public function getId() {
+ return $this->id;
+ }
+
+ /**
+ * Sets the configuration id
+ *
+ * @param int $id configuration id
+ */
+ public function setId($id) {
+ $this->id = $id;
+ }
+
+ /**
+ * Returns mount point path relative to the user's
+ * "files" folder.
+ *
+ * @return string path
+ */
+ public function getMountPoint() {
+ return $this->mountPoint;
+ }
+
+ /**
+ * Sets mount point path relative to the user's
+ * "files" folder.
+ * The path will be normalized.
+ *
+ * @param string $mountPoint path
+ */
+ public function setMountPoint($mountPoint) {
+ $this->mountPoint = \OC\Files\Filesystem::normalizePath($mountPoint);
+ }
+
+ /**
+ * Returns the external storage backend class name
+ *
+ * @return string external storage backend class name
+ */
+ public function getBackendClass() {
+ return $this->backendClass;
+ }
+
+ /**
+ * Sets the external storage backend class name
+ *
+ * @param string external storage backend class name
+ */
+ public function setBackendClass($backendClass) {
+ $this->backendClass = $backendClass;
+ }
+
+ /**
+ * Returns the external storage backend-specific options
+ *
+ * @return array backend options
+ */
+ public function getBackendOptions() {
+ return $this->backendOptions;
+ }
+
+ /**
+ * Sets the external storage backend-specific options
+ *
+ * @param array $backendOptions backend options
+ */
+ public function setBackendOptions($backendOptions) {
+ $this->backendOptions = $backendOptions;
+ }
+
+ /**
+ * Returns the mount priority
+ *
+ * @return int priority
+ */
+ public function getPriority() {
+ return $this->priority;
+ }
+
+ /**
+ * Sets the mount priotity
+ *
+ * @param int $priority priority
+ */
+ public function setPriority($priority) {
+ $this->priority = $priority;
+ }
+
+ /**
+ * Returns the users for which to mount this storage
+ *
+ * @return array applicable users
+ */
+ public function getApplicableUsers() {
+ return $this->applicableUsers;
+ }
+
+ /**
+ * Sets the users for which to mount this storage
+ *
+ * @param array|null $applicableUsers applicable users
+ */
+ public function setApplicableUsers($applicableUsers) {
+ if (is_null($applicableUsers)) {
+ $applicableUsers = [];
+ }
+ $this->applicableUsers = $applicableUsers;
+ }
+
+ /**
+ * Returns the groups for which to mount this storage
+ *
+ * @return array applicable groups
+ */
+ public function getApplicableGroups() {
+ return $this->applicableGroups;
+ }
+
+ /**
+ * Sets the groups for which to mount this storage
+ *
+ * @param array|null $applicableGroups applicable groups
+ */
+ public function setApplicableGroups($applicableGroups) {
+ if (is_null($applicableGroups)) {
+ $applicableGroups = [];
+ }
+ $this->applicableGroups = $applicableGroups;
+ }
+
+ /**
+ * Returns the mount-specific options
+ *
+ * @return array mount specific options
+ */
+ public function getMountOptions() {
+ return $this->mountOptions;
+ }
+
+ /**
+ * Sets the mount-specific options
+ *
+ * @param array $mountOptions applicable groups
+ */
+ public function setMountOptions($mountOptions) {
+ if (is_null($mountOptions)) {
+ $mountOptions = [];
+ }
+ $this->mountOptions = $mountOptions;
+ }
+
+ /**
+ * Sets the storage status, whether the config worked last time
+ *
+ * @return int $status status
+ */
+ public function getStatus() {
+ return $this->status;
+ }
+
+ /**
+ * Sets the storage status, whether the config worked last time
+ *
+ * @param int $status status
+ */
+ public function setStatus($status) {
+ $this->status = $status;
+ }
+
+ /**
+ * Serialize config to JSON
+ *
+ * @return array
+ */
+ public function jsonSerialize() {
+ $result = [];
+ if (!is_null($this->id)) {
+ $result['id'] = $this->id;
+ }
+ $result['mountPoint'] = $this->mountPoint;
+ $result['backendClass'] = $this->backendClass;
+ $result['backendOptions'] = $this->backendOptions;
+ if (!is_null($this->priority)) {
+ $result['priority'] = $this->priority;
+ }
+ if (!empty($this->applicableUsers)) {
+ $result['applicableUsers'] = $this->applicableUsers;
+ }
+ if (!empty($this->applicableGroups)) {
+ $result['applicableGroups'] = $this->applicableGroups;
+ }
+ if (!empty($this->mountOptions)) {
+ $result['mountOptions'] = $this->mountOptions;
+ }
+ if (!is_null($this->status)) {
+ $result['status'] = $this->status;
+ }
+ return $result;
+ }
+}
diff --git a/apps/files_external/personal.php b/apps/files_external/personal.php
index a279163ff70..8b435442259 100644
--- a/apps/files_external/personal.php
+++ b/apps/files_external/personal.php
@@ -24,9 +24,29 @@ OCP\Util::addScript('files_external', 'settings');
OCP\Util::addStyle('files_external', 'settings');
$backends = OC_Mount_Config::getPersonalBackends();
+$mounts = OC_Mount_Config::getPersonalMountPoints();
+$hasId = true;
+foreach ($mounts as $mount) {
+ if (!isset($mount['id'])) {
+ // some mount points are missing ids
+ $hasId = false;
+ break;
+ }
+}
+
+if (!$hasId) {
+ $service = new \OCA\Files_external\Service\UserStoragesService(\OC::$server->getUserSession());
+ // this will trigger the new storage code which will automatically
+ // generate storage config ids
+ $service->getAllStorages();
+ // re-read updated config
+ $mounts = OC_Mount_Config::getPersonalMountPoints();
+ // TODO: use the new storage config format in the template
+}
+
$tmpl = new OCP\Template('files_external', 'settings');
$tmpl->assign('isAdminPage', false);
-$tmpl->assign('mounts', OC_Mount_Config::getPersonalMountPoints());
+$tmpl->assign('mounts', $mounts);
$tmpl->assign('dependencies', OC_Mount_Config::checkDependencies());
$tmpl->assign('backends', $backends);
return $tmpl->fetchPage();
diff --git a/apps/files_external/service/globalstoragesservice.php b/apps/files_external/service/globalstoragesservice.php
new file mode 100644
index 00000000000..b024824c469
--- /dev/null
+++ b/apps/files_external/service/globalstoragesservice.php
@@ -0,0 +1,191 @@
+<?php
+/**
+ * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files_external\Service;
+
+use \OCP\IUserSession;
+use \OC\Files\Filesystem;
+
+use \OCA\Files_external\Lib\StorageConfig;
+use \OCA\Files_external\NotFoundException;
+
+/**
+ * Service class to manage global external storages
+ */
+class GlobalStoragesService extends StoragesService {
+
+ /**
+ * Write the storages to the configuration.
+ *
+ * @param array $storages map of storage id to storage config
+ */
+ public function writeConfig($storages) {
+ // let the horror begin
+ $mountPoints = [];
+ foreach ($storages as $storageConfig) {
+ $mountPoint = $storageConfig->getMountPoint();
+ $oldBackendOptions = $storageConfig->getBackendOptions();
+ $storageConfig->setBackendOptions(
+ \OC_Mount_Config::encryptPasswords(
+ $oldBackendOptions
+ )
+ );
+
+ // system mount
+ $rootMountPoint = '/$user/files/' . ltrim($mountPoint, '/');
+
+ $applicableUsers = $storageConfig->getApplicableUsers();
+ $applicableGroups = $storageConfig->getApplicableGroups();
+ foreach ($applicableUsers as $applicable) {
+ $this->addMountPoint(
+ $mountPoints,
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ $applicable,
+ $rootMountPoint,
+ $storageConfig
+ );
+ }
+
+ foreach ($applicableGroups as $applicable) {
+ $this->addMountPoint(
+ $mountPoints,
+ \OC_Mount_Config::MOUNT_TYPE_GROUP,
+ $applicable,
+ $rootMountPoint,
+ $storageConfig
+ );
+ }
+
+ // if neither "applicableGroups" or "applicableUsers" were set, use "all" user
+ if (empty($applicableUsers) && empty($applicableGroups)) {
+ $this->addMountPoint(
+ $mountPoints,
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ 'all',
+ $rootMountPoint,
+ $storageConfig
+ );
+ }
+
+ // restore old backend options where the password was not encrypted,
+ // because we don't want to change the state of the original object
+ $storageConfig->setBackendOptions($oldBackendOptions);
+ }
+
+ \OC_Mount_Config::writeData(null, $mountPoints);
+ }
+
+ /**
+ * Triggers $signal for all applicable users of the given
+ * storage
+ *
+ * @param StorageConfig $storage storage data
+ * @param string $signal signal to trigger
+ */
+ protected function triggerHooks(StorageConfig $storage, $signal) {
+ $applicableUsers = $storage->getApplicableUsers();
+ $applicableGroups = $storage->getApplicableGroups();
+ if (empty($applicableUsers) && empty($applicableGroups)) {
+ // raise for user "all"
+ $this->triggerApplicableHooks(
+ $signal,
+ $storage->getMountPoint(),
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ ['all']
+ );
+ return;
+ }
+
+ $this->triggerApplicableHooks(
+ $signal,
+ $storage->getMountPoint(),
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ $applicableUsers
+ );
+ $this->triggerApplicableHooks(
+ $signal,
+ $storage->getMountPoint(),
+ \OC_Mount_Config::MOUNT_TYPE_GROUP,
+ $applicableGroups
+ );
+ }
+
+ /**
+ * Triggers signal_create_mount or signal_delete_mount to
+ * accomodate for additions/deletions in applicableUsers
+ * and applicableGroups fields.
+ *
+ * @param StorageConfig $oldStorage old storage config
+ * @param StorageConfig $newStorage new storage config
+ */
+ protected function triggerChangeHooks(StorageConfig $oldStorage, StorageConfig $newStorage) {
+ // if mount point changed, it's like a deletion + creation
+ if ($oldStorage->getMountPoint() !== $newStorage->getMountPoint()) {
+ $this->triggerHooks($oldStorage, Filesystem::signal_delete_mount);
+ $this->triggerHooks($newStorage, Filesystem::signal_create_mount);
+ return;
+ }
+
+ $userAdditions = array_diff($newStorage->getApplicableUsers(), $oldStorage->getApplicableUsers());
+ $userDeletions = array_diff($oldStorage->getApplicableUsers(), $newStorage->getApplicableUsers());
+ $groupAdditions = array_diff($newStorage->getApplicableGroups(), $oldStorage->getApplicableGroups());
+ $groupDeletions = array_diff($oldStorage->getApplicableGroups(), $newStorage->getApplicableGroups());
+
+ // if no applicable were set, raise a signal for "all"
+ if (empty($oldStorage->getApplicableUsers()) && empty($oldStorage->getApplicableGroups())) {
+ $this->triggerApplicableHooks(
+ Filesystem::signal_delete_mount,
+ $oldStorage->getMountPoint(),
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ ['all']
+ );
+ }
+
+ // trigger delete for removed users
+ $this->triggerApplicableHooks(
+ Filesystem::signal_delete_mount,
+ $oldStorage->getMountPoint(),
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ $userDeletions
+ );
+
+ // trigger delete for removed groups
+ $this->triggerApplicableHooks(
+ Filesystem::signal_delete_mount,
+ $oldStorage->getMountPoint(),
+ \OC_Mount_Config::MOUNT_TYPE_GROUP,
+ $groupDeletions
+ );
+
+ // and now add the new users
+ $this->triggerApplicableHooks(
+ Filesystem::signal_create_mount,
+ $newStorage->getMountPoint(),
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ $userAdditions
+ );
+
+ // and now add the new groups
+ $this->triggerApplicableHooks(
+ Filesystem::signal_create_mount,
+ $newStorage->getMountPoint(),
+ \OC_Mount_Config::MOUNT_TYPE_GROUP,
+ $groupAdditions
+ );
+
+ // if no applicable, raise a signal for "all"
+ if (empty($newStorage->getApplicableUsers()) && empty($newStorage->getApplicableGroups())) {
+ $this->triggerApplicableHooks(
+ Filesystem::signal_create_mount,
+ $newStorage->getMountPoint(),
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ ['all']
+ );
+ }
+ }
+}
diff --git a/apps/files_external/service/storagesservice.php b/apps/files_external/service/storagesservice.php
new file mode 100644
index 00000000000..6800474126f
--- /dev/null
+++ b/apps/files_external/service/storagesservice.php
@@ -0,0 +1,389 @@
+<?php
+/**
+ * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files_external\Service;
+
+use \OCP\IUserSession;
+use \OC\Files\Filesystem;
+
+use \OCA\Files_external\Lib\StorageConfig;
+use \OCA\Files_external\NotFoundException;
+
+/**
+ * Service class to manage external storages
+ */
+abstract class StoragesService {
+
+ /**
+ * Read legacy config data
+ *
+ * @return array list of mount configs
+ */
+ protected function readLegacyConfig() {
+ // read global config
+ return \OC_Mount_Config::readData();
+ }
+
+ /**
+ * Copy legacy storage options into the given storage config object.
+ *
+ * @param StorageConfig $storageConfig storage config to populate
+ * @param string $mountType mount type
+ * @param string $applicable applicable user or group
+ * @param array $storageOptions legacy storage options
+ *
+ * @return StorageConfig populated storage config
+ */
+ protected function populateStorageConfigWithLegacyOptions(
+ &$storageConfig,
+ $mountType,
+ $applicable,
+ $storageOptions
+ ) {
+ $storageConfig->setBackendClass($storageOptions['class']);
+ $storageConfig->setBackendOptions($storageOptions['options']);
+ if (isset($storageOptions['mountOptions'])) {
+ $storageConfig->setMountOptions($storageOptions['mountOptions']);
+ }
+ if (isset($storageOptions['priority'])) {
+ $storageConfig->setPriority($storageOptions['priority']);
+ }
+
+ if ($mountType === \OC_Mount_Config::MOUNT_TYPE_USER) {
+ $applicableUsers = $storageConfig->getApplicableUsers();
+ if ($applicable !== 'all') {
+ $applicableUsers[] = $applicable;
+ $storageConfig->setApplicableUsers($applicableUsers);
+ }
+ } else if ($mountType === \OC_Mount_Config::MOUNT_TYPE_GROUP) {
+ $applicableGroups = $storageConfig->getApplicableGroups();
+ $applicableGroups[] = $applicable;
+ $storageConfig->setApplicableGroups($applicableGroups);
+ }
+ return $storageConfig;
+ }
+
+ /**
+ * Read the external storages config
+ *
+ * @return array map of storage id to storage config
+ */
+ protected function readConfig() {
+ $mountPoints = $this->readLegacyConfig();
+
+ /**
+ * Here is the how the horribly messy mount point array looks like
+ * from the mount.json file:
+ *
+ * $storageOptions = $mountPoints[$mountType][$applicable][$mountPath]
+ *
+ * - $mountType is either "user" or "group"
+ * - $applicable is the name of a user or group (or the current user for personal mounts)
+ * - $mountPath is the mount point path (where the storage must be mounted)
+ * - $storageOptions is a map of storage options:
+ * - "priority": storage priority
+ * - "backend": backend class name
+ * - "options": backend-specific options
+ * - "mountOptions": mount-specific options (ex: disable previews, scanner, etc)
+ */
+
+ // group by storage id
+ $storages = [];
+
+ // for storages without id (legacy), group by config hash for
+ // later processing
+ $storagesWithConfigHash = [];
+
+ foreach ($mountPoints as $mountType => $applicables) {
+ foreach ($applicables as $applicable => $mountPaths) {
+ foreach ($mountPaths as $rootMountPath => $storageOptions) {
+ $currentStorage = null;
+
+ /**
+ * Flag whether the config that was read already has an id.
+ * If not, it will use a config hash instead and generate
+ * a proper id later
+ *
+ * @var boolean
+ */
+ $hasId = false;
+
+ // the root mount point is in the format "/$user/files/the/mount/point"
+ // we remove the "/$user/files" prefix
+ $parts = explode('/', trim($rootMountPath, '/'), 3);
+ if (count($parts) < 3) {
+ // something went wrong, skip
+ \OCP\Util::writeLog(
+ 'files_external',
+ 'Could not parse mount point "' . $rootMountPath . '"',
+ \OCP\Util::ERROR
+ );
+ continue;
+ }
+
+ $relativeMountPath = $parts[2];
+
+ // note: we cannot do this after the loop because the decrypted config
+ // options might be needed for the config hash
+ $storageOptions['options'] = \OC_Mount_Config::decryptPasswords($storageOptions['options']);
+
+ if (isset($storageOptions['id'])) {
+ $configId = (int)$storageOptions['id'];
+ if (isset($storages[$configId])) {
+ $currentStorage = $storages[$configId];
+ }
+ $hasId = true;
+ } else {
+ // missing id in legacy config, need to generate
+ // but at this point we don't know the max-id, so use
+ // first group it by config hash
+ $storageOptions['mountpoint'] = $rootMountPath;
+ $configId = \OC_Mount_Config::makeConfigHash($storageOptions);
+ if (isset($storagesWithConfigHash[$configId])) {
+ $currentStorage = $storagesWithConfigHash[$configId];
+ }
+ }
+
+ if (is_null($currentStorage)) {
+ // create new
+ $currentStorage = new StorageConfig($configId);
+ $currentStorage->setMountPoint($relativeMountPath);
+ }
+
+ $this->populateStorageConfigWithLegacyOptions(
+ $currentStorage,
+ $mountType,
+ $applicable,
+ $storageOptions
+ );
+
+ if ($hasId) {
+ $storages[$configId] = $currentStorage;
+ } else {
+ $storagesWithConfigHash[$configId] = $currentStorage;
+ }
+ }
+ }
+ }
+
+ // process storages with config hash, they must get a real id
+ if (!empty($storagesWithConfigHash)) {
+ $nextId = $this->generateNextId($storages);
+ foreach ($storagesWithConfigHash as $storage) {
+ $storage->setId($nextId);
+ $storages[$nextId] = $storage;
+ $nextId++;
+ }
+
+ // re-save the config with the generated ids
+ $this->writeConfig($storages);
+ }
+
+ return $storages;
+ }
+
+ /**
+ * Add mount point into the messy mount point structure
+ *
+ * @param array $mountPoints messy array of mount points
+ * @param string $mountType mount type
+ * @param string $applicable single applicable user or group
+ * @param string $rootMountPoint root mount point to use
+ * @param array $storageConfig storage config to set to the mount point
+ */
+ protected function addMountPoint(&$mountPoints, $mountType, $applicable, $rootMountPoint, $storageConfig) {
+ if (!isset($mountPoints[$mountType])) {
+ $mountPoints[$mountType] = [];
+ }
+
+ if (!isset($mountPoints[$mountType][$applicable])) {
+ $mountPoints[$mountType][$applicable] = [];
+ }
+
+ $options = [
+ 'id' => $storageConfig->getId(),
+ 'class' => $storageConfig->getBackendClass(),
+ 'options' => $storageConfig->getBackendOptions(),
+ ];
+
+ if (!is_null($storageConfig->getPriority())) {
+ $options['priority'] = $storageConfig->getPriority();
+ }
+ if (!empty($storageConfig->getMountOptions())) {
+ $options['mountOptions'] = $storageConfig->getMountOptions();
+ }
+
+ $mountPoints[$mountType][$applicable][$rootMountPoint] = $options;
+ }
+
+ /**
+ * Write the storages to the configuration.
+ *
+ * @param array $storages map of storage id to storage config
+ */
+ abstract protected function writeConfig($storages);
+
+ /**
+ * Get a storage with status
+ *
+ * @param int $id storage id
+ *
+ * @return StorageConfig
+ * @throws NotFoundException if the storage with the given id was not found
+ */
+ public function getStorage($id) {
+ $allStorages = $this->readConfig();
+
+ if (!isset($allStorages[$id])) {
+ throw new NotFoundException('Storage with id "' . $id . '" not found');
+ }
+
+ return $allStorages[$id];
+ }
+
+ /**
+ * Gets all storages
+ *
+ * @return array array of storage configs
+ */
+ public function getAllStorages() {
+ return $this->readConfig();
+ }
+
+ /**
+ * Add new storage to the configuration
+ *
+ * @param array $newStorage storage attributes
+ *
+ * @return StorageConfig storage config, with added id
+ */
+ public function addStorage(StorageConfig $newStorage) {
+ $allStorages = $this->readConfig();
+
+ $configId = $this->generateNextId($allStorages);
+ $newStorage->setId($configId);
+
+ // add new storage
+ $allStorages[$configId] = $newStorage;
+
+ $this->writeConfig($allStorages);
+
+ $this->triggerHooks($newStorage, Filesystem::signal_create_mount);
+
+ $newStorage->setStatus(\OC_Mount_Config::STATUS_SUCCESS);
+ return $newStorage;
+ }
+
+ /**
+ * Triggers the given hook signal for all the applicables given
+ *
+ * @param string $signal signal
+ * @param string $mountPoint hook mount pount param
+ * @param string $mountType hook mount type param
+ * @param array $applicableArray array of applicable users/groups for which to trigger the hook
+ */
+ protected function triggerApplicableHooks($signal, $mountPoint, $mountType, $applicableArray) {
+ foreach ($applicableArray as $applicable) {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ $signal,
+ [
+ Filesystem::signal_param_path => $mountPoint,
+ Filesystem::signal_param_mount_type => $mountType,
+ Filesystem::signal_param_users => $applicable,
+ ]
+ );
+ }
+ }
+
+ /**
+ * Triggers $signal for all applicable users of the given
+ * storage
+ *
+ * @param StorageConfig $storage storage data
+ * @param string $signal signal to trigger
+ */
+ abstract protected function triggerHooks(StorageConfig $storage, $signal);
+
+ /**
+ * Triggers signal_create_mount or signal_delete_mount to
+ * accomodate for additions/deletions in applicableUsers
+ * and applicableGroups fields.
+ *
+ * @param StorageConfig $oldStorage old storage data
+ * @param StorageConfig $newStorage new storage data
+ */
+ abstract protected function triggerChangeHooks(StorageConfig $oldStorage, StorageConfig $newStorage);
+
+ /**
+ * Update storage to the configuration
+ *
+ * @param StorageConfig $updatedStorage storage attributes
+ *
+ * @return StorageConfig storage config
+ * @throws NotFoundException if the given storage does not exist in the config
+ */
+ public function updateStorage(StorageConfig $updatedStorage) {
+ $allStorages = $this->readConfig();
+
+ $id = $updatedStorage->getId();
+ if (!isset($allStorages[$id])) {
+ throw new NotFoundException('Storage with id "' . $id . '" not found');
+ }
+
+ $oldStorage = $allStorages[$id];
+ $allStorages[$id] = $updatedStorage;
+
+ $this->writeConfig($allStorages);
+
+ $this->triggerChangeHooks($oldStorage, $updatedStorage);
+
+ return $this->getStorage($id);
+ }
+
+ /**
+ * Delete the storage with the given id.
+ *
+ * @param int $id storage id
+ *
+ * @throws NotFoundException if no storage was found with the given id
+ */
+ public function removeStorage($id) {
+ $allStorages = $this->readConfig();
+
+ if (!isset($allStorages[$id])) {
+ throw new NotFoundException('Storage with id "' . $id . '" not found');
+ }
+
+ $deletedStorage = $allStorages[$id];
+ unset($allStorages[$id]);
+
+ $this->writeConfig($allStorages);
+
+ $this->triggerHooks($deletedStorage, Filesystem::signal_delete_mount);
+ }
+
+ /**
+ * Generates a configuration id to use for a new configuration entry.
+ *
+ * @param array $allStorages array of all storage configs
+ *
+ * @return int id
+ */
+ protected function generateNextId($allStorages) {
+ if (empty($allStorages)) {
+ return 1;
+ }
+ // note: this will mess up with with concurrency,
+ // but so did the mount.json. This horribly hack
+ // will disappear once we move to DB tables to
+ // store the config
+ return (max(array_keys($allStorages)) + 1);
+ }
+
+}
diff --git a/apps/files_external/service/userstoragesservice.php b/apps/files_external/service/userstoragesservice.php
new file mode 100644
index 00000000000..df452a48126
--- /dev/null
+++ b/apps/files_external/service/userstoragesservice.php
@@ -0,0 +1,150 @@
+<?php
+/**
+ * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files_external\Service;
+
+use \OCP\IUserSession;
+use \OC\Files\Filesystem;
+
+use \OCA\Files_external\Lib\StorageConfig;
+use \OCA\Files_external\NotFoundException;
+
+/**
+ * Service class to manage user external storages
+ * (aka personal storages)
+ */
+class UserStoragesService extends StoragesService {
+
+ /**
+ * User session
+ *
+ * @var IUserSession
+ */
+ private $userSession;
+
+ /**
+ * Create a user storages service
+ *
+ * @param IUserSession $userSession user session
+ */
+ public function __construct(
+ IUserSession $userSession
+ ) {
+ $this->userSession = $userSession;
+ }
+
+ /**
+ * Read legacy config data
+ *
+ * @return array list of storage configs
+ */
+ protected function readLegacyConfig() {
+ // read user config
+ $user = $this->userSession->getUser()->getUID();
+ return \OC_Mount_Config::readData($user);
+ }
+
+ /**
+ * Read the external storages config
+ *
+ * @return array map of storage id to storage config
+ */
+ protected function readConfig() {
+ $user = $this->userSession->getUser()->getUID();
+ // TODO: in the future don't rely on the global config reading code
+ $storages = parent::readConfig();
+
+ $filteredStorages = [];
+ foreach ($storages as $configId => $storage) {
+ // filter out all bogus storages that aren't for the current user
+ if (!in_array($user, $storage->getApplicableUsers())) {
+ continue;
+ }
+
+ // clear applicable users, should not be used
+ $storage->setApplicableUsers([]);
+
+ // strip out unneeded applicableUser fields
+ $filteredStorages[$configId] = $storage;
+ }
+
+ return $filteredStorages;
+ }
+
+ /**
+ * Write the storages to the user's configuration.
+ *
+ * @param array $storages map of storage id to storage config
+ */
+ public function writeConfig($storages) {
+ $user = $this->userSession->getUser()->getUID();
+
+ // let the horror begin
+ $mountPoints = [];
+ foreach ($storages as $storageConfig) {
+ $mountPoint = $storageConfig->getMountPoint();
+ $oldBackendOptions = $storageConfig->getBackendOptions();
+ $storageConfig->setBackendOptions(
+ \OC_Mount_Config::encryptPasswords(
+ $oldBackendOptions
+ )
+ );
+
+ $rootMountPoint = '/' . $user . '/files/' . ltrim($mountPoint, '/');
+
+ $this->addMountPoint(
+ $mountPoints,
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ $user,
+ $rootMountPoint,
+ $storageConfig
+ );
+
+ // restore old backend options where the password was not encrypted,
+ // because we don't want to change the state of the original object
+ $storageConfig->setBackendOptions($oldBackendOptions);
+ }
+
+ \OC_Mount_Config::writeData($user, $mountPoints);
+ }
+
+ /**
+ * Triggers $signal for all applicable users of the given
+ * storage
+ *
+ * @param StorageConfig $storage storage data
+ * @param string $signal signal to trigger
+ */
+ protected function triggerHooks(StorageConfig $storage, $signal) {
+ $user = $this->userSession->getUser()->getUID();
+
+ // trigger hook for the current user
+ $this->triggerApplicableHooks(
+ $signal,
+ $storage->getMountPoint(),
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ [$user]
+ );
+ }
+
+ /**
+ * Triggers signal_create_mount or signal_delete_mount to
+ * accomodate for additions/deletions in applicableUsers
+ * and applicableGroups fields.
+ *
+ * @param StorageConfig $oldStorage old storage data
+ * @param StorageConfig $newStorage new storage data
+ */
+ protected function triggerChangeHooks(StorageConfig $oldStorage, StorageConfig $newStorage) {
+ // if mount point changed, it's like a deletion + creation
+ if ($oldStorage->getMountPoint() !== $newStorage->getMountPoint()) {
+ $this->triggerHooks($oldStorage, Filesystem::signal_delete_mount);
+ $this->triggerHooks($newStorage, Filesystem::signal_create_mount);
+ }
+ }
+}
diff --git a/apps/files_external/settings.php b/apps/files_external/settings.php
index dec329e82a2..3144e1a2ab6 100644
--- a/apps/files_external/settings.php
+++ b/apps/files_external/settings.php
@@ -42,9 +42,29 @@ foreach ($backends as $class => $backend)
}
}
+$mounts = OC_Mount_Config::getSystemMountPoints();
+$hasId = true;
+foreach ($mounts as $mount) {
+ if (!isset($mount['id'])) {
+ // some mount points are missing ids
+ $hasId = false;
+ break;
+ }
+}
+
+if (!$hasId) {
+ $service = new \OCA\Files_external\Service\GlobalStoragesService();
+ // this will trigger the new storage code which will automatically
+ // generate storage config ids
+ $service->getAllStorages();
+ // re-read updated config
+ $mounts = OC_Mount_Config::getSystemMountPoints();
+ // TODO: use the new storage config format in the template
+}
+
$tmpl = new OCP\Template('files_external', 'settings');
$tmpl->assign('isAdminPage', true);
-$tmpl->assign('mounts', OC_Mount_Config::getSystemMountPoints());
+$tmpl->assign('mounts', $mounts);
$tmpl->assign('backends', $backends);
$tmpl->assign('personal_backends', $personal_backends);
$tmpl->assign('dependencies', OC_Mount_Config::checkDependencies());
diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php
index 79950f30385..4866d177634 100644
--- a/apps/files_external/templates/settings.php
+++ b/apps/files_external/templates/settings.php
@@ -13,13 +13,11 @@
</tr>
</thead>
<tbody>
- <?php $_['mounts'] = array_merge($_['mounts'], array('' => array())); ?>
+ <?php $_['mounts'] = array_merge($_['mounts'], array('' => array('id' => ''))); ?>
<?php foreach ($_['mounts'] as $mount): ?>
- <tr <?php print_unescaped(isset($mount['mountpoint']) ? 'class="'.OC_Util::sanitizeHTML($mount['class']).'"' : 'id="addMountPoint"'); ?>>
+ <tr <?php print_unescaped(isset($mount['mountpoint']) ? 'class="'.OC_Util::sanitizeHTML($mount['class']).'"' : 'id="addMountPoint"'); ?> data-id="<?php p($mount['id']) ?>">
<td class="status">
- <?php if (isset($mount['status'])): ?>
- <span class="<?php p(($mount['status']) ? 'success' : 'error'); ?>"></span>
- <?php endif; ?>
+ <span></span>
</td>
<td class="mountPoint"><input type="text" name="mountPoint"
value="<?php p(isset($mount['mountpoint']) ? $mount['mountpoint'] : ''); ?>"
@@ -28,7 +26,7 @@
</td>
<?php if (!isset($mount['mountpoint'])): ?>
<td class="backend">
- <select id="selectBackend" data-configurations='<?php p(json_encode($_['backends'])); ?>'>
+ <select id="selectBackend" class="selectBackend" data-configurations='<?php p(json_encode($_['backends'])); ?>'>
<option value="" disabled selected
style="display:none;"><?php p($l->t('Add storage')); ?></option>
<?php foreach ($_['backends'] as $class => $backend): ?>
@@ -80,6 +78,14 @@
<?php OCP\Util::addScript('files_external', $_['backends'][$mount['class']]['custom']); ?>
<?php endif; ?>
<?php endif; ?>
+ <?php if (isset($mount['mountOptions'])): ?>
+ <input type="hidden" class="mountOptions" value="<?php p(json_encode($mount['mountOptions'])) ?>" />
+ <?php endif; ?>
+ <?php if ($_['isAdminPage']): ?>
+ <?php if (isset($mount['priority'])): ?>
+ <input type="hidden" class="priority" value="<?php p($mount['priority']) ?>" />
+ <?php endif; ?>
+ <?php endif; ?>
</td>
<?php if ($_['isAdminPage']): ?>
<td class="applicable"
diff --git a/lib/private/fileproxy/fileoperations.php b/apps/files_external/tests/controller/globalstoragescontrollertest.php
index b2ff2e7e5e9..7ba4d16a7e9 100644
--- a/lib/private/fileproxy/fileoperations.php
+++ b/apps/files_external/tests/controller/globalstoragescontrollertest.php
@@ -2,8 +2,8 @@
/**
* ownCloud
*
- * @author Bjoern Schiessle
- * @copyright 2012 Bjoern Schiessle <schiessle@owncloud.com>
+ * @author Vincent Petry
+ * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -19,19 +19,23 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
+namespace OCA\Files_external\Tests\Controller;
-/**
- * check if standard file operations
- */
+use \OCA\Files_external\Controller\GlobalStoragesController;
+use \OCA\Files_external\Service\GlobalStoragesService;
+use \OCP\AppFramework\Http;
+use \OCA\Files_external\NotFoundException;
-class OC_FileProxy_FileOperations extends OC_FileProxy{
- static $rootView;
+class GlobalStoragesControllerTest extends StoragesControllerTest {
+ public function setUp() {
+ parent::setUp();
+ $this->service = $this->getMock('\OCA\Files_external\Service\GlobalStoragesService');
- public function premkdir($path) {
- if(!self::$rootView) {
- self::$rootView = new \OC\Files\View('');
- }
- return !self::$rootView->file_exists($path);
+ $this->controller = new GlobalStoragesController(
+ 'files_external',
+ $this->getMock('\OCP\IRequest'),
+ $this->getMock('\OCP\IL10N'),
+ $this->service
+ );
}
-
}
diff --git a/apps/files_external/tests/controller/storagescontrollertest.php b/apps/files_external/tests/controller/storagescontrollertest.php
new file mode 100644
index 00000000000..853b4a86f03
--- /dev/null
+++ b/apps/files_external/tests/controller/storagescontrollertest.php
@@ -0,0 +1,225 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Vincent Petry
+ * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OCA\Files_external\Tests\Controller;
+
+use \OCP\AppFramework\Http;
+
+use \OCA\Files_external\Controller\GlobalStoragesController;
+use \OCA\Files_external\Service\GlobalStoragesService;
+use \OCA\Files_external\Lib\StorageConfig;
+use \OCA\Files_external\NotFoundException;
+
+abstract class StoragesControllerTest extends \Test\TestCase {
+
+ /**
+ * @var GlobalStoragesController
+ */
+ protected $controller;
+
+ /**
+ * @var GlobalStoragesService
+ */
+ protected $service;
+
+ public function setUp() {
+ \OC_Mount_Config::$skipTest = true;
+ }
+
+ public function tearDown() {
+ \OC_Mount_Config::$skipTest = false;
+ }
+
+ public function testAddStorage() {
+ $storageConfig = new StorageConfig(1);
+ $storageConfig->setMountPoint('mount');
+
+ $this->service->expects($this->once())
+ ->method('addStorage')
+ ->will($this->returnValue($storageConfig));
+
+ $response = $this->controller->create(
+ 'mount',
+ '\OC\Files\Storage\SMB',
+ array(),
+ [],
+ [],
+ [],
+ null
+ );
+
+ $data = $response->getData();
+ $this->assertEquals($storageConfig, $data);
+ $this->assertEquals(Http::STATUS_CREATED, $response->getStatus());
+ }
+
+ public function testUpdateStorage() {
+ $storageConfig = new StorageConfig(1);
+ $storageConfig->setMountPoint('mount');
+
+ $this->service->expects($this->once())
+ ->method('updateStorage')
+ ->will($this->returnValue($storageConfig));
+
+ $response = $this->controller->update(
+ 1,
+ 'mount',
+ '\OC\Files\Storage\SMB',
+ array(),
+ [],
+ [],
+ [],
+ null
+ );
+
+ $data = $response->getData();
+ $this->assertEquals($storageConfig, $data);
+ $this->assertEquals(Http::STATUS_OK, $response->getStatus());
+ }
+
+ function mountPointNamesProvider() {
+ return array(
+ array(''),
+ array('/'),
+ array('//'),
+ );
+ }
+
+ /**
+ * @dataProvider mountPointNamesProvider
+ */
+ public function testAddOrUpdateStorageInvalidMountPoint($mountPoint) {
+ $this->service->expects($this->never())
+ ->method('addStorage');
+ $this->service->expects($this->never())
+ ->method('updateStorage');
+
+ $response = $this->controller->create(
+ $mountPoint,
+ '\OC\Files\Storage\SMB',
+ array(),
+ [],
+ [],
+ [],
+ null
+ );
+
+ $this->assertEquals(Http::STATUS_UNPROCESSABLE_ENTITY, $response->getStatus());
+
+ $response = $this->controller->update(
+ 1,
+ $mountPoint,
+ '\OC\Files\Storage\SMB',
+ array(),
+ [],
+ [],
+ [],
+ null
+ );
+
+ $this->assertEquals(Http::STATUS_UNPROCESSABLE_ENTITY, $response->getStatus());
+ }
+
+ public function testAddOrUpdateStorageInvalidBackend() {
+ $this->service->expects($this->never())
+ ->method('addStorage');
+ $this->service->expects($this->never())
+ ->method('updateStorage');
+
+ $response = $this->controller->create(
+ 'mount',
+ '\OC\Files\Storage\InvalidStorage',
+ array(),
+ [],
+ [],
+ [],
+ null
+ );
+
+ $this->assertEquals(Http::STATUS_UNPROCESSABLE_ENTITY, $response->getStatus());
+
+ $response = $this->controller->update(
+ 1,
+ 'mount',
+ '\OC\Files\Storage\InvalidStorage',
+ array(),
+ [],
+ [],
+ [],
+ null
+ );
+
+ $this->assertEquals(Http::STATUS_UNPROCESSABLE_ENTITY, $response->getStatus());
+ }
+
+ public function testUpdateStorageNonExisting() {
+ $this->service->expects($this->once())
+ ->method('updateStorage')
+ ->will($this->throwException(new NotFoundException()));
+
+ $response = $this->controller->update(
+ 255,
+ 'mount',
+ '\OC\Files\Storage\SMB',
+ array(),
+ [],
+ [],
+ [],
+ null
+ );
+
+ $this->assertEquals(Http::STATUS_NOT_FOUND, $response->getStatus());
+ }
+
+ public function testDeleteStorage() {
+ $this->service->expects($this->once())
+ ->method('removeStorage');
+
+ $response = $this->controller->destroy(1);
+ $this->assertEquals(Http::STATUS_NO_CONTENT, $response->getStatus());
+ }
+
+ public function testDeleteStorageNonExisting() {
+ $this->service->expects($this->once())
+ ->method('removeStorage')
+ ->will($this->throwException(new NotFoundException()));
+
+ $response = $this->controller->destroy(255);
+ $this->assertEquals(Http::STATUS_NOT_FOUND, $response->getStatus());
+ }
+
+ public function testGetStorage() {
+ $storageConfig = new StorageConfig(1);
+ $storageConfig->setMountPoint('test');
+ $storageConfig->setBackendClass('\OC\Files\Storage\SMB');
+ $storageConfig->setBackendOptions(['user' => 'test', 'password', 'password123']);
+ $storageConfig->setMountOptions(['priority' => false]);
+
+ $this->service->expects($this->once())
+ ->method('getStorage')
+ ->with(1)
+ ->will($this->returnValue($storageConfig));
+ $response = $this->controller->show(1);
+
+ $this->assertEquals(Http::STATUS_OK, $response->getStatus());
+ $this->assertEquals($storageConfig, $response->getData());
+ }
+}
diff --git a/apps/files_external/tests/controller/userstoragescontrollertest.php b/apps/files_external/tests/controller/userstoragescontrollertest.php
new file mode 100644
index 00000000000..0ba413f6959
--- /dev/null
+++ b/apps/files_external/tests/controller/userstoragescontrollertest.php
@@ -0,0 +1,114 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Vincent Petry
+ * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OCA\Files_external\Tests\Controller;
+
+use \OCA\Files_external\Controller\UserStoragesController;
+use \OCA\Files_external\Service\UserStoragesService;
+use \OCP\AppFramework\Http;
+use \OCA\Files_external\NotFoundException;
+
+class UserStoragesControllerTest extends StoragesControllerTest {
+
+ /**
+ * @var array
+ */
+ private $oldAllowedBackends;
+
+ public function setUp() {
+ parent::setUp();
+ $this->service = $this->getMockBuilder('\OCA\Files_external\Service\UserStoragesService')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->controller = new UserStoragesController(
+ 'files_external',
+ $this->getMock('\OCP\IRequest'),
+ $this->getMock('\OCP\IL10N'),
+ $this->service
+ );
+
+ $config = \OC::$server->getConfig();
+
+ $this->oldAllowedBackends = $config->getAppValue(
+ 'files_external',
+ 'user_mounting_backends',
+ ''
+ );
+ $config->setAppValue(
+ 'files_external',
+ 'user_mounting_backends',
+ '\OC\Files\Storage\SMB'
+ );
+ }
+
+ public function tearDown() {
+ $config = \OC::$server->getConfig();
+ $config->setAppValue(
+ 'files_external',
+ 'user_mounting_backends',
+ $this->oldAllowedBackends
+ );
+ parent::tearDown();
+ }
+
+ function disallowedBackendClassProvider() {
+ return array(
+ array('\OC\Files\Storage\Local'),
+ array('\OC\Files\Storage\FTP'),
+ );
+ }
+ /**
+ * @dataProvider disallowedBackendClassProvider
+ */
+ public function testAddOrUpdateStorageDisallowedBackend($backendClass) {
+ $this->service->expects($this->never())
+ ->method('addStorage');
+ $this->service->expects($this->never())
+ ->method('updateStorage');
+
+ $response = $this->controller->create(
+ 'mount',
+ $backendClass,
+ array(),
+ [],
+ [],
+ [],
+ null
+ );
+
+ $this->assertEquals(Http::STATUS_UNPROCESSABLE_ENTITY, $response->getStatus());
+
+ $response = $this->controller->update(
+ 1,
+ 'mount',
+ $backendClass,
+ array(),
+ [],
+ [],
+ [],
+ null
+ );
+
+ $this->assertEquals(Http::STATUS_UNPROCESSABLE_ENTITY, $response->getStatus());
+ }
+
+}
diff --git a/apps/files_external/tests/js/settingsSpec.js b/apps/files_external/tests/js/settingsSpec.js
new file mode 100644
index 00000000000..5a3ee2cb5f1
--- /dev/null
+++ b/apps/files_external/tests/js/settingsSpec.js
@@ -0,0 +1,167 @@
+/*
+ * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+
+describe('OCA.External.Settings tests', function() {
+ var clock;
+ var select2Stub;
+ var select2ApplicableUsers;
+
+ beforeEach(function() {
+ clock = sinon.useFakeTimers();
+ select2Stub = sinon.stub($.fn, 'select2', function(args) {
+ if (args === 'val') {
+ return select2ApplicableUsers;
+ }
+ return {
+ on: function() {}
+ };
+ });
+
+ // view still requires an existing DOM table
+ $('#testArea').append(
+ '<table id="externalStorage" data-admin="true">' +
+ '<thead></thead>' +
+ '<tbody>' +
+ '<tr id="addMountPoint" data-id="">' +
+ '<td class="status"></td>' +
+ '<td class="mountPoint"><input type="text" name="mountPoint"/></td>' +
+ '<td class="backend">' +
+ '<select class="selectBackend">' +
+ '<option disable selected>Add storage</option>' +
+ '<option value="\\OC\\TestBackend">Test Backend</option>' +
+ '<option value="\\OC\\AnotherTestBackend">Another Test Backend</option>' +
+ '</select>' +
+ '</td>' +
+ '<td class="configuration"></td>' +
+ '<td class="applicable">' +
+ '<input type="hidden" class="applicableUsers">' +
+ '</td>' +
+ '<td><img alt="Delete" title="Delete" class="svg action"/></td>' +
+ '</tr>' +
+ '</tbody>' +
+ '</table>'
+ );
+ // these are usually appended into the data attribute
+ // within the DOM by the server template
+ $('#externalStorage .selectBackend:first').data('configurations', {
+ '\\OC\\TestBackend': {
+ 'backend': 'Test Backend Name',
+ 'configuration': {
+ 'field1': 'Display Name 1',
+ 'field2': '&Display Name 2'
+ },
+ 'priority': 11
+ },
+ '\\OC\\AnotherTestBackend': {
+ 'backend': 'Another Test Backend Name',
+ 'configuration': {
+ 'field1': 'Display Name 1',
+ 'field2': '&Display Name 2'
+ },
+ 'priority': 12
+ }
+ }
+ );
+ });
+ afterEach(function() {
+ select2Stub.restore();
+ clock.restore();
+ });
+
+ describe('storage configuration', function() {
+ var view;
+
+ function selectBackend(backendName) {
+ view.$el.find('.selectBackend:first').val('\\OC\\TestBackend').trigger('change');
+ }
+
+ beforeEach(function() {
+ var $el = $('#externalStorage');
+ view = new OCA.External.Settings.MountConfigListView($el);
+ });
+ afterEach(function() {
+ view = null;
+ });
+ describe('selecting backend', function() {
+ it('populates the row and creates a new empty one', function() {
+ var $firstRow = view.$el.find('tr:first');
+ selectBackend('\\OC\\TestBackend');
+ expect($firstRow.find('.backend').text()).toEqual('Test Backend');
+ expect($firstRow.find('.selectBackend').length).toEqual(0);
+
+ // TODO: check "remove" button visibility
+
+ // the suggested mount point name
+ expect($firstRow.find('[name=mountPoint]').val()).toEqual('TestBackend');
+
+ // TODO: check that the options have been created
+
+ // TODO: check select2 call on the ".applicableUsers" element
+
+ var $emptyRow = $firstRow.next('tr');
+ expect($emptyRow.length).toEqual(1);
+ expect($emptyRow.find('.selectBackend').length).toEqual(1);
+ expect($emptyRow.find('.applicable select').length).toEqual(0);
+
+ // TODO: check "remove" button visibility
+ });
+ // TODO: test with personal mounts (no applicable fields)
+ // TODO: test suggested mount point logic
+ });
+ describe('saving storages', function() {
+ it('saves storage after editing config', function() {
+ var $tr = view.$el.find('tr:first');
+ selectBackend('\\OC\\TestBackend');
+
+ var $field1 = $tr.find('input[data-parameter=field1]');
+ expect($field1.length).toEqual(1);
+ $field1.val('test');
+ $field1.trigger(new $.Event('keyup', {keyCode: 97}));
+
+ clock.tick(4000);
+
+ expect(fakeServer.requests.length).toEqual(1);
+ var request = fakeServer.requests[0];
+ expect(request.url).toEqual(OC.webroot + '/index.php/apps/files_external/globalstorages');
+ expect(OC.parseQueryString(request.requestBody)).toEqual({
+ backendClass: '\\OC\\TestBackend',
+ 'backendOptions[field1]': 'test',
+ 'backendOptions[field2]': '',
+ mountPoint: 'TestBackend',
+ priority: '11'
+ });
+
+ // TODO: respond and check data-id
+ });
+ // TODO: tests with "applicableUsers" and "applicableGroups"
+ // TODO: test with non-optional config parameters
+ // TODO: test with missing mount point value
+ // TODO: test with personal mounts (no applicable fields)
+ // TODO: test save triggers: paste, keyup, checkbox
+ // TODO: test "custom" field with addScript
+ // TODO: status indicator
+ });
+ describe('update storage', function() {
+ // TODO
+ });
+ describe('delete storage', function() {
+ // TODO
+ });
+ describe('recheck storages', function() {
+ // TODO
+ });
+ });
+ describe('applicable user list', function() {
+ // TODO: test select2 retrieval logic
+ });
+ describe('allow user mounts section', function() {
+ // TODO: test allowUserMounting section
+ });
+});
diff --git a/apps/files_external/tests/mountconfig.php b/apps/files_external/tests/mountconfig.php
index f00812c5671..645f0c64e11 100644
--- a/apps/files_external/tests/mountconfig.php
+++ b/apps/files_external/tests/mountconfig.php
@@ -252,7 +252,7 @@ class Test_Mount_Config extends \Test\TestCase {
'password' => '12345',
);
- $this->assertEquals(true, OC_Mount_Config::addMountPoint('/ext', 'Test_Mount_Config_Dummy_Storage', $storageOptions, $mountType, $applicable, $isPersonal));
+ $this->assertEquals(0, OC_Mount_Config::addMountPoint('/ext', 'Test_Mount_Config_Dummy_Storage', $storageOptions, $mountType, $applicable, $isPersonal));
$config = $this->readGlobalConfig();
$this->assertEquals(1, count($config));
@@ -279,7 +279,7 @@ class Test_Mount_Config extends \Test\TestCase {
'password' => '12345',
);
- $this->assertEquals(true, OC_Mount_Config::addMountPoint('/ext', 'Test_Mount_Config_Dummy_Storage', $storageOptions, $mountType, $applicable, $isPersonal));
+ $this->assertEquals(0, OC_Mount_Config::addMountPoint('/ext', 'Test_Mount_Config_Dummy_Storage', $storageOptions, $mountType, $applicable, $isPersonal));
$config = $this->readUserConfig();
$this->assertEquals(1, count($config));
@@ -382,7 +382,8 @@ class Test_Mount_Config extends \Test\TestCase {
);
// write config
- $this->assertTrue(
+ $this->assertEquals(
+ 0,
OC_Mount_Config::addMountPoint(
'/ext',
'Test_Mount_Config_Dummy_Storage',
@@ -422,7 +423,8 @@ class Test_Mount_Config extends \Test\TestCase {
);
// write config
- $this->assertTrue(
+ $this->assertEquals(
+ 0,
OC_Mount_Config::addMountPoint(
'/ext',
'Test_Mount_Config_Dummy_Storage',
@@ -459,7 +461,8 @@ class Test_Mount_Config extends \Test\TestCase {
);
// write config
- $this->assertTrue(
+ $this->assertEquals(
+ 0,
OC_Mount_Config::addMountPoint(
$mountPoint,
'Test_Mount_Config_Dummy_Storage',
@@ -492,7 +495,8 @@ class Test_Mount_Config extends \Test\TestCase {
// edit
$mountConfig['host'] = 'anothersmbhost';
- $this->assertTrue(
+ $this->assertEquals(
+ 0,
OC_Mount_Config::addMountPoint(
$mountPoint,
'Test_Mount_Config_Dummy_Storage',
@@ -557,7 +561,8 @@ class Test_Mount_Config extends \Test\TestCase {
);
// write config
- $this->assertTrue(
+ $this->assertEquals(
+ 0,
OC_Mount_Config::addMountPoint(
'/ext',
'Test_Mount_Config_Dummy_Storage',
@@ -598,7 +603,8 @@ class Test_Mount_Config extends \Test\TestCase {
);
// write config
- $this->assertTrue(
+ $this->assertEquals(
+ 0,
OC_Mount_Config::addMountPoint(
'/ext',
'Test_Mount_Config_Dummy_Storage',
@@ -707,7 +713,8 @@ class Test_Mount_Config extends \Test\TestCase {
);
// add mount point as "test" user
- $this->assertTrue(
+ $this->assertEquals(
+ 0,
OC_Mount_Config::addMountPoint(
'/ext',
'Test_Mount_Config_Dummy_Storage',
@@ -750,7 +757,8 @@ class Test_Mount_Config extends \Test\TestCase {
);
// write config
- $this->assertTrue(
+ $this->assertEquals(
+ 0,
OC_Mount_Config::addMountPoint(
'/ext',
'Test_Mount_Config_Dummy_Storage',
@@ -761,7 +769,8 @@ class Test_Mount_Config extends \Test\TestCase {
)
);
- $this->assertTrue(
+ $this->assertEquals(
+ 0,
OC_Mount_Config::addMountPoint(
'/ext',
'Test_Mount_Config_Dummy_Storage',
@@ -772,7 +781,8 @@ class Test_Mount_Config extends \Test\TestCase {
)
);
- $this->assertTrue(
+ $this->assertEquals(
+ 0,
OC_Mount_Config::addMountPoint(
'/ext',
'Test_Mount_Config_Dummy_Storage',
@@ -783,7 +793,8 @@ class Test_Mount_Config extends \Test\TestCase {
)
);
- $this->assertTrue(
+ $this->assertEquals(
+ 0,
OC_Mount_Config::addMountPoint(
'/ext',
'Test_Mount_Config_Dummy_Storage',
@@ -821,7 +832,8 @@ class Test_Mount_Config extends \Test\TestCase {
);
// write config
- $this->assertTrue(
+ $this->assertEquals(
+ 0,
OC_Mount_Config::addMountPoint(
'/ext',
'Test_Mount_Config_Dummy_Storage',
@@ -839,7 +851,8 @@ class Test_Mount_Config extends \Test\TestCase {
'share' => 'anothersmbshare',
'root' => 'anothersmbroot'
);
- $this->assertTrue(
+ $this->assertEquals(
+ 0,
OC_Mount_Config::addMountPoint(
'/ext',
'Test_Mount_Config_Dummy_Storage',
@@ -952,7 +965,8 @@ class Test_Mount_Config extends \Test\TestCase {
// Add mount points
foreach($mounts as $i => $mount) {
- $this->assertTrue(
+ $this->assertEquals(
+ 0,
OC_Mount_Config::addMountPoint(
'/ext',
'Test_Mount_Config_Dummy_Storage',
@@ -987,7 +1001,8 @@ class Test_Mount_Config extends \Test\TestCase {
'share' => '',
);
- $this->assertTrue(
+ $this->assertEquals(
+ 0,
OC_Mount_Config::addMountPoint(
'/ext',
$class,
@@ -1005,7 +1020,8 @@ class Test_Mount_Config extends \Test\TestCase {
$mountPoints['/'.self::TEST_USER1.'/files/ext']['priority']);
// Simulate changed mount options (without priority set)
- $this->assertTrue(
+ $this->assertEquals(
+ 0,
OC_Mount_Config::addMountPoint(
'/ext',
$class,
@@ -1035,7 +1051,8 @@ class Test_Mount_Config extends \Test\TestCase {
);
// Create personal mount point
- $this->assertTrue(
+ $this->assertEquals(
+ 0,
OC_Mount_Config::addMountPoint(
'/ext',
'Test_Mount_Config_Dummy_Storage',
@@ -1066,7 +1083,8 @@ class Test_Mount_Config extends \Test\TestCase {
$applicable = 'all';
$isPersonal = false;
- $this->assertTrue(
+ $this->assertEquals(
+ 0,
OC_Mount_Config::addMountPoint(
'/ext',
$storageClass,
diff --git a/apps/files_external/tests/service/globalstoragesservicetest.php b/apps/files_external/tests/service/globalstoragesservicetest.php
new file mode 100644
index 00000000000..4c038bc489e
--- /dev/null
+++ b/apps/files_external/tests/service/globalstoragesservicetest.php
@@ -0,0 +1,815 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Vincent Petry
+ * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OCA\Files_external\Tests\Service;
+
+use \OC\Files\Filesystem;
+
+use \OCA\Files_external\Service\GlobalStoragesService;
+use \OCA\Files_external\NotFoundException;
+use \OCA\Files_external\Lib\StorageConfig;
+
+class GlobalStoragesServiceTest extends StoragesServiceTest {
+ public function setUp() {
+ parent::setUp();
+ $this->service = new GlobalStoragesService();
+ }
+
+ public function tearDown() {
+ @unlink($this->dataDir . '/mount.json');
+ parent::tearDown();
+ }
+
+ protected function makeTestStorageData() {
+ return $this->makeStorageConfig([
+ 'mountPoint' => 'mountpoint',
+ 'backendClass' => '\OC\Files\Storage\SMB',
+ 'backendOptions' => [
+ 'option1' => 'value1',
+ 'option2' => 'value2',
+ 'password' => 'testPassword',
+ ],
+ 'applicableUsers' => [],
+ 'applicableGroups' => [],
+ 'priority' => 15,
+ 'mountOptions' => [
+ 'preview' => false,
+ ]
+ ]);
+ }
+
+ function storageDataProvider() {
+ return [
+ // all users
+ [
+ $this->makeStorageConfig([
+ 'mountPoint' => 'mountpoint',
+ 'backendClass' => '\OC\Files\Storage\SMB',
+ 'backendOptions' => [
+ 'option1' => 'value1',
+ 'option2' => 'value2',
+ 'password' => 'testPassword',
+ ],
+ 'applicableUsers' => [],
+ 'applicableGroups' => [],
+ 'priority' => 15,
+ ]),
+ ],
+ // some users
+ [
+ $this->makeStorageConfig([
+ 'mountPoint' => 'mountpoint',
+ 'backendClass' => '\OC\Files\Storage\SMB',
+ 'backendOptions' => [
+ 'option1' => 'value1',
+ 'option2' => 'value2',
+ 'password' => 'testPassword',
+ ],
+ 'applicableUsers' => ['user1', 'user2'],
+ 'applicableGroups' => [],
+ 'priority' => 15,
+ ]),
+ ],
+ // some groups
+ [
+ $this->makeStorageConfig([
+ 'mountPoint' => 'mountpoint',
+ 'backendClass' => '\OC\Files\Storage\SMB',
+ 'backendOptions' => [
+ 'option1' => 'value1',
+ 'option2' => 'value2',
+ 'password' => 'testPassword',
+ ],
+ 'applicableUsers' => [],
+ 'applicableGroups' => ['group1', 'group2'],
+ 'priority' => 15,
+ ]),
+ ],
+ // both users and groups
+ [
+ $this->makeStorageConfig([
+ 'mountPoint' => 'mountpoint',
+ 'backendClass' => '\OC\Files\Storage\SMB',
+ 'backendOptions' => [
+ 'option1' => 'value1',
+ 'option2' => 'value2',
+ 'password' => 'testPassword',
+ ],
+ 'applicableUsers' => ['user1', 'user2'],
+ 'applicableGroups' => ['group1', 'group2'],
+ 'priority' => 15,
+ ]),
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider storageDataProvider
+ */
+ public function testAddStorage($storage) {
+ $newStorage = $this->service->addStorage($storage);
+
+ $this->assertEquals(1, $newStorage->getId());
+
+
+ $newStorage = $this->service->getStorage(1);
+
+ $this->assertEquals($storage->getMountPoint(), $newStorage->getMountPoint());
+ $this->assertEquals($storage->getBackendClass(), $newStorage->getBackendClass());
+ $this->assertEquals($storage->getBackendOptions(), $newStorage->getBackendOptions());
+ $this->assertEquals($storage->getApplicableUsers(), $newStorage->getApplicableUsers());
+ $this->assertEquals($storage->getApplicableGroups(), $newStorage->getApplicableGroups());
+ $this->assertEquals($storage->getPriority(), $newStorage->getPriority());
+ $this->assertEquals(1, $newStorage->getId());
+ $this->assertEquals(0, $newStorage->getStatus());
+
+ // next one gets id 2
+ $nextStorage = $this->service->addStorage($storage);
+ $this->assertEquals(2, $nextStorage->getId());
+ }
+
+ /**
+ * @dataProvider storageDataProvider
+ */
+ public function testUpdateStorage($updatedStorage) {
+ $storage = $this->makeStorageConfig([
+ 'mountPoint' => 'mountpoint',
+ 'backendClass' => '\OC\Files\Storage\SMB',
+ 'backendOptions' => [
+ 'option1' => 'value1',
+ 'option2' => 'value2',
+ 'password' => 'testPassword',
+ ],
+ 'applicableUsers' => [],
+ 'applicableGroups' => [],
+ 'priority' => 15,
+ ]);
+
+ $newStorage = $this->service->addStorage($storage);
+ $this->assertEquals(1, $newStorage->getId());
+
+ $updatedStorage->setId(1);
+
+ $this->service->updateStorage($updatedStorage);
+ $newStorage = $this->service->getStorage(1);
+
+ $this->assertEquals($updatedStorage->getMountPoint(), $newStorage->getMountPoint());
+ $this->assertEquals($updatedStorage->getBackendOptions()['password'], $newStorage->getBackendOptions()['password']);
+ $this->assertEquals($updatedStorage->getApplicableUsers(), $newStorage->getApplicableUsers());
+ $this->assertEquals($updatedStorage->getApplicableGroups(), $newStorage->getApplicableGroups());
+ $this->assertEquals($updatedStorage->getPriority(), $newStorage->getPriority());
+ $this->assertEquals(1, $newStorage->getId());
+ $this->assertEquals(0, $newStorage->getStatus());
+ }
+
+ function hooksAddStorageDataProvider() {
+ return [
+ // applicable all
+ [
+ [],
+ [],
+ // expected hook calls
+ [
+ [
+ Filesystem::signal_create_mount,
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ 'all'
+ ],
+ ],
+ ],
+ // single user
+ [
+ ['user1'],
+ [],
+ // expected hook calls
+ [
+ [
+ Filesystem::signal_create_mount,
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ 'user1',
+ ],
+ ],
+ ],
+ // single group
+ [
+ [],
+ ['group1'],
+ // expected hook calls
+ [
+ [
+ Filesystem::signal_create_mount,
+ \OC_Mount_Config::MOUNT_TYPE_GROUP,
+ 'group1',
+ ],
+ ],
+ ],
+ // multiple users
+ [
+ ['user1', 'user2'],
+ [],
+ [
+ [
+ Filesystem::signal_create_mount,
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ 'user1',
+ ],
+ [
+ Filesystem::signal_create_mount,
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ 'user2',
+ ],
+ ],
+ ],
+ // multiple groups
+ [
+ [],
+ ['group1', 'group2'],
+ // expected hook calls
+ [
+ [
+ Filesystem::signal_create_mount,
+ \OC_Mount_Config::MOUNT_TYPE_GROUP,
+ 'group1'
+ ],
+ [
+ Filesystem::signal_create_mount,
+ \OC_Mount_Config::MOUNT_TYPE_GROUP,
+ 'group2'
+ ],
+ ],
+ ],
+ // mixed groups and users
+ [
+ ['user1', 'user2'],
+ ['group1', 'group2'],
+ // expected hook calls
+ [
+ [
+ Filesystem::signal_create_mount,
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ 'user1',
+ ],
+ [
+ Filesystem::signal_create_mount,
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ 'user2',
+ ],
+ [
+ Filesystem::signal_create_mount,
+ \OC_Mount_Config::MOUNT_TYPE_GROUP,
+ 'group1'
+ ],
+ [
+ Filesystem::signal_create_mount,
+ \OC_Mount_Config::MOUNT_TYPE_GROUP,
+ 'group2'
+ ],
+ ],
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider hooksAddStorageDataProvider
+ */
+ public function testHooksAddStorage($applicableUsers, $applicableGroups, $expectedCalls) {
+ $storage = $this->makeTestStorageData();
+ $storage->setApplicableUsers($applicableUsers);
+ $storage->setApplicableGroups($applicableGroups);
+ $this->service->addStorage($storage);
+
+ $this->assertCount(count($expectedCalls), self::$hookCalls);
+
+ foreach ($expectedCalls as $index => $call) {
+ $this->assertHookCall(
+ self::$hookCalls[$index],
+ $call[0],
+ $storage->getMountPoint(),
+ $call[1],
+ $call[2]
+ );
+ }
+ }
+
+ function hooksUpdateStorageDataProvider() {
+ return [
+ [
+ // nothing to multiple users and groups
+ [],
+ [],
+ ['user1', 'user2'],
+ ['group1', 'group2'],
+ // expected hook calls
+ [
+ // delete the "all entry"
+ [
+ Filesystem::signal_delete_mount,
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ 'all',
+ ],
+ [
+ Filesystem::signal_create_mount,
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ 'user1',
+ ],
+ [
+ Filesystem::signal_create_mount,
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ 'user2',
+ ],
+ [
+ Filesystem::signal_create_mount,
+ \OC_Mount_Config::MOUNT_TYPE_GROUP,
+ 'group1'
+ ],
+ [
+ Filesystem::signal_create_mount,
+ \OC_Mount_Config::MOUNT_TYPE_GROUP,
+ 'group2'
+ ],
+ ],
+ ],
+ [
+ // adding a user and a group
+ ['user1'],
+ ['group1'],
+ ['user1', 'user2'],
+ ['group1', 'group2'],
+ // expected hook calls
+ [
+ [
+ Filesystem::signal_create_mount,
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ 'user2',
+ ],
+ [
+ Filesystem::signal_create_mount,
+ \OC_Mount_Config::MOUNT_TYPE_GROUP,
+ 'group2'
+ ],
+ ],
+ ],
+ [
+ // removing a user and a group
+ ['user1', 'user2'],
+ ['group1', 'group2'],
+ ['user1'],
+ ['group1'],
+ // expected hook calls
+ [
+ [
+ Filesystem::signal_delete_mount,
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ 'user2',
+ ],
+ [
+ Filesystem::signal_delete_mount,
+ \OC_Mount_Config::MOUNT_TYPE_GROUP,
+ 'group2'
+ ],
+ ],
+ ],
+ [
+ // removing all
+ ['user1'],
+ ['group1'],
+ [],
+ [],
+ // expected hook calls
+ [
+ [
+ Filesystem::signal_delete_mount,
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ 'user1',
+ ],
+ [
+ Filesystem::signal_delete_mount,
+ \OC_Mount_Config::MOUNT_TYPE_GROUP,
+ 'group1'
+ ],
+ // create the "all" entry
+ [
+ Filesystem::signal_create_mount,
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ 'all'
+ ],
+ ],
+ ],
+ [
+ // no changes
+ ['user1'],
+ ['group1'],
+ ['user1'],
+ ['group1'],
+ // no hook calls
+ []
+ ]
+ ];
+ }
+
+ /**
+ * @dataProvider hooksUpdateStorageDataProvider
+ */
+ public function testHooksUpdateStorage(
+ $sourceApplicableUsers,
+ $sourceApplicableGroups,
+ $updatedApplicableUsers,
+ $updatedApplicableGroups,
+ $expectedCalls) {
+
+ $storage = $this->makeTestStorageData();
+ $storage->setApplicableUsers($sourceApplicableUsers);
+ $storage->setApplicableGroups($sourceApplicableGroups);
+ $storage = $this->service->addStorage($storage);
+
+ $storage->setapplicableUsers($updatedApplicableUsers);
+ $storage->setapplicableGroups($updatedApplicableGroups);
+
+ // reset calls
+ self::$hookCalls = [];
+
+ $this->service->updateStorage($storage);
+
+ $this->assertCount(count($expectedCalls), self::$hookCalls);
+
+ foreach ($expectedCalls as $index => $call) {
+ $this->assertHookCall(
+ self::$hookCalls[$index],
+ $call[0],
+ '/mountpoint',
+ $call[1],
+ $call[2]
+ );
+ }
+ }
+
+ /**
+ */
+ public function testHooksRenameMountPoint() {
+ $storage = $this->makeTestStorageData();
+ $storage->setApplicableUsers(['user1', 'user2']);
+ $storage->setApplicableGroups(['group1', 'group2']);
+ $storage = $this->service->addStorage($storage);
+
+ $storage->setMountPoint('renamedMountpoint');
+
+ // reset calls
+ self::$hookCalls = [];
+
+ $this->service->updateStorage($storage);
+
+ $expectedCalls = [
+ // deletes old mount
+ [
+ Filesystem::signal_delete_mount,
+ '/mountpoint',
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ 'user1',
+ ],
+ [
+ Filesystem::signal_delete_mount,
+ '/mountpoint',
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ 'user2',
+ ],
+ [
+ Filesystem::signal_delete_mount,
+ '/mountpoint',
+ \OC_Mount_Config::MOUNT_TYPE_GROUP,
+ 'group1',
+ ],
+ [
+ Filesystem::signal_delete_mount,
+ '/mountpoint',
+ \OC_Mount_Config::MOUNT_TYPE_GROUP,
+ 'group2',
+ ],
+ // creates new one
+ [
+ Filesystem::signal_create_mount,
+ '/renamedMountpoint',
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ 'user1',
+ ],
+ [
+ Filesystem::signal_create_mount,
+ '/renamedMountpoint',
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ 'user2',
+ ],
+ [
+ Filesystem::signal_create_mount,
+ '/renamedMountpoint',
+ \OC_Mount_Config::MOUNT_TYPE_GROUP,
+ 'group1',
+ ],
+ [
+ Filesystem::signal_create_mount,
+ '/renamedMountpoint',
+ \OC_Mount_Config::MOUNT_TYPE_GROUP,
+ 'group2',
+ ],
+ ];
+
+ $this->assertCount(count($expectedCalls), self::$hookCalls);
+
+ foreach ($expectedCalls as $index => $call) {
+ $this->assertHookCall(
+ self::$hookCalls[$index],
+ $call[0],
+ $call[1],
+ $call[2],
+ $call[3]
+ );
+ }
+ }
+
+ function hooksDeleteStorageDataProvider() {
+ return [
+ [
+ ['user1', 'user2'],
+ ['group1', 'group2'],
+ // expected hook calls
+ [
+ [
+ Filesystem::signal_delete_mount,
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ 'user1',
+ ],
+ [
+ Filesystem::signal_delete_mount,
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ 'user2',
+ ],
+ [
+ Filesystem::signal_delete_mount,
+ \OC_Mount_Config::MOUNT_TYPE_GROUP,
+ 'group1'
+ ],
+ [
+ Filesystem::signal_delete_mount,
+ \OC_Mount_Config::MOUNT_TYPE_GROUP,
+ 'group2'
+ ],
+ ],
+ ],
+ [
+ // deleting "all" entry
+ [],
+ [],
+ [
+ [
+ Filesystem::signal_delete_mount,
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ 'all',
+ ],
+ ],
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider hooksDeleteStorageDataProvider
+ */
+ public function testHooksDeleteStorage(
+ $sourceApplicableUsers,
+ $sourceApplicableGroups,
+ $expectedCalls) {
+
+ $storage = $this->makeTestStorageData();
+ $storage->setApplicableUsers($sourceApplicableUsers);
+ $storage->setApplicableGroups($sourceApplicableGroups);
+ $storage = $this->service->addStorage($storage);
+
+ // reset calls
+ self::$hookCalls = [];
+
+ $this->service->removeStorage($storage->getId());
+
+ $this->assertCount(count($expectedCalls), self::$hookCalls);
+
+ foreach ($expectedCalls as $index => $call) {
+ $this->assertHookCall(
+ self::$hookCalls[$index],
+ $call[0],
+ '/mountpoint',
+ $call[1],
+ $call[2]
+ );
+ }
+ }
+
+ /**
+ * Make sure it uses the correct format when reading/writing
+ * the legacy config
+ */
+ public function testLegacyConfigConversionApplicableAll() {
+ $configFile = $this->dataDir . '/mount.json';
+
+ $storage = $this->makeTestStorageData();
+ $storage = $this->service->addStorage($storage);
+
+ $json = json_decode(file_get_contents($configFile), true);
+
+ $this->assertCount(1, $json);
+
+ $this->assertEquals([\OC_Mount_Config::MOUNT_TYPE_USER], array_keys($json));
+ $this->assertEquals(['all'], array_keys($json[\OC_Mount_config::MOUNT_TYPE_USER]));
+
+ $mountPointData = $json[\OC_Mount_config::MOUNT_TYPE_USER]['all'];
+ $this->assertEquals(['/$user/files/mountpoint'], array_keys($mountPointData));
+
+ $mountPointOptions = current($mountPointData);
+ $this->assertEquals(1, $mountPointOptions['id']);
+ $this->assertEquals('\OC\Files\Storage\SMB', $mountPointOptions['class']);
+ $this->assertEquals(15, $mountPointOptions['priority']);
+ $this->assertEquals(false, $mountPointOptions['mountOptions']['preview']);
+
+ $backendOptions = $mountPointOptions['options'];
+ $this->assertEquals('value1', $backendOptions['option1']);
+ $this->assertEquals('value2', $backendOptions['option2']);
+ $this->assertEquals('', $backendOptions['password']);
+ $this->assertNotEmpty($backendOptions['password_encrypted']);
+ }
+
+ /**
+ * Make sure it uses the correct format when reading/writing
+ * the legacy config
+ */
+ public function testLegacyConfigConversionApplicableUserAndGroup() {
+ $configFile = $this->dataDir . '/mount.json';
+
+ $storage = $this->makeTestStorageData();
+ $storage->setApplicableUsers(['user1', 'user2']);
+ $storage->setApplicableGroups(['group1', 'group2']);
+
+ $storage = $this->service->addStorage($storage);
+
+ $json = json_decode(file_get_contents($configFile), true);
+
+ $this->assertCount(2, $json);
+
+ $this->assertTrue(isset($json[\OC_Mount_Config::MOUNT_TYPE_USER]));
+ $this->assertTrue(isset($json[\OC_Mount_Config::MOUNT_TYPE_GROUP]));
+ $this->assertEquals(['user1', 'user2'], array_keys($json[\OC_Mount_config::MOUNT_TYPE_USER]));
+ $this->assertEquals(['group1', 'group2'], array_keys($json[\OC_Mount_config::MOUNT_TYPE_GROUP]));
+
+ // check that all options are the same for both users and both groups
+ foreach ($json[\OC_Mount_Config::MOUNT_TYPE_USER] as $mountPointData) {
+ $this->assertEquals(['/$user/files/mountpoint'], array_keys($mountPointData));
+
+ $mountPointOptions = current($mountPointData);
+
+ $this->assertEquals(1, $mountPointOptions['id']);
+ $this->assertEquals('\OC\Files\Storage\SMB', $mountPointOptions['class']);
+ $this->assertEquals(15, $mountPointOptions['priority']);
+ $this->assertEquals(false, $mountPointOptions['mountOptions']['preview']);
+
+ $backendOptions = $mountPointOptions['options'];
+ $this->assertEquals('value1', $backendOptions['option1']);
+ $this->assertEquals('value2', $backendOptions['option2']);
+ $this->assertEquals('', $backendOptions['password']);
+ $this->assertNotEmpty($backendOptions['password_encrypted']);
+ }
+
+ foreach ($json[\OC_Mount_Config::MOUNT_TYPE_GROUP] as $mountPointData) {
+ $this->assertEquals(['/$user/files/mountpoint'], array_keys($mountPointData));
+
+ $mountPointOptions = current($mountPointData);
+
+ $this->assertEquals(1, $mountPointOptions['id']);
+ $this->assertEquals('\OC\Files\Storage\SMB', $mountPointOptions['class']);
+ $this->assertEquals(15, $mountPointOptions['priority']);
+ $this->assertEquals(false, $mountPointOptions['mountOptions']['preview']);
+
+ $backendOptions = $mountPointOptions['options'];
+ $this->assertEquals('value1', $backendOptions['option1']);
+ $this->assertEquals('value2', $backendOptions['option2']);
+ $this->assertEquals('', $backendOptions['password']);
+ $this->assertNotEmpty($backendOptions['password_encrypted']);
+ }
+ }
+
+ /**
+ * Test reading in a legacy config and generating config ids.
+ */
+ public function testReadLegacyConfigAndGenerateConfigId() {
+ $configFile = $this->dataDir . '/mount.json';
+
+ $legacyBackendOptions = [
+ 'user' => 'someuser',
+ 'password' => 'somepassword',
+ ];
+ $legacyBackendOptions = \OC_Mount_Config::encryptPasswords($legacyBackendOptions);
+
+ $legacyConfig = [
+ 'class' => '\OC\Files\Storage\SMB',
+ 'options' => $legacyBackendOptions,
+ 'mountOptions' => ['preview' => false],
+ ];
+ // different mount options
+ $legacyConfig2 = [
+ 'class' => '\OC\Files\Storage\SMB',
+ 'options' => $legacyBackendOptions,
+ 'mountOptions' => ['preview' => true],
+ ];
+
+ $legacyBackendOptions2 = $legacyBackendOptions;
+ $legacyBackendOptions2 = ['user' => 'someuser2', 'password' => 'somepassword2'];
+ $legacyBackendOptions2 = \OC_Mount_Config::encryptPasswords($legacyBackendOptions2);
+
+ // different config
+ $legacyConfig3 = [
+ 'class' => '\OC\Files\Storage\SMB',
+ 'options' => $legacyBackendOptions2,
+ 'mountOptions' => ['preview' => true],
+ ];
+
+ $json = [
+ 'user' => [
+ 'user1' => [
+ '/$user/files/somemount' => $legacyConfig,
+ ],
+ // same config
+ 'user2' => [
+ '/$user/files/somemount' => $legacyConfig,
+ ],
+ // different mountOptions
+ 'user3' => [
+ '/$user/files/somemount' => $legacyConfig2,
+ ],
+ // different mount point
+ 'user4' => [
+ '/$user/files/anothermount' => $legacyConfig,
+ ],
+ // different storage config
+ 'user5' => [
+ '/$user/files/somemount' => $legacyConfig3,
+ ],
+ ],
+ 'group' => [
+ 'group1' => [
+ // will get grouped with user configs
+ '/$user/files/somemount' => $legacyConfig,
+ ],
+ ],
+ ];
+
+ file_put_contents($configFile, json_encode($json));
+
+ $allStorages = $this->service->getAllStorages();
+
+ $this->assertCount(4, $allStorages);
+
+ $storage1 = $allStorages[1];
+ $storage2 = $allStorages[2];
+ $storage3 = $allStorages[3];
+ $storage4 = $allStorages[4];
+
+ $this->assertEquals('/somemount', $storage1->getMountPoint());
+ $this->assertEquals('someuser', $storage1->getBackendOptions()['user']);
+ $this->assertEquals('somepassword', $storage1->getBackendOptions()['password']);
+ $this->assertEquals(['user1', 'user2'], $storage1->getApplicableUsers());
+ $this->assertEquals(['group1'], $storage1->getApplicableGroups());
+ $this->assertEquals(['preview' => false], $storage1->getMountOptions());
+
+ $this->assertEquals('/somemount', $storage2->getMountPoint());
+ $this->assertEquals('someuser', $storage2->getBackendOptions()['user']);
+ $this->assertEquals('somepassword', $storage2->getBackendOptions()['password']);
+ $this->assertEquals(['user3'], $storage2->getApplicableUsers());
+ $this->assertEquals([], $storage2->getApplicableGroups());
+ $this->assertEquals(['preview' => true], $storage2->getMountOptions());
+
+ $this->assertEquals('/anothermount', $storage3->getMountPoint());
+ $this->assertEquals('someuser', $storage3->getBackendOptions()['user']);
+ $this->assertEquals('somepassword', $storage3->getBackendOptions()['password']);
+ $this->assertEquals(['user4'], $storage3->getApplicableUsers());
+ $this->assertEquals([], $storage3->getApplicableGroups());
+ $this->assertEquals(['preview' => false], $storage3->getMountOptions());
+
+ $this->assertEquals('/somemount', $storage4->getMountPoint());
+ $this->assertEquals('someuser2', $storage4->getBackendOptions()['user']);
+ $this->assertEquals('somepassword2', $storage4->getBackendOptions()['password']);
+ $this->assertEquals(['user5'], $storage4->getApplicableUsers());
+ $this->assertEquals([], $storage4->getApplicableGroups());
+ $this->assertEquals(['preview' => true], $storage4->getMountOptions());
+ }
+}
diff --git a/apps/files_external/tests/service/storagesservicetest.php b/apps/files_external/tests/service/storagesservicetest.php
new file mode 100644
index 00000000000..445e86d4117
--- /dev/null
+++ b/apps/files_external/tests/service/storagesservicetest.php
@@ -0,0 +1,183 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Vincent Petry
+ * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OCA\Files_external\Tests\Service;
+
+use \OC\Files\Filesystem;
+
+use \OCA\Files_external\NotFoundException;
+use \OCA\Files_external\Lib\StorageConfig;
+
+abstract class StoragesServiceTest extends \Test\TestCase {
+
+ /**
+ * @var StoragesService
+ */
+ protected $service;
+
+ /**
+ * Data directory
+ *
+ * @var string
+ */
+ protected $dataDir;
+
+ /**
+ * Hook calls
+ *
+ * @var array
+ */
+ protected static $hookCalls;
+
+ public function setUp() {
+ self::$hookCalls = array();
+ $config = \OC::$server->getConfig();
+ $this->dataDir = $config->getSystemValue(
+ 'datadirectory',
+ \OC::$SERVERROOT . '/data/'
+ );
+ \OC_Mount_Config::$skipTest = true;
+
+ \OCP\Util::connectHook(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_create_mount,
+ get_class($this), 'createHookCallback');
+ \OCP\Util::connectHook(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_delete_mount,
+ get_class($this), 'deleteHookCallback');
+
+ }
+
+ public function tearDown() {
+ \OC_Mount_Config::$skipTest = false;
+ self::$hookCalls = array();
+ }
+
+ /**
+ * Creates a StorageConfig instance based on array data
+ *
+ * @param array data
+ *
+ * @return StorageConfig storage config instance
+ */
+ protected function makeStorageConfig($data) {
+ $storage = new StorageConfig();
+ if (isset($data['id'])) {
+ $storage->setId($data['id']);
+ }
+ $storage->setMountPoint($data['mountPoint']);
+ $storage->setBackendClass($data['backendClass']);
+ $storage->setBackendOptions($data['backendOptions']);
+ if (isset($data['applicableUsers'])) {
+ $storage->setApplicableUsers($data['applicableUsers']);
+ }
+ if (isset($data['applicableGroups'])) {
+ $storage->setApplicableGroups($data['applicableGroups']);
+ }
+ if (isset($data['priority'])) {
+ $storage->setPriority($data['priority']);
+ }
+ if (isset($data['mountOptions'])) {
+ $storage->setMountOptions($data['mountOptions']);
+ }
+ return $storage;
+ }
+
+
+ /**
+ * @expectedException \OCA\Files_external\NotFoundException
+ */
+ public function testNonExistingStorage() {
+ $storage = new StorageConfig(255);
+ $storage->setMountPoint('mountpoint');
+ $storage->setBackendClass('\OC\Files\Storage\SMB');
+ $this->service->updateStorage($storage);
+ }
+
+ public function testDeleteStorage() {
+ $storage = new StorageConfig(255);
+ $storage->setMountPoint('mountpoint');
+ $storage->setBackendClass('\OC\Files\Storage\SMB');
+ $storage->setBackendOptions(['password' => 'testPassword']);
+
+ $newStorage = $this->service->addStorage($storage);
+ $this->assertEquals(1, $newStorage->getId());
+
+ $newStorage = $this->service->removeStorage(1);
+
+ $caught = false;
+ try {
+ $this->service->getStorage(1);
+ } catch (NotFoundException $e) {
+ $caught = true;
+ }
+
+ $this->assertTrue($caught);
+ }
+
+ /**
+ * @expectedException \OCA\Files_external\NotFoundException
+ */
+ public function testDeleteUnexistingStorage() {
+ $this->service->removeStorage(255);
+ }
+
+ public static function createHookCallback($params) {
+ self::$hookCalls[] = array(
+ 'signal' => Filesystem::signal_create_mount,
+ 'params' => $params
+ );
+ }
+
+ public static function deleteHookCallback($params) {
+ self::$hookCalls[] = array(
+ 'signal' => Filesystem::signal_delete_mount,
+ 'params' => $params
+ );
+ }
+
+ /**
+ * Asserts hook call
+ *
+ * @param array $callData hook call data to check
+ * @param string $signal signal name
+ * @param string $mountPath mount path
+ * @param string $mountType mount type
+ * @param string $applicable applicable users
+ */
+ protected function assertHookCall($callData, $signal, $mountPath, $mountType, $applicable) {
+ $this->assertEquals($signal, $callData['signal']);
+ $params = $callData['params'];
+ $this->assertEquals(
+ $mountPath,
+ $params[Filesystem::signal_param_path]
+ );
+ $this->assertEquals(
+ $mountType,
+ $params[Filesystem::signal_param_mount_type]
+ );
+ $this->assertEquals(
+ $applicable,
+ $params[Filesystem::signal_param_users]
+ );
+ }
+}
diff --git a/apps/files_external/tests/service/userstoragesservicetest.php b/apps/files_external/tests/service/userstoragesservicetest.php
new file mode 100644
index 00000000000..dd3f9e1b92c
--- /dev/null
+++ b/apps/files_external/tests/service/userstoragesservicetest.php
@@ -0,0 +1,254 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Vincent Petry
+ * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OCA\Files_external\Tests\Service;
+
+use \OC\Files\Filesystem;
+
+use \OCA\Files_external\Service\UserStoragesService;
+use \OCA\Files_external\NotFoundException;
+use \OCA\Files_external\Lib\StorageConfig;
+
+class UserStoragesServiceTest extends StoragesServiceTest {
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->userId = $this->getUniqueID('user_');
+
+ $this->user = new \OC\User\User($this->userId, null);
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $userSession
+ ->expects($this->any())
+ ->method('getUser')
+ ->will($this->returnValue($this->user));
+
+ $this->service = new UserStoragesService($userSession);
+
+ // create home folder
+ mkdir($this->dataDir . '/' . $this->userId . '/');
+ }
+
+ public function tearDown() {
+ @unlink($this->dataDir . '/' . $this->userId . '/mount.json');
+ parent::tearDown();
+ }
+
+ private function makeTestStorageData() {
+ return $this->makeStorageConfig([
+ 'mountPoint' => 'mountpoint',
+ 'backendClass' => '\OC\Files\Storage\SMB',
+ 'backendOptions' => [
+ 'option1' => 'value1',
+ 'option2' => 'value2',
+ 'password' => 'testPassword',
+ ],
+ 'mountOptions' => [
+ 'preview' => false,
+ ]
+ ]);
+ }
+
+ public function testAddStorage() {
+ $storage = $this->makeTestStorageData();
+
+ $newStorage = $this->service->addStorage($storage);
+
+ $this->assertEquals(1, $newStorage->getId());
+
+ $newStorage = $this->service->getStorage(1);
+
+ $this->assertEquals($storage->getMountPoint(), $newStorage->getMountPoint());
+ $this->assertEquals($storage->getBackendClass(), $newStorage->getBackendClass());
+ $this->assertEquals($storage->getBackendOptions(), $newStorage->getBackendOptions());
+ $this->assertEquals(1, $newStorage->getId());
+ $this->assertEquals(0, $newStorage->getStatus());
+
+ // hook called once for user
+ $this->assertHookCall(
+ current(self::$hookCalls),
+ Filesystem::signal_create_mount,
+ $storage->getMountPoint(),
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ $this->userId
+ );
+
+ // next one gets id 2
+ $nextStorage = $this->service->addStorage($storage);
+ $this->assertEquals(2, $nextStorage->getId());
+ }
+
+ public function testUpdateStorage() {
+ $storage = $this->makeStorageConfig([
+ 'mountPoint' => 'mountpoint',
+ 'backendClass' => '\OC\Files\Storage\SMB',
+ 'backendOptions' => [
+ 'option1' => 'value1',
+ 'option2' => 'value2',
+ 'password' => 'testPassword',
+ ],
+ ]);
+
+ $newStorage = $this->service->addStorage($storage);
+ $this->assertEquals(1, $newStorage->getId());
+
+ $backendOptions = $newStorage->getBackendOptions();
+ $backendOptions['password'] = 'anotherPassword';
+ $newStorage->setBackendOptions($backendOptions);
+
+ self::$hookCalls = [];
+
+ $newStorage = $this->service->updateStorage($newStorage);
+
+ $this->assertEquals('anotherPassword', $newStorage->getBackendOptions()['password']);
+ // these attributes are unused for user storages
+ $this->assertEmpty($newStorage->getApplicableUsers());
+ $this->assertEmpty($newStorage->getApplicableGroups());
+ $this->assertEquals(1, $newStorage->getId());
+ $this->assertEquals(0, $newStorage->getStatus());
+
+ // no hook calls
+ $this->assertEmpty(self::$hookCalls);
+ }
+
+ public function testDeleteStorage() {
+ parent::testDeleteStorage();
+
+ // hook called once for user (first one was during test creation)
+ $this->assertHookCall(
+ self::$hookCalls[1],
+ Filesystem::signal_delete_mount,
+ '/mountpoint',
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ $this->userId
+ );
+ }
+
+ public function testHooksRenameMountPoint() {
+ $storage = $this->makeTestStorageData();
+ $storage = $this->service->addStorage($storage);
+
+ $storage->setMountPoint('renamedMountpoint');
+
+ // reset calls
+ self::$hookCalls = [];
+
+ $this->service->updateStorage($storage);
+
+ // hook called twice
+ $this->assertHookCall(
+ self::$hookCalls[0],
+ Filesystem::signal_delete_mount,
+ '/mountpoint',
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ $this->userId
+ );
+ $this->assertHookCall(
+ self::$hookCalls[1],
+ Filesystem::signal_create_mount,
+ '/renamedMountpoint',
+ \OC_Mount_Config::MOUNT_TYPE_USER,
+ $this->userId
+ );
+ }
+
+ /**
+ * Make sure it uses the correct format when reading/writing
+ * the legacy config
+ */
+ public function testLegacyConfigConversion() {
+ $configFile = $this->dataDir . '/' . $this->userId . '/mount.json';
+
+ $storage = $this->makeTestStorageData();
+ $storage = $this->service->addStorage($storage);
+
+ $json = json_decode(file_get_contents($configFile), true);
+
+ $this->assertCount(1, $json);
+
+ $this->assertEquals([\OC_Mount_Config::MOUNT_TYPE_USER], array_keys($json));
+ $this->assertEquals([$this->userId], array_keys($json[\OC_Mount_config::MOUNT_TYPE_USER]));
+
+ $mountPointData = $json[\OC_Mount_config::MOUNT_TYPE_USER][$this->userId];
+ $this->assertEquals(['/' . $this->userId . '/files/mountpoint'], array_keys($mountPointData));
+
+ $mountPointOptions = current($mountPointData);
+ $this->assertEquals(1, $mountPointOptions['id']);
+ $this->assertEquals('\OC\Files\Storage\SMB', $mountPointOptions['class']);
+ $this->assertEquals(false, $mountPointOptions['mountOptions']['preview']);
+
+ $backendOptions = $mountPointOptions['options'];
+ $this->assertEquals('value1', $backendOptions['option1']);
+ $this->assertEquals('value2', $backendOptions['option2']);
+ $this->assertEquals('', $backendOptions['password']);
+ $this->assertNotEmpty($backendOptions['password_encrypted']);
+ }
+
+ /**
+ * Test reading in a legacy config and generating config ids.
+ */
+ public function testReadLegacyConfigAndGenerateConfigId() {
+ $configFile = $this->dataDir . '/' . $this->userId . '/mount.json';
+
+ $legacyBackendOptions = [
+ 'user' => 'someuser',
+ 'password' => 'somepassword',
+ ];
+ $legacyBackendOptions = \OC_Mount_Config::encryptPasswords($legacyBackendOptions);
+
+ $legacyConfig = [
+ 'class' => '\OC\Files\Storage\SMB',
+ 'options' => $legacyBackendOptions,
+ 'mountOptions' => ['preview' => false],
+ ];
+ // different mount options
+ $legacyConfig2 = [
+ 'class' => '\OC\Files\Storage\SMB',
+ 'options' => $legacyBackendOptions,
+ 'mountOptions' => ['preview' => true],
+ ];
+
+ $json = ['user' => []];
+ $json['user'][$this->userId] = [
+ '/$user/files/somemount' => $legacyConfig,
+ '/$user/files/anothermount' => $legacyConfig2,
+ ];
+
+ file_put_contents($configFile, json_encode($json));
+
+ $allStorages = $this->service->getAllStorages();
+
+ $this->assertCount(2, $allStorages);
+
+ $storage1 = $allStorages[1];
+ $storage2 = $allStorages[2];
+
+ $this->assertEquals('/somemount', $storage1->getMountPoint());
+ $this->assertEquals('someuser', $storage1->getBackendOptions()['user']);
+ $this->assertEquals('somepassword', $storage1->getBackendOptions()['password']);
+ $this->assertEquals(['preview' => false], $storage1->getMountOptions());
+
+ $this->assertEquals('/anothermount', $storage2->getMountPoint());
+ $this->assertEquals('someuser', $storage2->getBackendOptions()['user']);
+ $this->assertEquals('somepassword', $storage2->getBackendOptions()['password']);
+ $this->assertEquals(['preview' => true], $storage2->getMountOptions());
+ }
+}
diff --git a/apps/files_external/tests/storageconfigtest.php b/apps/files_external/tests/storageconfigtest.php
new file mode 100644
index 00000000000..ec79b1bf306
--- /dev/null
+++ b/apps/files_external/tests/storageconfigtest.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Vincent Petry
+ * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Files_external\Tests;
+
+use \OCA\Files_external\Lib\StorageConfig;
+
+class StorageConfigTest extends \Test\TestCase {
+
+ public function testJsonSerialization() {
+ $storageConfig = new StorageConfig(1);
+ $storageConfig->setMountPoint('test');
+ $storageConfig->setBackendClass('\OC\Files\Storage\SMB');
+ $storageConfig->setBackendOptions(['user' => 'test', 'password' => 'password123']);
+ $storageConfig->setPriority(128);
+ $storageConfig->setApplicableUsers(['user1', 'user2']);
+ $storageConfig->setApplicableGroups(['group1', 'group2']);
+ $storageConfig->setMountOptions(['preview' => false]);
+
+ $json = $storageConfig->jsonSerialize();
+
+ $this->assertEquals(1, $json['id']);
+ $this->assertEquals('/test', $json['mountPoint']);
+ $this->assertEquals('\OC\Files\Storage\SMB', $json['backendClass']);
+ $this->assertEquals('test', $json['backendOptions']['user']);
+ $this->assertEquals('password123', $json['backendOptions']['password']);
+ $this->assertEquals(128, $json['priority']);
+ $this->assertEquals(['user1', 'user2'], $json['applicableUsers']);
+ $this->assertEquals(['group1', 'group2'], $json['applicableGroups']);
+ $this->assertEquals(['preview' => false], $json['mountOptions']);
+ }
+
+}
diff --git a/apps/files_sharing/l10n/pl.js b/apps/files_sharing/l10n/pl.js
index e546533240d..0d65b1f616c 100644
--- a/apps/files_sharing/l10n/pl.js
+++ b/apps/files_sharing/l10n/pl.js
@@ -4,11 +4,18 @@ OC.L10N.register(
"Server to server sharing is not enabled on this server" : "Współdzielenie między serwerami nie jest uruchomione na tym serwerze",
"The mountpoint name contains invalid characters." : "Nazwa zamontowanego zasobu zawiera niedozwolone znaki.",
"Invalid or untrusted SSL certificate" : "Niewłaściwy lub niezaufany certyfikat SSL",
+ "Could not authenticate to remote share, password might be wrong" : "Nie można zalogować do zdalnego zasobu, hasło może być niepoprawne",
+ "Storage not valid" : "Zasób nie jest prawidłowy",
"Couldn't add remote share" : "Nie można dodać zdalnego folderu",
"Shared with you" : "Współdzielony z Tobą",
"Shared with others" : "Współdzielony z innymi",
"Shared by link" : "Współdzielony linkiem",
+ "Nothing shared with you yet" : "Nie masz jeszcze nic udostępnionego",
+ "Files and folders others share with you will show up here" : "Pliki i foldery udostępnione Tobie przez innych wyświetlą się tutaj",
+ "Nothing shared yet" : "Jeszcze nic nie udostępniono",
+ "Files and folders you share will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj",
"No shared links" : "Brak udostępnionych odnośników",
+ "Files and folders you share by link will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Czy chcesz dodać udział zdalny {name} od {owner}@{remote}?",
"Remote share" : "Zdalny zasób",
"Remote share password" : "Hasło do zdalnego zasobu",
diff --git a/apps/files_sharing/l10n/pl.json b/apps/files_sharing/l10n/pl.json
index 75b345e2f7c..19d10731710 100644
--- a/apps/files_sharing/l10n/pl.json
+++ b/apps/files_sharing/l10n/pl.json
@@ -2,11 +2,18 @@
"Server to server sharing is not enabled on this server" : "Współdzielenie między serwerami nie jest uruchomione na tym serwerze",
"The mountpoint name contains invalid characters." : "Nazwa zamontowanego zasobu zawiera niedozwolone znaki.",
"Invalid or untrusted SSL certificate" : "Niewłaściwy lub niezaufany certyfikat SSL",
+ "Could not authenticate to remote share, password might be wrong" : "Nie można zalogować do zdalnego zasobu, hasło może być niepoprawne",
+ "Storage not valid" : "Zasób nie jest prawidłowy",
"Couldn't add remote share" : "Nie można dodać zdalnego folderu",
"Shared with you" : "Współdzielony z Tobą",
"Shared with others" : "Współdzielony z innymi",
"Shared by link" : "Współdzielony linkiem",
+ "Nothing shared with you yet" : "Nie masz jeszcze nic udostępnionego",
+ "Files and folders others share with you will show up here" : "Pliki i foldery udostępnione Tobie przez innych wyświetlą się tutaj",
+ "Nothing shared yet" : "Jeszcze nic nie udostępniono",
+ "Files and folders you share will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj",
"No shared links" : "Brak udostępnionych odnośników",
+ "Files and folders you share by link will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Czy chcesz dodać udział zdalny {name} od {owner}@{remote}?",
"Remote share" : "Zdalny zasób",
"Remote share password" : "Hasło do zdalnego zasobu",
diff --git a/apps/files_sharing/l10n/uk.js b/apps/files_sharing/l10n/uk.js
index 8df743791e1..657954a5de5 100644
--- a/apps/files_sharing/l10n/uk.js
+++ b/apps/files_sharing/l10n/uk.js
@@ -2,18 +2,20 @@ OC.L10N.register(
"files_sharing",
{
"Server to server sharing is not enabled on this server" : "На даному сервері вимкнута можливість передачі даних між серверами",
- "The mountpoint name contains invalid characters." : "Ім'я точки монтування містить неприпустимі символи.",
+ "The mountpoint name contains invalid characters." : "Ім’я точки монтування містить неприпустимі символи.",
"Invalid or untrusted SSL certificate" : "Недійсній або не довірений SSL-сертифікат",
+ "Could not authenticate to remote share, password might be wrong" : "Не вдалося провести аутентифікацію для доступу до віддаленого сховища, можливо неправильно вказано пароль",
+ "Storage not valid" : "Cховище недоступне",
"Couldn't add remote share" : "Неможливо додати віддалену загальну теку",
"Shared with you" : "Доступне для вас",
"Shared with others" : "Доступне для інших",
"Shared by link" : "Доступне за посиланням",
"Nothing shared with you yet" : "Ніхто з вами ще не поділився файлами",
- "Files and folders others share with you will show up here" : "Розшарені для вас файли і папки з'являться тут",
+ "Files and folders others share with you will show up here" : "Розшарені для вас файли і папки з’являться тут",
"Nothing shared yet" : "Немає нічого розшареного",
- "Files and folders you share will show up here" : "Файли і папки, які розшарені для вас відображатимуться тут",
+ "Files and folders you share will show up here" : "Файли і папки, які розшарені вами відображатимуться тут",
"No shared links" : "Немає опублікованих посилань",
- "Files and folders you share by link will show up here" : "Файли і папки, якими ви поділитися по посиланню будуть відображатися тут",
+ "Files and folders you share by link will show up here" : "Файли і папки, якими ви поділилися за посиланням будуть відображатися тут",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Додати віддалену загальну теку {name} з {owner}@{remote}?",
"Remote share" : "Віддалена загальна тека",
"Remote share password" : "Пароль для віддаленої загальної теки",
@@ -41,7 +43,7 @@ OC.L10N.register(
"The password is wrong. Try again." : "Невірний пароль. Спробуйте ще раз.",
"Password" : "Пароль",
"No entries found in this folder" : "Записів не знайдено в цій папці",
- "Name" : "Ім'я",
+ "Name" : "Ім’я",
"Share time" : "Дата публікації",
"Sorry, this link doesn’t seem to work anymore." : "На жаль, посилання більше не працює.",
"Reasons might be:" : "Можливі причини:",
@@ -53,6 +55,7 @@ OC.L10N.register(
"Download" : "Завантажити",
"Download %s" : "Завантажити %s",
"Direct link" : "Пряме посилання",
+ "Federated Cloud Sharing" : "Об’єднання хмарних сховищ",
"Allow users on this server to send shares to other servers" : "Дозволити користувачам цього сервера публікувати на інших серверах",
"Allow users on this server to receive shares from other servers" : "Дозволити користувачам на цьому сервері отримувати публікації з інших серверів"
},
diff --git a/apps/files_sharing/l10n/uk.json b/apps/files_sharing/l10n/uk.json
index 7cfb0f98ade..d4fb8c7dfe5 100644
--- a/apps/files_sharing/l10n/uk.json
+++ b/apps/files_sharing/l10n/uk.json
@@ -1,17 +1,19 @@
{ "translations": {
"Server to server sharing is not enabled on this server" : "На даному сервері вимкнута можливість передачі даних між серверами",
- "The mountpoint name contains invalid characters." : "Ім'я точки монтування містить неприпустимі символи.",
+ "The mountpoint name contains invalid characters." : "Ім’я точки монтування містить неприпустимі символи.",
"Invalid or untrusted SSL certificate" : "Недійсній або не довірений SSL-сертифікат",
+ "Could not authenticate to remote share, password might be wrong" : "Не вдалося провести аутентифікацію для доступу до віддаленого сховища, можливо неправильно вказано пароль",
+ "Storage not valid" : "Cховище недоступне",
"Couldn't add remote share" : "Неможливо додати віддалену загальну теку",
"Shared with you" : "Доступне для вас",
"Shared with others" : "Доступне для інших",
"Shared by link" : "Доступне за посиланням",
"Nothing shared with you yet" : "Ніхто з вами ще не поділився файлами",
- "Files and folders others share with you will show up here" : "Розшарені для вас файли і папки з'являться тут",
+ "Files and folders others share with you will show up here" : "Розшарені для вас файли і папки з’являться тут",
"Nothing shared yet" : "Немає нічого розшареного",
- "Files and folders you share will show up here" : "Файли і папки, які розшарені для вас відображатимуться тут",
+ "Files and folders you share will show up here" : "Файли і папки, які розшарені вами відображатимуться тут",
"No shared links" : "Немає опублікованих посилань",
- "Files and folders you share by link will show up here" : "Файли і папки, якими ви поділитися по посиланню будуть відображатися тут",
+ "Files and folders you share by link will show up here" : "Файли і папки, якими ви поділилися за посиланням будуть відображатися тут",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Додати віддалену загальну теку {name} з {owner}@{remote}?",
"Remote share" : "Віддалена загальна тека",
"Remote share password" : "Пароль для віддаленої загальної теки",
@@ -39,7 +41,7 @@
"The password is wrong. Try again." : "Невірний пароль. Спробуйте ще раз.",
"Password" : "Пароль",
"No entries found in this folder" : "Записів не знайдено в цій папці",
- "Name" : "Ім'я",
+ "Name" : "Ім’я",
"Share time" : "Дата публікації",
"Sorry, this link doesn’t seem to work anymore." : "На жаль, посилання більше не працює.",
"Reasons might be:" : "Можливі причини:",
@@ -51,6 +53,7 @@
"Download" : "Завантажити",
"Download %s" : "Завантажити %s",
"Direct link" : "Пряме посилання",
+ "Federated Cloud Sharing" : "Об’єднання хмарних сховищ",
"Allow users on this server to send shares to other servers" : "Дозволити користувачам цього сервера публікувати на інших серверах",
"Allow users on this server to receive shares from other servers" : "Дозволити користувачам на цьому сервері отримувати публікації з інших серверів"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
diff --git a/apps/files_sharing/lib/external/manager.php b/apps/files_sharing/lib/external/manager.php
index 8985aeb3fce..490e5e5003d 100644
--- a/apps/files_sharing/lib/external/manager.php
+++ b/apps/files_sharing/lib/external/manager.php
@@ -321,4 +321,4 @@ class Manager {
return $result ? $openShares->fetchAll() : array();
}
-} \ No newline at end of file
+}
diff --git a/apps/files_sharing/lib/external/scanner.php b/apps/files_sharing/lib/external/scanner.php
index b45a8942e96..616d4db44e5 100644
--- a/apps/files_sharing/lib/external/scanner.php
+++ b/apps/files_sharing/lib/external/scanner.php
@@ -14,11 +14,10 @@ use OCP\Files\StorageInvalidException;
use OCP\Files\StorageNotAvailableException;
class Scanner extends \OC\Files\Cache\Scanner {
- /**
- * @var \OCA\Files_Sharing\External\Storage
- */
+ /** @var \OCA\Files_Sharing\External\Storage */
protected $storage;
+ /** {@inheritDoc} */
public function scan($path, $recursive = self::SCAN_RECURSIVE, $reuse = -1) {
$this->scanAll();
}
@@ -31,9 +30,11 @@ class Scanner extends \OC\Files\Cache\Scanner {
*
* @param string $file file to scan
* @param int $reuseExisting
+ * @param int $parentId
+ * @param array | null $cacheData existing data in the cache for the file to be scanned
* @return array an array of metadata of the scanned file
*/
- public function scanFile($file, $reuseExisting = 0) {
+ public function scanFile($file, $reuseExisting = 0, $parentId = -1, $cacheData = null) {
try {
return parent::scanFile($file, $reuseExisting);
} catch (ForbiddenException $e) {
@@ -54,6 +55,9 @@ class Scanner extends \OC\Files\Cache\Scanner {
* Checks the remote share for changes.
* If changes are available, scan them and update
* the cache.
+ * @throws NotFoundException
+ * @throws StorageInvalidException
+ * @throws \Exception
*/
public function scanAll() {
try {
@@ -76,10 +80,14 @@ class Scanner extends \OC\Files\Cache\Scanner {
}
}
+ /**
+ * @param array $data
+ * @param string $path
+ */
private function addResult($data, $path) {
$id = $this->cache->put($path, $data);
if (isset($data['children'])) {
- $children = array();
+ $children = [];
foreach ($data['children'] as $child) {
$children[$child['name']] = true;
$this->addResult($child, ltrim($path . '/' . $child['name'], '/'));
diff --git a/apps/files_sharing/lib/external/storage.php b/apps/files_sharing/lib/external/storage.php
index 648376e8cb5..51c4a36029e 100644
--- a/apps/files_sharing/lib/external/storage.php
+++ b/apps/files_sharing/lib/external/storage.php
@@ -70,7 +70,7 @@ class Storage extends DAV implements ISharedStorage {
'host' => $host,
'root' => $root,
'user' => $options['token'],
- 'password' => $options['password']
+ 'password' => (string)$options['password']
));
}
diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php
index 50a6432dd95..9e4e8d23151 100644
--- a/apps/files_sharing/public.php
+++ b/apps/files_sharing/public.php
@@ -10,7 +10,7 @@
// This file is just used to redirect the legacy sharing URLs (< ownCloud 8) to the new ones
-$urlGenerator = new \OC\URLGenerator(\OC::$server->getConfig());
+$urlGenerator = \OC::$server->getURLGenerator();
$token = isset($_GET['t']) ? $_GET['t'] : '';
$route = isset($_GET['download']) ? 'files_sharing.sharecontroller.downloadShare' : 'files_sharing.sharecontroller.showShare';
diff --git a/apps/files_sharing/tests/api.php b/apps/files_sharing/tests/api.php
index 9256f9bcc85..371c94a8c88 100644
--- a/apps/files_sharing/tests/api.php
+++ b/apps/files_sharing/tests/api.php
@@ -1079,6 +1079,24 @@ class Test_Files_Sharing_Api extends TestCase {
$this->assertTrue(is_array($updatedLinkShare));
$this->assertEquals($dateWithinRange->format('Y-m-d') . ' 00:00:00', $updatedLinkShare['expiration']);
+
+ // Try to remove expire date
+ $params = array();
+ $params['id'] = $linkShare['id'];
+ $params['_put'] = ['expireDate' => ''];
+
+ $result = \OCA\Files_Sharing\API\Local::updateShare($params);
+
+ $this->assertFalse($result->succeeded());
+
+ $items = \OCP\Share::getItemShared('file', $linkShare['file_source']);
+
+ $updatedLinkShare = reset($items);
+
+ // date shouldn't be changed
+ $this->assertTrue(is_array($updatedLinkShare));
+ $this->assertEquals($dateWithinRange->format('Y-m-d') . ' 00:00:00', $updatedLinkShare['expiration']);
+
// cleanup
$config->setAppValue('core', 'shareapi_default_expire_date', 'no');
$config->setAppValue('core', 'shareapi_enforce_expire_date', 'no');
diff --git a/apps/files_sharing/tests/external/manager.php b/apps/files_sharing/tests/external/manager.php
new file mode 100644
index 00000000000..dcb3dfba692
--- /dev/null
+++ b/apps/files_sharing/tests/external/manager.php
@@ -0,0 +1,142 @@
+<?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\External;
+
+use OC\Files\Storage\StorageFactory;
+use Test\TestCase;
+
+class Manager extends TestCase {
+ private $uid;
+
+ /**
+ * @var \OC\Files\Mount\Manager
+ */
+ private $mountManager;
+
+ /**
+ * @var \OCA\Files_Sharing\External\Manager
+ */
+ private $instance;
+
+ public function setUp() {
+ $this->uid = uniqid();
+ $this->mountManager = new \OC\Files\Mount\Manager();
+ $this->instance = new \OCA\Files_Sharing\External\Manager(\OC::$server->getDatabaseConnection(),
+ $this->mountManager, new StorageFactory(), \OC::$server->getHTTPHelper(), $this->uid);
+ }
+
+ public function tearDown() {
+ $this->instance->removeUserShares($this->uid);
+ }
+
+ private function getFullPath($path) {
+ return '/' . $this->uid . '/files' . $path;
+ }
+
+ private function assertMount($mountPoint) {
+ $mountPoint = rtrim($mountPoint, '/');
+ $mount = $this->mountManager->find($this->getFullPath($mountPoint));
+ $this->assertInstanceOf('\OCP\Files\Mount\IMountPoint', $mount);
+ $this->assertEquals($this->getFullPath($mountPoint), rtrim($mount->getMountPoint(), '/'));
+ $storage = $mount->getStorage();
+ $this->assertInstanceOf('\OCA\Files_Sharing\External\Storage', $storage);
+ }
+
+ private function assertNotMount($mountPoint) {
+ $mountPoint = rtrim($mountPoint, '/');
+ $mount = $this->mountManager->find($this->getFullPath($mountPoint));
+ if ($mount) {
+ $this->assertInstanceOf('\OCP\Files\Mount\IMountPoint', $mount);
+ $this->assertNotEquals($this->getFullPath($mountPoint), rtrim($mount->getMountPoint(), '/'));
+ } else {
+ $this->assertNull($mount);
+ }
+ }
+
+ public function testAddBasic() {
+ $this->instance->addShare('http://example.com', 'foo', 'bar', 'example', 'me', true);
+ \Test_Helper::invokePrivate($this->instance, 'setupMounts');
+ $this->assertMount('/example');
+ }
+
+ public function testAddBasicEmptyPassword() {
+ $this->instance->addShare('http://example.com', 'foo', '', 'example', 'me', true);
+ \Test_Helper::invokePrivate($this->instance, 'setupMounts');
+ $this->assertMount('/example');
+ }
+
+ public function testAddNotAcceptedShare() {
+ $this->instance->addShare('http://example.com', 'foo', 'bar', 'example', 'me', false);
+ \Test_Helper::invokePrivate($this->instance, 'setupMounts');
+ $this->assertNotMount('/example');
+ }
+
+ public function testAcceptMount() {
+ $this->instance->addShare('http://example.com', 'foo', 'bar', 'example', 'me', false);
+ $open = $this->instance->getOpenShares();
+ $this->assertCount(1, $open);
+ $this->instance->acceptShare($open[0]['id']);
+ $this->assertEquals([], $this->instance->getOpenShares());
+ \Test_Helper::invokePrivate($this->instance, 'setupMounts');
+ $this->assertMount('/example');
+ }
+
+ public function testDeclineMount() {
+ $this->instance->addShare('http://example.com', 'foo', 'bar', 'example', 'me', false);
+ $open = $this->instance->getOpenShares();
+ $this->assertCount(1, $open);
+ $this->instance->declineShare($open[0]['id']);
+ $this->assertEquals([], $this->instance->getOpenShares());
+ \Test_Helper::invokePrivate($this->instance, 'setupMounts');
+ $this->assertNotMount('/example');
+ }
+
+ public function testSetMountPoint() {
+ $this->instance->addShare('http://example.com', 'foo', 'bar', 'example', 'me', true);
+ \Test_Helper::invokePrivate($this->instance, 'setupMounts');
+ $this->assertMount('/example');
+ $this->instance->setMountPoint($this->getFullPath('/example'), $this->getFullPath('/renamed'));
+ $this->mountManager->clear();
+ \Test_Helper::invokePrivate($this->instance, 'setupMounts');
+ $this->assertMount('/renamed');
+ $this->assertNotMount('/example');
+ }
+
+ public function testRemoveShare() {
+ $this->instance->addShare('http://example.com', 'foo', 'bar', 'example', 'me', true);
+ \Test_Helper::invokePrivate($this->instance, 'setupMounts');
+ $this->assertMount('/example');
+ $this->instance->removeShare($this->getFullPath('/example'));
+ $this->mountManager->clear();
+ \Test_Helper::invokePrivate($this->instance, 'setupMounts');
+ $this->assertNotMount('/example');
+ }
+
+ public function testRemoveShareForUser() {
+ $this->instance->addShare('http://example.com', 'foo', 'bar', 'example', 'me', true);
+ \Test_Helper::invokePrivate($this->instance, 'setupMounts');
+ $this->assertMount('/example');
+ $this->instance->removeUserShares($this->uid);
+ $this->mountManager->clear();
+ \Test_Helper::invokePrivate($this->instance, 'setupMounts');
+ $this->assertNotMount('/example');
+ }
+}
diff --git a/apps/files_sharing/tests/sharedstorage.php b/apps/files_sharing/tests/sharedstorage.php
index 2959b9aacfb..46f75b488b5 100644
--- a/apps/files_sharing/tests/sharedstorage.php
+++ b/apps/files_sharing/tests/sharedstorage.php
@@ -182,9 +182,8 @@ class Test_Files_Sharing_Storage extends OCA\Files_sharing\Tests\TestCase {
// for the share root we expect:
// the shared permissions (1)
// the delete permission (8), to enable unshare
- // the update permission (2), to allow renaming of the mount point
$rootInfo = \OC\Files\Filesystem::getFileInfo($this->folder);
- $this->assertSame(11, $rootInfo->getPermissions());
+ $this->assertSame(9, $rootInfo->getPermissions());
// for the file within the shared folder we expect:
// the shared permissions (1)
diff --git a/apps/files_trashbin/l10n/pl.js b/apps/files_trashbin/l10n/pl.js
index 941e768e304..ba0a2e93bd3 100644
--- a/apps/files_trashbin/l10n/pl.js
+++ b/apps/files_trashbin/l10n/pl.js
@@ -8,6 +8,10 @@ OC.L10N.register(
"Delete permanently" : "Trwale usuń",
"Error" : "Błąd",
"restored" : "przywrócony",
+ "No deleted files" : "Brak skasowanych plików",
+ "You will be able to recover deleted files from here" : "Możesz przywrócić skasowane pliki stąd",
+ "No entries found in this folder" : "Brak wpisów w tym folderze",
+ "Select all" : "Wybierz wszystko",
"Name" : "Nazwa",
"Deleted" : "Usunięte",
"Delete" : "Usuń"
diff --git a/apps/files_trashbin/l10n/pl.json b/apps/files_trashbin/l10n/pl.json
index 01308bd763f..4fa8debaf29 100644
--- a/apps/files_trashbin/l10n/pl.json
+++ b/apps/files_trashbin/l10n/pl.json
@@ -6,6 +6,10 @@
"Delete permanently" : "Trwale usuń",
"Error" : "Błąd",
"restored" : "przywrócony",
+ "No deleted files" : "Brak skasowanych plików",
+ "You will be able to recover deleted files from here" : "Możesz przywrócić skasowane pliki stąd",
+ "No entries found in this folder" : "Brak wpisów w tym folderze",
+ "Select all" : "Wybierz wszystko",
"Name" : "Nazwa",
"Deleted" : "Usunięte",
"Delete" : "Usuń"
diff --git a/apps/user_ldap/l10n/gl.js b/apps/user_ldap/l10n/gl.js
index a0f68bbce20..4269c47363e 100644
--- a/apps/user_ldap/l10n/gl.js
+++ b/apps/user_ldap/l10n/gl.js
@@ -18,7 +18,7 @@ OC.L10N.register(
"mappings cleared" : "limpadas as asignacións",
"Success" : "Correcto",
"Error" : "Erro",
- "Please specify a Base DN" : "Por favor indique un DN base",
+ "Please specify a Base DN" : "Indique un DN base",
"Could not determine Base DN" : "Non se puido determinar o DN base",
"Please specify the port" : "Especifique un porto",
"Configuration OK" : "Configuración correcta",
diff --git a/apps/user_ldap/l10n/gl.json b/apps/user_ldap/l10n/gl.json
index 2740767e042..9aa1d3f6765 100644
--- a/apps/user_ldap/l10n/gl.json
+++ b/apps/user_ldap/l10n/gl.json
@@ -16,7 +16,7 @@
"mappings cleared" : "limpadas as asignacións",
"Success" : "Correcto",
"Error" : "Erro",
- "Please specify a Base DN" : "Por favor indique un DN base",
+ "Please specify a Base DN" : "Indique un DN base",
"Could not determine Base DN" : "Non se puido determinar o DN base",
"Please specify the port" : "Especifique un porto",
"Configuration OK" : "Configuración correcta",
diff --git a/apps/user_ldap/l10n/sr.js b/apps/user_ldap/l10n/sr.js
index 4e3f5a3cde6..aff172f8556 100644
--- a/apps/user_ldap/l10n/sr.js
+++ b/apps/user_ldap/l10n/sr.js
@@ -23,8 +23,10 @@ OC.L10N.register(
"User Display Name Field" : "Име приказа корисника",
"Base User Tree" : "Основно стабло корисника",
"Group Display Name Field" : "Име приказа групе",
- "Base Group Tree" : "Основна стабло група",
+ "Base Group Tree" : "Стабло основне групе",
"Group-Member association" : "Придруживање чланова у групу",
+ "Quota Field" : "Поље квоте",
+ "Quota Default" : "Подразумевана квота",
"in bytes" : "у бајтовима"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/user_ldap/l10n/sr.json b/apps/user_ldap/l10n/sr.json
index 928cf70e890..309e9e3590f 100644
--- a/apps/user_ldap/l10n/sr.json
+++ b/apps/user_ldap/l10n/sr.json
@@ -21,8 +21,10 @@
"User Display Name Field" : "Име приказа корисника",
"Base User Tree" : "Основно стабло корисника",
"Group Display Name Field" : "Име приказа групе",
- "Base Group Tree" : "Основна стабло група",
+ "Base Group Tree" : "Стабло основне групе",
"Group-Member association" : "Придруживање чланова у групу",
+ "Quota Field" : "Поље квоте",
+ "Quota Default" : "Подразумевана квота",
"in bytes" : "у бајтовима"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/uk.js b/apps/user_ldap/l10n/uk.js
index 1dfabd260f5..c231a4a5553 100644
--- a/apps/user_ldap/l10n/uk.js
+++ b/apps/user_ldap/l10n/uk.js
@@ -127,6 +127,7 @@ OC.L10N.register(
"UUID Attribute for Users:" : "UUID Атрибут для користувачів:",
"UUID Attribute for Groups:" : "UUID Атрибут для груп:",
"Username-LDAP User Mapping" : "Картографія Імен користувачів-LDAP ",
+ "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud використовує імена користувачів для зберігання та призначення метаданих. Для точної ідентифікації та розпізнавання користувачів, кожен користувач LDAP буде мати своє внутрішнє ім'я користувача. Це вимагає прив'язки імені користувача ownCloud до користувача LDAP. При створенні ім'я користувача призначається ідентифікатором UUID користувача LDAP. Крім цього кешируєтся доменне ім'я (DN) для зменшення числа звернень до LDAP, однак воно не використовується для ідентифікації. Якщо доменне ім'я було змінено, про це стане відомо ownCloud. Внутрішнє ім'я ownCloud використовується повсюдно в ownCloud. Після скидання прив'язок в базі можуть зберегтися залишки старої інформації. Скидання прив'язок не прив'язане до конфігурації, воно вплине на всі LDAP підключення! Ні в якому разі не рекомендується скидати прив'язки якщо система вже знаходиться в експлуатації, тільки на етапі тестування.",
"Clear Username-LDAP User Mapping" : "Очистити картографію Імен користувачів-LDAP",
"Clear Groupname-LDAP Group Mapping" : "Очистити картографію Імен груп-LDAP"
},
diff --git a/apps/user_ldap/l10n/uk.json b/apps/user_ldap/l10n/uk.json
index 73eaf3946c0..597c15170d6 100644
--- a/apps/user_ldap/l10n/uk.json
+++ b/apps/user_ldap/l10n/uk.json
@@ -125,6 +125,7 @@
"UUID Attribute for Users:" : "UUID Атрибут для користувачів:",
"UUID Attribute for Groups:" : "UUID Атрибут для груп:",
"Username-LDAP User Mapping" : "Картографія Імен користувачів-LDAP ",
+ "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud використовує імена користувачів для зберігання та призначення метаданих. Для точної ідентифікації та розпізнавання користувачів, кожен користувач LDAP буде мати своє внутрішнє ім'я користувача. Це вимагає прив'язки імені користувача ownCloud до користувача LDAP. При створенні ім'я користувача призначається ідентифікатором UUID користувача LDAP. Крім цього кешируєтся доменне ім'я (DN) для зменшення числа звернень до LDAP, однак воно не використовується для ідентифікації. Якщо доменне ім'я було змінено, про це стане відомо ownCloud. Внутрішнє ім'я ownCloud використовується повсюдно в ownCloud. Після скидання прив'язок в базі можуть зберегтися залишки старої інформації. Скидання прив'язок не прив'язане до конфігурації, воно вплине на всі LDAP підключення! Ні в якому разі не рекомендується скидати прив'язки якщо система вже знаходиться в експлуатації, тільки на етапі тестування.",
"Clear Username-LDAP User Mapping" : "Очистити картографію Імен користувачів-LDAP",
"Clear Groupname-LDAP Group Mapping" : "Очистити картографію Імен груп-LDAP"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
diff --git a/autotest.sh b/autotest.sh
index 94d63173547..6c2a61da0a7 100755
--- a/autotest.sh
+++ b/autotest.sh
@@ -17,6 +17,7 @@ set -e
#$EXECUTOR_NUMBER is set by Jenkins and allows us to run autotest in parallel
DATABASENAME=oc_autotest$EXECUTOR_NUMBER
DATABASEUSER=oc_autotest$EXECUTOR_NUMBER
+DATABASEHOST=localhost
ADMINLOGIN=admin$EXECUTOR_NUMBER
BASEDIR=$PWD
@@ -72,6 +73,11 @@ if [ -f config/config.php ] && [ ! -f config/config-autotest-backup.php ]; then
fi
function cleanup_config {
+ if [ ! -z "$DOCKER_CONTAINER_ID" ]; then
+ echo "Kill the docker $DOCKER_CONTAINER_ID"
+ docker rm -f $DOCKER_CONTAINER_ID
+ fi
+
cd "$BASEDIR"
# Restore existing config
if [ -f config/config-autotest-backup.php ]; then
@@ -117,35 +123,20 @@ function execute_tests {
dropdb -U $DATABASEUSER $DATABASENAME || true
fi
if [ "$1" == "oci" ] ; then
- echo "drop the database"
- sqlplus -s -l / as sysdba <<EOF
- drop user $DATABASENAME cascade;
-EOF
-
- echo "create the database"
- sqlplus -s -l / as sysdba <<EOF
- create user $DATABASENAME identified by owncloud;
- alter user $DATABASENAME default tablespace users
- temporary tablespace temp
- quota unlimited on users;
- grant create session
- , create table
- , create procedure
- , create sequence
- , create trigger
- , create view
- , create synonym
- , alter session
- to $DATABASENAME;
- exit;
-EOF
- DATABASEUSER=$DATABASENAME
+ echo "Fire up the oracle docker"
+ DOCKER_CONTAINER_ID=`docker run -d deepdiver/docker-oracle-xe-11g`
+ DATABASEHOST=`docker inspect $DOCKER_CONTAINER_ID | grep IPAddress | cut -d '"' -f 4`
+
+ echo "Waiting 60 seconds for Oracle initialization ... "
+ sleep 60
+
+ DATABASEUSER=autotest
DATABASENAME='XE'
fi
# trigger installation
echo "Installing ...."
- ./occ maintenance:install --database=$1 --database-name=$DATABASENAME --database-host=localhost --database-user=$DATABASEUSER --database-pass=owncloud --database-table-prefix=oc_ --admin-user=$ADMINLOGIN --admin-pass=admin --data-dir=$DATADIR
+ ./occ maintenance:install --database=$1 --database-name=$DATABASENAME --database-host=$DATABASEHOST --database-user=$DATABASEUSER --database-pass=owncloud --database-table-prefix=oc_ --admin-user=$ADMINLOGIN --admin-pass=admin --data-dir=$DATADIR
#test execution
echo "Testing with $1 ..."
diff --git a/config/config.sample.php b/config/config.sample.php
index 8d8fed7ad8c..672203153c6 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -421,7 +421,7 @@ $CONFIG = array(
/**
* Checks an app before install whether it uses private APIs instead of the
- * proper public APIs. If this is set to true it will just allow to install or
+ * proper public APIs. If this is set to true it will only allow to install or
* enable apps that pass this check.
*/
'appcodechecker' => true,
diff --git a/core/application.php b/core/application.php
index 568fc34db7d..34f817aa391 100644
--- a/core/application.php
+++ b/core/application.php
@@ -46,7 +46,8 @@ class Application extends App {
$c->query('Config'),
$c->query('SecureRandom'),
$c->query('DefaultEmailAddress'),
- $c->query('IsEncryptionEnabled')
+ $c->query('IsEncryptionEnabled'),
+ $c->query('Mailer')
);
});
$container->registerService('UserController', function(SimpleContainer $c) {
@@ -104,6 +105,9 @@ class Application extends App {
$container->registerService('Defaults', function() {
return new \OC_Defaults;
});
+ $container->registerService('Mailer', function(SimpleContainer $c) {
+ return $c->query('ServerContainer')->getMailer();
+ });
$container->registerService('DefaultEmailAddress', function() {
return Util::getDefaultEmailAddress('lostpassword-noreply');
});
diff --git a/core/css/share.css b/core/css/share.css
index bf38ce83a02..a0b041741f3 100644
--- a/core/css/share.css
+++ b/core/css/share.css
@@ -87,6 +87,7 @@
#dropdown input[type="checkbox"] {
margin:0 3px 0 8px;
+ vertical-align: middle;
}
a.showCruds {
@@ -126,8 +127,10 @@ a.unshare {
width:12px;
}
-.reshare,#link label,#expiration label {
- padding-left:8px;
+.reshare,#link label,
+#expiration label {
+ display: inline-block;
+ padding: 6px 4px;
}
a.showCruds:hover,a.unshare:hover {
diff --git a/core/js/tests/specHelper.js b/core/js/tests/specHelper.js
index 59c2a99645f..29293e89bcb 100644
--- a/core/js/tests/specHelper.js
+++ b/core/js/tests/specHelper.js
@@ -123,6 +123,9 @@ window.isPhantom = /phantom/i.test(navigator.userAgent);
// reset plugins
OC.Plugins._plugins = [];
+
+ // dummy select2 (which isn't loaded during the tests)
+ $.fn.select2 = function() {};
});
afterEach(function() {
@@ -131,6 +134,8 @@ window.isPhantom = /phantom/i.test(navigator.userAgent);
fakeServer.restore();
$testArea.remove();
+
+ delete($.fn.select2);
});
})();
diff --git a/core/l10n/af_ZA.js b/core/l10n/af_ZA.js
index 175a5cd3b76..a1e7649b925 100644
--- a/core/l10n/af_ZA.js
+++ b/core/l10n/af_ZA.js
@@ -8,6 +8,8 @@ OC.L10N.register(
"Checked database schema update" : "Databasis skema opdatering nagegaan",
"Checked database schema update for apps" : "Databasis skema opdatering nagegaan vir sagteware",
"Updated \"%s\" to %s" : "\"%s\" opgedateer na %s",
+ "Repair warning: " : "Herstel waarskuwing:",
+ "Repair error: " : "Herstel fout:",
"No image or file provided" : "Geen prent of lêer voorsien",
"Unknown filetype" : "Onbekende lêertipe",
"Invalid image" : "Ongeldige prent",
@@ -46,6 +48,7 @@ OC.L10N.register(
"One file conflict" : "Een lêer konflik",
"New Files" : "Nuwe lêers",
"Already existing files" : "Bestaande lêers",
+ "Which files do you want to keep?" : "Watse lêers wil jy hou?",
"Cancel" : "Kanselleer",
"Continue" : "Gaan voort",
"Very weak password" : "Baie swak wagwoord",
diff --git a/core/l10n/af_ZA.json b/core/l10n/af_ZA.json
index fcafcbd2bce..c2e6b148ae5 100644
--- a/core/l10n/af_ZA.json
+++ b/core/l10n/af_ZA.json
@@ -6,6 +6,8 @@
"Checked database schema update" : "Databasis skema opdatering nagegaan",
"Checked database schema update for apps" : "Databasis skema opdatering nagegaan vir sagteware",
"Updated \"%s\" to %s" : "\"%s\" opgedateer na %s",
+ "Repair warning: " : "Herstel waarskuwing:",
+ "Repair error: " : "Herstel fout:",
"No image or file provided" : "Geen prent of lêer voorsien",
"Unknown filetype" : "Onbekende lêertipe",
"Invalid image" : "Ongeldige prent",
@@ -44,6 +46,7 @@
"One file conflict" : "Een lêer konflik",
"New Files" : "Nuwe lêers",
"Already existing files" : "Bestaande lêers",
+ "Which files do you want to keep?" : "Watse lêers wil jy hou?",
"Cancel" : "Kanselleer",
"Continue" : "Gaan voort",
"Very weak password" : "Baie swak wagwoord",
diff --git a/core/l10n/fr.js b/core/l10n/fr.js
index 6ce1b04b8e3..0700470dc60 100644
--- a/core/l10n/fr.js
+++ b/core/l10n/fr.js
@@ -8,13 +8,18 @@ OC.L10N.register(
"Checked database schema update" : "Mise à jour du schéma de la base de données vérifiée",
"Checked database schema update for apps" : "Mise à jour du schéma de la base de données pour les applications vérifiée",
"Updated \"%s\" to %s" : "Mise à jour de « %s » vers %s",
+ "Repair warning: " : "Avertissement de réparation :",
+ "Repair error: " : "Erreur de réparation :",
"Following incompatible apps have been disabled: %s" : "Les applications incompatibles suivantes ont été désactivées : %s",
"Following 3rd party apps have been disabled: %s" : "Les applications tierce partie suivantes ont été désactivées : %s",
+ "Invalid file provided" : "Fichier non valide",
"No image or file provided" : "Aucun fichier fourni",
"Unknown filetype" : "Type de fichier inconnu",
"Invalid image" : "Image non valable",
"No temporary profile picture available, try again" : "Aucune image temporaire disponible pour le profil. Essayez à nouveau.",
"No crop data provided" : "Aucune donnée de recadrage fournie",
+ "No valid crop data provided" : "Données de recadrage non valides",
+ "Crop is not square" : "Le recadrage n'est pas carré",
"Sunday" : "Dimanche",
"Monday" : "Lundi",
"Tuesday" : "Mardi",
diff --git a/core/l10n/fr.json b/core/l10n/fr.json
index 838271cdccf..af0369a353e 100644
--- a/core/l10n/fr.json
+++ b/core/l10n/fr.json
@@ -6,13 +6,18 @@
"Checked database schema update" : "Mise à jour du schéma de la base de données vérifiée",
"Checked database schema update for apps" : "Mise à jour du schéma de la base de données pour les applications vérifiée",
"Updated \"%s\" to %s" : "Mise à jour de « %s » vers %s",
+ "Repair warning: " : "Avertissement de réparation :",
+ "Repair error: " : "Erreur de réparation :",
"Following incompatible apps have been disabled: %s" : "Les applications incompatibles suivantes ont été désactivées : %s",
"Following 3rd party apps have been disabled: %s" : "Les applications tierce partie suivantes ont été désactivées : %s",
+ "Invalid file provided" : "Fichier non valide",
"No image or file provided" : "Aucun fichier fourni",
"Unknown filetype" : "Type de fichier inconnu",
"Invalid image" : "Image non valable",
"No temporary profile picture available, try again" : "Aucune image temporaire disponible pour le profil. Essayez à nouveau.",
"No crop data provided" : "Aucune donnée de recadrage fournie",
+ "No valid crop data provided" : "Données de recadrage non valides",
+ "Crop is not square" : "Le recadrage n'est pas carré",
"Sunday" : "Dimanche",
"Monday" : "Lundi",
"Tuesday" : "Mardi",
diff --git a/core/l10n/ja.js b/core/l10n/ja.js
index 1ff925486dd..027b7449b39 100644
--- a/core/l10n/ja.js
+++ b/core/l10n/ja.js
@@ -8,8 +8,11 @@ OC.L10N.register(
"Checked database schema update" : "指定データベースのスキーマを更新",
"Checked database schema update for apps" : "アプリの指定データベースのスキーマを更新",
"Updated \"%s\" to %s" : "\"%s\" を %s にアップデートしました。",
+ "Repair warning: " : "修復警告:",
+ "Repair error: " : "修復エラー:",
"Following incompatible apps have been disabled: %s" : "次の互換性の無いアプリは無効にされています。: %s",
"Following 3rd party apps have been disabled: %s" : "次のサードパーティーアプリは無効にされています。: %s",
+ "Invalid file provided" : "無効なファイルが提供されました",
"No image or file provided" : "画像もしくはファイルが提供されていません",
"Unknown filetype" : "不明なファイルタイプ",
"Invalid image" : "無効な画像",
diff --git a/core/l10n/ja.json b/core/l10n/ja.json
index 267dfa111e4..94cc50e0b10 100644
--- a/core/l10n/ja.json
+++ b/core/l10n/ja.json
@@ -6,8 +6,11 @@
"Checked database schema update" : "指定データベースのスキーマを更新",
"Checked database schema update for apps" : "アプリの指定データベースのスキーマを更新",
"Updated \"%s\" to %s" : "\"%s\" を %s にアップデートしました。",
+ "Repair warning: " : "修復警告:",
+ "Repair error: " : "修復エラー:",
"Following incompatible apps have been disabled: %s" : "次の互換性の無いアプリは無効にされています。: %s",
"Following 3rd party apps have been disabled: %s" : "次のサードパーティーアプリは無効にされています。: %s",
+ "Invalid file provided" : "無効なファイルが提供されました",
"No image or file provided" : "画像もしくはファイルが提供されていません",
"Unknown filetype" : "不明なファイルタイプ",
"Invalid image" : "無効な画像",
diff --git a/core/l10n/pl.js b/core/l10n/pl.js
index 527291427a9..e9a5d248db0 100644
--- a/core/l10n/pl.js
+++ b/core/l10n/pl.js
@@ -8,6 +8,11 @@ OC.L10N.register(
"Checked database schema update" : "Sprawdzono aktualizację schematu bazy danych",
"Checked database schema update for apps" : "Sprawdzono aktualizację schematu bazy danych dla aplikacji",
"Updated \"%s\" to %s" : "Zaktualizowano \"%s\" do %s",
+ "Repair warning: " : "Ostrzeżenie naprawiania:",
+ "Repair error: " : "Błąd naprawiania:",
+ "Following incompatible apps have been disabled: %s" : "Poniższe niezgodne aplikacje zostały wyłączone: %s",
+ "Following 3rd party apps have been disabled: %s" : "Poniższe aplikacje dostawców trzecich - 3rd - zostały wyłączone: %s",
+ "Invalid file provided" : "Podano błędny plik",
"No image or file provided" : "Brak obrazu lub pliku dostarczonego",
"Unknown filetype" : "Nieznany typ pliku",
"Invalid image" : "Nieprawidłowe zdjęcie",
diff --git a/core/l10n/pl.json b/core/l10n/pl.json
index 5fee2eade25..83fdbc4e58a 100644
--- a/core/l10n/pl.json
+++ b/core/l10n/pl.json
@@ -6,6 +6,11 @@
"Checked database schema update" : "Sprawdzono aktualizację schematu bazy danych",
"Checked database schema update for apps" : "Sprawdzono aktualizację schematu bazy danych dla aplikacji",
"Updated \"%s\" to %s" : "Zaktualizowano \"%s\" do %s",
+ "Repair warning: " : "Ostrzeżenie naprawiania:",
+ "Repair error: " : "Błąd naprawiania:",
+ "Following incompatible apps have been disabled: %s" : "Poniższe niezgodne aplikacje zostały wyłączone: %s",
+ "Following 3rd party apps have been disabled: %s" : "Poniższe aplikacje dostawców trzecich - 3rd - zostały wyłączone: %s",
+ "Invalid file provided" : "Podano błędny plik",
"No image or file provided" : "Brak obrazu lub pliku dostarczonego",
"Unknown filetype" : "Nieznany typ pliku",
"Invalid image" : "Nieprawidłowe zdjęcie",
diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js
index 67e4f5a1759..182d552158b 100644
--- a/core/l10n/pt_BR.js
+++ b/core/l10n/pt_BR.js
@@ -8,13 +8,18 @@ OC.L10N.register(
"Checked database schema update" : "Verificado atualização do esquema de banco de dados",
"Checked database schema update for apps" : "Verificar atualização do esquema de banco de dados para aplicativos",
"Updated \"%s\" to %s" : "Atualizado \"%s\" para %s",
+ "Repair warning: " : "Aviso de reparação:",
+ "Repair error: " : "Reparação de erro:",
"Following incompatible apps have been disabled: %s" : "Seguir aplicativos incompatíveis foi desativado: %s",
"Following 3rd party apps have been disabled: %s" : "Seguir aplicativos de terceiros 3 foi desativado: %s",
+ "Invalid file provided" : "Arquivo fornecido inválido",
"No image or file provided" : "Nenhuma imagem ou arquivo fornecido",
"Unknown filetype" : "Tipo de arquivo desconhecido",
"Invalid image" : "Imagem inválida",
"No temporary profile picture available, try again" : "Nenhuma imagem temporária disponível no perfil, tente novamente",
"No crop data provided" : "Nenhum dado para coleta foi fornecido",
+ "No valid crop data provided" : "Nenhum dado recortado válido",
+ "Crop is not square" : "Recorte não é quadrado",
"Sunday" : "Domingo",
"Monday" : "Segunda-feira",
"Tuesday" : "Terça-feira",
diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json
index f30f238665a..25bcdfc6b03 100644
--- a/core/l10n/pt_BR.json
+++ b/core/l10n/pt_BR.json
@@ -6,13 +6,18 @@
"Checked database schema update" : "Verificado atualização do esquema de banco de dados",
"Checked database schema update for apps" : "Verificar atualização do esquema de banco de dados para aplicativos",
"Updated \"%s\" to %s" : "Atualizado \"%s\" para %s",
+ "Repair warning: " : "Aviso de reparação:",
+ "Repair error: " : "Reparação de erro:",
"Following incompatible apps have been disabled: %s" : "Seguir aplicativos incompatíveis foi desativado: %s",
"Following 3rd party apps have been disabled: %s" : "Seguir aplicativos de terceiros 3 foi desativado: %s",
+ "Invalid file provided" : "Arquivo fornecido inválido",
"No image or file provided" : "Nenhuma imagem ou arquivo fornecido",
"Unknown filetype" : "Tipo de arquivo desconhecido",
"Invalid image" : "Imagem inválida",
"No temporary profile picture available, try again" : "Nenhuma imagem temporária disponível no perfil, tente novamente",
"No crop data provided" : "Nenhum dado para coleta foi fornecido",
+ "No valid crop data provided" : "Nenhum dado recortado válido",
+ "Crop is not square" : "Recorte não é quadrado",
"Sunday" : "Domingo",
"Monday" : "Segunda-feira",
"Tuesday" : "Terça-feira",
diff --git a/core/l10n/sr.js b/core/l10n/sr.js
index 22553badbbf..9cedb5746c7 100644
--- a/core/l10n/sr.js
+++ b/core/l10n/sr.js
@@ -8,13 +8,18 @@ OC.L10N.register(
"Checked database schema update" : "Ажурирање шеме базе података, проверено",
"Checked database schema update for apps" : "Ажурирање шеме базе података за апликације, проверено",
"Updated \"%s\" to %s" : "„%s“ ажириран на %s",
+ "Repair warning: " : "Упозорење о поправци :",
+ "Repair error: " : "Грешка поправке:",
"Following incompatible apps have been disabled: %s" : "Следеће неусаглашене апликације су искључене: %s",
"Following 3rd party apps have been disabled: %s" : "Следеће апликације треће стране су искључене: %s",
+ "Invalid file provided" : "Понуђени фајл је неисправан",
"No image or file provided" : "Није дата ни слика ни фајл",
"Unknown filetype" : "Непознат тип фајла",
"Invalid image" : "Неисправна слика",
"No temporary profile picture available, try again" : "Нема привремене слике профила. Покушајте поново",
"No crop data provided" : "Нема података о опсецању",
+ "No valid crop data provided" : "Нема података о опсецању",
+ "Crop is not square" : "Опсецање није квадрат",
"Sunday" : "Недеља",
"Monday" : "Понедељак",
"Tuesday" : "Уторак",
@@ -129,6 +134,7 @@ OC.L10N.register(
"Please reload the page." : "Поново учитајте страницу.",
"The update was unsuccessful. " : "Ажурирање није успело.",
"The update was successful. Redirecting you to ownCloud now." : "Ажурирање је успело. Преусмеравам вас на ОунКлауд.",
+ "Couldn't reset password because the token is invalid" : "Није могуће ресетовати лозинку, јер je дигитални кључ неважећи",
"Couldn't send reset email. Please make sure your username is correct." : "Не могу да пошаљем поруку за обнављање лозинке. Проверите да ли је корисничко име исправно.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Не могу да пошаљем поруку за обнављање лозинке јер за ово корисничко име нема е-адресе. Контактирајте администратора.",
"%s password reset" : "%s лозинка обновљена",
@@ -191,6 +197,7 @@ OC.L10N.register(
"Finish setup" : "Заврши подешавање",
"Finishing …" : "Завршавам…",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ова апликација захтева Јава скрипт за исправан рад. {linkstart}Омогућите Јава скрипт{linkend} и поново учитајте страницу.",
+ "%s is available. Get more information on how to update." : "%s је доступан. Сазнајте више о томе како да ажурирате.",
"Log out" : "Одјава",
"Search" : "Претражи",
"Server side authentication failed!" : "Аутентификација на серверу није успела!",
diff --git a/core/l10n/sr.json b/core/l10n/sr.json
index 0ad388791c6..7a12d0ddbbd 100644
--- a/core/l10n/sr.json
+++ b/core/l10n/sr.json
@@ -6,13 +6,18 @@
"Checked database schema update" : "Ажурирање шеме базе података, проверено",
"Checked database schema update for apps" : "Ажурирање шеме базе података за апликације, проверено",
"Updated \"%s\" to %s" : "„%s“ ажириран на %s",
+ "Repair warning: " : "Упозорење о поправци :",
+ "Repair error: " : "Грешка поправке:",
"Following incompatible apps have been disabled: %s" : "Следеће неусаглашене апликације су искључене: %s",
"Following 3rd party apps have been disabled: %s" : "Следеће апликације треће стране су искључене: %s",
+ "Invalid file provided" : "Понуђени фајл је неисправан",
"No image or file provided" : "Није дата ни слика ни фајл",
"Unknown filetype" : "Непознат тип фајла",
"Invalid image" : "Неисправна слика",
"No temporary profile picture available, try again" : "Нема привремене слике профила. Покушајте поново",
"No crop data provided" : "Нема података о опсецању",
+ "No valid crop data provided" : "Нема података о опсецању",
+ "Crop is not square" : "Опсецање није квадрат",
"Sunday" : "Недеља",
"Monday" : "Понедељак",
"Tuesday" : "Уторак",
@@ -127,6 +132,7 @@
"Please reload the page." : "Поново учитајте страницу.",
"The update was unsuccessful. " : "Ажурирање није успело.",
"The update was successful. Redirecting you to ownCloud now." : "Ажурирање је успело. Преусмеравам вас на ОунКлауд.",
+ "Couldn't reset password because the token is invalid" : "Није могуће ресетовати лозинку, јер je дигитални кључ неважећи",
"Couldn't send reset email. Please make sure your username is correct." : "Не могу да пошаљем поруку за обнављање лозинке. Проверите да ли је корисничко име исправно.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Не могу да пошаљем поруку за обнављање лозинке јер за ово корисничко име нема е-адресе. Контактирајте администратора.",
"%s password reset" : "%s лозинка обновљена",
@@ -189,6 +195,7 @@
"Finish setup" : "Заврши подешавање",
"Finishing …" : "Завршавам…",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ова апликација захтева Јава скрипт за исправан рад. {linkstart}Омогућите Јава скрипт{linkend} и поново учитајте страницу.",
+ "%s is available. Get more information on how to update." : "%s је доступан. Сазнајте више о томе како да ажурирате.",
"Log out" : "Одјава",
"Search" : "Претражи",
"Server side authentication failed!" : "Аутентификација на серверу није успела!",
diff --git a/core/l10n/tr.js b/core/l10n/tr.js
index cfd44d6efe4..f6d5b97a406 100644
--- a/core/l10n/tr.js
+++ b/core/l10n/tr.js
@@ -8,13 +8,18 @@ OC.L10N.register(
"Checked database schema update" : "Veritabanı şema güncellemesi denetlendi",
"Checked database schema update for apps" : "Uygulamalar için veritabanı şema güncellemesi denetlendi",
"Updated \"%s\" to %s" : "\"%s\", %s sürümüne güncellendi",
+ "Repair warning: " : "Tamir uyarı:",
+ "Repair error: " : "Tamir hatası:",
"Following incompatible apps have been disabled: %s" : "Aşağıdaki uyumsuz uygulamalar devre dışı bırakıldı: %s",
"Following 3rd party apps have been disabled: %s" : "Aşağıdaki üçüncü parti uygulamalar devre dışı bırakıldı: %s",
+ "Invalid file provided" : "Sağlanan Geçersiz dosya",
"No image or file provided" : "Resim veya dosya belirtilmedi",
"Unknown filetype" : "Bilinmeyen dosya türü",
"Invalid image" : "Geçersiz resim",
"No temporary profile picture available, try again" : "Kullanılabilir geçici profil resmi yok, tekrar deneyin",
"No crop data provided" : "Kesme verisi sağlanmamış",
+ "No valid crop data provided" : "Sağlanan Geçerli kırpma verileri",
+ "Crop is not square" : "Bitki kare değil",
"Sunday" : "Pazar",
"Monday" : "Pazartesi",
"Tuesday" : "Salı",
diff --git a/core/l10n/tr.json b/core/l10n/tr.json
index ad0d6c2dc18..53eb5d4167b 100644
--- a/core/l10n/tr.json
+++ b/core/l10n/tr.json
@@ -6,13 +6,18 @@
"Checked database schema update" : "Veritabanı şema güncellemesi denetlendi",
"Checked database schema update for apps" : "Uygulamalar için veritabanı şema güncellemesi denetlendi",
"Updated \"%s\" to %s" : "\"%s\", %s sürümüne güncellendi",
+ "Repair warning: " : "Tamir uyarı:",
+ "Repair error: " : "Tamir hatası:",
"Following incompatible apps have been disabled: %s" : "Aşağıdaki uyumsuz uygulamalar devre dışı bırakıldı: %s",
"Following 3rd party apps have been disabled: %s" : "Aşağıdaki üçüncü parti uygulamalar devre dışı bırakıldı: %s",
+ "Invalid file provided" : "Sağlanan Geçersiz dosya",
"No image or file provided" : "Resim veya dosya belirtilmedi",
"Unknown filetype" : "Bilinmeyen dosya türü",
"Invalid image" : "Geçersiz resim",
"No temporary profile picture available, try again" : "Kullanılabilir geçici profil resmi yok, tekrar deneyin",
"No crop data provided" : "Kesme verisi sağlanmamış",
+ "No valid crop data provided" : "Sağlanan Geçerli kırpma verileri",
+ "Crop is not square" : "Bitki kare değil",
"Sunday" : "Pazar",
"Monday" : "Pazartesi",
"Tuesday" : "Salı",
diff --git a/core/l10n/uk.js b/core/l10n/uk.js
index ec584c8085b..3935a3e6a99 100644
--- a/core/l10n/uk.js
+++ b/core/l10n/uk.js
@@ -8,11 +8,18 @@ OC.L10N.register(
"Checked database schema update" : "Перевірено оновлення схеми бази даних",
"Checked database schema update for apps" : "Перевірено оновлення схеми бази даних для додатків",
"Updated \"%s\" to %s" : "Оновлено \"%s\" до %s",
+ "Repair warning: " : "Попередження відновлення:",
+ "Repair error: " : "Помилка відновлення:",
+ "Following incompatible apps have been disabled: %s" : "Несумісні додатки були відключені: %s",
+ "Following 3rd party apps have been disabled: %s" : "3rd party додатки були відключені: %s",
+ "Invalid file provided" : "Невірний формат файлу",
"No image or file provided" : "Немає наданого зображення або файлу",
"Unknown filetype" : "Невідомий тип файлу",
"Invalid image" : "Невірне зображення",
"No temporary profile picture available, try again" : "Немає доступного тимчасового профілю для малюнків, спробуйте ще раз",
- "No crop data provided" : "Немає інформації щодо обрізки даних",
+ "No crop data provided" : "Не вказана інформація про кадрування",
+ "No valid crop data provided" : "Не вказані коректні дані про кадрування",
+ "Crop is not square" : "Кадр не є квадратом",
"Sunday" : "Неділя",
"Monday" : "Понеділок",
"Tuesday" : "Вівторок",
@@ -35,7 +42,7 @@ OC.L10N.register(
"Settings" : "Налаштування",
"Saving..." : "Зберігаю...",
"Couldn't send reset email. Please contact your administrator." : "Не можу надіслати email для скидання. Будь ласка, зверніться до вашого адміністратора.",
- "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Посилання для скидання вашого пароль було надіслано на ваш email. Якщо ви не отримали його найближчим часом, перевірте теку зі спамом.<br>Якщо і там немає, спитайте вашого місцевого адміністратора.",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Посилання для скидання вашого паролю було надіслано на ваш email. Якщо ви не отримали його найближчим часом, перевірте теку зі спамом.<br>Якщо і там немає, спитайте вашого місцевого адміністратора.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваші файли зашифровані. Якщо ви не зробили ключ відновлення, після скидання паролю відновити ваші дані буде неможливо.<br /> Якщо ви не знаєте, що робити, будь ласка, зверніться до адміністратора перед продовженням.<br /> Ви дійсно хочете продовжити?",
"I know what I'm doing" : "Я знаю що роблю",
"Password can not be changed. Please contact your administrator." : "Пароль не може бути змінено. Будь ласка, зверніться до вашого адміністратора",
@@ -51,18 +58,24 @@ OC.L10N.register(
"New Files" : "Нових Файлів",
"Already existing files" : "Файли що вже існують",
"Which files do you want to keep?" : "Які файли ви хочете залишити?",
- "If you select both versions, the copied file will have a number added to its name." : "Якщо ви оберете обидві версії, скопійований файл буде мати номер, доданий у його ім'я.",
+ "If you select both versions, the copied file will have a number added to its name." : "При виборі обох версій, до назви копійованого файлу буде додана цифра",
"Cancel" : "Відмінити",
"Continue" : "Продовжити",
- "(all selected)" : "(все вибрано)",
- "({count} selected)" : "({count} вибрано)",
- "Error loading file exists template" : "Помилка при завантаженні файлу існуючого шаблону",
+ "(all selected)" : "(все обрано)",
+ "({count} selected)" : "({count} обраних)",
+ "Error loading file exists template" : "Помилка при завантаженні шаблону існуючого файлу",
"Very weak password" : "Дуже слабкий пароль",
"Weak password" : "Слабкий пароль",
"So-so password" : "Такий собі пароль",
"Good password" : "Добрий пароль",
"Strong password" : "Надійний пароль",
+ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ваш веб-сервер ще не налаштований належним чином, щоб дозволити синхронізацію файлів, тому що інтерфейс WebDAV, здається, зіпсований.",
+ "This server has no working Internet connection. 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 файл не працює. Ми настійно рекомендуємо вам налаштувати ваш веб сервер таким чином, що-б каталог даних не був більше доступний або перемістіть каталог даних за межі кореня веб сервера.",
"Error occurred while checking server setup" : "При перевірці налаштувань серверу сталася помилка",
+ "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "HTTP заголовок \"{header}\" не збігається з \"{expected}\". Це потенційна проблема безпеки і ми рекомендуємо змінити ці налаштування.",
+ "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "HTTP заголовок \"Strict-Transport-Security\" повинен бути налаштований принаймні на \"2,678,400\" секунд. Це потенційна проблема безпеки і ми рекомендуємо змінити ці налаштування.",
+ "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Ви зайшли на цей сайт через HTTP. Ми настійно рекомендуємо налаштувати ваш сервер на використання HTTPS.",
"Shared" : "Опубліковано",
"Shared with {recipients}" : "Опубліковано для {recipients}",
"Share" : "Поділитися",
@@ -78,9 +91,9 @@ OC.L10N.register(
"Link" : "Посилання",
"Password protect" : "Захистити паролем",
"Password" : "Пароль",
- "Choose a password for the public link" : "Оберіть пароль для опублікованого посилання",
+ "Choose a password for the public link" : "Вкажіть пароль для публічного посилання",
"Allow editing" : "Дозволити редагування",
- "Email link to person" : "Ел. пошта належить Пану",
+ "Email link to person" : "Надіслати посилання по електронній пошті",
"Send" : "Надіслати",
"Set expiration date" : "Встановити термін дії",
"Expiration" : "Закінчення",
@@ -92,7 +105,7 @@ OC.L10N.register(
"Shared in {item} with {user}" : "Опубліковано {item} для {user}",
"Unshare" : "Закрити доступ",
"notify by email" : "повідомити по Email",
- "can share" : "можна поділитися",
+ "can share" : "може ділитися з іншими",
"can edit" : "може редагувати",
"access control" : "контроль доступу",
"create" : "створити",
@@ -114,7 +127,7 @@ OC.L10N.register(
"unknown text" : "невідомий текст",
"Hello world!" : "Привіт світ!",
"sunny" : "сонячно",
- "Hello {name}, the weather is {weather}" : "Привіт {name}, {weather} погода",
+ "Hello {name}, the weather is {weather}" : "Привіт {name}, погода {weather} ",
"Hello {name}" : "Привіт {name}",
"_download %n file_::_download %n files_" : ["завантяження %n файлу","завантаження %n файлів","завантаження %n файлів"],
"Updating {productName} to version {version}, this may take a while." : "Оновлення {productName} до версії {version}, це може займати деякий час.",
@@ -124,24 +137,26 @@ OC.L10N.register(
"Couldn't reset password because the token is invalid" : "Неможливо скинути пароль, бо маркер є недійсним",
"Couldn't send reset email. Please make sure your username is correct." : "Не вдалося відправити скидання паролю. Будь ласка, переконайтеся, що ваше ім'я користувача є правильним.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Не вдалося відправити скидання паролю, тому що немає адреси електронної пошти для цього користувача. Будь ласка, зверніться до адміністратора.",
- "%s password reset" : "%s пароль скинуто",
+ "%s password reset" : "%s скидання паролю",
"Use the following link to reset your password: {link}" : "Використовуйте наступне посилання для скидання пароля: {link}",
"New password" : "Новий пароль",
"New Password" : "Новий пароль",
"Reset password" : "Скинути пароль",
- "_{count} search result in other places_::_{count} search results in other places_" : ["","",""],
+ "Searching other places" : "Йде пошук в інших місцях",
+ "No search result in other places" : "В інших місцях нічого не знайдено",
+ "_{count} search result in other places_::_{count} search results in other places_" : ["{count} результат пошуку в інших місцях","{count} результатів пошуку в інших місцях","{count} результати пошуку в інших місцях"],
"Personal" : "Особисте",
"Users" : "Користувачі",
"Apps" : "Додатки",
"Admin" : "Адмін",
"Help" : "Допомога",
"Error loading tags" : "Помилка завантаження тегів.",
- "Tag already exists" : "Тег вже існує",
- "Error deleting tag(s)" : "Помилка видалення тегу(ів)",
- "Error tagging" : "Помилка встановлення тегів",
- "Error untagging" : "Помилка зняття тегів",
- "Error favoriting" : "Помилка позначення улюблених",
- "Error unfavoriting" : "Помилка зняття позначки улюблених",
+ "Tag already exists" : "Мітка вже існує",
+ "Error deleting tag(s)" : "Помилка видалення мітки(ок)",
+ "Error tagging" : "Помилка встановлення міток",
+ "Error untagging" : "Помилка зняття мітки",
+ "Error favoriting" : "Помилка додавання в обрані",
+ "Error unfavoriting" : "Помилка видалення з обраного",
"Access forbidden" : "Доступ заборонено",
"File not found" : "Файл не знайдено",
"The specified document has not been found on the server." : "Не вдалось знайти вказаний документ на сервері.",
@@ -151,11 +166,11 @@ OC.L10N.register(
"Cheers!" : "Будьмо!",
"Internal Server Error" : "Внутрішня помилка серверу",
"The server encountered an internal error and was unable to complete your request." : "На сервері сталася внутрішня помилка, тому він не зміг виконати ваш запит.",
- "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Будь ласка, зверніться до адміністратора сервера, якщо ця помилка з'являється кілька разів, будь ласка, вкажіть технічні подробиці нижче в звіті.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Будь ласка, зверніться до адміністратора сервера, якщо ця помилка з'являється кілька разів, будь ласка, вкажіть технічні подробиці у вашому звіті.",
"More details can be found in the server log." : "Більше деталей може бути в журналі серверу.",
"Technical details" : "Технічні деталі",
"Remote Address: %s" : "Віддалена Адреса: %s",
- "Request ID: %s" : "Запит ID: %s",
+ "Request ID: %s" : "ID запиту: %s",
"Code: %s" : "Код: %s",
"Message: %s" : "Повідомлення: %s",
"File: %s" : "Файл: %s",
@@ -169,38 +184,44 @@ OC.L10N.register(
"Storage & database" : "Сховище і база даних",
"Data folder" : "Каталог даних",
"Configure the database" : "Налаштування бази даних",
- "Only %s is available." : "Тільки %s доступно.",
+ "Only %s is available." : "Доступно тільки %s.",
"Database user" : "Користувач бази даних",
"Database password" : "Пароль для бази даних",
"Database name" : "Назва бази даних",
"Database tablespace" : "Таблиця бази даних",
"Database host" : "Хост бази даних",
- "Finish setup" : "Завершити налаштування",
+ "Performance Warning" : "Попередження про продуктивність",
+ "SQLite will be used as database." : "В якості бази даних буде використана SQLite.",
+ "For larger installations we recommend to choose a different database backend." : "Для великих установок ми радимо вибрати іншу базу даних.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Особливо викликає сумнів використання SQLite при синхронізації файлів з використанням клієнта для ПК.",
+ "Finish setup" : "Завершити встановлення",
"Finishing …" : "Завершується ...",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ця програма вимагає увімкнений JavaScript для коректної роботи. Будь ласка, {linkstart} Увімкніть JavaScript {linkend} та перезавантажте інтерфейс.",
"%s is available. Get more information on how to update." : "%s доступний. Отримай більше інформації про те, як оновити.",
"Log out" : "Вихід",
- "Search" : "Пошук",
- "Server side authentication failed!" : "Помилка аутентифікації на боці Сервера !",
+ "Search" : "Знайти",
+ "Server side authentication failed!" : "Невдала аутентифікація з сервером!",
"Please contact your administrator." : "Будь ласка, зверніться до вашого Адміністратора.",
"Forgot your password? Reset it!" : "Забули ваш пароль? Скиньте його!",
"remember" : "запам'ятати",
- "Log in" : "Вхід",
- "Alternative Logins" : "Альтернативні Логіни",
+ "Log in" : "Увійти",
+ "Alternative Logins" : "Альтернативні імена користувача",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Агов,<br><br>просто щоб ви знали, що %s поділився »%s« з вами.<br><a href=\"%s\">Подивіться!</a><br><br>",
- "This ownCloud instance is currently in single user mode." : "Цей екземпляр OwnCloud зараз працює в монопольному режимі одного користувача",
- "This means only administrators can use the instance." : "Це означає, що лише адміністратори можуть використовувати цей екземпляр.",
- "Contact your system administrator if this message persists or appeared unexpectedly." : "Зверніться до системного адміністратора, якщо це повідомлення зберігається або з'являєтья несподівано.",
+ "This ownCloud instance is currently in single user mode." : "Сервер ownCloud в даний час працює в однокористувацькому режимі.",
+ "This means only administrators can use the instance." : "Це означає, що тільки адміністратори можуть використовувати сервер.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Зверніться до вашого системного адміністратора якщо це повідомлення не зникає або з'являється несподівано.",
"Thank you for your patience." : "Дякуємо за ваше терпіння.",
- "You are accessing the server from an untrusted domain." : "Ви зайшли на сервер з ненадійного домену.",
+ "You are accessing the server from an untrusted domain." : "Ви намагаєтеся отримати доступ до сервера з непідтвердженого домену.",
"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Будь ласка, зверніться до адміністратора. Якщо ви є адміністратором цього серверу, ви можете налаштувати опцію \"trusted_domain\" в конфігураційному файлі config/config.php. Приклад конфігурації знаходится в файлі config/config.sample.php.",
"Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Залежно від конфігурації Ви як адміністратор можете додати цей домен у список довірених, використовуйте кнопку нижче.",
- "Add \"%s\" as trusted domain" : "Додати \"%s\" як довірений",
+ "Add \"%s\" as trusted domain" : "Додати \"%s\" як довірений домен",
"%s will be updated to version %s." : "%s буде оновлено до версії %s.",
"The following apps will be disabled:" : "Наступні додатки будуть відключені:",
"The theme %s has been disabled." : "Тему %s було вимкнено.",
- "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Перш ніж продовжити, будь ласка, переконайтеся, що база даних, папка конфігурації і папка даних були дубльовані.",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Перед продовженням переконайтеся, що ви зробили резервну копію бази даних, каталогу конфігурації та каталогу з даними.",
"Start update" : "Почати оновлення",
- "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Щоб уникнути великих таймаутів з більш тяжкими встановленнями, ви можете виконати наступну команду відносно директорії встановлення:",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Щоб уникнути затримок у великих встановленнях, ви можете виконати наступну команду в каталозі встановлення:",
+ "This %s instance is currently in maintenance mode, which may take a while." : "Цей %s знаходиться в режимі технічного обслуговування, яке може зайняти деякий час.",
"This page will refresh itself when the %s instance is available again." : "Ця сторінка автоматично перезавантажиться коли екземпляр %s стане знову доступний."
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/core/l10n/uk.json b/core/l10n/uk.json
index 256b95c0292..979ac396899 100644
--- a/core/l10n/uk.json
+++ b/core/l10n/uk.json
@@ -6,11 +6,18 @@
"Checked database schema update" : "Перевірено оновлення схеми бази даних",
"Checked database schema update for apps" : "Перевірено оновлення схеми бази даних для додатків",
"Updated \"%s\" to %s" : "Оновлено \"%s\" до %s",
+ "Repair warning: " : "Попередження відновлення:",
+ "Repair error: " : "Помилка відновлення:",
+ "Following incompatible apps have been disabled: %s" : "Несумісні додатки були відключені: %s",
+ "Following 3rd party apps have been disabled: %s" : "3rd party додатки були відключені: %s",
+ "Invalid file provided" : "Невірний формат файлу",
"No image or file provided" : "Немає наданого зображення або файлу",
"Unknown filetype" : "Невідомий тип файлу",
"Invalid image" : "Невірне зображення",
"No temporary profile picture available, try again" : "Немає доступного тимчасового профілю для малюнків, спробуйте ще раз",
- "No crop data provided" : "Немає інформації щодо обрізки даних",
+ "No crop data provided" : "Не вказана інформація про кадрування",
+ "No valid crop data provided" : "Не вказані коректні дані про кадрування",
+ "Crop is not square" : "Кадр не є квадратом",
"Sunday" : "Неділя",
"Monday" : "Понеділок",
"Tuesday" : "Вівторок",
@@ -33,7 +40,7 @@
"Settings" : "Налаштування",
"Saving..." : "Зберігаю...",
"Couldn't send reset email. Please contact your administrator." : "Не можу надіслати email для скидання. Будь ласка, зверніться до вашого адміністратора.",
- "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Посилання для скидання вашого пароль було надіслано на ваш email. Якщо ви не отримали його найближчим часом, перевірте теку зі спамом.<br>Якщо і там немає, спитайте вашого місцевого адміністратора.",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Посилання для скидання вашого паролю було надіслано на ваш email. Якщо ви не отримали його найближчим часом, перевірте теку зі спамом.<br>Якщо і там немає, спитайте вашого місцевого адміністратора.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваші файли зашифровані. Якщо ви не зробили ключ відновлення, після скидання паролю відновити ваші дані буде неможливо.<br /> Якщо ви не знаєте, що робити, будь ласка, зверніться до адміністратора перед продовженням.<br /> Ви дійсно хочете продовжити?",
"I know what I'm doing" : "Я знаю що роблю",
"Password can not be changed. Please contact your administrator." : "Пароль не може бути змінено. Будь ласка, зверніться до вашого адміністратора",
@@ -49,18 +56,24 @@
"New Files" : "Нових Файлів",
"Already existing files" : "Файли що вже існують",
"Which files do you want to keep?" : "Які файли ви хочете залишити?",
- "If you select both versions, the copied file will have a number added to its name." : "Якщо ви оберете обидві версії, скопійований файл буде мати номер, доданий у його ім'я.",
+ "If you select both versions, the copied file will have a number added to its name." : "При виборі обох версій, до назви копійованого файлу буде додана цифра",
"Cancel" : "Відмінити",
"Continue" : "Продовжити",
- "(all selected)" : "(все вибрано)",
- "({count} selected)" : "({count} вибрано)",
- "Error loading file exists template" : "Помилка при завантаженні файлу існуючого шаблону",
+ "(all selected)" : "(все обрано)",
+ "({count} selected)" : "({count} обраних)",
+ "Error loading file exists template" : "Помилка при завантаженні шаблону існуючого файлу",
"Very weak password" : "Дуже слабкий пароль",
"Weak password" : "Слабкий пароль",
"So-so password" : "Такий собі пароль",
"Good password" : "Добрий пароль",
"Strong password" : "Надійний пароль",
+ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ваш веб-сервер ще не налаштований належним чином, щоб дозволити синхронізацію файлів, тому що інтерфейс WebDAV, здається, зіпсований.",
+ "This server has no working Internet connection. 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 файл не працює. Ми настійно рекомендуємо вам налаштувати ваш веб сервер таким чином, що-б каталог даних не був більше доступний або перемістіть каталог даних за межі кореня веб сервера.",
"Error occurred while checking server setup" : "При перевірці налаштувань серверу сталася помилка",
+ "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "HTTP заголовок \"{header}\" не збігається з \"{expected}\". Це потенційна проблема безпеки і ми рекомендуємо змінити ці налаштування.",
+ "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "HTTP заголовок \"Strict-Transport-Security\" повинен бути налаштований принаймні на \"2,678,400\" секунд. Це потенційна проблема безпеки і ми рекомендуємо змінити ці налаштування.",
+ "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Ви зайшли на цей сайт через HTTP. Ми настійно рекомендуємо налаштувати ваш сервер на використання HTTPS.",
"Shared" : "Опубліковано",
"Shared with {recipients}" : "Опубліковано для {recipients}",
"Share" : "Поділитися",
@@ -76,9 +89,9 @@
"Link" : "Посилання",
"Password protect" : "Захистити паролем",
"Password" : "Пароль",
- "Choose a password for the public link" : "Оберіть пароль для опублікованого посилання",
+ "Choose a password for the public link" : "Вкажіть пароль для публічного посилання",
"Allow editing" : "Дозволити редагування",
- "Email link to person" : "Ел. пошта належить Пану",
+ "Email link to person" : "Надіслати посилання по електронній пошті",
"Send" : "Надіслати",
"Set expiration date" : "Встановити термін дії",
"Expiration" : "Закінчення",
@@ -90,7 +103,7 @@
"Shared in {item} with {user}" : "Опубліковано {item} для {user}",
"Unshare" : "Закрити доступ",
"notify by email" : "повідомити по Email",
- "can share" : "можна поділитися",
+ "can share" : "може ділитися з іншими",
"can edit" : "може редагувати",
"access control" : "контроль доступу",
"create" : "створити",
@@ -112,7 +125,7 @@
"unknown text" : "невідомий текст",
"Hello world!" : "Привіт світ!",
"sunny" : "сонячно",
- "Hello {name}, the weather is {weather}" : "Привіт {name}, {weather} погода",
+ "Hello {name}, the weather is {weather}" : "Привіт {name}, погода {weather} ",
"Hello {name}" : "Привіт {name}",
"_download %n file_::_download %n files_" : ["завантяження %n файлу","завантаження %n файлів","завантаження %n файлів"],
"Updating {productName} to version {version}, this may take a while." : "Оновлення {productName} до версії {version}, це може займати деякий час.",
@@ -122,24 +135,26 @@
"Couldn't reset password because the token is invalid" : "Неможливо скинути пароль, бо маркер є недійсним",
"Couldn't send reset email. Please make sure your username is correct." : "Не вдалося відправити скидання паролю. Будь ласка, переконайтеся, що ваше ім'я користувача є правильним.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Не вдалося відправити скидання паролю, тому що немає адреси електронної пошти для цього користувача. Будь ласка, зверніться до адміністратора.",
- "%s password reset" : "%s пароль скинуто",
+ "%s password reset" : "%s скидання паролю",
"Use the following link to reset your password: {link}" : "Використовуйте наступне посилання для скидання пароля: {link}",
"New password" : "Новий пароль",
"New Password" : "Новий пароль",
"Reset password" : "Скинути пароль",
- "_{count} search result in other places_::_{count} search results in other places_" : ["","",""],
+ "Searching other places" : "Йде пошук в інших місцях",
+ "No search result in other places" : "В інших місцях нічого не знайдено",
+ "_{count} search result in other places_::_{count} search results in other places_" : ["{count} результат пошуку в інших місцях","{count} результатів пошуку в інших місцях","{count} результати пошуку в інших місцях"],
"Personal" : "Особисте",
"Users" : "Користувачі",
"Apps" : "Додатки",
"Admin" : "Адмін",
"Help" : "Допомога",
"Error loading tags" : "Помилка завантаження тегів.",
- "Tag already exists" : "Тег вже існує",
- "Error deleting tag(s)" : "Помилка видалення тегу(ів)",
- "Error tagging" : "Помилка встановлення тегів",
- "Error untagging" : "Помилка зняття тегів",
- "Error favoriting" : "Помилка позначення улюблених",
- "Error unfavoriting" : "Помилка зняття позначки улюблених",
+ "Tag already exists" : "Мітка вже існує",
+ "Error deleting tag(s)" : "Помилка видалення мітки(ок)",
+ "Error tagging" : "Помилка встановлення міток",
+ "Error untagging" : "Помилка зняття мітки",
+ "Error favoriting" : "Помилка додавання в обрані",
+ "Error unfavoriting" : "Помилка видалення з обраного",
"Access forbidden" : "Доступ заборонено",
"File not found" : "Файл не знайдено",
"The specified document has not been found on the server." : "Не вдалось знайти вказаний документ на сервері.",
@@ -149,11 +164,11 @@
"Cheers!" : "Будьмо!",
"Internal Server Error" : "Внутрішня помилка серверу",
"The server encountered an internal error and was unable to complete your request." : "На сервері сталася внутрішня помилка, тому він не зміг виконати ваш запит.",
- "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Будь ласка, зверніться до адміністратора сервера, якщо ця помилка з'являється кілька разів, будь ласка, вкажіть технічні подробиці нижче в звіті.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Будь ласка, зверніться до адміністратора сервера, якщо ця помилка з'являється кілька разів, будь ласка, вкажіть технічні подробиці у вашому звіті.",
"More details can be found in the server log." : "Більше деталей може бути в журналі серверу.",
"Technical details" : "Технічні деталі",
"Remote Address: %s" : "Віддалена Адреса: %s",
- "Request ID: %s" : "Запит ID: %s",
+ "Request ID: %s" : "ID запиту: %s",
"Code: %s" : "Код: %s",
"Message: %s" : "Повідомлення: %s",
"File: %s" : "Файл: %s",
@@ -167,38 +182,44 @@
"Storage & database" : "Сховище і база даних",
"Data folder" : "Каталог даних",
"Configure the database" : "Налаштування бази даних",
- "Only %s is available." : "Тільки %s доступно.",
+ "Only %s is available." : "Доступно тільки %s.",
"Database user" : "Користувач бази даних",
"Database password" : "Пароль для бази даних",
"Database name" : "Назва бази даних",
"Database tablespace" : "Таблиця бази даних",
"Database host" : "Хост бази даних",
- "Finish setup" : "Завершити налаштування",
+ "Performance Warning" : "Попередження про продуктивність",
+ "SQLite will be used as database." : "В якості бази даних буде використана SQLite.",
+ "For larger installations we recommend to choose a different database backend." : "Для великих установок ми радимо вибрати іншу базу даних.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Особливо викликає сумнів використання SQLite при синхронізації файлів з використанням клієнта для ПК.",
+ "Finish setup" : "Завершити встановлення",
"Finishing …" : "Завершується ...",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ця програма вимагає увімкнений JavaScript для коректної роботи. Будь ласка, {linkstart} Увімкніть JavaScript {linkend} та перезавантажте інтерфейс.",
"%s is available. Get more information on how to update." : "%s доступний. Отримай більше інформації про те, як оновити.",
"Log out" : "Вихід",
- "Search" : "Пошук",
- "Server side authentication failed!" : "Помилка аутентифікації на боці Сервера !",
+ "Search" : "Знайти",
+ "Server side authentication failed!" : "Невдала аутентифікація з сервером!",
"Please contact your administrator." : "Будь ласка, зверніться до вашого Адміністратора.",
"Forgot your password? Reset it!" : "Забули ваш пароль? Скиньте його!",
"remember" : "запам'ятати",
- "Log in" : "Вхід",
- "Alternative Logins" : "Альтернативні Логіни",
+ "Log in" : "Увійти",
+ "Alternative Logins" : "Альтернативні імена користувача",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Агов,<br><br>просто щоб ви знали, що %s поділився »%s« з вами.<br><a href=\"%s\">Подивіться!</a><br><br>",
- "This ownCloud instance is currently in single user mode." : "Цей екземпляр OwnCloud зараз працює в монопольному режимі одного користувача",
- "This means only administrators can use the instance." : "Це означає, що лише адміністратори можуть використовувати цей екземпляр.",
- "Contact your system administrator if this message persists or appeared unexpectedly." : "Зверніться до системного адміністратора, якщо це повідомлення зберігається або з'являєтья несподівано.",
+ "This ownCloud instance is currently in single user mode." : "Сервер ownCloud в даний час працює в однокористувацькому режимі.",
+ "This means only administrators can use the instance." : "Це означає, що тільки адміністратори можуть використовувати сервер.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Зверніться до вашого системного адміністратора якщо це повідомлення не зникає або з'являється несподівано.",
"Thank you for your patience." : "Дякуємо за ваше терпіння.",
- "You are accessing the server from an untrusted domain." : "Ви зайшли на сервер з ненадійного домену.",
+ "You are accessing the server from an untrusted domain." : "Ви намагаєтеся отримати доступ до сервера з непідтвердженого домену.",
"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Будь ласка, зверніться до адміністратора. Якщо ви є адміністратором цього серверу, ви можете налаштувати опцію \"trusted_domain\" в конфігураційному файлі config/config.php. Приклад конфігурації знаходится в файлі config/config.sample.php.",
"Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Залежно від конфігурації Ви як адміністратор можете додати цей домен у список довірених, використовуйте кнопку нижче.",
- "Add \"%s\" as trusted domain" : "Додати \"%s\" як довірений",
+ "Add \"%s\" as trusted domain" : "Додати \"%s\" як довірений домен",
"%s will be updated to version %s." : "%s буде оновлено до версії %s.",
"The following apps will be disabled:" : "Наступні додатки будуть відключені:",
"The theme %s has been disabled." : "Тему %s було вимкнено.",
- "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Перш ніж продовжити, будь ласка, переконайтеся, що база даних, папка конфігурації і папка даних були дубльовані.",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Перед продовженням переконайтеся, що ви зробили резервну копію бази даних, каталогу конфігурації та каталогу з даними.",
"Start update" : "Почати оновлення",
- "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Щоб уникнути великих таймаутів з більш тяжкими встановленнями, ви можете виконати наступну команду відносно директорії встановлення:",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Щоб уникнути затримок у великих встановленнях, ви можете виконати наступну команду в каталозі встановлення:",
+ "This %s instance is currently in maintenance mode, which may take a while." : "Цей %s знаходиться в режимі технічного обслуговування, яке може зайняти деякий час.",
"This page will refresh itself when the %s instance is available again." : "Ця сторінка автоматично перезавантажиться коли екземпляр %s стане знову доступний."
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/core/lostpassword/controller/lostcontroller.php b/core/lostpassword/controller/lostcontroller.php
index c039c578b59..08f5246503f 100644
--- a/core/lostpassword/controller/lostcontroller.php
+++ b/core/lostpassword/controller/lostcontroller.php
@@ -15,6 +15,7 @@ use \OCP\IRequest;
use \OCP\IL10N;
use \OCP\IConfig;
use OCP\IUserManager;
+use OCP\Mail\IMailer;
use OCP\Security\ISecureRandom;
use \OC_Defaults;
use OCP\Security\StringUtils;
@@ -32,6 +33,7 @@ class LostController extends Controller {
protected $urlGenerator;
/** @var IUserManager */
protected $userManager;
+ // FIXME: Inject a non-static factory of OC_Defaults for better unit-testing
/** @var OC_Defaults */
protected $defaults;
/** @var IL10N */
@@ -44,6 +46,8 @@ class LostController extends Controller {
protected $config;
/** @var ISecureRandom */
protected $secureRandom;
+ /** @var IMailer */
+ protected $mailer;
/**
* @param string $appName
@@ -56,6 +60,7 @@ class LostController extends Controller {
* @param ISecureRandom $secureRandom
* @param string $from
* @param string $isDataEncrypted
+ * @param IMailer $mailer
*/
public function __construct($appName,
IRequest $request,
@@ -66,7 +71,8 @@ class LostController extends Controller {
IConfig $config,
ISecureRandom $secureRandom,
$from,
- $isDataEncrypted) {
+ $isDataEncrypted,
+ IMailer $mailer) {
parent::__construct($appName, $request);
$this->urlGenerator = $urlGenerator;
$this->userManager = $userManager;
@@ -76,6 +82,7 @@ class LostController extends Controller {
$this->from = $from;
$this->isDataEncrypted = $isDataEncrypted;
$this->config = $config;
+ $this->mailer = $mailer;
}
/**
@@ -200,15 +207,12 @@ class LostController extends Controller {
$msg = $tmpl->fetchPage();
try {
- // FIXME: should be added to the container and injected in here
- \OC_Mail::send(
- $email,
- $user,
- $this->l10n->t('%s password reset', array($this->defaults->getName())),
- $msg,
- $this->from,
- $this->defaults->getName()
- );
+ $message = $this->mailer->createMessage();
+ $message->setTo([$email => $user]);
+ $message->setSubject($this->l10n->t('%s password reset', [$this->defaults->getName()]));
+ $message->setPlainBody($msg);
+ $message->setFrom([$this->from => $this->defaults->getName()]);
+ $this->mailer->send($message);
} catch (\Exception $e) {
throw new \Exception($this->l10n->t(
'Couldn\'t send reset email. Please contact your administrator.'
diff --git a/core/templates/403.php b/core/templates/403.php
index 6e910fd2e82..a19009c3546 100644
--- a/core/templates/403.php
+++ b/core/templates/403.php
@@ -9,7 +9,7 @@ if(!isset($_)) {//also provide standalone error page
?>
<ul>
<li class='error'>
- <?php p($l->t( 'Access forbidden' )); ?><br/>
+ <?php p($l->t( 'Access forbidden' )); ?><br>
<p class='hint'><?php if(isset($_['file'])) p($_['file'])?></p>
</li>
</ul>
diff --git a/core/templates/404.php b/core/templates/404.php
index 90912844ef9..c8d16e3e8f7 100644
--- a/core/templates/404.php
+++ b/core/templates/404.php
@@ -14,7 +14,7 @@ if(!isset($_)) {//also provide standalone error page
<?php else: ?>
<ul>
<li class="error">
- <?php p($l->t('File not found')); ?><br/>
+ <?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>
</li>
diff --git a/core/templates/error.php b/core/templates/error.php
index 030fbf07fcb..6e044b72414 100644
--- a/core/templates/error.php
+++ b/core/templates/error.php
@@ -1,7 +1,7 @@
<ul class="error-wide">
<?php foreach($_["errors"] as $error):?>
<li class='error'>
- <?php p($error['error']) ?><br/>
+ <?php p($error['error']) ?><br>
<?php if(isset($error['hint']) && $error['hint']): ?>
<p class='hint'><?php print_unescaped($error['hint']) ?></p>
<?php endif;?>
diff --git a/core/templates/exception.php b/core/templates/exception.php
index e5b57e2645e..9ddc0f94d65 100644
--- a/core/templates/exception.php
+++ b/core/templates/exception.php
@@ -16,6 +16,7 @@ style('core', ['styles', 'header']);
<li><?php p($l->t('Remote Address: %s', $_['remoteAddr'])) ?></li>
<li><?php p($l->t('Request ID: %s', $_['requestID'])) ?></li>
<?php if($_['debugMode']): ?>
+ <li><?php p($l->t('Type: %s', $_['errorClass'])) ?></li>
<li><?php p($l->t('Code: %s', $_['errorCode'])) ?></li>
<li><?php p($l->t('Message: %s', $_['errorMsg'])) ?></li>
<li><?php p($l->t('File: %s', $_['file'])) ?></li>
diff --git a/core/templates/installation.php b/core/templates/installation.php
index f8311fed009..54c490c544e 100644
--- a/core/templates/installation.php
+++ b/core/templates/installation.php
@@ -42,18 +42,18 @@ script('core', [
<input type="text" name="adminlogin" id="adminlogin"
placeholder="<?php p($l->t( 'Username' )); ?>"
value="<?php p($_['adminlogin']); ?>"
- autocomplete="off" autocapitalize="off" autocorrect="off" autofocus required />
+ autocomplete="off" autocapitalize="off" autocorrect="off" autofocus required>
<label for="adminlogin" class="infield"><?php p($l->t( 'Username' )); ?></label>
- <img class="svg" src="<?php p(image_path('', 'actions/user.svg')); ?>" alt="" />
+ <img class="svg" src="<?php p(image_path('', 'actions/user.svg')); ?>" alt="">
</p>
<p class="groupbottom">
<input type="password" name="adminpass" data-typetoggle="#show" id="adminpass"
placeholder="<?php p($l->t( 'Password' )); ?>"
value="<?php p($_['adminpass']); ?>"
- autocomplete="off" autocapitalize="off" autocorrect="off" required />
+ autocomplete="off" autocapitalize="off" autocorrect="off" required>
<label for="adminpass" class="infield"><?php p($l->t( 'Password' )); ?></label>
- <img class="svg" id="adminpass-icon" src="<?php print_unescaped(image_path('', 'actions/password.svg')); ?>" alt="" />
- <input type="checkbox" id="show" name="show" />
+ <img class="svg" id="adminpass-icon" src="<?php print_unescaped(image_path('', 'actions/password.svg')); ?>" alt="">
+ <input type="checkbox" id="show" name="show">
<label for="show"></label>
<div class="strengthify-wrapper"></div>
</p>
@@ -72,7 +72,7 @@ script('core', [
<input type="text" name="directory" id="directory"
placeholder="<?php p(OC::$SERVERROOT.'/data'); ?>"
value="<?php p($_['directory']); ?>"
- autocomplete="off" autocapitalize="off" autocorrect="off" />
+ autocomplete="off" autocapitalize="off" autocorrect="off">
</div>
</fieldset>
<?php endif; ?>
@@ -86,7 +86,7 @@ script('core', [
<?php foreach($_['databases'] as $type => $label): ?>
<?php if(count($_['databases']) === 1): ?>
<p class="info"><?php p($l->t( 'Only %s is available.', array($label) )); ?>.</p>
- <input type="hidden" id="dbtype" name="dbtype" value="<?php p($type) ?>" />
+ <input type="hidden" id="dbtype" name="dbtype" value="<?php p($type) ?>">
<?php else: ?>
<input type="radio" name="dbtype" value="<?php p($type) ?>" id="<?php p($type) ?>"
<?php print_unescaped($_['dbtype'] === $type ? 'checked="checked" ' : '') ?>/>
@@ -104,15 +104,15 @@ script('core', [
<input type="text" name="dbuser" id="dbuser"
placeholder="<?php p($l->t( 'Database user' )); ?>"
value="<?php p($_['dbuser']); ?>"
- autocomplete="off" autocapitalize="off" autocorrect="off" />
+ autocomplete="off" autocapitalize="off" autocorrect="off">
</p>
<p class="groupmiddle">
<input type="password" name="dbpass" id="dbpass" data-typetoggle="#dbpassword"
placeholder="<?php p($l->t( 'Database password' )); ?>"
value="<?php p($_['dbpass']); ?>"
- autocomplete="off" autocapitalize="off" autocorrect="off" />
+ autocomplete="off" autocapitalize="off" autocorrect="off">
<label for="dbpass" class="infield"><?php p($l->t( 'Database password' )); ?></label>
- <input type="checkbox" id="dbpassword" name="dbpassword" />
+ <input type="checkbox" id="dbpassword" name="dbpassword">
<label for="dbpassword"></label>
</p>
<p class="groupmiddle">
@@ -121,7 +121,7 @@ script('core', [
placeholder="<?php p($l->t( 'Database name' )); ?>"
value="<?php p($_['dbname']); ?>"
autocomplete="off" autocapitalize="off" autocorrect="off"
- pattern="[0-9a-zA-Z$_-]+" />
+ pattern="[0-9a-zA-Z$_-]+">
</p>
<?php if($_['hasOracle']): ?>
<div id="use_oracle_db">
@@ -130,7 +130,7 @@ script('core', [
<input type="text" name="dbtablespace" id="dbtablespace"
placeholder="<?php p($l->t( 'Database tablespace' )); ?>"
value="<?php p($_['dbtablespace']); ?>"
- autocomplete="off" autocapitalize="off" autocorrect="off" />
+ autocomplete="off" autocapitalize="off" autocorrect="off">
</p>
</div>
<?php endif; ?>
@@ -139,7 +139,7 @@ script('core', [
<input type="text" name="dbhost" id="dbhost"
placeholder="<?php p($l->t( 'Database host' )); ?>"
value="<?php p($_['dbhost']); ?>"
- autocomplete="off" autocapitalize="off" autocorrect="off" />
+ autocomplete="off" autocapitalize="off" autocorrect="off">
</p>
</div>
</fieldset>
@@ -157,5 +157,5 @@ script('core', [
</fieldset>
<?php endif ?>
- <div class="buttons"><input type="submit" class="primary" value="<?php p($l->t( 'Finish setup' )); ?>" data-finishing="<?php p($l->t( 'Finishing …' )); ?>" /></div>
+ <div class="buttons"><input type="submit" class="primary" value="<?php p($l->t( 'Finish setup' )); ?>" data-finishing="<?php p($l->t( 'Finishing …' )); ?>"></div>
</form>
diff --git a/core/templates/layout.base.php b/core/templates/layout.base.php
index 7069c0c2634..a5336b1585a 100644
--- a/core/templates/layout.base.php
+++ b/core/templates/layout.base.php
@@ -1,25 +1,21 @@
<!DOCTYPE html>
-<!--[if lt IE 7]><html class="ng-csp ie ie6 lte9 lte8 lte7" data-placeholder-focus="false" lang="<?php p($_['language']); ?>"><![endif]-->
-<!--[if IE 7]><html class="ng-csp ie ie7 lte9 lte8 lte7" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
-<!--[if IE 8]><html class="ng-csp ie ie8 lte9 lte8" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
+<!--[if lte IE 8]><html class="ng-csp ie ie8 lte9 lte8" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
<!--[if IE 9]><html class="ng-csp ie ie9 lte9" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
-<!--[if gt IE 9]><html class="ng-csp ie" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
-<!--[if !IE]><!--><html class="ng-csp" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><!--<![endif]-->
-
+<!--[if (gt IE 9)|!(IE)]><!--><html class="ng-csp" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><!--<![endif]-->
<head data-requesttoken="<?php p($_['requesttoken']); ?>">
+ <meta charset="utf-8">
<title>
<?php p($theme->getTitle()); ?>
</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0">
- <link rel="shortcut icon" type="image/png" href="<?php print_unescaped(image_path('', 'favicon.png')); ?>" />
- <link rel="apple-touch-icon-precomposed" href="<?php print_unescaped(image_path('', 'favicon-touch.png')); ?>" />
+ <link rel="shortcut icon" type="image/png" href="<?php print_unescaped(image_path('', 'favicon.png')); ?>">
+ <link rel="apple-touch-icon-precomposed" href="<?php print_unescaped(image_path('', 'favicon-touch.png')); ?>">
<?php foreach ($_['cssfiles'] as $cssfile): ?>
- <link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" type="text/css" media="screen" />
+ <link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" media="screen">
<?php endforeach; ?>
<?php foreach ($_['jsfiles'] as $jsfile): ?>
- <script type="text/javascript" src="<?php print_unescaped($jsfile); ?>"></script>
+ <script src="<?php print_unescaped($jsfile); ?>"></script>
<?php endforeach; ?>
<?php print_unescaped($_['headers']); ?>
</head>
diff --git a/core/templates/layout.guest.php b/core/templates/layout.guest.php
index 8deda443d98..c494e32a7fc 100644
--- a/core/templates/layout.guest.php
+++ b/core/templates/layout.guest.php
@@ -1,26 +1,22 @@
<!DOCTYPE html>
-<!--[if lt IE 7]><html class="ng-csp ie ie6 lte9 lte8 lte7" data-placeholder-focus="false" lang="<?php p($_['language']); ?>"><![endif]-->
-<!--[if IE 7]><html class="ng-csp ie ie7 lte9 lte8 lte7" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
-<!--[if IE 8]><html class="ng-csp ie ie8 lte9 lte8" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
+<!--[if lte IE 8]><html class="ng-csp ie ie8 lte9 lte8" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
<!--[if IE 9]><html class="ng-csp ie ie9 lte9" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
-<!--[if gt IE 9]><html class="ng-csp ie" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
-<!--[if !IE]><!--><html class="ng-csp" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><!--<![endif]-->
-
+<!--[if (gt IE 9)|!(IE)]><!--><html class="ng-csp" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><!--<![endif]-->
<head data-requesttoken="<?php p($_['requesttoken']); ?>">
+ <meta charset="utf-8">
<title>
<?php p($theme->getTitle()); ?>
</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0">
<meta name="apple-itunes-app" content="app-id=<?php p($theme->getiTunesAppId()); ?>">
- <link rel="shortcut icon" type="image/png" href="<?php print_unescaped(image_path('', 'favicon.png')); ?>" />
- <link rel="apple-touch-icon-precomposed" href="<?php print_unescaped(image_path('', 'favicon-touch.png')); ?>" />
+ <link rel="shortcut icon" type="image/png" href="<?php print_unescaped(image_path('', 'favicon.png')); ?>">
+ <link rel="apple-touch-icon-precomposed" href="<?php print_unescaped(image_path('', 'favicon-touch.png')); ?>">
<?php foreach($_['cssfiles'] as $cssfile): ?>
- <link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" type="text/css" media="screen" />
+ <link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" media="screen">
<?php endforeach; ?>
<?php foreach($_['jsfiles'] as $jsfile): ?>
- <script type="text/javascript" src="<?php print_unescaped($jsfile); ?>"></script>
+ <script src="<?php print_unescaped($jsfile); ?>"></script>
<?php endforeach; ?>
<?php print_unescaped($_['headers']); ?>
</head>
@@ -44,7 +40,6 @@
<div class="push"></div><!-- for sticky footer -->
</div>
</div>
-
<footer>
<p class="info">
<?php print_unescaped($theme->getLongFooter()); ?>
diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php
index 7ae4b2e3df7..9667aa72ddb 100644
--- a/core/templates/layout.user.php
+++ b/core/templates/layout.user.php
@@ -1,33 +1,29 @@
<!DOCTYPE html>
-<!--[if lt IE 7]><html class="ng-csp ie ie6 lte9 lte8 lte7" data-placeholder-focus="false" lang="<?php p($_['language']); ?>"><![endif]-->
-<!--[if IE 7]><html class="ng-csp ie ie7 lte9 lte8 lte7" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
-<!--[if IE 8]><html class="ng-csp ie ie8 lte9 lte8" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
+<!--[if lte IE 8]><html class="ng-csp ie ie8 lte9 lte8" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
<!--[if IE 9]><html class="ng-csp ie ie9 lte9" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
-<!--[if gt IE 9]><html class="ng-csp ie" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
-<!--[if !IE]><!--><html class="ng-csp" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><!--<![endif]-->
-
+<!--[if (gt IE 9)|!(IE)]><!--><html class="ng-csp" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><!--<![endif]-->
<head data-user="<?php p($_['user_uid']); ?>" data-requesttoken="<?php p($_['requesttoken']); ?>">
+ <meta charset="utf-8">
<title>
<?php
p(!empty($_['application'])?$_['application'].' - ':'');
p($theme->getTitle());
?>
</title>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0">
<meta name="apple-itunes-app" content="app-id=<?php p($theme->getiTunesAppId()); ?>">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-title" content="<?php p((!empty($_['application']) && $_['appid']!='files')? $_['application']:'ownCloud'); ?>">
<meta name="mobile-web-app-capable" content="yes">
- <link rel="shortcut icon" type="image/png" href="<?php print_unescaped(image_path($_['appid'], 'favicon.png')); ?>" />
- <link rel="apple-touch-icon-precomposed" href="<?php print_unescaped(image_path($_['appid'], 'favicon-touch.png')); ?>" />
+ <link rel="shortcut icon" type="image/png" href="<?php print_unescaped(image_path($_['appid'], 'favicon.png')); ?>">
+ <link rel="apple-touch-icon-precomposed" href="<?php print_unescaped(image_path($_['appid'], 'favicon-touch.png')); ?>">
<?php foreach($_['cssfiles'] as $cssfile): ?>
- <link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" type="text/css" media="screen" />
+ <link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" media="screen">
<?php endforeach; ?>
<?php foreach($_['jsfiles'] as $jsfile): ?>
- <script type="text/javascript" src="<?php print_unescaped($jsfile); ?>"></script>
+ <script src="<?php print_unescaped($jsfile); ?>"></script>
<?php endforeach; ?>
<?php print_unescaped($_['headers']); ?>
</head>
@@ -89,7 +85,7 @@
<?php endforeach; ?>
<li>
<a id="logout" <?php print_unescaped(OC_User::getLogoutAttribute()); ?>>
- <img class="svg" alt="" src="<?php print_unescaped(image_path('', 'actions/logout.svg')); ?>" />
+ <img class="svg" alt="" src="<?php print_unescaped(image_path('', 'actions/logout.svg')); ?>">
<?php p($l->t('Log out'));?>
</a>
</li>
diff --git a/core/templates/login.php b/core/templates/login.php
index f10a8102180..0ef7882d4b0 100644
--- a/core/templates/login.php
+++ b/core/templates/login.php
@@ -11,7 +11,7 @@ script('core', [
<form method="post" name="login">
<fieldset>
<?php if (!empty($_['redirect_url'])) {
- print_unescaped('<input type="hidden" name="redirect_url" value="' . OC_Util::sanitizeHTML($_['redirect_url']) . '" />');
+ print_unescaped('<input type="hidden" name="redirect_url" value="' . OC_Util::sanitizeHTML($_['redirect_url']) . '">');
} ?>
<?php if (isset($_['apacheauthfailed']) && ($_['apacheauthfailed'])): ?>
<div class="warning">
@@ -26,7 +26,7 @@ script('core', [
<?php endforeach; ?>
<p id="message" class="hidden">
<img class="float-spinner" alt=""
- src="<?php p(\OCP\Util::imagePath('core', 'loading-dark.gif'));?>" />
+ src="<?php p(\OCP\Util::imagePath('core', 'loading-dark.gif'));?>">
<span id="messageText"></span>
<!-- the following div ensures that the spinner is always inside the #message div -->
<div style="clear: both;"></div>
@@ -36,7 +36,7 @@ script('core', [
placeholder="<?php p($l->t('Username')); ?>"
value="<?php p($_['username']); ?>"
<?php p($_['user_autofocus'] ? 'autofocus' : ''); ?>
- autocomplete="on" autocapitalize="off" autocorrect="off" required />
+ autocomplete="on" autocapitalize="off" autocorrect="off" required>
<label for="user" class="infield"><?php p($l->t('Username')); ?></label>
<img class="svg" src="<?php print_unescaped(image_path('', 'actions/user.svg')); ?>" alt=""/>
</p>
@@ -45,7 +45,7 @@ script('core', [
<input type="password" name="password" id="password" value=""
placeholder="<?php p($l->t('Password')); ?>"
<?php p($_['user_autofocus'] ? '' : 'autofocus'); ?>
- autocomplete="on" autocapitalize="off" autocorrect="off" required />
+ autocomplete="on" autocapitalize="off" autocorrect="off" required>
<label for="password" class="infield"><?php p($l->t('Password')); ?></label>
<img class="svg" id="password-icon" src="<?php print_unescaped(image_path('', 'actions/password.svg')); ?>" alt=""/>
</p>
@@ -56,12 +56,12 @@ script('core', [
</a>
<?php endif; ?>
<?php if ($_['rememberLoginAllowed'] === true) : ?>
- <input type="checkbox" name="remember_login" value="1" id="remember_login" />
+ <input type="checkbox" name="remember_login" value="1" id="remember_login">
<label for="remember_login"><?php p($l->t('remember')); ?></label>
<?php endif; ?>
<input type="hidden" name="timezone-offset" id="timezone-offset"/>
<input type="hidden" name="timezone" id="timezone"/>
- <input type="hidden" name="requesttoken" value="<?php p($_['requesttoken']) ?>" />
+ <input type="hidden" name="requesttoken" value="<?php p($_['requesttoken']) ?>">
<input type="submit" id="submit" class="login primary" value="<?php p($l->t('Log in')); ?>" disabled="disabled"/>
</fieldset>
</form>
diff --git a/core/templates/singleuser.user.php b/core/templates/singleuser.user.php
index a5f56f6e2c4..bf076eb8d61 100644
--- a/core/templates/singleuser.user.php
+++ b/core/templates/singleuser.user.php
@@ -1,10 +1,10 @@
<ul>
<li class='update'>
- <?php p($l->t('This ownCloud instance is currently in single user mode.')) ?><br /><br />
- <?php p($l->t('This means only administrators can use the instance.')) ?><br /><br />
+ <?php p($l->t('This ownCloud instance is currently in single user mode.')) ?><br><br>
+ <?php p($l->t('This means only administrators can use the instance.')) ?><br><br>
<?php p($l->t('Contact your system administrator if this message persists or appeared unexpectedly.')) ?>
- <br /><br />
- <?php p($l->t('Thank you for your patience.')); ?><br /><br />
+ <br><br>
+ <?php p($l->t('Thank you for your patience.')); ?><br><br>
<a class="button" <?php print_unescaped(OC_User::getLogoutAttribute()); ?>><?php p($l->t('Log out')); ?></a>
</li>
</ul>
diff --git a/core/templates/tags.html b/core/templates/tags.html
index ae3d072b381..a7125027a26 100644
--- a/core/templates/tags.html
+++ b/core/templates/tags.html
@@ -2,13 +2,13 @@
<div class="content">
<div class="scrollarea">
<ul class="taglist">
- <li><input type="checkbox" name="ids[]" id="tag_{id}" value="{name}" />
+ <li><input type="checkbox" name="ids[]" id="tag_{id}" value="{name}">
<label for="tag_{id}">{name}</label>
</li>
</ul>
</div>
<div class="bottombuttons">
- <input type="text" class="addinput" name="tag" placeholder="{addText}" />
+ <input type="text" class="addinput" name="tag" placeholder="{addText}">
</div>
</div>
</div>
diff --git a/core/templates/untrustedDomain.php b/core/templates/untrustedDomain.php
index b661834318d..3197916cebb 100644
--- a/core/templates/untrustedDomain.php
+++ b/core/templates/untrustedDomain.php
@@ -2,13 +2,13 @@
<ul class="error-wide">
<li class='error'>
- <?php p($l->t('You are accessing the server from an untrusted domain.')); ?><br/>
+ <?php p($l->t('You are accessing the server from an untrusted domain.')); ?><br>
<p class='hint'>
<?php p($l->t('Please contact your administrator. If you are an administrator of this instance, configure the "trusted_domain" setting in config/config.php. An example configuration is provided in config/config.sample.php.')); ?>
- <br/>
+ <br>
<?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/>
+ <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">
<?php p($l->t('Add "%s" as trusted domain', array($_['domain']))); ?>
diff --git a/core/templates/update.user.php b/core/templates/update.user.php
index be332f24f35..bc6936188ea 100644
--- a/core/templates/update.user.php
+++ b/core/templates/update.user.php
@@ -1,8 +1,8 @@
<ul>
<li class='update'>
- <?php p($l->t('This %s instance is currently in maintenance mode, which may take a while.', array($theme->getName()))) ?><br/><br/>
- <?php p($l->t('This page will refresh itself when the %s instance is available again.', array($theme->getName()))) ?><br/><br/>
- <?php p($l->t('Contact your system administrator if this message persists or appeared unexpectedly.')) ?><br/><br/>
- <?php p($l->t('Thank you for your patience.')); ?><br/><br/>
+ <?php p($l->t('This %s instance is currently in maintenance mode, which may take a while.', array($theme->getName()))) ?><br><br>
+ <?php p($l->t('This page will refresh itself when the %s instance is available again.', array($theme->getName()))) ?><br><br>
+ <?php p($l->t('Contact your system administrator if this message persists or appeared unexpectedly.')) ?><br><br>
+ <?php p($l->t('Thank you for your patience.')); ?><br><br>
</li>
</ul>
diff --git a/lib/base.php b/lib/base.php
index 107ae059bb1..da4b3a47c75 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -80,6 +80,10 @@ class OC {
*/
public static $server = null;
+ /**
+ * @throws \RuntimeException when the 3rdparty directory is missing or
+ * the app path list is empty or contains an invalid path
+ */
public static function initPaths() {
// calculate the root directories
OC::$SERVERROOT = str_replace("\\", '/', substr(__DIR__, 0, -4));
@@ -155,10 +159,9 @@ class OC {
}
}
if (empty(OC::$THIRDPARTYROOT) || !file_exists(OC::$THIRDPARTYROOT)) {
- echo('3rdparty directory not found! Please put the ownCloud 3rdparty'
+ throw new \RuntimeException('3rdparty directory not found! Please put the ownCloud 3rdparty'
. ' folder in the ownCloud folder or the folder above.'
. ' You can also configure the location in the config.php file.');
- return;
}
// search the apps folder
@@ -182,12 +185,17 @@ class OC {
}
if (empty(OC::$APPSROOTS)) {
- throw new Exception('apps directory not found! Please put the ownCloud apps folder in the ownCloud folder'
+ throw new \RuntimeException('apps directory not found! Please put the ownCloud apps folder in the ownCloud folder'
. ' or the folder above. You can also configure the location in the config.php file.');
}
$paths = array();
foreach (OC::$APPSROOTS as $path) {
$paths[] = $path['path'];
+ if (!is_dir($path['path'])) {
+ throw new \RuntimeException(sprintf('App directory "%s" not found! Please put the ownCloud apps folder in the'
+ . ' ownCloud folder or the folder above. You can also configure the location in the'
+ . ' config.php file.', $path['path']));
+ }
}
// set the right include path
@@ -407,6 +415,7 @@ class OC {
}
// if session cant be started break with http 500 error
} catch (Exception $e) {
+ \OCP\Util::logException('base', $e);
//show the user a detailed error page
OC_Response::setStatus(OC_Response::STATUS_INTERNAL_SERVER_ERROR);
OC_Template::printExceptionErrorPage($e);
@@ -465,17 +474,20 @@ class OC {
self::$CLI = (php_sapi_name() == 'cli');
- self::initPaths();
-
- // setup 3rdparty autoloader
- $vendorAutoLoad = OC::$THIRDPARTYROOT . '/3rdparty/autoload.php';
- if (file_exists($vendorAutoLoad)) {
+ try {
+ self::initPaths();
+ // setup 3rdparty autoloader
+ $vendorAutoLoad = OC::$THIRDPARTYROOT . '/3rdparty/autoload.php';
+ if (!file_exists($vendorAutoLoad)) {
+ throw new \RuntimeException('Composer autoloader not found, unable to continue. Check the folder "3rdparty".');
+ }
require_once $vendorAutoLoad;
- } else {
+
+ } catch (\RuntimeException $e) {
OC_Response::setStatus(OC_Response::STATUS_SERVICE_UNAVAILABLE);
// we can't use the template error page here, because this needs the
// DI container which isn't available yet
- print('Composer autoloader not found, unable to continue. Check the folder "3rdparty".');
+ print($e->getMessage());
exit();
}
diff --git a/lib/l10n/bg_BG.js b/lib/l10n/bg_BG.js
index dc471f61f38..76b360b073b 100644
--- a/lib/l10n/bg_BG.js
+++ b/lib/l10n/bg_BG.js
@@ -35,8 +35,6 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["","преди %n часа"],
"_%n minute ago_::_%n minutes ago_" : ["","преди %n минути"],
"seconds ago" : "преди секунди",
- "Database Error" : "Грешка в базата данни",
- "Please contact your system administrator." : "Моля, свържи се с админстратора.",
"web services under your control" : "уеб услуги под твой контрол",
"App directory already exists" : "Папката на приложението вече съществува.",
"Can't create app folder. Please fix permissions. %s" : "Неуспешно създаване на папката за приложението. Моля, оправете разрешенията. %s",
@@ -73,7 +71,6 @@ OC.L10N.register(
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X не се подържа и %s няма да работи правилно на тази платформа. Използвайте го на свой собствен риск!",
"For the best results, please consider using a GNU/Linux server instead." : "За най-добри резултати, моля, помисли дали не бихте желали да използваште GNU/Linux сървър.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Моля, премахтене настройката за open_basedir от вашия php.ini или преминете към 64-битово PHP.",
- "Please install the cURL extension and restart your webserver." : "Моля, инсталирайте разширението cURL и рестартирайте вашия уеб сървър.",
"Set an admin username." : "Задай потребителско име за администратор.",
"Set an admin password." : "Задай парола за администратор.",
"Can't create or write into the data directory %s" : "Неуспешно създаване или записване в \"data\" папката %s",
diff --git a/lib/l10n/bg_BG.json b/lib/l10n/bg_BG.json
index 10e522dc835..10630dfce6a 100644
--- a/lib/l10n/bg_BG.json
+++ b/lib/l10n/bg_BG.json
@@ -33,8 +33,6 @@
"_%n hour ago_::_%n hours ago_" : ["","преди %n часа"],
"_%n minute ago_::_%n minutes ago_" : ["","преди %n минути"],
"seconds ago" : "преди секунди",
- "Database Error" : "Грешка в базата данни",
- "Please contact your system administrator." : "Моля, свържи се с админстратора.",
"web services under your control" : "уеб услуги под твой контрол",
"App directory already exists" : "Папката на приложението вече съществува.",
"Can't create app folder. Please fix permissions. %s" : "Неуспешно създаване на папката за приложението. Моля, оправете разрешенията. %s",
@@ -71,7 +69,6 @@
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X не се подържа и %s няма да работи правилно на тази платформа. Използвайте го на свой собствен риск!",
"For the best results, please consider using a GNU/Linux server instead." : "За най-добри резултати, моля, помисли дали не бихте желали да използваште GNU/Linux сървър.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Моля, премахтене настройката за open_basedir от вашия php.ini или преминете към 64-битово PHP.",
- "Please install the cURL extension and restart your webserver." : "Моля, инсталирайте разширението cURL и рестартирайте вашия уеб сървър.",
"Set an admin username." : "Задай потребителско име за администратор.",
"Set an admin password." : "Задай парола за администратор.",
"Can't create or write into the data directory %s" : "Неуспешно създаване или записване в \"data\" папката %s",
diff --git a/lib/l10n/bs.js b/lib/l10n/bs.js
index a6178ce6eb5..df14daeb935 100644
--- a/lib/l10n/bs.js
+++ b/lib/l10n/bs.js
@@ -16,7 +16,6 @@ OC.L10N.register(
"Authentication error" : "Grešna autentifikacije",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nije podržan i %s na ovoj platformi neće raditi kako treba. Korištenje na vlastiti rizik!",
"For the best results, please consider using a GNU/Linux server instead." : "Umjesto toga, za najbolje rezultate, molimo razmislite o mogućnosti korištenje GNU/Linux servera.",
- "Please install the cURL extension and restart your webserver." : "Molim instalirajte cURL proširenje i ponovo pokrenite svoj server.",
"A valid username must be provided" : "Nužno je navesti valjano korisničko ime",
"A valid password must be provided" : "Nužno je navesti valjanu lozinku",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je očigledno postavljen da se skine inline doc blokova. To će nekoliko osnovnih aplikacija učiniti nedostupnim.",
diff --git a/lib/l10n/bs.json b/lib/l10n/bs.json
index 4e192401f91..fd003f6fd1c 100644
--- a/lib/l10n/bs.json
+++ b/lib/l10n/bs.json
@@ -14,7 +14,6 @@
"Authentication error" : "Grešna autentifikacije",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nije podržan i %s na ovoj platformi neće raditi kako treba. Korištenje na vlastiti rizik!",
"For the best results, please consider using a GNU/Linux server instead." : "Umjesto toga, za najbolje rezultate, molimo razmislite o mogućnosti korištenje GNU/Linux servera.",
- "Please install the cURL extension and restart your webserver." : "Molim instalirajte cURL proširenje i ponovo pokrenite svoj server.",
"A valid username must be provided" : "Nužno je navesti valjano korisničko ime",
"A valid password must be provided" : "Nužno je navesti valjanu lozinku",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je očigledno postavljen da se skine inline doc blokova. To će nekoliko osnovnih aplikacija učiniti nedostupnim.",
diff --git a/lib/l10n/cs_CZ.js b/lib/l10n/cs_CZ.js
index b9f78a45209..6702c2ff05a 100644
--- a/lib/l10n/cs_CZ.js
+++ b/lib/l10n/cs_CZ.js
@@ -37,14 +37,13 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["před %n hodinou","před %n hodinami","před %n hodinami"],
"_%n minute ago_::_%n minutes ago_" : ["před %n minutou","před %n minutami","před %n minutami"],
"seconds ago" : "před pár sekundami",
- "Database Error" : "Chyba databáze",
- "Please contact your system administrator." : "Kontaktujte prosím svého správce systému.",
"web services under your control" : "webové služby pod Vaší kontrolou",
"Empty filename is not allowed" : "Prázdné jméno souboru není povoleno",
"Dot files are not allowed" : "Jména souborů začínající tečkou nejsou povolena",
"4-byte characters are not supported in file names" : "4-bytové znaky nejsou podporovány ve jménech souborů",
"File name is a reserved word" : "Jméno souboru je rezervované slovo",
"File name contains at least one invalid character" : "Jméno souboru obsahuje nejméně jeden neplatný znak",
+ "File name is too long" : "Jméno souboru je moc dlouhé",
"App directory already exists" : "Adresář aplikace již existuje",
"Can't create app folder. Please fix permissions. %s" : "Nelze vytvořit složku aplikace. Opravte práva souborů. %s",
"No source specified when installing app" : "Nebyl zadán zdroj při instalaci aplikace",
@@ -81,8 +80,6 @@ OC.L10N.register(
"For the best results, please consider using a GNU/Linux server instead." : "Místo toho zvažte pro nejlepší funkčnost použití GNU/Linux serveru.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Vypadá to, že tato %s instance běží v 32-bitovém PHP prostředí a byl nakonfigurován open_basedir v php.ini. Toto povede k problémům se soubory většími než 4 GB a není doporučováno.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Odstraňte prosím open_basedir nastavení ve svém php.ini nebo přejděte na 64-bitové PHP.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Vypadá to, že tato %s instance běží ve 32-bitovém PHP prostředí a není nainstalováno cURL. Toto povede k problémům se soubory většími než 4 GB a zásadně není doporučováno.",
- "Please install the cURL extension and restart your webserver." : "Nainstalujte prosím cURL rozšíření a restartujte webový server.",
"Set an admin username." : "Zadejte uživatelské jméno správce.",
"Set an admin password." : "Zadejte heslo správce.",
"Can't create or write into the data directory %s" : "Nelze vytvořit nebo zapisovat do datového adresáře %s",
diff --git a/lib/l10n/cs_CZ.json b/lib/l10n/cs_CZ.json
index ab828ffe76e..a629c66e99b 100644
--- a/lib/l10n/cs_CZ.json
+++ b/lib/l10n/cs_CZ.json
@@ -35,14 +35,13 @@
"_%n hour ago_::_%n hours ago_" : ["před %n hodinou","před %n hodinami","před %n hodinami"],
"_%n minute ago_::_%n minutes ago_" : ["před %n minutou","před %n minutami","před %n minutami"],
"seconds ago" : "před pár sekundami",
- "Database Error" : "Chyba databáze",
- "Please contact your system administrator." : "Kontaktujte prosím svého správce systému.",
"web services under your control" : "webové služby pod Vaší kontrolou",
"Empty filename is not allowed" : "Prázdné jméno souboru není povoleno",
"Dot files are not allowed" : "Jména souborů začínající tečkou nejsou povolena",
"4-byte characters are not supported in file names" : "4-bytové znaky nejsou podporovány ve jménech souborů",
"File name is a reserved word" : "Jméno souboru je rezervované slovo",
"File name contains at least one invalid character" : "Jméno souboru obsahuje nejméně jeden neplatný znak",
+ "File name is too long" : "Jméno souboru je moc dlouhé",
"App directory already exists" : "Adresář aplikace již existuje",
"Can't create app folder. Please fix permissions. %s" : "Nelze vytvořit složku aplikace. Opravte práva souborů. %s",
"No source specified when installing app" : "Nebyl zadán zdroj při instalaci aplikace",
@@ -79,8 +78,6 @@
"For the best results, please consider using a GNU/Linux server instead." : "Místo toho zvažte pro nejlepší funkčnost použití GNU/Linux serveru.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Vypadá to, že tato %s instance běží v 32-bitovém PHP prostředí a byl nakonfigurován open_basedir v php.ini. Toto povede k problémům se soubory většími než 4 GB a není doporučováno.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Odstraňte prosím open_basedir nastavení ve svém php.ini nebo přejděte na 64-bitové PHP.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Vypadá to, že tato %s instance běží ve 32-bitovém PHP prostředí a není nainstalováno cURL. Toto povede k problémům se soubory většími než 4 GB a zásadně není doporučováno.",
- "Please install the cURL extension and restart your webserver." : "Nainstalujte prosím cURL rozšíření a restartujte webový server.",
"Set an admin username." : "Zadejte uživatelské jméno správce.",
"Set an admin password." : "Zadejte heslo správce.",
"Can't create or write into the data directory %s" : "Nelze vytvořit nebo zapisovat do datového adresáře %s",
diff --git a/lib/l10n/da.js b/lib/l10n/da.js
index 8289558cdc1..d7572bcec0d 100644
--- a/lib/l10n/da.js
+++ b/lib/l10n/da.js
@@ -37,8 +37,6 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n time siden","%n timer siden"],
"_%n minute ago_::_%n minutes ago_" : ["%n minut siden","%n minutter siden"],
"seconds ago" : "sekunder siden",
- "Database Error" : "Databasefejl",
- "Please contact your system administrator." : "Kontakt venligst din systemadministrator.",
"web services under your control" : "Webtjenester under din kontrol",
"Empty filename is not allowed" : "Tomme filnavne er ikke tilladt",
"Dot files are not allowed" : "Filer med punktummer er ikke tilladt",
@@ -80,8 +78,6 @@ OC.L10N.register(
"For the best results, please consider using a GNU/Linux server instead." : "For de bedste resultater, overvej venligst at bruge en GNU/Linux-server i stedet.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Det ser ud til, at denne %s-instans kører på et 32-bit PHP-miljø, samt at open_basedir er blevet konfigureret gennem php.ini. Dette vil føre til problemer med filer som er større end 4GB, og frarådes kraftigt.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Fjern venligst indstillingen for open_basedir inde i din php.ini eller skift til 64-bit PHP.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Det ser ud til, at denne %s-instans kører på et 32-bit PHP-miljø, samt at cURL ikke er installeret. Dette vil føre til problemer med filer som er større end 4GB, og frarådes kraftigt.",
- "Please install the cURL extension and restart your webserver." : "Installér venligst cURL-udvidelsen og genstart din webserver.",
"Set an admin username." : "Angiv et admin brugernavn.",
"Set an admin password." : "Angiv et admin kodeord.",
"Can't create or write into the data directory %s" : "Kan ikke oprette eller skrive ind i datamappen %s",
diff --git a/lib/l10n/da.json b/lib/l10n/da.json
index 8d5b77cb60f..9bd03e3e92b 100644
--- a/lib/l10n/da.json
+++ b/lib/l10n/da.json
@@ -35,8 +35,6 @@
"_%n hour ago_::_%n hours ago_" : ["%n time siden","%n timer siden"],
"_%n minute ago_::_%n minutes ago_" : ["%n minut siden","%n minutter siden"],
"seconds ago" : "sekunder siden",
- "Database Error" : "Databasefejl",
- "Please contact your system administrator." : "Kontakt venligst din systemadministrator.",
"web services under your control" : "Webtjenester under din kontrol",
"Empty filename is not allowed" : "Tomme filnavne er ikke tilladt",
"Dot files are not allowed" : "Filer med punktummer er ikke tilladt",
@@ -78,8 +76,6 @@
"For the best results, please consider using a GNU/Linux server instead." : "For de bedste resultater, overvej venligst at bruge en GNU/Linux-server i stedet.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Det ser ud til, at denne %s-instans kører på et 32-bit PHP-miljø, samt at open_basedir er blevet konfigureret gennem php.ini. Dette vil føre til problemer med filer som er større end 4GB, og frarådes kraftigt.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Fjern venligst indstillingen for open_basedir inde i din php.ini eller skift til 64-bit PHP.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Det ser ud til, at denne %s-instans kører på et 32-bit PHP-miljø, samt at cURL ikke er installeret. Dette vil føre til problemer med filer som er større end 4GB, og frarådes kraftigt.",
- "Please install the cURL extension and restart your webserver." : "Installér venligst cURL-udvidelsen og genstart din webserver.",
"Set an admin username." : "Angiv et admin brugernavn.",
"Set an admin password." : "Angiv et admin kodeord.",
"Can't create or write into the data directory %s" : "Kan ikke oprette eller skrive ind i datamappen %s",
diff --git a/lib/l10n/de.js b/lib/l10n/de.js
index 50471723ba5..fc71d1fb6d5 100644
--- a/lib/l10n/de.js
+++ b/lib/l10n/de.js
@@ -37,14 +37,13 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["Vor %n Stunde","Vor %n Stunden"],
"_%n minute ago_::_%n minutes ago_" : ["Vor %n Minute","Vor %n Minuten"],
"seconds ago" : "Gerade eben",
- "Database Error" : "Datenbankfehler",
- "Please contact your system administrator." : "Bitte kontaktiere Deinen Systemadministrator.",
"web services under your control" : "Web-Dienste unter Deiner Kontrolle",
"Empty filename is not allowed" : "Ein leerer Dateiname ist nicht erlaubt",
"Dot files are not allowed" : "Dateinamen mit einem Punkt am Anfang sind nicht erlaubt",
"4-byte characters are not supported in file names" : "4-Byte Zeichen sind in Dateinamen nicht erlaubt",
"File name is a reserved word" : "Der Dateiname ist ein reserviertes Wort",
"File name contains at least one invalid character" : "Der Dateiname enthält mindestens ein ungültiges Zeichen",
+ "File name is too long" : "Dateiname ist zu lang",
"App directory already exists" : "Das Applikationsverzeichnis existiert bereits",
"Can't create app folder. Please fix permissions. %s" : "Es kann kein Applikationsordner erstellt werden. Bitte passe die Berechtigungen an. %s",
"No source specified when installing app" : "Für die Installation der Applikation wurde keine Quelle angegeben",
@@ -81,8 +80,6 @@ OC.L10N.register(
"For the best results, please consider using a GNU/Linux server instead." : "Zur Gewährleistung eines optimalen Betriebs sollte stattdessen ein GNU/Linux-Server verwendet werden.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Es scheint, dass diese %s-Instanz unter einer 32-Bit-PHP-Umgebung läuft und open_basedir in der Datei php.ini konfiguriert worden ist. Von einem solchen Betrieb wird dringend abgeraten, weil es dabei zu Problemen mit Dateien kommt, deren Größe 4 GB übersteigt.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Bitte entferne die open_basedir-Einstellung in Deiner php.ini oder wechsele zu 64-Bit-PHP.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Es scheint, dass diese %s-Instanz unter einer 32-Bit-PHP-Umgebung läuft und cURL nicht installiert ist. Von einem solchen Betrieb wird dringend abgeraten, weil es dabei zu Problemen mit Dateien kommt, deren Größe 4 GB übersteigt.",
- "Please install the cURL extension and restart your webserver." : "Bitte installiere die cURL-Erweiterung und starte Deinen Webserver neu.",
"Set an admin username." : "Einen Administrator-Benutzernamen setzen.",
"Set an admin password." : "Ein Administrator-Passwort setzen.",
"Can't create or write into the data directory %s" : "Das Datenverzeichnis %s kann nicht erstellt oder es kann darin nicht geschrieben werden.",
diff --git a/lib/l10n/de.json b/lib/l10n/de.json
index a121ab46401..f10d3578fb3 100644
--- a/lib/l10n/de.json
+++ b/lib/l10n/de.json
@@ -35,14 +35,13 @@
"_%n hour ago_::_%n hours ago_" : ["Vor %n Stunde","Vor %n Stunden"],
"_%n minute ago_::_%n minutes ago_" : ["Vor %n Minute","Vor %n Minuten"],
"seconds ago" : "Gerade eben",
- "Database Error" : "Datenbankfehler",
- "Please contact your system administrator." : "Bitte kontaktiere Deinen Systemadministrator.",
"web services under your control" : "Web-Dienste unter Deiner Kontrolle",
"Empty filename is not allowed" : "Ein leerer Dateiname ist nicht erlaubt",
"Dot files are not allowed" : "Dateinamen mit einem Punkt am Anfang sind nicht erlaubt",
"4-byte characters are not supported in file names" : "4-Byte Zeichen sind in Dateinamen nicht erlaubt",
"File name is a reserved word" : "Der Dateiname ist ein reserviertes Wort",
"File name contains at least one invalid character" : "Der Dateiname enthält mindestens ein ungültiges Zeichen",
+ "File name is too long" : "Dateiname ist zu lang",
"App directory already exists" : "Das Applikationsverzeichnis existiert bereits",
"Can't create app folder. Please fix permissions. %s" : "Es kann kein Applikationsordner erstellt werden. Bitte passe die Berechtigungen an. %s",
"No source specified when installing app" : "Für die Installation der Applikation wurde keine Quelle angegeben",
@@ -79,8 +78,6 @@
"For the best results, please consider using a GNU/Linux server instead." : "Zur Gewährleistung eines optimalen Betriebs sollte stattdessen ein GNU/Linux-Server verwendet werden.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Es scheint, dass diese %s-Instanz unter einer 32-Bit-PHP-Umgebung läuft und open_basedir in der Datei php.ini konfiguriert worden ist. Von einem solchen Betrieb wird dringend abgeraten, weil es dabei zu Problemen mit Dateien kommt, deren Größe 4 GB übersteigt.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Bitte entferne die open_basedir-Einstellung in Deiner php.ini oder wechsele zu 64-Bit-PHP.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Es scheint, dass diese %s-Instanz unter einer 32-Bit-PHP-Umgebung läuft und cURL nicht installiert ist. Von einem solchen Betrieb wird dringend abgeraten, weil es dabei zu Problemen mit Dateien kommt, deren Größe 4 GB übersteigt.",
- "Please install the cURL extension and restart your webserver." : "Bitte installiere die cURL-Erweiterung und starte Deinen Webserver neu.",
"Set an admin username." : "Einen Administrator-Benutzernamen setzen.",
"Set an admin password." : "Ein Administrator-Passwort setzen.",
"Can't create or write into the data directory %s" : "Das Datenverzeichnis %s kann nicht erstellt oder es kann darin nicht geschrieben werden.",
diff --git a/lib/l10n/de_DE.js b/lib/l10n/de_DE.js
index 687c4c07c22..823fde2d789 100644
--- a/lib/l10n/de_DE.js
+++ b/lib/l10n/de_DE.js
@@ -37,14 +37,13 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["Vor %n Stunde","Vor %n Stunden"],
"_%n minute ago_::_%n minutes ago_" : ["Vor %n Minute","Vor %n Minuten"],
"seconds ago" : "Gerade eben",
- "Database Error" : "Datenbankfehler",
- "Please contact your system administrator." : "Bitte kontaktieren Sie Ihren Systemadministrator.",
"web services under your control" : "Web-Dienste unter Ihrer Kontrolle",
"Empty filename is not allowed" : "Ein leerer Dateiname ist nicht erlaubt",
"Dot files are not allowed" : "Dateinamen mit einem Punkt am Anfang sind nicht erlaubt",
"4-byte characters are not supported in file names" : "4-Byte-Zeichen werden in Dateinamen nicht unterstützt",
"File name is a reserved word" : "Der Dateiname ist ein reserviertes Wort",
"File name contains at least one invalid character" : "Der Dateiname enthält mindestens ein ungültiges Zeichen",
+ "File name is too long" : "Dateiname ist zu lang",
"App directory already exists" : "Der Ordner für die App ist bereits vorhanden.",
"Can't create app folder. Please fix permissions. %s" : "Der Ordner für die App konnte nicht angelegt werden. Bitte überprüfen Sie die Ordner- und Dateirechte und passen Sie diese entsprechend an. %s",
"No source specified when installing app" : "Für die Installation der Applikation wurde keine Quelle angegeben",
@@ -81,8 +80,6 @@ OC.L10N.register(
"For the best results, please consider using a GNU/Linux server instead." : "Zur Gewährleistung eines optimalen Betriebs sollte stattdessen ein GNU/Linux-Server verwendet werden.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Es scheint, dass diese %s-Instanz unter einer 32-Bit-PHP-Umgebung läuft und open_basedir in der Datei php.ini konfiguriert worden ist. Von einem solchen Betrieb wird dringend abgeraten, weil es dabei zu Problemen mit Dateien kommt, deren Größe 4 GB übersteigt.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Bitte entfernen Sie die open_basedir-Einstellung in Ihrer php.ini oder wechseln Sie zu 64-Bit-PHP.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Es scheint, dass diese %s-Instanz unter einer 32-Bit-PHP-Umgebung läuft und cURL nicht installiert ist. Von einem solchen Betrieb wird dringend abgeraten, weil es dabei zu Problemen mit Dateien kommt, deren Größe 4 GB übersteigt.",
- "Please install the cURL extension and restart your webserver." : "Bitte installieren Sie die cURL-Erweiterung und starten Sie Ihren Webserver neu.",
"Set an admin username." : "Einen Administrator-Benutzernamen setzen.",
"Set an admin password." : "Setze Administrator Passwort",
"Can't create or write into the data directory %s" : "Das Datenverzeichnis %s kann nicht erstellt oder es kann darin nicht geschrieben werden.",
diff --git a/lib/l10n/de_DE.json b/lib/l10n/de_DE.json
index f1e0f2bac1f..42b6d72303e 100644
--- a/lib/l10n/de_DE.json
+++ b/lib/l10n/de_DE.json
@@ -35,14 +35,13 @@
"_%n hour ago_::_%n hours ago_" : ["Vor %n Stunde","Vor %n Stunden"],
"_%n minute ago_::_%n minutes ago_" : ["Vor %n Minute","Vor %n Minuten"],
"seconds ago" : "Gerade eben",
- "Database Error" : "Datenbankfehler",
- "Please contact your system administrator." : "Bitte kontaktieren Sie Ihren Systemadministrator.",
"web services under your control" : "Web-Dienste unter Ihrer Kontrolle",
"Empty filename is not allowed" : "Ein leerer Dateiname ist nicht erlaubt",
"Dot files are not allowed" : "Dateinamen mit einem Punkt am Anfang sind nicht erlaubt",
"4-byte characters are not supported in file names" : "4-Byte-Zeichen werden in Dateinamen nicht unterstützt",
"File name is a reserved word" : "Der Dateiname ist ein reserviertes Wort",
"File name contains at least one invalid character" : "Der Dateiname enthält mindestens ein ungültiges Zeichen",
+ "File name is too long" : "Dateiname ist zu lang",
"App directory already exists" : "Der Ordner für die App ist bereits vorhanden.",
"Can't create app folder. Please fix permissions. %s" : "Der Ordner für die App konnte nicht angelegt werden. Bitte überprüfen Sie die Ordner- und Dateirechte und passen Sie diese entsprechend an. %s",
"No source specified when installing app" : "Für die Installation der Applikation wurde keine Quelle angegeben",
@@ -79,8 +78,6 @@
"For the best results, please consider using a GNU/Linux server instead." : "Zur Gewährleistung eines optimalen Betriebs sollte stattdessen ein GNU/Linux-Server verwendet werden.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Es scheint, dass diese %s-Instanz unter einer 32-Bit-PHP-Umgebung läuft und open_basedir in der Datei php.ini konfiguriert worden ist. Von einem solchen Betrieb wird dringend abgeraten, weil es dabei zu Problemen mit Dateien kommt, deren Größe 4 GB übersteigt.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Bitte entfernen Sie die open_basedir-Einstellung in Ihrer php.ini oder wechseln Sie zu 64-Bit-PHP.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Es scheint, dass diese %s-Instanz unter einer 32-Bit-PHP-Umgebung läuft und cURL nicht installiert ist. Von einem solchen Betrieb wird dringend abgeraten, weil es dabei zu Problemen mit Dateien kommt, deren Größe 4 GB übersteigt.",
- "Please install the cURL extension and restart your webserver." : "Bitte installieren Sie die cURL-Erweiterung und starten Sie Ihren Webserver neu.",
"Set an admin username." : "Einen Administrator-Benutzernamen setzen.",
"Set an admin password." : "Setze Administrator Passwort",
"Can't create or write into the data directory %s" : "Das Datenverzeichnis %s kann nicht erstellt oder es kann darin nicht geschrieben werden.",
diff --git a/lib/l10n/el.js b/lib/l10n/el.js
index af273f0889e..ff7a38d94a9 100644
--- a/lib/l10n/el.js
+++ b/lib/l10n/el.js
@@ -30,8 +30,6 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["","%n ώρες πριν"],
"_%n minute ago_::_%n minutes ago_" : ["","%n λεπτά πριν"],
"seconds ago" : "δευτερόλεπτα πριν",
- "Database Error" : "Σφάλμα βάσης δεδομένων",
- "Please contact your system administrator." : "Παρακαλώ επικοινωνήστε με τον διαχειριστή συστήματος.",
"web services under your control" : "υπηρεσίες δικτύου υπό τον έλεγχό σας",
"Empty filename is not allowed" : "Δεν επιτρέπεται άδειο όνομα αρχείου",
"App directory already exists" : "Ο κατάλογος εφαρμογών υπάρχει ήδη",
@@ -70,8 +68,6 @@ OC.L10N.register(
"For the best results, please consider using a GNU/Linux server instead." : "Για καλύτερα αποτελέσματα, παρακαλούμε εξετάστε την μετατροπή σε έναν διακομιστή GNU/Linux.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Φαίνεται ότι η εγκατάσταση %s εκτελείται σε περιβάλλον 32-bit PHP και η επιλογη open_basedir έχει ρυθμιστεί στο αρχείο php.ini. Αυτό θα οδηγήσει σε προβλήματα με αρχεία πάνω από 4 GB και δεν συνίσταται.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Παρακαλώ αφαιρέστε την ρύθμιση open_basedir μέσα στο αρχείο php.ini ή αλλάξτε σε 64-bit PHP.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Φαίνεται ότι η εγκατάσταση %s εκτελείται σε περιβάλλον 32-bit PHP και η cURL δεν είναι εγκατεστημένη. Αυτό θα οδηγήσει σε προβλήματα με αρχεία πάνω από 4 GB και δεν συνίσταται.",
- "Please install the cURL extension and restart your webserver." : "Παρακαλώ εγκαταστήστε το πρόσθετο cURL και επανεκκινήστε τον διακομιστή σας.",
"Set an admin username." : "Εισάγετε όνομα χρήστη διαχειριστή.",
"Set an admin password." : "Εισάγετε συνθηματικό διαχειριστή.",
"Can't create or write into the data directory %s" : "Αδύνατη η δημιουργία ή συγγραφή στον κατάλογο δεδομένων %s",
diff --git a/lib/l10n/el.json b/lib/l10n/el.json
index b713395c63f..e1d19d812ab 100644
--- a/lib/l10n/el.json
+++ b/lib/l10n/el.json
@@ -28,8 +28,6 @@
"_%n hour ago_::_%n hours ago_" : ["","%n ώρες πριν"],
"_%n minute ago_::_%n minutes ago_" : ["","%n λεπτά πριν"],
"seconds ago" : "δευτερόλεπτα πριν",
- "Database Error" : "Σφάλμα βάσης δεδομένων",
- "Please contact your system administrator." : "Παρακαλώ επικοινωνήστε με τον διαχειριστή συστήματος.",
"web services under your control" : "υπηρεσίες δικτύου υπό τον έλεγχό σας",
"Empty filename is not allowed" : "Δεν επιτρέπεται άδειο όνομα αρχείου",
"App directory already exists" : "Ο κατάλογος εφαρμογών υπάρχει ήδη",
@@ -68,8 +66,6 @@
"For the best results, please consider using a GNU/Linux server instead." : "Για καλύτερα αποτελέσματα, παρακαλούμε εξετάστε την μετατροπή σε έναν διακομιστή GNU/Linux.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Φαίνεται ότι η εγκατάσταση %s εκτελείται σε περιβάλλον 32-bit PHP και η επιλογη open_basedir έχει ρυθμιστεί στο αρχείο php.ini. Αυτό θα οδηγήσει σε προβλήματα με αρχεία πάνω από 4 GB και δεν συνίσταται.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Παρακαλώ αφαιρέστε την ρύθμιση open_basedir μέσα στο αρχείο php.ini ή αλλάξτε σε 64-bit PHP.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Φαίνεται ότι η εγκατάσταση %s εκτελείται σε περιβάλλον 32-bit PHP και η cURL δεν είναι εγκατεστημένη. Αυτό θα οδηγήσει σε προβλήματα με αρχεία πάνω από 4 GB και δεν συνίσταται.",
- "Please install the cURL extension and restart your webserver." : "Παρακαλώ εγκαταστήστε το πρόσθετο cURL και επανεκκινήστε τον διακομιστή σας.",
"Set an admin username." : "Εισάγετε όνομα χρήστη διαχειριστή.",
"Set an admin password." : "Εισάγετε συνθηματικό διαχειριστή.",
"Can't create or write into the data directory %s" : "Αδύνατη η δημιουργία ή συγγραφή στον κατάλογο δεδομένων %s",
diff --git a/lib/l10n/en_GB.js b/lib/l10n/en_GB.js
index a584e6fd9a4..adb0a0524a3 100644
--- a/lib/l10n/en_GB.js
+++ b/lib/l10n/en_GB.js
@@ -37,8 +37,6 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n hour ago","%n hours ago"],
"_%n minute ago_::_%n minutes ago_" : ["%n minute ago","%n minutes ago"],
"seconds ago" : "seconds ago",
- "Database Error" : "Database Error",
- "Please contact your system administrator." : "Please contact your system administrator.",
"web services under your control" : "web services under your control",
"Empty filename is not allowed" : "Empty filename is not allowed",
"Dot files are not allowed" : "Dot files are not allowed",
@@ -80,8 +78,6 @@ OC.L10N.register(
"For the best results, please consider using a GNU/Linux server instead." : "For the best results, please consider using a GNU/Linux server instead.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir setting has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged.",
- "Please install the cURL extension and restart your webserver." : "Please install the cURL extension and restart your webserver.",
"Set an admin username." : "Set an admin username.",
"Set an admin password." : "Set an admin password.",
"Can't create or write into the data directory %s" : "Can't create or write into the data directory %s",
diff --git a/lib/l10n/en_GB.json b/lib/l10n/en_GB.json
index 519ec513376..835188e88ef 100644
--- a/lib/l10n/en_GB.json
+++ b/lib/l10n/en_GB.json
@@ -35,8 +35,6 @@
"_%n hour ago_::_%n hours ago_" : ["%n hour ago","%n hours ago"],
"_%n minute ago_::_%n minutes ago_" : ["%n minute ago","%n minutes ago"],
"seconds ago" : "seconds ago",
- "Database Error" : "Database Error",
- "Please contact your system administrator." : "Please contact your system administrator.",
"web services under your control" : "web services under your control",
"Empty filename is not allowed" : "Empty filename is not allowed",
"Dot files are not allowed" : "Dot files are not allowed",
@@ -78,8 +76,6 @@
"For the best results, please consider using a GNU/Linux server instead." : "For the best results, please consider using a GNU/Linux server instead.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir setting has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged.",
- "Please install the cURL extension and restart your webserver." : "Please install the cURL extension and restart your webserver.",
"Set an admin username." : "Set an admin username.",
"Set an admin password." : "Set an admin password.",
"Can't create or write into the data directory %s" : "Can't create or write into the data directory %s",
diff --git a/lib/l10n/es.js b/lib/l10n/es.js
index b407a46a1a0..a31f215d094 100644
--- a/lib/l10n/es.js
+++ b/lib/l10n/es.js
@@ -37,14 +37,13 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"],
"_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"],
"seconds ago" : "hace segundos",
- "Database Error" : "Error en la base de datos",
- "Please contact your system administrator." : "Por favor, contacte al administrador del sistema.",
"web services under your control" : "Servicios web bajo su control",
"Empty filename is not allowed" : "No se puede dejar el nombre en blanco.",
"Dot files are not allowed" : "Los archivos Dot no están permitidos",
"4-byte characters are not supported in file names" : " No están permitidos caractéres de 4-bytes",
"File name is a reserved word" : "El nombre de archivo es una palabra reservada",
"File name contains at least one invalid character" : "El nombre del archivo contiene al menos un carácter inválido",
+ "File name is too long" : "El nombre del archivo es demasiado largo",
"App directory already exists" : "El directorio de la aplicación ya existe",
"Can't create app folder. Please fix permissions. %s" : "No se puede crear la carpeta de la aplicación. Corrija los permisos. %s",
"No source specified when installing app" : "No se ha especificado origen cuando se ha instalado la aplicación",
@@ -81,8 +80,6 @@ OC.L10N.register(
"For the best results, please consider using a GNU/Linux server instead." : "Para resultados óptimos, considere utilizar un servidor GNU/Linux.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Parece que esta instancia %s está funcionando en un entorno PHP de 32-bits y el open_basedir se ha configurado en php.ini. Esto acarreará problemas con arhivos de tamaño superior a 4GB y resulta totalmente desaconsejado.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Por favor, quite el ajuste de open_basedir —dentro de su php.ini— o pásese a PHP de 64 bits.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Parece que esta instalación %s está funcionando en un entorno PHP de 32-bits y cURL no está instalado. Esto acarreará problemas con arhivos superiores a 4GB y está totalmente desaconsejado.",
- "Please install the cURL extension and restart your webserver." : "Por favor, instale la extensión cURL y reinicie el servidor web.",
"Set an admin username." : "Configurar un nombre de usuario del administrador",
"Set an admin password." : "Configurar la contraseña del administrador.",
"Can't create or write into the data directory %s" : "No es posible crear o escribir en el directorio de datos %s",
diff --git a/lib/l10n/es.json b/lib/l10n/es.json
index 336c79ddd96..52f7cbfd5e5 100644
--- a/lib/l10n/es.json
+++ b/lib/l10n/es.json
@@ -35,14 +35,13 @@
"_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"],
"_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"],
"seconds ago" : "hace segundos",
- "Database Error" : "Error en la base de datos",
- "Please contact your system administrator." : "Por favor, contacte al administrador del sistema.",
"web services under your control" : "Servicios web bajo su control",
"Empty filename is not allowed" : "No se puede dejar el nombre en blanco.",
"Dot files are not allowed" : "Los archivos Dot no están permitidos",
"4-byte characters are not supported in file names" : " No están permitidos caractéres de 4-bytes",
"File name is a reserved word" : "El nombre de archivo es una palabra reservada",
"File name contains at least one invalid character" : "El nombre del archivo contiene al menos un carácter inválido",
+ "File name is too long" : "El nombre del archivo es demasiado largo",
"App directory already exists" : "El directorio de la aplicación ya existe",
"Can't create app folder. Please fix permissions. %s" : "No se puede crear la carpeta de la aplicación. Corrija los permisos. %s",
"No source specified when installing app" : "No se ha especificado origen cuando se ha instalado la aplicación",
@@ -79,8 +78,6 @@
"For the best results, please consider using a GNU/Linux server instead." : "Para resultados óptimos, considere utilizar un servidor GNU/Linux.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Parece que esta instancia %s está funcionando en un entorno PHP de 32-bits y el open_basedir se ha configurado en php.ini. Esto acarreará problemas con arhivos de tamaño superior a 4GB y resulta totalmente desaconsejado.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Por favor, quite el ajuste de open_basedir —dentro de su php.ini— o pásese a PHP de 64 bits.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Parece que esta instalación %s está funcionando en un entorno PHP de 32-bits y cURL no está instalado. Esto acarreará problemas con arhivos superiores a 4GB y está totalmente desaconsejado.",
- "Please install the cURL extension and restart your webserver." : "Por favor, instale la extensión cURL y reinicie el servidor web.",
"Set an admin username." : "Configurar un nombre de usuario del administrador",
"Set an admin password." : "Configurar la contraseña del administrador.",
"Can't create or write into the data directory %s" : "No es posible crear o escribir en el directorio de datos %s",
diff --git a/lib/l10n/eu.js b/lib/l10n/eu.js
index 5c8d093388c..e1b5cdc67d0 100644
--- a/lib/l10n/eu.js
+++ b/lib/l10n/eu.js
@@ -35,8 +35,6 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["orain dela ordu %n","orain dela %n ordu"],
"_%n minute ago_::_%n minutes ago_" : ["orain dela minutu %n","orain dela %n minutu"],
"seconds ago" : "segundu",
- "Database Error" : "Datu basearen errorea",
- "Please contact your system administrator." : "Mesedez jarri harremetan zure sistemaren kudeatzailearekin.",
"web services under your control" : "web zerbitzuak zure kontrolpean",
"App directory already exists" : "Aplikazioaren karpeta dagoeneko existitzen da",
"Can't create app folder. Please fix permissions. %s" : "Ezin izan da aplikazioaren karpeta sortu. Mesdez konpondu baimenak. %s",
@@ -73,7 +71,6 @@ OC.L10N.register(
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X-ek ez du sostengurik eta %s gaizki ibili daiteke plataforma honetan. Erabiltzekotan, zure ardurapean.",
"For the best results, please consider using a GNU/Linux server instead." : "Emaitza hobeak izateko, mesedez gogoan hartu GNU/Linux zerbitzari bat erabiltzea.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Mesedez ezabatu open_basedir ezarpena zure php.ini-tik edo aldatu 64-biteko PHPra.",
- "Please install the cURL extension and restart your webserver." : "Mesedez instalatu cURL extensioa eta berrabiarazi zure web zerbitzaria.",
"Set an admin username." : "Ezarri administraziorako erabiltzaile izena.",
"Set an admin password." : "Ezarri administraziorako pasahitza.",
"Can't create or write into the data directory %s" : "Ezin da %s datu karpeta sortu edo bertan idatzi ",
diff --git a/lib/l10n/eu.json b/lib/l10n/eu.json
index 1e8590526d8..229b673f73b 100644
--- a/lib/l10n/eu.json
+++ b/lib/l10n/eu.json
@@ -33,8 +33,6 @@
"_%n hour ago_::_%n hours ago_" : ["orain dela ordu %n","orain dela %n ordu"],
"_%n minute ago_::_%n minutes ago_" : ["orain dela minutu %n","orain dela %n minutu"],
"seconds ago" : "segundu",
- "Database Error" : "Datu basearen errorea",
- "Please contact your system administrator." : "Mesedez jarri harremetan zure sistemaren kudeatzailearekin.",
"web services under your control" : "web zerbitzuak zure kontrolpean",
"App directory already exists" : "Aplikazioaren karpeta dagoeneko existitzen da",
"Can't create app folder. Please fix permissions. %s" : "Ezin izan da aplikazioaren karpeta sortu. Mesdez konpondu baimenak. %s",
@@ -71,7 +69,6 @@
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X-ek ez du sostengurik eta %s gaizki ibili daiteke plataforma honetan. Erabiltzekotan, zure ardurapean.",
"For the best results, please consider using a GNU/Linux server instead." : "Emaitza hobeak izateko, mesedez gogoan hartu GNU/Linux zerbitzari bat erabiltzea.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Mesedez ezabatu open_basedir ezarpena zure php.ini-tik edo aldatu 64-biteko PHPra.",
- "Please install the cURL extension and restart your webserver." : "Mesedez instalatu cURL extensioa eta berrabiarazi zure web zerbitzaria.",
"Set an admin username." : "Ezarri administraziorako erabiltzaile izena.",
"Set an admin password." : "Ezarri administraziorako pasahitza.",
"Can't create or write into the data directory %s" : "Ezin da %s datu karpeta sortu edo bertan idatzi ",
diff --git a/lib/l10n/fi_FI.js b/lib/l10n/fi_FI.js
index fec330713a6..9f688ba8075 100644
--- a/lib/l10n/fi_FI.js
+++ b/lib/l10n/fi_FI.js
@@ -36,12 +36,11 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n tunti sitten","%n tuntia sitten"],
"_%n minute ago_::_%n minutes ago_" : ["%n minuutti sitten","%n minuuttia sitten"],
"seconds ago" : "sekuntia sitten",
- "Database Error" : "Tietokantavirhe",
- "Please contact your system administrator." : "Ole yhteydessä järjestelmän ylläpitäjään.",
"web services under your control" : "verkkopalvelut hallinnassasi",
"Empty filename is not allowed" : "Tiedostonimi ei voi olla tyhjä",
"Dot files are not allowed" : "Pistetiedostot eivät ole sallittuja",
"File name contains at least one invalid character" : "Tiedoston nimi sisältää ainakin yhden virheellisen merkin",
+ "File name is too long" : "Tiedoston nimi on liian pitkä",
"App directory already exists" : "Sovelluskansio on jo olemassa",
"Can't create app folder. Please fix permissions. %s" : "Sovelluskansion luominen ei onnistu. Korjaa käyttöoikeudet. %s",
"No source specified when installing app" : "Lähdettä ei määritelty sovellusta asennettaessa",
@@ -76,8 +75,6 @@ OC.L10N.register(
"For the best results, please consider using a GNU/Linux server instead." : "Käytä parhaan lopputuloksen saamiseksi GNU/Linux-palvelinta.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Vaikuttaa siltä, että tämä %s-instanssi toimii 32-bittisessä PHP-ympäristössä ja open_basedir-asetus on määritetty php.ini-tiedostossa. Tämä johtaa ongelmiin yli 4 gigatavun tiedostojen kanssa, eikä siksi ole suositeltavaa.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Poista open_basedir-asetus php.ini-tiedostosta tai vaihda 64-bittiseen PHP:hen.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Vaikuttaa siltä, että tämä %s-instanssi toimii 32-bittisessä PHP-ympäristössä ja cURL ei ole asennettuna. Tämä johtaa ongelmiin yli 4 gigatavun tiedostojen kanssa, eikä siksi ole suositeltavaa.",
- "Please install the cURL extension and restart your webserver." : "Asenna cURL-laajennus ja käynnistä http-palvelin uudelleen.",
"Set an admin username." : "Aseta ylläpitäjän käyttäjätunnus.",
"Set an admin password." : "Aseta ylläpitäjän salasana.",
"%s shared »%s« with you" : "%s jakoi kohteen »%s« kanssasi",
diff --git a/lib/l10n/fi_FI.json b/lib/l10n/fi_FI.json
index fe5f6f8a07a..1ecab62af28 100644
--- a/lib/l10n/fi_FI.json
+++ b/lib/l10n/fi_FI.json
@@ -34,12 +34,11 @@
"_%n hour ago_::_%n hours ago_" : ["%n tunti sitten","%n tuntia sitten"],
"_%n minute ago_::_%n minutes ago_" : ["%n minuutti sitten","%n minuuttia sitten"],
"seconds ago" : "sekuntia sitten",
- "Database Error" : "Tietokantavirhe",
- "Please contact your system administrator." : "Ole yhteydessä järjestelmän ylläpitäjään.",
"web services under your control" : "verkkopalvelut hallinnassasi",
"Empty filename is not allowed" : "Tiedostonimi ei voi olla tyhjä",
"Dot files are not allowed" : "Pistetiedostot eivät ole sallittuja",
"File name contains at least one invalid character" : "Tiedoston nimi sisältää ainakin yhden virheellisen merkin",
+ "File name is too long" : "Tiedoston nimi on liian pitkä",
"App directory already exists" : "Sovelluskansio on jo olemassa",
"Can't create app folder. Please fix permissions. %s" : "Sovelluskansion luominen ei onnistu. Korjaa käyttöoikeudet. %s",
"No source specified when installing app" : "Lähdettä ei määritelty sovellusta asennettaessa",
@@ -74,8 +73,6 @@
"For the best results, please consider using a GNU/Linux server instead." : "Käytä parhaan lopputuloksen saamiseksi GNU/Linux-palvelinta.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Vaikuttaa siltä, että tämä %s-instanssi toimii 32-bittisessä PHP-ympäristössä ja open_basedir-asetus on määritetty php.ini-tiedostossa. Tämä johtaa ongelmiin yli 4 gigatavun tiedostojen kanssa, eikä siksi ole suositeltavaa.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Poista open_basedir-asetus php.ini-tiedostosta tai vaihda 64-bittiseen PHP:hen.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Vaikuttaa siltä, että tämä %s-instanssi toimii 32-bittisessä PHP-ympäristössä ja cURL ei ole asennettuna. Tämä johtaa ongelmiin yli 4 gigatavun tiedostojen kanssa, eikä siksi ole suositeltavaa.",
- "Please install the cURL extension and restart your webserver." : "Asenna cURL-laajennus ja käynnistä http-palvelin uudelleen.",
"Set an admin username." : "Aseta ylläpitäjän käyttäjätunnus.",
"Set an admin password." : "Aseta ylläpitäjän salasana.",
"%s shared »%s« with you" : "%s jakoi kohteen »%s« kanssasi",
diff --git a/lib/l10n/fr.js b/lib/l10n/fr.js
index f9228ee2a92..574f8e53998 100644
--- a/lib/l10n/fr.js
+++ b/lib/l10n/fr.js
@@ -37,9 +37,13 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["","Il y a %n heures"],
"_%n minute ago_::_%n minutes ago_" : ["","il y a %n minutes"],
"seconds ago" : "il y a quelques secondes",
- "Database Error" : "Erreur dans la base de données",
- "Please contact your system administrator." : "Veuillez contacter votre administrateur système.",
"web services under your control" : "services web sous votre contrôle",
+ "Empty filename is not allowed" : "Le nom de fichier ne peut pas être vide",
+ "Dot files are not allowed" : "Le nom de fichier ne peut pas commencer par un point",
+ "4-byte characters are not supported in file names" : "Les caractères sur 4 octets ne sont pas pris en charge dans les noms de fichiers",
+ "File name is a reserved word" : "Ce nom de fichier est un mot réservé",
+ "File name contains at least one invalid character" : "Le nom de fichier contient un (des) caractère(s) non valide(s)",
+ "File name is too long" : "Nom de fichier trop long",
"App directory already exists" : "Le dossier de l'application existe déjà",
"Can't create app folder. Please fix permissions. %s" : "Impossible de créer le dossier de l'application. Corrigez les droits d'accès. %s",
"No source specified when installing app" : "Aucune source spécifiée pour installer l'application",
@@ -76,8 +80,6 @@ OC.L10N.register(
"For the best results, please consider using a GNU/Linux server instead." : "Pour obtenir les meilleurs résultats, vous devriez utiliser un serveur GNU/Linux.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Il semble que cette instance %s fonctionne sur un environnement PHP 32-bits et open_basedir a été configuré dans php.ini. Cela engendre des problèmes avec les fichiers supérieurs à 4Go et cela est donc fortement déconseillé.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Veuillez supprimer la configuration open_basedir de votre php.ini ou basculer sur une version PHP 64-bits.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Il semble que cette instance %s fonctionne sur un environnement PHP 32-bits et cURL n'est pas installé. Cela engendre des problèmes avec les fichiers supérieurs à 4Go et cela est donc fortement déconseillé.",
- "Please install the cURL extension and restart your webserver." : "Veuillez installer l'extension cURL et redémarrer votre serveur web.",
"Set an admin username." : "Spécifiez un nom d'utilisateur pour l'administrateur.",
"Set an admin password." : "Spécifiez un mot de passe administrateur.",
"Can't create or write into the data directory %s" : "Impossible de créer ou d'écrire dans le répertoire des données %s",
diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json
index 45a5aacaf13..3107d0b3e69 100644
--- a/lib/l10n/fr.json
+++ b/lib/l10n/fr.json
@@ -35,9 +35,13 @@
"_%n hour ago_::_%n hours ago_" : ["","Il y a %n heures"],
"_%n minute ago_::_%n minutes ago_" : ["","il y a %n minutes"],
"seconds ago" : "il y a quelques secondes",
- "Database Error" : "Erreur dans la base de données",
- "Please contact your system administrator." : "Veuillez contacter votre administrateur système.",
"web services under your control" : "services web sous votre contrôle",
+ "Empty filename is not allowed" : "Le nom de fichier ne peut pas être vide",
+ "Dot files are not allowed" : "Le nom de fichier ne peut pas commencer par un point",
+ "4-byte characters are not supported in file names" : "Les caractères sur 4 octets ne sont pas pris en charge dans les noms de fichiers",
+ "File name is a reserved word" : "Ce nom de fichier est un mot réservé",
+ "File name contains at least one invalid character" : "Le nom de fichier contient un (des) caractère(s) non valide(s)",
+ "File name is too long" : "Nom de fichier trop long",
"App directory already exists" : "Le dossier de l'application existe déjà",
"Can't create app folder. Please fix permissions. %s" : "Impossible de créer le dossier de l'application. Corrigez les droits d'accès. %s",
"No source specified when installing app" : "Aucune source spécifiée pour installer l'application",
@@ -74,8 +78,6 @@
"For the best results, please consider using a GNU/Linux server instead." : "Pour obtenir les meilleurs résultats, vous devriez utiliser un serveur GNU/Linux.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Il semble que cette instance %s fonctionne sur un environnement PHP 32-bits et open_basedir a été configuré dans php.ini. Cela engendre des problèmes avec les fichiers supérieurs à 4Go et cela est donc fortement déconseillé.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Veuillez supprimer la configuration open_basedir de votre php.ini ou basculer sur une version PHP 64-bits.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Il semble que cette instance %s fonctionne sur un environnement PHP 32-bits et cURL n'est pas installé. Cela engendre des problèmes avec les fichiers supérieurs à 4Go et cela est donc fortement déconseillé.",
- "Please install the cURL extension and restart your webserver." : "Veuillez installer l'extension cURL et redémarrer votre serveur web.",
"Set an admin username." : "Spécifiez un nom d'utilisateur pour l'administrateur.",
"Set an admin password." : "Spécifiez un mot de passe administrateur.",
"Can't create or write into the data directory %s" : "Impossible de créer ou d'écrire dans le répertoire des données %s",
diff --git a/lib/l10n/gl.js b/lib/l10n/gl.js
index 58dcc7b5898..cb908f4f619 100644
--- a/lib/l10n/gl.js
+++ b/lib/l10n/gl.js
@@ -37,14 +37,13 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["hai %n hora","hai %n horas"],
"_%n minute ago_::_%n minutes ago_" : ["hai %n minuto","hai %n minutos"],
"seconds ago" : "segundos atrás",
- "Database Error" : "Produciuse un erro na base de datos",
- "Please contact your system administrator." : "Contacte co administrador.",
"web services under your control" : "servizos web baixo o seu control",
"Empty filename is not allowed" : "Non está permitido deixar baleiro o nome de ficheiro",
"Dot files are not allowed" : "Non se admiten os ficheiros con punto",
"4-byte characters are not supported in file names" : "Non se admiten os caracteres de 4 bytes nos nomes de ficheiro",
"File name is a reserved word" : "O nome de ficheiro é unha palabra reservada",
"File name contains at least one invalid character" : "O nome de ficheiro contén algún carácter incorrecto",
+ "File name is too long" : "O nome de ficheiro é longo de máis",
"App directory already exists" : "Xa existe o directorio da aplicación",
"Can't create app folder. Please fix permissions. %s" : "Non é posíbel crear o cartafol de aplicacións. Corrixa os permisos. %s",
"No source specified when installing app" : "Non foi especificada ningunha orixe ao instalar a aplicación",
@@ -81,8 +80,6 @@ OC.L10N.register(
"For the best results, please consider using a GNU/Linux server instead." : "Para obter mellores resultados, considere o emprego dun servidor GNU/Linux no seu canto.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Semella que esta instancia de %s está a funcionar nun entorno PHP de 32 bisst e o open_basedir foi configurado no php.ini. Isto provocará problemas con ficheiros maiores de 4 GB e está absolutamente desaconsellado.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Retire o axuste de open_basedir no php.ini ou cambie a PHP de 64 bits.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Semella que esta instancia %s está a funcionar nun entorno PHP de 32 bits e cURL non está instalado. Isto provocará problemas con ficheiros maiores de 4 GB e está absolutamente desaconsellado.",
- "Please install the cURL extension and restart your webserver." : "Instale a extensión cURL e reinicie o servidor web.",
"Set an admin username." : "Estabeleza un nome de usuario administrador",
"Set an admin password." : "Estabeleza un contrasinal de administrador",
"Can't create or write into the data directory %s" : "Non é posíbel crear ou escribir o directorio «data» %s",
diff --git a/lib/l10n/gl.json b/lib/l10n/gl.json
index 532c5cf1ce4..0fd5fe083e6 100644
--- a/lib/l10n/gl.json
+++ b/lib/l10n/gl.json
@@ -35,14 +35,13 @@
"_%n hour ago_::_%n hours ago_" : ["hai %n hora","hai %n horas"],
"_%n minute ago_::_%n minutes ago_" : ["hai %n minuto","hai %n minutos"],
"seconds ago" : "segundos atrás",
- "Database Error" : "Produciuse un erro na base de datos",
- "Please contact your system administrator." : "Contacte co administrador.",
"web services under your control" : "servizos web baixo o seu control",
"Empty filename is not allowed" : "Non está permitido deixar baleiro o nome de ficheiro",
"Dot files are not allowed" : "Non se admiten os ficheiros con punto",
"4-byte characters are not supported in file names" : "Non se admiten os caracteres de 4 bytes nos nomes de ficheiro",
"File name is a reserved word" : "O nome de ficheiro é unha palabra reservada",
"File name contains at least one invalid character" : "O nome de ficheiro contén algún carácter incorrecto",
+ "File name is too long" : "O nome de ficheiro é longo de máis",
"App directory already exists" : "Xa existe o directorio da aplicación",
"Can't create app folder. Please fix permissions. %s" : "Non é posíbel crear o cartafol de aplicacións. Corrixa os permisos. %s",
"No source specified when installing app" : "Non foi especificada ningunha orixe ao instalar a aplicación",
@@ -79,8 +78,6 @@
"For the best results, please consider using a GNU/Linux server instead." : "Para obter mellores resultados, considere o emprego dun servidor GNU/Linux no seu canto.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Semella que esta instancia de %s está a funcionar nun entorno PHP de 32 bisst e o open_basedir foi configurado no php.ini. Isto provocará problemas con ficheiros maiores de 4 GB e está absolutamente desaconsellado.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Retire o axuste de open_basedir no php.ini ou cambie a PHP de 64 bits.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Semella que esta instancia %s está a funcionar nun entorno PHP de 32 bits e cURL non está instalado. Isto provocará problemas con ficheiros maiores de 4 GB e está absolutamente desaconsellado.",
- "Please install the cURL extension and restart your webserver." : "Instale a extensión cURL e reinicie o servidor web.",
"Set an admin username." : "Estabeleza un nome de usuario administrador",
"Set an admin password." : "Estabeleza un contrasinal de administrador",
"Can't create or write into the data directory %s" : "Non é posíbel crear ou escribir o directorio «data» %s",
diff --git a/lib/l10n/hr.js b/lib/l10n/hr.js
index c4c8f6d526f..a33aeed360c 100644
--- a/lib/l10n/hr.js
+++ b/lib/l10n/hr.js
@@ -32,8 +32,6 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["prije %n sata","prije %n sati","prije %n sati"],
"_%n minute ago_::_%n minutes ago_" : ["prije %n minute","prije %n minuta","prije %n minuta"],
"seconds ago" : "prije par sekundi",
- "Database Error" : "Database Greska",
- "Please contact your system administrator." : "Molimo vas da kontaktirate vaseg sistem administratora.",
"web services under your control" : "web usluge pod vašom kontrolom",
"App directory already exists" : "Direktorij aplikacije već postoji",
"Can't create app folder. Please fix permissions. %s" : "Nije moguće kreirati mapu aplikacija. molimo popravite dozvole. %s",
@@ -70,7 +68,6 @@ OC.L10N.register(
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nije podržan i %s na ovoj platformi neće raditi kako treba.",
"For the best results, please consider using a GNU/Linux server instead." : "Za najbolje rezultate, molimo razmotrite mogućnost korištenje poslužitelja GNU/Linux.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Molimo uklonite postavke za open_basedir setting iz datoteke php.ini ili se prebacite na 64-bitni PHP.",
- "Please install the cURL extension and restart your webserver." : "Molimo instalirajte cURL dodatak i ponovo pokrenite Vaš web poslužitelj.",
"Set an admin username." : "Navedite admin korisničko ime.",
"Set an admin password." : "Navedite admin lozinku.",
"Can't create or write into the data directory %s" : "Ne moze se kreirati ili napisati u imenik podataka %s",
diff --git a/lib/l10n/hr.json b/lib/l10n/hr.json
index 7512f6b76a6..67ee64ee66f 100644
--- a/lib/l10n/hr.json
+++ b/lib/l10n/hr.json
@@ -30,8 +30,6 @@
"_%n hour ago_::_%n hours ago_" : ["prije %n sata","prije %n sati","prije %n sati"],
"_%n minute ago_::_%n minutes ago_" : ["prije %n minute","prije %n minuta","prije %n minuta"],
"seconds ago" : "prije par sekundi",
- "Database Error" : "Database Greska",
- "Please contact your system administrator." : "Molimo vas da kontaktirate vaseg sistem administratora.",
"web services under your control" : "web usluge pod vašom kontrolom",
"App directory already exists" : "Direktorij aplikacije već postoji",
"Can't create app folder. Please fix permissions. %s" : "Nije moguće kreirati mapu aplikacija. molimo popravite dozvole. %s",
@@ -68,7 +66,6 @@
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nije podržan i %s na ovoj platformi neće raditi kako treba.",
"For the best results, please consider using a GNU/Linux server instead." : "Za najbolje rezultate, molimo razmotrite mogućnost korištenje poslužitelja GNU/Linux.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Molimo uklonite postavke za open_basedir setting iz datoteke php.ini ili se prebacite na 64-bitni PHP.",
- "Please install the cURL extension and restart your webserver." : "Molimo instalirajte cURL dodatak i ponovo pokrenite Vaš web poslužitelj.",
"Set an admin username." : "Navedite admin korisničko ime.",
"Set an admin password." : "Navedite admin lozinku.",
"Can't create or write into the data directory %s" : "Ne moze se kreirati ili napisati u imenik podataka %s",
diff --git a/lib/l10n/hu_HU.js b/lib/l10n/hu_HU.js
index 5ff6c0b00e4..1fa6d95b078 100644
--- a/lib/l10n/hu_HU.js
+++ b/lib/l10n/hu_HU.js
@@ -62,7 +62,6 @@ OC.L10N.register(
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "A Mac OS X nem támogatott és %s nem lesz teljesen működőképes. Csak saját felelősségre használja!",
"For the best results, please consider using a GNU/Linux server instead." : "A legjobb eredmény érdekében érdemes GNU/Linux-alapú kiszolgálót használni.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Kérlek távolítsd el az open_basedir beállítást a php.ini-ből, vagy válts 64bit-es PHP-ra.",
- "Please install the cURL extension and restart your webserver." : "Kérlek, telepítsd a cURL bővítményt és indítsd újra a webszervert.",
"Set an admin username." : "Állítson be egy felhasználói nevet az adminisztrációhoz.",
"Set an admin password." : "Állítson be egy jelszót az adminisztrációhoz.",
"Can't create or write into the data directory %s" : "Nem sikerült létrehozni vagy irni a \"data\" könyvtárba %s",
diff --git a/lib/l10n/hu_HU.json b/lib/l10n/hu_HU.json
index 33097e653bf..31cd62c83d5 100644
--- a/lib/l10n/hu_HU.json
+++ b/lib/l10n/hu_HU.json
@@ -60,7 +60,6 @@
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "A Mac OS X nem támogatott és %s nem lesz teljesen működőképes. Csak saját felelősségre használja!",
"For the best results, please consider using a GNU/Linux server instead." : "A legjobb eredmény érdekében érdemes GNU/Linux-alapú kiszolgálót használni.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Kérlek távolítsd el az open_basedir beállítást a php.ini-ből, vagy válts 64bit-es PHP-ra.",
- "Please install the cURL extension and restart your webserver." : "Kérlek, telepítsd a cURL bővítményt és indítsd újra a webszervert.",
"Set an admin username." : "Állítson be egy felhasználói nevet az adminisztrációhoz.",
"Set an admin password." : "Állítson be egy jelszót az adminisztrációhoz.",
"Can't create or write into the data directory %s" : "Nem sikerült létrehozni vagy irni a \"data\" könyvtárba %s",
diff --git a/lib/l10n/id.js b/lib/l10n/id.js
index 7bcfd2e035b..05b958b1dd1 100644
--- a/lib/l10n/id.js
+++ b/lib/l10n/id.js
@@ -37,8 +37,6 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n jam yang lalu"],
"_%n minute ago_::_%n minutes ago_" : ["%n menit yang lalu"],
"seconds ago" : "beberapa detik yang lalu",
- "Database Error" : "Basis Data Galat",
- "Please contact your system administrator." : "Mohon hubungi administrator sistem Anda.",
"web services under your control" : "layanan web dalam kendali anda",
"App directory already exists" : "Direktori Apl sudah ada",
"Can't create app folder. Please fix permissions. %s" : "Tidak dapat membuat folder apl. Silakan perbaiki perizinan. %s",
@@ -75,7 +73,6 @@ OC.L10N.register(
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X tidak didukung dan %s tidak akan bekerja dengan baik pada platform ini. Gunakan dengan resiko Anda sendiri!",
"For the best results, please consider using a GNU/Linux server instead." : "Untuk hasil terbaik, pertimbangkan untuk menggunakan server GNU/Linux sebagai gantinya. ",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Mohon hapus pengaturan open_basedir didalam php.ini atau beralih ke PHP 64-bit.",
- "Please install the cURL extension and restart your webserver." : "Mohon instal ekstensi cURL dan jalankan ulang server web.",
"Set an admin username." : "Tetapkan nama pengguna admin.",
"Set an admin password." : "Tetapkan sandi admin.",
"Can't create or write into the data directory %s" : "Tidak dapat membuat atau menulis kedalam direktori data %s",
diff --git a/lib/l10n/id.json b/lib/l10n/id.json
index 777c220fe11..ae3e866a8bb 100644
--- a/lib/l10n/id.json
+++ b/lib/l10n/id.json
@@ -35,8 +35,6 @@
"_%n hour ago_::_%n hours ago_" : ["%n jam yang lalu"],
"_%n minute ago_::_%n minutes ago_" : ["%n menit yang lalu"],
"seconds ago" : "beberapa detik yang lalu",
- "Database Error" : "Basis Data Galat",
- "Please contact your system administrator." : "Mohon hubungi administrator sistem Anda.",
"web services under your control" : "layanan web dalam kendali anda",
"App directory already exists" : "Direktori Apl sudah ada",
"Can't create app folder. Please fix permissions. %s" : "Tidak dapat membuat folder apl. Silakan perbaiki perizinan. %s",
@@ -73,7 +71,6 @@
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X tidak didukung dan %s tidak akan bekerja dengan baik pada platform ini. Gunakan dengan resiko Anda sendiri!",
"For the best results, please consider using a GNU/Linux server instead." : "Untuk hasil terbaik, pertimbangkan untuk menggunakan server GNU/Linux sebagai gantinya. ",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Mohon hapus pengaturan open_basedir didalam php.ini atau beralih ke PHP 64-bit.",
- "Please install the cURL extension and restart your webserver." : "Mohon instal ekstensi cURL dan jalankan ulang server web.",
"Set an admin username." : "Tetapkan nama pengguna admin.",
"Set an admin password." : "Tetapkan sandi admin.",
"Can't create or write into the data directory %s" : "Tidak dapat membuat atau menulis kedalam direktori data %s",
diff --git a/lib/l10n/it.js b/lib/l10n/it.js
index 1415d5b066a..4d1ab41bd55 100644
--- a/lib/l10n/it.js
+++ b/lib/l10n/it.js
@@ -37,14 +37,13 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n ora fa","%n ore fa"],
"_%n minute ago_::_%n minutes ago_" : ["%n minuto fa","%n minuti fa"],
"seconds ago" : "secondi fa",
- "Database Error" : "Errore del database",
- "Please contact your system administrator." : "Contatta il tuo amministratore di sistema.",
"web services under your control" : "servizi web nelle tue mani",
"Empty filename is not allowed" : "Un nome di file vuoto non è consentito",
"Dot files are not allowed" : "I file con un punto iniziale non sono consentiti",
"4-byte characters are not supported in file names" : "I caratteri di 4 byte non sono supportati nei nomi dei file",
"File name is a reserved word" : "Il nome del file è una parola riservata",
"File name contains at least one invalid character" : "Il nome del file contiene almeno un carattere non valido",
+ "File name is too long" : "Il nome del file è troppo lungo",
"App directory already exists" : "La cartella dell'applicazione esiste già",
"Can't create app folder. Please fix permissions. %s" : "Impossibile creare la cartella dell'applicazione. Correggi i permessi. %s",
"No source specified when installing app" : "Nessuna fonte specificata durante l'installazione dell'applicazione",
@@ -81,8 +80,6 @@ OC.L10N.register(
"For the best results, please consider using a GNU/Linux server instead." : "Per avere il risultato migliore, prendi in considerazione l'utilizzo di un server GNU/Linux.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Sembra che questa istanza di %s sia in esecuzione in un ambiente PHP a 32 bit e che open_basedir sia stata configurata in php.ini. Ciò comporterà problemi con i file più grandi di 4 GB ed è altamente sconsigliato.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Rimuovi l'impostazione di open_basedir nel tuo php.ini o passa alla versione a 64 bit di PHP.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Sembra che questa istanza di %s sia in esecuzione in un ambiente PHP a 32 bit e che cURL non sia installato. Ciò comporterà problemi con i file più grandi di 4 GB ed è altamente sconsigliato.",
- "Please install the cURL extension and restart your webserver." : "Installa l'estensione cURL e riavvia il server web.",
"Set an admin username." : "Imposta un nome utente di amministrazione.",
"Set an admin password." : "Imposta una password di amministrazione.",
"Can't create or write into the data directory %s" : "Impossibile creare o scrivere nella cartella dei dati %s",
diff --git a/lib/l10n/it.json b/lib/l10n/it.json
index cf9df4c972a..f4e34cc9f33 100644
--- a/lib/l10n/it.json
+++ b/lib/l10n/it.json
@@ -35,14 +35,13 @@
"_%n hour ago_::_%n hours ago_" : ["%n ora fa","%n ore fa"],
"_%n minute ago_::_%n minutes ago_" : ["%n minuto fa","%n minuti fa"],
"seconds ago" : "secondi fa",
- "Database Error" : "Errore del database",
- "Please contact your system administrator." : "Contatta il tuo amministratore di sistema.",
"web services under your control" : "servizi web nelle tue mani",
"Empty filename is not allowed" : "Un nome di file vuoto non è consentito",
"Dot files are not allowed" : "I file con un punto iniziale non sono consentiti",
"4-byte characters are not supported in file names" : "I caratteri di 4 byte non sono supportati nei nomi dei file",
"File name is a reserved word" : "Il nome del file è una parola riservata",
"File name contains at least one invalid character" : "Il nome del file contiene almeno un carattere non valido",
+ "File name is too long" : "Il nome del file è troppo lungo",
"App directory already exists" : "La cartella dell'applicazione esiste già",
"Can't create app folder. Please fix permissions. %s" : "Impossibile creare la cartella dell'applicazione. Correggi i permessi. %s",
"No source specified when installing app" : "Nessuna fonte specificata durante l'installazione dell'applicazione",
@@ -79,8 +78,6 @@
"For the best results, please consider using a GNU/Linux server instead." : "Per avere il risultato migliore, prendi in considerazione l'utilizzo di un server GNU/Linux.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Sembra che questa istanza di %s sia in esecuzione in un ambiente PHP a 32 bit e che open_basedir sia stata configurata in php.ini. Ciò comporterà problemi con i file più grandi di 4 GB ed è altamente sconsigliato.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Rimuovi l'impostazione di open_basedir nel tuo php.ini o passa alla versione a 64 bit di PHP.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Sembra che questa istanza di %s sia in esecuzione in un ambiente PHP a 32 bit e che cURL non sia installato. Ciò comporterà problemi con i file più grandi di 4 GB ed è altamente sconsigliato.",
- "Please install the cURL extension and restart your webserver." : "Installa l'estensione cURL e riavvia il server web.",
"Set an admin username." : "Imposta un nome utente di amministrazione.",
"Set an admin password." : "Imposta una password di amministrazione.",
"Can't create or write into the data directory %s" : "Impossibile creare o scrivere nella cartella dei dati %s",
diff --git a/lib/l10n/ja.js b/lib/l10n/ja.js
index 2305de5b312..ff781afc8d0 100644
--- a/lib/l10n/ja.js
+++ b/lib/l10n/ja.js
@@ -35,9 +35,13 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n 時間前"],
"_%n minute ago_::_%n minutes ago_" : ["%n 分前"],
"seconds ago" : "数秒前",
- "Database Error" : "データベースエラー",
- "Please contact your system administrator." : "システム管理者に問い合わせてください。",
"web services under your control" : "あなたの管理下のウェブサービス",
+ "Empty filename is not allowed" : "空のファイル名は許可されていません",
+ "Dot files are not allowed" : "ドットファイルは許可されていません",
+ "4-byte characters are not supported in file names" : "ファイル名に4バイト文字を使用するのはサポートされていません",
+ "File name is a reserved word" : "ファイル名が予約された単語です",
+ "File name contains at least one invalid character" : "ファイル名に1文字以上の無効な文字が含まれています",
+ "File name is too long" : "ファイル名が長すぎます",
"App directory already exists" : "アプリディレクトリはすでに存在します",
"Can't create app folder. Please fix permissions. %s" : "アプリフォルダーを作成できませんでした。%s のパーミッションを修正してください。",
"No source specified when installing app" : "アプリインストール時のソースが未指定",
@@ -73,7 +77,6 @@ OC.L10N.register(
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X では、サポートされていません。このOSでは、%sは正常に動作しないかもしれません。ご自身の責任においてご利用ください。",
"For the best results, please consider using a GNU/Linux server instead." : "最も良い方法としては、代わりにGNU/Linuxサーバーを利用することをご検討ください。",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "php.ini から open_basedir 設定を削除するか、64bit PHPに切り替えてください。",
- "Please install the cURL extension and restart your webserver." : "cURL拡張をインストールして、WEBサーバーを再起動してください。",
"Set an admin username." : "管理者のユーザー名を設定",
"Set an admin password." : "管理者のパスワードを設定。",
"Can't create or write into the data directory %s" : "%s データディレクトリに作成、書き込みができません",
diff --git a/lib/l10n/ja.json b/lib/l10n/ja.json
index f3956fe1425..f9dc5322c0c 100644
--- a/lib/l10n/ja.json
+++ b/lib/l10n/ja.json
@@ -33,9 +33,13 @@
"_%n hour ago_::_%n hours ago_" : ["%n 時間前"],
"_%n minute ago_::_%n minutes ago_" : ["%n 分前"],
"seconds ago" : "数秒前",
- "Database Error" : "データベースエラー",
- "Please contact your system administrator." : "システム管理者に問い合わせてください。",
"web services under your control" : "あなたの管理下のウェブサービス",
+ "Empty filename is not allowed" : "空のファイル名は許可されていません",
+ "Dot files are not allowed" : "ドットファイルは許可されていません",
+ "4-byte characters are not supported in file names" : "ファイル名に4バイト文字を使用するのはサポートされていません",
+ "File name is a reserved word" : "ファイル名が予約された単語です",
+ "File name contains at least one invalid character" : "ファイル名に1文字以上の無効な文字が含まれています",
+ "File name is too long" : "ファイル名が長すぎます",
"App directory already exists" : "アプリディレクトリはすでに存在します",
"Can't create app folder. Please fix permissions. %s" : "アプリフォルダーを作成できませんでした。%s のパーミッションを修正してください。",
"No source specified when installing app" : "アプリインストール時のソースが未指定",
@@ -71,7 +75,6 @@
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X では、サポートされていません。このOSでは、%sは正常に動作しないかもしれません。ご自身の責任においてご利用ください。",
"For the best results, please consider using a GNU/Linux server instead." : "最も良い方法としては、代わりにGNU/Linuxサーバーを利用することをご検討ください。",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "php.ini から open_basedir 設定を削除するか、64bit PHPに切り替えてください。",
- "Please install the cURL extension and restart your webserver." : "cURL拡張をインストールして、WEBサーバーを再起動してください。",
"Set an admin username." : "管理者のユーザー名を設定",
"Set an admin password." : "管理者のパスワードを設定。",
"Can't create or write into the data directory %s" : "%s データディレクトリに作成、書き込みができません",
diff --git a/lib/l10n/ko.js b/lib/l10n/ko.js
index 1a8616174b0..0bea0a1c423 100644
--- a/lib/l10n/ko.js
+++ b/lib/l10n/ko.js
@@ -35,8 +35,6 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n시간 전"],
"_%n minute ago_::_%n minutes ago_" : ["%n분 전"],
"seconds ago" : "초 전",
- "Database Error" : "데이터베이스 오류",
- "Please contact your system administrator." : "시스템 관리자에게 연락하십시오.",
"web services under your control" : "내가 관리하는 웹 서비스",
"App directory already exists" : "앱 디렉터리가 이미 존재합니다.",
"Can't create app folder. Please fix permissions. %s" : "앱 폴더를 만들 수 없습니다. 권한을 수정하십시오. %s",
@@ -73,7 +71,6 @@ OC.L10N.register(
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X은 지원하지 않으며 %s이(가) 이 플랫폼에서 올바르게 작동하지 않을 수도 있습니다. 본인 책임으로 사용하십시오! ",
"For the best results, please consider using a GNU/Linux server instead." : "더 좋은 결과를 얻으려면 GNU/Linux 서버를 사용하는 것을 권장합니다.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "php.ini의 open_basedir 설정을 삭제하거나 64비트 PHP로 전환하십시오.",
- "Please install the cURL extension and restart your webserver." : "cURL 확장 기능을 설치한 다음 웹 서버를 다시 시작하십시오.",
"Set an admin username." : "관리자의 사용자 이름을 설정합니다.",
"Set an admin password." : "관리자의 암호를 설정합니다.",
"Can't create or write into the data directory %s" : "데이터 디렉터리 %s을(를) 만들거나 기록할 수 없음",
diff --git a/lib/l10n/ko.json b/lib/l10n/ko.json
index 776418c2e54..3df278e8073 100644
--- a/lib/l10n/ko.json
+++ b/lib/l10n/ko.json
@@ -33,8 +33,6 @@
"_%n hour ago_::_%n hours ago_" : ["%n시간 전"],
"_%n minute ago_::_%n minutes ago_" : ["%n분 전"],
"seconds ago" : "초 전",
- "Database Error" : "데이터베이스 오류",
- "Please contact your system administrator." : "시스템 관리자에게 연락하십시오.",
"web services under your control" : "내가 관리하는 웹 서비스",
"App directory already exists" : "앱 디렉터리가 이미 존재합니다.",
"Can't create app folder. Please fix permissions. %s" : "앱 폴더를 만들 수 없습니다. 권한을 수정하십시오. %s",
@@ -71,7 +69,6 @@
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X은 지원하지 않으며 %s이(가) 이 플랫폼에서 올바르게 작동하지 않을 수도 있습니다. 본인 책임으로 사용하십시오! ",
"For the best results, please consider using a GNU/Linux server instead." : "더 좋은 결과를 얻으려면 GNU/Linux 서버를 사용하는 것을 권장합니다.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "php.ini의 open_basedir 설정을 삭제하거나 64비트 PHP로 전환하십시오.",
- "Please install the cURL extension and restart your webserver." : "cURL 확장 기능을 설치한 다음 웹 서버를 다시 시작하십시오.",
"Set an admin username." : "관리자의 사용자 이름을 설정합니다.",
"Set an admin password." : "관리자의 암호를 설정합니다.",
"Can't create or write into the data directory %s" : "데이터 디렉터리 %s을(를) 만들거나 기록할 수 없음",
diff --git a/lib/l10n/nb_NO.js b/lib/l10n/nb_NO.js
index 789671d5e0d..554045b2be9 100644
--- a/lib/l10n/nb_NO.js
+++ b/lib/l10n/nb_NO.js
@@ -35,8 +35,6 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["for %n time siden","for %n timer siden"],
"_%n minute ago_::_%n minutes ago_" : ["for %n minutt siden","for %n minutter siden"],
"seconds ago" : "for få sekunder siden",
- "Database Error" : "Databasefeil",
- "Please contact your system administrator." : "Vennligst kontakt systemadministratoren.",
"web services under your control" : "webtjenester som du kontrollerer",
"App directory already exists" : "App-mappe finnes allerede",
"Can't create app folder. Please fix permissions. %s" : "Kan ikke opprette app-mappe. Vennligst ordne opp i tillatelser. %s",
@@ -73,7 +71,6 @@ OC.L10N.register(
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X støttes ikke og %s vil ikke fungere korrekt på denne plattformen. Bruk på egen risiko!",
"For the best results, please consider using a GNU/Linux server instead." : "For beste resultat, vurder å bruke en GNU/Linux-server i stedet.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Vennligst fjern innstillingen open_basedir i php.ini eller bytt til 64-bit PHP.",
- "Please install the cURL extension and restart your webserver." : "Installer utvidelsen cURL og start web-serveren på nytt.",
"Set an admin username." : "Sett et admin-brukernavn.",
"Set an admin password." : "Sett et admin-passord.",
"Can't create or write into the data directory %s" : "Kan ikke opprette eller skrive i datamappen %s",
diff --git a/lib/l10n/nb_NO.json b/lib/l10n/nb_NO.json
index 1f0f27b0061..70e1d2e5b8e 100644
--- a/lib/l10n/nb_NO.json
+++ b/lib/l10n/nb_NO.json
@@ -33,8 +33,6 @@
"_%n hour ago_::_%n hours ago_" : ["for %n time siden","for %n timer siden"],
"_%n minute ago_::_%n minutes ago_" : ["for %n minutt siden","for %n minutter siden"],
"seconds ago" : "for få sekunder siden",
- "Database Error" : "Databasefeil",
- "Please contact your system administrator." : "Vennligst kontakt systemadministratoren.",
"web services under your control" : "webtjenester som du kontrollerer",
"App directory already exists" : "App-mappe finnes allerede",
"Can't create app folder. Please fix permissions. %s" : "Kan ikke opprette app-mappe. Vennligst ordne opp i tillatelser. %s",
@@ -71,7 +69,6 @@
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X støttes ikke og %s vil ikke fungere korrekt på denne plattformen. Bruk på egen risiko!",
"For the best results, please consider using a GNU/Linux server instead." : "For beste resultat, vurder å bruke en GNU/Linux-server i stedet.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Vennligst fjern innstillingen open_basedir i php.ini eller bytt til 64-bit PHP.",
- "Please install the cURL extension and restart your webserver." : "Installer utvidelsen cURL og start web-serveren på nytt.",
"Set an admin username." : "Sett et admin-brukernavn.",
"Set an admin password." : "Sett et admin-passord.",
"Can't create or write into the data directory %s" : "Kan ikke opprette eller skrive i datamappen %s",
diff --git a/lib/l10n/nl.js b/lib/l10n/nl.js
index 0e162f9756d..237fa0093e6 100644
--- a/lib/l10n/nl.js
+++ b/lib/l10n/nl.js
@@ -37,14 +37,13 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n uur geleden","%n uur geleden"],
"_%n minute ago_::_%n minutes ago_" : ["%n minuut geleden","%n minuten geleden"],
"seconds ago" : "seconden geleden",
- "Database Error" : "Database fout",
- "Please contact your system administrator." : "Neem contact op met uw systeembeheerder.",
"web services under your control" : "Webdiensten in eigen beheer",
"Empty filename is not allowed" : "Een lege bestandsnaam is niet toegestaan",
"Dot files are not allowed" : "Punt bestanden zijn niet toegestaan",
"4-byte characters are not supported in file names" : "4-byte tekens in bestandsnamen worden niet ondersteund",
"File name is a reserved word" : "Bestandsnaam is een gereserveerd woord",
"File name contains at least one invalid character" : "De bestandsnaam bevat ten minste één verboden teken",
+ "File name is too long" : "De bestandsnaam is te lang",
"App directory already exists" : "App directory bestaat al",
"Can't create app folder. Please fix permissions. %s" : "Kan de app map niet aanmaken, Herstel de permissies. %s",
"No source specified when installing app" : "Geen bron opgegeven bij installatie van de app",
@@ -81,8 +80,6 @@ OC.L10N.register(
"For the best results, please consider using a GNU/Linux server instead." : "Voor het beste resultaat adviseren wij het gebruik van een GNU/Linux server.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Het lijkt erop dat deze %s versie draait in een 32 bits PHP omgeving en dat open_basedir is geconfigureerd in php.ini. Dat zal leiden tot problemen met bestanden groter dan 4 GB en wordt dus sterk afgeraden.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Verwijder de open_basedir instelling in php.ini of schakel over op de 64bit PHP.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Het lijkt erop dat deze %s versie draait in een 32 bits PHP omgeving en dat cURL niet is geïnstalleerd. Dat zal leiden tot problemen met bestanden groter dan 4 GB en wordt dus sterk afgeraden.",
- "Please install the cURL extension and restart your webserver." : "Installeer de cURL extensie en herstart uw webserver.",
"Set an admin username." : "Stel de gebruikersnaam van de beheerder in.",
"Set an admin password." : "Stel een beheerderswachtwoord in.",
"Can't create or write into the data directory %s" : "Kan niets creëren of wegschrijven in datadirectory %s",
diff --git a/lib/l10n/nl.json b/lib/l10n/nl.json
index ae01293c152..5d87dc5b9c0 100644
--- a/lib/l10n/nl.json
+++ b/lib/l10n/nl.json
@@ -35,14 +35,13 @@
"_%n hour ago_::_%n hours ago_" : ["%n uur geleden","%n uur geleden"],
"_%n minute ago_::_%n minutes ago_" : ["%n minuut geleden","%n minuten geleden"],
"seconds ago" : "seconden geleden",
- "Database Error" : "Database fout",
- "Please contact your system administrator." : "Neem contact op met uw systeembeheerder.",
"web services under your control" : "Webdiensten in eigen beheer",
"Empty filename is not allowed" : "Een lege bestandsnaam is niet toegestaan",
"Dot files are not allowed" : "Punt bestanden zijn niet toegestaan",
"4-byte characters are not supported in file names" : "4-byte tekens in bestandsnamen worden niet ondersteund",
"File name is a reserved word" : "Bestandsnaam is een gereserveerd woord",
"File name contains at least one invalid character" : "De bestandsnaam bevat ten minste één verboden teken",
+ "File name is too long" : "De bestandsnaam is te lang",
"App directory already exists" : "App directory bestaat al",
"Can't create app folder. Please fix permissions. %s" : "Kan de app map niet aanmaken, Herstel de permissies. %s",
"No source specified when installing app" : "Geen bron opgegeven bij installatie van de app",
@@ -79,8 +78,6 @@
"For the best results, please consider using a GNU/Linux server instead." : "Voor het beste resultaat adviseren wij het gebruik van een GNU/Linux server.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Het lijkt erop dat deze %s versie draait in een 32 bits PHP omgeving en dat open_basedir is geconfigureerd in php.ini. Dat zal leiden tot problemen met bestanden groter dan 4 GB en wordt dus sterk afgeraden.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Verwijder de open_basedir instelling in php.ini of schakel over op de 64bit PHP.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Het lijkt erop dat deze %s versie draait in een 32 bits PHP omgeving en dat cURL niet is geïnstalleerd. Dat zal leiden tot problemen met bestanden groter dan 4 GB en wordt dus sterk afgeraden.",
- "Please install the cURL extension and restart your webserver." : "Installeer de cURL extensie en herstart uw webserver.",
"Set an admin username." : "Stel de gebruikersnaam van de beheerder in.",
"Set an admin password." : "Stel een beheerderswachtwoord in.",
"Can't create or write into the data directory %s" : "Kan niets creëren of wegschrijven in datadirectory %s",
diff --git a/lib/l10n/pl.js b/lib/l10n/pl.js
index 495eb665306..0be4d823a0d 100644
--- a/lib/l10n/pl.js
+++ b/lib/l10n/pl.js
@@ -8,9 +8,15 @@ OC.L10N.register(
"Sample configuration detected" : "Wykryto przykładową konfigurację",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Wykryto skopiowanie przykładowej konfiguracji. To może popsuć Twoją instalację i nie jest wspierane. Proszę przeczytać dokumentację przed dokonywaniem zmian w config.php",
"PHP %s or higher is required." : "PHP %s lub wyższe jest wymagane.",
+ "PHP with a version lower than %s is required." : "Wersja PHP jest niższa niż %s, która jest wymagana.",
"Following databases are supported: %s" : "Obsługiwane są następujące bazy danych: %s",
+ "The command line tool %s could not be found" : "Narzędzie konsoli %s nie zostało znalezione",
"The library %s is not available." : "Biblioteka %s nie jest dostępna.",
+ "Library %s with a version higher than %s is required - available version %s." : "Biblioteka %s w wersji wyższej niż %s, która jest wymagana - dostępna wersja %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Biblioteka w wersji %s jest niższa niż %s, która jest wymagana - dostępna wersja %s.",
"Following platforms are supported: %s" : "Obsługiwane są następujące platformy: %s",
+ "ownCloud %s or higher is required." : "ownCloud %s jest w wersji wyższej niż wymagana.",
+ "ownCloud with a version lower than %s is required." : "ownCloud jest w wersji niższej niż wymagana wersja %s",
"Help" : "Pomoc",
"Personal" : "Osobiste",
"Users" : "Użytkownicy",
@@ -29,8 +35,6 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n godzinę temu","%n godzin temu","%n godzin temu"],
"_%n minute ago_::_%n minutes ago_" : ["%n minute temu","%n minut temu","%n minut temu"],
"seconds ago" : "sekund temu",
- "Database Error" : "Błąd bazy danych",
- "Please contact your system administrator." : "Proszę skontaktować się z administratorem sytemu.",
"web services under your control" : "Kontrolowane serwisy",
"App directory already exists" : "Katalog aplikacji już isnieje",
"Can't create app folder. Please fix permissions. %s" : "Nie mogę utworzyć katalogu aplikacji. Proszę popraw uprawnienia. %s",
@@ -66,7 +70,6 @@ OC.L10N.register(
"PostgreSQL username and/or password not valid" : "PostgreSQL: Nazwa użytkownika i/lub hasło jest niepoprawne",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nie jest wspierany i %s nie będzie działać poprawnie na tej platformie. Używasz na własne ryzyko!",
"For the best results, please consider using a GNU/Linux server instead." : "Aby uzyskać najlepsze rezultaty, rozważ w to miejsce użycie serwera GNU/Linux.",
- "Please install the cURL extension and restart your webserver." : "Zainstaluj rozszerzenie cURL, a następnie zrestartuj swój serwer web.",
"Set an admin username." : "Ustaw nazwę administratora.",
"Set an admin password." : "Ustaw hasło administratora.",
"Can't create or write into the data directory %s" : "Nie można tworzyć ani zapisywać w katalogu %s",
diff --git a/lib/l10n/pl.json b/lib/l10n/pl.json
index e3d38cdbf5a..12de24755d6 100644
--- a/lib/l10n/pl.json
+++ b/lib/l10n/pl.json
@@ -6,9 +6,15 @@
"Sample configuration detected" : "Wykryto przykładową konfigurację",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Wykryto skopiowanie przykładowej konfiguracji. To może popsuć Twoją instalację i nie jest wspierane. Proszę przeczytać dokumentację przed dokonywaniem zmian w config.php",
"PHP %s or higher is required." : "PHP %s lub wyższe jest wymagane.",
+ "PHP with a version lower than %s is required." : "Wersja PHP jest niższa niż %s, która jest wymagana.",
"Following databases are supported: %s" : "Obsługiwane są następujące bazy danych: %s",
+ "The command line tool %s could not be found" : "Narzędzie konsoli %s nie zostało znalezione",
"The library %s is not available." : "Biblioteka %s nie jest dostępna.",
+ "Library %s with a version higher than %s is required - available version %s." : "Biblioteka %s w wersji wyższej niż %s, która jest wymagana - dostępna wersja %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Biblioteka w wersji %s jest niższa niż %s, która jest wymagana - dostępna wersja %s.",
"Following platforms are supported: %s" : "Obsługiwane są następujące platformy: %s",
+ "ownCloud %s or higher is required." : "ownCloud %s jest w wersji wyższej niż wymagana.",
+ "ownCloud with a version lower than %s is required." : "ownCloud jest w wersji niższej niż wymagana wersja %s",
"Help" : "Pomoc",
"Personal" : "Osobiste",
"Users" : "Użytkownicy",
@@ -27,8 +33,6 @@
"_%n hour ago_::_%n hours ago_" : ["%n godzinę temu","%n godzin temu","%n godzin temu"],
"_%n minute ago_::_%n minutes ago_" : ["%n minute temu","%n minut temu","%n minut temu"],
"seconds ago" : "sekund temu",
- "Database Error" : "Błąd bazy danych",
- "Please contact your system administrator." : "Proszę skontaktować się z administratorem sytemu.",
"web services under your control" : "Kontrolowane serwisy",
"App directory already exists" : "Katalog aplikacji już isnieje",
"Can't create app folder. Please fix permissions. %s" : "Nie mogę utworzyć katalogu aplikacji. Proszę popraw uprawnienia. %s",
@@ -64,7 +68,6 @@
"PostgreSQL username and/or password not valid" : "PostgreSQL: Nazwa użytkownika i/lub hasło jest niepoprawne",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nie jest wspierany i %s nie będzie działać poprawnie na tej platformie. Używasz na własne ryzyko!",
"For the best results, please consider using a GNU/Linux server instead." : "Aby uzyskać najlepsze rezultaty, rozważ w to miejsce użycie serwera GNU/Linux.",
- "Please install the cURL extension and restart your webserver." : "Zainstaluj rozszerzenie cURL, a następnie zrestartuj swój serwer web.",
"Set an admin username." : "Ustaw nazwę administratora.",
"Set an admin password." : "Ustaw hasło administratora.",
"Can't create or write into the data directory %s" : "Nie można tworzyć ani zapisywać w katalogu %s",
diff --git a/lib/l10n/pt_BR.js b/lib/l10n/pt_BR.js
index b62121330da..07d1eb39fbf 100644
--- a/lib/l10n/pt_BR.js
+++ b/lib/l10n/pt_BR.js
@@ -37,13 +37,13 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["","ha %n horas"],
"_%n minute ago_::_%n minutes ago_" : ["","ha %n minutos"],
"seconds ago" : "segundos atrás",
- "Database Error" : "Erro no Banco de Dados",
- "Please contact your system administrator." : "Por favor cotactar seu administrador do sistema.",
"web services under your control" : "serviços web sob seu controle",
"Empty filename is not allowed" : "Um nome de arquivo vazio não é permitido.",
"Dot files are not allowed" : "Dot arquivos não são permitidos",
"4-byte characters are not supported in file names" : "Caracteres de 4-bytes não são suportados em nomes de arquivos",
"File name is a reserved word" : "O nome do arquivo é uma palavra reservada",
+ "File name contains at least one invalid character" : "O nome do arquivo contém pelo menos um caractere inválido",
+ "File name is too long" : "O nome do arquivo é muito longo",
"App directory already exists" : "Diretório App já existe",
"Can't create app folder. Please fix permissions. %s" : "Não é possível criar pasta app. Corrija as permissões. %s",
"No source specified when installing app" : "Nenhuma fonte foi especificada enquanto instalava o aplicativo",
@@ -80,8 +80,6 @@ OC.L10N.register(
"For the best results, please consider using a GNU/Linux server instead." : "Para obter os melhores resultados, por favor, considere o uso de um servidor GNU/Linux em seu lugar.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Aparentemente a instância %s está rodando em um ambiente PHP de 32bit e o open_basedir foi configurado no php.ini. Isto pode gerar problemas com arquivos maiores que 4GB e é altamente desencorajado.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Por favor, remova a configuração de open_basedir de seu php.ini ou altere o PHP para 64bit.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Aparentemente a instância %s está rodando em um ambiente PHP de 32bit e o cURL não está instalado. Isto pode gerar problemas com arquivos maiores que 4GB e é altamente desencorajado.",
- "Please install the cURL extension and restart your webserver." : "Por favor, instale a extensão cURL e reinicie seu servidor web.",
"Set an admin username." : "Defina um nome do usuário administrador.",
"Set an admin password." : "Defina uma senha de administrador.",
"Can't create or write into the data directory %s" : "Não é possível criar ou gravar no diretório de dados %s",
diff --git a/lib/l10n/pt_BR.json b/lib/l10n/pt_BR.json
index fccbd744b38..8b356bd88fc 100644
--- a/lib/l10n/pt_BR.json
+++ b/lib/l10n/pt_BR.json
@@ -35,13 +35,13 @@
"_%n hour ago_::_%n hours ago_" : ["","ha %n horas"],
"_%n minute ago_::_%n minutes ago_" : ["","ha %n minutos"],
"seconds ago" : "segundos atrás",
- "Database Error" : "Erro no Banco de Dados",
- "Please contact your system administrator." : "Por favor cotactar seu administrador do sistema.",
"web services under your control" : "serviços web sob seu controle",
"Empty filename is not allowed" : "Um nome de arquivo vazio não é permitido.",
"Dot files are not allowed" : "Dot arquivos não são permitidos",
"4-byte characters are not supported in file names" : "Caracteres de 4-bytes não são suportados em nomes de arquivos",
"File name is a reserved word" : "O nome do arquivo é uma palavra reservada",
+ "File name contains at least one invalid character" : "O nome do arquivo contém pelo menos um caractere inválido",
+ "File name is too long" : "O nome do arquivo é muito longo",
"App directory already exists" : "Diretório App já existe",
"Can't create app folder. Please fix permissions. %s" : "Não é possível criar pasta app. Corrija as permissões. %s",
"No source specified when installing app" : "Nenhuma fonte foi especificada enquanto instalava o aplicativo",
@@ -78,8 +78,6 @@
"For the best results, please consider using a GNU/Linux server instead." : "Para obter os melhores resultados, por favor, considere o uso de um servidor GNU/Linux em seu lugar.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Aparentemente a instância %s está rodando em um ambiente PHP de 32bit e o open_basedir foi configurado no php.ini. Isto pode gerar problemas com arquivos maiores que 4GB e é altamente desencorajado.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Por favor, remova a configuração de open_basedir de seu php.ini ou altere o PHP para 64bit.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Aparentemente a instância %s está rodando em um ambiente PHP de 32bit e o cURL não está instalado. Isto pode gerar problemas com arquivos maiores que 4GB e é altamente desencorajado.",
- "Please install the cURL extension and restart your webserver." : "Por favor, instale a extensão cURL e reinicie seu servidor web.",
"Set an admin username." : "Defina um nome do usuário administrador.",
"Set an admin password." : "Defina uma senha de administrador.",
"Can't create or write into the data directory %s" : "Não é possível criar ou gravar no diretório de dados %s",
diff --git a/lib/l10n/pt_PT.js b/lib/l10n/pt_PT.js
index 517940c527c..7d586b4d628 100644
--- a/lib/l10n/pt_PT.js
+++ b/lib/l10n/pt_PT.js
@@ -37,14 +37,13 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["","%n horas atrás"],
"_%n minute ago_::_%n minutes ago_" : ["","%n minutos atrás"],
"seconds ago" : "Minutos atrás",
- "Database Error" : "Erro da Base de Dados",
- "Please contact your system administrator." : "Por favor contacte o administrador do sistema.",
"web services under your control" : "serviços web sob o seu controlo",
"Empty filename is not allowed" : "Não é permitido um ficheiro sem nome",
"Dot files are not allowed" : "Ficheiros dot não são permitidos",
"4-byte characters are not supported in file names" : "Carateres 4-byte não são suportados como nome de ficheiros",
"File name is a reserved word" : "Nome de ficheiro é uma palavra reservada",
"File name contains at least one invalid character" : "Nome de ficheiro contém pelo menos um caráter inválido",
+ "File name is too long" : "Nome do ficheiro demasiado longo",
"App directory already exists" : "A directoria da aplicação já existe",
"Can't create app folder. Please fix permissions. %s" : "Não foi possível criar a pasta da aplicação. Por favor verifique as permissões. %s",
"No source specified when installing app" : "Não foi especificada uma fonte de instalação desta aplicação",
@@ -81,8 +80,6 @@ OC.L10N.register(
"For the best results, please consider using a GNU/Linux server instead." : "Para um melhor resultado, utilize antes o servidor GNU/Linux.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Parece que a instância %s está a ser executada num ambiente PHP de 32-bits e o open_basedir foi configurado no php.ini. Isto levará a problemas com ficheiros de tamanho superior a 4 GB e é altamente desencorajado.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Por favor, remova a definição open_basedir do seu php.ini ou altere o seu PHP para 64-bits.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Parece que a instância %s está a ser executada num ambiente PHP de 32-bits e o cURL não está instalado. Isto levará a problemas com ficheiros de tamanho superior a 4 GB e é altamente desencorajado.",
- "Please install the cURL extension and restart your webserver." : "Por favor, instale a extensão cURL e reinicie o seu servidor da Web.",
"Set an admin username." : "Definir um nome de utilizador de administrador",
"Set an admin password." : "Definiar uma password de administrador",
"Can't create or write into the data directory %s" : "Não é possível criar ou escrever a directoria data %s",
diff --git a/lib/l10n/pt_PT.json b/lib/l10n/pt_PT.json
index 4110c2c4060..444e8ff4b1f 100644
--- a/lib/l10n/pt_PT.json
+++ b/lib/l10n/pt_PT.json
@@ -35,14 +35,13 @@
"_%n hour ago_::_%n hours ago_" : ["","%n horas atrás"],
"_%n minute ago_::_%n minutes ago_" : ["","%n minutos atrás"],
"seconds ago" : "Minutos atrás",
- "Database Error" : "Erro da Base de Dados",
- "Please contact your system administrator." : "Por favor contacte o administrador do sistema.",
"web services under your control" : "serviços web sob o seu controlo",
"Empty filename is not allowed" : "Não é permitido um ficheiro sem nome",
"Dot files are not allowed" : "Ficheiros dot não são permitidos",
"4-byte characters are not supported in file names" : "Carateres 4-byte não são suportados como nome de ficheiros",
"File name is a reserved word" : "Nome de ficheiro é uma palavra reservada",
"File name contains at least one invalid character" : "Nome de ficheiro contém pelo menos um caráter inválido",
+ "File name is too long" : "Nome do ficheiro demasiado longo",
"App directory already exists" : "A directoria da aplicação já existe",
"Can't create app folder. Please fix permissions. %s" : "Não foi possível criar a pasta da aplicação. Por favor verifique as permissões. %s",
"No source specified when installing app" : "Não foi especificada uma fonte de instalação desta aplicação",
@@ -79,8 +78,6 @@
"For the best results, please consider using a GNU/Linux server instead." : "Para um melhor resultado, utilize antes o servidor GNU/Linux.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Parece que a instância %s está a ser executada num ambiente PHP de 32-bits e o open_basedir foi configurado no php.ini. Isto levará a problemas com ficheiros de tamanho superior a 4 GB e é altamente desencorajado.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Por favor, remova a definição open_basedir do seu php.ini ou altere o seu PHP para 64-bits.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Parece que a instância %s está a ser executada num ambiente PHP de 32-bits e o cURL não está instalado. Isto levará a problemas com ficheiros de tamanho superior a 4 GB e é altamente desencorajado.",
- "Please install the cURL extension and restart your webserver." : "Por favor, instale a extensão cURL e reinicie o seu servidor da Web.",
"Set an admin username." : "Definir um nome de utilizador de administrador",
"Set an admin password." : "Definiar uma password de administrador",
"Can't create or write into the data directory %s" : "Não é possível criar ou escrever a directoria data %s",
diff --git a/lib/l10n/ru.js b/lib/l10n/ru.js
index 19e5b95fcd3..82ab53bdf03 100644
--- a/lib/l10n/ru.js
+++ b/lib/l10n/ru.js
@@ -37,14 +37,13 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n час назад","%n часа назад","%n часов назад"],
"_%n minute ago_::_%n minutes ago_" : ["%n минута назад","%n минуты назад","%n минут назад"],
"seconds ago" : "менее минуты",
- "Database Error" : "Ошибка базы данных",
- "Please contact your system administrator." : "Пожалуйста, свяжитесь с вашим администратором.",
"web services under your control" : "веб-сервисы под вашим управлением",
"Empty filename is not allowed" : "Пустые имена файлов не допускаются",
"Dot files are not allowed" : "Файлы начинающиеся с точки не допускаются",
"4-byte characters are not supported in file names" : "4-х байтовые символы в имени файлов не допускаются",
"File name is a reserved word" : "Имя файла является зарезервированным словом",
"File name contains at least one invalid character" : "Имя файла содержит по крайней мере один некорректный символ",
+ "File name is too long" : "Имя файла слишком длинное.",
"App directory already exists" : "Каталог приложения уже существует",
"Can't create app folder. Please fix permissions. %s" : "Не удалось создать каталог. Исправьте права доступа. %s",
"No source specified when installing app" : "Не указан источник при установке приложения",
@@ -81,8 +80,6 @@ OC.L10N.register(
"For the best results, please consider using a GNU/Linux server instead." : "Для достижения наилучших результатов, рассмотрите вариант использования сервера на GNU/Linux.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Кажется что экземпляр этого %s работает в 32-битной PHP среде и open_basedir должен быть настроен в php.ini. Это приведет к проблемам с файлами более 4 ГБ и это настоятельно не рекомендуется.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Удалите директиву open_basedir из файла php.ini или смените PHP на 64х разрядную сборку.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Кажется что экземпляр этого %s работает в 32-битной PHP среде и cURL не установлен. Это приведет к проблемам с файлами более 4 ГБ и это настоятельно не рекомендуется.",
- "Please install the cURL extension and restart your webserver." : "Установите расширение cURL и перезапустите веб-сервер.",
"Set an admin username." : "Задать имя пользователя для admin.",
"Set an admin password." : "Задать пароль для admin.",
"Can't create or write into the data directory %s" : "Невозможно создать или записать в каталог данных %s",
diff --git a/lib/l10n/ru.json b/lib/l10n/ru.json
index fbf5ab1bbf5..8bf4786e7f6 100644
--- a/lib/l10n/ru.json
+++ b/lib/l10n/ru.json
@@ -35,14 +35,13 @@
"_%n hour ago_::_%n hours ago_" : ["%n час назад","%n часа назад","%n часов назад"],
"_%n minute ago_::_%n minutes ago_" : ["%n минута назад","%n минуты назад","%n минут назад"],
"seconds ago" : "менее минуты",
- "Database Error" : "Ошибка базы данных",
- "Please contact your system administrator." : "Пожалуйста, свяжитесь с вашим администратором.",
"web services under your control" : "веб-сервисы под вашим управлением",
"Empty filename is not allowed" : "Пустые имена файлов не допускаются",
"Dot files are not allowed" : "Файлы начинающиеся с точки не допускаются",
"4-byte characters are not supported in file names" : "4-х байтовые символы в имени файлов не допускаются",
"File name is a reserved word" : "Имя файла является зарезервированным словом",
"File name contains at least one invalid character" : "Имя файла содержит по крайней мере один некорректный символ",
+ "File name is too long" : "Имя файла слишком длинное.",
"App directory already exists" : "Каталог приложения уже существует",
"Can't create app folder. Please fix permissions. %s" : "Не удалось создать каталог. Исправьте права доступа. %s",
"No source specified when installing app" : "Не указан источник при установке приложения",
@@ -79,8 +78,6 @@
"For the best results, please consider using a GNU/Linux server instead." : "Для достижения наилучших результатов, рассмотрите вариант использования сервера на GNU/Linux.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Кажется что экземпляр этого %s работает в 32-битной PHP среде и open_basedir должен быть настроен в php.ini. Это приведет к проблемам с файлами более 4 ГБ и это настоятельно не рекомендуется.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Удалите директиву open_basedir из файла php.ini или смените PHP на 64х разрядную сборку.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Кажется что экземпляр этого %s работает в 32-битной PHP среде и cURL не установлен. Это приведет к проблемам с файлами более 4 ГБ и это настоятельно не рекомендуется.",
- "Please install the cURL extension and restart your webserver." : "Установите расширение cURL и перезапустите веб-сервер.",
"Set an admin username." : "Задать имя пользователя для admin.",
"Set an admin password." : "Задать пароль для admin.",
"Can't create or write into the data directory %s" : "Невозможно создать или записать в каталог данных %s",
diff --git a/lib/l10n/sk_SK.js b/lib/l10n/sk_SK.js
index 89ac5580b37..459165e218e 100644
--- a/lib/l10n/sk_SK.js
+++ b/lib/l10n/sk_SK.js
@@ -35,8 +35,6 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["pred %n hodinou","pred %n hodinami","pred %n hodinami"],
"_%n minute ago_::_%n minutes ago_" : ["pred %n minútou","pred %n minútami","pred %n minútami"],
"seconds ago" : "pred sekundami",
- "Database Error" : "Chyba databázy",
- "Please contact your system administrator." : "Prosím kontaktujte administrátora.",
"web services under your control" : "webové služby pod Vašou kontrolou",
"App directory already exists" : "Aplikačný priečinok už existuje",
"Can't create app folder. Please fix permissions. %s" : "Nemožno vytvoriť aplikačný priečinok. Prosím upravte povolenia. %s",
@@ -74,8 +72,6 @@ OC.L10N.register(
"For the best results, please consider using a GNU/Linux server instead." : "Pre dosiahnutie najlepších výsledkov, prosím zvážte použitie GNU/Linux servera.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Zdá sa, že táto inštancia %s beží v 32-bitovom prostredí PHP a v php.ini bola nastavená voľba open_basedir. To bude zdrojom problémov so súbormi väčšími ako 4GB a dôrazne sa neodporúča.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Prosím, odstráňte nastavenie open_basedir vo vašom php.ini alebo prejdite na 64-bit PHP.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Zdá sa, že táto inštancia %s beží v 32-bitovom prostredí PHP a nie je nainštalovaná knižnica cURL. To bude zdrojom problémov so súbormi väčšími ako 4GB a dôrazne sa neodporúča.",
- "Please install the cURL extension and restart your webserver." : "Nainštalujte si prosím cURL rozšírenie a reštartujte webserver.",
"Set an admin username." : "Zadajte používateľské meno administrátora.",
"Set an admin password." : "Zadajte heslo administrátora.",
"Can't create or write into the data directory %s" : "Nemožno vytvoriť alebo zapisovať do priečinka dát %s",
diff --git a/lib/l10n/sk_SK.json b/lib/l10n/sk_SK.json
index d3fcbb80ebc..fd0d3d13892 100644
--- a/lib/l10n/sk_SK.json
+++ b/lib/l10n/sk_SK.json
@@ -33,8 +33,6 @@
"_%n hour ago_::_%n hours ago_" : ["pred %n hodinou","pred %n hodinami","pred %n hodinami"],
"_%n minute ago_::_%n minutes ago_" : ["pred %n minútou","pred %n minútami","pred %n minútami"],
"seconds ago" : "pred sekundami",
- "Database Error" : "Chyba databázy",
- "Please contact your system administrator." : "Prosím kontaktujte administrátora.",
"web services under your control" : "webové služby pod Vašou kontrolou",
"App directory already exists" : "Aplikačný priečinok už existuje",
"Can't create app folder. Please fix permissions. %s" : "Nemožno vytvoriť aplikačný priečinok. Prosím upravte povolenia. %s",
@@ -72,8 +70,6 @@
"For the best results, please consider using a GNU/Linux server instead." : "Pre dosiahnutie najlepších výsledkov, prosím zvážte použitie GNU/Linux servera.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Zdá sa, že táto inštancia %s beží v 32-bitovom prostredí PHP a v php.ini bola nastavená voľba open_basedir. To bude zdrojom problémov so súbormi väčšími ako 4GB a dôrazne sa neodporúča.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Prosím, odstráňte nastavenie open_basedir vo vašom php.ini alebo prejdite na 64-bit PHP.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Zdá sa, že táto inštancia %s beží v 32-bitovom prostredí PHP a nie je nainštalovaná knižnica cURL. To bude zdrojom problémov so súbormi väčšími ako 4GB a dôrazne sa neodporúča.",
- "Please install the cURL extension and restart your webserver." : "Nainštalujte si prosím cURL rozšírenie a reštartujte webserver.",
"Set an admin username." : "Zadajte používateľské meno administrátora.",
"Set an admin password." : "Zadajte heslo administrátora.",
"Can't create or write into the data directory %s" : "Nemožno vytvoriť alebo zapisovať do priečinka dát %s",
diff --git a/lib/l10n/sl.js b/lib/l10n/sl.js
index 5860ac00490..9746a47e004 100644
--- a/lib/l10n/sl.js
+++ b/lib/l10n/sl.js
@@ -35,8 +35,6 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["pred %n uro","pred %n urama","pred %n urami","pred %n urami"],
"_%n minute ago_::_%n minutes ago_" : ["pred %n minuto","pred %n minutama","pred %n minutami","pred %n minutami"],
"seconds ago" : "pred nekaj sekundami",
- "Database Error" : "Napaka podatkovne zbirke",
- "Please contact your system administrator." : "Stopite v stik s skrbnikom sistema.",
"web services under your control" : "spletne storitve pod vašim nadzorom",
"Empty filename is not allowed" : "Prazno polje imena datoteke ni dovoljeno.",
"Dot files are not allowed" : "Skrite datoteke niso dovoljene",
@@ -74,7 +72,6 @@ OC.L10N.register(
"PostgreSQL username and/or password not valid" : "Uporabniško ime ali geslo PostgreSQL ni veljavno",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Sistem Mac OS X ni podprt, zato %s ne bo deloval zanesljivo v tem okolju. Program uporabljate na lastno odgovornost! ",
"For the best results, please consider using a GNU/Linux server instead." : "Za najbolj še rezultate je priporočljivo uporabljati strežnik GNU/Linux.",
- "Please install the cURL extension and restart your webserver." : "Namestiti je treba razširitev cURL in nato ponovno zagnati spletni strežnik.",
"Set an admin username." : "Nastavi uporabniško ime skrbnika.",
"Set an admin password." : "Nastavi geslo skrbnika.",
"Can't create or write into the data directory %s" : "Ni mogoče zapisati podatkov v podatkovno mapo %s",
diff --git a/lib/l10n/sl.json b/lib/l10n/sl.json
index 282ebd6b939..800c9e78a35 100644
--- a/lib/l10n/sl.json
+++ b/lib/l10n/sl.json
@@ -33,8 +33,6 @@
"_%n hour ago_::_%n hours ago_" : ["pred %n uro","pred %n urama","pred %n urami","pred %n urami"],
"_%n minute ago_::_%n minutes ago_" : ["pred %n minuto","pred %n minutama","pred %n minutami","pred %n minutami"],
"seconds ago" : "pred nekaj sekundami",
- "Database Error" : "Napaka podatkovne zbirke",
- "Please contact your system administrator." : "Stopite v stik s skrbnikom sistema.",
"web services under your control" : "spletne storitve pod vašim nadzorom",
"Empty filename is not allowed" : "Prazno polje imena datoteke ni dovoljeno.",
"Dot files are not allowed" : "Skrite datoteke niso dovoljene",
@@ -72,7 +70,6 @@
"PostgreSQL username and/or password not valid" : "Uporabniško ime ali geslo PostgreSQL ni veljavno",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Sistem Mac OS X ni podprt, zato %s ne bo deloval zanesljivo v tem okolju. Program uporabljate na lastno odgovornost! ",
"For the best results, please consider using a GNU/Linux server instead." : "Za najbolj še rezultate je priporočljivo uporabljati strežnik GNU/Linux.",
- "Please install the cURL extension and restart your webserver." : "Namestiti je treba razširitev cURL in nato ponovno zagnati spletni strežnik.",
"Set an admin username." : "Nastavi uporabniško ime skrbnika.",
"Set an admin password." : "Nastavi geslo skrbnika.",
"Can't create or write into the data directory %s" : "Ni mogoče zapisati podatkov v podatkovno mapo %s",
diff --git a/lib/l10n/sr.js b/lib/l10n/sr.js
index 63d8c5feec3..dd987fe7438 100644
--- a/lib/l10n/sr.js
+++ b/lib/l10n/sr.js
@@ -1,11 +1,21 @@
OC.L10N.register(
"lib",
{
+ "See %s" : "Погледајте %s",
+ "PHP %s or higher is required." : "Потребан је ПХП %s или новији.",
+ "PHP with a version lower than %s is required." : "Потребан је ПХП старији од %s.",
+ "Following databases are supported: %s" : "Следеће базе података су подржане: %s",
+ "The library %s is not available." : "Библиотека %s није доступна.",
+ "Following platforms are supported: %s" : "Следеће платформе су подржане: %s",
+ "ownCloud %s or higher is required." : "Оунклауд %s или новији је потребан.",
"Help" : "Помоћ",
"Personal" : "Лично",
"Users" : "Корисници",
"Admin" : "Администратор",
"Recommended" : "Препоручено",
+ "App \"%s\" cannot be installed because it is not compatible with this version of ownCloud." : "Апликација „%s“ не може бити инсталирана јер није компатибилна са овим издањем Оунклауда.",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Апликација „%s“ не може бити инсталирана јер следеће зависности нису испуњене: %s",
+ "No app name specified" : "Није наведен назив апликације",
"Unknown filetype" : "Непознат тип фајла",
"Invalid image" : "Неисправна слика",
"today" : "данас",
@@ -14,22 +24,42 @@ OC.L10N.register(
"last month" : "прошлог месеца",
"_%n month ago_::_%n months ago_" : ["пре %n месец","пре %n месеца","пре %n месеци"],
"last year" : "прошле године",
- "_%n year ago_::_%n years ago_" : ["","",""],
- "_%n hour ago_::_%n hours ago_" : ["","",""],
- "_%n minute ago_::_%n minutes ago_" : ["","",""],
+ "_%n year ago_::_%n years ago_" : ["пре %n годину","пре %n године","пре %n година"],
+ "_%n hour ago_::_%n hours ago_" : ["пре %n сат","пре %n сата","пре %n сати"],
+ "_%n minute ago_::_%n minutes ago_" : ["пре %n минут","пре %n минута","пре %n минута"],
"seconds ago" : "пре неколико секунди",
"web services under your control" : "веб сервиси под вашом контролом",
+ "Empty filename is not allowed" : "Празан назив није дозвољен",
+ "Dot files are not allowed" : "Фајлови са почетном тачком у називу нису дозвољени",
+ "4-byte characters are not supported in file names" : "4-битни знакови нису подржани у називу фајлова",
+ "File name is a reserved word" : "Назив фајла је резервисана реч",
+ "File name contains at least one invalid character" : "Назив фајла садржи бар један недозвољен знак",
+ "File name is too long" : "Назив фајла је предугачак",
+ "App directory already exists" : "Директоријум апликација већ постоји",
+ "Archives of type %s are not supported" : "%s архиве нису подржане",
"Application is not enabled" : "Апликација није укључена",
"Authentication error" : "Грешка аутентификације",
"Token expired. Please reload page." : "Жетон је истекао. Поново учитајте страницу.",
+ "Unknown user" : "Непознат корисник",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Мек ОС Икс није подржан и %s неће радити исправно на овој платформи. Користите га на сопствени ризик!",
"For the best results, please consider using a GNU/Linux server instead." : "За најбоље резултате, размотрите употребу ГНУ/Линукс сервера.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Изгледа да %s ради у 32-битном ПХП окружењу а open_basedir је подешен у php.ini фајлу. То може довести до проблема са фајловима већим од 4 GB те стога није препоручљиво.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Уклоните open_basedir поставку из php.ini фајла или пређите на 64-битни ПХП.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Изгледа да %s ради у 32-битном ПХП окружењу а „cURL“ није инсталиран. То може довести до проблема са фајловима већим од 4 GB те стога није препоручљиво.",
- "Please install the cURL extension and restart your webserver." : "Инсталирајте „cURL“ проширење и поново покрените веб сервер.",
+ "Set an admin username." : "Поставите име за администратора.",
+ "Set an admin password." : "Поставите лозинку за администратора.",
+ "%s shared »%s« with you" : "%s подели „%s“ са вама",
+ "You are not allowed to share %s" : "Није вам дозвољено да делите %s",
"Could not find category \"%s\"" : "Не могу да пронађем категорију „%s“.",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Само су следећи знакови дозвољени за корисничко име: „a-z“, „A-Z“, „0-9“ и „_.@-“",
"A valid username must be provided" : "Морате унети исправно корисничко име",
- "A valid password must be provided" : "Морате унети исправну лозинку"
+ "A valid password must be provided" : "Морате унети исправну лозинку",
+ "The username is already being used" : "Корисничко име се већ користи",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "Нема драјвера базе података (скулајт, мајскул или постгрескул).",
+ "Setting locale to %s failed" : "Постављање локалитета на %s није успело",
+ "Please install one of these locales on your system and restart your webserver." : "Инсталирајте неки од ових локалитета на ваш систем и поново покрените веб сервер.",
+ "Please ask your server administrator to install the module." : "Замолите администратора вашег сервера да инсталира тај модул.",
+ "PHP module %s not installed." : "ПХП модул %s није инсталиран.",
+ "PHP setting \"%s\" is not set to \"%s\"." : "ПХП поставка „%s“ није постављена на „%s“.",
+ "PostgreSQL >= 9 required" : "Захтеван је ПостгреСкул >= 9"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/lib/l10n/sr.json b/lib/l10n/sr.json
index 49170fc3eeb..6b7eef1fa51 100644
--- a/lib/l10n/sr.json
+++ b/lib/l10n/sr.json
@@ -1,9 +1,19 @@
{ "translations": {
+ "See %s" : "Погледајте %s",
+ "PHP %s or higher is required." : "Потребан је ПХП %s или новији.",
+ "PHP with a version lower than %s is required." : "Потребан је ПХП старији од %s.",
+ "Following databases are supported: %s" : "Следеће базе података су подржане: %s",
+ "The library %s is not available." : "Библиотека %s није доступна.",
+ "Following platforms are supported: %s" : "Следеће платформе су подржане: %s",
+ "ownCloud %s or higher is required." : "Оунклауд %s или новији је потребан.",
"Help" : "Помоћ",
"Personal" : "Лично",
"Users" : "Корисници",
"Admin" : "Администратор",
"Recommended" : "Препоручено",
+ "App \"%s\" cannot be installed because it is not compatible with this version of ownCloud." : "Апликација „%s“ не може бити инсталирана јер није компатибилна са овим издањем Оунклауда.",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Апликација „%s“ не може бити инсталирана јер следеће зависности нису испуњене: %s",
+ "No app name specified" : "Није наведен назив апликације",
"Unknown filetype" : "Непознат тип фајла",
"Invalid image" : "Неисправна слика",
"today" : "данас",
@@ -12,22 +22,42 @@
"last month" : "прошлог месеца",
"_%n month ago_::_%n months ago_" : ["пре %n месец","пре %n месеца","пре %n месеци"],
"last year" : "прошле године",
- "_%n year ago_::_%n years ago_" : ["","",""],
- "_%n hour ago_::_%n hours ago_" : ["","",""],
- "_%n minute ago_::_%n minutes ago_" : ["","",""],
+ "_%n year ago_::_%n years ago_" : ["пре %n годину","пре %n године","пре %n година"],
+ "_%n hour ago_::_%n hours ago_" : ["пре %n сат","пре %n сата","пре %n сати"],
+ "_%n minute ago_::_%n minutes ago_" : ["пре %n минут","пре %n минута","пре %n минута"],
"seconds ago" : "пре неколико секунди",
"web services under your control" : "веб сервиси под вашом контролом",
+ "Empty filename is not allowed" : "Празан назив није дозвољен",
+ "Dot files are not allowed" : "Фајлови са почетном тачком у називу нису дозвољени",
+ "4-byte characters are not supported in file names" : "4-битни знакови нису подржани у називу фајлова",
+ "File name is a reserved word" : "Назив фајла је резервисана реч",
+ "File name contains at least one invalid character" : "Назив фајла садржи бар један недозвољен знак",
+ "File name is too long" : "Назив фајла је предугачак",
+ "App directory already exists" : "Директоријум апликација већ постоји",
+ "Archives of type %s are not supported" : "%s архиве нису подржане",
"Application is not enabled" : "Апликација није укључена",
"Authentication error" : "Грешка аутентификације",
"Token expired. Please reload page." : "Жетон је истекао. Поново учитајте страницу.",
+ "Unknown user" : "Непознат корисник",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Мек ОС Икс није подржан и %s неће радити исправно на овој платформи. Користите га на сопствени ризик!",
"For the best results, please consider using a GNU/Linux server instead." : "За најбоље резултате, размотрите употребу ГНУ/Линукс сервера.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Изгледа да %s ради у 32-битном ПХП окружењу а open_basedir је подешен у php.ini фајлу. То може довести до проблема са фајловима већим од 4 GB те стога није препоручљиво.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Уклоните open_basedir поставку из php.ini фајла или пређите на 64-битни ПХП.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Изгледа да %s ради у 32-битном ПХП окружењу а „cURL“ није инсталиран. То може довести до проблема са фајловима већим од 4 GB те стога није препоручљиво.",
- "Please install the cURL extension and restart your webserver." : "Инсталирајте „cURL“ проширење и поново покрените веб сервер.",
+ "Set an admin username." : "Поставите име за администратора.",
+ "Set an admin password." : "Поставите лозинку за администратора.",
+ "%s shared »%s« with you" : "%s подели „%s“ са вама",
+ "You are not allowed to share %s" : "Није вам дозвољено да делите %s",
"Could not find category \"%s\"" : "Не могу да пронађем категорију „%s“.",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Само су следећи знакови дозвољени за корисничко име: „a-z“, „A-Z“, „0-9“ и „_.@-“",
"A valid username must be provided" : "Морате унети исправно корисничко име",
- "A valid password must be provided" : "Морате унети исправну лозинку"
+ "A valid password must be provided" : "Морате унети исправну лозинку",
+ "The username is already being used" : "Корисничко име се већ користи",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "Нема драјвера базе података (скулајт, мајскул или постгрескул).",
+ "Setting locale to %s failed" : "Постављање локалитета на %s није успело",
+ "Please install one of these locales on your system and restart your webserver." : "Инсталирајте неки од ових локалитета на ваш систем и поново покрените веб сервер.",
+ "Please ask your server administrator to install the module." : "Замолите администратора вашег сервера да инсталира тај модул.",
+ "PHP module %s not installed." : "ПХП модул %s није инсталиран.",
+ "PHP setting \"%s\" is not set to \"%s\"." : "ПХП поставка „%s“ није постављена на „%s“.",
+ "PostgreSQL >= 9 required" : "Захтеван је ПостгреСкул >= 9"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/lib/l10n/sr@latin.js b/lib/l10n/sr@latin.js
index 8c9ac2acc7c..cd5f8c10816 100644
--- a/lib/l10n/sr@latin.js
+++ b/lib/l10n/sr@latin.js
@@ -19,7 +19,6 @@ OC.L10N.register(
"seconds ago" : "Pre par sekundi",
"Authentication error" : "Greška pri autentifikaciji",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nije podržan i %s neće raditi kako treba na ovoj platformi. Koristite na sopstvenu odgovornost.",
- "For the best results, please consider using a GNU/Linux server instead." : "Za najbolje rezultate uzmite u obzir korišćenje GNU/Linux servera.",
- "Please install the cURL extension and restart your webserver." : "Molimo Vas da instalirate cURL ekstenziju i da ponovo pokrenete Vaš web server."
+ "For the best results, please consider using a GNU/Linux server instead." : "Za najbolje rezultate uzmite u obzir korišćenje GNU/Linux servera."
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/lib/l10n/sr@latin.json b/lib/l10n/sr@latin.json
index ba606cfd53e..db1028fc422 100644
--- a/lib/l10n/sr@latin.json
+++ b/lib/l10n/sr@latin.json
@@ -17,7 +17,6 @@
"seconds ago" : "Pre par sekundi",
"Authentication error" : "Greška pri autentifikaciji",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nije podržan i %s neće raditi kako treba na ovoj platformi. Koristite na sopstvenu odgovornost.",
- "For the best results, please consider using a GNU/Linux server instead." : "Za najbolje rezultate uzmite u obzir korišćenje GNU/Linux servera.",
- "Please install the cURL extension and restart your webserver." : "Molimo Vas da instalirate cURL ekstenziju i da ponovo pokrenete Vaš web server."
+ "For the best results, please consider using a GNU/Linux server instead." : "Za najbolje rezultate uzmite u obzir korišćenje GNU/Linux servera."
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/lib/l10n/sv.js b/lib/l10n/sv.js
index af584df002f..54ac8eab794 100644
--- a/lib/l10n/sv.js
+++ b/lib/l10n/sv.js
@@ -35,8 +35,6 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n timme sedan","%n timmar sedan"],
"_%n minute ago_::_%n minutes ago_" : ["%n minut sedan","%n minuter sedan"],
"seconds ago" : "sekunder sedan",
- "Database Error" : "Databasfel",
- "Please contact your system administrator." : "Vänligen kontakta din systemadmiistratör",
"web services under your control" : "webbtjänster under din kontroll",
"App directory already exists" : "Appens mapp finns redan",
"Can't create app folder. Please fix permissions. %s" : "Kan inte skapa appens mapp. Var god åtgärda rättigheterna. %s",
@@ -72,7 +70,6 @@ OC.L10N.register(
"PostgreSQL username and/or password not valid" : "PostgreSQL-användarnamnet och/eller lösenordet är felaktigt",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X stöds inte och %s kommer inte att fungera korrekt på denna plattform. Använd på egen risk!",
"For the best results, please consider using a GNU/Linux server instead." : "För bästa resultat, överväg att använda en GNU/Linux server istället.",
- "Please install the cURL extension and restart your webserver." : "Vänligen installera tillägget cURL och starta om din webbserver.",
"Set an admin username." : "Ange ett användarnamn för administratören.",
"Set an admin password." : "Ange ett administratörslösenord.",
"Can't create or write into the data directory %s" : "Kan inte skapa eller skriva till data-katalogen %s",
diff --git a/lib/l10n/sv.json b/lib/l10n/sv.json
index 1fdc4457c6c..26cda92fbe8 100644
--- a/lib/l10n/sv.json
+++ b/lib/l10n/sv.json
@@ -33,8 +33,6 @@
"_%n hour ago_::_%n hours ago_" : ["%n timme sedan","%n timmar sedan"],
"_%n minute ago_::_%n minutes ago_" : ["%n minut sedan","%n minuter sedan"],
"seconds ago" : "sekunder sedan",
- "Database Error" : "Databasfel",
- "Please contact your system administrator." : "Vänligen kontakta din systemadmiistratör",
"web services under your control" : "webbtjänster under din kontroll",
"App directory already exists" : "Appens mapp finns redan",
"Can't create app folder. Please fix permissions. %s" : "Kan inte skapa appens mapp. Var god åtgärda rättigheterna. %s",
@@ -70,7 +68,6 @@
"PostgreSQL username and/or password not valid" : "PostgreSQL-användarnamnet och/eller lösenordet är felaktigt",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X stöds inte och %s kommer inte att fungera korrekt på denna plattform. Använd på egen risk!",
"For the best results, please consider using a GNU/Linux server instead." : "För bästa resultat, överväg att använda en GNU/Linux server istället.",
- "Please install the cURL extension and restart your webserver." : "Vänligen installera tillägget cURL och starta om din webbserver.",
"Set an admin username." : "Ange ett användarnamn för administratören.",
"Set an admin password." : "Ange ett administratörslösenord.",
"Can't create or write into the data directory %s" : "Kan inte skapa eller skriva till data-katalogen %s",
diff --git a/lib/l10n/tr.js b/lib/l10n/tr.js
index d2f9d6954e9..8987e7726af 100644
--- a/lib/l10n/tr.js
+++ b/lib/l10n/tr.js
@@ -37,11 +37,13 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["","%n saat önce"],
"_%n minute ago_::_%n minutes ago_" : ["","%n dakika önce"],
"seconds ago" : "saniyeler önce",
- "Database Error" : "Veritabanı Hatası",
- "Please contact your system administrator." : "Lütfen sistem yöneticiniz ile iletişime geçin.",
"web services under your control" : "denetiminizdeki web hizmetleri",
"Empty filename is not allowed" : "Boş dasya adına izin verilmiyor",
"Dot files are not allowed" : "Nokta dosyalarına izin verilmiyor",
+ "4-byte characters are not supported in file names" : "4-bayt karakterler dosya adlarında desteklenmez",
+ "File name is a reserved word" : "Dosya adı ayrılmış bir sözcüktür",
+ "File name contains at least one invalid character" : "Dosya adı en az bir geçersiz karakter içeriyor",
+ "File name is too long" : "Dosya adı çok uzun",
"App directory already exists" : "Uygulama dizini zaten mevcut",
"Can't create app folder. Please fix permissions. %s" : "Uygulama dizini oluşturulamıyor. Lütfen izinleri düzeltin. %s",
"No source specified when installing app" : "Uygulama kurulurken bir kaynak belirtilmedi",
@@ -78,8 +80,6 @@ OC.L10N.register(
"For the best results, please consider using a GNU/Linux server instead." : "En iyi sonuçlar için GNU/Linux sunucusu kullanın.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Bu %s örneğinin 32-bit PHP ortamında çalıştırıldığı ve open_basedir ayarının php.ini içerisinde yapılandırıldığı görülüyor. Bu 4 GB üzerindeki dosyalarda sorun oluşturacaktır ve kullanılması önerilmez.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Lütfen php.ini içerisindeki open_basedir ayarını kaldırın veya 64-bit PHP'ye geçin.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Bu %s örneğinin 32-bit PHP ortamında çalıştırıldığı ve cURL'nin kurulu olmadığı görülüyor. Bu 4 GB üzerindeki dosyalarda sorun oluşturacaktır ve kullanılması önerilmez.",
- "Please install the cURL extension and restart your webserver." : "Lütfen cURL eklentisini yükleyin ve web sunucusunu yeniden başlatın.",
"Set an admin username." : "Bir yönetici kullanıcı adı ayarlayın.",
"Set an admin password." : "Bir yönetici kullanıcı parolası ayarlayın.",
"Can't create or write into the data directory %s" : "Veri dizini %s oluşturulamıyor veya yazılamıyor",
diff --git a/lib/l10n/tr.json b/lib/l10n/tr.json
index 8866df391b9..95a4c7e48d9 100644
--- a/lib/l10n/tr.json
+++ b/lib/l10n/tr.json
@@ -35,11 +35,13 @@
"_%n hour ago_::_%n hours ago_" : ["","%n saat önce"],
"_%n minute ago_::_%n minutes ago_" : ["","%n dakika önce"],
"seconds ago" : "saniyeler önce",
- "Database Error" : "Veritabanı Hatası",
- "Please contact your system administrator." : "Lütfen sistem yöneticiniz ile iletişime geçin.",
"web services under your control" : "denetiminizdeki web hizmetleri",
"Empty filename is not allowed" : "Boş dasya adına izin verilmiyor",
"Dot files are not allowed" : "Nokta dosyalarına izin verilmiyor",
+ "4-byte characters are not supported in file names" : "4-bayt karakterler dosya adlarında desteklenmez",
+ "File name is a reserved word" : "Dosya adı ayrılmış bir sözcüktür",
+ "File name contains at least one invalid character" : "Dosya adı en az bir geçersiz karakter içeriyor",
+ "File name is too long" : "Dosya adı çok uzun",
"App directory already exists" : "Uygulama dizini zaten mevcut",
"Can't create app folder. Please fix permissions. %s" : "Uygulama dizini oluşturulamıyor. Lütfen izinleri düzeltin. %s",
"No source specified when installing app" : "Uygulama kurulurken bir kaynak belirtilmedi",
@@ -76,8 +78,6 @@
"For the best results, please consider using a GNU/Linux server instead." : "En iyi sonuçlar için GNU/Linux sunucusu kullanın.",
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Bu %s örneğinin 32-bit PHP ortamında çalıştırıldığı ve open_basedir ayarının php.ini içerisinde yapılandırıldığı görülüyor. Bu 4 GB üzerindeki dosyalarda sorun oluşturacaktır ve kullanılması önerilmez.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Lütfen php.ini içerisindeki open_basedir ayarını kaldırın veya 64-bit PHP'ye geçin.",
- "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4 GB and is highly discouraged." : "Bu %s örneğinin 32-bit PHP ortamında çalıştırıldığı ve cURL'nin kurulu olmadığı görülüyor. Bu 4 GB üzerindeki dosyalarda sorun oluşturacaktır ve kullanılması önerilmez.",
- "Please install the cURL extension and restart your webserver." : "Lütfen cURL eklentisini yükleyin ve web sunucusunu yeniden başlatın.",
"Set an admin username." : "Bir yönetici kullanıcı adı ayarlayın.",
"Set an admin password." : "Bir yönetici kullanıcı parolası ayarlayın.",
"Can't create or write into the data directory %s" : "Veri dizini %s oluşturulamıyor veya yazılamıyor",
diff --git a/lib/l10n/uk.js b/lib/l10n/uk.js
index 25526730e49..0689e6b1fb2 100644
--- a/lib/l10n/uk.js
+++ b/lib/l10n/uk.js
@@ -26,8 +26,6 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["","","%n годин тому"],
"_%n minute ago_::_%n minutes ago_" : ["","","%n хвилин тому"],
"seconds ago" : "секунди тому",
- "Database Error" : "Помилка бази даних",
- "Please contact your system administrator." : "Будь ласка, зверніться до системного адміністратора.",
"web services under your control" : "підконтрольні Вам веб-сервіси",
"App directory already exists" : "Тека додатку вже існує",
"Can't create app folder. Please fix permissions. %s" : "Неможливо створити теку додатку. Будь ласка, виправте права доступу. %s",
@@ -64,7 +62,6 @@ OC.L10N.register(
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X не підтримується і %s не буде коректно працювати на цій платформі. Випробовуєте на свій риск!",
"For the best results, please consider using a GNU/Linux server instead." : "Для кращих результатів розгляньте можливість використання GNU/Linux серверу",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Будь ласка, видаліть параметр open_basedir у вашому php.ini або перейдіть на 64-бітний PHP.",
- "Please install the cURL extension and restart your webserver." : "Будь ласка, встановіть cURL розширення і перезапустіть ваш веб-сервер.",
"Set an admin username." : "Встановіть ім'я адміністратора.",
"Set an admin password." : "Встановіть пароль адміністратора.",
"Can't create or write into the data directory %s" : "Неможливо створити або записати каталог даних %s",
diff --git a/lib/l10n/uk.json b/lib/l10n/uk.json
index 928dc116ef4..587d30c1bc3 100644
--- a/lib/l10n/uk.json
+++ b/lib/l10n/uk.json
@@ -24,8 +24,6 @@
"_%n hour ago_::_%n hours ago_" : ["","","%n годин тому"],
"_%n minute ago_::_%n minutes ago_" : ["","","%n хвилин тому"],
"seconds ago" : "секунди тому",
- "Database Error" : "Помилка бази даних",
- "Please contact your system administrator." : "Будь ласка, зверніться до системного адміністратора.",
"web services under your control" : "підконтрольні Вам веб-сервіси",
"App directory already exists" : "Тека додатку вже існує",
"Can't create app folder. Please fix permissions. %s" : "Неможливо створити теку додатку. Будь ласка, виправте права доступу. %s",
@@ -62,7 +60,6 @@
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X не підтримується і %s не буде коректно працювати на цій платформі. Випробовуєте на свій риск!",
"For the best results, please consider using a GNU/Linux server instead." : "Для кращих результатів розгляньте можливість використання GNU/Linux серверу",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Будь ласка, видаліть параметр open_basedir у вашому php.ini або перейдіть на 64-бітний PHP.",
- "Please install the cURL extension and restart your webserver." : "Будь ласка, встановіть cURL розширення і перезапустіть ваш веб-сервер.",
"Set an admin username." : "Встановіть ім'я адміністратора.",
"Set an admin password." : "Встановіть пароль адміністратора.",
"Can't create or write into the data directory %s" : "Неможливо створити або записати каталог даних %s",
diff --git a/lib/l10n/zh_CN.js b/lib/l10n/zh_CN.js
index 6bb7a875877..11d1a36f8f6 100644
--- a/lib/l10n/zh_CN.js
+++ b/lib/l10n/zh_CN.js
@@ -56,7 +56,6 @@ OC.L10N.register(
"PostgreSQL username and/or password not valid" : "PostgreSQL 数据库用户名和/或密码无效",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X 不被支持并且 %s 在这个平台上无法正常工作。请自行承担风险!",
"For the best results, please consider using a GNU/Linux server instead." : "为了达到最好的效果,请考虑使用 GNU/Linux 服务器。",
- "Please install the cURL extension and restart your webserver." : "请安装 cURL 扩展并重启网页服务器.",
"Set an admin username." : "请设置一个管理员用户名。",
"Set an admin password." : "请设置一个管理员密码。",
"%s shared »%s« with you" : "%s 向您分享了 »%s«",
diff --git a/lib/l10n/zh_CN.json b/lib/l10n/zh_CN.json
index ecc580a4689..e5d47c7cef8 100644
--- a/lib/l10n/zh_CN.json
+++ b/lib/l10n/zh_CN.json
@@ -54,7 +54,6 @@
"PostgreSQL username and/or password not valid" : "PostgreSQL 数据库用户名和/或密码无效",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X 不被支持并且 %s 在这个平台上无法正常工作。请自行承担风险!",
"For the best results, please consider using a GNU/Linux server instead." : "为了达到最好的效果,请考虑使用 GNU/Linux 服务器。",
- "Please install the cURL extension and restart your webserver." : "请安装 cURL 扩展并重启网页服务器.",
"Set an admin username." : "请设置一个管理员用户名。",
"Set an admin password." : "请设置一个管理员密码。",
"%s shared »%s« with you" : "%s 向您分享了 »%s«",
diff --git a/lib/private/allconfig.php b/lib/private/allconfig.php
index b8bba7986e6..8d4f13e5b9c 100644
--- a/lib/private/allconfig.php
+++ b/lib/private/allconfig.php
@@ -196,7 +196,7 @@ class AllConfig implements \OCP\IConfig {
'userid' => $userId,
'appid' => $appName,
'configkey' => $key,
- ], ['configvalue', 'userid', 'appid']);
+ ], ['configkey', 'userid', 'appid']);
$affectedRows = 1;
} elseif ($exists) {
$data = array($value, $userId, $appName, $key);
diff --git a/lib/private/app.php b/lib/private/app.php
index 9ae4ae30d74..d30ada0391a 100644
--- a/lib/private/app.php
+++ b/lib/private/app.php
@@ -60,7 +60,7 @@ class OC_App {
* @return bool
*
* This function walks through the ownCloud directory and loads all apps
- * it can find. A directory contains an app if the file /appinfo/app.php
+ * it can find. A directory contains an app if the file /appinfo/info.xml
* exists.
*
* if $types is set, only apps of those types will be loaded
@@ -319,29 +319,6 @@ class OC_App {
}
/**
- * adds an entry to the navigation
- *
- * @param array $data array containing the data
- * @return bool
- *
- * This function adds a new entry to the navigation visible to users. $data
- * is an associative array.
- * The following keys are required:
- * - id: unique id for this entry ('addressbook_index')
- * - href: link to the page
- * - name: Human readable name ('Addressbook')
- *
- * The following keys are optional:
- * - icon: path to the icon of the app
- * - order: integer, that influences the position of your application in
- * the navigation. Lower values come first.
- */
- public static function addNavigationEntry($data) {
- OC::$server->getNavigationManager()->add($data);
- return true;
- }
-
- /**
* marks a navigation entry as active
*
* @param string $id id of the entry
@@ -350,6 +327,8 @@ class OC_App {
* This function sets a navigation entry as active and removes the 'active'
* property from all other entries. The templates can use this for
* highlighting the current position of the user.
+ *
+ * @deprecated Use \OC::$server->getNavigationManager()->setActiveEntry() instead
*/
public static function setActiveNavigationEntry($id) {
OC::$server->getNavigationManager()->setActiveEntry($id);
@@ -380,6 +359,8 @@ class OC_App {
*
* This function returns the id of the active navigation entry (set by
* setActiveNavigationEntry
+ *
+ * @deprecated Use \OC::$server->getNavigationManager()->getActiveEntry() instead
*/
public static function getActiveNavigationEntry() {
return OC::$server->getNavigationManager()->getActiveEntry();
@@ -751,7 +732,7 @@ class OC_App {
if (is_resource($dh)) {
while (($file = readdir($dh)) !== false) {
- if ($file[0] != '.' and is_file($apps_dir['path'] . '/' . $file . '/appinfo/app.php')) {
+ if ($file[0] != '.' and is_file($apps_dir['path'] . '/' . $file . '/appinfo/info.xml')) {
$apps[] = $file;
@@ -900,7 +881,7 @@ class OC_App {
/**
* get a list of all apps on apps.owncloud.com
- *
+ *
* @return array|false multi-dimensional array of apps.
* Keys: id, name, type, typename, personid, license, detailpage, preview, changed, description
*/
diff --git a/lib/private/appframework/db/db.php b/lib/private/appframework/db/db.php
index 0824e108f49..a9c6fc1e9c7 100644
--- a/lib/private/appframework/db/db.php
+++ b/lib/private/appframework/db/db.php
@@ -127,6 +127,7 @@ class Db implements IDb {
* @param array $input data that should be inserted into the table (column name => value)
* @param array|null $compare List of values that should be checked for "if not exists"
* If this is null or an empty array, all keys of $input will be compared
+ * Please note: text fields (clob) must not be used in the compare array
* @return int number of inserted rows
* @throws \Doctrine\DBAL\DBALException
*/
diff --git a/lib/private/cache/fileglobalgc.php b/lib/private/cache/fileglobalgc.php
index 039992718ab..b07e886f652 100644
--- a/lib/private/cache/fileglobalgc.php
+++ b/lib/private/cache/fileglobalgc.php
@@ -6,6 +6,9 @@ use OC\BackgroundJob\Job;
use OCP\IConfig;
class FileGlobalGC extends Job {
+ // only do cleanup every 5 minutes
+ const CLEANUP_TTL_SEC = 300;
+
public function run($argument) {
$this->gc(\OC::$server->getConfig(), $this->getCacheDir());
}
@@ -39,8 +42,7 @@ class FileGlobalGC extends Job {
public function gc(IConfig $config, $cacheDir) {
$lastRun = $config->getAppValue('core', 'global_cache_gc_lastrun', 0);
$now = time();
- if (($now - $lastRun) < 300) {
- // only do cleanup every 5 minutes
+ if (($now - $lastRun) < self::CLEANUP_TTL_SEC) {
return;
}
$config->setAppValue('core', 'global_cache_gc_lastrun', $now);
@@ -48,6 +50,8 @@ class FileGlobalGC extends Job {
return;
}
$paths = $this->getExpiredPaths($cacheDir, $now);
- array_walk($paths, 'unlink');
+ array_walk($paths, function($file) {
+ unlink($file);
+ });
}
}
diff --git a/lib/private/connector/sabre/custompropertiesbackend.php b/lib/private/connector/sabre/custompropertiesbackend.php
index 76ac8b84ef9..6827cb9ae0d 100644
--- a/lib/private/connector/sabre/custompropertiesbackend.php
+++ b/lib/private/connector/sabre/custompropertiesbackend.php
@@ -29,6 +29,7 @@ use Sabre\DAV\PropertyStorage\Backend\BackendInterface;
use Sabre\DAV\PropFind;
use Sabre\DAV\PropPatch;
use Sabre\DAV\Tree;
+use Sabre\DAV\Exception\NotFound;
class CustomPropertiesBackend implements BackendInterface {
@@ -94,8 +95,19 @@ class CustomPropertiesBackend implements BackendInterface {
* @return void
*/
public function propFind($path, PropFind $propFind) {
- $node = $this->tree->getNodeForPath($path);
- if (!($node instanceof Node)) {
+ try {
+ $node = $this->tree->getNodeForPath($path);
+ if (!($node instanceof Node)) {
+ return;
+ }
+ } catch (NotFound $e) {
+ // in some rare (buggy) cases the node might not be found,
+ // we catch the exception to prevent breaking the whole list with a 404
+ // (soft fail)
+ \OC::$server->getLogger()->warning(
+ 'Could not get node for path: \"' . $path . '\" : ' . $e->getMessage(),
+ array('app' => 'files')
+ );
return;
}
diff --git a/lib/private/db/adapter.php b/lib/private/db/adapter.php
index de7b04c74db..8c251c82075 100644
--- a/lib/private/db/adapter.php
+++ b/lib/private/db/adapter.php
@@ -46,6 +46,7 @@ class Adapter {
* @param array $input data that should be inserted into the table (column name => value)
* @param array|null $compare List of values that should be checked for "if not exists"
* If this is null or an empty array, all keys of $input will be compared
+ * Please note: text fields (clob) must not be used in the compare array
* @return int number of inserted rows
* @throws \Doctrine\DBAL\DBALException
*/
diff --git a/lib/private/db/adaptersqlite.php b/lib/private/db/adaptersqlite.php
index 31f88940f0b..a9106967333 100644
--- a/lib/private/db/adaptersqlite.php
+++ b/lib/private/db/adaptersqlite.php
@@ -25,6 +25,7 @@ class AdapterSqlite extends Adapter {
* @param array $input data that should be inserted into the table (column name => value)
* @param array|null $compare List of values that should be checked for "if not exists"
* If this is null or an empty array, all keys of $input will be compared
+ * Please note: text fields (clob) must not be used in the compare array
* @return int number of inserted rows
* @throws \Doctrine\DBAL\DBALException
*/
diff --git a/lib/private/db/connection.php b/lib/private/db/connection.php
index 023e265f242..dd1a9da6747 100644
--- a/lib/private/db/connection.php
+++ b/lib/private/db/connection.php
@@ -30,7 +30,7 @@ class Connection extends \Doctrine\DBAL\Connection implements IDBConnection {
return parent::connect();
} catch (DBALException $e) {
// throw a new exception to prevent leaking info from the stacktrace
- throw new DBALException($e->getMessage(), $e->getCode());
+ throw new DBALException('Failed to connect to the database: ' . $e->getMessage(), $e->getCode());
}
}
@@ -163,6 +163,7 @@ class Connection extends \Doctrine\DBAL\Connection implements IDBConnection {
* @param array $input data that should be inserted into the table (column name => value)
* @param array|null $compare List of values that should be checked for "if not exists"
* If this is null or an empty array, all keys of $input will be compared
+ * Please note: text fields (clob) must not be used in the compare array
* @return int number of inserted rows
* @throws \Doctrine\DBAL\DBALException
*/
diff --git a/lib/private/files/cache/cache.php b/lib/private/files/cache/cache.php
index 64661ca1157..670ac2ec524 100644
--- a/lib/private/files/cache/cache.php
+++ b/lib/private/files/cache/cache.php
@@ -245,9 +245,6 @@ class Cache {
$queryParts[] = '`storage`';
$params[] = $this->getNumericStorageId();
- $params = array_map(function($item) {
- return trim($item, "`");
- }, $params);
$queryParts = array_map(function($item) {
return trim($item, "`");
}, $queryParts);
diff --git a/lib/private/files/cache/watcher.php b/lib/private/files/cache/watcher.php
index f4572895b09..22c3fb202c3 100644
--- a/lib/private/files/cache/watcher.php
+++ b/lib/private/files/cache/watcher.php
@@ -52,6 +52,13 @@ class Watcher {
}
/**
+ * @return int either \OC\Files\Cache\Watcher::CHECK_NEVER, \OC\Files\Cache\Watcher::CHECK_ONCE, \OC\Files\Cache\Watcher::CHECK_ALWAYS
+ */
+ public function getPolicy() {
+ return $this->watchPolicy;
+ }
+
+ /**
* check $path for updates
*
* @param string $path
diff --git a/lib/private/files/mount/mountpoint.php b/lib/private/files/mount/mountpoint.php
index 85edb7cb570..a187f4db109 100644
--- a/lib/private/files/mount/mountpoint.php
+++ b/lib/private/files/mount/mountpoint.php
@@ -71,9 +71,10 @@ class MountPoint implements IMountPoint {
}
$mountpoint = $this->formatPath($mountpoint);
+ $this->mountPoint = $mountpoint;
if ($storage instanceof Storage) {
$this->class = get_class($storage);
- $this->storage = $this->loader->wrap($mountpoint, $storage);
+ $this->storage = $this->loader->wrap($this, $storage);
} else {
// Update old classes to new namespace
if (strpos($storage, 'OC_Filestorage_') !== false) {
@@ -82,7 +83,6 @@ class MountPoint implements IMountPoint {
$this->class = $storage;
$this->arguments = $arguments;
}
- $this->mountPoint = $mountpoint;
}
/**
@@ -113,7 +113,7 @@ class MountPoint implements IMountPoint {
if (class_exists($this->class)) {
try {
- return $this->loader->getInstance($this->mountPoint, $this->class, $this->arguments);
+ return $this->loader->getInstance($this, $this->class, $this->arguments);
} catch (\Exception $exception) {
$this->invalidStorage = true;
if ($this->mountPoint === '/') {
@@ -195,7 +195,7 @@ class MountPoint implements IMountPoint {
$storage = $this->getStorage();
// storage can be null if it couldn't be initialized
if ($storage != null) {
- $this->storage = $wrapper($this->mountPoint, $storage);
+ $this->storage = $wrapper($this->mountPoint, $storage, $this);
}
}
@@ -209,4 +209,13 @@ class MountPoint implements IMountPoint {
public function getOption($name, $default) {
return isset($this->mountOptions[$name]) ? $this->mountOptions[$name] : $default;
}
+
+ /**
+ * Get all options for the mount
+ *
+ * @return array
+ */
+ public function getOptions() {
+ return $this->mountOptions;
+ }
}
diff --git a/lib/private/files/storage/common.php b/lib/private/files/storage/common.php
index 031a2f1cb7a..11cf3405fd9 100644
--- a/lib/private/files/storage/common.php
+++ b/lib/private/files/storage/common.php
@@ -35,6 +35,8 @@ abstract class Common implements \OC\Files\Storage\Storage {
protected $watcher;
protected $storageCache;
+ protected $mountOptions = [];
+
/**
* @var string[]
*/
@@ -330,7 +332,8 @@ abstract class Common implements \OC\Files\Storage\Storage {
}
if (!isset($this->watcher)) {
$this->watcher = new Watcher($storage);
- $this->watcher->setPolicy(\OC::$server->getConfig()->getSystemValue('filesystem_check_changes', Watcher::CHECK_ONCE));
+ $globalPolicy = \OC::$server->getConfig()->getSystemValue('filesystem_check_changes', Watcher::CHECK_ONCE);
+ $this->watcher->setPolicy($this->getMountOption('filesystem_check_changes', $globalPolicy));
}
return $this->watcher;
}
@@ -512,9 +515,25 @@ abstract class Common implements \OC\Files\Storage\Storage {
}
}
- $sanitizedFileName = filter_var($fileName, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW);
+ $sanitizedFileName = filter_var($fileName, FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_LOW);
if($sanitizedFileName !== $fileName) {
throw new InvalidCharacterInPathException();
}
}
+
+ /**
+ * @param array $options
+ */
+ public function setMountOptions(array $options) {
+ $this->mountOptions = $options;
+ }
+
+ /**
+ * @param string $name
+ * @param mixed $default
+ * @return mixed
+ */
+ public function getMountOption($name, $default = null) {
+ return isset($this->mountOptions[$name]) ? $this->mountOptions[$name] : $default;
+ }
}
diff --git a/lib/private/files/storage/storagefactory.php b/lib/private/files/storage/storagefactory.php
index fa6dea2537c..51972791290 100644
--- a/lib/private/files/storage/storagefactory.php
+++ b/lib/private/files/storage/storagefactory.php
@@ -8,6 +8,7 @@
namespace OC\Files\Storage;
+use OCP\Files\Mount\IMountPoint;
use OCP\Files\Storage\IStorageFactory;
class StorageFactory implements IStorageFactory {
@@ -55,23 +56,23 @@ class StorageFactory implements IStorageFactory {
/**
* Create an instance of a storage and apply the registered storage wrappers
*
- * @param string|boolean $mountPoint
+ * @param \OCP\Files\Mount\IMountPoint $mountPoint
* @param string $class
* @param array $arguments
* @return \OCP\Files\Storage
*/
- public function getInstance($mountPoint, $class, $arguments) {
+ public function getInstance(IMountPoint $mountPoint, $class, $arguments) {
return $this->wrap($mountPoint, new $class($arguments));
}
/**
- * @param string|boolean $mountPoint
+ * @param \OCP\Files\Mount\IMountPoint $mountPoint
* @param \OCP\Files\Storage $storage
* @return \OCP\Files\Storage
*/
- public function wrap($mountPoint, $storage) {
+ public function wrap(IMountPoint $mountPoint, $storage) {
foreach ($this->storageWrappers as $wrapper) {
- $storage = $wrapper($mountPoint, $storage);
+ $storage = $wrapper($mountPoint->getMountPoint(), $storage, $mountPoint);
}
return $storage;
}
diff --git a/lib/private/files/view.php b/lib/private/files/view.php
index 53e13396621..c95e0545810 100644
--- a/lib/private/files/view.php
+++ b/lib/private/files/view.php
@@ -1133,7 +1133,7 @@ class View {
}
if ($mount instanceof MoveableMount && $internalPath === '') {
- $data['permissions'] |= \OCP\Constants::PERMISSION_DELETE | \OCP\Constants::PERMISSION_UPDATE;
+ $data['permissions'] |= \OCP\Constants::PERMISSION_DELETE;
}
$data = \OC_FileProxy::runPostProxies('getFileInfo', $path, $data);
diff --git a/lib/private/helper.php b/lib/private/helper.php
index ebc30395a6b..0925c2367cd 100644
--- a/lib/private/helper.php
+++ b/lib/private/helper.php
@@ -39,6 +39,7 @@ class OC_Helper {
'application/coreldraw' => 'image',
'application/x-gimp' => 'image',
'application/x-photoshop' => 'image',
+ 'application/x-dcraw' => 'image',
'application/font-sfnt' => 'font',
'application/x-font' => 'font',
diff --git a/lib/private/mail.php b/lib/private/mail.php
deleted file mode 100644
index 6b7eec6e080..00000000000
--- a/lib/private/mail.php
+++ /dev/null
@@ -1,153 +0,0 @@
-<?php
-/**
- * Copyright (c) 2012 Frank Karlitschek <frank@owncloud.org>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-/**
- * OC_Mail
- *
- * A class to handle mail sending.
- */
-
-class OC_Mail {
-
- /**
- * send an email
- *
- * @param string $toaddress
- * @param string $toname
- * @param string $subject
- * @param string $mailtext
- * @param string $fromaddress
- * @param string $fromname
- * @param integer $html
- * @param string $altbody
- * @param string $ccaddress
- * @param string $ccname
- * @param string $bcc
- * @throws Exception
- */
- public static function send($toaddress, $toname, $subject, $mailtext, $fromaddress, $fromname,
- $html=0, $altbody='', $ccaddress='', $ccname='', $bcc='') {
-
- $SMTPMODE = OC_Config::getValue( 'mail_smtpmode', 'sendmail' );
- $SMTPHOST = OC_Config::getValue( 'mail_smtphost', '127.0.0.1' );
- $SMTPPORT = OC_Config::getValue( 'mail_smtpport', 25 );
- $SMTPAUTH = OC_Config::getValue( 'mail_smtpauth', false );
- $SMTPAUTHTYPE = OC_Config::getValue( 'mail_smtpauthtype', 'LOGIN' );
- $SMTPUSERNAME = OC_Config::getValue( 'mail_smtpname', '' );
- $SMTPPASSWORD = OC_Config::getValue( 'mail_smtppassword', '' );
- $SMTPDEBUG = OC_Config::getValue( 'mail_smtpdebug', false );
- $SMTPTIMEOUT = OC_Config::getValue( 'mail_smtptimeout', 10 );
- $SMTPSECURE = OC_Config::getValue( 'mail_smtpsecure', '' );
-
-
- $mailo = new PHPMailer(true);
- if($SMTPMODE=='sendmail') {
- $mailo->IsSendmail();
- }elseif($SMTPMODE=='smtp') {
- $mailo->IsSMTP();
- }elseif($SMTPMODE=='qmail') {
- $mailo->IsQmail();
- }else{
- $mailo->IsMail();
- }
-
-
- $mailo->Host = $SMTPHOST;
- $mailo->Port = $SMTPPORT;
- $mailo->SMTPAuth = $SMTPAUTH;
- $mailo->SMTPDebug = $SMTPDEBUG;
- $mailo->Debugoutput = 'error_log';
- $mailo->SMTPSecure = $SMTPSECURE;
- $mailo->AuthType = $SMTPAUTHTYPE;
- $mailo->Username = $SMTPUSERNAME;
- $mailo->Password = $SMTPPASSWORD;
- $mailo->Timeout = $SMTPTIMEOUT;
-
- $mailo->From = $fromaddress;
- $mailo->FromName = $fromname;;
- $mailo->Sender = $fromaddress;
- $mailo->XMailer = ' ';
- try {
- $toaddress = self::buildAsciiEmail($toaddress);
- $mailo->AddAddress($toaddress, $toname);
-
- if($ccaddress != '') $mailo->AddCC($ccaddress, $ccname);
- if($bcc != '') $mailo->AddBCC($bcc);
-
- $mailo->AddReplyTo($fromaddress, $fromname);
-
- $mailo->WordWrap = 78;
- $mailo->IsHTML($html == 1);
-
- $mailo->Subject = $subject;
- if($altbody == '') {
- $mailo->Body = $mailtext.OC_MAIL::getfooter();
- $mailo->AltBody = '';
- }else{
- $mailo->Body = $mailtext;
- $mailo->AltBody = $altbody;
- }
- $mailo->CharSet = 'UTF-8';
-
- $mailo->Send();
- unset($mailo);
- OC_Log::write('mail',
- 'Mail from '.$fromname.' ('.$fromaddress.')'.' to: '.$toname.'('.$toaddress.')'.' subject: '.$subject,
- OC_Log::DEBUG);
- } catch (Exception $exception) {
- OC_Log::write('mail', $exception->getMessage(), OC_Log::ERROR);
- throw($exception);
- }
- }
-
- /**
- * return the footer for a mail
- *
- */
- public static function getfooter() {
-
- $defaults = new OC_Defaults();
-
- $txt="\n--\n";
- $txt.=$defaults->getName() . "\n";
- $txt.=$defaults->getSlogan() . "\n";
-
- return($txt);
-
- }
-
- /**
- * @param string $emailAddress a given email address to be validated
- * @return bool
- */
- public static function validateAddress($emailAddress) {
- if (strpos($emailAddress, '@') === false) {
- return false;
- }
- $emailAddress = self::buildAsciiEmail($emailAddress);
- return PHPMailer::ValidateAddress($emailAddress);
- }
-
- /**
- * IDN domains will be properly converted to ascii domains.
- *
- * @param string $emailAddress
- * @return string
- */
- public static function buildAsciiEmail($emailAddress) {
- if (!function_exists('idn_to_ascii')) {
- return $emailAddress;
- }
-
- list($name, $domain) = explode('@', $emailAddress, 2);
- $domain = idn_to_ascii($domain);
-
- return "$name@$domain";
- }
-
-}
diff --git a/lib/private/mail/mailer.php b/lib/private/mail/mailer.php
new file mode 100644
index 00000000000..13c9167cabc
--- /dev/null
+++ b/lib/private/mail/mailer.php
@@ -0,0 +1,207 @@
+<?php
+/**
+ * Copyright (c) 2014-2015 Lukas Reschke <lukas@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Mail;
+
+use OCP\IConfig;
+use OCP\Mail\IMailer;
+use OCP\ILogger;
+
+/**
+ * Class Mailer provides some basic functions to create a mail message that can be used in combination with
+ * \OC\Mail\Message.
+ *
+ * Example usage:
+ *
+ * $mailer = \OC::$server->getMailer();
+ * $message = $mailer->createMessage();
+ * $message->setSubject('Your Subject');
+ * $message->setFrom(array('cloud@domain.org' => 'ownCloud Notifier');
+ * $message->setTo(array('recipient@domain.org' => 'Recipient');
+ * $message->setBody('The message text');
+ * $mailer->send($message);
+ *
+ * This message can then be passed to send() of \OC\Mail\Mailer
+ *
+ * @package OC\Mail
+ */
+class Mailer implements IMailer {
+ /** @var \Swift_SmtpTransport|\Swift_SendmailTransport|\Swift_MailTransport Cached transport */
+ private $instance = null;
+ /** @var IConfig */
+ private $config;
+ /** @var ILogger */
+ private $logger;
+ /** @var \OC_Defaults */
+ private $defaults;
+
+ /**
+ * @param IConfig $config
+ * @param ILogger $logger
+ * @param \OC_Defaults $defaults
+ */
+ function __construct(IConfig $config,
+ ILogger $logger,
+ \OC_Defaults $defaults) {
+ $this->config = $config;
+ $this->logger = $logger;
+ $this->defaults = $defaults;
+ }
+
+ /**
+ * Creates a new message object that can be passed to send()
+ *
+ * @return Message
+ */
+ public function createMessage() {
+ return new Message(new \Swift_Message());
+ }
+
+ /**
+ * Send the specified message. Also sets the from address to the value defined in config.php
+ * if no-one has been passed.
+ *
+ * @param Message $message Message to send
+ * @return string[] Array with failed recipients. Be aware that this depends on the used mail backend and
+ * therefore should be considered
+ * @throws \Exception In case it was not possible to send the message. (for example if an invalid mail address
+ * has been supplied.)
+ */
+ public function send(Message $message) {
+ $debugMode = $this->config->getSystemValue('mail_smtpdebug', false);
+
+ if (sizeof($message->getFrom()) === 0) {
+ $message->setFrom([\OCP\Util::getDefaultEmailAddress($this->defaults->getName())]);
+ }
+
+ $failedRecipients = [];
+
+ $mailer = $this->getInstance();
+
+ // Enable logger if debug mode is enabled
+ if($debugMode) {
+ $mailLogger = new \Swift_Plugins_Loggers_ArrayLogger();
+ $mailer->registerPlugin(new \Swift_Plugins_LoggerPlugin($mailLogger));
+ }
+
+ $mailer->send($message->getSwiftMessage(), $failedRecipients);
+
+ // Debugging logging
+ $logMessage = sprintf('Sent mail to "%s" with subject "%s"', print_r($message->getTo(), true), $message->getSubject());
+ $this->logger->debug($logMessage, ['app' => 'core']);
+ if($debugMode && isset($mailLogger)) {
+ $this->logger->debug($mailLogger->dump(), ['app' => 'core']);
+ }
+
+ return $failedRecipients;
+ }
+
+ /**
+ * Checks if an e-mail address is valid
+ *
+ * @param string $email Email address to be validated
+ * @return bool True if the mail address is valid, false otherwise
+ */
+ public function validateMailAddress($email) {
+ return \Swift_Validate::email($this->convertEmail($email));
+ }
+
+ /**
+ * SwiftMailer does currently not work with IDN domains, this function therefore converts the domains
+ *
+ * FIXME: Remove this once SwiftMailer supports IDN
+ *
+ * @param string $email
+ * @return string Converted mail address if `idn_to_ascii` exists
+ */
+ protected function convertEmail($email) {
+ if (!function_exists('idn_to_ascii') || strpos($email, '@') === false) {
+ return $email;
+ }
+
+ list($name, $domain) = explode('@', $email, 2);
+ $domain = idn_to_ascii($domain);
+ return $name.'@'.$domain;
+ }
+
+ /**
+ * Returns whatever transport is configured within the config
+ *
+ * @return \Swift_SmtpTransport|\Swift_SendmailTransport|\Swift_MailTransport
+ */
+ protected function getInstance() {
+ if (!is_null($this->instance)) {
+ return $this->instance;
+ }
+
+ switch ($this->config->getSystemValue('mail_smtpmode', 'php')) {
+ case 'smtp':
+ $this->instance = $this->getSMTPInstance();
+ break;
+ case 'sendmail':
+ $this->instance = $this->getSendMailInstance();
+ break;
+ default:
+ $this->instance = $this->getMailInstance();
+ break;
+ }
+
+ return $this->instance;
+ }
+
+ /**
+ * Returns the SMTP transport
+ *
+ * @return \Swift_SmtpTransport
+ */
+ protected function getSmtpInstance() {
+ $transport = \Swift_SmtpTransport::newInstance();
+ $transport->setTimeout($this->config->getSystemValue('mail_smtptimeout', 10));
+ $transport->setHost($this->config->getSystemValue('mail_smtphost', '127.0.0.1'));
+ $transport->setPort($this->config->getSystemValue('mail_smtpport', 25));
+ if ($this->config->getSystemValue('mail_smtpauth', false)) {
+ $transport->setUsername($this->config->getSystemValue('mail_smtpname', ''));
+ $transport->setPassword($this->config->getSystemValue('mail_smtppassword', ''));
+ $transport->setAuthMode($this->config->getSystemValue('mail_smtpauthtype', 'LOGIN'));
+ }
+ $smtpSecurity = $this->config->getSystemValue('mail_smtpsecure', '');
+ if (!empty($smtpSecurity)) {
+ $transport->setEncryption($smtpSecurity);
+ }
+ $transport->start();
+ return $transport;
+ }
+
+ /**
+ * Returns the sendmail transport
+ *
+ * @return \Swift_SendmailTransport
+ */
+ protected function getSendMailInstance() {
+ switch ($this->config->getSystemValue('mail_smtpmode', 'sendmail')) {
+ case 'qmail':
+ $binaryPath = '/var/qmail/bin/sendmail';
+ break;
+ default:
+ $binaryPath = '/usr/sbin/sendmail';
+ break;
+ }
+
+ return \Swift_SendmailTransport::newInstance($binaryPath . ' -bs');
+ }
+
+ /**
+ * Returns the mail transport
+ *
+ * @return \Swift_MailTransport
+ */
+ protected function getMailInstance() {
+ return \Swift_MailTransport::newInstance();
+ }
+
+}
diff --git a/lib/private/mail/message.php b/lib/private/mail/message.php
new file mode 100644
index 00000000000..60700196c5f
--- /dev/null
+++ b/lib/private/mail/message.php
@@ -0,0 +1,206 @@
+<?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.
+ */
+
+namespace OC\Mail;
+
+use Swift_Message;
+
+/**
+ * Class Message provides a wrapper around SwiftMail
+ *
+ * @package OC\Mail
+ */
+class Message {
+ /** @var Swift_Message */
+ private $swiftMessage;
+
+ /**
+ * @param Swift_Message $swiftMessage
+ */
+ function __construct(Swift_Message $swiftMessage) {
+ $this->swiftMessage = $swiftMessage;
+ }
+
+ /**
+ * SwiftMailer does currently not work with IDN domains, this function therefore converts the domains
+ * FIXME: Remove this once SwiftMailer supports IDN
+ *
+ * @param array $addresses Array of mail addresses, key will get converted
+ * @return array Converted addresses if `idn_to_ascii` exists
+ */
+ protected function convertAddresses($addresses) {
+ if (!function_exists('idn_to_ascii')) {
+ return $addresses;
+ }
+
+ $convertedAddresses = array();
+
+ foreach($addresses as $email => $readableName) {
+ if(!is_numeric($email)) {
+ list($name, $domain) = explode('@', $email, 2);
+ $domain = idn_to_ascii($domain);
+ $convertedAddresses[$name.'@'.$domain] = $readableName;
+ } else {
+ list($name, $domain) = explode('@', $readableName, 2);
+ $domain = idn_to_ascii($domain);
+ $convertedAddresses[$email] = $name.'@'.$domain;
+ }
+ }
+
+ return $convertedAddresses;
+ }
+
+ /**
+ * Set the from address of this message.
+ *
+ * If no "From" address is used \OC\Mail\Mailer will use mail_from_address and mail_domain from config.php
+ *
+ * @param array $addresses Example: array('sender@domain.org', 'other@domain.org' => 'A name')
+ * @return $this
+ */
+ public function setFrom(array $addresses) {
+ $addresses = $this->convertAddresses($addresses);
+
+ $this->swiftMessage->setFrom($addresses);
+ return $this;
+ }
+
+ /**
+ * Get the from address of this message.
+ *
+ * @return array
+ */
+ public function getFrom() {
+ return $this->swiftMessage->getFrom();
+ }
+
+ /**
+ * Set the to addresses of this message.
+ *
+ * @param array $recipients Example: array('recipient@domain.org', 'other@domain.org' => 'A name')
+ * @return $this
+ */
+ public function setTo(array $recipients) {
+ $recipients = $this->convertAddresses($recipients);
+
+ $this->swiftMessage->setTo($recipients);
+ return $this;
+ }
+
+ /**
+ * Get the to address of this message.
+ *
+ * @return array
+ */
+ public function getTo() {
+ return $this->swiftMessage->getTo();
+ }
+
+ /**
+ * Set the CC recipients of this message.
+ *
+ * @param array $recipients Example: array('recipient@domain.org', 'other@domain.org' => 'A name')
+ * @return $this
+ */
+ public function setCc(array $recipients) {
+ $recipients = $this->convertAddresses($recipients);
+
+ $this->swiftMessage->setCc($recipients);
+ return $this;
+ }
+
+ /**
+ * Get the cc address of this message.
+ *
+ * @return array
+ */
+ public function getCc() {
+ return $this->swiftMessage->getCc();
+ }
+
+ /**
+ * Set the BCC recipients of this message.
+ *
+ * @param array $recipients Example: array('recipient@domain.org', 'other@domain.org' => 'A name')
+ * @return $this
+ */
+ public function setBcc(array $recipients) {
+ $recipients = $this->convertAddresses($recipients);
+
+ $this->swiftMessage->setBcc($recipients);
+ return $this;
+ }
+
+ /**
+ * Get the Bcc address of this message.
+ *
+ * @return array
+ */
+ public function getBcc() {
+ return $this->swiftMessage->getBcc();
+ }
+
+ /**
+ * Set the subject of this message.
+ *
+ * @param $subject
+ * @return $this
+ */
+ public function setSubject($subject) {
+ $this->swiftMessage->setSubject($subject);
+ return $this;
+ }
+
+ /**
+ * Get the from subject of this message.
+ *
+ * @return string
+ */
+ public function getSubject() {
+ return $this->swiftMessage->getSubject();
+ }
+
+ /**
+ * Set the plain-text body of this message.
+ *
+ * @param string $body
+ * @return $this
+ */
+ public function setPlainBody($body) {
+ $this->swiftMessage->setBody($body);
+ return $this;
+ }
+
+ /**
+ * Get the plain body of this message.
+ *
+ * @return string
+ */
+ public function getPlainBody() {
+ return $this->swiftMessage->getBody();
+ }
+
+ /**
+ * Set the HTML body of this message. Consider also sending a plain-text body instead of only an HTML one.
+ *
+ * @param string $body
+ * @return $this
+ */
+ public function setHtmlBody($body) {
+ $this->swiftMessage->addPart($body, 'text/html');
+ return $this;
+ }
+
+ /**
+ * Get's the underlying SwiftMessage
+ * @return Swift_Message
+ */
+ public function getSwiftMessage() {
+ return $this->swiftMessage;
+ }
+}
diff --git a/lib/private/memcache/cache.php b/lib/private/memcache/cache.php
index c606d94fa51..d2d0353febc 100644
--- a/lib/private/memcache/cache.php
+++ b/lib/private/memcache/cache.php
@@ -21,6 +21,9 @@ abstract class Cache implements \ArrayAccess, \OCP\ICache {
$this->prefix = $prefix;
}
+ /**
+ * @return string Prefix used for caching purposes
+ */
public function getPrefix() {
return $this->prefix;
}
diff --git a/lib/private/mimetypes.list.php b/lib/private/mimetypes.list.php
index 265fffa7db3..c051c0eded2 100644
--- a/lib/private/mimetypes.list.php
+++ b/lib/private/mimetypes.list.php
@@ -33,6 +33,7 @@ return array(
'accdb' => array('application/msaccess', null),
'ai' => array('application/illustrator', null),
'apk' => array('application/vnd.android.package-archive', null),
+ 'arw' => array('image/x-dcraw', null),
'avi' => array('video/x-msvideo', null),
'bash' => array('text/x-shellscript', null),
'blend' => array('application/x-blender', null),
@@ -47,12 +48,15 @@ return array(
'cc' => array('text/x-c', null),
'cdr' => array('application/coreldraw', null),
'cpp' => array('text/x-c++src', null),
+ 'cr2' => array('image/x-dcraw', null),
'css' => array('text/css', null),
'csv' => array('text/csv', null),
'cvbdl' => array('application/x-cbr', null),
'c' => array('text/x-c', null),
'c++' => array('text/x-c++src', null),
+ 'dcr' => array('image/x-dcraw', null),
'deb' => array('application/x-deb', null),
+ 'dng' => array('image/x-dcraw', null),
'doc' => array('application/msword', null),
'docm' => array('application/vnd.ms-word.document.macroEnabled.12', null),
'docx' => array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', null),
@@ -62,6 +66,7 @@ return array(
'eot' => array('application/vnd.ms-fontobject', null),
'epub' => array('application/epub+zip', null),
'eps' => array('application/postscript', null),
+ 'erf' => array('image/x-dcraw', null),
'exe' => array('application/x-ms-dos-executable', null),
'flac' => array('audio/flac', null),
'flv' => array('video/x-flv', null),
@@ -72,11 +77,14 @@ return array(
'htm' => array('text/html', 'text/plain'),
'ical' => array('text/calendar', null),
'ics' => array('text/calendar', null),
+ 'iiq' => array('image/x-dcraw', null),
'impress' => array('text/impress', null),
'jpeg' => array('image/jpeg', null),
'jpg' => array('image/jpeg', null),
'js' => array('application/javascript', 'text/plain'),
'json' => array('application/json', 'text/plain'),
+ 'k25' => array('image/x-dcraw', null),
+ 'kdc' => array('image/x-dcraw', null),
'key' => array('application/x-iwork-keynote-sffkey', null),
'keynote' => array('application/x-iwork-keynote-sffkey', null),
'kra' => array('application/x-krita', null),
@@ -87,6 +95,7 @@ return array(
'md' => array('text/markdown', null),
'mdb' => array('application/msaccess', null),
'mdwn' => array('text/markdown', null),
+ 'mef' => array('image/x-dcraw', null),
'mkv' => array('video/x-matroska', null),
'mobi' => array('application/x-mobipocket-ebook', null),
'mov' => array('video/quicktime', null),
@@ -95,6 +104,7 @@ return array(
'mpeg' => array('video/mpeg', null),
'mpg' => array('video/mpeg', null),
'msi' => array('application/x-msi', null),
+ 'nef' => array('image/x-dcraw', null),
'numbers' => array('application/x-iwork-numbers-sffnumbers', null),
'odf' => array('application/vnd.oasis.opendocument.formula', null),
'odg' => array('application/vnd.oasis.opendocument.graphics', null),
@@ -104,10 +114,12 @@ return array(
'oga' => array('audio/ogg', null),
'ogg' => array('audio/ogg', null),
'ogv' => array('video/ogg', null),
+ 'orf' => array('image/x-dcraw', null),
'otf' => array('application/font-sfnt', null),
'pages' => array('application/x-iwork-pages-sffpages', null),
'pdf' => array('application/pdf', null),
'pfb' => array('application/x-font', null),
+ 'pef' => array('image/x-dcraw', null),
'php' => array('application/x-php', null),
'pl' => array('application/x-perl', null),
'png' => array('image/png', null),
@@ -125,11 +137,15 @@ return array(
'ps' => array('application/postscript', null),
'psd' => array('application/x-photoshop', null),
'py' => array('text/x-python', null),
+ 'raf' => array('image/x-dcraw', null),
'rar' => array('application/x-rar-compressed', null),
'reveal' => array('text/reveal', null),
+ 'rw2' => array('image/x-dcraw', null),
'sgf' => array('application/sgf', null),
'sh-lib' => array('text/x-shellscript', null),
'sh' => array('text/x-shellscript', null),
+ 'srf' => array('image/x-dcraw', null),
+ 'sr2' => array('image/x-dcraw', null),
'svg' => array('image/svg+xml', 'text/plain'),
'swf' => array('application/x-shockwave-flash', 'application/octet-stream'),
'tar' => array('application/x-tar', null),
@@ -158,5 +174,6 @@ return array(
'xltm' => array('application/vnd.ms-excel.template.macroEnabled.12', null),
'xltx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.template', null),
'xml' => array('application/xml', 'text/plain'),
+ 'xrf' => array('image/x-dcraw', null),
'zip' => array('application/zip', null),
);
diff --git a/lib/private/navigationmanager.php b/lib/private/navigationmanager.php
index 8ad2f4c8f63..205ecccd506 100644
--- a/lib/private/navigationmanager.php
+++ b/lib/private/navigationmanager.php
@@ -14,13 +14,23 @@ namespace OC;
*/
class NavigationManager implements \OCP\INavigationManager {
protected $entries = array();
+ protected $closureEntries = array();
protected $activeEntry;
/**
* Creates a new navigation entry
- * @param array $entry containing: id, name, order, icon and href key
+ *
+ * @param array|\Closure $entry Array containing: id, name, order, icon and href key
+ * The use of a closure is preferred, because it will avoid
+ * loading the routing of your app, unless required.
+ * @return void
*/
- public function add(array $entry) {
+ public function add($entry) {
+ if ($entry instanceof \Closure) {
+ $this->closureEntries[] = $entry;
+ return;
+ }
+
$entry['active'] = false;
if(!isset($entry['icon'])) {
$entry['icon'] = '';
@@ -33,6 +43,10 @@ class NavigationManager implements \OCP\INavigationManager {
* @return array an array of the added entries
*/
public function getAll() {
+ foreach ($this->closureEntries as $c) {
+ $this->add($c());
+ }
+ $this->closureEntries = array();
return $this->entries;
}
@@ -41,6 +55,7 @@ class NavigationManager implements \OCP\INavigationManager {
*/
public function clear() {
$this->entries = array();
+ $this->closureEntries = array();
}
/**
diff --git a/lib/private/server.php b/lib/private/server.php
index 8c78549d06e..fd7a2bea2d1 100644
--- a/lib/private/server.php
+++ b/lib/private/server.php
@@ -11,6 +11,8 @@ use OC\Command\AsyncBus;
use OC\Diagnostics\NullQueryLogger;
use OC\Diagnostics\EventLogger;
use OC\Diagnostics\QueryLogger;
+use OC\Mail\Mailer;
+use OC\Memcache\ArrayCache;
use OC\Security\CertificateManager;
use OC\Files\Node\Root;
use OC\Files\View;
@@ -146,7 +148,11 @@ class Server extends SimpleContainer implements IServerContainer {
});
$this->registerService('URLGenerator', function (Server $c) {
$config = $c->getConfig();
- return new \OC\URLGenerator($config);
+ $cacheFactory = $c->getMemCacheFactory();
+ return new \OC\URLGenerator(
+ $config,
+ $cacheFactory
+ );
});
$this->registerService('AppHelper', function ($c) {
return new \OC\AppHelper();
@@ -154,12 +160,25 @@ class Server extends SimpleContainer implements IServerContainer {
$this->registerService('UserCache', function ($c) {
return new UserCache();
});
- $this->registerService('MemCacheFactory', function ($c) {
+ $this->registerService('MemCacheFactory', function (Server $c) {
$config = $c->getConfig();
- $instanceId = \OC_Util::getInstanceId();
- return new \OC\Memcache\Factory($instanceId,
- $config->getSystemValue('memcache.local', null),
- $config->getSystemValue('memcache.distributed', null)
+
+ if($config->getSystemValue('installed', false)) {
+ $v = \OC_App::getAppVersions();
+ $v['core'] = implode('.', \OC_Util::getVersion());
+ $version = implode(',', $v);
+ $instanceId = \OC_Util::getInstanceId();
+ $path = \OC::$SERVERROOT;
+ $prefix = md5($instanceId.'-'.$version.'-'.$path);
+ return new \OC\Memcache\Factory($prefix,
+ $config->getSystemValue('memcache.local', null),
+ $config->getSystemValue('memcache.distributed', null)
+ );
+ }
+
+ return new \OC\Memcache\Factory('',
+ new ArrayCache(),
+ new ArrayCache()
);
});
$this->registerService('ActivityManager', function ($c) {
@@ -312,6 +331,13 @@ class Server extends SimpleContainer implements IServerContainer {
$stream
);
});
+ $this->registerService('Mailer', function(Server $c) {
+ return new Mailer(
+ $c->getConfig(),
+ $c->getLogger(),
+ new \OC_Defaults()
+ );
+ });
}
/**
@@ -713,6 +739,15 @@ class Server extends SimpleContainer implements IServerContainer {
}
/**
+ * Creates a new mailer
+ *
+ * @return \OCP\Mail\IMailer
+ */
+ function getMailer() {
+ return $this->query('Mailer');
+ }
+
+ /**
* Get the webroot
*
* @return string
diff --git a/lib/private/session/internal.php b/lib/private/session/internal.php
index 8fda6b3b3ee..acd93630f40 100644
--- a/lib/private/session/internal.php
+++ b/lib/private/session/internal.php
@@ -18,7 +18,9 @@ namespace OC\Session;
class Internal extends Session {
public function __construct($name) {
session_name($name);
+ set_error_handler(array($this, 'trapError'));
session_start();
+ restore_error_handler();
if (!isset($_SESSION)) {
throw new \Exception('Failed to start session');
}
@@ -82,7 +84,11 @@ class Internal extends Session {
throw new \Exception('The session cannot be reopened - reopen() is ony to be used in unit testing.');
}
- private function validateSession() {
+ public function trapError($errorNumber, $errorString) {
+ throw new \ErrorException($errorString);
+ }
+
+ private function validateSession() {
if ($this->sessionClosed) {
throw new \Exception('Session has been closed - no further changes to the session as allowed');
}
diff --git a/lib/private/setup.php b/lib/private/setup.php
index 830a6176caf..84ac735f27f 100644
--- a/lib/private/setup.php
+++ b/lib/private/setup.php
@@ -328,6 +328,11 @@ class Setup {
self::protectDataDirectory();
}
+ //try to write logtimezone
+ if (date_default_timezone_get()) {
+ \OC_Config::setValue('logtimezone', date_default_timezone_get());
+ }
+
//and we are done
$config->setSystemValue('installed', true);
}
diff --git a/lib/private/share/share.php b/lib/private/share/share.php
index 974ebf41f93..dff3af56f40 100644
--- a/lib/private/share/share.php
+++ b/lib/private/share/share.php
@@ -1097,9 +1097,17 @@ class Share extends \OC\Share\Constants {
*/
public static function setExpirationDate($itemType, $itemSource, $date, $shareTime = null) {
$user = \OC_User::getUser();
+ $l = \OC::$server->getL10N('lib');
if ($date == '') {
- $date = null;
+ if (\OCP\Util::isDefaultExpireDateEnforced()) {
+ $warning = 'Cannot clear expiration date. Shares are required to have an expiration date.';
+ $warning_t = $l->t('Cannot clear expiration date. Shares are required to have an expiration date.');
+ \OCP\Util::writeLog('OCP\Share', $warning, \OCP\Util::WARN);
+ throw new \Exception($warning_t);
+ } else {
+ $date = null;
+ }
} else {
$date = self::validateExpireDate($date, $shareTime, $itemType, $itemSource);
}
diff --git a/lib/private/template.php b/lib/private/template.php
index b0d212c6f53..e6b76cc664e 100644
--- a/lib/private/template.php
+++ b/lib/private/template.php
@@ -217,6 +217,7 @@ class OC_Template extends \OC\Template\Base {
public static function printExceptionErrorPage(Exception $exception) {
$request = \OC::$server->getRequest();
$content = new \OC_Template('', 'exception', 'error', false);
+ $content->assign('errorClass', get_class($exception));
$content->assign('errorMsg', $exception->getMessage());
$content->assign('errorCode', $exception->getCode());
$content->assign('file', $exception->getFile());
diff --git a/lib/private/templatelayout.php b/lib/private/templatelayout.php
index 3220d9d969c..3f8422b9f0b 100644
--- a/lib/private/templatelayout.php
+++ b/lib/private/templatelayout.php
@@ -242,7 +242,11 @@ class OC_TemplateLayout extends OC_Template {
private static function hashFileNames($files) {
foreach($files as $i => $file) {
- $files[$i] = self::convertToRelativePath($file[0]).'/'.$file[2];
+ try {
+ $files[$i] = self::convertToRelativePath($file[0]).'/'.$file[2];
+ } catch (\Exception $e) {
+ $files[$i] = $file[0].'/'.$file[2];
+ }
}
sort($files);
diff --git a/lib/private/urlgenerator.php b/lib/private/urlgenerator.php
index e87a6c354fb..93666a86780 100644
--- a/lib/private/urlgenerator.php
+++ b/lib/private/urlgenerator.php
@@ -9,6 +9,8 @@
namespace OC;
use OC_Defaults;
+use OCP\ICacheFactory;
+use OCP\IConfig;
use OCP\IURLGenerator;
use RuntimeException;
@@ -16,17 +18,19 @@ use RuntimeException;
* Class to generate URLs
*/
class URLGenerator implements IURLGenerator {
-
- /**
- * @var \OCP\IConfig
- */
+ /** @var IConfig */
private $config;
+ /** @var ICacheFactory */
+ private $cacheFactory;
/**
- * @param \OCP\IConfig $config
+ * @param IConfig $config
+ * @param ICacheFactory $cacheFactory
*/
- public function __construct($config) {
+ public function __construct(IConfig $config,
+ ICacheFactory $cacheFactory) {
$this->config = $config;
+ $this->cacheFactory = $cacheFactory;
}
/**
@@ -113,6 +117,12 @@ class URLGenerator implements IURLGenerator {
* Returns the path to the image.
*/
public function imagePath($app, $image) {
+ $cache = $this->cacheFactory->create('imagePath');
+ $cacheKey = $app.'-'.$image;
+ if($key = $cache->get($cacheKey)) {
+ return $key;
+ }
+
// Read the selected theme from the config file
$theme = \OC_Util::getTheme();
@@ -120,33 +130,39 @@ class URLGenerator implements IURLGenerator {
$basename = substr(basename($image),0,-4);
// Check if the app is in the app folder
+ $path = '';
if (file_exists(\OC::$SERVERROOT . "/themes/$theme/apps/$app/img/$image")) {
- return \OC::$WEBROOT . "/themes/$theme/apps/$app/img/$image";
+ $path = \OC::$WEBROOT . "/themes/$theme/apps/$app/img/$image";
} elseif (!file_exists(\OC::$SERVERROOT . "/themes/$theme/apps/$app/img/$basename.svg")
&& file_exists(\OC::$SERVERROOT . "/themes/$theme/apps/$app/img/$basename.png")) {
- return \OC::$WEBROOT . "/themes/$theme/apps/$app/img/$basename.png";
+ $path = \OC::$WEBROOT . "/themes/$theme/apps/$app/img/$basename.png";
} elseif (file_exists(\OC_App::getAppPath($app) . "/img/$image")) {
- return \OC_App::getAppWebPath($app) . "/img/$image";
+ $path = \OC_App::getAppWebPath($app) . "/img/$image";
} elseif (!file_exists(\OC_App::getAppPath($app) . "/img/$basename.svg")
&& file_exists(\OC_App::getAppPath($app) . "/img/$basename.png")) {
- return \OC_App::getAppPath($app) . "/img/$basename.png";
+ $path = \OC_App::getAppPath($app) . "/img/$basename.png";
} elseif (!empty($app) and file_exists(\OC::$SERVERROOT . "/themes/$theme/$app/img/$image")) {
- return \OC::$WEBROOT . "/themes/$theme/$app/img/$image";
+ $path = \OC::$WEBROOT . "/themes/$theme/$app/img/$image";
} elseif (!empty($app) and (!file_exists(\OC::$SERVERROOT . "/themes/$theme/$app/img/$basename.svg")
&& file_exists(\OC::$SERVERROOT . "/themes/$theme/$app/img/$basename.png"))) {
- return \OC::$WEBROOT . "/themes/$theme/$app/img/$basename.png";
+ $path = \OC::$WEBROOT . "/themes/$theme/$app/img/$basename.png";
} elseif (!empty($app) and file_exists(\OC::$SERVERROOT . "/$app/img/$image")) {
- return \OC::$WEBROOT . "/$app/img/$image";
+ $path = \OC::$WEBROOT . "/$app/img/$image";
} elseif (!empty($app) and (!file_exists(\OC::$SERVERROOT . "/$app/img/$basename.svg")
&& file_exists(\OC::$SERVERROOT . "/$app/img/$basename.png"))) {
- return \OC::$WEBROOT . "/$app/img/$basename.png";
+ $path = \OC::$WEBROOT . "/$app/img/$basename.png";
} elseif (file_exists(\OC::$SERVERROOT . "/themes/$theme/core/img/$image")) {
- return \OC::$WEBROOT . "/themes/$theme/core/img/$image";
+ $path = \OC::$WEBROOT . "/themes/$theme/core/img/$image";
} elseif (!file_exists(\OC::$SERVERROOT . "/themes/$theme/core/img/$basename.svg")
&& file_exists(\OC::$SERVERROOT . "/themes/$theme/core/img/$basename.png")) {
- return \OC::$WEBROOT . "/themes/$theme/core/img/$basename.png";
+ $path = \OC::$WEBROOT . "/themes/$theme/core/img/$basename.png";
} elseif (file_exists(\OC::$SERVERROOT . "/core/img/$image")) {
- return \OC::$WEBROOT . "/core/img/$image";
+ $path = \OC::$WEBROOT . "/core/img/$image";
+ }
+
+ if($path !== '') {
+ $cache->set($cacheKey, $path);
+ return $path;
} else {
throw new RuntimeException('image not found: image:' . $image . ' webroot:' . \OC::$WEBROOT . ' serverroot:' . \OC::$SERVERROOT);
}
diff --git a/lib/private/util.php b/lib/private/util.php
index 11366d450a9..a048996da6e 100644
--- a/lib/private/util.php
+++ b/lib/private/util.php
@@ -98,6 +98,14 @@ class OC_Util {
return false;
}
+ \OC\Files\Filesystem::addStorageWrapper('mount_options', function($mountPoint, \OCP\Files\Storage $storage, \OCP\Files\Mount\IMountPoint $mount) {
+ if($storage->instanceOfStorage('\OC\Files\Storage\Common')) {
+ /** @var \OC\Files\Storage\Common $storage */
+ $storage->setMountOptions($mount->getOptions());
+ }
+ return $storage;
+ });
+
//if we aren't logged in, there is no use to set up the filesystem
if ($user != "") {
\OC\Files\Filesystem::addStorageWrapper('oc_quota', function ($mountPoint, $storage) {
@@ -127,9 +135,6 @@ class OC_Util {
//jail the user into his "home" directory
\OC\Files\Filesystem::init($user, $userDir);
- $fileOperationProxy = new OC_FileProxy_FileOperations();
- OC_FileProxy::register($fileOperationProxy);
-
//trigger creation of user home and /files folder
\OC::$server->getUserFolder($user);
diff --git a/lib/public/app.php b/lib/public/app.php
index bef4e96ae02..736c2b64c7d 100644
--- a/lib/public/app.php
+++ b/lib/public/app.php
@@ -49,8 +49,6 @@ class App {
/**
* Adds an entry to the navigation
- * @param array $data containing the data
- * @return boolean
*
* This function adds a new entry to the navigation visible to users. $data
* is an associative array.
@@ -62,10 +60,17 @@ class App {
* The following keys are optional:
* - icon: path to the icon of the app
* - order: integer, that influences the position of your application in
- * the navigation. Lower values come first.
+ * the navigation. Lower values come first.
+ *
+ * @param array $data containing the data
+ * @return boolean
+ *
+ * @deprecated Use \OC::$server->getNavigationManager()->add() instead to
+ * register a closure, this helps to speed up all requests against ownCloud
*/
- public static function addNavigationEntry( $data ) {
- return \OC_App::addNavigationEntry( $data );
+ public static function addNavigationEntry($data) {
+ \OC::$server->getNavigationManager()->add($data);
+ return true;
}
/**
@@ -76,6 +81,8 @@ class App {
* This function sets a navigation entry as active and removes the 'active'
* property from all other entries. The templates can use this for
* highlighting the current position of the user.
+ *
+ * @deprecated Use \OC::$server->getNavigationManager()->setActiveEntry() instead
*/
public static function setActiveNavigationEntry( $id ) {
return \OC_App::setActiveNavigationEntry( $id );
diff --git a/lib/public/appframework/db/mapper.php b/lib/public/appframework/db/mapper.php
index 5143547c8e8..9a5d6e819b9 100644
--- a/lib/public/appframework/db/mapper.php
+++ b/lib/public/appframework/db/mapper.php
@@ -26,7 +26,8 @@
namespace OCP\AppFramework\Db;
-use \OCP\IDBConnection;
+use OCP\IDBConnection;
+use OCP\IDb;
/**
@@ -183,6 +184,31 @@ abstract class Mapper {
return $entity;
}
+ /**
+ * Checks if an array is associative
+ * @param array $array
+ * @return bool true if associative
+ */
+ private function isAssocArray(array $array) {
+ return array_values($array) !== $array;
+ }
+
+ /**
+ * Returns the correct PDO constant based on the value type
+ * @param $value
+ * @return PDO constant
+ */
+ private function getPDOType($value) {
+ switch (gettype($value)) {
+ case 'integer':
+ return \PDO::PARAM_INT;
+ case 'boolean':
+ return \PDO::PARAM_BOOL;
+ default:
+ return \PDO::PARAM_STR;
+ }
+ }
+
/**
* Runs an sql query
@@ -193,32 +219,37 @@ abstract class Mapper {
* @return \PDOStatement the database query result
*/
protected function execute($sql, array $params=[], $limit=null, $offset=null){
- $query = $this->db->prepare($sql, $limit, $offset);
-
- $index = 1; // bindParam is 1 indexed
- foreach($params as $param) {
-
- switch (gettype($param)) {
- case 'integer':
- $pdoConstant = \PDO::PARAM_INT;
- break;
-
- case 'boolean':
- $pdoConstant = \PDO::PARAM_BOOL;
- break;
+ if ($this->db instanceof IDb) {
+ $query = $this->db->prepareQuery($sql, $limit, $offset);
+ } else {
+ $query = $this->db->prepare($sql, $limit, $offset);
+ }
- default:
- $pdoConstant = \PDO::PARAM_STR;
- break;
+ if ($this->isAssocArray($params)) {
+ foreach ($params as $key => $param) {
+ $pdoConstant = $this->getPDOType($param);
+ $query->bindValue($key, $param, $pdoConstant);
}
+ } else {
+ $index = 1; // bindParam is 1 indexed
+ foreach ($params as $param) {
+ $pdoConstant = $this->getPDOType($param);
+ $query->bindValue($index, $param, $pdoConstant);
+ $index++;
+ }
+ }
- $query->bindValue($index, $param, $pdoConstant);
+ $result = $query->execute();
- $index++;
+ // this is only for backwards compatibility reasons and can be removed
+ // in owncloud 10. IDb returns a StatementWrapper from execute, PDO,
+ // Doctrine and IDbConnection don't so this needs to be done in order
+ // to stay backwards compatible for the things that rely on the
+ // StatementWrapper being returned
+ if ($result instanceof \OC_DB_StatementWrapper) {
+ return $result;
}
- $query->execute();
-
return $query;
}
diff --git a/lib/public/files/mount/imountpoint.php b/lib/public/files/mount/imountpoint.php
index af7819ae160..2ec0cca1dce 100644
--- a/lib/public/files/mount/imountpoint.php
+++ b/lib/public/files/mount/imountpoint.php
@@ -64,4 +64,11 @@ interface IMountPoint {
* @return mixed
*/
public function getOption($name, $default);
+
+ /**
+ * Get all options for the mount
+ *
+ * @return array
+ */
+ public function getOptions();
}
diff --git a/lib/public/files/storage/istoragefactory.php b/lib/public/files/storage/istoragefactory.php
index 50c844af2e6..7d4fa55e418 100644
--- a/lib/public/files/storage/istoragefactory.php
+++ b/lib/public/files/storage/istoragefactory.php
@@ -7,6 +7,7 @@
*/
namespace OCP\Files\Storage;
+use OCP\Files\Mount\IMountPoint;
/**
* Creates storage instances and manages and applies storage wrappers
@@ -25,10 +26,10 @@ interface IStorageFactory {
public function addStorageWrapper($wrapperName, $callback);
/**
- * @param string|boolean $mountPoint
+ * @param \OCP\Files\Mount\IMountPoint $mountPoint
* @param string $class
* @param array $arguments
* @return \OCP\Files\Storage
*/
- public function getInstance($mountPoint, $class, $arguments);
+ public function getInstance(IMountPoint $mountPoint, $class, $arguments);
}
diff --git a/lib/public/idbconnection.php b/lib/public/idbconnection.php
index 1117c2da9b2..38f5c7e2e59 100644
--- a/lib/public/idbconnection.php
+++ b/lib/public/idbconnection.php
@@ -83,6 +83,7 @@ interface IDBConnection {
* @param array $input data that should be inserted into the table (column name => value)
* @param array|null $compare List of values that should be checked for "if not exists"
* If this is null or an empty array, all keys of $input will be compared
+ * Please note: text fields (clob) must not be used in the compare array
* @return int number of inserted rows
* @throws \Doctrine\DBAL\DBALException
*/
diff --git a/lib/public/inavigationmanager.php b/lib/public/inavigationmanager.php
index 9497d3fd08e..9e0e6826454 100644
--- a/lib/public/inavigationmanager.php
+++ b/lib/public/inavigationmanager.php
@@ -36,10 +36,13 @@ namespace OCP;
interface INavigationManager {
/**
* Creates a new navigation entry
- * @param array $entry containing: id, name, order, icon and href key
+ *
+ * @param array|\Closure $entry Array containing: id, name, order, icon and href key
+ * The use of a closure is preferred, because it will avoid
+ * loading the routing of your app, unless required.
* @return void
*/
- public function add(array $entry);
+ public function add($entry);
/**
* Sets the current navigation entry of the currently running app
diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index ec23cc52345..20345e61212 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -318,9 +318,15 @@ interface IServerContainer {
* @return \bantu\IniGetWrapper\IniGetWrapper
*/
function getIniWrapper();
-
/**
* @return \OCP\Command\IBus
*/
function getCommandBus();
+
+ /**
+ * Creates a new mailer
+ *
+ * @return \OCP\Mail\IMailer
+ */
+ function getMailer();
}
diff --git a/lib/public/mail/imailer.php b/lib/public/mail/imailer.php
new file mode 100644
index 00000000000..dc6fe5ba869
--- /dev/null
+++ b/lib/public/mail/imailer.php
@@ -0,0 +1,57 @@
+<?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.
+ */
+
+namespace OCP\Mail;
+use OC\Mail\Message;
+
+/**
+ * Class IMailer provides some basic functions to create a mail message that can be used in combination with
+ * \OC\Mail\Message.
+ *
+ * Example usage:
+ *
+ * $mailer = \OC::$server->getMailer();
+ * $message = $mailer->createMessage();
+ * $message->setSubject('Your Subject');
+ * $message->setFrom(array('cloud@domain.org' => 'ownCloud Notifier');
+ * $message->setTo(array('recipient@domain.org' => 'Recipient');
+ * $message->setBody('The message text');
+ * $mailer->send($message);
+ *
+ * This message can then be passed to send() of \OC\Mail\Mailer
+ *
+ * @package OCP\Mail
+ */
+interface IMailer {
+ /**
+ * Creates a new message object that can be passed to send()
+ *
+ * @return Message
+ */
+ public function createMessage();
+
+ /**
+ * Send the specified message. Also sets the from address to the value defined in config.php
+ * if no-one has been passed.
+ *
+ * @param Message $message Message to send
+ * @return string[] Array with failed recipients. Be aware that this depends on the used mail backend and
+ * therefore should be considered
+ * @throws \Exception In case it was not possible to send the message. (for example if an invalid mail address
+ * has been supplied.)
+ */
+ public function send(Message $message);
+
+ /**
+ * Checks if an e-mail address is valid
+ *
+ * @param string $email Email address to be validated
+ * @return bool True if the mail address is valid, false otherwise
+ */
+ public function validateMailAddress($email);
+}
diff --git a/lib/public/util.php b/lib/public/util.php
index aa6cd5ba012..5efdcc55de4 100644
--- a/lib/public/util.php
+++ b/lib/public/util.php
@@ -63,12 +63,40 @@ class Util {
* @param string $ccaddress
* @param string $ccname
* @param string $bcc
+ * @deprecated Use \OCP\Mail\IMailer instead
*/
- public static function sendMail( $toaddress, $toname, $subject, $mailtext, $fromaddress, $fromname,
+ public static function sendMail($toaddress, $toname, $subject, $mailtext, $fromaddress, $fromname,
$html = 0, $altbody = '', $ccaddress = '', $ccname = '', $bcc = '') {
- // call the internal mail class
- \OC_MAIL::send($toaddress, $toname, $subject, $mailtext, $fromaddress, $fromname,
- $html, $altbody, $ccaddress, $ccname, $bcc);
+ $mailer = \OC::$server->getMailer();
+ $message = $mailer->createMessage();
+ $message->setTo([$toaddress => $toname]);
+ $message->setSubject($subject);
+ $message->setPlainBody($mailtext);
+ $message->setFrom([$fromaddress => $fromname]);
+ if($html === 1) {
+ $message->setHTMLBody($altbody);
+ }
+
+ if($altbody === '') {
+ $message->setHTMLBody($mailtext);
+ $message->setPlainBody('');
+ } else {
+ $message->setHtmlBody($mailtext);
+ $message->setPlainBody($altbody);
+ }
+
+ if(!empty($ccaddress)) {
+ if(!empty($ccname)) {
+ $message->setCc([$ccaddress => $ccname]);
+ } else {
+ $message->setCc([$ccaddress]);
+ }
+ }
+ if(!empty($bcc)) {
+ $message->setBcc([$bcc]);
+ }
+
+ $mailer->send($message);
}
/**
@@ -275,7 +303,8 @@ class Util {
$host_name = \OC_Config::getValue('mail_domain', $host_name);
$defaultEmailAddress = $user_part.'@'.$host_name;
- if (\OC_Mail::validateAddress($defaultEmailAddress)) {
+ $mailer = \OC::$server->getMailer();
+ if ($mailer->validateMailAddress($defaultEmailAddress)) {
return $defaultEmailAddress;
}
diff --git a/lib/repair/repairmimetypes.php b/lib/repair/repairmimetypes.php
index 06cd144bff4..721464f923d 100644
--- a/lib/repair/repairmimetypes.php
+++ b/lib/repair/repairmimetypes.php
@@ -66,7 +66,7 @@ class RepairMimeTypes extends BasicEmitter implements \OC\RepairStep {
SELECT `id`
FROM `*PREFIX*mimetypes`
WHERE `mimetype` = ?
- ) WHERE `name` LIKE ?
+ ) WHERE `name` ILIKE ?
');
}
@@ -171,6 +171,30 @@ class RepairMimeTypes extends BasicEmitter implements \OC\RepairStep {
self::updateMimetypes($updatedMimetypes);
}
+ private function introduceRawMimeType() {
+ $updatedMimetypes = array(
+ 'arw' => 'image/x-dcraw',
+ 'cr2' => 'image/x-dcraw',
+ 'dcr' => 'image/x-dcraw',
+ 'dng' => 'image/x-dcraw',
+ 'erf' => 'image/x-dcraw',
+ 'iiq' => 'image/x-dcraw',
+ 'k25' => 'image/x-dcraw',
+ 'kdc' => 'image/x-dcraw',
+ 'mef' => 'image/x-dcraw',
+ 'nef' => 'image/x-dcraw',
+ 'orf' => 'image/x-dcraw',
+ 'pef' => 'image/x-dcraw',
+ 'raf' => 'image/x-dcraw',
+ 'rw2' => 'image/x-dcraw',
+ 'srf' => 'image/x-dcraw',
+ 'sr2' => 'image/x-dcraw',
+ 'xrf' => 'image/x-dcraw',
+ );
+
+ self::updateMimetypes($updatedMimetypes);
+ }
+
/**
* Fix mime types
*/
@@ -190,5 +214,9 @@ class RepairMimeTypes extends BasicEmitter implements \OC\RepairStep {
if ($this->fixPostscriptMimeType()) {
$this->emit('\OC\Repair', 'info', array('Fixed Postscript mime types'));
}
+
+ if ($this->introduceRawMimeType()) {
+ $this->emit('\OC\Repair', 'info', array('Fixed Raw mime types'));
+ }
}
-} \ No newline at end of file
+}
diff --git a/settings/admin.php b/settings/admin.php
index da25ab55a93..6ec4cef350d 100644
--- a/settings/admin.php
+++ b/settings/admin.php
@@ -118,7 +118,6 @@ $formsAndMore = array_merge($formsAndMore, $formsMap);
// add bottom hardcoded forms from the template
$formsAndMore[] = array('anchor' => 'backgroundjobs', 'section-name' => $l->t('Cron'));
$formsAndMore[] = array('anchor' => 'shareAPI', 'section-name' => $l->t('Sharing'));
-$formsAndMore[] = array('anchor' => 'security', 'section-name' => $l->t('Security'));
$formsAndMore[] = array('anchor' => 'mail_general_settings', 'section-name' => $l->t('Email Server'));
$formsAndMore[] = array('anchor' => 'log-section', 'section-name' => $l->t('Log'));
diff --git a/settings/application.php b/settings/application.php
index 6fe23447a72..ce47f155ebe 100644
--- a/settings/application.php
+++ b/settings/application.php
@@ -47,7 +47,7 @@ class Application extends App {
$c->query('Config'),
$c->query('UserSession'),
$c->query('Defaults'),
- $c->query('Mail'),
+ $c->query('Mailer'),
$c->query('DefaultMailAddress')
);
});
@@ -89,7 +89,7 @@ class Application extends App {
$c->query('L10N'),
$c->query('Logger'),
$c->query('Defaults'),
- $c->query('Mail'),
+ $c->query('Mailer'),
$c->query('DefaultMailAddress'),
$c->query('URLGenerator'),
$c->query('OCP\\App\\IAppManager'),
@@ -151,8 +151,8 @@ class Application extends App {
$container->registerService('SubAdminFactory', function(IContainer $c) {
return new SubAdminFactory();
});
- $container->registerService('Mail', function(IContainer $c) {
- return new \OC_Mail;
+ $container->registerService('Mailer', function(IContainer $c) {
+ return $c->query('ServerContainer')->getMailer();
});
$container->registerService('Defaults', function(IContainer $c) {
return new \OC_Defaults;
diff --git a/settings/controller/mailsettingscontroller.php b/settings/controller/mailsettingscontroller.php
index 5874e644abb..53365cf253b 100644
--- a/settings/controller/mailsettingscontroller.php
+++ b/settings/controller/mailsettingscontroller.php
@@ -16,6 +16,8 @@ use \OCP\AppFramework\Controller;
use OCP\IRequest;
use OCP\IL10N;
use OCP\IConfig;
+use OCP\Mail\IMailer;
+use OCP\Mail\IMessage;
/**
* @package OC\Settings\Controller
@@ -30,8 +32,8 @@ class MailSettingsController extends Controller {
private $userSession;
/** @var \OC_Defaults */
private $defaults;
- /** @var \OC_Mail */
- private $mail;
+ /** @var IMailer */
+ private $mailer;
/** @var string */
private $defaultMailAddress;
@@ -42,7 +44,7 @@ class MailSettingsController extends Controller {
* @param IConfig $config
* @param Session $userSession
* @param \OC_Defaults $defaults
- * @param \OC_Mail $mail
+ * @param IMailer $mailer
* @param string $defaultMailAddress
*/
public function __construct($appName,
@@ -51,14 +53,14 @@ class MailSettingsController extends Controller {
IConfig $config,
Session $userSession,
\OC_Defaults $defaults,
- \OC_Mail $mail,
+ IMailer $mailer,
$defaultMailAddress) {
parent::__construct($appName, $request);
$this->l10n = $l10n;
$this->config = $config;
$this->userSession = $userSession;
$this->defaults = $defaults;
- $this->mail = $mail;
+ $this->mailer = $mailer;
$this->defaultMailAddress = $defaultMailAddress;
}
@@ -133,19 +135,19 @@ class MailSettingsController extends Controller {
$email = $this->config->getUserValue($this->userSession->getUser()->getUID(), $this->appName, 'email', '');
if (!empty($email)) {
try {
- $this->mail->send($email, $this->userSession->getUser()->getDisplayName(),
- $this->l10n->t('test email settings'),
- $this->l10n->t('If you received this email, the settings seem to be correct.'),
- $this->defaultMailAddress,
- $this->defaults->getName()
- );
+ $message = $this->mailer->createMessage();
+ $message->setTo([$email => $this->userSession->getUser()->getDisplayName()]);
+ $message->setFrom([$this->defaultMailAddress]);
+ $message->setSubject($this->l10n->t('test email settings'));
+ $message->setPlainBody('If you received this email, the settings seem to be correct.');
+ $this->mailer->send($message);
} catch (\Exception $e) {
- return array('data' =>
- array('message' =>
- (string) $this->l10n->t('A problem occurred while sending the email. Please revise your settings.'),
- ),
- 'status' => 'error'
- );
+ return [
+ 'data' => [
+ 'message' => (string) $this->l10n->t('A problem occurred while sending the email. Please revise your settings. (Error: %s)', [$e->getMessage()]),
+ ],
+ 'status' => 'error',
+ ];
}
return array('data' =>
diff --git a/settings/controller/userscontroller.php b/settings/controller/userscontroller.php
index a20cbb4050a..a6faa3c4a1d 100644
--- a/settings/controller/userscontroller.php
+++ b/settings/controller/userscontroller.php
@@ -26,6 +26,7 @@ use OCP\IURLGenerator;
use OCP\IUser;
use OCP\IUserManager;
use OCP\IUserSession;
+use OCP\Mail\IMailer;
/**
* @package OC\Settings\Controller
@@ -47,8 +48,8 @@ class UsersController extends Controller {
private $log;
/** @var \OC_Defaults */
private $defaults;
- /** @var \OC_Mail */
- private $mail;
+ /** @var IMailer */
+ private $mailer;
/** @var string */
private $fromMailAddress;
/** @var IURLGenerator */
@@ -71,7 +72,7 @@ class UsersController extends Controller {
* @param IL10N $l10n
* @param ILogger $log
* @param \OC_Defaults $defaults
- * @param \OC_Mail $mail
+ * @param IMailer $mailer
* @param string $fromMailAddress
* @param IURLGenerator $urlGenerator
* @param IAppManager $appManager
@@ -87,7 +88,7 @@ class UsersController extends Controller {
IL10N $l10n,
ILogger $log,
\OC_Defaults $defaults,
- \OC_Mail $mail,
+ IMailer $mailer,
$fromMailAddress,
IURLGenerator $urlGenerator,
IAppManager $appManager,
@@ -101,7 +102,7 @@ class UsersController extends Controller {
$this->l10n = $l10n;
$this->log = $log;
$this->defaults = $defaults;
- $this->mail = $mail;
+ $this->mailer = $mailer;
$this->fromMailAddress = $fromMailAddress;
$this->urlGenerator = $urlGenerator;
$this->subAdminFactory = $subAdminFactory;
@@ -262,8 +263,7 @@ class UsersController extends Controller {
* @return DataResponse
*/
public function create($username, $password, array $groups=array(), $email='') {
-
- if($email !== '' && !$this->mail->validateAddress($email)) {
+ if($email !== '' && !$this->mailer->validateMailAddress($email)) {
return new DataResponse(
array(
'message' => (string)$this->l10n->t('Invalid mail address')
@@ -286,6 +286,15 @@ class UsersController extends Controller {
}
}
+ if ($this->userManager->userExists($username)) {
+ return new DataResponse(
+ array(
+ 'message' => (string)$this->l10n->t('A user with that name already exists.')
+ ),
+ Http::STATUS_CONFLICT
+ );
+ }
+
try {
$user = $this->userManager->createUser($username, $password);
} catch (\Exception $exception) {
@@ -329,15 +338,13 @@ class UsersController extends Controller {
$subject = $this->l10n->t('Your %s account was created', [$this->defaults->getName()]);
try {
- $this->mail->send(
- $email,
- $username,
- $subject,
- $mailContent,
- $this->fromMailAddress,
- $this->defaults->getName(),
- 1,
- $plainTextMailContent);
+ $message = $this->mailer->createMessage();
+ $message->setTo([$email => $username]);
+ $message->setSubject($subject);
+ $message->setHtmlBody($mailContent);
+ $message->setPlainBody($plainTextMailContent);
+ $message->setFrom([$this->fromMailAddress => $this->defaults->getName()]);
+ $this->mailer->send($message);
} catch(\Exception $e) {
$this->log->error("Can't send new user mail to $email: " . $e->getMessage(), array('app' => 'settings'));
}
@@ -444,7 +451,7 @@ class UsersController extends Controller {
);
}
- if($mailAddress !== '' && !$this->mail->validateAddress($mailAddress)) {
+ if($mailAddress !== '' && !$this->mailer->validateMailAddress($mailAddress)) {
return new DataResponse(
array(
'status' => 'error',
diff --git a/settings/css/settings.css b/settings/css/settings.css
index e2349e9dd68..0ed0e60ee64 100644
--- a/settings/css/settings.css
+++ b/settings/css/settings.css
@@ -55,6 +55,23 @@ table.nostyle td { padding: 0.2em 0; }
content: '+'; font-weight: bold; font-size: 150%;
}
+#newgroup-form {
+ height: 44px;
+}
+#newgroupname {
+ margin: 6px;
+ width: 95%;
+ padding-right: 32px;
+ box-sizing: border-box
+}
+#newgroup-form .button {
+ position: absolute;
+ right: 0;
+ top: 3px;
+ height: 32px;
+ width: 32px;
+}
+
.ie8 #newgroup-form .icon-add {
height: 30px;
}
@@ -78,7 +95,6 @@ span.utils .delete, .rename { display: none; }
#app-navigation ul li.active > span.utils .rename { display: block; }
#usersearchform { position: absolute; top: 2px; right: 250px; }
#usersearchform label { font-weight: 700; }
-form { display:inline; }
/* display table at full width */
table.grid {
@@ -99,10 +115,14 @@ span.usersLastLoginTooltip { white-space: nowrap; }
display : none;
}
-td.remove { width:1em; padding-right:1em; }
tr:hover>td.password>span, tr:hover>td.displayName>span { margin:0; cursor:pointer; }
tr:hover>td.remove>a, tr:hover>td.password>img,tr:hover>td.displayName>img, tr:hover>td.quota>img { visibility:visible; cursor:pointer; }
-tr:hover>td.remove>a { float:right; }
+td.remove {
+ width: 25px;
+}
+tr:hover>td.remove>a {
+ float: left;
+}
div.recoveryPassword { left:50em; display:block; position:absolute; top:-1px; }
input#recoveryPassword {width:15em;}
@@ -117,13 +137,16 @@ select.quota.active { background: #fff; }
input.userFilter {width: 200px;}
/* positioning fixes */
+#newuser {
+ padding-left: 3px;
+}
#newuser .multiselect {
min-width: 150px !important;
}
#newuser .multiselect,
#newusergroups + input[type='submit'] {
position: relative;
- top: 1px;
+ top: -1px;
}
#headerGroups, #headerSubAdmins, #headerQuota { padding-left:18px; }
diff --git a/settings/js/users/groups.js b/settings/js/users/groups.js
index c06bc5ff14b..32ddbf3ba01 100644
--- a/settings/js/users/groups.js
+++ b/settings/js/users/groups.js
@@ -182,6 +182,7 @@ GroupList = {
$('#newgroup-form').show();
$('#newgroup-init').hide();
$('#newgroupname').focus();
+ GroupList.handleAddGroupInput('');
}
else {
$('#newgroup-form').hide();
@@ -190,6 +191,14 @@ GroupList = {
}
},
+ handleAddGroupInput: function (input) {
+ if(input.length) {
+ $('#newgroup-form input[type="submit"]').attr('disabled', null);
+ } else {
+ $('#newgroup-form input[type="submit"]').attr('disabled', 'disabled');
+ }
+ },
+
isGroupNameValid: function (groupname) {
if ($.trim(groupname) === '') {
OC.dialogs.alert(
@@ -295,4 +304,8 @@ $(document).ready( function () {
$userGroupList.on('click', '.isgroup', function () {
GroupList.showGroup(GroupList.getElementGID(this));
});
+
+ $('#newgroupname').on('input', function(){
+ GroupList.handleAddGroupInput(this.value);
+ });
});
diff --git a/settings/l10n/ar.js b/settings/l10n/ar.js
index 704428b4ba4..fe6da5ba32c 100644
--- a/settings/l10n/ar.js
+++ b/settings/l10n/ar.js
@@ -3,7 +3,6 @@ OC.L10N.register(
{
"Cron" : "مجدول",
"Sharing" : "مشاركة",
- "Security" : "الأمان",
"Email Server" : "خادم البريد الالكتروني",
"Log" : "سجل",
"Authentication error" : "لم يتم التأكد من الشخصية بنجاح",
@@ -24,7 +23,6 @@ OC.L10N.register(
"Enabled" : "مفعلة",
"Saved" : "حفظ",
"test email settings" : "إعدادات البريد التجريبي",
- "If you received this email, the settings seem to be correct." : "تبدوا الاعدادت صحيحة اذا تلقيت هذا البريد الالكتروني",
"Email sent" : "تم ارسال البريد الالكتروني",
"Email saved" : "تم حفظ البريد الإلكتروني",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "هل أنت متأكد انك تريد إضافة \"{domain}\" كنطاق موثوق فيه.",
diff --git a/settings/l10n/ar.json b/settings/l10n/ar.json
index 2c8eb713782..460c24882ea 100644
--- a/settings/l10n/ar.json
+++ b/settings/l10n/ar.json
@@ -1,7 +1,6 @@
{ "translations": {
"Cron" : "مجدول",
"Sharing" : "مشاركة",
- "Security" : "الأمان",
"Email Server" : "خادم البريد الالكتروني",
"Log" : "سجل",
"Authentication error" : "لم يتم التأكد من الشخصية بنجاح",
@@ -22,7 +21,6 @@
"Enabled" : "مفعلة",
"Saved" : "حفظ",
"test email settings" : "إعدادات البريد التجريبي",
- "If you received this email, the settings seem to be correct." : "تبدوا الاعدادت صحيحة اذا تلقيت هذا البريد الالكتروني",
"Email sent" : "تم ارسال البريد الالكتروني",
"Email saved" : "تم حفظ البريد الإلكتروني",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "هل أنت متأكد انك تريد إضافة \"{domain}\" كنطاق موثوق فيه.",
diff --git a/settings/l10n/ast.js b/settings/l10n/ast.js
index 1e03ab58cca..2366871d4bc 100644
--- a/settings/l10n/ast.js
+++ b/settings/l10n/ast.js
@@ -3,7 +3,6 @@ OC.L10N.register(
{
"Cron" : "Cron",
"Sharing" : "Compartiendo",
- "Security" : "Seguridá",
"Email Server" : "Sirvidor de corréu-e",
"Log" : "Rexistru",
"Authentication error" : "Fallu d'autenticación",
@@ -33,8 +32,6 @@ OC.L10N.register(
"Recommended" : "Recomendáu",
"Saved" : "Guardáu",
"test email settings" : "probar configuración de corréu",
- "If you received this email, the settings seem to be correct." : "Si recibisti esti mensaxe de corréu-e, la to configuración ta correuta.",
- "A problem occurred while sending the email. Please revise your settings." : "Hebo un problema al unviar el mensaxe. Revisa la configuración.",
"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",
diff --git a/settings/l10n/ast.json b/settings/l10n/ast.json
index e9aa245e14a..65aced175e2 100644
--- a/settings/l10n/ast.json
+++ b/settings/l10n/ast.json
@@ -1,7 +1,6 @@
{ "translations": {
"Cron" : "Cron",
"Sharing" : "Compartiendo",
- "Security" : "Seguridá",
"Email Server" : "Sirvidor de corréu-e",
"Log" : "Rexistru",
"Authentication error" : "Fallu d'autenticación",
@@ -31,8 +30,6 @@
"Recommended" : "Recomendáu",
"Saved" : "Guardáu",
"test email settings" : "probar configuración de corréu",
- "If you received this email, the settings seem to be correct." : "Si recibisti esti mensaxe de corréu-e, la to configuración ta correuta.",
- "A problem occurred while sending the email. Please revise your settings." : "Hebo un problema al unviar el mensaxe. Revisa la configuración.",
"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",
diff --git a/settings/l10n/az.js b/settings/l10n/az.js
index 1eda8b1889b..e7bdd6c543c 100644
--- a/settings/l10n/az.js
+++ b/settings/l10n/az.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Təhlükəsizlik və İşəsalınma xəbərdarlıqları",
"Cron" : "Cron",
"Sharing" : "Paylaşılır",
- "Security" : "Təhlükəsizlik",
"Email Server" : "Email server",
"Log" : "Jurnal",
"Authentication error" : "Təyinat metodikası",
@@ -39,8 +38,6 @@ OC.L10N.register(
"log-level out of allowed range" : "jurnal-səviyyəsi izin verilən aralıqdan kənardır",
"Saved" : "Saxlanıldı",
"test email settings" : "sınaq məktubu quraşdırmaları",
- "If you received this email, the settings seem to be correct." : "Əgər siz bu məktubu aldınızsa, demək quraşdırmalar düzgündür.",
- "A problem occurred while sending the email. Please revise your settings." : "Mailin yollanması müddətində səhv baş verdi. Xahiş olunur quraşdırmalarınıza yenidən baxasınız.",
"Email sent" : "Məktub göndərildi",
"You need to set your user email before being able to send test emails." : "Test məktubu göndərməzdən öncə, siz öz istifadəçi poçtunuzu təyin etməlisiniz.",
"Invalid mail address" : "Yalnış mail ünvanı",
diff --git a/settings/l10n/az.json b/settings/l10n/az.json
index 9ad03a8fa67..d8fe602c81a 100644
--- a/settings/l10n/az.json
+++ b/settings/l10n/az.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Təhlükəsizlik və İşəsalınma xəbərdarlıqları",
"Cron" : "Cron",
"Sharing" : "Paylaşılır",
- "Security" : "Təhlükəsizlik",
"Email Server" : "Email server",
"Log" : "Jurnal",
"Authentication error" : "Təyinat metodikası",
@@ -37,8 +36,6 @@
"log-level out of allowed range" : "jurnal-səviyyəsi izin verilən aralıqdan kənardır",
"Saved" : "Saxlanıldı",
"test email settings" : "sınaq məktubu quraşdırmaları",
- "If you received this email, the settings seem to be correct." : "Əgər siz bu məktubu aldınızsa, demək quraşdırmalar düzgündür.",
- "A problem occurred while sending the email. Please revise your settings." : "Mailin yollanması müddətində səhv baş verdi. Xahiş olunur quraşdırmalarınıza yenidən baxasınız.",
"Email sent" : "Məktub göndərildi",
"You need to set your user email before being able to send test emails." : "Test məktubu göndərməzdən öncə, siz öz istifadəçi poçtunuzu təyin etməlisiniz.",
"Invalid mail address" : "Yalnış mail ünvanı",
diff --git a/settings/l10n/bg_BG.js b/settings/l10n/bg_BG.js
index f78dac4f7cd..4dc9db427ed 100644
--- a/settings/l10n/bg_BG.js
+++ b/settings/l10n/bg_BG.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Предупреждения за сигурност и настройки",
"Cron" : "Крон",
"Sharing" : "Споделяне",
- "Security" : "Сигурност",
"Email Server" : "Имейл Сървър",
"Log" : "Лог",
"Authentication error" : "Възникна проблем с идентификацията",
@@ -38,8 +37,6 @@ OC.L10N.register(
"log-level out of allowed range" : "Ниво на проследяване \\(log-level\\) e извън допустимия обхват",
"Saved" : "Запаметяване",
"test email settings" : "проверка на настройките на електронна поща",
- "If you received this email, the settings seem to be correct." : "Ако сте получили този имейл, изглежда, че настройките са ви правилни.",
- "A problem occurred while sending the email. Please revise your settings." : "Настъпи проблем при изпращането на електронната поща. Моля, проверете вашите настройки.",
"Email sent" : "Имейлът е изпратен",
"You need to set your user email before being able to send test emails." : "Трябва да зададете своя имейл преди да можете да изпращате тестови имейли.",
"Invalid mail address" : "невалиден адрес на електронна поща",
diff --git a/settings/l10n/bg_BG.json b/settings/l10n/bg_BG.json
index 75610d7a2cd..0d597cccee9 100644
--- a/settings/l10n/bg_BG.json
+++ b/settings/l10n/bg_BG.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Предупреждения за сигурност и настройки",
"Cron" : "Крон",
"Sharing" : "Споделяне",
- "Security" : "Сигурност",
"Email Server" : "Имейл Сървър",
"Log" : "Лог",
"Authentication error" : "Възникна проблем с идентификацията",
@@ -36,8 +35,6 @@
"log-level out of allowed range" : "Ниво на проследяване \\(log-level\\) e извън допустимия обхват",
"Saved" : "Запаметяване",
"test email settings" : "проверка на настройките на електронна поща",
- "If you received this email, the settings seem to be correct." : "Ако сте получили този имейл, изглежда, че настройките са ви правилни.",
- "A problem occurred while sending the email. Please revise your settings." : "Настъпи проблем при изпращането на електронната поща. Моля, проверете вашите настройки.",
"Email sent" : "Имейлът е изпратен",
"You need to set your user email before being able to send test emails." : "Трябва да зададете своя имейл преди да можете да изпращате тестови имейли.",
"Invalid mail address" : "невалиден адрес на електронна поща",
diff --git a/settings/l10n/bn_BD.js b/settings/l10n/bn_BD.js
index 498f76a4c75..a1ddd986507 100644
--- a/settings/l10n/bn_BD.js
+++ b/settings/l10n/bn_BD.js
@@ -2,7 +2,6 @@ OC.L10N.register(
"settings",
{
"Sharing" : "ভাগাভাগিরত",
- "Security" : "নিরাপত্তা",
"Email Server" : "ইমেইল সার্ভার",
"Authentication error" : "অনুমোদন ঘটিত সমস্যা",
"Your full name has been changed." : "আপনার পূর্ণ নাম পরিবর্তন করা হয়েছে।",
@@ -21,7 +20,6 @@ OC.L10N.register(
"Enabled" : "কার্যকর",
"Saved" : "সংরক্ষণ করা হলো",
"test email settings" : "ইমেইল নিয়ামকসমূহ পরীক্ষা করুন",
- "If you received this email, the settings seem to be correct." : "এই ইমেইলের অর্থ নিয়ামকসমূহ সঠিক।",
"Email sent" : "ই-মেইল পাঠানো হয়েছে",
"Email saved" : "ই-মেইল সংরক্ষন করা হয়েছে",
"All" : "সবাই",
diff --git a/settings/l10n/bn_BD.json b/settings/l10n/bn_BD.json
index eb4128029fd..f6c2dda7220 100644
--- a/settings/l10n/bn_BD.json
+++ b/settings/l10n/bn_BD.json
@@ -1,6 +1,5 @@
{ "translations": {
"Sharing" : "ভাগাভাগিরত",
- "Security" : "নিরাপত্তা",
"Email Server" : "ইমেইল সার্ভার",
"Authentication error" : "অনুমোদন ঘটিত সমস্যা",
"Your full name has been changed." : "আপনার পূর্ণ নাম পরিবর্তন করা হয়েছে।",
@@ -19,7 +18,6 @@
"Enabled" : "কার্যকর",
"Saved" : "সংরক্ষণ করা হলো",
"test email settings" : "ইমেইল নিয়ামকসমূহ পরীক্ষা করুন",
- "If you received this email, the settings seem to be correct." : "এই ইমেইলের অর্থ নিয়ামকসমূহ সঠিক।",
"Email sent" : "ই-মেইল পাঠানো হয়েছে",
"Email saved" : "ই-মেইল সংরক্ষন করা হয়েছে",
"All" : "সবাই",
diff --git a/settings/l10n/bs.js b/settings/l10n/bs.js
index 32eaa6c94bf..398c5328495 100644
--- a/settings/l10n/bs.js
+++ b/settings/l10n/bs.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Sigurnosna Upozorenja & Upozorenja Postavki",
"Cron" : "Cron",
"Sharing" : "Dijeljenje",
- "Security" : "Sigurnost",
"Email Server" : "Server e-pošte",
"Log" : "Zapisnik",
"Authentication error" : "Grešna autentifikacije",
@@ -37,8 +36,6 @@ OC.L10N.register(
"Unable to delete group." : "Nemoguće izbrisati grupu.",
"Saved" : "Spremljeno",
"test email settings" : "testiraj postavke e-pošte",
- "If you received this email, the settings seem to be correct." : "Ako ste primili ovu e-poštu, izgleda da su postavke ispravne.",
- "A problem occurred while sending the email. Please revise your settings." : "Došlo je do problema prilikom slanja e-pošte. Molim vas revidirate svoje postavke.",
"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 email trebate postaviti svoj korisnički email.",
"Invalid mail address" : "Nevažeća adresa e-pošte",
diff --git a/settings/l10n/bs.json b/settings/l10n/bs.json
index 95c8a81f3cb..db8ce94dba3 100644
--- a/settings/l10n/bs.json
+++ b/settings/l10n/bs.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Sigurnosna Upozorenja & Upozorenja Postavki",
"Cron" : "Cron",
"Sharing" : "Dijeljenje",
- "Security" : "Sigurnost",
"Email Server" : "Server e-pošte",
"Log" : "Zapisnik",
"Authentication error" : "Grešna autentifikacije",
@@ -35,8 +34,6 @@
"Unable to delete group." : "Nemoguće izbrisati grupu.",
"Saved" : "Spremljeno",
"test email settings" : "testiraj postavke e-pošte",
- "If you received this email, the settings seem to be correct." : "Ako ste primili ovu e-poštu, izgleda da su postavke ispravne.",
- "A problem occurred while sending the email. Please revise your settings." : "Došlo je do problema prilikom slanja e-pošte. Molim vas revidirate svoje postavke.",
"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 email trebate postaviti svoj korisnički email.",
"Invalid mail address" : "Nevažeća adresa e-pošte",
diff --git a/settings/l10n/ca.js b/settings/l10n/ca.js
index 5ee226c6b43..0a607d351a8 100644
--- a/settings/l10n/ca.js
+++ b/settings/l10n/ca.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Avisos de seguretat i configuració",
"Cron" : "Cron",
"Sharing" : "Compartir",
- "Security" : "Seguretat",
"Email Server" : "Servidor de correu",
"Log" : "Registre",
"Authentication error" : "Error d'autenticació",
@@ -34,8 +33,6 @@ OC.L10N.register(
"Recommended" : "Recomanat",
"Saved" : "Desat",
"test email settings" : "prova l'arranjament del correu",
- "If you received this email, the settings seem to be correct." : "Si rebeu aquest correu sembla que l'arranjament del correu és correcte.",
- "A problem occurred while sending the email. Please revise your settings." : "Hi ha hagut un problema enviant el correu. Reviseu la configuració.",
"Email sent" : "El correu electrónic s'ha enviat",
"You need to set your user email before being able to send test emails." : "Heu d'establir un nom d'usuari abans de poder enviar correus de prova.",
"Email saved" : "S'ha desat el correu electrònic",
diff --git a/settings/l10n/ca.json b/settings/l10n/ca.json
index 8ae4df81c33..782579e3c80 100644
--- a/settings/l10n/ca.json
+++ b/settings/l10n/ca.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Avisos de seguretat i configuració",
"Cron" : "Cron",
"Sharing" : "Compartir",
- "Security" : "Seguretat",
"Email Server" : "Servidor de correu",
"Log" : "Registre",
"Authentication error" : "Error d'autenticació",
@@ -32,8 +31,6 @@
"Recommended" : "Recomanat",
"Saved" : "Desat",
"test email settings" : "prova l'arranjament del correu",
- "If you received this email, the settings seem to be correct." : "Si rebeu aquest correu sembla que l'arranjament del correu és correcte.",
- "A problem occurred while sending the email. Please revise your settings." : "Hi ha hagut un problema enviant el correu. Reviseu la configuració.",
"Email sent" : "El correu electrónic s'ha enviat",
"You need to set your user email before being able to send test emails." : "Heu d'establir un nom d'usuari abans de poder enviar correus de prova.",
"Email saved" : "S'ha desat el correu electrònic",
diff --git a/settings/l10n/cs_CZ.js b/settings/l10n/cs_CZ.js
index a2856534eaa..7703c8e2c23 100644
--- a/settings/l10n/cs_CZ.js
+++ b/settings/l10n/cs_CZ.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Upozornění zabezpečení a nastavení",
"Cron" : "Cron",
"Sharing" : "Sdílení",
- "Security" : "Zabezpečení",
"Email Server" : "Emailový server",
"Log" : "Záznam",
"Authentication error" : "Chyba přihlášení",
@@ -39,8 +38,7 @@ OC.L10N.register(
"log-level out of allowed range" : "úroveň logování z povoleného rozpětí",
"Saved" : "Uloženo",
"test email settings" : "otestovat nastavení emailu",
- "If you received this email, the settings seem to be correct." : "Pokud jste obdrželi tento email, nastavení se zdají být v pořádku.",
- "A problem occurred while sending the email. Please revise your settings." : "Při odesílání emailu nastala chyba. Překontrolujte prosím svá nastavení.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Při odesílání emailu nastala chyba. Překontrolujte prosím svá nastavení. (Error: %s)",
"Email sent" : "Email odeslán",
"You need to set your user email before being able to send test emails." : "Pro možnost odeslání zkušebních emailů musíte nejprve nastavit svou emailovou adresu.",
"Invalid mail address" : "Neplatná emailová adresa",
@@ -132,6 +130,7 @@ OC.L10N.register(
"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:",
"Configuration Checks" : "Ověření konfigurace",
"No problems found" : "Nebyly nalezeny žádné problémy",
+ "Please double check the <a 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 href=\"%s\">instalační příručky</a> a zkontrolujte <a href=\"#log-section\">log</a> na výskyt chyb a varování.",
"Last cron job execution: %s." : "Poslední cron proběhl: %s.",
"Last cron job execution: %s. Something seems wrong." : "Poslední cron proběhl: %s. Vypadá to, že něco není v pořádku.",
"Cron was not executed yet!" : "Cron ještě nebyl spuštěn!",
diff --git a/settings/l10n/cs_CZ.json b/settings/l10n/cs_CZ.json
index 012c0db3457..171aa88a088 100644
--- a/settings/l10n/cs_CZ.json
+++ b/settings/l10n/cs_CZ.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Upozornění zabezpečení a nastavení",
"Cron" : "Cron",
"Sharing" : "Sdílení",
- "Security" : "Zabezpečení",
"Email Server" : "Emailový server",
"Log" : "Záznam",
"Authentication error" : "Chyba přihlášení",
@@ -37,8 +36,7 @@
"log-level out of allowed range" : "úroveň logování z povoleného rozpětí",
"Saved" : "Uloženo",
"test email settings" : "otestovat nastavení emailu",
- "If you received this email, the settings seem to be correct." : "Pokud jste obdrželi tento email, nastavení se zdají být v pořádku.",
- "A problem occurred while sending the email. Please revise your settings." : "Při odesílání emailu nastala chyba. Překontrolujte prosím svá nastavení.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Při odesílání emailu nastala chyba. Překontrolujte prosím svá nastavení. (Error: %s)",
"Email sent" : "Email odeslán",
"You need to set your user email before being able to send test emails." : "Pro možnost odeslání zkušebních emailů musíte nejprve nastavit svou emailovou adresu.",
"Invalid mail address" : "Neplatná emailová adresa",
@@ -130,6 +128,7 @@
"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:",
"Configuration Checks" : "Ověření konfigurace",
"No problems found" : "Nebyly nalezeny žádné problémy",
+ "Please double check the <a 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 href=\"%s\">instalační příručky</a> a zkontrolujte <a href=\"#log-section\">log</a> na výskyt chyb a varování.",
"Last cron job execution: %s." : "Poslední cron proběhl: %s.",
"Last cron job execution: %s. Something seems wrong." : "Poslední cron proběhl: %s. Vypadá to, že něco není v pořádku.",
"Cron was not executed yet!" : "Cron ještě nebyl spuštěn!",
diff --git a/settings/l10n/da.js b/settings/l10n/da.js
index bba55f27a52..e011534cc29 100644
--- a/settings/l10n/da.js
+++ b/settings/l10n/da.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Advarsler om sikkerhed og opsætning",
"Cron" : "Cron",
"Sharing" : "Deling",
- "Security" : "Sikkerhed",
"Email Server" : "E-mailserver",
"Log" : "Log",
"Authentication error" : "Adgangsfejl",
@@ -39,8 +38,6 @@ OC.L10N.register(
"log-level out of allowed range" : "niveau for logregistrering går ud over tilladte interval",
"Saved" : "Gemt",
"test email settings" : "test e-mailindstillinger",
- "If you received this email, the settings seem to be correct." : "Hvis du har modtaget denne e-mail, så lader indstillinger til at være korrekte.",
- "A problem occurred while sending the email. Please revise your settings." : "Der opstod en fejl under afsendelse af e-mailen. Gennemse venligst dine indstillinger.",
"Email sent" : "E-mail afsendt",
"You need to set your user email before being able to send test emails." : "Du skal angive din bruger-e-mail før der kan sendes test-e-mail.",
"Invalid mail address" : "Ugyldig mailadresse",
diff --git a/settings/l10n/da.json b/settings/l10n/da.json
index 17444a752d2..e7574292916 100644
--- a/settings/l10n/da.json
+++ b/settings/l10n/da.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Advarsler om sikkerhed og opsætning",
"Cron" : "Cron",
"Sharing" : "Deling",
- "Security" : "Sikkerhed",
"Email Server" : "E-mailserver",
"Log" : "Log",
"Authentication error" : "Adgangsfejl",
@@ -37,8 +36,6 @@
"log-level out of allowed range" : "niveau for logregistrering går ud over tilladte interval",
"Saved" : "Gemt",
"test email settings" : "test e-mailindstillinger",
- "If you received this email, the settings seem to be correct." : "Hvis du har modtaget denne e-mail, så lader indstillinger til at være korrekte.",
- "A problem occurred while sending the email. Please revise your settings." : "Der opstod en fejl under afsendelse af e-mailen. Gennemse venligst dine indstillinger.",
"Email sent" : "E-mail afsendt",
"You need to set your user email before being able to send test emails." : "Du skal angive din bruger-e-mail før der kan sendes test-e-mail.",
"Invalid mail address" : "Ugyldig mailadresse",
diff --git a/settings/l10n/de.js b/settings/l10n/de.js
index 2b2db61a89b..cd8117f72e4 100644
--- a/settings/l10n/de.js
+++ b/settings/l10n/de.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Sicherheits- & Einrichtungswarnungen",
"Cron" : "Cron",
"Sharing" : "Teilen",
- "Security" : "Sicherheit",
"Email Server" : "E-Mail-Server",
"Log" : "Log",
"Authentication error" : "Authentifizierungsfehler",
@@ -39,8 +38,7 @@ OC.L10N.register(
"log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs",
"Saved" : "Gespeichert",
"test email settings" : "E-Mail-Einstellungen testen",
- "If you received this email, the settings seem to be correct." : "Wenn Du diese E-Mail erhalten hast, sind die Einstellungen korrekt.",
- "A problem occurred while sending the email. Please revise your settings." : "Ein Problem ist beim Senden der E-Mail aufgetreten. Bitte überprüfe deine Einstellungen.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Beim Senden der E-Mail ist ein Problem aufgetreten. Bitte überprüfe Deine Einstellungen. (Fehler: %s)",
"Email sent" : "E-Mail wurde verschickt",
"You need to set your user email before being able to send test emails." : "Du musst zunächst Deine Benutzer-E-Mail-Adresse angeben, bevor Du Test-E-Mail verschicken kannst.",
"Invalid mail address" : "Ungültige E-Mail-Adresse",
@@ -132,6 +130,7 @@ OC.L10N.register(
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Die Ausführung des Cron-Jobs über die Kommandozeile war nicht möglich. Die folgenden technischen Fehler sind dabei aufgetreten:",
"Configuration Checks" : "Konfigurationsprüfungen",
"No problems found" : "Keine Probleme gefunden",
+ "Please double check the <a href=\"%s\">installation guides</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Bitte überprüfe noch einmal die <a href=\"%s\">Installationsanleitungen</a> und kontrolliere das <a href=\"#log-section\">Log</a> auf mögliche Fehler oder Warnungen.",
"Last cron job execution: %s." : "Letzte Cron-Job-Ausführung: %s.",
"Last cron job execution: %s. Something seems wrong." : "Letzte Cron-Job-Ausführung: %s. Möglicherweise liegt ein Fehler vor.",
"Cron was not executed yet!" : "Cron wurde bis jetzt noch nicht ausgeführt!",
diff --git a/settings/l10n/de.json b/settings/l10n/de.json
index 031dab3f074..5c664803c31 100644
--- a/settings/l10n/de.json
+++ b/settings/l10n/de.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Sicherheits- & Einrichtungswarnungen",
"Cron" : "Cron",
"Sharing" : "Teilen",
- "Security" : "Sicherheit",
"Email Server" : "E-Mail-Server",
"Log" : "Log",
"Authentication error" : "Authentifizierungsfehler",
@@ -37,8 +36,7 @@
"log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs",
"Saved" : "Gespeichert",
"test email settings" : "E-Mail-Einstellungen testen",
- "If you received this email, the settings seem to be correct." : "Wenn Du diese E-Mail erhalten hast, sind die Einstellungen korrekt.",
- "A problem occurred while sending the email. Please revise your settings." : "Ein Problem ist beim Senden der E-Mail aufgetreten. Bitte überprüfe deine Einstellungen.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Beim Senden der E-Mail ist ein Problem aufgetreten. Bitte überprüfe Deine Einstellungen. (Fehler: %s)",
"Email sent" : "E-Mail wurde verschickt",
"You need to set your user email before being able to send test emails." : "Du musst zunächst Deine Benutzer-E-Mail-Adresse angeben, bevor Du Test-E-Mail verschicken kannst.",
"Invalid mail address" : "Ungültige E-Mail-Adresse",
@@ -130,6 +128,7 @@
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Die Ausführung des Cron-Jobs über die Kommandozeile war nicht möglich. Die folgenden technischen Fehler sind dabei aufgetreten:",
"Configuration Checks" : "Konfigurationsprüfungen",
"No problems found" : "Keine Probleme gefunden",
+ "Please double check the <a href=\"%s\">installation guides</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Bitte überprüfe noch einmal die <a href=\"%s\">Installationsanleitungen</a> und kontrolliere das <a href=\"#log-section\">Log</a> auf mögliche Fehler oder Warnungen.",
"Last cron job execution: %s." : "Letzte Cron-Job-Ausführung: %s.",
"Last cron job execution: %s. Something seems wrong." : "Letzte Cron-Job-Ausführung: %s. Möglicherweise liegt ein Fehler vor.",
"Cron was not executed yet!" : "Cron wurde bis jetzt noch nicht ausgeführt!",
diff --git a/settings/l10n/de_DE.js b/settings/l10n/de_DE.js
index 1825f1049d6..69d85ca3d54 100644
--- a/settings/l10n/de_DE.js
+++ b/settings/l10n/de_DE.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Sicherheits- & Einrichtungswarnungen",
"Cron" : "Cron",
"Sharing" : "Teilen",
- "Security" : "Sicherheit",
"Email Server" : "E-Mail-Server",
"Log" : "Log",
"Authentication error" : "Authentifizierungsfehler",
@@ -39,8 +38,7 @@ OC.L10N.register(
"log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs",
"Saved" : "Gespeichert",
"test email settings" : "E-Mail-Einstellungen testen",
- "If you received this email, the settings seem to be correct." : "Wenn Sie diese E-Mail erhalten haben, scheinen die Einstellungen richtig zu sein.",
- "A problem occurred while sending the email. Please revise your settings." : "Ein Problem ist beim Senden der E-Mail aufgetreten. Bitte überprüfen Sie Ihre Einstellungen.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Beim Senden der E-Mail ist ein Problem aufgetreten. Bitte überprüfen Sie Ihre Einstellungen. (Fehler: %s)",
"Email sent" : "E-Mail gesendet",
"You need to set your user email before being able to send test emails." : "Sie müssen Ihre Benutzer-E-Mail-Adresse einstellen, bevor Sie Test-E-Mails versenden können.",
"Invalid mail address" : "Ungültige E-Mail-Adresse",
@@ -132,6 +130,7 @@ OC.L10N.register(
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Die Ausführung des Cron-Jobs über die Kommandozeile war nicht möglich. Die folgenden technischen Fehler sind dabei aufgetreten:",
"Configuration Checks" : "Konfigurationsprüfungen",
"No problems found" : "Keine Probleme gefunden",
+ "Please double check the <a href=\"%s\">installation guides</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Bitte überprüfen Sie noch einmal die <a href=\"%s\">Installationsanleitungen</a> und kontrollieren Sie das <a href=\"#log-section\">Log</a> auf mögliche Fehler oder Warnungen.",
"Last cron job execution: %s." : "Letzte Cron-Job-Ausführung: %s.",
"Last cron job execution: %s. Something seems wrong." : "Letzte Cron-Job-Ausführung: %s. Möglicherweise liegt ein Fehler vor.",
"Cron was not executed yet!" : "Cron wurde bis jetzt noch nicht ausgeführt!",
diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json
index 8b885bb876f..68673822c03 100644
--- a/settings/l10n/de_DE.json
+++ b/settings/l10n/de_DE.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Sicherheits- & Einrichtungswarnungen",
"Cron" : "Cron",
"Sharing" : "Teilen",
- "Security" : "Sicherheit",
"Email Server" : "E-Mail-Server",
"Log" : "Log",
"Authentication error" : "Authentifizierungsfehler",
@@ -37,8 +36,7 @@
"log-level out of allowed range" : "Log-Level außerhalb des erlaubten Bereichs",
"Saved" : "Gespeichert",
"test email settings" : "E-Mail-Einstellungen testen",
- "If you received this email, the settings seem to be correct." : "Wenn Sie diese E-Mail erhalten haben, scheinen die Einstellungen richtig zu sein.",
- "A problem occurred while sending the email. Please revise your settings." : "Ein Problem ist beim Senden der E-Mail aufgetreten. Bitte überprüfen Sie Ihre Einstellungen.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Beim Senden der E-Mail ist ein Problem aufgetreten. Bitte überprüfen Sie Ihre Einstellungen. (Fehler: %s)",
"Email sent" : "E-Mail gesendet",
"You need to set your user email before being able to send test emails." : "Sie müssen Ihre Benutzer-E-Mail-Adresse einstellen, bevor Sie Test-E-Mails versenden können.",
"Invalid mail address" : "Ungültige E-Mail-Adresse",
@@ -130,6 +128,7 @@
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Die Ausführung des Cron-Jobs über die Kommandozeile war nicht möglich. Die folgenden technischen Fehler sind dabei aufgetreten:",
"Configuration Checks" : "Konfigurationsprüfungen",
"No problems found" : "Keine Probleme gefunden",
+ "Please double check the <a href=\"%s\">installation guides</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Bitte überprüfen Sie noch einmal die <a href=\"%s\">Installationsanleitungen</a> und kontrollieren Sie das <a href=\"#log-section\">Log</a> auf mögliche Fehler oder Warnungen.",
"Last cron job execution: %s." : "Letzte Cron-Job-Ausführung: %s.",
"Last cron job execution: %s. Something seems wrong." : "Letzte Cron-Job-Ausführung: %s. Möglicherweise liegt ein Fehler vor.",
"Cron was not executed yet!" : "Cron wurde bis jetzt noch nicht ausgeführt!",
diff --git a/settings/l10n/el.js b/settings/l10n/el.js
index 2b8bdac8d73..d1aa6041f45 100644
--- a/settings/l10n/el.js
+++ b/settings/l10n/el.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Προειδοποιήσεις ασφάλειας & ρυθμίσεων",
"Cron" : "Cron",
"Sharing" : "Διαμοιρασμός",
- "Security" : "Ασφάλεια",
"Email Server" : "Διακομιστής Email",
"Log" : "Καταγραφές",
"Authentication error" : "Σφάλμα πιστοποίησης",
@@ -38,8 +37,6 @@ OC.L10N.register(
"Unable to delete group." : "Αδυναμία διαγραφής ομάδας.",
"Saved" : "Αποθηκεύτηκαν",
"test email settings" : "δοκιμή ρυθμίσεων email",
- "If you received this email, the settings seem to be correct." : "Εάν λάβατε αυτό το email, οι ρυθμίσεις δείχνουν να είναι σωστές.",
- "A problem occurred while sending the email. Please revise your settings." : "Παρουσιάστηκε ένα σφάλμα κατά την αποστολή του email. Παρακαλώ αναθεωρήστε τις ρυθμίσεις σας.",
"Email sent" : "Το Email απεστάλη ",
"You need to set your user email before being able to send test emails." : "Πρέπει να ορίσετε το email του χρήστη πριν να είστε σε θέση να στείλετε δοκιμαστικά emails.",
"Invalid mail address" : "Μη έγκυρη διεύθυνση ταχυδρομείου.",
diff --git a/settings/l10n/el.json b/settings/l10n/el.json
index b9ea914de98..44d06dc53c6 100644
--- a/settings/l10n/el.json
+++ b/settings/l10n/el.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Προειδοποιήσεις ασφάλειας & ρυθμίσεων",
"Cron" : "Cron",
"Sharing" : "Διαμοιρασμός",
- "Security" : "Ασφάλεια",
"Email Server" : "Διακομιστής Email",
"Log" : "Καταγραφές",
"Authentication error" : "Σφάλμα πιστοποίησης",
@@ -36,8 +35,6 @@
"Unable to delete group." : "Αδυναμία διαγραφής ομάδας.",
"Saved" : "Αποθηκεύτηκαν",
"test email settings" : "δοκιμή ρυθμίσεων email",
- "If you received this email, the settings seem to be correct." : "Εάν λάβατε αυτό το email, οι ρυθμίσεις δείχνουν να είναι σωστές.",
- "A problem occurred while sending the email. Please revise your settings." : "Παρουσιάστηκε ένα σφάλμα κατά την αποστολή του email. Παρακαλώ αναθεωρήστε τις ρυθμίσεις σας.",
"Email sent" : "Το Email απεστάλη ",
"You need to set your user email before being able to send test emails." : "Πρέπει να ορίσετε το email του χρήστη πριν να είστε σε θέση να στείλετε δοκιμαστικά emails.",
"Invalid mail address" : "Μη έγκυρη διεύθυνση ταχυδρομείου.",
diff --git a/settings/l10n/en_GB.js b/settings/l10n/en_GB.js
index 3109540a699..52735d9f8bd 100644
--- a/settings/l10n/en_GB.js
+++ b/settings/l10n/en_GB.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Security & Setup Warnings",
"Cron" : "Cron",
"Sharing" : "Sharing",
- "Security" : "Security",
"Email Server" : "Email Server",
"Log" : "Log",
"Authentication error" : "Authentication error",
@@ -39,8 +38,6 @@ OC.L10N.register(
"log-level out of allowed range" : "log-level out of allowed range",
"Saved" : "Saved",
"test email settings" : "test email settings",
- "If you received this email, the settings seem to be correct." : "If you received this email, the settings seem to be correct.",
- "A problem occurred while sending the email. Please revise your settings." : "A problem occurred whilst sending the email. Please revise your settings.",
"Email sent" : "Email sent",
"You need to set your user email before being able to send test emails." : "You need to set your user email before being able to send test emails.",
"Invalid mail address" : "Invalid mail address",
diff --git a/settings/l10n/en_GB.json b/settings/l10n/en_GB.json
index ac99428a6af..7a2e2ec716c 100644
--- a/settings/l10n/en_GB.json
+++ b/settings/l10n/en_GB.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Security & Setup Warnings",
"Cron" : "Cron",
"Sharing" : "Sharing",
- "Security" : "Security",
"Email Server" : "Email Server",
"Log" : "Log",
"Authentication error" : "Authentication error",
@@ -37,8 +36,6 @@
"log-level out of allowed range" : "log-level out of allowed range",
"Saved" : "Saved",
"test email settings" : "test email settings",
- "If you received this email, the settings seem to be correct." : "If you received this email, the settings seem to be correct.",
- "A problem occurred while sending the email. Please revise your settings." : "A problem occurred whilst sending the email. Please revise your settings.",
"Email sent" : "Email sent",
"You need to set your user email before being able to send test emails." : "You need to set your user email before being able to send test emails.",
"Invalid mail address" : "Invalid mail address",
diff --git a/settings/l10n/eo.js b/settings/l10n/eo.js
index ac2cde8908b..51851c5e31c 100644
--- a/settings/l10n/eo.js
+++ b/settings/l10n/eo.js
@@ -3,7 +3,6 @@ OC.L10N.register(
{
"Cron" : "Cron",
"Sharing" : "Kunhavigo",
- "Security" : "Sekuro",
"Email Server" : "Retpoŝtoservilo",
"Log" : "Protokolo",
"Authentication error" : "Aŭtentiga eraro",
diff --git a/settings/l10n/eo.json b/settings/l10n/eo.json
index 7ae45f9d09b..a766d3e69b6 100644
--- a/settings/l10n/eo.json
+++ b/settings/l10n/eo.json
@@ -1,7 +1,6 @@
{ "translations": {
"Cron" : "Cron",
"Sharing" : "Kunhavigo",
- "Security" : "Sekuro",
"Email Server" : "Retpoŝtoservilo",
"Log" : "Protokolo",
"Authentication error" : "Aŭtentiga eraro",
diff --git a/settings/l10n/es.js b/settings/l10n/es.js
index e2eda7c10a1..ab6b78dedf6 100644
--- a/settings/l10n/es.js
+++ b/settings/l10n/es.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Advertencias de configuración y seguridad",
"Cron" : "Cron",
"Sharing" : "Compartiendo",
- "Security" : "Seguridad",
"Email Server" : "Servidor de correo electrónico",
"Log" : "Registro",
"Authentication error" : "Error de autenticación",
@@ -39,8 +38,6 @@ OC.L10N.register(
"log-level out of allowed range" : "Nivel de autenticación fuera del rango permitido",
"Saved" : "Guardado",
"test email settings" : "probar configuración de correo electrónico",
- "If you received this email, the settings seem to be correct." : "Si recibió este mensaje de correo electrónico, su configuración debe estar correcta.",
- "A problem occurred while sending the email. Please revise your settings." : "Ocurrió un problema al mandar el mensaje. Revise la configuración.",
"Email sent" : "Correo electrónico enviado",
"You need to set your user email before being able to send test emails." : "Tiene que configurar su dirección de correo electrónico antes de poder enviar mensajes de prueba.",
"Invalid mail address" : "Dirección de correo inválida",
@@ -132,6 +129,7 @@ OC.L10N.register(
"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:",
"Configuration Checks" : "Comprobaciones de la configuración",
"No problems found" : "No se han encontrado problemas",
+ "Please double check the <a 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 href=\"%s\">guías de instalación</a>, y compruebe errores o avisos en el <a href=\"#log-section\">registro</a>.",
"Last cron job execution: %s." : "Cron se ejecutó por última vez: %s",
"Last cron job execution: %s. Something seems wrong." : "Cron se ejecutó por última vez: %s. Algo va mal.",
"Cron was not executed yet!" : "¡Cron aún no ha sido ejecutado!",
diff --git a/settings/l10n/es.json b/settings/l10n/es.json
index b27eaaac479..260de23521e 100644
--- a/settings/l10n/es.json
+++ b/settings/l10n/es.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Advertencias de configuración y seguridad",
"Cron" : "Cron",
"Sharing" : "Compartiendo",
- "Security" : "Seguridad",
"Email Server" : "Servidor de correo electrónico",
"Log" : "Registro",
"Authentication error" : "Error de autenticación",
@@ -37,8 +36,6 @@
"log-level out of allowed range" : "Nivel de autenticación fuera del rango permitido",
"Saved" : "Guardado",
"test email settings" : "probar configuración de correo electrónico",
- "If you received this email, the settings seem to be correct." : "Si recibió este mensaje de correo electrónico, su configuración debe estar correcta.",
- "A problem occurred while sending the email. Please revise your settings." : "Ocurrió un problema al mandar el mensaje. Revise la configuración.",
"Email sent" : "Correo electrónico enviado",
"You need to set your user email before being able to send test emails." : "Tiene que configurar su dirección de correo electrónico antes de poder enviar mensajes de prueba.",
"Invalid mail address" : "Dirección de correo inválida",
@@ -130,6 +127,7 @@
"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:",
"Configuration Checks" : "Comprobaciones de la configuración",
"No problems found" : "No se han encontrado problemas",
+ "Please double check the <a 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 href=\"%s\">guías de instalación</a>, y compruebe errores o avisos en el <a href=\"#log-section\">registro</a>.",
"Last cron job execution: %s." : "Cron se ejecutó por última vez: %s",
"Last cron job execution: %s. Something seems wrong." : "Cron se ejecutó por última vez: %s. Algo va mal.",
"Cron was not executed yet!" : "¡Cron aún no ha sido ejecutado!",
diff --git a/settings/l10n/es_AR.js b/settings/l10n/es_AR.js
index cfd4b3d9daf..40559b016c6 100644
--- a/settings/l10n/es_AR.js
+++ b/settings/l10n/es_AR.js
@@ -3,7 +3,6 @@ OC.L10N.register(
{
"Cron" : "Cron",
"Sharing" : "Compartiendo",
- "Security" : "Seguridad",
"Email Server" : "Servidor de correo electrónico",
"Log" : "Log",
"Authentication error" : "Error al autenticar",
@@ -24,7 +23,6 @@ OC.L10N.register(
"Enabled" : "Habilitado",
"Saved" : "Guardado",
"test email settings" : "Configuración de correo de prueba.",
- "If you received this email, the settings seem to be correct." : "Si recibió este correo, la configuración parece estar correcta.",
"Email sent" : "e-mail mandado",
"You need to set your user email before being able to send test emails." : "Necesita especificar el usuario de correo electrónico antes de poder enviar correos electrónicos de prueba.",
"Email saved" : "e-mail guardado",
diff --git a/settings/l10n/es_AR.json b/settings/l10n/es_AR.json
index f2b8322c40b..e7045951f45 100644
--- a/settings/l10n/es_AR.json
+++ b/settings/l10n/es_AR.json
@@ -1,7 +1,6 @@
{ "translations": {
"Cron" : "Cron",
"Sharing" : "Compartiendo",
- "Security" : "Seguridad",
"Email Server" : "Servidor de correo electrónico",
"Log" : "Log",
"Authentication error" : "Error al autenticar",
@@ -22,7 +21,6 @@
"Enabled" : "Habilitado",
"Saved" : "Guardado",
"test email settings" : "Configuración de correo de prueba.",
- "If you received this email, the settings seem to be correct." : "Si recibió este correo, la configuración parece estar correcta.",
"Email sent" : "e-mail mandado",
"You need to set your user email before being able to send test emails." : "Necesita especificar el usuario de correo electrónico antes de poder enviar correos electrónicos de prueba.",
"Email saved" : "e-mail guardado",
diff --git a/settings/l10n/es_MX.js b/settings/l10n/es_MX.js
index c0919321307..cb32d47b8f8 100644
--- a/settings/l10n/es_MX.js
+++ b/settings/l10n/es_MX.js
@@ -3,7 +3,6 @@ OC.L10N.register(
{
"Cron" : "Cron",
"Sharing" : "Compartiendo",
- "Security" : "Seguridad",
"Log" : "Registro",
"Authentication error" : "Error de autenticación",
"Your full name has been changed." : "Se ha cambiado su nombre completo.",
diff --git a/settings/l10n/es_MX.json b/settings/l10n/es_MX.json
index d73e8b2fdb4..9422e58890f 100644
--- a/settings/l10n/es_MX.json
+++ b/settings/l10n/es_MX.json
@@ -1,7 +1,6 @@
{ "translations": {
"Cron" : "Cron",
"Sharing" : "Compartiendo",
- "Security" : "Seguridad",
"Log" : "Registro",
"Authentication error" : "Error de autenticación",
"Your full name has been changed." : "Se ha cambiado su nombre completo.",
diff --git a/settings/l10n/et_EE.js b/settings/l10n/et_EE.js
index 837f98162c7..1e960ace68f 100644
--- a/settings/l10n/et_EE.js
+++ b/settings/l10n/et_EE.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Turva- ja paigalduse hoiatused",
"Cron" : "Cron",
"Sharing" : "Jagamine",
- "Security" : "Turvalisus",
"Email Server" : "Postiserver",
"Log" : "Logi",
"Authentication error" : "Autentimise viga",
@@ -34,8 +33,6 @@ OC.L10N.register(
"Recommended" : "Soovitatud",
"Saved" : "Salvestatud",
"test email settings" : "testi e-posti seadeid",
- "If you received this email, the settings seem to be correct." : "Kui said selle kirja, siis on seadistus korrektne.",
- "A problem occurred while sending the email. Please revise your settings." : "Kirja saatmisel tekkis tõrge. Palun kontrolli üle oma seadistus.",
"Email sent" : "E-kiri on saadetud",
"You need to set your user email before being able to send test emails." : "Pead seadistama oma e-postienne kui on võimalik saata test-kirju.",
"Email saved" : "Kiri on salvestatud",
diff --git a/settings/l10n/et_EE.json b/settings/l10n/et_EE.json
index 94180d22cd5..7badb8ed0df 100644
--- a/settings/l10n/et_EE.json
+++ b/settings/l10n/et_EE.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Turva- ja paigalduse hoiatused",
"Cron" : "Cron",
"Sharing" : "Jagamine",
- "Security" : "Turvalisus",
"Email Server" : "Postiserver",
"Log" : "Logi",
"Authentication error" : "Autentimise viga",
@@ -32,8 +31,6 @@
"Recommended" : "Soovitatud",
"Saved" : "Salvestatud",
"test email settings" : "testi e-posti seadeid",
- "If you received this email, the settings seem to be correct." : "Kui said selle kirja, siis on seadistus korrektne.",
- "A problem occurred while sending the email. Please revise your settings." : "Kirja saatmisel tekkis tõrge. Palun kontrolli üle oma seadistus.",
"Email sent" : "E-kiri on saadetud",
"You need to set your user email before being able to send test emails." : "Pead seadistama oma e-postienne kui on võimalik saata test-kirju.",
"Email saved" : "Kiri on salvestatud",
diff --git a/settings/l10n/eu.js b/settings/l10n/eu.js
index c9123659b76..d043adac2d1 100644
--- a/settings/l10n/eu.js
+++ b/settings/l10n/eu.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Segurtasun eta Konfigurazio Abisuak",
"Cron" : "Cron",
"Sharing" : "Partekatzea",
- "Security" : "Segurtasuna",
"Email Server" : "Eposta zerbitzaria",
"Log" : "Log",
"Authentication error" : "Autentifikazio errorea",
@@ -38,8 +37,6 @@ OC.L10N.register(
"log-level out of allowed range" : "erregistro-maila baimendutako tartetik at",
"Saved" : "Gordeta",
"test email settings" : "probatu eposta ezarpenak",
- "If you received this email, the settings seem to be correct." : "Eposta hau jaso baduzu, zure ezarpenak egokiak direnaren seinale",
- "A problem occurred while sending the email. Please revise your settings." : "Arazo bat gertatu da eposta bidaltzean. Berrikusi zure ezarpenak.",
"Email sent" : "Eposta bidalia",
"You need to set your user email before being able to send test emails." : "Epostaren erabiltzailea zehaztu behar duzu probako eposta bidali aurretik.",
"Invalid mail address" : "Posta helbide baliogabea",
diff --git a/settings/l10n/eu.json b/settings/l10n/eu.json
index 1324065b198..65d46ac766e 100644
--- a/settings/l10n/eu.json
+++ b/settings/l10n/eu.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Segurtasun eta Konfigurazio Abisuak",
"Cron" : "Cron",
"Sharing" : "Partekatzea",
- "Security" : "Segurtasuna",
"Email Server" : "Eposta zerbitzaria",
"Log" : "Log",
"Authentication error" : "Autentifikazio errorea",
@@ -36,8 +35,6 @@
"log-level out of allowed range" : "erregistro-maila baimendutako tartetik at",
"Saved" : "Gordeta",
"test email settings" : "probatu eposta ezarpenak",
- "If you received this email, the settings seem to be correct." : "Eposta hau jaso baduzu, zure ezarpenak egokiak direnaren seinale",
- "A problem occurred while sending the email. Please revise your settings." : "Arazo bat gertatu da eposta bidaltzean. Berrikusi zure ezarpenak.",
"Email sent" : "Eposta bidalia",
"You need to set your user email before being able to send test emails." : "Epostaren erabiltzailea zehaztu behar duzu probako eposta bidali aurretik.",
"Invalid mail address" : "Posta helbide baliogabea",
diff --git a/settings/l10n/fa.js b/settings/l10n/fa.js
index cc1c7f5799d..4bea729c293 100644
--- a/settings/l10n/fa.js
+++ b/settings/l10n/fa.js
@@ -3,7 +3,6 @@ OC.L10N.register(
{
"Cron" : "زمانبند",
"Sharing" : "اشتراک گذاری",
- "Security" : "امنیت",
"Email Server" : "سرور ایمیل",
"Log" : "کارنامه",
"Authentication error" : "خطا در اعتبار سنجی",
diff --git a/settings/l10n/fa.json b/settings/l10n/fa.json
index 0d49bc82393..0847be261e0 100644
--- a/settings/l10n/fa.json
+++ b/settings/l10n/fa.json
@@ -1,7 +1,6 @@
{ "translations": {
"Cron" : "زمانبند",
"Sharing" : "اشتراک گذاری",
- "Security" : "امنیت",
"Email Server" : "سرور ایمیل",
"Log" : "کارنامه",
"Authentication error" : "خطا در اعتبار سنجی",
diff --git a/settings/l10n/fi_FI.js b/settings/l10n/fi_FI.js
index fe4e3cda8df..72754a0112e 100644
--- a/settings/l10n/fi_FI.js
+++ b/settings/l10n/fi_FI.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Turvallisuus- ja asetusvaroitukset",
"Cron" : "Cron",
"Sharing" : "Jakaminen",
- "Security" : "Tietoturva",
"Email Server" : "Sähköpostipalvelin",
"Log" : "Loki",
"Authentication error" : "Tunnistautumisvirhe",
@@ -39,8 +38,7 @@ OC.L10N.register(
"log-level out of allowed range" : "lokitaso ei sallittujen rajojen sisäpuolella",
"Saved" : "Tallennettu",
"test email settings" : "testaa sähköpostiasetukset",
- "If you received this email, the settings seem to be correct." : "Jos sait tämän sähköpostin, kaikki asetukset vaikuttavat olevan kunnossa.",
- "A problem occurred while sending the email. Please revise your settings." : "Sähköpostia lähettäessä tapahtui virhe. Tarkista asetukset.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Sähköpostia lähettäessä tapahtui virhe. Tarkista asetukset. (Virhe: %s)",
"Email sent" : "Sähköposti lähetetty",
"You need to set your user email before being able to send test emails." : "Aseta sähköpostiosoite, jotta voit testata sähköpostin toimivuutta.",
"Invalid mail address" : "Virheellinen sähköpostiosoite",
@@ -126,6 +124,7 @@ OC.L10N.register(
"Cronjob encountered misconfiguration" : "Cron-työ epäonnistui väärien asetusten vuoksi",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Cron-työn suorittaminen komentorivin kautta ei onnistunut. Ilmeni seuraavia teknisiä virheitä:",
"No problems found" : "Ongelmia ei löytynyt",
+ "Please double check the <a href=\"%s\">installation guides</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Lue <a href=\"%s\">asennusohjeet</a> uudelleen. Tarkista myös virheet ja varoitukset <a href=\"#log-section\">lokista</a>.",
"Last cron job execution: %s." : "Viimeisin cron-työn suoritus: %s.",
"Last cron job execution: %s. Something seems wrong." : "Viimeisin cron-työn suoritus: %s. Jokin vaikuttaa menneen pieleen.",
"Cron was not executed yet!" : "Cronia ei suoritettu vielä!",
diff --git a/settings/l10n/fi_FI.json b/settings/l10n/fi_FI.json
index d59f58b2c69..c88725c3c80 100644
--- a/settings/l10n/fi_FI.json
+++ b/settings/l10n/fi_FI.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Turvallisuus- ja asetusvaroitukset",
"Cron" : "Cron",
"Sharing" : "Jakaminen",
- "Security" : "Tietoturva",
"Email Server" : "Sähköpostipalvelin",
"Log" : "Loki",
"Authentication error" : "Tunnistautumisvirhe",
@@ -37,8 +36,7 @@
"log-level out of allowed range" : "lokitaso ei sallittujen rajojen sisäpuolella",
"Saved" : "Tallennettu",
"test email settings" : "testaa sähköpostiasetukset",
- "If you received this email, the settings seem to be correct." : "Jos sait tämän sähköpostin, kaikki asetukset vaikuttavat olevan kunnossa.",
- "A problem occurred while sending the email. Please revise your settings." : "Sähköpostia lähettäessä tapahtui virhe. Tarkista asetukset.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Sähköpostia lähettäessä tapahtui virhe. Tarkista asetukset. (Virhe: %s)",
"Email sent" : "Sähköposti lähetetty",
"You need to set your user email before being able to send test emails." : "Aseta sähköpostiosoite, jotta voit testata sähköpostin toimivuutta.",
"Invalid mail address" : "Virheellinen sähköpostiosoite",
@@ -124,6 +122,7 @@
"Cronjob encountered misconfiguration" : "Cron-työ epäonnistui väärien asetusten vuoksi",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Cron-työn suorittaminen komentorivin kautta ei onnistunut. Ilmeni seuraavia teknisiä virheitä:",
"No problems found" : "Ongelmia ei löytynyt",
+ "Please double check the <a href=\"%s\">installation guides</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Lue <a href=\"%s\">asennusohjeet</a> uudelleen. Tarkista myös virheet ja varoitukset <a href=\"#log-section\">lokista</a>.",
"Last cron job execution: %s." : "Viimeisin cron-työn suoritus: %s.",
"Last cron job execution: %s. Something seems wrong." : "Viimeisin cron-työn suoritus: %s. Jokin vaikuttaa menneen pieleen.",
"Cron was not executed yet!" : "Cronia ei suoritettu vielä!",
diff --git a/settings/l10n/fr.js b/settings/l10n/fr.js
index e502acc3643..bad6637d00a 100644
--- a/settings/l10n/fr.js
+++ b/settings/l10n/fr.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Alertes de sécurité ou de configuration",
"Cron" : "Cron",
"Sharing" : "Partage",
- "Security" : "Sécurité",
"Email Server" : "Serveur mail",
"Log" : "Log",
"Authentication error" : "Erreur d'authentification",
@@ -39,8 +38,7 @@ OC.L10N.register(
"log-level out of allowed range" : "niveau de journalisation hors borne",
"Saved" : "Sauvegardé",
"test email settings" : "tester les paramètres d'e-mail",
- "If you received this email, the settings seem to be correct." : "Si vous recevez cet email, c'est que les paramètres sont corrects",
- "A problem occurred while sending the email. Please revise your settings." : "Une erreur est survenue lors de l'envoi de l'e-mail. Veuillez vérifier vos paramètres.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Une erreur est survenue lors de l'envoi de l'e-mail. Veuillez vérifier vos paramètres. (Erreur: %s)",
"Email sent" : "Email envoyé",
"You need to set your user email before being able to send test emails." : "Vous devez configurer votre e-mail d'utilisateur avant de pouvoir envoyer des e-mails de test.",
"Invalid mail address" : "Adresse email non valide",
@@ -132,6 +130,7 @@ OC.L10N.register(
"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 :",
"Configuration Checks" : "Vérification de la configuration",
"No problems found" : "Aucun problème trouvé",
+ "Please double check the <a href=\"%s\">installation guides</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Consultez les <a href=\"%s\">guides d'installation</a>, et cherchez des erreurs dans <a href=\"#log-section\">les logs</a>.",
"Last cron job execution: %s." : "Dernière tâche cron exécutée : %s.",
"Last cron job execution: %s. Something seems wrong." : "Dernière tâche cron exécutée : %s. Quelque chose s'est mal passé.",
"Cron was not executed yet!" : "Le cron n'a pas encore été exécuté !",
@@ -170,7 +169,7 @@ OC.L10N.register(
"Download logfile" : "Télécharger le fichier de journalisation",
"More" : "Plus",
"Less" : "Moins",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Le fichier de journalisation dépasser les 100 Mo. Le télécharger peut prendre un certain temps.",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "La taille du fichier journal excède 100 Mo. Le télécharger peut prendre un certain temps!",
"Version" : "Version",
"More apps" : "Plus d'applications",
"Developer documentation" : "Documentation pour les développeurs",
diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json
index 6e853f1c55e..21196e67a8f 100644
--- a/settings/l10n/fr.json
+++ b/settings/l10n/fr.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Alertes de sécurité ou de configuration",
"Cron" : "Cron",
"Sharing" : "Partage",
- "Security" : "Sécurité",
"Email Server" : "Serveur mail",
"Log" : "Log",
"Authentication error" : "Erreur d'authentification",
@@ -37,8 +36,7 @@
"log-level out of allowed range" : "niveau de journalisation hors borne",
"Saved" : "Sauvegardé",
"test email settings" : "tester les paramètres d'e-mail",
- "If you received this email, the settings seem to be correct." : "Si vous recevez cet email, c'est que les paramètres sont corrects",
- "A problem occurred while sending the email. Please revise your settings." : "Une erreur est survenue lors de l'envoi de l'e-mail. Veuillez vérifier vos paramètres.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Une erreur est survenue lors de l'envoi de l'e-mail. Veuillez vérifier vos paramètres. (Erreur: %s)",
"Email sent" : "Email envoyé",
"You need to set your user email before being able to send test emails." : "Vous devez configurer votre e-mail d'utilisateur avant de pouvoir envoyer des e-mails de test.",
"Invalid mail address" : "Adresse email non valide",
@@ -130,6 +128,7 @@
"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 :",
"Configuration Checks" : "Vérification de la configuration",
"No problems found" : "Aucun problème trouvé",
+ "Please double check the <a href=\"%s\">installation guides</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Consultez les <a href=\"%s\">guides d'installation</a>, et cherchez des erreurs dans <a href=\"#log-section\">les logs</a>.",
"Last cron job execution: %s." : "Dernière tâche cron exécutée : %s.",
"Last cron job execution: %s. Something seems wrong." : "Dernière tâche cron exécutée : %s. Quelque chose s'est mal passé.",
"Cron was not executed yet!" : "Le cron n'a pas encore été exécuté !",
@@ -168,7 +167,7 @@
"Download logfile" : "Télécharger le fichier de journalisation",
"More" : "Plus",
"Less" : "Moins",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Le fichier de journalisation dépasser les 100 Mo. Le télécharger peut prendre un certain temps.",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "La taille du fichier journal excède 100 Mo. Le télécharger peut prendre un certain temps!",
"Version" : "Version",
"More apps" : "Plus d'applications",
"Developer documentation" : "Documentation pour les développeurs",
diff --git a/settings/l10n/gl.js b/settings/l10n/gl.js
index 157e1d62d6d..781c4ba4581 100644
--- a/settings/l10n/gl.js
+++ b/settings/l10n/gl.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Avisos de seguridade e configuración",
"Cron" : "Cron",
"Sharing" : "Compartindo",
- "Security" : "Seguranza",
"Email Server" : "Servidor de correo",
"Log" : "Rexistro",
"Authentication error" : "Produciuse un erro de autenticación",
@@ -39,8 +38,7 @@ OC.L10N.register(
"log-level out of allowed range" : "o nivel do rexistro está fora do intervalo admitido",
"Saved" : "Gardado",
"test email settings" : "correo de proba dos axustes",
- "If you received this email, the settings seem to be correct." : "Se recibiu este correo, semella que a configuración é correcta.",
- "A problem occurred while sending the email. Please revise your settings." : "Produciuse un erro mentres enviaba o correo. Revise os axustes.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Produciuse un erro mentres enviaba o correo. Revise a súa configuración. (Erro: %s)",
"Email sent" : "Correo enviado",
"You need to set your user email before being able to send test emails." : "É necesario configurar o correo do usuario antes de poder enviar mensaxes de correo de proba.",
"Invalid mail address" : "Enderezo de correo incorrecto",
@@ -132,6 +130,7 @@ OC.L10N.register(
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Non foi posíbel executar a tarefa de cron programada desde a liña de ordes. Atopáronse os seguintes erros técnicos:",
"Configuration Checks" : "Comprobacións da configuración",
"No problems found" : "Non se atoparon problemas",
+ "Please double check the <a href=\"%s\">installation guides</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Volva comprobar as <a href=\"%s\">guías de instalación</a>, e comprobe que non existen erros ou avisos no <a href=\"#log-section\">rexistro</a>.>.",
"Last cron job execution: %s." : "Última execución da tarefa de cron: %s.",
"Last cron job execution: %s. Something seems wrong." : "Última execución da tarefa de cron: %s. Semella que algo vai mal",
"Cron was not executed yet!" : "«Cron» aínda non foi executado!",
diff --git a/settings/l10n/gl.json b/settings/l10n/gl.json
index 6a09a3bbc6f..32d8a98513e 100644
--- a/settings/l10n/gl.json
+++ b/settings/l10n/gl.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Avisos de seguridade e configuración",
"Cron" : "Cron",
"Sharing" : "Compartindo",
- "Security" : "Seguranza",
"Email Server" : "Servidor de correo",
"Log" : "Rexistro",
"Authentication error" : "Produciuse un erro de autenticación",
@@ -37,8 +36,7 @@
"log-level out of allowed range" : "o nivel do rexistro está fora do intervalo admitido",
"Saved" : "Gardado",
"test email settings" : "correo de proba dos axustes",
- "If you received this email, the settings seem to be correct." : "Se recibiu este correo, semella que a configuración é correcta.",
- "A problem occurred while sending the email. Please revise your settings." : "Produciuse un erro mentres enviaba o correo. Revise os axustes.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Produciuse un erro mentres enviaba o correo. Revise a súa configuración. (Erro: %s)",
"Email sent" : "Correo enviado",
"You need to set your user email before being able to send test emails." : "É necesario configurar o correo do usuario antes de poder enviar mensaxes de correo de proba.",
"Invalid mail address" : "Enderezo de correo incorrecto",
@@ -130,6 +128,7 @@
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Non foi posíbel executar a tarefa de cron programada desde a liña de ordes. Atopáronse os seguintes erros técnicos:",
"Configuration Checks" : "Comprobacións da configuración",
"No problems found" : "Non se atoparon problemas",
+ "Please double check the <a href=\"%s\">installation guides</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Volva comprobar as <a href=\"%s\">guías de instalación</a>, e comprobe que non existen erros ou avisos no <a href=\"#log-section\">rexistro</a>.>.",
"Last cron job execution: %s." : "Última execución da tarefa de cron: %s.",
"Last cron job execution: %s. Something seems wrong." : "Última execución da tarefa de cron: %s. Semella que algo vai mal",
"Cron was not executed yet!" : "«Cron» aínda non foi executado!",
diff --git a/settings/l10n/he.js b/settings/l10n/he.js
index 99e717412f5..8148c8518c5 100644
--- a/settings/l10n/he.js
+++ b/settings/l10n/he.js
@@ -3,7 +3,6 @@ OC.L10N.register(
{
"Cron" : "Cron",
"Sharing" : "שיתוף",
- "Security" : "אבטחה",
"Log" : "יומן",
"Authentication error" : "שגיאת הזדהות",
"Language changed" : "שפה השתנתה",
diff --git a/settings/l10n/he.json b/settings/l10n/he.json
index adf1d2509d0..6fecd990f42 100644
--- a/settings/l10n/he.json
+++ b/settings/l10n/he.json
@@ -1,7 +1,6 @@
{ "translations": {
"Cron" : "Cron",
"Sharing" : "שיתוף",
- "Security" : "אבטחה",
"Log" : "יומן",
"Authentication error" : "שגיאת הזדהות",
"Language changed" : "שפה השתנתה",
diff --git a/settings/l10n/hr.js b/settings/l10n/hr.js
index e26488e6011..a44496bee83 100644
--- a/settings/l10n/hr.js
+++ b/settings/l10n/hr.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Upozorenja o sigurnosti i postavkama",
"Cron" : "Cron",
"Sharing" : "Dijeljenje zajedničkih resursa",
- "Security" : "Sigurnost",
"Email Server" : "Poslužitelj e-pošte",
"Log" : "Zapisnik",
"Authentication error" : "Pogrešna autentikacija",
@@ -33,7 +32,6 @@ OC.L10N.register(
"Recommended" : "Preporuceno",
"Saved" : "Spremljeno",
"test email settings" : "Postavke za testiranje e-pošte",
- "If you received this email, the settings seem to be correct." : "Ako ste ovu e-poštu primili,čini se da su postavke ispravne.",
"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",
diff --git a/settings/l10n/hr.json b/settings/l10n/hr.json
index 2dbc156393b..bf4a5407358 100644
--- a/settings/l10n/hr.json
+++ b/settings/l10n/hr.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Upozorenja o sigurnosti i postavkama",
"Cron" : "Cron",
"Sharing" : "Dijeljenje zajedničkih resursa",
- "Security" : "Sigurnost",
"Email Server" : "Poslužitelj e-pošte",
"Log" : "Zapisnik",
"Authentication error" : "Pogrešna autentikacija",
@@ -31,7 +30,6 @@
"Recommended" : "Preporuceno",
"Saved" : "Spremljeno",
"test email settings" : "Postavke za testiranje e-pošte",
- "If you received this email, the settings seem to be correct." : "Ako ste ovu e-poštu primili,čini se da su postavke ispravne.",
"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",
diff --git a/settings/l10n/hu_HU.js b/settings/l10n/hu_HU.js
index 40c04f645a0..b0e354e07a2 100644
--- a/settings/l10n/hu_HU.js
+++ b/settings/l10n/hu_HU.js
@@ -3,7 +3,6 @@ OC.L10N.register(
{
"Cron" : "Ütemezett feladatok",
"Sharing" : "Megosztás",
- "Security" : "Biztonság",
"Email Server" : "E-mail kiszolgáló",
"Log" : "Naplózás",
"Authentication error" : "Azonosítási hiba",
@@ -32,7 +31,6 @@ OC.L10N.register(
"Recommended" : "Ajánlott",
"Saved" : "Elmentve",
"test email settings" : "e-mail beállítások ellenőrzése",
- "If you received this email, the settings seem to be correct." : "Amennyiben megérkezett ez az e-mail akkor a beállítások megfelelők.",
"Email sent" : "Az e-mailt elküldtük",
"You need to set your user email before being able to send test emails." : "Előbb meg kell adnia az e-mail címét, mielőtt tesztelni tudná az e-mail küldést.",
"Email saved" : "Elmentettük az e-mail címet",
diff --git a/settings/l10n/hu_HU.json b/settings/l10n/hu_HU.json
index c2329653a20..1e9d6eb49e2 100644
--- a/settings/l10n/hu_HU.json
+++ b/settings/l10n/hu_HU.json
@@ -1,7 +1,6 @@
{ "translations": {
"Cron" : "Ütemezett feladatok",
"Sharing" : "Megosztás",
- "Security" : "Biztonság",
"Email Server" : "E-mail kiszolgáló",
"Log" : "Naplózás",
"Authentication error" : "Azonosítási hiba",
@@ -30,7 +29,6 @@
"Recommended" : "Ajánlott",
"Saved" : "Elmentve",
"test email settings" : "e-mail beállítások ellenőrzése",
- "If you received this email, the settings seem to be correct." : "Amennyiben megérkezett ez az e-mail akkor a beállítások megfelelők.",
"Email sent" : "Az e-mailt elküldtük",
"You need to set your user email before being able to send test emails." : "Előbb meg kell adnia az e-mail címét, mielőtt tesztelni tudná az e-mail küldést.",
"Email saved" : "Elmentettük az e-mail címet",
diff --git a/settings/l10n/ia.js b/settings/l10n/ia.js
index f964ae33c2b..3f90be0c618 100644
--- a/settings/l10n/ia.js
+++ b/settings/l10n/ia.js
@@ -4,8 +4,10 @@ OC.L10N.register(
"Log" : "Registro",
"Language changed" : "Linguage cambiate",
"Invalid request" : "Requesta invalide",
+ "Wrong password" : "Contrasigno errate",
"Saved" : "Salveguardate",
"Email sent" : "Message de e-posta inviate",
+ "All" : "Omne",
"Very weak password" : "Contrasigno multo debile",
"Weak password" : "Contrasigno debile",
"So-so password" : "Contrasigno passabile",
diff --git a/settings/l10n/ia.json b/settings/l10n/ia.json
index 6e340356f3b..346d1b15994 100644
--- a/settings/l10n/ia.json
+++ b/settings/l10n/ia.json
@@ -2,8 +2,10 @@
"Log" : "Registro",
"Language changed" : "Linguage cambiate",
"Invalid request" : "Requesta invalide",
+ "Wrong password" : "Contrasigno errate",
"Saved" : "Salveguardate",
"Email sent" : "Message de e-posta inviate",
+ "All" : "Omne",
"Very weak password" : "Contrasigno multo debile",
"Weak password" : "Contrasigno debile",
"So-so password" : "Contrasigno passabile",
diff --git a/settings/l10n/id.js b/settings/l10n/id.js
index dab5c914726..cbe7ac5dae3 100644
--- a/settings/l10n/id.js
+++ b/settings/l10n/id.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Keamanan dan Setelan Peringatan",
"Cron" : "Cron",
"Sharing" : "Berbagi",
- "Security" : "Keamanan",
"Email Server" : "Server Email",
"Log" : "Log",
"Authentication error" : "Terjadi kesalahan saat otentikasi",
@@ -38,8 +37,6 @@ OC.L10N.register(
"log-level out of allowed range" : "level-log melebihi batas yang diizinkan",
"Saved" : "Disimpan",
"test email settings" : "pengaturan email percobaan",
- "If you received this email, the settings seem to be correct." : "Jika Anda menerma email ini, pengaturan tampaknya sudah benar.",
- "A problem occurred while sending the email. Please revise your settings." : "Muncul masalah tidak terduga saat mengirim email. Mohon merevisi pengaturan Anda.",
"Email sent" : "Email terkirim",
"You need to set your user email before being able to send test emails." : "Anda perlu menetapkan email pengguna Anda sebelum dapat mengirim email percobaan.",
"Invalid mail address" : "Alamat email salah",
diff --git a/settings/l10n/id.json b/settings/l10n/id.json
index 5cb894d2952..9b187644908 100644
--- a/settings/l10n/id.json
+++ b/settings/l10n/id.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Keamanan dan Setelan Peringatan",
"Cron" : "Cron",
"Sharing" : "Berbagi",
- "Security" : "Keamanan",
"Email Server" : "Server Email",
"Log" : "Log",
"Authentication error" : "Terjadi kesalahan saat otentikasi",
@@ -36,8 +35,6 @@
"log-level out of allowed range" : "level-log melebihi batas yang diizinkan",
"Saved" : "Disimpan",
"test email settings" : "pengaturan email percobaan",
- "If you received this email, the settings seem to be correct." : "Jika Anda menerma email ini, pengaturan tampaknya sudah benar.",
- "A problem occurred while sending the email. Please revise your settings." : "Muncul masalah tidak terduga saat mengirim email. Mohon merevisi pengaturan Anda.",
"Email sent" : "Email terkirim",
"You need to set your user email before being able to send test emails." : "Anda perlu menetapkan email pengguna Anda sebelum dapat mengirim email percobaan.",
"Invalid mail address" : "Alamat email salah",
diff --git a/settings/l10n/it.js b/settings/l10n/it.js
index c4a9df11255..0a8dceb915c 100644
--- a/settings/l10n/it.js
+++ b/settings/l10n/it.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Avvisi di sicurezza e configurazione",
"Cron" : "Cron",
"Sharing" : "Condivisione",
- "Security" : "Protezione",
"Email Server" : "Server di posta",
"Log" : "Log",
"Authentication error" : "Errore di autenticazione",
@@ -39,8 +38,7 @@ OC.L10N.register(
"log-level out of allowed range" : "livello di log fuori dall'intervallo consentito",
"Saved" : "Salvato",
"test email settings" : "prova impostazioni email",
- "If you received this email, the settings seem to be correct." : "Se hai ricevuto questa email, le impostazioni dovrebbero essere corrette.",
- "A problem occurred while sending the email. Please revise your settings." : "Si è verificato un problema durante l'invio dell'email. Controlla le tue impostazioni.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Si è verificato un problema durante l'invio dell'email. Controlla le tue impostazioni. (Errore: %s)",
"Email sent" : "Email inviata",
"You need to set your user email before being able to send test emails." : "Devi impostare l'indirizzo del tuo utente prima di poter provare l'invio delle email.",
"Invalid mail address" : "Indirizzo email non valido",
@@ -132,6 +130,7 @@ OC.L10N.register(
"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:",
"Configuration Checks" : "Controlli di configurazione",
"No problems found" : "Nessun problema trovato",
+ "Please double check the <a href=\"%s\">installation guides</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Leggi attentamente le <a href=\"%s\">guide d'installazione</a>, e controlla gli errori e gli avvisi nel <a href=\"#log-section\">log</a>.",
"Last cron job execution: %s." : "Ultima esecuzione di cron: %s.",
"Last cron job execution: %s. Something seems wrong." : "Ultima esecuzione di cron: %s. Potrebbe esserci un problema.",
"Cron was not executed yet!" : "Cron non è stato ancora eseguito!",
diff --git a/settings/l10n/it.json b/settings/l10n/it.json
index 2450a916d1e..7569e9f3a08 100644
--- a/settings/l10n/it.json
+++ b/settings/l10n/it.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Avvisi di sicurezza e configurazione",
"Cron" : "Cron",
"Sharing" : "Condivisione",
- "Security" : "Protezione",
"Email Server" : "Server di posta",
"Log" : "Log",
"Authentication error" : "Errore di autenticazione",
@@ -37,8 +36,7 @@
"log-level out of allowed range" : "livello di log fuori dall'intervallo consentito",
"Saved" : "Salvato",
"test email settings" : "prova impostazioni email",
- "If you received this email, the settings seem to be correct." : "Se hai ricevuto questa email, le impostazioni dovrebbero essere corrette.",
- "A problem occurred while sending the email. Please revise your settings." : "Si è verificato un problema durante l'invio dell'email. Controlla le tue impostazioni.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Si è verificato un problema durante l'invio dell'email. Controlla le tue impostazioni. (Errore: %s)",
"Email sent" : "Email inviata",
"You need to set your user email before being able to send test emails." : "Devi impostare l'indirizzo del tuo utente prima di poter provare l'invio delle email.",
"Invalid mail address" : "Indirizzo email non valido",
@@ -130,6 +128,7 @@
"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:",
"Configuration Checks" : "Controlli di configurazione",
"No problems found" : "Nessun problema trovato",
+ "Please double check the <a href=\"%s\">installation guides</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Leggi attentamente le <a href=\"%s\">guide d'installazione</a>, e controlla gli errori e gli avvisi nel <a href=\"#log-section\">log</a>.",
"Last cron job execution: %s." : "Ultima esecuzione di cron: %s.",
"Last cron job execution: %s. Something seems wrong." : "Ultima esecuzione di cron: %s. Potrebbe esserci un problema.",
"Cron was not executed yet!" : "Cron non è stato ancora eseguito!",
diff --git a/settings/l10n/ja.js b/settings/l10n/ja.js
index 2278e6e5877..6b643ff8b1b 100644
--- a/settings/l10n/ja.js
+++ b/settings/l10n/ja.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "セキュリティ&セットアップ警告",
"Cron" : "Cron",
"Sharing" : "共有",
- "Security" : "セキュリティ",
"Email Server" : "メールサーバー",
"Log" : "ログ",
"Authentication error" : "認証エラー",
@@ -39,8 +38,6 @@ OC.L10N.register(
"log-level out of allowed range" : "ログレベルが許可された範囲を超えています",
"Saved" : "保存されました",
"test email settings" : "メール設定のテスト",
- "If you received this email, the settings seem to be correct." : "このメールを受け取ったら、設定は正しいはずです。",
- "A problem occurred while sending the email. Please revise your settings." : "メールの送信中に問題が発生しました。設定を確認してください。",
"Email sent" : "メールを送信しました",
"You need to set your user email before being able to send test emails." : "ユーザーメールを設定して初めて、テストメールを送信することができるようになります。",
"Invalid mail address" : "無効なメールアドレスです",
diff --git a/settings/l10n/ja.json b/settings/l10n/ja.json
index 531b0de08a7..b3d45d200e1 100644
--- a/settings/l10n/ja.json
+++ b/settings/l10n/ja.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "セキュリティ&セットアップ警告",
"Cron" : "Cron",
"Sharing" : "共有",
- "Security" : "セキュリティ",
"Email Server" : "メールサーバー",
"Log" : "ログ",
"Authentication error" : "認証エラー",
@@ -37,8 +36,6 @@
"log-level out of allowed range" : "ログレベルが許可された範囲を超えています",
"Saved" : "保存されました",
"test email settings" : "メール設定のテスト",
- "If you received this email, the settings seem to be correct." : "このメールを受け取ったら、設定は正しいはずです。",
- "A problem occurred while sending the email. Please revise your settings." : "メールの送信中に問題が発生しました。設定を確認してください。",
"Email sent" : "メールを送信しました",
"You need to set your user email before being able to send test emails." : "ユーザーメールを設定して初めて、テストメールを送信することができるようになります。",
"Invalid mail address" : "無効なメールアドレスです",
diff --git a/settings/l10n/ka_GE.js b/settings/l10n/ka_GE.js
index a0a8c1a25c7..41aeeec9789 100644
--- a/settings/l10n/ka_GE.js
+++ b/settings/l10n/ka_GE.js
@@ -3,7 +3,6 @@ OC.L10N.register(
{
"Cron" : "Cron–ი",
"Sharing" : "გაზიარება",
- "Security" : "უსაფრთხოება",
"Log" : "ლოგი",
"Authentication error" : "ავთენტიფიკაციის შეცდომა",
"Language changed" : "ენა შეცვლილია",
diff --git a/settings/l10n/ka_GE.json b/settings/l10n/ka_GE.json
index 6c4d984bbe6..a09d710f324 100644
--- a/settings/l10n/ka_GE.json
+++ b/settings/l10n/ka_GE.json
@@ -1,7 +1,6 @@
{ "translations": {
"Cron" : "Cron–ი",
"Sharing" : "გაზიარება",
- "Security" : "უსაფრთხოება",
"Log" : "ლოგი",
"Authentication error" : "ავთენტიფიკაციის შეცდომა",
"Language changed" : "ენა შეცვლილია",
diff --git a/settings/l10n/km.js b/settings/l10n/km.js
index 9ec44c3660d..53ce3a47256 100644
--- a/settings/l10n/km.js
+++ b/settings/l10n/km.js
@@ -3,7 +3,6 @@ OC.L10N.register(
{
"Cron" : "Cron",
"Sharing" : "ការ​ចែក​រំលែក",
- "Security" : "សុវត្ថិភាព",
"Email Server" : "ម៉ាស៊ីន​បម្រើ​អ៊ីមែល",
"Log" : "Log",
"Authentication error" : "កំហុស​ការ​ផ្ទៀង​ផ្ទាត់​ភាព​ត្រឹម​ត្រូវ",
@@ -17,7 +16,6 @@ OC.L10N.register(
"Enabled" : "បាន​បើក",
"Saved" : "បាន​រក្សាទុក",
"test email settings" : "សាក​ល្បង​ការ​កំណត់​អ៊ីមែល",
- "If you received this email, the settings seem to be correct." : "ប្រសិន​បើ​អ្នក​ទទួល​បាន​អ៊ីមែល​នេះ មាន​ន័យ​ថា​ការ​កំណត់​គឺ​បាន​ត្រឹមម​ត្រូវ​ហើយ។",
"Email sent" : "បាន​ផ្ញើ​អ៊ីមែល",
"You need to set your user email before being able to send test emails." : "អ្នក​ត្រូវ​តែ​កំណត់​អ៊ីមែល​របស់​អ្នក​មុន​នឹង​អាច​ផ្ញើ​អ៊ីមែល​សាកល្បង​បាន។",
"Email saved" : "បាន​រក្សា​ទុក​អ៊ីមែល",
diff --git a/settings/l10n/km.json b/settings/l10n/km.json
index a648d48e81a..e00d70a0215 100644
--- a/settings/l10n/km.json
+++ b/settings/l10n/km.json
@@ -1,7 +1,6 @@
{ "translations": {
"Cron" : "Cron",
"Sharing" : "ការ​ចែក​រំលែក",
- "Security" : "សុវត្ថិភាព",
"Email Server" : "ម៉ាស៊ីន​បម្រើ​អ៊ីមែល",
"Log" : "Log",
"Authentication error" : "កំហុស​ការ​ផ្ទៀង​ផ្ទាត់​ភាព​ត្រឹម​ត្រូវ",
@@ -15,7 +14,6 @@
"Enabled" : "បាន​បើក",
"Saved" : "បាន​រក្សាទុក",
"test email settings" : "សាក​ល្បង​ការ​កំណត់​អ៊ីមែល",
- "If you received this email, the settings seem to be correct." : "ប្រសិន​បើ​អ្នក​ទទួល​បាន​អ៊ីមែល​នេះ មាន​ន័យ​ថា​ការ​កំណត់​គឺ​បាន​ត្រឹមម​ត្រូវ​ហើយ។",
"Email sent" : "បាន​ផ្ញើ​អ៊ីមែល",
"You need to set your user email before being able to send test emails." : "អ្នក​ត្រូវ​តែ​កំណត់​អ៊ីមែល​របស់​អ្នក​មុន​នឹង​អាច​ផ្ញើ​អ៊ីមែល​សាកល្បង​បាន។",
"Email saved" : "បាន​រក្សា​ទុក​អ៊ីមែល",
diff --git a/settings/l10n/kn.js b/settings/l10n/kn.js
index e0f9a8729fd..e48cb449950 100644
--- a/settings/l10n/kn.js
+++ b/settings/l10n/kn.js
@@ -3,7 +3,6 @@ OC.L10N.register(
{
"Security & Setup Warnings" : "ಭದ್ರತಾ ಮತ್ತು ಸೆಟಪ್ ಎಚ್ಚರಿಕೆಗಳು",
"Sharing" : "ಹಂಚಿಕೆ",
- "Security" : "ಭದ್ರತೆ",
"Email Server" : "ಇ-ಅಂಚೆಯ ಪರಿಚಾರಕ ಗಣಕಯಂತ್ರ",
"Log" : "ಹಿನ್ನೆಲೆಯ ದಾಖಲೆ",
"Authentication error" : "ದೃಢೀಕರಣ ದೋಷ",
@@ -32,8 +31,6 @@ OC.L10N.register(
"Unable to delete group." : "ಗುಂಪುನ್ನು ಅಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.",
"Saved" : "ಉಳಿಸಿದ",
"test email settings" : "ಪರೀರ್ಕ್ಷಾತ ಇ-ಅಂಚೆಯ ಆಯ್ಕೇ",
- "If you received this email, the settings seem to be correct." : "ನೀವು ಈ ಇ-ಅಂಚೆಯನ್ನು ಪಡೆದ ಪಕ್ಷದಲ್ಲಿ, ಆಯ್ಕೇ ಸರಿಯಾಗಿದೆ ಎಂದು ತೋರುತ್ತದೆ.",
- "A problem occurred while sending the email. Please revise your settings." : "ಇ-ಅಂಚೆಯನ್ನು ಕಳುಹಿಸುವ ದೋಷವೊಂದು ಸಂಭವಿಸಿದೆ. ದಯವಿಟ್ಟು ನಿಮ್ಮ ಆಯ್ಕೆಗಳನ್ನು ಪರಿಷ್ಕರಿಸಿಕೊಳ್ಳಿ .",
"Email sent" : "ಇ-ಅಂಚೆ ಕಳುಹಿಸಲಾಗಿದೆ",
"You need to set your user email before being able to send test emails." : "ನೀವು ಪರೀಕ್ಷಾ ಇ-ಅಂಚೆಯನ್ನು ಕಳುಹಿಸುವ ಮುನ್ನ ನಿಮ್ಮ ಬಳಕೆದಾರ ಇ-ಅಂಚೆಯನ್ನು ಹೊಂದಿಸಬೇಕಾಗುತ್ತದೆ.",
"Invalid mail address" : "ಅಮಾನ್ಯ ಇ-ಅಂಚೆ ವಿಳಾಸ",
diff --git a/settings/l10n/kn.json b/settings/l10n/kn.json
index 670f6714696..0c835d78a66 100644
--- a/settings/l10n/kn.json
+++ b/settings/l10n/kn.json
@@ -1,7 +1,6 @@
{ "translations": {
"Security & Setup Warnings" : "ಭದ್ರತಾ ಮತ್ತು ಸೆಟಪ್ ಎಚ್ಚರಿಕೆಗಳು",
"Sharing" : "ಹಂಚಿಕೆ",
- "Security" : "ಭದ್ರತೆ",
"Email Server" : "ಇ-ಅಂಚೆಯ ಪರಿಚಾರಕ ಗಣಕಯಂತ್ರ",
"Log" : "ಹಿನ್ನೆಲೆಯ ದಾಖಲೆ",
"Authentication error" : "ದೃಢೀಕರಣ ದೋಷ",
@@ -30,8 +29,6 @@
"Unable to delete group." : "ಗುಂಪುನ್ನು ಅಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.",
"Saved" : "ಉಳಿಸಿದ",
"test email settings" : "ಪರೀರ್ಕ್ಷಾತ ಇ-ಅಂಚೆಯ ಆಯ್ಕೇ",
- "If you received this email, the settings seem to be correct." : "ನೀವು ಈ ಇ-ಅಂಚೆಯನ್ನು ಪಡೆದ ಪಕ್ಷದಲ್ಲಿ, ಆಯ್ಕೇ ಸರಿಯಾಗಿದೆ ಎಂದು ತೋರುತ್ತದೆ.",
- "A problem occurred while sending the email. Please revise your settings." : "ಇ-ಅಂಚೆಯನ್ನು ಕಳುಹಿಸುವ ದೋಷವೊಂದು ಸಂಭವಿಸಿದೆ. ದಯವಿಟ್ಟು ನಿಮ್ಮ ಆಯ್ಕೆಗಳನ್ನು ಪರಿಷ್ಕರಿಸಿಕೊಳ್ಳಿ .",
"Email sent" : "ಇ-ಅಂಚೆ ಕಳುಹಿಸಲಾಗಿದೆ",
"You need to set your user email before being able to send test emails." : "ನೀವು ಪರೀಕ್ಷಾ ಇ-ಅಂಚೆಯನ್ನು ಕಳುಹಿಸುವ ಮುನ್ನ ನಿಮ್ಮ ಬಳಕೆದಾರ ಇ-ಅಂಚೆಯನ್ನು ಹೊಂದಿಸಬೇಕಾಗುತ್ತದೆ.",
"Invalid mail address" : "ಅಮಾನ್ಯ ಇ-ಅಂಚೆ ವಿಳಾಸ",
diff --git a/settings/l10n/ko.js b/settings/l10n/ko.js
index a9bd847105d..240bf795ae7 100644
--- a/settings/l10n/ko.js
+++ b/settings/l10n/ko.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "보안 및 설치 경고",
"Cron" : "Cron",
"Sharing" : "공유",
- "Security" : "보안",
"Email Server" : "전자우편 서버",
"Log" : "로그",
"Authentication error" : "인증 오류",
@@ -38,8 +37,6 @@ OC.L10N.register(
"log-level out of allowed range" : "로그 단계가 허용 범위를 벗어남",
"Saved" : "저장됨",
"test email settings" : "이메일 설정 시험",
- "If you received this email, the settings seem to be correct." : "이 메일을 받았으면 설정이 올바른 것 같습니다.",
- "A problem occurred while sending the email. Please revise your settings." : "이메일을 보내는 중 문제가 발생하였습니다. 설정을 다시 확인하십시오.",
"Email sent" : "이메일 발송됨",
"You need to set your user email before being able to send test emails." : "테스트 이메일을 보내기 전 내 주소를 설정해야 합니다.",
"Invalid mail address" : "잘못된 이메일 주소",
diff --git a/settings/l10n/ko.json b/settings/l10n/ko.json
index a45ffad6eb1..a89c80002fc 100644
--- a/settings/l10n/ko.json
+++ b/settings/l10n/ko.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "보안 및 설치 경고",
"Cron" : "Cron",
"Sharing" : "공유",
- "Security" : "보안",
"Email Server" : "전자우편 서버",
"Log" : "로그",
"Authentication error" : "인증 오류",
@@ -36,8 +35,6 @@
"log-level out of allowed range" : "로그 단계가 허용 범위를 벗어남",
"Saved" : "저장됨",
"test email settings" : "이메일 설정 시험",
- "If you received this email, the settings seem to be correct." : "이 메일을 받았으면 설정이 올바른 것 같습니다.",
- "A problem occurred while sending the email. Please revise your settings." : "이메일을 보내는 중 문제가 발생하였습니다. 설정을 다시 확인하십시오.",
"Email sent" : "이메일 발송됨",
"You need to set your user email before being able to send test emails." : "테스트 이메일을 보내기 전 내 주소를 설정해야 합니다.",
"Invalid mail address" : "잘못된 이메일 주소",
diff --git a/settings/l10n/lt_LT.js b/settings/l10n/lt_LT.js
index 274ab09e8da..cdf127b424f 100644
--- a/settings/l10n/lt_LT.js
+++ b/settings/l10n/lt_LT.js
@@ -3,7 +3,6 @@ OC.L10N.register(
{
"Cron" : "Cron",
"Sharing" : "Dalijimasis",
- "Security" : "Saugumas",
"Log" : "Žurnalas",
"Authentication error" : "Autentikacijos klaida",
"Language changed" : "Kalba pakeista",
diff --git a/settings/l10n/lt_LT.json b/settings/l10n/lt_LT.json
index a76cbbdf3d9..4522a1cd6d9 100644
--- a/settings/l10n/lt_LT.json
+++ b/settings/l10n/lt_LT.json
@@ -1,7 +1,6 @@
{ "translations": {
"Cron" : "Cron",
"Sharing" : "Dalijimasis",
- "Security" : "Saugumas",
"Log" : "Žurnalas",
"Authentication error" : "Autentikacijos klaida",
"Language changed" : "Kalba pakeista",
diff --git a/settings/l10n/lv.js b/settings/l10n/lv.js
index 9a908209fe8..a94948fa185 100644
--- a/settings/l10n/lv.js
+++ b/settings/l10n/lv.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Drošības & iestatījumu brīdinājumi",
"Cron" : "Cron",
"Sharing" : "Dalīšanās",
- "Security" : "Drošība",
"Email Server" : "E-pasta serveris",
"Log" : "Žurnāls",
"Authentication error" : "Autentifikācijas kļūda",
@@ -37,8 +36,6 @@ OC.L10N.register(
"Unable to delete group." : "Nevar izdzēst grupu.",
"Saved" : "Saglabāts",
"test email settings" : "testēt e-pasta iestatījumus",
- "If you received this email, the settings seem to be correct." : "Ja jūs saņēmāt šo e-pastu, tad izskatās, ka iestatījum ir pareizi.",
- "A problem occurred while sending the email. Please revise your settings." : "Neizdevās nosūtīt e-pastu. Lūdzu pārskatiet savus iestatījumus.",
"Email sent" : "Vēstule nosūtīta",
"You need to set your user email before being able to send test emails." : "Nepieciešams norādīt sava lietotāja e-pasta adresi, lai nosūtīta testa e-pastus.",
"Invalid mail address" : "Nepareiza e-pasta adrese",
diff --git a/settings/l10n/lv.json b/settings/l10n/lv.json
index 182a992eb73..bc5ba01aafa 100644
--- a/settings/l10n/lv.json
+++ b/settings/l10n/lv.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Drošības & iestatījumu brīdinājumi",
"Cron" : "Cron",
"Sharing" : "Dalīšanās",
- "Security" : "Drošība",
"Email Server" : "E-pasta serveris",
"Log" : "Žurnāls",
"Authentication error" : "Autentifikācijas kļūda",
@@ -35,8 +34,6 @@
"Unable to delete group." : "Nevar izdzēst grupu.",
"Saved" : "Saglabāts",
"test email settings" : "testēt e-pasta iestatījumus",
- "If you received this email, the settings seem to be correct." : "Ja jūs saņēmāt šo e-pastu, tad izskatās, ka iestatījum ir pareizi.",
- "A problem occurred while sending the email. Please revise your settings." : "Neizdevās nosūtīt e-pastu. Lūdzu pārskatiet savus iestatījumus.",
"Email sent" : "Vēstule nosūtīta",
"You need to set your user email before being able to send test emails." : "Nepieciešams norādīt sava lietotāja e-pasta adresi, lai nosūtīta testa e-pastus.",
"Invalid mail address" : "Nepareiza e-pasta adrese",
diff --git a/settings/l10n/mk.js b/settings/l10n/mk.js
index 320139c4292..146912a5ac8 100644
--- a/settings/l10n/mk.js
+++ b/settings/l10n/mk.js
@@ -3,7 +3,6 @@ OC.L10N.register(
{
"Cron" : "Крон",
"Sharing" : "Споделување",
- "Security" : "Безбедност",
"Email Server" : "Сервер за електронска пошта",
"Log" : "Записник",
"Authentication error" : "Грешка во автентикација",
diff --git a/settings/l10n/mk.json b/settings/l10n/mk.json
index 459347a713e..567cfaabc73 100644
--- a/settings/l10n/mk.json
+++ b/settings/l10n/mk.json
@@ -1,7 +1,6 @@
{ "translations": {
"Cron" : "Крон",
"Sharing" : "Споделување",
- "Security" : "Безбедност",
"Email Server" : "Сервер за електронска пошта",
"Log" : "Записник",
"Authentication error" : "Грешка во автентикација",
diff --git a/settings/l10n/mn.js b/settings/l10n/mn.js
index a0d6b1e14b1..3bb2864e55b 100644
--- a/settings/l10n/mn.js
+++ b/settings/l10n/mn.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Аюулгүй байдал болон Тохиргооны анхааруулга",
"Cron" : "Крон",
"Sharing" : "Түгээлт",
- "Security" : "Аюулгүй байдал",
"Email Server" : "И-мэйл сервер",
"Log" : "Лог бичилт",
"Authentication error" : "Нотолгооны алдаа",
diff --git a/settings/l10n/mn.json b/settings/l10n/mn.json
index b1332514713..04f5d25c8dd 100644
--- a/settings/l10n/mn.json
+++ b/settings/l10n/mn.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Аюулгүй байдал болон Тохиргооны анхааруулга",
"Cron" : "Крон",
"Sharing" : "Түгээлт",
- "Security" : "Аюулгүй байдал",
"Email Server" : "И-мэйл сервер",
"Log" : "Лог бичилт",
"Authentication error" : "Нотолгооны алдаа",
diff --git a/settings/l10n/nb_NO.js b/settings/l10n/nb_NO.js
index f5f0dda523c..12fadf22002 100644
--- a/settings/l10n/nb_NO.js
+++ b/settings/l10n/nb_NO.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Advarsler for sikkerhet og oppsett",
"Cron" : "Cron",
"Sharing" : "Deling",
- "Security" : "Sikkerhet",
"Email Server" : "E-postserver",
"Log" : "Logg",
"Authentication error" : "Autentiseringsfeil",
@@ -38,8 +37,6 @@ OC.L10N.register(
"log-level out of allowed range" : "Loggnivå utenfor tillatt område",
"Saved" : "Lagret",
"test email settings" : "Test av innstillinger for e-post",
- "If you received this email, the settings seem to be correct." : "Hvis du mottar denne e-posten er innstillingene tydeligvis korrekte.",
- "A problem occurred while sending the email. Please revise your settings." : "Et problem oppstod med sending av e-post. Sjekk innstillingene.",
"Email sent" : "E-post sendt",
"You need to set your user email before being able to send test emails." : "Du må sette e-postadressen for brukeren din før du kan teste sending av e-post.",
"Invalid mail address" : "Ugyldig e-postadresse",
@@ -117,6 +114,7 @@ OC.L10N.register(
"To migrate to another database use the command line tool: 'occ db:convert-type'" : "Bruk følgende kommandolinjeverktøy for å migrere til en annen database: 'occ db:convert-type'",
"Microsoft Windows Platform" : "Mocrosoft Windows Platform",
"Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Serveren din kjører på Microsoft Windows. Vi anbefaler strekt Linux for en optimal brukeropplevelse.",
+ "APCu below version 4.0.6 installed" : "APCu versjon 4.0.6 eller lavere innstallert",
"Module 'fileinfo' missing" : "Modulen 'fileinfo' mangler",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modulen 'fileinfo' mangler. Vi anbefaler at du aktiverer denne modulen for å kunne detektere mime-typen korrekt.",
"Locale not working" : "Nasjonale innstillinger virker ikke",
@@ -163,8 +161,10 @@ OC.L10N.register(
"Download logfile" : "Last ned loggfil",
"More" : "Mer",
"Less" : "Mindre",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Loggfilen er over 100 MB, nedlastingen kan ta en stund!",
"Version" : "Versjon",
"More apps" : "Flere apper",
+ "Developer documentation" : "Utviklerdokumentasjon",
"by" : "av",
"licensed" : "lisensiert",
"Documentation:" : "Dokumentasjon:",
@@ -199,6 +199,7 @@ OC.L10N.register(
"Your email address" : "Din e-postadresse",
"Fill in an email address to enable password recovery and receive notifications" : "Legg inn en e-postadresse for å aktivere passordgjenfinning og motta varsler",
"No email address set" : "E-postadresse ikke satt",
+ "You are member of the following groups:" : "Du er medlem av følgende grupper:",
"Profile picture" : "Profilbilde",
"Upload new" : "Last opp nytt",
"Select new from Files" : "Velg nytt fra Filer",
diff --git a/settings/l10n/nb_NO.json b/settings/l10n/nb_NO.json
index 9239154625a..14debbb0271 100644
--- a/settings/l10n/nb_NO.json
+++ b/settings/l10n/nb_NO.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Advarsler for sikkerhet og oppsett",
"Cron" : "Cron",
"Sharing" : "Deling",
- "Security" : "Sikkerhet",
"Email Server" : "E-postserver",
"Log" : "Logg",
"Authentication error" : "Autentiseringsfeil",
@@ -36,8 +35,6 @@
"log-level out of allowed range" : "Loggnivå utenfor tillatt område",
"Saved" : "Lagret",
"test email settings" : "Test av innstillinger for e-post",
- "If you received this email, the settings seem to be correct." : "Hvis du mottar denne e-posten er innstillingene tydeligvis korrekte.",
- "A problem occurred while sending the email. Please revise your settings." : "Et problem oppstod med sending av e-post. Sjekk innstillingene.",
"Email sent" : "E-post sendt",
"You need to set your user email before being able to send test emails." : "Du må sette e-postadressen for brukeren din før du kan teste sending av e-post.",
"Invalid mail address" : "Ugyldig e-postadresse",
@@ -115,6 +112,7 @@
"To migrate to another database use the command line tool: 'occ db:convert-type'" : "Bruk følgende kommandolinjeverktøy for å migrere til en annen database: 'occ db:convert-type'",
"Microsoft Windows Platform" : "Mocrosoft Windows Platform",
"Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Serveren din kjører på Microsoft Windows. Vi anbefaler strekt Linux for en optimal brukeropplevelse.",
+ "APCu below version 4.0.6 installed" : "APCu versjon 4.0.6 eller lavere innstallert",
"Module 'fileinfo' missing" : "Modulen 'fileinfo' mangler",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modulen 'fileinfo' mangler. Vi anbefaler at du aktiverer denne modulen for å kunne detektere mime-typen korrekt.",
"Locale not working" : "Nasjonale innstillinger virker ikke",
@@ -161,8 +159,10 @@
"Download logfile" : "Last ned loggfil",
"More" : "Mer",
"Less" : "Mindre",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Loggfilen er over 100 MB, nedlastingen kan ta en stund!",
"Version" : "Versjon",
"More apps" : "Flere apper",
+ "Developer documentation" : "Utviklerdokumentasjon",
"by" : "av",
"licensed" : "lisensiert",
"Documentation:" : "Dokumentasjon:",
@@ -197,6 +197,7 @@
"Your email address" : "Din e-postadresse",
"Fill in an email address to enable password recovery and receive notifications" : "Legg inn en e-postadresse for å aktivere passordgjenfinning og motta varsler",
"No email address set" : "E-postadresse ikke satt",
+ "You are member of the following groups:" : "Du er medlem av følgende grupper:",
"Profile picture" : "Profilbilde",
"Upload new" : "Last opp nytt",
"Select new from Files" : "Velg nytt fra Filer",
diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js
index 2686661fce4..f35b0a8f0fd 100644
--- a/settings/l10n/nl.js
+++ b/settings/l10n/nl.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Beveiligings- en instellingswaarschuwingen",
"Cron" : "Cron",
"Sharing" : "Delen",
- "Security" : "Beveiliging",
"Email Server" : "E-mailserver",
"Log" : "Log",
"Authentication error" : "Authenticatie fout",
@@ -39,8 +38,7 @@ OC.L10N.register(
"log-level out of allowed range" : "loggingniveau buiten toegestane bereik",
"Saved" : "Bewaard",
"test email settings" : "test e-mailinstellingen",
- "If you received this email, the settings seem to be correct." : "Als u dit e-mailbericht ontvangt, lijken de instellingen juist.",
- "A problem occurred while sending the email. Please revise your settings." : "Er ontstond een probleem bij het versturen van de e-mail. Controleer uw instellingen.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Er ontstond een probleem bij het versturen van de e-mail. Controleer uw instellingen. (Fout: %s)",
"Email sent" : "E-mail verzonden",
"You need to set your user email before being able to send test emails." : "U moet uw e-mailadres invoeren voordat u testberichten kunt versturen.",
"Invalid mail address" : "Ongeldig e-mailadres",
@@ -132,6 +130,7 @@ OC.L10N.register(
"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:",
"Configuration Checks" : "Configuratie Controles",
"No problems found" : "Geen problemen gevonden",
+ "Please double check the <a 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>.",
"Last cron job execution: %s." : "Laatst uitgevoerde cronjob: %s.",
"Last cron job execution: %s. Something seems wrong." : "Laatst uitgevoerde cronjob: %s. Er lijkt iets fout gegaan.",
"Cron was not executed yet!" : "Cron is nog niet uitgevoerd!",
diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json
index 475dfb1be1c..7ba9726d721 100644
--- a/settings/l10n/nl.json
+++ b/settings/l10n/nl.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Beveiligings- en instellingswaarschuwingen",
"Cron" : "Cron",
"Sharing" : "Delen",
- "Security" : "Beveiliging",
"Email Server" : "E-mailserver",
"Log" : "Log",
"Authentication error" : "Authenticatie fout",
@@ -37,8 +36,7 @@
"log-level out of allowed range" : "loggingniveau buiten toegestane bereik",
"Saved" : "Bewaard",
"test email settings" : "test e-mailinstellingen",
- "If you received this email, the settings seem to be correct." : "Als u dit e-mailbericht ontvangt, lijken de instellingen juist.",
- "A problem occurred while sending the email. Please revise your settings." : "Er ontstond een probleem bij het versturen van de e-mail. Controleer uw instellingen.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Er ontstond een probleem bij het versturen van de e-mail. Controleer uw instellingen. (Fout: %s)",
"Email sent" : "E-mail verzonden",
"You need to set your user email before being able to send test emails." : "U moet uw e-mailadres invoeren voordat u testberichten kunt versturen.",
"Invalid mail address" : "Ongeldig e-mailadres",
@@ -130,6 +128,7 @@
"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:",
"Configuration Checks" : "Configuratie Controles",
"No problems found" : "Geen problemen gevonden",
+ "Please double check the <a 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>.",
"Last cron job execution: %s." : "Laatst uitgevoerde cronjob: %s.",
"Last cron job execution: %s. Something seems wrong." : "Laatst uitgevoerde cronjob: %s. Er lijkt iets fout gegaan.",
"Cron was not executed yet!" : "Cron is nog niet uitgevoerd!",
diff --git a/settings/l10n/nn_NO.js b/settings/l10n/nn_NO.js
index ee269927320..016f54b4b60 100644
--- a/settings/l10n/nn_NO.js
+++ b/settings/l10n/nn_NO.js
@@ -3,7 +3,6 @@ OC.L10N.register(
{
"Cron" : "Cron",
"Sharing" : "Deling",
- "Security" : "Tryggleik",
"Log" : "Logg",
"Authentication error" : "Autentiseringsfeil",
"Language changed" : "Språk endra",
diff --git a/settings/l10n/nn_NO.json b/settings/l10n/nn_NO.json
index 9977cf661b5..eceac88d74d 100644
--- a/settings/l10n/nn_NO.json
+++ b/settings/l10n/nn_NO.json
@@ -1,7 +1,6 @@
{ "translations": {
"Cron" : "Cron",
"Sharing" : "Deling",
- "Security" : "Tryggleik",
"Log" : "Logg",
"Authentication error" : "Autentiseringsfeil",
"Language changed" : "Språk endra",
diff --git a/settings/l10n/pl.js b/settings/l10n/pl.js
index f1e8c8a6cc3..f04cad5d50c 100644
--- a/settings/l10n/pl.js
+++ b/settings/l10n/pl.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Ostrzeżenia bezpieczeństwa i konfiguracji",
"Cron" : "Cron",
"Sharing" : "Udostępnianie",
- "Security" : "Bezpieczeństwo",
"Email Server" : "Serwer pocztowy",
"Log" : "Logi",
"Authentication error" : "Błąd uwierzytelniania",
@@ -38,8 +37,6 @@ OC.L10N.register(
"log-level out of allowed range" : "wartość log-level spoza dozwolonego zakresu",
"Saved" : "Zapisano",
"test email settings" : "przetestuj ustawienia email",
- "If you received this email, the settings seem to be correct." : "Jeśli otrzymałeś ten email, ustawienia wydają się być poprawne.",
- "A problem occurred while sending the email. Please revise your settings." : "Pojawił się problem podczas wysyłania email. Proszę sprawdzić ponownie ustawienia",
"Email sent" : "E-mail wysłany",
"You need to set your user email before being able to send test emails." : "Musisz najpierw ustawić użytkownika e-mail, aby móc wysyłać wiadomości testowe.",
"Invalid mail address" : "Nieprawidłowy adres email",
diff --git a/settings/l10n/pl.json b/settings/l10n/pl.json
index 4cb462ab689..dfdb37aa9a5 100644
--- a/settings/l10n/pl.json
+++ b/settings/l10n/pl.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Ostrzeżenia bezpieczeństwa i konfiguracji",
"Cron" : "Cron",
"Sharing" : "Udostępnianie",
- "Security" : "Bezpieczeństwo",
"Email Server" : "Serwer pocztowy",
"Log" : "Logi",
"Authentication error" : "Błąd uwierzytelniania",
@@ -36,8 +35,6 @@
"log-level out of allowed range" : "wartość log-level spoza dozwolonego zakresu",
"Saved" : "Zapisano",
"test email settings" : "przetestuj ustawienia email",
- "If you received this email, the settings seem to be correct." : "Jeśli otrzymałeś ten email, ustawienia wydają się być poprawne.",
- "A problem occurred while sending the email. Please revise your settings." : "Pojawił się problem podczas wysyłania email. Proszę sprawdzić ponownie ustawienia",
"Email sent" : "E-mail wysłany",
"You need to set your user email before being able to send test emails." : "Musisz najpierw ustawić użytkownika e-mail, aby móc wysyłać wiadomości testowe.",
"Invalid mail address" : "Nieprawidłowy adres email",
diff --git a/settings/l10n/pt_BR.js b/settings/l10n/pt_BR.js
index 3f4bb81a4fc..1f66d1229e2 100644
--- a/settings/l10n/pt_BR.js
+++ b/settings/l10n/pt_BR.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Avisos de Segurança & Configuração",
"Cron" : "Cron",
"Sharing" : "Compartilhamento",
- "Security" : "Segurança",
"Email Server" : "Servidor de Email",
"Log" : "Registro",
"Authentication error" : "Erro de autenticação",
@@ -39,8 +38,7 @@ OC.L10N.register(
"log-level out of allowed range" : "log-nível acima do permitido",
"Saved" : "Salvo",
"test email settings" : "testar configurações de email",
- "If you received this email, the settings seem to be correct." : "Se você recebeu este e-mail, as configurações parecem estar corretas.",
- "A problem occurred while sending the email. Please revise your settings." : "Ocorreu um problema ao enviar o e-mail. Por favor, revise suas configurações.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Ocorreu um problema ao enviar o e-mail. Por favor, revise suas configurações. (Erro: %s)",
"Email sent" : "E-mail enviado",
"You need to set your user email before being able to send test emails." : "Você precisa configurar seu e-mail de usuário antes de ser capaz de enviar e-mails de teste.",
"Invalid mail address" : "Endereço de e-mail inválido",
@@ -132,6 +130,7 @@ OC.L10N.register(
"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:",
"Configuration Checks" : "Verificações de Configuração",
"No problems found" : "Nenhum problema encontrado",
+ "Please double check the <a href=\"%s\">installation guides</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Por favor verifique novamente o <a href=\"%s\">guia de instalações</a>, e procure por qualquer erro ou alerta em <a href=\"#log-section\">log</a>.",
"Last cron job execution: %s." : "Última execução do trabalho cron: %s.",
"Last cron job execution: %s. Something seems wrong." : "Última execução do trabalho cron: %s. Algo parece errado.",
"Cron was not executed yet!" : "Cron não foi executado ainda!",
diff --git a/settings/l10n/pt_BR.json b/settings/l10n/pt_BR.json
index ac9c8a8455f..7b77a6c493b 100644
--- a/settings/l10n/pt_BR.json
+++ b/settings/l10n/pt_BR.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Avisos de Segurança & Configuração",
"Cron" : "Cron",
"Sharing" : "Compartilhamento",
- "Security" : "Segurança",
"Email Server" : "Servidor de Email",
"Log" : "Registro",
"Authentication error" : "Erro de autenticação",
@@ -37,8 +36,7 @@
"log-level out of allowed range" : "log-nível acima do permitido",
"Saved" : "Salvo",
"test email settings" : "testar configurações de email",
- "If you received this email, the settings seem to be correct." : "Se você recebeu este e-mail, as configurações parecem estar corretas.",
- "A problem occurred while sending the email. Please revise your settings." : "Ocorreu um problema ao enviar o e-mail. Por favor, revise suas configurações.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Ocorreu um problema ao enviar o e-mail. Por favor, revise suas configurações. (Erro: %s)",
"Email sent" : "E-mail enviado",
"You need to set your user email before being able to send test emails." : "Você precisa configurar seu e-mail de usuário antes de ser capaz de enviar e-mails de teste.",
"Invalid mail address" : "Endereço de e-mail inválido",
@@ -130,6 +128,7 @@
"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:",
"Configuration Checks" : "Verificações de Configuração",
"No problems found" : "Nenhum problema encontrado",
+ "Please double check the <a href=\"%s\">installation guides</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Por favor verifique novamente o <a href=\"%s\">guia de instalações</a>, e procure por qualquer erro ou alerta em <a href=\"#log-section\">log</a>.",
"Last cron job execution: %s." : "Última execução do trabalho cron: %s.",
"Last cron job execution: %s. Something seems wrong." : "Última execução do trabalho cron: %s. Algo parece errado.",
"Cron was not executed yet!" : "Cron não foi executado ainda!",
diff --git a/settings/l10n/pt_PT.js b/settings/l10n/pt_PT.js
index 599b4f7bab4..a05b7a9911c 100644
--- a/settings/l10n/pt_PT.js
+++ b/settings/l10n/pt_PT.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Avisos de Configuração e Segurança",
"Cron" : "Cron",
"Sharing" : "Partilha",
- "Security" : "Segurança",
"Email Server" : "Servidor de e-mail",
"Log" : "Registo",
"Authentication error" : "Erro na autenticação",
@@ -39,8 +38,7 @@ OC.L10N.register(
"log-level out of allowed range" : "log-level fora do alcance permitido",
"Saved" : "Guardado",
"test email settings" : "testar as definições de e-mail",
- "If you received this email, the settings seem to be correct." : "Se recebeu este e-mail, as configurações parecem estar corretas",
- "A problem occurred while sending the email. Please revise your settings." : "Ocorreu um problema durante o envio do e-mail. Por favor, verifique as suas configurações..",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Um problema ocorreu ao enviar o email. Por favor verifique as suas definições. (Erro: %s)",
"Email sent" : "Mensagem enviada",
"You need to set your user email before being able to send test emails." : "Você precisa de configurar o seu e-mail de usuário antes de ser capaz de enviar e-mails de teste",
"Invalid mail address" : "Endereço de correio eletrónico inválido",
@@ -132,6 +130,7 @@ OC.L10N.register(
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Não foi possível executar o cronjob via CLI. Os seguintes erros técnicos apareceram:",
"Configuration Checks" : "Verificações de Configuração",
"No problems found" : "Nenhum problema encontrado",
+ "Please double check the <a 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 href=\"%s\">guias de instalação</a> e verifique se existe algum erro ou aviso no <a href=\"#log-section\">log</a>.",
"Last cron job execution: %s." : "Última execução de cron job: %s.",
"Last cron job execution: %s. Something seems wrong." : "Última execução de cron job: %s. Algo está errado.",
"Cron was not executed yet!" : "Cron ainda não foi executado!",
diff --git a/settings/l10n/pt_PT.json b/settings/l10n/pt_PT.json
index d90ac9037eb..403f3207e5a 100644
--- a/settings/l10n/pt_PT.json
+++ b/settings/l10n/pt_PT.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Avisos de Configuração e Segurança",
"Cron" : "Cron",
"Sharing" : "Partilha",
- "Security" : "Segurança",
"Email Server" : "Servidor de e-mail",
"Log" : "Registo",
"Authentication error" : "Erro na autenticação",
@@ -37,8 +36,7 @@
"log-level out of allowed range" : "log-level fora do alcance permitido",
"Saved" : "Guardado",
"test email settings" : "testar as definições de e-mail",
- "If you received this email, the settings seem to be correct." : "Se recebeu este e-mail, as configurações parecem estar corretas",
- "A problem occurred while sending the email. Please revise your settings." : "Ocorreu um problema durante o envio do e-mail. Por favor, verifique as suas configurações..",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Um problema ocorreu ao enviar o email. Por favor verifique as suas definições. (Erro: %s)",
"Email sent" : "Mensagem enviada",
"You need to set your user email before being able to send test emails." : "Você precisa de configurar o seu e-mail de usuário antes de ser capaz de enviar e-mails de teste",
"Invalid mail address" : "Endereço de correio eletrónico inválido",
@@ -130,6 +128,7 @@
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Não foi possível executar o cronjob via CLI. Os seguintes erros técnicos apareceram:",
"Configuration Checks" : "Verificações de Configuração",
"No problems found" : "Nenhum problema encontrado",
+ "Please double check the <a 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 href=\"%s\">guias de instalação</a> e verifique se existe algum erro ou aviso no <a href=\"#log-section\">log</a>.",
"Last cron job execution: %s." : "Última execução de cron job: %s.",
"Last cron job execution: %s. Something seems wrong." : "Última execução de cron job: %s. Algo está errado.",
"Cron was not executed yet!" : "Cron ainda não foi executado!",
diff --git a/settings/l10n/ro.js b/settings/l10n/ro.js
index 22d22c0e3c1..17c60b9ac47 100644
--- a/settings/l10n/ro.js
+++ b/settings/l10n/ro.js
@@ -3,7 +3,6 @@ OC.L10N.register(
{
"Cron" : "Cron",
"Sharing" : "Partajare",
- "Security" : "Securitate",
"Log" : "Jurnal de activitate",
"Authentication error" : "Eroare la autentificare",
"Your full name has been changed." : "Numele tău complet a fost schimbat.",
@@ -24,7 +23,6 @@ OC.L10N.register(
"Recommended" : "Recomandat",
"Saved" : "Salvat",
"test email settings" : "verifică setările de e-mail",
- "If you received this email, the settings seem to be correct." : "Dacă ai primit acest e-mail atunci setările par a fi corecte.",
"Email sent" : "Mesajul a fost expediat",
"Email saved" : "E-mail salvat",
"Sending..." : "Se expediază...",
diff --git a/settings/l10n/ro.json b/settings/l10n/ro.json
index 62e5e659839..33a79ca8c4e 100644
--- a/settings/l10n/ro.json
+++ b/settings/l10n/ro.json
@@ -1,7 +1,6 @@
{ "translations": {
"Cron" : "Cron",
"Sharing" : "Partajare",
- "Security" : "Securitate",
"Log" : "Jurnal de activitate",
"Authentication error" : "Eroare la autentificare",
"Your full name has been changed." : "Numele tău complet a fost schimbat.",
@@ -22,7 +21,6 @@
"Recommended" : "Recomandat",
"Saved" : "Salvat",
"test email settings" : "verifică setările de e-mail",
- "If you received this email, the settings seem to be correct." : "Dacă ai primit acest e-mail atunci setările par a fi corecte.",
"Email sent" : "Mesajul a fost expediat",
"Email saved" : "E-mail salvat",
"Sending..." : "Se expediază...",
diff --git a/settings/l10n/ru.js b/settings/l10n/ru.js
index 0184d631fe1..5930660676e 100644
--- a/settings/l10n/ru.js
+++ b/settings/l10n/ru.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Предупреждения безопасности и настроек",
"Cron" : "Cron (планировщик задач)",
"Sharing" : "Общий доступ",
- "Security" : "Безопасность",
"Email Server" : "Почтовый сервер",
"Log" : "Журнал",
"Authentication error" : "Ошибка аутентификации",
@@ -39,8 +38,7 @@ OC.L10N.register(
"log-level out of allowed range" : "уровень журнала вышел за разрешенный диапазон",
"Saved" : "Сохранено",
"test email settings" : "проверить настройки почты",
- "If you received this email, the settings seem to be correct." : "Если вы получили это письмо, значит настройки верны.",
- "A problem occurred while sending the email. Please revise your settings." : "Возникла проблема при отправке письма. Пожалуйста проверьте ваши настройки.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Во время отправки email произошла ошибка. Пожалуйста проверьте настройки. (Ошибка: %s)",
"Email sent" : "Письмо отправлено",
"You need to set your user email before being able to send test emails." : "Вы должны настроить свой e-mail пользователя прежде чем отправлять тестовые сообщения.",
"Invalid mail address" : "Некорректный адрес email",
@@ -132,6 +130,7 @@ OC.L10N.register(
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Не удается запустить задачу планировщика через CLI. Произошли следующие технические ошибки:",
"Configuration Checks" : "Проверка конфигурации",
"No problems found" : "Проблемы не найдены",
+ "Please double check the <a 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>.",
"Last cron job execution: %s." : "Последнее выполненное Cron задание: %s.",
"Last cron job execution: %s. Something seems wrong." : "Последнее выполненное Cron задание: %s. Что-то кажется неправильным.",
"Cron was not executed yet!" : "Задачи cron ещё не запускались!",
diff --git a/settings/l10n/ru.json b/settings/l10n/ru.json
index b8e67b89925..ef03120e18a 100644
--- a/settings/l10n/ru.json
+++ b/settings/l10n/ru.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Предупреждения безопасности и настроек",
"Cron" : "Cron (планировщик задач)",
"Sharing" : "Общий доступ",
- "Security" : "Безопасность",
"Email Server" : "Почтовый сервер",
"Log" : "Журнал",
"Authentication error" : "Ошибка аутентификации",
@@ -37,8 +36,7 @@
"log-level out of allowed range" : "уровень журнала вышел за разрешенный диапазон",
"Saved" : "Сохранено",
"test email settings" : "проверить настройки почты",
- "If you received this email, the settings seem to be correct." : "Если вы получили это письмо, значит настройки верны.",
- "A problem occurred while sending the email. Please revise your settings." : "Возникла проблема при отправке письма. Пожалуйста проверьте ваши настройки.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Во время отправки email произошла ошибка. Пожалуйста проверьте настройки. (Ошибка: %s)",
"Email sent" : "Письмо отправлено",
"You need to set your user email before being able to send test emails." : "Вы должны настроить свой e-mail пользователя прежде чем отправлять тестовые сообщения.",
"Invalid mail address" : "Некорректный адрес email",
@@ -130,6 +128,7 @@
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Не удается запустить задачу планировщика через CLI. Произошли следующие технические ошибки:",
"Configuration Checks" : "Проверка конфигурации",
"No problems found" : "Проблемы не найдены",
+ "Please double check the <a 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>.",
"Last cron job execution: %s." : "Последнее выполненное Cron задание: %s.",
"Last cron job execution: %s. Something seems wrong." : "Последнее выполненное Cron задание: %s. Что-то кажется неправильным.",
"Cron was not executed yet!" : "Задачи cron ещё не запускались!",
diff --git a/settings/l10n/sk_SK.js b/settings/l10n/sk_SK.js
index 828a147cbe2..3db0d8eb486 100644
--- a/settings/l10n/sk_SK.js
+++ b/settings/l10n/sk_SK.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Bezpečnosť a nastavenia upozornení",
"Cron" : "Cron",
"Sharing" : "Zdieľanie",
- "Security" : "Zabezpečenie",
"Email Server" : "Email server",
"Log" : "Záznam",
"Authentication error" : "Chyba autentifikácie",
@@ -39,8 +38,6 @@ OC.L10N.register(
"log-level out of allowed range" : "úroveň logovania z povoleného rozpätia",
"Saved" : "Uložené",
"test email settings" : "nastavenia testovacieho emailu",
- "If you received this email, the settings seem to be correct." : "Ak ste dostali tento email, nastavenie je správne.",
- "A problem occurred while sending the email. Please revise your settings." : "Vyskytol sa problém pri odosielaní emailu. Prosím, znovu skontrolujte svoje nastavenia.",
"Email sent" : "Email odoslaný",
"You need to set your user email before being able to send test emails." : "Musíte nastaviť svoj po​​užívateľský email, než budete môcť odoslať testovací email.",
"Invalid mail address" : "Neplatná emailová adresa",
diff --git a/settings/l10n/sk_SK.json b/settings/l10n/sk_SK.json
index 92db8d7b878..7a20f6ecd09 100644
--- a/settings/l10n/sk_SK.json
+++ b/settings/l10n/sk_SK.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Bezpečnosť a nastavenia upozornení",
"Cron" : "Cron",
"Sharing" : "Zdieľanie",
- "Security" : "Zabezpečenie",
"Email Server" : "Email server",
"Log" : "Záznam",
"Authentication error" : "Chyba autentifikácie",
@@ -37,8 +36,6 @@
"log-level out of allowed range" : "úroveň logovania z povoleného rozpätia",
"Saved" : "Uložené",
"test email settings" : "nastavenia testovacieho emailu",
- "If you received this email, the settings seem to be correct." : "Ak ste dostali tento email, nastavenie je správne.",
- "A problem occurred while sending the email. Please revise your settings." : "Vyskytol sa problém pri odosielaní emailu. Prosím, znovu skontrolujte svoje nastavenia.",
"Email sent" : "Email odoslaný",
"You need to set your user email before being able to send test emails." : "Musíte nastaviť svoj po​​užívateľský email, než budete môcť odoslať testovací email.",
"Invalid mail address" : "Neplatná emailová adresa",
diff --git a/settings/l10n/sl.js b/settings/l10n/sl.js
index a08bdc21df7..1d046745504 100644
--- a/settings/l10n/sl.js
+++ b/settings/l10n/sl.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Varnostna in nastavitvena opozorila",
"Cron" : "Periodično opravilo",
"Sharing" : "Souporaba",
- "Security" : "Varnost",
"Email Server" : "Poštni strežnik",
"Log" : "Dnevnik",
"Authentication error" : "Napaka med overjanjem",
@@ -37,8 +36,6 @@ OC.L10N.register(
"Unable to delete group." : "Ni mogoče izbrisati skupine.",
"Saved" : "Shranjeno",
"test email settings" : "preizkusi nastavitve elektronske pošte",
- "If you received this email, the settings seem to be correct." : "Če ste prejeli to sporočilo, so nastavitve pravilne.",
- "A problem occurred while sending the email. Please revise your settings." : "Prišlo je do napake med pošiljanjem sporočila na elektronski naslov. Spremeniti je treba nastavitve.",
"Email sent" : "Elektronska pošta je poslana",
"You need to set your user email before being able to send test emails." : "Pred preizkusnim pošiljanjem sporočil je treba nastaviti elektronski naslov uporabnika.",
"Invalid mail address" : "Neveljaven elektronski naslov",
diff --git a/settings/l10n/sl.json b/settings/l10n/sl.json
index 75bae7152be..f606d689e23 100644
--- a/settings/l10n/sl.json
+++ b/settings/l10n/sl.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Varnostna in nastavitvena opozorila",
"Cron" : "Periodično opravilo",
"Sharing" : "Souporaba",
- "Security" : "Varnost",
"Email Server" : "Poštni strežnik",
"Log" : "Dnevnik",
"Authentication error" : "Napaka med overjanjem",
@@ -35,8 +34,6 @@
"Unable to delete group." : "Ni mogoče izbrisati skupine.",
"Saved" : "Shranjeno",
"test email settings" : "preizkusi nastavitve elektronske pošte",
- "If you received this email, the settings seem to be correct." : "Če ste prejeli to sporočilo, so nastavitve pravilne.",
- "A problem occurred while sending the email. Please revise your settings." : "Prišlo je do napake med pošiljanjem sporočila na elektronski naslov. Spremeniti je treba nastavitve.",
"Email sent" : "Elektronska pošta je poslana",
"You need to set your user email before being able to send test emails." : "Pred preizkusnim pošiljanjem sporočil je treba nastaviti elektronski naslov uporabnika.",
"Invalid mail address" : "Neveljaven elektronski naslov",
diff --git a/settings/l10n/sq.js b/settings/l10n/sq.js
index f779a1685a8..61a1bb8ce42 100644
--- a/settings/l10n/sq.js
+++ b/settings/l10n/sq.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Paralajmërimet e Sigurisë dhe Konfigurimit",
"Cron" : "Cron",
"Sharing" : "Ndarje",
- "Security" : "Siguria",
"Email Server" : "Serveri Email",
"Log" : "Historik aktiviteti",
"Authentication error" : "Gabim autentifikimi",
diff --git a/settings/l10n/sq.json b/settings/l10n/sq.json
index c9fe14920a1..e53776ab4ac 100644
--- a/settings/l10n/sq.json
+++ b/settings/l10n/sq.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Paralajmërimet e Sigurisë dhe Konfigurimit",
"Cron" : "Cron",
"Sharing" : "Ndarje",
- "Security" : "Siguria",
"Email Server" : "Serveri Email",
"Log" : "Historik aktiviteti",
"Authentication error" : "Gabim autentifikimi",
diff --git a/settings/l10n/sr.js b/settings/l10n/sr.js
index eeedef6f18a..4b63dbf461a 100644
--- a/settings/l10n/sr.js
+++ b/settings/l10n/sr.js
@@ -2,8 +2,8 @@ OC.L10N.register(
"settings",
{
"Security & Setup Warnings" : "Упозорења поставки и безбедности",
+ "Cron" : "Распоређивач задатака",
"Sharing" : "Дељење",
- "Security" : "Безбедност",
"Email Server" : "Сервер е-поште",
"Log" : "Бележење",
"Authentication error" : "Грешка при провери идентитета",
@@ -38,8 +38,7 @@ OC.L10N.register(
"log-level out of allowed range" : "ниво бележења је ван дозвољеног опсега",
"Saved" : "Сачувано",
"test email settings" : "тестирајте поставке е-поште",
- "If you received this email, the settings seem to be correct." : "Уколико сте примили ову поруку, подешавања за е-пошту су исправна.",
- "A problem occurred while sending the email. Please revise your settings." : "Проблем приликом слања е-поште. Проверите поставке.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Појавио се проблем приликом слања е-поште. Молимо вас да проверите ваше поставке. (Грешка: %s)",
"Email sent" : "Порука је послата",
"You need to set your user email before being able to send test emails." : "Морате поставити адресу е-поште пре слања тестне поруке.",
"Invalid mail address" : "Неисправна е-адреса",
@@ -102,15 +101,24 @@ OC.L10N.register(
"Fatal issues only" : "Само фатални проблеми",
"None" : "Ништа",
"Login" : "Пријава",
+ "Plain" : "Једноставан",
+ "NT LAN Manager" : "НТ ЛАН менаџер",
+ "SSL" : "SSL",
+ "TLS" : "TLS",
"Read-Only config enabled" : "Подешавања само-за-читање укључена",
"Setup Warning" : "Упозорење о подешавању",
+ "Database Performance Info" : "Информације о перформансама базе",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Нарочито ако се користи клијент програм у графичком окружењу, коришћење СКуЛајта није препоручљиво.",
+ "To migrate to another database use the command line tool: 'occ db:convert-type'" : "За мигрирацију на другу базу података користите командну линију: 'occ db:convert-type'",
+ "Microsoft Windows Platform" : "Мајкрософт Виндоуз платформа",
+ "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Ваш сервер ради под оперативним системом Microsoft Windows. Препоручујемо оперативни систем Linux за оптималaн кориснички доживљај.",
"Module 'fileinfo' missing" : "Недостаје модул „fileinfo“",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Недостаје ПХП модул „fileinfo“. Препоручујемо вам да га укључите да бисте добили најбоље резултате с откривањем МИМЕ врста.",
"Locale not working" : "Локализација не ради",
"System locale can not be set to a one which supports UTF-8." : "Системски локалитет се не може поставити на неки који подржава УТФ-8",
"This means that there might be problems with certain characters in file names." : "То значи да може доћи до проблема са неким знаковима у називима фајлова.",
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Препоручујемо да инсталирате потребне пакете да бисте подржали следеће локалитете: %s",
+ "URL generation in notification emails" : "УРЛ генерисање у информативним е-порукама",
"Configuration Checks" : "Провера подешавања",
"No problems found" : "Нема никаквих проблема",
"Execute one task with each page loaded" : "Изврши један задатак са сваком учитаном страницом",
@@ -125,7 +133,7 @@ OC.L10N.register(
"Enforce expiration date" : "Захтевај датум истека",
"Allow resharing" : "Дозволи поновно дељење",
"Restrict users to only share with users in their groups" : "Ограничи кориснике да могу да деле само унутар групе",
- "Allow users to send mail notification for shared files to other users" : "Дозволи корисницима да шаљу обавештења за дељене фајлове",
+ "Allow users to send mail notification for shared files to other users" : "Дозволи корисницима да шаљу обавештења е-поштом за дељене фајлове",
"Exclude groups from sharing" : "Изузми групе из дељења",
"These groups will still be able to receive shares, but not to initiate them." : "Ове групе ће моћи да примају дељења али не и да их праве.",
"This is used for sending out notifications." : "Ово се користи за слање обавештења.",
@@ -220,11 +228,12 @@ OC.L10N.register(
"Group" : "Група",
"Everyone" : "Сви",
"Admins" : "Аднинистрација",
- "Default Quota" : "Подразумевано ограничење",
- "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Унесите ограничење складишта (нпр. 512 MB или 12 GB)",
+ "Default Quota" : "Подразумевана квота",
+ "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Унесите квоту складиштења (нпр. 512 MB или 12 GB)",
"Unlimited" : "Неограничено",
"Other" : "Друго",
- "Quota" : "Ограничење",
+ "Group Admin for" : "Групни администратор за",
+ "Quota" : "Квота",
"Storage Location" : "Локација складишта",
"User Backend" : "Позадина за кориснике",
"Last Login" : "Последња пријава",
diff --git a/settings/l10n/sr.json b/settings/l10n/sr.json
index d1f3f8f8683..17d164e4b16 100644
--- a/settings/l10n/sr.json
+++ b/settings/l10n/sr.json
@@ -1,7 +1,7 @@
{ "translations": {
"Security & Setup Warnings" : "Упозорења поставки и безбедности",
+ "Cron" : "Распоређивач задатака",
"Sharing" : "Дељење",
- "Security" : "Безбедност",
"Email Server" : "Сервер е-поште",
"Log" : "Бележење",
"Authentication error" : "Грешка при провери идентитета",
@@ -36,8 +36,7 @@
"log-level out of allowed range" : "ниво бележења је ван дозвољеног опсега",
"Saved" : "Сачувано",
"test email settings" : "тестирајте поставке е-поште",
- "If you received this email, the settings seem to be correct." : "Уколико сте примили ову поруку, подешавања за е-пошту су исправна.",
- "A problem occurred while sending the email. Please revise your settings." : "Проблем приликом слања е-поште. Проверите поставке.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Појавио се проблем приликом слања е-поште. Молимо вас да проверите ваше поставке. (Грешка: %s)",
"Email sent" : "Порука је послата",
"You need to set your user email before being able to send test emails." : "Морате поставити адресу е-поште пре слања тестне поруке.",
"Invalid mail address" : "Неисправна е-адреса",
@@ -100,15 +99,24 @@
"Fatal issues only" : "Само фатални проблеми",
"None" : "Ништа",
"Login" : "Пријава",
+ "Plain" : "Једноставан",
+ "NT LAN Manager" : "НТ ЛАН менаџер",
+ "SSL" : "SSL",
+ "TLS" : "TLS",
"Read-Only config enabled" : "Подешавања само-за-читање укључена",
"Setup Warning" : "Упозорење о подешавању",
+ "Database Performance Info" : "Информације о перформансама базе",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Нарочито ако се користи клијент програм у графичком окружењу, коришћење СКуЛајта није препоручљиво.",
+ "To migrate to another database use the command line tool: 'occ db:convert-type'" : "За мигрирацију на другу базу података користите командну линију: 'occ db:convert-type'",
+ "Microsoft Windows Platform" : "Мајкрософт Виндоуз платформа",
+ "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Ваш сервер ради под оперативним системом Microsoft Windows. Препоручујемо оперативни систем Linux за оптималaн кориснички доживљај.",
"Module 'fileinfo' missing" : "Недостаје модул „fileinfo“",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Недостаје ПХП модул „fileinfo“. Препоручујемо вам да га укључите да бисте добили најбоље резултате с откривањем МИМЕ врста.",
"Locale not working" : "Локализација не ради",
"System locale can not be set to a one which supports UTF-8." : "Системски локалитет се не може поставити на неки који подржава УТФ-8",
"This means that there might be problems with certain characters in file names." : "То значи да може доћи до проблема са неким знаковима у називима фајлова.",
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Препоручујемо да инсталирате потребне пакете да бисте подржали следеће локалитете: %s",
+ "URL generation in notification emails" : "УРЛ генерисање у информативним е-порукама",
"Configuration Checks" : "Провера подешавања",
"No problems found" : "Нема никаквих проблема",
"Execute one task with each page loaded" : "Изврши један задатак са сваком учитаном страницом",
@@ -123,7 +131,7 @@
"Enforce expiration date" : "Захтевај датум истека",
"Allow resharing" : "Дозволи поновно дељење",
"Restrict users to only share with users in their groups" : "Ограничи кориснике да могу да деле само унутар групе",
- "Allow users to send mail notification for shared files to other users" : "Дозволи корисницима да шаљу обавештења за дељене фајлове",
+ "Allow users to send mail notification for shared files to other users" : "Дозволи корисницима да шаљу обавештења е-поштом за дељене фајлове",
"Exclude groups from sharing" : "Изузми групе из дељења",
"These groups will still be able to receive shares, but not to initiate them." : "Ове групе ће моћи да примају дељења али не и да их праве.",
"This is used for sending out notifications." : "Ово се користи за слање обавештења.",
@@ -218,11 +226,12 @@
"Group" : "Група",
"Everyone" : "Сви",
"Admins" : "Аднинистрација",
- "Default Quota" : "Подразумевано ограничење",
- "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Унесите ограничење складишта (нпр. 512 MB или 12 GB)",
+ "Default Quota" : "Подразумевана квота",
+ "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Унесите квоту складиштења (нпр. 512 MB или 12 GB)",
"Unlimited" : "Неограничено",
"Other" : "Друго",
- "Quota" : "Ограничење",
+ "Group Admin for" : "Групни администратор за",
+ "Quota" : "Квота",
"Storage Location" : "Локација складишта",
"User Backend" : "Позадина за кориснике",
"Last Login" : "Последња пријава",
diff --git a/settings/l10n/sv.js b/settings/l10n/sv.js
index 49c0f7bc34d..f58a6bf5afa 100644
--- a/settings/l10n/sv.js
+++ b/settings/l10n/sv.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Säkerhets & Inställningsvarningar",
"Cron" : "Cron",
"Sharing" : "Dela",
- "Security" : "Säkerhet",
"Email Server" : "E-postserver",
"Log" : "Logg",
"Authentication error" : "Fel vid autentisering",
@@ -38,8 +37,6 @@ OC.L10N.register(
"log-level out of allowed range" : "logg-nivå utanför tillåtet område",
"Saved" : "Sparad",
"test email settings" : "testa e-post inställningar",
- "If you received this email, the settings seem to be correct." : "Om du mottog detta e-postmeddelande, verkar dina inställningar vara korrekta.",
- "A problem occurred while sending the email. Please revise your settings." : "Ett problem uppstod när e-postmeddelandet skickades. Vänligen se över dina inställningar.",
"Email sent" : "E-post skickat",
"You need to set your user email before being able to send test emails." : "Du behöver ställa in din användares e-postadress före du kan skicka test e-post.",
"Invalid mail address" : "Ogiltig e-postadress",
diff --git a/settings/l10n/sv.json b/settings/l10n/sv.json
index f26546b2a96..d152fca96cd 100644
--- a/settings/l10n/sv.json
+++ b/settings/l10n/sv.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Säkerhets & Inställningsvarningar",
"Cron" : "Cron",
"Sharing" : "Dela",
- "Security" : "Säkerhet",
"Email Server" : "E-postserver",
"Log" : "Logg",
"Authentication error" : "Fel vid autentisering",
@@ -36,8 +35,6 @@
"log-level out of allowed range" : "logg-nivå utanför tillåtet område",
"Saved" : "Sparad",
"test email settings" : "testa e-post inställningar",
- "If you received this email, the settings seem to be correct." : "Om du mottog detta e-postmeddelande, verkar dina inställningar vara korrekta.",
- "A problem occurred while sending the email. Please revise your settings." : "Ett problem uppstod när e-postmeddelandet skickades. Vänligen se över dina inställningar.",
"Email sent" : "E-post skickat",
"You need to set your user email before being able to send test emails." : "Du behöver ställa in din användares e-postadress före du kan skicka test e-post.",
"Invalid mail address" : "Ogiltig e-postadress",
diff --git a/settings/l10n/tr.js b/settings/l10n/tr.js
index 0bdcefd9013..8aa0f0d4a21 100644
--- a/settings/l10n/tr.js
+++ b/settings/l10n/tr.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "Güvenlik ve Kurulum Uyarıları",
"Cron" : "Cron",
"Sharing" : "Paylaşım",
- "Security" : "Güvenlik",
"Email Server" : "E-Posta Sunucusu",
"Log" : "Günlük",
"Authentication error" : "Kimlik doğrulama hatası",
@@ -39,8 +38,6 @@ OC.L10N.register(
"log-level out of allowed range" : "günlük seviyesi izin verilen aralık dışında",
"Saved" : "Kaydedildi",
"test email settings" : "e-posta ayarlarını sına",
- "If you received this email, the settings seem to be correct." : "Eğer bu e-postayı aldıysanız, ayarlar doğru gibi görünüyor.",
- "A problem occurred while sending the email. Please revise your settings." : "E-posta gönderilirken bir sorun oluştu. Lütfen ayarlarınızı gözden geçirin.",
"Email sent" : "E-posta gönderildi",
"You need to set your user email before being able to send test emails." : "Sınama e-postaları göndermeden önce kullanıcı e-postasını ayarlamanız gerekiyor.",
"Invalid mail address" : "Geçersiz posta adresi",
@@ -132,6 +129,7 @@ OC.L10N.register(
"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:",
"Configuration Checks" : "Yapılandırma Kontrolleri",
"No problems found" : "Hiç sorun yok",
+ "Please double check the <a href=\"%s\">installation guides</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "<a Href=\"%s\"> kurulumu </a> kılavuzlarını kontrol çift, ve <a href=\"#log-section\"> günlük </a> herhangi bir hata veya uyarı için kontrol edin.",
"Last cron job execution: %s." : "Son cron çalıştırılma: %s.",
"Last cron job execution: %s. Something seems wrong." : "Son cron çalıştırılma: %s. Bir şeyler yanlış gibi görünüyor.",
"Cron was not executed yet!" : "Cron henüz çalıştırılmadı!",
diff --git a/settings/l10n/tr.json b/settings/l10n/tr.json
index f4b3f1d5098..97da8310ccd 100644
--- a/settings/l10n/tr.json
+++ b/settings/l10n/tr.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "Güvenlik ve Kurulum Uyarıları",
"Cron" : "Cron",
"Sharing" : "Paylaşım",
- "Security" : "Güvenlik",
"Email Server" : "E-Posta Sunucusu",
"Log" : "Günlük",
"Authentication error" : "Kimlik doğrulama hatası",
@@ -37,8 +36,6 @@
"log-level out of allowed range" : "günlük seviyesi izin verilen aralık dışında",
"Saved" : "Kaydedildi",
"test email settings" : "e-posta ayarlarını sına",
- "If you received this email, the settings seem to be correct." : "Eğer bu e-postayı aldıysanız, ayarlar doğru gibi görünüyor.",
- "A problem occurred while sending the email. Please revise your settings." : "E-posta gönderilirken bir sorun oluştu. Lütfen ayarlarınızı gözden geçirin.",
"Email sent" : "E-posta gönderildi",
"You need to set your user email before being able to send test emails." : "Sınama e-postaları göndermeden önce kullanıcı e-postasını ayarlamanız gerekiyor.",
"Invalid mail address" : "Geçersiz posta adresi",
@@ -130,6 +127,7 @@
"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:",
"Configuration Checks" : "Yapılandırma Kontrolleri",
"No problems found" : "Hiç sorun yok",
+ "Please double check the <a href=\"%s\">installation guides</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "<a Href=\"%s\"> kurulumu </a> kılavuzlarını kontrol çift, ve <a href=\"#log-section\"> günlük </a> herhangi bir hata veya uyarı için kontrol edin.",
"Last cron job execution: %s." : "Son cron çalıştırılma: %s.",
"Last cron job execution: %s. Something seems wrong." : "Son cron çalıştırılma: %s. Bir şeyler yanlış gibi görünüyor.",
"Cron was not executed yet!" : "Cron henüz çalıştırılmadı!",
diff --git a/settings/l10n/ug.js b/settings/l10n/ug.js
index d53f366f993..d27b2f6d5fd 100644
--- a/settings/l10n/ug.js
+++ b/settings/l10n/ug.js
@@ -2,7 +2,6 @@ OC.L10N.register(
"settings",
{
"Sharing" : "ھەمبەھىر",
- "Security" : "بىخەتەرلىك",
"Log" : "خاتىرە",
"Authentication error" : "سالاھىيەت دەلىللەش خاتالىقى",
"Language changed" : "تىل ئۆزگەردى",
diff --git a/settings/l10n/ug.json b/settings/l10n/ug.json
index f7a5913f200..904d1e4dc13 100644
--- a/settings/l10n/ug.json
+++ b/settings/l10n/ug.json
@@ -1,6 +1,5 @@
{ "translations": {
"Sharing" : "ھەمبەھىر",
- "Security" : "بىخەتەرلىك",
"Log" : "خاتىرە",
"Authentication error" : "سالاھىيەت دەلىللەش خاتالىقى",
"Language changed" : "تىل ئۆزگەردى",
diff --git a/settings/l10n/uk.js b/settings/l10n/uk.js
index 535d7e370e0..d16c7ec3f69 100644
--- a/settings/l10n/uk.js
+++ b/settings/l10n/uk.js
@@ -2,11 +2,10 @@ OC.L10N.register(
"settings",
{
"Security & Setup Warnings" : "Попередження Налаштувань та Безпеки",
- "Cron" : "Cron",
+ "Cron" : "Планувальник Cron",
"Sharing" : "Спільний доступ",
- "Security" : "Безпека",
"Email Server" : "Сервер електронної пошти",
- "Log" : "Протокол",
+ "Log" : "Журнал",
"Authentication error" : "Помилка автентифікації",
"Your full name has been changed." : "Ваше ім'я було змінене",
"Unable to change full name" : "Неможливо змінити ім'я",
@@ -28,6 +27,7 @@ OC.L10N.register(
"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." : "Неправильний пароль адміністратора для відновлення. Перевірте пароль та спробуйте ще раз.",
+ "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Використовуваний механізм не підтримує зміну паролів, але користувальницький ключ шифрування був успішно змінено",
"Unable to change password" : "Неможливо змінити пароль",
"Enabled" : "Увімкнено",
"Not enabled" : "Вимкнено",
@@ -38,8 +38,7 @@ OC.L10N.register(
"log-level out of allowed range" : "Перевищений розмір файлу-логу",
"Saved" : "Збереженно",
"test email settings" : "перевірити налаштування електронної пошти",
- "If you received this email, the settings seem to be correct." : "Якщо ви отримали цього листа, налаштування вірні.",
- "A problem occurred while sending the email. Please revise your settings." : "Під час надсилання листа виникли проблеми. Будь ласка перевірте налаштування.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Під час відправки email сталася помилка. Будь ласка перевірте налаштування. (Помилка:%s)",
"Email sent" : "Ел. пошта надіслана",
"You need to set your user email before being able to send test emails." : "Перед надсиланням тестових повідомлень ви повинні вказати свою електронну адресу.",
"Invalid mail address" : "Неправильна email адреса",
@@ -86,6 +85,7 @@ OC.L10N.register(
"never" : "ніколи",
"deleted {userName}" : "видалено {userName}",
"add group" : "додати групу",
+ "Changing the password will result in data loss, because data recovery is not available for this user" : "Зміна пароля призведе до втрати даних, тому що відновлення даних не доступно для цього користувача",
"A valid username must be provided" : "Потрібно задати вірне ім'я користувача",
"Error creating user" : "Помилка при створенні користувача",
"A valid password must be provided" : "Потрібно задати вірний пароль",
@@ -111,6 +111,13 @@ OC.L10N.register(
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Схоже, що PHP налаштовано на вичищення блоків вбудованої документації. Це зробить кілька основних додатків недоступними.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Це, ймовірно, обумовлено використанням кеша/прискорювача такого як Zend OPcache або eAccelerator.",
"Database Performance Info" : "Інформація продуктивності баз даних",
+ "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "В якості бази даних використовується SQLite. Для великих установок ми рекомендуємо переключитися на інший тип серверу баз даних.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Особливо викликає сумнів використання SQLite при синхронізації файлів з використанням клієнта для ПК.",
+ "To migrate to another database use the command line tool: 'occ db:convert-type'" : "Для переходу на іншу базу даних використовуйте команду: 'occ db:convert-type'",
+ "Microsoft Windows Platform" : "Microsoft Windows Platform",
+ "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Ваш сервер працює на ОС Microsoft Windows. Ми настійно рекомендуємо використовувати ОС сімейства Linux для досягнення найкращих умов використання.",
+ "APCu below version 4.0.6 installed" : "Встановлена APCu, версія 4.0.6.",
+ "APCu below version 4.0.6 is installed, for stability and performance reasons we recommend to update to a newer APCu version." : "Встановлена APCu, версія 4.0.6. З метою стабільності ми рекомендуємо оновити на більш нову версію APCu.",
"Module 'fileinfo' missing" : "Модуль 'fileinfo' відсутній",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP модуль 'fileinfo' відсутній. Ми наполегливо рекомендуємо увімкнути цей модуль, щоб отримати кращі результати при виявленні MIME-типів.",
"Locale not working" : "Локалізація не працює",
@@ -119,8 +126,13 @@ OC.L10N.register(
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Пропонуємо встановити необхідні пакети для вашої системи для підтримки однієї з наступних мов %s.",
"URL generation in notification emails" : "Генерування URL для повідомлень в електроних листах",
"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\")",
+ "Cronjob encountered misconfiguration" : "Одне із завдань планувальника має неправильну конфігурацію",
+ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Не вдалося запустити завдання планувальника через CLI. Відбулися наступні технічні помилки:",
"Configuration Checks" : "Перевірка налаштувань",
"No problems found" : "Проблем не виявленно",
+ "Please double check the <a 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>.",
+ "Last cron job execution: %s." : "Останне виконане Cron завдання: %s.",
+ "Last cron job execution: %s. Something seems wrong." : "Останне виконане Cron завдання: %s. Щось здається неправильним.",
"Cron was not executed yet!" : "Cron-задачі ще не запускалися!",
"Execute one task with each page loaded" : "Виконати одне завдання для кожної завантаженої сторінки ",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php зареєстрований в службі webcron та буде викликатися кожні 15 хвилин через HTTP.",
@@ -157,8 +169,10 @@ OC.L10N.register(
"Download logfile" : "Завантажити файл журналу",
"More" : "Більше",
"Less" : "Менше",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Журнал-файл - більше 100 МБ. Його скачування може зайняти деякий час!",
"Version" : "Версія",
"More apps" : "Більше додатків",
+ "Developer documentation" : "Документація для розробників",
"by" : "по",
"licensed" : "Ліцензовано",
"Documentation:" : "Документація:",
@@ -180,6 +194,7 @@ OC.L10N.register(
"Desktop client" : "Клієнт для ПК",
"Android app" : "Android-додаток",
"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" : "Пароль",
@@ -188,9 +203,12 @@ OC.L10N.register(
"New password" : "Новий пароль",
"Change password" : "Змінити пароль",
"Full Name" : "Повне Ім'я",
+ "No display name set" : "Коротке ім'я не вказано",
"Email" : "Ел.пошта",
"Your email address" : "Ваша адреса електронної пошти",
"Fill in an email address to enable password recovery and receive notifications" : "Введіть адресу електронної пошти, щоб ввімкнути відновлення паролю та отримання повідомлень",
+ "No email address set" : "E-mail не вказано",
+ "You are member of the following groups:" : "Ви є членом наступних груп:",
"Profile picture" : "Зображення облікового запису",
"Upload new" : "Завантажити нове",
"Select new from Files" : "Обрати із завантажених файлів",
@@ -212,6 +230,7 @@ OC.L10N.register(
"Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "Ваші ключі шифрування переміщено до теки резервного копіювання. Якщо щось піде не так, ви зможете відновити їх. Видаляйте ключі лише в тому випадку, коли всі файли розшифровані.",
"Restore Encryption Keys" : "Відновити ключі шифрування",
"Delete Encryption Keys" : "Видалити ключі шифрування",
+ "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}." : "Розроблено {communityopen} спільнотою ownCloud {linkclose}, {githubopen} вихідний код {linkclose} ліцензується відповідно до {licenseopen} <abbr title = \"Публічної ліцензії Affero General\"> AGPL </ abbr> {linkclose}.",
"Show storage location" : "Показати місцезнаходження сховища",
"Show last log in" : "Показати останній вхід в систему",
"Show user backend" : "Показати користувача",
diff --git a/settings/l10n/uk.json b/settings/l10n/uk.json
index afd8d3c5564..c01d6e29b44 100644
--- a/settings/l10n/uk.json
+++ b/settings/l10n/uk.json
@@ -1,10 +1,9 @@
{ "translations": {
"Security & Setup Warnings" : "Попередження Налаштувань та Безпеки",
- "Cron" : "Cron",
+ "Cron" : "Планувальник Cron",
"Sharing" : "Спільний доступ",
- "Security" : "Безпека",
"Email Server" : "Сервер електронної пошти",
- "Log" : "Протокол",
+ "Log" : "Журнал",
"Authentication error" : "Помилка автентифікації",
"Your full name has been changed." : "Ваше ім'я було змінене",
"Unable to change full name" : "Неможливо змінити ім'я",
@@ -26,6 +25,7 @@
"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." : "Неправильний пароль адміністратора для відновлення. Перевірте пароль та спробуйте ще раз.",
+ "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Використовуваний механізм не підтримує зміну паролів, але користувальницький ключ шифрування був успішно змінено",
"Unable to change password" : "Неможливо змінити пароль",
"Enabled" : "Увімкнено",
"Not enabled" : "Вимкнено",
@@ -36,8 +36,7 @@
"log-level out of allowed range" : "Перевищений розмір файлу-логу",
"Saved" : "Збереженно",
"test email settings" : "перевірити налаштування електронної пошти",
- "If you received this email, the settings seem to be correct." : "Якщо ви отримали цього листа, налаштування вірні.",
- "A problem occurred while sending the email. Please revise your settings." : "Під час надсилання листа виникли проблеми. Будь ласка перевірте налаштування.",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Під час відправки email сталася помилка. Будь ласка перевірте налаштування. (Помилка:%s)",
"Email sent" : "Ел. пошта надіслана",
"You need to set your user email before being able to send test emails." : "Перед надсиланням тестових повідомлень ви повинні вказати свою електронну адресу.",
"Invalid mail address" : "Неправильна email адреса",
@@ -84,6 +83,7 @@
"never" : "ніколи",
"deleted {userName}" : "видалено {userName}",
"add group" : "додати групу",
+ "Changing the password will result in data loss, because data recovery is not available for this user" : "Зміна пароля призведе до втрати даних, тому що відновлення даних не доступно для цього користувача",
"A valid username must be provided" : "Потрібно задати вірне ім'я користувача",
"Error creating user" : "Помилка при створенні користувача",
"A valid password must be provided" : "Потрібно задати вірний пароль",
@@ -109,6 +109,13 @@
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Схоже, що PHP налаштовано на вичищення блоків вбудованої документації. Це зробить кілька основних додатків недоступними.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Це, ймовірно, обумовлено використанням кеша/прискорювача такого як Zend OPcache або eAccelerator.",
"Database Performance Info" : "Інформація продуктивності баз даних",
+ "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "В якості бази даних використовується SQLite. Для великих установок ми рекомендуємо переключитися на інший тип серверу баз даних.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Особливо викликає сумнів використання SQLite при синхронізації файлів з використанням клієнта для ПК.",
+ "To migrate to another database use the command line tool: 'occ db:convert-type'" : "Для переходу на іншу базу даних використовуйте команду: 'occ db:convert-type'",
+ "Microsoft Windows Platform" : "Microsoft Windows Platform",
+ "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Ваш сервер працює на ОС Microsoft Windows. Ми настійно рекомендуємо використовувати ОС сімейства Linux для досягнення найкращих умов використання.",
+ "APCu below version 4.0.6 installed" : "Встановлена APCu, версія 4.0.6.",
+ "APCu below version 4.0.6 is installed, for stability and performance reasons we recommend to update to a newer APCu version." : "Встановлена APCu, версія 4.0.6. З метою стабільності ми рекомендуємо оновити на більш нову версію APCu.",
"Module 'fileinfo' missing" : "Модуль 'fileinfo' відсутній",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP модуль 'fileinfo' відсутній. Ми наполегливо рекомендуємо увімкнути цей модуль, щоб отримати кращі результати при виявленні MIME-типів.",
"Locale not working" : "Локалізація не працює",
@@ -117,8 +124,13 @@
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Пропонуємо встановити необхідні пакети для вашої системи для підтримки однієї з наступних мов %s.",
"URL generation in notification emails" : "Генерування URL для повідомлень в електроних листах",
"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\")",
+ "Cronjob encountered misconfiguration" : "Одне із завдань планувальника має неправильну конфігурацію",
+ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Не вдалося запустити завдання планувальника через CLI. Відбулися наступні технічні помилки:",
"Configuration Checks" : "Перевірка налаштувань",
"No problems found" : "Проблем не виявленно",
+ "Please double check the <a 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>.",
+ "Last cron job execution: %s." : "Останне виконане Cron завдання: %s.",
+ "Last cron job execution: %s. Something seems wrong." : "Останне виконане Cron завдання: %s. Щось здається неправильним.",
"Cron was not executed yet!" : "Cron-задачі ще не запускалися!",
"Execute one task with each page loaded" : "Виконати одне завдання для кожної завантаженої сторінки ",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php зареєстрований в службі webcron та буде викликатися кожні 15 хвилин через HTTP.",
@@ -155,8 +167,10 @@
"Download logfile" : "Завантажити файл журналу",
"More" : "Більше",
"Less" : "Менше",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Журнал-файл - більше 100 МБ. Його скачування може зайняти деякий час!",
"Version" : "Версія",
"More apps" : "Більше додатків",
+ "Developer documentation" : "Документація для розробників",
"by" : "по",
"licensed" : "Ліцензовано",
"Documentation:" : "Документація:",
@@ -178,6 +192,7 @@
"Desktop client" : "Клієнт для ПК",
"Android app" : "Android-додаток",
"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" : "Пароль",
@@ -186,9 +201,12 @@
"New password" : "Новий пароль",
"Change password" : "Змінити пароль",
"Full Name" : "Повне Ім'я",
+ "No display name set" : "Коротке ім'я не вказано",
"Email" : "Ел.пошта",
"Your email address" : "Ваша адреса електронної пошти",
"Fill in an email address to enable password recovery and receive notifications" : "Введіть адресу електронної пошти, щоб ввімкнути відновлення паролю та отримання повідомлень",
+ "No email address set" : "E-mail не вказано",
+ "You are member of the following groups:" : "Ви є членом наступних груп:",
"Profile picture" : "Зображення облікового запису",
"Upload new" : "Завантажити нове",
"Select new from Files" : "Обрати із завантажених файлів",
@@ -210,6 +228,7 @@
"Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "Ваші ключі шифрування переміщено до теки резервного копіювання. Якщо щось піде не так, ви зможете відновити їх. Видаляйте ключі лише в тому випадку, коли всі файли розшифровані.",
"Restore Encryption Keys" : "Відновити ключі шифрування",
"Delete Encryption Keys" : "Видалити ключі шифрування",
+ "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}." : "Розроблено {communityopen} спільнотою ownCloud {linkclose}, {githubopen} вихідний код {linkclose} ліцензується відповідно до {licenseopen} <abbr title = \"Публічної ліцензії Affero General\"> AGPL </ abbr> {linkclose}.",
"Show storage location" : "Показати місцезнаходження сховища",
"Show last log in" : "Показати останній вхід в систему",
"Show user backend" : "Показати користувача",
diff --git a/settings/l10n/zh_CN.js b/settings/l10n/zh_CN.js
index 33c8de9a860..3b0242fa1d1 100644
--- a/settings/l10n/zh_CN.js
+++ b/settings/l10n/zh_CN.js
@@ -3,7 +3,6 @@ OC.L10N.register(
{
"Cron" : "计划任务",
"Sharing" : "共享",
- "Security" : "安全",
"Email Server" : "电子邮件服务器",
"Log" : "日志",
"Authentication error" : "认证错误",
@@ -31,7 +30,6 @@ OC.L10N.register(
"Enabled" : "开启",
"Saved" : "已保存",
"test email settings" : "测试电子邮件设置",
- "If you received this email, the settings seem to be correct." : "如果您收到了这封邮件,看起来设置没有问题。",
"Email sent" : "邮件已发送",
"You need to set your user email before being able to send test emails." : "在发送测试邮件前您需要设置您的用户电子邮件。",
"Email saved" : "电子邮件已保存",
diff --git a/settings/l10n/zh_CN.json b/settings/l10n/zh_CN.json
index 42ae73d7baa..572dace2746 100644
--- a/settings/l10n/zh_CN.json
+++ b/settings/l10n/zh_CN.json
@@ -1,7 +1,6 @@
{ "translations": {
"Cron" : "计划任务",
"Sharing" : "共享",
- "Security" : "安全",
"Email Server" : "电子邮件服务器",
"Log" : "日志",
"Authentication error" : "认证错误",
@@ -29,7 +28,6 @@
"Enabled" : "开启",
"Saved" : "已保存",
"test email settings" : "测试电子邮件设置",
- "If you received this email, the settings seem to be correct." : "如果您收到了这封邮件,看起来设置没有问题。",
"Email sent" : "邮件已发送",
"You need to set your user email before being able to send test emails." : "在发送测试邮件前您需要设置您的用户电子邮件。",
"Email saved" : "电子邮件已保存",
diff --git a/settings/l10n/zh_HK.js b/settings/l10n/zh_HK.js
index 4130c6c2b1f..97fc876af07 100644
--- a/settings/l10n/zh_HK.js
+++ b/settings/l10n/zh_HK.js
@@ -2,7 +2,6 @@ OC.L10N.register(
"settings",
{
"Sharing" : "分享",
- "Security" : "安全",
"Email Server" : "電子郵件伺服器",
"Log" : "日誌",
"Wrong password" : "密碼錯誤",
diff --git a/settings/l10n/zh_HK.json b/settings/l10n/zh_HK.json
index bf05f9394a9..222a82d9684 100644
--- a/settings/l10n/zh_HK.json
+++ b/settings/l10n/zh_HK.json
@@ -1,6 +1,5 @@
{ "translations": {
"Sharing" : "分享",
- "Security" : "安全",
"Email Server" : "電子郵件伺服器",
"Log" : "日誌",
"Wrong password" : "密碼錯誤",
diff --git a/settings/l10n/zh_TW.js b/settings/l10n/zh_TW.js
index ef215fcce30..6f2b83a46d2 100644
--- a/settings/l10n/zh_TW.js
+++ b/settings/l10n/zh_TW.js
@@ -4,7 +4,6 @@ OC.L10N.register(
"Security & Setup Warnings" : "安全及警告設定",
"Cron" : "工作排程",
"Sharing" : "分享",
- "Security" : "安全性",
"Email Server" : "郵件伺服器",
"Log" : "紀錄",
"Authentication error" : "認證錯誤",
@@ -33,7 +32,6 @@ OC.L10N.register(
"Group already exists." : "群組已存在",
"Saved" : "已儲存",
"test email settings" : "測試郵件設定",
- "If you received this email, the settings seem to be correct." : "假如您收到這個郵件,此設定看起來是正確的。",
"Email sent" : "Email 已寄出",
"You need to set your user email before being able to send test emails." : "在準備要寄出測試郵件時您需要設定您的使用者郵件。",
"Email saved" : "Email已儲存",
diff --git a/settings/l10n/zh_TW.json b/settings/l10n/zh_TW.json
index 43dbd4f6b63..f687085126e 100644
--- a/settings/l10n/zh_TW.json
+++ b/settings/l10n/zh_TW.json
@@ -2,7 +2,6 @@
"Security & Setup Warnings" : "安全及警告設定",
"Cron" : "工作排程",
"Sharing" : "分享",
- "Security" : "安全性",
"Email Server" : "郵件伺服器",
"Log" : "紀錄",
"Authentication error" : "認證錯誤",
@@ -31,7 +30,6 @@
"Group already exists." : "群組已存在",
"Saved" : "已儲存",
"test email settings" : "測試郵件設定",
- "If you received this email, the settings seem to be correct." : "假如您收到這個郵件,此設定看起來是正確的。",
"Email sent" : "Email 已寄出",
"You need to set your user email before being able to send test emails." : "在準備要寄出測試郵件時您需要設定您的使用者郵件。",
"Email saved" : "Email已儲存",
diff --git a/tests/core/lostpassword/controller/lostcontrollertest.php b/tests/core/lostpassword/controller/lostcontrollertest.php
index b03cbd7c42f..f82fc1ba3ff 100644
--- a/tests/core/lostpassword/controller/lostcontrollertest.php
+++ b/tests/core/lostpassword/controller/lostcontrollertest.php
@@ -1,6 +1,6 @@
<?php
/**
- * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com>
+ * Copyright (c) 2014-2015 Lukas Reschke <lukas@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
@@ -43,6 +43,8 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase {
->disableOriginalConstructor()->getMock();
$this->container['URLGenerator'] = $this->getMockBuilder('\OCP\IURLGenerator')
->disableOriginalConstructor()->getMock();
+ $this->container['Mailer'] = $this->getMockBuilder('\OCP\Mail\IMailer')
+ ->disableOriginalConstructor()->getMock();
$this->container['SecureRandom'] = $this->getMockBuilder('\OCP\Security\ISecureRandom')
->disableOriginalConstructor()->getMock();
$this->container['IsEncryptionEnabled'] = true;
@@ -103,14 +105,6 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase {
}
public function testEmailSuccessful() {
- /**
- * FIXME: Disable test for systems where no sendmail is available since code is static.
- * @link https://github.com/owncloud/core/pull/12085
- */
- if (is_null(\OC_Helper::findBinaryPath('sendmail'))) {
- $this->markTestSkipped('sendmail is not available');
- }
-
$randomToken = $this->container['SecureRandom'];
$this->container['SecureRandom']
->expects($this->once())
@@ -140,12 +134,101 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase {
->method('linkToRouteAbsolute')
->with('core.lost.resetform', array('userId' => 'ExistingUser', 'token' => 'ThisIsMaybeANotSoSecretToken!'))
->will($this->returnValue('https://ownCloud.com/index.php/lostpassword/'));
+ $message = $this->getMockBuilder('\OC\Mail\Message')
+ ->disableOriginalConstructor()->getMock();
+ $message
+ ->expects($this->at(0))
+ ->method('setTo')
+ ->with(['test@example.com' => 'ExistingUser']);
+ $message
+ ->expects($this->at(1))
+ ->method('setSubject')
+ ->with(' password reset');
+ $message
+ ->expects($this->at(2))
+ ->method('setPlainBody')
+ ->with('Use the following link to reset your password: https://ownCloud.com/index.php/lostpassword/');
+ $message
+ ->expects($this->at(3))
+ ->method('setFrom')
+ ->with(['lostpassword-noreply@localhost' => null]);
+ $this->container['Mailer']
+ ->expects($this->at(0))
+ ->method('createMessage')
+ ->will($this->returnValue($message));
+ $this->container['Mailer']
+ ->expects($this->at(1))
+ ->method('send')
+ ->with($message);
$response = $this->lostController->email('ExistingUser');
$expectedResponse = array('status' => 'success');
$this->assertSame($expectedResponse, $response);
}
+ public function testEmailCantSendException() {
+ $randomToken = $this->container['SecureRandom'];
+ $this->container['SecureRandom']
+ ->expects($this->once())
+ ->method('generate')
+ ->with('21')
+ ->will($this->returnValue('ThisIsMaybeANotSoSecretToken!'));
+ $this->container['UserManager']
+ ->expects($this->once())
+ ->method('userExists')
+ ->with('ExistingUser')
+ ->will($this->returnValue(true));
+ $this->container['Config']
+ ->expects($this->once())
+ ->method('getUserValue')
+ ->with('ExistingUser', 'settings', 'email')
+ ->will($this->returnValue('test@example.com'));
+ $this->container['SecureRandom']
+ ->expects($this->once())
+ ->method('getMediumStrengthGenerator')
+ ->will($this->returnValue($randomToken));
+ $this->container['Config']
+ ->expects($this->once())
+ ->method('setUserValue')
+ ->with('ExistingUser', 'owncloud', 'lostpassword', 'ThisIsMaybeANotSoSecretToken!');
+ $this->container['URLGenerator']
+ ->expects($this->once())
+ ->method('linkToRouteAbsolute')
+ ->with('core.lost.resetform', array('userId' => 'ExistingUser', 'token' => 'ThisIsMaybeANotSoSecretToken!'))
+ ->will($this->returnValue('https://ownCloud.com/index.php/lostpassword/'));
+ $message = $this->getMockBuilder('\OC\Mail\Message')
+ ->disableOriginalConstructor()->getMock();
+ $message
+ ->expects($this->at(0))
+ ->method('setTo')
+ ->with(['test@example.com' => 'ExistingUser']);
+ $message
+ ->expects($this->at(1))
+ ->method('setSubject')
+ ->with(' password reset');
+ $message
+ ->expects($this->at(2))
+ ->method('setPlainBody')
+ ->with('Use the following link to reset your password: https://ownCloud.com/index.php/lostpassword/');
+ $message
+ ->expects($this->at(3))
+ ->method('setFrom')
+ ->with(['lostpassword-noreply@localhost' => null]);
+ $this->container['Mailer']
+ ->expects($this->at(0))
+ ->method('createMessage')
+ ->will($this->returnValue($message));
+ $this->container['Mailer']
+ ->expects($this->at(1))
+ ->method('send')
+ ->with($message)
+ ->will($this->throwException(new \Exception()));
+
+ $response = $this->lostController->email('ExistingUser');
+ $expectedResponse = ['status' => 'error', 'msg' => 'Couldn\'t send reset email. Please contact your administrator.'];
+ $this->assertSame($expectedResponse, $response);
+ }
+
public function testSetPasswordUnsuccessful() {
$this->container['Config']
->expects($this->once())
diff --git a/tests/karma.config.js b/tests/karma.config.js
index e5febb15aaa..997da4bcb26 100644
--- a/tests/karma.config.js
+++ b/tests/karma.config.js
@@ -64,7 +64,8 @@ module.exports = function(config) {
// only test these files, others are not ready and mess
// up with the global namespace/classes/state
'apps/files_external/js/app.js',
- 'apps/files_external/js/mountsfilelist.js'
+ 'apps/files_external/js/mountsfilelist.js',
+ 'apps/files_external/js/settings.js'
],
testFiles: ['apps/files_external/tests/js/*.js']
},
diff --git a/tests/lib/appframework/db/mappertest.php b/tests/lib/appframework/db/mappertest.php
index 8e585c479bb..c8b999ad62c 100644
--- a/tests/lib/appframework/db/mappertest.php
+++ b/tests/lib/appframework/db/mappertest.php
@@ -47,6 +47,7 @@ class ExampleMapper extends Mapper {
public function findOneEntity($table, $id){ return $this->findEntity($table, $id); }
public function findAllEntities($table){ return $this->findEntities($table); }
public function mapRow($row){ return $this->mapRowToEntity($row); }
+ public function execSql($sql, $params){ return $this->execute($sql, $params); }
}
@@ -187,6 +188,15 @@ class MapperTest extends MapperTestUtility {
}
+ public function testAssocParameters() {
+ $sql = 'test';
+ $params = [':test' => 1, ':a' => 2];
+
+ $this->setMapperResult($sql, $params);
+ $this->mapper->execSql($sql, $params);
+ }
+
+
public function testUpdate(){
$sql = 'UPDATE `*PREFIX*table` ' .
'SET ' .
diff --git a/tests/lib/appframework/db/mappertestutility.php b/tests/lib/appframework/db/mappertestutility.php
index c87ad528c03..818e4a59b21 100644
--- a/tests/lib/appframework/db/mappertestutility.php
+++ b/tests/lib/appframework/db/mappertestutility.php
@@ -56,7 +56,30 @@ abstract class MapperTestUtility extends \Test\TestCase {
$this->fetchAt = 0;
}
+ /**
+ * Checks if an array is associative
+ * @param array $array
+ * @return bool true if associative
+ */
+ private function isAssocArray(array $array) {
+ return array_values($array) !== $array;
+ }
+ /**
+ * Returns the correct PDO constant based on the value type
+ * @param $value
+ * @return PDO constant
+ */
+ private function getPDOType($value) {
+ switch (gettype($value)) {
+ case 'integer':
+ return \PDO::PARAM_INT;
+ case 'boolean':
+ return \PDO::PARAM_BOOL;
+ default:
+ return \PDO::PARAM_STR;
+ }
+ }
/**
* Create mocks and set expected results for database queries
@@ -117,32 +140,28 @@ abstract class MapperTestUtility extends \Test\TestCase {
}
));
- $index = 1;
- foreach($arguments as $argument) {
- switch (gettype($argument)) {
- case 'integer':
- $pdoConstant = \PDO::PARAM_INT;
- break;
-
- case 'NULL':
- $pdoConstant = \PDO::PARAM_NULL;
- break;
-
- case 'boolean':
- $pdoConstant = \PDO::PARAM_BOOL;
- break;
-
- default:
- $pdoConstant = \PDO::PARAM_STR;
- break;
+ if ($this->isAssocArray($arguments)) {
+ foreach($arguments as $key => $argument) {
+ $pdoConstant = $this->getPDOType($argument);
+ $this->query->expects($this->at($this->queryAt))
+ ->method('bindValue')
+ ->with($this->equalTo($key),
+ $this->equalTo($argument),
+ $this->equalTo($pdoConstant));
+ $this->queryAt++;
+ }
+ } else {
+ $index = 1;
+ foreach($arguments as $argument) {
+ $pdoConstant = $this->getPDOType($argument);
+ $this->query->expects($this->at($this->queryAt))
+ ->method('bindValue')
+ ->with($this->equalTo($index),
+ $this->equalTo($argument),
+ $this->equalTo($pdoConstant));
+ $index++;
+ $this->queryAt++;
}
- $this->query->expects($this->at($this->queryAt))
- ->method('bindValue')
- ->with($this->equalTo($index),
- $this->equalTo($argument),
- $this->equalTo($pdoConstant));
- $index++;
- $this->queryAt++;
}
$this->query->expects($this->at($this->queryAt))
diff --git a/tests/lib/cache/fileglobalgc.php b/tests/lib/cache/fileglobalgc.php
index 0b0a4cb002d..4f032538e7d 100644
--- a/tests/lib/cache/fileglobalgc.php
+++ b/tests/lib/cache/fileglobalgc.php
@@ -70,4 +70,38 @@ class FileGlobalGC extends TestCase {
mkdir($this->cacheDir . 'asd');
$this->assertEquals([$this->cacheDir . 'foo'], $this->gc->getExpiredPaths($this->cacheDir, $time));
}
+
+ public function testGcUnlink() {
+ $time = time();
+ $this->addCacheFile('foo', $time - 10);
+ $this->addCacheFile('bar', $time - 10);
+ $this->addCacheFile('asd', $time + 10);
+
+ $config = $this->getMock('\OCP\IConfig');
+ $config->expects($this->once())
+ ->method('getAppValue')
+ ->with('core', 'global_cache_gc_lastrun', 0)
+ ->willReturn($time - \OC\Cache\FileGlobalGC::CLEANUP_TTL_SEC - 1);
+ $config->expects($this->once())
+ ->method('setAppValue');
+
+ $this->gc->gc($config, $this->cacheDir);
+ $this->assertFileNotExists($this->cacheDir . 'foo');
+ $this->assertFileNotExists($this->cacheDir . 'bar');
+ $this->assertFileExists($this->cacheDir . 'asd');
+ }
+
+ public function testGcLastRun() {
+ $time = time();
+
+ $config = $this->getMock('\OCP\IConfig');
+ $config->expects($this->once())
+ ->method('getAppValue')
+ ->with('core', 'global_cache_gc_lastrun', 0)
+ ->willReturn($time);
+ $config->expects($this->never())
+ ->method('setAppValue');
+
+ $this->gc->gc($config, $this->cacheDir);
+ }
}
diff --git a/tests/lib/connector/sabre/custompropertiesbackend.php b/tests/lib/connector/sabre/custompropertiesbackend.php
index ee0c3c4e53d..8b6d1a90db1 100644
--- a/tests/lib/connector/sabre/custompropertiesbackend.php
+++ b/tests/lib/connector/sabre/custompropertiesbackend.php
@@ -102,6 +102,34 @@ class CustomPropertiesBackend extends \Test\TestCase {
}
/**
+ * Test that propFind on a missing file soft fails
+ */
+ public function testPropFindMissingFileSoftFail() {
+ $this->tree->expects($this->any())
+ ->method('getNodeForPath')
+ ->with('/dummypath')
+ ->will($this->throwException(new \Sabre\DAV\Exception\NotFound()));
+
+ $propFind = new \Sabre\DAV\PropFind(
+ '/dummypath',
+ array(
+ 'customprop',
+ 'customprop2',
+ 'unsetprop',
+ ),
+ 0
+ );
+
+ $this->plugin->propFind(
+ '/dummypath',
+ $propFind
+ );
+
+ // no exception, soft fail
+ $this->assertTrue(true);
+ }
+
+ /**
* Test setting/getting properties
*/
public function testSetGetPropertiesForFile() {
diff --git a/tests/lib/files/cache/cache.php b/tests/lib/files/cache/cache.php
index 15bcff24f36..1bf838351b6 100644
--- a/tests/lib/files/cache/cache.php
+++ b/tests/lib/files/cache/cache.php
@@ -260,6 +260,28 @@ class Cache extends \Test\TestCase {
$this->assertEquals(\OC\Files\Cache\Cache::COMPLETE, $this->cache->getStatus('foo'));
}
+ public function putWithAllKindOfQuotesData() {
+ return [
+ ['`backtick`'],
+ ['´forward´'],
+ ['\'single\''],
+ ];
+ }
+
+ /**
+ * @dataProvider putWithAllKindOfQuotesData
+ * @param $fileName
+ */
+ public function testPutWithAllKindOfQuotes($fileName) {
+
+ $this->assertEquals(\OC\Files\Cache\Cache::NOT_FOUND, $this->cache->get($fileName));
+ $this->cache->put($fileName, array('size' => 20, 'mtime' => 25, 'mimetype' => 'foo/file', 'etag' => $fileName));
+
+ $cacheEntry = $this->cache->get($fileName);
+ $this->assertEquals($fileName, $cacheEntry['etag']);
+ $this->assertEquals($fileName, $cacheEntry['path']);
+ }
+
function testSearch() {
$file1 = 'folder';
$file2 = 'folder/foobar';
diff --git a/tests/lib/files/pathverificationtest.php b/tests/lib/files/pathverificationtest.php
index 5d38c6291a6..65342c7799e 100644
--- a/tests/lib/files/pathverificationtest.php
+++ b/tests/lib/files/pathverificationtest.php
@@ -230,4 +230,30 @@ class PathVerification extends \Test\TestCase {
];
}
+ /**
+ * @dataProvider providesValidPosixPaths
+ */
+ public function testPathVerificationValidPaths($fileName) {
+ $storage = new Local(['datadir' => '']);
+
+ \Test_Helper::invokePrivate($storage, 'verifyPosixPath', [$fileName]);
+ \Test_Helper::invokePrivate($storage, 'verifyWindowsPath', [$fileName]);
+ // nothing thrown
+ $this->assertTrue(true);
+ }
+
+ public function providesValidPosixPaths() {
+ return [
+ ['simple'],
+ ['simple.txt'],
+ ['\''],
+ ['`'],
+ ['%'],
+ ['()'],
+ ['[]'],
+ ['!'],
+ ['$'],
+ ['_'],
+ ];
+ }
}
diff --git a/tests/lib/files/storage/storagefactory.php b/tests/lib/files/storage/storagefactory.php
new file mode 100644
index 00000000000..15519ef83fb
--- /dev/null
+++ b/tests/lib/files/storage/storagefactory.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Copyright (c) 2015 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Files\Storage;
+
+use OC\Files\Mount\MountPoint;
+use OCP\Files\Mount\IMountPoint;
+use OCP\Files\Storage as IStorage;
+use Test\TestCase;
+use OC\Files\Storage\Wrapper\Wrapper;
+
+class DummyWrapper extends Wrapper {
+
+}
+
+class StorageFactory extends TestCase {
+ public function testSimpleWrapper() {
+ $instance = new \OC\Files\Storage\StorageFactory();
+ $mount = new MountPoint('\OC\Files\Storage\Temporary', '/foo', [[]], $instance);
+ $instance->addStorageWrapper('dummy', function ($mountPoint, IStorage $storage, IMountPoint $mount) {
+ $this->assertInstanceOf('\OC\Files\Storage\Temporary', $storage);
+ $this->assertEquals('/foo/', $mount->getMountPoint());
+ $this->assertEquals('/foo/', $mountPoint);
+ return new DummyWrapper(['storage' => $storage]);
+ });
+ $wrapped = $mount->getStorage();
+ $this->assertInstanceOf('\Test\Files\Storage\DummyWrapper', $wrapped);
+ }
+
+ public function testRemoveWrapper() {
+ $instance = new \OC\Files\Storage\StorageFactory();
+ $mount = new MountPoint('\OC\Files\Storage\Temporary', '/foo', [[]], $instance);
+ $instance->addStorageWrapper('dummy', function ($mountPoint, IStorage $storage) {
+ return new DummyWrapper(['storage' => $storage]);
+ });
+ $instance->removeStorageWrapper('dummy');
+ $wrapped = $mount->getStorage();
+ $this->assertInstanceOf('\OC\Files\Storage\Temporary', $wrapped);
+ }
+}
diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php
index db39df7d16b..cd9f2d4afd1 100644
--- a/tests/lib/files/view.php
+++ b/tests/lib/files/view.php
@@ -8,6 +8,7 @@
namespace Test\Files;
use OC\Files\Cache\Watcher;
+use OC\Files\Mount\MountPoint;
use OC\Files\Storage\Temporary;
class TemporaryNoTouch extends \OC\Files\Storage\Temporary {
@@ -975,4 +976,21 @@ class View extends \Test\TestCase {
$view = new \OC\Files\View('');
$this->assertTrue($view->rename('/test/foo.txt', '/test/foo/bar.txt'));
}
+
+ public function testSetMountOptionsInStorage() {
+ $mount = new MountPoint('\OC\Files\Storage\Temporary', '/asd/', [[]], \OC\Files\Filesystem::getLoader(), ['foo' => 'bar']);
+ \OC\Files\Filesystem::getMountManager()->addMount($mount);
+ /** @var \OC\Files\Storage\Common $storage */
+ $storage = $mount->getStorage();
+ $this->assertEquals($storage->getMountOption('foo'), 'bar');
+ }
+
+ public function testSetMountOptionsWatcherPolicy() {
+ $mount = new MountPoint('\OC\Files\Storage\Temporary', '/asd/', [[]], \OC\Files\Filesystem::getLoader(), ['filesystem_check_changes' => Watcher::CHECK_NEVER]);
+ \OC\Files\Filesystem::getMountManager()->addMount($mount);
+ /** @var \OC\Files\Storage\Common $storage */
+ $storage = $mount->getStorage();
+ $watcher = $storage->getWatcher();
+ $this->assertEquals(Watcher::CHECK_NEVER, $watcher->getPolicy());
+ }
}
diff --git a/tests/lib/mail.php b/tests/lib/mail.php
deleted file mode 100644
index 813dde1944f..00000000000
--- a/tests/lib/mail.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-/**
- * Copyright (c) 2014 Thomas Müller <deepdiver@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-class Test_Mail extends \Test\TestCase {
-
- /**
- * @dataProvider buildAsciiEmailProvider
- * @param $expected
- * @param $address
- */
- public function testBuildAsciiEmail($expected, $address) {
- if (!function_exists('idn_to_ascii')) {
- $this->markTestSkipped(
- 'The intl extension is not available.'
- );
- }
-
- $actual = \OC_Mail::buildAsciiEmail($address);
- $this->assertEquals($expected, $actual);
- }
-
- public function buildAsciiEmailProvider() {
- return array(
- array('info@example.com', 'info@example.com'),
- array('info@xn--cjr6vy5ejyai80u.com', 'info@國際化域名.com'),
- array('info@xn--mller-kva.de', 'info@müller.de'),
- array('info@xn--mller-kva.xn--mller-kva.de', 'info@müller.müller.de'),
- );
- }
-
- public function validateMailProvider() {
- return array(
- array('infoatexample.com', false),
- array('info', false),
- );
- }
-
- /**
- * @dataProvider validateMailProvider
- * @param $address
- * @param $expected
- */
- public function testValidateEmail($address, $expected) {
- $actual = \OC_Mail::validateAddress($address);
- $this->assertEquals($expected, $actual);
- }
-
-}
diff --git a/tests/lib/mail/mailer.php b/tests/lib/mail/mailer.php
new file mode 100644
index 00000000000..7e5e689741a
--- /dev/null
+++ b/tests/lib/mail/mailer.php
@@ -0,0 +1,121 @@
+<?php
+/**
+ * Copyright (c) 2014-2015 Lukas Reschke <lukas@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test;
+use OC\Mail\Mailer;
+use OCP\IConfig;
+use OC_Defaults;
+use OCP\ILogger;
+
+class MailerTest extends TestCase {
+ /** @var IConfig */
+ private $config;
+ /** @var OC_Defaults */
+ private $defaults;
+ /** @var ILogger */
+ private $logger;
+ /** @var Mailer */
+ private $mailer;
+
+ function setUp() {
+ parent::setUp();
+
+ $this->config = $this->getMockBuilder('\OCP\IConfig')
+ ->disableOriginalConstructor()->getMock();
+ $this->defaults = $this->getMockBuilder('\OC_Defaults')
+ ->disableOriginalConstructor()->getMock();
+ $this->logger = $this->getMockBuilder('\OCP\ILogger')
+ ->disableOriginalConstructor()->getMock();
+ $this->mailer = new Mailer($this->config, $this->logger, $this->defaults);
+ }
+
+ public function testGetMailInstance() {
+ $this->assertEquals(\Swift_MailTransport::newInstance(), \Test_Helper::invokePrivate($this->mailer, 'getMailinstance'));
+ }
+
+ public function testGetSendMailInstanceSendMail() {
+ $this->config
+ ->expects($this->once())
+ ->method('getSystemValue')
+ ->with('mail_smtpmode', 'sendmail')
+ ->will($this->returnValue('sendmail'));
+
+ $this->assertEquals(\Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs'), \Test_Helper::invokePrivate($this->mailer, 'getSendMailInstance'));
+ }
+
+ public function testGetSendMailInstanceSendMailQmail() {
+ $this->config
+ ->expects($this->once())
+ ->method('getSystemValue')
+ ->with('mail_smtpmode', 'sendmail')
+ ->will($this->returnValue('qmail'));
+
+ $this->assertEquals(\Swift_SendmailTransport::newInstance('/var/qmail/bin/sendmail -bs'), \Test_Helper::invokePrivate($this->mailer, 'getSendMailInstance'));
+ }
+
+ public function testGetInstanceDefault() {
+ $this->assertInstanceOf('\Swift_MailTransport', \Test_Helper::invokePrivate($this->mailer, 'getInstance'));
+ }
+
+ public function testGetInstancePhp() {
+ $this->config
+ ->expects($this->any())
+ ->method('getSystemValue')
+ ->will($this->returnValue('php'));
+
+ $this->assertInstanceOf('\Swift_MailTransport', \Test_Helper::invokePrivate($this->mailer, 'getInstance'));
+ }
+
+ public function testGetInstanceSendmail() {
+ $this->config
+ ->expects($this->any())
+ ->method('getSystemValue')
+ ->will($this->returnValue('sendmail'));
+
+ $this->assertInstanceOf('\Swift_SendmailTransport', \Test_Helper::invokePrivate($this->mailer, 'getInstance'));
+ }
+
+ public function testCreateMessage() {
+ $this->assertInstanceOf('\OC\Mail\Message', $this->mailer->createMessage());
+ }
+
+ /**
+ * @expectedException \Exception
+ */
+ public function testSendInvalidMailException() {
+ $message = $this->getMockBuilder('\OC\Mail\Message')
+ ->disableOriginalConstructor()->getMock();
+ $message->expects($this->once())
+ ->method('getSwiftMessage')
+ ->will($this->returnValue(new \Swift_Message()));
+
+ $this->mailer->send($message);
+ }
+
+ /**
+ * @return array
+ */
+ public function mailAddressProvider() {
+ return [
+ ['lukas@owncloud.com', true],
+ ['lukas@localhost', true],
+ ['lukas@192.168.1.1', true],
+ ['lukas@éxämplè.com', true],
+ ['asdf', false],
+ ['lukas@owncloud.org@owncloud.com', false],
+ ];
+ }
+
+ /**
+ * @dataProvider mailAddressProvider
+ */
+ public function testValidateMailAddress($email, $expected) {
+ $this->assertSame($expected, $this->mailer->validateMailAddress($email));
+ }
+
+}
diff --git a/tests/lib/mail/message.php b/tests/lib/mail/message.php
new file mode 100644
index 00000000000..0db2017d81e
--- /dev/null
+++ b/tests/lib/mail/message.php
@@ -0,0 +1,161 @@
+<?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.
+ */
+
+namespace Test;
+
+use OC\Mail\Message;
+use Swift_Message;
+
+class MessageTest extends TestCase {
+ /** @var Swift_Message */
+ private $swiftMessage;
+ /** @var Message */
+ private $message;
+
+ /**
+ * @return array
+ */
+ public function mailAddressProvider() {
+ return array(
+ array(array('lukas@owncloud.com' => 'Lukas Reschke'), array('lukas@owncloud.com' => 'Lukas Reschke')),
+ array(array('lukas@owncloud.com' => 'Lukas Reschke', 'lukas@öwnclöüd.com', 'lukäs@owncloud.örg' => 'Lükäs Réschke'),
+ array('lukas@owncloud.com' => 'Lukas Reschke', 'lukas@xn--wncld-iuae2c.com', 'lukäs@owncloud.xn--rg-eka' => 'Lükäs Réschke')),
+ array(array('lukas@öwnclöüd.com'), array('lukas@xn--wncld-iuae2c.com'))
+ );
+ }
+
+ function setUp() {
+ parent::setUp();
+
+ $this->swiftMessage = $this->getMockBuilder('\Swift_Message')
+ ->disableOriginalConstructor()->getMock();
+
+ $this->message = new Message($this->swiftMessage);
+ }
+
+ /**
+ * @dataProvider mailAddressProvider
+ */
+ public function testConvertAddresses($unconverted, $expected) {
+ $this->assertSame($expected, \Test_Helper::invokePrivate($this->message, 'convertAddresses', array($unconverted)));
+ }
+
+ public function testSetFrom() {
+ $this->swiftMessage
+ ->expects($this->once())
+ ->method('setFrom')
+ ->with(array('lukas@owncloud.com'));
+ $this->message->setFrom(array('lukas@owncloud.com'));
+ }
+
+ public function testGetFrom() {
+ $this->swiftMessage
+ ->expects($this->once())
+ ->method('getFrom')
+ ->will($this->returnValue(array('lukas@owncloud.com')));
+
+ $this->assertSame(array('lukas@owncloud.com'), $this->message->getFrom());
+ }
+
+ public function testSetTo() {
+ $this->swiftMessage
+ ->expects($this->once())
+ ->method('setTo')
+ ->with(array('lukas@owncloud.com'));
+ $this->message->setTo(array('lukas@owncloud.com'));
+ }
+
+ public function testGetTo() {
+ $this->swiftMessage
+ ->expects($this->once())
+ ->method('getTo')
+ ->will($this->returnValue(array('lukas@owncloud.com')));
+
+ $this->assertSame(array('lukas@owncloud.com'), $this->message->getTo());
+ }
+
+ public function testSetCc() {
+ $this->swiftMessage
+ ->expects($this->once())
+ ->method('setCc')
+ ->with(array('lukas@owncloud.com'));
+ $this->message->setCc(array('lukas@owncloud.com'));
+ }
+
+ public function testGetCc() {
+ $this->swiftMessage
+ ->expects($this->once())
+ ->method('getCc')
+ ->will($this->returnValue(array('lukas@owncloud.com')));
+
+ $this->assertSame(array('lukas@owncloud.com'), $this->message->getCc());
+ }
+
+ public function testSetBcc() {
+ $this->swiftMessage
+ ->expects($this->once())
+ ->method('setBcc')
+ ->with(array('lukas@owncloud.com'));
+ $this->message->setBcc(array('lukas@owncloud.com'));
+ }
+
+ public function testGetBcc() {
+ $this->swiftMessage
+ ->expects($this->once())
+ ->method('getBcc')
+ ->will($this->returnValue(array('lukas@owncloud.com')));
+
+ $this->assertSame(array('lukas@owncloud.com'), $this->message->getBcc());
+ }
+
+ public function testSetSubject() {
+ $this->swiftMessage
+ ->expects($this->once())
+ ->method('setSubject')
+ ->with('Fancy Subject');
+
+ $this->message->setSubject('Fancy Subject');
+ }
+
+ public function testGetSubject() {
+ $this->swiftMessage
+ ->expects($this->once())
+ ->method('getSubject')
+ ->will($this->returnValue('Fancy Subject'));
+
+ $this->assertSame('Fancy Subject', $this->message->getSubject());
+ }
+
+ public function testSetPlainBody() {
+ $this->swiftMessage
+ ->expects($this->once())
+ ->method('setBody')
+ ->with('Fancy Body');
+
+ $this->message->setPlainBody('Fancy Body');
+ }
+
+ public function testGetPlainBody() {
+ $this->swiftMessage
+ ->expects($this->once())
+ ->method('getBody')
+ ->will($this->returnValue('Fancy Body'));
+
+ $this->assertSame('Fancy Body', $this->message->getPlainBody());
+ }
+
+ public function testSetHtmlBody() {
+ $this->swiftMessage
+ ->expects($this->once())
+ ->method('addPart')
+ ->with('<blink>Fancy Body</blink>', 'text/html');
+
+ $this->message->setHtmlBody('<blink>Fancy Body</blink>');
+ }
+
+}
diff --git a/tests/lib/navigationmanagertest.php b/tests/lib/navigationmanagertest.php
new file mode 100644
index 00000000000..96708786e39
--- /dev/null
+++ b/tests/lib/navigationmanagertest.php
@@ -0,0 +1,160 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Joas Schilling
+ * @copyright 2015 Joas Schilling nickvergessen@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test;
+
+use OC\NavigationManager;
+
+class NavigationManagerTest extends TestCase {
+ /** @var \OC\NavigationManager */
+ protected $navigationManager;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->navigationManager = new NavigationManager();
+ }
+
+ public function addArrayData() {
+ return [
+ [
+ [
+ 'id' => 'entry id',
+ 'name' => 'link text',
+ 'order' => 1,
+ 'icon' => 'optional',
+ 'href' => 'url',
+ ],
+ [
+ 'id' => 'entry id',
+ 'name' => 'link text',
+ 'order' => 1,
+ 'icon' => 'optional',
+ 'href' => 'url',
+ 'active' => false,
+ ],
+ ],
+ [
+ [
+ 'id' => 'entry id',
+ 'name' => 'link text',
+ 'order' => 1,
+ //'icon' => 'optional',
+ 'href' => 'url',
+ 'active' => true,
+ ],
+ [
+ 'id' => 'entry id',
+ 'name' => 'link text',
+ 'order' => 1,
+ 'icon' => '',
+ 'href' => 'url',
+ 'active' => false,
+ ],
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider addArrayData
+ *
+ * @param array $entry
+ * @param array $expectedEntry
+ */
+ public function testAddArray(array $entry, array $expectedEntry) {
+ $this->assertEmpty($this->navigationManager->getAll(), 'Expected no navigation entry exists');
+ $this->navigationManager->add($entry);
+
+ $navigationEntries = $this->navigationManager->getAll();
+ $this->assertEquals(1, sizeof($navigationEntries), 'Expected that 1 navigation entry exists');
+ $this->assertEquals($expectedEntry, $navigationEntries[0]);
+
+ $this->navigationManager->clear();
+ $this->assertEmpty($this->navigationManager->getAll(), 'Expected no navigation entry exists after clear()');
+ }
+
+ /**
+ * @dataProvider addArrayData
+ *
+ * @param array $entry
+ * @param array $expectedEntry
+ */
+ public function testAddClosure(array $entry, array $expectedEntry) {
+ global $testAddClosureNumberOfCalls;
+ $testAddClosureNumberOfCalls = 0;
+
+ $this->navigationManager->add(function () use ($entry) {
+ global $testAddClosureNumberOfCalls;
+ $testAddClosureNumberOfCalls++;
+
+ return $entry;
+ });
+
+ $this->assertEquals(0, $testAddClosureNumberOfCalls, 'Expected that the closure is not called by add()');
+
+ $navigationEntries = $this->navigationManager->getAll();
+ $this->assertEquals(1, $testAddClosureNumberOfCalls, 'Expected that the closure is called by getAll()');
+ $this->assertEquals(1, sizeof($navigationEntries), 'Expected that 1 navigation entry exists');
+ $this->assertEquals($expectedEntry, $navigationEntries[0]);
+
+ $navigationEntries = $this->navigationManager->getAll();
+ $this->assertEquals(1, $testAddClosureNumberOfCalls, 'Expected that the closure is only called once for getAll()');
+ $this->assertEquals(1, sizeof($navigationEntries), 'Expected that 1 navigation entry exists');
+ $this->assertEquals($expectedEntry, $navigationEntries[0]);
+
+ $this->navigationManager->clear();
+ $this->assertEmpty($this->navigationManager->getAll(), 'Expected no navigation entry exists after clear()');
+ }
+
+ public function testAddArrayClearGetAll() {
+ $entry = [
+ 'id' => 'entry id',
+ 'name' => 'link text',
+ 'order' => 1,
+ 'icon' => 'optional',
+ 'href' => 'url',
+ ];
+
+ $this->assertEmpty($this->navigationManager->getAll(), 'Expected no navigation entry exists');
+ $this->navigationManager->add($entry);
+ $this->navigationManager->clear();
+ $this->assertEmpty($this->navigationManager->getAll(), 'Expected no navigation entry exists after clear()');
+ }
+
+ public function testAddClosureClearGetAll() {
+ $this->assertEmpty($this->navigationManager->getAll(), 'Expected no navigation entry exists');
+
+ $entry = [
+ 'id' => 'entry id',
+ 'name' => 'link text',
+ 'order' => 1,
+ 'icon' => 'optional',
+ 'href' => 'url',
+ ];
+
+ global $testAddClosureNumberOfCalls;
+ $testAddClosureNumberOfCalls = 0;
+
+ $this->navigationManager->add(function () use ($entry) {
+ global $testAddClosureNumberOfCalls;
+ $testAddClosureNumberOfCalls++;
+
+ return $entry;
+ });
+
+ $this->assertEquals(0, $testAddClosureNumberOfCalls, 'Expected that the closure is not called by add()');
+ $this->navigationManager->clear();
+ $this->assertEquals(0, $testAddClosureNumberOfCalls, 'Expected that the closure is not called by clear()');
+ $this->assertEmpty($this->navigationManager->getAll(), 'Expected no navigation entry exists after clear()');
+ $this->assertEquals(0, $testAddClosureNumberOfCalls, 'Expected that the closure is not called by getAll()');
+ }
+}
diff --git a/tests/lib/repair/repairmimetypes.php b/tests/lib/repair/repairmimetypes.php
index 403474957f1..f9f214370cc 100644
--- a/tests/lib/repair/repairmimetypes.php
+++ b/tests/lib/repair/repairmimetypes.php
@@ -1,7 +1,7 @@
<?php
/**
* Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
- * Copyright (c) 2014 Olivier Paroz owncloud@oparoz.com
+ * Copyright (c) 2014-2015 Olivier Paroz owncloud@oparoz.com
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
@@ -192,6 +192,63 @@ class TestRepairMimeTypes extends \Test\TestCase {
}
/**
+ * Test renaming the Raw mime types
+ */
+ public function testRenameRawMimeType() {
+ $this->addEntries(
+ array(
+ array('test.arw', 'application/octet-stream'),
+ array('test.cr2', 'application/octet-stream'),
+ array('test.dcr', 'application/octet-stream'),
+ array('test.dng', 'application/octet-stream'),
+ array('test.erf', 'application/octet-stream'),
+ array('test.iiq', 'application/octet-stream'),
+ array('test.k25', 'application/octet-stream'),
+ array('test.kdc', 'application/octet-stream'),
+ array('test.mef', 'application/octet-stream'),
+ array('test.nef', 'application/octet-stream'),
+ array('test.orf', 'application/octet-stream'),
+ array('test.pef', 'application/octet-stream'),
+ array('test.raf', 'application/octet-stream'),
+ array('test.rw2', 'application/octet-stream'),
+ array('test.srf', 'application/octet-stream'),
+ array('test.sr2', 'application/octet-stream'),
+ array('test.xrf', 'application/octet-stream'),
+ array('CapitalExtension.DNG', 'application/octet-stream'),
+ )
+ );
+
+ $this->repair->run();
+
+ // force mimetype reload
+ DummyFileCache::clearCachedMimeTypes();
+ $this->storage->getCache()->loadMimeTypes();
+
+ $this->checkEntries(
+ array(
+ array('test.arw', 'image/x-dcraw'),
+ array('test.cr2', 'image/x-dcraw'),
+ array('test.dcr', 'image/x-dcraw'),
+ array('test.dng', 'image/x-dcraw'),
+ array('test.erf', 'image/x-dcraw'),
+ array('test.iiq', 'image/x-dcraw'),
+ array('test.k25', 'image/x-dcraw'),
+ array('test.kdc', 'image/x-dcraw'),
+ array('test.mef', 'image/x-dcraw'),
+ array('test.nef', 'image/x-dcraw'),
+ array('test.orf', 'image/x-dcraw'),
+ array('test.pef', 'image/x-dcraw'),
+ array('test.raf', 'image/x-dcraw'),
+ array('test.rw2', 'image/x-dcraw'),
+ array('test.srf', 'image/x-dcraw'),
+ array('test.sr2', 'image/x-dcraw'),
+ array('test.xrf', 'image/x-dcraw'),
+ array('CapitalExtension.DNG', 'image/x-dcraw'),
+ )
+ );
+ }
+
+ /**
* Test renaming and splitting old office mime types when
* new ones already exist
*/
@@ -301,6 +358,24 @@ class TestRepairMimeTypes extends \Test\TestCase {
array('test.pfb', 'application/x-font'),
array('test.eps', 'application/postscript'),
array('test.ps', 'application/postscript'),
+ array('test.arw', 'image/x-dcraw'),
+ array('test.cr2', 'image/x-dcraw'),
+ array('test.dcr', 'image/x-dcraw'),
+ array('test.dng', 'image/x-dcraw'),
+ array('test.erf', 'image/x-dcraw'),
+ array('test.iiq', 'image/x-dcraw'),
+ array('test.k25', 'image/x-dcraw'),
+ array('test.kdc', 'image/x-dcraw'),
+ array('test.mef', 'image/x-dcraw'),
+ array('test.nef', 'image/x-dcraw'),
+ array('test.orf', 'image/x-dcraw'),
+ array('test.pef', 'image/x-dcraw'),
+ array('test.raf', 'image/x-dcraw'),
+ array('test.rw2', 'image/x-dcraw'),
+ array('test.srf', 'image/x-dcraw'),
+ array('test.sr2', 'image/x-dcraw'),
+ array('test.xrf', 'image/x-dcraw'),
+ array('test.DNG', 'image/x-dcraw'),
)
);
@@ -324,6 +399,24 @@ class TestRepairMimeTypes extends \Test\TestCase {
array('test.pfb', 'application/x-font'),
array('test.eps', 'application/postscript'),
array('test.ps', 'application/postscript'),
+ array('test.arw', 'image/x-dcraw'),
+ array('test.cr2', 'image/x-dcraw'),
+ array('test.dcr', 'image/x-dcraw'),
+ array('test.dng', 'image/x-dcraw'),
+ array('test.erf', 'image/x-dcraw'),
+ array('test.iiq', 'image/x-dcraw'),
+ array('test.k25', 'image/x-dcraw'),
+ array('test.kdc', 'image/x-dcraw'),
+ array('test.mef', 'image/x-dcraw'),
+ array('test.nef', 'image/x-dcraw'),
+ array('test.orf', 'image/x-dcraw'),
+ array('test.pef', 'image/x-dcraw'),
+ array('test.raf', 'image/x-dcraw'),
+ array('test.rw2', 'image/x-dcraw'),
+ array('test.srf', 'image/x-dcraw'),
+ array('test.sr2', 'image/x-dcraw'),
+ array('test.xrf', 'image/x-dcraw'),
+ array('test.DNG', 'image/x-dcraw'),
)
);
}
diff --git a/tests/lib/share/share.php b/tests/lib/share/share.php
index 1ef62dc2b07..42bb82968af 100644
--- a/tests/lib/share/share.php
+++ b/tests/lib/share/share.php
@@ -1051,6 +1051,41 @@ class Test_Share extends \Test\TestCase {
),
);
}
+
+ /**
+ * Ensure that we do not allow removing a an expiration date from a link share if this
+ * is enforced by the settings.
+ */
+ public function testClearExpireDateWhileEnforced() {
+ OC_User::setUserId($this->user1);
+
+ \OC_Appconfig::setValue('core', 'shareapi_default_expire_date', 'yes');
+ \OC_Appconfig::setValue('core', 'shareapi_expire_after_n_days', '2');
+ \OC_Appconfig::setValue('core', 'shareapi_enforce_expire_date', 'yes');
+
+ $token = OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_LINK, null, \OCP\Constants::PERMISSION_READ);
+ $this->assertInternalType(
+ 'string',
+ $token,
+ 'Failed asserting that user 1 successfully shared text.txt as link with token.'
+ );
+
+ $setExpireDateFailed = false;
+ try {
+ $this->assertTrue(
+ OCP\Share::setExpirationDate('test', 'test.txt', '', ''),
+ 'Failed asserting that user 1 successfully set an expiration date for the test.txt share.'
+ );
+ } catch (\Exception $e) {
+ $setExpireDateFailed = true;
+ }
+
+ $this->assertTrue($setExpireDateFailed);
+
+ \OC_Appconfig::deleteKey('core', 'shareapi_default_expire_date');
+ \OC_Appconfig::deleteKey('core', 'shareapi_expire_after_n_days');
+ \OC_Appconfig::deleteKey('core', 'shareapi_enforce_expire_date');
+ }
}
class DummyShareClass extends \OC\Share\Share {
diff --git a/tests/lib/urlgenerator.php b/tests/lib/urlgenerator.php
index a92aaddeb4c..60e1a86f16a 100644
--- a/tests/lib/urlgenerator.php
+++ b/tests/lib/urlgenerator.php
@@ -16,7 +16,8 @@ class Test_Urlgenerator extends \Test\TestCase {
public function testLinkToDocRoot($app, $file, $args, $expectedResult) {
\OC::$WEBROOT = '';
$config = $this->getMock('\OCP\IConfig');
- $urlGenerator = new \OC\URLGenerator($config);
+ $cacheFactory = $this->getMock('\OCP\ICacheFactory');
+ $urlGenerator = new \OC\URLGenerator($config, $cacheFactory);
$result = $urlGenerator->linkTo($app, $file, $args);
$this->assertEquals($expectedResult, $result);
@@ -30,7 +31,8 @@ class Test_Urlgenerator extends \Test\TestCase {
public function testLinkToSubDir($app, $file, $args, $expectedResult) {
\OC::$WEBROOT = '/owncloud';
$config = $this->getMock('\OCP\IConfig');
- $urlGenerator = new \OC\URLGenerator($config);
+ $cacheFactory = $this->getMock('\OCP\ICacheFactory');
+ $urlGenerator = new \OC\URLGenerator($config, $cacheFactory);
$result = $urlGenerator->linkTo($app, $file, $args);
$this->assertEquals($expectedResult, $result);
@@ -42,7 +44,8 @@ class Test_Urlgenerator extends \Test\TestCase {
public function testLinkToRouteAbsolute($route, $expected) {
\OC::$WEBROOT = '/owncloud';
$config = $this->getMock('\OCP\IConfig');
- $urlGenerator = new \OC\URLGenerator($config);
+ $cacheFactory = $this->getMock('\OCP\ICacheFactory');
+ $urlGenerator = new \OC\URLGenerator($config, $cacheFactory);
$result = $urlGenerator->linkToRouteAbsolute($route);
$this->assertEquals($expected, $result);
@@ -79,7 +82,9 @@ class Test_Urlgenerator extends \Test\TestCase {
function testGetAbsoluteURLDocRoot($url, $expectedResult) {
\OC::$WEBROOT = '';
- $urlGenerator = new \OC\URLGenerator(null);
+ $config = $this->getMock('\OCP\IConfig');
+ $cacheFactory = $this->getMock('\OCP\ICacheFactory');
+ $urlGenerator = new \OC\URLGenerator($config, $cacheFactory);
$result = $urlGenerator->getAbsoluteURL($url);
$this->assertEquals($expectedResult, $result);
@@ -93,7 +98,9 @@ class Test_Urlgenerator extends \Test\TestCase {
function testGetAbsoluteURLSubDir($url, $expectedResult) {
\OC::$WEBROOT = '/owncloud';
- $urlGenerator = new \OC\URLGenerator(null);
+ $config = $this->getMock('\OCP\IConfig');
+ $cacheFactory = $this->getMock('\OCP\ICacheFactory');
+ $urlGenerator = new \OC\URLGenerator($config, $cacheFactory);
$result = $urlGenerator->getAbsoluteURL($url);
$this->assertEquals($expectedResult, $result);
diff --git a/tests/preseed-config.php b/tests/preseed-config.php
index 3f41573bf29..e2c5a55fa58 100644
--- a/tests/preseed-config.php
+++ b/tests/preseed-config.php
@@ -1,23 +1,23 @@
<?php
-$CONFIG = array (
- "appstoreenabled" => false,
- 'apps_paths' =>
- array (
- 0 =>
- array (
- 'path' => OC::$SERVERROOT.'/apps',
- 'url' => '/apps',
- 'writable' => true,
- ),
- 1 =>
- array (
- 'path' => OC::$SERVERROOT.'/apps2',
- 'url' => '/apps2',
- 'writable' => false,
- )
- ),
-);
+$CONFIG = [
+ 'appstoreenabled' => false,
+ 'apps_paths' => [
+ [
+ 'path' => OC::$SERVERROOT . '/apps',
+ 'url' => '/apps',
+ 'writable' => true,
+ ],
+ ],
+];
-if(substr(strtolower(PHP_OS), 0, 3) == "win") {
- $CONFIG['openssl'] = array( 'config' => OC::$SERVERROOT.'/tests/data/openssl.cnf');
+if (is_dir(OC::$SERVERROOT.'/apps2')) {
+ $CONFIG['apps_paths'][] = [
+ 'path' => OC::$SERVERROOT . '/apps2',
+ 'url' => '/apps2',
+ 'writable' => false,
+ ];
+}
+
+if (substr(strtolower(PHP_OS), 0, 3) === 'win') {
+ $CONFIG['openssl'] = ['config' => OC::$SERVERROOT . '/tests/data/openssl.cnf'];
}
diff --git a/tests/settings/controller/mailsettingscontrollertest.php b/tests/settings/controller/mailsettingscontrollertest.php
index ed33d7fbe49..cc25fda52f7 100644
--- a/tests/settings/controller/mailsettingscontrollertest.php
+++ b/tests/settings/controller/mailsettingscontrollertest.php
@@ -30,7 +30,10 @@ class MailSettingsControllerTest extends \Test\TestCase {
$this->container['AppName'] = 'settings';
$this->container['UserSession'] = $this->getMockBuilder('\OC\User\Session')
->disableOriginalConstructor()->getMock();
- $this->container['Mail'] = $this->getMockBuilder('\OC_Mail')
+ $this->container['MailMessage'] = $this->getMockBuilder('\OCP\Mail\IMessage')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['Mailer'] = $this->getMockBuilder('\OC\Mail\Mailer')
+ ->setMethods(['send'])
->disableOriginalConstructor()->getMock();
$this->container['Defaults'] = $this->getMockBuilder('\OC_Defaults')
->disableOriginalConstructor()->getMock();
@@ -152,12 +155,6 @@ class MailSettingsControllerTest extends \Test\TestCase {
}
public function testSendTestMail() {
- /**
- * FIXME: Disabled due to missing DI on mail class.
- * TODO: Re-enable when https://github.com/owncloud/core/pull/12085 is merged.
- */
- $this->markTestSkipped('Disable test until OC_Mail is rewritten.');
-
$user = $this->getMockBuilder('\OC\User\User')
->disableOriginalConstructor()
->getMock();
diff --git a/tests/settings/controller/userscontrollertest.php b/tests/settings/controller/userscontrollertest.php
index b813da038a3..25c935bef58 100644
--- a/tests/settings/controller/userscontrollertest.php
+++ b/tests/settings/controller/userscontrollertest.php
@@ -45,7 +45,7 @@ class UsersControllerTest extends \Test\TestCase {
}));
$this->container['Defaults'] = $this->getMockBuilder('\OC_Defaults')
->disableOriginalConstructor()->getMock();
- $this->container['Mail'] = $this->getMockBuilder('\OC_Mail')
+ $this->container['Mailer'] = $this->getMockBuilder('\OCP\Mail\IMailer')
->disableOriginalConstructor()->getMock();
$this->container['DefaultMailAddress'] = 'no-reply@owncloud.com';
$this->container['Logger'] = $this->getMockBuilder('\OCP\ILogger')
@@ -1151,24 +1151,12 @@ class UsersControllerTest extends \Test\TestCase {
public function testCreateUnsuccessfulWithInvalidEmailAdmin() {
$this->container['IsAdmin'] = true;
- /**
- * FIXME: Disabled due to missing DI on mail class.
- * TODO: Re-enable when https://github.com/owncloud/core/pull/12085 is merged.
- */
- $this->markTestSkipped('Disable test until OC_Mail is rewritten.');
-
- $this->container['Mail']
- ->expects($this->once())
- ->method('validateAddress')
- ->will($this->returnValue(false));
-
- $expectedResponse = new DataResponse(
- array(
- 'message' => 'Invalid mail address'
- ),
+ $expectedResponse = new DataResponse([
+ 'message' => 'Invalid mail address',
+ ],
Http::STATUS_UNPROCESSABLE_ENTITY
);
- $response = $this->container['UsersController']->create('foo', 'password', array(), 'invalidMailAdress');
+ $response = $this->container['UsersController']->create('foo', 'password', [], 'invalidMailAdress');
$this->assertEquals($expectedResponse, $response);
}
@@ -1177,35 +1165,84 @@ class UsersControllerTest extends \Test\TestCase {
*/
public function testCreateSuccessfulWithValidEmailAdmin() {
$this->container['IsAdmin'] = true;
+ $message = $this->getMockBuilder('\OC\Mail\Message')
+ ->disableOriginalConstructor()->getMock();
+ $message
+ ->expects($this->at(0))
+ ->method('setTo')
+ ->with(['validMail@Adre.ss' => 'foo']);
+ $message
+ ->expects($this->at(1))
+ ->method('setSubject')
+ ->with('Your account was created');
+ $htmlBody = new Http\TemplateResponse(
+ 'settings',
+ 'email.new_user',
+ [
+ 'username' => 'foo',
+ 'url' => '',
+ ],
+ 'blank'
+ );
+ $message
+ ->expects($this->at(2))
+ ->method('setHtmlBody')
+ ->with($htmlBody->render());
+ $plainBody = new Http\TemplateResponse(
+ 'settings',
+ 'email.new_user_plain_text',
+ [
+ 'username' => 'foo',
+ 'url' => '',
+ ],
+ 'blank'
+ );
+ $message
+ ->expects($this->at(3))
+ ->method('setPlainBody')
+ ->with($plainBody->render());
+ $message
+ ->expects($this->at(4))
+ ->method('setFrom')
+ ->with(['no-reply@owncloud.com' => null]);
+
+ $this->container['Mailer']
+ ->expects($this->at(0))
+ ->method('validateMailAddress')
+ ->with('validMail@Adre.ss')
+ ->will($this->returnValue(true));
+ $this->container['Mailer']
+ ->expects($this->at(1))
+ ->method('createMessage')
+ ->will($this->returnValue($message));
+ $this->container['Mailer']
+ ->expects($this->at(2))
+ ->method('send')
+ ->with($message);
- /**
- * FIXME: Disabled due to missing DI on mail class.
- * TODO: Re-enable when https://github.com/owncloud/core/pull/12085 is merged.
- */
- $this->markTestSkipped('Disable test until OC_Mail is rewritten.');
-
- $this->container['Mail']
+ $user = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $user
+ ->method('getHome')
+ ->will($this->returnValue('/home/user'));
+ $user
+ ->method('getHome')
+ ->will($this->returnValue('/home/user'));
+ $user
+ ->method('getUID')
+ ->will($this->returnValue('foo'));
+ $user
->expects($this->once())
- ->method('validateAddress')
- ->will($this->returnValue(true));
- $this->container['Mail']
+ ->method('getBackendClassName')
+ ->will($this->returnValue('bar'));
+
+ $this->container['UserManager']
->expects($this->once())
- ->method('send')
- ->with(
- $this->equalTo('validMail@Adre.ss'),
- $this->equalTo('foo'),
- $this->anything(),
- $this->anything(),
- $this->anything(),
- $this->equalTo('no-reply@owncloud.com'),
- $this->equalTo(1),
- $this->anything()
- );
- $this->container['Logger']
- ->expects($this->never())
- ->method('error');
+ ->method('createUser')
+ ->will($this->onConsecutiveCalls($user));
+
- $response = $this->container['UsersController']->create('foo', 'password', array(), 'validMail@Adre.ss');
+ $response = $this->container['UsersController']->create('foo', 'password', [], 'validMail@Adre.ss');
$this->assertEquals(Http::STATUS_CREATED, $response->getStatus());
}