summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorJörn Friedrich Dreyer <jfd@butonic.de>2013-09-04 13:55:49 +0200
committerJörn Friedrich Dreyer <jfd@butonic.de>2013-09-04 14:11:40 +0200
commit4af5a8c483278eae2e8e38f5ea0a238072848b87 (patch)
treebeca3f5250e1a50eca58fa63eea056b69ab82e44 /apps
parent7c9d9992432839f2265b8f6b0f43ed15bfca9ff1 (diff)
parent09187f3b3b30e6f810c6afff7332615ed472154e (diff)
downloadnextcloud-server-4af5a8c483278eae2e8e38f5ea0a238072848b87.tar.gz
nextcloud-server-4af5a8c483278eae2e8e38f5ea0a238072848b87.zip
Merge branch 'master' into fix_3728_with_file_exists_dialog
Conflicts: apps/files/ajax/upload.php apps/files/js/file-upload.js apps/files/js/filelist.js apps/files/js/files.js apps/files/templates/part.list.php
Diffstat (limited to 'apps')
-rw-r--r--apps/files/ajax/download.php2
-rw-r--r--apps/files/ajax/list.php2
-rw-r--r--apps/files/ajax/newfile.php35
-rw-r--r--apps/files/ajax/rename.php2
-rw-r--r--apps/files/ajax/upload.php26
-rw-r--r--apps/files/appinfo/app.php16
-rw-r--r--apps/files/appinfo/routes.php2
-rw-r--r--apps/files/css/files.css234
-rw-r--r--apps/files/index.php5
-rw-r--r--apps/files/js/file-upload.js252
-rw-r--r--apps/files/js/fileactions.js14
-rw-r--r--apps/files/js/filelist.js141
-rw-r--r--apps/files/js/files.js240
-rw-r--r--apps/files/js/keyboardshortcuts.js6
-rw-r--r--apps/files/l10n/ar.php20
-rw-r--r--apps/files/l10n/bg_BG.php13
-rw-r--r--apps/files/l10n/bn_BD.php11
-rw-r--r--apps/files/l10n/ca.php18
-rw-r--r--apps/files/l10n/cs_CZ.php19
-rw-r--r--apps/files/l10n/cy_GB.php13
-rw-r--r--apps/files/l10n/da.php21
-rw-r--r--apps/files/l10n/de.php19
-rw-r--r--apps/files/l10n/de_DE.php19
-rw-r--r--apps/files/l10n/el.php18
-rw-r--r--apps/files/l10n/en@pirate.php3
-rw-r--r--apps/files/l10n/eo.php15
-rw-r--r--apps/files/l10n/es.php17
-rw-r--r--apps/files/l10n/es_AR.php18
-rw-r--r--apps/files/l10n/et_EE.php18
-rw-r--r--apps/files/l10n/eu.php18
-rw-r--r--apps/files/l10n/fa.php17
-rw-r--r--apps/files/l10n/fi_FI.php16
-rw-r--r--apps/files/l10n/fr.php19
-rw-r--r--apps/files/l10n/gl.php18
-rw-r--r--apps/files/l10n/he.php16
-rw-r--r--apps/files/l10n/hi.php3
-rw-r--r--apps/files/l10n/hr.php10
-rw-r--r--apps/files/l10n/hu_HU.php17
-rw-r--r--apps/files/l10n/hy.php7
-rw-r--r--apps/files/l10n/ia.php5
-rw-r--r--apps/files/l10n/id.php14
-rw-r--r--apps/files/l10n/is.php11
-rw-r--r--apps/files/l10n/it.php19
-rw-r--r--apps/files/l10n/ja_JP.php19
-rw-r--r--apps/files/l10n/ka.php3
-rw-r--r--apps/files/l10n/ka_GE.php13
-rw-r--r--apps/files/l10n/ko.php15
-rw-r--r--apps/files/l10n/ku_IQ.php3
-rw-r--r--apps/files/l10n/lb.php9
-rw-r--r--apps/files/l10n/lt_LT.php15
-rw-r--r--apps/files/l10n/lv.php21
-rw-r--r--apps/files/l10n/mk.php14
-rw-r--r--apps/files/l10n/ms_MY.php9
-rw-r--r--apps/files/l10n/my_MM.php3
-rw-r--r--apps/files/l10n/nb_NO.php27
-rw-r--r--apps/files/l10n/nl.php18
-rw-r--r--apps/files/l10n/nn_NO.php13
-rw-r--r--apps/files/l10n/oc.php10
-rw-r--r--apps/files/l10n/pl.php17
-rw-r--r--apps/files/l10n/pt_BR.php19
-rw-r--r--apps/files/l10n/pt_PT.php19
-rw-r--r--apps/files/l10n/ro.php17
-rw-r--r--apps/files/l10n/ru.php17
-rw-r--r--apps/files/l10n/ru_RU.php18
-rw-r--r--apps/files/l10n/si_LK.php13
-rw-r--r--apps/files/l10n/sk_SK.php18
-rw-r--r--apps/files/l10n/sl.php17
-rw-r--r--apps/files/l10n/sq.php12
-rw-r--r--apps/files/l10n/sr.php13
-rw-r--r--apps/files/l10n/sr@latin.php5
-rw-r--r--apps/files/l10n/sv.php19
-rw-r--r--apps/files/l10n/ta_LK.php11
-rw-r--r--apps/files/l10n/te.php7
-rw-r--r--apps/files/l10n/th_TH.php15
-rw-r--r--apps/files/l10n/tr.php18
-rw-r--r--apps/files/l10n/ug.php9
-rw-r--r--apps/files/l10n/uk.php17
-rw-r--r--apps/files/l10n/ur_PK.php3
-rw-r--r--apps/files/l10n/vi.php15
-rw-r--r--apps/files/l10n/zh_CN.GB2312.php83
-rw-r--r--apps/files/l10n/zh_CN.php15
-rw-r--r--apps/files/l10n/zh_HK.php8
-rw-r--r--apps/files/l10n/zh_TW.php67
-rw-r--r--apps/files/lib/app.php2
-rw-r--r--apps/files/lib/capabilities.php2
-rw-r--r--apps/files/lib/helper.php2
-rw-r--r--apps/files/templates/index.php34
-rw-r--r--apps/files/templates/part.list.php81
-rw-r--r--apps/files/tests/ajax_rename.php2
-rw-r--r--apps/files_encryption/ajax/changeRecoveryPassword.php2
-rw-r--r--apps/files_encryption/ajax/updatePrivateKeyPassword.php2
-rw-r--r--apps/files_encryption/ajax/userrecovery.php2
-rw-r--r--apps/files_encryption/appinfo/routes.php2
-rw-r--r--apps/files_encryption/css/settings-personal.css2
-rw-r--r--apps/files_encryption/files/error.php2
-rw-r--r--apps/files_encryption/hooks/hooks.php33
-rw-r--r--apps/files_encryption/js/settings-admin.js2
-rw-r--r--apps/files_encryption/js/settings-personal.js2
-rw-r--r--apps/files_encryption/l10n/cs_CZ.php1
-rw-r--r--apps/files_encryption/l10n/da.php2
-rw-r--r--apps/files_encryption/l10n/fr.php2
-rw-r--r--apps/files_encryption/l10n/hu_HU.php14
-rw-r--r--apps/files_encryption/l10n/ru.php2
-rw-r--r--apps/files_encryption/l10n/ru_RU.php5
-rw-r--r--apps/files_encryption/l10n/sk_SK.php10
-rw-r--r--apps/files_encryption/l10n/zh_CN.GB2312.php6
-rw-r--r--apps/files_encryption/lib/capabilities.php2
-rwxr-xr-xapps/files_encryption/lib/crypt.php127
-rwxr-xr-xapps/files_encryption/lib/helper.php49
-rwxr-xr-xapps/files_encryption/lib/keymanager.php2
-rw-r--r--apps/files_encryption/lib/proxy.php11
-rw-r--r--apps/files_encryption/lib/stream.php102
-rw-r--r--apps/files_encryption/lib/util.php374
-rw-r--r--apps/files_encryption/settings-personal.php2
-rwxr-xr-xapps/files_encryption/tests/crypt.php324
-rw-r--r--apps/files_encryption/tests/keymanager.php46
-rwxr-xr-xapps/files_encryption/tests/share.php55
-rw-r--r--apps/files_encryption/tests/stream.php18
-rwxr-xr-xapps/files_encryption/tests/trashbin.php24
-rwxr-xr-xapps/files_encryption/tests/util.php24
-rwxr-xr-xapps/files_encryption/tests/webdav.php20
-rw-r--r--apps/files_external/3rdparty/Dropbox/API.php380
-rw-r--r--apps/files_external/3rdparty/Dropbox/Exception.php15
-rw-r--r--apps/files_external/3rdparty/Dropbox/Exception/Forbidden.php18
-rw-r--r--apps/files_external/3rdparty/Dropbox/Exception/NotFound.php20
-rw-r--r--apps/files_external/3rdparty/Dropbox/Exception/OverQuota.php20
-rw-r--r--apps/files_external/3rdparty/Dropbox/Exception/RequestToken.php18
-rw-r--r--apps/files_external/3rdparty/Dropbox/LICENSE.txt19
-rw-r--r--apps/files_external/3rdparty/Dropbox/OAuth.php151
-rw-r--r--apps/files_external/3rdparty/Dropbox/OAuth/Consumer/Dropbox.php37
-rw-r--r--apps/files_external/3rdparty/Dropbox/OAuth/Curl.php282
-rw-r--r--apps/files_external/3rdparty/Dropbox/README.md31
-rw-r--r--apps/files_external/3rdparty/Dropbox/autoload.php29
-rw-r--r--apps/files_external/3rdparty/smb4php/smb.php484
-rw-r--r--apps/files_external/ajax/addMountPoint.php2
-rw-r--r--apps/files_external/ajax/google.php2
-rw-r--r--apps/files_external/js/google.js2
-rw-r--r--apps/files_external/l10n/lv.php1
-rw-r--r--apps/files_external/l10n/ru_RU.php6
-rw-r--r--apps/files_external/l10n/zh_CN.GB2312.php28
-rw-r--r--apps/files_external/lib/amazons3.php6
-rwxr-xr-xapps/files_external/lib/config.php38
-rwxr-xr-xapps/files_external/lib/dropbox.php2
-rw-r--r--apps/files_external/lib/google.php6
-rw-r--r--apps/files_external/lib/irods.php2
-rw-r--r--apps/files_external/lib/sftp.php2
-rw-r--r--apps/files_external/lib/smb.php4
-rw-r--r--apps/files_external/lib/webdav.php7
-rw-r--r--apps/files_external/tests/google.php2
-rw-r--r--apps/files_sharing/ajax/publicpreview.php85
-rw-r--r--apps/files_sharing/appinfo/app.php2
-rw-r--r--apps/files_sharing/appinfo/routes.php5
-rw-r--r--apps/files_sharing/js/public.js8
-rw-r--r--apps/files_sharing/js/share.js5
-rw-r--r--apps/files_sharing/l10n/eu.php6
-rw-r--r--apps/files_sharing/l10n/fr.php6
-rw-r--r--apps/files_sharing/l10n/ru_RU.php5
-rw-r--r--apps/files_sharing/l10n/zh_CN.GB2312.php12
-rw-r--r--apps/files_sharing/l10n/zh_CN.php7
-rw-r--r--apps/files_sharing/l10n/zh_TW.php7
-rw-r--r--apps/files_sharing/lib/cache.php2
-rw-r--r--apps/files_sharing/lib/permissions.php2
-rw-r--r--apps/files_sharing/lib/sharedstorage.php12
-rw-r--r--apps/files_sharing/lib/watcher.php2
-rw-r--r--apps/files_sharing/public.php10
-rw-r--r--apps/files_sharing/templates/part.404.php2
-rw-r--r--apps/files_sharing/templates/public.php4
-rw-r--r--apps/files_trashbin/ajax/preview.php42
-rw-r--r--apps/files_trashbin/appinfo/app.php2
-rw-r--r--apps/files_trashbin/appinfo/routes.php5
-rw-r--r--apps/files_trashbin/appinfo/update.php2
-rw-r--r--apps/files_trashbin/index.php3
-rw-r--r--apps/files_trashbin/js/disableDefaultActions.js2
-rw-r--r--apps/files_trashbin/js/trash.js14
-rw-r--r--apps/files_trashbin/l10n/ar.php6
-rw-r--r--apps/files_trashbin/l10n/bg_BG.php6
-rw-r--r--apps/files_trashbin/l10n/bn_BD.php6
-rw-r--r--apps/files_trashbin/l10n/ca.php6
-rw-r--r--apps/files_trashbin/l10n/cs_CZ.php6
-rw-r--r--apps/files_trashbin/l10n/cy_GB.php6
-rw-r--r--apps/files_trashbin/l10n/da.php6
-rw-r--r--apps/files_trashbin/l10n/de.php6
-rw-r--r--apps/files_trashbin/l10n/de_DE.php6
-rw-r--r--apps/files_trashbin/l10n/el.php6
-rw-r--r--apps/files_trashbin/l10n/eo.php6
-rw-r--r--apps/files_trashbin/l10n/es.php6
-rw-r--r--apps/files_trashbin/l10n/es_AR.php6
-rw-r--r--apps/files_trashbin/l10n/et_EE.php6
-rw-r--r--apps/files_trashbin/l10n/eu.php7
-rw-r--r--apps/files_trashbin/l10n/fa.php6
-rw-r--r--apps/files_trashbin/l10n/fi_FI.php6
-rw-r--r--apps/files_trashbin/l10n/fr.php7
-rw-r--r--apps/files_trashbin/l10n/gl.php6
-rw-r--r--apps/files_trashbin/l10n/he.php6
-rw-r--r--apps/files_trashbin/l10n/hr.php2
-rw-r--r--apps/files_trashbin/l10n/hu_HU.php6
-rw-r--r--apps/files_trashbin/l10n/hy.php2
-rw-r--r--apps/files_trashbin/l10n/ia.php2
-rw-r--r--apps/files_trashbin/l10n/id.php6
-rw-r--r--apps/files_trashbin/l10n/is.php6
-rw-r--r--apps/files_trashbin/l10n/it.php6
-rw-r--r--apps/files_trashbin/l10n/ja_JP.php6
-rw-r--r--apps/files_trashbin/l10n/ka_GE.php6
-rw-r--r--apps/files_trashbin/l10n/ko.php6
-rw-r--r--apps/files_trashbin/l10n/ku_IQ.php4
-rw-r--r--apps/files_trashbin/l10n/lb.php2
-rw-r--r--apps/files_trashbin/l10n/lt_LT.php6
-rw-r--r--apps/files_trashbin/l10n/lv.php7
-rw-r--r--apps/files_trashbin/l10n/mk.php6
-rw-r--r--apps/files_trashbin/l10n/ms_MY.php2
-rw-r--r--apps/files_trashbin/l10n/nb_NO.php6
-rw-r--r--apps/files_trashbin/l10n/nl.php6
-rw-r--r--apps/files_trashbin/l10n/nn_NO.php6
-rw-r--r--apps/files_trashbin/l10n/oc.php2
-rw-r--r--apps/files_trashbin/l10n/pl.php6
-rw-r--r--apps/files_trashbin/l10n/pt_BR.php6
-rw-r--r--apps/files_trashbin/l10n/pt_PT.php6
-rw-r--r--apps/files_trashbin/l10n/ro.php6
-rw-r--r--apps/files_trashbin/l10n/ru.php6
-rw-r--r--apps/files_trashbin/l10n/ru_RU.php7
-rw-r--r--apps/files_trashbin/l10n/si_LK.php4
-rw-r--r--apps/files_trashbin/l10n/sk_SK.php6
-rw-r--r--apps/files_trashbin/l10n/sl.php6
-rw-r--r--apps/files_trashbin/l10n/sq.php6
-rw-r--r--apps/files_trashbin/l10n/sr.php6
-rw-r--r--apps/files_trashbin/l10n/sr@latin.php2
-rw-r--r--apps/files_trashbin/l10n/sv.php6
-rw-r--r--apps/files_trashbin/l10n/ta_LK.php6
-rw-r--r--apps/files_trashbin/l10n/te.php2
-rw-r--r--apps/files_trashbin/l10n/th_TH.php6
-rw-r--r--apps/files_trashbin/l10n/tr.php7
-rw-r--r--apps/files_trashbin/l10n/ug.php5
-rw-r--r--apps/files_trashbin/l10n/uk.php6
-rw-r--r--apps/files_trashbin/l10n/ur_PK.php4
-rw-r--r--apps/files_trashbin/l10n/vi.php6
-rw-r--r--apps/files_trashbin/l10n/zh_CN.GB2312.php12
-rw-r--r--apps/files_trashbin/l10n/zh_CN.php7
-rw-r--r--apps/files_trashbin/l10n/zh_HK.php3
-rw-r--r--apps/files_trashbin/l10n/zh_TW.php15
-rw-r--r--apps/files_trashbin/lib/trash.php19
-rw-r--r--apps/files_trashbin/templates/index.php2
-rw-r--r--apps/files_trashbin/templates/part.list.php10
-rw-r--r--apps/files_versions/appinfo/routes.php2
-rw-r--r--apps/files_versions/css/versions.css7
-rw-r--r--apps/files_versions/js/versions.js18
-rw-r--r--apps/files_versions/l10n/cs_CZ.php4
-rw-r--r--apps/files_versions/l10n/fr.php3
-rw-r--r--apps/files_versions/l10n/ru_RU.php5
-rw-r--r--apps/files_versions/l10n/zh_CN.GB2312.php6
-rw-r--r--apps/files_versions/l10n/zh_TW.php3
-rw-r--r--apps/files_versions/lib/capabilities.php2
-rw-r--r--apps/files_versions/lib/hooks.php15
-rw-r--r--apps/files_versions/lib/versions.php49
-rw-r--r--apps/user_ldap/ajax/clearMappings.php2
-rw-r--r--apps/user_ldap/ajax/getConfiguration.php2
-rw-r--r--apps/user_ldap/ajax/getNewServerConfigPrefix.php2
-rw-r--r--apps/user_ldap/ajax/setConfiguration.php2
-rw-r--r--apps/user_ldap/css/settings.css10
-rw-r--r--apps/user_ldap/group_proxy.php2
-rw-r--r--apps/user_ldap/js/settings.js11
-rw-r--r--apps/user_ldap/l10n/bn_BD.php7
-rw-r--r--apps/user_ldap/l10n/ca.php12
-rw-r--r--apps/user_ldap/l10n/cs_CZ.php44
-rw-r--r--apps/user_ldap/l10n/da.php10
-rw-r--r--apps/user_ldap/l10n/de.php12
-rw-r--r--apps/user_ldap/l10n/de_DE.php12
-rw-r--r--apps/user_ldap/l10n/el.php7
-rw-r--r--apps/user_ldap/l10n/eo.php7
-rw-r--r--apps/user_ldap/l10n/es.php8
-rw-r--r--apps/user_ldap/l10n/es_AR.php7
-rw-r--r--apps/user_ldap/l10n/et_EE.php12
-rw-r--r--apps/user_ldap/l10n/eu.php7
-rw-r--r--apps/user_ldap/l10n/fa.php2
-rw-r--r--apps/user_ldap/l10n/fi_FI.php7
-rw-r--r--apps/user_ldap/l10n/fr.php7
-rw-r--r--apps/user_ldap/l10n/gl.php12
-rw-r--r--apps/user_ldap/l10n/hu_HU.php7
-rw-r--r--apps/user_ldap/l10n/id.php7
-rw-r--r--apps/user_ldap/l10n/it.php12
-rw-r--r--apps/user_ldap/l10n/ja_JP.php12
-rw-r--r--apps/user_ldap/l10n/ka_GE.php7
-rw-r--r--apps/user_ldap/l10n/ko.php7
-rw-r--r--apps/user_ldap/l10n/lt_LT.php1
-rw-r--r--apps/user_ldap/l10n/lv.php7
-rw-r--r--apps/user_ldap/l10n/nb_NO.php7
-rw-r--r--apps/user_ldap/l10n/nl.php15
-rw-r--r--apps/user_ldap/l10n/pl.php7
-rw-r--r--apps/user_ldap/l10n/pt_BR.php12
-rw-r--r--apps/user_ldap/l10n/pt_PT.php7
-rw-r--r--apps/user_ldap/l10n/ro.php7
-rw-r--r--apps/user_ldap/l10n/ru.php7
-rw-r--r--apps/user_ldap/l10n/ru_RU.php6
-rw-r--r--apps/user_ldap/l10n/si_LK.php2
-rw-r--r--apps/user_ldap/l10n/sk_SK.php12
-rw-r--r--apps/user_ldap/l10n/sl.php7
-rw-r--r--apps/user_ldap/l10n/sr.php7
-rw-r--r--apps/user_ldap/l10n/sv.php12
-rw-r--r--apps/user_ldap/l10n/ta_LK.php2
-rw-r--r--apps/user_ldap/l10n/th_TH.php7
-rw-r--r--apps/user_ldap/l10n/tr.php7
-rw-r--r--apps/user_ldap/l10n/uk.php7
-rw-r--r--apps/user_ldap/l10n/vi.php7
-rw-r--r--apps/user_ldap/l10n/zh_CN.GB2312.php38
-rw-r--r--apps/user_ldap/l10n/zh_CN.php7
-rw-r--r--apps/user_ldap/l10n/zh_TW.php74
-rw-r--r--apps/user_ldap/lib/access.php2
-rw-r--r--apps/user_ldap/lib/connection.php21
-rw-r--r--apps/user_ldap/lib/helper.php28
-rw-r--r--apps/user_ldap/lib/jobs.php2
-rw-r--r--apps/user_ldap/lib/proxy.php2
-rw-r--r--apps/user_ldap/settings.php2
-rw-r--r--apps/user_ldap/templates/settings.php13
-rw-r--r--apps/user_ldap/user_ldap.php10
-rw-r--r--apps/user_ldap/user_proxy.php2
-rw-r--r--apps/user_webdavauth/l10n/fr.php4
-rw-r--r--apps/user_webdavauth/l10n/nb_NO.php6
-rw-r--r--apps/user_webdavauth/l10n/ru_RU.php4
-rw-r--r--apps/user_webdavauth/l10n/zh_CN.php4
-rw-r--r--apps/user_webdavauth/l10n/zh_TW.php4
319 files changed, 3768 insertions, 2704 deletions
diff --git a/apps/files/ajax/download.php b/apps/files/ajax/download.php
index b2bfd53506d..6a34cbe4ef1 100644
--- a/apps/files/ajax/download.php
+++ b/apps/files/ajax/download.php
@@ -39,4 +39,4 @@ if (!is_array($files_list)) {
$files_list = array($files);
}
-OC_Files::get($dir, $files_list, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
+OC_Files::get($dir, $files_list, $_SERVER['REQUEST_METHOD'] == 'HEAD');
diff --git a/apps/files/ajax/list.php b/apps/files/ajax/list.php
index 878e4cb2159..c50e96b2429 100644
--- a/apps/files/ajax/list.php
+++ b/apps/files/ajax/list.php
@@ -10,7 +10,7 @@ OCP\JSON::checkLoggedIn();
// Load the files
$dir = isset( $_GET['dir'] ) ? $_GET['dir'] : '';
-$doBreadcrumb = isset( $_GET['breadcrumb'] ) ? true : false;
+$doBreadcrumb = isset($_GET['breadcrumb']);
$data = array();
// Make breadcrumb
diff --git a/apps/files/ajax/newfile.php b/apps/files/ajax/newfile.php
index 8548fc95ddf..76c03c87a51 100644
--- a/apps/files/ajax/newfile.php
+++ b/apps/files/ajax/newfile.php
@@ -54,6 +54,8 @@ function progress($notification_code, $severity, $message, $message_code, $bytes
}
}
+$target = $dir.'/'.$filename;
+
if($source) {
if(substr($source, 0, 8)!='https://' and substr($source, 0, 7)!='http://') {
OCP\JSON::error(array("data" => array( "message" => "Not a valid source" )));
@@ -62,7 +64,6 @@ if($source) {
$ctx = stream_context_create(null, array('notification' =>'progress'));
$sourceStream=fopen($source, 'rb', false, $ctx);
- $target=$dir.'/'.$filename;
$result=\OC\Files\Filesystem::file_put_contents($target, $sourceStream);
if($result) {
$meta = \OC\Files\Filesystem::getFileInfo($target);
@@ -75,20 +76,32 @@ if($source) {
$eventSource->close();
exit();
} else {
+ $success = false;
+ if (!$content) {
+ $templateManager = OC_Helper::getFileTemplateManager();
+ $mimeType = OC_Helper::getMimetypeDetector()->detectPath($target);
+ $content = $templateManager->getTemplate($mimeType);
+ }
+
if($content) {
- if(\OC\Files\Filesystem::file_put_contents($dir.'/'.$filename, $content)) {
- $meta = \OC\Files\Filesystem::getFileInfo($dir.'/'.$filename);
- $id = $meta['fileid'];
- OCP\JSON::success(array("data" => array('content'=>$content, 'id' => $id)));
- exit();
- }
- }elseif(\OC\Files\Filesystem::touch($dir . '/' . $filename)) {
- $meta = \OC\Files\Filesystem::getFileInfo($dir.'/'.$filename);
+ $success = \OC\Files\Filesystem::file_put_contents($target, $content);
+ } else {
+ $success = \OC\Files\Filesystem::touch($target);
+ }
+
+ if($success) {
+ $meta = \OC\Files\Filesystem::getFileInfo($target);
$id = $meta['fileid'];
- OCP\JSON::success(array("data" => array('content'=>$content, 'id' => $id, 'mime' => $meta['mimetype'])));
+ $mime = $meta['mimetype'];
+ $size = $meta['size'];
+ OCP\JSON::success(array('data' => array(
+ 'id' => $id,
+ 'mime' => $mime,
+ 'size' => $size,
+ 'content' => $content,
+ )));
exit();
}
}
-
OCP\JSON::error(array("data" => array( "message" => "Error when creating the file" )));
diff --git a/apps/files/ajax/rename.php b/apps/files/ajax/rename.php
index f4551858283..5b07c306af8 100644
--- a/apps/files/ajax/rename.php
+++ b/apps/files/ajax/rename.php
@@ -38,4 +38,4 @@ if($result['success'] === true){
OCP\JSON::success(array('data' => $result['data']));
} else {
OCP\JSON::error(array('data' => $result['data']));
-} \ No newline at end of file
+}
diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php
index 218482cb41d..ec313030ed1 100644
--- a/apps/files/ajax/upload.php
+++ b/apps/files/ajax/upload.php
@@ -126,19 +126,25 @@ if (strpos($dir, '..') === false) {
//$target = OCP\Files::buildNotExistingFileName(stripslashes($dir), $files['name'][$i]);
if (is_uploaded_file($files['tmp_name'][$i]) and \OC\Files\Filesystem::fromTmpFile($files['tmp_name'][$i], $target)) {
$meta = \OC\Files\Filesystem::getFileInfo($target);
+
// updated max file size after upload
$storageStats = \OCA\files\lib\Helper::buildFileStorageStatistics($dir);
- $result[] = array('status' => 'success',
- 'mime' => $meta['mimetype'],
- 'mtime' => $meta['mtime'],
- 'size' => $meta['size'],
- 'id' => $meta['fileid'],
- 'name' => basename($target),
- 'originalname' => $newName,
- 'uploadMaxFilesize' => $maxUploadFileSize,
- 'maxHumanFilesize' => $maxHumanFileSize
- );
+ if ($meta === false) {
+ OCP\JSON::error(array('data' => array_merge(array('message' => $l->t('Upload failed')), $storageStats)));
+ exit();
+ } else {
+ $result[] = array('status' => 'success',
+ 'mime' => $meta['mimetype'],
+ 'mtime' => $meta['mtime'],
+ 'size' => $meta['size'],
+ 'id' => $meta['fileid'],
+ 'name' => basename($target),
+ 'originalname' => $newName,
+ 'uploadMaxFilesize' => $maxUploadFileSize,
+ 'maxHumanFilesize' => $maxHumanFileSize
+ );
+ }
}
}
}
diff --git a/apps/files/appinfo/app.php b/apps/files/appinfo/app.php
index 99739cb4cee..bd3245ded3f 100644
--- a/apps/files/appinfo/app.php
+++ b/apps/files/appinfo/app.php
@@ -5,11 +5,11 @@ $l = OC_L10N::get('files');
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") ));
+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_Search::registerProvider('OC_Search_Provider_File');
@@ -21,3 +21,9 @@ OC_Search::registerProvider('OC_Search_Provider_File');
\OC_Hook::connect('OC_Filesystem', 'post_rename', '\OC\Files\Cache\Updater', 'renameHook');
\OCP\BackgroundJob::addRegularTask('\OC\Files\Cache\BackgroundWatcher', 'checkNext');
+
+$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');
diff --git a/apps/files/appinfo/routes.php b/apps/files/appinfo/routes.php
index fcd5f4b2608..f3d8e9a4f4d 100644
--- a/apps/files/appinfo/routes.php
+++ b/apps/files/appinfo/routes.php
@@ -11,4 +11,4 @@ $this->create('download', 'download{file}')
->actionInclude('files/download.php');
// Register with the capabilities API
-OC_API::register('get', '/cloud/capabilities', array('OCA\Files\Capabilities', 'getCapabilities'), 'files', OC_API::USER_AUTH); \ No newline at end of file
+OC_API::register('get', '/cloud/capabilities', array('OCA\Files\Capabilities', 'getCapabilities'), 'files', OC_API::USER_AUTH);
diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index dcd6aeadf82..141f4557bed 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -19,10 +19,13 @@
background:#f8f8f8; border:1px solid #ddd; border-radius:10px; border-top-left-radius:0;
box-shadow:0 2px 7px rgba(170,170,170,.4);
}
-#new>ul>li { height:20px; margin:.3em; padding-left:2em; padding-bottom:0.1em;
+#new>ul>li { height:36px; margin:.3em; padding-left:3em; padding-bottom:0.1em;
background-repeat:no-repeat; cursor:pointer; }
-#new>ul>li>p { cursor:pointer; }
-#new>ul>li>form>input { padding:0.3em; margin:-0.3em; }
+#new>ul>li>p { cursor:pointer; padding-top: 7px; padding-bottom: 7px;}
+#new>ul>li>form>input {
+ padding: 5px;
+ margin: 2px 0;
+}
#trash { margin: 0 1em; z-index:1010; float: right; }
@@ -46,21 +49,25 @@
z-index:20; position:relative; cursor:pointer; overflow:hidden;
}
-#uploadprogresswrapper { float: right; position: relative; }
-#uploadprogresswrapper #uploadprogressbar {
- position:relative; float: right;
- margin-left: 12px; width:10em; height:1.5em; top:.4em;
+#uploadprogresswrapper {
+ position: relative;
+ display: inline;
+}
+#uploadprogressbar {
+ position:relative;
+ float: left;
+ margin-left: 12px;
+ width: 130px;
+ height: 26px;
display:inline-block;
}
+#uploadprogressbar + stop {
+ font-size: 13px;
+}
+
/* FILE TABLE */
-#emptyfolder {
- position:absolute;
- margin:10em 0 0 10em;
- font-size:1.5em; font-weight:bold;
- color:#888; text-shadow:#fff 0 1px 0;
-}
#filestable { position: relative; top:37px; width:100%; }
tbody tr { background-color:#fff; height:2.5em; }
tbody tr:hover, tbody tr:active {
@@ -75,54 +82,153 @@ span.extension { text-transform:lowercase; -ms-filter:"progid:DXImageTransform.M
tr:hover span.extension { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; color:#777; }
table tr.mouseOver td { background-color:#eee; }
table th { height:2em; padding:0 .5em; color:#999; }
-table th .name { float:left; margin-left:.5em; }
+table th .name {
+ position: absolute;
+ left: 55px;
+ top: 15px;
+}
table th, table td { border-bottom:1px solid #ddd; text-align:left; font-weight:normal; }
-table td { border-bottom:1px solid #eee; font-style:normal; background-position:1em .5em; background-repeat:no-repeat; }
-table th#headerName { width:100em; /* not really sure why this works better than 100% … table styling */ }
-table th#headerSize, table td.filesize { min-width:3em; padding:0 1em; text-align:right; }
-table th#headerDate, table td.date { min-width:11em; padding:0 .1em 0 1em; text-align:left; }
+table td {
+ border-bottom: 1px solid #eee;
+ font-style: normal;
+ background-position: 8px center;
+ background-repeat: no-repeat;
+}
+table th#headerName {
+ position: relative;
+ width: 100em; /* not really sure why this works better than 100% … table styling */
+ padding: 0;
+}
+#headerName-container {
+ position: relative;
+ height: 50px;
+}
+table th#headerSize, table td.filesize {
+ min-width: 3em;
+ padding: 0 1em;
+ text-align: right;
+}
+table th#headerDate, table td.date {
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ position: relative;
+ min-width: 11em;
+ display: block;
+ height: 51px;
+}
/* Multiselect bar */
-#filestable.multiselect { top:63px; }
-table.multiselect thead { position:fixed; top:82px; z-index:1; -moz-box-sizing: border-box; box-sizing: border-box; left: 0; padding-left: 64px; width:100%; }
+#filestable.multiselect {
+ top: 88px;
+}
+table.multiselect thead { position:fixed; top:82px; z-index:1; -moz-box-sizing: border-box; box-sizing: border-box; left: 0; padding-left: 80px; width:100%; }
+
table.multiselect thead th {
background-color: rgba(210,210,210,.7);
color: #000;
font-weight: bold;
border-bottom: 0;
}
-table.multiselect #headerName { width: 100%; }
+table.multiselect #headerName {
+ position: relative;
+ width: 100%;
+}
table td.selection, table th.selection, table td.fileaction { width:2em; text-align:center; }
-table td.filename a.name { display:block; height:1.5em; vertical-align:middle; margin-left:3em; }
+table td.filename a.name {
+ position:relative; /* Firefox needs to explicitly have this default set … */
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ display: block;
+ height: 50px;
+ vertical-align: middle;
+ padding: 0;
+}
table tr[data-type="dir"] td.filename a.name span.nametext {font-weight:bold; }
-table td.filename input.filename { width:100%; cursor:text; }
-table td.filename a, table td.login, table td.logout, table td.download, table td.upload, table td.create, table td.delete { padding:.2em .5em .5em 0; }
+table td.filename input.filename {
+ width: 80%;
+ font-size: 14px;
+ margin-top: 8px;
+ margin-left: 2px;
+ cursor: text;
+}
+table td.filename a, table td.login, table td.logout, table td.download, table td.upload, table td.create, table td.delete { padding:.2em .5em .5em .3em; }
table td.filename .nametext, .uploadtext, .modified { float:left; padding:.3em 0; }
+
+#modified {
+ position: absolute;
+ top: 15px;
+}
+.modified {
+ position: relative;
+ top: 11px;
+ left: 5px;
+}
+
/* TODO fix usability bug (accidental file/folder selection) */
-table td.filename .nametext { overflow:hidden; text-overflow:ellipsis; max-width:800px; }
+table td.filename .nametext {
+ position: absolute;
+ top: 16px;
+ left: 55px;
+ padding: 0;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ max-width: 800px;
+}
table td.filename .uploadtext { font-weight:normal; margin-left:.5em; }
table td.filename form { font-size:.85em; margin-left:3em; margin-right:3em; }
+
/* File checkboxes */
-#fileList tr td.filename>input[type="checkbox"]:first-child { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter:alpha(opacity=0); opacity:0; float:left; margin:.7em 0 0 1em; /* bigger clickable area doesn’t work in FF width:2.8em; height:2.4em;*/ -webkit-transition:opacity 200ms; -moz-transition:opacity 200ms; -o-transition:opacity 200ms; transition:opacity 200ms; }
-#fileList tr td.filename>input[type="checkbox"]:hover:first-child { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; filter:alpha(opacity=80); opacity:.8; }
-/* Always show checkbox when selected */
-#fileList tr td.filename>input[type="checkbox"]:checked:first-child { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; }
-#fileList tr.selected td.filename>input[type="checkbox"]:first-child { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; }
+#fileList tr td.filename>input[type="checkbox"]:first-child {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ filter: alpha(opacity=0);
+ opacity: 0;
+ float: left;
+ margin: 32px 0 4px 32px; /* bigger clickable area doesn’t work in FF width:2.8em; height:2.4em;*/
+}
+/* Show checkbox when hovering, checked, or selected */
+#fileList tr:hover td.filename>input[type="checkbox"]:first-child,
+#fileList tr td.filename>input[type="checkbox"]:checked:first-child,
+#fileList tr.selected td.filename>input[type="checkbox"]:first-child {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+ filter: alpha(opacity=100);
+ opacity: 1;
+}
+/* Use label to have bigger clickable size for checkbox */
+#fileList tr td.filename>input[type="checkbox"] + label,
+#select_all + label {
+ height: 50px;
+ position: absolute;
+ width: 50px;
+ z-index: 5;
+}
+#fileList tr td.filename>input[type="checkbox"] + label {
+ left: 0;
+}
+#select_all + label {
+ top: 0;
+}
+#select_all {
+ position: absolute;
+ top: 18px;
+ left: 18px;
+}
+
#fileList tr td.filename {
position:relative; width:100%;
-webkit-transition:background-image 500ms; -moz-transition:background-image 500ms; -o-transition:background-image 500ms; transition:background-image 500ms;
}
-#select_all { float:left; margin:.4em 0.6em 0 .5em; }
+
#uploadsize-message,#delete-confirm { display:none; }
/* File actions */
.fileactions {
- position:absolute; top:.6em; right:0;
- font-size:.8em;
+ position: absolute;
+ top: 16px;
+ right: 0;
+ font-size: 11px;
}
-#fileList .name { position:relative; /* Firefox needs to explicitly have this default set … */ }
#fileList tr:hover .fileactions { /* background to distinguish when overlaying with file names */
background-color: rgba(240,240,240,0.898);
box-shadow: -5px 0 7px rgba(240,240,240,0.898);
@@ -132,39 +238,75 @@ table td.filename form { font-size:.85em; margin-left:3em; margin-right:3em; }
box-shadow: -5px 0 7px rgba(230,230,230,.9);
}
#fileList .fileactions a.action img { position:relative; top:.2em; }
-#fileList a.action { display:inline; margin:-.5em 0; padding:1em .5em 1em .5em !important; }
+
#fileList img.move2trash { display:inline; margin:-.5em 0; padding:1em .5em 1em .5em !important; float:right; }
-a.action.delete { float:right; }
+#fileList a.action.delete {
+ position: absolute;
+ right: 0;
+ top: 0;
+ margin: 0;
+ padding: 15px 14px 19px !important;
+}
a.action>img { max-height:16px; max-width:16px; vertical-align:text-bottom; }
-.selectedActions { display:none; float:right; }
-.selectedActions a { display:inline; margin:-.5em 0; padding:.5em !important; }
-.selectedActions a img { position:relative; top:.3em; }
+
+/* Actions for selected files */
+.selectedActions {
+ display: none;
+ position: absolute;
+ top: -1px;
+ right: 0;
+ padding: 15px 8px;
+}
+.selectedActions a {
+ display: inline;
+ padding: 17px 5px;
+}
+.selectedActions a img {
+ position:relative;
+ top:.3em;
+}
+
#fileList a.action {
+ display: inline;
+ margin: -.5em 0;
+ padding: 18px 8px !important;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
filter: alpha(opacity=0);
opacity: 0;
display:none;
}
#fileList tr:hover a.action, #fileList a.action.permanent {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=.5)";
- filter: alpha(opacity=.5);
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
+ filter: alpha(opacity=50);
opacity: .5;
display:inline;
}
#fileList tr:hover a.action:hover {
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=1)";
- filter: alpha(opacity=1);
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+ filter: alpha(opacity=100);
opacity: 1;
display:inline;
}
.summary {
- opacity: .5;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
+ filter: alpha(opacity=30);
+ opacity: .3;
+ height: 70px;
}
+.summary:hover, .summary, table tr.summary td {
+ background-color: transparent;
+}
+
+.summary td {
+ padding-top: 8px;
+ padding-bottom: 8px;
+ border-bottom: none;
+}
.summary .info {
- margin-left: 3em;
+ margin-left: 55px;
}
#scanning-message{ top:40%; left:40%; position:absolute; display:none; }
@@ -269,4 +411,4 @@ table.dragshadow td.size {
.oc-dialog .oc-dialog-buttonrow .cancel {
float:left;
-} \ No newline at end of file
+}
diff --git a/apps/files/index.php b/apps/files/index.php
index 4f9e881eb2d..f1e120c872c 100644
--- a/apps/files/index.php
+++ b/apps/files/index.php
@@ -74,6 +74,7 @@ foreach ($content as $i) {
}
}
$i['directory'] = $dir;
+ $i['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($i['mimetype']);
$files[] = $i;
}
@@ -95,6 +96,7 @@ $list->assign('files', $files);
$list->assign('baseURL', OCP\Util::linkTo('files', 'index.php') . '?dir=');
$list->assign('downloadURL', OCP\Util::linkToRoute('download', array('file' => '/')));
$list->assign('disableSharing', false);
+$list->assign('isPublic', false);
$breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '');
$breadcrumbNav->assign('breadcrumb', $breadcrumb);
$breadcrumbNav->assign('baseURL', OCP\Util::linkTo('files', 'index.php') . '?dir=');
@@ -119,7 +121,7 @@ if ($needUpgrade) {
$tmpl->printPage();
} else {
// information about storage capacities
- $storageInfo=OC_Helper::getStorageInfo();
+ $storageInfo=OC_Helper::getStorageInfo($dir);
$maxUploadFilesize=OCP\Util::maxUploadFilesize($dir);
$publicUploadEnabled = \OC_Appconfig::getValue('core', 'shareapi_allow_public_upload', 'yes');
if (OC_App::isEnabled('files_encryption')) {
@@ -150,5 +152,6 @@ if ($needUpgrade) {
$tmpl->assign('usedSpacePercent', (int)$storageInfo['relative']);
$tmpl->assign('isPublic', false);
$tmpl->assign('publicUploadEnabled', $publicUploadEnabled);
+ $tmpl->assign("encryptedFiles", \OCP\Util::encryptedFiles());
$tmpl->printPage();
}
diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index ec8c97ff457..be3d7e08aff 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -544,7 +544,6 @@ $(document).ready(function() {
return t('files', 'File upload is in progress. Leaving the page now will cancel the upload.');
}
});
-
//add multiply file upload attribute to all browsers except konqueror (which crashes when it's used)
if(navigator.userAgent.search(/konqueror/i) === -1) {
$('#file_upload_start').attr('multiple', 'multiple');
@@ -582,138 +581,147 @@ $(document).ready(function() {
}
});
});
- $('#new li').click(function() {
- if($(this).children('p').length === 0) {
+ $('#new').click(function(event){
+ event.stopPropagation();
+ });
+ $('#new>a').click(function(){
+ $('#new>ul').toggle();
+ $('#new').toggleClass('active');
+ });
+ $('#new li').click(function(){
+ if($(this).children('p').length==0){
return;
}
- $('#new li').each(function(i, element) {
- if($(element).children('p').length === 0) {
- $(element).children('form').remove();
- $(element).append('<p>' + $(element).data('text') + '</p>');
- }
- });
+ $('#new li').each(function(i, element) {
+ if($(element).children('p').length === 0) {
+ $(element).children('form').remove();
+ $(element).append('<p>' + $(element).data('text') + '</p>');
+ }
+ });
- var type = $(this).data('type');
- var text = $(this).children('p').text();
- $(this).data('text', text);
- $(this).children('p').remove();
- var form = $('<form></form>');
- var input = $('<input>');
- form.append(input);
- $(this).append(form);
- input.focus();
- form.submit(function(event) {
- event.stopPropagation();
- event.preventDefault();
- var newname=input.val();
- if(type === 'web' && newname.length === 0) {
- OC.Notification.show(t('files', 'URL cannot be empty.'));
- return false;
- } else if (type !== 'web' && !Files.isFileNameValid(newname)) {
- return false;
- } else if( type === 'folder' && $('#dir').val() === '/' && newname === 'Shared') {
- OC.Notification.show(t('files', 'Invalid folder name. Usage of \'Shared\' is reserved by ownCloud'));
- return false;
- }
- if (FileList.lastAction) {
- FileList.lastAction();
- }
- var name = getUniqueName(newname);
- if (newname !== name) {
- FileList.checkName(name, newname, true);
- var hidden = true;
- } else {
- var hidden = false;
- }
- switch(type) {
- case 'file':
- $.post(
- OC.filePath('files', 'ajax', 'newfile.php'),
- {dir:$('#dir').val(), filename:name},
- function(result) {
- if (result.status === 'success') {
- var date = new Date();
- FileList.addFile(name, 0, date, false, hidden);
- var tr = $('tr').filterAttr('data-file', name);
- tr.attr('data-mime', result.data.mime);
- tr.attr('data-id', result.data.id);
- getMimeIcon(result.data.mime, function(path) {
- tr.find('td.filename').attr('style', 'background-image:url('+path+')');
- });
- } else {
- OC.dialogs.alert(result.data.message, t('core', 'Error'));
+ var type = $(this).data('type');
+ var text = $(this).children('p').text();
+ $(this).data('text', text);
+ $(this).children('p').remove();
+ var form = $('<form></form>');
+ var input = $('<input>');
+ form.append(input);
+ $(this).append(form);
+ input.focus();
+ form.submit(function(event) {
+ event.stopPropagation();
+ event.preventDefault();
+ var newname=input.val();
+ if(type === 'web' && newname.length === 0) {
+ OC.Notification.show(t('files', 'URL cannot be empty.'));
+ return false;
+ } else if (type !== 'web' && !Files.isFileNameValid(newname)) {
+ return false;
+ } else if( type === 'folder' && $('#dir').val() === '/' && newname === 'Shared') {
+ OC.Notification.show(t('files', 'Invalid folder name. Usage of \'Shared\' is reserved by ownCloud'));
+ return false;
+ }
+ if (FileList.lastAction) {
+ FileList.lastAction();
+ }
+ var name = getUniqueName(newname);
+ if (newname !== name) {
+ FileList.checkName(name, newname, true);
+ var hidden = true;
+ } else {
+ var hidden = false;
+ }
+ switch(type) {
+ case 'file':
+ $.post(
+ OC.filePath('files', 'ajax', 'newfile.php'),
+ {dir:$('#dir').val(), filename:name},
+ function(result) {
+ if (result.status === 'success') {
+ var date = new Date();
+ FileList.addFile(name, 0, date, false, hidden);
+ var tr = $('tr').filterAttr('data-file', name);
+ tr.attr('data-size',result.data.size);
+ tr.attr('data-mime', result.data.mime);
+ tr.attr('data-id', result.data.id);
+ tr.find('.filesize').text(humanFileSize(result.data.size));
+ var path = getPathForPreview(name);
+ lazyLoadPreview(path, result.data.mime, function(previewpath){
+ tr.find('td.filename').attr('style','background-image:url('+previewpath+')');
+ });
+ } else {
+ OC.dialogs.alert(result.data.message, t('core', 'Error'));
+ }
}
- }
- );
- break;
- case 'folder':
- $.post(
- OC.filePath('files', 'ajax', 'newfolder.php'),
- {dir:$('#dir').val(), foldername:name},
- function(result) {
- if (result.status === 'success') {
- var date = new Date();
- FileList.addDir(name, 0, date, hidden);
- var tr = $('tr').filterAttr('data-file', name);
- tr.attr('data-id', result.data.id);
- } else {
- OC.dialogs.alert(result.data.message, t('core', 'Error'));
+ );
+ break;
+ case 'folder':
+ $.post(
+ OC.filePath('files', 'ajax', 'newfolder.php'),
+ {dir:$('#dir').val(), foldername:name},
+ function(result) {
+ if (result.status === 'success') {
+ var date = new Date();
+ FileList.addDir(name, 0, date, hidden);
+ var tr = $('tr').filterAttr('data-file', name);
+ tr.attr('data-id', result.data.id);
+ } else {
+ OC.dialogs.alert(result.data.message, t('core', 'Error'));
+ }
}
+ );
+ break;
+ case 'web':
+ if (name.substr(0, 8) !== 'https://' && name.substr(0, 7) !== 'http://') {
+ name = 'http://' + name;
}
- );
- break;
- case 'web':
- if (name.substr(0, 8) !== 'https://' && name.substr(0, 7) !== 'http://') {
- name = 'http://' + name;
- }
- var localName = name;
- if(localName.substr(localName.length-1, 1) === '/') { //strip /
- localName = localName.substr(0, localName.length-1);
- }
- if (localName.indexOf('/')) { //use last part of url
- localName = localName.split('/').pop();
- } else { //or the domain
- localName = (localName.match(/:\/\/(.[^\/]+)/)[1]).replace('www.', '');
- }
- localName = getUniqueName(localName);
- //IE < 10 does not fire the necessary events for the progress bar.
- if ($('html.lte9').length > 0) {
- } else {
- $('#uploadprogressbar').progressbar({value:0});
- $('#uploadprogressbar').fadeIn();
- }
+ var localName = name;
+ if(localName.substr(localName.length-1, 1) === '/') { //strip /
+ localName = localName.substr(0, localName.length-1);
+ }
+ if (localName.indexOf('/')) { //use last part of url
+ localName = localName.split('/').pop();
+ } else { //or the domain
+ localName = (localName.match(/:\/\/(.[^\/]+)/)[1]).replace('www.', '');
+ }
+ localName = getUniqueName(localName);
- var eventSource = new OC.EventSource(
- OC.filePath('files', 'ajax', 'newfile.php'),
- {dir:$('#dir').val(), source:name, filename:localName}
- );
- eventSource.listen('progress', function(progress) {
//IE < 10 does not fire the necessary events for the progress bar.
- if($('html.lte9').length > 0) {
- } else {
- $('#uploadprogressbar').progressbar('value', progress);
+ if($('html.lte9').length === 0) {
+ $('#uploadprogressbar').progressbar({value:0});
+ $('#uploadprogressbar').fadeIn();
}
- });
- eventSource.listen('success', function(data) {
- var mime = data.mime;
- var size = data.size;
- var id = data.id;
- $('#uploadprogressbar').fadeOut();
- var date = new Date();
- FileList.addFile(localName, size, date, false, hidden);
- var tr = $('tr').filterAttr('data-file', localName);
- tr.data('mime', mime).data('id', id);
- tr.attr('data-id', id);
- getMimeIcon(mime, function(path) {
- tr.find('td.filename').attr('style', 'background-image:url(' + path + ')');
+ var eventSource = new OC.EventSource(
+ OC.filePath('files', 'ajax', 'newfile.php'),
+ {dir:$('#dir').val(), source:name, filename:localName}
+ );
+ eventSource.listen('progress',function(progress){
+ //IE < 10 does not fire the necessary events for the progress bar.
+ if($('html.lte9').length === 0) {
+ $('#uploadprogressbar').progressbar('value', progress);
+ }
+ });
+ eventSource.listen('success', function(data) {
+ var mime = data.mime;
+ var size = data.size;
+ var id = data.id;
+ $('#uploadprogressbar').fadeOut();
+ var date = new Date();
+ FileList.addFile(localName, size, date, false, hidden);
+ var tr = $('tr').filterAttr('data-file', localName);
+ tr.data('mime', mime).data('id', id);
+ tr.attr('data-id', id);
+ var path = $('#dir').val()+'/'+localName;
+ lazyLoadPreview(path, mime, function(previewpath){
+ tr.find('td.filename').attr('style','background-image:url('+previewpath+')');
+ });
+ });
+ eventSource.listen('error', function(error) {
+ $('#uploadprogressbar').fadeOut();
+ alert(error);
});
- });
- eventSource.listen('error', function(error) {
- $('#uploadprogressbar').fadeOut();
- alert(error);
- });
- break;
+ break;
}
var li = form.parent();
form.remove();
diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js
index 277abcfdb15..703e543bf4b 100644
--- a/apps/files/js/fileactions.js
+++ b/apps/files/js/fileactions.js
@@ -65,7 +65,7 @@ var FileActions = {
FileActions.currentFile = parent;
var actions = FileActions.get(FileActions.getCurrentMimeType(), FileActions.getCurrentType(), FileActions.getCurrentPermissions());
var file = FileActions.getCurrentFile();
- if ($('tr').filterAttr('data-file', file).data('renaming')) {
+ if ($('tr[data-file="'+file+'"]').data('renaming')) {
return;
}
parent.children('a.name').append('<span class="fileactions" />');
@@ -123,14 +123,11 @@ var FileActions = {
img = img(file);
}
if (typeof trashBinApp !== 'undefined' && trashBinApp) {
- var html = '<a href="#" original-title="' + t('files', 'Delete permanently') + '" class="action delete" />';
+ var html = '<a href="#" original-title="' + t('files', 'Delete permanently') + '" class="action delete delete-icon" />';
} else {
- var html = '<a href="#" original-title="' + t('files', 'Delete') + '" class="action delete" />';
+ var html = '<a href="#" class="action delete delete-icon" />';
}
var element = $(html);
- if (img) {
- element.append($('<img class ="svg" src="' + img + '"/>'));
- }
element.data('action', actions['Delete']);
element.on('click', {a: null, elem: parent, actionFunc: actions['Delete']}, actionHandler);
parent.parent().children().last().append(element);
@@ -164,10 +161,11 @@ $(document).ready(function () {
window.location = OC.filePath('files', 'ajax', 'download.php') + '?files=' + encodeURIComponent(filename) + '&dir=' + encodeURIComponent($('#dir').val());
});
}
-
$('#fileList tr').each(function () {
FileActions.display($(this).children('td.filename'));
});
+
+ $('#fileList').trigger(jQuery.Event("fileActionsReady"));
});
@@ -200,7 +198,7 @@ FileActions.register('all', 'Rename', OC.PERMISSION_UPDATE, function () {
FileActions.register('dir', 'Open', OC.PERMISSION_READ, '', function (filename) {
- var dir = $('#dir').val()
+ var dir = $('#dir').val();
if (dir !== '/') {
dir = dir + '/';
}
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index eb57672e464..77ae039f807 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -15,9 +15,10 @@ var FileList={
// filename td
td = $('<td></td>').attr({
"class": "filename",
- "style": 'background-image:url('+iconurl+')'
+ "style": 'background-image:url('+iconurl+'); background-size: 32px;'
});
- td.append('<input type="checkbox" />');
+ var rand = Math.random().toString(16).slice(2);
+ td.append('<input id="select-'+rand+'" type="checkbox" /><label for="select-'+rand+'"></label>');
var link_elem = $('<a></a>').attr({
"class": "name",
"href": linktarget
@@ -144,8 +145,9 @@ var FileList={
remove:function(name){
$('tr').filterAttr('data-file',name).find('td.filename').draggable('destroy');
$('tr').filterAttr('data-file',name).remove();
+ FileList.updateFileSummary();
if($('tr[data-file]').length===0){
- $('#emptyfolder').show();
+ $('#emptycontent').show();
}
},
insertElement:function(name,type,element){
@@ -175,7 +177,8 @@ var FileList={
}else{
$('#fileList').append(element);
}
- $('#emptyfolder').hide();
+ $('#emptycontent').hide();
+ FileList.updateFileSummary();
},
loadingDone:function(name, id){
var mime, tr=$('tr').filterAttr('data-file',name);
@@ -185,8 +188,9 @@ var FileList={
if (id) {
tr.attr('data-id', id);
}
- getMimeIcon(mime,function(path){
- tr.find('td.filename').attr('style','background-image:url('+path+')');
+ var path = getPathForPreview(name);
+ lazyLoadPreview(path, mime, function(previewpath){
+ tr.find('td.filename').attr('style','background-image:url('+previewpath+')');
});
tr.find('td.filename').draggable(dragOptions);
},
@@ -198,7 +202,7 @@ var FileList={
tr=$('tr').filterAttr('data-file',name);
tr.data('renaming',true);
td=tr.children('td.filename');
- input=$('<input class="filename"/>').val(name);
+ input=$('<input type="text" class="filename"/>').val(name);
form=$('<form></form>');
form.append(input);
td.children('a.name').hide();
@@ -371,9 +375,7 @@ var FileList={
}
for (var i=0; i<files.length; i++) {
var deleteAction = $('tr').filterAttr('data-file',files[i]).children("td.date").children(".action.delete");
- var oldHTML = deleteAction.html();
- var newHTML = '<img class="move2trash" data-action="Delete" title="'+t('files', 'perform delete operation')+'" src="'+ OC.imagePath('core', 'loading.gif') +'"></a>';
- deleteAction.html(newHTML);
+ deleteAction.removeClass('delete-icon').addClass('progress-icon');
}
// Finish any existing actions
if (FileList.lastAction) {
@@ -393,13 +395,119 @@ var FileList={
});
procesSelection();
checkTrashStatus();
+ FileList.updateFileSummary();
} else {
$.each(files,function(index,file) {
- var deleteAction = $('tr').filterAttr('data-file',file).children("td.date").children(".move2trash");
- deleteAction.html(oldHTML);
+ var deleteAction = $('tr').filterAttr('data-file',files[i]).children("td.date").children(".action.delete");
+ deleteAction.removeClass('progress-icon').addClass('delete-icon');
});
}
});
+ },
+ createFileSummary: function() {
+ if( $('#fileList tr').length > 0 ) {
+ var totalDirs = 0;
+ var totalFiles = 0;
+ var totalSize = 0;
+
+ // Count types and filesize
+ $.each($('tr[data-file]'), function(index, value) {
+ if ($(value).data('type') === 'dir') {
+ totalDirs++;
+ } else if ($(value).data('type') === 'file') {
+ totalFiles++;
+ }
+ totalSize += parseInt($(value).data('size'));
+ });
+
+ // Get translations
+ var directoryInfo = n('files', '%n folder', '%n folders', totalDirs);
+ var fileInfo = n('files', '%n file', '%n files', totalFiles);
+
+ var infoVars = {
+ dirs: '<span class="dirinfo">'+directoryInfo+'</span><span class="connector">',
+ files: '</span><span class="fileinfo">'+fileInfo+'</span>'
+ }
+
+ var info = t('files', '{dirs} and {files}', infoVars);
+
+ // don't show the filesize column, if filesize is NaN (e.g. in trashbin)
+ if (isNaN(totalSize)) {
+ var fileSize = '';
+ } else {
+ var fileSize = '<td class="filesize">'+humanFileSize(totalSize)+'</td>';
+ }
+
+ $('#fileList').append('<tr class="summary"><td><span class="info">'+info+'</span></td>'+fileSize+'<td></td></tr>');
+
+ var $dirInfo = $('.summary .dirinfo');
+ var $fileInfo = $('.summary .fileinfo');
+ var $connector = $('.summary .connector');
+
+ // Show only what's necessary, e.g.: no files: don't show "0 files"
+ if ($dirInfo.html().charAt(0) === "0") {
+ $dirInfo.hide();
+ $connector.hide();
+ }
+ if ($fileInfo.html().charAt(0) === "0") {
+ $fileInfo.hide();
+ $connector.hide();
+ }
+ }
+ },
+ updateFileSummary: function() {
+ var $summary = $('.summary');
+
+ // Check if we should remove the summary to show "Upload something"
+ if ($('#fileList tr').length === 1 && $summary.length === 1) {
+ $summary.remove();
+ }
+ // If there's no summary create one (createFileSummary checks if there's data)
+ else if ($summary.length === 0) {
+ FileList.createFileSummary();
+ }
+ // There's a summary and data -> Update the summary
+ else if ($('#fileList tr').length > 1 && $summary.length === 1) {
+ var totalDirs = 0;
+ var totalFiles = 0;
+ var totalSize = 0;
+ $.each($('tr[data-file]'), function(index, value) {
+ if ($(value).data('type') === 'dir') {
+ totalDirs++;
+ } else if ($(value).data('type') === 'file') {
+ totalFiles++;
+ }
+ if ($(value).data('size') !== undefined) {
+ totalSize += parseInt($(value).data('size'));
+ }
+ });
+
+ var $dirInfo = $('.summary .dirinfo');
+ var $fileInfo = $('.summary .fileinfo');
+ var $connector = $('.summary .connector');
+
+ // Substitute old content with new translations
+ $dirInfo.html(n('files', '%n folder', '%n folders', totalDirs));
+ $fileInfo.html(n('files', '%n file', '%n files', totalFiles));
+ $('.summary .filesize').html(humanFileSize(totalSize));
+
+ // Show only what's necessary (may be hidden)
+ if ($dirInfo.html().charAt(0) === "0") {
+ $dirInfo.hide();
+ $connector.hide();
+ } else {
+ $dirInfo.show();
+ }
+ if ($fileInfo.html().charAt(0) === "0") {
+ $fileInfo.hide();
+ $connector.hide();
+ } else {
+ $fileInfo.show();
+ }
+ if ($dirInfo.html().charAt(0) !== "0" && $fileInfo.html().charAt(0) !== "0") {
+ $connector.show();
+ }
+ }
}
};
@@ -507,13 +615,14 @@ $(document).ready(function(){
var currentUploads = parseInt(uploadtext.attr('currentUploads'));
currentUploads -= 1;
uploadtext.attr('currentUploads', currentUploads);
+ var translatedText = n('files', 'Uploading %n file', 'Uploading %n files', currentUploads);
if(currentUploads === 0) {
var img = OC.imagePath('core', 'filetypes/folder.png');
data.context.find('td.filename').attr('style','background-image:url('+img+')');
- uploadtext.text('');
- uploadtext.hide();
+ uploadtext.text(translatedText);
+ uploadtext.show();
} else {
- uploadtext.text(currentUploads + ' ' + t('files', 'files uploading'));
+ uploadtext.text(translatedText);
}
// update folder size
@@ -696,4 +805,6 @@ $(document).ready(function(){
$(window).unload(function (){
$(window).trigger('beforeunload');
});
+
+ FileList.createFileSummary();
});
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index 53405c7fe7e..9a725fc2077 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -54,9 +54,23 @@ Files={
if (usedSpacePercent > 90) {
OC.Notification.show(t('files', 'Your storage is almost full ({usedSpacePercent}%)', {usedSpacePercent: usedSpacePercent}));
}
+ },
+
+ displayEncryptionWarning: function() {
+
+ if (!OC.Notification.isHidden()) {
+ return;
+ }
+
+ var encryptedFiles = $('#encryptedFiles').val();
+ if (encryptedFiles === '1') {
+ OC.Notification.show(t('files_encryption', 'Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files.'));
+ return;
+ }
}
};
$(document).ready(function() {
+ Files.displayEncryptionWarning();
Files.bindKeyboardShortcuts(document, jQuery);
$('#fileList tr').each(function(){
//little hack to set unescape filenames in attribute
@@ -225,196 +239,6 @@ $(document).ready(function() {
e.preventDefault(); // prevent browser from doing anything, if file isn't dropped in dropZone
});
- $.assocArraySize = function(obj) {
- // http://stackoverflow.com/a/6700/11236
- var size = 0, key;
- for (key in obj) {
- if (obj.hasOwnProperty(key)) size++;
- }
- return size;
- };
-
- //add multiply file upload attribute to all browsers except konqueror (which crashes when it's used)
- if(navigator.userAgent.search(/konqueror/i)==-1){
- $('#file_upload_start').attr('multiple','multiple')
- }
-
- //if the breadcrumb is to long, start by replacing foldernames with '...' except for the current folder
- var crumb=$('div.crumb').first();
- while($('div.controls').height()>40 && crumb.next('div.crumb').length>0){
- crumb.children('a').text('...');
- crumb=crumb.next('div.crumb');
- }
- //if that isn't enough, start removing items from the breacrumb except for the current folder and it's parent
- var crumb=$('div.crumb').first();
- var next=crumb.next('div.crumb');
- while($('div.controls').height()>40 && next.next('div.crumb').length>0){
- crumb.remove();
- crumb=next;
- next=crumb.next('div.crumb');
- }
- //still not enough, start shorting down the current folder name
- var crumb=$('div.crumb>a').last();
- while($('div.controls').height()>40 && crumb.text().length>6){
- var text=crumb.text()
- text=text.substr(0,text.length-6)+'...';
- crumb.text(text);
- }
-
- $(document).click(function(){
- $('#new>ul').hide();
- $('#new').removeClass('active');
- $('#new li').each(function(i,element){
- if($(element).children('p').length==0){
- $(element).children('form').remove();
- $(element).append('<p>'+$(element).data('text')+'</p>');
- }
- });
- });
- $('#new').click(function(event){
- event.stopPropagation();
- });
- $('#new>a').click(function(){
- $('#new>ul').toggle();
- $('#new').toggleClass('active');
- });
- $('#new li').click(function(){
- if($(this).children('p').length==0){
- return;
- }
-
- $('#new li').each(function(i,element){
- if($(element).children('p').length==0){
- $(element).children('form').remove();
- $(element).append('<p>'+$(element).data('text')+'</p>');
- }
- });
-
- var type=$(this).data('type');
- var text=$(this).children('p').text();
- $(this).data('text',text);
- $(this).children('p').remove();
- var form=$('<form></form>');
- var input=$('<input>');
- form.append(input);
- $(this).append(form);
- input.focus();
- form.submit(function(event){
- event.stopPropagation();
- event.preventDefault();
- var newname=input.val();
- if(type == 'web' && newname.length == 0) {
- OC.Notification.show(t('files', 'URL cannot be empty.'));
- return false;
- } else if (type != 'web' && !Files.isFileNameValid(newname)) {
- return false;
- } else if( type == 'folder' && $('#dir').val() == '/' && newname == 'Shared') {
- OC.Notification.show(t('files','Invalid folder name. Usage of \'Shared\' is reserved by Owncloud'));
- return false;
- }
- if (FileList.lastAction) {
- FileList.lastAction();
- }
- var name = getUniqueName(newname);
- if (newname != name) {
- FileList.checkName(name, newname, true);
- var hidden = true;
- } else {
- var hidden = false;
- }
- switch(type){
- case 'file':
- $.post(
- OC.filePath('files','ajax','newfile.php'),
- {dir:$('#dir').val(),filename:name},
- function(result){
- if (result.status == 'success') {
- var date=new Date();
- FileList.addFile(name,0,date,false,hidden);
- var tr=$('tr').filterAttr('data-file',name);
- tr.attr('data-mime',result.data.mime);
- tr.attr('data-id', result.data.id);
- getMimeIcon(result.data.mime,function(path){
- tr.find('td.filename').attr('style','background-image:url('+path+')');
- });
- } else {
- OC.dialogs.alert(result.data.message, t('core', 'Error'));
- }
- }
- );
- break;
- case 'folder':
- $.post(
- OC.filePath('files','ajax','newfolder.php'),
- {dir:$('#dir').val(),foldername:name},
- function(result){
- if (result.status == 'success') {
- var date=new Date();
- FileList.addDir(name,0,date,hidden);
- var tr=$('tr').filterAttr('data-file',name);
- tr.attr('data-id', result.data.id);
- } else {
- OC.dialogs.alert(result.data.message, t('core', 'Error'));
- }
- }
- );
- break;
- case 'web':
- if(name.substr(0,8)!='https://' && name.substr(0,7)!='http://'){
- name='http://'+name;
- }
- var localName=name;
- if(localName.substr(localName.length-1,1)=='/'){//strip /
- localName=localName.substr(0,localName.length-1)
- }
- if(localName.indexOf('/')){//use last part of url
- localName=localName.split('/').pop();
- }else{//or the domain
- localName=(localName.match(/:\/\/(.[^/]+)/)[1]).replace('www.','');
- }
- localName = getUniqueName(localName);
- //IE < 10 does not fire the necessary events for the progress bar.
- if($('html.lte9').length > 0) {
- } else {
- $('#uploadprogressbar').progressbar({value:0});
- $('#uploadprogressbar').fadeIn();
- }
-
- var eventSource=new OC.EventSource(OC.filePath('files','ajax','newfile.php'),{dir:$('#dir').val(),source:name,filename:localName});
- eventSource.listen('progress',function(progress){
- //IE < 10 does not fire the necessary events for the progress bar.
- if($('html.lte9').length > 0) {
- } else {
- $('#uploadprogressbar').progressbar('value',progress);
- }
- });
- eventSource.listen('success',function(data){
- var mime=data.mime;
- var size=data.size;
- var id=data.id;
- $('#uploadprogressbar').fadeOut();
- var date=new Date();
- FileList.addFile(localName,size,date,false,hidden);
- var tr=$('tr').filterAttr('data-file',localName);
- tr.data('mime',mime).data('id',id);
- tr.attr('data-id', id);
- getMimeIcon(mime,function(path){
- tr.find('td.filename').attr('style','background-image:url('+path+')');
- });
- });
- eventSource.listen('error',function(error){
- $('#uploadprogressbar').fadeOut();
- alert(error);
- });
- break;
- }
- var li=form.parent();
- form.remove();
- li.append('<p>'+li.data('text')+'</p>');
- $('#new>a').click();
- });
- });
-
//do a background scan if needed
scanFiles();
@@ -604,8 +428,9 @@ var createDragShadow = function(event){
if (elem.type === 'dir') {
newtr.find('td.filename').attr('style','background-image:url('+OC.imagePath('core', 'filetypes/folder.png')+')');
} else {
- getMimeIcon(elem.mime,function(path){
- newtr.find('td.filename').attr('style','background-image:url('+path+')');
+ var path = getPathForPreview(elem.name);
+ lazyLoadPreview(path, elem.mime, function(previewpath){
+ newtr.find('td.filename').attr('style','background-image:url('+previewpath+')');
});
}
});
@@ -727,21 +552,13 @@ function procesSelection(){
$('#headerSize').text(humanFileSize(totalSize));
var selection='';
if(selectedFolders.length>0){
- if(selectedFolders.length==1){
- selection+=t('files','1 folder');
- }else{
- selection+=t('files','{count} folders',{count: selectedFolders.length});
- }
+ selection += n('files', '%n folder', '%n folders', selectedFolders.length);
if(selectedFiles.length>0){
selection+=' & ';
}
}
if(selectedFiles.length>0){
- if(selectedFiles.length==1){
- selection+=t('files','1 file');
- }else{
- selection+=t('files','{count} files',{count: selectedFiles.length});
- }
+ selection += n('files', '%n file', '%n files', selectedFiles.length);
}
$('#headerName>span.name').text(selection);
$('#modified').text('');
@@ -789,6 +606,23 @@ function getMimeIcon(mime, ready){
}
getMimeIcon.cache={};
+function getPathForPreview(name) {
+ var path = $('#dir').val() + '/' + name;
+ return path;
+}
+
+function lazyLoadPreview(path, mime, ready) {
+ getMimeIcon(mime,ready);
+ var x = $('#filestable').data('preview-x');
+ var y = $('#filestable').data('preview-y');
+ var previewURL = OC.Router.generate('core_ajax_preview', {file: encodeURIComponent(path), x:x, y:y});
+ $.get(previewURL, function() {
+ previewURL = previewURL.replace('(','%28');
+ previewURL = previewURL.replace(')','%29');
+ ready(previewURL + '&reload=true');
+ });
+}
+
function getUniqueName(name){
if($('tr').filterAttr('data-file',name).length>0){
var parts=name.split('.');
@@ -820,4 +654,4 @@ function checkTrashStatus() {
$("input[type=button][id=trash]").removeAttr("disabled");
}
});
-} \ No newline at end of file
+}
diff --git a/apps/files/js/keyboardshortcuts.js b/apps/files/js/keyboardshortcuts.js
index cc2b5d42139..9d6c3ae8c33 100644
--- a/apps/files/js/keyboardshortcuts.js
+++ b/apps/files/js/keyboardshortcuts.js
@@ -131,7 +131,9 @@ var Files = Files || {};
return;
}
var preventDefault = false;
- if ($.inArray(event.keyCode, keys) === -1) keys.push(event.keyCode);
+ if ($.inArray(event.keyCode, keys) === -1) {
+ keys.push(event.keyCode);
+ }
if (
$.inArray(keyCodes.n, keys) !== -1 && ($.inArray(keyCodes.cmdFirefox, keys) !== -1 || $.inArray(keyCodes.cmdOpera, keys) !== -1 || $.inArray(keyCodes.leftCmdWebKit, keys) !== -1 || $.inArray(keyCodes.rightCmdWebKit, keys) !== -1 || $.inArray(keyCodes.ctrl, keys) !== -1 || event.ctrlKey)) {
preventDefault = true; //new file/folder prevent browser from responding
@@ -165,4 +167,4 @@ var Files = Files || {};
removeA(keys, event.keyCode);
});
};
-})(Files); \ No newline at end of file
+})(Files);
diff --git a/apps/files/l10n/ar.php b/apps/files/l10n/ar.php
index 878bb2eefb2..99eb409a369 100644
--- a/apps/files/l10n/ar.php
+++ b/apps/files/l10n/ar.php
@@ -2,6 +2,8 @@
$TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "فشل في نقل الملف %s - يوجد ملف بنفس هذا الاسم",
"Could not move %s" => "فشل في نقل %s",
+"Unable to set upload directory." => "غير قادر على تحميل المجلد",
+"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 ",
@@ -11,16 +13,18 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "المجلد المؤقت غير موجود",
"Failed to write to disk" => "خطأ في الكتابة على القرص الصلب",
"Not enough storage available" => "لا يوجد مساحة تخزينية كافية",
+"Upload failed" => "عملية الرفع فشلت",
"Invalid directory." => "مسار غير صحيح.",
"Files" => "الملفات",
"Unable to upload your file as it is a directory or has 0 bytes" => "فشل في رفع ملفاتك , إما أنها مجلد أو حجمها 0 بايت",
+"Not enough space available" => "لا توجد مساحة كافية",
"Upload cancelled." => "تم إلغاء عملية رفع الملفات .",
"File upload is in progress. Leaving the page now will cancel the upload." => "عملية رفع الملفات قيد التنفيذ. اغلاق الصفحة سوف يلغي عملية رفع الملفات.",
"URL cannot be empty." => "عنوان ال URL لا يجوز أن يكون فارغا.",
+"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "تسمية ملف غير صالحة. استخدام الاسم \"shared\" محجوز بواسطة ownCloud",
"Error" => "خطأ",
"Share" => "شارك",
"Delete permanently" => "حذف بشكل دائم",
-"Delete" => "إلغاء",
"Rename" => "إعادة تسميه",
"Pending" => "قيد الانتظار",
"{new_name} already exists" => "{new_name} موجود مسبقا",
@@ -29,22 +33,21 @@ $TRANSLATIONS = array(
"cancel" => "إلغاء",
"replaced {new_name} with {old_name}" => "استبدل {new_name} بـ {old_name}",
"undo" => "تراجع",
-"perform delete operation" => "جاري تنفيذ عملية الحذف",
-"1 file uploading" => "جاري رفع 1 ملف",
+"_%n folder_::_%n folders_" => array("","","","","",""),
+"_%n file_::_%n files_" => array("","","","","",""),
+"{dirs} and {files}" => "{dirs} و {files}",
+"_Uploading %n file_::_Uploading %n files_" => array("","","","","",""),
+"files uploading" => "يتم تحميل الملفات",
"'.' is an invalid file name." => "\".\" اسم ملف غير صحيح.",
"File name cannot be empty." => "اسم الملف لا يجوز أن يكون فارغا",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "اسم غير صحيح , الرموز '\\', '/', '<', '>', ':', '\"', '|', '?' و \"*\" غير مسموح استخدامها",
"Your storage is full, files can not be updated or synced anymore!" => "مساحتك التخزينية ممتلئة, لا يمكم تحديث ملفاتك أو مزامنتها بعد الآن !",
"Your storage is almost full ({usedSpacePercent}%)" => "مساحتك التخزينية امتلأت تقريبا ",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "تم تعطيل التشفير لكن ملفاتك لا تزال مشفرة. فضلا اذهب إلى الإعدادات الشخصية لإزالة التشفير عن ملفاتك.",
"Your download is being prepared. This might take some time if the files are big." => "جاري تجهيز عملية التحميل. قد تستغرق بعض الوقت اذا كان حجم الملفات كبير.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "إسم مجلد غير صحيح. استخدام مصطلح \"Shared\" محجوز للنظام",
"Name" => "اسم",
"Size" => "حجم",
"Modified" => "معدل",
-"1 folder" => "مجلد عدد 1",
-"{count} folders" => "{count} مجلدات",
-"1 file" => "ملف واحد",
-"{count} files" => "{count} ملفات",
"Upload" => "رفع",
"File handling" => "التعامل مع الملف",
"Maximum upload size" => "الحد الأقصى لحجم الملفات التي يمكن رفعها",
@@ -64,6 +67,7 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "لا يوجد شيء هنا. إرفع بعض الملفات!",
"Download" => "تحميل",
"Unshare" => "إلغاء مشاركة",
+"Delete" => "إلغاء",
"Upload too large" => "حجم الترفيع أعلى من المسموح",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "حجم الملفات التي تريد ترفيعها أعلى من المسموح على الخادم.",
"Files are being scanned, please wait." => "يرجى الانتظار , جاري فحص الملفات .",
diff --git a/apps/files/l10n/bg_BG.php b/apps/files/l10n/bg_BG.php
index 47f73206799..913875e863a 100644
--- a/apps/files/l10n/bg_BG.php
+++ b/apps/files/l10n/bg_BG.php
@@ -6,25 +6,24 @@ $TRANSLATIONS = array(
"No file was uploaded" => "Фахлът не бе качен",
"Missing a temporary folder" => "Липсва временна папка",
"Failed to write to disk" => "Възникна проблем при запис в диска",
+"Upload failed" => "Качването е неуспешно",
"Invalid directory." => "Невалидна директория.",
"Files" => "Файлове",
"Upload cancelled." => "Качването е спряно.",
"Error" => "Грешка",
"Share" => "Споделяне",
"Delete permanently" => "Изтриване завинаги",
-"Delete" => "Изтриване",
"Rename" => "Преименуване",
"Pending" => "Чакащо",
"replace" => "препокриване",
"cancel" => "отказ",
"undo" => "възтановяване",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
"Name" => "Име",
"Size" => "Размер",
"Modified" => "Променено",
-"1 folder" => "1 папка",
-"{count} folders" => "{count} папки",
-"1 file" => "1 файл",
-"{count} files" => "{count} файла",
"Upload" => "Качване",
"Maximum upload size" => "Максимален размер за качване",
"0 is unlimited" => "Ползвайте 0 за без ограничения",
@@ -35,9 +34,9 @@ $TRANSLATIONS = array(
"Cancel upload" => "Спри качването",
"Nothing in here. Upload something!" => "Няма нищо тук. Качете нещо.",
"Download" => "Изтегляне",
+"Delete" => "Изтриване",
"Upload too large" => "Файлът който сте избрали за качване е прекалено голям",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Файловете които се опитвате да качите са по-големи от позволеното за сървъра.",
-"Files are being scanned, please wait." => "Файловете се претърсват, изчакайте.",
-"file" => "файл"
+"Files are being scanned, please wait." => "Файловете се претърсват, изчакайте."
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/bn_BD.php b/apps/files/l10n/bn_BD.php
index 288b1477bfb..2265c232a14 100644
--- a/apps/files/l10n/bn_BD.php
+++ b/apps/files/l10n/bn_BD.php
@@ -19,7 +19,6 @@ $TRANSLATIONS = array(
"URL cannot be empty." => "URL ফাঁকা রাখা যাবে না।",
"Error" => "সমস্যা",
"Share" => "ভাগাভাগি কর",
-"Delete" => "মুছে",
"Rename" => "পূনঃনামকরণ",
"Pending" => "মুলতুবি",
"{new_name} already exists" => "{new_name} টি বিদ্যমান",
@@ -28,18 +27,15 @@ $TRANSLATIONS = array(
"cancel" => "বাতিল",
"replaced {new_name} with {old_name}" => "{new_name} কে {old_name} নামে প্রতিস্থাপন করা হয়েছে",
"undo" => "ক্রিয়া প্রত্যাহার",
-"1 file uploading" => "১টি ফাইল আপলোড করা হচ্ছে",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
"'.' is an invalid file name." => "টি একটি অননুমোদিত নাম।",
"File name cannot be empty." => "ফাইলের নামটি ফাঁকা রাখা যাবে না।",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "নামটি সঠিক নয়, '\\', '/', '<', '>', ':', '\"', '|', '?' এবং '*' অনুমোদিত নয়।",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "ফোল্ডারের নামটি সঠিক নয়। 'ভাগাভাগি করা' শুধুমাত্র Owncloud এর জন্য সংরক্ষিত।",
"Name" => "রাম",
"Size" => "আকার",
"Modified" => "পরিবর্তিত",
-"1 folder" => "১টি ফোল্ডার",
-"{count} folders" => "{count} টি ফোল্ডার",
-"1 file" => "১টি ফাইল",
-"{count} files" => "{count} টি ফাইল",
"Upload" => "আপলোড",
"File handling" => "ফাইল হ্যার্ডলিং",
"Maximum upload size" => "আপলোডের সর্বোচ্চ আকার",
@@ -57,6 +53,7 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "এখানে কিছুই নেই। কিছু আপলোড করুন !",
"Download" => "ডাউনলোড",
"Unshare" => "ভাগাভাগি বাতিল ",
+"Delete" => "মুছে",
"Upload too large" => "আপলোডের আকারটি অনেক বড়",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "আপনি এই সার্ভারে আপলোড করার জন্য অনুমোদিত ফাইলের সর্বোচ্চ আকারের চেয়ে বৃহদাকার ফাইল আপলোড করার চেষ্টা করছেন ",
"Files are being scanned, please wait." => "ফাইলগুলো স্ক্যান করা হচ্ছে, দয়া করে অপেক্ষা করুন।",
diff --git a/apps/files/l10n/ca.php b/apps/files/l10n/ca.php
index 8d8469fbea4..648ffce79d6 100644
--- a/apps/files/l10n/ca.php
+++ b/apps/files/l10n/ca.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Falta un fitxer temporal",
"Failed to write to disk" => "Ha fallat en escriure al disc",
"Not enough storage available" => "No hi ha prou espai disponible",
+"Upload failed" => "La pujada ha fallat",
"Invalid directory." => "Directori no vàlid.",
"Files" => "Fitxers",
"Unable to upload your file as it is a directory or has 0 bytes" => "No es pot pujar el fitxer perquè és una carpeta o té 0 bytes",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Error",
"Share" => "Comparteix",
"Delete permanently" => "Esborra permanentment",
-"Delete" => "Esborra",
"Rename" => "Reanomena",
"Pending" => "Pendent",
"{new_name} already exists" => "{new_name} ja existeix",
@@ -33,23 +33,20 @@ $TRANSLATIONS = array(
"cancel" => "cancel·la",
"replaced {new_name} with {old_name}" => "s'ha substituït {old_name} per {new_name}",
"undo" => "desfés",
-"perform delete operation" => "executa d'operació d'esborrar",
-"1 file uploading" => "1 fitxer pujant",
+"_%n folder_::_%n folders_" => array("%n carpeta","%n carpetes"),
+"_%n file_::_%n files_" => array("%n fitxer","%n fitxers"),
+"_Uploading %n file_::_Uploading %n files_" => array("Pujant %n fitxer","Pujant %n fitxers"),
"files uploading" => "fitxers pujant",
"'.' is an invalid file name." => "'.' és un nom no vàlid per un fitxer.",
"File name cannot be empty." => "El nom del fitxer no pot ser buit.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "El nóm no és vàlid, '\\', '/', '<', '>', ':', '\"', '|', '?' i '*' no estan permesos.",
"Your storage is full, files can not be updated or synced anymore!" => "El vostre espai d'emmagatzemament és ple, els fitxers ja no es poden actualitzar o sincronitzar!",
"Your storage is almost full ({usedSpacePercent}%)" => "El vostre espai d'emmagatzemament és gairebé ple ({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "L'encriptació s'ha desactivat però els vostres fitxers segueixen encriptats. Aneu a la vostra configuració personal per desencriptar els vostres fitxers.",
"Your download is being prepared. This might take some time if the files are big." => "S'està preparant la baixada. Pot trigar una estona si els fitxers són grans.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nom de carpeta no vàlid. L'ús de 'Shared' està reservat per Owncloud",
"Name" => "Nom",
"Size" => "Mida",
"Modified" => "Modificat",
-"1 folder" => "1 carpeta",
-"{count} folders" => "{count} carpetes",
-"1 file" => "1 fitxer",
-"{count} files" => "{count} fitxers",
"%s could not be renamed" => "%s no es pot canviar el nom",
"Upload" => "Puja",
"File handling" => "Gestió de fitxers",
@@ -70,14 +67,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Res per aquí. Pugeu alguna cosa!",
"Download" => "Baixa",
"Unshare" => "Deixa de compartir",
+"Delete" => "Esborra",
"Upload too large" => "La pujada és massa gran",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Els fitxers que esteu intentant pujar excedeixen la mida màxima de pujada del servidor",
"Files are being scanned, please wait." => "S'estan escanejant els fitxers, espereu",
"Current scanning" => "Actualment escanejant",
-"directory" => "directori",
-"directories" => "directoris",
-"file" => "fitxer",
-"files" => "fitxers",
"Upgrading filesystem cache..." => "Actualitzant la memòria de cau del sistema de fitxers..."
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/cs_CZ.php b/apps/files/l10n/cs_CZ.php
index ba94b9c5acc..691cc92f1ad 100644
--- a/apps/files/l10n/cs_CZ.php
+++ b/apps/files/l10n/cs_CZ.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Chybí adresář pro dočasné soubory",
"Failed to write to disk" => "Zápis na disk selhal",
"Not enough storage available" => "Nedostatek dostupného úložného prostoru",
+"Upload failed" => "Odesílání selhalo",
"Invalid directory." => "Neplatný adresář",
"Files" => "Soubory",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nelze odeslat Váš soubor, protože je to adresář nebo jeho velikost je 0 bajtů",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Chyba",
"Share" => "Sdílet",
"Delete permanently" => "Trvale odstranit",
-"Delete" => "Smazat",
"Rename" => "Přejmenovat",
"Pending" => "Nevyřízené",
"{new_name} already exists" => "{new_name} již existuje",
@@ -33,23 +33,21 @@ $TRANSLATIONS = array(
"cancel" => "zrušit",
"replaced {new_name} with {old_name}" => "nahrazeno {new_name} s {old_name}",
"undo" => "vrátit zpět",
-"perform delete operation" => "provést smazání",
-"1 file uploading" => "odesílá se 1 soubor",
+"_%n folder_::_%n folders_" => array("%n složka","%n složky","%n složek"),
+"_%n file_::_%n files_" => array("%n soubor","%n soubory","%n souborů"),
+"{dirs} and {files}" => "{dirs} a {files}",
+"_Uploading %n file_::_Uploading %n files_" => array("Nahrávám %n soubor","Nahrávám %n soubory","Nahrávám %n souborů"),
"files uploading" => "soubory se odesílají",
"'.' is an invalid file name." => "'.' je neplatným názvem souboru.",
"File name cannot be empty." => "Název souboru nemůže být prázdný řetězec.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Neplatný název, znaky '\\', '/', '<', '>', ':', '\"', '|', '?' a '*' nejsou povoleny.",
"Your storage is full, files can not be updated or synced anymore!" => "Vaše úložiště je plné, nelze aktualizovat ani synchronizovat soubory.",
"Your storage is almost full ({usedSpacePercent}%)" => "Vaše úložiště je téměř plné ({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Šifrování bylo vypnuto, vaše soubory jsou však stále zašifrované. Běžte prosím do osobního nastavení, kde soubory odšifrujete.",
"Your download is being prepared. This might take some time if the files are big." => "Vaše soubory ke stažení se připravují. Pokud jsou velké, může to chvíli trvat.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Neplatný název složky. Pojmenování 'Shared' je rezervováno pro vnitřní potřeby ownCloud",
"Name" => "Název",
"Size" => "Velikost",
"Modified" => "Upraveno",
-"1 folder" => "1 složka",
-"{count} folders" => "{count} složek",
-"1 file" => "1 soubor",
-"{count} files" => "{count} souborů",
"%s could not be renamed" => "%s nemůže být přejmenován",
"Upload" => "Odeslat",
"File handling" => "Zacházení se soubory",
@@ -70,14 +68,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Žádný obsah. Nahrajte něco.",
"Download" => "Stáhnout",
"Unshare" => "Zrušit sdílení",
+"Delete" => "Smazat",
"Upload too large" => "Odesílaný soubor je příliš velký",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Soubory, které se snažíte odeslat, překračují limit velikosti odesílání na tomto serveru.",
"Files are being scanned, please wait." => "Soubory se prohledávají, prosím čekejte.",
"Current scanning" => "Aktuální prohledávání",
-"directory" => "adresář",
-"directories" => "adresáře",
-"file" => "soubor",
-"files" => "soubory",
"Upgrading filesystem cache..." => "Aktualizuji mezipaměť souborového systému..."
);
$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/apps/files/l10n/cy_GB.php b/apps/files/l10n/cy_GB.php
index dc50b9cc3f5..157f4f89a23 100644
--- a/apps/files/l10n/cy_GB.php
+++ b/apps/files/l10n/cy_GB.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Plygell dros dro yn eisiau",
"Failed to write to disk" => "Methwyd ysgrifennu i'r ddisg",
"Not enough storage available" => "Dim digon o le storio ar gael",
+"Upload failed" => "Methwyd llwytho i fyny",
"Invalid directory." => "Cyfeiriadur annilys.",
"Files" => "Ffeiliau",
"Unable to upload your file as it is a directory or has 0 bytes" => "Methu llwytho'ch ffeil i fyny gan ei fod yn gyferiadur neu'n cynnwys 0 beit",
@@ -21,7 +22,6 @@ $TRANSLATIONS = array(
"Error" => "Gwall",
"Share" => "Rhannu",
"Delete permanently" => "Dileu'n barhaol",
-"Delete" => "Dileu",
"Rename" => "Ailenwi",
"Pending" => "I ddod",
"{new_name} already exists" => "{new_name} yn bodoli'n barod",
@@ -30,8 +30,9 @@ $TRANSLATIONS = array(
"cancel" => "diddymu",
"replaced {new_name} with {old_name}" => "newidiwyd {new_name} yn lle {old_name}",
"undo" => "dadwneud",
-"perform delete operation" => "cyflawni gweithred dileu",
-"1 file uploading" => "1 ffeil yn llwytho i fyny",
+"_%n folder_::_%n folders_" => array("","","",""),
+"_%n file_::_%n files_" => array("","","",""),
+"_Uploading %n file_::_Uploading %n files_" => array("","","",""),
"files uploading" => "ffeiliau'n llwytho i fyny",
"'.' is an invalid file name." => "Mae '.' yn enw ffeil annilys.",
"File name cannot be empty." => "Does dim hawl cael enw ffeil gwag.",
@@ -39,14 +40,9 @@ $TRANSLATIONS = array(
"Your storage is full, files can not be updated or synced anymore!" => "Mae eich storfa'n llawn, ni ellir diweddaru a chydweddu ffeiliau mwyach!",
"Your storage is almost full ({usedSpacePercent}%)" => "Mae eich storfa bron a bod yn llawn ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "Wrthi'n paratoi i lwytho i lawr. Gall gymryd peth amser os yw'r ffeiliau'n fawr.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Enw plygell annilys. Mae'r defnydd o 'Shared' yn cael ei gadw gan Owncloud",
"Name" => "Enw",
"Size" => "Maint",
"Modified" => "Addaswyd",
-"1 folder" => "1 blygell",
-"{count} folders" => "{count} plygell",
-"1 file" => "1 ffeil",
-"{count} files" => "{count} ffeil",
"Upload" => "Llwytho i fyny",
"File handling" => "Trafod ffeiliau",
"Maximum upload size" => "Maint mwyaf llwytho i fyny",
@@ -66,6 +62,7 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Does dim byd fan hyn. Llwythwch rhywbeth i fyny!",
"Download" => "Llwytho i lawr",
"Unshare" => "Dad-rannu",
+"Delete" => "Dileu",
"Upload too large" => "Maint llwytho i fyny'n rhy fawr",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Mae'r ffeiliau rydych yn ceisio llwytho i fyny'n fwy na maint mwyaf llwytho ffeiliau i fyny ar y gweinydd hwn.",
"Files are being scanned, please wait." => "Arhoswch, mae ffeiliau'n cael eu sganio.",
diff --git a/apps/files/l10n/da.php b/apps/files/l10n/da.php
index f066b702b3f..aab12986ec1 100644
--- a/apps/files/l10n/da.php
+++ b/apps/files/l10n/da.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Manglende midlertidig mappe.",
"Failed to write to disk" => "Fejl ved skrivning til disk.",
"Not enough storage available" => "Der er ikke nok plads til rådlighed",
+"Upload failed" => "Upload fejlede",
"Invalid directory." => "Ugyldig mappe.",
"Files" => "Filer",
"Unable to upload your file as it is a directory or has 0 bytes" => "Kan ikke uploade din fil - det er enten en mappe eller en fil med et indhold på 0 bytes.",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Fejl",
"Share" => "Del",
"Delete permanently" => "Slet permanent",
-"Delete" => "Slet",
"Rename" => "Omdøb",
"Pending" => "Afventer",
"{new_name} already exists" => "{new_name} eksisterer allerede",
@@ -33,30 +33,28 @@ $TRANSLATIONS = array(
"cancel" => "fortryd",
"replaced {new_name} with {old_name}" => "erstattede {new_name} med {old_name}",
"undo" => "fortryd",
-"perform delete operation" => "udfør slet operation",
-"1 file uploading" => "1 fil uploades",
+"_%n folder_::_%n folders_" => array("%n mappe","%n mapper"),
+"_%n file_::_%n files_" => array("%n fil","%n filer"),
+"{dirs} and {files}" => "{dirs} og {files}",
+"_Uploading %n file_::_Uploading %n files_" => array("Uploader %n fil","Uploader %n filer"),
"files uploading" => "uploader filer",
"'.' is an invalid file name." => "'.' er et ugyldigt filnavn.",
"File name cannot be empty." => "Filnavnet kan ikke stå tomt.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ugyldigt navn, '\\', '/', '<', '>', ':' | '?', '\"', '', og '*' er ikke tilladt.",
"Your storage is full, files can not be updated or synced anymore!" => "Din opbevaringsplads er fyldt op, filer kan ikke opdateres eller synkroniseres længere!",
"Your storage is almost full ({usedSpacePercent}%)" => "Din opbevaringsplads er næsten fyldt op ({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Krypteringen blev deaktiveret, men dine filer er stadig krypteret. Gå venligst til dine personlige indstillinger for at dekryptere dine filer. ",
"Your download is being prepared. This might take some time if the files are big." => "Dit download forberedes. Dette kan tage lidt tid ved større filer.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ugyldigt mappenavn. Brug af \"Shared\" er forbeholdt Owncloud",
"Name" => "Navn",
"Size" => "Størrelse",
"Modified" => "Ændret",
-"1 folder" => "1 mappe",
-"{count} folders" => "{count} mapper",
-"1 file" => "1 fil",
-"{count} files" => "{count} filer",
"%s could not be renamed" => "%s kunne ikke omdøbes",
"Upload" => "Upload",
"File handling" => "Filhåndtering",
"Maximum upload size" => "Maksimal upload-størrelse",
"max. possible: " => "max. mulige: ",
"Needed for multi-file and folder downloads." => "Nødvendigt for at kunne downloade mapper og flere filer ad gangen.",
-"Enable ZIP-download" => "Muliggør ZIP-download",
+"Enable ZIP-download" => "Tillad ZIP-download",
"0 is unlimited" => "0 er ubegrænset",
"Maximum input size for ZIP files" => "Maksimal størrelse på ZIP filer",
"Save" => "Gem",
@@ -70,14 +68,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Her er tomt. Upload noget!",
"Download" => "Download",
"Unshare" => "Fjern deling",
+"Delete" => "Slet",
"Upload too large" => "Upload er for stor",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filerne, du prøver at uploade, er større end den maksimale størrelse for fil-upload på denne server.",
"Files are being scanned, please wait." => "Filerne bliver indlæst, vent venligst.",
"Current scanning" => "Indlæser",
-"directory" => "mappe",
-"directories" => "Mapper",
-"file" => "fil",
-"files" => "filer",
"Upgrading filesystem cache..." => "Opgraderer filsystems cachen..."
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/de.php b/apps/files/l10n/de.php
index c89294bc092..947d4f07461 100644
--- a/apps/files/l10n/de.php
+++ b/apps/files/l10n/de.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Kein temporärer Ordner vorhanden",
"Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte",
"Not enough storage available" => "Nicht genug Speicher vorhanden.",
+"Upload failed" => "Hochladen fehlgeschlagen",
"Invalid directory." => "Ungültiges Verzeichnis.",
"Files" => "Dateien",
"Unable to upload your file as it is a directory or has 0 bytes" => "Deine Datei kann nicht hochgeladen werden, weil es sich um einen Ordner handelt oder 0 Bytes groß ist.",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Fehler",
"Share" => "Teilen",
"Delete permanently" => "Endgültig löschen",
-"Delete" => "Löschen",
"Rename" => "Umbenennen",
"Pending" => "Ausstehend",
"{new_name} already exists" => "{new_name} existiert bereits",
@@ -33,23 +33,21 @@ $TRANSLATIONS = array(
"cancel" => "abbrechen",
"replaced {new_name} with {old_name}" => "{old_name} ersetzt durch {new_name}",
"undo" => "rückgängig machen",
-"perform delete operation" => "Löschvorgang ausführen",
-"1 file uploading" => "1 Datei wird hochgeladen",
+"_%n folder_::_%n folders_" => array("%n Ordner","%n Ordner"),
+"_%n file_::_%n files_" => array("%n Datei","%n Dateien"),
+"{dirs} and {files}" => "{dirs} und {files}",
+"_Uploading %n file_::_Uploading %n files_" => array("%n Datei wird hochgeladen","%n Dateien werden hochgeladen"),
"files uploading" => "Dateien werden hoch geladen",
"'.' is an invalid file name." => "'.' ist kein gültiger Dateiname.",
"File name cannot be empty." => "Der Dateiname darf nicht leer sein.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ungültiger Name, '\\', '/', '<', '>', ':', '\"', '|', '?' und '*' sind nicht zulässig.",
"Your storage is full, files can not be updated or synced anymore!" => "Dein Speicher ist voll, daher können keine Dateien mehr aktualisiert oder synchronisiert werden!",
"Your storage is almost full ({usedSpacePercent}%)" => "Dein Speicher ist fast voll ({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Die Verschlüsselung wurde deaktiviert, jedoch sind deine Dateien nach wie vor verschlüsselt. Bitte gehe zu deinen persönlichen Einstellungen, um deine Dateien zu entschlüsseln.",
"Your download is being prepared. This might take some time if the files are big." => "Dein Download wird vorbereitet. Dies kann bei größeren Dateien etwas dauern.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ungültiger Verzeichnisname. Die Nutzung von \"Shared\" ist ownCloud vorbehalten.",
"Name" => "Name",
"Size" => "Größe",
"Modified" => "Geändert",
-"1 folder" => "1 Ordner",
-"{count} folders" => "{count} Ordner",
-"1 file" => "1 Datei",
-"{count} files" => "{count} Dateien",
"%s could not be renamed" => "%s konnte nicht umbenannt werden",
"Upload" => "Hochladen",
"File handling" => "Dateibehandlung",
@@ -70,14 +68,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Alles leer. Lade etwas hoch!",
"Download" => "Herunterladen",
"Unshare" => "Freigabe aufheben",
+"Delete" => "Löschen",
"Upload too large" => "Der Upload ist zu groß",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server.",
"Files are being scanned, please wait." => "Dateien werden gescannt, bitte warten.",
"Current scanning" => "Scanne",
-"directory" => "Verzeichnis",
-"directories" => "Verzeichnisse",
-"file" => "Datei",
-"files" => "Dateien",
"Upgrading filesystem cache..." => "Dateisystem-Cache wird aktualisiert ..."
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/de_DE.php b/apps/files/l10n/de_DE.php
index 6a4cbcef069..db07ed7fadd 100644
--- a/apps/files/l10n/de_DE.php
+++ b/apps/files/l10n/de_DE.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Kein temporärer Ordner vorhanden",
"Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte",
"Not enough storage available" => "Nicht genug Speicher vorhanden.",
+"Upload failed" => "Hochladen fehlgeschlagen",
"Invalid directory." => "Ungültiges Verzeichnis.",
"Files" => "Dateien",
"Unable to upload your file as it is a directory or has 0 bytes" => "Ihre Datei kann nicht hochgeladen werden, weil es sich um einen Ordner handelt oder 0 Bytes groß ist.",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Fehler",
"Share" => "Teilen",
"Delete permanently" => "Endgültig löschen",
-"Delete" => "Löschen",
"Rename" => "Umbenennen",
"Pending" => "Ausstehend",
"{new_name} already exists" => "{new_name} existiert bereits",
@@ -33,23 +33,21 @@ $TRANSLATIONS = array(
"cancel" => "abbrechen",
"replaced {new_name} with {old_name}" => "{old_name} wurde ersetzt durch {new_name}",
"undo" => "rückgängig machen",
-"perform delete operation" => "Löschvorgang ausführen",
-"1 file uploading" => "1 Datei wird hochgeladen",
+"_%n folder_::_%n folders_" => array("%n Ordner","%n Ordner"),
+"_%n file_::_%n files_" => array("%n Datei","%n Dateien"),
+"{dirs} and {files}" => "{dirs} und {files}",
+"_Uploading %n file_::_Uploading %n files_" => array("%n Datei wird hoch geladen","%n Dateien werden hoch geladen"),
"files uploading" => "Dateien werden hoch geladen",
"'.' is an invalid file name." => "'.' ist kein gültiger Dateiname.",
"File name cannot be empty." => "Der Dateiname darf nicht leer sein.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ungültiger Name, '\\', '/', '<', '>', ':', '\"', '|', '?' und '*' sind nicht zulässig.",
"Your storage is full, files can not be updated or synced anymore!" => "Ihr Speicher ist voll, daher können keine Dateien mehr aktualisiert oder synchronisiert werden!",
"Your storage is almost full ({usedSpacePercent}%)" => "Ihr Speicher ist fast voll ({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Die Verschlüsselung wurde deaktiviert, jedoch sind Ihre Dateien nach wie vor verschlüsselt. Bitte gehen Sie zu Ihren persönlichen Einstellungen, um Ihre Dateien zu entschlüsseln.",
"Your download is being prepared. This might take some time if the files are big." => "Ihr Download wird vorbereitet. Dies kann bei größeren Dateien etwas dauern.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ungültiger Verzeichnisname. Die Nutzung von \"Shared\" ist ownCloud vorbehalten",
"Name" => "Name",
"Size" => "Größe",
"Modified" => "Geändert",
-"1 folder" => "1 Ordner",
-"{count} folders" => "{count} Ordner",
-"1 file" => "1 Datei",
-"{count} files" => "{count} Dateien",
"%s could not be renamed" => "%s konnte nicht umbenannt werden",
"Upload" => "Hochladen",
"File handling" => "Dateibehandlung",
@@ -70,14 +68,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Alles leer. Laden Sie etwas hoch!",
"Download" => "Herunterladen",
"Unshare" => "Freigabe aufheben",
+"Delete" => "Löschen",
"Upload too large" => "Der Upload ist zu groß",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server.",
"Files are being scanned, please wait." => "Dateien werden gescannt, bitte warten.",
"Current scanning" => "Scanne",
-"directory" => "Verzeichnis",
-"directories" => "Verzeichnisse",
-"file" => "Datei",
-"files" => "Dateien",
"Upgrading filesystem cache..." => "Dateisystem-Cache wird aktualisiert ..."
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/el.php b/apps/files/l10n/el.php
index 0246ba2a89d..8c89e5e1feb 100644
--- a/apps/files/l10n/el.php
+++ b/apps/files/l10n/el.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Λείπει ο προσωρινός φάκελος",
"Failed to write to disk" => "Αποτυχία εγγραφής στο δίσκο",
"Not enough storage available" => "Μη επαρκής διαθέσιμος αποθηκευτικός χώρος",
+"Upload failed" => "Η μεταφόρτωση απέτυχε",
"Invalid directory." => "Μη έγκυρος φάκελος.",
"Files" => "Αρχεία",
"Unable to upload your file as it is a directory or has 0 bytes" => "Αδυναμία στην αποστολή του αρχείου σας αφού είναι φάκελος ή έχει 0 bytes",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Σφάλμα",
"Share" => "Διαμοιρασμός",
"Delete permanently" => "Μόνιμη διαγραφή",
-"Delete" => "Διαγραφή",
"Rename" => "Μετονομασία",
"Pending" => "Εκκρεμεί",
"{new_name} already exists" => "{new_name} υπάρχει ήδη",
@@ -33,23 +33,20 @@ $TRANSLATIONS = array(
"cancel" => "ακύρωση",
"replaced {new_name} with {old_name}" => "αντικαταστάθηκε το {new_name} με {old_name}",
"undo" => "αναίρεση",
-"perform delete operation" => "εκτέλεση της διαδικασίας διαγραφής",
-"1 file uploading" => "1 αρχείο ανεβαίνει",
+"_%n folder_::_%n folders_" => array("%n φάκελος","%n φάκελοι"),
+"_%n file_::_%n files_" => array("%n αρχείο","%n αρχεία"),
+"_Uploading %n file_::_Uploading %n files_" => array("Ανέβασμα %n αρχείου","Ανέβασμα %n αρχείων"),
"files uploading" => "αρχεία ανεβαίνουν",
"'.' is an invalid file name." => "'.' είναι μη έγκυρο όνομα αρχείου.",
"File name cannot be empty." => "Το όνομα αρχείου δεν μπορεί να είναι κενό.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Μη έγκυρο όνομα, '\\', '/', '<', '>', ':', '\"', '|', '?' και '*' δεν επιτρέπονται.",
"Your storage is full, files can not be updated or synced anymore!" => "Ο αποθηκευτικός σας χώρος είναι γεμάτος, τα αρχεία δεν μπορούν να ενημερωθούν ή να συγχρονιστούν πια!",
"Your storage is almost full ({usedSpacePercent}%)" => "Ο αποθηκευτικός χώρος είναι σχεδόν γεμάτος ({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Η κρυπτογράφηση απενεργοποιήθηκε, αλλά τα αρχεία σας είναι ακόμα κρυπτογραφημένα. Παρακαλούμε απενεργοποιήσετε την κρυπτογράφηση αρχείων από τις προσωπικές σας ρυθμίσεις",
"Your download is being prepared. This might take some time if the files are big." => "Η λήψη προετοιμάζεται. Αυτό μπορεί να πάρει ώρα εάν τα αρχεία έχουν μεγάλο μέγεθος.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Μη έγκυρο όνομα φακέλου. Η χρήση του 'Κοινόχρηστος' χρησιμοποιείται από ο Owncloud",
"Name" => "Όνομα",
"Size" => "Μέγεθος",
"Modified" => "Τροποποιήθηκε",
-"1 folder" => "1 φάκελος",
-"{count} folders" => "{count} φάκελοι",
-"1 file" => "1 αρχείο",
-"{count} files" => "{count} αρχεία",
"%s could not be renamed" => "Αδυναμία μετονομασίας του %s",
"Upload" => "Μεταφόρτωση",
"File handling" => "Διαχείριση αρχείων",
@@ -70,14 +67,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Δεν υπάρχει τίποτα εδώ. Ανεβάστε κάτι!",
"Download" => "Λήψη",
"Unshare" => "Σταμάτημα διαμοιρασμού",
+"Delete" => "Διαγραφή",
"Upload too large" => "Πολύ μεγάλο αρχείο προς αποστολή",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Τα αρχεία που προσπαθείτε να ανεβάσετε υπερβαίνουν το μέγιστο μέγεθος αποστολής αρχείων σε αυτόν τον διακομιστή.",
"Files are being scanned, please wait." => "Τα αρχεία σαρώνονται, παρακαλώ περιμένετε.",
"Current scanning" => "Τρέχουσα ανίχνευση",
-"directory" => "κατάλογος",
-"directories" => "κατάλογοι",
-"file" => "αρχείο",
-"files" => "αρχεία",
"Upgrading filesystem cache..." => "Ενημέρωση της μνήμης cache του συστήματος αρχείων..."
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/en@pirate.php b/apps/files/l10n/en@pirate.php
index 339f94ae973..128f527aef1 100644
--- a/apps/files/l10n/en@pirate.php
+++ b/apps/files/l10n/en@pirate.php
@@ -1,5 +1,8 @@
<?php
$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
"Download" => "Download"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/eo.php b/apps/files/l10n/eo.php
index 726abb13343..ad538f2f2a9 100644
--- a/apps/files/l10n/eo.php
+++ b/apps/files/l10n/eo.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Mankas provizora dosierujo.",
"Failed to write to disk" => "Malsukcesis skribo al disko",
"Not enough storage available" => "Ne haveblas sufiĉa memoro",
+"Upload failed" => "Alŝuto malsukcesis",
"Invalid directory." => "Nevalida dosierujo.",
"Files" => "Dosieroj",
"Unable to upload your file as it is a directory or has 0 bytes" => "Ne eblis alŝuti vian dosieron ĉar ĝi estas dosierujo aŭ havas 0 duumokojn",
@@ -22,7 +23,6 @@ $TRANSLATIONS = array(
"Error" => "Eraro",
"Share" => "Kunhavigi",
"Delete permanently" => "Forigi por ĉiam",
-"Delete" => "Forigi",
"Rename" => "Alinomigi",
"Pending" => "Traktotaj",
"{new_name} already exists" => "{new_name} jam ekzistas",
@@ -31,8 +31,9 @@ $TRANSLATIONS = array(
"cancel" => "nuligi",
"replaced {new_name} with {old_name}" => "anstataŭiĝis {new_name} per {old_name}",
"undo" => "malfari",
-"perform delete operation" => "plenumi forigan operacion",
-"1 file uploading" => "1 dosiero estas alŝutata",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
"files uploading" => "dosieroj estas alŝutataj",
"'.' is an invalid file name." => "'.' ne estas valida dosiernomo.",
"File name cannot be empty." => "Dosiernomo devas ne malpleni.",
@@ -40,14 +41,9 @@ $TRANSLATIONS = array(
"Your storage is full, files can not be updated or synced anymore!" => "Via memoro plenas, ne plu eblas ĝisdatigi aŭ sinkronigi dosierojn!",
"Your storage is almost full ({usedSpacePercent}%)" => "Via memoro preskaŭ plenas ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "Via elŝuto pretiĝatas. Ĉi tio povas daŭri iom da tempo se la dosieroj grandas.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nevalida dosierujnomo. Uzo de “Shared” rezervatas de Owncloud.",
"Name" => "Nomo",
"Size" => "Grando",
"Modified" => "Modifita",
-"1 folder" => "1 dosierujo",
-"{count} folders" => "{count} dosierujoj",
-"1 file" => "1 dosiero",
-"{count} files" => "{count} dosierujoj",
"Upload" => "Alŝuti",
"File handling" => "Dosieradministro",
"Maximum upload size" => "Maksimuma alŝutogrando",
@@ -67,12 +63,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Nenio estas ĉi tie. Alŝutu ion!",
"Download" => "Elŝuti",
"Unshare" => "Malkunhavigi",
+"Delete" => "Forigi",
"Upload too large" => "Alŝuto tro larĝa",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "La dosieroj, kiujn vi provas alŝuti, transpasas la maksimuman grandon por dosieralŝutoj en ĉi tiu servilo.",
"Files are being scanned, please wait." => "Dosieroj estas skanataj, bonvolu atendi.",
"Current scanning" => "Nuna skano",
-"file" => "dosiero",
-"files" => "dosieroj",
"Upgrading filesystem cache..." => "Ĝisdatiĝas dosiersistema kaŝmemoro..."
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/es.php b/apps/files/l10n/es.php
index 407a783a85e..7a5785577af 100644
--- a/apps/files/l10n/es.php
+++ b/apps/files/l10n/es.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Falta la carpeta temporal",
"Failed to write to disk" => "Falló al escribir al disco",
"Not enough storage available" => "No hay suficiente espacio disponible",
+"Upload failed" => "Error en la subida",
"Invalid directory." => "Directorio inválido.",
"Files" => "Archivos",
"Unable to upload your file as it is a directory or has 0 bytes" => "Incapaz de subir su archivo, es un directorio o tiene 0 bytes",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Error",
"Share" => "Compartir",
"Delete permanently" => "Eliminar permanentemente",
-"Delete" => "Eliminar",
"Rename" => "Renombrar",
"Pending" => "Pendiente",
"{new_name} already exists" => "{new_name} ya existe",
@@ -33,8 +33,9 @@ $TRANSLATIONS = array(
"cancel" => "cancelar",
"replaced {new_name} with {old_name}" => "reemplazado {new_name} con {old_name}",
"undo" => "deshacer",
-"perform delete operation" => "Realizar operación de borrado",
-"1 file uploading" => "subiendo 1 archivo",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
"files uploading" => "subiendo archivos",
"'.' is an invalid file name." => "'.' no es un nombre de archivo válido.",
"File name cannot be empty." => "El nombre de archivo no puede estar vacío.",
@@ -42,14 +43,9 @@ $TRANSLATIONS = array(
"Your storage is full, files can not be updated or synced anymore!" => "Su almacenamiento está lleno, ¡no se pueden actualizar o sincronizar más!",
"Your storage is almost full ({usedSpacePercent}%)" => "Su almacenamiento está casi lleno ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "Su descarga está siendo preparada. Esto puede tardar algún tiempo si los archivos son grandes.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nombre de carpeta no es válido. El uso de \"Shared\" está reservado por Owncloud",
"Name" => "Nombre",
"Size" => "Tamaño",
"Modified" => "Modificado",
-"1 folder" => "1 carpeta",
-"{count} folders" => "{count} carpetas",
-"1 file" => "1 archivo",
-"{count} files" => "{count} archivos",
"%s could not be renamed" => "%s no se pudo renombrar",
"Upload" => "Subir",
"File handling" => "Manejo de archivos",
@@ -70,14 +66,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "No hay nada aquí. ¡Suba algo!",
"Download" => "Descargar",
"Unshare" => "Dejar de compartir",
+"Delete" => "Eliminar",
"Upload too large" => "Subida demasido grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Los archivos que estás intentando subir sobrepasan el tamaño máximo permitido en este servidor.",
"Files are being scanned, please wait." => "Los archivos están siendo escaneados, por favor espere.",
"Current scanning" => "Escaneo actual",
-"directory" => "carpeta",
-"directories" => "carpetas",
-"file" => "archivo",
-"files" => "archivos",
"Upgrading filesystem cache..." => "Actualizando caché del sistema de archivos"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/es_AR.php b/apps/files/l10n/es_AR.php
index fd422ab1d95..1c26c10028d 100644
--- a/apps/files/l10n/es_AR.php
+++ b/apps/files/l10n/es_AR.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Falta un directorio temporal",
"Failed to write to disk" => "Error al escribir en el disco",
"Not enough storage available" => "No hay suficiente almacenamiento",
+"Upload failed" => "Error al subir el archivo",
"Invalid directory." => "Directorio inválido.",
"Files" => "Archivos",
"Unable to upload your file as it is a directory or has 0 bytes" => "No fue posible subir el archivo porque es un directorio o porque su tamaño es 0 bytes",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Error",
"Share" => "Compartir",
"Delete permanently" => "Borrar permanentemente",
-"Delete" => "Borrar",
"Rename" => "Cambiar nombre",
"Pending" => "Pendientes",
"{new_name} already exists" => "{new_name} ya existe",
@@ -33,23 +33,20 @@ $TRANSLATIONS = array(
"cancel" => "cancelar",
"replaced {new_name} with {old_name}" => "se reemplazó {new_name} con {old_name}",
"undo" => "deshacer",
-"perform delete operation" => "Llevar a cabo borrado",
-"1 file uploading" => "Subiendo 1 archivo",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
"files uploading" => "Subiendo archivos",
"'.' is an invalid file name." => "'.' es un nombre de archivo inválido.",
"File name cannot be empty." => "El nombre del archivo no puede quedar vacío.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nombre invalido, '\\', '/', '<', '>', ':', '\"', '|', '?' y '*' no están permitidos.",
"Your storage is full, files can not be updated or synced anymore!" => "El almacenamiento está lleno, los archivos no se pueden seguir actualizando ni sincronizando",
"Your storage is almost full ({usedSpacePercent}%)" => "El almacenamiento está casi lleno ({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "El proceso de cifrado se ha desactivado, pero los archivos aún están encriptados. Por favor, vaya a la configuración personal para descifrar los archivos.",
"Your download is being prepared. This might take some time if the files are big." => "Tu descarga se está preparando. Esto puede demorar si los archivos son muy grandes.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nombre de carpeta inválido. El uso de 'Shared' está reservado por ownCloud",
"Name" => "Nombre",
"Size" => "Tamaño",
"Modified" => "Modificado",
-"1 folder" => "1 directorio",
-"{count} folders" => "{count} directorios",
-"1 file" => "1 archivo",
-"{count} files" => "{count} archivos",
"%s could not be renamed" => "No se pudo renombrar %s",
"Upload" => "Subir",
"File handling" => "Tratamiento de archivos",
@@ -70,14 +67,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "No hay nada. ¡Subí contenido!",
"Download" => "Descargar",
"Unshare" => "Dejar de compartir",
+"Delete" => "Borrar",
"Upload too large" => "El tamaño del archivo que querés subir es demasiado grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Los archivos que intentás subir sobrepasan el tamaño máximo ",
"Files are being scanned, please wait." => "Se están escaneando los archivos, por favor esperá.",
"Current scanning" => "Escaneo actual",
-"directory" => "directorio",
-"directories" => "directorios",
-"file" => "archivo",
-"files" => "archivos",
"Upgrading filesystem cache..." => "Actualizando el cache del sistema de archivos"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/et_EE.php b/apps/files/l10n/et_EE.php
index e6a643fbadf..5a2bb437d39 100644
--- a/apps/files/l10n/et_EE.php
+++ b/apps/files/l10n/et_EE.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Ajutiste failide kaust puudub",
"Failed to write to disk" => "Kettale kirjutamine ebaõnnestus",
"Not enough storage available" => "Saadaval pole piisavalt ruumi",
+"Upload failed" => "Üleslaadimine ebaõnnestus",
"Invalid directory." => "Vigane kaust.",
"Files" => "Failid",
"Unable to upload your file as it is a directory or has 0 bytes" => "Faili ei saa üles laadida, kuna see on kaust või selle suurus on 0 baiti",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Viga",
"Share" => "Jaga",
"Delete permanently" => "Kustuta jäädavalt",
-"Delete" => "Kustuta",
"Rename" => "Nimeta ümber",
"Pending" => "Ootel",
"{new_name} already exists" => "{new_name} on juba olemas",
@@ -33,23 +33,20 @@ $TRANSLATIONS = array(
"cancel" => "loobu",
"replaced {new_name} with {old_name}" => "asendas nime {old_name} nimega {new_name}",
"undo" => "tagasi",
-"perform delete operation" => "teosta kustutamine",
-"1 file uploading" => "1 fail üleslaadimisel",
+"_%n folder_::_%n folders_" => array("%n kataloog","%n kataloogi"),
+"_%n file_::_%n files_" => array("%n fail","%n faili"),
+"_Uploading %n file_::_Uploading %n files_" => array("Laadin üles %n faili","Laadin üles %n faili"),
"files uploading" => "faili üleslaadimisel",
"'.' is an invalid file name." => "'.' on vigane failinimi.",
"File name cannot be empty." => "Faili nimi ei saa olla tühi.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Vigane nimi, '\\', '/', '<', '>', ':', '\"', '|', '?' ja '*' pole lubatud.",
"Your storage is full, files can not be updated or synced anymore!" => "Sinu andmemaht on täis! Faile ei uuendata ega sünkroniseerita!",
"Your storage is almost full ({usedSpacePercent}%)" => "Su andmemaht on peaaegu täis ({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Krüpteering on keelatud, kuid sinu failid on endiselt krüpteeritud. Palun vaata oma personaalseid seadeid oma failide dekrüpteerimiseks.",
"Your download is being prepared. This might take some time if the files are big." => "Valmistatakse allalaadimist. See võib võtta veidi aega, kui on tegu suurte failidega. ",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Vigane kataloogi nimi. 'Shared' kasutamine on reserveeritud ownCloud poolt.",
"Name" => "Nimi",
"Size" => "Suurus",
"Modified" => "Muudetud",
-"1 folder" => "1 kaust",
-"{count} folders" => "{count} kausta",
-"1 file" => "1 fail",
-"{count} files" => "{count} faili",
"%s could not be renamed" => "%s ümbernimetamine ebaõnnestus",
"Upload" => "Lae üles",
"File handling" => "Failide käsitlemine",
@@ -70,14 +67,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Siin pole midagi. Lae midagi üles!",
"Download" => "Lae alla",
"Unshare" => "Lõpeta jagamine",
+"Delete" => "Kustuta",
"Upload too large" => "Üleslaadimine on liiga suur",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Failid, mida sa proovid üles laadida, ületab serveri poolt üleslaetavatele failidele määratud maksimaalse suuruse.",
"Files are being scanned, please wait." => "Faile skannitakse, palun oota.",
"Current scanning" => "Praegune skannimine",
-"directory" => "kaust",
-"directories" => "kaustad",
-"file" => "fail",
-"files" => "faili",
"Upgrading filesystem cache..." => "Failisüsteemi puhvri uuendamine..."
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/eu.php b/apps/files/l10n/eu.php
index 740f53d4e9a..524be56af02 100644
--- a/apps/files/l10n/eu.php
+++ b/apps/files/l10n/eu.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Aldi bateko karpeta falta da",
"Failed to write to disk" => "Errore bat izan da diskoan idazterakoan",
"Not enough storage available" => "Ez dago behar aina leku erabilgarri,",
+"Upload failed" => "igotzeak huts egin du",
"Invalid directory." => "Baliogabeko karpeta.",
"Files" => "Fitxategiak",
"Unable to upload your file as it is a directory or has 0 bytes" => "Ezin izan da zure fitxategia igo karpeta bat delako edo 0 byte dituelako",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Errorea",
"Share" => "Elkarbanatu",
"Delete permanently" => "Ezabatu betirako",
-"Delete" => "Ezabatu",
"Rename" => "Berrizendatu",
"Pending" => "Zain",
"{new_name} already exists" => "{new_name} dagoeneko existitzen da",
@@ -33,23 +33,20 @@ $TRANSLATIONS = array(
"cancel" => "ezeztatu",
"replaced {new_name} with {old_name}" => " {new_name}-k {old_name} ordezkatu du",
"undo" => "desegin",
-"perform delete operation" => "Ezabatu",
-"1 file uploading" => "fitxategi 1 igotzen",
+"_%n folder_::_%n folders_" => array("karpeta %n","%n karpeta"),
+"_%n file_::_%n files_" => array("fitxategi %n","%n fitxategi"),
+"_Uploading %n file_::_Uploading %n files_" => array("Fitxategi %n igotzen","%n fitxategi igotzen"),
"files uploading" => "fitxategiak igotzen",
"'.' is an invalid file name." => "'.' ez da fitxategi izen baliogarria.",
"File name cannot be empty." => "Fitxategi izena ezin da hutsa izan.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "IZen aliogabea, '\\', '/', '<', '>', ':', '\"', '|', '?' eta '*' ez daude baimenduta.",
"Your storage is full, files can not be updated or synced anymore!" => "Zure biltegiratzea beterik dago, ezingo duzu aurrerantzean fitxategirik igo edo sinkronizatu!",
"Your storage is almost full ({usedSpacePercent}%)" => "Zure biltegiratzea nahiko beterik dago (%{usedSpacePercent})",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Enkriptazioa desgaitua izan da baina zure fitxategiak oraindik enkriptatuta daude. Mesedez jo zure ezarpen pertsonaletara zure fitxategiak dekodifikatzeko.",
"Your download is being prepared. This might take some time if the files are big." => "Zure deskarga prestatu egin behar da. Denbora bat har lezake fitxategiak handiak badira. ",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Baliogabeako karpeta izena. 'Shared' izena Owncloudek erreserbatzen du",
"Name" => "Izena",
"Size" => "Tamaina",
"Modified" => "Aldatuta",
-"1 folder" => "karpeta bat",
-"{count} folders" => "{count} karpeta",
-"1 file" => "fitxategi bat",
-"{count} files" => "{count} fitxategi",
"%s could not be renamed" => "%s ezin da berrizendatu",
"Upload" => "Igo",
"File handling" => "Fitxategien kudeaketa",
@@ -70,14 +67,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Ez dago ezer. Igo zerbait!",
"Download" => "Deskargatu",
"Unshare" => "Ez elkarbanatu",
+"Delete" => "Ezabatu",
"Upload too large" => "Igoera handiegia da",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Igotzen saiatzen ari zaren fitxategiak zerbitzari honek igotzeko onartzen duena baino handiagoak dira.",
"Files are being scanned, please wait." => "Fitxategiak eskaneatzen ari da, itxoin mezedez.",
"Current scanning" => "Orain eskaneatzen ari da",
-"directory" => "direktorioa",
-"directories" => "direktorioak",
-"file" => "fitxategia",
-"files" => "fitxategiak",
"Upgrading filesystem cache..." => "Fitxategi sistemaren katxea eguneratzen..."
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/fa.php b/apps/files/l10n/fa.php
index 9670afdd051..24584f715b5 100644
--- a/apps/files/l10n/fa.php
+++ b/apps/files/l10n/fa.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "یک پوشه موقت گم شده",
"Failed to write to disk" => "نوشتن بر روی دیسک سخت ناموفق بود",
"Not enough storage available" => "فضای کافی در دسترس نیست",
+"Upload failed" => "بارگزاری ناموفق بود",
"Invalid directory." => "فهرست راهنما نامعتبر می باشد.",
"Files" => "پرونده‌ها",
"Unable to upload your file as it is a directory or has 0 bytes" => "ناتوان در بارگذاری یا فایل یک پوشه است یا 0بایت دارد",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "خطا",
"Share" => "اشتراک‌گذاری",
"Delete permanently" => "حذف قطعی",
-"Delete" => "حذف",
"Rename" => "تغییرنام",
"Pending" => "در انتظار",
"{new_name} already exists" => "{نام _جدید} در حال حاضر وجود دارد.",
@@ -33,8 +33,9 @@ $TRANSLATIONS = array(
"cancel" => "لغو",
"replaced {new_name} with {old_name}" => "{نام_جدید} با { نام_قدیمی} جایگزین شد.",
"undo" => "بازگشت",
-"perform delete operation" => "انجام عمل حذف",
-"1 file uploading" => "1 پرونده آپلود شد.",
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
+"_Uploading %n file_::_Uploading %n files_" => array(""),
"files uploading" => "بارگذاری فایل ها",
"'.' is an invalid file name." => "'.' یک نام پرونده نامعتبر است.",
"File name cannot be empty." => "نام پرونده نمی تواند خالی باشد.",
@@ -42,14 +43,9 @@ $TRANSLATIONS = array(
"Your storage is full, files can not be updated or synced anymore!" => "فضای ذخیره ی شما کاملا پر است، بیش از این فایلها بهنگام یا همگام سازی نمی توانند بشوند!",
"Your storage is almost full ({usedSpacePercent}%)" => "فضای ذخیره ی شما تقریبا پر است ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "دانلود شما در حال آماده شدن است. در صورتیکه پرونده ها بزرگ باشند ممکن است مدتی طول بکشد.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "نام پوشه نامعتبر است. استفاده از \" به اشتراک گذاشته شده \" متعلق به سایت Owncloud است.",
"Name" => "نام",
"Size" => "اندازه",
"Modified" => "تاریخ",
-"1 folder" => "1 پوشه",
-"{count} folders" => "{ شمار} پوشه ها",
-"1 file" => "1 پرونده",
-"{count} files" => "{ شمار } فایل ها",
"%s could not be renamed" => "%s نمیتواند تغییر نام دهد.",
"Upload" => "بارگزاری",
"File handling" => "اداره پرونده ها",
@@ -70,14 +66,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "اینجا هیچ چیز نیست.",
"Download" => "دانلود",
"Unshare" => "لغو اشتراک",
+"Delete" => "حذف",
"Upload too large" => "سایز فایل برای آپلود زیاد است(م.تنظیمات در php.ini)",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "فایلها بیش از حد تعیین شده در این سرور هستند\nمترجم:با تغییر فایل php,ini میتوان این محدودیت را برطرف کرد",
"Files are being scanned, please wait." => "پرونده ها در حال بازرسی هستند لطفا صبر کنید",
"Current scanning" => "بازرسی کنونی",
-"directory" => "پوشه",
-"directories" => "پوشه ها",
-"file" => "پرونده",
-"files" => "پرونده ها",
"Upgrading filesystem cache..." => "بهبود فایل سیستمی ذخیره گاه..."
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files/l10n/fi_FI.php b/apps/files/l10n/fi_FI.php
index 2d1bf8c4e3f..1d29dbf79d2 100644
--- a/apps/files/l10n/fi_FI.php
+++ b/apps/files/l10n/fi_FI.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Tilapäiskansio puuttuu",
"Failed to write to disk" => "Levylle kirjoitus epäonnistui",
"Not enough storage available" => "Tallennustilaa ei ole riittävästi käytettävissä",
+"Upload failed" => "Lähetys epäonnistui",
"Invalid directory." => "Virheellinen kansio.",
"Files" => "Tiedostot",
"Unable to upload your file as it is a directory or has 0 bytes" => "Tiedoston lähetys epäonnistui, koska sen koko on 0 tavua tai kyseessä on kansio.",
@@ -21,7 +22,6 @@ $TRANSLATIONS = array(
"Error" => "Virhe",
"Share" => "Jaa",
"Delete permanently" => "Poista pysyvästi",
-"Delete" => "Poista",
"Rename" => "Nimeä uudelleen",
"Pending" => "Odottaa",
"{new_name} already exists" => "{new_name} on jo olemassa",
@@ -29,7 +29,10 @@ $TRANSLATIONS = array(
"suggest name" => "ehdota nimeä",
"cancel" => "peru",
"undo" => "kumoa",
-"perform delete operation" => "suorita poistotoiminto",
+"_%n folder_::_%n folders_" => array("%n kansio","%n kansiota"),
+"_%n file_::_%n files_" => array("%n tiedosto","%n tiedostoa"),
+"{dirs} and {files}" => "{dirs} ja {files}",
+"_Uploading %n file_::_Uploading %n files_" => array("Lähetetään %n tiedosto","Lähetetään %n tiedostoa"),
"'.' is an invalid file name." => "'.' on virheellinen nimi tiedostolle.",
"File name cannot be empty." => "Tiedoston nimi ei voi olla tyhjä.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Virheellinen nimi, merkit '\\', '/', '<', '>', ':', '\"', '|', '?' ja '*' eivät ole sallittuja.",
@@ -39,10 +42,6 @@ $TRANSLATIONS = array(
"Name" => "Nimi",
"Size" => "Koko",
"Modified" => "Muokattu",
-"1 folder" => "1 kansio",
-"{count} folders" => "{count} kansiota",
-"1 file" => "1 tiedosto",
-"{count} files" => "{count} tiedostoa",
"Upload" => "Lähetä",
"File handling" => "Tiedostonhallinta",
"Maximum upload size" => "Lähetettävän tiedoston suurin sallittu koko",
@@ -62,14 +61,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Täällä ei ole mitään. Lähetä tänne jotakin!",
"Download" => "Lataa",
"Unshare" => "Peru jakaminen",
+"Delete" => "Poista",
"Upload too large" => "Lähetettävä tiedosto on liian suuri",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Lähetettäväksi valitsemasi tiedostot ylittävät palvelimen salliman tiedostokoon rajan.",
"Files are being scanned, please wait." => "Tiedostoja tarkistetaan, odota hetki.",
"Current scanning" => "Tämänhetkinen tutkinta",
-"directory" => "kansio",
-"directories" => "kansiota",
-"file" => "tiedosto",
-"files" => "tiedostoa",
"Upgrading filesystem cache..." => "Päivitetään tiedostojärjestelmän välimuistia..."
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/fr.php b/apps/files/l10n/fr.php
index ad79a9f4999..ce19bb60eb7 100644
--- a/apps/files/l10n/fr.php
+++ b/apps/files/l10n/fr.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Absence de dossier temporaire.",
"Failed to write to disk" => "Erreur d'écriture sur le disque",
"Not enough storage available" => "Plus assez d'espace de stockage disponible",
+"Upload failed" => "Échec de l'envoi",
"Invalid directory." => "Dossier invalide.",
"Files" => "Fichiers",
"Unable to upload your file as it is a directory or has 0 bytes" => "Impossible d'envoyer votre fichier dans la mesure où il s'agit d'un répertoire ou d'un fichier de taille nulle",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Erreur",
"Share" => "Partager",
"Delete permanently" => "Supprimer de façon définitive",
-"Delete" => "Supprimer",
"Rename" => "Renommer",
"Pending" => "En attente",
"{new_name} already exists" => "{new_name} existe déjà",
@@ -33,23 +33,21 @@ $TRANSLATIONS = array(
"cancel" => "annuler",
"replaced {new_name} with {old_name}" => "{new_name} a été remplacé par {old_name}",
"undo" => "annuler",
-"perform delete operation" => "effectuer l'opération de suppression",
-"1 file uploading" => "1 fichier en cours d'envoi",
+"_%n folder_::_%n folders_" => array("%n dossier","%n dossiers"),
+"_%n file_::_%n files_" => array("%n fichier","%n fichiers"),
+"{dirs} and {files}" => "{dir} et {files}",
+"_Uploading %n file_::_Uploading %n files_" => array("Téléversement de %n fichier","Téléversement de %n fichiers"),
"files uploading" => "fichiers en cours d'envoi",
"'.' is an invalid file name." => "'.' n'est pas un nom de fichier valide.",
"File name cannot be empty." => "Le nom de fichier ne peut être vide.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nom invalide, les caractères '\\', '/', '<', '>', ':', '\"', '|', '?' et '*' ne sont pas autorisés.",
"Your storage is full, files can not be updated or synced anymore!" => "Votre espage de stockage est plein, les fichiers ne peuvent plus être téléversés ou synchronisés !",
"Your storage is almost full ({usedSpacePercent}%)" => "Votre espace de stockage est presque plein ({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Le chiffrement était désactivé mais vos fichiers sont toujours chiffrés. Veuillez vous rendre sur vos Paramètres personnels pour déchiffrer vos fichiers.",
"Your download is being prepared. This might take some time if the files are big." => "Votre téléchargement est cours de préparation. Ceci peut nécessiter un certain temps si les fichiers sont volumineux.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nom de dossier invalide. L'utilisation du mot 'Shared' est réservée à Owncloud",
"Name" => "Nom",
"Size" => "Taille",
"Modified" => "Modifié",
-"1 folder" => "1 dossier",
-"{count} folders" => "{count} dossiers",
-"1 file" => "1 fichier",
-"{count} files" => "{count} fichiers",
"%s could not be renamed" => "%s ne peut être renommé",
"Upload" => "Envoyer",
"File handling" => "Gestion des fichiers",
@@ -70,14 +68,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Il n'y a rien ici ! Envoyez donc quelque chose :)",
"Download" => "Télécharger",
"Unshare" => "Ne plus partager",
+"Delete" => "Supprimer",
"Upload too large" => "Téléversement trop volumineux",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Les fichiers que vous essayez d'envoyer dépassent la taille maximale permise par ce serveur.",
"Files are being scanned, please wait." => "Les fichiers sont en cours d'analyse, veuillez patienter.",
"Current scanning" => "Analyse en cours",
-"directory" => "dossier",
-"directories" => "dossiers",
-"file" => "fichier",
-"files" => "fichiers",
"Upgrading filesystem cache..." => "Mise à niveau du cache du système de fichier"
);
$PLURAL_FORMS = "nplurals=2; plural=(n > 1);";
diff --git a/apps/files/l10n/gl.php b/apps/files/l10n/gl.php
index 02bbad53e43..6ec1816308a 100644
--- a/apps/files/l10n/gl.php
+++ b/apps/files/l10n/gl.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Falta o cartafol temporal",
"Failed to write to disk" => "Produciuse un erro ao escribir no disco",
"Not enough storage available" => "Non hai espazo de almacenamento abondo",
+"Upload failed" => "Produciuse un fallou no envío",
"Invalid directory." => "O directorio é incorrecto.",
"Files" => "Ficheiros",
"Unable to upload your file as it is a directory or has 0 bytes" => "Non foi posíbel enviar o ficheiro pois ou é un directorio ou ten 0 bytes",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Erro",
"Share" => "Compartir",
"Delete permanently" => "Eliminar permanentemente",
-"Delete" => "Eliminar",
"Rename" => "Renomear",
"Pending" => "Pendentes",
"{new_name} already exists" => "Xa existe un {new_name}",
@@ -33,23 +33,20 @@ $TRANSLATIONS = array(
"cancel" => "cancelar",
"replaced {new_name} with {old_name}" => "substituír {new_name} por {old_name}",
"undo" => "desfacer",
-"perform delete operation" => "realizar a operación de eliminación",
-"1 file uploading" => "Enviándose 1 ficheiro",
+"_%n folder_::_%n folders_" => array("%n cartafol","%n cartafoles"),
+"_%n file_::_%n files_" => array("%n ficheiro","%n ficheiros"),
+"_Uploading %n file_::_Uploading %n files_" => array("Cargando %n ficheiro","Cargando %n ficheiros"),
"files uploading" => "ficheiros enviándose",
"'.' is an invalid file name." => "«.» é un nome de ficheiro incorrecto",
"File name cannot be empty." => "O nome de ficheiro non pode estar baleiro",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome incorrecto, non se permite «\\», «/», «<», «>», «:», «\"», «|», «?» e «*».",
"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 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.",
"Your download is being prepared. This might take some time if the files are big." => "Está a prepararse a súa descarga. Isto pode levar bastante tempo se os ficheiros son grandes.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nome de cartafol incorrecto. O uso de «Shared» está reservado por Owncloud",
"Name" => "Nome",
"Size" => "Tamaño",
"Modified" => "Modificado",
-"1 folder" => "1 cartafol",
-"{count} folders" => "{count} cartafoles",
-"1 file" => "1 ficheiro",
-"{count} files" => "{count} ficheiros",
"%s could not be renamed" => "%s non pode cambiar de nome",
"Upload" => "Enviar",
"File handling" => "Manexo de ficheiro",
@@ -70,14 +67,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Aquí non hai nada. Envíe algo.",
"Download" => "Descargar",
"Unshare" => "Deixar de compartir",
+"Delete" => "Eliminar",
"Upload too large" => "Envío demasiado grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os ficheiros que tenta enviar exceden do tamaño máximo permitido neste servidor",
"Files are being scanned, please wait." => "Estanse analizando os ficheiros. Agarde.",
"Current scanning" => "Análise actual",
-"directory" => "directorio",
-"directories" => "directorios",
-"file" => "ficheiro",
-"files" => "ficheiros",
"Upgrading filesystem cache..." => "Anovando a caché do sistema de ficheiros..."
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/he.php b/apps/files/l10n/he.php
index 8af6b0852ee..40d7cc9c552 100644
--- a/apps/files/l10n/he.php
+++ b/apps/files/l10n/he.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "תקיה זמנית חסרה",
"Failed to write to disk" => "הכתיבה לכונן נכשלה",
"Not enough storage available" => "אין די שטח פנוי באחסון",
+"Upload failed" => "ההעלאה נכשלה",
"Invalid directory." => "תיקייה שגויה.",
"Files" => "קבצים",
"Unable to upload your file as it is a directory or has 0 bytes" => "לא יכול להעלות את הקובץ מכיוון שזו תקיה או שמשקל הקובץ 0 בתים",
@@ -20,7 +21,6 @@ $TRANSLATIONS = array(
"Error" => "שגיאה",
"Share" => "שתף",
"Delete permanently" => "מחק לצמיתות",
-"Delete" => "מחיקה",
"Rename" => "שינוי שם",
"Pending" => "ממתין",
"{new_name} already exists" => "{new_name} כבר קיים",
@@ -29,17 +29,14 @@ $TRANSLATIONS = array(
"cancel" => "ביטול",
"replaced {new_name} with {old_name}" => "{new_name} הוחלף ב־{old_name}",
"undo" => "ביטול",
-"perform delete operation" => "ביצוע פעולת מחיקה",
-"1 file uploading" => "קובץ אחד נשלח",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
"files uploading" => "קבצים בהעלאה",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "השם שגוי, אסור להשתמש בתווים '\\', '/', '<', '>', ':', '\"', '|', '?' ו־'*'.",
"Name" => "שם",
"Size" => "גודל",
"Modified" => "זמן שינוי",
-"1 folder" => "תיקייה אחת",
-"{count} folders" => "{count} תיקיות",
-"1 file" => "קובץ אחד",
-"{count} files" => "{count} קבצים",
"Upload" => "העלאה",
"File handling" => "טיפול בקבצים",
"Maximum upload size" => "גודל העלאה מקסימלי",
@@ -57,11 +54,10 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "אין כאן שום דבר. אולי ברצונך להעלות משהו?",
"Download" => "הורדה",
"Unshare" => "הסר שיתוף",
+"Delete" => "מחיקה",
"Upload too large" => "העלאה גדולה מידי",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "הקבצים שניסית להעלות חרגו מהגודל המקסימלי להעלאת קבצים על שרת זה.",
"Files are being scanned, please wait." => "הקבצים נסרקים, נא להמתין.",
-"Current scanning" => "הסריקה הנוכחית",
-"file" => "קובץ",
-"files" => "קבצים"
+"Current scanning" => "הסריקה הנוכחית"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/hi.php b/apps/files/l10n/hi.php
index 48e2194256d..7d2baab607d 100644
--- a/apps/files/l10n/hi.php
+++ b/apps/files/l10n/hi.php
@@ -2,6 +2,9 @@
$TRANSLATIONS = array(
"Error" => "त्रुटि",
"Share" => "साझा करें",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
"Save" => "सहेजें"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/hr.php b/apps/files/l10n/hr.php
index 6bc6904041a..57f1ad9700b 100644
--- a/apps/files/l10n/hr.php
+++ b/apps/files/l10n/hr.php
@@ -12,14 +12,15 @@ $TRANSLATIONS = array(
"File upload is in progress. Leaving the page now will cancel the upload." => "Učitavanje datoteke. Napuštanjem stranice će prekinuti učitavanje.",
"Error" => "Greška",
"Share" => "Podijeli",
-"Delete" => "Obriši",
"Rename" => "Promjeni ime",
"Pending" => "U tijeku",
"replace" => "zamjeni",
"suggest name" => "predloži ime",
"cancel" => "odustani",
"undo" => "vrati",
-"1 file uploading" => "1 datoteka se učitava",
+"_%n folder_::_%n folders_" => array("","",""),
+"_%n file_::_%n files_" => array("","",""),
+"_Uploading %n file_::_Uploading %n files_" => array("","",""),
"files uploading" => "datoteke se učitavaju",
"Name" => "Ime",
"Size" => "Veličina",
@@ -40,11 +41,10 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Nema ničega u ovoj mapi. Pošalji nešto!",
"Download" => "Preuzimanje",
"Unshare" => "Makni djeljenje",
+"Delete" => "Obriši",
"Upload too large" => "Prijenos je preobiman",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Datoteke koje pokušavate prenijeti prelaze maksimalnu veličinu za prijenos datoteka na ovom poslužitelju.",
"Files are being scanned, please wait." => "Datoteke se skeniraju, molimo pričekajte.",
-"Current scanning" => "Trenutno skeniranje",
-"file" => "datoteka",
-"files" => "datoteke"
+"Current scanning" => "Trenutno skeniranje"
);
$PLURAL_FORMS = "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/hu_HU.php b/apps/files/l10n/hu_HU.php
index 061fb27f0f5..66edbefbca5 100644
--- a/apps/files/l10n/hu_HU.php
+++ b/apps/files/l10n/hu_HU.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Hiányzik egy ideiglenes mappa",
"Failed to write to disk" => "Nem sikerült a lemezre történő írás",
"Not enough storage available" => "Nincs elég szabad hely.",
+"Upload failed" => "A feltöltés nem sikerült",
"Invalid directory." => "Érvénytelen mappa.",
"Files" => "Fájlok",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nem tölthető fel, mert mappa volt, vagy 0 byte méretű",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Hiba",
"Share" => "Megosztás",
"Delete permanently" => "Végleges törlés",
-"Delete" => "Törlés",
"Rename" => "Átnevezés",
"Pending" => "Folyamatban",
"{new_name} already exists" => "{new_name} már létezik",
@@ -33,8 +33,9 @@ $TRANSLATIONS = array(
"cancel" => "mégse",
"replaced {new_name} with {old_name}" => "{new_name} fájlt kicseréltük ezzel: {old_name}",
"undo" => "visszavonás",
-"perform delete operation" => "a törlés végrehajtása",
-"1 file uploading" => "1 fájl töltődik föl",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
"files uploading" => "fájl töltődik föl",
"'.' is an invalid file name." => "'.' fájlnév érvénytelen.",
"File name cannot be empty." => "A fájlnév nem lehet semmi.",
@@ -42,14 +43,9 @@ $TRANSLATIONS = array(
"Your storage is full, files can not be updated or synced anymore!" => "A tároló tele van, a fájlok nem frissíthetőek vagy szinkronizálhatóak a jövőben.",
"Your storage is almost full ({usedSpacePercent}%)" => "A tároló majdnem tele van ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "Készül a letöltendő állomány. Ez eltarthat egy ideig, ha nagyok a fájlok.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Érvénytelen mappanév. A név használata csak a Owncloud számára lehetséges.",
"Name" => "Név",
"Size" => "Méret",
"Modified" => "Módosítva",
-"1 folder" => "1 mappa",
-"{count} folders" => "{count} mappa",
-"1 file" => "1 fájl",
-"{count} files" => "{count} fájl",
"%s could not be renamed" => "%s átnevezése nem sikerült",
"Upload" => "Feltöltés",
"File handling" => "Fájlkezelés",
@@ -70,14 +66,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Itt nincs semmi. Töltsön fel valamit!",
"Download" => "Letöltés",
"Unshare" => "A megosztás visszavonása",
+"Delete" => "Törlés",
"Upload too large" => "A feltöltés túl nagy",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "A feltöltendő állományok mérete meghaladja a kiszolgálón megengedett maximális méretet.",
"Files are being scanned, please wait." => "A fájllista ellenőrzése zajlik, kis türelmet!",
"Current scanning" => "Ellenőrzés alatt",
-"directory" => "mappa",
-"directories" => "mappa",
-"file" => "fájl",
-"files" => "fájlok",
"Upgrading filesystem cache..." => "A fájlrendszer gyorsítótárának frissítése zajlik..."
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/hy.php b/apps/files/l10n/hy.php
index 101734c01dd..9a5ebb862a9 100644
--- a/apps/files/l10n/hy.php
+++ b/apps/files/l10n/hy.php
@@ -1,7 +1,10 @@
<?php
$TRANSLATIONS = array(
-"Delete" => "Ջնջել",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
"Save" => "Պահպանել",
-"Download" => "Բեռնել"
+"Download" => "Բեռնել",
+"Delete" => "Ջնջել"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/ia.php b/apps/files/l10n/ia.php
index 2ccd559469d..1560687f6c4 100644
--- a/apps/files/l10n/ia.php
+++ b/apps/files/l10n/ia.php
@@ -6,7 +6,9 @@ $TRANSLATIONS = array(
"Files" => "Files",
"Error" => "Error",
"Share" => "Compartir",
-"Delete" => "Deler",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
"Name" => "Nomine",
"Size" => "Dimension",
"Modified" => "Modificate",
@@ -18,6 +20,7 @@ $TRANSLATIONS = array(
"Folder" => "Dossier",
"Nothing in here. Upload something!" => "Nihil hic. Incarga alcun cosa!",
"Download" => "Discargar",
+"Delete" => "Deler",
"Upload too large" => "Incargamento troppo longe"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/id.php b/apps/files/l10n/id.php
index 4b6bf8a32b9..ce7cfe5ef4c 100644
--- a/apps/files/l10n/id.php
+++ b/apps/files/l10n/id.php
@@ -21,7 +21,6 @@ $TRANSLATIONS = array(
"Error" => "Galat",
"Share" => "Bagikan",
"Delete permanently" => "Hapus secara permanen",
-"Delete" => "Hapus",
"Rename" => "Ubah nama",
"Pending" => "Menunggu",
"{new_name} already exists" => "{new_name} sudah ada",
@@ -30,8 +29,9 @@ $TRANSLATIONS = array(
"cancel" => "batalkan",
"replaced {new_name} with {old_name}" => "mengganti {new_name} dengan {old_name}",
"undo" => "urungkan",
-"perform delete operation" => "Lakukan operasi penghapusan",
-"1 file uploading" => "1 berkas diunggah",
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
+"_Uploading %n file_::_Uploading %n files_" => array(""),
"files uploading" => "berkas diunggah",
"'.' is an invalid file name." => "'.' bukan nama berkas yang valid.",
"File name cannot be empty." => "Nama berkas tidak boleh kosong.",
@@ -39,14 +39,9 @@ $TRANSLATIONS = array(
"Your storage is full, files can not be updated or synced anymore!" => "Ruang penyimpanan Anda penuh, berkas tidak dapat diperbarui atau disinkronkan lagi!",
"Your storage is almost full ({usedSpacePercent}%)" => "Ruang penyimpanan hampir penuh ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "Unduhan Anda sedang disiapkan. Prosesnya dapat berlangsung agak lama jika ukuran berkasnya besar.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nama folder salah. Nama 'Shared' telah digunakan oleh Owncloud.",
"Name" => "Nama",
"Size" => "Ukuran",
"Modified" => "Dimodifikasi",
-"1 folder" => "1 folder",
-"{count} folders" => "{count} folder",
-"1 file" => "1 berkas",
-"{count} files" => "{count} berkas",
"Upload" => "Unggah",
"File handling" => "Penanganan berkas",
"Maximum upload size" => "Ukuran pengunggahan maksimum",
@@ -66,12 +61,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Tidak ada apa-apa di sini. Unggah sesuatu!",
"Download" => "Unduh",
"Unshare" => "Batalkan berbagi",
+"Delete" => "Hapus",
"Upload too large" => "Yang diunggah terlalu besar",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Berkas yang dicoba untuk diunggah melebihi ukuran maksimum pengunggahan berkas di server ini.",
"Files are being scanned, please wait." => "Berkas sedang dipindai, silakan tunggu.",
"Current scanning" => "Yang sedang dipindai",
-"file" => "berkas",
-"files" => "berkas-berkas",
"Upgrading filesystem cache..." => "Meningkatkan tembolok sistem berkas..."
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files/l10n/is.php b/apps/files/l10n/is.php
index 8a131b20c8f..2cf195d0a11 100644
--- a/apps/files/l10n/is.php
+++ b/apps/files/l10n/is.php
@@ -19,7 +19,6 @@ $TRANSLATIONS = array(
"URL cannot be empty." => "Vefslóð má ekki vera tóm.",
"Error" => "Villa",
"Share" => "Deila",
-"Delete" => "Eyða",
"Rename" => "Endurskýra",
"Pending" => "Bíður",
"{new_name} already exists" => "{new_name} er þegar til",
@@ -28,18 +27,15 @@ $TRANSLATIONS = array(
"cancel" => "hætta við",
"replaced {new_name} with {old_name}" => "yfirskrifaði {new_name} með {old_name}",
"undo" => "afturkalla",
-"1 file uploading" => "1 skrá innsend",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
"'.' is an invalid file name." => "'.' er ekki leyfilegt nafn.",
"File name cannot be empty." => "Nafn skráar má ekki vera tómt",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ógilt nafn, táknin '\\', '/', '<', '>', ':', '\"', '|', '?' og '*' eru ekki leyfð.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Óleyfilegt nafn á möppu. Nafnið 'Shared' er frátekið fyrir Owncloud",
"Name" => "Nafn",
"Size" => "Stærð",
"Modified" => "Breytt",
-"1 folder" => "1 mappa",
-"{count} folders" => "{count} möppur",
-"1 file" => "1 skrá",
-"{count} files" => "{count} skrár",
"Upload" => "Senda inn",
"File handling" => "Meðhöndlun skrár",
"Maximum upload size" => "Hámarks stærð innsendingar",
@@ -57,6 +53,7 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Ekkert hér. Settu eitthvað inn!",
"Download" => "Niðurhal",
"Unshare" => "Hætta deilingu",
+"Delete" => "Eyða",
"Upload too large" => "Innsend skrá er of stór",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Skrárnar sem þú ert að senda inn eru stærri en hámarks innsendingarstærð á þessum netþjóni.",
"Files are being scanned, please wait." => "Verið er að skima skrár, vinsamlegast hinkraðu.",
diff --git a/apps/files/l10n/it.php b/apps/files/l10n/it.php
index e5e4bd03bb3..b0ec954d907 100644
--- a/apps/files/l10n/it.php
+++ b/apps/files/l10n/it.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Manca una cartella temporanea",
"Failed to write to disk" => "Scrittura su disco non riuscita",
"Not enough storage available" => "Spazio di archiviazione insufficiente",
+"Upload failed" => "Caricamento non riuscito",
"Invalid directory." => "Cartella non valida.",
"Files" => "File",
"Unable to upload your file as it is a directory or has 0 bytes" => "Impossibile caricare il file poiché è una cartella o ha una dimensione di 0 byte",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Errore",
"Share" => "Condividi",
"Delete permanently" => "Elimina definitivamente",
-"Delete" => "Elimina",
"Rename" => "Rinomina",
"Pending" => "In corso",
"{new_name} already exists" => "{new_name} esiste già",
@@ -33,23 +33,21 @@ $TRANSLATIONS = array(
"cancel" => "annulla",
"replaced {new_name} with {old_name}" => "sostituito {new_name} con {old_name}",
"undo" => "annulla",
-"perform delete operation" => "esegui l'operazione di eliminazione",
-"1 file uploading" => "1 file in fase di caricamento",
+"_%n folder_::_%n folders_" => array("%n cartella","%n cartelle"),
+"_%n file_::_%n files_" => array("%n file","%n file"),
+"{dirs} and {files}" => "{dirs} e {files}",
+"_Uploading %n file_::_Uploading %n files_" => array("Caricamento di %n file in corso","Caricamento di %n file in corso"),
"files uploading" => "caricamento file",
"'.' is an invalid file name." => "'.' non è un nome file valido.",
"File name cannot be empty." => "Il nome del file non può essere vuoto.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome non valido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' non sono consentiti.",
"Your storage is full, files can not be updated or synced anymore!" => "Lo spazio di archiviazione è pieno, i file non possono essere più aggiornati o sincronizzati!",
"Your storage is almost full ({usedSpacePercent}%)" => "Lo spazio di archiviazione è quasi pieno ({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "La cifratura è stata disabilitata ma i tuoi file sono ancora cifrati. Vai nelle impostazioni personali per decifrare i file.",
"Your download is being prepared. This might take some time if the files are big." => "Il tuo scaricamento è in fase di preparazione. Ciò potrebbe richiedere del tempo se i file sono grandi.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nome della cartella non valido. L'uso di 'Shared' è riservato da ownCloud",
"Name" => "Nome",
"Size" => "Dimensione",
"Modified" => "Modificato",
-"1 folder" => "1 cartella",
-"{count} folders" => "{count} cartelle",
-"1 file" => "1 file",
-"{count} files" => "{count} file",
"%s could not be renamed" => "%s non può essere rinominato",
"Upload" => "Carica",
"File handling" => "Gestione file",
@@ -70,14 +68,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Non c'è niente qui. Carica qualcosa!",
"Download" => "Scarica",
"Unshare" => "Rimuovi condivisione",
+"Delete" => "Elimina",
"Upload too large" => "Caricamento troppo grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "I file che stai provando a caricare superano la dimensione massima consentita su questo server.",
"Files are being scanned, please wait." => "Scansione dei file in corso, attendi",
"Current scanning" => "Scansione corrente",
-"directory" => "cartella",
-"directories" => "cartelle",
-"file" => "file",
-"files" => "file",
"Upgrading filesystem cache..." => "Aggiornamento della cache del filesystem in corso..."
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/ja_JP.php b/apps/files/l10n/ja_JP.php
index 0902353a171..5438cbb4976 100644
--- a/apps/files/l10n/ja_JP.php
+++ b/apps/files/l10n/ja_JP.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "一時保存フォルダが見つかりません",
"Failed to write to disk" => "ディスクへの書き込みに失敗しました",
"Not enough storage available" => "ストレージに十分な空き容量がありません",
+"Upload failed" => "アップロードに失敗",
"Invalid directory." => "無効なディレクトリです。",
"Files" => "ファイル",
"Unable to upload your file as it is a directory or has 0 bytes" => "ディレクトリもしくは0バイトのファイルはアップロードできません",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "エラー",
"Share" => "共有",
"Delete permanently" => "完全に削除する",
-"Delete" => "削除",
"Rename" => "名前の変更",
"Pending" => "中断",
"{new_name} already exists" => "{new_name} はすでに存在しています",
@@ -33,23 +33,21 @@ $TRANSLATIONS = array(
"cancel" => "キャンセル",
"replaced {new_name} with {old_name}" => "{old_name} を {new_name} に置換",
"undo" => "元に戻す",
-"perform delete operation" => "削除を実行",
-"1 file uploading" => "ファイルを1つアップロード中",
+"_%n folder_::_%n folders_" => array("%n個のフォルダ"),
+"_%n file_::_%n files_" => array("%n個のファイル"),
+"{dirs} and {files}" => "{dirs} と {files}",
+"_Uploading %n file_::_Uploading %n files_" => array("%n 個のファイルをアップロード中"),
"files uploading" => "ファイルをアップロード中",
"'.' is an invalid file name." => "'.' は無効なファイル名です。",
"File name cannot be empty." => "ファイル名を空にすることはできません。",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "無効な名前、'\\', '/', '<', '>', ':', '\"', '|', '?', '*' は使用できません。",
"Your storage is full, files can not be updated or synced anymore!" => "あなたのストレージは一杯です。ファイルの更新と同期はもうできません!",
"Your storage is almost full ({usedSpacePercent}%)" => "あなたのストレージはほぼ一杯です({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "暗号化の機能は無効化されましたが、ファイルはすでに暗号化されています。個人設定からファイルを複合を行ってください。",
"Your download is being prepared. This might take some time if the files are big." => "ダウンロードの準備中です。ファイルサイズが大きい場合は少し時間がかかるかもしれません。",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "無効なフォルダ名です。'Shared' の利用は ownCloud が予約済みです。",
"Name" => "名前",
"Size" => "サイズ",
"Modified" => "変更",
-"1 folder" => "1 フォルダ",
-"{count} folders" => "{count} フォルダ",
-"1 file" => "1 ファイル",
-"{count} files" => "{count} ファイル",
"%s could not be renamed" => "%sの名前を変更できませんでした",
"Upload" => "アップロード",
"File handling" => "ファイル操作",
@@ -70,14 +68,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "ここには何もありません。何かアップロードしてください。",
"Download" => "ダウンロード",
"Unshare" => "共有解除",
+"Delete" => "削除",
"Upload too large" => "アップロードには大きすぎます。",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "アップロードしようとしているファイルは、サーバで規定された最大サイズを超えています。",
"Files are being scanned, please wait." => "ファイルをスキャンしています、しばらくお待ちください。",
"Current scanning" => "スキャン中",
-"directory" => "ディレクトリ",
-"directories" => "ディレクトリ",
-"file" => "ファイル",
-"files" => "ファイル",
"Upgrading filesystem cache..." => "ファイルシステムキャッシュを更新中..."
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files/l10n/ka.php b/apps/files/l10n/ka.php
index bbc70614cfc..544e8168c54 100644
--- a/apps/files/l10n/ka.php
+++ b/apps/files/l10n/ka.php
@@ -1,6 +1,9 @@
<?php
$TRANSLATIONS = array(
"Files" => "ფაილები",
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
+"_Uploading %n file_::_Uploading %n files_" => array(""),
"Download" => "გადმოწერა"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files/l10n/ka_GE.php b/apps/files/l10n/ka_GE.php
index f6bf618106a..455e3211a55 100644
--- a/apps/files/l10n/ka_GE.php
+++ b/apps/files/l10n/ka_GE.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "დროებითი საქაღალდე არ არსებობს",
"Failed to write to disk" => "შეცდომა დისკზე ჩაწერისას",
"Not enough storage available" => "საცავში საკმარისი ადგილი არ არის",
+"Upload failed" => "ატვირთვა ვერ განხორციელდა",
"Invalid directory." => "დაუშვებელი დირექტორია.",
"Files" => "ფაილები",
"Unable to upload your file as it is a directory or has 0 bytes" => "თქვენი ფაილის ატვირთვა ვერ მოხერხდა. ის არის საქაღალდე და შეიცავს 0 ბაიტს",
@@ -21,7 +22,6 @@ $TRANSLATIONS = array(
"Error" => "შეცდომა",
"Share" => "გაზიარება",
"Delete permanently" => "სრულად წაშლა",
-"Delete" => "წაშლა",
"Rename" => "გადარქმევა",
"Pending" => "მოცდის რეჟიმში",
"{new_name} already exists" => "{new_name} უკვე არსებობს",
@@ -30,8 +30,9 @@ $TRANSLATIONS = array(
"cancel" => "უარყოფა",
"replaced {new_name} with {old_name}" => "{new_name} შეცვლილია {old_name}–ით",
"undo" => "დაბრუნება",
-"perform delete operation" => "მიმდინარეობს წაშლის ოპერაცია",
-"1 file uploading" => "1 ფაილის ატვირთვა",
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
+"_Uploading %n file_::_Uploading %n files_" => array(""),
"files uploading" => "ფაილები იტვირთება",
"'.' is an invalid file name." => "'.' არის დაუშვებელი ფაილის სახელი.",
"File name cannot be empty." => "ფაილის სახელი არ შეიძლება იყოს ცარიელი.",
@@ -39,14 +40,9 @@ $TRANSLATIONS = array(
"Your storage is full, files can not be updated or synced anymore!" => "თქვენი საცავი გადაივსო. ფაილების განახლება და სინქრონიზირება ვერ მოხერხდება!",
"Your storage is almost full ({usedSpacePercent}%)" => "თქვენი საცავი თითქმის გადაივსო ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "გადმოწერის მოთხოვნა მუშავდება. ის მოითხოვს გარკვეულ დროს რაგდან ფაილები არის დიდი ზომის.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "დაუშვებელი ფოლდერის სახელი. 'Shared'–ის გამოყენება რეზერვირებულია Owncloud–ის მიერ",
"Name" => "სახელი",
"Size" => "ზომა",
"Modified" => "შეცვლილია",
-"1 folder" => "1 საქაღალდე",
-"{count} folders" => "{count} საქაღალდე",
-"1 file" => "1 ფაილი",
-"{count} files" => "{count} ფაილი",
"Upload" => "ატვირთვა",
"File handling" => "ფაილის დამუშავება",
"Maximum upload size" => "მაქსიმუმ ატვირთის ზომა",
@@ -66,6 +62,7 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "აქ არაფერი არ არის. ატვირთე რამე!",
"Download" => "ჩამოტვირთვა",
"Unshare" => "გაუზიარებადი",
+"Delete" => "წაშლა",
"Upload too large" => "ასატვირთი ფაილი ძალიან დიდია",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "ფაილის ზომა რომლის ატვირთვასაც თქვენ აპირებთ, აჭარბებს სერვერზე დაშვებულ მაქსიმუმს.",
"Files are being scanned, please wait." => "მიმდინარეობს ფაილების სკანირება, გთხოვთ დაელოდოთ.",
diff --git a/apps/files/l10n/ko.php b/apps/files/l10n/ko.php
index d68fb162d07..e2b787e7f91 100644
--- a/apps/files/l10n/ko.php
+++ b/apps/files/l10n/ko.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "임시 폴더가 없음",
"Failed to write to disk" => "디스크에 쓰지 못했습니다",
"Not enough storage available" => "저장소가 용량이 충분하지 않습니다.",
+"Upload failed" => "업로드 실패",
"Invalid directory." => "올바르지 않은 디렉터리입니다.",
"Files" => "파일",
"Unable to upload your file as it is a directory or has 0 bytes" => "디렉터리 및 빈 파일은 업로드할 수 없습니다",
@@ -21,7 +22,6 @@ $TRANSLATIONS = array(
"Error" => "오류",
"Share" => "공유",
"Delete permanently" => "영원히 삭제",
-"Delete" => "삭제",
"Rename" => "이름 바꾸기",
"Pending" => "대기 중",
"{new_name} already exists" => "{new_name}이(가) 이미 존재함",
@@ -30,8 +30,9 @@ $TRANSLATIONS = array(
"cancel" => "취소",
"replaced {new_name} with {old_name}" => "{old_name}이(가) {new_name}(으)로 대체됨",
"undo" => "되돌리기",
-"perform delete operation" => "삭제 작업중",
-"1 file uploading" => "파일 1개 업로드 중",
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
+"_Uploading %n file_::_Uploading %n files_" => array(""),
"files uploading" => "파일 업로드중",
"'.' is an invalid file name." => "'.' 는 올바르지 않은 파일 이름 입니다.",
"File name cannot be empty." => "파일 이름이 비어 있을 수 없습니다.",
@@ -39,14 +40,9 @@ $TRANSLATIONS = array(
"Your storage is full, files can not be updated or synced anymore!" => "저장 공간이 가득 찼습니다. 파일을 업데이트하거나 동기화할 수 없습니다!",
"Your storage is almost full ({usedSpacePercent}%)" => "저장 공간이 거의 가득 찼습니다 ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "다운로드가 준비 중입니다. 파일 크기가 크다면 시간이 오래 걸릴 수도 있습니다.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "폴더 이름이 유효하지 않습니다. ",
"Name" => "이름",
"Size" => "크기",
"Modified" => "수정됨",
-"1 folder" => "폴더 1개",
-"{count} folders" => "폴더 {count}개",
-"1 file" => "파일 1개",
-"{count} files" => "파일 {count}개",
"Upload" => "업로드",
"File handling" => "파일 처리",
"Maximum upload size" => "최대 업로드 크기",
@@ -66,12 +62,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "내용이 없습니다. 업로드할 수 있습니다!",
"Download" => "다운로드",
"Unshare" => "공유 해제",
+"Delete" => "삭제",
"Upload too large" => "업로드한 파일이 너무 큼",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "이 파일이 서버에서 허용하는 최대 업로드 가능 용량보다 큽니다.",
"Files are being scanned, please wait." => "파일을 검색하고 있습니다. 기다려 주십시오.",
"Current scanning" => "현재 검색",
-"file" => "파일",
-"files" => "파일",
"Upgrading filesystem cache..." => "파일 시스템 캐시 업그레이드 중..."
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files/l10n/ku_IQ.php b/apps/files/l10n/ku_IQ.php
index ad85edaa0de..9ec565da441 100644
--- a/apps/files/l10n/ku_IQ.php
+++ b/apps/files/l10n/ku_IQ.php
@@ -2,6 +2,9 @@
$TRANSLATIONS = array(
"URL cannot be empty." => "ناونیشانی به‌سته‌ر نابێت به‌تاڵ بێت.",
"Error" => "هه‌ڵه",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
"Name" => "ناو",
"Upload" => "بارکردن",
"Save" => "پاشکه‌وتکردن",
diff --git a/apps/files/l10n/lb.php b/apps/files/l10n/lb.php
index 762d9189fb8..deefe9caa15 100644
--- a/apps/files/l10n/lb.php
+++ b/apps/files/l10n/lb.php
@@ -12,10 +12,12 @@ $TRANSLATIONS = array(
"File upload is in progress. Leaving the page now will cancel the upload." => "File Upload am gaang. Wann's de des Säit verléiss gëtt den Upload ofgebrach.",
"Error" => "Fehler",
"Share" => "Deelen",
-"Delete" => "Läschen",
"replace" => "ersetzen",
"cancel" => "ofbriechen",
"undo" => "réckgängeg man",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
"Name" => "Numm",
"Size" => "Gréisst",
"Modified" => "Geännert",
@@ -35,11 +37,10 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Hei ass näischt. Lued eppes rop!",
"Download" => "Download",
"Unshare" => "Net méi deelen",
+"Delete" => "Läschen",
"Upload too large" => "Upload ze grouss",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Déi Dateien déi Dir probéiert erop ze lueden sinn méi grouss wei déi Maximal Gréisst déi op dësem Server erlaabt ass.",
"Files are being scanned, please wait." => "Fichieren gi gescannt, war weg.",
-"Current scanning" => "Momentane Scan",
-"file" => "Datei",
-"files" => "Dateien"
+"Current scanning" => "Momentane Scan"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/lt_LT.php b/apps/files/l10n/lt_LT.php
index c2d0fee6e6e..0530adc2ae2 100644
--- a/apps/files/l10n/lt_LT.php
+++ b/apps/files/l10n/lt_LT.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Nėra laikinojo katalogo",
"Failed to write to disk" => "Nepavyko įrašyti į diską",
"Not enough storage available" => "Nepakanka vietos serveryje",
+"Upload failed" => "Nusiuntimas nepavyko",
"Invalid directory." => "Neteisingas aplankas",
"Files" => "Failai",
"Unable to upload your file as it is a directory or has 0 bytes" => "Neįmanoma įkelti failo - jo dydis gali būti 0 bitų arba tai katalogas",
@@ -22,7 +23,6 @@ $TRANSLATIONS = array(
"Error" => "Klaida",
"Share" => "Dalintis",
"Delete permanently" => "Ištrinti negrįžtamai",
-"Delete" => "Ištrinti",
"Rename" => "Pervadinti",
"Pending" => "Laukiantis",
"{new_name} already exists" => "{new_name} jau egzistuoja",
@@ -31,8 +31,9 @@ $TRANSLATIONS = array(
"cancel" => "atšaukti",
"replaced {new_name} with {old_name}" => "pakeiskite {new_name} į {old_name}",
"undo" => "anuliuoti",
-"perform delete operation" => "ištrinti",
-"1 file uploading" => "įkeliamas 1 failas",
+"_%n folder_::_%n folders_" => array("","",""),
+"_%n file_::_%n files_" => array("","",""),
+"_Uploading %n file_::_Uploading %n files_" => array("","",""),
"files uploading" => "įkeliami failai",
"'.' is an invalid file name." => "'.' yra neleidžiamas failo pavadinime.",
"File name cannot be empty." => "Failo pavadinimas negali būti tuščias.",
@@ -40,14 +41,9 @@ $TRANSLATIONS = array(
"Your storage is full, files can not be updated or synced anymore!" => "Jūsų visa vieta serveryje užimta",
"Your storage is almost full ({usedSpacePercent}%)" => "Jūsų vieta serveryje beveik visa užimta ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "Jūsų atsisiuntimas yra paruošiamas. tai gali užtrukti jei atsisiunčiamas didelis failas.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Negalimas aplanko pavadinimas. 'Shared' pavadinimas yra rezervuotas ownCloud",
"Name" => "Pavadinimas",
"Size" => "Dydis",
"Modified" => "Pakeista",
-"1 folder" => "1 aplankalas",
-"{count} folders" => "{count} aplankalai",
-"1 file" => "1 failas",
-"{count} files" => "{count} failai",
"Upload" => "Įkelti",
"File handling" => "Failų tvarkymas",
"Maximum upload size" => "Maksimalus įkeliamo failo dydis",
@@ -67,12 +63,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Čia tuščia. Įkelkite ką nors!",
"Download" => "Atsisiųsti",
"Unshare" => "Nebesidalinti",
+"Delete" => "Ištrinti",
"Upload too large" => "Įkėlimui failas per didelis",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Bandomų įkelti failų dydis viršija maksimalų, kuris leidžiamas šiame serveryje",
"Files are being scanned, please wait." => "Skenuojami failai, prašome palaukti.",
"Current scanning" => "Šiuo metu skenuojama",
-"file" => "failas",
-"files" => "failai",
"Upgrading filesystem cache..." => "Atnaujinamas sistemos kešavimas..."
);
$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/apps/files/l10n/lv.php b/apps/files/l10n/lv.php
index 24161cb2a69..d24aaca9e4c 100644
--- a/apps/files/l10n/lv.php
+++ b/apps/files/l10n/lv.php
@@ -2,6 +2,8 @@
$TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "Nevarēja pārvietot %s — jau eksistē datne ar tādu nosaukumu",
"Could not move %s" => "Nevarēja pārvietot %s",
+"Unable to set upload directory." => "Nevar uzstādīt augšupielādes mapi.",
+"Invalid Token" => "Nepareiza pilnvara",
"No file was uploaded. Unknown error" => "Netika augšupielādēta neviena datne. Nezināma kļūda",
"There is no error, the file uploaded with success" => "Viss kārtībā, datne augšupielādēta veiksmīga",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Augšupielādētā datne pārsniedz upload_max_filesize norādījumu php.ini datnē:",
@@ -11,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Trūkst pagaidu mapes",
"Failed to write to disk" => "Neizdevās saglabāt diskā",
"Not enough storage available" => "Nav pietiekami daudz vietas",
+"Upload failed" => "Neizdevās augšupielādēt",
"Invalid directory." => "Nederīga direktorija.",
"Files" => "Datnes",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nevar augšupielādēt jūsu datni, jo tā ir direktorija vai arī tā ir 0 baitu liela",
@@ -18,10 +21,10 @@ $TRANSLATIONS = array(
"Upload cancelled." => "Augšupielāde ir atcelta.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Notiek augšupielāde. Pametot lapu tagad, tiks atcelta augšupielāde.",
"URL cannot be empty." => "URL nevar būt tukšs.",
+"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "Kļūdains mapes nosaukums. 'Shared' lietošana ir rezervēta no ownCloud",
"Error" => "Kļūda",
"Share" => "Dalīties",
"Delete permanently" => "Dzēst pavisam",
-"Delete" => "Dzēst",
"Rename" => "Pārsaukt",
"Pending" => "Gaida savu kārtu",
"{new_name} already exists" => "{new_name} jau eksistē",
@@ -30,22 +33,21 @@ $TRANSLATIONS = array(
"cancel" => "atcelt",
"replaced {new_name} with {old_name}" => "aizvietoja {new_name} ar {old_name}",
"undo" => "atsaukt",
-"perform delete operation" => "veikt dzēšanas darbību",
-"1 file uploading" => "Augšupielādē 1 datni",
+"_%n folder_::_%n folders_" => array("%n mapes","%n mape","%n mapes"),
+"_%n file_::_%n files_" => array("%n faili","%n fails","%n faili"),
+"_Uploading %n file_::_Uploading %n files_" => array("%n","Augšupielāde %n failu","Augšupielāde %n failus"),
+"files uploading" => "fails augšupielādējas",
"'.' is an invalid file name." => "'.' ir nederīgs datnes nosaukums.",
"File name cannot be empty." => "Datnes nosaukums nevar būt tukšs.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nederīgs nosaukums, nav atļauti '\\', '/', '<', '>', ':', '\"', '|', '?' un '*'.",
"Your storage is full, files can not be updated or synced anymore!" => "Jūsu krātuve ir pilna, datnes vairs nevar augšupielādēt vai sinhronizēt!",
"Your storage is almost full ({usedSpacePercent}%)" => "Jūsu krātuve ir gandrīz pilna ({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Šifrēšana tika atslēgta, tomēr jūsu faili joprojām ir šifrēti. Atšifrēt failus var Personiskajos uzstādījumos.",
"Your download is being prepared. This might take some time if the files are big." => "Tiek sagatavota lejupielāde. Tas var aizņemt kādu laiciņu, ja datnes ir lielas.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nederīgs mapes nosaukums. “Koplietots” izmantojums ir rezervēts ownCloud servisam.",
"Name" => "Nosaukums",
"Size" => "Izmērs",
"Modified" => "Mainīts",
-"1 folder" => "1 mape",
-"{count} folders" => "{count} mapes",
-"1 file" => "1 datne",
-"{count} files" => "{count} datnes",
+"%s could not be renamed" => "%s nevar tikt pārsaukts",
"Upload" => "Augšupielādēt",
"File handling" => "Datņu pārvaldība",
"Maximum upload size" => "Maksimālais datņu augšupielādes apjoms",
@@ -65,12 +67,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Te vēl nekas nav. Rīkojies, sāc augšupielādēt!",
"Download" => "Lejupielādēt",
"Unshare" => "Pārtraukt dalīšanos",
+"Delete" => "Dzēst",
"Upload too large" => "Datne ir par lielu, lai to augšupielādētu",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Augšupielādējamās datnes pārsniedz servera pieļaujamo datņu augšupielādes apjomu",
"Files are being scanned, please wait." => "Datnes šobrīd tiek caurskatītas, lūdzu, uzgaidiet.",
"Current scanning" => "Šobrīd tiek caurskatīts",
-"file" => "fails",
-"files" => "faili",
"Upgrading filesystem cache..." => "Uzlabo datņu sistēmas kešatmiņu..."
);
$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);";
diff --git a/apps/files/l10n/mk.php b/apps/files/l10n/mk.php
index a922876553b..7a9a8641f80 100644
--- a/apps/files/l10n/mk.php
+++ b/apps/files/l10n/mk.php
@@ -15,7 +15,6 @@ $TRANSLATIONS = array(
"URL cannot be empty." => "Адресата неможе да биде празна.",
"Error" => "Грешка",
"Share" => "Сподели",
-"Delete" => "Избриши",
"Rename" => "Преименувај",
"Pending" => "Чека",
"{new_name} already exists" => "{new_name} веќе постои",
@@ -24,15 +23,13 @@ $TRANSLATIONS = array(
"cancel" => "откажи",
"replaced {new_name} with {old_name}" => "заменета {new_name} со {old_name}",
"undo" => "врати",
-"1 file uploading" => "1 датотека се подига",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Неправилно име. , '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' не се дозволени.",
"Name" => "Име",
"Size" => "Големина",
"Modified" => "Променето",
-"1 folder" => "1 папка",
-"{count} folders" => "{count} папки",
-"1 file" => "1 датотека",
-"{count} files" => "{count} датотеки",
"Upload" => "Подигни",
"File handling" => "Ракување со датотеки",
"Maximum upload size" => "Максимална големина за подигање",
@@ -50,11 +47,10 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Тука нема ништо. Снимете нешто!",
"Download" => "Преземи",
"Unshare" => "Не споделувај",
+"Delete" => "Избриши",
"Upload too large" => "Фајлот кој се вчитува е преголем",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Датотеките кои се обидувате да ги подигнете ја надминуваат максималната големина за подигнување датотеки на овој сервер.",
"Files are being scanned, please wait." => "Се скенираат датотеки, ве молам почекајте.",
-"Current scanning" => "Моментално скенирам",
-"file" => "датотека",
-"files" => "датотеки"
+"Current scanning" => "Моментално скенирам"
);
$PLURAL_FORMS = "nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;";
diff --git a/apps/files/l10n/ms_MY.php b/apps/files/l10n/ms_MY.php
index 48ef8587cab..59d0bbfb339 100644
--- a/apps/files/l10n/ms_MY.php
+++ b/apps/files/l10n/ms_MY.php
@@ -12,10 +12,12 @@ $TRANSLATIONS = array(
"Upload cancelled." => "Muatnaik dibatalkan.",
"Error" => "Ralat",
"Share" => "Kongsi",
-"Delete" => "Padam",
"Pending" => "Dalam proses",
"replace" => "ganti",
"cancel" => "Batal",
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
+"_Uploading %n file_::_Uploading %n files_" => array(""),
"Name" => "Nama",
"Size" => "Saiz",
"Modified" => "Dimodifikasi",
@@ -34,11 +36,10 @@ $TRANSLATIONS = array(
"Cancel upload" => "Batal muat naik",
"Nothing in here. Upload something!" => "Tiada apa-apa di sini. Muat naik sesuatu!",
"Download" => "Muat turun",
+"Delete" => "Padam",
"Upload too large" => "Muatnaik terlalu besar",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Fail yang cuba dimuat naik melebihi saiz maksimum fail upload server",
"Files are being scanned, please wait." => "Fail sedang diimbas, harap bersabar.",
-"Current scanning" => "Imbasan semasa",
-"file" => "fail",
-"files" => "fail"
+"Current scanning" => "Imbasan semasa"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files/l10n/my_MM.php b/apps/files/l10n/my_MM.php
index c94cc5fd6f4..497ecc09492 100644
--- a/apps/files/l10n/my_MM.php
+++ b/apps/files/l10n/my_MM.php
@@ -1,6 +1,9 @@
<?php
$TRANSLATIONS = array(
"Files" => "ဖိုင်များ",
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
+"_Uploading %n file_::_Uploading %n files_" => array(""),
"Download" => "ဒေါင်းလုတ်"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files/l10n/nb_NO.php b/apps/files/l10n/nb_NO.php
index 15104914fd8..55ce978d2a2 100644
--- a/apps/files/l10n/nb_NO.php
+++ b/apps/files/l10n/nb_NO.php
@@ -3,6 +3,7 @@ $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "Kan ikke flytte %s - En fil med samme navn finnes allerede",
"Could not move %s" => "Kunne ikke flytte %s",
"Unable to set upload directory." => "Kunne ikke sette opplastingskatalog.",
+"Invalid Token" => "Ugyldig nøkkel",
"No file was uploaded. Unknown error" => "Ingen filer ble lastet opp. Ukjent feil.",
"There is no error, the file uploaded with success" => "Pust ut, ingen feil. Filen ble lastet opp problemfritt",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Filstørrelsen overskrider maksgrensedirektivet upload_max_filesize i php.ini-konfigurasjonen.",
@@ -12,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Mangler midlertidig mappe",
"Failed to write to disk" => "Klarte ikke å skrive til disk",
"Not enough storage available" => "Ikke nok lagringsplass",
+"Upload failed" => "Opplasting feilet",
"Invalid directory." => "Ugyldig katalog.",
"Files" => "Filer",
"Unable to upload your file as it is a directory or has 0 bytes" => "Kan ikke laste opp filen din siden det er en mappe eller den har 0 bytes",
@@ -23,32 +25,28 @@ $TRANSLATIONS = array(
"Error" => "Feil",
"Share" => "Del",
"Delete permanently" => "Slett permanent",
-"Delete" => "Slett",
-"Rename" => "Omdøp",
+"Rename" => "Gi nytt navn",
"Pending" => "Ventende",
"{new_name} already exists" => "{new_name} finnes allerede",
"replace" => "erstatt",
"suggest name" => "foreslå navn",
"cancel" => "avbryt",
-"replaced {new_name} with {old_name}" => "erstatt {new_name} med {old_name}",
+"replaced {new_name} with {old_name}" => "erstattet {new_name} med {old_name}",
"undo" => "angre",
-"perform delete operation" => "utfør sletting",
-"1 file uploading" => "1 fil lastes opp",
+"_%n folder_::_%n folders_" => array("%n mappe","%n mapper"),
+"_%n file_::_%n files_" => array("%n fil","%n filer"),
+"_Uploading %n file_::_Uploading %n files_" => array("Laster opp %n fil","Laster opp %n filer"),
"files uploading" => "filer lastes opp",
"'.' is an invalid file name." => "'.' er et ugyldig filnavn.",
"File name cannot be empty." => "Filnavn kan ikke være tomt.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ugyldig navn, '\\', '/', '<', '>', ':', '\"', '|', '?' og '*' er ikke tillatt.",
"Your storage is full, files can not be updated or synced anymore!" => "Lagringsplass er oppbrukt, filer kan ikke lenger oppdateres eller synkroniseres!",
-"Your storage is almost full ({usedSpacePercent}%)" => "Lagringsplass er nesten oppbruker ([usedSpacePercent}%)",
+"Your storage is almost full ({usedSpacePercent}%)" => "Lagringsplass er nesten brukt opp ([usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "Nedlastingen din klargjøres. Hvis filene er store kan dette ta litt tid.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ugyldig mappenavn. Bruk av \"Shared\" er reservert av ownCloud.",
"Name" => "Navn",
"Size" => "Størrelse",
"Modified" => "Endret",
-"1 folder" => "1 mappe",
-"{count} folders" => "{count} mapper",
-"1 file" => "1 fil",
-"{count} files" => "{count} filer",
+"%s could not be renamed" => "Kunne ikke gi nytt navn til %s",
"Upload" => "Last opp",
"File handling" => "Filhåndtering",
"Maximum upload size" => "Maksimum opplastingsstørrelse",
@@ -68,14 +66,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Ingenting her. Last opp noe!",
"Download" => "Last ned",
"Unshare" => "Avslutt deling",
+"Delete" => "Slett",
"Upload too large" => "Filen er for stor",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filene du prøver å laste opp er for store for å laste opp til denne serveren.",
-"Files are being scanned, please wait." => "Skanner etter filer, vennligst vent.",
+"Files are being scanned, please wait." => "Skanner filer, vennligst vent.",
"Current scanning" => "Pågående skanning",
-"directory" => "katalog",
-"directories" => "kataloger",
-"file" => "fil",
-"files" => "filer",
"Upgrading filesystem cache..." => "Oppgraderer filsystemets mellomlager..."
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/nl.php b/apps/files/l10n/nl.php
index d0f6542f1fe..9fb13517369 100644
--- a/apps/files/l10n/nl.php
+++ b/apps/files/l10n/nl.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Er ontbreekt een tijdelijke map",
"Failed to write to disk" => "Schrijven naar schijf mislukt",
"Not enough storage available" => "Niet genoeg opslagruimte beschikbaar",
+"Upload failed" => "Upload mislukt",
"Invalid directory." => "Ongeldige directory.",
"Files" => "Bestanden",
"Unable to upload your file as it is a directory or has 0 bytes" => "Het lukt niet om uw bestand te uploaded, omdat het een folder of 0 bytes is",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Fout",
"Share" => "Delen",
"Delete permanently" => "Verwijder definitief",
-"Delete" => "Verwijder",
"Rename" => "Hernoem",
"Pending" => "In behandeling",
"{new_name} already exists" => "{new_name} bestaat al",
@@ -33,23 +33,20 @@ $TRANSLATIONS = array(
"cancel" => "annuleren",
"replaced {new_name} with {old_name}" => "verving {new_name} met {old_name}",
"undo" => "ongedaan maken",
-"perform delete operation" => "uitvoeren verwijderactie",
-"1 file uploading" => "1 bestand wordt ge-upload",
+"_%n folder_::_%n folders_" => array("","%n mappen"),
+"_%n file_::_%n files_" => array("","%n bestanden"),
+"_Uploading %n file_::_Uploading %n files_" => array("%n bestand aan het uploaden","%n bestanden aan het uploaden"),
"files uploading" => "bestanden aan het uploaden",
"'.' is an invalid file name." => "'.' is een ongeldige bestandsnaam.",
"File name cannot be empty." => "Bestandsnaam kan niet leeg zijn.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Onjuiste naam; '\\', '/', '<', '>', ':', '\"', '|', '?' en '*' zijn niet toegestaan.",
"Your storage is full, files can not be updated or synced anymore!" => "Uw opslagruimte zit vol, Bestanden kunnen niet meer worden ge-upload of gesynchroniseerd!",
"Your storage is almost full ({usedSpacePercent}%)" => "Uw opslagruimte zit bijna vol ({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Encryptie is uitgeschakeld maar uw bestanden zijn nog steeds versleuteld. Ga naar uw persoonlijke instellingen om uw bestanden te decoderen.",
"Your download is being prepared. This might take some time if the files are big." => "Uw download wordt voorbereid. Dit kan enige tijd duren bij grote bestanden.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ongeldige mapnaam. Gebruik van'Gedeeld' is voorbehouden aan Owncloud",
"Name" => "Naam",
"Size" => "Grootte",
"Modified" => "Aangepast",
-"1 folder" => "1 map",
-"{count} folders" => "{count} mappen",
-"1 file" => "1 bestand",
-"{count} files" => "{count} bestanden",
"%s could not be renamed" => "%s kon niet worden hernoemd",
"Upload" => "Uploaden",
"File handling" => "Bestand",
@@ -70,14 +67,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Er bevindt zich hier niets. Upload een bestand!",
"Download" => "Downloaden",
"Unshare" => "Stop met delen",
+"Delete" => "Verwijder",
"Upload too large" => "Upload is te groot",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "De bestanden die u probeert te uploaden zijn groter dan de maximaal toegestane bestandsgrootte voor deze server.",
"Files are being scanned, please wait." => "Bestanden worden gescand, even wachten.",
"Current scanning" => "Er wordt gescand",
-"directory" => "directory",
-"directories" => "directories",
-"file" => "bestand",
-"files" => "bestanden",
"Upgrading filesystem cache..." => "Upgraden bestandssysteem cache..."
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/nn_NO.php b/apps/files/l10n/nn_NO.php
index 2e1a5a5cfcb..b1f38057a88 100644
--- a/apps/files/l10n/nn_NO.php
+++ b/apps/files/l10n/nn_NO.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Manglar ei mellombels mappe",
"Failed to write to disk" => "Klarte ikkje skriva til disk",
"Not enough storage available" => "Ikkje nok lagringsplass tilgjengeleg",
+"Upload failed" => "Feil ved opplasting",
"Invalid directory." => "Ugyldig mappe.",
"Files" => "Filer",
"Unable to upload your file as it is a directory or has 0 bytes" => "Klarte ikkje lasta opp fila sidan ho er ei mappe eller er på 0 byte",
@@ -22,7 +23,6 @@ $TRANSLATIONS = array(
"Error" => "Feil",
"Share" => "Del",
"Delete permanently" => "Slett for godt",
-"Delete" => "Slett",
"Rename" => "Endra namn",
"Pending" => "Under vegs",
"{new_name} already exists" => "{new_name} finst allereie",
@@ -31,8 +31,9 @@ $TRANSLATIONS = array(
"cancel" => "avbryt",
"replaced {new_name} with {old_name}" => "bytte ut {new_name} med {old_name}",
"undo" => "angre",
-"perform delete operation" => "utfør sletting",
-"1 file uploading" => "1 fil lastar opp",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
"files uploading" => "filer lastar opp",
"'.' is an invalid file name." => "«.» er eit ugyldig filnamn.",
"File name cannot be empty." => "Filnamnet kan ikkje vera tomt.",
@@ -40,14 +41,9 @@ $TRANSLATIONS = array(
"Your storage is full, files can not be updated or synced anymore!" => "Lagringa di er full, kan ikkje lenger oppdatera eller synkronisera!",
"Your storage is almost full ({usedSpacePercent}%)" => "Lagringa di er nesten full ({usedSpacePercent} %)",
"Your download is being prepared. This might take some time if the files are big." => "Gjer klar nedlastinga di. Dette kan ta ei stund viss filene er store.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ugyldig mappenamn. Mappa «Shared» er reservert av ownCloud",
"Name" => "Namn",
"Size" => "Storleik",
"Modified" => "Endra",
-"1 folder" => "1 mappe",
-"{count} folders" => "{count} mapper",
-"1 file" => "1 fil",
-"{count} files" => "{count} filer",
"Upload" => "Last opp",
"File handling" => "Filhandtering",
"Maximum upload size" => "Maksimal opplastingsstorleik",
@@ -67,6 +63,7 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Ingenting her. Last noko opp!",
"Download" => "Last ned",
"Unshare" => "Udel",
+"Delete" => "Slett",
"Upload too large" => "For stor opplasting",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filene du prøver å lasta opp er større enn maksgrensa til denne tenaren.",
"Files are being scanned, please wait." => "Skannar filer, ver venleg og vent.",
diff --git a/apps/files/l10n/oc.php b/apps/files/l10n/oc.php
index 382a4b2158b..63e572059bf 100644
--- a/apps/files/l10n/oc.php
+++ b/apps/files/l10n/oc.php
@@ -12,14 +12,15 @@ $TRANSLATIONS = array(
"File upload is in progress. Leaving the page now will cancel the upload." => "Un amontcargar es a se far. Daissar aquesta pagina ara tamparà lo cargament. ",
"Error" => "Error",
"Share" => "Parteja",
-"Delete" => "Escafa",
"Rename" => "Torna nomenar",
"Pending" => "Al esperar",
"replace" => "remplaça",
"suggest name" => "nom prepausat",
"cancel" => "anulla",
"undo" => "defar",
-"1 file uploading" => "1 fichièr al amontcargar",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
"files uploading" => "fichièrs al amontcargar",
"Name" => "Nom",
"Size" => "Talha",
@@ -40,11 +41,10 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Pas res dedins. Amontcarga qualquaren",
"Download" => "Avalcarga",
"Unshare" => "Pas partejador",
+"Delete" => "Escafa",
"Upload too large" => "Amontcargament tròp gròs",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Los fichièrs que sias a amontcargar son tròp pesucs per la talha maxi pel servidor.",
"Files are being scanned, please wait." => "Los fiichièrs son a èsser explorats, ",
-"Current scanning" => "Exploracion en cors",
-"file" => "fichièr",
-"files" => "fichièrs"
+"Current scanning" => "Exploracion en cors"
);
$PLURAL_FORMS = "nplurals=2; plural=(n > 1);";
diff --git a/apps/files/l10n/pl.php b/apps/files/l10n/pl.php
index fc37234fc66..4b22b080b28 100644
--- a/apps/files/l10n/pl.php
+++ b/apps/files/l10n/pl.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Brak folderu tymczasowego",
"Failed to write to disk" => "Błąd zapisu na dysk",
"Not enough storage available" => "Za mało dostępnego miejsca",
+"Upload failed" => "Wysyłanie nie powiodło się",
"Invalid directory." => "Zła ścieżka.",
"Files" => "Pliki",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nie można wczytać pliku, ponieważ jest on katalogiem lub ma 0 bajtów",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Błąd",
"Share" => "Udostępnij",
"Delete permanently" => "Trwale usuń",
-"Delete" => "Usuń",
"Rename" => "Zmień nazwę",
"Pending" => "Oczekujące",
"{new_name} already exists" => "{new_name} już istnieje",
@@ -33,8 +33,9 @@ $TRANSLATIONS = array(
"cancel" => "anuluj",
"replaced {new_name} with {old_name}" => "zastąpiono {new_name} przez {old_name}",
"undo" => "cofnij",
-"perform delete operation" => "wykonaj operację usunięcia",
-"1 file uploading" => "1 plik wczytywany",
+"_%n folder_::_%n folders_" => array("","",""),
+"_%n file_::_%n files_" => array("","",""),
+"_Uploading %n file_::_Uploading %n files_" => array("","",""),
"files uploading" => "pliki wczytane",
"'.' is an invalid file name." => "„.” jest nieprawidłową nazwą pliku.",
"File name cannot be empty." => "Nazwa pliku nie może być pusta.",
@@ -42,14 +43,9 @@ $TRANSLATIONS = array(
"Your storage is full, files can not be updated or synced anymore!" => "Magazyn jest pełny. Pliki nie mogą zostać zaktualizowane lub zsynchronizowane!",
"Your storage is almost full ({usedSpacePercent}%)" => "Twój magazyn jest prawie pełny ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "Pobieranie jest przygotowywane. Może to zająć trochę czasu jeśli pliki są duże.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nieprawidłowa nazwa folderu. Korzystanie z nazwy „Shared” jest zarezerwowane dla ownCloud",
"Name" => "Nazwa",
"Size" => "Rozmiar",
"Modified" => "Modyfikacja",
-"1 folder" => "1 folder",
-"{count} folders" => "Ilość folderów: {count}",
-"1 file" => "1 plik",
-"{count} files" => "Ilość plików: {count}",
"%s could not be renamed" => "%s nie można zmienić nazwy",
"Upload" => "Wyślij",
"File handling" => "Zarządzanie plikami",
@@ -70,14 +66,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Pusto. Wyślij coś!",
"Download" => "Pobierz",
"Unshare" => "Zatrzymaj współdzielenie",
+"Delete" => "Usuń",
"Upload too large" => "Ładowany plik jest za duży",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Pliki, które próbujesz przesłać, przekraczają maksymalną dopuszczalną wielkość.",
"Files are being scanned, please wait." => "Skanowanie plików, proszę czekać.",
"Current scanning" => "Aktualnie skanowane",
-"directory" => "Katalog",
-"directories" => "Katalogi",
-"file" => "plik",
-"files" => "pliki",
"Upgrading filesystem cache..." => "Uaktualnianie plików pamięci podręcznej..."
);
$PLURAL_FORMS = "nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/apps/files/l10n/pt_BR.php b/apps/files/l10n/pt_BR.php
index 421de07c2b7..de9644bd588 100644
--- a/apps/files/l10n/pt_BR.php
+++ b/apps/files/l10n/pt_BR.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Pasta temporária não encontrada",
"Failed to write to disk" => "Falha ao escrever no disco",
"Not enough storage available" => "Espaço de armazenamento insuficiente",
+"Upload failed" => "Falha no envio",
"Invalid directory." => "Diretório inválido.",
"Files" => "Arquivos",
"Unable to upload your file as it is a directory or has 0 bytes" => "Impossível enviar seus arquivo por ele ser um diretório ou ter 0 bytes.",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Erro",
"Share" => "Compartilhar",
"Delete permanently" => "Excluir permanentemente",
-"Delete" => "Excluir",
"Rename" => "Renomear",
"Pending" => "Pendente",
"{new_name} already exists" => "{new_name} já existe",
@@ -33,23 +33,21 @@ $TRANSLATIONS = array(
"cancel" => "cancelar",
"replaced {new_name} with {old_name}" => "Substituído {old_name} por {new_name} ",
"undo" => "desfazer",
-"perform delete operation" => "realizar operação de exclusão",
-"1 file uploading" => "enviando 1 arquivo",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"{dirs} and {files}" => "{dirs} e {files}",
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
"files uploading" => "enviando arquivos",
"'.' is an invalid file name." => "'.' é um nome de arquivo inválido.",
"File name cannot be empty." => "O nome do arquivo não pode estar vazio.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome inválido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' não são permitidos.",
"Your storage is full, files can not be updated or synced anymore!" => "Seu armazenamento está cheio, arquivos não podem mais ser atualizados ou sincronizados!",
"Your storage is almost full ({usedSpacePercent}%)" => "Seu armazenamento está quase cheio ({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Encriptação foi desabilitada mas seus arquivos continuam encriptados. Por favor vá a suas configurações pessoais para descriptar seus arquivos.",
"Your download is being prepared. This might take some time if the files are big." => "Seu download está sendo preparado. Isto pode levar algum tempo se os arquivos forem grandes.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nome de pasta inválido. O uso de 'Shared' é reservado para o Owncloud",
"Name" => "Nome",
"Size" => "Tamanho",
"Modified" => "Modificado",
-"1 folder" => "1 pasta",
-"{count} folders" => "{count} pastas",
-"1 file" => "1 arquivo",
-"{count} files" => "{count} arquivos",
"%s could not be renamed" => "%s não pode ser renomeado",
"Upload" => "Upload",
"File handling" => "Tratamento de Arquivo",
@@ -70,14 +68,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Nada aqui.Carrege alguma coisa!",
"Download" => "Baixar",
"Unshare" => "Descompartilhar",
+"Delete" => "Excluir",
"Upload too large" => "Upload muito grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os arquivos que você está tentando carregar excedeu o tamanho máximo para arquivos no servidor.",
"Files are being scanned, please wait." => "Arquivos sendo escaneados, por favor aguarde.",
"Current scanning" => "Scanning atual",
-"directory" => "diretório",
-"directories" => "diretórios",
-"file" => "arquivo",
-"files" => "arquivos",
"Upgrading filesystem cache..." => "Atualizando cache do sistema de arquivos..."
);
$PLURAL_FORMS = "nplurals=2; plural=(n > 1);";
diff --git a/apps/files/l10n/pt_PT.php b/apps/files/l10n/pt_PT.php
index c9b98bbed49..33ec8cddce6 100644
--- a/apps/files/l10n/pt_PT.php
+++ b/apps/files/l10n/pt_PT.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Está a faltar a pasta temporária",
"Failed to write to disk" => "Falhou a escrita no disco",
"Not enough storage available" => "Não há espaço suficiente em disco",
+"Upload failed" => "Carregamento falhou",
"Invalid directory." => "Directório Inválido",
"Files" => "Ficheiros",
"Unable to upload your file as it is a directory or has 0 bytes" => "Não é possível fazer o envio do ficheiro devido a ser uma pasta ou ter 0 bytes",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Erro",
"Share" => "Partilhar",
"Delete permanently" => "Eliminar permanentemente",
-"Delete" => "Eliminar",
"Rename" => "Renomear",
"Pending" => "Pendente",
"{new_name} already exists" => "O nome {new_name} já existe",
@@ -33,23 +33,21 @@ $TRANSLATIONS = array(
"cancel" => "cancelar",
"replaced {new_name} with {old_name}" => "substituido {new_name} por {old_name}",
"undo" => "desfazer",
-"perform delete operation" => "Executar a tarefa de apagar",
-"1 file uploading" => "A enviar 1 ficheiro",
+"_%n folder_::_%n folders_" => array("%n pasta","%n pastas"),
+"_%n file_::_%n files_" => array("%n ficheiro","%n ficheiros"),
+"{dirs} and {files}" => "{dirs} e {files}",
+"_Uploading %n file_::_Uploading %n files_" => array("A carregar %n ficheiro","A carregar %n ficheiros"),
"files uploading" => "A enviar os ficheiros",
"'.' is an invalid file name." => "'.' não é um nome de ficheiro válido!",
"File name cannot be empty." => "O nome do ficheiro não pode estar vazio.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome Inválido, os caracteres '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' não são permitidos.",
"Your storage is full, files can not be updated or synced anymore!" => "O seu armazenamento está cheio, os ficheiros não podem ser sincronizados.",
"Your storage is almost full ({usedSpacePercent}%)" => "O seu espaço de armazenamento está quase cheiro ({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "A encriptação foi desactivada mas os seus ficheiros continuam encriptados. Por favor consulte as suas definições pessoais para desencriptar os ficheiros.",
"Your download is being prepared. This might take some time if the files are big." => "O seu download está a ser preparado. Este processo pode demorar algum tempo se os ficheiros forem grandes.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nome de pasta inválido. O Uso de 'shared' é reservado para o ownCloud",
"Name" => "Nome",
"Size" => "Tamanho",
"Modified" => "Modificado",
-"1 folder" => "1 pasta",
-"{count} folders" => "{count} pastas",
-"1 file" => "1 ficheiro",
-"{count} files" => "{count} ficheiros",
"%s could not be renamed" => "%s não pode ser renomeada",
"Upload" => "Carregar",
"File handling" => "Manuseamento de ficheiros",
@@ -70,14 +68,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Vazio. Envie alguma coisa!",
"Download" => "Transferir",
"Unshare" => "Deixar de partilhar",
+"Delete" => "Eliminar",
"Upload too large" => "Upload muito grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os ficheiro que está a tentar enviar excedem o tamanho máximo de envio neste servidor.",
"Files are being scanned, please wait." => "Os ficheiros estão a ser analisados, por favor aguarde.",
"Current scanning" => "Análise actual",
-"directory" => "diretório",
-"directories" => "diretórios",
-"file" => "ficheiro",
-"files" => "ficheiros",
"Upgrading filesystem cache..." => "Atualizar cache do sistema de ficheiros..."
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/ro.php b/apps/files/l10n/ro.php
index c9b340ff9be..59f6cc68499 100644
--- a/apps/files/l10n/ro.php
+++ b/apps/files/l10n/ro.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Lipsește un director temporar",
"Failed to write to disk" => "Eroare la scriere pe disc",
"Not enough storage available" => "Nu este suficient spațiu disponibil",
+"Upload failed" => "Încărcarea a eșuat",
"Invalid directory." => "Director invalid.",
"Files" => "Fișiere",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nu s-a putut încărca fișierul tău deoarece pare să fie un director sau are 0 bytes.",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Eroare",
"Share" => "Partajează",
"Delete permanently" => "Stergere permanenta",
-"Delete" => "Șterge",
"Rename" => "Redenumire",
"Pending" => "În așteptare",
"{new_name} already exists" => "{new_name} deja exista",
@@ -33,8 +33,9 @@ $TRANSLATIONS = array(
"cancel" => "anulare",
"replaced {new_name} with {old_name}" => "{new_name} inlocuit cu {old_name}",
"undo" => "Anulează ultima acțiune",
-"perform delete operation" => "efectueaza operatiunea de stergere",
-"1 file uploading" => "un fișier se încarcă",
+"_%n folder_::_%n folders_" => array("","",""),
+"_%n file_::_%n files_" => array("","",""),
+"_Uploading %n file_::_Uploading %n files_" => array("","",""),
"files uploading" => "fișiere se încarcă",
"'.' is an invalid file name." => "'.' este un nume invalid de fișier.",
"File name cannot be empty." => "Numele fișierului nu poate rămâne gol.",
@@ -42,14 +43,9 @@ $TRANSLATIONS = array(
"Your storage is full, files can not be updated or synced anymore!" => "Spatiul de stocare este plin, nu mai puteti incarca s-au sincroniza alte fisiere.",
"Your storage is almost full ({usedSpacePercent}%)" => "Spatiul de stocare este aproape plin ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "Se pregătește descărcarea. Aceasta poate să dureze ceva timp dacă fișierele sunt mari.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Invalid folder name. Usage of 'Shared' is reserved by Ownclou",
"Name" => "Nume",
"Size" => "Dimensiune",
"Modified" => "Modificat",
-"1 folder" => "1 folder",
-"{count} folders" => "{count} foldare",
-"1 file" => "1 fisier",
-"{count} files" => "{count} fisiere",
"%s could not be renamed" => "%s nu a putut fi redenumit",
"Upload" => "Încărcare",
"File handling" => "Manipulare fișiere",
@@ -70,14 +66,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Nimic aici. Încarcă ceva!",
"Download" => "Descarcă",
"Unshare" => "Anulare partajare",
+"Delete" => "Șterge",
"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șierul care l-ai încărcat a depășită limita maximă admisă la încărcare pe acest server.",
"Files are being scanned, please wait." => "Fișierele sunt scanate, te rog așteptă.",
"Current scanning" => "În curs de scanare",
-"directory" => "catalog",
-"directories" => "cataloage",
-"file" => "fișier",
-"files" => "fișiere",
"Upgrading filesystem cache..." => "Modernizare fisiere de sistem cache.."
);
$PLURAL_FORMS = "nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));";
diff --git a/apps/files/l10n/ru.php b/apps/files/l10n/ru.php
index 4d3bec02742..96f52a9045c 100644
--- a/apps/files/l10n/ru.php
+++ b/apps/files/l10n/ru.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Отсутствует временная папка",
"Failed to write to disk" => "Ошибка записи на диск",
"Not enough storage available" => "Недостаточно доступного места в хранилище",
+"Upload failed" => "Ошибка загрузки",
"Invalid directory." => "Неправильный каталог.",
"Files" => "Файлы",
"Unable to upload your file as it is a directory or has 0 bytes" => "Файл не был загружен: его размер 0 байт либо это не файл, а директория.",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Ошибка",
"Share" => "Открыть доступ",
"Delete permanently" => "Удалено навсегда",
-"Delete" => "Удалить",
"Rename" => "Переименовать",
"Pending" => "Ожидание",
"{new_name} already exists" => "{new_name} уже существует",
@@ -33,8 +33,9 @@ $TRANSLATIONS = array(
"cancel" => "отмена",
"replaced {new_name} with {old_name}" => "заменено {new_name} на {old_name}",
"undo" => "отмена",
-"perform delete operation" => "выполнить операцию удаления",
-"1 file uploading" => "загружается 1 файл",
+"_%n folder_::_%n folders_" => array("%n папка","%n папки","%n папок"),
+"_%n file_::_%n files_" => array("%n файл","%n файла","%n файлов"),
+"_Uploading %n file_::_Uploading %n files_" => array("Закачка %n файла","Закачка %n файлов","Закачка %n файлов"),
"files uploading" => "файлы загружаются",
"'.' is an invalid file name." => "'.' - неправильное имя файла.",
"File name cannot be empty." => "Имя файла не может быть пустым.",
@@ -42,14 +43,9 @@ $TRANSLATIONS = array(
"Your storage is full, files can not be updated or synced anymore!" => "Ваше дисковое пространство полностью заполнено, произведите очистку перед загрузкой новых файлов.",
"Your storage is almost full ({usedSpacePercent}%)" => "Ваше хранилище почти заполнено ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "Загрузка началась. Это может потребовать много времени, если файл большого размера.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Неправильное имя каталога. Имя 'Shared' зарезервировано.",
"Name" => "Имя",
"Size" => "Размер",
"Modified" => "Изменён",
-"1 folder" => "1 папка",
-"{count} folders" => "{count} папок",
-"1 file" => "1 файл",
-"{count} files" => "{count} файлов",
"%s could not be renamed" => "%s не может быть переименован",
"Upload" => "Загрузка",
"File handling" => "Управление файлами",
@@ -70,14 +66,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Здесь ничего нет. Загрузите что-нибудь!",
"Download" => "Скачать",
"Unshare" => "Закрыть общий доступ",
+"Delete" => "Удалить",
"Upload too large" => "Файл слишком велик",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Файлы, которые вы пытаетесь загрузить, превышают лимит для файлов на этом сервере.",
"Files are being scanned, please wait." => "Подождите, файлы сканируются.",
"Current scanning" => "Текущее сканирование",
-"directory" => "директория",
-"directories" => "директории",
-"file" => "файл",
-"files" => "файлы",
"Upgrading filesystem cache..." => "Обновление кэша файловой системы..."
);
$PLURAL_FORMS = "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/ru_RU.php b/apps/files/l10n/ru_RU.php
deleted file mode 100644
index bbc06fe1a5c..00000000000
--- a/apps/files/l10n/ru_RU.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"No file was uploaded. Unknown error" => "Файл не был загружен. Неизвестная ошибка",
-"There is no error, the file uploaded with success" => "Ошибки нет, файл успешно загружен",
-"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" => "Файл не был загружен",
-"Missing a temporary folder" => "Отсутствие временной папки",
-"Failed to write to disk" => "Не удалось записать на диск",
-"Not enough storage available" => "Недостаточно места в хранилище",
-"Share" => "Сделать общим",
-"Delete" => "Удалить",
-"Error" => "Ошибка",
-"Name" => "Имя",
-"Save" => "Сохранить",
-"Download" => "Загрузка"
-);
-$PLURAL_FORMS = "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/si_LK.php b/apps/files/l10n/si_LK.php
index 4f576af17e5..1fd18d0c56f 100644
--- a/apps/files/l10n/si_LK.php
+++ b/apps/files/l10n/si_LK.php
@@ -7,24 +7,24 @@ $TRANSLATIONS = array(
"No file was uploaded" => "ගොනුවක් උඩුගත නොවුණි",
"Missing a temporary folder" => "තාවකාලික ෆොල්ඩරයක් අතුරුදහන්",
"Failed to write to disk" => "තැටිගත කිරීම අසාර්ථකයි",
+"Upload failed" => "උඩුගත කිරීම අසාර්ථකයි",
"Files" => "ගොනු",
"Upload cancelled." => "උඩුගත කිරීම අත් හරින්න ලදී",
"File upload is in progress. Leaving the page now will cancel the upload." => "උඩුගතකිරීමක් සිදුවේ. පිටුව හැර යාමෙන් එය නැවතෙනු ඇත",
"URL cannot be empty." => "යොමුව හිස් විය නොහැක",
"Error" => "දෝෂයක්",
"Share" => "බෙදා හදා ගන්න",
-"Delete" => "මකා දමන්න",
"Rename" => "නැවත නම් කරන්න",
"replace" => "ප්‍රතිස්ථාපනය කරන්න",
"suggest name" => "නමක් යෝජනා කරන්න",
"cancel" => "අත් හරින්න",
"undo" => "නිෂ්ප්‍රභ කරන්න",
-"1 file uploading" => "1 ගොනුවක් උඩගත කෙරේ",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
"Name" => "නම",
"Size" => "ප්‍රමාණය",
"Modified" => "වෙනස් කළ",
-"1 folder" => "1 ෆොල්ඩරයක්",
-"1 file" => "1 ගොනුවක්",
"Upload" => "උඩුගත කරන්න",
"File handling" => "ගොනු පරිහරණය",
"Maximum upload size" => "උඩුගත කිරීමක උපරිම ප්‍රමාණය",
@@ -42,11 +42,10 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "මෙහි කිසිවක් නොමැත. යමක් උඩුගත කරන්න",
"Download" => "බාන්න",
"Unshare" => "නොබෙදු",
+"Delete" => "මකා දමන්න",
"Upload too large" => "උඩුගත කිරීම විශාල වැඩිය",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "ඔබ උඩුගත කිරීමට තැත් කරන ගොනු මෙම සේවාදායකයා උඩුගත කිරීමට ඉඩදී ඇති උපරිම ගොනු විශාලත්වයට වඩා වැඩිය",
"Files are being scanned, please wait." => "ගොනු පරික්ෂා කෙරේ. මඳක් රැඳී සිටින්න",
-"Current scanning" => "වර්තමාන පරික්ෂාව",
-"file" => "ගොනුව",
-"files" => "ගොනු"
+"Current scanning" => "වර්තමාන පරික්ෂාව"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/sk_SK.php b/apps/files/l10n/sk_SK.php
index f0220822d0a..b30f263d244 100644
--- a/apps/files/l10n/sk_SK.php
+++ b/apps/files/l10n/sk_SK.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Chýba dočasný priečinok",
"Failed to write to disk" => "Zápis na disk sa nepodaril",
"Not enough storage available" => "Nedostatok dostupného úložného priestoru",
+"Upload failed" => "Odoslanie bolo neúspešné",
"Invalid directory." => "Neplatný priečinok.",
"Files" => "Súbory",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nedá sa odoslať Váš súbor, pretože je to priečinok, alebo je jeho veľkosť 0 bajtov",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Chyba",
"Share" => "Zdieľať",
"Delete permanently" => "Zmazať trvalo",
-"Delete" => "Zmazať",
"Rename" => "Premenovať",
"Pending" => "Prebieha",
"{new_name} already exists" => "{new_name} už existuje",
@@ -33,23 +33,20 @@ $TRANSLATIONS = array(
"cancel" => "zrušiť",
"replaced {new_name} with {old_name}" => "prepísaný {new_name} súborom {old_name}",
"undo" => "vrátiť",
-"perform delete operation" => "vykonať zmazanie",
-"1 file uploading" => "1 súbor sa posiela ",
+"_%n folder_::_%n folders_" => array("%n priečinok","%n priečinky","%n priečinkov"),
+"_%n file_::_%n files_" => array("%n súbor","%n súbory","%n súborov"),
+"_Uploading %n file_::_Uploading %n files_" => array("Nahrávam %n súbor","Nahrávam %n súbory","Nahrávam %n súborov"),
"files uploading" => "nahrávanie súborov",
"'.' is an invalid file name." => "'.' je neplatné meno súboru.",
"File name cannot be empty." => "Meno súboru nemôže byť prázdne",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nesprávne meno, '\\', '/', '<', '>', ':', '\"', '|', '?' a '*' nie sú povolené hodnoty.",
"Your storage is full, files can not be updated or synced anymore!" => "Vaše úložisko je plné. Súbory nemožno aktualizovať ani synchronizovať!",
"Your storage is almost full ({usedSpacePercent}%)" => "Vaše úložisko je takmer plné ({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Šifrovanie bolo zakázané, ale vaše súbory sú stále zašifrované. Prosím, choďte do osobného nastavenia pre dešifrovanie súborov.",
"Your download is being prepared. This might take some time if the files are big." => "Vaše sťahovanie sa pripravuje. Ak sú sťahované súbory veľké, môže to chvíľu trvať.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Neplatné meno priečinka. Používanie mena 'Shared' je vyhradené len pre Owncloud",
"Name" => "Názov",
"Size" => "Veľkosť",
"Modified" => "Upravené",
-"1 folder" => "1 priečinok",
-"{count} folders" => "{count} priečinkov",
-"1 file" => "1 súbor",
-"{count} files" => "{count} súborov",
"%s could not be renamed" => "%s nemohol byť premenovaný",
"Upload" => "Odoslať",
"File handling" => "Nastavenie správania sa k súborom",
@@ -70,14 +67,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Žiadny súbor. Nahrajte niečo!",
"Download" => "Sťahovanie",
"Unshare" => "Zrušiť zdieľanie",
+"Delete" => "Zmazať",
"Upload too large" => "Nahrávanie je príliš veľké",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Súbory, ktoré sa snažíte nahrať, presahujú maximálnu veľkosť pre nahratie súborov na tento server.",
"Files are being scanned, please wait." => "Čakajte, súbory sú prehľadávané.",
"Current scanning" => "Práve prezerané",
-"directory" => "priečinok",
-"directories" => "priečinky",
-"file" => "súbor",
-"files" => "súbory",
"Upgrading filesystem cache..." => "Aktualizujem medzipamäť súborového systému..."
);
$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/apps/files/l10n/sl.php b/apps/files/l10n/sl.php
index 85daabf6cf1..08f789ff866 100644
--- a/apps/files/l10n/sl.php
+++ b/apps/files/l10n/sl.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Manjka začasna mapa",
"Failed to write to disk" => "Pisanje na disk je spodletelo",
"Not enough storage available" => "Na voljo ni dovolj prostora",
+"Upload failed" => "Pošiljanje je spodletelo",
"Invalid directory." => "Neveljavna mapa.",
"Files" => "Datoteke",
"Unable to upload your file as it is a directory or has 0 bytes" => "Pošiljanja ni mogoče izvesti, saj gre za mapo oziroma datoteko velikosti 0 bajtov.",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Napaka",
"Share" => "Souporaba",
"Delete permanently" => "Izbriši dokončno",
-"Delete" => "Izbriši",
"Rename" => "Preimenuj",
"Pending" => "V čakanju ...",
"{new_name} already exists" => "{new_name} že obstaja",
@@ -33,8 +33,9 @@ $TRANSLATIONS = array(
"cancel" => "prekliči",
"replaced {new_name} with {old_name}" => "preimenovano ime {new_name} z imenom {old_name}",
"undo" => "razveljavi",
-"perform delete operation" => "izvedi opravilo brisanja",
-"1 file uploading" => "Pošiljanje 1 datoteke",
+"_%n folder_::_%n folders_" => array("","","",""),
+"_%n file_::_%n files_" => array("","","",""),
+"_Uploading %n file_::_Uploading %n files_" => array("","","",""),
"files uploading" => "poteka pošiljanje datotek",
"'.' is an invalid file name." => "'.' je neveljavno ime datoteke.",
"File name cannot be empty." => "Ime datoteke ne sme biti prazno polje.",
@@ -42,14 +43,9 @@ $TRANSLATIONS = array(
"Your storage is full, files can not be updated or synced anymore!" => "Shramba je povsem napolnjena. Datotek ni več mogoče posodabljati in usklajevati!",
"Your storage is almost full ({usedSpacePercent}%)" => "Mesto za shranjevanje je skoraj polno ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "Postopek priprave datoteke za prejem je lahko dolgotrajen, če je datoteka zelo velika.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Neveljavno ime mape. Uporaba oznake \"Souporaba\" je zadržan za sistem ownCloud.",
"Name" => "Ime",
"Size" => "Velikost",
"Modified" => "Spremenjeno",
-"1 folder" => "1 mapa",
-"{count} folders" => "{count} map",
-"1 file" => "1 datoteka",
-"{count} files" => "{count} datotek",
"%s could not be renamed" => "%s ni bilo mogoče preimenovati",
"Upload" => "Pošlji",
"File handling" => "Upravljanje z datotekami",
@@ -70,14 +66,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Tukaj še ni ničesar. Najprej je treba kakšno datoteko poslati v oblak!",
"Download" => "Prejmi",
"Unshare" => "Prekliči souporabo",
+"Delete" => "Izbriši",
"Upload too large" => "Prekoračenje omejitve velikosti",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Datoteke, ki jih želite poslati, presegajo največjo dovoljeno velikost na strežniku.",
"Files are being scanned, please wait." => "Poteka preučevanje datotek, počakajte ...",
"Current scanning" => "Trenutno poteka preučevanje",
-"directory" => "direktorij",
-"directories" => "direktoriji",
-"file" => "datoteka",
-"files" => "datoteke",
"Upgrading filesystem cache..." => "Nadgrajevanje predpomnilnika datotečnega sistema ..."
);
$PLURAL_FORMS = "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);";
diff --git a/apps/files/l10n/sq.php b/apps/files/l10n/sq.php
index 91f53fc00bb..ff09e7b4f95 100644
--- a/apps/files/l10n/sq.php
+++ b/apps/files/l10n/sq.php
@@ -21,7 +21,6 @@ $TRANSLATIONS = array(
"Error" => "Veprim i gabuar",
"Share" => "Nda",
"Delete permanently" => "Elimino përfundimisht",
-"Delete" => "Elimino",
"Rename" => "Riemërto",
"Pending" => "Pezulluar",
"{new_name} already exists" => "{new_name} ekziston",
@@ -30,8 +29,9 @@ $TRANSLATIONS = array(
"cancel" => "anulo",
"replaced {new_name} with {old_name}" => "U zëvëndësua {new_name} me {old_name}",
"undo" => "anulo",
-"perform delete operation" => "ekzekuto operacionin e eliminimit",
-"1 file uploading" => "Po ngarkohet 1 skedar",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
"files uploading" => "po ngarkoj skedarët",
"'.' is an invalid file name." => "'.' është emër i pavlefshëm.",
"File name cannot be empty." => "Emri i skedarit nuk mund të jetë bosh.",
@@ -39,14 +39,9 @@ $TRANSLATIONS = array(
"Your storage is full, files can not be updated or synced anymore!" => "Hapësira juaj e memorizimit është plot, nuk mund të ngarkoni apo sinkronizoni më skedarët.",
"Your storage is almost full ({usedSpacePercent}%)" => "Hapësira juaj e memorizimit është gati plot ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "Shkarkimi juaj po përgatitet. Mund të duhet pak kohë nqse skedarët janë të mëdhenj.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Emri i dosjes është i pavlefshëm. Përdorimi i \"Shared\" është i rezervuar nga Owncloud-i.",
"Name" => "Emri",
"Size" => "Dimensioni",
"Modified" => "Modifikuar",
-"1 folder" => "1 dosje",
-"{count} folders" => "{count} dosje",
-"1 file" => "1 skedar",
-"{count} files" => "{count} skedarë",
"Upload" => "Ngarko",
"File handling" => "Trajtimi i skedarit",
"Maximum upload size" => "Dimensioni maksimal i ngarkimit",
@@ -66,6 +61,7 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Këtu nuk ka asgjë. Ngarkoni diçka!",
"Download" => "Shkarko",
"Unshare" => "Hiq ndarjen",
+"Delete" => "Elimino",
"Upload too large" => "Ngarkimi është shumë i madh",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Skedarët që doni të ngarkoni tejkalojnë dimensionet maksimale për ngarkimet në këtë server.",
"Files are being scanned, please wait." => "Skedarët po analizohen, ju lutemi pritni.",
diff --git a/apps/files/l10n/sr.php b/apps/files/l10n/sr.php
index 09d1683a915..73f8ace5c81 100644
--- a/apps/files/l10n/sr.php
+++ b/apps/files/l10n/sr.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Недостаје привремена фасцикла",
"Failed to write to disk" => "Не могу да пишем на диск",
"Not enough storage available" => "Нема довољно простора",
+"Upload failed" => "Отпремање није успело",
"Invalid directory." => "неисправна фасцикла.",
"Files" => "Датотеке",
"Unable to upload your file as it is a directory or has 0 bytes" => "Не могу да отпремим датотеку као фасциклу или она има 0 бајтова",
@@ -21,7 +22,6 @@ $TRANSLATIONS = array(
"Error" => "Грешка",
"Share" => "Дели",
"Delete permanently" => "Обриши за стално",
-"Delete" => "Обриши",
"Rename" => "Преименуј",
"Pending" => "На чекању",
"{new_name} already exists" => "{new_name} већ постоји",
@@ -30,8 +30,9 @@ $TRANSLATIONS = array(
"cancel" => "откажи",
"replaced {new_name} with {old_name}" => "замењено {new_name} са {old_name}",
"undo" => "опозови",
-"perform delete operation" => "обриши",
-"1 file uploading" => "Отпремам 1 датотеку",
+"_%n folder_::_%n folders_" => array("","",""),
+"_%n file_::_%n files_" => array("","",""),
+"_Uploading %n file_::_Uploading %n files_" => array("","",""),
"files uploading" => "датотеке се отпремају",
"'.' is an invalid file name." => "Датотека „.“ је неисправног имена.",
"File name cannot be empty." => "Име датотеке не може бити празно.",
@@ -39,14 +40,9 @@ $TRANSLATIONS = array(
"Your storage is full, files can not be updated or synced anymore!" => "Ваше складиште је пуно. Датотеке више не могу бити ажуриране ни синхронизоване.",
"Your storage is almost full ({usedSpacePercent}%)" => "Ваше складиште је скоро па пуно ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "Припремам преузимање. Ово може да потраје ако су датотеке велике.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Неисправно име фасцикле. Фасцикла „Shared“ је резервисана за ownCloud.",
"Name" => "Име",
"Size" => "Величина",
"Modified" => "Измењено",
-"1 folder" => "1 фасцикла",
-"{count} folders" => "{count} фасцикле/и",
-"1 file" => "1 датотека",
-"{count} files" => "{count} датотеке/а",
"Upload" => "Отпреми",
"File handling" => "Управљање датотекама",
"Maximum upload size" => "Највећа величина датотеке",
@@ -66,6 +62,7 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Овде нема ничег. Отпремите нешто!",
"Download" => "Преузми",
"Unshare" => "Укини дељење",
+"Delete" => "Обриши",
"Upload too large" => "Датотека је превелика",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Датотеке које желите да отпремите прелазе ограничење у величини.",
"Files are being scanned, please wait." => "Скенирам датотеке…",
diff --git a/apps/files/l10n/sr@latin.php b/apps/files/l10n/sr@latin.php
index 5b425aaa963..1965479fe66 100644
--- a/apps/files/l10n/sr@latin.php
+++ b/apps/files/l10n/sr@latin.php
@@ -6,7 +6,9 @@ $TRANSLATIONS = array(
"No file was uploaded" => "Nijedan fajl nije poslat",
"Missing a temporary folder" => "Nedostaje privremena fascikla",
"Files" => "Fajlovi",
-"Delete" => "Obriši",
+"_%n folder_::_%n folders_" => array("","",""),
+"_%n file_::_%n files_" => array("","",""),
+"_Uploading %n file_::_Uploading %n files_" => array("","",""),
"Name" => "Ime",
"Size" => "Veličina",
"Modified" => "Zadnja izmena",
@@ -15,6 +17,7 @@ $TRANSLATIONS = array(
"Save" => "Snimi",
"Nothing in here. Upload something!" => "Ovde nema ničeg. Pošaljite nešto!",
"Download" => "Preuzmi",
+"Delete" => "Obriši",
"Upload too large" => "Pošiljka je prevelika",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Fajlovi koje želite da pošaljete prevazilaze ograničenje maksimalne veličine pošiljke na ovom serveru."
);
diff --git a/apps/files/l10n/sv.php b/apps/files/l10n/sv.php
index 41206423cfe..fbbe1f15910 100644
--- a/apps/files/l10n/sv.php
+++ b/apps/files/l10n/sv.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "En temporär mapp saknas",
"Failed to write to disk" => "Misslyckades spara till disk",
"Not enough storage available" => "Inte tillräckligt med lagringsutrymme tillgängligt",
+"Upload failed" => "Misslyckad uppladdning",
"Invalid directory." => "Felaktig mapp.",
"Files" => "Filer",
"Unable to upload your file as it is a directory or has 0 bytes" => "Kan inte ladda upp din fil eftersom det är en katalog eller har 0 bytes",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Fel",
"Share" => "Dela",
"Delete permanently" => "Radera permanent",
-"Delete" => "Radera",
"Rename" => "Byt namn",
"Pending" => "Väntar",
"{new_name} already exists" => "{new_name} finns redan",
@@ -33,23 +33,21 @@ $TRANSLATIONS = array(
"cancel" => "avbryt",
"replaced {new_name} with {old_name}" => "ersatt {new_name} med {old_name}",
"undo" => "ångra",
-"perform delete operation" => "utför raderingen",
-"1 file uploading" => "1 filuppladdning",
+"_%n folder_::_%n folders_" => array("%n mapp","%n mappar"),
+"_%n file_::_%n files_" => array("%n fil","%n filer"),
+"{dirs} and {files}" => "{dirs} och {files}",
+"_Uploading %n file_::_Uploading %n files_" => array("Laddar upp %n fil","Laddar upp %n filer"),
"files uploading" => "filer laddas upp",
"'.' is an invalid file name." => "'.' är ett ogiltigt filnamn.",
"File name cannot be empty." => "Filnamn kan inte vara tomt.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ogiltigt namn, '\\', '/', '<', '>', ':', '\"', '|', '?' och '*' är inte tillåtet.",
"Your storage is full, files can not be updated or synced anymore!" => "Ditt lagringsutrymme är fullt, filer kan inte längre uppdateras eller synkroniseras!",
"Your storage is almost full ({usedSpacePercent}%)" => "Ditt lagringsutrymme är nästan fullt ({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Kryptering inaktiverades men dina filer är fortfarande krypterade. Vänligen gå till sidan för dina personliga inställningar för att dekryptera dina filer.",
"Your download is being prepared. This might take some time if the files are big." => "Din nedladdning förbereds. Det kan ta tid om det är stora filer.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ogiltigt mappnamn. Användande av 'Shared' är reserverat av ownCloud",
"Name" => "Namn",
"Size" => "Storlek",
"Modified" => "Ändrad",
-"1 folder" => "1 mapp",
-"{count} folders" => "{count} mappar",
-"1 file" => "1 fil",
-"{count} files" => "{count} filer",
"%s could not be renamed" => "%s kunde inte namnändras",
"Upload" => "Ladda upp",
"File handling" => "Filhantering",
@@ -70,14 +68,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Ingenting här. Ladda upp något!",
"Download" => "Ladda ner",
"Unshare" => "Sluta dela",
+"Delete" => "Radera",
"Upload too large" => "För stor uppladdning",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filerna du försöker ladda upp överstiger den maximala storleken för filöverföringar på servern.",
"Files are being scanned, please wait." => "Filer skannas, var god vänta",
"Current scanning" => "Aktuell skanning",
-"directory" => "mapp",
-"directories" => "mappar",
-"file" => "fil",
-"files" => "filer",
"Upgrading filesystem cache..." => "Uppgraderar filsystemets cache..."
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/ta_LK.php b/apps/files/l10n/ta_LK.php
index 616248d87b9..154e0d6796e 100644
--- a/apps/files/l10n/ta_LK.php
+++ b/apps/files/l10n/ta_LK.php
@@ -7,6 +7,7 @@ $TRANSLATIONS = array(
"No file was uploaded" => "எந்த கோப்பும் பதிவேற்றப்படவில்லை",
"Missing a temporary folder" => "ஒரு தற்காலிகமான கோப்புறையை காணவில்லை",
"Failed to write to disk" => "வட்டில் எழுத முடியவில்லை",
+"Upload failed" => "பதிவேற்றல் தோல்வியுற்றது",
"Files" => "கோப்புகள்",
"Unable to upload your file as it is a directory or has 0 bytes" => "அடைவு அல்லது 0 bytes ஐ கொண்டுள்ளதால் உங்களுடைய கோப்பை பதிவேற்ற முடியவில்லை",
"Upload cancelled." => "பதிவேற்றல் இரத்து செய்யப்பட்டுள்ளது",
@@ -14,7 +15,6 @@ $TRANSLATIONS = array(
"URL cannot be empty." => "URL வெறுமையாக இருக்கமுடியாது.",
"Error" => "வழு",
"Share" => "பகிர்வு",
-"Delete" => "நீக்குக",
"Rename" => "பெயர்மாற்றம்",
"Pending" => "நிலுவையிலுள்ள",
"{new_name} already exists" => "{new_name} ஏற்கனவே உள்ளது",
@@ -23,15 +23,13 @@ $TRANSLATIONS = array(
"cancel" => "இரத்து செய்க",
"replaced {new_name} with {old_name}" => "{new_name} ஆனது {old_name} இனால் மாற்றப்பட்டது",
"undo" => "முன் செயல் நீக்கம் ",
-"1 file uploading" => "1 கோப்பு பதிவேற்றப்படுகிறது",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "செல்லுபடியற்ற பெயர்,'\\', '/', '<', '>', ':', '\"', '|', '?' மற்றும் '*' ஆகியன அனுமதிக்கப்படமாட்டாது.",
"Name" => "பெயர்",
"Size" => "அளவு",
"Modified" => "மாற்றப்பட்டது",
-"1 folder" => "1 கோப்புறை",
-"{count} folders" => "{எண்ணிக்கை} கோப்புறைகள்",
-"1 file" => "1 கோப்பு",
-"{count} files" => "{எண்ணிக்கை} கோப்புகள்",
"Upload" => "பதிவேற்றுக",
"File handling" => "கோப்பு கையாளுதல்",
"Maximum upload size" => "பதிவேற்றக்கூடிய ஆகக்கூடிய அளவு ",
@@ -49,6 +47,7 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "இங்கு ஒன்றும் இல்லை. ஏதாவது பதிவேற்றுக!",
"Download" => "பதிவிறக்குக",
"Unshare" => "பகிரப்படாதது",
+"Delete" => "நீக்குக",
"Upload too large" => "பதிவேற்றல் மிகப்பெரியது",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "நீங்கள் பதிவேற்ற முயற்சிக்கும் கோப்புகளானது இந்த சேவையகத்தில் கோப்பு பதிவேற்றக்கூடிய ஆகக்கூடிய அளவிலும் கூடியது.",
"Files are being scanned, please wait." => "கோப்புகள் வருடப்படுகின்றன, தயவுசெய்து காத்திருங்கள்.",
diff --git a/apps/files/l10n/te.php b/apps/files/l10n/te.php
index bb729b0187e..60aabc8a365 100644
--- a/apps/files/l10n/te.php
+++ b/apps/files/l10n/te.php
@@ -2,11 +2,14 @@
$TRANSLATIONS = array(
"Error" => "పొరపాటు",
"Delete permanently" => "శాశ్వతంగా తొలగించు",
-"Delete" => "తొలగించు",
"cancel" => "రద్దుచేయి",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
"Name" => "పేరు",
"Size" => "పరిమాణం",
"Save" => "భద్రపరచు",
-"Folder" => "సంచయం"
+"Folder" => "సంచయం",
+"Delete" => "తొలగించు"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/th_TH.php b/apps/files/l10n/th_TH.php
index b480237008b..aa8cf4e9b50 100644
--- a/apps/files/l10n/th_TH.php
+++ b/apps/files/l10n/th_TH.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "โฟลเดอร์ชั่วคราวเกิดการสูญหาย",
"Failed to write to disk" => "เขียนข้อมูลลงแผ่นดิสก์ล้มเหลว",
"Not enough storage available" => "เหลือพื้นที่ไม่เพียงสำหรับใช้งาน",
+"Upload failed" => "อัพโหลดล้มเหลว",
"Invalid directory." => "ไดเร็กทอรี่ไม่ถูกต้อง",
"Files" => "ไฟล์",
"Unable to upload your file as it is a directory or has 0 bytes" => "ไม่สามารถอัพโหลดไฟล์ของคุณได้ เนื่องจากไฟล์ดังกล่าวเป็นไดเร็กทอรี่ หรือ มีขนาดไฟล์ 0 ไบต์",
@@ -20,7 +21,6 @@ $TRANSLATIONS = array(
"URL cannot be empty." => "URL ไม่สามารถเว้นว่างได้",
"Error" => "ข้อผิดพลาด",
"Share" => "แชร์",
-"Delete" => "ลบ",
"Rename" => "เปลี่ยนชื่อ",
"Pending" => "อยู่ระหว่างดำเนินการ",
"{new_name} already exists" => "{new_name} มีอยู่แล้วในระบบ",
@@ -29,8 +29,9 @@ $TRANSLATIONS = array(
"cancel" => "ยกเลิก",
"replaced {new_name} with {old_name}" => "แทนที่ {new_name} ด้วย {old_name} แล้ว",
"undo" => "เลิกทำ",
-"perform delete operation" => "ดำเนินการตามคำสั่งลบ",
-"1 file uploading" => "กำลังอัพโหลดไฟล์ 1 ไฟล์",
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
+"_Uploading %n file_::_Uploading %n files_" => array(""),
"files uploading" => "การอัพโหลดไฟล์",
"'.' is an invalid file name." => "'.' เป็นชื่อไฟล์ที่ไม่ถูกต้อง",
"File name cannot be empty." => "ชื่อไฟล์ไม่สามารถเว้นว่างได้",
@@ -38,14 +39,9 @@ $TRANSLATIONS = array(
"Your storage is full, files can not be updated or synced anymore!" => "พื้นที่จัดเก็บข้อมูลของคุณเต็มแล้ว ไม่สามารถอัพเดทหรือผสานไฟล์ต่างๆได้อีกต่อไป",
"Your storage is almost full ({usedSpacePercent}%)" => "พื้นที่จัดเก็บข้อมูลของคุณใกล้เต็มแล้ว ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "กำลังเตรียมดาวน์โหลดข้อมูล หากไฟล์มีขนาดใหญ่ อาจใช้เวลาสักครู่",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "ชื่อโฟลเดอร์ไม่ถูกต้อง การใช้งาน 'แชร์' สงวนไว้สำหรับ Owncloud เท่านั้น",
"Name" => "ชื่อ",
"Size" => "ขนาด",
"Modified" => "แก้ไขแล้ว",
-"1 folder" => "1 โฟลเดอร์",
-"{count} folders" => "{count} โฟลเดอร์",
-"1 file" => "1 ไฟล์",
-"{count} files" => "{count} ไฟล์",
"Upload" => "อัพโหลด",
"File handling" => "การจัดกาไฟล์",
"Maximum upload size" => "ขนาดไฟล์สูงสุดที่อัพโหลดได้",
@@ -63,12 +59,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "ยังไม่มีไฟล์ใดๆอยู่ที่นี่ กรุณาอัพโหลดไฟล์!",
"Download" => "ดาวน์โหลด",
"Unshare" => "ยกเลิกการแชร์",
+"Delete" => "ลบ",
"Upload too large" => "ไฟล์ที่อัพโหลดมีขนาดใหญ่เกินไป",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "ไฟล์ที่คุณพยายามที่จะอัพโหลดมีขนาดเกินกว่าขนาดสูงสุดที่กำหนดไว้ให้อัพโหลดได้สำหรับเซิร์ฟเวอร์นี้",
"Files are being scanned, please wait." => "ไฟล์กำลังอยู่ระหว่างการสแกน, กรุณารอสักครู่.",
"Current scanning" => "ไฟล์ที่กำลังสแกนอยู่ขณะนี้",
-"file" => "ไฟล์",
-"files" => "ไฟล์",
"Upgrading filesystem cache..." => "กำลังอัพเกรดหน่วยความจำแคชของระบบไฟล์..."
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files/l10n/tr.php b/apps/files/l10n/tr.php
index 351b23cb951..dd089757d5f 100644
--- a/apps/files/l10n/tr.php
+++ b/apps/files/l10n/tr.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Geçici dizin eksik",
"Failed to write to disk" => "Diske yazılamadı",
"Not enough storage available" => "Yeterli disk alanı yok",
+"Upload failed" => "Yükleme başarısız",
"Invalid directory." => "Geçersiz dizin.",
"Files" => "Dosyalar",
"Unable to upload your file as it is a directory or has 0 bytes" => "Dosyanızın boyutu 0 byte olduğundan veya bir dizin olduğundan yüklenemedi",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "Hata",
"Share" => "Paylaş",
"Delete permanently" => "Kalıcı olarak sil",
-"Delete" => "Sil",
"Rename" => "İsim değiştir.",
"Pending" => "Bekliyor",
"{new_name} already exists" => "{new_name} zaten mevcut",
@@ -33,23 +33,20 @@ $TRANSLATIONS = array(
"cancel" => "iptal",
"replaced {new_name} with {old_name}" => "{new_name} ismi {old_name} ile değiştirildi",
"undo" => "geri al",
-"perform delete operation" => "Silme işlemini gerçekleştir",
-"1 file uploading" => "1 dosya yüklendi",
+"_%n folder_::_%n folders_" => array("%n dizin","%n dizin"),
+"_%n file_::_%n files_" => array("%n dosya","%n dosya"),
+"_Uploading %n file_::_Uploading %n files_" => array("%n dosya yükleniyor","%n dosya yükleniyor"),
"files uploading" => "Dosyalar yükleniyor",
"'.' is an invalid file name." => "'.' geçersiz dosya adı.",
"File name cannot be empty." => "Dosya adı boş olamaz.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Geçersiz isim, '\\', '/', '<', '>', ':', '\"', '|', '?' ve '*' karakterlerine izin verilmemektedir.",
"Your storage is full, files can not be updated or synced anymore!" => "Depolama alanınız dolu, artık dosyalar güncellenmeyecek yada senkronizasyon edilmeyecek.",
"Your storage is almost full ({usedSpacePercent}%)" => "Depolama alanınız neredeyse dolu ({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Şifreleme işlemi durduruldu ancak dosyalarınız şifreli. Dosyalarınızın şifresini kaldırmak için lütfen kişisel ayarlar kısmına geçiniz.",
"Your download is being prepared. This might take some time if the files are big." => "İndirmeniz hazırlanıyor. Dosya büyük ise biraz zaman alabilir.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Geçersiz dizin adı. Shared isminin kullanımı Owncloud tarafından rezerver edilmiştir.",
"Name" => "İsim",
"Size" => "Boyut",
"Modified" => "Değiştirilme",
-"1 folder" => "1 dizin",
-"{count} folders" => "{count} dizin",
-"1 file" => "1 dosya",
-"{count} files" => "{count} dosya",
"%s could not be renamed" => "%s yeniden adlandırılamadı",
"Upload" => "Yükle",
"File handling" => "Dosya taşıma",
@@ -70,14 +67,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Burada hiçbir şey yok. Birşeyler yükleyin!",
"Download" => "İndir",
"Unshare" => "Paylaşılmayan",
+"Delete" => "Sil",
"Upload too large" => "Yükleme çok büyük",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Yüklemeye çalıştığınız dosyalar bu sunucudaki maksimum yükleme boyutunu aşıyor.",
"Files are being scanned, please wait." => "Dosyalar taranıyor, lütfen bekleyin.",
"Current scanning" => "Güncel tarama",
-"directory" => "dizin",
-"directories" => "dizinler",
-"file" => "dosya",
-"files" => "dosyalar",
"Upgrading filesystem cache..." => "Sistem dosyası önbelleği güncelleniyor"
);
$PLURAL_FORMS = "nplurals=2; plural=(n > 1);";
diff --git a/apps/files/l10n/ug.php b/apps/files/l10n/ug.php
index 819b46c50c2..920d077e4eb 100644
--- a/apps/files/l10n/ug.php
+++ b/apps/files/l10n/ug.php
@@ -13,7 +13,6 @@ $TRANSLATIONS = array(
"Error" => "خاتالىق",
"Share" => "ھەمبەھىر",
"Delete permanently" => "مەڭگۈلۈك ئۆچۈر",
-"Delete" => "ئۆچۈر",
"Rename" => "ئات ئۆزگەرت",
"Pending" => "كۈتۈۋاتىدۇ",
"{new_name} already exists" => "{new_name} مەۋجۇت",
@@ -21,14 +20,13 @@ $TRANSLATIONS = array(
"suggest name" => "تەۋسىيە ئات",
"cancel" => "ۋاز كەچ",
"undo" => "يېنىۋال",
-"1 file uploading" => "1 ھۆججەت يۈكلىنىۋاتىدۇ",
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
+"_Uploading %n file_::_Uploading %n files_" => array(""),
"files uploading" => "ھۆججەت يۈكلىنىۋاتىدۇ",
"Name" => "ئاتى",
"Size" => "چوڭلۇقى",
"Modified" => "ئۆزگەرتكەن",
-"1 folder" => "1 قىسقۇچ",
-"1 file" => "1 ھۆججەت",
-"{count} files" => "{count} ھۆججەت",
"Upload" => "يۈكلە",
"Save" => "ساقلا",
"New" => "يېڭى",
@@ -39,6 +37,7 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "بۇ جايدا ھېچنېمە يوق. Upload something!",
"Download" => "چۈشۈر",
"Unshare" => "ھەمبەھىرلىمە",
+"Delete" => "ئۆچۈر",
"Upload too large" => "يۈكلەندىغىنى بەك چوڭ",
"Upgrading filesystem cache..." => "ھۆججەت سىستېما غەملىكىنى يۈكسەلدۈرۈۋاتىدۇ…"
);
diff --git a/apps/files/l10n/uk.php b/apps/files/l10n/uk.php
index ad40f16e8b6..781590cff35 100644
--- a/apps/files/l10n/uk.php
+++ b/apps/files/l10n/uk.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Відсутній тимчасовий каталог",
"Failed to write to disk" => "Невдалося записати на диск",
"Not enough storage available" => "Місця більше немає",
+"Upload failed" => "Помилка завантаження",
"Invalid directory." => "Невірний каталог.",
"Files" => "Файли",
"Unable to upload your file as it is a directory or has 0 bytes" => "Неможливо завантажити ваш файл тому, що він тека або файл розміром 0 байт",
@@ -21,7 +22,6 @@ $TRANSLATIONS = array(
"Error" => "Помилка",
"Share" => "Поділитися",
"Delete permanently" => "Видалити назавжди",
-"Delete" => "Видалити",
"Rename" => "Перейменувати",
"Pending" => "Очікування",
"{new_name} already exists" => "{new_name} вже існує",
@@ -30,8 +30,9 @@ $TRANSLATIONS = array(
"cancel" => "відміна",
"replaced {new_name} with {old_name}" => "замінено {new_name} на {old_name}",
"undo" => "відмінити",
-"perform delete operation" => "виконати операцію видалення",
-"1 file uploading" => "1 файл завантажується",
+"_%n folder_::_%n folders_" => array("","",""),
+"_%n file_::_%n files_" => array("","",""),
+"_Uploading %n file_::_Uploading %n files_" => array("","",""),
"files uploading" => "файли завантажуються",
"'.' is an invalid file name." => "'.' це невірне ім'я файлу.",
"File name cannot be empty." => " Ім'я файлу не може бути порожнім.",
@@ -39,14 +40,9 @@ $TRANSLATIONS = array(
"Your storage is full, files can not be updated or synced anymore!" => "Ваше сховище переповнене, файли більше не можуть бути оновлені або синхронізовані !",
"Your storage is almost full ({usedSpacePercent}%)" => "Ваше сховище майже повне ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "Ваше завантаження готується. Це може зайняти деякий час, якщо файли завеликі.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Невірне ім'я теки. Використання \"Shared\" зарезервовано Owncloud",
"Name" => "Ім'я",
"Size" => "Розмір",
"Modified" => "Змінено",
-"1 folder" => "1 папка",
-"{count} folders" => "{count} папок",
-"1 file" => "1 файл",
-"{count} files" => "{count} файлів",
"%s could not be renamed" => "%s не може бути перейменований",
"Upload" => "Вивантажити",
"File handling" => "Робота з файлами",
@@ -67,14 +63,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Тут нічого немає. Відвантажте що-небудь!",
"Download" => "Завантажити",
"Unshare" => "Закрити доступ",
+"Delete" => "Видалити",
"Upload too large" => "Файл занадто великий",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Файли,що ви намагаєтесь відвантажити перевищують максимальний дозволений розмір файлів на цьому сервері.",
"Files are being scanned, please wait." => "Файли скануються, зачекайте, будь-ласка.",
"Current scanning" => "Поточне сканування",
-"directory" => "каталог",
-"directories" => "каталоги",
-"file" => "файл",
-"files" => "файли",
"Upgrading filesystem cache..." => "Оновлення кеша файлової системи..."
);
$PLURAL_FORMS = "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/ur_PK.php b/apps/files/l10n/ur_PK.php
index 1f083455369..6854c421587 100644
--- a/apps/files/l10n/ur_PK.php
+++ b/apps/files/l10n/ur_PK.php
@@ -1,6 +1,9 @@
<?php
$TRANSLATIONS = array(
"Error" => "ایرر",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
+"_Uploading %n file_::_Uploading %n files_" => array("",""),
"Unshare" => "شئیرنگ ختم کریں"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files/l10n/vi.php b/apps/files/l10n/vi.php
index 4d0240c9baa..b98a14f6d7b 100644
--- a/apps/files/l10n/vi.php
+++ b/apps/files/l10n/vi.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "Không tìm thấy thư mục tạm",
"Failed to write to disk" => "Không thể ghi ",
"Not enough storage available" => "Không đủ không gian lưu trữ",
+"Upload failed" => "Tải lên thất bại",
"Invalid directory." => "Thư mục không hợp lệ",
"Files" => "Tập tin",
"Unable to upload your file as it is a directory or has 0 bytes" => "Không thể tải lên tập tin của bạn ,nó như là một thư mục hoặc có 0 byte",
@@ -21,7 +22,6 @@ $TRANSLATIONS = array(
"Error" => "Lỗi",
"Share" => "Chia sẻ",
"Delete permanently" => "Xóa vĩnh vễn",
-"Delete" => "Xóa",
"Rename" => "Sửa tên",
"Pending" => "Đang chờ",
"{new_name} already exists" => "{new_name} đã tồn tại",
@@ -30,8 +30,9 @@ $TRANSLATIONS = array(
"cancel" => "hủy",
"replaced {new_name} with {old_name}" => "đã thay thế {new_name} bằng {old_name}",
"undo" => "lùi lại",
-"perform delete operation" => "thực hiện việc xóa",
-"1 file uploading" => "1 tệp tin đang được tải lên",
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
+"_Uploading %n file_::_Uploading %n files_" => array(""),
"files uploading" => "tệp tin đang được tải lên",
"'.' is an invalid file name." => "'.' là một tên file không hợp lệ",
"File name cannot be empty." => "Tên file không được rỗng",
@@ -39,14 +40,9 @@ $TRANSLATIONS = array(
"Your storage is full, files can not be updated or synced anymore!" => "Your storage is full, files can not be updated or synced anymore!",
"Your storage is almost full ({usedSpacePercent}%)" => "Your storage is almost full ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "Your download is being prepared. This might take some time if the files are big.",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Invalid folder name. Usage of 'Shared' is reserved by Owncloud",
"Name" => "Tên",
"Size" => "Kích cỡ",
"Modified" => "Thay đổi",
-"1 folder" => "1 thư mục",
-"{count} folders" => "{count} thư mục",
-"1 file" => "1 tập tin",
-"{count} files" => "{count} tập tin",
"Upload" => "Tải lên",
"File handling" => "Xử lý tập tin",
"Maximum upload size" => "Kích thước tối đa ",
@@ -66,12 +62,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "Không có gì ở đây .Hãy tải lên một cái gì đó !",
"Download" => "Tải về",
"Unshare" => "Bỏ chia sẻ",
+"Delete" => "Xóa",
"Upload too large" => "Tập tin tải lên quá lớn",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Các tập tin bạn đang tải lên vượt quá kích thước tối đa cho phép trên máy chủ .",
"Files are being scanned, please wait." => "Tập tin đang được quét ,vui lòng chờ.",
"Current scanning" => "Hiện tại đang quét",
-"file" => "file",
-"files" => "files",
"Upgrading filesystem cache..." => "Đang nâng cấp bộ nhớ đệm cho tập tin hệ thống..."
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files/l10n/zh_CN.GB2312.php b/apps/files/l10n/zh_CN.GB2312.php
deleted file mode 100644
index 9b08b5dda22..00000000000
--- a/apps/files/l10n/zh_CN.GB2312.php
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "无法移动 %s - 存在同名文件",
-"Could not move %s" => "无法移动 %s",
-"Unable to set upload directory." => "无法设置上传文件夹",
-"Invalid Token" => "非法Token",
-"No file was uploaded. Unknown error" => "没有上传文件。未知错误",
-"There is no error, the file uploaded with success" => "文件上传成功",
-"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "上传的文件超过了php.ini指定的upload_max_filesize",
-"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "上传的文件超过了 HTML 表格中指定的 MAX_FILE_SIZE 选项",
-"The uploaded file was only partially uploaded" => "文件部分上传",
-"No file was uploaded" => "没有上传文件",
-"Missing a temporary folder" => "缺失临时文件夹",
-"Failed to write to disk" => "写磁盘失败",
-"Not enough storage available" => "容量不足",
-"Invalid directory." => "无效文件夹",
-"Files" => "文件",
-"Unable to upload your file as it is a directory or has 0 bytes" => "不能上传您的文件,由于它是文件夹或者为空文件",
-"Not enough space available" => "容量不足",
-"Upload cancelled." => "上传取消了",
-"File upload is in progress. Leaving the page now will cancel the upload." => "文件正在上传。关闭页面会取消上传。",
-"URL cannot be empty." => "网址不能为空。",
-"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "无效文件夹名。“Shared”已经被系统保留。",
-"Error" => "出错",
-"Share" => "分享",
-"Delete permanently" => "永久删除",
-"Delete" => "删除",
-"Rename" => "重命名",
-"Pending" => "等待中",
-"{new_name} already exists" => "{new_name} 已存在",
-"replace" => "替换",
-"suggest name" => "推荐名称",
-"cancel" => "取消",
-"replaced {new_name} with {old_name}" => "已用 {old_name} 替换 {new_name}",
-"undo" => "撤销",
-"perform delete operation" => "执行删除",
-"1 file uploading" => "1 个文件正在上传",
-"files uploading" => "个文件正在上传",
-"'.' is an invalid file name." => "'.' 文件名不正确",
-"File name cannot be empty." => "文件名不能为空",
-"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "文件名内不能包含以下符号:\\ / < > : \" | ?和 *",
-"Your storage is full, files can not be updated or synced anymore!" => "容量已满,不能再同步/上传文件了!",
-"Your storage is almost full ({usedSpacePercent}%)" => "你的空间快用满了 ({usedSpacePercent}%)",
-"Your download is being prepared. This might take some time if the files are big." => "正在下载,可能会花点时间,跟文件大小有关",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "不正确文件夹名。Shared是保留名,不能使用。",
-"Name" => "名称",
-"Size" => "大小",
-"Modified" => "修改日期",
-"1 folder" => "1 个文件夹",
-"{count} folders" => "{count} 个文件夹",
-"1 file" => "1 个文件",
-"{count} files" => "{count} 个文件",
-"%s could not be renamed" => "不能重命名 %s",
-"Upload" => "上传",
-"File handling" => "文件处理中",
-"Maximum upload size" => "最大上传大小",
-"max. possible: " => "最大可能",
-"Needed for multi-file and folder downloads." => "需要多文件和文件夹下载.",
-"Enable ZIP-download" => "支持ZIP下载",
-"0 is unlimited" => "0是无限的",
-"Maximum input size for ZIP files" => "最大的ZIP文件输入大小",
-"Save" => "保存",
-"New" => "新建",
-"Text file" => "文本文档",
-"Folder" => "文件夹",
-"From link" => "来自链接",
-"Deleted files" => "已删除的文件",
-"Cancel upload" => "取消上传",
-"You don’t have write permissions here." => "您没有写入权限。",
-"Nothing in here. Upload something!" => "这里没有东西.上传点什么!",
-"Download" => "下载",
-"Unshare" => "取消分享",
-"Upload too large" => "上传过大",
-"The files you are trying to upload exceed the maximum size for file uploads on this server." => "你正在试图上传的文件超过了此服务器支持的最大的文件大小.",
-"Files are being scanned, please wait." => "正在扫描文件,请稍候.",
-"Current scanning" => "正在扫描",
-"directory" => "文件夹",
-"directories" => "文件夹",
-"file" => "文件",
-"files" => "文件",
-"Upgrading filesystem cache..." => "升级系统缓存..."
-);
-$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files/l10n/zh_CN.php b/apps/files/l10n/zh_CN.php
index d4bf220590b..59b09ad950b 100644
--- a/apps/files/l10n/zh_CN.php
+++ b/apps/files/l10n/zh_CN.php
@@ -13,6 +13,7 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "缺少临时目录",
"Failed to write to disk" => "写入磁盘失败",
"Not enough storage available" => "没有足够的存储空间",
+"Upload failed" => "上传失败",
"Invalid directory." => "无效文件夹。",
"Files" => "文件",
"Unable to upload your file as it is a directory or has 0 bytes" => "无法上传您的文件,文件夹或者空文件",
@@ -24,7 +25,6 @@ $TRANSLATIONS = array(
"Error" => "错误",
"Share" => "分享",
"Delete permanently" => "永久删除",
-"Delete" => "删除",
"Rename" => "重命名",
"Pending" => "等待",
"{new_name} already exists" => "{new_name} 已存在",
@@ -33,8 +33,9 @@ $TRANSLATIONS = array(
"cancel" => "取消",
"replaced {new_name} with {old_name}" => "已将 {old_name}替换成 {new_name}",
"undo" => "撤销",
-"perform delete operation" => "进行删除操作",
-"1 file uploading" => "1个文件上传中",
+"_%n folder_::_%n folders_" => array("%n 文件夹"),
+"_%n file_::_%n files_" => array("%n个文件"),
+"_Uploading %n file_::_Uploading %n files_" => array(""),
"files uploading" => "文件上传中",
"'.' is an invalid file name." => "'.' 是一个无效的文件名。",
"File name cannot be empty." => "文件名不能为空。",
@@ -42,14 +43,9 @@ $TRANSLATIONS = array(
"Your storage is full, files can not be updated or synced anymore!" => "您的存储空间已满,文件将无法更新或同步!",
"Your storage is almost full ({usedSpacePercent}%)" => "您的存储空间即将用完 ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "下载正在准备中。如果文件较大可能会花费一些时间。",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "无效文件夹名。'共享' 是 Owncloud 预留的文件夹名。",
"Name" => "名称",
"Size" => "大小",
"Modified" => "修改日期",
-"1 folder" => "1个文件夹",
-"{count} folders" => "{count} 个文件夹",
-"1 file" => "1 个文件",
-"{count} files" => "{count} 个文件",
"%s could not be renamed" => "%s 不能被重命名",
"Upload" => "上传",
"File handling" => "文件处理",
@@ -70,12 +66,11 @@ $TRANSLATIONS = array(
"Nothing in here. Upload something!" => "这里还什么都没有。上传些东西吧!",
"Download" => "下载",
"Unshare" => "取消共享",
+"Delete" => "删除",
"Upload too large" => "上传文件过大",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "您正尝试上传的文件超过了此服务器可以上传的最大容量限制",
"Files are being scanned, please wait." => "文件正在被扫描,请稍候。",
"Current scanning" => "当前扫描",
-"file" => "文件",
-"files" => "文件",
"Upgrading filesystem cache..." => "正在更新文件系统缓存..."
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files/l10n/zh_HK.php b/apps/files/l10n/zh_HK.php
index 1f309d9b2f6..febed4fe8fb 100644
--- a/apps/files/l10n/zh_HK.php
+++ b/apps/files/l10n/zh_HK.php
@@ -3,12 +3,14 @@ $TRANSLATIONS = array(
"Files" => "文件",
"Error" => "錯誤",
"Share" => "分享",
-"Delete" => "刪除",
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
+"_Uploading %n file_::_Uploading %n files_" => array(""),
"Name" => "名稱",
-"{count} folders" => "{}文件夾",
"Upload" => "上傳",
"Save" => "儲存",
"Download" => "下載",
-"Unshare" => "取消分享"
+"Unshare" => "取消分享",
+"Delete" => "刪除"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files/l10n/zh_TW.php b/apps/files/l10n/zh_TW.php
index 6e0dd54fddc..21c929f81a6 100644
--- a/apps/files/l10n/zh_TW.php
+++ b/apps/files/l10n/zh_TW.php
@@ -1,11 +1,11 @@
<?php
$TRANSLATIONS = array(
-"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",
-"Unable to set upload directory." => "無法設定上傳目錄。",
+"Unable to set upload directory." => "無法設定上傳目錄",
"Invalid Token" => "無效的 token",
-"No file was uploaded. Unknown error" => "沒有檔案被上傳。未知的錯誤。",
-"There is no error, the file uploaded with success" => "無錯誤,檔案上傳成功",
+"No file was uploaded. Unknown error" => "沒有檔案被上傳,原因未知",
+"There is no error, the file uploaded with success" => "一切都順利,檔案上傳成功",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "上傳的檔案大小超過 php.ini 當中 upload_max_filesize 參數的設定:",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "上傳的檔案大小超過 HTML 表單中 MAX_FILE_SIZE 的限制",
"The uploaded file was only partially uploaded" => "只有檔案的一部分被上傳",
@@ -13,18 +13,18 @@ $TRANSLATIONS = array(
"Missing a temporary folder" => "找不到暫存資料夾",
"Failed to write to disk" => "寫入硬碟失敗",
"Not enough storage available" => "儲存空間不足",
-"Invalid directory." => "無效的資料夾。",
+"Upload failed" => "上傳失敗",
+"Invalid directory." => "無效的資料夾",
"Files" => "檔案",
-"Unable to upload your file as it is a directory or has 0 bytes" => "無法上傳您的檔案因為它可能是一個目錄或檔案大小為0",
+"Unable to upload your file as it is a directory or has 0 bytes" => "無法上傳您的檔案,因為它可能是一個目錄或檔案大小為0",
"Not enough space available" => "沒有足夠的可用空間",
"Upload cancelled." => "上傳已取消",
-"File upload is in progress. Leaving the page now will cancel the upload." => "檔案上傳中。離開此頁面將會取消上傳。",
-"URL cannot be empty." => "URL 不能為空白。",
+"File upload is in progress. Leaving the page now will cancel the upload." => "檔案上傳中,離開此頁面將會取消上傳。",
+"URL cannot be empty." => "URL 不能為空",
"Invalid folder name. Usage of 'Shared' is reserved by ownCloud" => "無效的資料夾名稱,'Shared' 的使用被 ownCloud 保留",
"Error" => "錯誤",
"Share" => "分享",
"Delete permanently" => "永久刪除",
-"Delete" => "刪除",
"Rename" => "重新命名",
"Pending" => "等候中",
"{new_name} already exists" => "{new_name} 已經存在",
@@ -33,51 +33,46 @@ $TRANSLATIONS = array(
"cancel" => "取消",
"replaced {new_name} with {old_name}" => "使用 {new_name} 取代 {old_name}",
"undo" => "復原",
-"perform delete operation" => "進行刪除動作",
-"1 file uploading" => "1 個檔案正在上傳",
-"files uploading" => "檔案正在上傳中",
-"'.' is an invalid file name." => "'.' 是不合法的檔名。",
-"File name cannot be empty." => "檔名不能為空。",
-"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "檔名不合法,不允許 '\\', '/', '<', '>', ':', '\"', '|', '?' 和 '*' 。",
+"_%n folder_::_%n folders_" => array("%n 個資料夾"),
+"_%n file_::_%n files_" => array("%n 個檔案"),
+"{dirs} and {files}" => "{dirs} 和 {files}",
+"_Uploading %n file_::_Uploading %n files_" => array("%n 個檔案正在上傳"),
+"files uploading" => "檔案上傳中",
+"'.' is an invalid file name." => "'.' 是不合法的檔名",
+"File name cannot be empty." => "檔名不能為空",
+"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "檔名不合法,不允許 \\ / < > : \" | ? * 字元",
"Your storage is full, files can not be updated or synced anymore!" => "您的儲存空間已滿,沒有辦法再更新或是同步檔案!",
"Your storage is almost full ({usedSpacePercent}%)" => "您的儲存空間快要滿了 ({usedSpacePercent}%)",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "加密已經被停用,但是您的舊檔案還是處於已加密的狀態,請前往個人設定以解密這些檔案。",
"Your download is being prepared. This might take some time if the files are big." => "正在準備您的下載,若您的檔案較大,將會需要更多時間。",
-"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "無效的資料夾名稱,'Shared' 的使用被 ownCloud 保留",
"Name" => "名稱",
"Size" => "大小",
-"Modified" => "修改",
-"1 folder" => "1 個資料夾",
-"{count} folders" => "{count} 個資料夾",
-"1 file" => "1 個檔案",
-"{count} files" => "{count} 個檔案",
+"Modified" => "修改時間",
"%s could not be renamed" => "無法重新命名 %s",
"Upload" => "上傳",
"File handling" => "檔案處理",
-"Maximum upload size" => "最大上傳檔案大小",
+"Maximum upload size" => "上傳限制",
"max. possible: " => "最大允許:",
-"Needed for multi-file and folder downloads." => "針對多檔案和目錄下載是必填的。",
-"Enable ZIP-download" => "啟用 Zip 下載",
+"Needed for multi-file and folder downloads." => "下載多檔案和目錄時,此項是必填的。",
+"Enable ZIP-download" => "啟用 ZIP 下載",
"0 is unlimited" => "0代表沒有限制",
-"Maximum input size for ZIP files" => "針對 ZIP 檔案最大輸入大小",
+"Maximum input size for ZIP files" => "ZIP 壓縮前的原始大小限制",
"Save" => "儲存",
"New" => "新增",
"Text file" => "文字檔",
"Folder" => "資料夾",
"From link" => "從連結",
-"Deleted files" => "已刪除的檔案",
+"Deleted files" => "回收桶",
"Cancel upload" => "取消上傳",
-"You don’t have write permissions here." => "您在這裡沒有編輯權。",
-"Nothing in here. Upload something!" => "這裡什麼也沒有,上傳一些東西吧!",
+"You don’t have write permissions here." => "您在這裡沒有編輯權",
+"Nothing in here. Upload something!" => "這裡還沒有東西,上傳一些吧!",
"Download" => "下載",
-"Unshare" => "取消共享",
+"Unshare" => "取消分享",
+"Delete" => "刪除",
"Upload too large" => "上傳過大",
-"The files you are trying to upload exceed the maximum size for file uploads on this server." => "您試圖上傳的檔案已超過伺服器的最大檔案大小限制。",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "您試圖上傳的檔案大小超過伺服器的限制。",
"Files are being scanned, please wait." => "正在掃描檔案,請稍等。",
-"Current scanning" => "目前掃描",
-"directory" => "目錄",
-"directories" => "目錄",
-"file" => "檔案",
-"files" => "檔案",
-"Upgrading filesystem cache..." => "正在升級檔案系統快取..."
+"Current scanning" => "正在掃描",
+"Upgrading filesystem cache..." => "正在升級檔案系統快取…"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files/lib/app.php b/apps/files/lib/app.php
index f7052ef80b0..579e8676cfc 100644
--- a/apps/files/lib/app.php
+++ b/apps/files/lib/app.php
@@ -76,4 +76,4 @@ class App {
return $result;
}
-} \ No newline at end of file
+}
diff --git a/apps/files/lib/capabilities.php b/apps/files/lib/capabilities.php
index 90a5e2f4eb9..d4820e931ba 100644
--- a/apps/files/lib/capabilities.php
+++ b/apps/files/lib/capabilities.php
@@ -21,4 +21,4 @@ class Capabilities {
));
}
-} \ No newline at end of file
+}
diff --git a/apps/files/lib/helper.php b/apps/files/lib/helper.php
index f2b1f142e9b..7135ef9f656 100644
--- a/apps/files/lib/helper.php
+++ b/apps/files/lib/helper.php
@@ -11,7 +11,7 @@ class Helper
$maxHumanFilesize = $l->t('Upload') . ' max. ' . $maxHumanFilesize;
// information about storage capacities
- $storageInfo = \OC_Helper::getStorageInfo();
+ $storageInfo = \OC_Helper::getStorageInfo($dir);
return array('uploadMaxFilesize' => $maxUploadFilesize,
'maxHumanFilesize' => $maxHumanFilesize,
diff --git a/apps/files/templates/index.php b/apps/files/templates/index.php
index 79c283dc336..29cb457cd5a 100644
--- a/apps/files/templates/index.php
+++ b/apps/files/templates/index.php
@@ -10,7 +10,7 @@
data-type='file'><p><?php p($l->t('Text file'));?></p></li>
<li style="background-image:url('<?php p(OCP\mimetype_icon('dir')) ?>')"
data-type='folder'><p><?php p($l->t('Folder'));?></p></li>
- <li style="background-image:url('<?php p(OCP\image_path('core', 'actions/public.png')) ?>')"
+ <li style="background-image:url('<?php p(OCP\image_path('core', 'filetypes/web.svg')) ?>')"
data-type='web'><p><?php p($l->t('From link'));?></p></li>
</ul>
</div>
@@ -56,24 +56,27 @@
</div>
<?php if (isset($_['files']) and $_['isCreatable'] and count($_['files'])==0):?>
- <div id="emptyfolder"><?php p($l->t('Nothing in here. Upload something!'))?></div>
+ <div id="emptycontent"><?php p($l->t('Nothing in here. Upload something!'))?></div>
<?php endif; ?>
-<table id="filestable" data-allow-public-upload="<?php p($_['publicUploadEnabled'])?>">
+<table id="filestable" data-allow-public-upload="<?php p($_['publicUploadEnabled'])?>" data-preview-x="36" data-preview-y="36">
<thead>
<tr>
<th id='headerName'>
- <input type="checkbox" id="select_all" />
- <span class='name'><?php p($l->t( 'Name' )); ?></span>
- <span class='selectedActions'>
- <?php if($_['allowZipDownload']) : ?>
- <a href="" class="download">
- <img class="svg" alt="Download"
- src="<?php print_unescaped(OCP\image_path("core", "actions/download.svg")); ?>" />
- <?php p($l->t('Download'))?>
- </a>
- <?php endif; ?>
- </span>
+ <div id="headerName-container">
+ <input type="checkbox" id="select_all" />
+ <label for="select_all"></label>
+ <span class="name"><?php p($l->t( 'Name' )); ?></span>
+ <span class="selectedActions">
+ <?php if($_['allowZipDownload']) : ?>
+ <a href="" class="download">
+ <img class="svg" alt="Download"
+ src="<?php print_unescaped(OCP\image_path("core", "actions/download.svg")); ?>" />
+ <?php p($l->t('Download'))?>
+ </a>
+ <?php endif; ?>
+ </span>
+ </div>
</th>
<th id="headerSize"><?php p($l->t('Size')); ?></th>
<th id="headerDate">
@@ -101,7 +104,7 @@
<?php print_unescaped($_['fileList']); ?>
</tbody>
</table>
-<div id="editor"></div>
+<div id="editor"></div><!-- FIXME Do not use this div in your app! It is deprecated and will be removed in the future! -->
<div id="uploadsize-message" title="<?php p($l->t('Upload too large'))?>">
<p>
<?php p($l->t('The files you are trying to upload exceed the maximum size for file uploads on this server.'));?>
@@ -119,3 +122,4 @@
<!-- config hints for javascript -->
<input type="hidden" name="allowZipDownload" id="allowZipDownload" value="<?php p($_['allowZipDownload']); ?>" />
<input type="hidden" name="usedSpacePercent" id="usedSpacePercent" value="<?php p($_['usedSpacePercent']); ?>" />
+<input type="hidden" name="encryptedFiles" id="encryptedFiles" value="<?php $_['encryptedFiles'] ? p('1') : p('0'); ?>" />
diff --git a/apps/files/templates/part.list.php b/apps/files/templates/part.list.php
index 39f5ac471e5..4076c1bb331 100644
--- a/apps/files/templates/part.list.php
+++ b/apps/files/templates/part.list.php
@@ -1,15 +1,7 @@
<input type="hidden" id="disableSharing" data-status="<?php p($_['disableSharing']); ?>">
-<?php $totalfiles = 0;
-$totaldirs = 0;
-$totalsize = 0;
-$pc = 0; ?>
<?php foreach($_['files'] as $file):
- $totalsize += $file['size'];
- if ($file['type'] === 'dir') {
- $totaldirs++;
- } else {
- $totalfiles++;
- }
+ //strlen('files/') => 6
+ $relativePath = substr($file['path'], 6);
// the bigger the file, the darker the shade of grey; megabytes*2
$simple_size_color = intval(160-$file['size']/(1024*1024)*2);
if($simple_size_color<0) $simple_size_color = 0;
@@ -18,23 +10,43 @@ $pc = 0; ?>
$relative_date_color = round((time()-$file['mtime'])/60/60/24*14);
if($relative_date_color>160) $relative_date_color = 160;
$name = \OCP\Util::encodePath($file['name']);
- $directory = \OCP\Util::encodePath($file['directory']);
- ?>
- <!--<tr style="position:absolute; width:100%"><td colspan="3" style="display:block;"><div style="width: <?php echo $pc++; ?>%; height: 31px;background-color: green;"/></td></tr>-->
+ $directory = \OCP\Util::encodePath($file['directory']); ?>
<tr data-id="<?php p($file['fileid']); ?>"
data-file="<?php p($name);?>"
data-type="<?php ($file['type'] == 'dir')?p('dir'):p('file')?>"
data-mime="<?php p($file['mimetype'])?>"
- data-size='<?php p($file['size']);?>'
- data-permissions='<?php p($file['permissions']); ?>'>
+ data-size="<?php p($file['size']);?>"
+ data-permissions="<?php p($file['permissions']); ?>">
+ <?php if($file['isPreviewAvailable']): ?>
+ <td class="filename svg preview-icon"
+ <?php else: ?>
<td class="filename svg"
+ <?php endif; ?>
<?php if($file['type'] == 'dir'): ?>
style="background-image:url(<?php print_unescaped(OCP\mimetype_icon('dir')); ?>)"
<?php else: ?>
- style="background-image:url(<?php print_unescaped(OCP\mimetype_icon($file['mimetype'])); ?>)"
+ <?php if($_['isPublic']): ?>
+ <?php
+ $relativePath = substr($relativePath, strlen($_['sharingroot']));
+ ?>
+ <?php if($file['isPreviewAvailable']): ?>
+ style="background-image:url(<?php print_unescaped(OCP\publicPreview_icon($relativePath, $_['sharingtoken'])); ?>)"
+ <?php else: ?>
+ style="background-image:url(<?php print_unescaped(OCP\mimetype_icon($file['mimetype'])); ?>)"
+ <?php endif; ?>
+ <?php else: ?>
+ <?php if($file['isPreviewAvailable']): ?>
+ style="background-image:url(<?php print_unescaped(OCP\preview_icon($relativePath)); ?>)"
+ <?php else: ?>
+ style="background-image:url(<?php print_unescaped(OCP\mimetype_icon($file['mimetype'])); ?>)"
+ <?php endif; ?>
+ <?php endif; ?>
<?php endif; ?>
>
- <?php if(!isset($_['readonly']) || !$_['readonly']): ?><input type="checkbox" /><?php endif; ?>
+ <?php if(!isset($_['readonly']) || !$_['readonly']): ?>
+ <input id="select-<?php p($file['fileid']); ?>" type="checkbox" />
+ <label for="select-<?php p($file['fileid']); ?>"></label>
+ <?php endif; ?>
<?php if($file['type'] == 'dir'): ?>
<a class="name" href="<?php p(rtrim($_['baseURL'],'/').'/'.trim($directory,'/').'/'.$name); ?>" title="">
<?php else: ?>
@@ -55,47 +67,16 @@ $pc = 0; ?>
</td>
<td class="filesize"
style="color:rgb(<?php p($simple_size_color.','.$simple_size_color.','.$simple_size_color) ?>)">
- <span style="position:relative;">
<?php print_unescaped(OCP\human_file_size($file['size'])); ?>
- </span>
</td>
<td class="date">
<span class="modified"
title="<?php p($file['date']); ?>"
- style="position:relative; color:rgb(<?php p($relative_date_color.','
+ style="color:rgb(<?php p($relative_date_color.','
.$relative_date_color.','
.$relative_date_color) ?>)">
<?php p($relative_modified_date); ?>
</span>
</td>
</tr>
-<?php endforeach; ?>
- <?php if ($totaldirs !== 0 || $totalfiles !== 0): ?>
- <tr class="summary">
- <td><span class="info">
- <?php if ($totaldirs !== 0) {
- p($totaldirs.' ');
- if ($totaldirs === 1) {
- p($l->t('directory'));
- } else {
- p($l->t('directories'));
- }
- }
- if ($totaldirs !== 0 && $totalfiles !== 0) {
- p(' & ');
- }
- if ($totalfiles !== 0) {
- p($totalfiles.' ');
- if ($totalfiles === 1) {
- p($l->t('file'));
- } else {
- p($l->t('files'));
- }
- } ?>
- </span></td>
- <td class="filesize">
- <?php print_unescaped(OCP\human_file_size($totalsize)); ?>
- </td>
- <td></td>
- </tr>
- <?php endif;
+<?php endforeach;
diff --git a/apps/files/tests/ajax_rename.php b/apps/files/tests/ajax_rename.php
index 2b90a11743d..8eff978cde0 100644
--- a/apps/files/tests/ajax_rename.php
+++ b/apps/files/tests/ajax_rename.php
@@ -114,4 +114,4 @@ class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase {
$this->assertEquals($expected, $result);
}
-} \ No newline at end of file
+}
diff --git a/apps/files_encryption/ajax/changeRecoveryPassword.php b/apps/files_encryption/ajax/changeRecoveryPassword.php
index 366f634a51c..945f054ea84 100644
--- a/apps/files_encryption/ajax/changeRecoveryPassword.php
+++ b/apps/files_encryption/ajax/changeRecoveryPassword.php
@@ -49,4 +49,4 @@ if ($return) {
\OCP\JSON::success(array('data' => array('message' => $l->t('Password successfully changed.'))));
} else {
\OCP\JSON::error(array('data' => array('message' => $l->t('Could not change the password. Maybe the old password was not correct.'))));
-} \ No newline at end of file
+}
diff --git a/apps/files_encryption/ajax/updatePrivateKeyPassword.php b/apps/files_encryption/ajax/updatePrivateKeyPassword.php
index 6fd63dae9cd..1e6644da576 100644
--- a/apps/files_encryption/ajax/updatePrivateKeyPassword.php
+++ b/apps/files_encryption/ajax/updatePrivateKeyPassword.php
@@ -51,4 +51,4 @@ if ($return) {
\OCP\JSON::success(array('data' => array('message' => $l->t('Private key password successfully updated.'))));
} else {
\OCP\JSON::error(array('data' => array('message' => $l->t('Could not update the private key password. Maybe the old password was not correct.'))));
-} \ No newline at end of file
+}
diff --git a/apps/files_encryption/ajax/userrecovery.php b/apps/files_encryption/ajax/userrecovery.php
index 1d0f1ac2d17..d6c94bde81e 100644
--- a/apps/files_encryption/ajax/userrecovery.php
+++ b/apps/files_encryption/ajax/userrecovery.php
@@ -38,4 +38,4 @@ if (
}
// Return success or failure
-($return) ? \OCP\JSON::success() : \OCP\JSON::error(); \ No newline at end of file
+($return) ? \OCP\JSON::success() : \OCP\JSON::error();
diff --git a/apps/files_encryption/appinfo/routes.php b/apps/files_encryption/appinfo/routes.php
index ab83432a4b2..07ff920a60d 100644
--- a/apps/files_encryption/appinfo/routes.php
+++ b/apps/files_encryption/appinfo/routes.php
@@ -6,4 +6,4 @@
*/
// Register with the capabilities API
-OC_API::register('get', '/cloud/capabilities', array('OCA\Encryption\Capabilities', 'getCapabilities'), 'files_encryption', OC_API::USER_AUTH); \ No newline at end of file
+OC_API::register('get', '/cloud/capabilities', array('OCA\Encryption\Capabilities', 'getCapabilities'), 'files_encryption', OC_API::USER_AUTH);
diff --git a/apps/files_encryption/css/settings-personal.css b/apps/files_encryption/css/settings-personal.css
index 4ee0acc9768..8eb5bedcb06 100644
--- a/apps/files_encryption/css/settings-personal.css
+++ b/apps/files_encryption/css/settings-personal.css
@@ -7,4 +7,4 @@
, #recoveryEnabledError
, #recoveryEnabledSuccess {
display: none;
-} \ No newline at end of file
+}
diff --git a/apps/files_encryption/files/error.php b/apps/files_encryption/files/error.php
index f93c67d920a..2dd27257abe 100644
--- a/apps/files_encryption/files/error.php
+++ b/apps/files_encryption/files/error.php
@@ -1,6 +1,6 @@
<?php
if (!isset($_)) { //also provide standalone error page
- require_once '../../../lib/base.php';
+ require_once __DIR__ . '/../../../lib/base.php';
$l = OC_L10N::get('files_encryption');
diff --git a/apps/files_encryption/hooks/hooks.php b/apps/files_encryption/hooks/hooks.php
index 07da839e8a2..85169e6a1d0 100644
--- a/apps/files_encryption/hooks/hooks.php
+++ b/apps/files_encryption/hooks/hooks.php
@@ -30,23 +30,12 @@ use OC\Files\Filesystem;
*/
class Hooks {
- // TODO: use passphrase for encrypting private key that is separate to
- // the login password
-
/**
* @brief Startup encryption backend upon user login
* @note This method should never be called for users using client side encryption
*/
public static function login($params) {
$l = new \OC_L10N('files_encryption');
- //check if all requirements are met
- if(!Helper::checkRequirements() || !Helper::checkConfiguration() ) {
- $error_msg = $l->t("Missing requirements.");
- $hint = $l->t('Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled.');
- \OC_App::disable('files_encryption');
- \OCP\Util::writeLog('Encryption library', $error_msg . ' ' . $hint, \OCP\Util::ERROR);
- \OCP\Template::printErrorPage($error_msg, $hint);
- }
$view = new \OC_FilesystemView('/');
@@ -57,23 +46,21 @@ class Hooks {
$util = new Util($view, $params['uid']);
+ //check if all requirements are met
+ if(!$util->ready() && (!Helper::checkRequirements() || !Helper::checkConfiguration())) {
+ $error_msg = $l->t("Missing requirements.");
+ $hint = $l->t('Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled.');
+ \OC_App::disable('files_encryption');
+ \OCP\Util::writeLog('Encryption library', $error_msg . ' ' . $hint, \OCP\Util::ERROR);
+ \OCP\Template::printErrorPage($error_msg, $hint);
+ }
+
// setup user, if user not ready force relogin
if (Helper::setupUser($util, $params['password']) === false) {
return false;
}
- $encryptedKey = Keymanager::getPrivateKey($view, $params['uid']);
-
- $privateKey = Crypt::decryptPrivateKey($encryptedKey, $params['password']);
-
- if ($privateKey === false) {
- \OCP\Util::writeLog('Encryption library', 'Private key for user "' . $params['uid']
- . '" is not valid! Maybe the user password was changed from outside if so please change it back to gain access', \OCP\Util::ERROR);
- }
-
- $session = new \OCA\Encryption\Session($view);
-
- $session->setPrivateKey($privateKey);
+ $session = $util->initEncryption($params);
// Check if first-run file migration has already been performed
$ready = false;
diff --git a/apps/files_encryption/js/settings-admin.js b/apps/files_encryption/js/settings-admin.js
index 7c1866445ee..6647c621e7b 100644
--- a/apps/files_encryption/js/settings-admin.js
+++ b/apps/files_encryption/js/settings-admin.js
@@ -99,4 +99,4 @@ $(document).ready(function(){
);
});
-}); \ No newline at end of file
+});
diff --git a/apps/files_encryption/js/settings-personal.js b/apps/files_encryption/js/settings-personal.js
index d6535a25b70..e16519c3c98 100644
--- a/apps/files_encryption/js/settings-personal.js
+++ b/apps/files_encryption/js/settings-personal.js
@@ -95,4 +95,4 @@ $(document).ready(function(){
updatePrivateKeyPasswd();
});
-}); \ No newline at end of file
+});
diff --git a/apps/files_encryption/l10n/cs_CZ.php b/apps/files_encryption/l10n/cs_CZ.php
index 8bd47239385..89f63cc1cdd 100644
--- a/apps/files_encryption/l10n/cs_CZ.php
+++ b/apps/files_encryption/l10n/cs_CZ.php
@@ -10,6 +10,7 @@ $TRANSLATIONS = array(
"Could not update the private key password. Maybe the old password was not correct." => "Nelze aktualizovat heslo soukromého klíče. Možná nebylo staré heslo správně.",
"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Váš soukromý klíč není platný! Pravděpodobně bylo heslo změněno vně systému ownCloud (např. ve vašem firemním adresáři). Heslo vašeho soukromého klíče můžete změnit ve svém osobním nastavení pro obnovení přístupu k vašim zašifrovaným souborům.",
"Missing requirements." => "Nesplněné závislosti.",
+"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Ujistěte se prosím, že máte nainstalované PHP 5.3.3 nebo novější a že máte povolené a správně nakonfigurované OpenSSL včetně jeho rozšíření pro PHP. Prozatím byla aplikace pro šifrování vypnuta.",
"Following users are not set up for encryption:" => "Následující uživatelé nemají nastavené šifrování:",
"Saving..." => "Ukládám...",
"Your private key is not valid! Maybe the your password was changed from outside." => "Váš soukromý klíč není platný! Pravděpodobně bylo vaše heslo změněno zvenčí.",
diff --git a/apps/files_encryption/l10n/da.php b/apps/files_encryption/l10n/da.php
index 19e6b1d2e8c..1b7069b6784 100644
--- a/apps/files_encryption/l10n/da.php
+++ b/apps/files_encryption/l10n/da.php
@@ -10,6 +10,8 @@ $TRANSLATIONS = array(
"Could not update the private key password. Maybe the old password was not correct." => "Kunne ikke opdatere det private nøgle kodeord-. Måske var det gamle kodeord forkert.",
"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Din private nøgle er gyldig! Sandsynligvis blev dit kodeord ændre uden for ownCloud systemet (f.eks. dit firmas register). Du kan opdatere dit private nøgle kodeord under personlige indstillinger, for at generhverve adgang til dine krypterede filer.",
"Missing requirements." => "Manglende betingelser.",
+"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Sørg for at PHP 5.3.3 eller nyere er installeret og at OpenSSL sammen med PHP-udvidelsen er aktiveret og korrekt konfigureret. Indtil videre er krypteringsprogrammet deaktiveret.",
+"Following users are not set up for encryption:" => "Følgende brugere er ikke sat op til kryptering:",
"Saving..." => "Gemmer...",
"Your private key is not valid! Maybe the your password was changed from outside." => "Din private nøgle er ikke gyldig. Måske blev dit kodeord ændre udefra.",
"You can unlock your private key in your " => "Du kan låse din private nøgle op i din ",
diff --git a/apps/files_encryption/l10n/fr.php b/apps/files_encryption/l10n/fr.php
index 12af8101394..358937441e2 100644
--- a/apps/files_encryption/l10n/fr.php
+++ b/apps/files_encryption/l10n/fr.php
@@ -10,6 +10,8 @@ $TRANSLATIONS = array(
"Could not update the private key password. Maybe the old password was not correct." => "Impossible de mettre à jour le mot de passe de la clé privé. Peut-être que l'ancien mot de passe n'était pas correcte.",
"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Votre clé de sécurité privée n'est pas valide! Il est probable que votre mot de passe ait été changé sans passer par le système ownCloud (par éxemple: le serveur de votre entreprise). Ain d'avoir à nouveau accès à vos fichiers cryptés, vous pouvez mettre à jour votre clé de sécurité privée dans les paramètres personnels de votre compte.",
"Missing requirements." => "Système minimum requis non respecté.",
+"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Veuillez vous assurer qu'une version de PHP 5.3.3 ou supérieure est installée et qu'OpenSSL et son extension PHP sont activés et configurés correctement. En attendant, l'application de chiffrement été désactivée.",
+"Following users are not set up for encryption:" => "Les utilisateurs suivants ne sont pas configurés pour le chiffrement :",
"Saving..." => "Enregistrement...",
"Your private key is not valid! Maybe the your password was changed from outside." => "Votre clef privée est invalide ! Votre mot de passe a peut-être été modifié depuis l'extérieur.",
"You can unlock your private key in your " => "Vous pouvez déverrouiller votre clé privée dans votre",
diff --git a/apps/files_encryption/l10n/hu_HU.php b/apps/files_encryption/l10n/hu_HU.php
index 49dcf817fb7..323291bbfbe 100644
--- a/apps/files_encryption/l10n/hu_HU.php
+++ b/apps/files_encryption/l10n/hu_HU.php
@@ -1,6 +1,18 @@
<?php
$TRANSLATIONS = array(
+"Recovery key successfully disabled" => "Visszaállítási kulcs sikeresen kikapcsolva",
+"Password successfully changed." => "Jelszó sikeresen megváltoztatva.",
+"Could not change the password. Maybe the old password was not correct." => "A jelszót nem lehet megváltoztatni! Lehet, hogy hibás volt a régi jelszó.",
+"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Kérlek győződj meg arról, hogy PHP 5.3.3 vagy annál frissebb van telepítve, valamint a PHP-hez tartozó OpenSSL bővítmény be van-e kapcsolva és az helyesen van-e konfigurálva! Ki lett kapcsolva ideiglenesen a titkosító alkalmazás.",
"Saving..." => "Mentés...",
-"Encryption" => "Titkosítás"
+"personal settings" => "személyes beállítások",
+"Encryption" => "Titkosítás",
+"Enabled" => "Bekapcsolva",
+"Disabled" => "Kikapcsolva",
+"Change Password" => "Jelszó megváltoztatása",
+"Old log-in password" => "Régi bejelentkezési jelszó",
+"Current log-in password" => "Jelenlegi bejelentkezési jelszó",
+"Update Private Key Password" => "Privát kulcs jelszó frissítése",
+"Enable password recovery:" => "Jelszó-visszaállítás bekapcsolása"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_encryption/l10n/ru.php b/apps/files_encryption/l10n/ru.php
index 76fd8c5ba53..e0d52399c73 100644
--- a/apps/files_encryption/l10n/ru.php
+++ b/apps/files_encryption/l10n/ru.php
@@ -10,6 +10,8 @@ $TRANSLATIONS = array(
"Could not update the private key password. Maybe the old password was not correct." => "Невозможно обновить пароль от секретного ключа. Возможно, старый пароль указан неверно.",
"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Ваш секретный ключ не действителен! Вероятно, ваш пароль был изменен вне системы OwnCloud (например, корпоративный каталог). Вы можете обновить секретный ключ в личных настройках на странице восстановления доступа к зашифрованным файлам. ",
"Missing requirements." => "Требования отсутствуют.",
+"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Пожалуйста, убедитесь, что версия PHP 5.3.3 или новее, а также, что OpenSSL и соответствующее расширение PHP включены и правильно настроены. На данный момент приложение шифрования отключено.",
+"Following users are not set up for encryption:" => "Для следующих пользователей шифрование не настроено:",
"Saving..." => "Сохранение...",
"Your private key is not valid! Maybe the your password was changed from outside." => "Секретный ключ недействителен! Возможно, Ваш пароль был изменён в другой программе.",
"You can unlock your private key in your " => "Вы можете разблокировать закрытый ключ в своём ",
diff --git a/apps/files_encryption/l10n/ru_RU.php b/apps/files_encryption/l10n/ru_RU.php
deleted file mode 100644
index 438e6fb5e97..00000000000
--- a/apps/files_encryption/l10n/ru_RU.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Saving..." => "Сохранение"
-);
-$PLURAL_FORMS = "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_encryption/l10n/sk_SK.php b/apps/files_encryption/l10n/sk_SK.php
index a723d80773b..a80eb3e6521 100644
--- a/apps/files_encryption/l10n/sk_SK.php
+++ b/apps/files_encryption/l10n/sk_SK.php
@@ -8,12 +8,22 @@ $TRANSLATIONS = array(
"Could not change the password. Maybe the old password was not correct." => "Nemožno zmeniť heslo. Pravdepodobne nebolo staré heslo zadané správne.",
"Private key password successfully updated." => "Heslo súkromného kľúča je úspešne aktualizované.",
"Could not update the private key password. Maybe the old password was not correct." => "Nemožno aktualizovať heslo súkromného kľúča. Možno nebolo staré heslo správne.",
+"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Váš privátny kľúč je nesprávny! Pravdepodobne bolo zmenené vaše heslo mimo systému ownCloud (napr. váš korporátny adresár). Môžte aktualizovať vaše heslo privátneho kľúča v osobných nastaveniach za účelom obnovenia prístupu k zašifrovaným súborom.",
+"Missing requirements." => "Chýbajúce požiadavky.",
+"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Prosím uistite sa, že PHP verzie 5.3.3 alebo novšej je nainštalované a tiež, že OpenSSL knižnica spolu z PHP rozšírením je povolená a konfigurovaná správne. Nateraz bola aplikácia šifrovania zablokovaná.",
+"Following users are not set up for encryption:" => "Nasledujúci používatelia nie sú nastavení pre šifrovanie:",
"Saving..." => "Ukladám...",
"Your private key is not valid! Maybe the your password was changed from outside." => "Váš súkromný kľúč je neplatný. Možno bolo Vaše heslo zmenené z vonku.",
+"You can unlock your private key in your " => "Môžte odomknúť váš privátny kľúč v",
"personal settings" => "osobné nastavenia",
"Encryption" => "Šifrovanie",
+"Enable recovery key (allow to recover users files in case of password loss):" => "Povoliť obnovovací kľúč (umožňuje obnoviť používateľské súbory v prípade straty hesla):",
+"Recovery key password" => "Heslo obnovovacieho kľúča",
"Enabled" => "Povolené",
"Disabled" => "Zakázané",
+"Change recovery key password:" => "Zmeniť heslo obnovovacieho kľúča:",
+"Old Recovery key password" => "Staré heslo obnovovacieho kľúča",
+"New Recovery key password" => "Nové heslo obnovovacieho kľúča",
"Change Password" => "Zmeniť heslo",
"Your private key password no longer match your log-in password:" => "Vaše heslo súkromného kľúča je rovnaké ako Vaše prihlasovacie heslo:",
"Set your old private key password to your current log-in password." => "Nastavte si staré heslo súkromného kľúča k Vášmu súčasnému prihlasovaciemu heslu.",
diff --git a/apps/files_encryption/l10n/zh_CN.GB2312.php b/apps/files_encryption/l10n/zh_CN.GB2312.php
deleted file mode 100644
index 0f9f459c771..00000000000
--- a/apps/files_encryption/l10n/zh_CN.GB2312.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Saving..." => "保存中...",
-"Encryption" => "加密"
-);
-$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_encryption/lib/capabilities.php b/apps/files_encryption/lib/capabilities.php
index 72baddcd049..ef94c9e086d 100644
--- a/apps/files_encryption/lib/capabilities.php
+++ b/apps/files_encryption/lib/capabilities.php
@@ -20,4 +20,4 @@ class Capabilities {
));
}
-} \ No newline at end of file
+}
diff --git a/apps/files_encryption/lib/crypt.php b/apps/files_encryption/lib/crypt.php
index c3e88e5944e..c009718160a 100755
--- a/apps/files_encryption/lib/crypt.php
+++ b/apps/files_encryption/lib/crypt.php
@@ -25,8 +25,7 @@
namespace OCA\Encryption;
-//require_once '../3rdparty/Crypt_Blowfish/Blowfish.php';
-require_once realpath(dirname(__FILE__) . '/../3rdparty/Crypt_Blowfish/Blowfish.php');
+require_once __DIR__ . '/../3rdparty/Crypt_Blowfish/Blowfish.php';
/**
* Class for common cryptography functionality
@@ -53,14 +52,14 @@ class Crypt {
$return = false;
- $res = openssl_pkey_new(array('private_key_bits' => 4096));
+ $res = Helper::getOpenSSLPkey();
if ($res === false) {
\OCP\Util::writeLog('Encryption library', 'couldn\'t generate users key-pair for ' . \OCP\User::getUser(), \OCP\Util::ERROR);
while ($msg = openssl_error_string()) {
\OCP\Util::writeLog('Encryption library', 'openssl_pkey_new() fails: ' . $msg, \OCP\Util::ERROR);
}
- } elseif (openssl_pkey_export($res, $privateKey)) {
+ } elseif (openssl_pkey_export($res, $privateKey, null, Helper::getOpenSSLConfig())) {
// Get public key
$keyDetails = openssl_pkey_get_details($res);
$publicKey = $keyDetails['key'];
@@ -71,7 +70,9 @@ class Crypt {
);
} else {
\OCP\Util::writeLog('Encryption library', 'couldn\'t export users private key, please check your servers openSSL configuration.' . \OCP\User::getUser(), \OCP\Util::ERROR);
- \OCP\Util::writeLog('Encryption library', openssl_error_string(), \OCP\Util::ERROR);
+ while($errMsg = openssl_error_string()) {
+ \OCP\Util::writeLog('Encryption library', $errMsg, \OCP\Util::ERROR);
+ }
}
return $return;
@@ -86,7 +87,7 @@ class Crypt {
* blocks with encryption alone, hence padding is added to achieve the
* required length.
*/
- public static function addPadding($data) {
+ private static function addPadding($data) {
$padded = $data . 'xx';
@@ -99,7 +100,7 @@ class Crypt {
* @param string $padded padded data to remove padding from
* @return string unpadded data on success, false on error
*/
- public static function removePadding($padded) {
+ private static function removePadding($padded) {
if (substr($padded, -2) === 'xx') {
@@ -207,7 +208,7 @@ class Crypt {
* @param string $passphrase
* @return string encrypted file content
*/
- public static function encrypt($plainContent, $iv, $passphrase = '') {
+ private static function encrypt($plainContent, $iv, $passphrase = '') {
if ($encryptedContent = openssl_encrypt($plainContent, 'AES-128-CFB', $passphrase, false, $iv)) {
return $encryptedContent;
@@ -228,7 +229,7 @@ class Crypt {
* @throws \Exception
* @return string decrypted file content
*/
- public static function decrypt($encryptedContent, $iv, $passphrase) {
+ private static function decrypt($encryptedContent, $iv, $passphrase) {
if ($plainContent = openssl_decrypt($encryptedContent, 'AES-128-CFB', $passphrase, false, $iv)) {
@@ -248,7 +249,7 @@ class Crypt {
* @param string $iv IV to be concatenated
* @returns string concatenated content
*/
- public static function concatIv($content, $iv) {
+ private static function concatIv($content, $iv) {
$combined = $content . '00iv00' . $iv;
@@ -261,7 +262,7 @@ class Crypt {
* @param string $catFile concatenated data to be split
* @returns array keys: encrypted, iv
*/
- public static function splitIv($catFile) {
+ private static function splitIv($catFile) {
// Fetch encryption metadata from end of file
$meta = substr($catFile, -22);
@@ -378,34 +379,6 @@ class Crypt {
}
-
- /**
- * @brief Creates symmetric keyfile content using a generated key
- * @param string $plainContent content to be encrypted
- * @returns array keys: key, encrypted
- * @note symmetricDecryptFileContent() can be used to decrypt files created using this method
- *
- * This function decrypts a file
- */
- public static function symmetricEncryptFileContentKeyfile($plainContent) {
-
- $key = self::generateKey();
-
- if ($encryptedContent = self::symmetricEncryptFileContent($plainContent, $key)) {
-
- return array(
- 'key' => $key,
- 'encrypted' => $encryptedContent
- );
-
- } else {
-
- return false;
-
- }
-
- }
-
/**
* @brief Create asymmetrically encrypted keyfile content using a generated key
* @param string $plainContent content to be encrypted
@@ -489,42 +462,10 @@ class Crypt {
}
/**
- * @brief Asymetrically encrypt a string using a public key
- * @param $plainContent
- * @param $publicKey
- * @return string encrypted file
- */
- public static function keyEncrypt($plainContent, $publicKey) {
-
- openssl_public_encrypt($plainContent, $encryptedContent, $publicKey);
-
- return $encryptedContent;
-
- }
-
- /**
- * @brief Asymetrically decrypt a file using a private key
- * @param $encryptedContent
- * @param $privatekey
- * @return string decrypted file
- */
- public static function keyDecrypt($encryptedContent, $privatekey) {
-
- $result = @openssl_private_decrypt($encryptedContent, $plainContent, $privatekey);
-
- if ($result) {
- return $plainContent;
- }
-
- return $result;
-
- }
-
- /**
* @brief Generates a pseudo random initialisation vector
* @return String $iv generated IV
*/
- public static function generateIv() {
+ private static function generateIv() {
if ($random = openssl_random_pseudo_bytes(12, $strong)) {
@@ -550,7 +491,7 @@ class Crypt {
}
/**
- * @brief Generate a pseudo random 1024kb ASCII key
+ * @brief Generate a pseudo random 1024kb ASCII key, used as file key
* @returns $key Generated key
*/
public static function generateKey() {
@@ -576,13 +517,13 @@ class Crypt {
}
/**
- * @brief Get the blowfish encryption handeler for a key
+ * @brief Get the blowfish encryption handler for a key
* @param $key string (optional)
* @return \Crypt_Blowfish blowfish object
*
- * if the key is left out, the default handeler will be used
+ * if the key is left out, the default handler will be used
*/
- public static function getBlowfish($key = '') {
+ private static function getBlowfish($key = '') {
if ($key) {
@@ -597,38 +538,6 @@ class Crypt {
}
/**
- * @param $passphrase
- * @return mixed
- */
- public static function legacyCreateKey($passphrase) {
-
- // Generate a random integer
- $key = mt_rand(10000, 99999) . mt_rand(10000, 99999) . mt_rand(10000, 99999) . mt_rand(10000, 99999);
-
- // Encrypt the key with the passphrase
- $legacyEncKey = self::legacyEncrypt($key, $passphrase);
-
- return $legacyEncKey;
-
- }
-
- /**
- * @brief encrypts content using legacy blowfish system
- * @param string $content the cleartext message you want to encrypt
- * @param string $passphrase
- * @returns string encrypted content
- *
- * This function encrypts an content
- */
- public static function legacyEncrypt($content, $passphrase = '') {
-
- $bf = self::getBlowfish($passphrase);
-
- return $bf->encrypt($content);
-
- }
-
- /**
* @brief decrypts content using legacy blowfish system
* @param string $content the cleartext message you want to decrypt
* @param string $passphrase
@@ -665,4 +574,4 @@ class Crypt {
}
}
-} \ No newline at end of file
+}
diff --git a/apps/files_encryption/lib/helper.php b/apps/files_encryption/lib/helper.php
index b09c584c0b8..445d7ff8ca7 100755
--- a/apps/files_encryption/lib/helper.php
+++ b/apps/files_encryption/lib/helper.php
@@ -199,6 +199,12 @@ class Helper {
public static function stripUserFilesPath($path) {
$trimmed = ltrim($path, '/');
$split = explode('/', $trimmed);
+
+ // it is not a file relative to data/user/files
+ if (count($split) < 3 || $split[1] !== 'files') {
+ return false;
+ }
+
$sliced = array_slice($split, 2);
$relPath = implode('/', $sliced);
@@ -206,6 +212,27 @@ class Helper {
}
/**
+ * @brief get path to the correspondig file in data/user/files
+ * @param string $path path to a version or a file in the trash
+ * @return string path to correspondig file relative to data/user/files
+ */
+ public static function getPathToRealFile($path) {
+ $trimmed = ltrim($path, '/');
+ $split = explode('/', $trimmed);
+
+ if (count($split) < 3 || $split[1] !== "files_versions") {
+ return false;
+ }
+
+ $sliced = array_slice($split, 2);
+ $realPath = implode('/', $sliced);
+ //remove the last .v
+ $realPath = substr($realPath, 0, strrpos($realPath, '.v'));
+
+ return $realPath;
+ }
+
+ /**
* @brief redirect to a error page
*/
public static function redirectToErrorPage() {
@@ -238,7 +265,7 @@ class Helper {
* @return bool true if configuration seems to be OK
*/
public static function checkConfiguration() {
- if(openssl_pkey_new(array('private_key_bits' => 4096))) {
+ if(self::getOpenSSLPkey()) {
return true;
} else {
while ($msg = openssl_error_string()) {
@@ -249,6 +276,26 @@ class Helper {
}
/**
+ * Create an openssl pkey with config-supplied settings
+ * WARNING: This initializes a new private keypair, which is computationally expensive
+ * @return resource The pkey resource created
+ */
+ public static function getOpenSSLPkey() {
+ return openssl_pkey_new(self::getOpenSSLConfig());
+ }
+
+ /**
+ * Return an array of OpenSSL config options, default + config
+ * Used for multiple OpenSSL functions
+ * @return array The combined defaults and config settings
+ */
+ public static function getOpenSSLConfig() {
+ $config = array('private_key_bits' => 4096);
+ $config = array_merge(\OCP\Config::getSystemValue('openssl', array()), $config);
+ return $config;
+ }
+
+ /**
* @brief glob uses different pattern than regular expressions, escape glob pattern only
* @param unescaped path
* @return escaped path
diff --git a/apps/files_encryption/lib/keymanager.php b/apps/files_encryption/lib/keymanager.php
index b2fd650f18d..5386de486e1 100755
--- a/apps/files_encryption/lib/keymanager.php
+++ b/apps/files_encryption/lib/keymanager.php
@@ -593,4 +593,4 @@ class Keymanager {
return $targetPath;
}
-} \ No newline at end of file
+}
diff --git a/apps/files_encryption/lib/proxy.php b/apps/files_encryption/lib/proxy.php
index 735eba911a9..eb7ba60cb9d 100644
--- a/apps/files_encryption/lib/proxy.php
+++ b/apps/files_encryption/lib/proxy.php
@@ -116,7 +116,7 @@ class Proxy extends \OC_FileProxy {
return true;
}
- $handle = fopen('crypt://' . $relativePath . '.etmp', 'w');
+ $handle = fopen('crypt://' . $path . '.etmp', 'w');
if (is_resource($handle)) {
// write data to stream
@@ -154,9 +154,6 @@ class Proxy extends \OC_FileProxy {
$plainData = null;
$view = new \OC_FilesystemView('/');
- // get relative path
- $relativePath = \OCA\Encryption\Helper::stripUserFilesPath($path);
-
// init session
$session = new \OCA\Encryption\Session($view);
@@ -166,7 +163,7 @@ class Proxy extends \OC_FileProxy {
&& Crypt::isCatfileContent($data)
) {
- $handle = fopen('crypt://' . $relativePath, 'r');
+ $handle = fopen('crypt://' . $path, 'r');
if (is_resource($handle)) {
while (($plainDataChunk = fgets($handle, 8192)) !== false) {
@@ -296,14 +293,14 @@ class Proxy extends \OC_FileProxy {
// Open the file using the crypto stream wrapper
// protocol and let it do the decryption work instead
- $result = fopen('crypt://' . $relativePath, $meta['mode']);
+ $result = fopen('crypt://' . $path, $meta['mode']);
} elseif (
self::shouldEncrypt($path)
and $meta ['mode'] !== 'r'
and $meta['mode'] !== 'rb'
) {
- $result = fopen('crypt://' . $relativePath, $meta['mode']);
+ $result = fopen('crypt://' . $path, $meta['mode']);
}
// Re-enable the proxy
diff --git a/apps/files_encryption/lib/stream.php b/apps/files_encryption/lib/stream.php
index 3c1eb2c5f5e..335ea3733eb 100644
--- a/apps/files_encryption/lib/stream.php
+++ b/apps/files_encryption/lib/stream.php
@@ -62,6 +62,7 @@ class Stream {
private $unencryptedSize;
private $publicKey;
private $encKeyfile;
+ private $newFile; // helper var, we only need to write the keyfile for new files
/**
* @var \OC\Files\View
*/
@@ -73,13 +74,16 @@ class Stream {
private $privateKey;
/**
- * @param $path
+ * @param $path raw path relative to data/
* @param $mode
* @param $options
* @param $opened_path
* @return bool
*/
public function stream_open($path, $mode, $options, &$opened_path) {
+
+ // assume that the file already exist before we decide it finally in getKey()
+ $this->newFile = false;
if (!isset($this->rootView)) {
$this->rootView = new \OC_FilesystemView('/');
@@ -93,12 +97,21 @@ class Stream {
$this->userId = $util->getUserId();
- // Strip identifier text from path, this gives us the path relative to data/<user>/files
- $this->relPath = \OC\Files\Filesystem::normalizePath(str_replace('crypt://', '', $path));
-
// rawPath is relative to the data directory
- $this->rawPath = $util->getUserFilesDir() . $this->relPath;
+ $this->rawPath = \OC\Files\Filesystem::normalizePath(str_replace('crypt://', '', $path));
+ // Strip identifier text from path, this gives us the path relative to data/<user>/files
+ $this->relPath = Helper::stripUserFilesPath($this->rawPath);
+ // if raw path doesn't point to a real file, check if it is a version or a file in the trash bin
+ if ($this->relPath === false) {
+ $this->relPath = Helper::getPathToRealFile($this->rawPath);
+ }
+
+ if($this->relPath === false) {
+ \OCP\Util::writeLog('Encryption library', 'failed to open file "' . $this->rawPath . '" expecting a path to user/files or to user/files_versions', \OCP\Util::ERROR);
+ return false;
+ }
+
// Disable fileproxies so we can get the file size and open the source file without recursive encryption
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
@@ -258,6 +271,8 @@ class Stream {
} else {
+ $this->newFile = true;
+
return false;
}
@@ -436,9 +451,7 @@ class Stream {
fwrite($this->handle, $encrypted);
$this->writeCache = '';
-
}
-
}
/**
@@ -451,56 +464,63 @@ class Stream {
// if there is no valid private key return false
if ($this->privateKey === false) {
- // cleanup
- if ($this->meta['mode'] !== 'r' && $this->meta['mode'] !== 'rb') {
+ // cleanup
+ if ($this->meta['mode'] !== 'r' && $this->meta['mode'] !== 'rb') {
- // Disable encryption proxy to prevent recursive calls
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
+ // Disable encryption proxy to prevent recursive calls
+ $proxyStatus = \OC_FileProxy::$enabled;
+ \OC_FileProxy::$enabled = false;
- if ($this->rootView->file_exists($this->rawPath) && $this->size === 0) {
- $this->rootView->unlink($this->rawPath);
- }
-
- // Re-enable proxy - our work is done
- \OC_FileProxy::$enabled = $proxyStatus;
+ if ($this->rootView->file_exists($this->rawPath) && $this->size === 0) {
+ $this->rootView->unlink($this->rawPath);
}
+ // Re-enable proxy - our work is done
+ \OC_FileProxy::$enabled = $proxyStatus;
+ }
+
// if private key is not valid redirect user to a error page
\OCA\Encryption\Helper::redirectToErrorPage();
}
if (
- $this->meta['mode'] !== 'r'
- and $this->meta['mode'] !== 'rb'
- and $this->size > 0
+ $this->meta['mode'] !== 'r' &&
+ $this->meta['mode'] !== 'rb' &&
+ $this->size > 0
) {
- // Disable encryption proxy to prevent recursive calls
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
+ // only write keyfiles if it was a new file
+ if ($this->newFile === true) {
+
+ // Disable encryption proxy to prevent recursive calls
+ $proxyStatus = \OC_FileProxy::$enabled;
+ \OC_FileProxy::$enabled = false;
- // Fetch user's public key
- $this->publicKey = Keymanager::getPublicKey($this->rootView, $this->userId);
+ // Fetch user's public key
+ $this->publicKey = Keymanager::getPublicKey($this->rootView, $this->userId);
- // Check if OC sharing api is enabled
- $sharingEnabled = \OCP\Share::isEnabled();
+ // Check if OC sharing api is enabled
+ $sharingEnabled = \OCP\Share::isEnabled();
- $util = new Util($this->rootView, $this->userId);
+ $util = new Util($this->rootView, $this->userId);
- // Get all users sharing the file includes current user
- $uniqueUserIds = $util->getSharingUsersArray($sharingEnabled, $this->relPath, $this->userId);
+ // Get all users sharing the file includes current user
+ $uniqueUserIds = $util->getSharingUsersArray($sharingEnabled, $this->relPath, $this->userId);
- // Fetch public keys for all sharing users
- $publicKeys = Keymanager::getPublicKeys($this->rootView, $uniqueUserIds);
+ // Fetch public keys for all sharing users
+ $publicKeys = Keymanager::getPublicKeys($this->rootView, $uniqueUserIds);
- // Encrypt enc key for all sharing users
- $this->encKeyfiles = Crypt::multiKeyEncrypt($this->plainKey, $publicKeys);
+ // Encrypt enc key for all sharing users
+ $this->encKeyfiles = Crypt::multiKeyEncrypt($this->plainKey, $publicKeys);
- // Save the new encrypted file key
- Keymanager::setFileKey($this->rootView, $this->relPath, $this->userId, $this->encKeyfiles['data']);
+ // Save the new encrypted file key
+ Keymanager::setFileKey($this->rootView, $this->relPath, $this->userId, $this->encKeyfiles['data']);
- // Save the sharekeys
- Keymanager::setShareKeys($this->rootView, $this->relPath, $this->encKeyfiles['keys']);
+ // Save the sharekeys
+ Keymanager::setShareKeys($this->rootView, $this->relPath, $this->encKeyfiles['keys']);
+
+ // Re-enable proxy - our work is done
+ \OC_FileProxy::$enabled = $proxyStatus;
+ }
// get file info
$fileInfo = $this->rootView->getFileInfo($this->rawPath);
@@ -508,9 +528,6 @@ class Stream {
$fileInfo = array();
}
- // Re-enable proxy - our work is done
- \OC_FileProxy::$enabled = $proxyStatus;
-
// set encryption data
$fileInfo['encrypted'] = true;
$fileInfo['size'] = $this->size;
@@ -521,7 +538,6 @@ class Stream {
}
return fclose($this->handle);
-
}
}
diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php
index 50e823585d7..b8d68623493 100644
--- a/apps/files_encryption/lib/util.php
+++ b/apps/files_encryption/lib/util.php
@@ -21,30 +21,6 @@
*
*/
-# Bugs
-# ----
-# Sharing a file to a user without encryption set up will not provide them with access but won't notify the sharer
-# Sharing all files to admin for recovery purposes still in progress
-# Possibly public links are broken (not tested since last merge of master)
-
-
-# Missing features
-# ----------------
-# Make sure user knows if large files weren't encrypted
-
-
-# Test
-# ----
-# Test that writing files works when recovery is enabled, and sharing API is disabled
-# Test trashbin support
-
-
-// Old Todo:
-// - Crypt/decrypt button in the userinterface
-// - Setting if crypto should be on by default
-// - Add a setting "Don´t encrypt files larger than xx because of performance
-// reasons"
-
namespace OCA\Encryption;
/**
@@ -57,45 +33,6 @@ namespace OCA\Encryption;
class Util {
- // Web UI:
-
- //// DONE: files created via web ui are encrypted
- //// DONE: file created & encrypted via web ui are readable in web ui
- //// DONE: file created & encrypted via web ui are readable via webdav
-
-
- // WebDAV:
-
- //// DONE: new data filled files added via webdav get encrypted
- //// DONE: new data filled files added via webdav are readable via webdav
- //// DONE: reading unencrypted files when encryption is enabled works via
- //// webdav
- //// DONE: files created & encrypted via web ui are readable via webdav
-
-
- // Legacy support:
-
- //// DONE: add method to check if file is encrypted using new system
- //// DONE: add method to check if file is encrypted using old system
- //// DONE: add method to fetch legacy key
- //// DONE: add method to decrypt legacy encrypted data
-
-
- // Admin UI:
-
- //// DONE: changing user password also changes encryption passphrase
-
- //// TODO: add support for optional recovery in case of lost passphrase / keys
- //// TODO: add admin optional required long passphrase for users
- //// TODO: implement flag system to allow user to specify encryption by folder, subfolder, etc.
-
-
- // Integration testing:
-
- //// TODO: test new encryption with versioning
- //// DONE: test new encryption with sharing
- //// TODO: test new encryption with proxies
-
const MIGRATION_COMPLETED = 1; // migration to new encryption completed
const MIGRATION_IN_PROGRESS = -1; // migration is running
const MIGRATION_OPEN = 0; // user still needs to be migrated
@@ -403,7 +340,7 @@ class Util {
$filePath = $directory . '/' . $this->view->getRelativePath('/' . $file);
$relPath = \OCA\Encryption\Helper::stripUserFilesPath($filePath);
- // If the path is a directory, search
+ // If the path is a directory, search
// its contents
if ($this->view->is_dir($filePath)) {
@@ -419,8 +356,8 @@ class Util {
$isEncryptedPath = $this->isEncryptedPath($filePath);
// If the file is encrypted
- // NOTE: If the userId is
- // empty or not set, file will
+ // NOTE: If the userId is
+ // empty or not set, file will
// detected as plain
// NOTE: This is inefficient;
// scanning every file like this
@@ -565,9 +502,6 @@ class Util {
// split the path parts
$pathParts = explode('/', $path);
- // get relative path
- $relativePath = \OCA\Encryption\Helper::stripUserFilesPath($path);
-
if (isset($pathParts[2]) && $pathParts[2] === 'files' && $this->view->file_exists($path)
&& $this->isEncryptedPath($path)
) {
@@ -580,7 +514,7 @@ class Util {
$lastChunkNr = floor($size / 8192);
// open stream
- $stream = fopen('crypt://' . $relativePath, "r");
+ $stream = fopen('crypt://' . $path, "r");
if (is_resource($stream)) {
// calculate last chunk position
@@ -663,6 +597,205 @@ class Util {
}
/**
+ * @brief encrypt versions from given file
+ * @param array $filelist list of encrypted files, relative to data/user/files
+ * @return boolean
+ */
+ private function encryptVersions($filelist) {
+
+ $successful = true;
+
+ if (\OCP\App::isEnabled('files_versions')) {
+
+ foreach ($filelist as $filename) {
+
+ $versions = \OCA\Files_Versions\Storage::getVersions($this->userId, $filename);
+ foreach ($versions as $version) {
+
+ $path = '/' . $this->userId . '/files_versions/' . $version['path'] . '.v' . $version['version'];
+
+ $encHandle = fopen('crypt://' . $path . '.part', 'wb');
+
+ if ($encHandle === false) {
+ \OCP\Util::writeLog('Encryption library', 'couldn\'t open "' . $path . '", decryption failed!', \OCP\Util::FATAL);
+ $successful = false;
+ continue;
+ }
+
+ $plainHandle = $this->view->fopen($path, 'rb');
+ if ($plainHandle === false) {
+ \OCP\Util::writeLog('Encryption library', 'couldn\'t open "' . $path . '.part", decryption failed!', \OCP\Util::FATAL);
+ $successful = false;
+ continue;
+ }
+
+ stream_copy_to_stream($plainHandle, $encHandle);
+
+ fclose($encHandle);
+ fclose($plainHandle);
+
+ $this->view->rename($path . '.part', $path);
+ }
+ }
+ }
+
+ return $successful;
+ }
+
+ /**
+ * @brief decrypt versions from given file
+ * @param string $filelist list of decrypted files, relative to data/user/files
+ * @return boolean
+ */
+ private function decryptVersions($filelist) {
+
+ $successful = true;
+
+ if (\OCP\App::isEnabled('files_versions')) {
+
+ foreach ($filelist as $filename) {
+
+ $versions = \OCA\Files_Versions\Storage::getVersions($this->userId, $filename);
+ foreach ($versions as $version) {
+
+ $path = '/' . $this->userId . '/files_versions/' . $version['path'] . '.v' . $version['version'];
+
+ $encHandle = fopen('crypt://' . $path, 'rb');
+
+ if ($encHandle === false) {
+ \OCP\Util::writeLog('Encryption library', 'couldn\'t open "' . $path . '", decryption failed!', \OCP\Util::FATAL);
+ $successful = false;
+ continue;
+ }
+
+ $plainHandle = $this->view->fopen($path . '.part', 'wb');
+ if ($plainHandle === false) {
+ \OCP\Util::writeLog('Encryption library', 'couldn\'t open "' . $path . '.part", decryption failed!', \OCP\Util::FATAL);
+ $successful = false;
+ continue;
+ }
+
+ stream_copy_to_stream($encHandle, $plainHandle);
+
+ fclose($encHandle);
+ fclose($plainHandle);
+
+ $this->view->rename($path . '.part', $path);
+ }
+ }
+ }
+
+ return $successful;
+ }
+
+ /**
+ * @brief Decrypt all files
+ * @return bool
+ */
+ public function decryptAll() {
+
+ $found = $this->findEncFiles($this->userId . '/files');
+
+ $successful = true;
+
+ if ($found) {
+
+ $versionStatus = \OCP\App::isEnabled('files_versions');
+ \OC_App::disable('files_versions');
+
+ $decryptedFiles = array();
+
+ // Encrypt unencrypted files
+ foreach ($found['encrypted'] as $encryptedFile) {
+
+ //get file info
+ $fileInfo = \OC\Files\Filesystem::getFileInfo($encryptedFile['path']);
+
+ //relative to data/<user>/file
+ $relPath = Helper::stripUserFilesPath($encryptedFile['path']);
+
+ //relative to /data
+ $rawPath = $encryptedFile['path'];
+
+ //get timestamp
+ $timestamp = $this->view->filemtime($rawPath);
+
+ //enable proxy to use OC\Files\View to access the original file
+ \OC_FileProxy::$enabled = true;
+
+ // Open enc file handle for binary reading
+ $encHandle = $this->view->fopen($rawPath, 'rb');
+
+ // Disable proxy to prevent file being encrypted again
+ \OC_FileProxy::$enabled = false;
+
+ if ($encHandle === false) {
+ \OCP\Util::writeLog('Encryption library', 'couldn\'t open "' . $rawPath . '", decryption failed!', \OCP\Util::FATAL);
+ $successful = false;
+ continue;
+ }
+
+ // Open plain file handle for binary writing, with same filename as original plain file
+ $plainHandle = $this->view->fopen($rawPath . '.part', 'wb');
+ if ($plainHandle === false) {
+ \OCP\Util::writeLog('Encryption library', 'couldn\'t open "' . $rawPath . '.part", decryption failed!', \OCP\Util::FATAL);
+ $successful = false;
+ continue;
+ }
+
+ // Move plain file to a temporary location
+ $size = stream_copy_to_stream($encHandle, $plainHandle);
+ if ($size === 0) {
+ \OCP\Util::writeLog('Encryption library', 'Zero bytes copied of "' . $rawPath . '", decryption failed!', \OCP\Util::FATAL);
+ $successful = false;
+ continue;
+ }
+
+ fclose($encHandle);
+ fclose($plainHandle);
+
+ $fakeRoot = $this->view->getRoot();
+ $this->view->chroot('/' . $this->userId . '/files');
+
+ $this->view->rename($relPath . '.part', $relPath);
+
+ $this->view->chroot($fakeRoot);
+
+ //set timestamp
+ $this->view->touch($rawPath, $timestamp);
+
+ // Add the file to the cache
+ \OC\Files\Filesystem::putFileInfo($relPath, array(
+ 'encrypted' => false,
+ 'size' => $size,
+ 'unencrypted_size' => $size,
+ 'etag' => $fileInfo['etag']
+ ));
+
+ $decryptedFiles[] = $relPath;
+
+ }
+
+ if ($versionStatus) {
+ \OC_App::enable('files_versions');
+ }
+
+ if (!$this->decryptVersions($decryptedFiles)) {
+ $successful = false;
+ }
+
+ if ($successful) {
+ $this->view->deleteAll($this->keyfilesPath);
+ $this->view->deleteAll($this->shareKeysPath);
+ }
+
+ \OC_FileProxy::$enabled = true;
+ }
+
+ return $successful;
+ }
+
+ /**
* @brief Encrypt all files in a directory
* @param string $dirPath the directory whose files will be encrypted
* @param null $legacyPassphrase
@@ -672,30 +805,44 @@ class Util {
*/
public function encryptAll($dirPath, $legacyPassphrase = null, $newPassphrase = null) {
- if ($found = $this->findEncFiles($dirPath)) {
+ $found = $this->findEncFiles($dirPath);
+
+ if ($found) {
// Disable proxy to prevent file being encrypted twice
\OC_FileProxy::$enabled = false;
+ $versionStatus = \OCP\App::isEnabled('files_versions');
+ \OC_App::disable('files_versions');
+
+ $encryptedFiles = array();
+
// Encrypt unencrypted files
foreach ($found['plain'] as $plainFile) {
+ //get file info
+ $fileInfo = \OC\Files\Filesystem::getFileInfo($plainFile['path']);
+
//relative to data/<user>/file
$relPath = $plainFile['path'];
//relative to /data
$rawPath = '/' . $this->userId . '/files/' . $plainFile['path'];
+ // keep timestamp
+ $timestamp = $this->view->filemtime($rawPath);
+
// Open plain file handle for binary reading
$plainHandle = $this->view->fopen($rawPath, 'rb');
// Open enc file handle for binary writing, with same filename as original plain file
- $encHandle = fopen('crypt://' . $relPath . '.part', 'wb');
+ $encHandle = fopen('crypt://' . $rawPath . '.part', 'wb');
// Move plain file to a temporary location
$size = stream_copy_to_stream($plainHandle, $encHandle);
fclose($encHandle);
+ fclose($plainHandle);
$fakeRoot = $this->view->getRoot();
$this->view->chroot('/' . $this->userId . '/files');
@@ -704,12 +851,19 @@ class Util {
$this->view->chroot($fakeRoot);
+ // set timestamp
+ $this->view->touch($rawPath, $timestamp);
+
// Add the file to the cache
\OC\Files\Filesystem::putFileInfo($relPath, array(
- 'encrypted' => true,
- 'size' => $size,
- 'unencrypted_size' => $size
- ));
+ 'encrypted' => true,
+ 'size' => $size,
+ 'unencrypted_size' => $size,
+ 'etag' => $fileInfo['etag']
+ ));
+
+ $encryptedFiles[] = $relPath;
+
}
// Encrypt legacy encrypted files
@@ -750,6 +904,12 @@ class Util {
\OC_FileProxy::$enabled = true;
+ if ($versionStatus) {
+ \OC_App::enable('files_versions');
+ }
+
+ $this->encryptVersions($encryptedFiles);
+
// If files were found, return true
return true;
} else {
@@ -878,46 +1038,22 @@ class Util {
}
/**
- * @brief Decrypt a keyfile without knowing how it was encrypted
+ * @brief Decrypt a keyfile
* @param string $filePath
- * @param string $fileOwner
* @param string $privateKey
* @return bool|string
- * @note Checks whether file was encrypted with openssl_seal or
- * openssl_encrypt, and decrypts accrdingly
- * @note This was used when 2 types of encryption for keyfiles was used,
- * but now we've switched to exclusively using openssl_seal()
*/
- public function decryptUnknownKeyfile($filePath, $fileOwner, $privateKey) {
+ private function decryptKeyfile($filePath, $privateKey) {
// Get the encrypted keyfile
- // NOTE: the keyfile format depends on how it was encrypted! At
- // this stage we don't know how it was encrypted
$encKeyfile = Keymanager::getFileKey($this->view, $this->userId, $filePath);
- // We need to decrypt the keyfile
- // Has the file been shared yet?
- if (
- $this->userId === $fileOwner
- && !Keymanager::getShareKey($this->view, $this->userId, $filePath) // NOTE: we can't use isShared() here because it's a post share hook so it always returns true
- ) {
-
- // The file has no shareKey, and its keyfile must be
- // decrypted conventionally
- $plainKeyfile = Crypt::keyDecrypt($encKeyfile, $privateKey);
-
+ // The file has a shareKey and must use it for decryption
+ $shareKey = Keymanager::getShareKey($this->view, $this->userId, $filePath);
- } else {
-
- // The file has a shareKey and must use it for decryption
- $shareKey = Keymanager::getShareKey($this->view, $this->userId, $filePath);
-
- $plainKeyfile = Crypt::multiKeyDecrypt($encKeyfile, $shareKey, $privateKey);
-
- }
+ $plainKeyfile = Crypt::multiKeyDecrypt($encKeyfile, $shareKey, $privateKey);
return $plainKeyfile;
-
}
/**
@@ -956,7 +1092,7 @@ class Util {
$fileOwner = \OC\Files\Filesystem::getOwner($filePath);
// Decrypt keyfile
- $plainKeyfile = $this->decryptUnknownKeyfile($filePath, $fileOwner, $privateKey);
+ $plainKeyfile = $this->decryptKeyfile($filePath, $privateKey);
// Re-enc keyfile to (additional) sharekeys
$multiEncKey = Crypt::multiKeyEncrypt($plainKeyfile, $userPubKeys);
@@ -1012,7 +1148,7 @@ class Util {
}
- // If recovery is enabled, add the
+ // If recovery is enabled, add the
// Admin UID to list of users to share to
if ($recoveryEnabled) {
// Find recoveryAdmin user ID
@@ -1579,4 +1715,28 @@ class Util {
return false;
}
+ /**
+ * @brief decrypt private key and add it to the current session
+ * @param array $params with 'uid' and 'password'
+ * @return mixed session or false
+ */
+ public function initEncryption($params) {
+
+ $encryptedKey = Keymanager::getPrivateKey($this->view, $params['uid']);
+
+ $privateKey = Crypt::decryptPrivateKey($encryptedKey, $params['password']);
+
+ if ($privateKey === false) {
+ \OCP\Util::writeLog('Encryption library', 'Private key for user "' . $params['uid']
+ . '" is not valid! Maybe the user password was changed from outside if so please change it back to gain access', \OCP\Util::ERROR);
+ return false;
+ }
+
+ $session = new \OCA\Encryption\Session($this->view);
+
+ $session->setPrivateKey($privateKey);
+
+ return $session;
+ }
+
}
diff --git a/apps/files_encryption/settings-personal.php b/apps/files_encryption/settings-personal.php
index fddc3ea5eee..589219f32ad 100644
--- a/apps/files_encryption/settings-personal.php
+++ b/apps/files_encryption/settings-personal.php
@@ -16,7 +16,7 @@ $view = new \OC_FilesystemView('/');
$util = new \OCA\Encryption\Util($view, $user);
$session = new \OCA\Encryption\Session($view);
-$privateKeySet = ($session->getPrivateKey() !== false) ? true : false;
+$privateKeySet = $session->getPrivateKey() !== false;
$recoveryAdminEnabled = OC_Appconfig::getValue('files_encryption', 'recoveryAdminEnabled');
$recoveryEnabledForUser = $util->recoveryEnabledForUser();
diff --git a/apps/files_encryption/tests/crypt.php b/apps/files_encryption/tests/crypt.php
index 9b97df22d16..5146613e252 100755
--- a/apps/files_encryption/tests/crypt.php
+++ b/apps/files_encryption/tests/crypt.php
@@ -7,16 +7,16 @@
* See the COPYING-README file.
*/
-require_once realpath(dirname(__FILE__) . '/../3rdparty/Crypt_Blowfish/Blowfish.php');
-require_once realpath(dirname(__FILE__) . '/../../../lib/base.php');
-require_once realpath(dirname(__FILE__) . '/../lib/crypt.php');
-require_once realpath(dirname(__FILE__) . '/../lib/keymanager.php');
-require_once realpath(dirname(__FILE__) . '/../lib/proxy.php');
-require_once realpath(dirname(__FILE__) . '/../lib/stream.php');
-require_once realpath(dirname(__FILE__) . '/../lib/util.php');
-require_once realpath(dirname(__FILE__) . '/../lib/helper.php');
-require_once realpath(dirname(__FILE__) . '/../appinfo/app.php');
-require_once realpath(dirname(__FILE__) . '/util.php');
+require_once __DIR__ . '/../3rdparty/Crypt_Blowfish/Blowfish.php';
+require_once __DIR__ . '/../../../lib/base.php';
+require_once __DIR__ . '/../lib/crypt.php';
+require_once __DIR__ . '/../lib/keymanager.php';
+require_once __DIR__ . '/../lib/proxy.php';
+require_once __DIR__ . '/../lib/stream.php';
+require_once __DIR__ . '/../lib/util.php';
+require_once __DIR__ . '/../lib/helper.php';
+require_once __DIR__ . '/../appinfo/app.php';
+require_once __DIR__ . '/util.php';
use OCA\Encryption;
@@ -67,12 +67,12 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$this->pass = \Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1;
// set content for encrypting / decrypting in tests
- $this->dataLong = file_get_contents(realpath(dirname(__FILE__) . '/../lib/crypt.php'));
+ $this->dataLong = file_get_contents(__DIR__ . '/../lib/crypt.php');
$this->dataShort = 'hats';
- $this->dataUrl = realpath(dirname(__FILE__) . '/../lib/crypt.php');
- $this->legacyData = realpath(dirname(__FILE__) . '/legacy-text.txt');
- $this->legacyEncryptedData = realpath(dirname(__FILE__) . '/legacy-encrypted-text.txt');
- $this->legacyEncryptedDataKey = realpath(dirname(__FILE__) . '/encryption.key');
+ $this->dataUrl = __DIR__ . '/../lib/crypt.php';
+ $this->legacyData = __DIR__ . '/legacy-text.txt';
+ $this->legacyEncryptedData = __DIR__ . '/legacy-encrypted-text.txt';
+ $this->legacyEncryptedDataKey = __DIR__ . '/encryption.key';
$this->randomKey = Encryption\Crypt::generateKey();
$keypair = Encryption\Crypt::createKeypair();
@@ -115,130 +115,6 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
}
- /**
- * @large
- * @return String
- */
- function testGenerateIv() {
-
- $iv = Encryption\Crypt::generateIv();
-
- $this->assertEquals(16, strlen($iv));
-
- return $iv;
-
- }
-
- /**
- * @large
- * @depends testGenerateIv
- */
- function testConcatIv($iv) {
-
- $catFile = Encryption\Crypt::concatIv($this->dataLong, $iv);
-
- // Fetch encryption metadata from end of file
- $meta = substr($catFile, -22);
-
- $identifier = substr($meta, 0, 6);
-
- // Fetch IV from end of file
- $foundIv = substr($meta, 6);
-
- $this->assertEquals('00iv00', $identifier);
-
- $this->assertEquals($iv, $foundIv);
-
- // Remove IV and IV identifier text to expose encrypted content
- $data = substr($catFile, 0, -22);
-
- $this->assertEquals($this->dataLong, $data);
-
- return array(
- 'iv' => $iv
- ,
- 'catfile' => $catFile
- );
-
- }
-
- /**
- * @medium
- * @depends testConcatIv
- */
- function testSplitIv($testConcatIv) {
-
- // Split catfile into components
- $splitCatfile = Encryption\Crypt::splitIv($testConcatIv['catfile']);
-
- // Check that original IV and split IV match
- $this->assertEquals($testConcatIv['iv'], $splitCatfile['iv']);
-
- // Check that original data and split data match
- $this->assertEquals($this->dataLong, $splitCatfile['encrypted']);
-
- }
-
- /**
- * @medium
- * @return string padded
- */
- function testAddPadding() {
-
- $padded = Encryption\Crypt::addPadding($this->dataLong);
-
- $padding = substr($padded, -2);
-
- $this->assertEquals('xx', $padding);
-
- return $padded;
-
- }
-
- /**
- * @medium
- * @depends testAddPadding
- */
- function testRemovePadding($padded) {
-
- $noPadding = Encryption\Crypt::RemovePadding($padded);
-
- $this->assertEquals($this->dataLong, $noPadding);
-
- }
-
- /**
- * @medium
- */
- function testEncrypt() {
-
- $random = openssl_random_pseudo_bytes(13);
-
- $iv = substr(base64_encode($random), 0, -4); // i.e. E5IG033j+mRNKrht
-
- $crypted = Encryption\Crypt::encrypt($this->dataUrl, $iv, 'hat');
-
- $this->assertNotEquals($this->dataUrl, $crypted);
-
- }
-
- /**
- * @medium
- */
- function testDecrypt() {
-
- $random = openssl_random_pseudo_bytes(13);
-
- $iv = substr(base64_encode($random), 0, -4); // i.e. E5IG033j+mRNKrht
-
- $crypted = Encryption\Crypt::encrypt($this->dataUrl, $iv, 'hat');
-
- $decrypt = Encryption\Crypt::decrypt($crypted, $iv, 'hat');
-
- $this->assertEquals($this->dataUrl, $decrypt);
-
- }
-
function testDecryptPrivateKey() {
// test successful decrypt
@@ -281,7 +157,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$filename = 'tmp-' . time() . '.test';
- $cryptedFile = file_put_contents('crypt://' . $filename, $this->dataShort);
+ $cryptedFile = file_put_contents('crypt:///' . $this->userId . '/files/'. $filename, $this->dataShort);
// Test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
@@ -339,7 +215,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$filename = 'tmp-' . time() . '.test';
// Save long data as encrypted file using stream wrapper
- $cryptedFile = file_put_contents('crypt://' . $filename, $this->dataLong . $this->dataLong);
+ $cryptedFile = file_put_contents('crypt:///' . $this->userId . '/files/' . $filename, $this->dataLong . $this->dataLong);
// Test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
@@ -364,14 +240,12 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
//print_r($r);
// Join IVs and their respective data chunks
- $e = array(
- $r[0] . $r[1],
- $r[2] . $r[3],
- $r[4] . $r[5],
- $r[6] . $r[7],
- $r[8] . $r[9],
- $r[10] . $r[11]
- ); //.$r[11], $r[12].$r[13], $r[14] );
+ $e = array();
+ $i = 0;
+ while ($i < count($r)-1) {
+ $e[] = $r[$i] . $r[$i+1];
+ $i = $i + 2;
+ }
//print_r($e);
@@ -422,7 +296,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$filename = 'tmp-' . time();
// Save long data as encrypted file using stream wrapper
- $cryptedFile = file_put_contents('crypt://' . $filename, $this->dataShort);
+ $cryptedFile = file_put_contents('crypt:///'. $this->userId . '/files/' . $filename, $this->dataShort);
// Test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
@@ -436,7 +310,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
\OC_FileProxy::$enabled = $proxyStatus;
// Get file decrypted contents
- $decrypt = file_get_contents('crypt://' . $filename);
+ $decrypt = file_get_contents('crypt:///' . $this->userId . '/files/' . $filename);
$this->assertEquals($this->dataShort, $decrypt);
@@ -452,13 +326,13 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$filename = 'tmp-' . time();
// Save long data as encrypted file using stream wrapper
- $cryptedFile = file_put_contents('crypt://' . $filename, $this->dataLong);
+ $cryptedFile = file_put_contents('crypt:///' . $this->userId . '/files/' . $filename, $this->dataLong);
// Test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
// Get file decrypted contents
- $decrypt = file_get_contents('crypt://' . $filename);
+ $decrypt = file_get_contents('crypt:///' . $this->userId . '/files/' . $filename);
$this->assertEquals($this->dataLong, $decrypt);
@@ -469,24 +343,6 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @medium
*/
- function testSymmetricEncryptFileContentKeyfile() {
-
- # TODO: search in keyfile for actual content as IV will ensure this test always passes
-
- $crypted = Encryption\Crypt::symmetricEncryptFileContentKeyfile($this->dataUrl);
-
- $this->assertNotEquals($this->dataUrl, $crypted['encrypted']);
-
-
- $decrypt = Encryption\Crypt::symmetricDecryptFileContent($crypted['encrypted'], $crypted['key']);
-
- $this->assertEquals($this->dataUrl, $decrypt);
-
- }
-
- /**
- * @medium
- */
function testIsEncryptedContent() {
$this->assertFalse(Encryption\Crypt::isCatfileContent($this->dataUrl));
@@ -528,47 +384,11 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @medium
- */
- function testKeyEncrypt() {
-
- // Generate keypair
- $pair1 = Encryption\Crypt::createKeypair();
-
- // Encrypt data
- $crypted = Encryption\Crypt::keyEncrypt($this->dataUrl, $pair1['publicKey']);
-
- $this->assertNotEquals($this->dataUrl, $crypted);
-
- // Decrypt data
- $decrypt = Encryption\Crypt::keyDecrypt($crypted, $pair1['privateKey']);
-
- $this->assertEquals($this->dataUrl, $decrypt);
-
- }
-
- /**
- * @medium
- * @brief test encryption using legacy blowfish method
- */
- function testLegacyEncryptShort() {
-
- $crypted = Encryption\Crypt::legacyEncrypt($this->dataShort, $this->pass);
-
- $this->assertNotEquals($this->dataShort, $crypted);
-
- # TODO: search inencrypted text for actual content to ensure it
- # genuine transformation
-
- return $crypted;
-
- }
-
- /**
- * @medium
* @brief test decryption using legacy blowfish method
- * @depends testLegacyEncryptShort
*/
- function testLegacyDecryptShort($crypted) {
+ function testLegacyDecryptShort() {
+
+ $crypted = $this->legacyEncrypt($this->dataShort, $this->pass);
$decrypted = Encryption\Crypt::legacyBlockDecrypt($crypted, $this->pass);
@@ -578,53 +398,15 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @medium
- * @brief test encryption using legacy blowfish method
- */
- function testLegacyEncryptLong() {
-
- $crypted = Encryption\Crypt::legacyEncrypt($this->dataLong, $this->pass);
-
- $this->assertNotEquals($this->dataLong, $crypted);
-
- # TODO: search inencrypted text for actual content to ensure it
- # genuine transformation
-
- return $crypted;
-
- }
-
- /**
- * @medium
* @brief test decryption using legacy blowfish method
- * @depends testLegacyEncryptLong
*/
- function testLegacyDecryptLong($crypted) {
+ function testLegacyDecryptLong() {
+
+ $crypted = $this->legacyEncrypt($this->dataLong, $this->pass);
$decrypted = Encryption\Crypt::legacyBlockDecrypt($crypted, $this->pass);
$this->assertEquals($this->dataLong, $decrypted);
-
- $this->assertFalse(Encryption\Crypt::getBlowfish(''));
- }
-
- /**
- * @medium
- * @brief test generation of legacy encryption key
- * @depends testLegacyDecryptShort
- */
- function testLegacyCreateKey() {
-
- // Create encrypted key
- $encKey = Encryption\Crypt::legacyCreateKey($this->pass);
-
- // Decrypt key
- $key = Encryption\Crypt::legacyBlockDecrypt($encKey, $this->pass);
-
- $this->assertTrue(is_numeric($key));
-
- // Check that key is correct length
- $this->assertEquals(20, strlen($key));
-
}
/**
@@ -635,13 +417,13 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$filename = 'tmp-' . time();
// Save long data as encrypted file using stream wrapper
- $cryptedFile = file_put_contents('crypt://' . $filename, $this->dataLong);
+ $cryptedFile = file_put_contents('crypt:///' . $this->userId . '/files/' . $filename, $this->dataLong);
// Test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
// Get file decrypted contents
- $decrypt = file_get_contents('crypt://' . $filename);
+ $decrypt = file_get_contents('crypt:///' . $this->userId . '/files/' . $filename);
$this->assertEquals($this->dataLong, $decrypt);
@@ -650,7 +432,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$view->rename($filename, $newFilename);
// Get file decrypted contents
- $newDecrypt = file_get_contents('crypt://' . $newFilename);
+ $newDecrypt = file_get_contents('crypt:///'. $this->userId . '/files/' . $newFilename);
$this->assertEquals($this->dataLong, $newDecrypt);
@@ -666,13 +448,13 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$filename = 'tmp-' . time();
// Save long data as encrypted file using stream wrapper
- $cryptedFile = file_put_contents('crypt://' . $filename, $this->dataLong);
+ $cryptedFile = file_put_contents('crypt:///' . $this->userId . '/files/' . $filename, $this->dataLong);
// Test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
// Get file decrypted contents
- $decrypt = file_get_contents('crypt://' . $filename);
+ $decrypt = file_get_contents('crypt:///' . $this->userId . '/files/' . $filename);
$this->assertEquals($this->dataLong, $decrypt);
@@ -683,7 +465,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$view->rename($filename, $newFolder . '/' . $newFilename);
// Get file decrypted contents
- $newDecrypt = file_get_contents('crypt://' . $newFolder . '/' . $newFilename);
+ $newDecrypt = file_get_contents('crypt:///' . $this->userId . '/files/' . $newFolder . '/' . $newFilename);
$this->assertEquals($this->dataLong, $newDecrypt);
@@ -704,13 +486,13 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$view->mkdir($folder);
// Save long data as encrypted file using stream wrapper
- $cryptedFile = file_put_contents('crypt://' . $folder . $filename, $this->dataLong);
+ $cryptedFile = file_put_contents('crypt:///' . $this->userId . '/files/' . $folder . $filename, $this->dataLong);
// Test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
// Get file decrypted contents
- $decrypt = file_get_contents('crypt://' . $folder . $filename);
+ $decrypt = file_get_contents('crypt:///' . $this->userId . '/files/' . $folder . $filename);
$this->assertEquals($this->dataLong, $decrypt);
@@ -720,7 +502,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$view->rename($folder, $newFolder);
// Get file decrypted contents
- $newDecrypt = file_get_contents('crypt://' . $newFolder . $filename);
+ $newDecrypt = file_get_contents('crypt:///' . $this->userId . '/files/' . $newFolder . $filename);
$this->assertEquals($this->dataLong, $newDecrypt);
@@ -736,13 +518,13 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$filename = 'tmp-' . time();
// Save long data as encrypted file using stream wrapper
- $cryptedFile = file_put_contents('crypt://' . $filename, $this->dataLong);
+ $cryptedFile = file_put_contents('crypt:///' . $this->userId . '/files/' . $filename, $this->dataLong);
// Test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
// Get file decrypted contents
- $decrypt = file_get_contents('crypt://' . $filename);
+ $decrypt = file_get_contents('crypt:///' . $this->userId . '/files/' . $filename);
$this->assertEquals($this->dataLong, $decrypt);
@@ -755,7 +537,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
OCA\Encryption\Hooks::login($params);
// Get file decrypted contents
- $newDecrypt = file_get_contents('crypt://' . $filename);
+ $newDecrypt = file_get_contents('crypt:///' . $this->userId . '/files/' . $filename);
$this->assertEquals($this->dataLong, $newDecrypt);
@@ -871,4 +653,20 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
// tear down
$view->unlink($filename);
}
+
+
+ /**
+ * @brief encryption using legacy blowfish method
+ * @param $data string data to encrypt
+ * @param $passwd string password
+ * @return string
+ */
+ function legacyEncrypt($data, $passwd) {
+
+ $bf = new \Crypt_Blowfish($passwd);
+ $crypted = $bf->encrypt($data);
+
+ return $crypted;
+ }
+
}
diff --git a/apps/files_encryption/tests/keymanager.php b/apps/files_encryption/tests/keymanager.php
index b644856d95d..b2d200cca3e 100644
--- a/apps/files_encryption/tests/keymanager.php
+++ b/apps/files_encryption/tests/keymanager.php
@@ -6,15 +6,15 @@
* See the COPYING-README file.
*/
-require_once realpath(dirname(__FILE__) . '/../../../lib/base.php');
-require_once realpath(dirname(__FILE__) . '/../lib/crypt.php');
-require_once realpath(dirname(__FILE__) . '/../lib/keymanager.php');
-require_once realpath(dirname(__FILE__) . '/../lib/proxy.php');
-require_once realpath(dirname(__FILE__) . '/../lib/stream.php');
-require_once realpath(dirname(__FILE__) . '/../lib/util.php');
-require_once realpath(dirname(__FILE__) . '/../lib/helper.php');
-require_once realpath(dirname(__FILE__) . '/../appinfo/app.php');
-require_once realpath(dirname(__FILE__) . '/util.php');
+require_once __DIR__ . '/../../../lib/base.php';
+require_once __DIR__ . '/../lib/crypt.php';
+require_once __DIR__ . '/../lib/keymanager.php';
+require_once __DIR__ . '/../lib/proxy.php';
+require_once __DIR__ . '/../lib/stream.php';
+require_once __DIR__ . '/../lib/util.php';
+require_once __DIR__ . '/../lib/helper.php';
+require_once __DIR__ . '/../appinfo/app.php';
+require_once __DIR__ . '/util.php';
use OCA\Encryption;
@@ -57,11 +57,11 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
function setUp() {
// set content for encrypting / decrypting in tests
- $this->dataLong = file_get_contents(realpath(dirname(__FILE__) . '/../lib/crypt.php'));
+ $this->dataLong = file_get_contents(__DIR__ . '/../lib/crypt.php');
$this->dataShort = 'hats';
- $this->dataUrl = realpath(dirname(__FILE__) . '/../lib/crypt.php');
- $this->legacyData = realpath(dirname(__FILE__) . '/legacy-text.txt');
- $this->legacyEncryptedData = realpath(dirname(__FILE__) . '/legacy-encrypted-text.txt');
+ $this->dataUrl = __DIR__ . '/../lib/crypt.php';
+ $this->legacyData = __DIR__ . '/legacy-text.txt';
+ $this->legacyEncryptedData = __DIR__ . '/legacy-encrypted-text.txt';
$this->randomKey = Encryption\Crypt::generateKey();
$keypair = Encryption\Crypt::createKeypair();
@@ -141,10 +141,7 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
*/
function testSetFileKey() {
- # NOTE: This cannot be tested until we are able to break out
- # of the FileSystemView data directory root
-
- $key = Encryption\Crypt::symmetricEncryptFileContentKeyfile($this->randomKey, 'hat');
+ $key = $this->randomKey;
$file = 'unittest-' . time() . '.txt';
@@ -152,24 +149,17 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
- $this->view->file_put_contents($this->userId . '/files/' . $file, $key['encrypted']);
+ $this->view->file_put_contents($this->userId . '/files/' . $file, $this->dataShort);
- // Re-enable proxy - our work is done
- \OC_FileProxy::$enabled = $proxyStatus;
+ Encryption\Keymanager::setFileKey($this->view, $file, $this->userId, $key);
- //$view = new \OC_FilesystemView( '/' . $this->userId . '/files_encryption/keyfiles' );
- Encryption\Keymanager::setFileKey($this->view, $file, $this->userId, $key['key']);
-
- // enable encryption proxy
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = true;
+ $this->assertTrue($this->view->file_exists('/' . $this->userId . '/files_encryption/keyfiles/' . $file . '.key'));
// cleanup
$this->view->unlink('/' . $this->userId . '/files/' . $file);
// change encryption proxy to previous state
\OC_FileProxy::$enabled = $proxyStatus;
-
}
/**
@@ -233,7 +223,7 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
\OC_FileProxy::$enabled = true;
// save file with content
- $cryptedFile = file_put_contents('crypt:///folder1/subfolder/subsubfolder/' . $filename, $this->dataShort);
+ $cryptedFile = file_put_contents('crypt:///'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1/subfolder/subsubfolder' . $filename, $this->dataShort);
// test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
diff --git a/apps/files_encryption/tests/share.php b/apps/files_encryption/tests/share.php
index 5f3d5005090..6a29d2428dc 100755
--- a/apps/files_encryption/tests/share.php
+++ b/apps/files_encryption/tests/share.php
@@ -20,16 +20,16 @@
*
*/
-require_once realpath(dirname(__FILE__) . '/../3rdparty/Crypt_Blowfish/Blowfish.php');
-require_once realpath(dirname(__FILE__) . '/../../../lib/base.php');
-require_once realpath(dirname(__FILE__) . '/../lib/crypt.php');
-require_once realpath(dirname(__FILE__) . '/../lib/keymanager.php');
-require_once realpath(dirname(__FILE__) . '/../lib/proxy.php');
-require_once realpath(dirname(__FILE__) . '/../lib/stream.php');
-require_once realpath(dirname(__FILE__) . '/../lib/util.php');
-require_once realpath(dirname(__FILE__) . '/../lib/helper.php');
-require_once realpath(dirname(__FILE__) . '/../appinfo/app.php');
-require_once realpath(dirname(__FILE__) . '/util.php');
+require_once __DIR__ . '/../3rdparty/Crypt_Blowfish/Blowfish.php';
+require_once __DIR__ . '/../../../lib/base.php';
+require_once __DIR__ . '/../lib/crypt.php';
+require_once __DIR__ . '/../lib/keymanager.php';
+require_once __DIR__ . '/../lib/proxy.php';
+require_once __DIR__ . '/../lib/stream.php';
+require_once __DIR__ . '/../lib/util.php';
+require_once __DIR__ . '/../lib/helper.php';
+require_once __DIR__ . '/../appinfo/app.php';
+require_once __DIR__ . '/util.php';
use OCA\Encryption;
@@ -136,7 +136,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// save file with content
- $cryptedFile = file_put_contents('crypt://' . $this->filename, $this->dataShort);
+ $cryptedFile = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename, $this->dataShort);
// test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
@@ -293,7 +293,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
. $this->subsubfolder);
// save file with content
- $cryptedFile = file_put_contents('crypt://' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
+ $cryptedFile = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
. $this->filename, $this->dataShort);
// test that data was successfully written
@@ -499,7 +499,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// save file with content
- $cryptedFile = file_put_contents('crypt://' . $this->filename, $this->dataShort);
+ $cryptedFile = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename, $this->dataShort);
// test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
@@ -540,7 +540,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
\OC_User::setUserId(false);
// get file contents
- $retrievedCryptedFile = file_get_contents('crypt://' . $this->filename);
+ $retrievedCryptedFile = file_get_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
// check if data is the same as we previously written
$this->assertEquals($this->dataShort, $retrievedCryptedFile);
@@ -575,7 +575,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// save file with content
- $cryptedFile = file_put_contents('crypt://' . $this->filename, $this->dataShort);
+ $cryptedFile = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename, $this->dataShort);
// test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
@@ -649,6 +649,9 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
* @large
*/
function testRecoveryFile() {
+ $this->markTestIncomplete(
+ 'No idea what\'s wrong here, this works perfectly in real-world. removeRecoveryKeys(\'/\') L709 removes correctly the keys, but for some reasons afterwards also the top-level folder "share-keys" is gone...'
+ );
// login as admin
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
@@ -675,8 +678,8 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
. $this->subsubfolder);
// save file with content
- $cryptedFile1 = file_put_contents('crypt://' . $this->filename, $this->dataShort);
- $cryptedFile2 = file_put_contents('crypt://' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
+ $cryptedFile1 = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename, $this->dataShort);
+ $cryptedFile2 = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
. $this->filename, $this->dataShort);
// test that data was successfully written
@@ -717,7 +720,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
// enable recovery for admin
$this->assertTrue($util->setRecoveryForUser(1));
- // remove all recovery keys
+ // add recovery keys again
$util->addRecoveryKeys('/');
// check if share key for admin and recovery exists
@@ -752,7 +755,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
*/
function testRecoveryForUser() {
$this->markTestIncomplete(
- 'This test drives Jenkins crazy - "Cannot modify header information - headers already sent" - line 811'
+ 'This test drives Jenkins crazy - "Cannot modify header information - headers already sent" - line 811'
);
// login as admin
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
@@ -760,7 +763,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
\OCA\Encryption\Helper::adminEnableRecovery(null, 'test123');
$recoveryKeyId = OC_Appconfig::getValue('files_encryption', 'recoveryKeyId');
- // login as user1
+ // login as user2
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
$util = new \OCA\Encryption\Util(new \OC_FilesystemView('/'), \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
@@ -777,8 +780,8 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
. $this->subsubfolder);
// save file with content
- $cryptedFile1 = file_put_contents('crypt://' . $this->filename, $this->dataShort);
- $cryptedFile2 = file_put_contents('crypt://' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
+ $cryptedFile1 = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2. '/files/' . $this->filename, $this->dataShort);
+ $cryptedFile2 = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
. $this->filename, $this->dataShort);
// test that data was successfully written
@@ -807,13 +810,13 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
// change password
\OC_User::setPassword(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, 'test', 'test123');
- // login as user1
+ // login as user2
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, false, 'test');
// get file contents
- $retrievedCryptedFile1 = file_get_contents('crypt://' . $this->filename);
+ $retrievedCryptedFile1 = file_get_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->filename);
$retrievedCryptedFile2 = file_get_contents(
- 'crypt://' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename);
+ 'crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename);
// check if data is the same as we previously written
$this->assertEquals($this->dataShort, $retrievedCryptedFile1);
@@ -854,7 +857,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
\Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// save file with content
- $cryptedFile = file_put_contents('crypt://' . $this->filename, $this->dataShort);
+ $cryptedFile = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename, $this->dataShort);
// test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
diff --git a/apps/files_encryption/tests/stream.php b/apps/files_encryption/tests/stream.php
index 50ac41e4536..530ee3a7b2d 100644
--- a/apps/files_encryption/tests/stream.php
+++ b/apps/files_encryption/tests/stream.php
@@ -20,14 +20,14 @@
*
*/
-require_once realpath(dirname(__FILE__) . '/../../../lib/base.php');
-require_once realpath(dirname(__FILE__) . '/../lib/crypt.php');
-require_once realpath(dirname(__FILE__) . '/../lib/keymanager.php');
-require_once realpath(dirname(__FILE__) . '/../lib/proxy.php');
-require_once realpath(dirname(__FILE__) . '/../lib/stream.php');
-require_once realpath(dirname(__FILE__) . '/../lib/util.php');
-require_once realpath(dirname(__FILE__) . '/../appinfo/app.php');
-require_once realpath(dirname(__FILE__) . '/util.php');
+require_once __DIR__ . '/../../../lib/base.php';
+require_once __DIR__ . '/../lib/crypt.php';
+require_once __DIR__ . '/../lib/keymanager.php';
+require_once __DIR__ . '/../lib/proxy.php';
+require_once __DIR__ . '/../lib/stream.php';
+require_once __DIR__ . '/../lib/util.php';
+require_once __DIR__ . '/../appinfo/app.php';
+require_once __DIR__ . '/util.php';
use OCA\Encryption;
@@ -180,4 +180,4 @@ class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
// tear down
$view->unlink($filename);
}
-} \ No newline at end of file
+}
diff --git a/apps/files_encryption/tests/trashbin.php b/apps/files_encryption/tests/trashbin.php
index ade968fbece..2a41ace4015 100755
--- a/apps/files_encryption/tests/trashbin.php
+++ b/apps/files_encryption/tests/trashbin.php
@@ -20,15 +20,15 @@
*
*/
-require_once realpath(dirname(__FILE__) . '/../../../lib/base.php');
-require_once realpath(dirname(__FILE__) . '/../lib/crypt.php');
-require_once realpath(dirname(__FILE__) . '/../lib/keymanager.php');
-require_once realpath(dirname(__FILE__) . '/../lib/proxy.php');
-require_once realpath(dirname(__FILE__) . '/../lib/stream.php');
-require_once realpath(dirname(__FILE__) . '/../lib/util.php');
-require_once realpath(dirname(__FILE__) . '/../appinfo/app.php');
-require_once realpath(dirname(__FILE__) . '/../../files_trashbin/appinfo/app.php');
-require_once realpath(dirname(__FILE__) . '/util.php');
+require_once __DIR__ . '/../../../lib/base.php';
+require_once __DIR__ . '/../lib/crypt.php';
+require_once __DIR__ . '/../lib/keymanager.php';
+require_once __DIR__ . '/../lib/proxy.php';
+require_once __DIR__ . '/../lib/stream.php';
+require_once __DIR__ . '/../lib/util.php';
+require_once __DIR__ . '/../appinfo/app.php';
+require_once __DIR__ . '/../../files_trashbin/appinfo/app.php';
+require_once __DIR__ . '/util.php';
use OCA\Encryption;
@@ -122,7 +122,7 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
$filename = 'tmp-' . time() . '.txt';
// save file with content
- $cryptedFile = file_put_contents('crypt:///' . $filename, $this->dataShort);
+ $cryptedFile = file_put_contents('crypt:///' .\Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1. '/files/'. $filename, $this->dataShort);
// test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
@@ -226,7 +226,7 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
$filename = 'tmp-' . time() . '.txt';
// save file with content
- $cryptedFile = file_put_contents('crypt:///' . $filename, $this->dataShort);
+ $cryptedFile = file_put_contents('crypt:///' .$this->userId. '/files/' . $filename, $this->dataShort);
// test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
@@ -300,4 +300,4 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
. '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey.' . $trashFileSuffix));
}
-} \ No newline at end of file
+}
diff --git a/apps/files_encryption/tests/util.php b/apps/files_encryption/tests/util.php
index 368b7b3dc3f..eddc4c6b3ff 100755
--- a/apps/files_encryption/tests/util.php
+++ b/apps/files_encryption/tests/util.php
@@ -6,13 +6,13 @@
* See the COPYING-README file.
*/
-require_once realpath(dirname(__FILE__) . '/../../../lib/base.php');
-require_once realpath(dirname(__FILE__) . '/../lib/crypt.php');
-require_once realpath(dirname(__FILE__) . '/../lib/keymanager.php');
-require_once realpath(dirname(__FILE__) . '/../lib/proxy.php');
-require_once realpath(dirname(__FILE__) . '/../lib/stream.php');
-require_once realpath(dirname(__FILE__) . '/../lib/util.php');
-require_once realpath(dirname(__FILE__) . '/../appinfo/app.php');
+require_once __DIR__ . '/../../../lib/base.php';
+require_once __DIR__ . '/../lib/crypt.php';
+require_once __DIR__ . '/../lib/keymanager.php';
+require_once __DIR__ . '/../lib/proxy.php';
+require_once __DIR__ . '/../lib/stream.php';
+require_once __DIR__ . '/../lib/util.php';
+require_once __DIR__ . '/../appinfo/app.php';
use OCA\Encryption;
@@ -69,12 +69,12 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
$this->pass = \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1;
// set content for encrypting / decrypting in tests
- $this->dataUrl = realpath(dirname(__FILE__) . '/../lib/crypt.php');
+ $this->dataUrl = __DIR__ . '/../lib/crypt.php';
$this->dataShort = 'hats';
- $this->dataLong = file_get_contents(realpath(dirname(__FILE__) . '/../lib/crypt.php'));
- $this->legacyData = realpath(dirname(__FILE__) . '/legacy-text.txt');
- $this->legacyEncryptedData = realpath(dirname(__FILE__) . '/legacy-encrypted-text.txt');
- $this->legacyEncryptedDataKey = realpath(dirname(__FILE__) . '/encryption.key');
+ $this->dataLong = file_get_contents(__DIR__ . '/../lib/crypt.php');
+ $this->legacyData = __DIR__ . '/legacy-text.txt';
+ $this->legacyEncryptedData = __DIR__ . '/legacy-encrypted-text.txt';
+ $this->legacyEncryptedDataKey = __DIR__ . '/encryption.key';
$this->legacyKey = "30943623843030686906\0\0\0\0";
$keypair = Encryption\Crypt::createKeypair();
diff --git a/apps/files_encryption/tests/webdav.php b/apps/files_encryption/tests/webdav.php
index 1d406789f0c..a2a8ce6e34f 100755
--- a/apps/files_encryption/tests/webdav.php
+++ b/apps/files_encryption/tests/webdav.php
@@ -20,14 +20,14 @@
*
*/
-require_once realpath(dirname(__FILE__) . '/../../../lib/base.php');
-require_once realpath(dirname(__FILE__) . '/../lib/crypt.php');
-require_once realpath(dirname(__FILE__) . '/../lib/keymanager.php');
-require_once realpath(dirname(__FILE__) . '/../lib/proxy.php');
-require_once realpath(dirname(__FILE__) . '/../lib/stream.php');
-require_once realpath(dirname(__FILE__) . '/../lib/util.php');
-require_once realpath(dirname(__FILE__) . '/../appinfo/app.php');
-require_once realpath(dirname(__FILE__) . '/util.php');
+require_once __DIR__ . '/../../../lib/base.php';
+require_once __DIR__ . '/../lib/crypt.php';
+require_once __DIR__ . '/../lib/keymanager.php';
+require_once __DIR__ . '/../lib/proxy.php';
+require_once __DIR__ . '/../lib/stream.php';
+require_once __DIR__ . '/../lib/util.php';
+require_once __DIR__ . '/../appinfo/app.php';
+require_once __DIR__ . '/util.php';
use OCA\Encryption;
@@ -153,7 +153,7 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase {
$this->assertTrue(Encryption\Crypt::isCatfileContent($encryptedContent));
// get decrypted file contents
- $decrypt = file_get_contents('crypt://' . $filename);
+ $decrypt = file_get_contents('crypt:///' . $this->userId . '/files'. $filename);
// check if file content match with the written content
$this->assertEquals($this->dataShort, $decrypt);
@@ -259,4 +259,4 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase {
// return captured content
return $content;
}
-} \ No newline at end of file
+}
diff --git a/apps/files_external/3rdparty/Dropbox/API.php b/apps/files_external/3rdparty/Dropbox/API.php
new file mode 100644
index 00000000000..8cdce678e1c
--- /dev/null
+++ b/apps/files_external/3rdparty/Dropbox/API.php
@@ -0,0 +1,380 @@
+<?php
+
+/**
+ * Dropbox API class
+ *
+ * @package Dropbox
+ * @copyright Copyright (C) 2010 Rooftop Solutions. All rights reserved.
+ * @author Evert Pot (http://www.rooftopsolutions.nl/)
+ * @license http://code.google.com/p/dropbox-php/wiki/License MIT
+ */
+class Dropbox_API {
+
+ /**
+ * Sandbox root-path
+ */
+ const ROOT_SANDBOX = 'sandbox';
+
+ /**
+ * Dropbox root-path
+ */
+ const ROOT_DROPBOX = 'dropbox';
+
+ /**
+ * API URl
+ */
+ protected $api_url = 'https://api.dropbox.com/1/';
+
+ /**
+ * Content API URl
+ */
+ protected $api_content_url = 'https://api-content.dropbox.com/1/';
+
+ /**
+ * OAuth object
+ *
+ * @var Dropbox_OAuth
+ */
+ protected $oauth;
+
+ /**
+ * Default root-path, this will most likely be 'sandbox' or 'dropbox'
+ *
+ * @var string
+ */
+ protected $root;
+ protected $useSSL;
+
+ /**
+ * Constructor
+ *
+ * @param Dropbox_OAuth Dropbox_Auth object
+ * @param string $root default root path (sandbox or dropbox)
+ */
+ public function __construct(Dropbox_OAuth $oauth, $root = self::ROOT_DROPBOX, $useSSL = true) {
+
+ $this->oauth = $oauth;
+ $this->root = $root;
+ $this->useSSL = $useSSL;
+ if (!$this->useSSL)
+ {
+ throw new Dropbox_Exception('Dropbox REST API now requires that all requests use SSL');
+ }
+
+ }
+
+ /**
+ * Returns information about the current dropbox account
+ *
+ * @return stdclass
+ */
+ public function getAccountInfo() {
+
+ $data = $this->oauth->fetch($this->api_url . 'account/info');
+ return json_decode($data['body'],true);
+
+ }
+
+ /**
+ * Returns a file's contents
+ *
+ * @param string $path path
+ * @param string $root Use this to override the default root path (sandbox/dropbox)
+ * @return string
+ */
+ public function getFile($path = '', $root = null) {
+
+ if (is_null($root)) $root = $this->root;
+ $path = str_replace(array('%2F','~'), array('/','%7E'), rawurlencode($path));
+ $result = $this->oauth->fetch($this->api_content_url . 'files/' . $root . '/' . ltrim($path,'/'));
+ return $result['body'];
+
+ }
+
+ /**
+ * Uploads a new file
+ *
+ * @param string $path Target path (including filename)
+ * @param string $file Either a path to a file or a stream resource
+ * @param string $root Use this to override the default root path (sandbox/dropbox)
+ * @return bool
+ */
+ public function putFile($path, $file, $root = null) {
+
+ $directory = dirname($path);
+ $filename = basename($path);
+
+ if($directory==='.') $directory = '';
+ $directory = str_replace(array('%2F','~'), array('/','%7E'), rawurlencode($directory));
+// $filename = str_replace('~', '%7E', rawurlencode($filename));
+ if (is_null($root)) $root = $this->root;
+
+ if (is_string($file)) {
+
+ $file = fopen($file,'rb');
+
+ } elseif (!is_resource($file)) {
+ throw new Dropbox_Exception('File must be a file-resource or a string');
+ }
+ $result=$this->multipartFetch($this->api_content_url . 'files/' .
+ $root . '/' . trim($directory,'/'), $file, $filename);
+
+ if(!isset($result["httpStatus"]) || $result["httpStatus"] != 200)
+ throw new Dropbox_Exception("Uploading file to Dropbox failed");
+
+ return true;
+ }
+
+
+ /**
+ * Copies a file or directory from one location to another
+ *
+ * This method returns the file information of the newly created file.
+ *
+ * @param string $from source path
+ * @param string $to destination path
+ * @param string $root Use this to override the default root path (sandbox/dropbox)
+ * @return stdclass
+ */
+ public function copy($from, $to, $root = null) {
+
+ if (is_null($root)) $root = $this->root;
+ $response = $this->oauth->fetch($this->api_url . 'fileops/copy', array('from_path' => $from, 'to_path' => $to, 'root' => $root), 'POST');
+
+ return json_decode($response['body'],true);
+
+ }
+
+ /**
+ * Creates a new folder
+ *
+ * This method returns the information from the newly created directory
+ *
+ * @param string $path
+ * @param string $root Use this to override the default root path (sandbox/dropbox)
+ * @return stdclass
+ */
+ public function createFolder($path, $root = null) {
+
+ if (is_null($root)) $root = $this->root;
+
+ // Making sure the path starts with a /
+// $path = '/' . ltrim($path,'/');
+
+ $response = $this->oauth->fetch($this->api_url . 'fileops/create_folder', array('path' => $path, 'root' => $root),'POST');
+ return json_decode($response['body'],true);
+
+ }
+
+ /**
+ * Deletes a file or folder.
+ *
+ * This method will return the metadata information from the deleted file or folder, if successful.
+ *
+ * @param string $path Path to new folder
+ * @param string $root Use this to override the default root path (sandbox/dropbox)
+ * @return array
+ */
+ public function delete($path, $root = null) {
+
+ if (is_null($root)) $root = $this->root;
+ $response = $this->oauth->fetch($this->api_url . 'fileops/delete', array('path' => $path, 'root' => $root), 'POST');
+ return json_decode($response['body']);
+
+ }
+
+ /**
+ * Moves a file or directory to a new location
+ *
+ * This method returns the information from the newly created directory
+ *
+ * @param mixed $from Source path
+ * @param mixed $to destination path
+ * @param string $root Use this to override the default root path (sandbox/dropbox)
+ * @return stdclass
+ */
+ public function move($from, $to, $root = null) {
+
+ if (is_null($root)) $root = $this->root;
+ $response = $this->oauth->fetch($this->api_url . 'fileops/move', array('from_path' => rawurldecode($from), 'to_path' => rawurldecode($to), 'root' => $root), 'POST');
+
+ return json_decode($response['body'],true);
+
+ }
+
+ /**
+ * Returns file and directory information
+ *
+ * @param string $path Path to receive information from
+ * @param bool $list When set to true, this method returns information from all files in a directory. When set to false it will only return infromation from the specified directory.
+ * @param string $hash If a hash is supplied, this method simply returns true if nothing has changed since the last request. Good for caching.
+ * @param int $fileLimit Maximum number of file-information to receive
+ * @param string $root Use this to override the default root path (sandbox/dropbox)
+ * @return array|true
+ */
+ public function getMetaData($path, $list = true, $hash = null, $fileLimit = null, $root = null) {
+
+ if (is_null($root)) $root = $this->root;
+
+ $args = array(
+ 'list' => $list,
+ );
+
+ if (!is_null($hash)) $args['hash'] = $hash;
+ if (!is_null($fileLimit)) $args['file_limit'] = $fileLimit;
+
+ $path = str_replace(array('%2F','~'), array('/','%7E'), rawurlencode($path));
+ $response = $this->oauth->fetch($this->api_url . 'metadata/' . $root . '/' . ltrim($path,'/'), $args);
+
+ /* 304 is not modified */
+ if ($response['httpStatus']==304) {
+ return true;
+ } else {
+ return json_decode($response['body'],true);
+ }
+
+ }
+
+ /**
+ * A way of letting you keep up with changes to files and folders in a user's Dropbox. You can periodically call /delta to get a list of "delta entries", which are instructions on how to update your local state to match the server's state.
+ *
+ * This method returns the information from the newly created directory
+ *
+ * @param string $cursor A string that is used to keep track of your current state. On the next call pass in this value to return delta entries that have been recorded since the cursor was returned.
+ * @return stdclass
+ */
+ public function delta($cursor) {
+
+ $arg['cursor'] = $cursor;
+
+ $response = $this->oauth->fetch($this->api_url . 'delta', $arg, 'POST');
+ return json_decode($response['body'],true);
+
+ }
+
+ /**
+ * Returns a thumbnail (as a string) for a file path.
+ *
+ * @param string $path Path to file
+ * @param string $size small, medium or large
+ * @param string $root Use this to override the default root path (sandbox/dropbox)
+ * @return string
+ */
+ public function getThumbnail($path, $size = 'small', $root = null) {
+
+ if (is_null($root)) $root = $this->root;
+ $path = str_replace(array('%2F','~'), array('/','%7E'), rawurlencode($path));
+ $response = $this->oauth->fetch($this->api_content_url . 'thumbnails/' . $root . '/' . ltrim($path,'/'),array('size' => $size));
+
+ return $response['body'];
+
+ }
+
+ /**
+ * This method is used to generate multipart POST requests for file upload
+ *
+ * @param string $uri
+ * @param array $arguments
+ * @return bool
+ */
+ protected function multipartFetch($uri, $file, $filename) {
+
+ /* random string */
+ $boundary = 'R50hrfBj5JYyfR3vF3wR96GPCC9Fd2q2pVMERvEaOE3D8LZTgLLbRpNwXek3';
+
+ $headers = array(
+ 'Content-Type' => 'multipart/form-data; boundary=' . $boundary,
+ );
+
+ $body="--" . $boundary . "\r\n";
+ $body.="Content-Disposition: form-data; name=file; filename=".rawurldecode($filename)."\r\n";
+ $body.="Content-type: application/octet-stream\r\n";
+ $body.="\r\n";
+ $body.=stream_get_contents($file);
+ $body.="\r\n";
+ $body.="--" . $boundary . "--";
+
+ // Dropbox requires the filename to also be part of the regular arguments, so it becomes
+ // part of the signature.
+ $uri.='?file=' . $filename;
+
+ return $this->oauth->fetch($uri, $body, 'POST', $headers);
+
+ }
+
+
+ /**
+ * Search
+ *
+ * Returns metadata for all files and folders that match the search query.
+ *
+ * @added by: diszo.sasil
+ *
+ * @param string $query
+ * @param string $root Use this to override the default root path (sandbox/dropbox)
+ * @param string $path
+ * @return array
+ */
+ public function search($query = '', $root = null, $path = ''){
+ if (is_null($root)) $root = $this->root;
+ if(!empty($path)){
+ $path = str_replace(array('%2F','~'), array('/','%7E'), rawurlencode($path));
+ }
+ $response = $this->oauth->fetch($this->api_url . 'search/' . $root . '/' . ltrim($path,'/'),array('query' => $query));
+ return json_decode($response['body'],true);
+ }
+
+ /**
+ * Creates and returns a shareable link to files or folders.
+ *
+ * Note: Links created by the /shares API call expire after thirty days.
+ *
+ * @param type $path
+ * @param type $root
+ * @return type
+ */
+ public function share($path, $root = null) {
+ if (is_null($root)) $root = $this->root;
+ $path = str_replace(array('%2F','~'), array('/','%7E'), rawurlencode($path));
+ $response = $this->oauth->fetch($this->api_url. 'shares/'. $root . '/' . ltrim($path, '/'), array(), 'POST');
+ return json_decode($response['body'],true);
+
+ }
+
+ /**
+ * Returns a link directly to a file.
+ * Similar to /shares. The difference is that this bypasses the Dropbox webserver, used to provide a preview of the file, so that you can effectively stream the contents of your media.
+ *
+ * Note: The /media link expires after four hours, allotting enough time to stream files, but not enough to leave a connection open indefinitely.
+ *
+ * @param type $path
+ * @param type $root
+ * @return type
+ */
+ public function media($path, $root = null) {
+
+ if (is_null($root)) $root = $this->root;
+ $path = str_replace(array('%2F','~'), array('/','%7E'), rawurlencode($path));
+ $response = $this->oauth->fetch($this->api_url. 'media/'. $root . '/' . ltrim($path, '/'), array(), 'POST');
+ return json_decode($response['body'],true);
+
+ }
+
+ /**
+ * Creates and returns a copy_ref to a file. This reference string can be used to copy that file to another user's Dropbox by passing it in as the from_copy_ref parameter on /fileops/copy.
+ *
+ * @param type $path
+ * @param type $root
+ * @return type
+ */
+ public function copy_ref($path, $root = null) {
+
+ if (is_null($root)) $root = $this->root;
+ $path = str_replace(array('%2F','~'), array('/','%7E'), rawurlencode($path));
+ $response = $this->oauth->fetch($this->api_url. 'copy_ref/'. $root . '/' . ltrim($path, '/'));
+ return json_decode($response['body'],true);
+
+ }
+
+
+}
diff --git a/apps/files_external/3rdparty/Dropbox/Exception.php b/apps/files_external/3rdparty/Dropbox/Exception.php
new file mode 100644
index 00000000000..50cbc4c7915
--- /dev/null
+++ b/apps/files_external/3rdparty/Dropbox/Exception.php
@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * Dropbox base exception
+ *
+ * @package Dropbox
+ * @copyright Copyright (C) 2010 Rooftop Solutions. All rights reserved.
+ * @author Evert Pot (http://www.rooftopsolutions.nl/)
+ * @license http://code.google.com/p/dropbox-php/wiki/License MIT
+ */
+
+/**
+ * Base exception class
+ */
+class Dropbox_Exception extends Exception { }
diff --git a/apps/files_external/3rdparty/Dropbox/Exception/Forbidden.php b/apps/files_external/3rdparty/Dropbox/Exception/Forbidden.php
new file mode 100644
index 00000000000..5f0378cfc74
--- /dev/null
+++ b/apps/files_external/3rdparty/Dropbox/Exception/Forbidden.php
@@ -0,0 +1,18 @@
+<?php
+
+/**
+ * Dropbox Forbidden exception
+ *
+ * @package Dropbox
+ * @copyright Copyright (C) 2010 Rooftop Solutions. All rights reserved.
+ * @author Evert Pot (http://www.rooftopsolutions.nl/)
+ * @license http://code.google.com/p/dropbox-php/wiki/License MIT
+ */
+
+/**
+ * This exception is thrown when we receive the 403 forbidden response
+ */
+class Dropbox_Exception_Forbidden extends Dropbox_Exception {
+
+
+}
diff --git a/apps/files_external/3rdparty/Dropbox/Exception/NotFound.php b/apps/files_external/3rdparty/Dropbox/Exception/NotFound.php
new file mode 100644
index 00000000000..3deaf90d76b
--- /dev/null
+++ b/apps/files_external/3rdparty/Dropbox/Exception/NotFound.php
@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * Dropbox Not Found exception
+ *
+ * @package Dropbox
+ * @copyright Copyright (C) 2010 Rooftop Solutions. All rights reserved.
+ * @author Evert Pot (http://www.rooftopsolutions.nl/)
+ * @license http://code.google.com/p/dropbox-php/wiki/License MIT
+ */
+
+/**
+ * This exception is thrown when a non-existant uri is accessed.
+ *
+ * Basically, this exception is used when we get back a 404.
+ */
+class Dropbox_Exception_NotFound extends Dropbox_Exception {
+
+
+}
diff --git a/apps/files_external/3rdparty/Dropbox/Exception/OverQuota.php b/apps/files_external/3rdparty/Dropbox/Exception/OverQuota.php
new file mode 100644
index 00000000000..86e5425dbd8
--- /dev/null
+++ b/apps/files_external/3rdparty/Dropbox/Exception/OverQuota.php
@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * Dropbox Over Quota exception
+ *
+ * @package Dropbox
+ * @copyright Copyright (C) 2010 Rooftop Solutions. All rights reserved.
+ * @author Evert Pot (http://www.rooftopsolutions.nl/)
+ * @license http://code.google.com/p/dropbox-php/wiki/License MIT
+ */
+
+/**
+ * This exception is thrown when the operation required more space than the available quota.
+ *
+ * Basically, this exception is used when we get back a 507.
+ */
+class Dropbox_Exception_OverQuota extends Dropbox_Exception {
+
+
+}
diff --git a/apps/files_external/3rdparty/Dropbox/Exception/RequestToken.php b/apps/files_external/3rdparty/Dropbox/Exception/RequestToken.php
new file mode 100644
index 00000000000..5b117f2c6b0
--- /dev/null
+++ b/apps/files_external/3rdparty/Dropbox/Exception/RequestToken.php
@@ -0,0 +1,18 @@
+<?php
+
+/**
+ * Dropbox RequestToken exception
+ *
+ * @package Dropbox
+ * @copyright Copyright (C) 2010 Rooftop Solutions. All rights reserved.
+ * @author Evert Pot (http://www.rooftopsolutions.nl/)
+ * @license http://code.google.com/p/dropbox-php/wiki/License MIT
+ */
+
+/**
+ * This exception is thrown when an error occured during the request_token process.
+ */
+class Dropbox_Exception_RequestToken extends Dropbox_Exception {
+
+
+}
diff --git a/apps/files_external/3rdparty/Dropbox/LICENSE.txt b/apps/files_external/3rdparty/Dropbox/LICENSE.txt
new file mode 100644
index 00000000000..cd3512acee6
--- /dev/null
+++ b/apps/files_external/3rdparty/Dropbox/LICENSE.txt
@@ -0,0 +1,19 @@
+Copyright (c) 2010 Rooftop Solutions
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/apps/files_external/3rdparty/Dropbox/OAuth.php b/apps/files_external/3rdparty/Dropbox/OAuth.php
new file mode 100644
index 00000000000..905cc2da1c6
--- /dev/null
+++ b/apps/files_external/3rdparty/Dropbox/OAuth.php
@@ -0,0 +1,151 @@
+<?php
+
+/**
+ * Dropbox OAuth
+ *
+ * @package Dropbox
+ * @copyright Copyright (C) 2010 Rooftop Solutions. All rights reserved.
+ * @author Evert Pot (http://www.rooftopsolutions.nl/)
+ * @license http://code.google.com/p/dropbox-php/wiki/License MIT
+ */
+
+
+/**
+ * This class is an abstract OAuth class.
+ *
+ * It must be extended by classes who wish to provide OAuth functionality
+ * using different libraries.
+ */
+abstract class Dropbox_OAuth {
+
+ /**
+ * After a user has authorized access, dropbox can redirect the user back
+ * to this url.
+ *
+ * @var string
+ */
+ public $authorizeCallbackUrl = null;
+
+ /**
+ * Uri used to fetch request tokens
+ *
+ * @var string
+ */
+ const URI_REQUEST_TOKEN = 'https://api.dropbox.com/1/oauth/request_token';
+
+ /**
+ * Uri used to redirect the user to for authorization.
+ *
+ * @var string
+ */
+ const URI_AUTHORIZE = 'https://www.dropbox.com/1/oauth/authorize';
+
+ /**
+ * Uri used to
+ *
+ * @var string
+ */
+ const URI_ACCESS_TOKEN = 'https://api.dropbox.com/1/oauth/access_token';
+
+ /**
+ * An OAuth request token.
+ *
+ * @var string
+ */
+ protected $oauth_token = null;
+
+ /**
+ * OAuth token secret
+ *
+ * @var string
+ */
+ protected $oauth_token_secret = null;
+
+
+ /**
+ * Constructor
+ *
+ * @param string $consumerKey
+ * @param string $consumerSecret
+ */
+ abstract public function __construct($consumerKey, $consumerSecret);
+
+ /**
+ * Sets the request token and secret.
+ *
+ * The tokens can also be passed as an array into the first argument.
+ * The array must have the elements token and token_secret.
+ *
+ * @param string|array $token
+ * @param string $token_secret
+ * @return void
+ */
+ public function setToken($token, $token_secret = null) {
+
+ if (is_array($token)) {
+ $this->oauth_token = $token['token'];
+ $this->oauth_token_secret = $token['token_secret'];
+ } else {
+ $this->oauth_token = $token;
+ $this->oauth_token_secret = $token_secret;
+ }
+
+ }
+
+ /**
+ * Returns the oauth request tokens as an associative array.
+ *
+ * The array will contain the elements 'token' and 'token_secret'.
+ *
+ * @return array
+ */
+ public function getToken() {
+
+ return array(
+ 'token' => $this->oauth_token,
+ 'token_secret' => $this->oauth_token_secret,
+ );
+
+ }
+
+ /**
+ * Returns the authorization url
+ *
+ * @param string $callBack Specify a callback url to automatically redirect the user back
+ * @return string
+ */
+ public function getAuthorizeUrl($callBack = null) {
+
+ // Building the redirect uri
+ $token = $this->getToken();
+ $uri = self::URI_AUTHORIZE . '?oauth_token=' . $token['token'];
+ if ($callBack) $uri.='&oauth_callback=' . $callBack;
+ return $uri;
+ }
+
+ /**
+ * Fetches a secured oauth url and returns the response body.
+ *
+ * @param string $uri
+ * @param mixed $arguments
+ * @param string $method
+ * @param array $httpHeaders
+ * @return string
+ */
+ public abstract function fetch($uri, $arguments = array(), $method = 'GET', $httpHeaders = array());
+
+ /**
+ * Requests the OAuth request token.
+ *
+ * @return array
+ */
+ abstract public function getRequestToken();
+
+ /**
+ * Requests the OAuth access tokens.
+ *
+ * @return array
+ */
+ abstract public function getAccessToken();
+
+}
diff --git a/apps/files_external/3rdparty/Dropbox/OAuth/Consumer/Dropbox.php b/apps/files_external/3rdparty/Dropbox/OAuth/Consumer/Dropbox.php
new file mode 100644
index 00000000000..204a659de00
--- /dev/null
+++ b/apps/files_external/3rdparty/Dropbox/OAuth/Consumer/Dropbox.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * HTTP OAuth Consumer
+ *
+ * Adapted from halldirector's code in
+ * http://code.google.com/p/dropbox-php/issues/detail?id=36#c5
+ *
+ * @package Dropbox
+ * @copyright Copyright (C) 2011 Joe Constant / halldirector. All rights reserved.
+ * @author Joe Constant / halldirector
+ * @license http://code.google.com/p/dropbox-php/wiki/License MIT
+ */
+
+require_once 'HTTP/OAuth.php';
+require_once 'HTTP/OAuth/Consumer.php';
+
+/*
+ * This class is to help work around aomw ssl issues.
+ */
+class Dropbox_OAuth_Consumer_Dropbox extends HTTP_OAuth_Consumer
+{
+ public function getOAuthConsumerRequest()
+ {
+ if (!$this->consumerRequest instanceof HTTP_OAuth_Consumer_Request) {
+ $this->consumerRequest = new HTTP_OAuth_Consumer_Request;
+ }
+
+ // TODO: Change this and add in code to validate the SSL cert.
+ // see https://github.com/bagder/curl/blob/master/lib/mk-ca-bundle.pl
+ $this->consumerRequest->setConfig(array(
+ 'ssl_verify_peer' => false,
+ 'ssl_verify_host' => false
+ ));
+
+ return $this->consumerRequest;
+ }
+}
diff --git a/apps/files_external/3rdparty/Dropbox/OAuth/Curl.php b/apps/files_external/3rdparty/Dropbox/OAuth/Curl.php
new file mode 100644
index 00000000000..b75b27bb363
--- /dev/null
+++ b/apps/files_external/3rdparty/Dropbox/OAuth/Curl.php
@@ -0,0 +1,282 @@
+<?php
+
+/**
+ * Dropbox OAuth
+ *
+ * @package Dropbox
+ * @copyright Copyright (C) 2011 Daniel Huesken
+ * @author Daniel Huesken (http://www.danielhuesken.de/)
+ * @license MIT
+ */
+
+/**
+ * This class is used to sign all requests to dropbox.
+ *
+ * This specific class uses WordPress WP_Http to authenticate.
+ */
+class Dropbox_OAuth_Curl extends Dropbox_OAuth {
+
+ /**
+ *
+ * @var string ConsumerKey
+ */
+ protected $consumerKey = null;
+ /**
+ *
+ * @var string ConsumerSecret
+ */
+ protected $consumerSecret = null;
+ /**
+ *
+ * @var string ProzessCallBack
+ */
+ public $ProgressFunction = false;
+
+ /**
+ * Constructor
+ *
+ * @param string $consumerKey
+ * @param string $consumerSecret
+ */
+ public function __construct($consumerKey, $consumerSecret) {
+ if (!function_exists('curl_exec'))
+ throw new Dropbox_Exception('The PHP curl functions not available!');
+
+ $this->consumerKey = $consumerKey;
+ $this->consumerSecret = $consumerSecret;
+ }
+
+ /**
+ * Fetches a secured oauth url and returns the response body.
+ *
+ * @param string $uri
+ * @param mixed $arguments
+ * @param string $method
+ * @param array $httpHeaders
+ * @return string
+ */
+ public function fetch($uri, $arguments = array(), $method = 'GET', $httpHeaders = array()) {
+
+ $uri=str_replace('http://', 'https://', $uri); // all https, upload makes problems if not
+ if (is_string($arguments) and strtoupper($method) == 'POST') {
+ preg_match("/\?file=(.*)$/i", $uri, $matches);
+ if (isset($matches[1])) {
+ $uri = str_replace($matches[0], "", $uri);
+ $filename = $matches[1];
+ $httpHeaders=array_merge($httpHeaders,$this->getOAuthHeader($uri, array("file" => $filename), $method));
+ }
+ } else {
+ $httpHeaders=array_merge($httpHeaders,$this->getOAuthHeader($uri, $arguments, $method));
+ }
+ $ch = curl_init();
+ if (strtoupper($method) == 'POST') {
+ curl_setopt($ch, CURLOPT_URL, $uri);
+ curl_setopt($ch, CURLOPT_POST, true);
+// if (is_array($arguments))
+// $arguments=http_build_query($arguments);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $arguments);
+// $httpHeaders['Content-Length']=strlen($arguments);
+ } else {
+ curl_setopt($ch, CURLOPT_URL, $uri.'?'.http_build_query($arguments));
+ curl_setopt($ch, CURLOPT_POST, false);
+ }
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch, CURLOPT_TIMEOUT, 300);
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
+ curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
+// curl_setopt($ch, CURLOPT_CAINFO, "rootca");
+ curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
+ //Build header
+ $headers = array();
+ foreach ($httpHeaders as $name => $value) {
+ $headers[] = "{$name}: $value";
+ }
+ curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
+ if (!ini_get('safe_mode') && !ini_get('open_basedir'))
+ curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true );
+ if (function_exists($this->ProgressFunction) and defined('CURLOPT_PROGRESSFUNCTION')) {
+ curl_setopt($ch, CURLOPT_NOPROGRESS, false);
+ curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, $this->ProgressFunction);
+ curl_setopt($ch, CURLOPT_BUFFERSIZE, 512);
+ }
+ $response=curl_exec($ch);
+ $errorno=curl_errno($ch);
+ $error=curl_error($ch);
+ $status=curl_getinfo($ch,CURLINFO_HTTP_CODE);
+ curl_close($ch);
+
+
+ if (!empty($errorno))
+ throw new Dropbox_Exception_NotFound('Curl error: ('.$errorno.') '.$error."\n");
+
+ if ($status>=300) {
+ $body = json_decode($response,true);
+ switch ($status) {
+ // Not modified
+ case 304 :
+ return array(
+ 'httpStatus' => 304,
+ 'body' => null,
+ );
+ break;
+ case 403 :
+ throw new Dropbox_Exception_Forbidden('Forbidden.
+ This could mean a bad OAuth request, or a file or folder already existing at the target location.
+ ' . $body["error"] . "\n");
+ case 404 :
+ throw new Dropbox_Exception_NotFound('Resource at uri: ' . $uri . ' could not be found. ' .
+ $body["error"] . "\n");
+ case 507 :
+ throw new Dropbox_Exception_OverQuota('This dropbox is full. ' .
+ $body["error"] . "\n");
+ }
+ if (!empty($body["error"]))
+ throw new Dropbox_Exception_RequestToken('Error: ('.$status.') '.$body["error"]."\n");
+ }
+
+ return array(
+ 'body' => $response,
+ 'httpStatus' => $status
+ );
+ }
+
+ /**
+ * Returns named array with oauth parameters for further use
+ * @return array Array with oauth_ parameters
+ */
+ private function getOAuthBaseParams() {
+ $params['oauth_version'] = '1.0';
+ $params['oauth_signature_method'] = 'HMAC-SHA1';
+
+ $params['oauth_consumer_key'] = $this->consumerKey;
+ $tokens = $this->getToken();
+ if (isset($tokens['token']) && $tokens['token']) {
+ $params['oauth_token'] = $tokens['token'];
+ }
+ $params['oauth_timestamp'] = time();
+ $params['oauth_nonce'] = md5(microtime() . mt_rand());
+ return $params;
+ }
+
+ /**
+ * Creates valid Authorization header for OAuth, based on URI and Params
+ *
+ * @param string $uri
+ * @param array $params
+ * @param string $method GET or POST, standard is GET
+ * @param array $oAuthParams optional, pass your own oauth_params here
+ * @return array Array for request's headers section like
+ * array('Authorization' => 'OAuth ...');
+ */
+ private function getOAuthHeader($uri, $params, $method = 'GET', $oAuthParams = null) {
+ $oAuthParams = $oAuthParams ? $oAuthParams : $this->getOAuthBaseParams();
+
+ // create baseString to encode for the sent parameters
+ $baseString = $method . '&';
+ $baseString .= $this->oauth_urlencode($uri) . "&";
+
+ // OAuth header does not include GET-Parameters
+ $signatureParams = array_merge($params, $oAuthParams);
+
+ // sorting the parameters
+ ksort($signatureParams);
+
+ $encodedParams = array();
+ foreach ($signatureParams as $key => $value) {
+ $encodedParams[] = $this->oauth_urlencode($key) . '=' . $this->oauth_urlencode($value);
+ }
+
+ $baseString .= $this->oauth_urlencode(implode('&', $encodedParams));
+
+ // encode the signature
+ $tokens = $this->getToken();
+ $hash = $this->hash_hmac_sha1($this->consumerSecret.'&'.$tokens['token_secret'], $baseString);
+ $signature = base64_encode($hash);
+
+ // add signature to oAuthParams
+ $oAuthParams['oauth_signature'] = $signature;
+
+ $oAuthEncoded = array();
+ foreach ($oAuthParams as $key => $value) {
+ $oAuthEncoded[] = $key . '="' . $this->oauth_urlencode($value) . '"';
+ }
+
+ return array('Authorization' => 'OAuth ' . implode(', ', $oAuthEncoded));
+ }
+
+ /**
+ * Requests the OAuth request token.
+ *
+ * @return void
+ */
+ public function getRequestToken() {
+ $result = $this->fetch(self::URI_REQUEST_TOKEN, array(), 'POST');
+ if ($result['httpStatus'] == "200") {
+ $tokens = array();
+ parse_str($result['body'], $tokens);
+ $this->setToken($tokens['oauth_token'], $tokens['oauth_token_secret']);
+ return $this->getToken();
+ } else {
+ throw new Dropbox_Exception_RequestToken('We were unable to fetch request tokens. This likely means that your consumer key and/or secret are incorrect.');
+ }
+ }
+
+ /**
+ * Requests the OAuth access tokens.
+ *
+ * This method requires the 'unauthorized' request tokens
+ * and, if successful will set the authorized request tokens.
+ *
+ * @return void
+ */
+ public function getAccessToken() {
+ $result = $this->fetch(self::URI_ACCESS_TOKEN, array(), 'POST');
+ if ($result['httpStatus'] == "200") {
+ $tokens = array();
+ parse_str($result['body'], $tokens);
+ $this->setToken($tokens['oauth_token'], $tokens['oauth_token_secret']);
+ return $this->getToken();
+ } else {
+ throw new Dropbox_Exception_RequestToken('We were unable to fetch request tokens. This likely means that your consumer key and/or secret are incorrect.');
+ }
+ }
+
+ /**
+ * Helper function to properly urlencode parameters.
+ * See http://php.net/manual/en/function.oauth-urlencode.php
+ *
+ * @param string $string
+ * @return string
+ */
+ private function oauth_urlencode($string) {
+ return str_replace('%E7', '~', rawurlencode($string));
+ }
+
+ /**
+ * Hash function for hmac_sha1; uses native function if available.
+ *
+ * @param string $key
+ * @param string $data
+ * @return string
+ */
+ private function hash_hmac_sha1($key, $data) {
+ if (function_exists('hash_hmac') && in_array('sha1', hash_algos())) {
+ return hash_hmac('sha1', $data, $key, true);
+ } else {
+ $blocksize = 64;
+ $hashfunc = 'sha1';
+ if (strlen($key) > $blocksize) {
+ $key = pack('H*', $hashfunc($key));
+ }
+
+ $key = str_pad($key, $blocksize, chr(0x00));
+ $ipad = str_repeat(chr(0x36), $blocksize);
+ $opad = str_repeat(chr(0x5c), $blocksize);
+ $hash = pack('H*', $hashfunc(( $key ^ $opad ) . pack('H*', $hashfunc(($key ^ $ipad) . $data))));
+
+ return $hash;
+ }
+ }
+
+
+} \ No newline at end of file
diff --git a/apps/files_external/3rdparty/Dropbox/README.md b/apps/files_external/3rdparty/Dropbox/README.md
new file mode 100644
index 00000000000..54e05db762b
--- /dev/null
+++ b/apps/files_external/3rdparty/Dropbox/README.md
@@ -0,0 +1,31 @@
+Dropbox-php
+===========
+
+This PHP library allows you to easily integrate dropbox with PHP.
+
+The following PHP extension is required:
+
+* json
+
+The library makes use of OAuth. At the moment you can use either of these libraries:
+
+[PHP OAuth extension](http://pecl.php.net/package/oauth)
+[PEAR's HTTP_OAUTH package](http://pear.php.net/package/http_oauth)
+
+The extension is recommended, but if you can't install php extensions you should go for the pear package.
+Installing
+----------
+
+ pear channel-discover pear.dropbox-php.com
+ pear install dropbox-php/Dropbox-alpha
+
+Documentation
+-------------
+Check out the [documentation](http://www.dropbox-php.com/docs).
+
+Questions?
+----------
+
+[Dropbox-php Mailing list](http://groups.google.com/group/dropbox-php)
+[Official Dropbox developer forum](http://forums.dropbox.com/forum.php?id=5)
+
diff --git a/apps/files_external/3rdparty/Dropbox/autoload.php b/apps/files_external/3rdparty/Dropbox/autoload.php
new file mode 100644
index 00000000000..5388ea6334a
--- /dev/null
+++ b/apps/files_external/3rdparty/Dropbox/autoload.php
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * This file registers a new autoload function using spl_autoload_register.
+ *
+ * @package Dropbox
+ * @copyright Copyright (C) 2010 Rooftop Solutions. All rights reserved.
+ * @author Evert Pot (http://www.rooftopsolutions.nl/)
+ * @license http://code.google.com/p/dropbox-php/wiki/License MIT
+ */
+
+/**
+ * Autoloader function
+ *
+ * @param $className string
+ * @return void
+ */
+function Dropbox_autoload($className) {
+
+ if(strpos($className,'Dropbox_')===0) {
+
+ include dirname(__FILE__) . '/' . str_replace('_','/',substr($className,8)) . '.php';
+
+ }
+
+}
+
+spl_autoload_register('Dropbox_autoload');
+
diff --git a/apps/files_external/3rdparty/smb4php/smb.php b/apps/files_external/3rdparty/smb4php/smb.php
new file mode 100644
index 00000000000..e7d1dfa09fe
--- /dev/null
+++ b/apps/files_external/3rdparty/smb4php/smb.php
@@ -0,0 +1,484 @@
+<?php
+###################################################################
+# smb.php
+# This class implements a SMB stream wrapper based on 'smbclient'
+#
+# Date: lun oct 22 10:35:35 CEST 2007
+#
+# Homepage: http://www.phpclasses.org/smb4php
+#
+# Copyright (c) 2007 Victor M. Varela <vmvarela@gmail.com>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+###################################################################
+
+define ('SMB4PHP_VERSION', '0.8');
+
+###################################################################
+# CONFIGURATION SECTION - Change for your needs
+###################################################################
+
+define ('SMB4PHP_SMBCLIENT', 'smbclient');
+define ('SMB4PHP_SMBOPTIONS', 'TCP_NODELAY IPTOS_LOWDELAY SO_KEEPALIVE SO_RCVBUF=8192 SO_SNDBUF=8192');
+define ('SMB4PHP_AUTHMODE', 'arg'); # set to 'env' to use USER enviroment variable
+
+###################################################################
+# SMB - commands that does not need an instance
+###################################################################
+
+$GLOBALS['__smb_cache'] = array ('stat' => array (), 'dir' => array ());
+
+class smb {
+
+ function parse_url ($url) {
+ $pu = parse_url (trim($url));
+ foreach (array ('domain', 'user', 'pass', 'host', 'port', 'path') as $i) {
+ if (! isset($pu[$i])) {
+ $pu[$i] = '';
+ }
+ }
+ if (count ($userdomain = explode (';', urldecode ($pu['user']))) > 1) {
+ @list ($pu['domain'], $pu['user']) = $userdomain;
+ }
+ $path = preg_replace (array ('/^\//', '/\/$/'), '', urldecode ($pu['path']));
+ list ($pu['share'], $pu['path']) = (preg_match ('/^([^\/]+)\/(.*)/', $path, $regs))
+ ? array ($regs[1], preg_replace ('/\//', '\\', $regs[2]))
+ : array ($path, '');
+ $pu['type'] = $pu['path'] ? 'path' : ($pu['share'] ? 'share' : ($pu['host'] ? 'host' : '**error**'));
+ if (! ($pu['port'] = intval(@$pu['port']))) {
+ $pu['port'] = 139;
+ }
+
+ // decode user and password
+ $pu['user'] = urldecode($pu['user']);
+ $pu['pass'] = urldecode($pu['pass']);
+ return $pu;
+ }
+
+
+ function look ($purl) {
+ return smb::client ('-L ' . escapeshellarg ($purl['host']), $purl);
+ }
+
+
+ function execute ($command, $purl) {
+ return smb::client ('-d 0 '
+ . escapeshellarg ('//' . $purl['host'] . '/' . $purl['share'])
+ . ' -c ' . escapeshellarg ($command), $purl
+ );
+ }
+
+ function client ($params, $purl) {
+
+ static $regexp = array (
+ '^added interface ip=(.*) bcast=(.*) nmask=(.*)$' => 'skip',
+ 'Anonymous login successful' => 'skip',
+ '^Domain=\[(.*)\] OS=\[(.*)\] Server=\[(.*)\]$' => 'skip',
+ '^\tSharename[ ]+Type[ ]+Comment$' => 'shares',
+ '^\t---------[ ]+----[ ]+-------$' => 'skip',
+ '^\tServer [ ]+Comment$' => 'servers',
+ '^\t---------[ ]+-------$' => 'skip',
+ '^\tWorkgroup[ ]+Master$' => 'workg',
+ '^\t(.*)[ ]+(Disk|IPC)[ ]+IPC.*$' => 'skip',
+ '^\tIPC\\\$(.*)[ ]+IPC' => 'skip',
+ '^\t(.*)[ ]+(Disk)[ ]+(.*)$' => 'share',
+ '^\t(.*)[ ]+(Printer)[ ]+(.*)$' => 'skip',
+ '([0-9]+) blocks of size ([0-9]+)\. ([0-9]+) blocks available' => 'skip',
+ 'Got a positive name query response from ' => 'skip',
+ '^(session setup failed): (.*)$' => 'error',
+ '^(.*): ERRSRV - ERRbadpw' => 'error',
+ '^Error returning browse list: (.*)$' => 'error',
+ '^tree connect failed: (.*)$' => 'error',
+ '^(Connection to .* failed)(.*)$' => 'error-connect',
+ '^NT_STATUS_(.*) ' => 'error',
+ '^NT_STATUS_(.*)\$' => 'error',
+ 'ERRDOS - ERRbadpath \((.*).\)' => 'error',
+ 'cd (.*): (.*)$' => 'error',
+ '^cd (.*): NT_STATUS_(.*)' => 'error',
+ '^\t(.*)$' => 'srvorwg',
+ '^([0-9]+)[ ]+([0-9]+)[ ]+(.*)$' => 'skip',
+ '^Job ([0-9]+) cancelled' => 'skip',
+ '^[ ]+(.*)[ ]+([0-9]+)[ ]+(Mon|Tue|Wed|Thu|Fri|Sat|Sun)[ ](Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[ ]+([0-9]+)[ ]+([0-9]{2}:[0-9]{2}:[0-9]{2})[ ]([0-9]{4})$' => 'files',
+ '^message start: ERRSRV - (ERRmsgoff)' => 'error'
+ );
+
+ if (SMB4PHP_AUTHMODE == 'env') {
+ putenv("USER={$purl['user']}%{$purl['pass']}");
+ $auth = '';
+ } else {
+ $auth = ($purl['user'] <> '' ? (' -U ' . escapeshellarg ($purl['user'] . '%' . $purl['pass'])) : '');
+ }
+ if ($purl['domain'] <> '') {
+ $auth .= ' -W ' . escapeshellarg ($purl['domain']);
+ }
+ $port = ($purl['port'] <> 139 ? ' -p ' . escapeshellarg ($purl['port']) : '');
+ $options = '-O ' . escapeshellarg(SMB4PHP_SMBOPTIONS);
+
+ // this put env is necessary to read the output of smbclient correctly
+ $old_locale = getenv('LC_ALL');
+ putenv('LC_ALL=en_US.UTF-8');
+ $output = popen (SMB4PHP_SMBCLIENT." -N {$auth} {$options} {$port} {$options} {$params} 2>/dev/null", 'r');
+ $info = array ();
+ $info['info']= array ();
+ $mode = '';
+ while ($line = fgets ($output, 4096)) {
+ list ($tag, $regs, $i) = array ('skip', array (), array ());
+ reset ($regexp);
+ foreach ($regexp as $r => $t) if (preg_match ('/'.$r.'/', $line, $regs)) {
+ $tag = $t;
+ break;
+ }
+ switch ($tag) {
+ case 'skip': continue;
+ case 'shares': $mode = 'shares'; break;
+ case 'servers': $mode = 'servers'; break;
+ case 'workg': $mode = 'workgroups'; break;
+ case 'share':
+ list($name, $type) = array (
+ trim(substr($line, 1, 15)),
+ trim(strtolower(substr($line, 17, 10)))
+ );
+ $i = ($type <> 'disk' && preg_match('/^(.*) Disk/', $line, $regs))
+ ? array(trim($regs[1]), 'disk')
+ : array($name, 'disk');
+ break;
+ case 'srvorwg':
+ list ($name, $master) = array (
+ strtolower(trim(substr($line,1,21))),
+ strtolower(trim(substr($line, 22)))
+ );
+ $i = ($mode == 'servers') ? array ($name, "server") : array ($name, "workgroup", $master);
+ break;
+ case 'files':
+ list ($attr, $name) = preg_match ("/^(.*)[ ]+([D|A|H|S|R]+)$/", trim ($regs[1]), $regs2)
+ ? array (trim ($regs2[2]), trim ($regs2[1]))
+ : array ('', trim ($regs[1]));
+ list ($his, $im) = array (
+ explode(':', $regs[6]), 1 + strpos("JanFebMarAprMayJunJulAugSepOctNovDec", $regs[4]) / 3);
+ $i = ($name <> '.' && $name <> '..')
+ ? array (
+ $name,
+ (strpos($attr,'D') === FALSE) ? 'file' : 'folder',
+ 'attr' => $attr,
+ 'size' => intval($regs[2]),
+ 'time' => mktime ($his[0], $his[1], $his[2], $im, $regs[5], $regs[7])
+ )
+ : array();
+ break;
+ case 'error':
+ if(substr($regs[0],0,22)=='NT_STATUS_NO_SUCH_FILE'){
+ return false;
+ }elseif(substr($regs[0],0,31)=='NT_STATUS_OBJECT_NAME_COLLISION'){
+ return false;
+ }elseif(substr($regs[0],0,31)=='NT_STATUS_OBJECT_PATH_NOT_FOUND'){
+ return false;
+ }elseif(substr($regs[0],0,29)=='NT_STATUS_FILE_IS_A_DIRECTORY'){
+ return false;
+ }
+ trigger_error($regs[0].' params('.$params.')', E_USER_ERROR);
+ case 'error-connect':
+ return false;
+ }
+ if ($i) switch ($i[1]) {
+ case 'file':
+ case 'folder': $info['info'][$i[0]] = $i;
+ case 'disk':
+ case 'server':
+ case 'workgroup': $info[$i[1]][] = $i[0];
+ }
+ }
+ pclose($output);
+
+
+ // restore previous locale
+ if ($old_locale===false) {
+ putenv('LC_ALL');
+ } else {
+ putenv('LC_ALL='.$old_locale);
+ }
+
+ return $info;
+ }
+
+
+ # stats
+
+ function url_stat ($url, $flags = STREAM_URL_STAT_LINK) {
+ if ($s = smb::getstatcache($url)) {
+ return $s;
+ }
+ list ($stat, $pu) = array (false, smb::parse_url ($url));
+ switch ($pu['type']) {
+ case 'host':
+ if ($o = smb::look ($pu))
+ $stat = stat ("/tmp");
+ else
+ trigger_error ("url_stat(): list failed for host '{$pu['host']}'", E_USER_WARNING);
+ break;
+ case 'share':
+ if ($o = smb::look ($pu)) {
+ $found = FALSE;
+ $lshare = strtolower ($pu['share']); # fix by Eric Leung
+ foreach ($o['disk'] as $s) if ($lshare == strtolower($s)) {
+ $found = TRUE;
+ $stat = stat ("/tmp");
+ break;
+ }
+ if (! $found)
+ trigger_error ("url_stat(): disk resource '{$lshare}' not found in '{$pu['host']}'", E_USER_WARNING);
+ }
+ break;
+ case 'path':
+ if ($o = smb::execute ('dir "'.$pu['path'].'"', $pu)) {
+ $p = explode('\\', $pu['path']);
+ $name = $p[count($p)-1];
+ if (isset ($o['info'][$name])) {
+ $stat = smb::addstatcache ($url, $o['info'][$name]);
+ } else {
+ trigger_error ("url_stat(): path '{$pu['path']}' not found", E_USER_WARNING);
+ }
+ } else {
+ return false;
+// trigger_error ("url_stat(): dir failed for path '{$pu['path']}'", E_USER_WARNING);
+ }
+ break;
+ default: trigger_error ('error in URL', E_USER_ERROR);
+ }
+ return $stat;
+ }
+
+ function addstatcache ($url, $info) {
+ $url = str_replace('//', '/', $url);
+ $url = rtrim($url, '/');
+ global $__smb_cache;
+ $is_file = (strpos ($info['attr'],'D') === FALSE);
+ $s = ($is_file) ? stat ('/etc/passwd') : stat ('/tmp');
+ $s[7] = $s['size'] = $info['size'];
+ $s[8] = $s[9] = $s[10] = $s['atime'] = $s['mtime'] = $s['ctime'] = $info['time'];
+ return $__smb_cache['stat'][$url] = $s;
+ }
+
+ function getstatcache ($url) {
+ $url = str_replace('//', '/', $url);
+ $url = rtrim($url, '/');
+ global $__smb_cache;
+ return isset ($__smb_cache['stat'][$url]) ? $__smb_cache['stat'][$url] : FALSE;
+ }
+
+ function clearstatcache ($url='') {
+ $url = str_replace('//', '/', $url);
+ $url = rtrim($url, '/');
+ global $__smb_cache;
+ if ($url == '') $__smb_cache['stat'] = array (); else unset ($__smb_cache['stat'][$url]);
+ }
+
+
+ # commands
+
+ function unlink ($url) {
+ $pu = smb::parse_url($url);
+ if ($pu['type'] <> 'path') trigger_error('unlink(): error in URL', E_USER_ERROR);
+ smb::clearstatcache ($url);
+ smb_stream_wrapper::cleardircache (dirname($url));
+ return smb::execute ('del "'.$pu['path'].'"', $pu);
+ }
+
+ function rename ($url_from, $url_to) {
+ list ($from, $to) = array (smb::parse_url($url_from), smb::parse_url($url_to));
+ if ($from['host'] <> $to['host'] ||
+ $from['share'] <> $to['share'] ||
+ $from['user'] <> $to['user'] ||
+ $from['pass'] <> $to['pass'] ||
+ $from['domain'] <> $to['domain']) {
+ trigger_error('rename(): FROM & TO must be in same server-share-user-pass-domain', E_USER_ERROR);
+ }
+ if ($from['type'] <> 'path' || $to['type'] <> 'path') {
+ trigger_error('rename(): error in URL', E_USER_ERROR);
+ }
+ smb::clearstatcache ($url_from);
+ return smb::execute ('rename "'.$from['path'].'" "'.$to['path'].'"', $to);
+ }
+
+ function mkdir ($url, $mode, $options) {
+ $pu = smb::parse_url($url);
+ if ($pu['type'] <> 'path') trigger_error('mkdir(): error in URL', E_USER_ERROR);
+ return smb::execute ('mkdir "'.$pu['path'].'"', $pu)!==false;
+ }
+
+ function rmdir ($url) {
+ $pu = smb::parse_url($url);
+ if ($pu['type'] <> 'path') trigger_error('rmdir(): error in URL', E_USER_ERROR);
+ smb::clearstatcache ($url);
+ smb_stream_wrapper::cleardircache (dirname($url));
+ return smb::execute ('rmdir "'.$pu['path'].'"', $pu)!==false;
+ }
+
+}
+
+###################################################################
+# SMB_STREAM_WRAPPER - class to be registered for smb:// URLs
+###################################################################
+
+class smb_stream_wrapper extends smb {
+
+ # variables
+
+ private $stream, $url, $parsed_url = array (), $mode, $tmpfile;
+ private $need_flush = FALSE;
+ private $dir = array (), $dir_index = -1;
+
+
+ # directories
+
+ function dir_opendir ($url, $options) {
+ if ($d = $this->getdircache ($url)) {
+ $this->dir = $d;
+ $this->dir_index = 0;
+ return TRUE;
+ }
+ $pu = smb::parse_url ($url);
+ switch ($pu['type']) {
+ case 'host':
+ if ($o = smb::look ($pu)) {
+ $this->dir = $o['disk'];
+ $this->dir_index = 0;
+ } else {
+ trigger_error ("dir_opendir(): list failed for host '{$pu['host']}'", E_USER_WARNING);
+ return false;
+ }
+ break;
+ case 'share':
+ case 'path':
+ if (is_array($o = smb::execute ('dir "'.$pu['path'].'\*"', $pu))) {
+ $this->dir = array_keys($o['info']);
+ $this->dir_index = 0;
+ $this->adddircache ($url, $this->dir);
+ if(substr($url,-1,1)=='/'){
+ $url=substr($url,0,-1);
+ }
+ foreach ($o['info'] as $name => $info) {
+ smb::addstatcache($url . '/' . $name, $info);
+ }
+ } else {
+ trigger_error ("dir_opendir(): dir failed for path '".$pu['path']."'", E_USER_WARNING);
+ return false;
+ }
+ break;
+ default:
+ trigger_error ('dir_opendir(): error in URL', E_USER_ERROR);
+ return false;
+ }
+ return TRUE;
+ }
+
+ function dir_readdir () {
+ return ($this->dir_index < count($this->dir)) ? $this->dir[$this->dir_index++] : FALSE;
+ }
+
+ function dir_rewinddir () { $this->dir_index = 0; }
+
+ function dir_closedir () { $this->dir = array(); $this->dir_index = -1; return TRUE; }
+
+
+ # cache
+
+ function adddircache ($url, $content) {
+ $url = str_replace('//', '/', $url);
+ $url = rtrim($url, '/');
+ global $__smb_cache;
+ return $__smb_cache['dir'][$url] = $content;
+ }
+
+ function getdircache ($url) {
+ $url = str_replace('//', '/', $url);
+ $url = rtrim($url, '/');
+ global $__smb_cache;
+ return isset ($__smb_cache['dir'][$url]) ? $__smb_cache['dir'][$url] : FALSE;
+ }
+
+ function cleardircache ($url='') {
+ $url = str_replace('//', '/', $url);
+ $url = rtrim($url, '/');
+ global $__smb_cache;
+ if ($url == ''){
+ $__smb_cache['dir'] = array ();
+ }else{
+ unset ($__smb_cache['dir'][$url]);
+ }
+ }
+
+
+ # streams
+
+ function stream_open ($url, $mode, $options, $opened_path) {
+ $this->url = $url;
+ $this->mode = $mode;
+ $this->parsed_url = $pu = smb::parse_url($url);
+ if ($pu['type'] <> 'path') trigger_error('stream_open(): error in URL', E_USER_ERROR);
+ switch ($mode) {
+ case 'r':
+ case 'r+':
+ case 'rb':
+ case 'a':
+ case 'a+': $this->tmpfile = tempnam('/tmp', 'smb.down.');
+ smb::execute ('get "'.$pu['path'].'" "'.$this->tmpfile.'"', $pu);
+ break;
+ case 'w':
+ case 'w+':
+ case 'wb':
+ case 'x':
+ case 'x+': $this->cleardircache();
+ $this->tmpfile = tempnam('/tmp', 'smb.up.');
+ $this->need_flush=true;
+ }
+ $this->stream = fopen ($this->tmpfile, $mode);
+ return TRUE;
+ }
+
+ function stream_close () { return fclose($this->stream); }
+
+ function stream_read ($count) { return fread($this->stream, $count); }
+
+ function stream_write ($data) { $this->need_flush = TRUE; return fwrite($this->stream, $data); }
+
+ function stream_eof () { return feof($this->stream); }
+
+ function stream_tell () { return ftell($this->stream); }
+
+ function stream_seek ($offset, $whence=null) { return fseek($this->stream, $offset, $whence); }
+
+ function stream_flush () {
+ if ($this->mode <> 'r' && $this->need_flush) {
+ smb::clearstatcache ($this->url);
+ smb::execute ('put "'.$this->tmpfile.'" "'.$this->parsed_url['path'].'"', $this->parsed_url);
+ $this->need_flush = FALSE;
+ }
+ }
+
+ function stream_stat () { return smb::url_stat ($this->url); }
+
+ function __destruct () {
+ if ($this->tmpfile <> '') {
+ if ($this->need_flush) $this->stream_flush ();
+ unlink ($this->tmpfile);
+
+ }
+ }
+
+}
+
+###################################################################
+# Register 'smb' protocol !
+###################################################################
+
+stream_wrapper_register('smb', 'smb_stream_wrapper')
+ or die ('Failed to register protocol');
diff --git a/apps/files_external/ajax/addMountPoint.php b/apps/files_external/ajax/addMountPoint.php
index fed2ddfcf3d..9100d47db3a 100644
--- a/apps/files_external/ajax/addMountPoint.php
+++ b/apps/files_external/ajax/addMountPoint.php
@@ -16,4 +16,4 @@ $status = OC_Mount_Config::addMountPoint($_POST['mountPoint'],
$_POST['mountType'],
$_POST['applicable'],
$isPersonal);
-OCP\JSON::success(array('data' => array('message' => $status))); \ No newline at end of file
+OCP\JSON::success(array('data' => array('message' => $status)));
diff --git a/apps/files_external/ajax/google.php b/apps/files_external/ajax/google.php
index e63b7cb07b9..2594a1780b3 100644
--- a/apps/files_external/ajax/google.php
+++ b/apps/files_external/ajax/google.php
@@ -39,4 +39,4 @@ if (isset($_POST['client_id']) && isset($_POST['client_secret']) && isset($_POST
}
}
}
-} \ No newline at end of file
+}
diff --git a/apps/files_external/js/google.js b/apps/files_external/js/google.js
index 7e111a95d98..b4be1c1dc41 100644
--- a/apps/files_external/js/google.js
+++ b/apps/files_external/js/google.js
@@ -126,4 +126,4 @@ $(document).ready(function() {
}
});
-}); \ No newline at end of file
+});
diff --git a/apps/files_external/l10n/lv.php b/apps/files_external/l10n/lv.php
index bc9e3aeefe7..d0db01a22b5 100644
--- a/apps/files_external/l10n/lv.php
+++ b/apps/files_external/l10n/lv.php
@@ -7,6 +7,7 @@ $TRANSLATIONS = array(
"Error configuring Google Drive storage" => "Kļūda, konfigurējot Google Drive krātuvi",
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>Brīdinājums:</b> nav uzinstalēts “smbclient”. Nevar montēt CIFS/SMB koplietojumus. Lūdzu, vaicājiet savam sistēmas administratoram, lai to uzinstalē.",
"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "<b>Brīdinājums: </b> uz PHP nav aktivēts vai instalēts FTP atbalsts. Nevar montēt FTP koplietojumus. Lūdzu, vaicājiet savam sistēmas administratoram, lai to uzinstalē.",
+"<b>Warning:</b> The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "<b>Brīdinājums:</b> PHP Curl atbalsts nav instalēts. OwnCloud / WebDAV vai GoogleDrive montēšana nav iespējama. Lūdziet sistēmas administratoram lai tas tiek uzstādīts.",
"External Storage" => "Ārējā krātuve",
"Folder name" => "Mapes nosaukums",
"External storage" => "Ārējā krātuve",
diff --git a/apps/files_external/l10n/ru_RU.php b/apps/files_external/l10n/ru_RU.php
deleted file mode 100644
index 6dcd0460ada..00000000000
--- a/apps/files_external/l10n/ru_RU.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Groups" => "Группы",
-"Delete" => "Удалить"
-);
-$PLURAL_FORMS = "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_external/l10n/zh_CN.GB2312.php b/apps/files_external/l10n/zh_CN.GB2312.php
deleted file mode 100644
index 3633de6314e..00000000000
--- a/apps/files_external/l10n/zh_CN.GB2312.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Access granted" => "已授予权限",
-"Error configuring Dropbox storage" => "配置 Dropbox 存储出错",
-"Grant access" => "授予权限",
-"Please provide a valid Dropbox app key and secret." => "请提供一个有效的 Dropbox app key 和 secret。",
-"Error configuring Google Drive storage" => "配置 Google Drive 存储失败",
-"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>注意:</b>“SMB客户端”未安装。CIFS/SMB分享不可用。请向您的系统管理员请求安装该客户端。",
-"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "<b>注意:</b>PHP的FTP支持尚未启用或未安装。FTP分享不可用。请向您的系统管理员请求安装。",
-"<b>Warning:</b> The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "<b>警告:</b> PHP 的 Curl 支持没有安装或打开。挂载 ownCloud、WebDAV 或 Google Drive 的功能将不可用。请询问您的系统管理员去安装它。",
-"External Storage" => "外部存储",
-"Folder name" => "文件夹名",
-"External storage" => "外部存储",
-"Configuration" => "配置",
-"Options" => "选项",
-"Applicable" => "可应用",
-"Add storage" => "扩容",
-"None set" => "未设置",
-"All Users" => "所有用户",
-"Groups" => "群组",
-"Users" => "用户",
-"Delete" => "删除",
-"Enable User External Storage" => "启用用户外部存储",
-"Allow users to mount their own external storage" => "允许用户挂载他们的外部存储",
-"SSL root certificates" => "SSL 根证书",
-"Import Root Certificate" => "导入根证书"
-);
-$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_external/lib/amazons3.php b/apps/files_external/lib/amazons3.php
index f4d1940b184..2d7bcd4ac37 100644
--- a/apps/files_external/lib/amazons3.php
+++ b/apps/files_external/lib/amazons3.php
@@ -79,7 +79,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
$this->bucket = $params['bucket'];
$scheme = ($params['use_ssl'] === 'false') ? 'http' : 'https';
- $this->test = ( isset($params['test'])) ? true : false;
+ $this->test = isset($params['test']);
$this->timeout = ( ! isset($params['timeout'])) ? 15 : $params['timeout'];
$params['region'] = ( ! isset($params['region'])) ? 'eu-west-1' : $params['region'];
$params['hostname'] = ( !isset($params['hostname'])) ? 's3.amazonaws.com' : $params['hostname'];
@@ -183,7 +183,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
}
$dh = $this->opendir($path);
- while ($file = readdir($dh)) {
+ while (($file = readdir($dh)) !== false) {
if ($file === '.' || $file === '..') {
continue;
}
@@ -464,7 +464,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
}
$dh = $this->opendir($path1);
- while ($file = readdir($dh)) {
+ while (($file = readdir($dh)) !== false) {
if ($file === '.' || $file === '..') {
continue;
}
diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php
index e3a2cf0b30b..1935740cd2e 100755
--- a/apps/files_external/lib/config.php
+++ b/apps/files_external/lib/config.php
@@ -93,14 +93,18 @@ class OC_Mount_Config {
'root' => '&Root',
'secure' => '!Secure ftps://'));
- if(OC_Mount_Config::checksmbclient()) $backends['\OC\Files\Storage\SMB']=array(
- 'backend' => 'SMB / CIFS',
- 'configuration' => array(
- 'host' => 'URL',
- 'user' => 'Username',
- 'password' => '*Password',
- 'share' => 'Share',
- 'root' => '&Root'));
+ if (!OC_Util::runningOnWindows()) {
+ if (OC_Mount_Config::checksmbclient()) {
+ $backends['\OC\Files\Storage\SMB'] = array(
+ 'backend' => 'SMB / CIFS',
+ 'configuration' => array(
+ 'host' => 'URL',
+ 'user' => 'Username',
+ 'password' => '*Password',
+ 'share' => 'Share',
+ 'root' => '&Root'));
+ }
+ }
if(OC_Mount_Config::checkcurl()) $backends['\OC\Files\Storage\DAV']=array(
'backend' => 'ownCloud / WebDAV',
@@ -414,9 +418,9 @@ class OC_Mount_Config {
public static function checksmbclient() {
if(function_exists('shell_exec')) {
$output=shell_exec('which smbclient');
- return (empty($output)?false:true);
+ return !empty($output);
}else{
- return(false);
+ return false;
}
}
@@ -425,9 +429,9 @@ class OC_Mount_Config {
*/
public static function checkphpftp() {
if(function_exists('ftp_login')) {
- return(true);
+ return true;
}else{
- return(false);
+ return false;
}
}
@@ -435,7 +439,7 @@ class OC_Mount_Config {
* check if curl is installed
*/
public static function checkcurl() {
- return (function_exists('curl_init'));
+ return function_exists('curl_init');
}
/**
@@ -444,8 +448,10 @@ class OC_Mount_Config {
public static function checkDependencies() {
$l= new OC_L10N('files_external');
$txt='';
- if(!OC_Mount_Config::checksmbclient()) {
- $txt.=$l->t('<b>Warning:</b> "smbclient" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it.').'<br />';
+ if (!OC_Util::runningOnWindows()) {
+ if(!OC_Mount_Config::checksmbclient()) {
+ $txt.=$l->t('<b>Warning:</b> "smbclient" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it.').'<br />';
+ }
}
if(!OC_Mount_Config::checkphpftp()) {
$txt.=$l->t('<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it.').'<br />';
@@ -454,6 +460,6 @@ class OC_Mount_Config {
$txt.=$l->t('<b>Warning:</b> The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it.').'<br />';
}
- return($txt);
+ return $txt;
}
}
diff --git a/apps/files_external/lib/dropbox.php b/apps/files_external/lib/dropbox.php
index 081c5478881..b6deab6e5a7 100755
--- a/apps/files_external/lib/dropbox.php
+++ b/apps/files_external/lib/dropbox.php
@@ -22,7 +22,7 @@
namespace OC\Files\Storage;
-require_once 'Dropbox/autoload.php';
+require_once __DIR__ . '/../3rdparty/Dropbox/autoload.php';
class Dropbox extends \OC\Files\Storage\Common {
diff --git a/apps/files_external/lib/google.php b/apps/files_external/lib/google.php
index ef8dd6d8cad..215bdcda6c2 100644
--- a/apps/files_external/lib/google.php
+++ b/apps/files_external/lib/google.php
@@ -206,7 +206,7 @@ class Google extends \OC\Files\Storage\Common {
public function rmdir($path) {
if (trim($path, '/') === '') {
$dir = $this->opendir($path);
- while ($file = readdir($dir)) {
+ while (($file = readdir($dh)) !== false) {
if (!\OC\Files\Filesystem::isIgnoredDir($file)) {
if (!$this->unlink($path.'/'.$file)) {
return false;
@@ -284,7 +284,7 @@ class Google extends \OC\Files\Storage\Common {
// Check if this is a Google Doc
if ($this->getMimeType($path) !== $file->getMimeType()) {
// Return unknown file size
- $stat['size'] = \OC\Files\FREE_SPACE_UNKNOWN;
+ $stat['size'] = \OC\Files\SPACE_UNKNOWN;
} else {
$stat['size'] = $file->getFileSize();
}
@@ -587,4 +587,4 @@ class Google extends \OC\Files\Storage\Common {
return false;
}
-} \ No newline at end of file
+}
diff --git a/apps/files_external/lib/irods.php b/apps/files_external/lib/irods.php
index a343ac5fb27..7ec3b3a0cfc 100644
--- a/apps/files_external/lib/irods.php
+++ b/apps/files_external/lib/irods.php
@@ -137,7 +137,7 @@ class iRODS extends \OC\Files\Storage\StreamWrapper{
private function collectionMTime($path) {
$dh = $this->opendir($path);
$lastCTime = $this->filemtime($path);
- while ($file = readdir($dh)) {
+ while (($file = readdir($dh)) !== false) {
if ($file != '.' and $file != '..') {
$time = $this->filemtime($file);
if ($time > $lastCTime) {
diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php
index 4fd36096463..f7f329b8993 100644
--- a/apps/files_external/lib/sftp.php
+++ b/apps/files_external/lib/sftp.php
@@ -170,7 +170,7 @@ class SFTP extends \OC\Files\Storage\Common {
public function file_exists($path) {
try {
- return $this->client->stat($this->abs_path($path)) === false ? false : true;
+ return $this->client->stat($this->abs_path($path)) !== false;
} catch (\Exception $e) {
return false;
}
diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php
index 81a6c956385..8e7a28fba1a 100644
--- a/apps/files_external/lib/smb.php
+++ b/apps/files_external/lib/smb.php
@@ -8,7 +8,7 @@
namespace OC\Files\Storage;
-require_once 'smb4php/smb.php';
+require_once __DIR__ . '/../3rdparty/smb4php/smb.php';
class SMB extends \OC\Files\Storage\StreamWrapper{
private $password;
@@ -99,7 +99,7 @@ class SMB extends \OC\Files\Storage\StreamWrapper{
private function shareMTime() {
$dh=$this->opendir('');
$lastCtime=0;
- while($file=readdir($dh)) {
+ while (($file = readdir($dh)) !== false) {
if ($file!='.' and $file!='..') {
$ctime=$this->filemtime($file);
if ($ctime>$lastCtime) {
diff --git a/apps/files_external/lib/webdav.php b/apps/files_external/lib/webdav.php
index 4869322d87a..66920fc9f64 100644
--- a/apps/files_external/lib/webdav.php
+++ b/apps/files_external/lib/webdav.php
@@ -171,8 +171,9 @@ class DAV extends \OC\Files\Storage\Common{
$curl = curl_init();
$fp = fopen('php://temp', 'r+');
curl_setopt($curl, CURLOPT_USERPWD, $this->user.':'.$this->password);
- curl_setopt($curl, CURLOPT_URL, $this->createBaseUri().$path);
+ curl_setopt($curl, CURLOPT_URL, $this->createBaseUri().str_replace(' ', '%20', $path));
curl_setopt($curl, CURLOPT_FILE, $fp);
+ curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_exec ($curl);
curl_close ($curl);
@@ -224,7 +225,7 @@ class DAV extends \OC\Files\Storage\Common{
return 0;
}
} catch(\Exception $e) {
- return \OC\Files\FREE_SPACE_UNKNOWN;
+ return \OC\Files\SPACE_UNKNOWN;
}
}
@@ -255,7 +256,7 @@ class DAV extends \OC\Files\Storage\Common{
$curl = curl_init();
curl_setopt($curl, CURLOPT_USERPWD, $this->user.':'.$this->password);
- curl_setopt($curl, CURLOPT_URL, $this->createBaseUri().$target);
+ curl_setopt($curl, CURLOPT_URL, $this->createBaseUri().str_replace(' ', '%20', $target));
curl_setopt($curl, CURLOPT_BINARYTRANSFER, true);
curl_setopt($curl, CURLOPT_INFILE, $source); // file pointer
curl_setopt($curl, CURLOPT_INFILESIZE, filesize($path));
diff --git a/apps/files_external/tests/google.php b/apps/files_external/tests/google.php
index 12faabb902d..d5495d49c5e 100644
--- a/apps/files_external/tests/google.php
+++ b/apps/files_external/tests/google.php
@@ -42,4 +42,4 @@ class Google extends Storage {
$this->instance->rmdir('/');
}
}
-} \ No newline at end of file
+}
diff --git a/apps/files_sharing/ajax/publicpreview.php b/apps/files_sharing/ajax/publicpreview.php
new file mode 100644
index 00000000000..41a1c178a48
--- /dev/null
+++ b/apps/files_sharing/ajax/publicpreview.php
@@ -0,0 +1,85 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+if(!\OC_App::isEnabled('files_sharing')){
+ exit;
+}
+
+$file = array_key_exists('file', $_GET) ? (string) urldecode($_GET['file']) : '';
+$maxX = array_key_exists('x', $_GET) ? (int) $_GET['x'] : '36';
+$maxY = array_key_exists('y', $_GET) ? (int) $_GET['y'] : '36';
+$scalingUp = array_key_exists('scalingup', $_GET) ? (bool) $_GET['scalingup'] : true;
+$token = array_key_exists('t', $_GET) ? (string) $_GET['t'] : '';
+
+if($token === ''){
+ \OC_Response::setStatus(400); //400 Bad Request
+ \OC_Log::write('core-preview', 'No token parameter was passed', \OC_Log::DEBUG);
+ exit;
+}
+
+$linkedItem = \OCP\Share::getShareByToken($token);
+if($linkedItem === false || ($linkedItem['item_type'] !== 'file' && $linkedItem['item_type'] !== 'folder')) {
+ \OC_Response::setStatus(404);
+ \OC_Log::write('core-preview', 'Passed token parameter is not valid', \OC_Log::DEBUG);
+ exit;
+}
+
+if(!isset($linkedItem['uid_owner']) || !isset($linkedItem['file_source'])) {
+ \OC_Response::setStatus(500);
+ \OC_Log::write('core-preview', 'Passed token seems to be valid, but it does not contain all necessary information . ("' . $token . '")', \OC_Log::WARN);
+ exit;
+}
+
+$userId = $linkedItem['uid_owner'];
+\OC_Util::setupFS($userId);
+
+$pathId = $linkedItem['file_source'];
+$path = \OC\Files\Filesystem::getPath($pathId);
+$pathInfo = \OC\Files\Filesystem::getFileInfo($path);
+$sharedFile = null;
+
+if($linkedItem['item_type'] === 'folder') {
+ $isvalid = \OC\Files\Filesystem::isValidPath($file);
+ if(!$isvalid) {
+ \OC_Response::setStatus(400); //400 Bad Request
+ \OC_Log::write('core-preview', 'Passed filename is not valid, might be malicious (file:"' . $file . '";ip:"' . $_SERVER['REMOTE_ADDR'] . '")', \OC_Log::WARN);
+ exit;
+ }
+ $sharedFile = \OC\Files\Filesystem::normalizePath($file);
+}
+
+if($linkedItem['item_type'] === 'file') {
+ $parent = $pathInfo['parent'];
+ $path = \OC\Files\Filesystem::getPath($parent);
+ $sharedFile = $pathInfo['name'];
+}
+
+$path = \OC\Files\Filesystem::normalizePath($path, false);
+if(substr($path, 0, 1) === '/') {
+ $path = substr($path, 1);
+}
+
+if($maxX === 0 || $maxY === 0) {
+ \OC_Response::setStatus(400); //400 Bad Request
+ \OC_Log::write('core-preview', 'x and/or y set to 0', \OC_Log::DEBUG);
+ exit;
+}
+
+$root = 'files/' . $path;
+
+try{
+ $preview = new \OC\Preview($userId, $root);
+ $preview->setFile($sharedFile);
+ $preview->setMaxX($maxX);
+ $preview->setMaxY($maxY);
+ $preview->setScalingUp($scalingUp);
+
+ $preview->show();
+} catch (\Exception $e) {
+ \OC_Response::setStatus(500);
+ \OC_Log::write('core', $e->getmessage(), \OC_Log::DEBUG);
+} \ No newline at end of file
diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php
index 9363a5431fa..895d446a336 100644
--- a/apps/files_sharing/appinfo/app.php
+++ b/apps/files_sharing/appinfo/app.php
@@ -15,4 +15,4 @@ OCP\Util::addScript('files_sharing', 'share');
\OC_Hook::connect('OC_Filesystem', 'delete', '\OC\Files\Cache\Shared_Updater', 'deleteHook');
\OC_Hook::connect('OC_Filesystem', 'post_rename', '\OC\Files\Cache\Shared_Updater', 'renameHook');
\OC_Hook::connect('OCP\Share', 'post_shared', '\OC\Files\Cache\Shared_Updater', 'shareHook');
-\OC_Hook::connect('OCP\Share', 'pre_unshare', '\OC\Files\Cache\Shared_Updater', 'shareHook'); \ No newline at end of file
+\OC_Hook::connect('OCP\Share', 'pre_unshare', '\OC\Files\Cache\Shared_Updater', 'shareHook');
diff --git a/apps/files_sharing/appinfo/routes.php b/apps/files_sharing/appinfo/routes.php
new file mode 100644
index 00000000000..02815b5eb42
--- /dev/null
+++ b/apps/files_sharing/appinfo/routes.php
@@ -0,0 +1,5 @@
+<?php
+$this->create('core_ajax_public_preview', '/publicpreview.png')->action(
+function() {
+ require_once __DIR__ . '/../ajax/publicpreview.php';
+}); \ No newline at end of file
diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js
index a20b4ae636f..ac121fd08e2 100644
--- a/apps/files_sharing/js/public.js
+++ b/apps/files_sharing/js/public.js
@@ -16,7 +16,7 @@ $(document).ready(function() {
if (typeof FileActions !== 'undefined') {
var mimetype = $('#mimetype').val();
// Show file preview if previewer is available, images are already handled by the template
- if (mimetype.substr(0, mimetype.indexOf('/')) != 'image') {
+ if (mimetype.substr(0, mimetype.indexOf('/')) != 'image' && $('.publicpreview').length === 0) {
// Trigger default action if not download TODO
var action = FileActions.getDefault(mimetype, 'file', OC.PERMISSION_READ);
if (typeof action === 'undefined') {
@@ -31,19 +31,19 @@ $(document).ready(function() {
}
}
FileActions.register('dir', 'Open', OC.PERMISSION_READ, '', function(filename) {
- var tr = $('tr').filterAttr('data-file', filename)
+ var tr = $('tr').filterAttr('data-file', filename);
if (tr.length > 0) {
window.location = $(tr).find('a.name').attr('href');
}
});
FileActions.register('file', 'Download', OC.PERMISSION_READ, '', function(filename) {
- var tr = $('tr').filterAttr('data-file', filename)
+ var tr = $('tr').filterAttr('data-file', filename);
if (tr.length > 0) {
window.location = $(tr).find('a.name').attr('href');
}
});
FileActions.register('dir', 'Download', OC.PERMISSION_READ, '', function(filename) {
- var tr = $('tr').filterAttr('data-file', filename)
+ var tr = $('tr').filterAttr('data-file', filename);
if (tr.length > 0) {
window.location = $(tr).find('a.name').attr('href')+'&download';
}
diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js
index eb5a6e8cb7f..3be89a39fa0 100644
--- a/apps/files_sharing/js/share.js
+++ b/apps/files_sharing/js/share.js
@@ -4,6 +4,10 @@ $(document).ready(function() {
if (typeof OC.Share !== 'undefined' && typeof FileActions !== 'undefined' && !disableSharing) {
+ $('#fileList').one('fileActionsReady',function(){
+ OC.Share.loadIcons('file');
+ });
+
FileActions.register('all', 'Share', OC.PERMISSION_READ, OC.imagePath('core', 'actions/share'), function(filename) {
if ($('#dir').val() == '/') {
var item = $('#dir').val() + filename;
@@ -33,6 +37,5 @@ $(document).ready(function() {
OC.Share.showDropDown(itemType, $(tr).data('id'), appendTo, true, possiblePermissions);
}
});
- OC.Share.loadIcons('file');
}
});
diff --git a/apps/files_sharing/l10n/eu.php b/apps/files_sharing/l10n/eu.php
index 8e13c24a926..7b6a4b08b3c 100644
--- a/apps/files_sharing/l10n/eu.php
+++ b/apps/files_sharing/l10n/eu.php
@@ -3,6 +3,12 @@ $TRANSLATIONS = array(
"The password is wrong. Try again." => "Pasahitza ez da egokia. Saiatu berriro.",
"Password" => "Pasahitza",
"Submit" => "Bidali",
+"Sorry, this link doesn’t seem to work anymore." => "Barkatu, lotura ez dirudi eskuragarria dagoenik.",
+"Reasons might be:" => "Arrazoiak hurrengoak litezke:",
+"the item was removed" => "fitxategia ezbatua izan da",
+"the link expired" => "lotura iraungi da",
+"sharing is disabled" => "elkarbanatzea ez dago gaituta",
+"For more info, please ask the person who sent this link." => "Informazio gehiagorako, mesedez eskatu lotura hau bidali zuen pertsonari",
"%s shared the folder %s with you" => "%sk zurekin %s karpeta elkarbanatu du",
"%s shared the file %s with you" => "%sk zurekin %s fitxategia elkarbanatu du",
"Download" => "Deskargatu",
diff --git a/apps/files_sharing/l10n/fr.php b/apps/files_sharing/l10n/fr.php
index b263cd87959..c97a1db97e4 100644
--- a/apps/files_sharing/l10n/fr.php
+++ b/apps/files_sharing/l10n/fr.php
@@ -3,6 +3,12 @@ $TRANSLATIONS = array(
"The password is wrong. Try again." => "Le mot de passe est incorrect. Veuillez réessayer.",
"Password" => "Mot de passe",
"Submit" => "Envoyer",
+"Sorry, this link doesn’t seem to work anymore." => "Désolé, mais le lien semble ne plus fonctionner.",
+"Reasons might be:" => "Les raisons peuvent être :",
+"the item was removed" => "l'item a été supprimé",
+"the link expired" => "le lien a expiré",
+"sharing is disabled" => "le partage est désactivé",
+"For more info, please ask the person who sent this link." => "Pour plus d'informations, veuillez contacter la personne qui a envoyé ce lien.",
"%s shared the folder %s with you" => "%s a partagé le répertoire %s avec vous",
"%s shared the file %s with you" => "%s a partagé le fichier %s avec vous",
"Download" => "Télécharger",
diff --git a/apps/files_sharing/l10n/ru_RU.php b/apps/files_sharing/l10n/ru_RU.php
deleted file mode 100644
index 52a41b1f513..00000000000
--- a/apps/files_sharing/l10n/ru_RU.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Download" => "Загрузка"
-);
-$PLURAL_FORMS = "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/l10n/zh_CN.GB2312.php b/apps/files_sharing/l10n/zh_CN.GB2312.php
deleted file mode 100644
index 206e1921faf..00000000000
--- a/apps/files_sharing/l10n/zh_CN.GB2312.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Password" => "密码",
-"Submit" => "提交",
-"%s shared the folder %s with you" => "%s 与您分享了文件夹 %s",
-"%s shared the file %s with you" => "%s 与您分享了文件 %s",
-"Download" => "下载",
-"Upload" => "上传",
-"Cancel upload" => "取消上传",
-"No preview available for" => "没有预览可用于"
-);
-$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_sharing/l10n/zh_CN.php b/apps/files_sharing/l10n/zh_CN.php
index 37898a1cd00..f541d6c155a 100644
--- a/apps/files_sharing/l10n/zh_CN.php
+++ b/apps/files_sharing/l10n/zh_CN.php
@@ -1,7 +1,14 @@
<?php
$TRANSLATIONS = array(
+"The password is wrong. Try again." => "用户名或密码错误!请重试",
"Password" => "密码",
"Submit" => "提交",
+"Sorry, this link doesn’t seem to work anymore." => "抱歉,此链接已失效",
+"Reasons might be:" => "可能原因是:",
+"the item was removed" => "此项已移除",
+"the link expired" => "链接过期",
+"sharing is disabled" => "共享已禁用",
+"For more info, please ask the person who sent this link." => "欲知详情,请联系发给你链接的人。",
"%s shared the folder %s with you" => "%s与您共享了%s文件夹",
"%s shared the file %s with you" => "%s与您共享了%s文件",
"Download" => "下载",
diff --git a/apps/files_sharing/l10n/zh_TW.php b/apps/files_sharing/l10n/zh_TW.php
index b950cbf8c9e..5cc33fd3830 100644
--- a/apps/files_sharing/l10n/zh_TW.php
+++ b/apps/files_sharing/l10n/zh_TW.php
@@ -1,7 +1,14 @@
<?php
$TRANSLATIONS = array(
+"The password is wrong. Try again." => "請檢查您的密碼並再試一次",
"Password" => "密碼",
"Submit" => "送出",
+"Sorry, this link doesn’t seem to work anymore." => "抱歉,此連結已經失效",
+"Reasons might be:" => "可能的原因:",
+"the item was removed" => "項目已經移除",
+"the link expired" => "連結過期",
+"sharing is disabled" => "分享功能已停用",
+"For more info, please ask the person who sent this link." => "請詢問告訴您此連結的人以瞭解更多",
"%s shared the folder %s with you" => "%s 和您分享了資料夾 %s ",
"%s shared the file %s with you" => "%s 和您分享了檔案 %s",
"Download" => "下載",
diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php
index 2160fe9a393..33cd1428899 100644
--- a/apps/files_sharing/lib/cache.php
+++ b/apps/files_sharing/lib/cache.php
@@ -288,4 +288,4 @@ class Shared_Cache extends Cache {
return false;
}
-} \ No newline at end of file
+}
diff --git a/apps/files_sharing/lib/permissions.php b/apps/files_sharing/lib/permissions.php
index b6638564cd8..e2978e12bfb 100644
--- a/apps/files_sharing/lib/permissions.php
+++ b/apps/files_sharing/lib/permissions.php
@@ -106,4 +106,4 @@ class Shared_Permissions extends Permissions {
// Not a valid action for Shared Permissions
}
-} \ No newline at end of file
+}
diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php
index 5c23a9eb0d0..d91acbbb2bd 100644
--- a/apps/files_sharing/lib/sharedstorage.php
+++ b/apps/files_sharing/lib/sharedstorage.php
@@ -362,9 +362,13 @@ class Shared extends \OC\Files\Storage\Common {
case 'xb':
case 'a':
case 'ab':
- if (!$this->isUpdatable($path)) {
- return false;
- }
+ $exists = $this->file_exists($path);
+ if ($exists && !$this->isUpdatable($path)) {
+ return false;
+ }
+ if (!$exists && !$this->isCreatable(dirname($path))) {
+ return false;
+ }
}
$info = array(
'target' => $this->sharedFolder.$path,
@@ -391,7 +395,7 @@ class Shared extends \OC\Files\Storage\Common {
public function free_space($path) {
if ($path == '') {
- return \OC\Files\FREE_SPACE_UNKNOWN;
+ return \OC\Files\SPACE_UNKNOWN;
}
$source = $this->getSourcePath($path);
if ($source) {
diff --git a/apps/files_sharing/lib/watcher.php b/apps/files_sharing/lib/watcher.php
index e67d1ee9086..6fdfc1db36d 100644
--- a/apps/files_sharing/lib/watcher.php
+++ b/apps/files_sharing/lib/watcher.php
@@ -48,4 +48,4 @@ class Shared_Watcher extends Watcher {
}
}
-} \ No newline at end of file
+}
diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php
index 741ab145384..ec6b4e815f8 100644
--- a/apps/files_sharing/public.php
+++ b/apps/files_sharing/public.php
@@ -112,9 +112,9 @@ if (isset($path)) {
if ($files_list === NULL ) {
$files_list = array($files);
}
- OC_Files::get($path, $files_list, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
+ OC_Files::get($path, $files_list, $_SERVER['REQUEST_METHOD'] == 'HEAD');
} else {
- OC_Files::get($dir, $file, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
+ OC_Files::get($dir, $file, $_SERVER['REQUEST_METHOD'] == 'HEAD');
}
exit();
} else {
@@ -133,7 +133,7 @@ if (isset($path)) {
$tmpl->assign('mimetype', \OC\Files\Filesystem::getMimeType($path));
$tmpl->assign('fileTarget', basename($linkItem['file_target']));
$tmpl->assign('dirToken', $linkItem['token']);
- $allowPublicUploadEnabled = (($linkItem['permissions'] & OCP\PERMISSION_CREATE) ? true : false );
+ $allowPublicUploadEnabled = (bool) ($linkItem['permissions'] & OCP\PERMISSION_CREATE);
if (\OCP\App::isEnabled('files_encryption')) {
$allowPublicUploadEnabled = false;
}
@@ -172,6 +172,7 @@ if (isset($path)) {
} else {
$i['extension'] = '';
}
+ $i['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($i['mimetype']);
}
$i['directory'] = $getPath;
$i['permissions'] = OCP\PERMISSION_READ;
@@ -194,6 +195,9 @@ if (isset($path)) {
$list->assign('baseURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&path=');
$list->assign('downloadURL',
OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download&path=');
+ $list->assign('isPublic', true);
+ $list->assign('sharingtoken', $token);
+ $list->assign('sharingroot', $basePath);
$breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '');
$breadcrumbNav->assign('breadcrumb', $breadcrumb);
$breadcrumbNav->assign('baseURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&path=');
diff --git a/apps/files_sharing/templates/part.404.php b/apps/files_sharing/templates/part.404.php
index b5152e1511a..3ef117d7524 100644
--- a/apps/files_sharing/templates/part.404.php
+++ b/apps/files_sharing/templates/part.404.php
@@ -9,4 +9,4 @@
</ul>
<p><?php p($l->t('For more info, please ask the person who sent this link.')); ?></p>
</li>
-</ul> \ No newline at end of file
+</ul>
diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php
index 746a715f3cc..c164b3ea2b7 100644
--- a/apps/files_sharing/templates/public.php
+++ b/apps/files_sharing/templates/public.php
@@ -79,6 +79,10 @@
<source src="<?php p($_['downloadURL']); ?>" type="<?php p($_['mimetype']); ?>" />
</video>
</div>
+ <?php elseif (\OC\Preview::isMimeSupported($_['mimetype'])): ?>
+ <div id="imgframe">
+ <img src="<?php p(OCP\Util::linkToRoute( 'core_ajax_public_preview', array('x' => 500, 'y' => 500, 'file' => urlencode($_['directory_path']), 't' => $_['dirToken']))); ?>" class="publicpreview"/>
+ </div>
<?php else: ?>
<ul id="noPreview">
<li class="error">
diff --git a/apps/files_trashbin/ajax/preview.php b/apps/files_trashbin/ajax/preview.php
new file mode 100644
index 00000000000..a0846b051c7
--- /dev/null
+++ b/apps/files_trashbin/ajax/preview.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+\OC_Util::checkLoggedIn();
+
+if(!\OC_App::isEnabled('files_trashbin')){
+ exit;
+}
+
+$file = array_key_exists('file', $_GET) ? (string) urldecode($_GET['file']) : '';
+$maxX = array_key_exists('x', $_GET) ? (int) $_GET['x'] : '44';
+$maxY = array_key_exists('y', $_GET) ? (int) $_GET['y'] : '44';
+$scalingUp = array_key_exists('scalingup', $_GET) ? (bool) $_GET['scalingup'] : true;
+
+if($file === '') {
+ \OC_Response::setStatus(400); //400 Bad Request
+ \OC_Log::write('core-preview', 'No file parameter was passed', \OC_Log::DEBUG);
+ exit;
+}
+
+if($maxX === 0 || $maxY === 0) {
+ \OC_Response::setStatus(400); //400 Bad Request
+ \OC_Log::write('core-preview', 'x and/or y set to 0', \OC_Log::DEBUG);
+ exit;
+}
+
+try{
+ $preview = new \OC\Preview(\OC_User::getUser(), 'files_trashbin/files');
+ $preview->setFile($file);
+ $preview->setMaxX($maxX);
+ $preview->setMaxY($maxY);
+ $preview->setScalingUp($scalingUp);
+
+ $preview->showPreview();
+}catch(\Exception $e) {
+ \OC_Response::setStatus(500);
+ \OC_Log::write('core', $e->getmessage(), \OC_Log::DEBUG);
+} \ No newline at end of file
diff --git a/apps/files_trashbin/appinfo/app.php b/apps/files_trashbin/appinfo/app.php
index 3b1e0ac30cc..2c101f0a723 100644
--- a/apps/files_trashbin/appinfo/app.php
+++ b/apps/files_trashbin/appinfo/app.php
@@ -4,4 +4,4 @@ OC::$CLASSPATH['OCA\Files_Trashbin\Hooks'] = 'files_trashbin/lib/hooks.php';
OC::$CLASSPATH['OCA\Files_Trashbin\Trashbin'] = 'files_trashbin/lib/trash.php';
// register hooks
-\OCA\Files_Trashbin\Trashbin::registerHooks(); \ No newline at end of file
+\OCA\Files_Trashbin\Trashbin::registerHooks();
diff --git a/apps/files_trashbin/appinfo/routes.php b/apps/files_trashbin/appinfo/routes.php
new file mode 100644
index 00000000000..b1c3f02741e
--- /dev/null
+++ b/apps/files_trashbin/appinfo/routes.php
@@ -0,0 +1,5 @@
+<?php
+$this->create('core_ajax_trashbin_preview', '/preview.png')->action(
+function() {
+ require_once __DIR__ . '/../ajax/preview.php';
+}); \ No newline at end of file
diff --git a/apps/files_trashbin/appinfo/update.php b/apps/files_trashbin/appinfo/update.php
index f4dad7b26bf..0ca232668d7 100644
--- a/apps/files_trashbin/appinfo/update.php
+++ b/apps/files_trashbin/appinfo/update.php
@@ -7,4 +7,4 @@ if (version_compare($installedVersion, '0.4', '<')) {
//enforce a recalculation during next usage.
$query = \OC_DB::prepare('DELETE FROM `*PREFIX*files_trashsize`');
$result = $query->execute();
-} \ No newline at end of file
+}
diff --git a/apps/files_trashbin/index.php b/apps/files_trashbin/index.php
index 2dbaefe7a78..0baeab1de97 100644
--- a/apps/files_trashbin/index.php
+++ b/apps/files_trashbin/index.php
@@ -23,7 +23,7 @@ if ($dir) {
$dirlisting = true;
$dirContent = $view->opendir($dir);
$i = 0;
- while($entryName = readdir($dirContent)) {
+ while(($entryName = readdir($dirContent)) !== false) {
if (!\OC\Files\Filesystem::isIgnoredDir($entryName)) {
$pos = strpos($dir.'/', '/', 1);
$tmp = substr($dir, 0, $pos);
@@ -64,6 +64,7 @@ foreach ($result as $r) {
$i['directory'] = '';
}
$i['permissions'] = OCP\PERMISSION_READ;
+ $i['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($r['mime']);
$files[] = $i;
}
diff --git a/apps/files_trashbin/js/disableDefaultActions.js b/apps/files_trashbin/js/disableDefaultActions.js
index df08bfb1a50..afa80cacd6b 100644
--- a/apps/files_trashbin/js/disableDefaultActions.js
+++ b/apps/files_trashbin/js/disableDefaultActions.js
@@ -1,4 +1,4 @@
/* disable download and sharing actions */
var disableDownloadActions = true;
var disableSharing = true;
-var trashBinApp = true; \ No newline at end of file
+var trashBinApp = true;
diff --git a/apps/files_trashbin/js/trash.js b/apps/files_trashbin/js/trash.js
index c3c958b07a7..40c0bdb3829 100644
--- a/apps/files_trashbin/js/trash.js
+++ b/apps/files_trashbin/js/trash.js
@@ -20,6 +20,7 @@ $(document).ready(function() {
OC.dialogs.alert(result.data.message, t('core', 'Error'));
}
enableActions();
+ FileList.updateFileSummary();
});
});
@@ -48,6 +49,7 @@ $(document).ready(function() {
OC.dialogs.alert(result.data.message, t('core', 'Error'));
}
enableActions();
+ FileList.updateFileSummary();
});
});
@@ -188,21 +190,13 @@ function processSelection(){
$('.selectedActions').show();
var selection='';
if(selectedFolders.length>0){
- if(selectedFolders.length === 1){
- selection+=t('files','1 folder');
- }else{
- selection+=t('files','{count} folders',{count: selectedFolders.length});
- }
+ selection += n('files', '%n folder', '%n folders', selectedFolders.length);
if(selectedFiles.length>0){
selection+=' & ';
}
}
if(selectedFiles.length>0){
- if(selectedFiles.length === 1){
- selection+=t('files','1 file');
- }else{
- selection+=t('files','{count} files',{count: selectedFiles.length});
- }
+ selection += n('files', '%n file', '%n files', selectedFiles.length);
}
$('#headerName>span.name').text(selection);
$('#modified').text('');
diff --git a/apps/files_trashbin/l10n/ar.php b/apps/files_trashbin/l10n/ar.php
index ccb80f959ec..710a9d14196 100644
--- a/apps/files_trashbin/l10n/ar.php
+++ b/apps/files_trashbin/l10n/ar.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "حذف بشكل دائم",
"Name" => "اسم",
"Deleted" => "تم الحذف",
-"1 folder" => "مجلد عدد 1",
-"{count} folders" => "{count} مجلدات",
-"1 file" => "ملف واحد",
-"{count} files" => "{count} ملفات",
+"_%n folder_::_%n folders_" => array("","","","","",""),
+"_%n file_::_%n files_" => array("","","","","",""),
"Nothing in here. Your trash bin is empty!" => "لا يوجد شيء هنا. سلة المهملات خاليه.",
"Restore" => "استعيد",
"Delete" => "إلغاء",
diff --git a/apps/files_trashbin/l10n/bg_BG.php b/apps/files_trashbin/l10n/bg_BG.php
index 5ae41a324af..3c12e6906ed 100644
--- a/apps/files_trashbin/l10n/bg_BG.php
+++ b/apps/files_trashbin/l10n/bg_BG.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Изтриване завинаги",
"Name" => "Име",
"Deleted" => "Изтрито",
-"1 folder" => "1 папка",
-"{count} folders" => "{count} папки",
-"1 file" => "1 файл",
-"{count} files" => "{count} файла",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
"Nothing in here. Your trash bin is empty!" => "Няма нищо. Кофата е празна!",
"Restore" => "Възтановяване",
"Delete" => "Изтриване",
diff --git a/apps/files_trashbin/l10n/bn_BD.php b/apps/files_trashbin/l10n/bn_BD.php
index a33a6de89af..c3741dbd1db 100644
--- a/apps/files_trashbin/l10n/bn_BD.php
+++ b/apps/files_trashbin/l10n/bn_BD.php
@@ -2,10 +2,8 @@
$TRANSLATIONS = array(
"Error" => "সমস্যা",
"Name" => "রাম",
-"1 folder" => "১টি ফোল্ডার",
-"{count} folders" => "{count} টি ফোল্ডার",
-"1 file" => "১টি ফাইল",
-"{count} files" => "{count} টি ফাইল",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
"Delete" => "মুছে"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/l10n/ca.php b/apps/files_trashbin/l10n/ca.php
index 2e4fa4dbe08..eb57aa16aa5 100644
--- a/apps/files_trashbin/l10n/ca.php
+++ b/apps/files_trashbin/l10n/ca.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Esborra permanentment",
"Name" => "Nom",
"Deleted" => "Eliminat",
-"1 folder" => "1 carpeta",
-"{count} folders" => "{count} carpetes",
-"1 file" => "1 fitxer",
-"{count} files" => "{count} fitxers",
+"_%n folder_::_%n folders_" => array("","%n carpetes"),
+"_%n file_::_%n files_" => array("","%n fitxers"),
"restored" => "restaurat",
"Nothing in here. Your trash bin is empty!" => "La paperera està buida!",
"Restore" => "Recupera",
diff --git a/apps/files_trashbin/l10n/cs_CZ.php b/apps/files_trashbin/l10n/cs_CZ.php
index eef9accb83e..f0bebee742f 100644
--- a/apps/files_trashbin/l10n/cs_CZ.php
+++ b/apps/files_trashbin/l10n/cs_CZ.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Trvale odstranit",
"Name" => "Název",
"Deleted" => "Smazáno",
-"1 folder" => "1 složka",
-"{count} folders" => "{count} složky",
-"1 file" => "1 soubor",
-"{count} files" => "{count} soubory",
+"_%n folder_::_%n folders_" => array("%n adresář","%n adresáře","%n adresářů"),
+"_%n file_::_%n files_" => array("%n soubor","%n soubory","%n souborů"),
"restored" => "obnoveno",
"Nothing in here. Your trash bin is empty!" => "Žádný obsah. Váš koš je prázdný.",
"Restore" => "Obnovit",
diff --git a/apps/files_trashbin/l10n/cy_GB.php b/apps/files_trashbin/l10n/cy_GB.php
index af0c5239b56..123a445c2c1 100644
--- a/apps/files_trashbin/l10n/cy_GB.php
+++ b/apps/files_trashbin/l10n/cy_GB.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Dileu'n barhaol",
"Name" => "Enw",
"Deleted" => "Wedi dileu",
-"1 folder" => "1 blygell",
-"{count} folders" => "{count} plygell",
-"1 file" => "1 ffeil",
-"{count} files" => "{count} ffeil",
+"_%n folder_::_%n folders_" => array("","","",""),
+"_%n file_::_%n files_" => array("","","",""),
"Nothing in here. Your trash bin is empty!" => "Does dim byd yma. Mae eich bin sbwriel yn wag!",
"Restore" => "Adfer",
"Delete" => "Dileu",
diff --git a/apps/files_trashbin/l10n/da.php b/apps/files_trashbin/l10n/da.php
index 4e0bbc23a8e..2fbc0893878 100644
--- a/apps/files_trashbin/l10n/da.php
+++ b/apps/files_trashbin/l10n/da.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Slet permanent",
"Name" => "Navn",
"Deleted" => "Slettet",
-"1 folder" => "1 mappe",
-"{count} folders" => "{count} mapper",
-"1 file" => "1 fil",
-"{count} files" => "{count} filer",
+"_%n folder_::_%n folders_" => array("%n mappe","%n mapper"),
+"_%n file_::_%n files_" => array("%n fil","%n filer"),
"restored" => "Gendannet",
"Nothing in here. Your trash bin is empty!" => "Intet at se her. Din papirkurv er tom!",
"Restore" => "Gendan",
diff --git a/apps/files_trashbin/l10n/de.php b/apps/files_trashbin/l10n/de.php
index 856317f3c6f..ad6e0839bd6 100644
--- a/apps/files_trashbin/l10n/de.php
+++ b/apps/files_trashbin/l10n/de.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Endgültig löschen",
"Name" => "Name",
"Deleted" => "gelöscht",
-"1 folder" => "1 Ordner",
-"{count} folders" => "{count} Ordner",
-"1 file" => "1 Datei",
-"{count} files" => "{count} Dateien",
+"_%n folder_::_%n folders_" => array("","%n Ordner"),
+"_%n file_::_%n files_" => array("","%n Dateien"),
"restored" => "Wiederhergestellt",
"Nothing in here. Your trash bin is empty!" => "Nichts zu löschen, der Papierkorb ist leer!",
"Restore" => "Wiederherstellen",
diff --git a/apps/files_trashbin/l10n/de_DE.php b/apps/files_trashbin/l10n/de_DE.php
index bd1e3fb9e2b..0df69412801 100644
--- a/apps/files_trashbin/l10n/de_DE.php
+++ b/apps/files_trashbin/l10n/de_DE.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Endgültig löschen",
"Name" => "Name",
"Deleted" => "Gelöscht",
-"1 folder" => "1 Ordner",
-"{count} folders" => "{count} Ordner",
-"1 file" => "1 Datei",
-"{count} files" => "{count} Dateien",
+"_%n folder_::_%n folders_" => array("%n Ordner","%n Ordner"),
+"_%n file_::_%n files_" => array("%n Dateien","%n Dateien"),
"restored" => "Wiederhergestellt",
"Nothing in here. Your trash bin is empty!" => "Nichts zu löschen, Ihr Papierkorb ist leer!",
"Restore" => "Wiederherstellen",
diff --git a/apps/files_trashbin/l10n/el.php b/apps/files_trashbin/l10n/el.php
index 19331cd1f6f..939c7fed614 100644
--- a/apps/files_trashbin/l10n/el.php
+++ b/apps/files_trashbin/l10n/el.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Μόνιμη διαγραφή",
"Name" => "Όνομα",
"Deleted" => "Διαγράφηκε",
-"1 folder" => "1 φάκελος",
-"{count} folders" => "{count} φάκελοι",
-"1 file" => "1 αρχείο",
-"{count} files" => "{count} αρχεία",
+"_%n folder_::_%n folders_" => array("","%n φάκελοι"),
+"_%n file_::_%n files_" => array("","%n αρχεία"),
"restored" => "έγινε επαναφορά",
"Nothing in here. Your trash bin is empty!" => "Δεν υπάρχει τίποτα εδώ. Ο κάδος σας είναι άδειος!",
"Restore" => "Επαναφορά",
diff --git a/apps/files_trashbin/l10n/eo.php b/apps/files_trashbin/l10n/eo.php
index 373a503fc66..d1e30cba588 100644
--- a/apps/files_trashbin/l10n/eo.php
+++ b/apps/files_trashbin/l10n/eo.php
@@ -3,10 +3,8 @@ $TRANSLATIONS = array(
"Error" => "Eraro",
"Delete permanently" => "Forigi por ĉiam",
"Name" => "Nomo",
-"1 folder" => "1 dosierujo",
-"{count} folders" => "{count} dosierujoj",
-"1 file" => "1 dosiero",
-"{count} files" => "{count} dosierujoj",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
"Restore" => "Restaŭri",
"Delete" => "Forigi",
"Deleted Files" => "Forigitaj dosieroj"
diff --git a/apps/files_trashbin/l10n/es.php b/apps/files_trashbin/l10n/es.php
index 58e5c6c9035..956d89ae688 100644
--- a/apps/files_trashbin/l10n/es.php
+++ b/apps/files_trashbin/l10n/es.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Eliminar permanentemente",
"Name" => "Nombre",
"Deleted" => "Eliminado",
-"1 folder" => "1 carpeta",
-"{count} folders" => "{count} carpetas",
-"1 file" => "1 archivo",
-"{count} files" => "{count} archivos",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
"restored" => "recuperado",
"Nothing in here. Your trash bin is empty!" => "No hay nada aquí. ¡Tu papelera esta vacía!",
"Restore" => "Recuperar",
diff --git a/apps/files_trashbin/l10n/es_AR.php b/apps/files_trashbin/l10n/es_AR.php
index 98f140983ca..6f47255b506 100644
--- a/apps/files_trashbin/l10n/es_AR.php
+++ b/apps/files_trashbin/l10n/es_AR.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Borrar de manera permanente",
"Name" => "Nombre",
"Deleted" => "Borrado",
-"1 folder" => "1 directorio",
-"{count} folders" => "{count} directorios",
-"1 file" => "1 archivo",
-"{count} files" => "{count} archivos",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
"Nothing in here. Your trash bin is empty!" => "No hay nada acá. ¡La papelera está vacía!",
"Restore" => "Recuperar",
"Delete" => "Borrar",
diff --git a/apps/files_trashbin/l10n/et_EE.php b/apps/files_trashbin/l10n/et_EE.php
index 293d639b42f..43c182ea7b3 100644
--- a/apps/files_trashbin/l10n/et_EE.php
+++ b/apps/files_trashbin/l10n/et_EE.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Kustuta jäädavalt",
"Name" => "Nimi",
"Deleted" => "Kustutatud",
-"1 folder" => "1 kaust",
-"{count} folders" => "{count} kausta",
-"1 file" => "1 fail",
-"{count} files" => "{count} faili",
+"_%n folder_::_%n folders_" => array("","%n kataloogi"),
+"_%n file_::_%n files_" => array("%n fail","%n faili"),
"restored" => "taastatud",
"Nothing in here. Your trash bin is empty!" => "Siin pole midagi. Sinu prügikast on tühi!",
"Restore" => "Taasta",
diff --git a/apps/files_trashbin/l10n/eu.php b/apps/files_trashbin/l10n/eu.php
index 2649124836f..240582a7ea6 100644
--- a/apps/files_trashbin/l10n/eu.php
+++ b/apps/files_trashbin/l10n/eu.php
@@ -8,10 +8,9 @@ $TRANSLATIONS = array(
"Delete permanently" => "Ezabatu betirako",
"Name" => "Izena",
"Deleted" => "Ezabatuta",
-"1 folder" => "karpeta bat",
-"{count} folders" => "{count} karpeta",
-"1 file" => "fitxategi bat",
-"{count} files" => "{count} fitxategi",
+"_%n folder_::_%n folders_" => array("karpeta %n","%n karpeta"),
+"_%n file_::_%n files_" => array("fitxategi %n","%n fitxategi"),
+"restored" => "Berrezarrita",
"Nothing in here. Your trash bin is empty!" => "Ez dago ezer ez. Zure zakarrontzia hutsik dago!",
"Restore" => "Berrezarri",
"Delete" => "Ezabatu",
diff --git a/apps/files_trashbin/l10n/fa.php b/apps/files_trashbin/l10n/fa.php
index 33a8d418ccf..654f20a5f1c 100644
--- a/apps/files_trashbin/l10n/fa.php
+++ b/apps/files_trashbin/l10n/fa.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "حذف قطعی",
"Name" => "نام",
"Deleted" => "حذف شده",
-"1 folder" => "1 پوشه",
-"{count} folders" => "{ شمار} پوشه ها",
-"1 file" => "1 پرونده",
-"{count} files" => "{ شمار } فایل ها",
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
"Nothing in here. Your trash bin is empty!" => "هیچ چیزی اینجا نیست. سطل زباله ی شما خالی است.",
"Restore" => "بازیابی",
"Delete" => "حذف",
diff --git a/apps/files_trashbin/l10n/fi_FI.php b/apps/files_trashbin/l10n/fi_FI.php
index fec0567fbec..f03950981c0 100644
--- a/apps/files_trashbin/l10n/fi_FI.php
+++ b/apps/files_trashbin/l10n/fi_FI.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Poista pysyvästi",
"Name" => "Nimi",
"Deleted" => "Poistettu",
-"1 folder" => "1 kansio",
-"{count} folders" => "{count} kansiota",
-"1 file" => "1 tiedosto",
-"{count} files" => "{count} tiedostoa",
+"_%n folder_::_%n folders_" => array("%n kansio","%n kansiota"),
+"_%n file_::_%n files_" => array("%n tiedosto","%n tiedostoa"),
"restored" => "palautettu",
"Nothing in here. Your trash bin is empty!" => "Tyhjää täynnä! Roskakorissa ei ole mitään.",
"Restore" => "Palauta",
diff --git a/apps/files_trashbin/l10n/fr.php b/apps/files_trashbin/l10n/fr.php
index 17c524d712d..45527805ce1 100644
--- a/apps/files_trashbin/l10n/fr.php
+++ b/apps/files_trashbin/l10n/fr.php
@@ -8,10 +8,9 @@ $TRANSLATIONS = array(
"Delete permanently" => "Supprimer de façon définitive",
"Name" => "Nom",
"Deleted" => "Effacé",
-"1 folder" => "1 dossier",
-"{count} folders" => "{count} dossiers",
-"1 file" => "1 fichier",
-"{count} files" => "{count} fichiers",
+"_%n folder_::_%n folders_" => array("","%n dossiers"),
+"_%n file_::_%n files_" => array("","%n fichiers"),
+"restored" => "restauré",
"Nothing in here. Your trash bin is empty!" => "Il n'y a rien ici. Votre corbeille est vide !",
"Restore" => "Restaurer",
"Delete" => "Supprimer",
diff --git a/apps/files_trashbin/l10n/gl.php b/apps/files_trashbin/l10n/gl.php
index 9b222e6e15f..568c17607fe 100644
--- a/apps/files_trashbin/l10n/gl.php
+++ b/apps/files_trashbin/l10n/gl.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Eliminar permanentemente",
"Name" => "Nome",
"Deleted" => "Eliminado",
-"1 folder" => "1 cartafol",
-"{count} folders" => "{count} cartafoles",
-"1 file" => "1 ficheiro",
-"{count} files" => "{count} ficheiros",
+"_%n folder_::_%n folders_" => array("%n cartafol","%n cartafoles"),
+"_%n file_::_%n files_" => array("%n ficheiro","%n ficheiros"),
"restored" => "restaurado",
"Nothing in here. Your trash bin is empty!" => "Aquí non hai nada. O cesto do lixo está baleiro!",
"Restore" => "Restablecer",
diff --git a/apps/files_trashbin/l10n/he.php b/apps/files_trashbin/l10n/he.php
index 1a0e3f4772c..6aa6264a315 100644
--- a/apps/files_trashbin/l10n/he.php
+++ b/apps/files_trashbin/l10n/he.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "מחיקה לצמיתות",
"Name" => "שם",
"Deleted" => "נמחק",
-"1 folder" => "תיקייה אחת",
-"{count} folders" => "{count} תיקיות",
-"1 file" => "קובץ אחד",
-"{count} files" => "{count} קבצים",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
"Nothing in here. Your trash bin is empty!" => "אין כאן שום דבר. סל המיחזור שלך ריק!",
"Restore" => "שחזור",
"Delete" => "מחיקה",
diff --git a/apps/files_trashbin/l10n/hr.php b/apps/files_trashbin/l10n/hr.php
index 8e8fd22f8ef..d227b4979aa 100644
--- a/apps/files_trashbin/l10n/hr.php
+++ b/apps/files_trashbin/l10n/hr.php
@@ -2,6 +2,8 @@
$TRANSLATIONS = array(
"Error" => "Greška",
"Name" => "Ime",
+"_%n folder_::_%n folders_" => array("","",""),
+"_%n file_::_%n files_" => array("","",""),
"Delete" => "Obriši"
);
$PLURAL_FORMS = "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_trashbin/l10n/hu_HU.php b/apps/files_trashbin/l10n/hu_HU.php
index 7ed9eb7eba7..aac6cf78000 100644
--- a/apps/files_trashbin/l10n/hu_HU.php
+++ b/apps/files_trashbin/l10n/hu_HU.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Végleges törlés",
"Name" => "Név",
"Deleted" => "Törölve",
-"1 folder" => "1 mappa",
-"{count} folders" => "{count} mappa",
-"1 file" => "1 fájl",
-"{count} files" => "{count} fájl",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
"restored" => "visszaállítva",
"Nothing in here. Your trash bin is empty!" => "Itt nincs semmi. Az Ön szemetes mappája üres!",
"Restore" => "Visszaállítás",
diff --git a/apps/files_trashbin/l10n/hy.php b/apps/files_trashbin/l10n/hy.php
index f933bec8feb..6ff58b56202 100644
--- a/apps/files_trashbin/l10n/hy.php
+++ b/apps/files_trashbin/l10n/hy.php
@@ -1,5 +1,7 @@
<?php
$TRANSLATIONS = array(
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
"Delete" => "Ջնջել"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/l10n/ia.php b/apps/files_trashbin/l10n/ia.php
index 7709ef030e3..c583344a81e 100644
--- a/apps/files_trashbin/l10n/ia.php
+++ b/apps/files_trashbin/l10n/ia.php
@@ -2,6 +2,8 @@
$TRANSLATIONS = array(
"Error" => "Error",
"Name" => "Nomine",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
"Delete" => "Deler"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/l10n/id.php b/apps/files_trashbin/l10n/id.php
index 4fbe154963a..6aad1302f43 100644
--- a/apps/files_trashbin/l10n/id.php
+++ b/apps/files_trashbin/l10n/id.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Hapus secara permanen",
"Name" => "Nama",
"Deleted" => "Dihapus",
-"1 folder" => "1 folder",
-"{count} folders" => "{count} folder",
-"1 file" => "1 berkas",
-"{count} files" => "{count} berkas",
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
"Nothing in here. Your trash bin is empty!" => "Tempat sampah anda kosong!",
"Restore" => "Pulihkan",
"Delete" => "Hapus",
diff --git a/apps/files_trashbin/l10n/is.php b/apps/files_trashbin/l10n/is.php
index 1cf794db976..55ae4336461 100644
--- a/apps/files_trashbin/l10n/is.php
+++ b/apps/files_trashbin/l10n/is.php
@@ -2,10 +2,8 @@
$TRANSLATIONS = array(
"Error" => "Villa",
"Name" => "Nafn",
-"1 folder" => "1 mappa",
-"{count} folders" => "{count} möppur",
-"1 file" => "1 skrá",
-"{count} files" => "{count} skrár",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
"Delete" => "Eyða"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/l10n/it.php b/apps/files_trashbin/l10n/it.php
index 0843cd5c2ec..e4b39c4a6d5 100644
--- a/apps/files_trashbin/l10n/it.php
+++ b/apps/files_trashbin/l10n/it.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Elimina definitivamente",
"Name" => "Nome",
"Deleted" => "Eliminati",
-"1 folder" => "1 cartella",
-"{count} folders" => "{count} cartelle",
-"1 file" => "1 file",
-"{count} files" => "{count} file",
+"_%n folder_::_%n folders_" => array("%n cartella","%n cartelle"),
+"_%n file_::_%n files_" => array("%n file","%n file"),
"restored" => "ripristinati",
"Nothing in here. Your trash bin is empty!" => "Qui non c'è niente. Il tuo cestino è vuoto.",
"Restore" => "Ripristina",
diff --git a/apps/files_trashbin/l10n/ja_JP.php b/apps/files_trashbin/l10n/ja_JP.php
index 40fc0ded83b..eb9748d57c0 100644
--- a/apps/files_trashbin/l10n/ja_JP.php
+++ b/apps/files_trashbin/l10n/ja_JP.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "完全に削除する",
"Name" => "名前",
"Deleted" => "削除済み",
-"1 folder" => "1 フォルダ",
-"{count} folders" => "{count} フォルダ",
-"1 file" => "1 ファイル",
-"{count} files" => "{count} ファイル",
+"_%n folder_::_%n folders_" => array("%n個のフォルダ"),
+"_%n file_::_%n files_" => array("%n個のファイル"),
"restored" => "復元済",
"Nothing in here. Your trash bin is empty!" => "ここには何もありません。ゴミ箱は空です!",
"Restore" => "復元",
diff --git a/apps/files_trashbin/l10n/ka_GE.php b/apps/files_trashbin/l10n/ka_GE.php
index 63906136425..236d8951e9d 100644
--- a/apps/files_trashbin/l10n/ka_GE.php
+++ b/apps/files_trashbin/l10n/ka_GE.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "სრულად წაშლა",
"Name" => "სახელი",
"Deleted" => "წაშლილი",
-"1 folder" => "1 საქაღალდე",
-"{count} folders" => "{count} საქაღალდე",
-"1 file" => "1 ფაილი",
-"{count} files" => "{count} ფაილი",
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
"Nothing in here. Your trash bin is empty!" => "აქ არაფერი არ არის. სანაგვე ყუთი ცარიელია!",
"Restore" => "აღდგენა",
"Delete" => "წაშლა",
diff --git a/apps/files_trashbin/l10n/ko.php b/apps/files_trashbin/l10n/ko.php
index 68845b5472e..f2e604d7591 100644
--- a/apps/files_trashbin/l10n/ko.php
+++ b/apps/files_trashbin/l10n/ko.php
@@ -3,10 +3,8 @@ $TRANSLATIONS = array(
"Error" => "오류",
"Delete permanently" => "영원히 삭제",
"Name" => "이름",
-"1 folder" => "폴더 1개",
-"{count} folders" => "폴더 {count}개",
-"1 file" => "파일 1개",
-"{count} files" => "파일 {count}개",
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
"Restore" => "복원",
"Delete" => "삭제"
);
diff --git a/apps/files_trashbin/l10n/ku_IQ.php b/apps/files_trashbin/l10n/ku_IQ.php
index c1962a4075d..3f110f06002 100644
--- a/apps/files_trashbin/l10n/ku_IQ.php
+++ b/apps/files_trashbin/l10n/ku_IQ.php
@@ -1,6 +1,8 @@
<?php
$TRANSLATIONS = array(
"Error" => "هه‌ڵه",
-"Name" => "ناو"
+"Name" => "ناو",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("","")
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/l10n/lb.php b/apps/files_trashbin/l10n/lb.php
index b434ae72176..cbfd515a8b3 100644
--- a/apps/files_trashbin/l10n/lb.php
+++ b/apps/files_trashbin/l10n/lb.php
@@ -2,6 +2,8 @@
$TRANSLATIONS = array(
"Error" => "Fehler",
"Name" => "Numm",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
"Delete" => "Läschen"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/l10n/lt_LT.php b/apps/files_trashbin/l10n/lt_LT.php
index 4fd43bd17b2..c4a12ff2175 100644
--- a/apps/files_trashbin/l10n/lt_LT.php
+++ b/apps/files_trashbin/l10n/lt_LT.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Ištrinti negrįžtamai",
"Name" => "Pavadinimas",
"Deleted" => "Ištrinti",
-"1 folder" => "1 aplankalas",
-"{count} folders" => "{count} aplankalai",
-"1 file" => "1 failas",
-"{count} files" => "{count} failai",
+"_%n folder_::_%n folders_" => array("","",""),
+"_%n file_::_%n files_" => array("","",""),
"Nothing in here. Your trash bin is empty!" => "Nieko nėra. Jūsų šiukšliadėžė tuščia!",
"Restore" => "Atstatyti",
"Delete" => "Ištrinti",
diff --git a/apps/files_trashbin/l10n/lv.php b/apps/files_trashbin/l10n/lv.php
index 5753162e29d..ca833b24208 100644
--- a/apps/files_trashbin/l10n/lv.php
+++ b/apps/files_trashbin/l10n/lv.php
@@ -8,10 +8,9 @@ $TRANSLATIONS = array(
"Delete permanently" => "Dzēst pavisam",
"Name" => "Nosaukums",
"Deleted" => "Dzēsts",
-"1 folder" => "1 mape",
-"{count} folders" => "{count} mapes",
-"1 file" => "1 datne",
-"{count} files" => "{count} datnes",
+"_%n folder_::_%n folders_" => array("Nekas, %n mapes","%n mape","%n mapes"),
+"_%n file_::_%n files_" => array("Neviens! %n faaili","%n fails","%n faili"),
+"restored" => "atjaunots",
"Nothing in here. Your trash bin is empty!" => "Šeit nekā nav. Jūsu miskaste ir tukša!",
"Restore" => "Atjaunot",
"Delete" => "Dzēst",
diff --git a/apps/files_trashbin/l10n/mk.php b/apps/files_trashbin/l10n/mk.php
index 078140039b4..965518dbc86 100644
--- a/apps/files_trashbin/l10n/mk.php
+++ b/apps/files_trashbin/l10n/mk.php
@@ -2,10 +2,8 @@
$TRANSLATIONS = array(
"Error" => "Грешка",
"Name" => "Име",
-"1 folder" => "1 папка",
-"{count} folders" => "{count} папки",
-"1 file" => "1 датотека",
-"{count} files" => "{count} датотеки",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
"Delete" => "Избриши"
);
$PLURAL_FORMS = "nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;";
diff --git a/apps/files_trashbin/l10n/ms_MY.php b/apps/files_trashbin/l10n/ms_MY.php
index 1972eba0318..1b5ca07c70c 100644
--- a/apps/files_trashbin/l10n/ms_MY.php
+++ b/apps/files_trashbin/l10n/ms_MY.php
@@ -2,6 +2,8 @@
$TRANSLATIONS = array(
"Error" => "Ralat",
"Name" => "Nama",
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
"Delete" => "Padam"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_trashbin/l10n/nb_NO.php b/apps/files_trashbin/l10n/nb_NO.php
index e650904a412..8eb3bc1846f 100644
--- a/apps/files_trashbin/l10n/nb_NO.php
+++ b/apps/files_trashbin/l10n/nb_NO.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Slett permanent",
"Name" => "Navn",
"Deleted" => "Slettet",
-"1 folder" => "1 mappe",
-"{count} folders" => "{count} mapper",
-"1 file" => "1 fil",
-"{count} files" => "{count} filer",
+"_%n folder_::_%n folders_" => array("","%n mapper"),
+"_%n file_::_%n files_" => array("","%n filer"),
"Nothing in here. Your trash bin is empty!" => "Ingenting her. Søppelkassen din er tom!",
"Restore" => "Gjenopprett",
"Delete" => "Slett",
diff --git a/apps/files_trashbin/l10n/nl.php b/apps/files_trashbin/l10n/nl.php
index 21b6d393781..b3ae57da563 100644
--- a/apps/files_trashbin/l10n/nl.php
+++ b/apps/files_trashbin/l10n/nl.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Verwijder definitief",
"Name" => "Naam",
"Deleted" => "Verwijderd",
-"1 folder" => "1 map",
-"{count} folders" => "{count} mappen",
-"1 file" => "1 bestand",
-"{count} files" => "{count} bestanden",
+"_%n folder_::_%n folders_" => array("%n map","%n mappen"),
+"_%n file_::_%n files_" => array("%n bestand","%n bestanden"),
"restored" => "hersteld",
"Nothing in here. Your trash bin is empty!" => "Niets te vinden. Uw prullenbak is leeg!",
"Restore" => "Herstellen",
diff --git a/apps/files_trashbin/l10n/nn_NO.php b/apps/files_trashbin/l10n/nn_NO.php
index 3e1f9b819a8..9e351668e33 100644
--- a/apps/files_trashbin/l10n/nn_NO.php
+++ b/apps/files_trashbin/l10n/nn_NO.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Slett for godt",
"Name" => "Namn",
"Deleted" => "Sletta",
-"1 folder" => "1 mappe",
-"{count} folders" => "{count} mapper",
-"1 file" => "1 fil",
-"{count} files" => "{count} filer",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
"Nothing in here. Your trash bin is empty!" => "Ingenting her. Papirkorga di er tom!",
"Restore" => "Gjenopprett",
"Delete" => "Slett",
diff --git a/apps/files_trashbin/l10n/oc.php b/apps/files_trashbin/l10n/oc.php
index b472683f08d..a62902c3b7e 100644
--- a/apps/files_trashbin/l10n/oc.php
+++ b/apps/files_trashbin/l10n/oc.php
@@ -2,6 +2,8 @@
$TRANSLATIONS = array(
"Error" => "Error",
"Name" => "Nom",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
"Delete" => "Escafa"
);
$PLURAL_FORMS = "nplurals=2; plural=(n > 1);";
diff --git a/apps/files_trashbin/l10n/pl.php b/apps/files_trashbin/l10n/pl.php
index d31a671eb58..e8295e2ff03 100644
--- a/apps/files_trashbin/l10n/pl.php
+++ b/apps/files_trashbin/l10n/pl.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Trwale usuń",
"Name" => "Nazwa",
"Deleted" => "Usunięte",
-"1 folder" => "1 folder",
-"{count} folders" => "Ilość folderów: {count}",
-"1 file" => "1 plik",
-"{count} files" => "Ilość plików: {count}",
+"_%n folder_::_%n folders_" => array("","",""),
+"_%n file_::_%n files_" => array("","",""),
"restored" => "przywrócony",
"Nothing in here. Your trash bin is empty!" => "Nic tu nie ma. Twój kosz jest pusty!",
"Restore" => "Przywróć",
diff --git a/apps/files_trashbin/l10n/pt_BR.php b/apps/files_trashbin/l10n/pt_BR.php
index 26eea51b819..1e3c67ba027 100644
--- a/apps/files_trashbin/l10n/pt_BR.php
+++ b/apps/files_trashbin/l10n/pt_BR.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Excluir permanentemente",
"Name" => "Nome",
"Deleted" => "Excluído",
-"1 folder" => "1 pasta",
-"{count} folders" => "{count} pastas",
-"1 file" => "1 arquivo",
-"{count} files" => "{count} arquivos",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
"restored" => "restaurado",
"Nothing in here. Your trash bin is empty!" => "Nada aqui. Sua lixeira está vazia!",
"Restore" => "Restaurar",
diff --git a/apps/files_trashbin/l10n/pt_PT.php b/apps/files_trashbin/l10n/pt_PT.php
index 15213892d2a..9dccc773cb1 100644
--- a/apps/files_trashbin/l10n/pt_PT.php
+++ b/apps/files_trashbin/l10n/pt_PT.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Eliminar permanentemente",
"Name" => "Nome",
"Deleted" => "Apagado",
-"1 folder" => "1 pasta",
-"{count} folders" => "{count} pastas",
-"1 file" => "1 ficheiro",
-"{count} files" => "{count} ficheiros",
+"_%n folder_::_%n folders_" => array("%n pasta","%n pastas"),
+"_%n file_::_%n files_" => array("%n ficheiro","%n ficheiros"),
"restored" => "Restaurado",
"Nothing in here. Your trash bin is empty!" => "Não hà ficheiros. O lixo está vazio!",
"Restore" => "Restaurar",
diff --git a/apps/files_trashbin/l10n/ro.php b/apps/files_trashbin/l10n/ro.php
index 3c38f16b392..0b1d2cd9e17 100644
--- a/apps/files_trashbin/l10n/ro.php
+++ b/apps/files_trashbin/l10n/ro.php
@@ -3,10 +3,8 @@ $TRANSLATIONS = array(
"Error" => "Eroare",
"Delete permanently" => "Stergere permanenta",
"Name" => "Nume",
-"1 folder" => "1 folder",
-"{count} folders" => "{count} foldare",
-"1 file" => "1 fisier",
-"{count} files" => "{count} fisiere",
+"_%n folder_::_%n folders_" => array("","",""),
+"_%n file_::_%n files_" => array("","",""),
"Delete" => "Șterge"
);
$PLURAL_FORMS = "nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));";
diff --git a/apps/files_trashbin/l10n/ru.php b/apps/files_trashbin/l10n/ru.php
index d883115281e..5f52263a118 100644
--- a/apps/files_trashbin/l10n/ru.php
+++ b/apps/files_trashbin/l10n/ru.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Удалено навсегда",
"Name" => "Имя",
"Deleted" => "Удалён",
-"1 folder" => "1 папка",
-"{count} folders" => "{count} папок",
-"1 file" => "1 файл",
-"{count} files" => "{count} файлов",
+"_%n folder_::_%n folders_" => array("","","%n папок"),
+"_%n file_::_%n files_" => array("","","%n файлов"),
"restored" => "восстановлен",
"Nothing in here. Your trash bin is empty!" => "Здесь ничего нет. Ваша корзина пуста!",
"Restore" => "Восстановить",
diff --git a/apps/files_trashbin/l10n/ru_RU.php b/apps/files_trashbin/l10n/ru_RU.php
deleted file mode 100644
index 3fda38c66bf..00000000000
--- a/apps/files_trashbin/l10n/ru_RU.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Error" => "Ошибка",
-"Name" => "Имя",
-"Delete" => "Удалить"
-);
-$PLURAL_FORMS = "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_trashbin/l10n/si_LK.php b/apps/files_trashbin/l10n/si_LK.php
index 9de1c00989e..6dad84437cf 100644
--- a/apps/files_trashbin/l10n/si_LK.php
+++ b/apps/files_trashbin/l10n/si_LK.php
@@ -2,8 +2,8 @@
$TRANSLATIONS = array(
"Error" => "දෝෂයක්",
"Name" => "නම",
-"1 folder" => "1 ෆොල්ඩරයක්",
-"1 file" => "1 ගොනුවක්",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
"Delete" => "මකා දමන්න"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/l10n/sk_SK.php b/apps/files_trashbin/l10n/sk_SK.php
index 552a69f4fcb..50fb58a44e2 100644
--- a/apps/files_trashbin/l10n/sk_SK.php
+++ b/apps/files_trashbin/l10n/sk_SK.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Zmazať trvalo",
"Name" => "Názov",
"Deleted" => "Zmazané",
-"1 folder" => "1 priečinok",
-"{count} folders" => "{count} priečinkov",
-"1 file" => "1 súbor",
-"{count} files" => "{count} súborov",
+"_%n folder_::_%n folders_" => array("%n priečinok","%n priečinky","%n priečinkov"),
+"_%n file_::_%n files_" => array("%n súbor","%n súbory","%n súborov"),
"restored" => "obnovené",
"Nothing in here. Your trash bin is empty!" => "Žiadny obsah. Kôš je prázdny!",
"Restore" => "Obnoviť",
diff --git a/apps/files_trashbin/l10n/sl.php b/apps/files_trashbin/l10n/sl.php
index 4140bb8d59a..eb2d42a18ff 100644
--- a/apps/files_trashbin/l10n/sl.php
+++ b/apps/files_trashbin/l10n/sl.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Izbriši dokončno",
"Name" => "Ime",
"Deleted" => "Izbrisano",
-"1 folder" => "1 mapa",
-"{count} folders" => "{count} map",
-"1 file" => "1 datoteka",
-"{count} files" => "{count} datotek",
+"_%n folder_::_%n folders_" => array("","","",""),
+"_%n file_::_%n files_" => array("","","",""),
"Nothing in here. Your trash bin is empty!" => "Mapa smeti je prazna.",
"Restore" => "Obnovi",
"Delete" => "Izbriši",
diff --git a/apps/files_trashbin/l10n/sq.php b/apps/files_trashbin/l10n/sq.php
index a0dae065b70..1b7b5b828c8 100644
--- a/apps/files_trashbin/l10n/sq.php
+++ b/apps/files_trashbin/l10n/sq.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Elimino përfundimisht",
"Name" => "Emri",
"Deleted" => "Eliminuar",
-"1 folder" => "1 dosje",
-"{count} folders" => "{count} dosje",
-"1 file" => "1 skedar",
-"{count} files" => "{count} skedarë",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
"Nothing in here. Your trash bin is empty!" => "Këtu nuk ka asgjë. Koshi juaj është bosh!",
"Restore" => "Rivendos",
"Delete" => "Elimino",
diff --git a/apps/files_trashbin/l10n/sr.php b/apps/files_trashbin/l10n/sr.php
index 8302df5f262..7311e759f98 100644
--- a/apps/files_trashbin/l10n/sr.php
+++ b/apps/files_trashbin/l10n/sr.php
@@ -5,10 +5,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Обриши за стално",
"Name" => "Име",
"Deleted" => "Обрисано",
-"1 folder" => "1 фасцикла",
-"{count} folders" => "{count} фасцикле/и",
-"1 file" => "1 датотека",
-"{count} files" => "{count} датотеке/а",
+"_%n folder_::_%n folders_" => array("","",""),
+"_%n file_::_%n files_" => array("","",""),
"Nothing in here. Your trash bin is empty!" => "Овде нема ништа. Корпа за отпатке је празна.",
"Restore" => "Врати",
"Delete" => "Обриши"
diff --git a/apps/files_trashbin/l10n/sr@latin.php b/apps/files_trashbin/l10n/sr@latin.php
index 0511d9f609d..483d1e3ca2b 100644
--- a/apps/files_trashbin/l10n/sr@latin.php
+++ b/apps/files_trashbin/l10n/sr@latin.php
@@ -1,6 +1,8 @@
<?php
$TRANSLATIONS = array(
"Name" => "Ime",
+"_%n folder_::_%n folders_" => array("","",""),
+"_%n file_::_%n files_" => array("","",""),
"Delete" => "Obriši"
);
$PLURAL_FORMS = "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_trashbin/l10n/sv.php b/apps/files_trashbin/l10n/sv.php
index 9eb83734b49..47a52f25736 100644
--- a/apps/files_trashbin/l10n/sv.php
+++ b/apps/files_trashbin/l10n/sv.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Radera permanent",
"Name" => "Namn",
"Deleted" => "Raderad",
-"1 folder" => "1 mapp",
-"{count} folders" => "{count} mappar",
-"1 file" => "1 fil",
-"{count} files" => "{count} filer",
+"_%n folder_::_%n folders_" => array("%n mapp","%n mappar"),
+"_%n file_::_%n files_" => array("%n fil","%n filer"),
"restored" => "återställd",
"Nothing in here. Your trash bin is empty!" => "Ingenting här. Din papperskorg är tom!",
"Restore" => "Återskapa",
diff --git a/apps/files_trashbin/l10n/ta_LK.php b/apps/files_trashbin/l10n/ta_LK.php
index 35253900b19..ed93b459c7d 100644
--- a/apps/files_trashbin/l10n/ta_LK.php
+++ b/apps/files_trashbin/l10n/ta_LK.php
@@ -2,10 +2,8 @@
$TRANSLATIONS = array(
"Error" => "வழு",
"Name" => "பெயர்",
-"1 folder" => "1 கோப்புறை",
-"{count} folders" => "{எண்ணிக்கை} கோப்புறைகள்",
-"1 file" => "1 கோப்பு",
-"{count} files" => "{எண்ணிக்கை} கோப்புகள்",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
"Delete" => "நீக்குக"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/l10n/te.php b/apps/files_trashbin/l10n/te.php
index f89a9fda5f7..0d803a8e648 100644
--- a/apps/files_trashbin/l10n/te.php
+++ b/apps/files_trashbin/l10n/te.php
@@ -3,6 +3,8 @@ $TRANSLATIONS = array(
"Error" => "పొరపాటు",
"Delete permanently" => "శాశ్వతంగా తొలగించు",
"Name" => "పేరు",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("",""),
"Delete" => "తొలగించు"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/l10n/th_TH.php b/apps/files_trashbin/l10n/th_TH.php
index dc49155b9be..31caa11aac3 100644
--- a/apps/files_trashbin/l10n/th_TH.php
+++ b/apps/files_trashbin/l10n/th_TH.php
@@ -4,10 +4,8 @@ $TRANSLATIONS = array(
"Error" => "ข้อผิดพลาด",
"Name" => "ชื่อ",
"Deleted" => "ลบแล้ว",
-"1 folder" => "1 โฟลเดอร์",
-"{count} folders" => "{count} โฟลเดอร์",
-"1 file" => "1 ไฟล์",
-"{count} files" => "{count} ไฟล์",
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
"Nothing in here. Your trash bin is empty!" => "ไม่มีอะไรอยู่ในนี้ ถังขยะของคุณยังว่างอยู่",
"Restore" => "คืนค่า",
"Delete" => "ลบ",
diff --git a/apps/files_trashbin/l10n/tr.php b/apps/files_trashbin/l10n/tr.php
index df1b692af51..f25b179bc1e 100644
--- a/apps/files_trashbin/l10n/tr.php
+++ b/apps/files_trashbin/l10n/tr.php
@@ -8,10 +8,9 @@ $TRANSLATIONS = array(
"Delete permanently" => "Kalıcı olarak sil",
"Name" => "İsim",
"Deleted" => "Silindi",
-"1 folder" => "1 dizin",
-"{count} folders" => "{count} dizin",
-"1 file" => "1 dosya",
-"{count} files" => "{count} dosya",
+"_%n folder_::_%n folders_" => array("","%n dizin"),
+"_%n file_::_%n files_" => array("","%n dosya"),
+"restored" => "geri yüklendi",
"Nothing in here. Your trash bin is empty!" => "Burası boş. Çöp kutun tamamen boş.",
"Restore" => "Geri yükle",
"Delete" => "Sil",
diff --git a/apps/files_trashbin/l10n/ug.php b/apps/files_trashbin/l10n/ug.php
index 65466685971..ad983aee18b 100644
--- a/apps/files_trashbin/l10n/ug.php
+++ b/apps/files_trashbin/l10n/ug.php
@@ -4,9 +4,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "مەڭگۈلۈك ئۆچۈر",
"Name" => "ئاتى",
"Deleted" => "ئۆچۈرۈلدى",
-"1 folder" => "1 قىسقۇچ",
-"1 file" => "1 ھۆججەت",
-"{count} files" => "{count} ھۆججەت",
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
"Nothing in here. Your trash bin is empty!" => "بۇ جايدا ھېچنېمە يوق. Your trash bin is empty!",
"Delete" => "ئۆچۈر"
);
diff --git a/apps/files_trashbin/l10n/uk.php b/apps/files_trashbin/l10n/uk.php
index 93e9b6aa7b0..aa4b6595032 100644
--- a/apps/files_trashbin/l10n/uk.php
+++ b/apps/files_trashbin/l10n/uk.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Видалити назавжди",
"Name" => "Ім'я",
"Deleted" => "Видалено",
-"1 folder" => "1 папка",
-"{count} folders" => "{count} папок",
-"1 file" => "1 файл",
-"{count} files" => "{count} файлів",
+"_%n folder_::_%n folders_" => array("","",""),
+"_%n file_::_%n files_" => array("","",""),
"restored" => "відновлено",
"Nothing in here. Your trash bin is empty!" => "Нічого немає. Ваший кошик для сміття пустий!",
"Restore" => "Відновити",
diff --git a/apps/files_trashbin/l10n/ur_PK.php b/apps/files_trashbin/l10n/ur_PK.php
index 49c82f53872..f6c6a3da3c8 100644
--- a/apps/files_trashbin/l10n/ur_PK.php
+++ b/apps/files_trashbin/l10n/ur_PK.php
@@ -1,5 +1,7 @@
<?php
$TRANSLATIONS = array(
-"Error" => "ایرر"
+"Error" => "ایرر",
+"_%n folder_::_%n folders_" => array("",""),
+"_%n file_::_%n files_" => array("","")
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/l10n/vi.php b/apps/files_trashbin/l10n/vi.php
index 5e16a8392dd..072d799fa68 100644
--- a/apps/files_trashbin/l10n/vi.php
+++ b/apps/files_trashbin/l10n/vi.php
@@ -8,10 +8,8 @@ $TRANSLATIONS = array(
"Delete permanently" => "Xóa vĩnh vễn",
"Name" => "Tên",
"Deleted" => "Đã xóa",
-"1 folder" => "1 thư mục",
-"{count} folders" => "{count} thư mục",
-"1 file" => "1 tập tin",
-"{count} files" => "{count} tập tin",
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
"Nothing in here. Your trash bin is empty!" => "Không có gì ở đây. Thùng rác của bạn rỗng!",
"Restore" => "Khôi phục",
"Delete" => "Xóa",
diff --git a/apps/files_trashbin/l10n/zh_CN.GB2312.php b/apps/files_trashbin/l10n/zh_CN.GB2312.php
deleted file mode 100644
index 768a9616d71..00000000000
--- a/apps/files_trashbin/l10n/zh_CN.GB2312.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Error" => "出错",
-"Delete permanently" => "永久删除",
-"Name" => "名称",
-"1 folder" => "1 个文件夹",
-"{count} folders" => "{count} 个文件夹",
-"1 file" => "1 个文件",
-"{count} files" => "{count} 个文件",
-"Delete" => "删除"
-);
-$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_trashbin/l10n/zh_CN.php b/apps/files_trashbin/l10n/zh_CN.php
index c149c6c966c..dc2d5b4c00e 100644
--- a/apps/files_trashbin/l10n/zh_CN.php
+++ b/apps/files_trashbin/l10n/zh_CN.php
@@ -8,10 +8,9 @@ $TRANSLATIONS = array(
"Delete permanently" => "永久删除",
"Name" => "名称",
"Deleted" => "已删除",
-"1 folder" => "1个文件夹",
-"{count} folders" => "{count} 个文件夹",
-"1 file" => "1 个文件",
-"{count} files" => "{count} 个文件",
+"_%n folder_::_%n folders_" => array("%n 文件夹"),
+"_%n file_::_%n files_" => array("%n个文件"),
+"restored" => "已恢复",
"Nothing in here. Your trash bin is empty!" => "这里没有东西. 你的回收站是空的!",
"Restore" => "恢复",
"Delete" => "删除",
diff --git a/apps/files_trashbin/l10n/zh_HK.php b/apps/files_trashbin/l10n/zh_HK.php
index 6b9f6506874..3f0d663baeb 100644
--- a/apps/files_trashbin/l10n/zh_HK.php
+++ b/apps/files_trashbin/l10n/zh_HK.php
@@ -2,7 +2,8 @@
$TRANSLATIONS = array(
"Error" => "錯誤",
"Name" => "名稱",
-"{count} folders" => "{}文件夾",
+"_%n folder_::_%n folders_" => array(""),
+"_%n file_::_%n files_" => array(""),
"Delete" => "刪除"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_trashbin/l10n/zh_TW.php b/apps/files_trashbin/l10n/zh_TW.php
index 39fe4ce988a..bfc2fc659de 100644
--- a/apps/files_trashbin/l10n/zh_TW.php
+++ b/apps/files_trashbin/l10n/zh_TW.php
@@ -1,19 +1,18 @@
<?php
$TRANSLATIONS = array(
"Couldn't delete %s permanently" => "無法永久刪除 %s",
-"Couldn't restore %s" => "無法復原 %s",
-"perform restore operation" => "進行復原動作",
+"Couldn't restore %s" => "無法還原 %s",
+"perform restore operation" => "進行還原動作",
"Error" => "錯誤",
"delete file permanently" => "永久刪除檔案",
"Delete permanently" => "永久刪除",
"Name" => "名稱",
"Deleted" => "已刪除",
-"1 folder" => "1 個資料夾",
-"{count} folders" => "{count} 個資料夾",
-"1 file" => "1 個檔案",
-"{count} files" => "{count} 個檔案",
-"Nothing in here. Your trash bin is empty!" => "您的垃圾桶是空的!",
-"Restore" => "復原",
+"_%n folder_::_%n folders_" => array("%n 個資料夾"),
+"_%n file_::_%n files_" => array("%n 個檔案"),
+"restored" => "已還原",
+"Nothing in here. Your trash bin is empty!" => "您的回收桶是空的!",
+"Restore" => "還原",
"Delete" => "刪除",
"Deleted Files" => "已刪除的檔案"
);
diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php
index 30913e00a47..c79afdc0c2e 100644
--- a/apps/files_trashbin/lib/trash.php
+++ b/apps/files_trashbin/lib/trash.php
@@ -72,11 +72,6 @@ class Trashbin {
$mime = $view->getMimeType('files' . $file_path);
if ($view->is_dir('files' . $file_path)) {
- $dirContent = $view->getDirectoryContent('files' . $file_path);
- // no need to move empty folders to the trash bin
- if (empty($dirContent)) {
- return true;
- }
$type = 'dir';
} else {
$type = 'file';
@@ -689,7 +684,7 @@ class Trashbin {
}
}
}
-
+
/**
* clean up the trash bin
* @param current size of the trash bin
@@ -717,7 +712,7 @@ class Trashbin {
\OC_Log::write('files_trashbin', 'remove "' . $filename . '" fom trash bin because it is older than ' . $retention_obligation, \OC_log::INFO);
}
}
- $availableSpace = $availableSpace + $size;
+ $availableSpace += $size;
// if size limit for trash bin reached, delete oldest files in trash bin
if ($availableSpace < 0) {
$query = \OC_DB::prepare('SELECT `location`,`type`,`id`,`timestamp` FROM `*PREFIX*files_trash`'
@@ -892,20 +887,24 @@ class Trashbin {
//Listen to post write hook
\OCP\Util::connectHook('OC_Filesystem', 'post_write', "OCA\Files_Trashbin\Hooks", "post_write_hook");
}
-
+
/**
* @brief check if trash bin is empty for a given user
* @param string $user
*/
public static function isEmpty($user) {
- $trashSize = self::getTrashbinSize($user);
+ $view = new \OC\Files\View('/' . $user . '/files_trashbin');
+ $content = $view->getDirectoryContent('/files');
- if ($trashSize !== false && $trashSize > 0) {
+ if ($content) {
return false;
}
return true;
}
+ public static function preview_icon($path) {
+ return \OC_Helper::linkToRoute( 'core_ajax_trashbin_preview', array('x' => 36, 'y' => 36, 'file' => urlencode($path) ));
+ }
}
diff --git a/apps/files_trashbin/templates/index.php b/apps/files_trashbin/templates/index.php
index 371765fa69a..88c32b1f3eb 100644
--- a/apps/files_trashbin/templates/index.php
+++ b/apps/files_trashbin/templates/index.php
@@ -6,7 +6,7 @@
<div id='notification'></div>
<?php if (isset($_['files']) && count($_['files']) === 0 && $_['dirlisting'] === false):?>
- <div id="emptyfolder"><?php p($l->t('Nothing in here. Your trash bin is empty!'))?></div>
+ <div id="emptycontent"><?php p($l->t('Nothing in here. Your trash bin is empty!'))?></div>
<?php endif; ?>
<table id="filestable">
diff --git a/apps/files_trashbin/templates/part.list.php b/apps/files_trashbin/templates/part.list.php
index 254b08dd36a..f7cc6b01bbb 100644
--- a/apps/files_trashbin/templates/part.list.php
+++ b/apps/files_trashbin/templates/part.list.php
@@ -21,11 +21,19 @@
data-timestamp='<?php p($file['timestamp']);?>'
data-dirlisting=0
<?php endif; ?>>
+ <?php if($file['isPreviewAvailable']): ?>
+ <td class="filename svg preview-icon"
+ <?php else: ?>
<td class="filename svg"
+ <?php endif; ?>
<?php if($file['type'] === 'dir'): ?>
style="background-image:url(<?php print_unescaped(OCP\mimetype_icon('dir')); ?>)"
<?php else: ?>
- style="background-image:url(<?php print_unescaped(OCP\mimetype_icon($file['mimetype'])); ?>)"
+ <?php if($file['isPreviewAvailable']): ?>
+ style="background-image:url(<?php print_unescaped(OCA\Files_Trashbin\Trashbin::preview_icon(!$_['dirlisting'] ? ($file['name'].'.d'.$file['timestamp']) : ($file['directory'].'/'.$file['name']))); ?>)"
+ <?php else: ?>
+ style="background-image:url(<?php print_unescaped(OCP\mimetype_icon($file['mimetype'])); ?>)"
+ <?php endif; ?>
<?php endif; ?>
>
<?php if(!isset($_['readonly']) || !$_['readonly']): ?><input type="checkbox" /><?php endif; ?>
diff --git a/apps/files_versions/appinfo/routes.php b/apps/files_versions/appinfo/routes.php
index 8cef57c9e4d..38c288adf9d 100644
--- a/apps/files_versions/appinfo/routes.php
+++ b/apps/files_versions/appinfo/routes.php
@@ -6,4 +6,4 @@
*/
// Register with the capabilities API
-OC_API::register('get', '/cloud/capabilities', array('OCA\Files_Versions\Capabilities', 'getCapabilities'), 'files_versions', OC_API::USER_AUTH); \ No newline at end of file
+OC_API::register('get', '/cloud/capabilities', array('OCA\Files_Versions\Capabilities', 'getCapabilities'), 'files_versions', OC_API::USER_AUTH);
diff --git a/apps/files_versions/css/versions.css b/apps/files_versions/css/versions.css
index 6146eda3372..6a9b3a95698 100644
--- a/apps/files_versions/css/versions.css
+++ b/apps/files_versions/css/versions.css
@@ -1,3 +1,7 @@
+#dropdown.drop-versions {
+ width:22em;
+}
+
#found_versions li {
width: 100%;
cursor: default;
@@ -39,6 +43,3 @@
float: right;
}
-.drop-versions #makelink {
- float: left;
-}
diff --git a/apps/files_versions/js/versions.js b/apps/files_versions/js/versions.js
index ca479507d48..f57e931bad9 100644
--- a/apps/files_versions/js/versions.js
+++ b/apps/files_versions/js/versions.js
@@ -104,9 +104,9 @@ function createVersionsDropdown(filename, files) {
success: function(result) {
var versions = result.data.versions;
if (result.data.endReached === true) {
- document.getElementById("show-more-versions").style.display="none";
+ $("#show-more-versions").css("display", "none");
} else {
- document.getElementById("show-more-versions").style.display="block";
+ $("#show-more-versions").css("display", "block");
}
if (versions) {
$.each(versions, function(index, row) {
@@ -124,27 +124,23 @@ function createVersionsDropdown(filename, files) {
}
function addVersion( revision ) {
- title = formatDate(revision.version*1000);
- name ='<span class="versionDate" title="' + title + '">' + revision.humanReadableTimestamp + '</span>';
+ var title = formatDate(revision.version*1000);
+ var name ='<span class="versionDate" title="' + title + '">' + revision.humanReadableTimestamp + '</span>';
- path = OC.filePath('files_versions', '', 'download.php');
+ var path = OC.filePath('files_versions', '', 'download.php');
- download ='<a href="' + path + "?file=" + files + '&revision=' + revision.version + '">';
+ var download ='<a href="' + path + "?file=" + files + '&revision=' + revision.version + '">';
download+='<img';
download+=' src="' + OC.imagePath('core', 'actions/download') + '"';
- download+=' id="' + revision.version + '"';
- download+=' value="' + files + '"';
download+=' name="downloadVersion" />';
download+=name;
download+='</a>';
- revert='<span class="revertVersion"';
+ var revert='<span class="revertVersion"';
revert+=' id="' + revision.version + '"';
revert+=' value="' + files + '">';
revert+='<img';
revert+=' src="' + OC.imagePath('core', 'actions/history') + '"';
- revert+=' id="' + revision.version + '"';
- revert+=' value="' + files + '"';
revert+=' name="revertVersion"';
revert+='/>'+t('files_versions', 'Restore')+'</span>';
diff --git a/apps/files_versions/l10n/cs_CZ.php b/apps/files_versions/l10n/cs_CZ.php
index a2fc76d443d..45ce297eae5 100644
--- a/apps/files_versions/l10n/cs_CZ.php
+++ b/apps/files_versions/l10n/cs_CZ.php
@@ -1,8 +1,8 @@
<?php
$TRANSLATIONS = array(
-"Could not revert: %s" => "Nelze navrátit: %s",
+"Could not revert: %s" => "Nelze vrátit: %s",
"Versions" => "Verze",
-"Failed to revert {file} to revision {timestamp}." => "Selhalo navrácení souboru {file} na verzi {timestamp}.",
+"Failed to revert {file} to revision {timestamp}." => "Selhalo vrácení souboru {file} na verzi {timestamp}.",
"More versions..." => "Více verzí...",
"No other versions available" => "Žádné další verze nejsou dostupné",
"Restore" => "Obnovit"
diff --git a/apps/files_versions/l10n/fr.php b/apps/files_versions/l10n/fr.php
index 537783e6c9f..7f3df1bce41 100644
--- a/apps/files_versions/l10n/fr.php
+++ b/apps/files_versions/l10n/fr.php
@@ -2,6 +2,9 @@
$TRANSLATIONS = array(
"Could not revert: %s" => "Impossible de restaurer %s",
"Versions" => "Versions",
+"Failed to revert {file} to revision {timestamp}." => "Échec du retour du fichier {file} à la révision {timestamp}.",
+"More versions..." => "Plus de versions...",
+"No other versions available" => "Aucune autre version disponible",
"Restore" => "Restaurer"
);
$PLURAL_FORMS = "nplurals=2; plural=(n > 1);";
diff --git a/apps/files_versions/l10n/ru_RU.php b/apps/files_versions/l10n/ru_RU.php
deleted file mode 100644
index 8656e346eb6..00000000000
--- a/apps/files_versions/l10n/ru_RU.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php $TRANSLATIONS = array(
-"History" => "История",
-"Files Versioning" => "Файлы управления версиями",
-"Enable" => "Включить"
-);
diff --git a/apps/files_versions/l10n/zh_CN.GB2312.php b/apps/files_versions/l10n/zh_CN.GB2312.php
deleted file mode 100644
index aa0a59b71a3..00000000000
--- a/apps/files_versions/l10n/zh_CN.GB2312.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Could not revert: %s" => "无法恢复:%s",
-"Versions" => "版本"
-);
-$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_versions/l10n/zh_TW.php b/apps/files_versions/l10n/zh_TW.php
index 55a3dca3c32..9b8900fd8e1 100644
--- a/apps/files_versions/l10n/zh_TW.php
+++ b/apps/files_versions/l10n/zh_TW.php
@@ -2,6 +2,9 @@
$TRANSLATIONS = array(
"Could not revert: %s" => "無法還原:%s",
"Versions" => "版本",
+"Failed to revert {file} to revision {timestamp}." => "無法還原檔案 {file} 至版本 {timestamp}",
+"More versions..." => "更多版本…",
+"No other versions available" => "沒有其他版本了",
"Restore" => "復原"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_versions/lib/capabilities.php b/apps/files_versions/lib/capabilities.php
index 3251a07b6ae..45d7dd3fb02 100644
--- a/apps/files_versions/lib/capabilities.php
+++ b/apps/files_versions/lib/capabilities.php
@@ -20,4 +20,4 @@ class Capabilities {
));
}
-} \ No newline at end of file
+}
diff --git a/apps/files_versions/lib/hooks.php b/apps/files_versions/lib/hooks.php
index f0082b301a3..81ee3c8b3c6 100644
--- a/apps/files_versions/lib/hooks.php
+++ b/apps/files_versions/lib/hooks.php
@@ -19,7 +19,7 @@ class Hooks {
*/
public static function write_hook( $params ) {
- if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
+ if (\OCP\App::isEnabled('files_versions')) {
$path = $params[\OC\Files\Filesystem::signal_param_path];
if($path<>'') {
Storage::store($path);
@@ -36,12 +36,12 @@ class Hooks {
* cleanup the versions directory if the actual file gets deleted
*/
public static function remove_hook($params) {
- if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
+
+ if (\OCP\App::isEnabled('files_versions')) {
$path = $params[\OC\Files\Filesystem::signal_param_path];
if($path<>'') {
Storage::delete($path);
}
-
}
}
@@ -53,13 +53,13 @@ class Hooks {
* of the stored versions along the actual file
*/
public static function rename_hook($params) {
- if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
+
+ if (\OCP\App::isEnabled('files_versions')) {
$oldpath = $params['oldpath'];
$newpath = $params['newpath'];
if($oldpath<>'' && $newpath<>'') {
Storage::rename( $oldpath, $newpath );
}
-
}
}
@@ -71,10 +71,11 @@ class Hooks {
* to remove the used space for versions stored in the database
*/
public static function deleteUser_hook($params) {
- if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
+
+ if (\OCP\App::isEnabled('files_versions')) {
$uid = $params['uid'];
Storage::deleteUser($uid);
- }
+ }
}
}
diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/versions.php
index 70b8f30be5c..0b4699dc5c0 100644
--- a/apps/files_versions/lib/versions.php
+++ b/apps/files_versions/lib/versions.php
@@ -48,14 +48,14 @@ class Storage {
/**
* get current size of all versions from a given user
- *
+ *
* @param $user user who owns the versions
* @return mixed versions size or false if no versions size is stored
*/
private static function getVersionsSize($user) {
$query = \OC_DB::prepare('SELECT `size` FROM `*PREFIX*files_versions` WHERE `user`=?');
$result = $query->execute(array($user))->fetchAll();
-
+
if ($result) {
return $result[0]['size'];
}
@@ -64,7 +64,7 @@ class Storage {
/**
* write to the database how much space is in use for versions
- *
+ *
* @param $user owner of the versions
* @param $size size of the versions
*/
@@ -76,20 +76,20 @@ class Storage {
}
$query->execute(array($size, $user));
}
-
+
/**
* store a new version of a file.
*/
public static function store($filename) {
if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
-
+
// if the file gets streamed we need to remove the .part extension
// to get the right target
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if ($ext === 'part') {
$filename = substr($filename, 0, strlen($filename)-5);
}
-
+
list($uid, $filename) = self::getUidAndFilename($filename);
$files_view = new \OC\Files\View('/'.$uid .'/files');
@@ -104,17 +104,12 @@ class Storage {
// we should have a source file to work with, and the file shouldn't
// be empty
$fileExists = $files_view->file_exists($filename);
- $fileSize = $files_view->filesize($filename);
- if ($fileExists === false || $fileSize === 0) {
+ if (!($fileExists && $files_view->filesize($filename) > 0)) {
return false;
}
// create all parent folders
- $info=pathinfo($filename);
- $versionsFolderName=$versions_view->getLocalFolder('');
- if(!file_exists($versionsFolderName.'/'.$info['dirname'])) {
- mkdir($versionsFolderName.'/'.$info['dirname'], 0750, true);
- }
+ self::createMissingDirectories($filename, $users_view);
$versionsSize = self::getVersionsSize($uid);
if ( $versionsSize === false || $versionsSize < 0 ) {
@@ -174,7 +169,7 @@ class Storage {
list($uidn, $newpath) = self::getUidAndFilename($new_path);
$versions_view = new \OC\Files\View('/'.$uid .'/files_versions');
$files_view = new \OC\Files\View('/'.$uid .'/files');
-
+
// if the file already exists than it was a upload of a existing file
// over the web interface -> store() is the right function we need here
if ($files_view->file_exists($newpath)) {
@@ -183,13 +178,12 @@ class Storage {
self::expire($newpath);
- $abs_newpath = $versions_view->getLocalFile($newpath);
-
if ( $files_view->is_dir($oldpath) && $versions_view->is_dir($oldpath) ) {
$versions_view->rename($oldpath, $newpath);
} else if ( ($versions = Storage::getVersions($uid, $oldpath)) ) {
- $info=pathinfo($abs_newpath);
- if(!file_exists($info['dirname'])) mkdir($info['dirname'], 0750, true);
+ // create missing dirs if necessary
+ self::createMissingDirectories($newpath, new \OC\Files\View('/'. $uidn));
+
foreach ($versions as $v) {
$versions_view->rename($oldpath.'.v'.$v['version'], $newpath.'.v'.$v['version']);
}
@@ -435,7 +429,7 @@ class Storage {
} else {
$quota = \OCP\Util::computerFileSize($quota);
}
-
+
// make sure that we have the current size of the version history
if ( $versionsSize === null ) {
$versionsSize = self::getVersionsSize($uid);
@@ -568,4 +562,21 @@ class Storage {
return $size;
}
+ /**
+ * @brief create recursively missing directories
+ * @param string $filename $path to a file
+ * @param \OC\Files\View $view view on data/user/
+ */
+ private static function createMissingDirectories($filename, $view) {
+ $dirname = \OC_Filesystem::normalizePath(dirname($filename));
+ $dirParts = explode('/', $dirname);
+ $dir = "/files_versions";
+ foreach ($dirParts as $part) {
+ $dir = $dir . '/' . $part;
+ if (!$view->file_exists($dir)) {
+ $view->mkdir($dir);
+ }
+ }
+ }
+
}
diff --git a/apps/user_ldap/ajax/clearMappings.php b/apps/user_ldap/ajax/clearMappings.php
index 5dab39839b6..9118d58c5cf 100644
--- a/apps/user_ldap/ajax/clearMappings.php
+++ b/apps/user_ldap/ajax/clearMappings.php
@@ -32,4 +32,4 @@ if(\OCA\user_ldap\lib\Helper::clearMapping($subject)) {
} else {
$l=OC_L10N::get('user_ldap');
OCP\JSON::error(array('message' => $l->t('Failed to clear the mappings.')));
-} \ No newline at end of file
+}
diff --git a/apps/user_ldap/ajax/getConfiguration.php b/apps/user_ldap/ajax/getConfiguration.php
index dfae68d2dc9..baca588976f 100644
--- a/apps/user_ldap/ajax/getConfiguration.php
+++ b/apps/user_ldap/ajax/getConfiguration.php
@@ -28,4 +28,4 @@ OCP\JSON::callCheck();
$prefix = $_POST['ldap_serverconfig_chooser'];
$connection = new \OCA\user_ldap\lib\Connection($prefix);
-OCP\JSON::success(array('configuration' => $connection->getConfiguration())); \ No newline at end of file
+OCP\JSON::success(array('configuration' => $connection->getConfiguration()));
diff --git a/apps/user_ldap/ajax/getNewServerConfigPrefix.php b/apps/user_ldap/ajax/getNewServerConfigPrefix.php
index 17e78f87072..1c68b2e9a76 100644
--- a/apps/user_ldap/ajax/getNewServerConfigPrefix.php
+++ b/apps/user_ldap/ajax/getNewServerConfigPrefix.php
@@ -31,4 +31,4 @@ sort($serverConnections);
$lk = array_pop($serverConnections);
$ln = intval(str_replace('s', '', $lk));
$nk = 's'.str_pad($ln+1, 2, '0', STR_PAD_LEFT);
-OCP\JSON::success(array('configPrefix' => $nk)); \ No newline at end of file
+OCP\JSON::success(array('configPrefix' => $nk));
diff --git a/apps/user_ldap/ajax/setConfiguration.php b/apps/user_ldap/ajax/setConfiguration.php
index 206487c7e0a..d850bda2470 100644
--- a/apps/user_ldap/ajax/setConfiguration.php
+++ b/apps/user_ldap/ajax/setConfiguration.php
@@ -30,4 +30,4 @@ $prefix = $_POST['ldap_serverconfig_chooser'];
$connection = new \OCA\user_ldap\lib\Connection($prefix);
$connection->setConfiguration($_POST);
$connection->saveConfiguration();
-OCP\JSON::success(); \ No newline at end of file
+OCP\JSON::success();
diff --git a/apps/user_ldap/css/settings.css b/apps/user_ldap/css/settings.css
index 185952e14bb..6086c7b74e6 100644
--- a/apps/user_ldap/css/settings.css
+++ b/apps/user_ldap/css/settings.css
@@ -3,14 +3,20 @@
max-width: 200px;
display: inline-block;
vertical-align: top;
+ text-align: right;
padding-top: 9px;
+ padding-right: 5px;
}
#ldap fieldset input, #ldap fieldset textarea {
- width: 70%;
+ width: 60%;
display: inline-block;
}
+#ldap fieldset p input[type=checkbox] {
+ vertical-align: bottom;
+}
+
.ldapIndent {
margin-left: 50px;
}
@@ -18,4 +24,4 @@
.ldapwarning {
margin-left: 1.4em;
color: #FF3B3B;
-} \ No newline at end of file
+}
diff --git a/apps/user_ldap/group_proxy.php b/apps/user_ldap/group_proxy.php
index 75e7cd46336..eb6f176c58c 100644
--- a/apps/user_ldap/group_proxy.php
+++ b/apps/user_ldap/group_proxy.php
@@ -198,4 +198,4 @@ class Group_Proxy extends lib\Proxy implements \OCP\GroupInterface {
//it's the same across all our user backends obviously
return $this->refBackend->implementsActions($actions);
}
-} \ No newline at end of file
+}
diff --git a/apps/user_ldap/js/settings.js b/apps/user_ldap/js/settings.js
index 52d5dbc48d9..20d6f76dcd6 100644
--- a/apps/user_ldap/js/settings.js
+++ b/apps/user_ldap/js/settings.js
@@ -120,7 +120,7 @@ var LdapConfiguration = {
}
);
}
-}
+};
$(document).ready(function() {
$('#ldapAdvancedAccordion').accordion({ heightStyle: 'content', animate: 'easeInOutCirc'});
@@ -176,6 +176,13 @@ $(document).ready(function() {
$('#ldap_submit').effect('highlight', {'color':'#A8FA87'}, 5000, function() {
$('#ldap_submit').css('background', bgcolor);
});
+ //update the Label in the config chooser
+ caption = $('#ldap_serverconfig_chooser option:selected:first').text();
+ pretext = '. Server: ';
+ caption = caption.slice(0, caption.indexOf(pretext) + pretext.length);
+ caption = caption + $('#ldap_host').val();
+ $('#ldap_serverconfig_chooser option:selected:first').text(caption);
+
} else {
$('#ldap_submit').css('background', '#fff');
$('#ldap_submit').effect('highlight', {'color':'#E97'}, 5000, function() {
@@ -204,4 +211,4 @@ $(document).ready(function() {
LdapConfiguration.refreshConfig();
}
});
-}); \ No newline at end of file
+});
diff --git a/apps/user_ldap/l10n/bn_BD.php b/apps/user_ldap/l10n/bn_BD.php
index ae8571e3d87..407d5f509ec 100644
--- a/apps/user_ldap/l10n/bn_BD.php
+++ b/apps/user_ldap/l10n/bn_BD.php
@@ -10,19 +10,12 @@ $TRANSLATIONS = array(
"Password" => "কূটশব্দ",
"For anonymous access, leave DN and Password empty." => "অজ্ঞাতকুলশীল অধিগমনের জন্য DN এবং কূটশব্দটি ফাঁকা রাখুন।",
"User Login Filter" => "ব্যবহারকারির প্রবেশ ছাঁকনী",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "প্রবেশের চেষ্টা করার সময় প্রযোজ্য ছাঁকনীটি নির্ধারণ করবে। প্রবেশের সময় ব্যবহারকারী নামটি %%uid দিয়ে প্রতিস্থাপিত হবে।",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "%%uid স্থানধারক ব্যবহার করুন, উদাহরণঃ \"uid=%%uid\"",
"User List Filter" => "ব্যবহারকারী তালিকা ছাঁকনী",
-"Defines the filter to apply, when retrieving users." => "ব্যবহারকারী উদ্ধার করার সময় প্রয়োগের জন্য ছাঁকনী নির্ধারণ করবে।",
-"without any placeholder, e.g. \"objectClass=person\"." => "কোন স্থানধারক ব্যতীত, যেমনঃ \"objectClass=person\"।",
"Group Filter" => "গোষ্ঠী ছাঁকনী",
-"Defines the filter to apply, when retrieving groups." => "গোষ্ঠীসমূহ উদ্ধার করার সময় প্রয়োগের জন্য ছাঁকনী নির্ধারণ করবে।",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "কোন স্থান ধারক ব্যতীত, উদাহরণঃ\"objectClass=posixGroup\"।",
"Port" => "পোর্ট",
"Use TLS" => "TLS ব্যবহার কর",
"Case insensitve LDAP server (Windows)" => "বর্ণ অসংবেদী LDAP সার্ভার (উইন্ডোজ)",
"Turn off SSL certificate validation." => "SSL সনদপত্র যাচাইকরণ বন্ধ রাক।",
-"Not recommended, use for testing only." => "অনুমোদিত নয়, শুধুমাত্র পরীক্ষামূলক ব্যবহারের জন্য।",
"in seconds. A change empties the cache." => "সেকেন্ডে। কোন পরিবর্তন ক্যাসে খালি করবে।",
"User Display Name Field" => "ব্যবহারকারীর প্রদর্শিতব্য নামের ক্ষেত্র",
"Base User Tree" => "ভিত্তি ব্যবহারকারি বৃক্ষাকারে",
diff --git a/apps/user_ldap/l10n/ca.php b/apps/user_ldap/l10n/ca.php
index a6b34399cd4..455ad62d84c 100644
--- a/apps/user_ldap/l10n/ca.php
+++ b/apps/user_ldap/l10n/ca.php
@@ -30,14 +30,11 @@ $TRANSLATIONS = array(
"Password" => "Contrasenya",
"For anonymous access, leave DN and Password empty." => "Per un accés anònim, deixeu la DN i la contrasenya en blanc.",
"User Login Filter" => "Filtre d'inici de sessió d'usuari",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Defineix el filtre a aplicar quan s'intenta l'inici de sessió. %%uid reemplaça el nom d'usuari en l'acció d'inici de sessió.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "useu el paràmetre de substitució %%uid, per exemple \"uid=%%uid\"",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "Defineix el filtre a aplicar quan s'intenta iniciar la sessió. %%uid reemplaça el nom d'usuari en l'acció d'inici de sessió. Per exemple: \"uid=%%uid\"",
"User List Filter" => "Llista de filtres d'usuari",
-"Defines the filter to apply, when retrieving users." => "Defineix el filtre a aplicar quan es mostren usuaris",
-"without any placeholder, e.g. \"objectClass=person\"." => "sense cap paràmetre de substitució, per exemple \"objectClass=persona\"",
+"Defines the filter to apply, when retrieving users (no placeholders). Example: \"objectClass=person\"" => "Defineix el filtre a aplicar quan es mostren usuaris (no textos variables). Per exemple: \"objectClass=person\"",
"Group Filter" => "Filtre de grup",
-"Defines the filter to apply, when retrieving groups." => "Defineix el filtre a aplicar quan es mostren grups.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "sense cap paràmetre de substitució, per exemple \"objectClass=grupPosix\".",
+"Defines the filter to apply, when retrieving groups (no placeholders). Example: \"objectClass=posixGroup\"" => "Defineix el filtre a aplicar quan es mostren grups (no textos variables). Per exemple: \"objectClass=posixGroup\"",
"Connection Settings" => "Arranjaments de connexió",
"Configuration Active" => "Configuració activa",
"When unchecked, this configuration will be skipped." => "Si està desmarcat, aquesta configuració s'ometrà.",
@@ -51,8 +48,7 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "No ho useu adicionalment per a conexions LDAPS, fallarà.",
"Case insensitve LDAP server (Windows)" => "Servidor LDAP sense distinció entre majúscules i minúscules (Windows)",
"Turn off SSL certificate validation." => "Desactiva la validació de certificat SSL.",
-"If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Si la connexió només funciona amb aquesta opció, importeu el certificat SSL del servidor LDAP en el vostre servidor %s.",
-"Not recommended, use for testing only." => "No recomanat, ús només per proves.",
+"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "No es recomana, useu-ho només com a prova! Importeu el certificat SSL del servidor LDAP al servidor %s només si la connexió funciona amb aquesta opció.",
"Cache Time-To-Live" => "Memòria de cau Time-To-Live",
"in seconds. A change empties the cache." => "en segons. Un canvi buidarà la memòria de cau.",
"Directory Settings" => "Arranjaments de carpetes",
diff --git a/apps/user_ldap/l10n/cs_CZ.php b/apps/user_ldap/l10n/cs_CZ.php
index 165946a3b30..9109a8c710a 100644
--- a/apps/user_ldap/l10n/cs_CZ.php
+++ b/apps/user_ldap/l10n/cs_CZ.php
@@ -4,9 +4,9 @@ $TRANSLATIONS = array(
"Failed to delete the server configuration" => "Selhalo smazání nastavení serveru",
"The configuration is valid and the connection could be established!" => "Nastavení je v pořádku a spojení bylo navázáno.",
"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "Konfigurace je v pořádku, ale spojení selhalo. Zkontrolujte, prosím, nastavení serveru a přihlašovací údaje.",
-"The configuration is invalid. Please look in the ownCloud log for further details." => "Nastavení je neplatné. Zkontrolujte, prosím, záznam ownCloud pro další podrobnosti.",
-"Deletion failed" => "Mazání selhalo.",
-"Take over settings from recent server configuration?" => "Převzít nastavení z nedávného nastavení serveru?",
+"The configuration is invalid. Please look in the ownCloud log for further details." => "Nastavení je neplatné. Zkontrolujte, prosím, záznamy ownCloud pro další podrobnosti.",
+"Deletion failed" => "Mazání selhalo",
+"Take over settings from recent server configuration?" => "Převzít nastavení z nedávné konfigurace serveru?",
"Keep settings?" => "Ponechat nastavení?",
"Cannot add server configuration" => "Nelze přidat nastavení serveru",
"mappings cleared" => "mapování zrušeno",
@@ -17,7 +17,7 @@ $TRANSLATIONS = array(
"Do you really want to delete the current Server Configuration?" => "Opravdu si přejete smazat současné nastavení serveru?",
"Confirm Deletion" => "Potvrdit smazání",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." => "<b>Varování:</b> Aplikace user_ldap a user_webdavauth jsou vzájemně nekompatibilní. Můžete zaznamenat neočekávané chování. Požádejte prosím vašeho systémového administrátora o zakázání jednoho z nich.",
-"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Varování:</b> není nainstalován LDAP modul pro PHP, podpůrná vrstva nebude fungovat. Požádejte, prosím, správce systému aby jej nainstaloval.",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Varování:</b> není nainstalován LDAP modul pro PHP, podpůrná vrstva nebude fungovat. Požádejte, prosím, správce systému, aby jej nainstaloval.",
"Server configuration" => "Nastavení serveru",
"Add Server Configuration" => "Přidat nastavení serveru",
"Host" => "Počítač",
@@ -26,42 +26,38 @@ $TRANSLATIONS = array(
"One Base DN per line" => "Jedna základní DN na řádku",
"You can specify Base DN for users and groups in the Advanced tab" => "V rozšířeném nastavení můžete určit základní DN pro uživatele a skupiny",
"User DN" => "Uživatelské DN",
-"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "DN klentského uživatele ke kterému tvoříte vazbu, např. uid=agent,dc=example,dc=com. Pro anonymní přístup ponechte údaje DN and Heslo prázdné.",
+"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "DN klientského uživatele, ke kterému tvoříte vazbu, např. uid=agent,dc=example,dc=com. Pro anonymní přístup ponechte DN a heslo prázdné.",
"Password" => "Heslo",
-"For anonymous access, leave DN and Password empty." => "Pro anonymní přístup, ponechte údaje DN and heslo prázdné.",
+"For anonymous access, leave DN and Password empty." => "Pro anonymní přístup ponechte údaje DN and heslo prázdné.",
"User Login Filter" => "Filtr přihlášení uživatelů",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Určuje použitý filtr, při pokusu o přihlášení. %%uid nahrazuje uživatelské jméno v činnosti přihlášení.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "použijte zástupný vzor %%uid, např. \"uid=%%uid\"",
-"User List Filter" => "Filtr uživatelských seznamů",
-"Defines the filter to apply, when retrieving users." => "Určuje použitý filtr, pro získávaní uživatelů.",
-"without any placeholder, e.g. \"objectClass=person\"." => "bez zástupných znaků, např. \"objectClass=person\".",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "Určuje použitý filtr při pokusu o přihlášení. %%uid nahrazuje uživatelské jméno v činnosti přihlášení. Příklad: \"uid=%%uid\"",
+"User List Filter" => "Filtr seznamu uživatelů",
+"Defines the filter to apply, when retrieving users (no placeholders). Example: \"objectClass=person\"" => "Určuje použitý filtr při získávání uživatelů (bez zástupných znaků). Příklad: \"objectClass=person\"",
"Group Filter" => "Filtr skupin",
-"Defines the filter to apply, when retrieving groups." => "Určuje použitý filtr, pro získávaní skupin.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "bez zástupných znaků, např. \"objectClass=posixGroup\".",
+"Defines the filter to apply, when retrieving groups (no placeholders). Example: \"objectClass=posixGroup\"" => "Určuje použitý filtr při získávání skupin (bez zástupných znaků). Příklad: \"objectClass=posixGroup\"",
"Connection Settings" => "Nastavení spojení",
"Configuration Active" => "Nastavení aktivní",
-"When unchecked, this configuration will be skipped." => "Pokud není zaškrtnuto, bude nastavení přeskočeno.",
+"When unchecked, this configuration will be skipped." => "Pokud není zaškrtnuto, bude toto nastavení přeskočeno.",
"Port" => "Port",
"Backup (Replica) Host" => "Záložní (kopie) hostitel",
"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Zadejte volitelného záložního hostitele. Musí to být kopie hlavního serveru LDAP/AD.",
"Backup (Replica) Port" => "Záložní (kopie) port",
-"Disable Main Server" => "Zakázat hlavní serveru",
-"Only connect to the replica server." => "Připojit jen k replikujícímu serveru.",
+"Disable Main Server" => "Zakázat hlavní server",
+"Only connect to the replica server." => "Připojit jen k záložnímu serveru.",
"Use TLS" => "Použít TLS",
-"Do not use it additionally for LDAPS connections, it will fail." => "Nepoužívejte pro spojení LDAP, selže.",
+"Do not use it additionally for LDAPS connections, it will fail." => "Nepoužívejte v kombinaci s LDAPS spojením, nebude to fungovat.",
"Case insensitve LDAP server (Windows)" => "LDAP server nerozlišující velikost znaků (Windows)",
"Turn off SSL certificate validation." => "Vypnout ověřování SSL certifikátu.",
-"If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Pokud spojení funguje jen s touto volbou, importujte SSL certifikát vašeho LDAP serveru na server %s.",
-"Not recommended, use for testing only." => "Není doporučeno, pouze pro testovací účely.",
+"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Nedoporučuje se, určeno pouze k testovacímu použití. Pokud spojení funguje jen s touto volbou, importujte SSL certifikát vašeho LDAP serveru na server %s.",
"Cache Time-To-Live" => "TTL vyrovnávací paměti",
-"in seconds. A change empties the cache." => "ve vteřinách. Změna vyprázdní vyrovnávací paměť.",
+"in seconds. A change empties the cache." => "v sekundách. Změna vyprázdní vyrovnávací paměť.",
"Directory Settings" => "Nastavení adresáře",
"User Display Name Field" => "Pole zobrazovaného jména uživatele",
"The LDAP attribute to use to generate the user's display name." => "LDAP atribut použitý k vytvoření zobrazovaného jména uživatele.",
"Base User Tree" => "Základní uživatelský strom",
"One User Base DN per line" => "Jedna uživatelská základní DN na řádku",
"User Search Attributes" => "Atributy vyhledávání uživatelů",
-"Optional; one attribute per line" => "Volitelné, atribut na řádku",
+"Optional; one attribute per line" => "Volitelné, jeden atribut na řádku",
"Group Display Name Field" => "Pole zobrazovaného jména skupiny",
"The LDAP attribute to use to generate the groups's display name." => "LDAP atribut použitý k vytvoření zobrazovaného jména skupiny.",
"Base Group Tree" => "Základní skupinový strom",
@@ -76,13 +72,13 @@ $TRANSLATIONS = array(
"User Home Folder Naming Rule" => "Pravidlo pojmenování domovské složky uživatele",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Ponechte prázdné pro uživatelské jméno (výchozí). Jinak uveďte LDAP/AD parametr.",
"Internal Username" => "Interní uživatelské jméno",
-"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." => "Ve výchozím nastavení bude uživatelské jméno vytvořeno z UUID atributu. To zajistí unikátnost uživatelského jména bez potřeby konverze znaků. Interní uživatelské jméno je omezena na znaky: [ a-zA-Z0-9_.@- ]. Ostatní znaky jsou nahrazeny jejich ASCII ekvivalentem nebo jednoduše vynechány. V případě kolize uživatelských jmen bude přidáno/navýšeno číslo. Interní uživatelské jméno je používáno k interní identifikaci uživatele. Je také výchozím názvem uživatelského domovského adresáře. Je také součástí URL pro vzdálený přístup, například všech *DAV služeb. S tímto nastavením bude výchozí chování přepsáno. Pro dosažení podobného chování jako před ownCloudem 5 uveďte atribut zobrazovaného jména do pole níže. Ponechte prázdné pro výchozí chování. Změna bude mít vliv jen na nově namapované (přidané) uživatele z LDAP.",
+"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." => "Ve výchozím nastavení bude uživatelské jméno vytvořeno z UUID atributu. To zajistí unikátnost uživatelského jména a není potřeba provádět konverzi znaků. Interní uživatelské jméno je omezeno na znaky: [ a-zA-Z0-9_.@- ]. Ostatní znaky jsou nahrazeny jejich ASCII ekvivalentem nebo jednoduše vynechány. V případě kolize uživatelských jmen bude přidáno/navýšeno číslo. Interní uživatelské jméno je používáno k interní identifikaci uživatele. Je také výchozím názvem uživatelského domovského adresáře. Je také součástí URL pro vzdálený přístup, například všech *DAV služeb. S tímto nastavením může být výchozí chování změněno. Pro dosažení podobného chování jako před ownCloudem 5 uveďte atribut zobrazovaného jména do pole níže. Ponechte prázdné pro výchozí chování. Změna bude mít vliv jen na nově namapované (přidané) uživatele z LDAP.",
"Internal Username Attribute:" => "Atribut interního uživatelského jména:",
"Override UUID detection" => "Nastavit ručně UUID atribut",
-"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." => "Ve výchozím nastavení je UUID atribut nalezen automaticky. UUID atribut je používán pro nezpochybnitelnou identifikaci uživatelů a skupin z LDAP. Navíc je na základě UUID tvořeno také interní uživatelské jméno, pokud není nastaveno jinak. Můžete výchozí nastavení přepsat a použít atribut který sami zvolíte. Musíte se ale ujistit že atribut který vyberete bude uveden jak u uživatelů, tak i u skupin a je unikátní. Ponechte prázdné pro výchozí chování. Změna bude mít vliv jen na nově namapované (přidané) uživatele a skupiny z LDAP.",
+"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." => "Ve výchozím nastavení je UUID atribut nalezen automaticky. UUID atribut je používán pro nezpochybnitelnou identifikaci uživatelů a skupin z LDAP. Navíc je na základě UUID tvořeno také interní uživatelské jméno, pokud není nastaveno jinak. Můžete výchozí nastavení přepsat a použít atribut, který sami zvolíte. Musíte se ale ujistit, že atribut, který vyberete, bude uveden jak u uživatelů, tak i u skupin a je unikátní. Ponechte prázdné pro výchozí chování. Změna bude mít vliv jen na nově namapované (přidané) uživatele a skupiny z LDAP.",
"UUID Attribute:" => "Atribut UUID:",
"Username-LDAP User Mapping" => "Mapování uživatelských jmen z LDAPu",
-"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a 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." => "Uživatelská jména jsou používány pro uchovávání a přiřazování (meta)dat. Pro správnou identifikaci a rozpoznání uživatelů bude mít každý uživatel z LDAP interní uživatelské jméno. To je nezbytné pro mapování uživatelských jmen na uživatele LDAP. Vytvořené uživatelské jméno je mapováno na UUID uživatele v LDAP. Navíc je cachována DN pro reprodukci interakce s LDAP, ale není používána pro identifikaci. Pokud se DN změní, bude to správně rozpoznáno. Vyčištění mapování zanechá zbytky všude. Vyčištění navíc není specifické konfiguraci, bude mít vliv na všechny LDAP konfigurace! Nikdy nečistěte mapování v produkčním prostředí, jen v testovací nebo experimentální fázi.",
+"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a 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." => "Uživatelská jména jsou používány pro uchovávání a přiřazování (meta)dat. Pro správnou identifikaci a rozpoznání uživatelů bude mít každý uživatel z LDAP interní uživatelské jméno. To vyžaduje mapování uživatelských jmen na uživatele LDAP. Vytvořené uživatelské jméno je mapováno na UUID uživatele v LDAP. Navíc je cachována DN pro zmenšení interakce s LDAP, ale není používána pro identifikaci. Pokud se DN změní, bude to správně rozpoznáno. Interní uživatelské jméno se používá celé. Vyčištění mapování zanechá zbytky všude. Vyčištění navíc není specifické konfiguraci, bude mít vliv na všechny LDAP konfigurace! Nikdy nečistěte mapování v produkčním prostředí, jen v testovací nebo experimentální fázi.",
"Clear Username-LDAP User Mapping" => "Zrušit mapování uživatelských jmen LDAPu",
"Clear Groupname-LDAP Group Mapping" => "Zrušit mapování názvů skupin LDAPu",
"Test Configuration" => "Vyzkoušet nastavení",
diff --git a/apps/user_ldap/l10n/da.php b/apps/user_ldap/l10n/da.php
index ab59d3ed506..e33efe3de09 100644
--- a/apps/user_ldap/l10n/da.php
+++ b/apps/user_ldap/l10n/da.php
@@ -4,6 +4,7 @@ $TRANSLATIONS = array(
"The configuration is valid and the connection could be established!" => "Konfigurationen er korrekt og forbindelsen kunne etableres!",
"The configuration is invalid. Please look in the ownCloud log for further details." => "Konfigurationen er ugyldig. Se venligst ownCloud loggen for yderligere detaljer.",
"Deletion failed" => "Fejl ved sletning",
+"Take over settings from recent server configuration?" => "Overtag indstillinger fra nylig server konfiguration? ",
"Keep settings?" => "Behold indstillinger?",
"Cannot add server configuration" => "Kan ikke tilføje serverkonfiguration",
"Success" => "Succes",
@@ -23,26 +24,25 @@ $TRANSLATIONS = array(
"For anonymous access, leave DN and Password empty." => "For anonym adgang, skal du lade DN og Adgangskode tomme.",
"User Login Filter" => "Bruger Login Filter",
"User List Filter" => "Brugerliste Filter",
-"Defines the filter to apply, when retrieving users." => "Definere filteret der bruges ved indlæsning af brugere.",
-"without any placeholder, e.g. \"objectClass=person\"." => "Uden stedfortræder, f.eks. \"objectClass=person\".",
"Group Filter" => "Gruppe Filter",
-"Defines the filter to apply, when retrieving groups." => "Definere filteret der bruges når der indlæses grupper.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "Uden stedfortræder, f.eks. \"objectClass=posixGroup\".",
"Connection Settings" => "Forbindelsesindstillinger ",
"Configuration Active" => "Konfiguration Aktiv",
"Port" => "Port",
"Backup (Replica) Host" => "Backup (Replika) Vært",
+"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Opgiv en ikke obligatorisk backup server. Denne skal være en replikation af hoved-LDAP/AD serveren.",
"Backup (Replica) Port" => "Backup (Replika) Port",
"Disable Main Server" => "Deaktiver Hovedserver",
"Only connect to the replica server." => "Forbind kun til replika serveren.",
"Use TLS" => "Brug TLS",
"Do not use it additionally for LDAPS connections, it will fail." => "Benyt ikke flere LDAPS forbindelser, det vil mislykkeds. ",
+"Case insensitve LDAP server (Windows)" => "Ikke versalfølsom LDAP server (Windows)",
"Turn off SSL certificate validation." => "Deaktiver SSL certifikat validering",
-"Not recommended, use for testing only." => "Anbefales ikke, brug kun for at teste.",
+"Cache Time-To-Live" => "Cache Time-To-Live",
"User Display Name Field" => "User Display Name Field",
"Base User Tree" => "Base Bruger Træ",
"Base Group Tree" => "Base Group Tree",
"Group-Member association" => "Group-Member association",
+"Quota Field" => "Kvote Felt",
"in bytes" => "i bytes",
"Email Field" => "Email Felt",
"Internal Username" => "Internt Brugernavn",
diff --git a/apps/user_ldap/l10n/de.php b/apps/user_ldap/l10n/de.php
index 73649f7c0ac..cb13275fafa 100644
--- a/apps/user_ldap/l10n/de.php
+++ b/apps/user_ldap/l10n/de.php
@@ -30,14 +30,11 @@ $TRANSLATIONS = array(
"Password" => "Passwort",
"For anonymous access, leave DN and Password empty." => "Lasse die Felder DN und Passwort für anonymen Zugang leer.",
"User Login Filter" => "Benutzer-Login-Filter",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Bestimmt den angewendeten Filter, wenn eine Anmeldung versucht wird. %%uid ersetzt den Benutzernamen beim Anmeldeversuch.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "verwende %%uid Platzhalter, z. B. \"uid=%%uid\"",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "Bestimmt den Filter, welcher bei einer Anmeldung angewandt wird. %%uid ersetzt den Benutzernamen bei der Anmeldung. Beispiel: \"uid=%%uid\"",
"User List Filter" => "Benutzer-Filter-Liste",
-"Defines the filter to apply, when retrieving users." => "Definiert den Filter für die Anfrage der Benutzer.",
-"without any placeholder, e.g. \"objectClass=person\"." => "ohne Platzhalter, z.B.: \"objectClass=person\"",
+"Defines the filter to apply, when retrieving users (no placeholders). Example: \"objectClass=person\"" => "Definiert den Filter für die Wiederherstellung eines Benutzers (kein Platzhalter). Beispiel: \"objectClass=person\"",
"Group Filter" => "Gruppen-Filter",
-"Defines the filter to apply, when retrieving groups." => "Definiert den Filter für die Anfrage der Gruppen.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "ohne Platzhalter, z.B.: \"objectClass=posixGroup\"",
+"Defines the filter to apply, when retrieving groups (no placeholders). Example: \"objectClass=posixGroup\"" => "Definiert den Filter für die Wiederherstellung einer Gruppe (kein Platzhalter). Beispiel: \"objectClass=posixGroup\"",
"Connection Settings" => "Verbindungseinstellungen",
"Configuration Active" => "Konfiguration aktiv",
"When unchecked, this configuration will be skipped." => "Konfiguration wird übersprungen wenn deaktiviert",
@@ -51,8 +48,7 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "Benutze es nicht zusammen mit LDAPS Verbindungen, es wird fehlschlagen.",
"Case insensitve LDAP server (Windows)" => "LDAP-Server (Windows: Groß- und Kleinschreibung bleibt unbeachtet)",
"Turn off SSL certificate validation." => "Schalte die SSL-Zertifikatsprüfung aus.",
-"If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Falls die Verbindung nur mit dieser Option funktioniert, importiere das SSL-Zertifikat des LDAP-Servers in deinen %s Server.",
-"Not recommended, use for testing only." => "Nicht empfohlen, nur zu Testzwecken.",
+"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Nur für Testzwecke geeignet, sollte Standardmäßig nicht verwendet werden. Falls die Verbindung nur mit dieser Option funktioniert, importiere das SSL-Zertifikat des LDAP-Servers in deinen %s Server.",
"Cache Time-To-Live" => "Speichere Time-To-Live zwischen",
"in seconds. A change empties the cache." => "in Sekunden. Eine Änderung leert den Cache.",
"Directory Settings" => "Ordnereinstellungen",
diff --git a/apps/user_ldap/l10n/de_DE.php b/apps/user_ldap/l10n/de_DE.php
index 0052b75b33a..677d603ffa0 100644
--- a/apps/user_ldap/l10n/de_DE.php
+++ b/apps/user_ldap/l10n/de_DE.php
@@ -30,14 +30,11 @@ $TRANSLATIONS = array(
"Password" => "Passwort",
"For anonymous access, leave DN and Password empty." => "Lassen Sie die Felder DN und Passwort für einen anonymen Zugang leer.",
"User Login Filter" => "Benutzer-Login-Filter",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Bestimmt den angewendeten Filter, wenn eine Anmeldung durchgeführt wird. %%uid ersetzt den Benutzernamen beim Anmeldeversuch.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "verwenden Sie %%uid Platzhalter, z. B. \"uid=%%uid\"",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "Bestimmt den Filter, welcher bei einer Anmeldung angewandt wird. %%uid ersetzt den Benutzernamen bei der Anmeldung. Beispiel: \"uid=%%uid\"",
"User List Filter" => "Benutzer-Filter-Liste",
-"Defines the filter to apply, when retrieving users." => "Definiert den Filter für die Anfrage der Benutzer.",
-"without any placeholder, e.g. \"objectClass=person\"." => "ohne Platzhalter, z.B.: \"objectClass=person\"",
+"Defines the filter to apply, when retrieving users (no placeholders). Example: \"objectClass=person\"" => "Definiert den Filter für die Wiederherstellung eines Benutzers (kein Platzhalter). Beispiel: \"objectClass=person\"",
"Group Filter" => "Gruppen-Filter",
-"Defines the filter to apply, when retrieving groups." => "Definiert den Filter für die Anfrage der Gruppen.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "ohne Platzhalter, z.B.: \"objectClass=posixGroup\"",
+"Defines the filter to apply, when retrieving groups (no placeholders). Example: \"objectClass=posixGroup\"" => "Definiert den Filter für die Wiederherstellung einer Gruppe (kein Platzhalter). Beispiel: \"objectClass=posixGroup\"",
"Connection Settings" => "Verbindungseinstellungen",
"Configuration Active" => "Konfiguration aktiv",
"When unchecked, this configuration will be skipped." => "Wenn nicht angehakt, wird diese Konfiguration übersprungen.",
@@ -51,8 +48,7 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "Benutzen Sie es nicht in Verbindung mit LDAPS Verbindungen, es wird fehlschlagen.",
"Case insensitve LDAP server (Windows)" => "LDAP-Server (Windows: Groß- und Kleinschreibung bleibt unbeachtet)",
"Turn off SSL certificate validation." => "Schalten Sie die SSL-Zertifikatsprüfung aus.",
-"If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Falls die Verbindung nur mit dieser Option funktioniert, importieren Sie das SSL-Zertifikat des LDAP-Servers in Ihren %s Server.",
-"Not recommended, use for testing only." => "Nicht empfohlen, nur zu Testzwecken.",
+"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Nur für Testzwecke geeignet, sollte Standardmäßig nicht verwendet werden. Falls die Verbindung nur mit dieser Option funktioniert, importieren Sie das SSL-Zertifikat des LDAP-Servers in Ihren %s Server.",
"Cache Time-To-Live" => "Speichere Time-To-Live zwischen",
"in seconds. A change empties the cache." => "in Sekunden. Eine Änderung leert den Cache.",
"Directory Settings" => "Ordnereinstellungen",
diff --git a/apps/user_ldap/l10n/el.php b/apps/user_ldap/l10n/el.php
index 140925f6126..d588f90518e 100644
--- a/apps/user_ldap/l10n/el.php
+++ b/apps/user_ldap/l10n/el.php
@@ -27,14 +27,8 @@ $TRANSLATIONS = array(
"Password" => "Συνθηματικό",
"For anonymous access, leave DN and Password empty." => "Για ανώνυμη πρόσβαση, αφήστε κενά τα πεδία DN και Pasword.",
"User Login Filter" => "User Login Filter",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Καθορίζει το φίλτρο που θα ισχύει κατά την προσπάθεια σύνδεσης χρήστη. %%uid αντικαθιστά το όνομα χρήστη κατά τη σύνδεση. ",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "χρησιμοποιήστε τη μεταβλητή %%uid, π.χ. \"uid=%%uid\"",
"User List Filter" => "User List Filter",
-"Defines the filter to apply, when retrieving users." => "Καθορίζει το φίλτρο που θα ισχύει κατά την ανάκτηση επαφών.",
-"without any placeholder, e.g. \"objectClass=person\"." => "χωρίς κάποια μεταβλητή, π.χ. \"objectClass=άτομο\".",
"Group Filter" => "Group Filter",
-"Defines the filter to apply, when retrieving groups." => "Καθορίζει το φίλτρο που θα ισχύει κατά την ανάκτηση ομάδων.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "χωρίς κάποια μεταβλητή, π.χ. \"objectClass=ΟμάδαPosix\".",
"Connection Settings" => "Ρυθμίσεις Σύνδεσης",
"Configuration Active" => "Ενεργοποιηση ρυθμισεων",
"When unchecked, this configuration will be skipped." => "Όταν δεν είναι επιλεγμένο, αυτή η ρύθμιση θα πρέπει να παραλειφθεί. ",
@@ -47,7 +41,6 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "Μην το χρησιμοποιήσετε επιπροσθέτως, για LDAPS συνδέσεις , θα αποτύχει.",
"Case insensitve LDAP server (Windows)" => "LDAP server (Windows) με διάκριση πεζών-ΚΕΦΑΛΑΙΩΝ",
"Turn off SSL certificate validation." => "Απενεργοποίηση επικύρωσης πιστοποιητικού SSL.",
-"Not recommended, use for testing only." => "Δεν προτείνεται, χρήση μόνο για δοκιμές.",
"Cache Time-To-Live" => "Cache Time-To-Live",
"in seconds. A change empties the cache." => "σε δευτερόλεπτα. Μια αλλαγή αδειάζει την μνήμη cache.",
"Directory Settings" => "Ρυθμίσεις Καταλόγου",
diff --git a/apps/user_ldap/l10n/eo.php b/apps/user_ldap/l10n/eo.php
index 2973e05388b..26d46b81b9f 100644
--- a/apps/user_ldap/l10n/eo.php
+++ b/apps/user_ldap/l10n/eo.php
@@ -10,19 +10,12 @@ $TRANSLATIONS = array(
"Password" => "Pasvorto",
"For anonymous access, leave DN and Password empty." => "Por sennoman aliron, lasu DN-on kaj Pasvorton malplenaj.",
"User Login Filter" => "Filtrilo de uzantensaluto",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Ĝi difinas la filtrilon aplikotan, kiam oni provas ensaluti. %%uid anstataŭigas la uzantonomon en la ensaluta ago.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "uzu la referencilon %%uid, ekz.: \"uid=%%uid\"",
"User List Filter" => "Filtrilo de uzantolisto",
-"Defines the filter to apply, when retrieving users." => "Ĝi difinas la filtrilon aplikotan, kiam veniĝas uzantoj.",
-"without any placeholder, e.g. \"objectClass=person\"." => "sen ajna referencilo, ekz.: \"objectClass=person\".",
"Group Filter" => "Filtrilo de grupo",
-"Defines the filter to apply, when retrieving groups." => "Ĝi difinas la filtrilon aplikotan, kiam veniĝas grupoj.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "sen ajna referencilo, ekz.: \"objectClass=posixGroup\".",
"Port" => "Pordo",
"Use TLS" => "Uzi TLS-on",
"Case insensitve LDAP server (Windows)" => "LDAP-servilo blinda je litergrandeco (Vindozo)",
"Turn off SSL certificate validation." => "Malkapabligi validkontrolon de SSL-atestiloj.",
-"Not recommended, use for testing only." => "Ne rekomendata, uzu ĝin nur por testoj.",
"in seconds. A change empties the cache." => "sekunde. Ajna ŝanĝo malplenigas la kaŝmemoron.",
"User Display Name Field" => "Kampo de vidignomo de uzanto",
"Base User Tree" => "Baza uzantarbo",
diff --git a/apps/user_ldap/l10n/es.php b/apps/user_ldap/l10n/es.php
index ca59e2f3ead..e5994273635 100644
--- a/apps/user_ldap/l10n/es.php
+++ b/apps/user_ldap/l10n/es.php
@@ -29,14 +29,8 @@ $TRANSLATIONS = array(
"Password" => "Contraseña",
"For anonymous access, leave DN and Password empty." => "Para acceso anónimo, deje DN y contraseña vacíos.",
"User Login Filter" => "Filtro de inicio de sesión de usuario",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Define el filtro a aplicar cuando se ha realizado un login. %%uid remplazrá el nombre de usuario en el proceso de login.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "usar %%uid como comodín, ej: \"uid=%%uid\"",
"User List Filter" => "Lista de filtros de usuario",
-"Defines the filter to apply, when retrieving users." => "Define el filtro a aplicar, cuando se obtienen usuarios.",
-"without any placeholder, e.g. \"objectClass=person\"." => "Sin comodines, ej: \"objectClass=person\".",
"Group Filter" => "Filtro de grupo",
-"Defines the filter to apply, when retrieving groups." => "Define el filtro a aplicar, cuando se obtienen grupos.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "sin comodines, ej: \"objectClass=posixGroup\".",
"Connection Settings" => "Configuración de conexión",
"Configuration Active" => "Configuracion activa",
"When unchecked, this configuration will be skipped." => "Cuando deseleccione, esta configuracion sera omitida.",
@@ -49,8 +43,6 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "No lo use para conexiones LDAPS, Fallará.",
"Case insensitve LDAP server (Windows)" => "Servidor de LDAP no sensible a mayúsculas/minúsculas (Windows)",
"Turn off SSL certificate validation." => "Apagar la validación por certificado SSL.",
-"If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Si la conexión funciona sólo con esta opción, importe el certificado SSL del servidor LDAP en su servidor %s.",
-"Not recommended, use for testing only." => "No recomendado, sólo para pruebas.",
"Cache Time-To-Live" => "Cache TTL",
"in seconds. A change empties the cache." => "en segundos. Un cambio vacía la caché.",
"Directory Settings" => "Configuracion de directorio",
diff --git a/apps/user_ldap/l10n/es_AR.php b/apps/user_ldap/l10n/es_AR.php
index c4f339f76bb..ecfcae32f46 100644
--- a/apps/user_ldap/l10n/es_AR.php
+++ b/apps/user_ldap/l10n/es_AR.php
@@ -29,14 +29,8 @@ $TRANSLATIONS = array(
"Password" => "Contraseña",
"For anonymous access, leave DN and Password empty." => "Para acceso anónimo, dejá DN y contraseña vacíos.",
"User Login Filter" => "Filtro de inicio de sesión de usuario",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Define el filtro a aplicar cuando se ha realizado un login. %%uid remplazará el nombre de usuario en el proceso de inicio de sesión.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "usar %%uid como plantilla, p. ej.: \"uid=%%uid\"",
"User List Filter" => "Lista de filtros de usuario",
-"Defines the filter to apply, when retrieving users." => "Define el filtro a aplicar, cuando se obtienen usuarios.",
-"without any placeholder, e.g. \"objectClass=person\"." => "Sin plantilla, p. ej.: \"objectClass=person\".",
"Group Filter" => "Filtro de grupo",
-"Defines the filter to apply, when retrieving groups." => "Define el filtro a aplicar cuando se obtienen grupos.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "Sin ninguna plantilla, p. ej.: \"objectClass=posixGroup\".",
"Connection Settings" => "Configuración de Conección",
"Configuration Active" => "Configuración activa",
"When unchecked, this configuration will be skipped." => "Si no está seleccionada, esta configuración será omitida.",
@@ -49,7 +43,6 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "No usar adicionalmente para conexiones LDAPS, las mismas fallarán",
"Case insensitve LDAP server (Windows)" => "Servidor de LDAP sensible a mayúsculas/minúsculas (Windows)",
"Turn off SSL certificate validation." => "Desactivar la validación por certificado SSL.",
-"Not recommended, use for testing only." => "No recomendado, sólo para pruebas.",
"Cache Time-To-Live" => "Tiempo de vida del caché",
"in seconds. A change empties the cache." => "en segundos. Cambiarlo vacía la cache.",
"Directory Settings" => "Configuración de Directorio",
diff --git a/apps/user_ldap/l10n/et_EE.php b/apps/user_ldap/l10n/et_EE.php
index f97a1ad7406..b949fe02041 100644
--- a/apps/user_ldap/l10n/et_EE.php
+++ b/apps/user_ldap/l10n/et_EE.php
@@ -30,14 +30,11 @@ $TRANSLATIONS = array(
"Password" => "Parool",
"For anonymous access, leave DN and Password empty." => "Anonüümseks ligipääsuks jäta DN ja parool tühjaks.",
"User Login Filter" => "Kasutajanime filter",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Määrab sisselogimisel kasutatava filtri. %%uid asendab sisselogimistegevuses kasutajanime.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "kasuta %%uid kohatäitjat, nt. \"uid=%%uid\"",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "Määrab sisselogimisel kasutatava filtri. %%uid asendab sisselogimistegevuses kasutajanime. Näide: \"uid=%%uid\"",
"User List Filter" => "Kasutajate nimekirja filter",
-"Defines the filter to apply, when retrieving users." => "Määrab kasutajaid hankides filtri, mida rakendatakse.",
-"without any placeholder, e.g. \"objectClass=person\"." => "ilma ühegi kohatäitjata, nt. \"objectClass=person\".",
+"Defines the filter to apply, when retrieving users (no placeholders). Example: \"objectClass=person\"" => "Määrab kasutajate leidmiseks kasutatava filtri (ilma muutujateta). Näide: \"objectClass=person\"",
"Group Filter" => "Grupi filter",
-"Defines the filter to apply, when retrieving groups." => "Määrab gruppe hankides filtri, mida rakendatakse.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "ilma ühegi kohatäitjata, nt. \"objectClass=posixGroup\".",
+"Defines the filter to apply, when retrieving groups (no placeholders). Example: \"objectClass=posixGroup\"" => "Määrab gruppide leidmiseks kasutatava filtri (ilma muutujateta). Näide: \"objectClass=posixGroup\"",
"Connection Settings" => "Ühenduse seaded",
"Configuration Active" => "Seadistus aktiivne",
"When unchecked, this configuration will be skipped." => "Kui märkimata, siis seadistust ei kasutata",
@@ -51,8 +48,7 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "LDAPS puhul ära kasuta. Ühendus ei toimi.",
"Case insensitve LDAP server (Windows)" => "Mittetõstutundlik LDAP server (Windows)",
"Turn off SSL certificate validation." => "Lülita SSL sertifikaadi kontrollimine välja.",
-"If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Kui ühendus toimib ainult selle valikuga, siis impordi LDAP serveri SSL sertifikaat oma %s serverisse.",
-"Not recommended, use for testing only." => "Pole soovitatav, kasuta ainult testimiseks.",
+"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Pole soovitatav, kasuta seda ainult testimiseks! Kui ühendus toimib ainult selle valikuga, siis impordi LDAP serveri SSL sertifikaat oma %s serverisse.",
"Cache Time-To-Live" => "Puhvri iga",
"in seconds. A change empties the cache." => "sekundites. Muudatus tühjendab vahemälu.",
"Directory Settings" => "Kataloogi seaded",
diff --git a/apps/user_ldap/l10n/eu.php b/apps/user_ldap/l10n/eu.php
index 59e8371d9c2..664d4901947 100644
--- a/apps/user_ldap/l10n/eu.php
+++ b/apps/user_ldap/l10n/eu.php
@@ -27,14 +27,8 @@ $TRANSLATIONS = array(
"Password" => "Pasahitza",
"For anonymous access, leave DN and Password empty." => "Sarrera anonimoak gaitzeko utzi DN eta Pasahitza hutsik.",
"User Login Filter" => "Erabiltzaileen saioa hasteko iragazkia",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Saioa hastean erabiliko den iragazkia zehazten du. %%uid-ek erabiltzaile izena ordezkatzen du saioa hasterakoan.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "erabili %%uid txantiloia, adb. \"uid=%%uid\"",
"User List Filter" => "Erabiltzaile zerrendaren Iragazkia",
-"Defines the filter to apply, when retrieving users." => "Erabiltzaileak jasotzen direnean ezarriko den iragazkia zehazten du.",
-"without any placeholder, e.g. \"objectClass=person\"." => "txantiloirik gabe, adb. \"objectClass=person\".",
"Group Filter" => "Taldeen iragazkia",
-"Defines the filter to apply, when retrieving groups." => "Taldeak jasotzen direnean ezarriko den iragazkia zehazten du.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "txantiloirik gabe, adb. \"objectClass=posixGroup\".",
"Connection Settings" => "Konexio Ezarpenak",
"Configuration Active" => "Konfigurazio Aktiboa",
"When unchecked, this configuration will be skipped." => "Markatuta ez dagoenean, konfigurazio hau ez da kontutan hartuko.",
@@ -47,7 +41,6 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "Ez erabili LDAPS konexioetarako, huts egingo du.",
"Case insensitve LDAP server (Windows)" => "Maiuskulak eta minuskulak ezberditzen ez dituen LDAP zerbitzaria (windows)",
"Turn off SSL certificate validation." => "Ezgaitu SSL ziurtagirien egiaztapena.",
-"Not recommended, use for testing only." => "Ez da aholkatzen, erabili bakarrik frogak egiteko.",
"Cache Time-To-Live" => "Katxearen Bizi-Iraupena",
"in seconds. A change empties the cache." => "segundutan. Aldaketak katxea husten du.",
"Directory Settings" => "Karpetaren Ezarpenak",
diff --git a/apps/user_ldap/l10n/fa.php b/apps/user_ldap/l10n/fa.php
index 7b65c798d82..c4db39521dd 100644
--- a/apps/user_ldap/l10n/fa.php
+++ b/apps/user_ldap/l10n/fa.php
@@ -25,7 +25,6 @@ $TRANSLATIONS = array(
"For anonymous access, leave DN and Password empty." => "برای دسترسی ناشناس، DN را رها نموده و رمزعبور را خالی بگذارید.",
"User Login Filter" => "فیلتر ورودی کاربر",
"Group Filter" => "فیلتر گروه",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "بدون هیچ گونه حفره یا سوراخ، به عنوان مثال، \"objectClass = posixGroup\".",
"Connection Settings" => "تنظیمات اتصال",
"Configuration Active" => "پیکربندی فعال",
"When unchecked, this configuration will be skipped." => "زمانیکه انتخاب نشود، این پیکربندی نادیده گرفته خواهد شد.",
@@ -37,7 +36,6 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "علاوه بر این برای اتصالات LDAPS از آن استفاده نکنید، با شکست مواجه خواهد شد.",
"Case insensitve LDAP server (Windows)" => "غیر حساس به بزرگی و کوچکی حروف LDAP سرور (ویندوز)",
"Turn off SSL certificate validation." => "غیرفعال کردن اعتبار گواهی نامه SSL .",
-"Not recommended, use for testing only." => "توصیه نمی شود، تنها برای آزمایش استفاده کنید.",
"Directory Settings" => "تنظیمات پوشه",
"User Display Name Field" => "فیلد نام کاربر",
"Base User Tree" => "کاربر درخت پایه",
diff --git a/apps/user_ldap/l10n/fi_FI.php b/apps/user_ldap/l10n/fi_FI.php
index 744833ff7b3..341ffe8f627 100644
--- a/apps/user_ldap/l10n/fi_FI.php
+++ b/apps/user_ldap/l10n/fi_FI.php
@@ -17,21 +17,14 @@ $TRANSLATIONS = array(
"Password" => "Salasana",
"For anonymous access, leave DN and Password empty." => "Jos haluat mahdollistaa anonyymin pääsyn, jätä DN ja Salasana tyhjäksi ",
"User Login Filter" => "Login suodatus",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Määrittelee käytettävän suodattimen, kun sisäänkirjautumista yritetään. %%uid korvaa sisäänkirjautumisessa käyttäjätunnuksen.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "käytä %%uid paikanvaraajaa, ts. \"uid=%%uid\"",
"User List Filter" => "Käyttäjien suodatus",
-"Defines the filter to apply, when retrieving users." => "Määrittelee käytettävän suodattimen, kun käyttäjiä haetaan. ",
-"without any placeholder, e.g. \"objectClass=person\"." => "ilman paikanvaraustermiä, ts. \"objectClass=person\".",
"Group Filter" => "Ryhmien suodatus",
-"Defines the filter to apply, when retrieving groups." => "Määrittelee käytettävän suodattimen, kun ryhmiä haetaan. ",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "ilman paikanvaraustermiä, ts. \"objectClass=posixGroup\".",
"Connection Settings" => "Yhteysasetukset",
"Port" => "Portti",
"Disable Main Server" => "Poista pääpalvelin käytöstä",
"Use TLS" => "Käytä TLS:ää",
"Case insensitve LDAP server (Windows)" => "Kirjainkoosta piittamaton LDAP-palvelin (Windows)",
"Turn off SSL certificate validation." => "Poista käytöstä SSL-varmenteen vahvistus",
-"Not recommended, use for testing only." => "Ei suositella, käytä vain testausta varten.",
"in seconds. A change empties the cache." => "sekunneissa. Muutos tyhjentää välimuistin.",
"Directory Settings" => "Hakemistoasetukset",
"User Display Name Field" => "Käyttäjän näytettävän nimen kenttä",
diff --git a/apps/user_ldap/l10n/fr.php b/apps/user_ldap/l10n/fr.php
index 5fc02e58372..0c7d3ad078f 100644
--- a/apps/user_ldap/l10n/fr.php
+++ b/apps/user_ldap/l10n/fr.php
@@ -29,14 +29,8 @@ $TRANSLATIONS = array(
"Password" => "Mot de passe",
"For anonymous access, leave DN and Password empty." => "Pour un accès anonyme, laisser le DN utilisateur et le mot de passe vides.",
"User Login Filter" => "Modèle d'authentification utilisateurs",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Définit le motif à appliquer, lors d'une tentative de connexion. %%uid est remplacé par le nom d'utilisateur lors de la connexion.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "veuillez utiliser le champ %%uid , ex.: \"uid=%%uid\"",
"User List Filter" => "Filtre d'utilisateurs",
-"Defines the filter to apply, when retrieving users." => "Définit le filtre à appliquer lors de la récupération des utilisateurs.",
-"without any placeholder, e.g. \"objectClass=person\"." => "sans élément de substitution, par exemple \"objectClass=person\".",
"Group Filter" => "Filtre de groupes",
-"Defines the filter to apply, when retrieving groups." => "Définit le filtre à appliquer lors de la récupération des groupes.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "sans élément de substitution, par exemple \"objectClass=posixGroup\".",
"Connection Settings" => "Paramètres de connexion",
"Configuration Active" => "Configuration active",
"When unchecked, this configuration will be skipped." => "Lorsque non cochée, la configuration sera ignorée.",
@@ -49,7 +43,6 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "À ne pas utiliser pour les connexions LDAPS (cela échouera).",
"Case insensitve LDAP server (Windows)" => "Serveur LDAP insensible à la casse (Windows)",
"Turn off SSL certificate validation." => "Désactiver la validation du certificat SSL.",
-"Not recommended, use for testing only." => "Non recommandé, utilisation pour tests uniquement.",
"Cache Time-To-Live" => "Durée de vie du cache",
"in seconds. A change empties the cache." => "en secondes. Tout changement vide le cache.",
"Directory Settings" => "Paramètres du répertoire",
diff --git a/apps/user_ldap/l10n/gl.php b/apps/user_ldap/l10n/gl.php
index ce4967f8b8c..911e481ca76 100644
--- a/apps/user_ldap/l10n/gl.php
+++ b/apps/user_ldap/l10n/gl.php
@@ -30,14 +30,11 @@ $TRANSLATIONS = array(
"Password" => "Contrasinal",
"For anonymous access, leave DN and Password empty." => "Para o acceso anónimo deixe o DN e o contrasinal baleiros.",
"User Login Filter" => "Filtro de acceso de usuarios",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Define o filtro que se aplica cando se intenta o acceso. %%uid substitúe o nome de usuario e a acción de acceso.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "usar a marca de posición %%uid, p.ex «uid=%%uid»",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "Define o filtro que se aplica cando se intenta o acceso. %%uid substitúe o nome de usuario e a acción de acceso. Exemplo: «uid=%%uid»",
"User List Filter" => "Filtro da lista de usuarios",
-"Defines the filter to apply, when retrieving users." => "Define o filtro a aplicar cando se recompilan os usuarios.",
-"without any placeholder, e.g. \"objectClass=person\"." => "sen ningunha marca de posición, como p.ex «objectClass=persoa».",
+"Defines the filter to apply, when retrieving users (no placeholders). Example: \"objectClass=person\"" => "Define o filtro a aplicar cando de recuperan os usuarios (sen comodíns). Exemplo: «objectClass=person»",
"Group Filter" => "Filtro de grupo",
-"Defines the filter to apply, when retrieving groups." => "Define o filtro a aplicar cando se recompilan os grupos.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "sen ningunha marca de posición, como p.ex «objectClass=grupoPosix».",
+"Defines the filter to apply, when retrieving groups (no placeholders). Example: \"objectClass=posixGroup\"" => "Define o filtro a aplicar cando de recuperan os usuarios (sen comodíns). Exemplo: «objectClass=posixGroup»",
"Connection Settings" => "Axustes da conexión",
"Configuration Active" => "Configuración activa",
"When unchecked, this configuration will be skipped." => "Se está sen marcar, omítese esta configuración.",
@@ -51,8 +48,7 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "Non utilizalo ademais para conexións LDAPS xa que fallará.",
"Case insensitve LDAP server (Windows)" => "Servidor LDAP que non distingue entre maiúsculas e minúsculas (Windows)",
"Turn off SSL certificate validation." => "Desactiva a validación do certificado SSL.",
-"If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Se a conexión só funciona con esta opción importa o certificado SSL do servidor LDAP no teu servidor %s.",
-"Not recommended, use for testing only." => "Non se recomenda. Só para probas.",
+"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Non recomendado, utilizar só para probas! Se a conexión só funciona con esta opción importa o certificado SSL do servidor LDAP no seu servidor %s.",
"Cache Time-To-Live" => "Tempo de persistencia da caché",
"in seconds. A change empties the cache." => "en segundos. Calquera cambio baleira a caché.",
"Directory Settings" => "Axustes do directorio",
diff --git a/apps/user_ldap/l10n/hu_HU.php b/apps/user_ldap/l10n/hu_HU.php
index 61fa37ed95c..6961869f3e0 100644
--- a/apps/user_ldap/l10n/hu_HU.php
+++ b/apps/user_ldap/l10n/hu_HU.php
@@ -29,14 +29,8 @@ $TRANSLATIONS = array(
"Password" => "Jelszó",
"For anonymous access, leave DN and Password empty." => "Bejelentkezés nélküli eléréshez ne töltse ki a DN és Jelszó mezőket!",
"User Login Filter" => "Szűrő a bejelentkezéshez",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Ez a szűrő érvényes a bejelentkezés megkísérlésekor. Ekkor az %%uid változó helyére a bejelentkezési név kerül.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "használja az %%uid változót, pl. \"uid=%%uid\"",
"User List Filter" => "A felhasználók szűrője",
-"Defines the filter to apply, when retrieving users." => "Ez a szűrő érvényes a felhasználók listázásakor.",
-"without any placeholder, e.g. \"objectClass=person\"." => "itt ne használjon változót, pl. \"objectClass=person\".",
"Group Filter" => "A csoportok szűrője",
-"Defines the filter to apply, when retrieving groups." => "Ez a szűrő érvényes a csoportok listázásakor.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "itt ne használjunk változót, pl. \"objectClass=posixGroup\".",
"Connection Settings" => "Kapcsolati beállítások",
"Configuration Active" => "A beállítás aktív",
"When unchecked, this configuration will be skipped." => "Ha nincs kipipálva, ez a beállítás kihagyódik.",
@@ -49,7 +43,6 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "LDAPS kapcsolatok esetén ne kapcsoljuk be, mert nem fog működni.",
"Case insensitve LDAP server (Windows)" => "Az LDAP-kiszolgáló nem tesz különbséget a kis- és nagybetűk között (Windows)",
"Turn off SSL certificate validation." => "Ne ellenőrizzük az SSL-tanúsítvány érvényességét",
-"Not recommended, use for testing only." => "Nem javasolt, csak tesztelésre érdemes használni.",
"Cache Time-To-Live" => "A gyorsítótár tárolási időtartama",
"in seconds. A change empties the cache." => "másodpercben. A változtatás törli a cache tartalmát.",
"Directory Settings" => "Címtár beállítások",
diff --git a/apps/user_ldap/l10n/id.php b/apps/user_ldap/l10n/id.php
index efaf8e3c926..9580725616d 100644
--- a/apps/user_ldap/l10n/id.php
+++ b/apps/user_ldap/l10n/id.php
@@ -27,14 +27,8 @@ $TRANSLATIONS = array(
"Password" => "Sandi",
"For anonymous access, leave DN and Password empty." => "Untuk akses anonim, biarkan DN dan Kata sandi kosong.",
"User Login Filter" => "gunakan saringan login",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Definisikan filter untuk diterapkan, saat login dilakukan. %%uid menggantikan username saat login.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "gunakan pengganti %%uid, mis. \"uid=%%uid\"",
"User List Filter" => "Daftar Filter Pengguna",
-"Defines the filter to apply, when retrieving users." => "Definisikan filter untuk diterapkan saat menerima pengguna.",
-"without any placeholder, e.g. \"objectClass=person\"." => "tanpa pengganti apapun, mis. \"objectClass=seseorang\".",
"Group Filter" => "saringan grup",
-"Defines the filter to apply, when retrieving groups." => "Definisikan filter untuk diterapkan saat menerima grup.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "tanpa pengganti apapaun, mis. \"objectClass=posixGroup\".",
"Connection Settings" => "Pengaturan Koneksi",
"Configuration Active" => "Konfigurasi Aktif",
"When unchecked, this configuration will be skipped." => "Jika tidak dicentang, konfigurasi ini dilewati.",
@@ -47,7 +41,6 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "Jangan gunakan utamanya untuk koneksi LDAPS, koneksi akan gagal.",
"Case insensitve LDAP server (Windows)" => "Server LDAP dengan kapitalisasi tidak sensitif (Windows)",
"Turn off SSL certificate validation." => "matikan validasi sertivikat SSL",
-"Not recommended, use for testing only." => "tidak disarankan, gunakan hanya untuk pengujian.",
"Cache Time-To-Live" => "Gunakan Tembolok untuk Time-To-Live",
"in seconds. A change empties the cache." => "dalam detik. perubahan mengosongkan cache",
"Directory Settings" => "Pengaturan Direktori",
diff --git a/apps/user_ldap/l10n/it.php b/apps/user_ldap/l10n/it.php
index 0a44850fdb0..4b47846f227 100644
--- a/apps/user_ldap/l10n/it.php
+++ b/apps/user_ldap/l10n/it.php
@@ -30,14 +30,11 @@ $TRANSLATIONS = array(
"Password" => "Password",
"For anonymous access, leave DN and Password empty." => "Per l'accesso anonimo, lasciare vuoti i campi DN e Password",
"User Login Filter" => "Filtro per l'accesso utente",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Specifica quale filtro utilizzare quando si tenta l'accesso. %%uid sostituisce il nome utente all'atto dell'accesso.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "utilizza il segnaposto %%uid, ad esempio \"uid=%%uid\"",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "Specifica quale filtro utilizzare quando si tenta l'accesso. %%uid sostituisce il nome utente all'atto dell'accesso. Esempio: \"uid=%%uid\"",
"User List Filter" => "Filtro per l'elenco utenti",
-"Defines the filter to apply, when retrieving users." => "Specifica quale filtro utilizzare durante il recupero degli utenti.",
-"without any placeholder, e.g. \"objectClass=person\"." => "senza nessun segnaposto, per esempio \"objectClass=person\".",
+"Defines the filter to apply, when retrieving users (no placeholders). Example: \"objectClass=person\"" => "Specifica quale filtro utilizzare durante il recupero degli utenti (nessun segnaposto). Esempio: \"objectClass=person\"",
"Group Filter" => "Filtro per il gruppo",
-"Defines the filter to apply, when retrieving groups." => "Specifica quale filtro utilizzare durante il recupero dei gruppi.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "senza nessun segnaposto, per esempio \"objectClass=posixGroup\".",
+"Defines the filter to apply, when retrieving groups (no placeholders). Example: \"objectClass=posixGroup\"" => "Specifica quale filtro utilizzare durante il recupero dei gruppi (nessun segnaposto). Esempio: \"objectClass=posixGroup\"",
"Connection Settings" => "Impostazioni di connessione",
"Configuration Active" => "Configurazione attiva",
"When unchecked, this configuration will be skipped." => "Se deselezionata, questa configurazione sarà saltata.",
@@ -51,8 +48,7 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "Da non utilizzare per le connessioni LDAPS, non funzionerà.",
"Case insensitve LDAP server (Windows)" => "Case insensitve LDAP server (Windows)",
"Turn off SSL certificate validation." => "Disattiva il controllo del certificato SSL.",
-"If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Se la connessione funziona esclusivamente con questa opzione, importa il certificato SSL del server LDAP nel tuo server %s.",
-"Not recommended, use for testing only." => "Non consigliato, utilizzare solo per test.",
+"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Non consigliata, da utilizzare solo per test! Se la connessione funziona solo con questa opzione, importa il certificate SSL del server LDAP sul tuo server %s.",
"Cache Time-To-Live" => "Tempo di vita della cache",
"in seconds. A change empties the cache." => "in secondi. Il cambio svuota la cache.",
"Directory Settings" => "Impostazioni delle cartelle",
diff --git a/apps/user_ldap/l10n/ja_JP.php b/apps/user_ldap/l10n/ja_JP.php
index d87a0f065b3..e9ef2165bb3 100644
--- a/apps/user_ldap/l10n/ja_JP.php
+++ b/apps/user_ldap/l10n/ja_JP.php
@@ -30,14 +30,11 @@ $TRANSLATIONS = array(
"Password" => "パスワード",
"For anonymous access, leave DN and Password empty." => "匿名アクセスの場合は、DNとパスワードを空にしてください。",
"User Login Filter" => "ユーザログインフィルタ",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "ログインするときに適用するフィルターを定義する。%%uid がログイン時にユーザー名に置き換えられます。",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "%%uid プレースホルダーを利用してください。例 \"uid=%%uid\"",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "ログイン実行時に適用するフィルタを定義します。%%uid にはログイン操作におけるユーザ名が入ります。例: \"uid=%%uid\"",
"User List Filter" => "ユーザリストフィルタ",
-"Defines the filter to apply, when retrieving users." => "ユーザーを取得するときに適用するフィルターを定義する。",
-"without any placeholder, e.g. \"objectClass=person\"." => "プレースホルダーを利用しないでください。例 \"objectClass=person\"",
+"Defines the filter to apply, when retrieving users (no placeholders). Example: \"objectClass=person\"" => "ユーザ取得時に適用するフィルタを定義します(プレースホルダ無し)。例: \"objectClass=person\"",
"Group Filter" => "グループフィルタ",
-"Defines the filter to apply, when retrieving groups." => "グループを取得するときに適用するフィルターを定義する。",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "プレースホルダーを利用しないでください。例 \"objectClass=posixGroup\"",
+"Defines the filter to apply, when retrieving groups (no placeholders). Example: \"objectClass=posixGroup\"" => "グループ取得時に適用するフィルタを定義します(プレースホルダ無し)。例: \"objectClass=posixGroup\"",
"Connection Settings" => "接続設定",
"Configuration Active" => "設定はアクティブです",
"When unchecked, this configuration will be skipped." => "チェックを外すと、この設定はスキップされます。",
@@ -51,8 +48,7 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "LDAPS接続のために追加でそれを利用しないで下さい。失敗します。",
"Case insensitve LDAP server (Windows)" => "大文字/小文字を区別しないLDAPサーバ(Windows)",
"Turn off SSL certificate validation." => "SSL証明書の確認を無効にする。",
-"If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "接続がこのオプションでのみ動作する場合は、LDAPサーバのSSL証明書を %s サーバにインポートしてください。",
-"Not recommended, use for testing only." => "推奨しません、テスト目的でのみ利用してください。",
+"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "推奨されません、テストにおいてのみ使用してください!このオプションでのみ接続が動作する場合は、LDAP サーバのSSL証明書を %s サーバにインポートしてください。",
"Cache Time-To-Live" => "キャッシュのTTL",
"in seconds. A change empties the cache." => "秒。変更後にキャッシュがクリアされます。",
"Directory Settings" => "ディレクトリ設定",
diff --git a/apps/user_ldap/l10n/ka_GE.php b/apps/user_ldap/l10n/ka_GE.php
index 7317a257daf..860e8933b0d 100644
--- a/apps/user_ldap/l10n/ka_GE.php
+++ b/apps/user_ldap/l10n/ka_GE.php
@@ -27,14 +27,8 @@ $TRANSLATIONS = array(
"Password" => "პაროლი",
"For anonymous access, leave DN and Password empty." => "ანონიმური დაშვებისთვის, დატოვეთ DN–ის და პაროლის ველები ცარიელი.",
"User Login Filter" => "მომხმარებლის ფილტრი",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "როცა შემოსვლა განხორციელდება ასეიძლება მოვახდინოთ გაფილტვრა. %%uid შეიცვლება იუზერნეიმით მომხმარებლის ველში.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "გამოიყენეთ %%uid დამასრულებელი მაგ: \"uid=%%uid\"",
"User List Filter" => "მომხმარებლებიის სიის ფილტრი",
-"Defines the filter to apply, when retrieving users." => "გაფილტვრა განხორციელდება, როცა მომხმარებლების სია ჩამოიტვირთება.",
-"without any placeholder, e.g. \"objectClass=person\"." => "ყოველგვარი დამასრულებელის გარეშე, მაგ: \"objectClass=person\".",
"Group Filter" => "ჯგუფის ფილტრი",
-"Defines the filter to apply, when retrieving groups." => "გაფილტვრა განხორციელდება, როცა ჯგუფის სია ჩამოიტვირთება.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "ყოველგვარი დამასრულებელის გარეშე, მაგ: \"objectClass=posixGroup\".",
"Connection Settings" => "კავშირის პარამეტრები",
"Configuration Active" => "კონფიგურაცია აქტიურია",
"When unchecked, this configuration will be skipped." => "როცა გადანიშნულია, ეს კონფიგურაცია გამოტოვებული იქნება.",
@@ -47,7 +41,6 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "არ გამოიყენოთ დამატებით LDAPS კავშირი. ის წარუმატებლად დასრულდება.",
"Case insensitve LDAP server (Windows)" => "LDAP server (Windows)",
"Turn off SSL certificate validation." => "გამორთეთ SSL სერთიფიკატის ვალიდაცია.",
-"Not recommended, use for testing only." => "არ არის რეკომენდირებული, გამოიყენეთ მხოლოდ სატესტოდ.",
"Cache Time-To-Live" => "ქეშის სიცოცხლის ხანგრძლივობა",
"in seconds. A change empties the cache." => "წამებში. ცვლილება ასუფთავებს ქეშს.",
"Directory Settings" => "დირექტორიის პარამეტრები",
diff --git a/apps/user_ldap/l10n/ko.php b/apps/user_ldap/l10n/ko.php
index 650781fe4a2..a5a2798165c 100644
--- a/apps/user_ldap/l10n/ko.php
+++ b/apps/user_ldap/l10n/ko.php
@@ -16,14 +16,8 @@ $TRANSLATIONS = array(
"Password" => "암호",
"For anonymous access, leave DN and Password empty." => "익명 접근을 허용하려면 DN과 암호를 비워 두십시오.",
"User Login Filter" => "사용자 로그인 필터",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "로그인을 시도할 때 적용할 필터입니다. %%uid는 로그인 작업에서의 사용자 이름으로 대체됩니다.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "%%uid 자리 비움자를 사용하십시오. 예제: \"uid=%%uid\"\"",
"User List Filter" => "사용자 목록 필터",
-"Defines the filter to apply, when retrieving users." => "사용자를 검색할 때 적용할 필터를 정의합니다.",
-"without any placeholder, e.g. \"objectClass=person\"." => "자리 비움자를 사용할 수 없습니다. 예제: \"objectClass=person\"",
"Group Filter" => "그룹 필터",
-"Defines the filter to apply, when retrieving groups." => "그룹을 검색할 때 적용할 필터를 정의합니다.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "자리 비움자를 사용할 수 없습니다. 예제: \"objectClass=posixGroup\"",
"Connection Settings" => "연결 설정",
"Configuration Active" => "구성 활성화",
"Port" => "포트",
@@ -33,7 +27,6 @@ $TRANSLATIONS = array(
"Use TLS" => "TLS 사용",
"Case insensitve LDAP server (Windows)" => "서버에서 대소문자를 구분하지 않음 (Windows)",
"Turn off SSL certificate validation." => "SSL 인증서 유효성 검사를 해제합니다.",
-"Not recommended, use for testing only." => "추천하지 않음, 테스트로만 사용하십시오.",
"in seconds. A change empties the cache." => "초. 항목 변경 시 캐시가 갱신됩니다.",
"Directory Settings" => "디렉토리 설정",
"User Display Name Field" => "사용자의 표시 이름 필드",
diff --git a/apps/user_ldap/l10n/lt_LT.php b/apps/user_ldap/l10n/lt_LT.php
index 3046824e6c1..7e8b389af7f 100644
--- a/apps/user_ldap/l10n/lt_LT.php
+++ b/apps/user_ldap/l10n/lt_LT.php
@@ -7,7 +7,6 @@ $TRANSLATIONS = array(
"Port" => "Prievadas",
"Use TLS" => "Naudoti TLS",
"Turn off SSL certificate validation." => "Išjungti SSL sertifikato tikrinimą.",
-"Not recommended, use for testing only." => "Nerekomenduojama, naudokite tik testavimui.",
"Help" => "Pagalba"
);
$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/apps/user_ldap/l10n/lv.php b/apps/user_ldap/l10n/lv.php
index 7d3d088b40a..11a68fffeb4 100644
--- a/apps/user_ldap/l10n/lv.php
+++ b/apps/user_ldap/l10n/lv.php
@@ -26,14 +26,8 @@ $TRANSLATIONS = array(
"Password" => "Parole",
"For anonymous access, leave DN and Password empty." => "Lai piekļūtu anonīmi, atstājiet DN un paroli tukšu.",
"User Login Filter" => "Lietotāja ierakstīšanās filtrs",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Definē filtru, ko izmantot, kad mēģina ierakstīties. %%uid ierakstīšanās darbībā aizstāj lietotājvārdu.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "lieto %%uid vietturi, piemēram, \"uid=%%uid\"",
"User List Filter" => "Lietotāju saraksta filtrs",
-"Defines the filter to apply, when retrieving users." => "Definē filtru, ko izmantot, kad saņem lietotāju sarakstu.",
-"without any placeholder, e.g. \"objectClass=person\"." => "bez jebkādiem vietturiem, piemēram, \"objectClass=person\".",
"Group Filter" => "Grupu filtrs",
-"Defines the filter to apply, when retrieving groups." => "Definē filtru, ko izmantot, kad saņem grupu sarakstu.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "bez jebkādiem vietturiem, piemēram, \"objectClass=posixGroup\".",
"Connection Settings" => "Savienojuma iestatījumi",
"Configuration Active" => "Konfigurācija ir aktīva",
"When unchecked, this configuration will be skipped." => "Ja nav atzīmēts, šī konfigurācija tiks izlaista.",
@@ -46,7 +40,6 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "Neizmanto papildu LDAPS savienojumus! Tas nestrādās.",
"Case insensitve LDAP server (Windows)" => "Reģistrnejutīgs LDAP serveris (Windows)",
"Turn off SSL certificate validation." => "Izslēgt SSL sertifikātu validēšanu.",
-"Not recommended, use for testing only." => "Nav ieteicams, izmanto tikai testēšanai!",
"Cache Time-To-Live" => "Kešatmiņas dzīvlaiks",
"in seconds. A change empties the cache." => "sekundēs. Izmaiņas iztukšos kešatmiņu.",
"Directory Settings" => "Direktorijas iestatījumi",
diff --git a/apps/user_ldap/l10n/nb_NO.php b/apps/user_ldap/l10n/nb_NO.php
index 8f1c338b124..8c482ed2a55 100644
--- a/apps/user_ldap/l10n/nb_NO.php
+++ b/apps/user_ldap/l10n/nb_NO.php
@@ -27,14 +27,8 @@ $TRANSLATIONS = array(
"Password" => "Passord",
"For anonymous access, leave DN and Password empty." => "For anonym tilgang, la DN- og passord-feltet stå tomt.",
"User Login Filter" => "Brukerpålogging filter",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Definerer filteret som skal brukes når et påloggingsforsøk blir utført. %%uid erstatter brukernavnet i innloggingshandlingen.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "bruk %%uid plassholder, f.eks. \"uid=%%uid\"",
"User List Filter" => "Brukerliste filter",
-"Defines the filter to apply, when retrieving users." => "Definerer filteret som skal brukes, når systemet innhenter brukere.",
-"without any placeholder, e.g. \"objectClass=person\"." => "uten noe plassholder, f.eks. \"objectClass=person\".",
"Group Filter" => "Gruppefilter",
-"Defines the filter to apply, when retrieving groups." => "Definerer filteret som skal brukes, når systemet innhenter grupper.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "uten noe plassholder, f.eks. \"objectClass=posixGroup\".",
"Configuration Active" => "Konfigurasjon aktiv",
"When unchecked, this configuration will be skipped." => "Når ikke huket av så vil denne konfigurasjonen bli hoppet over.",
"Port" => "Port",
@@ -42,7 +36,6 @@ $TRANSLATIONS = array(
"Use TLS" => "Bruk TLS",
"Case insensitve LDAP server (Windows)" => "Case-insensitiv LDAP tjener (Windows)",
"Turn off SSL certificate validation." => "Slå av SSL-sertifikat validering",
-"Not recommended, use for testing only." => "Ikke anbefalt, bruk kun for testing",
"in seconds. A change empties the cache." => "i sekunder. En endring tømmer bufferen.",
"User Display Name Field" => "Vis brukerens navnfelt",
"Base User Tree" => "Hovedbruker tre",
diff --git a/apps/user_ldap/l10n/nl.php b/apps/user_ldap/l10n/nl.php
index 1a67cd409dc..b56dcf15791 100644
--- a/apps/user_ldap/l10n/nl.php
+++ b/apps/user_ldap/l10n/nl.php
@@ -30,14 +30,11 @@ $TRANSLATIONS = array(
"Password" => "Wachtwoord",
"For anonymous access, leave DN and Password empty." => "Voor anonieme toegang, laat de DN en het wachtwoord leeg.",
"User Login Filter" => "Gebruikers Login Filter",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Definiëerd de toe te passen filter indien er geprobeerd wordt in te loggen. %%uid vervangt de gebruikersnaam in de login actie.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "gebruik %%uid placeholder, bijv. \"uid=%%uid\"",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "Definiëert het toe te passen filter als er geprobeerd wordt in te loggen. %%uid vervangt de gebruikersnaam bij het inloggen. Bijvoorbeeld: \"uid=%%uid\"",
"User List Filter" => "Gebruikers Lijst Filter",
-"Defines the filter to apply, when retrieving users." => "Definiëerd de toe te passen filter voor het ophalen van gebruikers.",
-"without any placeholder, e.g. \"objectClass=person\"." => "zonder een placeholder, bijv. \"objectClass=person\"",
+"Defines the filter to apply, when retrieving users (no placeholders). Example: \"objectClass=person\"" => "Definieert het toe te passen filter bij het ophalen van gebruikers (geen tijdelijke aanduidingen). Bijvoorbeeld: \"objectClass=person\"",
"Group Filter" => "Groep Filter",
-"Defines the filter to apply, when retrieving groups." => "Definiëerd de toe te passen filter voor het ophalen van groepen.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "zonder een placeholder, bijv. \"objectClass=posixGroup\"",
+"Defines the filter to apply, when retrieving groups (no placeholders). Example: \"objectClass=posixGroup\"" => "Definieert het toe te passen filter bij het ophalen van groepen (geen tijdelijke aanduidingen). Bijvoorbeeld: \"objectClass=posixGroup\"",
"Connection Settings" => "Verbindingsinstellingen",
"Configuration Active" => "Configuratie actief",
"When unchecked, this configuration will be skipped." => "Als dit niet is ingeschakeld wordt deze configuratie overgeslagen.",
@@ -51,8 +48,7 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "Gebruik het niet voor LDAPS verbindingen, dat gaat niet lukken.",
"Case insensitve LDAP server (Windows)" => "Niet-hoofdlettergevoelige LDAP server (Windows)",
"Turn off SSL certificate validation." => "Schakel SSL certificaat validatie uit.",
-"If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Als de connectie alleen werkt met deze optie, importeer dan het LDAP server SSL certificaat naar de %s server.",
-"Not recommended, use for testing only." => "Niet aangeraden, gebruik alleen voor test doeleinden.",
+"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Niet aanbevolen, gebruik alleen om te testen! Als de connectie alleen werkt met deze optie, importeer dan het SSL-certificaat van de LDAP-server naar uw %s server.",
"Cache Time-To-Live" => "Cache time-to-live",
"in seconds. A change empties the cache." => "in seconden. Een verandering maakt de cache leeg.",
"Directory Settings" => "Mapinstellingen",
@@ -76,10 +72,13 @@ $TRANSLATIONS = array(
"User Home Folder Naming Rule" => "Gebruikers Home map naamgevingsregel",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Laat leeg voor de gebruikersnaam (standaard). Of, specificeer een LDAP/AD attribuut.",
"Internal Username" => "Interne gebruikersnaam",
+"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." => "Standaard wordt de interne gebruikersnaam aangemaakt op basis van het UUID attribuut. Het zorgt ervoor dat de gebruikersnaam uniek is en dat tekens niet hoeven te worden geconverteerd. De interne gebruikersnaam heeft als beperking dat alleen deze tekens zijn toegestaan​​: [a-zA-Z0-9_.@- ]. Andere tekens worden vervangen door hun ASCII vertaling of gewoonweg weggelaten. Bij identieke namen wordt een nummer toegevoegd of verhoogd. De interne gebruikersnaam wordt gebruikt om een ​​gebruiker binnen het systeem te herkennen. Het is ook de standaardnaam voor de standaardmap van de gebruiker in ownCloud. Het is ook een vertaling voor externe URL's, bijvoorbeeld voor alle *DAV diensten. Met deze instelling kan het standaardgedrag worden overschreven. Om een soortgelijk gedrag te bereiken als van vóór ownCloud 5, voer het gebruikersweergavenaam attribuut in in het volgende veld. Laat het leeg voor standaard gedrag. Veranderingen worden alleen toegepast op gekoppelde (toegevoegde) LDAP-gebruikers.",
"Internal Username Attribute:" => "Interne gebruikersnaam attribuut:",
"Override UUID detection" => "Negeren UUID detectie",
+"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." => "Standaard herkent ownCloud het UUID-attribuut automatisch. Het UUID attribuut wordt gebruikt om LDAP-gebruikers en -groepen uniek te identificeren. Ook zal de interne gebruikersnaam worden aangemaakt op basis van het UUID, tenzij deze hierboven anders is aangegeven. U kunt de instelling overschrijven en zelf een waarde voor het attribuut opgeven. U moet ervoor zorgen dat het ingestelde attribuut kan worden opgehaald voor zowel gebruikers als groepen en dat het uniek is. Laat het leeg voor standaard gedrag. Veranderingen worden alleen doorgevoerd op nieuw gekoppelde (toegevoegde) LDAP-gebruikers en-groepen.",
"UUID Attribute:" => "UUID Attribuut:",
"Username-LDAP User Mapping" => "Gebruikersnaam-LDAP gebruikers vertaling",
+"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a 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 maakt gebruik van gebruikersnamen om (meta) data op te slaan en toe te wijzen. Om gebruikers uniek te identificeren, krijgt elke LDAP-gebruiker ook een interne gebruikersnaam. Dit vereist een koppeling van de ownCloud gebruikersnaam aan een ​​LDAP-gebruiker. De gecreëerde gebruikersnaam is gekoppeld aan de UUID van de LDAP-gebruiker. Aanvullend wordt ook de 'DN' gecached om het aantal LDAP-interacties te verminderen, maar dit wordt niet gebruikt voor identificatie. Als de DN verandert, zullen de veranderingen worden gevonden. De interne naam wordt overal gebruikt. Het wissen van de koppeling zal overal resten achterlaten. Het wissen van koppelingen is niet configuratiegevoelig, maar het raakt wel alle LDAP instellingen! Zorg ervoor dat deze koppelingen nooit in een productieomgeving gewist worden. Maak ze alleen leeg in een test- of ontwikkelomgeving.",
"Clear Username-LDAP User Mapping" => "Leegmaken Gebruikersnaam-LDAP gebruikers vertaling",
"Clear Groupname-LDAP Group Mapping" => "Leegmaken Groepsnaam-LDAP groep vertaling",
"Test Configuration" => "Test configuratie",
diff --git a/apps/user_ldap/l10n/pl.php b/apps/user_ldap/l10n/pl.php
index 87dfe41a317..7801f73dc12 100644
--- a/apps/user_ldap/l10n/pl.php
+++ b/apps/user_ldap/l10n/pl.php
@@ -29,14 +29,8 @@ $TRANSLATIONS = array(
"Password" => "Hasło",
"For anonymous access, leave DN and Password empty." => "Dla dostępu anonimowego pozostawić DN i hasło puste.",
"User Login Filter" => "Filtr logowania użytkownika",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Definiuje filtr do zastosowania, gdy podejmowana jest próba logowania. %%uid zastępuje nazwę użytkownika w działaniu logowania.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "Użyj %%uid zastępczy, np. \"uid=%%uid\"",
"User List Filter" => "Lista filtrów użytkownika",
-"Defines the filter to apply, when retrieving users." => "Definiuje filtry do zastosowania, podczas pobierania użytkowników.",
-"without any placeholder, e.g. \"objectClass=person\"." => "bez żadnych symboli zastępczych np. \"objectClass=person\".",
"Group Filter" => "Grupa filtrów",
-"Defines the filter to apply, when retrieving groups." => "Definiuje filtry do zastosowania, podczas pobierania grup.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "bez żadnych symboli zastępczych np. \"objectClass=posixGroup\".",
"Connection Settings" => "Konfiguracja połączeń",
"Configuration Active" => "Konfiguracja archiwum",
"When unchecked, this configuration will be skipped." => "Gdy niezaznaczone, ta konfiguracja zostanie pominięta.",
@@ -49,7 +43,6 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "Nie używaj go dodatkowo dla połączeń protokołu LDAPS, zakończy się niepowodzeniem.",
"Case insensitve LDAP server (Windows)" => "Wielkość liter serwera LDAP (Windows)",
"Turn off SSL certificate validation." => "Wyłączyć sprawdzanie poprawności certyfikatu SSL.",
-"Not recommended, use for testing only." => "Niezalecane, użyj tylko testowo.",
"Cache Time-To-Live" => "Przechowuj czas życia",
"in seconds. A change empties the cache." => "w sekundach. Zmiana opróżnia pamięć podręczną.",
"Directory Settings" => "Ustawienia katalogów",
diff --git a/apps/user_ldap/l10n/pt_BR.php b/apps/user_ldap/l10n/pt_BR.php
index 0145e8fe2a4..9469146d359 100644
--- a/apps/user_ldap/l10n/pt_BR.php
+++ b/apps/user_ldap/l10n/pt_BR.php
@@ -30,14 +30,11 @@ $TRANSLATIONS = array(
"Password" => "Senha",
"For anonymous access, leave DN and Password empty." => "Para acesso anônimo, deixe DN e Senha vazios.",
"User Login Filter" => "Filtro de Login de Usuário",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Define o filtro pra aplicar ao efetuar uma tentativa de login. %%uuid substitui o nome de usuário na ação de login.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "use %%uid placeholder, ex. \"uid=%%uid\"",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "Define o filtro a ser aplicado, o login é feito. %%uid substitui o nome do usuário na ação de login. Exemplo: \"uid=%%uid\"",
"User List Filter" => "Filtro de Lista de Usuário",
-"Defines the filter to apply, when retrieving users." => "Define filtro a ser aplicado ao obter usuários.",
-"without any placeholder, e.g. \"objectClass=person\"." => "sem nenhum espaço reservado, ex. \"objectClass=person\".",
+"Defines the filter to apply, when retrieving users (no placeholders). Example: \"objectClass=person\"" => "Define o filtro a ser aplicado, ao recuperar usuários (sem espaços reservados). Exemplo: \"objectClass=person\"",
"Group Filter" => "Filtro de Grupo",
-"Defines the filter to apply, when retrieving groups." => "Define o filtro a aplicar ao obter grupos.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "sem nenhum espaço reservado, ex. \"objectClass=posixGroup\"",
+"Defines the filter to apply, when retrieving groups (no placeholders). Example: \"objectClass=posixGroup\"" => "Define o filtro a ser aplicado, ao recuperar grupos (sem espaços reservados). Exemplo: \"objectClass=posixGroup\"",
"Connection Settings" => "Configurações de Conexão",
"Configuration Active" => "Configuração ativa",
"When unchecked, this configuration will be skipped." => "Quando não marcada, esta configuração será ignorada.",
@@ -51,8 +48,7 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "Não use adicionalmente para conexões LDAPS, pois falhará.",
"Case insensitve LDAP server (Windows)" => "Servidor LDAP sensível à caixa alta (Windows)",
"Turn off SSL certificate validation." => "Desligar validação de certificado SSL.",
-"If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Se a conexão só funciona com esta opção, importe o certificado SSL do servidor LDAP no seu servidor %s.",
-"Not recommended, use for testing only." => "Não recomendado, use somente para testes.",
+"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Não recomendado, use-o somente para teste! Se a conexão só funciona com esta opção, importar o certificado SSL do servidor LDAP em seu servidor %s.",
"Cache Time-To-Live" => "Cache Time-To-Live",
"in seconds. A change empties the cache." => "em segundos. Uma mudança esvaziará o cache.",
"Directory Settings" => "Configurações de Diretório",
diff --git a/apps/user_ldap/l10n/pt_PT.php b/apps/user_ldap/l10n/pt_PT.php
index 0abb049a155..b88ad18f0f6 100644
--- a/apps/user_ldap/l10n/pt_PT.php
+++ b/apps/user_ldap/l10n/pt_PT.php
@@ -29,14 +29,8 @@ $TRANSLATIONS = array(
"Password" => "Password",
"For anonymous access, leave DN and Password empty." => "Para acesso anónimo, deixe DN e a Palavra-passe vazios.",
"User Login Filter" => "Filtro de login de utilizador",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Define o filtro a aplicar, para aquando de uma tentativa de login. %%uid substitui o nome de utilizador utilizado.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "Use a variável %%uid , exemplo: \"uid=%%uid\"",
"User List Filter" => "Utilizar filtro",
-"Defines the filter to apply, when retrieving users." => "Defina o filtro a aplicar, ao recuperar utilizadores.",
-"without any placeholder, e.g. \"objectClass=person\"." => "Sem variável. Exemplo: \"objectClass=pessoa\".",
"Group Filter" => "Filtrar por grupo",
-"Defines the filter to apply, when retrieving groups." => "Defina o filtro a aplicar, ao recuperar grupos.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "Sem nenhuma variável. Exemplo: \"objectClass=posixGroup\".",
"Connection Settings" => "Definições de ligação",
"Configuration Active" => "Configuração activa",
"When unchecked, this configuration will be skipped." => "Se não estiver marcada, esta definição não será tida em conta.",
@@ -49,7 +43,6 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "Não utilize para adicionar ligações LDAP, irá falhar!",
"Case insensitve LDAP server (Windows)" => "Servidor LDAP (Windows) não sensível a maiúsculas.",
"Turn off SSL certificate validation." => "Desligar a validação de certificado SSL.",
-"Not recommended, use for testing only." => "Não recomendado, utilizado apenas para testes!",
"Cache Time-To-Live" => "Cache do tempo de vida dos objetos no servidor",
"in seconds. A change empties the cache." => "em segundos. Uma alteração esvazia a cache.",
"Directory Settings" => "Definições de directorias",
diff --git a/apps/user_ldap/l10n/ro.php b/apps/user_ldap/l10n/ro.php
index cdc94e6a493..a0bacccb707 100644
--- a/apps/user_ldap/l10n/ro.php
+++ b/apps/user_ldap/l10n/ro.php
@@ -14,19 +14,12 @@ $TRANSLATIONS = array(
"Password" => "Parolă",
"For anonymous access, leave DN and Password empty." => "Pentru acces anonim, lăsați DN și Parolă libere.",
"User Login Filter" => "Filtrare după Nume Utilizator",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Definește fitrele care trebuie aplicate, când se încearcă conectarea. %%uid înlocuiește numele utilizatorului în procesul de conectare.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "folosiți substituentul %%uid , d.e. \"uid=%%uid\"",
"User List Filter" => "Filtrarea după lista utilizatorilor",
-"Defines the filter to apply, when retrieving users." => "Definește filtrele care trebui aplicate, când se peiau utilzatorii.",
-"without any placeholder, e.g. \"objectClass=person\"." => "fără substituenți, d.e. \"objectClass=person\".",
"Group Filter" => "Fitrare Grup",
-"Defines the filter to apply, when retrieving groups." => "Definește filtrele care se aplică, când se preiau grupurile.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "fără substituenți, d.e. \"objectClass=posixGroup\"",
"Port" => "Portul",
"Use TLS" => "Utilizează TLS",
"Case insensitve LDAP server (Windows)" => "Server LDAP insensibil la majuscule (Windows)",
"Turn off SSL certificate validation." => "Oprește validarea certificatelor SSL ",
-"Not recommended, use for testing only." => "Nu este recomandat, a se utiliza doar pentru testare.",
"in seconds. A change empties the cache." => "în secunde. O schimbare curăță memoria tampon.",
"User Display Name Field" => "Câmpul cu numele vizibil al utilizatorului",
"Base User Tree" => "Arborele de bază al Utilizatorilor",
diff --git a/apps/user_ldap/l10n/ru.php b/apps/user_ldap/l10n/ru.php
index ef115f6bbd7..f26e26f1e77 100644
--- a/apps/user_ldap/l10n/ru.php
+++ b/apps/user_ldap/l10n/ru.php
@@ -30,14 +30,8 @@ $TRANSLATIONS = array(
"Password" => "Пароль",
"For anonymous access, leave DN and Password empty." => "Для анонимного доступа оставьте DN и пароль пустыми.",
"User Login Filter" => "Фильтр входа пользователей",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Определяет фильтр для применения при попытке входа. %%uid заменяет имя пользователя при входе в систему.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "используйте заполнитель %%uid, например: \"uid=%%uid\"",
"User List Filter" => "Фильтр списка пользователей",
-"Defines the filter to apply, when retrieving users." => "Определяет фильтр для применения при получении пользователей.",
-"without any placeholder, e.g. \"objectClass=person\"." => "без заполнителя, например: \"objectClass=person\".",
"Group Filter" => "Фильтр группы",
-"Defines the filter to apply, when retrieving groups." => "Определяет фильтр для применения при получении группы.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "без заполнения, например \"objectClass=posixGroup\".",
"Connection Settings" => "Настройки подключения",
"Configuration Active" => "Конфигурация активна",
"When unchecked, this configuration will be skipped." => "Когда галочка снята, эта конфигурация будет пропущена.",
@@ -50,7 +44,6 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "Не используйте совместно с безопасными подключениями (LDAPS), это не сработает.",
"Case insensitve LDAP server (Windows)" => "Нечувствительный к регистру сервер LDAP (Windows)",
"Turn off SSL certificate validation." => "Отключить проверку сертификата SSL.",
-"Not recommended, use for testing only." => "Не рекомендуется, используйте только для тестирования.",
"Cache Time-To-Live" => "Кэш времени жизни",
"in seconds. A change empties the cache." => "в секундах. Изменение очистит кэш.",
"Directory Settings" => "Настройки каталога",
diff --git a/apps/user_ldap/l10n/ru_RU.php b/apps/user_ldap/l10n/ru_RU.php
deleted file mode 100644
index 623d8f2d8ec..00000000000
--- a/apps/user_ldap/l10n/ru_RU.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Success" => "Успех",
-"Error" => "Ошибка"
-);
-$PLURAL_FORMS = "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/si_LK.php b/apps/user_ldap/l10n/si_LK.php
index 21c8f047ff6..5d2db636cf0 100644
--- a/apps/user_ldap/l10n/si_LK.php
+++ b/apps/user_ldap/l10n/si_LK.php
@@ -9,10 +9,8 @@ $TRANSLATIONS = array(
"User Login Filter" => "පරිශීලක පිවිසුම් පෙරහන",
"User List Filter" => "පරිශීලක ලැයිස්තු පෙරහන",
"Group Filter" => "කණ්ඩායම් පෙරහන",
-"Defines the filter to apply, when retrieving groups." => "කණ්ඩායම් සොයා ලබාගන්නා විට, යොදන පෙරහන නියම කරයි",
"Port" => "තොට",
"Use TLS" => "TLS භාවිතා කරන්න",
-"Not recommended, use for testing only." => "නිර්දේශ කළ නොහැක. පරීක්ෂණ සඳහා පමණක් භාවිත කරන්න",
"Help" => "උදව්"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/user_ldap/l10n/sk_SK.php b/apps/user_ldap/l10n/sk_SK.php
index f02828daf70..df71a71e933 100644
--- a/apps/user_ldap/l10n/sk_SK.php
+++ b/apps/user_ldap/l10n/sk_SK.php
@@ -30,14 +30,11 @@ $TRANSLATIONS = array(
"Password" => "Heslo",
"For anonymous access, leave DN and Password empty." => "Pre anonymný prístup ponechajte údaje DN a Heslo prázdne.",
"User Login Filter" => "Filter prihlásenia používateľov",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Určuje použitý filter, pri pokuse o prihlásenie. %%uid nahradzuje používateľské meno v činnosti prihlásenia.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "použite zástupný vzor %%uid, napr. \\\"uid=%%uid\\\"",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "Určuje použitý filter, pri pokuse o prihlásenie. %%uid nahradzuje používateľské meno v činnosti prihlásenia. Napríklad: \"uid=%%uid\"",
"User List Filter" => "Filter zoznamov používateľov",
-"Defines the filter to apply, when retrieving users." => "Definuje použitý filter, pre získanie používateľov.",
-"without any placeholder, e.g. \"objectClass=person\"." => "bez zástupných znakov, napr. \"objectClass=person\"",
+"Defines the filter to apply, when retrieving users (no placeholders). Example: \"objectClass=person\"" => "Definuje použitý filter, pri získavaní používateľov (bez \"placeholderov\"). Napríklad: \"objectClass=osoba\"",
"Group Filter" => "Filter skupiny",
-"Defines the filter to apply, when retrieving groups." => "Definuje použitý filter, pre získanie skupín.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "bez zástupných znakov, napr. \"objectClass=posixGroup\"",
+"Defines the filter to apply, when retrieving groups (no placeholders). Example: \"objectClass=posixGroup\"" => "Definuje použitý filter, pri získavaní skupín (bez \"placeholderov\"). Napríklad: \"objectClass=posixSkupina\"",
"Connection Settings" => "Nastavenie pripojenia",
"Configuration Active" => "Nastavenia sú aktívne ",
"When unchecked, this configuration will be skipped." => "Ak nie je zaškrtnuté, nastavenie bude preskočené.",
@@ -51,8 +48,7 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "Nepoužívajte pre pripojenie LDAPS, zlyhá.",
"Case insensitve LDAP server (Windows)" => "LDAP server nerozlišuje veľkosť znakov (Windows)",
"Turn off SSL certificate validation." => "Vypnúť overovanie SSL certifikátu.",
-"If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Ak pripojenie pracuje len s touto možnosťou, tak naimportujte SSL certifikát LDAP servera do vášho %s servera.",
-"Not recommended, use for testing only." => "Nie je doporučované, len pre testovacie účely.",
+"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Neodporúčané, použite iba pri testovaní! Pokiaľ spojenie funguje iba z daným nastavením, importujte SSL certifikát LDAP servera do vášho %s servera.",
"Cache Time-To-Live" => "Životnosť objektov v cache",
"in seconds. A change empties the cache." => "v sekundách. Zmena vyprázdni vyrovnávaciu pamäť.",
"Directory Settings" => "Nastavenie priečinka",
diff --git a/apps/user_ldap/l10n/sl.php b/apps/user_ldap/l10n/sl.php
index 80abb79e495..703b643db58 100644
--- a/apps/user_ldap/l10n/sl.php
+++ b/apps/user_ldap/l10n/sl.php
@@ -29,14 +29,8 @@ $TRANSLATIONS = array(
"Password" => "Geslo",
"For anonymous access, leave DN and Password empty." => "Za brezimni dostop sta polji DN in geslo prazni.",
"User Login Filter" => "Filter prijav uporabnikov",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Določi filter, uporabljen pri prijavi. %%uid nadomesti uporabniško ime v postopku prijave.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "Uporabite vsebnik %%uid, npr. \"uid=%%uid\".",
"User List Filter" => "Filter seznama uporabnikov",
-"Defines the filter to apply, when retrieving users." => "Določi filter za uporabo med pridobivanjem uporabnikov.",
-"without any placeholder, e.g. \"objectClass=person\"." => "Brez kateregakoli vsebnika, npr. \"objectClass=person\".",
"Group Filter" => "Filter skupin",
-"Defines the filter to apply, when retrieving groups." => "Določi filter za uporabo med pridobivanjem skupin.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "Brez katerekoli vsebnika, npr. \"objectClass=posixGroup\".",
"Connection Settings" => "Nastavitve povezave",
"Configuration Active" => "Dejavna nastavitev",
"When unchecked, this configuration will be skipped." => "Neizbrana možnost preskoči nastavitev.",
@@ -49,7 +43,6 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "Strežnika ni priporočljivo uporabljati za povezave LDAPS. Povezava bo spodletela.",
"Case insensitve LDAP server (Windows)" => "Strežnik LDAP ne upošteva velikosti črk (Windows)",
"Turn off SSL certificate validation." => "Onemogoči določanje veljavnosti potrdila SSL.",
-"Not recommended, use for testing only." => "Dejanje ni priporočeno; uporabljeno naj bo le za preizkušanje delovanja.",
"Cache Time-To-Live" => "Predpomni podatke TTL",
"in seconds. A change empties the cache." => "v sekundah. Sprememba izprazni predpomnilnik.",
"Directory Settings" => "Nastavitve mape",
diff --git a/apps/user_ldap/l10n/sr.php b/apps/user_ldap/l10n/sr.php
index 7dd12fe5cca..d0c9290dc19 100644
--- a/apps/user_ldap/l10n/sr.php
+++ b/apps/user_ldap/l10n/sr.php
@@ -10,19 +10,12 @@ $TRANSLATIONS = array(
"Password" => "Лозинка",
"For anonymous access, leave DN and Password empty." => "За анониман приступ, оставите поља DN и лозинка празним.",
"User Login Filter" => "Филтер за пријаву корисника",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Одређује филтер за примењивање при покушају пријаве. %%uid замењује корисничко име.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "користите чувар места %%uid, нпр. „uid=%%uid\"",
"User List Filter" => "Филтер за списак корисника",
-"Defines the filter to apply, when retrieving users." => "Одређује филтер за примењивање при прибављању корисника.",
-"without any placeholder, e.g. \"objectClass=person\"." => "без икаквог чувара места, нпр. „objectClass=person“.",
"Group Filter" => "Филтер групе",
-"Defines the filter to apply, when retrieving groups." => "Одређује филтер за примењивање при прибављању група.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "без икаквог чувара места, нпр. „objectClass=posixGroup“.",
"Port" => "Порт",
"Use TLS" => "Користи TLS",
"Case insensitve LDAP server (Windows)" => "LDAP сервер осетљив на велика и мала слова (Windows)",
"Turn off SSL certificate validation." => "Искључите потврду SSL сертификата.",
-"Not recommended, use for testing only." => "Не препоручује се; користите само за тестирање.",
"in seconds. A change empties the cache." => "у секундама. Промена испражњава кеш меморију.",
"User Display Name Field" => "Име приказа корисника",
"Base User Tree" => "Основно стабло корисника",
diff --git a/apps/user_ldap/l10n/sv.php b/apps/user_ldap/l10n/sv.php
index d5d47074bed..3288438c09b 100644
--- a/apps/user_ldap/l10n/sv.php
+++ b/apps/user_ldap/l10n/sv.php
@@ -30,14 +30,11 @@ $TRANSLATIONS = array(
"Password" => "Lösenord",
"For anonymous access, leave DN and Password empty." => "För anonym åtkomst, lämna DN och lösenord tomt.",
"User Login Filter" => "Filter logga in användare",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Definierar filter att tillämpa vid inloggningsförsök. %% uid ersätter användarnamn i loginåtgärden.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "använd platshållare %%uid, t ex \"uid=%%uid\"",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "Definierar filter som tillämpas vid inloggning. %%uid ersätter användarnamn vid inloggningen. Exempel: \"uid=%%uid\"",
"User List Filter" => "Filter lista användare",
-"Defines the filter to apply, when retrieving users." => "Definierar filter att tillämpa vid listning av användare.",
-"without any placeholder, e.g. \"objectClass=person\"." => "utan platshållare, t.ex. \"objectClass=person\".",
+"Defines the filter to apply, when retrieving users (no placeholders). Example: \"objectClass=person\"" => "Definierar filter som tillämpas vid sökning efter användare (inga platshållare). Exempel: \"objectClass=person\"",
"Group Filter" => "Gruppfilter",
-"Defines the filter to apply, when retrieving groups." => "Definierar filter att tillämpa vid listning av grupper.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "utan platshållare, t.ex. \"objectClass=posixGroup\".",
+"Defines the filter to apply, when retrieving groups (no placeholders). Example: \"objectClass=posixGroup\"" => "Definierar filter som tillämpas vid sökning efter grupper (inga platshållare). Exempel: \"objectClass=posixGroup\"",
"Connection Settings" => "Uppkopplingsinställningar",
"Configuration Active" => "Konfiguration aktiv",
"When unchecked, this configuration will be skipped." => "Ifall denna är avbockad så kommer konfigurationen att skippas.",
@@ -51,8 +48,7 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "Använd inte för LDAPS-anslutningar, det kommer inte att fungera.",
"Case insensitve LDAP server (Windows)" => "LDAP-servern är okänslig för gemener och versaler (Windows)",
"Turn off SSL certificate validation." => "Stäng av verifiering av SSL-certifikat.",
-"If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Om anslutningen bara fungerar med detta alternativ, importera LDAP-serverns SSL-certifikat i din% s server.",
-"Not recommended, use for testing only." => "Rekommenderas inte, använd bara för test. ",
+"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Rekommenderas inte, använd endast för test! Om anslutningen bara fungerar med denna inställning behöver du importera LDAP-serverns SSL-certifikat till din %s server.",
"Cache Time-To-Live" => "Cache Time-To-Live",
"in seconds. A change empties the cache." => "i sekunder. En förändring tömmer cache.",
"Directory Settings" => "Mappinställningar",
diff --git a/apps/user_ldap/l10n/ta_LK.php b/apps/user_ldap/l10n/ta_LK.php
index 6a541ca2d52..25053f2e3d1 100644
--- a/apps/user_ldap/l10n/ta_LK.php
+++ b/apps/user_ldap/l10n/ta_LK.php
@@ -8,12 +8,10 @@ $TRANSLATIONS = array(
"You can specify Base DN for users and groups in the Advanced tab" => "நீங்கள் பயனாளர்களுக்கும் மேன்மை தத்தலில் உள்ள குழுவிற்கும் தள DN ஐ குறிப்பிடலாம் ",
"User DN" => "பயனாளர் DN",
"Password" => "கடவுச்சொல்",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "எந்த ஒதுக்கீடும் இல்லாமல், உதாரணம். \"objectClass=posixGroup\".",
"Port" => "துறை ",
"Use TLS" => "TLS ஐ பயன்படுத்தவும்",
"Case insensitve LDAP server (Windows)" => "உணர்ச்சியான LDAP சேவையகம் (சாளரங்கள்)",
"Turn off SSL certificate validation." => "SSL சான்றிதழின் செல்லுபடியை நிறுத்திவிடவும்",
-"Not recommended, use for testing only." => "பரிந்துரைக்கப்படவில்லை, சோதனைக்காக மட்டும் பயன்படுத்தவும்.",
"in seconds. A change empties the cache." => "செக்கன்களில். ஒரு மாற்றம் இடைமாற்றுநினைவகத்தை வெற்றிடமாக்கும்.",
"User Display Name Field" => "பயனாளர் காட்சிப்பெயர் புலம்",
"Base User Tree" => "தள பயனாளர் மரம்",
diff --git a/apps/user_ldap/l10n/th_TH.php b/apps/user_ldap/l10n/th_TH.php
index 34739cb5178..91d93e1235c 100644
--- a/apps/user_ldap/l10n/th_TH.php
+++ b/apps/user_ldap/l10n/th_TH.php
@@ -26,21 +26,14 @@ $TRANSLATIONS = array(
"Password" => "รหัสผ่าน",
"For anonymous access, leave DN and Password empty." => "สำหรับการเข้าถึงโดยบุคคลนิรนาม ให้เว้นว่าง DN และรหัสผ่านไว้",
"User Login Filter" => "ตัวกรองข้อมูลการเข้าสู่ระบบของผู้ใช้งาน",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "กำหนดตัวกรองข้อมูลที่ต้องการนำไปใช้งาน, เมื่อมีความพยายามในการเข้าสู่ระบบ %%uid จะถูกนำไปแทนที่ชื่อผู้ใช้งานในการกระทำของการเข้าสู่ระบบ",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "ใช้ตัวยึด %%uid, เช่น \"uid=%%uid\"",
"User List Filter" => "ตัวกรองข้อมูลรายชื่อผู้ใช้งาน",
-"Defines the filter to apply, when retrieving users." => "ระบุตัวกรองข้อมูลที่ต้องการนำไปใช้งาน, เมื่อดึงข้อมูลผู้ใช้งาน",
-"without any placeholder, e.g. \"objectClass=person\"." => "โดยไม่ต้องมีตัวยึดใดๆ, เช่น \"objectClass=person\",",
"Group Filter" => "ตัวกรองข้อมูลกลุ่ม",
-"Defines the filter to apply, when retrieving groups." => "ระบุตัวกรองข้อมูลที่ต้องการนำไปใช้งาน, เมื่อดึงข้อมูลกลุ่ม",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "โดยไม่ต้องมีตัวยึดใดๆ, เช่น \"objectClass=posixGroup\",",
"Connection Settings" => "ตั้งค่าการเชื่อมต่อ",
"Port" => "พอร์ต",
"Disable Main Server" => "ปิดใช้งานเซิร์ฟเวอร์หลัก",
"Use TLS" => "ใช้ TLS",
"Case insensitve LDAP server (Windows)" => "เซิร์ฟเวอร์ LDAP ประเภท Case insensitive (วินโดวส์)",
"Turn off SSL certificate validation." => "ปิดใช้งานการตรวจสอบความถูกต้องของใบรับรองความปลอดภัย SSL",
-"Not recommended, use for testing only." => "ไม่แนะนำให้ใช้งาน, ใช้สำหรับการทดสอบเท่านั้น",
"in seconds. A change empties the cache." => "ในอีกไม่กี่วินาที ระบบจะเปลี่ยนแปลงข้อมูลในแคชให้ว่างเปล่า",
"Directory Settings" => "ตั้งค่าไดเร็กทอรี่",
"User Display Name Field" => "ช่องแสดงชื่อผู้ใช้งานที่ต้องการ",
diff --git a/apps/user_ldap/l10n/tr.php b/apps/user_ldap/l10n/tr.php
index e334ffcc8f5..fc9cceddf03 100644
--- a/apps/user_ldap/l10n/tr.php
+++ b/apps/user_ldap/l10n/tr.php
@@ -26,14 +26,8 @@ $TRANSLATIONS = array(
"Password" => "Parola",
"For anonymous access, leave DN and Password empty." => "Anonim erişim için DN ve Parola alanlarını boş bırakın.",
"User Login Filter" => "Kullanıcı Oturum Filtresi",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Filter uyunlamak icin tayin ediyor, ne zaman girişmek isteminiz. % % uid adi kullanici girismeye karsi koymacak. ",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "%%uid yer tutucusunu kullanın, örneğin \"uid=%%uid\"",
"User List Filter" => "Kullanıcı Liste Filtresi",
-"Defines the filter to apply, when retrieving users." => "Filter uyunmak icin tayin ediyor, ne zaman adi kullanici geri aliyor. ",
-"without any placeholder, e.g. \"objectClass=person\"." => "bir yer tutucusu olmadan, örneğin \"objectClass=person\"",
"Group Filter" => "Grup Süzgeci",
-"Defines the filter to apply, when retrieving groups." => "Filter uyunmak icin tayin ediyor, ne zaman grubalari tekrar aliyor. ",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "siz bir yer tutucu, mes. 'objectClass=posixGroup ('posixGrubu''. ",
"Connection Settings" => "Bağlantı ayarları",
"When unchecked, this configuration will be skipped." => "Ne zaman iptal, bu uynnlama isletici ",
"Port" => "Port",
@@ -45,7 +39,6 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "Bu LDAPS baglama icin kullamaminiz, basamacak. ",
"Case insensitve LDAP server (Windows)" => "Dusme sunucu LDAP zor degil. (Windows)",
"Turn off SSL certificate validation." => "SSL sertifika doğrulamasını kapat.",
-"Not recommended, use for testing only." => "Önerilmez, sadece test için kullanın.",
"Cache Time-To-Live" => "Cache Time-To-Live ",
"in seconds. A change empties the cache." => "saniye cinsinden. Bir değişiklik önbelleği temizleyecektir.",
"Directory Settings" => "Parametrar Listesin Adresinin ",
diff --git a/apps/user_ldap/l10n/uk.php b/apps/user_ldap/l10n/uk.php
index ebf7dbd5d84..5fb52761215 100644
--- a/apps/user_ldap/l10n/uk.php
+++ b/apps/user_ldap/l10n/uk.php
@@ -27,14 +27,8 @@ $TRANSLATIONS = array(
"Password" => "Пароль",
"For anonymous access, leave DN and Password empty." => "Для анонімного доступу, залиште DN і Пароль порожніми.",
"User Login Filter" => "Фільтр Користувачів, що під'єднуються",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Визначає фільтр, який застосовується при спробі входу. %%uid замінює ім'я користувача при вході.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "використовуйте %%uid заповнювач, наприклад: \"uid=%%uid\"",
"User List Filter" => "Фільтр Списку Користувачів",
-"Defines the filter to apply, when retrieving users." => "Визначає фільтр, який застосовується при отриманні користувачів",
-"without any placeholder, e.g. \"objectClass=person\"." => "без будь-якого заповнювача, наприклад: \"objectClass=person\".",
"Group Filter" => "Фільтр Груп",
-"Defines the filter to apply, when retrieving groups." => "Визначає фільтр, який застосовується при отриманні груп.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "без будь-якого заповнювача, наприклад: \"objectClass=posixGroup\".",
"Connection Settings" => "Налаштування З'єднання",
"Configuration Active" => "Налаштування Активне",
"When unchecked, this configuration will be skipped." => "Якщо \"галочка\" знята, ця конфігурація буде пропущена.",
@@ -47,7 +41,6 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "Не використовуйте це додатково для під'єднання до LDAP, бо виконано не буде.",
"Case insensitve LDAP server (Windows)" => "Нечутливий до регістру LDAP сервер (Windows)",
"Turn off SSL certificate validation." => "Вимкнути перевірку SSL сертифіката.",
-"Not recommended, use for testing only." => "Не рекомендується, використовуйте лише для тестів.",
"Cache Time-To-Live" => "Час актуальності Кеша",
"in seconds. A change empties the cache." => "в секундах. Зміна очищує кеш.",
"Directory Settings" => "Налаштування Каталога",
diff --git a/apps/user_ldap/l10n/vi.php b/apps/user_ldap/l10n/vi.php
index c4fe9b73bcc..7ef961df7ad 100644
--- a/apps/user_ldap/l10n/vi.php
+++ b/apps/user_ldap/l10n/vi.php
@@ -12,14 +12,8 @@ $TRANSLATIONS = array(
"Password" => "Mật khẩu",
"For anonymous access, leave DN and Password empty." => "Cho phép truy cập nặc danh , DN và mật khẩu trống.",
"User Login Filter" => "Lọc người dùng đăng nhập",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Xác định các bộ lọc để áp dụng, khi đăng nhập . uid%% thay thế tên người dùng trong các lần đăng nhập.",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "use %%uid placeholder, e.g. \"uid=%%uid\"",
"User List Filter" => "Lọc danh sách thành viên",
-"Defines the filter to apply, when retrieving users." => "Xác định các bộ lọc để áp dụng, khi người dụng sử dụng.",
-"without any placeholder, e.g. \"objectClass=person\"." => "mà không giữ chỗ nào, ví dụ như \"objectClass = person\".",
"Group Filter" => "Bộ lọc nhóm",
-"Defines the filter to apply, when retrieving groups." => "Xác định các bộ lọc để áp dụng, khi nhóm sử dụng.",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "mà không giữ chỗ nào, ví dụ như \"objectClass = osixGroup\".",
"Connection Settings" => "Connection Settings",
"Port" => "Cổng",
"Backup (Replica) Port" => "Cổng sao lưu (Replica)",
@@ -28,7 +22,6 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "Do not use it additionally for LDAPS connections, it will fail.",
"Case insensitve LDAP server (Windows)" => "Trường hợp insensitve LDAP máy chủ (Windows)",
"Turn off SSL certificate validation." => "Tắt xác thực chứng nhận SSL",
-"Not recommended, use for testing only." => "Không khuyến khích, Chỉ sử dụng để thử nghiệm.",
"in seconds. A change empties the cache." => "trong vài giây. Một sự thay đổi bộ nhớ cache.",
"Directory Settings" => "Directory Settings",
"User Display Name Field" => "Hiển thị tên người sử dụng",
diff --git a/apps/user_ldap/l10n/zh_CN.GB2312.php b/apps/user_ldap/l10n/zh_CN.GB2312.php
deleted file mode 100644
index 92eded19b4c..00000000000
--- a/apps/user_ldap/l10n/zh_CN.GB2312.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Deletion failed" => "删除失败",
-"Success" => "成功",
-"Error" => "出错",
-"Host" => "主机",
-"You can omit the protocol, except you require SSL. Then start with ldaps://" => "您可以忽略协议,除非您需要 SSL。然后用 ldaps:// 开头",
-"Base DN" => "基本判别名",
-"You can specify Base DN for users and groups in the Advanced tab" => "您可以在高级选项卡中为用户和群组指定基本判别名",
-"User DN" => "用户判别名",
-"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "客户机用户的判别名,将用于绑定,例如 uid=agent, dc=example, dc=com。匿名访问请留空判别名和密码。",
-"Password" => "密码",
-"For anonymous access, leave DN and Password empty." => "匿名访问请留空判别名和密码。",
-"User Login Filter" => "用户登录过滤器",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "定义尝试登录时要应用的过滤器。用 %%uid 替换登录操作中使用的用户名。",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "使用 %%uid 占位符,例如 \"uid=%%uid\"",
-"User List Filter" => "用户列表过滤器",
-"Defines the filter to apply, when retrieving users." => "定义撷取用户时要应用的过滤器。",
-"without any placeholder, e.g. \"objectClass=person\"." => "不能使用占位符,例如 \"objectClass=person\"。",
-"Group Filter" => "群组过滤器",
-"Defines the filter to apply, when retrieving groups." => "定义撷取群组时要应用的过滤器",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "不能使用占位符,例如 \"objectClass=posixGroup\"。",
-"Port" => "端口",
-"Use TLS" => "使用 TLS",
-"Case insensitve LDAP server (Windows)" => "大小写不敏感的 LDAP 服务器 (Windows)",
-"Turn off SSL certificate validation." => "关闭 SSL 证书校验。",
-"Not recommended, use for testing only." => "不推荐,仅供测试",
-"in seconds. A change empties the cache." => "以秒计。修改会清空缓存。",
-"User Display Name Field" => "用户显示名称字段",
-"Base User Tree" => "基本用户树",
-"Group Display Name Field" => "群组显示名称字段",
-"Base Group Tree" => "基本群组树",
-"Group-Member association" => "群组-成员组合",
-"in bytes" => "以字节计",
-"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "用户名请留空 (默认)。否则,请指定一个 LDAP/AD 属性。",
-"Help" => "帮助"
-);
-$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/user_ldap/l10n/zh_CN.php b/apps/user_ldap/l10n/zh_CN.php
index 5107b7b1ab7..c30cb421505 100644
--- a/apps/user_ldap/l10n/zh_CN.php
+++ b/apps/user_ldap/l10n/zh_CN.php
@@ -29,14 +29,8 @@ $TRANSLATIONS = array(
"Password" => "密码",
"For anonymous access, leave DN and Password empty." => "启用匿名访问,将DN和密码保留为空",
"User Login Filter" => "用户登录过滤",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "定义当尝试登录时的过滤器。 在登录过程中,%%uid将会被用户名替换",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "使用 %%uid作为占位符,例如“uid=%%uid”",
"User List Filter" => "用户列表过滤",
-"Defines the filter to apply, when retrieving users." => "定义拉取用户时的过滤器",
-"without any placeholder, e.g. \"objectClass=person\"." => "没有任何占位符,如 \"objectClass=person\".",
"Group Filter" => "组过滤",
-"Defines the filter to apply, when retrieving groups." => "定义拉取组信息时的过滤器",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "无需占位符,例如\"objectClass=posixGroup\"",
"Connection Settings" => "连接设置",
"Configuration Active" => "现行配置",
"When unchecked, this configuration will be skipped." => "当反选后,此配置将被忽略。",
@@ -49,7 +43,6 @@ $TRANSLATIONS = array(
"Do not use it additionally for LDAPS connections, it will fail." => "对于 LDAPS 连接不要额外启用它,连接必然失败。",
"Case insensitve LDAP server (Windows)" => "大小写敏感LDAP服务器(Windows)",
"Turn off SSL certificate validation." => "关闭SSL证书验证",
-"Not recommended, use for testing only." => "暂不推荐,仅供测试",
"Cache Time-To-Live" => "缓存存活时间",
"in seconds. A change empties the cache." => "以秒计。修改将清空缓存。",
"Directory Settings" => "目录设置",
diff --git a/apps/user_ldap/l10n/zh_TW.php b/apps/user_ldap/l10n/zh_TW.php
index 84e1f83aefc..2cc1ac99336 100644
--- a/apps/user_ldap/l10n/zh_TW.php
+++ b/apps/user_ldap/l10n/zh_TW.php
@@ -3,63 +3,59 @@ $TRANSLATIONS = array(
"Failed to clear the mappings." => "清除映射失敗",
"Failed to delete the server configuration" => "刪除伺服器設定時失敗",
"The configuration is valid and the connection could be established!" => "設定有效且連線可建立",
-"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "設定有效但連線無法建立。請檢查伺服器的設定與認證資料。",
-"The configuration is invalid. Please look in the ownCloud log for further details." => "設定無效。更多細節請參閱ownCloud的記錄檔。",
+"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "設定有效但連線無法建立,請檢查伺服器設定與認證資料。",
+"The configuration is invalid. Please look in the ownCloud log for further details." => "設定無效,更多細節請參閱 ownCloud 的記錄檔。",
"Deletion failed" => "移除失敗",
-"Take over settings from recent server configuration?" => "要使用最近一次的伺服器設定嗎?",
-"Keep settings?" => "維持設定嗎?",
+"Take over settings from recent server configuration?" => "要使用最近一次的伺服器設定嗎?",
+"Keep settings?" => "維持設定嗎?",
"Cannot add server configuration" => "無法新增伺服器設定",
"mappings cleared" => "映射已清除",
"Success" => "成功",
"Error" => "錯誤",
"Connection test succeeded" => "連線測試成功",
"Connection test failed" => "連線測試失敗",
-"Do you really want to delete the current Server Configuration?" => "您真的確定要刪除現在的伺服器設定嗎?",
-"Confirm Deletion" => "確認已刪除",
-"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>警告:</b>沒有安裝 PHP LDAP 模組,後端系統將無法運作。請要求您的系統管理員安裝模組。",
+"Do you really want to delete the current Server Configuration?" => "您真的要刪除現在的伺服器設定嗎?",
+"Confirm Deletion" => "確認刪除",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>警告:</b>沒有安裝 PHP LDAP 模組,後端系統將無法運作,請要求您的系統管理員安裝模組。",
"Server configuration" => "伺服器設定",
"Add Server Configuration" => "新增伺服器設定",
"Host" => "主機",
-"You can omit the protocol, except you require SSL. Then start with ldaps://" => "若您不需要SSL加密傳輸則可忽略通訊協定。若非如此請從ldaps://開始",
-"One Base DN per line" => "一行一個Base DN",
-"You can specify Base DN for users and groups in the Advanced tab" => "您可以在進階標籤頁裡面指定使用者及群組的Base DN",
+"You can omit the protocol, except you require SSL. Then start with ldaps://" => "若您不需要 SSL 加密連線則不需輸入通訊協定,反之請輸入 ldaps://",
+"Base DN" => "Base DN",
+"One Base DN per line" => "一行一個 Base DN",
+"You can specify Base DN for users and groups in the Advanced tab" => "您可以在進階標籤頁裡面指定使用者及群組的 Base DN",
+"User DN" => "User DN",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "客戶端使用者的DN與特定字詞的連結需要完善,例如:uid=agent,dc=example,dc=com。若是匿名連接,則將DN與密碼欄位留白。",
"Password" => "密碼",
-"For anonymous access, leave DN and Password empty." => "匿名連接時請將DN與密碼欄位留白",
-"User Login Filter" => "使用者登入過濾器",
-"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "試圖登入時會定義要套用的篩選器。登入過程中%%uid會取代使用者名稱。",
-"use %%uid placeholder, e.g. \"uid=%%uid\"" => "請使用 %%uid placeholder,例如:\"uid=%%uid\"",
-"User List Filter" => "使用者名單篩選器",
-"Defines the filter to apply, when retrieving users." => "檢索使用者時定義要套用的篩選器",
-"without any placeholder, e.g. \"objectClass=person\"." => "請勿使用任何placeholder,例如:\"objectClass=person\"。",
-"Group Filter" => "群組篩選器",
-"Defines the filter to apply, when retrieving groups." => "檢索群組時,定義要套用的篩選器",
-"without any placeholder, e.g. \"objectClass=posixGroup\"." => "請勿使用任何placeholder,例如:\"objectClass=posixGroup\"。",
+"For anonymous access, leave DN and Password empty." => "匿名連接時請將 DN 與密碼欄位留白",
+"User Login Filter" => "User Login Filter",
+"User List Filter" => "User List Filter",
+"Group Filter" => "Group Filter",
"Connection Settings" => "連線設定",
-"Configuration Active" => "設定為主動模式",
+"Configuration Active" => "設定使用中",
"When unchecked, this configuration will be skipped." => "沒有被勾選時,此設定會被略過。",
-"Port" => "連接阜",
+"Port" => "連接埠",
"Backup (Replica) Host" => "備用主機",
-"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "請給定一個可選的備用主機。必須是LDAP/AD中央伺服器的複本。",
-"Backup (Replica) Port" => "備用(複本)連接阜",
+"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "可以選擇性設定備用主機,必須是 LDAP/AD 中央伺服器的複本。",
+"Backup (Replica) Port" => "備用(複本)連接埠",
"Disable Main Server" => "停用主伺服器",
-"Use TLS" => "使用TLS",
-"Case insensitve LDAP server (Windows)" => "不區分大小寫的LDAP伺服器(Windows)",
-"Turn off SSL certificate validation." => "關閉 SSL 憑證驗證",
-"Not recommended, use for testing only." => "不推薦使用,僅供測試用途。",
+"Use TLS" => "使用 TLS",
+"Do not use it additionally for LDAPS connections, it will fail." => "不要同時與 LDAPS 使用,會有問題。",
+"Case insensitve LDAP server (Windows)" => "不區分大小寫的 LDAP 伺服器 (Windows)",
+"Turn off SSL certificate validation." => "關閉 SSL 憑證檢查",
"Cache Time-To-Live" => "快取的存活時間",
-"in seconds. A change empties the cache." => "以秒為單位。更變後會清空快取。",
-"Directory Settings" => "目錄選項",
-"User Display Name Field" => "使用者名稱欄位",
-"Base User Tree" => "Base使用者數",
-"One User Base DN per line" => "一行一個使用者Base DN",
-"User Search Attributes" => "使用者搜索屬性",
-"Optional; one attribute per line" => "可選的; 一行一項屬性",
+"in seconds. A change empties the cache." => "以秒為單位。變更後會清空快取。",
+"Directory Settings" => "目錄設定",
+"User Display Name Field" => "使用者顯示名稱欄位",
+"Base User Tree" => "Base User Tree",
+"One User Base DN per line" => "一行一個使用者 Base DN",
+"User Search Attributes" => "User Search Attributes",
+"Optional; one attribute per line" => "非必要,一行一項屬性",
"Group Display Name Field" => "群組顯示名稱欄位",
-"Base Group Tree" => "Base群組樹",
-"One Group Base DN per line" => "一行一個群組Base DN",
-"Group Search Attributes" => "群組搜索屬性",
-"Group-Member association" => "群組成員的關係",
+"Base Group Tree" => "Base Group Tree",
+"One Group Base DN per line" => "一行一個 Group Base DN",
+"Group Search Attributes" => "Group Search Attributes",
+"Group-Member association" => "Group-Member association",
"Special Attributes" => "特殊屬性",
"Quota Field" => "配額欄位",
"Quota Default" => "預設配額",
diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php
index 6f6b8d0f016..52aa39012fd 100644
--- a/apps/user_ldap/lib/access.php
+++ b/apps/user_ldap/lib/access.php
@@ -991,7 +991,7 @@ abstract class Access {
* internally we store them for usage in LDAP filters
*/
private function DNasBaseParameter($dn) {
- return str_replace('\\5c', '\\', $dn);
+ return str_ireplace('\\5c', '\\', $dn);
}
/**
diff --git a/apps/user_ldap/lib/connection.php b/apps/user_ldap/lib/connection.php
index 36c8e648b1a..e5d9b4d5b40 100644
--- a/apps/user_ldap/lib/connection.php
+++ b/apps/user_ldap/lib/connection.php
@@ -29,6 +29,9 @@ class Connection {
private $configID;
private $configured = false;
+ //whether connection should be kept on __destruct
+ private $dontDestruct = false;
+
//cache handler
protected $cache;
@@ -77,17 +80,31 @@ class Connection {
public function __construct($configPrefix = '', $configID = 'user_ldap') {
$this->configPrefix = $configPrefix;
$this->configID = $configID;
- $this->cache = \OC_Cache::getGlobalCache();
+ $memcache = new \OC\Memcache\Factory();
+ if($memcache->isAvailable()) {
+ $this->cache = $memcache->create();
+ } else {
+ $this->cache = \OC_Cache::getGlobalCache();
+ }
$this->config['hasPagedResultSupport'] = (function_exists('ldap_control_paged_result')
&& function_exists('ldap_control_paged_result_response'));
}
public function __destruct() {
- if(is_resource($this->ldapConnectionRes)) {
+ if(!$this->dontDestruct && is_resource($this->ldapConnectionRes)) {
@ldap_unbind($this->ldapConnectionRes);
};
}
+ /**
+ * @brief defines behaviour when the instance is cloned
+ */
+ public function __clone() {
+ //a cloned instance inherits the connection resource. It may use it,
+ //but it may not disconnect it
+ $this->dontDestruct = true;
+ }
+
public function __get($name) {
if(!$this->configured) {
$this->readConfiguration();
diff --git a/apps/user_ldap/lib/helper.php b/apps/user_ldap/lib/helper.php
index f65f466789f..4c9dd07a12c 100644
--- a/apps/user_ldap/lib/helper.php
+++ b/apps/user_ldap/lib/helper.php
@@ -71,6 +71,34 @@ class Helper {
}
/**
+ *
+ * @brief determines the host for every configured connection
+ * @return an array with configprefix as keys
+ *
+ */
+ static public function getServerConfigurationHosts() {
+ $referenceConfigkey = 'ldap_host';
+
+ $query = '
+ SELECT DISTINCT `configkey`, `configvalue`
+ FROM `*PREFIX*appconfig`
+ WHERE `appid` = \'user_ldap\'
+ AND `configkey` LIKE ?
+ ';
+ $query = \OCP\DB::prepare($query);
+ $configHosts = $query->execute(array('%'.$referenceConfigkey))->fetchAll();
+ $result = array();
+
+ foreach($configHosts as $configHost) {
+ $len = strlen($configHost['configkey']) - strlen($referenceConfigkey);
+ $prefix = substr($configHost['configkey'], 0, $len);
+ $result[$prefix] = $configHost['configvalue'];
+ }
+
+ return $result;
+ }
+
+ /**
* @brief deletes a given saved LDAP/AD server configuration.
* @param string the configuration prefix of the config to delete
* @return bool true on success, false otherwise
diff --git a/apps/user_ldap/lib/jobs.php b/apps/user_ldap/lib/jobs.php
index d626afed6c3..6b7666d4ca1 100644
--- a/apps/user_ldap/lib/jobs.php
+++ b/apps/user_ldap/lib/jobs.php
@@ -82,7 +82,7 @@ class Jobs extends \OC\BackgroundJob\TimedJob {
$hasChanged = true;
}
foreach(array_diff($actualUsers, $knownUsers) as $addedUser) {
- \OCP\Util::emitHook('OC_User', 'post_addFromGroup', array('uid' => $addedUser, 'gid' => $group));
+ \OCP\Util::emitHook('OC_User', 'post_addToGroup', array('uid' => $addedUser, 'gid' => $group));
\OCP\Util::writeLog('user_ldap',
'bgJ "updateGroups" – "'.$addedUser.'" added to "'.$group.'".',
\OCP\Util::INFO);
diff --git a/apps/user_ldap/lib/proxy.php b/apps/user_ldap/lib/proxy.php
index c80e2163475..ae3e3be7361 100644
--- a/apps/user_ldap/lib/proxy.php
+++ b/apps/user_ldap/lib/proxy.php
@@ -101,4 +101,4 @@ abstract class Proxy {
public function clearCache() {
$this->cache->clear($this->getCacheKey(null));
}
-} \ No newline at end of file
+}
diff --git a/apps/user_ldap/settings.php b/apps/user_ldap/settings.php
index 22e2dac6d26..7169192a18e 100644
--- a/apps/user_ldap/settings.php
+++ b/apps/user_ldap/settings.php
@@ -44,7 +44,9 @@ OCP\Util::addstyle('user_ldap', 'settings');
$tmpl = new OCP\Template('user_ldap', 'settings');
$prefixes = \OCA\user_ldap\lib\Helper::getServerConfigurationPrefixes();
+$hosts = \OCA\user_ldap\lib\Helper::getServerConfigurationHosts();
$tmpl->assign('serverConfigurationPrefixes', $prefixes);
+$tmpl->assign('serverConfigurationHosts', $hosts);
// assign default values
if(!isset($ldap)) {
diff --git a/apps/user_ldap/templates/settings.php b/apps/user_ldap/templates/settings.php
index 95aa592594b..e214d57fb1d 100644
--- a/apps/user_ldap/templates/settings.php
+++ b/apps/user_ldap/templates/settings.php
@@ -24,7 +24,7 @@
$sel = ' selected';
foreach($_['serverConfigurationPrefixes'] as $prefix) {
?>
- <option value="<?php p($prefix); ?>"<?php p($sel); ?>><?php p($i++); ?>. Server</option>
+ <option value="<?php p($prefix); ?>"<?php p($sel); $sel = ''; ?>><?php p($i++); ?>. Server: <?php p($_['serverConfigurationHosts'][$prefix]); ?></option>
<?php
}
}
@@ -51,18 +51,15 @@
<p><label for="ldap_login_filter"><?php p($l->t('User Login Filter'));?></label>
<input type="text" id="ldap_login_filter" name="ldap_login_filter"
data-default="<?php p($_['ldap_login_filter_default']); ?>"
- title="<?php p($l->t('Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action.'));?>" />
- <br /><small><?php p($l->t('use %%uid placeholder, e.g. "uid=%%uid"'));?></small></p>
+ title="<?php p($l->t('Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: "uid=%%uid"'));?>" /></p>
<p><label for="ldap_userlist_filter"><?php p($l->t('User List Filter'));?></label>
<input type="text" id="ldap_userlist_filter" name="ldap_userlist_filter"
data-default="<?php p($_['ldap_userlist_filter_default']); ?>"
- title="<?php p($l->t('Defines the filter to apply, when retrieving users.'));?>" />
- <br /><small><?php p($l->t('without any placeholder, e.g. "objectClass=person".'));?></small></p>
+ title="<?php p($l->t('Defines the filter to apply, when retrieving users (no placeholders). Example: "objectClass=person"'));?>" /></p>
<p><label for="ldap_group_filter"><?php p($l->t('Group Filter'));?></label>
<input type="text" id="ldap_group_filter" name="ldap_group_filter"
data-default="<?php p($_['ldap_group_filter_default']); ?>"
- title="<?php p($l->t('Defines the filter to apply, when retrieving groups.'));?>" />
- <br /><small><?php p($l->t('without any placeholder, e.g. "objectClass=posixGroup".'));?></small></p>
+ title="<?php p($l->t('Defines the filter to apply, when retrieving groups (no placeholders). Example: "objectClass=posixGroup"'));?>" /></p>
</fieldset>
<fieldset id="ldapSettings-2">
<div id="ldapAdvancedAccordion">
@@ -75,7 +72,7 @@
<p><label for="ldap_override_main_server"><?php p($l->t('Disable Main Server'));?></label><input type="checkbox" id="ldap_override_main_server" name="ldap_override_main_server" value="1" data-default="<?php p($_['ldap_override_main_server_default']); ?>" title="<?php p($l->t('Only connect to the replica server.'));?>" /></p>
<p><label for="ldap_tls"><?php p($l->t('Use TLS'));?></label><input type="checkbox" id="ldap_tls" name="ldap_tls" value="1" data-default="<?php p($_['ldap_tls_default']); ?>" title="<?php p($l->t('Do not use it additionally for LDAPS connections, it will fail.'));?>" /></p>
<p><label for="ldap_nocase"><?php p($l->t('Case insensitve LDAP server (Windows)'));?></label><input type="checkbox" id="ldap_nocase" name="ldap_nocase" data-default="<?php p($_['ldap_nocase_default']); ?>" value="1"<?php if (isset($_['ldap_nocase']) && ($_['ldap_nocase'])) p(' checked'); ?>></p>
- <p><label for="ldap_turn_off_cert_check"><?php p($l->t('Turn off SSL certificate validation.'));?></label><input type="checkbox" id="ldap_turn_off_cert_check" name="ldap_turn_off_cert_check" title="<?php p($l->t('If connection only works with this option, import the LDAP server\'s SSL certificate in your %s server.', $theme->getName() ));?>" data-default="<?php p($_['ldap_turn_off_cert_check_default']); ?>" value="1"><br/><small><?php p($l->t('Not recommended, use for testing only.'));?></small></p>
+ <p><label for="ldap_turn_off_cert_check"><?php p($l->t('Turn off SSL certificate validation.'));?></label><input type="checkbox" id="ldap_turn_off_cert_check" name="ldap_turn_off_cert_check" title="<?php p($l->t('Not recommended, use it for testing only! If connection only works with this option, import the LDAP server\'s SSL certificate in your %s server.', $theme->getName() ));?>" data-default="<?php p($_['ldap_turn_off_cert_check_default']); ?>" value="1"><br/></p>
<p><label for="ldap_cache_ttl"><?php p($l->t('Cache Time-To-Live'));?></label><input type="number" id="ldap_cache_ttl" name="ldap_cache_ttl" title="<?php p($l->t('in seconds. A change empties the cache.'));?>" data-default="<?php p($_['ldap_cache_ttl_default']); ?>" /></p>
</div>
<h3><?php p($l->t('Directory Settings'));?></h3>
diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php
index 41e2926605e..850ca0df995 100644
--- a/apps/user_ldap/user_ldap.php
+++ b/apps/user_ldap/user_ldap.php
@@ -77,11 +77,6 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface {
}
$dn = $ldap_users[0];
- //are the credentials OK?
- if(!$this->areCredentialsValid($dn, $password)) {
- return false;
- }
-
//do we have a username for him/her?
$ocname = $this->dn2username($dn);
@@ -90,6 +85,11 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface {
$this->updateQuota($dn);
$this->updateEmail($dn);
+ //are the credentials OK?
+ if(!$this->areCredentialsValid($dn, $password)) {
+ return false;
+ }
+
//give back the display name
return $ocname;
}
diff --git a/apps/user_ldap/user_proxy.php b/apps/user_ldap/user_proxy.php
index 73cc0963182..0722d8871a4 100644
--- a/apps/user_ldap/user_proxy.php
+++ b/apps/user_ldap/user_proxy.php
@@ -198,4 +198,4 @@ class User_Proxy extends lib\Proxy implements \OCP\UserInterface {
return $this->refBackend->hasUserListings();
}
-} \ No newline at end of file
+}
diff --git a/apps/user_webdavauth/l10n/fr.php b/apps/user_webdavauth/l10n/fr.php
index 0130e35c816..709fa53dac5 100644
--- a/apps/user_webdavauth/l10n/fr.php
+++ b/apps/user_webdavauth/l10n/fr.php
@@ -1,5 +1,7 @@
<?php
$TRANSLATIONS = array(
-"WebDAV Authentication" => "Authentification WebDAV"
+"WebDAV Authentication" => "Authentification WebDAV",
+"Address: " => "Adresse :",
+"The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "Les informations de connexion de l'utilisateur seront envoyées à cette adresse. Ce module analyse le code de la réponse HTTP et considère les codes 401 et 403 comme une authentification invalide et tout autre valeur comme une authentification valide."
);
$PLURAL_FORMS = "nplurals=2; plural=(n > 1);";
diff --git a/apps/user_webdavauth/l10n/nb_NO.php b/apps/user_webdavauth/l10n/nb_NO.php
index 245a5101341..e7ee8ae56be 100644
--- a/apps/user_webdavauth/l10n/nb_NO.php
+++ b/apps/user_webdavauth/l10n/nb_NO.php
@@ -1,3 +1,5 @@
-<?php $TRANSLATIONS = array(
-"URL: http://" => "URL: http://"
+<?php
+$TRANSLATIONS = array(
+"Address: " => "Adresse:"
);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/user_webdavauth/l10n/ru_RU.php b/apps/user_webdavauth/l10n/ru_RU.php
deleted file mode 100644
index 46f74cb972f..00000000000
--- a/apps/user_webdavauth/l10n/ru_RU.php
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php $TRANSLATIONS = array(
-"WebDAV Authentication" => "WebDAV аутентификация",
-"URL: http://" => "URL: http://"
-);
diff --git a/apps/user_webdavauth/l10n/zh_CN.php b/apps/user_webdavauth/l10n/zh_CN.php
index 69046042160..a225ea7f577 100644
--- a/apps/user_webdavauth/l10n/zh_CN.php
+++ b/apps/user_webdavauth/l10n/zh_CN.php
@@ -1,5 +1,7 @@
<?php
$TRANSLATIONS = array(
-"WebDAV Authentication" => "WebDAV 认证"
+"WebDAV Authentication" => "WebDAV 认证",
+"Address: " => "地址:",
+"The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "用户的身份将会被发送到此 URL。这个插件检查返回值并且将 HTTP 状态编码 401 和 403 解释为非法身份,其他所有返回值为合法身份。"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/user_webdavauth/l10n/zh_TW.php b/apps/user_webdavauth/l10n/zh_TW.php
index 304ecdaf4f3..013a1652f32 100644
--- a/apps/user_webdavauth/l10n/zh_TW.php
+++ b/apps/user_webdavauth/l10n/zh_TW.php
@@ -1,5 +1,7 @@
<?php
$TRANSLATIONS = array(
-"WebDAV Authentication" => "WebDAV 認證"
+"WebDAV Authentication" => "WebDAV 認證",
+"Address: " => "為址",
+"The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "使用者憑證將會被傳送到此位址。此外掛程式將會檢查回應,HTTP statuscodes 401與403將會被理解為無效憑證,而所有其他的回應將會被理解為有效憑證。"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";