summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/files/ajax/delete.php4
-rw-r--r--apps/files/ajax/list.php2
-rw-r--r--apps/files/ajax/move.php26
-rw-r--r--apps/files/ajax/newfile.php21
-rw-r--r--apps/files/ajax/newfolder.php5
-rw-r--r--apps/files/ajax/rawlist.php2
-rw-r--r--apps/files/ajax/rename.php16
-rw-r--r--apps/files/ajax/scan.php91
-rw-r--r--apps/files/ajax/upgrade.php44
-rw-r--r--apps/files/ajax/upload.php39
-rw-r--r--apps/files/appinfo/app.php2
-rw-r--r--apps/files/appinfo/filesync.php4
-rw-r--r--apps/files/appinfo/info.xml2
-rw-r--r--apps/files/appinfo/remote.php2
-rw-r--r--apps/files/appinfo/version2
-rw-r--r--apps/files/css/files.css24
-rw-r--r--apps/files/download.php8
-rw-r--r--apps/files/index.php84
-rw-r--r--apps/files/js/fileactions.js17
-rw-r--r--apps/files/js/filelist.js80
-rw-r--r--apps/files/js/files.js171
-rw-r--r--apps/files/js/upgrade.js17
-rw-r--r--apps/files/js/upload.js8
-rw-r--r--apps/files/l10n/bn_BD.php8
-rw-r--r--apps/files/l10n/ca.php12
-rw-r--r--apps/files/l10n/cs_CZ.php12
-rw-r--r--apps/files/l10n/da.php8
-rw-r--r--apps/files/l10n/de.php9
-rw-r--r--apps/files/l10n/de_DE.php9
-rw-r--r--apps/files/l10n/el.php9
-rw-r--r--apps/files/l10n/eo.php8
-rw-r--r--apps/files/l10n/es.php8
-rw-r--r--apps/files/l10n/es_AR.php10
-rw-r--r--apps/files/l10n/et_EE.php4
-rw-r--r--apps/files/l10n/eu.php9
-rw-r--r--apps/files/l10n/fa.php8
-rw-r--r--apps/files/l10n/fi_FI.php5
-rw-r--r--apps/files/l10n/fr.php9
-rw-r--r--apps/files/l10n/gl.php8
-rw-r--r--apps/files/l10n/he.php4
-rw-r--r--apps/files/l10n/hr.php1
-rw-r--r--apps/files/l10n/hu_HU.php9
-rw-r--r--apps/files/l10n/is.php8
-rw-r--r--apps/files/l10n/it.php12
-rw-r--r--apps/files/l10n/ja_JP.php9
-rw-r--r--apps/files/l10n/ka_GE.php4
-rw-r--r--apps/files/l10n/ko.php18
-rw-r--r--apps/files/l10n/lt_LT.php4
-rw-r--r--apps/files/l10n/mk.php4
-rw-r--r--apps/files/l10n/nb_NO.php3
-rw-r--r--apps/files/l10n/nl.php8
-rw-r--r--apps/files/l10n/oc.php1
-rw-r--r--apps/files/l10n/pl.php8
-rw-r--r--apps/files/l10n/pt_BR.php9
-rw-r--r--apps/files/l10n/pt_PT.php12
-rw-r--r--apps/files/l10n/ro.php8
-rw-r--r--apps/files/l10n/ru.php8
-rw-r--r--apps/files/l10n/ru_RU.php12
-rw-r--r--apps/files/l10n/si_LK.php1
-rw-r--r--apps/files/l10n/sk_SK.php10
-rw-r--r--apps/files/l10n/sl.php4
-rw-r--r--apps/files/l10n/sr.php4
-rw-r--r--apps/files/l10n/sv.php12
-rw-r--r--apps/files/l10n/ta_LK.php4
-rw-r--r--apps/files/l10n/th_TH.php9
-rw-r--r--apps/files/l10n/tr.php8
-rw-r--r--apps/files/l10n/uk.php4
-rw-r--r--apps/files/l10n/vi.php4
-rw-r--r--apps/files/l10n/zh_CN.GB2312.php4
-rw-r--r--apps/files/l10n/zh_CN.php8
-rw-r--r--apps/files/l10n/zh_TW.php8
-rw-r--r--apps/files/settings.php2
-rw-r--r--apps/files/templates/index.php6
-rw-r--r--apps/files/templates/part.list.php6
-rw-r--r--apps/files/templates/upgrade.php4
-rw-r--r--apps/files_encryption/l10n/es.php12
-rw-r--r--apps/files_encryption/l10n/es_AR.php11
-rw-r--r--apps/files_encryption/l10n/ko.php11
-rw-r--r--apps/files_encryption/l10n/pt_BR.php11
-rw-r--r--apps/files_encryption/l10n/ru_RU.php9
-rw-r--r--apps/files_external/ajax/addRootCertificate.php6
-rw-r--r--apps/files_external/appinfo/app.php16
-rw-r--r--apps/files_external/appinfo/info.xml2
-rw-r--r--apps/files_external/js/dropbox.js4
-rw-r--r--apps/files_external/js/google.js6
-rw-r--r--apps/files_external/js/settings.js2
-rw-r--r--apps/files_external/l10n/ko.php4
-rw-r--r--apps/files_external/l10n/pt_BR.php2
-rw-r--r--apps/files_external/l10n/sk_SK.php2
-rw-r--r--apps/files_external/lib/amazons3.php79
-rwxr-xr-xapps/files_external/lib/config.php79
-rwxr-xr-xapps/files_external/lib/dropbox.php61
-rw-r--r--apps/files_external/lib/ftp.php21
-rw-r--r--apps/files_external/lib/google.php34
-rw-r--r--apps/files_external/lib/smb.php21
-rw-r--r--apps/files_external/lib/streamwrapper.php55
-rw-r--r--apps/files_external/lib/swift.php115
-rw-r--r--apps/files_external/lib/webdav.php87
-rwxr-xr-xapps/files_external/personal.php2
-rw-r--r--apps/files_external/tests/amazons3.php8
-rw-r--r--apps/files_external/tests/config.php4
-rw-r--r--apps/files_external/tests/dropbox.php6
-rw-r--r--apps/files_external/tests/ftp.php8
-rw-r--r--apps/files_external/tests/google.php5
-rw-r--r--apps/files_external/tests/smb.php9
-rw-r--r--apps/files_external/tests/swift.php6
-rw-r--r--apps/files_external/tests/webdav.php7
-rw-r--r--apps/files_sharing/appinfo/app.php9
-rw-r--r--apps/files_sharing/appinfo/info.xml2
-rw-r--r--apps/files_sharing/appinfo/update.php10
-rw-r--r--apps/files_sharing/lib/cache.php258
-rw-r--r--apps/files_sharing/lib/permissions.php85
-rw-r--r--apps/files_sharing/lib/share/file.php75
-rw-r--r--apps/files_sharing/lib/share/folder.php43
-rw-r--r--apps/files_sharing/lib/sharedstorage.php268
-rw-r--r--apps/files_sharing/lib/watcher.php51
-rw-r--r--apps/files_sharing/public.php254
-rw-r--r--apps/files_trashbin/ajax/undelete.php45
-rw-r--r--apps/files_trashbin/appinfo/app.php7
-rw-r--r--apps/files_trashbin/appinfo/database.xml92
-rw-r--r--apps/files_trashbin/appinfo/info.xml14
-rw-r--r--apps/files_trashbin/appinfo/version1
-rw-r--r--apps/files_trashbin/download.php51
-rw-r--r--apps/files_trashbin/index.php100
-rw-r--r--apps/files_trashbin/js/disableDefaultActions.js3
-rw-r--r--apps/files_trashbin/js/trash.js158
-rw-r--r--apps/files_trashbin/l10n/.gitkeep0
-rw-r--r--apps/files_trashbin/lib/hooks.php45
-rw-r--r--apps/files_trashbin/lib/trash.php264
-rw-r--r--apps/files_trashbin/templates/index.php34
-rw-r--r--apps/files_trashbin/templates/part.list.php76
-rw-r--r--apps/files_versions/appinfo/app.php2
-rw-r--r--apps/files_versions/appinfo/info.xml2
-rw-r--r--apps/files_versions/lib/hooks.php38
-rw-r--r--apps/files_versions/lib/versions.php132
-rw-r--r--apps/user_ldap/ajax/deleteConfiguration.php35
-rw-r--r--apps/user_ldap/ajax/getConfiguration.php31
-rw-r--r--apps/user_ldap/ajax/getNewServerConfigPrefix.php34
-rw-r--r--apps/user_ldap/ajax/setConfiguration.php33
-rw-r--r--apps/user_ldap/ajax/testConfiguration.php12
-rw-r--r--apps/user_ldap/appinfo/app.php24
-rw-r--r--apps/user_ldap/appinfo/info.xml2
-rw-r--r--apps/user_ldap/appinfo/update.php16
-rw-r--r--apps/user_ldap/appinfo/version2
-rw-r--r--apps/user_ldap/group_ldap.php10
-rw-r--r--apps/user_ldap/group_proxy.php178
-rw-r--r--apps/user_ldap/js/settings.js156
-rw-r--r--apps/user_ldap/l10n/es_AR.php4
-rw-r--r--apps/user_ldap/l10n/ko.php6
-rw-r--r--apps/user_ldap/l10n/sk_SK.php5
-rw-r--r--apps/user_ldap/lib/access.php46
-rw-r--r--apps/user_ldap/lib/connection.php299
-rw-r--r--apps/user_ldap/lib/helper.php105
-rw-r--r--apps/user_ldap/lib/proxy.php104
-rw-r--r--apps/user_ldap/settings.php78
-rw-r--r--apps/user_ldap/templates/settings.php56
-rw-r--r--apps/user_ldap/user_ldap.php3
-rw-r--r--apps/user_ldap/user_proxy.php186
-rwxr-xr-xapps/user_webdavauth/appinfo/info.xml2
-rw-r--r--apps/user_webdavauth/l10n/es_AR.php4
-rw-r--r--apps/user_webdavauth/l10n/ko.php4
-rw-r--r--apps/user_webdavauth/l10n/pt_BR.php4
-rw-r--r--apps/user_webdavauth/l10n/ru_RU.php1
-rw-r--r--apps/user_webdavauth/l10n/sk_SK.php2
-rw-r--r--config/config.sample.php9
-rw-r--r--core/css/styles.css7
-rw-r--r--core/img/actions/undelete.pngbin0 -> 624 bytes
-rw-r--r--core/js/js.js1
-rw-r--r--core/l10n/ar.php1
-rw-r--r--core/l10n/bg_BG.php1
-rw-r--r--core/l10n/bn_BD.php1
-rw-r--r--core/l10n/ca.php2
-rw-r--r--core/l10n/cs_CZ.php2
-rw-r--r--core/l10n/da.php1
-rw-r--r--core/l10n/de.php1
-rw-r--r--core/l10n/de_DE.php2
-rw-r--r--core/l10n/el.php1
-rw-r--r--core/l10n/eo.php1
-rw-r--r--core/l10n/es.php4
-rw-r--r--core/l10n/es_AR.php4
-rw-r--r--core/l10n/et_EE.php1
-rw-r--r--core/l10n/eu.php2
-rw-r--r--core/l10n/fa.php1
-rw-r--r--core/l10n/fi_FI.php3
-rw-r--r--core/l10n/fr.php1
-rw-r--r--core/l10n/gl.php1
-rw-r--r--core/l10n/he.php1
-rw-r--r--core/l10n/hr.php1
-rw-r--r--core/l10n/hu_HU.php1
-rw-r--r--core/l10n/ia.php1
-rw-r--r--core/l10n/id.php1
-rw-r--r--core/l10n/is.php1
-rw-r--r--core/l10n/it.php6
-rw-r--r--core/l10n/ja_JP.php2
-rw-r--r--core/l10n/ka_GE.php1
-rw-r--r--core/l10n/ko.php14
-rw-r--r--core/l10n/lb.php1
-rw-r--r--core/l10n/lt_LT.php1
-rw-r--r--core/l10n/lv.php1
-rw-r--r--core/l10n/mk.php1
-rw-r--r--core/l10n/ms_MY.php1
-rw-r--r--core/l10n/nb_NO.php1
-rw-r--r--core/l10n/nl.php1
-rw-r--r--core/l10n/oc.php1
-rw-r--r--core/l10n/pl.php2
-rw-r--r--core/l10n/pt_BR.php15
-rw-r--r--core/l10n/pt_PT.php2
-rw-r--r--core/l10n/ro.php1
-rw-r--r--core/l10n/ru.php1
-rw-r--r--core/l10n/ru_RU.php2
-rw-r--r--core/l10n/si_LK.php1
-rw-r--r--core/l10n/sk_SK.php2
-rw-r--r--core/l10n/sl.php1
-rw-r--r--core/l10n/sr.php1
-rw-r--r--core/l10n/sv.php2
-rw-r--r--core/l10n/ta_LK.php1
-rw-r--r--core/l10n/th_TH.php1
-rw-r--r--core/l10n/tr.php1
-rw-r--r--core/l10n/uk.php1
-rw-r--r--core/l10n/vi.php1
-rw-r--r--core/l10n/zh_CN.GB2312.php1
-rw-r--r--core/l10n/zh_CN.php2
-rw-r--r--core/l10n/zh_TW.php1
-rw-r--r--db_structure.xml206
-rw-r--r--index.html6
-rw-r--r--l10n/.tx/config6
-rw-r--r--l10n/ar/core.po6
-rw-r--r--l10n/ar/files.po106
-rw-r--r--l10n/ar/files_trashbin.po58
-rw-r--r--l10n/ar/settings.po12
-rw-r--r--l10n/bg_BG/core.po6
-rw-r--r--l10n/bg_BG/files.po106
-rw-r--r--l10n/bg_BG/files_trashbin.po58
-rw-r--r--l10n/bg_BG/settings.po12
-rw-r--r--l10n/bn_BD/core.po6
-rw-r--r--l10n/bn_BD/files.po110
-rw-r--r--l10n/bn_BD/files_trashbin.po58
-rw-r--r--l10n/bn_BD/settings.po12
-rw-r--r--l10n/ca/core.po10
-rw-r--r--l10n/ca/files.po110
-rw-r--r--l10n/ca/files_trashbin.po58
-rw-r--r--l10n/ca/settings.po19
-rw-r--r--l10n/cs_CZ/core.po10
-rw-r--r--l10n/cs_CZ/files.po112
-rw-r--r--l10n/cs_CZ/files_trashbin.po58
-rw-r--r--l10n/cs_CZ/settings.po20
-rw-r--r--l10n/da/core.po6
-rw-r--r--l10n/da/files.po112
-rw-r--r--l10n/da/files_trashbin.po58
-rw-r--r--l10n/da/settings.po12
-rw-r--r--l10n/de/core.po6
-rw-r--r--l10n/de/files.po110
-rw-r--r--l10n/de/files_encryption.po4
-rw-r--r--l10n/de/files_trashbin.po58
-rw-r--r--l10n/de/settings.po12
-rw-r--r--l10n/de/user_ldap.po4
-rw-r--r--l10n/de_DE/core.po8
-rw-r--r--l10n/de_DE/files.po112
-rw-r--r--l10n/de_DE/files_encryption.po4
-rw-r--r--l10n/de_DE/files_trashbin.po58
-rw-r--r--l10n/de_DE/settings.po12
-rw-r--r--l10n/de_DE/user_ldap.po4
-rw-r--r--l10n/el/core.po6
-rw-r--r--l10n/el/files.po112
-rw-r--r--l10n/el/files_trashbin.po58
-rw-r--r--l10n/el/settings.po12
-rw-r--r--l10n/eo/core.po6
-rw-r--r--l10n/eo/files.po110
-rw-r--r--l10n/eo/files_trashbin.po58
-rw-r--r--l10n/eo/settings.po12
-rw-r--r--l10n/es/core.po15
-rw-r--r--l10n/es/files.po110
-rw-r--r--l10n/es/files_encryption.po22
-rw-r--r--l10n/es/files_trashbin.po58
-rw-r--r--l10n/es/settings.po12
-rw-r--r--l10n/es_AR/core.po15
-rw-r--r--l10n/es_AR/files.po115
-rw-r--r--l10n/es_AR/files_encryption.po29
-rw-r--r--l10n/es_AR/files_trashbin.po58
-rw-r--r--l10n/es_AR/settings.po19
-rw-r--r--l10n/es_AR/user_ldap.po15
-rw-r--r--l10n/es_AR/user_webdavauth.po11
-rw-r--r--l10n/et_EE/core.po6
-rw-r--r--l10n/et_EE/files.po108
-rw-r--r--l10n/et_EE/files_trashbin.po58
-rw-r--r--l10n/et_EE/settings.po12
-rw-r--r--l10n/eu/core.po10
-rw-r--r--l10n/eu/files.po112
-rw-r--r--l10n/eu/files_trashbin.po58
-rw-r--r--l10n/eu/settings.po16
-rw-r--r--l10n/fa/core.po6
-rw-r--r--l10n/fa/files.po110
-rw-r--r--l10n/fa/files_trashbin.po58
-rw-r--r--l10n/fa/settings.po12
-rw-r--r--l10n/fi_FI/core.po12
-rw-r--r--l10n/fi_FI/files.po110
-rw-r--r--l10n/fi_FI/files_trashbin.po58
-rw-r--r--l10n/fi_FI/settings.po16
-rw-r--r--l10n/fr/core.po6
-rw-r--r--l10n/fr/files.po112
-rw-r--r--l10n/fr/files_trashbin.po58
-rw-r--r--l10n/fr/settings.po12
-rw-r--r--l10n/gl/core.po6
-rw-r--r--l10n/gl/files.po110
-rw-r--r--l10n/gl/files_trashbin.po58
-rw-r--r--l10n/gl/settings.po12
-rw-r--r--l10n/he/core.po6
-rw-r--r--l10n/he/files.po108
-rw-r--r--l10n/he/files_trashbin.po58
-rw-r--r--l10n/he/settings.po12
-rw-r--r--l10n/hi/files.po106
-rw-r--r--l10n/hi/files_trashbin.po58
-rw-r--r--l10n/hi/settings.po12
-rw-r--r--l10n/hr/core.po6
-rw-r--r--l10n/hr/files.po106
-rw-r--r--l10n/hr/files_trashbin.po58
-rw-r--r--l10n/hr/settings.po12
-rw-r--r--l10n/hu_HU/core.po6
-rw-r--r--l10n/hu_HU/files.po112
-rw-r--r--l10n/hu_HU/files_trashbin.po58
-rw-r--r--l10n/hu_HU/settings.po12
-rw-r--r--l10n/ia/core.po6
-rw-r--r--l10n/ia/files.po106
-rw-r--r--l10n/ia/files_trashbin.po58
-rw-r--r--l10n/ia/settings.po12
-rw-r--r--l10n/id/core.po6
-rw-r--r--l10n/id/files.po106
-rw-r--r--l10n/id/files_trashbin.po58
-rw-r--r--l10n/id/settings.po12
-rw-r--r--l10n/is/core.po6
-rw-r--r--l10n/is/files.po110
-rw-r--r--l10n/is/files_trashbin.po58
-rw-r--r--l10n/is/settings.po12
-rw-r--r--l10n/it/core.po15
-rw-r--r--l10n/it/files.po112
-rw-r--r--l10n/it/files_trashbin.po58
-rw-r--r--l10n/it/settings.po20
-rw-r--r--l10n/ja_JP/core.po8
-rw-r--r--l10n/ja_JP/files.po112
-rw-r--r--l10n/ja_JP/files_trashbin.po58
-rw-r--r--l10n/ja_JP/settings.po12
-rw-r--r--l10n/ka_GE/core.po6
-rw-r--r--l10n/ka_GE/files.po108
-rw-r--r--l10n/ka_GE/files_trashbin.po58
-rw-r--r--l10n/ka_GE/settings.po12
-rw-r--r--l10n/ko/core.po25
-rw-r--r--l10n/ko/files.po121
-rw-r--r--l10n/ko/files_encryption.po30
-rw-r--r--l10n/ko/files_external.po21
-rw-r--r--l10n/ko/files_trashbin.po58
-rw-r--r--l10n/ko/lib.po19
-rw-r--r--l10n/ko/settings.po34
-rw-r--r--l10n/ko/user_ldap.po18
-rw-r--r--l10n/ko/user_webdavauth.po11
-rw-r--r--l10n/ku_IQ/files.po106
-rw-r--r--l10n/ku_IQ/files_trashbin.po58
-rw-r--r--l10n/ku_IQ/settings.po12
-rw-r--r--l10n/lb/core.po6
-rw-r--r--l10n/lb/files.po106
-rw-r--r--l10n/lb/files_trashbin.po58
-rw-r--r--l10n/lb/settings.po12
-rw-r--r--l10n/lt_LT/core.po6
-rw-r--r--l10n/lt_LT/files.po108
-rw-r--r--l10n/lt_LT/files_trashbin.po58
-rw-r--r--l10n/lt_LT/settings.po12
-rw-r--r--l10n/lv/core.po6
-rw-r--r--l10n/lv/files.po106
-rw-r--r--l10n/lv/files_trashbin.po58
-rw-r--r--l10n/lv/settings.po12
-rw-r--r--l10n/mk/core.po6
-rw-r--r--l10n/mk/files.po108
-rw-r--r--l10n/mk/files_trashbin.po58
-rw-r--r--l10n/mk/settings.po12
-rw-r--r--l10n/ms_MY/core.po6
-rw-r--r--l10n/ms_MY/files.po106
-rw-r--r--l10n/ms_MY/files_trashbin.po58
-rw-r--r--l10n/ms_MY/settings.po12
-rw-r--r--l10n/nb_NO/core.po6
-rw-r--r--l10n/nb_NO/files.po106
-rw-r--r--l10n/nb_NO/files_trashbin.po58
-rw-r--r--l10n/nb_NO/settings.po12
-rw-r--r--l10n/nl/core.po6
-rw-r--r--l10n/nl/files.po110
-rw-r--r--l10n/nl/files_trashbin.po58
-rw-r--r--l10n/nl/settings.po12
-rw-r--r--l10n/nn_NO/files.po106
-rw-r--r--l10n/nn_NO/files_trashbin.po58
-rw-r--r--l10n/nn_NO/settings.po12
-rw-r--r--l10n/oc/core.po6
-rw-r--r--l10n/oc/files.po106
-rw-r--r--l10n/oc/files_trashbin.po58
-rw-r--r--l10n/oc/settings.po12
-rw-r--r--l10n/pl/core.po8
-rw-r--r--l10n/pl/files.po110
-rw-r--r--l10n/pl/files_trashbin.po58
-rw-r--r--l10n/pl/settings.po12
-rw-r--r--l10n/pl_PL/files.po106
-rw-r--r--l10n/pl_PL/files_trashbin.po58
-rw-r--r--l10n/pl_PL/settings.po12
-rw-r--r--l10n/pt_BR/core.po33
-rw-r--r--l10n/pt_BR/files.po119
-rw-r--r--l10n/pt_BR/files_encryption.po29
-rw-r--r--l10n/pt_BR/files_external.po27
-rw-r--r--l10n/pt_BR/files_trashbin.po58
-rw-r--r--l10n/pt_BR/files_versions.po4
-rw-r--r--l10n/pt_BR/lib.po14
-rw-r--r--l10n/pt_BR/settings.po82
-rw-r--r--l10n/pt_BR/user_webdavauth.po13
-rw-r--r--l10n/pt_PT/core.po10
-rw-r--r--l10n/pt_PT/files.po113
-rw-r--r--l10n/pt_PT/files_trashbin.po58
-rw-r--r--l10n/pt_PT/settings.po20
-rw-r--r--l10n/ro/core.po6
-rw-r--r--l10n/ro/files.po110
-rw-r--r--l10n/ro/files_trashbin.po58
-rw-r--r--l10n/ro/settings.po12
-rw-r--r--l10n/ru/core.po6
-rw-r--r--l10n/ru/files.po110
-rw-r--r--l10n/ru/files_trashbin.po58
-rw-r--r--l10n/ru/settings.po12
-rw-r--r--l10n/ru_RU/core.po8
-rw-r--r--l10n/ru_RU/files.po119
-rw-r--r--l10n/ru_RU/files_encryption.po25
-rw-r--r--l10n/ru_RU/files_trashbin.po58
-rw-r--r--l10n/ru_RU/settings.po14
-rw-r--r--l10n/ru_RU/user_webdavauth.po9
-rw-r--r--l10n/si_LK/core.po6
-rw-r--r--l10n/si_LK/files.po106
-rw-r--r--l10n/si_LK/files_trashbin.po58
-rw-r--r--l10n/si_LK/settings.po12
-rw-r--r--l10n/sk_SK/core.po8
-rw-r--r--l10n/sk_SK/files.po114
-rw-r--r--l10n/sk_SK/files_external.po27
-rw-r--r--l10n/sk_SK/files_trashbin.po58
-rw-r--r--l10n/sk_SK/settings.po16
-rw-r--r--l10n/sk_SK/user_ldap.po17
-rw-r--r--l10n/sk_SK/user_webdavauth.po6
-rw-r--r--l10n/sl/core.po6
-rw-r--r--l10n/sl/files.po108
-rw-r--r--l10n/sl/files_trashbin.po58
-rw-r--r--l10n/sl/settings.po12
-rw-r--r--l10n/sr/core.po6
-rw-r--r--l10n/sr/files.po108
-rw-r--r--l10n/sr/files_trashbin.po58
-rw-r--r--l10n/sr/settings.po12
-rw-r--r--l10n/sr@latin/files.po106
-rw-r--r--l10n/sr@latin/files_trashbin.po58
-rw-r--r--l10n/sr@latin/settings.po12
-rw-r--r--l10n/sv/core.po8
-rw-r--r--l10n/sv/files.po112
-rw-r--r--l10n/sv/files_trashbin.po58
-rw-r--r--l10n/sv/settings.po19
-rw-r--r--l10n/ta_LK/core.po6
-rw-r--r--l10n/ta_LK/files.po108
-rw-r--r--l10n/ta_LK/files_trashbin.po58
-rw-r--r--l10n/ta_LK/settings.po12
-rw-r--r--l10n/templates/core.pot2
-rw-r--r--l10n/templates/files.pot104
-rw-r--r--l10n/templates/files_encryption.pot2
-rw-r--r--l10n/templates/files_external.pot12
-rw-r--r--l10n/templates/files_sharing.pot2
-rw-r--r--l10n/templates/files_trashbin.pot58
-rw-r--r--l10n/templates/files_versions.pot2
-rw-r--r--l10n/templates/lib.pot12
-rw-r--r--l10n/templates/settings.pot10
-rw-r--r--l10n/templates/user_ldap.pot2
-rw-r--r--l10n/templates/user_webdavauth.pot2
-rw-r--r--l10n/th_TH/core.po6
-rw-r--r--l10n/th_TH/files.po112
-rw-r--r--l10n/th_TH/files_trashbin.po58
-rw-r--r--l10n/th_TH/settings.po12
-rw-r--r--l10n/tr/core.po6
-rw-r--r--l10n/tr/files.po110
-rw-r--r--l10n/tr/files_trashbin.po58
-rw-r--r--l10n/tr/settings.po12
-rw-r--r--l10n/uk/core.po6
-rw-r--r--l10n/uk/files.po108
-rw-r--r--l10n/uk/files_trashbin.po58
-rw-r--r--l10n/uk/settings.po12
-rw-r--r--l10n/vi/core.po6
-rw-r--r--l10n/vi/files.po108
-rw-r--r--l10n/vi/files_trashbin.po58
-rw-r--r--l10n/vi/settings.po12
-rw-r--r--l10n/zh_CN.GB2312/core.po6
-rw-r--r--l10n/zh_CN.GB2312/files.po108
-rw-r--r--l10n/zh_CN.GB2312/files_trashbin.po58
-rw-r--r--l10n/zh_CN.GB2312/settings.po12
-rw-r--r--l10n/zh_CN/core.po8
-rw-r--r--l10n/zh_CN/files.po110
-rw-r--r--l10n/zh_CN/files_trashbin.po58
-rw-r--r--l10n/zh_CN/settings.po12
-rw-r--r--l10n/zh_HK/files.po106
-rw-r--r--l10n/zh_HK/files_trashbin.po58
-rw-r--r--l10n/zh_HK/settings.po12
-rw-r--r--l10n/zh_TW/core.po6
-rw-r--r--l10n/zh_TW/files.po110
-rw-r--r--l10n/zh_TW/files_trashbin.po58
-rw-r--r--l10n/zh_TW/settings.po12
-rw-r--r--lib/app.php48
-rw-r--r--lib/archive/tar.php2
-rw-r--r--lib/archive/zip.php2
-rw-r--r--lib/base.php18
-rw-r--r--lib/cache/file.php4
-rw-r--r--lib/connector/sabre/directory.php19
-rw-r--r--lib/connector/sabre/file.php19
-rw-r--r--lib/connector/sabre/node.php66
-rw-r--r--lib/connector/sabre/quotaplugin.php2
-rw-r--r--lib/connector/sabre/request.php50
-rw-r--r--lib/filecache.php539
-rw-r--r--lib/filecache/cached.php81
-rw-r--r--lib/filecache/update.php227
-rw-r--r--lib/filechunking.php38
-rw-r--r--lib/fileproxy.php2
-rw-r--r--lib/fileproxy/fileoperations.php6
-rw-r--r--lib/fileproxy/quota.php28
-rw-r--r--lib/files.php442
-rw-r--r--lib/files/cache/cache.php521
-rw-r--r--lib/files/cache/legacy.php81
-rw-r--r--lib/files/cache/permissions.php102
-rw-r--r--lib/files/cache/scanner.php146
-rw-r--r--lib/files/cache/updater.php105
-rw-r--r--lib/files/cache/upgrade.php159
-rw-r--r--lib/files/cache/watcher.php72
-rw-r--r--lib/files/filesystem.php628
-rw-r--r--lib/files/mount.php188
-rw-r--r--lib/files/storage/common.php (renamed from lib/filestorage/common.php)223
-rw-r--r--lib/files/storage/commontest.php (renamed from lib/filestorage/commontest.php)13
-rw-r--r--lib/files/storage/local.php (renamed from lib/filestorage/local.php)25
-rw-r--r--lib/files/storage/storage.php88
-rw-r--r--lib/files/storage/temporary.php26
-rw-r--r--lib/files/stream/close.php100
-rw-r--r--lib/files/stream/dir.php47
-rw-r--r--lib/files/stream/oc.php129
-rw-r--r--lib/files/stream/staticstream.php (renamed from lib/streamwrappers.php)136
-rw-r--r--lib/files/view.php958
-rw-r--r--lib/filestorage.php67
-rw-r--r--lib/filestorage/temporary.php17
-rw-r--r--lib/filesystem.php680
-rw-r--r--lib/filesystemview.php663
-rw-r--r--lib/group/database.php11
-rw-r--r--lib/helper.php10
-rw-r--r--lib/image.php2
-rw-r--r--lib/installer.php101
-rw-r--r--lib/l10n.php2
-rw-r--r--lib/l10n/ko.php1
-rw-r--r--lib/ocs/cloud.php8
-rw-r--r--lib/ocsclient.php4
-rw-r--r--lib/public/files.php2
-rw-r--r--lib/public/share.php651
-rw-r--r--lib/public/util.php22
-rwxr-xr-xlib/request.php45
-rw-r--r--lib/search/provider/file.php2
-rw-r--r--lib/user/database.php21
-rwxr-xr-xlib/util.php55
-rw-r--r--ocs/providers.php2
-rw-r--r--settings/ajax/apps/ocs.php8
-rw-r--r--settings/ajax/updateapp.php17
-rw-r--r--settings/apps.php13
-rw-r--r--settings/css/settings.css15
-rw-r--r--settings/js/apps.js30
-rw-r--r--settings/l10n/ca.php4
-rw-r--r--settings/l10n/cs_CZ.php4
-rw-r--r--settings/l10n/es_AR.php4
-rw-r--r--settings/l10n/eu.php2
-rw-r--r--settings/l10n/fi_FI.php2
-rw-r--r--settings/l10n/it.php4
-rw-r--r--settings/l10n/ko.php18
-rw-r--r--settings/l10n/pt_BR.php55
-rw-r--r--settings/l10n/pt_PT.php4
-rw-r--r--settings/l10n/ru_RU.php1
-rw-r--r--settings/l10n/sk_SK.php2
-rw-r--r--settings/l10n/sv.php4
-rw-r--r--settings/routes.php2
-rw-r--r--settings/templates/apps.php7
-rw-r--r--settings/templates/users.php4
-rw-r--r--tests/lib/cache/file.php6
-rw-r--r--tests/lib/files/cache/cache.php215
-rw-r--r--tests/lib/files/cache/permissions.php56
-rw-r--r--tests/lib/files/cache/scanner.php141
-rw-r--r--tests/lib/files/cache/updater.php147
-rw-r--r--tests/lib/files/cache/watcher.php121
-rw-r--r--tests/lib/files/filesystem.php110
-rw-r--r--tests/lib/files/mount.php41
-rw-r--r--tests/lib/files/storage/commontest.php (renamed from tests/lib/filestorage/commontest.php)9
-rw-r--r--tests/lib/files/storage/local.php (renamed from tests/lib/filestorage/local.php)10
-rw-r--r--tests/lib/files/storage/storage.php (renamed from tests/lib/filestorage.php)30
-rw-r--r--tests/lib/files/view.php251
-rw-r--r--tests/lib/filesystem.php139
-rw-r--r--tests/lib/streamwrappers.php95
589 files changed, 17539 insertions, 9506 deletions
diff --git a/apps/files/ajax/delete.php b/apps/files/ajax/delete.php
index 575b8c8d9ea..da7e9d6b2aa 100644
--- a/apps/files/ajax/delete.php
+++ b/apps/files/ajax/delete.php
@@ -12,10 +12,12 @@ $files = isset($_POST["file"]) ? stripslashes($_POST["file"]) : stripslashes($_P
$files = json_decode($files);
$filesWithError = '';
+
$success = true;
+
//Now delete
foreach ($files as $file) {
- if (!OC_Files::delete($dir, $file)) {
+ if (($dir === '' && $file === 'Shared') || !\OC\Files\Filesystem::unlink($dir . '/' . $file)) {
$filesWithError .= $file . "\n";
$success = false;
}
diff --git a/apps/files/ajax/list.php b/apps/files/ajax/list.php
index cade7e872b3..878e4cb2159 100644
--- a/apps/files/ajax/list.php
+++ b/apps/files/ajax/list.php
@@ -32,7 +32,7 @@ if($doBreadcrumb) {
// make filelist
$files = array();
-foreach( OC_Files::getdirectorycontent( $dir ) as $i ) {
+foreach( \OC\Files\Filesystem::getDirectoryContent( $dir ) as $i ) {
$i["date"] = OCP\Util::formatDate($i["mtime"] );
$files[] = $i;
}
diff --git a/apps/files/ajax/move.php b/apps/files/ajax/move.php
index 4ebc3f42d9f..78ed218c136 100644
--- a/apps/files/ajax/move.php
+++ b/apps/files/ajax/move.php
@@ -7,19 +7,23 @@ OCP\JSON::checkLoggedIn();
OCP\JSON::callCheck();
// Get data
-$dir = stripslashes($_GET["dir"]);
-$file = stripslashes($_GET["file"]);
-$target = stripslashes(rawurldecode($_GET["target"]));
+$dir = stripslashes($_POST["dir"]);
+$file = stripslashes($_POST["file"]);
+$target = stripslashes(rawurldecode($_POST["target"]));
-$l=OC_L10N::get('files');
-
-if(OC_Filesystem::file_exists($target . '/' . $file)) {
- OCP\JSON::error(array("data" => array( "message" => $l->t("Could not move %s - File with this name already exists", array($file)) )));
+if(\OC\Files\Filesystem::file_exists($target . '/' . $file)) {
+ OCP\JSON::error(array("data" => array( "message" => "Could not move $file - File with this name already exists" )));
exit;
}
-if(OC_Files::move($dir, $file, $target, $file)) {
- OCP\JSON::success(array("data" => array( "dir" => $dir, "files" => $file )));
-} else {
- OCP\JSON::error(array("data" => array( "message" => $l->t("Could not move %s", array($file)) )));
+if ($dir != '' || $file != 'Shared') {
+ $targetFile = \OC\Files\Filesystem::normalizePath($target . '/' . $file);
+ $sourceFile = \OC\Files\Filesystem::normalizePath($dir . '/' . $file);
+ if(\OC\Files\Filesystem::rename($sourceFile, $targetFile)) {
+ OCP\JSON::success(array("data" => array( "dir" => $dir, "files" => $file )));
+ } else {
+ OCP\JSON::error(array("data" => array( "message" => "Could not move $file" )));
+ }
+}else{
+ OCP\JSON::error(array("data" => array( "message" => "Could not move $file" )));
}
diff --git a/apps/files/ajax/newfile.php b/apps/files/ajax/newfile.php
index 2bac9bb20ba..38714f34a63 100644
--- a/apps/files/ajax/newfile.php
+++ b/apps/files/ajax/newfile.php
@@ -63,13 +63,12 @@ if($source) {
$ctx = stream_context_create(null, array('notification' =>'progress'));
$sourceStream=fopen($source, 'rb', false, $ctx);
$target=$dir.'/'.$filename;
- $result=OC_Filesystem::file_put_contents($target, $sourceStream);
+ $result=\OC\Files\Filesystem::file_put_contents($target, $sourceStream);
if($result) {
- $target = OC_Filesystem::normalizePath($target);
- $meta = OC_FileCache::get($target);
+ $meta = \OC\Files\Filesystem::getFileInfo($target);
$mime=$meta['mimetype'];
- $id = OC_FileCache::getId($target);
- $eventSource->send('success', array('mime'=>$mime, 'size'=>OC_Filesystem::filesize($target), 'id' => $id));
+ $id = $meta['fileid'];
+ $eventSource->send('success', array('mime'=>$mime, 'size'=>\OC\Files\Filesystem::filesize($target), 'id' => $id));
} else {
$eventSource->send('error', "Error while downloading ".$source. ' to '.$target);
}
@@ -77,15 +76,15 @@ if($source) {
exit();
} else {
if($content) {
- if(OC_Filesystem::file_put_contents($dir.'/'.$filename, $content)) {
- $meta = OC_FileCache::get($dir.'/'.$filename);
- $id = OC_FileCache::getId($dir.'/'.$filename);
+ 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::newFile($dir, $filename, 'file')) {
- $meta = OC_FileCache::get($dir.'/'.$filename);
- $id = OC_FileCache::getId($dir.'/'.$filename);
+ }elseif(\OC\Files\Filesystem::touch($dir . '/' . $filename)) {
+ $meta = \OC\Files\Filesystem::getFileInfo($dir.'/'.$filename);
+ $id = $meta['fileid'];
OCP\JSON::success(array("data" => array('content'=>$content, 'id' => $id)));
exit();
}
diff --git a/apps/files/ajax/newfolder.php b/apps/files/ajax/newfolder.php
index 0f1f2f14eb0..e26e1238bc6 100644
--- a/apps/files/ajax/newfolder.php
+++ b/apps/files/ajax/newfolder.php
@@ -19,13 +19,14 @@ if(strpos($foldername, '/')!==false) {
exit();
}
-if(OC_Files::newFile($dir, stripslashes($foldername), 'dir')) {
+if(\OC\Files\Filesystem::mkdir($dir . '/' . stripslashes($foldername))) {
if ( $dir != '/') {
$path = $dir.'/'.$foldername;
} else {
$path = '/'.$foldername;
}
- $id = OC_FileCache::getId($path);
+ $meta = \OC\Files\Filesystem::getFileInfo($path);
+ $id = $meta['fileid'];
OCP\JSON::success(array("data" => array('id'=>$id)));
exit();
}
diff --git a/apps/files/ajax/rawlist.php b/apps/files/ajax/rawlist.php
index e0aa0bdac52..1cd2944483c 100644
--- a/apps/files/ajax/rawlist.php
+++ b/apps/files/ajax/rawlist.php
@@ -15,7 +15,7 @@ $mimetype = isset($_GET['mimetype']) ? $_GET['mimetype'] : '';
// make filelist
$files = array();
-foreach( OC_Files::getdirectorycontent( $dir, $mimetype ) as $i ) {
+foreach( \OC\Files\Filesystem::getDirectoryContent( $dir, $mimetype ) as $i ) {
$i["date"] = OCP\Util::formatDate($i["mtime"] );
$i['mimetype_icon'] = $i['type'] == 'dir' ? \mimetype_icon('dir'): \mimetype_icon($i['mimetype']);
$files[] = $i;
diff --git a/apps/files/ajax/rename.php b/apps/files/ajax/rename.php
index 89b4d4bba73..970aaa638da 100644
--- a/apps/files/ajax/rename.php
+++ b/apps/files/ajax/rename.php
@@ -11,10 +11,14 @@ $dir = stripslashes($_GET["dir"]);
$file = stripslashes($_GET["file"]);
$newname = stripslashes($_GET["newname"]);
-// Delete
-if( $newname !== '.' and OC_Files::move( $dir, $file, $dir, $newname )) {
- OCP\JSON::success(array("data" => array( "dir" => $dir, "file" => $file, "newname" => $newname )));
-} else {
- $l=OC_L10N::get('files');
- OCP\JSON::error(array("data" => array( "message" => $l->t("Unable to rename file") )));
+if ( $newname !== '.' and ($dir != '' || $file != 'Shared') and $newname !== '.') {
+ $targetFile = \OC\Files\Filesystem::normalizePath($dir . '/' . $newname);
+ $sourceFile = \OC\Files\Filesystem::normalizePath($dir . '/' . $file);
+ if(\OC\Files\Filesystem::rename($sourceFile, $targetFile)) {
+ OCP\JSON::success(array("data" => array( "dir" => $dir, "file" => $file, "newname" => $newname )));
+ } else {
+ OCP\JSON::error(array("data" => array( "message" => "Unable to rename file" )));
+ }
+}else{
+ OCP\JSON::error(array("data" => array( "message" => "Unable to rename file" )));
}
diff --git a/apps/files/ajax/scan.php b/apps/files/ajax/scan.php
index a819578e309..391b98608bd 100644
--- a/apps/files/ajax/scan.php
+++ b/apps/files/ajax/scan.php
@@ -1,44 +1,71 @@
<?php
+set_time_limit(0); //scanning can take ages
+session_write_close();
-set_time_limit(0);//scanning can take ages
+$force = (isset($_GET['force']) and ($_GET['force'] === 'true'));
+$dir = isset($_GET['dir']) ? $_GET['dir'] : '';
-$force=isset($_GET['force']) and $_GET['force']=='true';
-$dir=isset($_GET['dir'])?$_GET['dir']:'';
-$checkOnly=isset($_GET['checkonly']) and $_GET['checkonly']=='true';
+$eventSource = new OC_EventSource();
+ScanListener::$eventSource = $eventSource;
+ScanListener::$view = \OC\Files\Filesystem::getView();
-$eventSource=false;
-if(!$checkOnly) {
- $eventSource=new OC_EventSource();
-}
+OC_Hook::connect('\OC\Files\Cache\Scanner', 'scan_folder', 'ScanListener', 'folder');
+OC_Hook::connect('\OC\Files\Cache\Scanner', 'scan_file', 'ScanListener', 'file');
-session_write_close();
+$absolutePath = \OC\Files\Filesystem::getView()->getAbsolutePath($dir);
-//create the file cache if necessary
-if($force or !OC_FileCache::inCache('')) {
- if(!$checkOnly) {
- OCP\DB::beginTransaction();
+$mountPoints = \OC\Files\Filesystem::getMountPoints($absolutePath);
+$mountPoints[] = \OC\Files\Filesystem::getMountPoint($absolutePath);
+$mountPoints = array_reverse($mountPoints); //start with the mount point of $dir
- if(OC_Cache::isFast()) {
- OC_Cache::clear('fileid/'); //make sure the old fileid's don't mess things up
+foreach ($mountPoints as $mountPoint) {
+ $storage = \OC\Files\Filesystem::getStorage($mountPoint);
+ if ($storage) {
+ ScanListener::$mountPoints[$storage->getId()] = $mountPoint;
+ $scanner = $storage->getScanner();
+ if ($force) {
+ $scanner->scan('');
+ } else {
+ $scanner->backgroundScan();
}
-
- OC_FileCache::scan($dir, $eventSource);
- OC_FileCache::clean();
- OCP\DB::commit();
- $eventSource->send('success', true);
- } else {
- OCP\JSON::success(array('data'=>array('done'=>true)));
- exit;
}
-} else {
- if($checkOnly) {
- OCP\JSON::success(array('data'=>array('done'=>false)));
- exit;
+}
+
+$eventSource->send('done', ScanListener::$fileCount);
+$eventSource->close();
+
+class ScanListener {
+
+ static public $fileCount = 0;
+ static public $lastCount = 0;
+
+ /**
+ * @var \OC\Files\View $view
+ */
+ static public $view;
+
+ /**
+ * @var array $mountPoints map storage ids to mountpoints
+ */
+ static public $mountPoints = array();
+
+ /**
+ * @var \OC_EventSource event source to pass events to
+ */
+ static public $eventSource;
+
+ static function folder($params) {
+ $internalPath = $params['path'];
+ $mountPoint = self::$mountPoints[$params['storage']];
+ $path = self::$view->getRelativePath($mountPoint . $internalPath);
+ self::$eventSource->send('folder', $path);
}
- if(isset($eventSource)) {
- $eventSource->send('success', false);
- } else {
- exit;
+
+ static function file() {
+ self::$fileCount++;
+ if (self::$fileCount > self::$lastCount + 20) { //send a count update every 20 files
+ self::$lastCount = self::$fileCount;
+ self::$eventSource->send('count', self::$fileCount);
+ }
}
}
-$eventSource->close();
diff --git a/apps/files/ajax/upgrade.php b/apps/files/ajax/upgrade.php
new file mode 100644
index 00000000000..7237b02c0b0
--- /dev/null
+++ b/apps/files/ajax/upgrade.php
@@ -0,0 +1,44 @@
+<?php
+set_time_limit(0); //scanning can take ages
+session_write_close();
+
+$user = OC_User::getUser();
+$eventSource = new OC_EventSource();
+$listener = new UpgradeListener($eventSource);
+$legacy = new \OC\Files\Cache\Legacy($user);
+
+if ($legacy->hasItems()) {
+ OC_Hook::connect('\OC\Files\Cache\Upgrade', 'migrate_path', $listener, 'upgradePath');
+
+ OC_DB::beginTransaction();
+ $upgrade = new \OC\Files\Cache\Upgrade($legacy);
+ $count = $legacy->getCount();
+ $eventSource->send('total', $count);
+ $upgrade->upgradePath('/' . $user . '/files');
+ OC_DB::commit();
+}
+\OC\Files\Cache\Upgrade::upgradeDone($user);
+$eventSource->send('done', true);
+$eventSource->close();
+
+class UpgradeListener {
+ /**
+ * @var OC_EventSource $eventSource
+ */
+ private $eventSource;
+
+ private $count = 0;
+ private $lastSend = 0;
+
+ public function __construct($eventSource) {
+ $this->eventSource = $eventSource;
+ }
+
+ public function upgradePath($path) {
+ $this->count++;
+ if ($this->count > ($this->lastSend + 5)) {
+ $this->lastSend = $this->count;
+ $this->eventSource->send('count', $this->count);
+ }
+ }
+}
diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php
index 415524be629..9ecc1a6c2f4 100644
--- a/apps/files/ajax/upload.php
+++ b/apps/files/ajax/upload.php
@@ -21,13 +21,13 @@ if (!isset($_FILES['files'])) {
foreach ($_FILES['files']['error'] as $error) {
if ($error != 0) {
$errors = array(
- UPLOAD_ERR_OK => $l->t('There is no error, the file uploaded with success'),
- UPLOAD_ERR_INI_SIZE => $l->t('The uploaded file exceeds the upload_max_filesize directive in php.ini: ')
+ UPLOAD_ERR_OK => $l->t('There is no error, the file uploaded with success'),
+ UPLOAD_ERR_INI_SIZE => $l->t('The uploaded file exceeds the upload_max_filesize directive in php.ini: ')
. ini_get('upload_max_filesize'),
- UPLOAD_ERR_FORM_SIZE => $l->t('The uploaded file exceeds the MAX_FILE_SIZE directive that was specified'
+ UPLOAD_ERR_FORM_SIZE => $l->t('The uploaded file exceeds the MAX_FILE_SIZE directive that was specified'
. ' in the HTML form'),
- UPLOAD_ERR_PARTIAL => $l->t('The uploaded file was only partially uploaded'),
- UPLOAD_ERR_NO_FILE => $l->t('No file was uploaded'),
+ UPLOAD_ERR_PARTIAL => $l->t('The uploaded file was only partially uploaded'),
+ UPLOAD_ERR_NO_FILE => $l->t('No file was uploaded'),
UPLOAD_ERR_NO_TMP_DIR => $l->t('Missing a temporary folder'),
UPLOAD_ERR_CANT_WRITE => $l->t('Failed to write to disk'),
);
@@ -40,12 +40,17 @@ $files = $_FILES['files'];
$dir = $_POST['dir'];
$error = '';
+$maxUploadFilesize = OCP\Util::maxUploadFilesize($dir);
+$maxHumanFilesize = OCP\Util::humanFileSize($maxUploadFilesize);
+
$totalSize = 0;
foreach ($files['size'] as $size) {
$totalSize += $size;
}
-if ($totalSize > OC_Filesystem::free_space($dir)) {
- OCP\JSON::error(array('data' => array_merge(array('message' => $l->t('Not enough storage available')), $storageStats)));
+if ($totalSize > \OC\Files\Filesystem::free_space($dir)) {
+ OCP\JSON::error(array('data' => array('message' => $l->t('Not enough space available'),
+ 'uploadMaxFilesize' => $maxUploadFilesize,
+ 'maxHumanFilesize' => $maxHumanFilesize)));
exit();
}
@@ -55,19 +60,19 @@ if (strpos($dir, '..') === false) {
for ($i = 0; $i < $fileCount; $i++) {
$target = OCP\Files::buildNotExistingFileName(stripslashes($dir), $files['name'][$i]);
// $path needs to be normalized - this failed within drag'n'drop upload to a sub-folder
- $target = OC_Filesystem::normalizePath($target);
- if (is_uploaded_file($files['tmp_name'][$i]) and OC_Filesystem::fromTmpFile($files['tmp_name'][$i], $target)) {
- $meta = OC_FileCache::get($target);
- $id = OC_FileCache::getId($target);
-
+ $target = \OC\Files\Filesystem::normalizePath($target);
+ 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_merge(array('status' => 'success',
- 'mime' => $meta['mimetype'],
- 'size' => $meta['size'],
- 'id' => $id,
- 'name' => basename($target)), $storageStats
+ $result[] = array('status' => 'success',
+ 'mime' => $meta['mimetype'],
+ 'size' => $meta['size'],
+ 'id' => $meta['fileid'],
+ 'name' => basename($target),
+ 'uploadMaxFilesize' => $maxUploadFilesize,
+ 'maxHumanFilesize' => $maxHumanFilesize
);
}
}
diff --git a/apps/files/appinfo/app.php b/apps/files/appinfo/app.php
index 108f02930e2..ab2f3b01a29 100644
--- a/apps/files/appinfo/app.php
+++ b/apps/files/appinfo/app.php
@@ -1,5 +1,5 @@
<?php
-$l=OC_L10N::get('files');
+$l = OC_L10N::get('files');
OCP\App::registerAdmin('files', 'admin');
diff --git a/apps/files/appinfo/filesync.php b/apps/files/appinfo/filesync.php
index cbed56a6de5..47884a4f15e 100644
--- a/apps/files/appinfo/filesync.php
+++ b/apps/files/appinfo/filesync.php
@@ -43,7 +43,7 @@ if ($type != 'oc_chunked') {
die;
}
-if (!OC_Filesystem::is_file($file)) {
+if (!\OC\Files\Filesystem::is_file($file)) {
OC_Response::setStatus(OC_Response::STATUS_NOT_FOUND);
die;
}
@@ -51,7 +51,7 @@ if (!OC_Filesystem::is_file($file)) {
switch($_SERVER['REQUEST_METHOD']) {
case 'PUT':
$input = fopen("php://input", "r");
- $org_file = OC_Filesystem::fopen($file, 'rb');
+ $org_file = \OC\Files\Filesystem::fopen($file, 'rb');
$info = array(
'name' => basename($file),
);
diff --git a/apps/files/appinfo/info.xml b/apps/files/appinfo/info.xml
index 0a1b196b06f..7c82c839dab 100644
--- a/apps/files/appinfo/info.xml
+++ b/apps/files/appinfo/info.xml
@@ -5,7 +5,7 @@
<description>File Management</description>
<licence>AGPL</licence>
<author>Robin Appelman</author>
- <require>4.9</require>
+ <require>4.91</require>
<shipped>true</shipped>
<standalone/>
<default_enable/>
diff --git a/apps/files/appinfo/remote.php b/apps/files/appinfo/remote.php
index 6a78a1e0d75..6c92cc80b69 100644
--- a/apps/files/appinfo/remote.php
+++ b/apps/files/appinfo/remote.php
@@ -32,12 +32,14 @@ OC_Util::obEnd();
// Backends
$authBackend = new OC_Connector_Sabre_Auth();
$lockBackend = new OC_Connector_Sabre_Locks();
+$requestBackend = new OC_Connector_Sabre_Request();
// Create ownCloud Dir
$publicDir = new OC_Connector_Sabre_Directory('');
// Fire up server
$server = new Sabre_DAV_Server($publicDir);
+$server->httpRequest = $requestBackend;
$server->setBaseUri($baseuri);
// Load plugins
diff --git a/apps/files/appinfo/version b/apps/files/appinfo/version
index 0664a8fd291..2bf1ca5f549 100644
--- a/apps/files/appinfo/version
+++ b/apps/files/appinfo/version
@@ -1 +1 @@
-1.1.6
+1.1.7
diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index e65f724f688..ced2006ec06 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -23,7 +23,9 @@
#new>ul>li>p { cursor:pointer; }
#new>ul>li>form>input { padding:0.3em; margin:-0.3em; }
-#upload {
+#trash { height:17px; margin:0 0 0 1em; z-index:1010; position:absolute; right:13.5em; }
+
+#upload {
height:27px; padding:0; margin-left:0.2em; overflow:hidden;
}
#upload a {
@@ -109,6 +111,7 @@ table td.filename form { font-size:.85em; margin-left:3em; margin-right:3em; }
}
#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; }
a.action>img { max-height:16px; max-width:16px; vertical-align:text-bottom; }
.selectedActions { display:none; float:right; }
@@ -122,3 +125,22 @@ a.action>img { max-height:16px; max-width:16px; vertical-align:text-bottom; }
#scanning-message{ top:40%; left:40%; position:absolute; display:none; }
div.crumb a{ padding:0.9em 0 0.7em 0; }
+
+table.dragshadow {
+ width:auto;
+}
+table.dragshadow td.filename {
+ padding-left:36px;
+ padding-right:16px;
+}
+table.dragshadow td.size {
+ padding-right:8px;
+}
+#upgrade {
+ width: 400px;
+ position: absolute;
+ top: 200px;
+ left: 50%;
+ text-align: center;
+ margin-left: -200px;
+}
diff --git a/apps/files/download.php b/apps/files/download.php
index 1b70b1e38f8..e3fe24e45d7 100644
--- a/apps/files/download.php
+++ b/apps/files/download.php
@@ -26,7 +26,7 @@ OCP\User::checkLoggedIn();
$filename = $_GET["file"];
-if(!OC_Filesystem::file_exists($filename)) {
+if(!\OC\Files\Filesystem::file_exists($filename)) {
header("HTTP/1.0 404 Not Found");
$tmpl = new OCP\Template( '', '404', 'guest' );
$tmpl->assign('file', $filename);
@@ -34,7 +34,7 @@ if(!OC_Filesystem::file_exists($filename)) {
exit;
}
-$ftype=OC_Filesystem::getMimeType( $filename );
+$ftype=\OC\Files\Filesystem::getMimeType( $filename );
header('Content-Type:'.$ftype);
if ( preg_match( "/MSIE/", $_SERVER["HTTP_USER_AGENT"] ) ) {
@@ -44,7 +44,7 @@ if ( preg_match( "/MSIE/", $_SERVER["HTTP_USER_AGENT"] ) ) {
. '; filename="' . rawurlencode( basename($filename) ) . '"' );
}
OCP\Response::disableCaching();
-header('Content-Length: '.OC_Filesystem::filesize($filename));
+header('Content-Length: '.\OC\Files\Filesystem::filesize($filename));
OC_Util::obEnd();
-OC_Filesystem::readfile( $filename );
+\OC\Files\Filesystem::readfile( $filename );
diff --git a/apps/files/index.php b/apps/files/index.php
index e3197b9e3c0..104cf1a55d3 100644
--- a/apps/files/index.php
+++ b/apps/files/index.php
@@ -29,22 +29,39 @@ OCP\Util::addStyle('files', 'files');
OCP\Util::addscript('files', 'jquery.iframe-transport');
OCP\Util::addscript('files', 'jquery.fileupload');
OCP\Util::addscript('files', 'jquery-visibility');
-OCP\Util::addscript('files', 'files');
OCP\Util::addscript('files', 'filelist');
-OCP\Util::addscript('files', 'fileactions');
-OCP\Util::addscript('files', 'keyboardshortcuts');
OCP\App::setActiveNavigationEntry('files_index');
// Load the files
$dir = isset($_GET['dir']) ? stripslashes($_GET['dir']) : '';
// Redirect if directory does not exist
-if (!OC_Filesystem::is_dir($dir . '/')) {
- header('Location: ' . $_SERVER['SCRIPT_NAME'] . '');
+if (!\OC\Files\Filesystem::is_dir($dir . '/')) {
+ header('Location: ' . OCP\Util::getScriptName() . '');
exit();
}
+function fileCmp($a, $b) {
+ if ($a['type'] == 'dir' and $b['type'] != 'dir') {
+ return -1;
+ } elseif ($a['type'] != 'dir' and $b['type'] == 'dir') {
+ return 1;
+ } else {
+ return strnatcasecmp($a['name'], $b['name']);
+ }
+}
+
$files = array();
-foreach (OC_Files::getdirectorycontent($dir) as $i) {
+$user = OC_User::getUser();
+if (\OC\Files\Cache\Upgrade::needUpgrade($user)) { //dont load anything if we need to upgrade the cache
+ $content = array();
+ $needUpgrade = true;
+ $freeSpace = 0;
+} else {
+ $content = \OC\Files\Filesystem::getDirectoryContent($dir);
+ $freeSpace = \OC\Files\Filesystem::free_space($dir);
+ $needUpgrade = false;
+}
+foreach ($content as $i) {
$i['date'] = OCP\Util::formatDate($i['mtime']);
if ($i['type'] == 'file') {
$fileinfo = pathinfo($i['name']);
@@ -55,12 +72,12 @@ foreach (OC_Files::getdirectorycontent($dir) as $i) {
$i['extension'] = '';
}
}
- if ($i['directory'] == '/') {
- $i['directory'] = '';
- }
+ $i['directory'] = $dir;
$files[] = $i;
}
+usort($files, "fileCmp");
+
// Make breadcrumb
$breadcrumb = array();
$pathtohere = '';
@@ -81,34 +98,43 @@ $breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '');
$breadcrumbNav->assign('breadcrumb', $breadcrumb, false);
$breadcrumbNav->assign('baseURL', OCP\Util::linkTo('files', 'index.php') . '?dir=', false);
-$maxUploadFilesize=OCP\Util::maxUploadFilesize($dir);
-
$permissions = OCP\PERMISSION_READ;
-if (OC_Filesystem::isCreatable($dir . '/')) {
+if (\OC\Files\Filesystem::isCreatable($dir . '/')) {
$permissions |= OCP\PERMISSION_CREATE;
}
-if (OC_Filesystem::isUpdatable($dir . '/')) {
+if (\OC\Files\Filesystem::isUpdatable($dir . '/')) {
$permissions |= OCP\PERMISSION_UPDATE;
}
-if (OC_Filesystem::isDeletable($dir . '/')) {
+if (\OC\Files\Filesystem::isDeletable($dir . '/')) {
$permissions |= OCP\PERMISSION_DELETE;
}
-if (OC_Filesystem::isSharable($dir . '/')) {
+if (\OC\Files\Filesystem::isSharable($dir . '/')) {
$permissions |= OCP\PERMISSION_SHARE;
}
-// information about storage capacities
-$storageInfo=OC_Helper::getStorageInfo();
+if ($needUpgrade) {
+ OCP\Util::addscript('files', 'upgrade');
+ $tmpl = new OCP\Template('files', 'upgrade', 'user');
+ $tmpl->printPage();
+} else {
+ // information about storage capacities
+ $storageInfo=OC_Helper::getStorageInfo();
+ $maxUploadFilesize=OCP\Util::maxUploadFilesize($dir);
-$tmpl = new OCP\Template('files', 'index', 'user');
-$tmpl->assign('fileList', $list->fetchPage(), false);
-$tmpl->assign('breadcrumb', $breadcrumbNav->fetchPage(), false);
-$tmpl->assign('dir', OC_Filesystem::normalizePath($dir));
-$tmpl->assign('isCreatable', OC_Filesystem::isCreatable($dir . '/'));
-$tmpl->assign('permissions', $permissions);
-$tmpl->assign('files', $files);
-$tmpl->assign('uploadMaxFilesize', $maxUploadFilesize);
-$tmpl->assign('uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize));
-$tmpl->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true)));
-$tmpl->assign('usedSpacePercent', (int)$storageInfo['relative']);
-$tmpl->printPage();
+ OCP\Util::addscript('files', 'fileactions');
+ OCP\Util::addscript('files', 'files');
+ OCP\Util::addscript('files', 'keyboardshortcuts');
+ $tmpl = new OCP\Template('files', 'index', 'user');
+ $tmpl->assign('fileList', $list->fetchPage(), false);
+ $tmpl->assign('breadcrumb', $breadcrumbNav->fetchPage(), false);
+ $tmpl->assign('dir', \OC\Files\Filesystem::normalizePath($dir));
+ $tmpl->assign('isCreatable', \OC\Files\Filesystem::isCreatable($dir . '/'));
+ $tmpl->assign('permissions', $permissions);
+ $tmpl->assign('files', $files);
+ $tmpl->assign('trash', \OCP\App::isEnabled('files_trashbin'));
+ $tmpl->assign('uploadMaxFilesize', $maxUploadFilesize);
+ $tmpl->assign('uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize));
+ $tmpl->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true)));
+ $tmpl->assign('usedSpacePercent', (int)$storageInfo['relative']);
+ $tmpl->printPage();
+} \ No newline at end of file
diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js
index f5ee363a4c8..c30f1bcddd8 100644
--- a/apps/files/js/fileactions.js
+++ b/apps/files/js/fileactions.js
@@ -147,15 +147,19 @@ $(document).ready(function () {
} else {
var downloadScope = 'file';
}
- FileActions.register(downloadScope, 'Download', OC.PERMISSION_READ, function () {
- return OC.imagePath('core', 'actions/download');
- }, function (filename) {
- window.location = OC.filePath('files', 'ajax', 'download.php') + '?files=' + encodeURIComponent(filename) + '&dir=' + encodeURIComponent($('#dir').val());
- });
-
+
+ if (typeof disableDownloadActions == 'undefined' || !disableDownloadActions) {
+ FileActions.register(downloadScope, 'Download', OC.PERMISSION_READ, function () {
+ return OC.imagePath('core', 'actions/download');
+ }, function (filename) {
+ 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'));
});
+
});
FileActions.register('all', 'Delete', OC.PERMISSION_DELETE, function () {
@@ -185,6 +189,7 @@ FileActions.register('all', 'Rename', OC.PERMISSION_UPDATE, function () {
FileList.rename(filename);
});
+
FileActions.register('dir', 'Open', OC.PERMISSION_READ, '', function (filename) {
window.location = OC.linkTo('files', 'index.php') + '?dir=' + encodeURIComponent($('#dir').val()).replace(/%2F/g, '/') + '/' + encodeURIComponent(filename);
});
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 57c281f2fdc..72b353b48c2 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -271,65 +271,39 @@ var FileList={
}
},
do_delete:function(files){
+ if(files.substr){
+ files=[files];
+ }
+ for (var i in files) {
+ var deleteAction = $('tr').filterAttr('data-file',files[i]).children("td.date").children(".action.delete");
+ var oldHTML = deleteAction[0].outerHTML;
+ var newHTML = '<img class="move2trash" data-action="Delete" title="'+t('files', 'perform delete operation')+'" src="'+ OC.imagePath('core', 'loading.gif') +'"></a>';
+ deleteAction[0].outerHTML = newHTML;
+ }
// Finish any existing actions
if (FileList.lastAction) {
FileList.lastAction();
}
- FileList.prepareDeletion(files);
-
- if (!FileList.useUndo) {
- FileList.lastAction();
- } else {
- // NOTE: Temporary fix to change the text to unshared for files in root of Shared folder
- if ($('#dir').val() == '/Shared') {
- OC.Notification.showHtml(t('files', 'unshared {files}', {'files': escapeHTML(files)})+'<span class="undo">'+t('files', 'undo')+'</span>');
- } else {
- OC.Notification.showHtml(t('files', 'deleted {files}', {'files': escapeHTML(files)})+'<span class="undo">'+t('files', 'undo')+'</span>');
- }
- }
- },
- finishDelete:function(ready,sync){
- if(!FileList.deleteCanceled && FileList.deleteFiles){
- var fileNames=JSON.stringify(FileList.deleteFiles);
- $.ajax({
- url: OC.filePath('files', 'ajax', 'delete.php'),
- async:!sync,
- type:'post',
- data: {dir:$('#dir').val(),files:fileNames},
- complete: function(data){
- boolOperationFinished(data, function(){
- OC.Notification.hide();
- $.each(FileList.deleteFiles,function(index,file){
- FileList.remove(file);
+ var fileNames = JSON.stringify(files);
+ $.post(OC.filePath('files', 'ajax', 'delete.php'),
+ {dir:$('#dir').val(),files:fileNames},
+ function(result){
+ if (result.status == 'success') {
+ $.each(files,function(index,file){
+ var files = $('tr').filterAttr('data-file',file);
+ files.hide();
+ files.find('input[type="checkbox"]').removeAttr('checked');
+ files.removeClass('selected');
});
- FileList.deleteCanceled=true;
- FileList.deleteFiles=null;
- FileList.lastAction = null;
- if(ready){
- ready();
- }
- });
- }
- });
- }
- },
- prepareDeletion:function(files){
- if(files.substr){
- files=[files];
- }
- $.each(files,function(index,file){
- var files = $('tr').filterAttr('data-file',file);
- files.hide();
- files.find('input[type="checkbox"]').removeAttr('checked');
- files.removeClass('selected');
- });
- procesSelection();
- FileList.deleteCanceled=false;
- FileList.deleteFiles=files;
- FileList.lastAction = function() {
- FileList.finishDelete(null, true);
- };
+ procesSelection();
+ } else {
+ $.each(files,function(index,file) {
+ var deleteAction = $('tr').filterAttr('data-file',file).children("td.date").children(".move2trash");
+ deleteAction[0].outerHTML = oldHTML;
+ });
+ }
+ });
}
};
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index ed240214104..d9361f771d1 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -114,6 +114,11 @@ $(document).ready(function() {
$(this).parent().children('#file_upload_start').trigger('click');
return false;
});
+
+ // Show trash bin
+ $('#trash a').live('click', function() {
+ window.location=OC.filePath('files_trashbin', '', 'index.php');
+ });
var lastChecked;
@@ -670,12 +675,8 @@ $(document).ready(function() {
});
});
- //check if we need to scan the filesystem
- $.get(OC.filePath('files','ajax','scan.php'),{checkonly:'true'}, function(response) {
- if(response.data.done){
- scanFiles();
- }
- }, "json");
+ //do a background scan if needed
+ scanFiles();
var lastWidth = 0;
var breadcrumbs = [];
@@ -774,27 +775,23 @@ $(document).ready(function() {
}
});
-function scanFiles(force,dir){
+function scanFiles(force, dir){
if(!dir){
- dir='';
+ dir = '';
}
- force=!!force; //cast to bool
- scanFiles.scanning=true;
- $('#scanning-message').show();
- $('#fileList').remove();
- var scannerEventSource=new OC.EventSource(OC.filePath('files','ajax','scan.php'),{force:force,dir:dir});
- scanFiles.cancel=scannerEventSource.close.bind(scannerEventSource);
- scannerEventSource.listen('scanning',function(data){
- $('#scan-count').text(t('files', '{count} files scanned', {count: data.count}));
- $('#scan-current').text(data.file+'/');
+ force = !!force; //cast to bool
+ scanFiles.scanning = true;
+ var scannerEventSource = new OC.EventSource(OC.filePath('files','ajax','scan.php'),{force:force,dir:dir});
+ scanFiles.cancel = scannerEventSource.close.bind(scannerEventSource);
+ scannerEventSource.listen('count',function(count){
+ console.log(count + 'files scanned')
});
- scannerEventSource.listen('success',function(success){
+ scannerEventSource.listen('folder',function(path){
+ console.log('now scanning ' + path)
+ });
+ scannerEventSource.listen('done',function(count){
scanFiles.scanning=false;
- if(success){
- window.location.reload();
- }else{
- alert(t('files', 'error while scanning'));
- }
+ console.log('done after ' + count + 'files');
});
}
scanFiles.scanning=false;
@@ -813,32 +810,101 @@ function updateBreadcrumb(breadcrumbHtml) {
$('p.nav').empty().html(breadcrumbHtml);
}
-//options for file drag/dropp
+var createDragShadow = function(event){
+ //select dragged file
+ var isDragSelected = $(event.target).parents('tr').find('td input:first').prop('checked');
+ if (!isDragSelected) {
+ //select dragged file
+ $(event.target).parents('tr').find('td input:first').prop('checked',true);
+ }
+
+ var selectedFiles = getSelectedFiles();
+
+ if (!isDragSelected && selectedFiles.length == 1) {
+ //revert the selection
+ $(event.target).parents('tr').find('td input:first').prop('checked',false);
+ }
+
+ //also update class when we dragged more than one file
+ if (selectedFiles.length > 1) {
+ $(event.target).parents('tr').addClass('selected');
+ }
+
+ // build dragshadow
+ var dragshadow = $('<table class="dragshadow"></table>');
+ var tbody = $('<tbody></tbody>');
+ dragshadow.append(tbody);
+
+ var dir=$('#dir').val();
+
+ $(selectedFiles).each(function(i,elem){
+ var newtr = $('<tr data-dir="'+dir+'" data-filename="'+elem.name+'">'
+ +'<td class="filename">'+elem.name+'</td><td class="size">'+humanFileSize(elem.size)+'</td>'
+ +'</tr>');
+ tbody.append(newtr);
+ 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+')');
+ });
+ }
+ });
+
+ return dragshadow;
+}
+
+//options for file drag/drop
var dragOptions={
- distance: 20, revert: 'invalid', opacity: 0.7, helper: 'clone',
+ revert: 'invalid', revertDuration: 300,
+ opacity: 0.7, zIndex: 100, appendTo: 'body', cursorAt: { left: -5, top: -5 },
+ helper: createDragShadow, cursor: 'move',
stop: function(event, ui) {
$('#fileList tr td.filename').addClass('ui-draggable');
}
-};
+}
+
var folderDropOptions={
drop: function( event, ui ) {
- var file=ui.draggable.parent().data('file');
- var target=$(this).find('.nametext').text().trim();
- var dir=$('#dir').val();
- $.ajax({
- url: OC.filePath('files', 'ajax', 'move.php'),
- data: "dir="+encodeURIComponent(dir)+"&file="+encodeURIComponent(file)+'&target='+encodeURIComponent(dir)+'/'+encodeURIComponent(target),
- complete: function(data){boolOperationFinished(data, function(){
- var el = $('#fileList tr').filterAttr('data-file',file).find('td.filename');
- el.draggable('destroy');
- FileList.remove(file);
- });}
+ //don't allow moving a file into a selected folder
+ if ($(event.target).parents('tr').find('td input:first').prop('checked') === true) {
+ return false;
+ }
+
+ var target=$.trim($(this).find('.nametext').text());
+
+ var files = ui.helper.find('tr');
+ $(files).each(function(i,row){
+ var dir = $(row).data('dir');
+ var file = $(row).data('filename');
+ $.post(OC.filePath('files', 'ajax', 'move.php'), { dir: dir, file: file, target: dir+'/'+target }, function(result) {
+ if (result) {
+ if (result.status === 'success') {
+ //recalculate folder size
+ var oldSize = $('#fileList tr').filterAttr('data-file',target).data('size');
+ var newSize = oldSize + $('#fileList tr').filterAttr('data-file',file).data('size');
+ $('#fileList tr').filterAttr('data-file',target).data('size', newSize);
+ $('#fileList tr').filterAttr('data-file',target).find('td.filesize').text(humanFileSize(newSize));
+
+ FileList.remove(file);
+ procesSelection();
+ $('#notification').hide();
+ } else {
+ $('#notification').hide();
+ $('#notification').text(result.data.message);
+ $('#notification').fadeIn();
+ }
+ } else {
+ OC.dialogs.alert(t('Error moving file'));
+ }
+ });
});
- }
+ },
+ tolerance: 'pointer'
}
+
var crumbDropOptions={
drop: function( event, ui ) {
- var file=ui.draggable.parent().data('file');
var target=$(this).data('dir');
var dir=$('#dir').val();
while(dir.substr(0,1)=='/'){//remove extra leading /'s
@@ -851,12 +917,25 @@ var crumbDropOptions={
if(target==dir || target+'/'==dir){
return;
}
- $.ajax({
- url: OC.filePath('files', 'ajax', 'move.php'),
- data: "dir="+encodeURIComponent(dir)+"&file="+encodeURIComponent(file)+'&target='+encodeURIComponent(target),
- complete: function(data){boolOperationFinished(data, function(){
- FileList.remove(file);
- });}
+ var files = ui.helper.find('tr');
+ $(files).each(function(i,row){
+ var dir = $(row).data('dir');
+ var file = $(row).data('filename');
+ $.post(OC.filePath('files', 'ajax', 'move.php'), { dir: dir, file: file, target: target }, function(result) {
+ if (result) {
+ if (result.status === 'success') {
+ FileList.remove(file);
+ procesSelection();
+ $('#notification').hide();
+ } else {
+ $('#notification').hide();
+ $('#notification').text(result.data.message);
+ $('#notification').fadeIn();
+ }
+ } else {
+ OC.dialogs.alert(t('Error moving file'));
+ }
+ });
});
},
tolerance: 'pointer'
@@ -963,7 +1042,7 @@ function getUniqueName(name){
num=parseInt(numMatch[numMatch.length-1])+1;
base=base.split('(')
base.pop();
- base=base.join('(').trim();
+ base=$.trim(base.join('('));
}
name=base+' ('+num+')';
if (extension) {
diff --git a/apps/files/js/upgrade.js b/apps/files/js/upgrade.js
new file mode 100644
index 00000000000..02d57fc9e6c
--- /dev/null
+++ b/apps/files/js/upgrade.js
@@ -0,0 +1,17 @@
+$(document).ready(function () {
+ var eventSource, total, bar = $('#progressbar');
+ console.log('start');
+ bar.progressbar({value: 0});
+ eventSource = new OC.EventSource(OC.filePath('files', 'ajax', 'upgrade.php'));
+ eventSource.listen('total', function (count) {
+ total = count;
+ console.log(count + ' files needed to be migrated');
+ });
+ eventSource.listen('count', function (count) {
+ bar.progressbar({value: (count / total) * 100});
+ console.log(count);
+ });
+ eventSource.listen('done', function () {
+ document.location.reload();
+ });
+});
diff --git a/apps/files/js/upload.js b/apps/files/js/upload.js
new file mode 100644
index 00000000000..9d9f61f600e
--- /dev/null
+++ b/apps/files/js/upload.js
@@ -0,0 +1,8 @@
+function Upload(fileSelector) {
+ if ($.support.xhrFileUpload) {
+ return new XHRUpload(fileSelector.target.files);
+ } else {
+ return new FormUpload(fileSelector);
+ }
+}
+Upload.target = OC.filePath('files', 'ajax', 'upload.php');
diff --git a/apps/files/l10n/bn_BD.php b/apps/files/l10n/bn_BD.php
index d59463bb7a0..3d676810c7c 100644
--- a/apps/files/l10n/bn_BD.php
+++ b/apps/files/l10n/bn_BD.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "%s কে সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à¦° করা সমà§à¦­à¦¬ হলো না - à¦à¦‡ নামের ফাইল বিদà§à¦¯à¦®à¦¾à¦¨",
-"Could not move %s" => "%s কে সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à¦° করা সমà§à¦­à¦¬ হলো না",
-"Unable to rename file" => "ফাইলের নাম পরিবরà§à¦¤à¦¨ করা সমà§à¦­à¦¬ হলো না",
"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 নিরà§à¦¦à§‡à¦¶à¦¿à¦¤ আয়তন অতিকà§à¦°à¦® করছেঃ",
@@ -10,6 +7,7 @@
"No file was uploaded" => "কোন ফাইল আপলোড করা হয় নি",
"Missing a temporary folder" => "অসà§à¦¥à¦¾à§Ÿà§€ ফোলà§à¦¡à¦¾à¦° খোয়া গিয়েছে",
"Failed to write to disk" => "ডিসà§à¦•à§‡ লিখতে বà§à¦¯à¦°à§à¦¥",
+"Not enough space available" => "যথেষà§à¦  পরিমাণ সà§à¦¥à¦¾à¦¨ নেই",
"Invalid directory." => "ভà§à¦² ডিরেকà§à¦Ÿà¦°à¦¿",
"Files" => "ফাইল",
"Unshare" => "ভাগাভাগি বাতিল ",
@@ -22,8 +20,6 @@
"replaced {new_name}" => "{new_name} পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨ করা হয়েছে",
"undo" => "কà§à¦°à¦¿à§Ÿà¦¾ পà§à¦°à¦¤à§à¦¯à¦¾à¦¹à¦¾à¦°",
"replaced {new_name} with {old_name}" => "{new_name} কে {old_name} নামে পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨ করা হয়েছে",
-"unshared {files}" => "{files} ভাগাভাগি বাতিল কর",
-"deleted {files}" => "{files} মà§à¦›à§‡ ফেলা হয়েছে",
"'.' is an invalid file name." => "টি à¦à¦•à¦Ÿà¦¿ অননà§à¦®à§‹à¦¦à¦¿à¦¤ নাম।",
"File name cannot be empty." => "ফাইলের নামটি ফাà¦à¦•à¦¾ রাখা যাবে না।",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "নামটি সঠিক নয়, '\\', '/', '<', '>', ':', '\"', '|', '?' à¦à¦¬à¦‚ '*' অনà§à¦®à§‹à¦¦à¦¿à¦¤ নয়।",
@@ -37,8 +33,6 @@
"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" => "ফোলà§à¦¡à¦¾à¦°à§‡à¦° নামটি সঠিক নয়। 'ভাগাভাগি করা' শà§à¦§à§à¦®à¦¾à¦¤à§à¦° Owncloud à¦à¦° জনà§à¦¯ সংরকà§à¦·à¦¿à¦¤à¥¤",
-"{count} files scanned" => "{count} টি ফাইল সà§à¦•à§à¦¯à¦¾à¦¨ করা হয়েছে",
-"error while scanning" => "সà§à¦•à§à¦¯à¦¾à¦¨ করার সময় সমসà§à¦¯à¦¾ দেখা দিয়েছে",
"Name" => "নাম",
"Size" => "আকার",
"Modified" => "পরিবরà§à¦¤à¦¿à¦¤",
diff --git a/apps/files/l10n/ca.php b/apps/files/l10n/ca.php
index ceec0264788..eb98278bfb8 100644
--- a/apps/files/l10n/ca.php
+++ b/apps/files/l10n/ca.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "No s'ha pogut moure %s - Ja hi ha un fitxer amb aquest nom",
-"Could not move %s" => " No s'ha pogut moure %s",
-"Unable to rename file" => "No es pot canviar el nom del fitxer",
"No file was uploaded. Unknown error" => "No s'ha carregat cap fitxer. Error desconegut",
"There is no error, the file uploaded with success" => "El fitxer s'ha pujat correctament",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "L’arxiu que voleu carregar supera el màxim definit en la directiva upload_max_filesize del php.ini:",
@@ -10,7 +7,7 @@
"No file was uploaded" => "El fitxer no s'ha pujat",
"Missing a temporary folder" => "S'ha perdut un fitxer temporal",
"Failed to write to disk" => "Ha fallat en escriure al disc",
-"Not enough storage available" => "No hi ha prou espai disponible",
+"Not enough space available" => "No hi ha prou espai disponible",
"Invalid directory." => "Directori no vàlid.",
"Files" => "Fitxers",
"Unshare" => "Deixa de compartir",
@@ -23,8 +20,6 @@
"replaced {new_name}" => "s'ha substituït {new_name}",
"undo" => "desfés",
"replaced {new_name} with {old_name}" => "s'ha substituït {old_name} per {new_name}",
-"unshared {files}" => "no compartits {files}",
-"deleted {files}" => "eliminats {files}",
"'.' 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.",
@@ -41,8 +36,6 @@
"File upload is in progress. Leaving the page now will cancel the upload." => "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà.",
"URL cannot be empty." => "La URL no pot ser buida",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nom de carpeta no vàlid. L'ús de 'Shared' està reservat per Owncloud",
-"{count} files scanned" => "{count} fitxers escannejats",
-"error while scanning" => "error durant l'escaneig",
"Name" => "Nom",
"Size" => "Mida",
"Modified" => "Modificat",
@@ -69,5 +62,6 @@
"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"
+"Current scanning" => "Actualment escanejant",
+"Upgrading filesystem cache..." => "Actualitzant la memòria de cau del sistema de fitxers..."
);
diff --git a/apps/files/l10n/cs_CZ.php b/apps/files/l10n/cs_CZ.php
index 86b254ca8cb..76b3b82d72c 100644
--- a/apps/files/l10n/cs_CZ.php
+++ b/apps/files/l10n/cs_CZ.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "Nelze přesunout %s - existuje soubor se stejným názvem",
-"Could not move %s" => "Nelze přesunout %s",
-"Unable to rename file" => "Nelze přejmenovat soubor",
"No file was uploaded. Unknown error" => "Soubor nebyl odeslán. Neznámá chyba",
"There is no error, the file uploaded with success" => "Soubor byl odeslán úspěšně",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Odesílaný soubor přesahuje velikost upload_max_filesize povolenou v php.ini:",
@@ -10,7 +7,7 @@
"No file was uploaded" => "Žádný soubor nebyl odeslán",
"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",
+"Not enough space available" => "Nedostatek dostupného místa",
"Invalid directory." => "Neplatný adresář",
"Files" => "Soubory",
"Unshare" => "Zrušit sdílení",
@@ -23,8 +20,6 @@
"replaced {new_name}" => "nahrazeno {new_name}",
"undo" => "zpět",
"replaced {new_name} with {old_name}" => "nahrazeno {new_name} s {old_name}",
-"unshared {files}" => "sdílení zrušeno pro {files}",
-"deleted {files}" => "smazáno {files}",
"'.' 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.",
@@ -41,8 +36,6 @@
"File upload is in progress. Leaving the page now will cancel the upload." => "Probíhá odesílání souboru. Opuštění stránky vyústí ve zrušení nahrávání.",
"URL cannot be empty." => "URL nemůže být prázdná",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Neplatný název složky. Použití 'Shared' je rezervováno pro vnitřní potřeby Owncloud",
-"{count} files scanned" => "prozkoumáno {count} souborů",
-"error while scanning" => "chyba při prohledávání",
"Name" => "Název",
"Size" => "Velikost",
"Modified" => "Změněno",
@@ -69,5 +62,6 @@
"Upload too large" => "Odeslaný 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í"
+"Current scanning" => "Aktuální prohledávání",
+"Upgrading filesystem cache..." => "Aktualizuji mezipaměť souborového systému..."
);
diff --git a/apps/files/l10n/da.php b/apps/files/l10n/da.php
index 2f9ae8fbb8d..71a5a56de57 100644
--- a/apps/files/l10n/da.php
+++ b/apps/files/l10n/da.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "Kunne ikke flytte %s - der findes allerede en fil med dette navn",
-"Could not move %s" => "Kunne ikke flytte %s",
-"Unable to rename file" => "Kunne ikke omdøbe fil",
"No file was uploaded. Unknown error" => "Ingen fil blev uploadet. Ukendt fejl.",
"There is no error, the file uploaded with success" => "Der er ingen fejl, filen blev uploadet med success",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Den uploadede fil overstiger upload_max_filesize direktivet i php.ini",
@@ -10,7 +7,6 @@
"No file was uploaded" => "Ingen fil blev uploadet",
"Missing a temporary folder" => "Mangler en midlertidig mappe",
"Failed to write to disk" => "Fejl ved skrivning til disk.",
-"Not enough storage available" => "Der er ikke nok plads til rådlighed",
"Invalid directory." => "Ugyldig mappe.",
"Files" => "Filer",
"Unshare" => "Fjern deling",
@@ -23,8 +19,6 @@
"replaced {new_name}" => "erstattede {new_name}",
"undo" => "fortryd",
"replaced {new_name} with {old_name}" => "erstattede {new_name} med {old_name}",
-"unshared {files}" => "ikke delte {files}",
-"deleted {files}" => "slettede {files}",
"'.' 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.",
@@ -41,8 +35,6 @@
"File upload is in progress. Leaving the page now will cancel the upload." => "Fil upload kører. Hvis du forlader siden nu, vil uploadet blive annuleret.",
"URL cannot be empty." => "URLen kan ikke være tom.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ugyldigt mappenavn. Brug af \"Shared\" er forbeholdt Owncloud",
-"{count} files scanned" => "{count} filer skannet",
-"error while scanning" => "fejl under scanning",
"Name" => "Navn",
"Size" => "Størrelse",
"Modified" => "Ændret",
diff --git a/apps/files/l10n/de.php b/apps/files/l10n/de.php
index db2476865fc..d42410fee30 100644
--- a/apps/files/l10n/de.php
+++ b/apps/files/l10n/de.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits.",
-"Could not move %s" => "Konnte %s nicht verschieben",
-"Unable to rename file" => "Konnte Datei nicht umbenennen",
"No file was uploaded. Unknown error" => "Keine Datei hochgeladen. Unbekannter Fehler",
"There is no error, the file uploaded with success" => "Datei fehlerfrei hochgeladen.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Die hochgeladene Datei überschreitet die upload_max_filesize Vorgabe in php.ini",
@@ -10,7 +7,7 @@
"No file was uploaded" => "Es wurde keine Datei hochgeladen.",
"Missing a temporary folder" => "Temporärer Ordner fehlt.",
"Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte",
-"Not enough storage available" => "Nicht genug Speicherplatz verfügbar",
+"Not enough space available" => "Nicht genug Speicherplatz verfügbar",
"Invalid directory." => "Ungültiges Verzeichnis",
"Files" => "Dateien",
"Unshare" => "Nicht mehr freigeben",
@@ -23,8 +20,6 @@
"replaced {new_name}" => "{new_name} wurde ersetzt",
"undo" => "rückgängig machen",
"replaced {new_name} with {old_name}" => "{old_name} ersetzt durch {new_name}",
-"unshared {files}" => "Freigabe von {files} aufgehoben",
-"deleted {files}" => "{files} gelöscht",
"'.' 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.",
@@ -41,8 +36,6 @@
"File upload is in progress. Leaving the page now will cancel the upload." => "Dateiupload läuft. Wenn Du die Seite jetzt verlässt, wird der Upload abgebrochen.",
"URL cannot be empty." => "Die URL darf nicht leer sein",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ungültiger Verzeichnisname. Die Nutzung von \"Shared\" ist ownCloud vorbehalten.",
-"{count} files scanned" => "{count} Dateien wurden gescannt",
-"error while scanning" => "Fehler beim Scannen",
"Name" => "Name",
"Size" => "Größe",
"Modified" => "Bearbeitet",
diff --git a/apps/files/l10n/de_DE.php b/apps/files/l10n/de_DE.php
index 72751a7fb6f..0a67cd0fc5f 100644
--- a/apps/files/l10n/de_DE.php
+++ b/apps/files/l10n/de_DE.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits",
-"Could not move %s" => "Konnte %s nicht verschieben",
-"Unable to rename file" => "Konnte Datei nicht umbenennen",
"No file was uploaded. Unknown error" => "Keine Datei hochgeladen. Unbekannter Fehler",
"There is no error, the file uploaded with success" => "Es sind keine Fehler aufgetreten. Die Datei wurde erfolgreich hochgeladen.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Die hochgeladene Datei überschreitet die upload_max_filesize Vorgabe in php.ini",
@@ -10,7 +7,7 @@
"No file was uploaded" => "Es wurde keine Datei hochgeladen.",
"Missing a temporary folder" => "Der temporäre Ordner fehlt.",
"Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte",
-"Not enough storage available" => "Nicht genug Speicher vorhanden.",
+"Not enough space available" => "Nicht genügend Speicherplatz verfügbar",
"Invalid directory." => "Ungültiges Verzeichnis.",
"Files" => "Dateien",
"Unshare" => "Nicht mehr freigeben",
@@ -23,8 +20,6 @@
"replaced {new_name}" => "{new_name} wurde ersetzt",
"undo" => "rückgängig machen",
"replaced {new_name} with {old_name}" => "{old_name} wurde ersetzt durch {new_name}",
-"unshared {files}" => "Freigabe für {files} beendet",
-"deleted {files}" => "{files} gelöscht",
"'.' 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.",
@@ -41,8 +36,6 @@
"File upload is in progress. Leaving the page now will cancel the upload." => "Der Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen.",
"URL cannot be empty." => "Die URL darf nicht leer sein.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ungültiger Verzeichnisname. Die Nutzung von \"Shared\" ist ownCloud vorbehalten",
-"{count} files scanned" => "{count} Dateien wurden gescannt",
-"error while scanning" => "Fehler beim Scannen",
"Name" => "Name",
"Size" => "Größe",
"Modified" => "Bearbeitet",
diff --git a/apps/files/l10n/el.php b/apps/files/l10n/el.php
index 196831b985d..7b458bf35dd 100644
--- a/apps/files/l10n/el.php
+++ b/apps/files/l10n/el.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "Αδυναμία μετακίνησης του %s - υπάÏχει ήδη αÏχείο με αυτό το όνομα",
-"Could not move %s" => "Αδυναμία μετακίνησης του %s",
-"Unable to rename file" => "Αδυναμία μετονομασίας αÏχείου",
"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:",
@@ -10,7 +7,7 @@
"No file was uploaded" => "Κανένα αÏχείο δεν στάλθηκε",
"Missing a temporary folder" => "Λείπει ο Ï€ÏοσωÏινός φάκελος",
"Failed to write to disk" => "Αποτυχία εγγÏαφής στο δίσκο",
-"Not enough storage available" => "Μη επαÏκής διαθέσιμος αποθηκευτικός χώÏος",
+"Not enough space available" => "Δεν υπάÏχει αÏκετός διαθέσιμος χώÏος",
"Invalid directory." => "Μη έγκυÏος φάκελος.",
"Files" => "ΑÏχεία",
"Unshare" => "Διακοπή κοινής χÏήσης",
@@ -23,8 +20,6 @@
"replaced {new_name}" => "{new_name} αντικαταστάθηκε",
"undo" => "αναίÏεση",
"replaced {new_name} with {old_name}" => "αντικαταστάθηκε το {new_name} με {old_name}",
-"unshared {files}" => "μη διαμοιÏασμένα {files}",
-"deleted {files}" => "διαγÏαμμένα {files}",
"'.' is an invalid file name." => "'.' είναι μη έγκυÏο όνομα αÏχείου.",
"File name cannot be empty." => "Το όνομα αÏχείου δεν Ï€Ïέπει να είναι κενό.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Μη έγκυÏο όνομα, '\\', '/', '<', '>', ':', '\"', '|', '?' και '*' δεν επιτÏέπονται.",
@@ -41,8 +36,6 @@
"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" => "Μη έγκυÏο όνομα φακέλου. Η χÏήση του 'ΚοινόχÏηστος' χÏησιμοποιείται από ο Owncloud",
-"{count} files scanned" => "{count} αÏχεία ανιχνεÏτηκαν",
-"error while scanning" => "σφάλμα κατά την ανίχνευση",
"Name" => "Όνομα",
"Size" => "Μέγεθος",
"Modified" => "ΤÏοποποιήθηκε",
diff --git a/apps/files/l10n/eo.php b/apps/files/l10n/eo.php
index fc4367c55a3..a510d47ad6c 100644
--- a/apps/files/l10n/eo.php
+++ b/apps/files/l10n/eo.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "Ne eblis movi %s: dosiero kun ĉi tiu nomo jam ekzistas",
-"Could not move %s" => "Ne eblis movi %s",
-"Unable to rename file" => "Ne eblis alinomigi dosieron",
"No file was uploaded. Unknown error" => "Neniu dosiero alÅutiÄis. Nekonata eraro.",
"There is no error, the file uploaded with success" => "Ne estas eraro, la dosiero alÅutiÄis sukcese",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "La dosiero alÅutita superas la regulon upload_max_filesize el php.ini: ",
@@ -10,6 +7,7 @@
"No file was uploaded" => "Neniu dosiero estas alÅutita",
"Missing a temporary folder" => "Mankas tempa dosierujo",
"Failed to write to disk" => "Malsukcesis skribo al disko",
+"Not enough space available" => "Ne haveblas sufiĉa spaco",
"Invalid directory." => "Nevalida dosierujo.",
"Files" => "Dosieroj",
"Unshare" => "Malkunhavigi",
@@ -22,8 +20,6 @@
"replaced {new_name}" => "anstataÅ­iÄis {new_name}",
"undo" => "malfari",
"replaced {new_name} with {old_name}" => "anstataÅ­iÄis {new_name} per {old_name}",
-"unshared {files}" => "malkunhaviÄis {files}",
-"deleted {files}" => "foriÄis {files}",
"'.' is an invalid file name." => "'.' ne estas valida dosiernomo.",
"File name cannot be empty." => "Dosiernomo devas ne malpleni.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nevalida nomo: “\\â€, “/â€, “<â€, “>â€, “:â€, “\"â€, “|â€, “?†kaj “*†ne permesatas.",
@@ -38,8 +34,6 @@
"File upload is in progress. Leaving the page now will cancel the upload." => "DosieralÅuto plenumiÄas. Lasi la paÄon nun nuligus la alÅuton.",
"URL cannot be empty." => "URL ne povas esti malplena.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nevalida dosierujnomo. Uzo de “Shared†rezervatas de Owncloud.",
-"{count} files scanned" => "{count} dosieroj skaniÄis",
-"error while scanning" => "eraro dum skano",
"Name" => "Nomo",
"Size" => "Grando",
"Modified" => "Modifita",
diff --git a/apps/files/l10n/es.php b/apps/files/l10n/es.php
index 1620208559f..bc5046767c6 100644
--- a/apps/files/l10n/es.php
+++ b/apps/files/l10n/es.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "No se puede mover %s - Ya existe un archivo con ese nombre",
-"Could not move %s" => "No se puede mover %s",
-"Unable to rename file" => "No se puede renombrar el archivo",
"No file was uploaded. Unknown error" => "Fallo no se subió el fichero",
"There is no error, the file uploaded with success" => "No se ha producido ningún error, el archivo se ha subido con éxito",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "El archivo que intentas subir sobrepasa el tamaño definido por la variable upload_max_filesize en php.ini",
@@ -10,6 +7,7 @@
"No file was uploaded" => "No se ha subido ningún archivo",
"Missing a temporary folder" => "Falta un directorio temporal",
"Failed to write to disk" => "La escritura en disco ha fallado",
+"Not enough space available" => "No hay suficiente espacio disponible",
"Invalid directory." => "Directorio invalido.",
"Files" => "Archivos",
"Unshare" => "Dejar de compartir",
@@ -22,8 +20,6 @@
"replaced {new_name}" => "reemplazado {new_name}",
"undo" => "deshacer",
"replaced {new_name} with {old_name}" => "reemplazado {new_name} con {old_name}",
-"unshared {files}" => "{files} descompartidos",
-"deleted {files}" => "{files} eliminados",
"'.' is an invalid file name." => "'.' es un nombre de archivo inválido.",
"File name cannot be empty." => "El nombre de archivo no puede estar vacío.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nombre Invalido, \"\\\", \"/\", \"<\", \">\", \":\", \"\", \"|\" \"?\" y \"*\" no están permitidos ",
@@ -38,8 +34,6 @@
"File upload is in progress. Leaving the page now will cancel the upload." => "La subida del archivo está en proceso. Salir de la página ahora cancelará la subida.",
"URL cannot be empty." => "La URL no puede estar vacía.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nombre de carpeta invalido. El uso de \"Shared\" esta reservado para Owncloud",
-"{count} files scanned" => "{count} archivos escaneados",
-"error while scanning" => "error escaneando",
"Name" => "Nombre",
"Size" => "Tamaño",
"Modified" => "Modificado",
diff --git a/apps/files/l10n/es_AR.php b/apps/files/l10n/es_AR.php
index cd8347a14ad..ea8352e3251 100644
--- a/apps/files/l10n/es_AR.php
+++ b/apps/files/l10n/es_AR.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "No se pudo mover %s - Un archivo con este nombre ya existe",
-"Could not move %s" => "No se pudo mover %s ",
-"Unable to rename file" => "No fue posible cambiar el nombre al archivo",
"No file was uploaded. Unknown error" => "El archivo no fue subido. Error desconocido",
"There is no error, the file uploaded with success" => "No se han producido errores, el archivo se ha subido con éxito",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "El archivo que intentás subir excede el tamaño definido por upload_max_filesize en el php.ini:",
@@ -10,6 +7,7 @@
"No file was uploaded" => "El archivo no fue subido",
"Missing a temporary folder" => "Falta un directorio temporal",
"Failed to write to disk" => "Error al escribir en el disco",
+"Not enough space available" => "No hay suficiente espacio disponible",
"Invalid directory." => "Directorio invalido.",
"Files" => "Archivos",
"Unshare" => "Dejar de compartir",
@@ -22,11 +20,11 @@
"replaced {new_name}" => "reemplazado {new_name}",
"undo" => "deshacer",
"replaced {new_name} with {old_name}" => "reemplazado {new_name} con {old_name}",
-"unshared {files}" => "{files} se dejaron de compartir",
-"deleted {files}" => "{files} borrados",
"'.' 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}%)",
"Your download is being prepared. This might take some time if the files are big." => "Tu descarga esta siendo preparada. Esto puede tardar algun tiempo si los archivos son muy grandes.",
"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",
"Upload Error" => "Error al subir el archivo",
@@ -38,8 +36,6 @@
"File upload is in progress. Leaving the page now will cancel the upload." => "La subida del archivo está en proceso. Si salís de la página ahora, la subida se cancelará.",
"URL cannot be empty." => "La URL no puede estar vacía",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nombre de carpeta inválido. El uso de 'Shared' está reservado por ownCloud",
-"{count} files scanned" => "{count} archivos escaneados",
-"error while scanning" => "error mientras se escaneaba",
"Name" => "Nombre",
"Size" => "Tamaño",
"Modified" => "Modificado",
diff --git a/apps/files/l10n/et_EE.php b/apps/files/l10n/et_EE.php
index 1df237baa82..54dd7cfdc56 100644
--- a/apps/files/l10n/et_EE.php
+++ b/apps/files/l10n/et_EE.php
@@ -17,8 +17,6 @@
"replaced {new_name}" => "asendatud nimega {new_name}",
"undo" => "tagasi",
"replaced {new_name} with {old_name}" => "asendas nime {old_name} nimega {new_name}",
-"unshared {files}" => "jagamata {files}",
-"deleted {files}" => "kustutatud {files}",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Vigane nimi, '\\', '/', '<', '>', ':', '\"', '|', '?' ja '*' pole lubatud.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Sinu faili üleslaadimine ebaõnnestus, kuna see on kaust või selle suurus on 0 baiti",
"Upload Error" => "Ãœleslaadimise viga",
@@ -29,8 +27,6 @@
"Upload cancelled." => "Üleslaadimine tühistati.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Faili üleslaadimine on töös. Lehelt lahkumine katkestab selle üleslaadimise.",
"URL cannot be empty." => "URL ei saa olla tühi.",
-"{count} files scanned" => "{count} faili skännitud",
-"error while scanning" => "viga skännimisel",
"Name" => "Nimi",
"Size" => "Suurus",
"Modified" => "Muudetud",
diff --git a/apps/files/l10n/eu.php b/apps/files/l10n/eu.php
index 8b8f6d2bd17..6f4c55f4846 100644
--- a/apps/files/l10n/eu.php
+++ b/apps/files/l10n/eu.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "Ezin da %s mugitu - Izen hau duen fitxategia dagoeneko existitzen da",
-"Could not move %s" => "Ezin dira fitxategiak mugitu %s",
-"Unable to rename file" => "Ezin izan da fitxategia berrizendatu",
"No file was uploaded. Unknown error" => "Ez da fitxategirik igo. Errore ezezaguna",
"There is no error, the file uploaded with success" => "Ez da arazorik izan, fitxategia ongi igo da",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Igotako fitxategiak php.ini fitxategian ezarritako upload_max_filesize muga gainditu du:",
@@ -10,7 +7,7 @@
"No file was uploaded" => "Ez da fitxategirik igo",
"Missing a temporary folder" => "Aldi baterako karpeta falta da",
"Failed to write to disk" => "Errore bat izan da diskoan idazterakoan",
-"Not enough storage available" => "Ez dago behar aina leku erabilgarri,",
+"Not enough space available" => "Ez dago leku nahikorik.",
"Invalid directory." => "Baliogabeko karpeta.",
"Files" => "Fitxategiak",
"Unshare" => "Ez elkarbanatu",
@@ -23,8 +20,6 @@
"replaced {new_name}" => "ordezkatua {new_name}",
"undo" => "desegin",
"replaced {new_name} with {old_name}" => " {new_name}-k {old_name} ordezkatu du",
-"unshared {files}" => "elkarbanaketa utzita {files}",
-"deleted {files}" => "ezabatuta {files}",
"'.' 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.",
@@ -41,8 +36,6 @@
"File upload is in progress. Leaving the page now will cancel the upload." => "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du.",
"URL cannot be empty." => "URLa ezin da hutsik egon.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Baliogabeako karpeta izena. 'Shared' izena Owncloudek erreserbatzen du",
-"{count} files scanned" => "{count} fitxategi eskaneatuta",
-"error while scanning" => "errore bat egon da eskaneatzen zen bitartean",
"Name" => "Izena",
"Size" => "Tamaina",
"Modified" => "Aldatuta",
diff --git a/apps/files/l10n/fa.php b/apps/files/l10n/fa.php
index 3d3bfad1f9b..a4181c6ff53 100644
--- a/apps/files/l10n/fa.php
+++ b/apps/files/l10n/fa.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "%s نمی تواند حرکت کند - در حال حاضر پرونده با این نام وجود دارد. ",
-"Could not move %s" => "%s نمی تواند حرکت کند ",
-"Unable to rename file" => "قادر به تغییر نام پرونده نیست.",
"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 استÙاده کرده است.",
@@ -10,6 +7,7 @@
"No file was uploaded" => "هیچ Ùایلی بارگذاری نشده",
"Missing a temporary folder" => "یک پوشه موقت گم شده است",
"Failed to write to disk" => "نوشتن بر روی دیسک سخت ناموÙÙ‚ بود",
+"Not enough space available" => "Ùضای کاÙÛŒ در دسترس نیست",
"Invalid directory." => "Ùهرست راهنما نامعتبر Ù…ÛŒ باشد.",
"Files" => "Ùایل ها",
"Unshare" => "لغو اشتراک",
@@ -22,8 +20,6 @@
"replaced {new_name}" => "{نام _جدید} جایگزین شد ",
"undo" => "بازگشت",
"replaced {new_name} with {old_name}" => "{نام_جدید} با { نام_قدیمی} جایگزین شد.",
-"unshared {files}" => "{ Ùایل های } قسمت نشده",
-"deleted {files}" => "{ Ùایل های } پاک شده",
"'.' is an invalid file name." => "'.' یک نام پرونده نامعتبر است.",
"File name cannot be empty." => "نام پرونده نمی تواند خالی باشد.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "نام نامعتبر ، '\\', '/', '<', '>', ':', '\"', '|', '?' و '*' مجاز نمی باشند.",
@@ -38,8 +34,6 @@
"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" => "نام پوشه نامعتبر است. استÙاده از \" به اشتراک گذاشته شده \" متعلق به سایت Owncloud است.",
-"{count} files scanned" => "{ شمار } Ùایل های اسکن شده",
-"error while scanning" => "خطا در حال انجام اسکن ",
"Name" => "نام",
"Size" => "اندازه",
"Modified" => "تغییر یاÙته",
diff --git a/apps/files/l10n/fi_FI.php b/apps/files/l10n/fi_FI.php
index 999bd7884d3..8f07adcf6f3 100644
--- a/apps/files/l10n/fi_FI.php
+++ b/apps/files/l10n/fi_FI.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "Kohteen %s siirto ei onnistunut - Tiedosto samalla nimellä on jo olemassa",
-"Could not move %s" => "Kohteen %s siirto ei onnistunut",
-"Unable to rename file" => "Tiedoston nimeäminen uudelleen ei onnistunut",
"No file was uploaded. Unknown error" => "Tiedostoa ei lähetetty. Tuntematon virhe",
"There is no error, the file uploaded with success" => "Ei virheitä, tiedosto lähetettiin onnistuneesti",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Lähetetty tiedosto ylittää HTML-lomakkeessa määritetyn MAX_FILE_SIZE-arvon ylärajan",
@@ -9,7 +6,7 @@
"No file was uploaded" => "Yhtäkään tiedostoa ei lähetetty",
"Missing a temporary folder" => "Väliaikaiskansiota ei ole olemassa",
"Failed to write to disk" => "Levylle kirjoitus epäonnistui",
-"Not enough storage available" => "Tallennustilaa ei ole riittävästi käytettävissä",
+"Not enough space available" => "Tilaa ei ole riittävästi",
"Invalid directory." => "Virheellinen kansio.",
"Files" => "Tiedostot",
"Unshare" => "Peru jakaminen",
diff --git a/apps/files/l10n/fr.php b/apps/files/l10n/fr.php
index ce8ef959d0a..42e146f5844 100644
--- a/apps/files/l10n/fr.php
+++ b/apps/files/l10n/fr.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "Impossible de déplacer %s - Un fichier possédant ce nom existe déjà",
-"Could not move %s" => "Impossible de déplacer %s",
-"Unable to rename file" => "Impossible de renommer le fichier",
"No file was uploaded. Unknown error" => "Aucun fichier n'a été chargé. Erreur inconnue",
"There is no error, the file uploaded with success" => "Aucune erreur, le fichier a été téléversé avec succès",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Le fichier envoyé dépasse la valeur upload_max_filesize située dans le fichier php.ini:",
@@ -10,7 +7,7 @@
"No file was uploaded" => "Aucun fichier n'a été téléversé",
"Missing a temporary folder" => "Il manque un répertoire temporaire",
"Failed to write to disk" => "Erreur d'écriture sur le disque",
-"Not enough storage available" => "Plus assez d'espace de stockage disponible",
+"Not enough space available" => "Espace disponible insuffisant",
"Invalid directory." => "Dossier invalide.",
"Files" => "Fichiers",
"Unshare" => "Ne plus partager",
@@ -23,8 +20,6 @@
"replaced {new_name}" => "{new_name} a été remplacé",
"undo" => "annuler",
"replaced {new_name} with {old_name}" => "{new_name} a été remplacé par {old_name}",
-"unshared {files}" => "Fichiers non partagés : {files}",
-"deleted {files}" => "Fichiers supprimés : {files}",
"'.' 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.",
@@ -41,8 +36,6 @@
"File upload is in progress. Leaving the page now will cancel the upload." => "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier.",
"URL cannot be empty." => "L'URL ne peut-être vide",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nom de dossier invalide. L'utilisation du mot 'Shared' est réservée à Owncloud",
-"{count} files scanned" => "{count} fichiers indexés",
-"error while scanning" => "erreur lors de l'indexation",
"Name" => "Nom",
"Size" => "Taille",
"Modified" => "Modifié",
diff --git a/apps/files/l10n/gl.php b/apps/files/l10n/gl.php
index 3bac12b351e..a1c0f0a5dd5 100644
--- a/apps/files/l10n/gl.php
+++ b/apps/files/l10n/gl.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "Non se moveu %s - Xa existe un ficheiro con ese nome.",
-"Could not move %s" => "Non se puido mover %s",
-"Unable to rename file" => "Non se pode renomear o ficheiro",
"No file was uploaded. Unknown error" => "Non se subiu ningún ficheiro. Erro descoñecido.",
"There is no error, the file uploaded with success" => "Non hai erros. O ficheiro enviouse correctamente",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "O ficheiro subido excede a directiva indicada polo tamaño_máximo_de_subida de php.ini",
@@ -10,6 +7,7 @@
"No file was uploaded" => "Non se enviou ningún ficheiro",
"Missing a temporary folder" => "Falta un cartafol temporal",
"Failed to write to disk" => "Erro ao escribir no disco",
+"Not enough space available" => "O espazo dispoñíbel é insuficiente",
"Invalid directory." => "O directorio é incorrecto.",
"Files" => "Ficheiros",
"Unshare" => "Deixar de compartir",
@@ -22,8 +20,6 @@
"replaced {new_name}" => "substituír {new_name}",
"undo" => "desfacer",
"replaced {new_name} with {old_name}" => "substituír {new_name} polo {old_name}",
-"unshared {files}" => "{files} sen compartir",
-"deleted {files}" => "{files} eliminados",
"'.' is an invalid file name." => "'.' é un nonme de ficheiro non válido",
"File name cannot be empty." => "O nome de ficheiro non pode estar baldeiro",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome non válido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' non se permiten.",
@@ -37,8 +33,6 @@
"File upload is in progress. Leaving the page now will cancel the upload." => "A subida do ficheiro está en curso. Saír agora da páxina cancelará a subida.",
"URL cannot be empty." => "URL non pode quedar baleiro.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nome de cartafol non válido. O uso de 'Shared' está reservado por Owncloud",
-"{count} files scanned" => "{count} ficheiros escaneados",
-"error while scanning" => "erro mentres analizaba",
"Name" => "Nome",
"Size" => "Tamaño",
"Modified" => "Modificado",
diff --git a/apps/files/l10n/he.php b/apps/files/l10n/he.php
index 62b397e129e..94cddca0000 100644
--- a/apps/files/l10n/he.php
+++ b/apps/files/l10n/he.php
@@ -18,8 +18,6 @@
"replaced {new_name}" => "{new_name} הוחלף",
"undo" => "ביטול",
"replaced {new_name} with {old_name}" => "{new_name} הוחלף ב־{old_name}",
-"unshared {files}" => "בוטל ×©×™×ª×•×¤× ×©×œ {files}",
-"deleted {files}" => "{files} נמחקו",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "×”×©× ×©×’×•×™, ×סור להשתמש ×‘×ª×•×•×™× '\\', '/', '<', '>', ':', '\"', '|', '?' ו־'*'.",
"Unable to upload your file as it is a directory or has 0 bytes" => "×œ× ×™×›×•×œ להעלות ×ת הקובץ מכיוון שזו תקיה ×ו שמשקל הקובץ 0 בתי×",
"Upload Error" => "שגי×ת העל××”",
@@ -30,8 +28,6 @@
"Upload cancelled." => "ההעל××” בוטלה.",
"File upload is in progress. Leaving the page now will cancel the upload." => "מתבצעת כעת העל×ת קבצי×. עזיבה של העמוד תבטל ×ת ההעל××”.",
"URL cannot be empty." => "קישור ×ינו יכול להיות ריק.",
-"{count} files scanned" => "{count} ×§×‘×¦×™× × ×¡×¨×§×•",
-"error while scanning" => "×ירעה שגי××” במהלך הסריקה",
"Name" => "ש×",
"Size" => "גודל",
"Modified" => "זמן שינוי",
diff --git a/apps/files/l10n/hr.php b/apps/files/l10n/hr.php
index 7000caf0d17..4f4546aaf07 100644
--- a/apps/files/l10n/hr.php
+++ b/apps/files/l10n/hr.php
@@ -20,7 +20,6 @@
"1 file uploading" => "1 datoteka se uÄitava",
"Upload cancelled." => "Slanje poništeno.",
"File upload is in progress. Leaving the page now will cancel the upload." => "UÄitavanje datoteke. NapuÅ¡tanjem stranice će prekinuti uÄitavanje.",
-"error while scanning" => "greÄka prilikom skeniranja",
"Name" => "Naziv",
"Size" => "VeliÄina",
"Modified" => "Zadnja promjena",
diff --git a/apps/files/l10n/hu_HU.php b/apps/files/l10n/hu_HU.php
index be3dd1b9c3c..86fc0f223f9 100644
--- a/apps/files/l10n/hu_HU.php
+++ b/apps/files/l10n/hu_HU.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "%s áthelyezése nem sikerült - már létezik másik fájl ezzel a névvel",
-"Could not move %s" => "Nem sikerült %s áthelyezése",
-"Unable to rename file" => "Nem lehet átnevezni a fájlt",
"No file was uploaded. Unknown error" => "Nem történt feltöltés. Ismeretlen hiba",
"There is no error, the file uploaded with success" => "A fájlt sikerült feltölteni",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "A feltöltött fájl mérete meghaladja a php.ini állományban megadott upload_max_filesize paraméter értékét.",
@@ -10,7 +7,7 @@
"No file was uploaded" => "Nem töltődött fel semmi",
"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.",
+"Not enough space available" => "Nincs elég szabad hely",
"Invalid directory." => "Érvénytelen mappa.",
"Files" => "Fájlok",
"Unshare" => "Megosztás visszavonása",
@@ -23,8 +20,6 @@
"replaced {new_name}" => "a(z) {new_name} állományt kicseréltük",
"undo" => "visszavonás",
"replaced {new_name} with {old_name}" => "{new_name} fájlt kicseréltük ezzel: {old_name}",
-"unshared {files}" => "{files} fájl megosztása visszavonva",
-"deleted {files}" => "{files} fájl törölve",
"'.' is an invalid file name." => "'.' fájlnév érvénytelen.",
"File name cannot be empty." => "A fájlnév nem lehet semmi.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Érvénytelen elnevezés. Ezek a karakterek nem használhatók: '\\', '/', '<', '>', ':', '\"', '|', '?' és '*'",
@@ -41,8 +36,6 @@
"File upload is in progress. Leaving the page now will cancel the upload." => "Fájlfeltöltés van folyamatban. Az oldal elhagyása megszakítja a feltöltést.",
"URL cannot be empty." => "Az URL nem lehet semmi.",
"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.",
-"{count} files scanned" => "{count} fájlt találtunk",
-"error while scanning" => "Hiba a fájllista-ellenőrzés során",
"Name" => "Név",
"Size" => "Méret",
"Modified" => "Módosítva",
diff --git a/apps/files/l10n/is.php b/apps/files/l10n/is.php
index 297853c8161..43c10ef236e 100644
--- a/apps/files/l10n/is.php
+++ b/apps/files/l10n/is.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "Gat ekki fært %s - Skrá með þessu nafni er þegar til",
-"Could not move %s" => "Gat ekki fært %s",
-"Unable to rename file" => "Gat ekki endurskýrt skrá",
"No file was uploaded. Unknown error" => "Engin skrá var send inn. Óþekkt villa.",
"There is no error, the file uploaded with success" => "Engin villa, innsending heppnaðist",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Innsend skrá er stærri en upload_max stillingin í php.ini:",
@@ -10,6 +7,7 @@
"No file was uploaded" => "Engin skrá skilaði sér",
"Missing a temporary folder" => "Vantar bráðabirgðamöppu",
"Failed to write to disk" => "Tókst ekki að skrifa á disk",
+"Not enough space available" => "Ekki nægt pláss tiltækt",
"Invalid directory." => "Ógild mappa.",
"Files" => "Skrár",
"Unshare" => "Hætta deilingu",
@@ -22,8 +20,6 @@
"replaced {new_name}" => "endurskýrði {new_name}",
"undo" => "afturkalla",
"replaced {new_name} with {old_name}" => "yfirskrifaði {new_name} með {old_name}",
-"unshared {files}" => "Hætti við deilingu á {files}",
-"deleted {files}" => "eyddi {files}",
"'.' 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ð.",
@@ -37,8 +33,6 @@
"File upload is in progress. Leaving the page now will cancel the upload." => "Innsending í gangi. Ef þú ferð af þessari síðu mun innsending misheppnast.",
"URL cannot be empty." => "Vefslóð má ekki vera tóm.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Óleyfilegt nafn á möppu. Nafnið 'Shared' er frátekið fyrir Owncloud",
-"{count} files scanned" => "{count} skrár skimaðar",
-"error while scanning" => "villa við skimun",
"Name" => "Nafn",
"Size" => "Stærð",
"Modified" => "Breytt",
diff --git a/apps/files/l10n/it.php b/apps/files/l10n/it.php
index 63bc71d6729..e6fc1e81a96 100644
--- a/apps/files/l10n/it.php
+++ b/apps/files/l10n/it.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "Impossibile spostare %s - un file con questo nome esiste già",
-"Could not move %s" => "Impossibile spostare %s",
-"Unable to rename file" => "Impossibile rinominare il file",
"No file was uploaded. Unknown error" => "Nessun file è stato inviato. Errore sconosciuto",
"There is no error, the file uploaded with success" => "Non ci sono errori, file caricato con successo",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Il file caricato supera la direttiva upload_max_filesize in php.ini:",
@@ -10,7 +7,7 @@
"No file was uploaded" => "Nessun file è stato caricato",
"Missing a temporary folder" => "Cartella temporanea mancante",
"Failed to write to disk" => "Scrittura su disco non riuscita",
-"Not enough storage available" => "Spazio di archiviazione insufficiente",
+"Not enough space available" => "Spazio disponibile insufficiente",
"Invalid directory." => "Cartella non valida.",
"Files" => "File",
"Unshare" => "Rimuovi condivisione",
@@ -23,8 +20,6 @@
"replaced {new_name}" => "sostituito {new_name}",
"undo" => "annulla",
"replaced {new_name} with {old_name}" => "sostituito {new_name} con {old_name}",
-"unshared {files}" => "non condivisi {files}",
-"deleted {files}" => "eliminati {files}",
"'.' 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.",
@@ -41,8 +36,6 @@
"File upload is in progress. Leaving the page now will cancel the upload." => "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento.",
"URL cannot be empty." => "L'URL non può essere vuoto.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nome della cartella non valido. L'uso di 'Shared' è riservato da ownCloud",
-"{count} files scanned" => "{count} file analizzati",
-"error while scanning" => "errore durante la scansione",
"Name" => "Nome",
"Size" => "Dimensione",
"Modified" => "Modificato",
@@ -69,5 +62,6 @@
"Upload too large" => "Il file caricato è 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"
+"Current scanning" => "Scansione corrente",
+"Upgrading filesystem cache..." => "Aggiornamento della cache del filesystem in corso..."
);
diff --git a/apps/files/l10n/ja_JP.php b/apps/files/l10n/ja_JP.php
index 4a36e8aa421..792bf7cbf99 100644
--- a/apps/files/l10n/ja_JP.php
+++ b/apps/files/l10n/ja_JP.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "%s を移動ã§ãã¾ã›ã‚“ã§ã—㟠― ã“ã®åå‰ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯ã™ã§ã«å­˜åœ¨ã—ã¾ã™",
-"Could not move %s" => "%s を移動ã§ãã¾ã›ã‚“ã§ã—ãŸ",
-"Unable to rename file" => "ファイルåã®å¤‰æ›´ãŒã§ãã¾ã›ã‚“",
"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 ã«è¨­å®šã•ã‚ŒãŸã‚µã‚¤ã‚ºã‚’超ãˆã¦ã„ã¾ã™:",
@@ -10,7 +7,7 @@
"No file was uploaded" => "ファイルã¯ã‚¢ãƒƒãƒ—ロードã•ã‚Œã¾ã›ã‚“ã§ã—ãŸ",
"Missing a temporary folder" => "テンãƒãƒ©ãƒªãƒ•ã‚©ãƒ«ãƒ€ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“",
"Failed to write to disk" => "ディスクã¸ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ",
-"Not enough storage available" => "ストレージã«å分ãªç©ºã容é‡ãŒã‚ã‚Šã¾ã›ã‚“",
+"Not enough space available" => "利用å¯èƒ½ãªã‚¹ãƒšãƒ¼ã‚¹ãŒå分ã«ã‚ã‚Šã¾ã›ã‚“",
"Invalid directory." => "無効ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã™ã€‚",
"Files" => "ファイル",
"Unshare" => "共有ã—ãªã„",
@@ -23,8 +20,6 @@
"replaced {new_name}" => "{new_name} ã‚’ç½®æ›",
"undo" => "å…ƒã«æˆ»ã™",
"replaced {new_name} with {old_name}" => "{old_name} ã‚’ {new_name} ã«ç½®æ›",
-"unshared {files}" => "未共有 {files}",
-"deleted {files}" => "削除 {files}",
"'.' is an invalid file name." => "'.' ã¯ç„¡åŠ¹ãªãƒ•ã‚¡ã‚¤ãƒ«åã§ã™ã€‚",
"File name cannot be empty." => "ファイルåを空ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "無効ãªåå‰ã€'\\', '/', '<', '>', ':', '\"', '|', '?', '*' ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。",
@@ -41,8 +36,6 @@
"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 ãŒäºˆç´„済ã¿ã§ã™ã€‚",
-"{count} files scanned" => "{count} ファイルをスキャン",
-"error while scanning" => "スキャン中ã®ã‚¨ãƒ©ãƒ¼",
"Name" => "åå‰",
"Size" => "サイズ",
"Modified" => "更新日時",
diff --git a/apps/files/l10n/ka_GE.php b/apps/files/l10n/ka_GE.php
index 08225c114d1..7ab6122c659 100644
--- a/apps/files/l10n/ka_GE.php
+++ b/apps/files/l10n/ka_GE.php
@@ -16,8 +16,6 @@
"replaced {new_name}" => "{new_name} შეცვლილიáƒ",
"undo" => "დáƒáƒ‘რუნებáƒ",
"replaced {new_name} with {old_name}" => "{new_name} შეცვლილირ{old_name}–ით",
-"unshared {files}" => "გáƒáƒ–იáƒáƒ áƒ”ბრმáƒáƒ®áƒ¡áƒœáƒ˜áƒšáƒ˜ {files}",
-"deleted {files}" => "წáƒáƒ¨áƒšáƒ˜áƒšáƒ˜ {files}",
"Unable to upload your file as it is a directory or has 0 bytes" => "თქვენი ფáƒáƒ˜áƒšáƒ˜áƒ¡ áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვრვერ მáƒáƒ®áƒ”რხდáƒ. ის áƒáƒ áƒ˜áƒ¡ სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე დრშეიცáƒáƒ•áƒ¡ 0 ბáƒáƒ˜áƒ¢áƒ¡",
"Upload Error" => "შეცდáƒáƒ›áƒ áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვისáƒáƒ¡",
"Close" => "დáƒáƒ®áƒ£áƒ áƒ•áƒ",
@@ -26,8 +24,6 @@
"{count} files uploading" => "{count} ფáƒáƒ˜áƒšáƒ˜ იტვირთებáƒ",
"Upload cancelled." => "áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვრშეჩერებულ იქნáƒ.",
"File upload is in progress. Leaving the page now will cancel the upload." => "მიმდინáƒáƒ áƒ”áƒáƒ‘ს ფáƒáƒ˜áƒšáƒ˜áƒ¡ áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒ. სხვრგვერდზე გáƒáƒ“áƒáƒ¡áƒ•áƒšáƒ გáƒáƒ›áƒáƒ˜áƒ¬áƒ•áƒ”ვს áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვის შეჩერებáƒáƒ¡",
-"{count} files scanned" => "{count} ფáƒáƒ˜áƒšáƒ˜ სკáƒáƒœáƒ˜áƒ áƒ”ბულიáƒ",
-"error while scanning" => "შეცდáƒáƒ›áƒ სკáƒáƒœáƒ˜áƒ áƒ”ბისáƒáƒ¡",
"Name" => "სáƒáƒ®áƒ”ლი",
"Size" => "ზáƒáƒ›áƒ",
"Modified" => "შეცვლილიáƒ",
diff --git a/apps/files/l10n/ko.php b/apps/files/l10n/ko.php
index cd95d61e4dc..7774aeea31c 100644
--- a/apps/files/l10n/ko.php
+++ b/apps/files/l10n/ko.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "%s í•­ëª©ì„ ì´ë™ì‹œí‚¤ì§€ ëª»í•˜ì˜€ìŒ - íŒŒì¼ ì´ë¦„ì´ ì´ë¯¸ 존재함",
-"Could not move %s" => "%s í•­ëª©ì„ ì´ë”©ì‹œí‚¤ì§€ 못하였ìŒ",
-"Unable to rename file" => "íŒŒì¼ ì´ë¦„바꾸기 í•  수 ì—†ìŒ",
"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보다 í½ë‹ˆë‹¤:",
@@ -10,7 +7,8 @@
"No file was uploaded" => "ì—…ë¡œë“œëœ íŒŒì¼ ì—†ìŒ",
"Missing a temporary folder" => "ìž„ì‹œ í´ë”ê°€ 사ë¼ì§",
"Failed to write to disk" => "디스í¬ì— 쓰지 못했습니다",
-"Invalid directory." => "올바르지 ì•Šì€ ë””ë ‰í† ë¦¬ìž…ë‹ˆë‹¤.",
+"Not enough space available" => "여유 ê³µê°„ì´ ë¶€ì¡±í•©ë‹ˆë‹¤",
+"Invalid directory." => "올바르지 ì•Šì€ ë””ë ‰í„°ë¦¬ìž…ë‹ˆë‹¤.",
"Files" => "파ì¼",
"Unshare" => "공유 해제",
"Delete" => "삭제",
@@ -22,11 +20,12 @@
"replaced {new_name}" => "{new_name}ì„(를) 대체함",
"undo" => "실행 취소",
"replaced {new_name} with {old_name}" => "{old_name}ì´(ê°€) {new_name}(으)ë¡œ 대체ë¨",
-"unshared {files}" => "{files} 공유 í•´ì œë¨",
-"deleted {files}" => "{files} ì‚­ì œë¨",
"'.' is an invalid file name." => "'.' 는 올바르지 ì•Šì€ íŒŒì¼ ì´ë¦„ 입니다.",
-"File name cannot be empty." => "파ì¼ì´ë¦„ì€ ê³µëž€ì´ ë  ìˆ˜ 없습니다.",
+"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." => "다운로드가 준비 중입니다. íŒŒì¼ í¬ê¸°ê°€ í¬ë‹¤ë©´ ì‹œê°„ì´ ì˜¤ëž˜ 걸릴 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.",
"Unable to upload your file as it is a directory or has 0 bytes" => "ì´ íŒŒì¼ì€ 디렉터리ì´ê±°ë‚˜ 비어 있기 ë•Œë¬¸ì— ì—…ë¡œë“œí•  수 없습니다",
"Upload Error" => "업로드 오류",
"Close" => "닫기",
@@ -37,8 +36,6 @@
"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" => "í´ë” ì´ë¦„ì´ ìœ íš¨í•˜ì§€ 않습니다. ",
-"{count} files scanned" => "íŒŒì¼ {count}ê°œ 검색ë¨",
-"error while scanning" => "검색 중 오류 ë°œìƒ",
"Name" => "ì´ë¦„",
"Size" => "í¬ê¸°",
"Modified" => "수정ë¨",
@@ -65,5 +62,6 @@
"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" => "현재 검색"
+"Current scanning" => "현재 검색",
+"Upgrading filesystem cache..." => "íŒŒì¼ ì‹œìŠ¤í…œ ìºì‹œ 업그레ì´ë“œ 중..."
);
diff --git a/apps/files/l10n/lt_LT.php b/apps/files/l10n/lt_LT.php
index da209619e2a..f4ad655f421 100644
--- a/apps/files/l10n/lt_LT.php
+++ b/apps/files/l10n/lt_LT.php
@@ -16,8 +16,6 @@
"replaced {new_name}" => "pakeiskite {new_name}",
"undo" => "anuliuoti",
"replaced {new_name} with {old_name}" => "pakeiskite {new_name} į {old_name}",
-"unshared {files}" => "nebesidalinti {files}",
-"deleted {files}" => "ištrinti {files}",
"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",
"Upload Error" => "Įkėlimo klaida",
"Close" => "Užverti",
@@ -26,8 +24,6 @@
"{count} files uploading" => "{count} įkeliami failai",
"Upload cancelled." => "Įkėlimas atšauktas.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Failo įkėlimas pradėtas. Jei paliksite šį puslapį, įkėlimas nutrūks.",
-"{count} files scanned" => "{count} praskanuoti failai",
-"error while scanning" => "klaida skanuojant",
"Name" => "Pavadinimas",
"Size" => "Dydis",
"Modified" => "Pakeista",
diff --git a/apps/files/l10n/mk.php b/apps/files/l10n/mk.php
index 0ca08d6bc6a..2580d1e6a97 100644
--- a/apps/files/l10n/mk.php
+++ b/apps/files/l10n/mk.php
@@ -18,8 +18,6 @@
"replaced {new_name}" => "земенета {new_name}",
"undo" => "врати",
"replaced {new_name} with {old_name}" => "заменета {new_name} Ñо {old_name}",
-"unshared {files}" => "без Ñподелување {files}",
-"deleted {files}" => "избришани {files}",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ðеправилно име. , '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' не Ñе дозволени.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Ðе може да Ñе преземе вашата датотека бидејќи фолдерот во кој Ñе наоѓа фајлот има големина од 0 бајти",
"Upload Error" => "Грешка при преземање",
@@ -30,8 +28,6 @@
"Upload cancelled." => "Преземањето е прекинато.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Подигање на датотека е во тек. Ðапуштење на Ñтраницата ќе го прекине.",
"URL cannot be empty." => "ÐдреÑата неможе да биде празна.",
-"{count} files scanned" => "{count} датотеки Ñкенирани",
-"error while scanning" => "грешка при Ñкенирање",
"Name" => "Име",
"Size" => "Големина",
"Modified" => "Променето",
diff --git a/apps/files/l10n/nb_NO.php b/apps/files/l10n/nb_NO.php
index 8bb7cfb2f9c..a6ba6e9c03f 100644
--- a/apps/files/l10n/nb_NO.php
+++ b/apps/files/l10n/nb_NO.php
@@ -17,7 +17,6 @@
"replaced {new_name}" => "erstatt {new_name}",
"undo" => "angre",
"replaced {new_name} with {old_name}" => "erstatt {new_name} med {old_name}",
-"deleted {files}" => "slettet {files}",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ugyldig navn, '\\', '/', '<', '>', ':', '\"', '|', '?' og '*' er ikke tillatt.",
"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",
"Upload Error" => "Opplasting feilet",
@@ -28,8 +27,6 @@
"Upload cancelled." => "Opplasting avbrutt.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen.",
"URL cannot be empty." => "URL-en kan ikke være tom.",
-"{count} files scanned" => "{count} filer lest inn",
-"error while scanning" => "feil under skanning",
"Name" => "Navn",
"Size" => "Størrelse",
"Modified" => "Endret",
diff --git a/apps/files/l10n/nl.php b/apps/files/l10n/nl.php
index c78ac346d13..7f2e8ec2bf4 100644
--- a/apps/files/l10n/nl.php
+++ b/apps/files/l10n/nl.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "Kon %s niet verplaatsen - Er bestaat al een bestand met deze naam",
-"Could not move %s" => "Kon %s niet verplaatsen",
-"Unable to rename file" => "Kan bestand niet hernoemen",
"No file was uploaded. Unknown error" => "Er was geen bestand geladen. Onbekende fout",
"There is no error, the file uploaded with success" => "Geen fout opgetreden, bestand successvol geupload.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Het geüploade bestand overscheidt de upload_max_filesize optie in php.ini:",
@@ -10,6 +7,7 @@
"No file was uploaded" => "Geen bestand geüpload",
"Missing a temporary folder" => "Een tijdelijke map mist",
"Failed to write to disk" => "Schrijven naar schijf mislukt",
+"Not enough space available" => "Niet genoeg ruimte beschikbaar",
"Invalid directory." => "Ongeldige directory.",
"Files" => "Bestanden",
"Unshare" => "Stop delen",
@@ -22,8 +20,6 @@
"replaced {new_name}" => "verving {new_name}",
"undo" => "ongedaan maken",
"replaced {new_name} with {old_name}" => "verving {new_name} met {old_name}",
-"unshared {files}" => "delen gestopt {files}",
-"deleted {files}" => "verwijderde {files}",
"'.' 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.",
@@ -38,8 +34,6 @@
"File upload is in progress. Leaving the page now will cancel the upload." => "Bestandsupload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload.",
"URL cannot be empty." => "URL kan niet leeg zijn.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ongeldige mapnaam. Gebruik van'Gedeeld' is voorbehouden aan Owncloud",
-"{count} files scanned" => "{count} bestanden gescanned",
-"error while scanning" => "Fout tijdens het scannen",
"Name" => "Naam",
"Size" => "Bestandsgrootte",
"Modified" => "Laatst aangepast",
diff --git a/apps/files/l10n/oc.php b/apps/files/l10n/oc.php
index 76c8d6b655a..78045b299ed 100644
--- a/apps/files/l10n/oc.php
+++ b/apps/files/l10n/oc.php
@@ -19,7 +19,6 @@
"1 file uploading" => "1 fichièr al amontcargar",
"Upload cancelled." => "Amontcargar anullat.",
"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 while scanning" => "error pendant l'exploracion",
"Name" => "Nom",
"Size" => "Talha",
"Modified" => "Modificat",
diff --git a/apps/files/l10n/pl.php b/apps/files/l10n/pl.php
index 477e14491f7..6855850f0da 100644
--- a/apps/files/l10n/pl.php
+++ b/apps/files/l10n/pl.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "Nie można było przenieść %s - Plik o takiej nazwie już istnieje",
-"Could not move %s" => "Nie można było przenieść %s",
-"Unable to rename file" => "Nie można zmienić nazwy pliku",
"No file was uploaded. Unknown error" => "Plik nie został załadowany. Nieznany błąd",
"There is no error, the file uploaded with success" => "Przesłano plik",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Wgrany plik przekracza wartość upload_max_filesize zdefiniowaną w php.ini: ",
@@ -10,6 +7,7 @@
"No file was uploaded" => "Nie przesłano żadnego pliku",
"Missing a temporary folder" => "Brak katalogu tymczasowego",
"Failed to write to disk" => "BÅ‚Ä…d zapisu na dysk",
+"Not enough space available" => "Za mało miejsca",
"Invalid directory." => "Zła ścieżka.",
"Files" => "Pliki",
"Unshare" => "Nie udostępniaj",
@@ -22,8 +20,6 @@
"replaced {new_name}" => "zastÄ…piony {new_name}",
"undo" => "wróć",
"replaced {new_name} with {old_name}" => "zastÄ…piony {new_name} z {old_name}",
-"unshared {files}" => "Udostępniane wstrzymane {files}",
-"deleted {files}" => "usunięto {files}",
"'.' is an invalid file name." => "'.' jest nieprawidłową nazwą pliku.",
"File name cannot be empty." => "Nazwa pliku nie może być pusta.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Niepoprawna nazwa, Znaki '\\', '/', '<', '>', ':', '\"', '|', '?' oraz '*'sÄ… niedozwolone.",
@@ -37,8 +33,6 @@
"File upload is in progress. Leaving the page now will cancel the upload." => "Wysyłanie pliku jest w toku. Teraz opuszczając stronę wysyłanie zostanie anulowane.",
"URL cannot be empty." => "URL nie może być pusty.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nazwa folderu nieprawidłowa. Wykorzystanie \"Shared\" jest zarezerwowane przez Owncloud",
-"{count} files scanned" => "{count} pliki skanowane",
-"error while scanning" => "Wystąpił błąd podczas skanowania",
"Name" => "Nazwa",
"Size" => "Rozmiar",
"Modified" => "Czas modyfikacji",
diff --git a/apps/files/l10n/pt_BR.php b/apps/files/l10n/pt_BR.php
index 33014297ee5..361e81052b9 100644
--- a/apps/files/l10n/pt_BR.php
+++ b/apps/files/l10n/pt_BR.php
@@ -7,6 +7,7 @@
"No file was uploaded" => "Nenhum arquivo foi transferido",
"Missing a temporary folder" => "Pasta temporária não encontrada",
"Failed to write to disk" => "Falha ao escrever no disco",
+"Invalid directory." => "Diretório inválido.",
"Files" => "Arquivos",
"Unshare" => "Descompartilhar",
"Delete" => "Excluir",
@@ -18,9 +19,10 @@
"replaced {new_name}" => "substituído {new_name}",
"undo" => "desfazer",
"replaced {new_name} with {old_name}" => "Substituído {old_name} por {new_name} ",
-"unshared {files}" => "{files} não compartilhados",
-"deleted {files}" => "{files} apagados",
+"'.' 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 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.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Impossível enviar seus arquivo como diretório ou ele tem 0 bytes.",
"Upload Error" => "Erro de envio",
"Close" => "Fechar",
@@ -30,8 +32,7 @@
"Upload cancelled." => "Envio cancelado.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Upload em andamento. Sair da página agora resultará no cancelamento do envio.",
"URL cannot be empty." => "URL não pode ficar em branco",
-"{count} files scanned" => "{count} arquivos scaneados",
-"error while scanning" => "erro durante verificação",
+"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",
diff --git a/apps/files/l10n/pt_PT.php b/apps/files/l10n/pt_PT.php
index 6cee8d9d88e..1415b71e7f5 100644
--- a/apps/files/l10n/pt_PT.php
+++ b/apps/files/l10n/pt_PT.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "Não foi possível mover o ficheiro %s - Já existe um ficheiro com esse nome",
-"Could not move %s" => "Não foi possível move o ficheiro %s",
-"Unable to rename file" => "Não foi possível renomear o ficheiro",
"No file was uploaded. Unknown error" => "Nenhum ficheiro foi carregado. Erro desconhecido",
"There is no error, the file uploaded with success" => "Sem erro, ficheiro enviado com sucesso",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "O ficheiro enviado excede o limite permitido na directiva do php.ini upload_max_filesize",
@@ -10,7 +7,7 @@
"No file was uploaded" => "Não foi enviado nenhum ficheiro",
"Missing a temporary folder" => "Falta uma 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",
+"Not enough space available" => "Espaço em disco insuficiente!",
"Invalid directory." => "Directório Inválido",
"Files" => "Ficheiros",
"Unshare" => "Deixar de partilhar",
@@ -23,8 +20,6 @@
"replaced {new_name}" => "{new_name} substituido",
"undo" => "desfazer",
"replaced {new_name} with {old_name}" => "substituido {new_name} por {old_name}",
-"unshared {files}" => "{files} não partilhado(s)",
-"deleted {files}" => "{files} eliminado(s)",
"'.' 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.",
@@ -41,8 +36,6 @@
"File upload is in progress. Leaving the page now will cancel the upload." => "Envio de ficheiro em progresso. Irá cancelar o envio se sair da página agora.",
"URL cannot be empty." => "O URL não pode estar vazio.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nome de pasta inválido. O Uso de 'shared' é reservado para o ownCloud",
-"{count} files scanned" => "{count} ficheiros analisados",
-"error while scanning" => "erro ao analisar",
"Name" => "Nome",
"Size" => "Tamanho",
"Modified" => "Modificado",
@@ -69,5 +62,6 @@
"Upload too large" => "Envio muito grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os ficheiros que está a tentar enviar excedem o tamanho máximo de envio permitido neste servidor.",
"Files are being scanned, please wait." => "Os ficheiros estão a ser analisados, por favor aguarde.",
-"Current scanning" => "Análise actual"
+"Current scanning" => "Análise actual",
+"Upgrading filesystem cache..." => "Atualizar cache do sistema de ficheiros..."
);
diff --git a/apps/files/l10n/ro.php b/apps/files/l10n/ro.php
index 424450e920f..7837b1f5b30 100644
--- a/apps/files/l10n/ro.php
+++ b/apps/files/l10n/ro.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "Nu se poate de mutat %s - Fișier cu acest nume deja există",
-"Could not move %s" => "Nu s-a putut muta %s",
-"Unable to rename file" => "Nu s-a putut redenumi fișierul",
"No file was uploaded. Unknown error" => "Nici un fișier nu a fost încărcat. Eroare necunoscută",
"There is no error, the file uploaded with success" => "Nicio eroare, fișierul a fost încărcat cu succes",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Fisierul incarcat depaseste upload_max_filesize permisi in php.ini: ",
@@ -10,6 +7,7 @@
"No file was uploaded" => "Niciun fișier încărcat",
"Missing a temporary folder" => "Lipsește un dosar temporar",
"Failed to write to disk" => "Eroare la scriere pe disc",
+"Not enough space available" => "Nu este suficient spațiu disponibil",
"Invalid directory." => "Director invalid.",
"Files" => "Fișiere",
"Unshare" => "Anulează partajarea",
@@ -22,8 +20,6 @@
"replaced {new_name}" => "inlocuit {new_name}",
"undo" => "Anulează ultima acțiune",
"replaced {new_name} with {old_name}" => "{new_name} inlocuit cu {old_name}",
-"unshared {files}" => "nedistribuit {files}",
-"deleted {files}" => "Sterse {files}",
"'.' 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.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nume invalid, '\\', '/', '<', '>', ':', '\"', '|', '?' si '*' nu sunt permise.",
@@ -38,8 +34,6 @@
"File upload is in progress. Leaving the page now will cancel the upload." => "Fișierul este în curs de încărcare. Părăsirea paginii va întrerupe încărcarea.",
"URL cannot be empty." => "Adresa URL nu poate fi goală.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Invalid folder name. Usage of 'Shared' is reserved by Ownclou",
-"{count} files scanned" => "{count} fisiere scanate",
-"error while scanning" => "eroare la scanarea",
"Name" => "Nume",
"Size" => "Dimensiune",
"Modified" => "Modificat",
diff --git a/apps/files/l10n/ru.php b/apps/files/l10n/ru.php
index ae103a9e810..716afa5f29a 100644
--- a/apps/files/l10n/ru.php
+++ b/apps/files/l10n/ru.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "Ðевозможно перемеÑтить %s - файл Ñ Ñ‚Ð°ÐºÐ¸Ð¼ именем уже ÑущеÑтвует",
-"Could not move %s" => "Ðевозможно перемеÑтить %s",
-"Unable to rename file" => "Ðевозможно переименовать файл",
"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:",
@@ -10,6 +7,7 @@
"No file was uploaded" => "Файл не был загружен",
"Missing a temporary folder" => "Ðевозможно найти временную папку",
"Failed to write to disk" => "Ошибка запиÑи на диÑк",
+"Not enough space available" => "ÐедоÑтаточно Ñвободного меÑта",
"Invalid directory." => "Ðеправильный каталог.",
"Files" => "Файлы",
"Unshare" => "Отменить публикацию",
@@ -22,8 +20,6 @@
"replaced {new_name}" => "заменено {new_name}",
"undo" => "отмена",
"replaced {new_name} with {old_name}" => "заменено {new_name} на {old_name}",
-"unshared {files}" => "не опубликованные {files}",
-"deleted {files}" => "удаленные {files}",
"'.' is an invalid file name." => "'.' - неправильное Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°.",
"File name cannot be empty." => "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° не может быть пуÑтым.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ðеправильное имÑ, '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' недопуÑтимы.",
@@ -37,8 +33,6 @@
"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' зарезервировано.",
-"{count} files scanned" => "{count} файлов проÑканировано",
-"error while scanning" => "ошибка во Ð²Ñ€ÐµÐ¼Ñ ÑанированиÑ",
"Name" => "Ðазвание",
"Size" => "Размер",
"Modified" => "Изменён",
diff --git a/apps/files/l10n/ru_RU.php b/apps/files/l10n/ru_RU.php
index 60a7fd0f71e..e1952567d31 100644
--- a/apps/files/l10n/ru_RU.php
+++ b/apps/files/l10n/ru_RU.php
@@ -7,6 +7,8 @@
"No file was uploaded" => "Файл не был загружен",
"Missing a temporary folder" => "ОтÑутÑтвует Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¿Ð°Ð¿ÐºÐ°",
"Failed to write to disk" => "Ðе удалоÑÑŒ запиÑать на диÑк",
+"Not enough space available" => "Ðе доÑтаточно Ñвободного меÑта",
+"Invalid directory." => "Ðеверный каталог.",
"Files" => "Файлы",
"Unshare" => "Скрыть",
"Delete" => "Удалить",
@@ -18,8 +20,8 @@
"replaced {new_name}" => "заменено {новое_имÑ}",
"undo" => "отменить дейÑтвие",
"replaced {new_name} with {old_name}" => "заменено {новое_имÑ} Ñ {Ñтарое_имÑ}",
-"unshared {files}" => "CовмеÑтное иÑпользование прекращено {файлы}",
-"deleted {files}" => "удалено {файлы}",
+"'.' is an invalid file name." => "'.' ÑвлÑетÑÑ Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¼ именем файла.",
+"File name cannot be empty." => "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° не может быть пуÑтым.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ðекорректное имÑ, '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' не допуÑтимы.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Ðевозможно загрузить файл,\n так как он имеет нулевой размер или ÑвлÑетÑÑ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸ÐµÐ¹",
"Upload Error" => "Ошибка загрузки",
@@ -30,8 +32,7 @@
"Upload cancelled." => "Загрузка отменена",
"File upload is in progress. Leaving the page now will cancel the upload." => "ПроцеÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ файла. ЕÑли покинуть Ñтраницу ÑейчаÑ, загрузка будет отменена.",
"URL cannot be empty." => "URL не должен быть пуÑтым.",
-"{count} files scanned" => "{количеÑтво} файлов отÑканировано",
-"error while scanning" => "ошибка при Ñканировании",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ðеверное Ð¸Ð¼Ñ Ð¿Ð°Ð¿ÐºÐ¸. ИÑпользование Ð½Ð°Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ 'Опубликовано' зарезервировано Owncloud",
"Name" => "ИмÑ",
"Size" => "Размер",
"Modified" => "Изменен",
@@ -58,5 +59,6 @@
"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" => "Текущее Ñканирование"
+"Current scanning" => "Текущее Ñканирование",
+"Upgrading filesystem cache..." => "Обновление кÑша файловой ÑиÑтемы... "
);
diff --git a/apps/files/l10n/si_LK.php b/apps/files/l10n/si_LK.php
index 133737cb57a..316470d8396 100644
--- a/apps/files/l10n/si_LK.php
+++ b/apps/files/l10n/si_LK.php
@@ -20,7 +20,6 @@
"Upload cancelled." => "උඩුගත කිරීම අත් හරින්න ලදී",
"File upload is in progress. Leaving the page now will cancel the upload." => "උඩුගතකිරීමක් සිදුවේ. පිටුව à·„à·à¶» යà·à¶¸à·™à¶±à·Š එය නà·à·€à¶­à·™à¶±à·” ඇත",
"URL cannot be empty." => "යොමුව හිස් විය නොහà·à¶š",
-"error while scanning" => "පරීක්ෂ෠කිරීමේදී දà·à·‚යක්",
"Name" => "නම",
"Size" => "ප්â€à¶»à¶¸à·à¶«à¶º",
"Modified" => "වෙනස් කළ",
diff --git a/apps/files/l10n/sk_SK.php b/apps/files/l10n/sk_SK.php
index bae5670d061..a94d96f6aee 100644
--- a/apps/files/l10n/sk_SK.php
+++ b/apps/files/l10n/sk_SK.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "Nie je možné presunúť %s - súbor s týmto menom už existuje",
-"Could not move %s" => "Nie je možné presunúť %s",
-"Unable to rename file" => "Nemožno premenovať súbor",
"No file was uploaded. Unknown error" => "Žiaden súbor nebol odoslaný. Neznáma chyba",
"There is no error, the file uploaded with success" => "Nenastala žiadna chyba, súbor bol úspešne nahraný",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Nahraný súbor predÄil konfiguraÄnú direktívu upload_max_filesize v súbore php.ini:",
@@ -10,6 +7,7 @@
"No file was uploaded" => "Žiaden súbor nebol nahraný",
"Missing a temporary folder" => "Chýbajúci doÄasný prieÄinok",
"Failed to write to disk" => "Zápis na disk sa nepodaril",
+"Not enough space available" => "Nie je k dispozícii dostatok miesta",
"Invalid directory." => "Neplatný adresár",
"Files" => "Súbory",
"Unshare" => "Nezdielať",
@@ -22,11 +20,11 @@
"replaced {new_name}" => "prepísaný {new_name}",
"undo" => "vrátiť",
"replaced {new_name} with {old_name}" => "prepísaný {new_name} súborom {old_name}",
-"unshared {files}" => "zdieľanie zrušené pre {files}",
-"deleted {files}" => "zmazané {files}",
"'.' 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}%)",
"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ť.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nemôžem nahraÅ¥ súbor lebo je to prieÄinok alebo má 0 bajtov.",
"Upload Error" => "Chyba odosielania",
@@ -38,8 +36,6 @@
"File upload is in progress. Leaving the page now will cancel the upload." => "Opustenie stránky zruší práve prebiehajúce odosielanie súboru.",
"URL cannot be empty." => "URL nemôže byť prázdne",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Neplatné meno adresára. Používanie mena 'Shared' je vyhradené len pre Owncloud",
-"{count} files scanned" => "{count} súborov prehľadaných",
-"error while scanning" => "chyba poÄas kontroly",
"Name" => "Meno",
"Size" => "Veľkosť",
"Modified" => "Upravené",
diff --git a/apps/files/l10n/sl.php b/apps/files/l10n/sl.php
index fbc6ab83b8b..d55b4207d2b 100644
--- a/apps/files/l10n/sl.php
+++ b/apps/files/l10n/sl.php
@@ -18,8 +18,6 @@
"replaced {new_name}" => "zamenjano je ime {new_name}",
"undo" => "razveljavi",
"replaced {new_name} with {old_name}" => "zamenjano ime {new_name} z imenom {old_name}",
-"unshared {files}" => "odstranjeno iz souporabe {files}",
-"deleted {files}" => "izbrisano {files}",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Neveljavno ime, znaki '\\', '/', '<', '>', ':', '\"', '|', '?' in '*' niso dovoljeni.",
"Unable to upload your file as it is a directory or has 0 bytes" => "PoÅ¡iljanje ni mogoÄe, saj gre za mapo, ali pa je datoteka velikosti 0 bajtov.",
"Upload Error" => "Napaka med nalaganjem",
@@ -30,8 +28,6 @@
"Upload cancelled." => "Pošiljanje je preklicano.",
"File upload is in progress. Leaving the page now will cancel the upload." => "V teku je pošiljanje datoteke. Če zapustite to stran zdaj, bo pošiljanje preklicano.",
"URL cannot be empty." => "Naslov URL ne sme biti prazen.",
-"{count} files scanned" => "{count} files scanned",
-"error while scanning" => "napaka med pregledovanjem datotek",
"Name" => "Ime",
"Size" => "Velikost",
"Modified" => "Spremenjeno",
diff --git a/apps/files/l10n/sr.php b/apps/files/l10n/sr.php
index 71da2da4d14..188c8fc0da6 100644
--- a/apps/files/l10n/sr.php
+++ b/apps/files/l10n/sr.php
@@ -17,8 +17,6 @@
"replaced {new_name}" => "замењено {new_name}",
"undo" => "опозови",
"replaced {new_name} with {old_name}" => "замењено {new_name} Ñа {old_name}",
-"unshared {files}" => "укинуто дељење {files}",
-"deleted {files}" => "обриÑано {files}",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "ÐеиÑправан назив. Следећи знакови ниÑу дозвољени: \\, /, <, >, :, \", |, ? и *.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Ðе могу да отпремим датотеку као фаÑциклу или она има 0 бајтова",
"Upload Error" => "Грешка при отпремању",
@@ -28,8 +26,6 @@
"{count} files uploading" => "Отпремам {count} датотеке/а",
"Upload cancelled." => "Отпремање је прекинуто.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Отпремање датотеке је у току. Ðко Ñада напуÑтите Ñтраницу, прекинућете отпремање.",
-"{count} files scanned" => "Скенирано датотека: {count}",
-"error while scanning" => "грешка при Ñкенирању",
"Name" => "Ðазив",
"Size" => "Величина",
"Modified" => "Измењено",
diff --git a/apps/files/l10n/sv.php b/apps/files/l10n/sv.php
index ebcb4626fc8..4b4785931f2 100644
--- a/apps/files/l10n/sv.php
+++ b/apps/files/l10n/sv.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "Kunde inte flytta %s - Det finns redan en fil med detta namn",
-"Could not move %s" => "Kan inte flytta %s",
-"Unable to rename file" => "Kan inte byta namn på filen",
"No file was uploaded. Unknown error" => "Ingen fil uppladdad. Okänt fel",
"There is no error, the file uploaded with success" => "Inga fel uppstod. Filen laddades upp utan problem",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Den uppladdade filen överskrider upload_max_filesize direktivet php.ini:",
@@ -10,7 +7,7 @@
"No file was uploaded" => "Ingen fil blev uppladdad",
"Missing a temporary folder" => "Saknar en tillfällig mapp",
"Failed to write to disk" => "Misslyckades spara till disk",
-"Not enough storage available" => "Inte tillräckligt med lagringsutrymme tillgängligt",
+"Not enough space available" => "Inte tillräckligt med utrymme tillgängligt",
"Invalid directory." => "Felaktig mapp.",
"Files" => "Filer",
"Unshare" => "Sluta dela",
@@ -23,8 +20,6 @@
"replaced {new_name}" => "ersatt {new_name}",
"undo" => "Ã¥ngra",
"replaced {new_name} with {old_name}" => "ersatt {new_name} med {old_name}",
-"unshared {files}" => "stoppad delning {files}",
-"deleted {files}" => "raderade {files}",
"'.' 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.",
@@ -41,8 +36,6 @@
"File upload is in progress. Leaving the page now will cancel the upload." => "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen.",
"URL cannot be empty." => "URL kan inte vara tom.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ogiltigt mappnamn. Användande av 'Shared' är reserverat av ownCloud",
-"{count} files scanned" => "{count} filer skannade",
-"error while scanning" => "fel vid skanning",
"Name" => "Namn",
"Size" => "Storlek",
"Modified" => "Ändrad",
@@ -69,5 +62,6 @@
"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"
+"Current scanning" => "Aktuell skanning",
+"Upgrading filesystem cache..." => "Uppgraderar filsystemets cache..."
);
diff --git a/apps/files/l10n/ta_LK.php b/apps/files/l10n/ta_LK.php
index 52916fed774..383b4ef6f85 100644
--- a/apps/files/l10n/ta_LK.php
+++ b/apps/files/l10n/ta_LK.php
@@ -17,8 +17,6 @@
"replaced {new_name}" => "மாறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯ {new_name}",
"undo" => "à®®à¯à®©à¯ செயல௠நீகà¯à®•à®®à¯ ",
"replaced {new_name} with {old_name}" => "{new_name} ஆனத௠{old_name} இனால௠மாறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯",
-"unshared {files}" => "பகிரபà¯à®ªà®Ÿà®¾à®¤à®¤à¯ {கோபà¯à®ªà¯à®•à®³à¯}",
-"deleted {files}" => "நீகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯ {கோபà¯à®ªà¯à®•à®³à¯}",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®±à¯à®± பெயரà¯,'\\', '/', '<', '>', ':', '\"', '|', '?' மறà¯à®±à¯à®®à¯ '*' ஆகியன அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà®®à®¾à®Ÿà¯à®Ÿà®¾à®¤à¯.",
"Unable to upload your file as it is a directory or has 0 bytes" => "அடைவ௠அலà¯à®²à®¤à¯ 0 bytes ஠கொணà¯à®Ÿà¯à®³à¯à®³à®¤à®¾à®²à¯ உஙà¯à®•à®³à¯à®Ÿà¯ˆà®¯ கோபà¯à®ªà¯ˆ பதிவேறà¯à®± à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ",
"Upload Error" => "பதிவேறà¯à®±à®²à¯ வழà¯",
@@ -29,8 +27,6 @@
"Upload cancelled." => "பதிவேறà¯à®±à®²à¯ இரதà¯à®¤à¯ செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯",
"File upload is in progress. Leaving the page now will cancel the upload." => "கோபà¯à®ªà¯ பதிவேறà¯à®±à®®à¯ செயலà¯à®ªà®¾à®Ÿà¯à®Ÿà®¿à®²à¯ உளà¯à®³à®¤à¯. இநà¯à®¤à®ªà¯ பகà¯à®•à®¤à¯à®¤à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ வெறியேறà¯à®µà®¤à®¾à®©à®¤à¯ பதிவேறà¯à®±à®²à¯ˆ இரதà¯à®¤à¯ செயà¯à®¯à¯à®®à¯.",
"URL cannot be empty." => "URL வெறà¯à®®à¯ˆà®¯à®¾à®• இரà¯à®•à¯à®•à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯.",
-"{count} files scanned" => "{எணà¯à®£à®¿à®•à¯à®•à¯ˆ} கோபà¯à®ªà¯à®•à®³à¯ வரà¯à®Ÿà®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯",
-"error while scanning" => "வரà¯à®Ÿà¯à®®à¯ போதான வழà¯",
"Name" => "பெயரà¯",
"Size" => "அளவà¯",
"Modified" => "மாறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯",
diff --git a/apps/files/l10n/th_TH.php b/apps/files/l10n/th_TH.php
index d7fcd82a9d1..c141e4f7166 100644
--- a/apps/files/l10n/th_TH.php
+++ b/apps/files/l10n/th_TH.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "ไม่สามารถย้าย %s ได้ - ไฟล์ที่ใช้ชื่อนี้มีอยู่à¹à¸¥à¹‰à¸§",
-"Could not move %s" => "ไม่สามารถย้าย %s ได้",
-"Unable to rename file" => "ไม่สามารถเปลี่ยนชื่อไฟล์ได้",
"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",
@@ -10,7 +7,7 @@
"No file was uploaded" => "ยังไม่มีไฟล์ที่ถูà¸à¸­à¸±à¸žà¹‚หลด",
"Missing a temporary folder" => "à¹à¸Ÿà¹‰à¸¡à¹€à¸­à¸à¸ªà¸²à¸£à¸Šà¸±à¹ˆà¸§à¸„ราวเà¸à¸´à¸”à¸à¸²à¸£à¸ªà¸¹à¸à¸«à¸²à¸¢",
"Failed to write to disk" => "เขียนข้อมูลลงà¹à¸œà¹ˆà¸™à¸”ิสà¸à¹Œà¸¥à¹‰à¸¡à¹€à¸«à¸¥à¸§",
-"Not enough storage available" => "เหลือพื้นที่ไม่เพียงสำหรับใช้งาน",
+"Not enough space available" => "มีพื้นที่เหลือไม่เพียงพอ",
"Invalid directory." => "ไดเร็à¸à¸—อรี่ไม่ถูà¸à¸•à¹‰à¸­à¸‡",
"Files" => "ไฟล์",
"Unshare" => "ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹à¸Šà¸£à¹Œà¸‚้อมูล",
@@ -23,8 +20,6 @@
"replaced {new_name}" => "à¹à¸—นที่ {new_name} à¹à¸¥à¹‰à¸§",
"undo" => "เลิà¸à¸—ำ",
"replaced {new_name} with {old_name}" => "à¹à¸—นที่ {new_name} ด้วย {old_name} à¹à¸¥à¹‰à¸§",
-"unshared {files}" => "ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹à¸Šà¸£à¹Œà¹à¸¥à¹‰à¸§ {files} ไฟล์",
-"deleted {files}" => "ลบไฟล์à¹à¸¥à¹‰à¸§ {files} ไฟล์",
"'.' is an invalid file name." => "'.' เป็นชื่อไฟล์ที่ไม่ถูà¸à¸•à¹‰à¸­à¸‡",
"File name cannot be empty." => "ชื่อไฟล์ไม่สามารถเว้นว่างได้",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "ชื่อที่ใช้ไม่ถูà¸à¸•à¹‰à¸­à¸‡, '\\', '/', '<', '>', ':', '\"', '|', '?' à¹à¸¥à¸° '*' ไม่ได้รับอนุà¸à¸²à¸•à¹ƒà¸«à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹„ด้",
@@ -41,8 +36,6 @@
"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" => "ชื่อโฟลเดอร์ไม่ถูà¸à¸•à¹‰à¸­à¸‡ à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ 'à¹à¸Šà¸£à¹Œ' สงวนไว้สำหรับ Owncloud เท่านั้น",
-"{count} files scanned" => "สà¹à¸à¸™à¹„ฟล์à¹à¸¥à¹‰à¸§ {count} ไฟล์",
-"error while scanning" => "พบข้อผิดพลาดในระหว่างà¸à¸²à¸£à¸ªà¹à¸à¸™à¹„ฟล์",
"Name" => "ชื่อ",
"Size" => "ขนาด",
"Modified" => "ปรับปรุงล่าสุด",
diff --git a/apps/files/l10n/tr.php b/apps/files/l10n/tr.php
index 2eba20fd0ae..3412d8ad448 100644
--- a/apps/files/l10n/tr.php
+++ b/apps/files/l10n/tr.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "%s taşınamadı. Bu isimde dosya zaten var.",
-"Could not move %s" => "%s taşınamadı",
-"Unable to rename file" => "Dosya adı değiştirilemedi",
"No file was uploaded. Unknown error" => "Dosya yüklenmedi. Bilinmeyen hata",
"There is no error, the file uploaded with success" => "Bir hata yok, dosya başarıyla yüklendi",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "php.ini dosyasında upload_max_filesize ile belirtilen dosya yükleme sınırı aşıldı.",
@@ -10,6 +7,7 @@
"No file was uploaded" => "Hiç dosya yüklenmedi",
"Missing a temporary folder" => "Geçici bir klasör eksik",
"Failed to write to disk" => "Diske yazılamadı",
+"Not enough space available" => "Yeterli disk alanı yok",
"Invalid directory." => "Geçersiz dizin.",
"Files" => "Dosyalar",
"Unshare" => "Paylaşılmayan",
@@ -22,8 +20,6 @@
"replaced {new_name}" => "deÄŸiÅŸtirilen {new_name}",
"undo" => "geri al",
"replaced {new_name} with {old_name}" => "{new_name} ismi {old_name} ile deÄŸiÅŸtirildi",
-"unshared {files}" => "paylaşılmamış {files}",
-"deleted {files}" => "silinen {files}",
"'.' 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.",
@@ -38,8 +34,6 @@
"File upload is in progress. Leaving the page now will cancel the upload." => "Dosya yükleme işlemi sürüyor. Şimdi sayfadan ayrılırsanız işleminiz iptal olur.",
"URL cannot be empty." => "URL boÅŸ olamaz.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Geçersiz dizin adı. Shared isminin kullanımı Owncloud tarafından rezerver edilmiştir.",
-"{count} files scanned" => "{count} dosya tarandı",
-"error while scanning" => "tararamada hata oluÅŸdu",
"Name" => "Ad",
"Size" => "Boyut",
"Modified" => "DeÄŸiÅŸtirilme",
diff --git a/apps/files/l10n/uk.php b/apps/files/l10n/uk.php
index aafa035ea09..9831dfe0f8f 100644
--- a/apps/files/l10n/uk.php
+++ b/apps/files/l10n/uk.php
@@ -18,8 +18,6 @@
"replaced {new_name}" => "замінено {new_name}",
"undo" => "відмінити",
"replaced {new_name} with {old_name}" => "замінено {new_name} на {old_name}",
-"unshared {files}" => "неопубліковано {files}",
-"deleted {files}" => "видалено {files}",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ðевірне ім'Ñ, '\\', '/', '<', '>', ':', '\"', '|', '?' та '*' не дозволені.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Ðеможливо завантажити ваш файл тому, що він тека або файл розміром 0 байт",
"Upload Error" => "Помилка завантаженнÑ",
@@ -30,8 +28,6 @@
"Upload cancelled." => "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑ€Ð²Ð°Ð½Ð¾.",
"File upload is in progress. Leaving the page now will cancel the upload." => "ВиконуєтьÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ. Ð—Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ†Ñ–Ñ”Ñ— Ñторінки приведе до відміни завантаженнÑ.",
"URL cannot be empty." => "URL не може бути пуÑтим.",
-"{count} files scanned" => "{count} файлів проÑкановано",
-"error while scanning" => "помилка при Ñкануванні",
"Name" => "Ім'Ñ",
"Size" => "Розмір",
"Modified" => "Змінено",
diff --git a/apps/files/l10n/vi.php b/apps/files/l10n/vi.php
index ce4f3a7973f..0daf580a2f5 100644
--- a/apps/files/l10n/vi.php
+++ b/apps/files/l10n/vi.php
@@ -17,8 +17,6 @@
"replaced {new_name}" => "đã thay thế {new_name}",
"undo" => "lùi lại",
"replaced {new_name} with {old_name}" => "đã thay thế {new_name} bằng {old_name}",
-"unshared {files}" => "hủy chia sẽ {files}",
-"deleted {files}" => "đã xóa {files}",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Tên không hợp lệ, '\\', '/', '<', '>', ':', '\"', '|', '?' và '*' thì không được phép dùng.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Không thể tải lên tập tin này do nó là một thư mục hoặc kích thước tập tin bằng 0 byte",
"Upload Error" => "Tải lên lỗi",
@@ -29,8 +27,6 @@
"Upload cancelled." => "Hủy tải lên",
"File upload is in progress. Leaving the page now will cancel the upload." => "Tập tin tải lên Ä‘ang được xá»­ lý. Nếu bạn rá»i khá»i trang bây giá» sẽ hủy quá trình này.",
"URL cannot be empty." => "URL không được để trống.",
-"{count} files scanned" => "{count} tập tin đã được quét",
-"error while scanning" => "lỗi trong khi quét",
"Name" => "Tên",
"Size" => "Kích cỡ",
"Modified" => "Thay đổi",
diff --git a/apps/files/l10n/zh_CN.GB2312.php b/apps/files/l10n/zh_CN.GB2312.php
index ae1b603369a..a38e2d3bc60 100644
--- a/apps/files/l10n/zh_CN.GB2312.php
+++ b/apps/files/l10n/zh_CN.GB2312.php
@@ -17,8 +17,6 @@
"replaced {new_name}" => "å·²æ›¿æ¢ {new_name}",
"undo" => "撤销",
"replaced {new_name} with {old_name}" => "已用 {old_name} æ›¿æ¢ {new_name}",
-"unshared {files}" => "未分享的 {files}",
-"deleted {files}" => "已删除的 {files}",
"Unable to upload your file as it is a directory or has 0 bytes" => "ä¸èƒ½ä¸Šä¼ ä½ æŒ‡å®šçš„文件,å¯èƒ½å› ä¸ºå®ƒæ˜¯ä¸ªæ–‡ä»¶å¤¹æˆ–者大å°ä¸º0",
"Upload Error" => "上传错误",
"Close" => "关闭",
@@ -28,8 +26,6 @@
"Upload cancelled." => "上传å–消了",
"File upload is in progress. Leaving the page now will cancel the upload." => "文件正在上传。关闭页é¢ä¼šå–消上传。",
"URL cannot be empty." => "网å€ä¸èƒ½ä¸ºç©ºã€‚",
-"{count} files scanned" => "{count} 个文件已扫æ",
-"error while scanning" => "扫æ出错",
"Name" => "åå­—",
"Size" => "大å°",
"Modified" => "修改日期",
diff --git a/apps/files/l10n/zh_CN.php b/apps/files/l10n/zh_CN.php
index 2e0f938dcd8..2491d645340 100644
--- a/apps/files/l10n/zh_CN.php
+++ b/apps/files/l10n/zh_CN.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "无法移动 %s - åŒå文件已存在",
-"Could not move %s" => "无法移动 %s",
-"Unable to rename file" => "无法é‡å‘½å文件",
"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所规定的值",
@@ -10,6 +7,7 @@
"No file was uploaded" => "文件没有上传",
"Missing a temporary folder" => "缺少临时目录",
"Failed to write to disk" => "写入ç£ç›˜å¤±è´¥",
+"Not enough space available" => "没有足够å¯ç”¨ç©ºé—´",
"Invalid directory." => "无效文件夹。",
"Files" => "文件",
"Unshare" => "å–消分享",
@@ -22,8 +20,6 @@
"replaced {new_name}" => "æ›¿æ¢ {new_name}",
"undo" => "撤销",
"replaced {new_name} with {old_name}" => "已将 {old_name}替æ¢æˆ {new_name}",
-"unshared {files}" => "å–消了共享 {files}",
-"deleted {files}" => "删除了 {files}",
"'.' is an invalid file name." => "'.' 是一个无效的文件å。",
"File name cannot be empty." => "文件åä¸èƒ½ä¸ºç©ºã€‚",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "无效å称,'\\', '/', '<', '>', ':', '\"', '|', '?' å’Œ '*' ä¸è¢«å…许使用。",
@@ -38,8 +34,6 @@
"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" => "无效文件夹å。'共享' 是 Owncloud 预留的文件夹å。",
-"{count} files scanned" => "{count} 个文件已扫æ。",
-"error while scanning" => "扫æ时出错",
"Name" => "å称",
"Size" => "大å°",
"Modified" => "修改日期",
diff --git a/apps/files/l10n/zh_TW.php b/apps/files/l10n/zh_TW.php
index 8d41a927355..6d354ac1e95 100644
--- a/apps/files/l10n/zh_TW.php
+++ b/apps/files/l10n/zh_TW.php
@@ -1,7 +1,4 @@
<?php $TRANSLATIONS = array(
-"Could not move %s - File with this name already exists" => "無法移動 %s - åŒå的檔案已經存在",
-"Could not move %s" => "無法移動 %s",
-"Unable to rename file" => "無法é‡æ–°å‘½å檔案",
"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 åƒæ•¸çš„設定:",
@@ -10,6 +7,7 @@
"No file was uploaded" => "無已上傳檔案",
"Missing a temporary folder" => "éºå¤±æš«å­˜è³‡æ–™å¤¾",
"Failed to write to disk" => "寫入硬碟失敗",
+"Not enough space available" => "沒有足夠的å¯ç”¨ç©ºé–“",
"Invalid directory." => "無效的資料夾。",
"Files" => "檔案",
"Unshare" => "å–消共享",
@@ -22,8 +20,6 @@
"replaced {new_name}" => "å·²å–代 {new_name}",
"undo" => "復原",
"replaced {new_name} with {old_name}" => "使用 {new_name} å–代 {old_name}",
-"unshared {files}" => "å·²å–消分享 {files}",
-"deleted {files}" => "已刪除 {files}",
"'.' is an invalid file name." => "'.' 是ä¸åˆæ³•çš„檔å。",
"File name cannot be empty." => "檔åä¸èƒ½ç‚ºç©ºã€‚",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "檔åä¸åˆæ³•ï¼Œä¸å…許 '\\', '/', '<', '>', ':', '\"', '|', '?' å’Œ '*' 。",
@@ -38,8 +34,6 @@
"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 ä¿ç•™",
-"{count} files scanned" => "{count} 個檔案已掃æ",
-"error while scanning" => "掃æ時發生錯誤",
"Name" => "å稱",
"Size" => "大å°",
"Modified" => "修改",
diff --git a/apps/files/settings.php b/apps/files/settings.php
index ea730a5a727..8687f013137 100644
--- a/apps/files/settings.php
+++ b/apps/files/settings.php
@@ -32,7 +32,7 @@ OCP\Util::addscript( "files", "files" );
$dir = isset( $_GET['dir'] ) ? $_GET['dir'] : '';
$files = array();
-foreach( OC_Files::getdirectorycontent( $dir ) as $i ) {
+foreach( \OC\Files\Filesystem::getDirectoryContent( $dir ) as $i ) {
$i["date"] = date( $CONFIG_DATEFORMAT, $i["mtime"] );
$files[] = $i;
}
diff --git a/apps/files/templates/index.php b/apps/files/templates/index.php
index b66b523ae38..2d4ed9ab2d9 100644
--- a/apps/files/templates/index.php
+++ b/apps/files/templates/index.php
@@ -35,6 +35,11 @@
<a href="#" class="svg" onclick="return false;"></a>
</form>
</div>
+ <?php if ($_['trash'] ): ?>
+ <div id="trash" class="button">
+ <a><?php echo $l->t('Trash');?></a>
+ </div>
+ <?php endif; ?>
<div id="uploadprogresswrapper">
<div id="uploadprogressbar"></div>
<input type="button" class="stop" style="display:none"
@@ -42,7 +47,6 @@
onclick="javascript:Files.cancelUploads();"
/>
</div>
-
</div>
<div id="file_action_panel"></div>
<?php else:?>
diff --git a/apps/files/templates/part.list.php b/apps/files/templates/part.list.php
index f3f06d61d66..5c39dda85ff 100644
--- a/apps/files/templates/part.list.php
+++ b/apps/files/templates/part.list.php
@@ -13,7 +13,7 @@
$name = str_replace('%2F', '/', $name);
$directory = str_replace('+', '%20', urlencode($file['directory']));
$directory = str_replace('%2F', '/', $directory); ?>
- <tr data-id="<?php echo $file['id']; ?>"
+ <tr data-id="<?php echo $file['fileid']; ?>"
data-file="<?php echo $name;?>"
data-type="<?php echo ($file['type'] == 'dir')?'dir':'file'?>"
data-mime="<?php echo $file['mimetype']?>"
@@ -28,7 +28,7 @@
>
<?php if(!isset($_['readonly']) || !$_['readonly']): ?><input type="checkbox" /><?php endif; ?>
<?php if($file['type'] == 'dir'): ?>
- <a class="name" href="<?php $_['baseURL'].$directory.'/'.$name; ?>)" title="">
+ <a class="name" href="<?php echo $_['baseURL'].$directory.'/'.$name; ?>)" title="">
<?php else: ?>
<a class="name" href="<?php echo $_['downloadURL'].$directory.'/'.$name; ?>" title="">
<?php endif; ?>
@@ -61,4 +61,4 @@
</span>
</td>
</tr>
-<?php endforeach; \ No newline at end of file
+<?php endforeach;
diff --git a/apps/files/templates/upgrade.php b/apps/files/templates/upgrade.php
new file mode 100644
index 00000000000..de6cc713028
--- /dev/null
+++ b/apps/files/templates/upgrade.php
@@ -0,0 +1,4 @@
+<div id="upgrade">
+ <?php echo $l->t('Upgrading filesystem cache...');?>
+ <div id="progressbar" />
+</div>
diff --git a/apps/files_encryption/l10n/es.php b/apps/files_encryption/l10n/es.php
index 6a6f5510db6..2c6b650960a 100644
--- a/apps/files_encryption/l10n/es.php
+++ b/apps/files_encryption/l10n/es.php
@@ -1,9 +1,15 @@
<?php $TRANSLATIONS = array(
"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "Por favor, cambie su cliente de ownCloud y cambie su clave de cifrado para completar la conversión.",
-"switched to client side encryption" => "Cambiar a encriptación en lado cliente",
-"Change encryption password to login password" => "Cambie la clave de cifrado para ingresar su contraseña",
+"switched to client side encryption" => "Cambiar a cifrado del lado del cliente",
+"Change encryption password to login password" => "Cambie la clave de cifrado para su contraseña de inicio de sesión",
"Please check your passwords and try again." => "Por favor revise su contraseña e intentelo de nuevo.",
-"Choose encryption mode:" => "Elegir el modo de encriptado:",
+"Could not change your file encryption password to your login password" => "No se pudo cambiar la contraseña de cifrado de archivos de su contraseña de inicio de sesión",
+"Choose encryption mode:" => "Elegir el modo de cifrado:",
+"Client side encryption (most secure but makes it impossible to access your data from the web interface)" => "Cifrado del lado del Cliente ( es el más seguro, pero hace que sea imposible acceder a sus datos desde la interfaz web)",
+"Server side encryption (allows you to access your files from the web interface and the desktop client)" => "Cifrado del lado del Servidor (le permite acceder a sus archivos desde la interfaz web y el cliente de escritorio)",
+"None (no encryption at all)" => "Ninguno (ningún cifrado en absoluto)",
+"Important: Once you selected an encryption mode there is no way to change it back" => "Importante: Una vez que haya seleccionado un modo de cifrado no existe forma de cambiarlo de nuevo",
+"User specific (let the user decide)" => "Específico del usuario (dejar que el usuario decida)",
"Encryption" => "Cifrado",
"Exclude the following file types from encryption" => "Excluir del cifrado los siguientes tipos de archivo",
"None" => "Ninguno"
diff --git a/apps/files_encryption/l10n/es_AR.php b/apps/files_encryption/l10n/es_AR.php
index 31898f50fde..5cf0b8e4adc 100644
--- a/apps/files_encryption/l10n/es_AR.php
+++ b/apps/files_encryption/l10n/es_AR.php
@@ -1,4 +1,15 @@
<?php $TRANSLATIONS = array(
+"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "Por favor, cambiá uu cliente de ownCloud y cambiá tu clave de encriptado para completar la conversión.",
+"switched to client side encryption" => "Cambiado a encriptación por parte del cliente",
+"Change encryption password to login password" => "Cambiá la clave de encriptado para tu contraseña de inicio de sesión",
+"Please check your passwords and try again." => "Por favor, revisá tu contraseña e intentalo de nuevo.",
+"Could not change your file encryption password to your login password" => "No se pudo cambiar la contraseña de encriptación de archivos de tu contraseña de inicio de sesión",
+"Choose encryption mode:" => "Elegir el modo de encriptación:",
+"Client side encryption (most secure but makes it impossible to access your data from the web interface)" => "Encriptación por parte del cliente (es el modo más seguro, pero hace que sea imposible acceder a tus datos desde la interfaz web)",
+"Server side encryption (allows you to access your files from the web interface and the desktop client)" => "Encriptación por parte del servidor (te permite acceder a tus archivos desde la interfaz web y desde el cliente de escritorio)",
+"None (no encryption at all)" => "Ninguno (ninguna encriptación en absoluto)",
+"Important: Once you selected an encryption mode there is no way to change it back" => "Importante: Una vez que haya seleccionado un modo de encriptación, no existe forma de cambiarlo nuevamente",
+"User specific (let the user decide)" => "Específico por usuario (deja que el usuario decida)",
"Encryption" => "Encriptación",
"Exclude the following file types from encryption" => "Exceptuar de la encriptación los siguientes tipos de archivo",
"None" => "Ninguno"
diff --git a/apps/files_encryption/l10n/ko.php b/apps/files_encryption/l10n/ko.php
index 68d60c1ae30..901c41e12ec 100644
--- a/apps/files_encryption/l10n/ko.php
+++ b/apps/files_encryption/l10n/ko.php
@@ -1,4 +1,15 @@
<?php $TRANSLATIONS = array(
+"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "ownCloudë¡œ 전환한 ë‹¤ìŒ ì•”í˜¸í™”ì— ì‚¬ìš©í•  암호를 변경하면 ë³€í™˜ì´ ì™„ë£Œë©ë‹ˆë‹¤.",
+"switched to client side encryption" => "í´ë¼ì´ì–¸íŠ¸ 암호화로 변경ë¨",
+"Change encryption password to login password" => "암호화 암호를 ë¡œê·¸ì¸ ì•”í˜¸ë¡œ 변경",
+"Please check your passwords and try again." => "암호를 확ì¸í•œ ë‹¤ìŒ ë‹¤ì‹œ ì‹œë„하십시오.",
+"Could not change your file encryption password to your login password" => "암호화 암호를 ë¡œê·¸ì¸ ì•”í˜¸ë¡œ 변경할 수 없습니다",
+"Choose encryption mode:" => "암호화 모드 ì„ íƒ:",
+"Client side encryption (most secure but makes it impossible to access your data from the web interface)" => "í´ë¼ì´ì–¸íŠ¸ 암호화 (안전하지만 웹ì—ì„œ ë°ì´í„°ì— 접근할 수 ì—†ìŒ)",
+"Server side encryption (allows you to access your files from the web interface and the desktop client)" => "서버 암호화 (웹 ë° ë°ìŠ¤í¬í†± í´ë¼ì´ì–¸íŠ¸ì—ì„œ ë°ì´í„°ì— 접근할 수 있ìŒ)",
+"None (no encryption at all)" => "ì—†ìŒ (암호화하지 ì•ŠìŒ)",
+"Important: Once you selected an encryption mode there is no way to change it back" => "알림: 암호화 모드를 ì„ íƒí•˜ë©´ 다른 것으로 변경할 수 없습니다",
+"User specific (let the user decide)" => "ì‚¬ìš©ìž ì§€ì • (사용ìžë³„ 설정)",
"Encryption" => "암호화",
"Exclude the following file types from encryption" => "ë‹¤ìŒ íŒŒì¼ í˜•ì‹ì€ 암호화하지 ì•ŠìŒ",
"None" => "ì—†ìŒ"
diff --git a/apps/files_encryption/l10n/pt_BR.php b/apps/files_encryption/l10n/pt_BR.php
index 086d073cf5c..8bd6492a8f7 100644
--- a/apps/files_encryption/l10n/pt_BR.php
+++ b/apps/files_encryption/l10n/pt_BR.php
@@ -1,4 +1,15 @@
<?php $TRANSLATIONS = array(
+"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "Por favor, vá ao seu cliente ownCloud e mude sua criptografia de senha para completar a conversão.",
+"switched to client side encryption" => "alterado para criptografia por parte do cliente",
+"Change encryption password to login password" => "Mudar senha de criptografia para senha de login",
+"Please check your passwords and try again." => "Por favor, verifique suas senhas e tente novamente.",
+"Could not change your file encryption password to your login password" => "Não foi possível mudar sua senha de criptografia de arquivos para sua senha de login",
+"Choose encryption mode:" => "Escolha o modo de criptografia:",
+"Client side encryption (most secure but makes it impossible to access your data from the web interface)" => "Criptografia por parte do cliente (mais segura, mas torna impossível acessar seus dados a partir da interface web)",
+"Server side encryption (allows you to access your files from the web interface and the desktop client)" => "Criptografia por parte do servidor (permite que você acesse seus arquivos da interface web e do cliente desktop)",
+"None (no encryption at all)" => "Nenhuma (sem qualquer criptografia)",
+"Important: Once you selected an encryption mode there is no way to change it back" => "Importante: Uma vez que tiver escolhido um modo de criptografia, não há um meio de voltar atrás",
+"User specific (let the user decide)" => "Específico por usuário (deixa o usuário decidir)",
"Encryption" => "Criptografia",
"Exclude the following file types from encryption" => "Excluir os seguintes tipos de arquivo da criptografia",
"None" => "Nenhuma"
diff --git a/apps/files_encryption/l10n/ru_RU.php b/apps/files_encryption/l10n/ru_RU.php
index 4321fb8a8a3..1149ac64f3e 100644
--- a/apps/files_encryption/l10n/ru_RU.php
+++ b/apps/files_encryption/l10n/ru_RU.php
@@ -1,4 +1,13 @@
<?php $TRANSLATIONS = array(
+"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "ПожалуйÑта, переключитеÑÑŒ на ownCloud-клиент и измените Ваш пароль ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ð²ÐµÑ€Ñ‚Ð°Ñ†Ð¸Ð¸.",
+"switched to client side encryption" => "переключено на шифрование на клиентÑкой Ñтороне",
+"Please check your passwords and try again." => "ПожалуйÑта, проверьте Ваш пароль и попробуйте Ñнова",
+"Choose encryption mode:" => "Выберите ÑпоÑоб шифрованиÑ:",
+"Client side encryption (most secure but makes it impossible to access your data from the web interface)" => "Шифрование на Ñтороне клиента (наиболее безопаÑно, но делает невозможным получение доÑтупа к Вашим данным по вÑб-интерфейÑу)",
+"Server side encryption (allows you to access your files from the web interface and the desktop client)" => "Шифрование на Ñтороне Ñервера (позволÑет Вам получить доÑтуп к Вашим файлам по вÑб-интерфейÑу и деÑктопному клиенту)",
+"None (no encryption at all)" => "Ðет (шифрование полноÑтью отÑутÑтвует)",
+"Important: Once you selected an encryption mode there is no way to change it back" => "Важно: Ðевозможно будет изменить выбранный ÑпоÑоб шифрованиÑ",
+"User specific (let the user decide)" => "Специфика Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (позволено решить пользователю)",
"Encryption" => "Шифрование",
"Exclude the following file types from encryption" => "ИÑключите Ñледующие типы файлов из шифрованиÑ",
"None" => "Ðи один"
diff --git a/apps/files_external/ajax/addRootCertificate.php b/apps/files_external/ajax/addRootCertificate.php
index be60b415e1b..2f67e801b2c 100644
--- a/apps/files_external/ajax/addRootCertificate.php
+++ b/apps/files_external/ajax/addRootCertificate.php
@@ -12,8 +12,10 @@ $data = fread($fh, filesize($_FILES['rootcert_import']['tmp_name']));
fclose($fh);
$filename = $_FILES['rootcert_import']['name'];
-$view = new \OC_FilesystemView('/'.\OCP\User::getUser().'/files_external/uploads');
-if ( ! $view->file_exists('')) $view->mkdir('');
+$view = new \OC\Files\View('/'.\OCP\User::getUser().'/files_external/uploads');
+if (!$view->file_exists('')){
+ $view->mkdir('');
+}
$isValid = openssl_pkey_get_public($data);
diff --git a/apps/files_external/appinfo/app.php b/apps/files_external/appinfo/app.php
index 837d35c9c63..c58cfcd0f5e 100644
--- a/apps/files_external/appinfo/app.php
+++ b/apps/files_external/appinfo/app.php
@@ -6,14 +6,14 @@
* See the COPYING-README file.
*/
-OC::$CLASSPATH['OC_FileStorage_StreamWrapper']='apps/files_external/lib/streamwrapper.php';
-OC::$CLASSPATH['OC_Filestorage_FTP']='apps/files_external/lib/ftp.php';
-OC::$CLASSPATH['OC_Filestorage_DAV']='apps/files_external/lib/webdav.php';
-OC::$CLASSPATH['OC_Filestorage_Google']='apps/files_external/lib/google.php';
-OC::$CLASSPATH['OC_Filestorage_SWIFT']='apps/files_external/lib/swift.php';
-OC::$CLASSPATH['OC_Filestorage_SMB']='apps/files_external/lib/smb.php';
-OC::$CLASSPATH['OC_Filestorage_AmazonS3']='apps/files_external/lib/amazons3.php';
-OC::$CLASSPATH['OC_Filestorage_Dropbox']='apps/files_external/lib/dropbox.php';
+OC::$CLASSPATH['OC\Files\Storage\StreamWrapper']='apps/files_external/lib/streamwrapper.php';
+OC::$CLASSPATH['OC\Files\Storage\FTP']='apps/files_external/lib/ftp.php';
+OC::$CLASSPATH['OC\Files\Storage\DAV']='apps/files_external/lib/webdav.php';
+OC::$CLASSPATH['OC\Files\Storage\Google']='apps/files_external/lib/google.php';
+OC::$CLASSPATH['OC\Files\Storage\SWIFT']='apps/files_external/lib/swift.php';
+OC::$CLASSPATH['OC\Files\Storage\SMB']='apps/files_external/lib/smb.php';
+OC::$CLASSPATH['OC\Files\Storage\AmazonS3']='apps/files_external/lib/amazons3.php';
+OC::$CLASSPATH['OC\Files\Storage\Dropbox']='apps/files_external/lib/dropbox.php';
OC::$CLASSPATH['OC_Mount_Config']='apps/files_external/lib/config.php';
OCP\App::registerAdmin('files_external', 'settings');
diff --git a/apps/files_external/appinfo/info.xml b/apps/files_external/appinfo/info.xml
index 3da1913c5fc..2c04216a9fb 100644
--- a/apps/files_external/appinfo/info.xml
+++ b/apps/files_external/appinfo/info.xml
@@ -5,7 +5,7 @@
<description>Mount external storage sources</description>
<licence>AGPL</licence>
<author>Robin Appelman, Michael Gapczynski</author>
- <require>4.9</require>
+ <require>4.91</require>
<shipped>true</shipped>
<types>
<filesystem/>
diff --git a/apps/files_external/js/dropbox.js b/apps/files_external/js/dropbox.js
index 930d786c543..cd3c957e0a8 100644
--- a/apps/files_external/js/dropbox.js
+++ b/apps/files_external/js/dropbox.js
@@ -1,6 +1,6 @@
$(document).ready(function() {
- $('#externalStorage tbody tr.OC_Filestorage_Dropbox').each(function() {
+ $('#externalStorage tbody tr.\\\\OC\\\\Files\\\\Storage\\\\Dropbox').each(function() {
var configured = $(this).find('[data-parameter="configured"]');
if ($(configured).val() == 'true') {
$(this).find('.configuration input').attr('disabled', 'disabled');
@@ -38,7 +38,7 @@ $(document).ready(function() {
$('#externalStorage tbody').on('keyup', 'tr input', function() {
var tr = $(this).parent().parent();
- if ($(tr).hasClass('OC_Filestorage_Dropbox') && $(tr).find('[data-parameter="configured"]').val() != 'true') {
+ if ($(tr).hasClass('\\\\OC\\\\Files\\\\Storage\\\\Dropbox') && $(tr).find('[data-parameter="configured"]').val() != 'true') {
var config = $(tr).find('.configuration');
if ($(tr).find('.mountPoint input').val() != '' && $(config).find('[data-parameter="app_key"]').val() != '' && $(config).find('[data-parameter="app_secret"]').val() != '') {
if ($(tr).find('.dropbox').length == 0) {
diff --git a/apps/files_external/js/google.js b/apps/files_external/js/google.js
index d26dc7f0014..9b7f9514f12 100644
--- a/apps/files_external/js/google.js
+++ b/apps/files_external/js/google.js
@@ -1,6 +1,6 @@
$(document).ready(function() {
- $('#externalStorage tbody tr.OC_Filestorage_Google').each(function() {
+ $('#externalStorage tbody tr.\\\\OC\\\\Files\\\\Storage\\\\Google').each(function() {
var configured = $(this).find('[data-parameter="configured"]');
if ($(configured).val() == 'true') {
$(this).find('.configuration')
@@ -34,7 +34,7 @@ $(document).ready(function() {
});
$('#externalStorage tbody').on('change', 'tr', function() {
- if ($(this).hasClass('OC_Filestorage_Google') && $(this).find('[data-parameter="configured"]').val() != 'true') {
+ if ($(this).hasClass('\\\\OC\\\\Files\\\\Storage\\\\Google') && $(this).find('[data-parameter="configured"]').val() != 'true') {
if ($(this).find('.mountPoint input').val() != '') {
if ($(this).find('.google').length == 0) {
$(this).find('.configuration').append('<a class="button google">'+t('files_external', 'Grant access')+'</a>');
@@ -45,7 +45,7 @@ $(document).ready(function() {
$('#externalStorage tbody').on('keyup', 'tr .mountPoint input', function() {
var tr = $(this).parent().parent();
- if ($(tr).hasClass('OC_Filestorage_Google') && $(tr).find('[data-parameter="configured"]').val() != 'true' && $(tr).find('.google').length > 0) {
+ if ($(tr).hasClass('\\\\OC\\\\Files\\\\Storage\\\\Google') && $(tr).find('[data-parameter="configured"]').val() != 'true' && $(tr).find('.google').length > 0) {
if ($(this).val() != '') {
$(tr).find('.google').show();
} else {
diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js
index 75604ca4530..172ef097fbf 100644
--- a/apps/files_external/js/settings.js
+++ b/apps/files_external/js/settings.js
@@ -100,7 +100,7 @@ $(document).ready(function() {
td.append('<input type="text" data-parameter="'+parameter+'" placeholder="'+placeholder+'" />');
}
});
- if (parameters['custom'] && $('#externalStorage tbody tr.'+backendClass).length == 1) {
+ if (parameters['custom'] && $('#externalStorage tbody tr.'+backendClass.replace(/\\/g, '\\\\')).length == 1) {
OC.addScript('files_external', parameters['custom']);
}
return false;
diff --git a/apps/files_external/l10n/ko.php b/apps/files_external/l10n/ko.php
index cb691cf5e3d..47b75f74b86 100644
--- a/apps/files_external/l10n/ko.php
+++ b/apps/files_external/l10n/ko.php
@@ -5,8 +5,8 @@
"Fill out all required fields" => "모든 필수 í•­ëª©ì„ ìž…ë ¥í•˜ì‹­ì‹œì˜¤",
"Please provide a valid Dropbox app key and secret." => "올바른 Dropbox 앱 키와 암호를 입력하십시오.",
"Error configuring Google Drive storage" => "Google ë“œë¼ì´ë¸Œ 저장소 설정 오류",
-"<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>\"smbclient\"ê°€ 설치ë˜ì§€ 않았습니다. 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> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>경고:</b> \"smbclient\"ê°€ 설치ë˜ì§€ 않았습니다. 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 공유를 마운트할 수 없습니다. 시스템 관리ìžì—게 설치를 요청하십시오.",
"External Storage" => "외부 저장소",
"Mount point" => "마운트 지ì ",
"Backend" => "백엔드",
diff --git a/apps/files_external/l10n/pt_BR.php b/apps/files_external/l10n/pt_BR.php
index 26e927a423e..85393954886 100644
--- a/apps/files_external/l10n/pt_BR.php
+++ b/apps/files_external/l10n/pt_BR.php
@@ -5,6 +5,8 @@
"Fill out all required fields" => "Preencha todos os campos obrigatórios",
"Please provide a valid Dropbox app key and secret." => "Por favor forneça um app key e secret válido do Dropbox",
"Error configuring Google Drive storage" => "Erro ao configurar armazenamento do 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>Aviso:</b> \"smbclient\" não está instalado. Não será possível montar compartilhamentos de CIFS/SMB. Por favor, peça ao seu administrador do sistema para instalá-lo.",
+"<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>Aviso:</b> O suporte para FTP do PHP não está ativado ou instalado. Não será possível montar compartilhamentos FTP. Por favor, peça ao seu administrador do sistema para instalá-lo.",
"External Storage" => "Armazenamento Externo",
"Mount point" => "Ponto de montagem",
"Backend" => "Backend",
diff --git a/apps/files_external/l10n/sk_SK.php b/apps/files_external/l10n/sk_SK.php
index 04d5e3c7ee4..0b6878a5427 100644
--- a/apps/files_external/l10n/sk_SK.php
+++ b/apps/files_external/l10n/sk_SK.php
@@ -5,6 +5,8 @@
"Fill out all required fields" => "Vyplňte všetky vyžadované kolónky",
"Please provide a valid Dropbox app key and secret." => "Zadajte platný kÄ¾ÃºÄ aplikácie a heslo Dropbox",
"Error configuring Google Drive storage" => "Chyba pri konfigurácii úložiska 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>Upozornenie:</b> \"smbclient\" nie je nainštalovaný. Nie je možné pripojenie oddielov CIFS/SMB. Požiadajte administrátora systému, nech ho nainštaluje.",
+"<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>Upozornenie:</b> Podpora FTP v PHP nie je povolená alebo nainštalovaná. Nie je možné pripojenie oddielov FTP. Požiadajte administrátora systému, nech ho nainštaluje.",
"External Storage" => "Externé úložisko",
"Mount point" => "Prípojný bod",
"Backend" => "Backend",
diff --git a/apps/files_external/lib/amazons3.php b/apps/files_external/lib/amazons3.php
index e5ef4eb097c..494885a1dd3 100644
--- a/apps/files_external/lib/amazons3.php
+++ b/apps/files_external/lib/amazons3.php
@@ -1,39 +1,43 @@
<?php
/**
-* ownCloud
-*
-* @author Michael Gapczynski
-* @copyright 2012 Michael Gapczynski mtgap@owncloud.com
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
-* License as published by the Free Software Foundation; either
-* version 3 of the License, or any later version.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
-*
-* You should have received a copy of the GNU Affero General Public
-* License along with this library. If not, see <http://www.gnu.org/licenses/>.
-*/
+ * ownCloud
+ *
+ * @author Michael Gapczynski
+ * @copyright 2012 Michael Gapczynski mtgap@owncloud.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+namespace OC\Files\Storage;
require_once 'aws-sdk/sdk.class.php';
-class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common {
+class AmazonS3 extends \OC\Files\Storage\Common {
private $s3;
private $bucket;
private $objects = array();
+ private $id;
private static $tempFiles = array();
// TODO options: storage class, encryption server side, encrypt before upload?
public function __construct($params) {
- $this->s3 = new AmazonS3(array('key' => $params['key'], 'secret' => $params['secret']));
+ $this->id = 'amazon::' . $params['key'] . md5($params['secret']);
+ $this->s3 = new \AmazonS3(array('key' => $params['key'], 'secret' => $params['secret']));
$this->bucket = $params['bucket'];
}
@@ -47,7 +51,7 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common {
return $response;
// This object could be a folder, a '/' must be at the end of the path
} else if (substr($path, -1) != '/') {
- $response = $this->s3->get_object_metadata($this->bucket, $path.'/');
+ $response = $this->s3->get_object_metadata($this->bucket, $path . '/');
if ($response) {
$this->objects[$path] = $response;
return $response;
@@ -57,6 +61,10 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common {
return false;
}
+ public function getId() {
+ return $this->id;
+ }
+
public function mkdir($path) {
// Folders in Amazon S3 are 0 byte objects with a '/' at the end of the name
if (substr($path, -1) != '/') {
@@ -96,8 +104,8 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common {
foreach ($response->body->CommonPrefixes as $object) {
$files[] = basename($object->Prefix);
}
- OC_FakeDirStream::$dirs['amazons3'.$path] = $files;
- return opendir('fakedir://amazons3'.$path);
+ \OC\Files\Stream\Dir::register('amazons3' . $path, $files);
+ return opendir('fakedir://amazons3' . $path);
}
return false;
}
@@ -107,15 +115,10 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common {
$stat['size'] = $this->s3->get_bucket_filesize($this->bucket);
$stat['atime'] = time();
$stat['mtime'] = $stat['atime'];
- $stat['ctime'] = $stat['atime'];
- } else {
- $object = $this->getObject($path);
- if ($object) {
- $stat['size'] = $object['Size'];
- $stat['atime'] = time();
- $stat['mtime'] = strtotime($object['LastModified']);
- $stat['ctime'] = $stat['mtime'];
- }
+ } else if ($object = $this->getObject($path)) {
+ $stat['size'] = $object['Size'];
+ $stat['atime'] = time();
+ $stat['mtime'] = strtotime($object['LastModified']);
}
if (isset($stat)) {
return $stat;
@@ -166,7 +169,7 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common {
switch ($mode) {
case 'r':
case 'rb':
- $tmpFile = OC_Helper::tmpFile();
+ $tmpFile = \OC_Helper::tmpFile();
$handle = fopen($tmpFile, 'w');
$response = $this->s3->get_object($this->bucket, $path, array('fileDownload' => $handle));
if ($response->isOK()) {
@@ -190,14 +193,14 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common {
} else {
$ext = '';
}
- $tmpFile = OC_Helper::tmpFile($ext);
- OC_CloseStreamWrapper::$callBacks[$tmpFile] = array($this, 'writeBack');
+ $tmpFile = \OC_Helper::tmpFile($ext);
+ \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
if ($this->file_exists($path)) {
$source = $this->fopen($path, 'r');
file_put_contents($tmpFile, $source);
}
self::$tempFiles[$tmpFile] = $path;
- return fopen('close://'.$tmpFile, $mode);
+ return fopen('close://' . $tmpFile, $mode);
}
return false;
}
@@ -206,8 +209,8 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common {
if (isset(self::$tempFiles[$tmpFile])) {
$handle = fopen($tmpFile, 'r');
$response = $this->s3->create_object($this->bucket,
- self::$tempFiles[$tmpFile],
- array('fileUpload' => $handle));
+ self::$tempFiles[$tmpFile],
+ array('fileUpload' => $handle));
if ($response->isOK()) {
unlink($tmpFile);
}
diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php
index fd3dc2ca0d0..6b0df21461b 100755
--- a/apps/files_external/lib/config.php
+++ b/apps/files_external/lib/config.php
@@ -38,20 +38,20 @@ class OC_Mount_Config {
* @return array
*/
public static function getBackends() {
-
- $backends['OC_Filestorage_Local']=array(
+
+ $backends['\OC\Files\Storage\Local']=array(
'backend' => 'Local',
'configuration' => array(
'datadir' => 'Location'));
- $backends['OC_Filestorage_AmazonS3']=array(
+ $backends['\OC\Files\Storage\AmazonS3']=array(
'backend' => 'Amazon S3',
'configuration' => array(
'key' => 'Key',
'secret' => '*Secret',
'bucket' => 'Bucket'));
- $backends['OC_Filestorage_Dropbox']=array(
+ $backends['\OC\Files\Storage\Dropbox']=array(
'backend' => 'Dropbox',
'configuration' => array(
'configured' => '#configured',
@@ -61,7 +61,7 @@ class OC_Mount_Config {
'token_secret' => '#token_secret'),
'custom' => 'dropbox');
- if(OC_Mount_Config::checkphpftp()) $backends['OC_Filestorage_FTP']=array(
+ if(OC_Mount_Config::checkphpftp()) $backends['\OC\Files\Storage\FTP']=array(
'backend' => 'FTP',
'configuration' => array(
'host' => 'URL',
@@ -70,15 +70,15 @@ class OC_Mount_Config {
'root' => '&Root',
'secure' => '!Secure ftps://'));
- $backends['OC_Filestorage_Google']=array(
+ $backends['\OC\Files\Storage\Google']=array(
'backend' => 'Google Drive',
'configuration' => array(
'configured' => '#configured',
'token' => '#token',
'token_secret' => '#token secret'),
'custom' => 'google');
-
- $backends['OC_Filestorage_SWIFT']=array(
+
+ $backends['\OC\Files\Storage\SWIFT']=array(
'backend' => 'OpenStack Swift',
'configuration' => array(
'host' => 'URL',
@@ -86,8 +86,8 @@ class OC_Mount_Config {
'token' => '*Token',
'root' => '&Root',
'secure' => '!Secure ftps://'));
-
- if(OC_Mount_Config::checksmbclient()) $backends['OC_Filestorage_SMB']=array(
+
+ if(OC_Mount_Config::checksmbclient()) $backends['\OC\Files\Storage\SMB']=array(
'backend' => 'SMB / CIFS',
'configuration' => array(
'host' => 'URL',
@@ -95,8 +95,8 @@ class OC_Mount_Config {
'password' => '*Password',
'share' => 'Share',
'root' => '&Root'));
-
- $backends['OC_Filestorage_DAV']=array(
+
+ $backends['\OC\Files\Storage\DAV']=array(
'backend' => 'ownCloud / WebDAV',
'configuration' => array(
'host' => 'URL',
@@ -120,6 +120,10 @@ class OC_Mount_Config {
if (isset($mountPoints[self::MOUNT_TYPE_GROUP])) {
foreach ($mountPoints[self::MOUNT_TYPE_GROUP] as $group => $mounts) {
foreach ($mounts as $mountPoint => $mount) {
+ // Update old classes to new namespace
+ if (strpos($mount['class'], 'OC_Filestorage_') !== false) {
+ $mount['class'] = '\OC\Files\Storage\\'.substr($mount['class'], 15);
+ }
// Remove '/$user/files/' from mount point
$mountPoint = substr($mountPoint, 13);
// Merge the mount point into the current mount points
@@ -139,6 +143,10 @@ class OC_Mount_Config {
if (isset($mountPoints[self::MOUNT_TYPE_USER])) {
foreach ($mountPoints[self::MOUNT_TYPE_USER] as $user => $mounts) {
foreach ($mounts as $mountPoint => $mount) {
+ // Update old classes to new namespace
+ if (strpos($mount['class'], 'OC_Filestorage_') !== false) {
+ $mount['class'] = '\OC\Files\Storage\\'.substr($mount['class'], 15);
+ }
// Remove '/$user/files/' from mount point
$mountPoint = substr($mountPoint, 13);
// Merge the mount point into the current mount points
@@ -169,6 +177,10 @@ class OC_Mount_Config {
$personal = array();
if (isset($mountPoints[self::MOUNT_TYPE_USER][$uid])) {
foreach ($mountPoints[self::MOUNT_TYPE_USER][$uid] as $mountPoint => $mount) {
+ // Update old classes to new namespace
+ if (strpos($mount['class'], 'OC_Filestorage_') !== false) {
+ $mount['class'] = '\OC\Files\Storage\\'.substr($mount['class'], 15);
+ }
// Remove '/uid/files/' from mount point
$personal[substr($mountPoint, strlen($uid) + 8)] = array('class' => $mount['class'],
'backend' => $backends[$mount['class']]['backend'],
@@ -179,22 +191,6 @@ class OC_Mount_Config {
}
/**
- * Add directory for mount point to the filesystem
- * @param OC_Fileview instance $view
- * @param string path to mount point
- */
- private static function addMountPointDirectory($view, $path) {
- $dir = '';
- foreach ( explode('/', $path) as $pathPart) {
- $dir = $dir.'/'.$pathPart;
- if ( !$view->file_exists($dir)) {
- $view->mkdir($dir);
- }
- }
- }
-
-
- /**
* Add a mount point to the filesystem
* @param string Mount point
* @param string Backend class
@@ -213,36 +209,11 @@ class OC_Mount_Config {
if ($isPersonal) {
// Verify that the mount point applies for the current user
// Prevent non-admin users from mounting local storage
- if ($applicable != OCP\User::getUser() || $class == 'OC_Filestorage_Local') {
+ if ($applicable != OCP\User::getUser() || $class == '\OC\Files\Storage\Local') {
return false;
}
- $view = new OC_FilesystemView('/'.OCP\User::getUser().'/files');
- self::addMountPointDirectory($view, ltrim($mountPoint, '/'));
$mountPoint = '/'.$applicable.'/files/'.ltrim($mountPoint, '/');
} else {
- $view = new OC_FilesystemView('/');
- switch ($mountType) {
- case 'user':
- if ($applicable == "all") {
- $users = OCP\User::getUsers();
- foreach ( $users as $user ) {
- $path = $user.'/files/'.ltrim($mountPoint, '/');
- self::addMountPointDirectory($view, $path);
- }
- } else {
- $path = $applicable.'/files/'.ltrim($mountPoint, '/');
- self::addMountPointDirectory($view, $path);
- }
- break;
- case 'group' :
- $groupMembers = OC_Group::usersInGroups(array($applicable));
- foreach ( $groupMembers as $user ) {
- $path = $user.'/files/'.ltrim($mountPoint, '/');
- self::addMountPointDirectory($view, $path);
- }
- break;
- }
-
$mountPoint = '/$user/files/'.ltrim($mountPoint, '/');
}
$mount = array($applicable => array($mountPoint => array('class' => $class, 'options' => $classOptions)));
diff --git a/apps/files_external/lib/dropbox.php b/apps/files_external/lib/dropbox.php
index 33ca14cab15..11644e4a2c8 100755
--- a/apps/files_external/lib/dropbox.php
+++ b/apps/files_external/lib/dropbox.php
@@ -20,12 +20,15 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
+namespace OC\Files\Storage;
+
require_once 'Dropbox/autoload.php';
-class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
+class Dropbox extends \OC\Files\Storage\Common {
private $dropbox;
private $root;
+ private $id;
private $metaData = array();
private static $tempFiles = array();
@@ -37,13 +40,14 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
&& isset($params['token'])
&& isset($params['token_secret'])
) {
+ $this->id = 'dropbox::'.$params['app_key'] . $params['token']. '/' . $params['root'];
$this->root=isset($params['root'])?$params['root']:'';
- $oauth = new Dropbox_OAuth_Curl($params['app_key'], $params['app_secret']);
+ $oauth = new \Dropbox_OAuth_Curl($params['app_key'], $params['app_secret']);
$oauth->setToken($params['token'], $params['token_secret']);
- $this->dropbox = new Dropbox_API($oauth, 'dropbox');
+ $this->dropbox = new \Dropbox_API($oauth, 'dropbox');
$this->mkdir('');
} else {
- throw new Exception('Creating OC_Filestorage_Dropbox storage failed');
+ throw new \Exception('Creating \OC\Files\Storage\Dropbox storage failed');
}
}
@@ -55,8 +59,8 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
if ($list) {
try {
$response = $this->dropbox->getMetaData($path);
- } catch (Exception $exception) {
- OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ } catch (\Exception $exception) {
+ \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
return false;
}
if ($response && isset($response['contents'])) {
@@ -76,21 +80,25 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
$response = $this->dropbox->getMetaData($path, 'false');
$this->metaData[$path] = $response;
return $response;
- } catch (Exception $exception) {
- OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ } catch (\Exception $exception) {
+ \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
return false;
}
}
}
}
+ public function getId(){
+ return $this->id;
+ }
+
public function mkdir($path) {
$path = $this->root.$path;
try {
$this->dropbox->createFolder($path);
return true;
- } catch (Exception $exception) {
- OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ } catch (\Exception $exception) {
+ \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
return false;
}
}
@@ -106,7 +114,7 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
foreach ($contents as $file) {
$files[] = basename($file['path']);
}
- OC_FakeDirStream::$dirs['dropbox'.$path] = $files;
+ \OC\Files\Stream\Dir::register('dropbox'.$path, $files);
return opendir('fakedir://dropbox'.$path);
}
return false;
@@ -118,7 +126,6 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
$stat['size'] = $metaData['bytes'];
$stat['atime'] = time();
$stat['mtime'] = (isset($metaData['modified'])) ? strtotime($metaData['modified']) : time();
- $stat['ctime'] = $stat['mtime'];
return $stat;
}
return false;
@@ -163,8 +170,8 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
try {
$this->dropbox->delete($path);
return true;
- } catch (Exception $exception) {
- OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ } catch (\Exception $exception) {
+ \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
return false;
}
}
@@ -175,8 +182,8 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
try {
$this->dropbox->move($path1, $path2);
return true;
- } catch (Exception $exception) {
- OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ } catch (\Exception $exception) {
+ \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
return false;
}
}
@@ -187,8 +194,8 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
try {
$this->dropbox->copy($path1, $path2);
return true;
- } catch (Exception $exception) {
- OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ } catch (\Exception $exception) {
+ \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
return false;
}
}
@@ -198,13 +205,13 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
switch ($mode) {
case 'r':
case 'rb':
- $tmpFile = OC_Helper::tmpFile();
+ $tmpFile = \OC_Helper::tmpFile();
try {
$data = $this->dropbox->getFile($path);
file_put_contents($tmpFile, $data);
return fopen($tmpFile, 'r');
- } catch (Exception $exception) {
- OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ } catch (\Exception $exception) {
+ \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
return false;
}
case 'w':
@@ -224,8 +231,8 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
} else {
$ext = '';
}
- $tmpFile = OC_Helper::tmpFile($ext);
- OC_CloseStreamWrapper::$callBacks[$tmpFile] = array($this, 'writeBack');
+ $tmpFile = \OC_Helper::tmpFile($ext);
+ \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
if ($this->file_exists($path)) {
$source = $this->fopen($path, 'r');
file_put_contents($tmpFile, $source);
@@ -242,8 +249,8 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
try {
$this->dropbox->putFile(self::$tempFiles[$tmpFile], $handle);
unlink($tmpFile);
- } catch (Exception $exception) {
- OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ } catch (\Exception $exception) {
+ \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
}
}
}
@@ -264,8 +271,8 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
try {
$info = $this->dropbox->getAccountInfo();
return $info['quota_info']['quota'] - $info['quota_info']['normal'];
- } catch (Exception $exception) {
- OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ } catch (\Exception $exception) {
+ \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
return false;
}
}
diff --git a/apps/files_external/lib/ftp.php b/apps/files_external/lib/ftp.php
index e796ae446bf..9a27b63323a 100644
--- a/apps/files_external/lib/ftp.php
+++ b/apps/files_external/lib/ftp.php
@@ -6,7 +6,9 @@
* See the COPYING-README file.
*/
-class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{
+namespace OC\Files\Storage;
+
+class FTP extends \OC\Files\Storage\StreamWrapper{
private $password;
private $user;
private $host;
@@ -38,9 +40,13 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{
}
}
+ public function getId(){
+ return 'ftp::' . $this->user . '@' . $this->host . '/' . $this->root;
+ }
+
/**
* construct the ftp url
- * @param string path
+ * @param string $path
* @return string
*/
public function constructUrl($path) {
@@ -51,7 +57,8 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{
$url.='://'.$this->user.':'.$this->password.'@'.$this->host.$this->root.$path;
return $url;
}
- public function fopen($path, $mode) {
+ public function fopen($path,$mode) {
+ $this->init();
switch($mode) {
case 'r':
case 'rb':
@@ -61,7 +68,7 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{
case 'ab':
//these are supported by the wrapper
$context = stream_context_create(array('ftp' => array('overwrite' => true)));
- return fopen($this->constructUrl($path), $mode, false, $context);
+ return fopen($this->constructUrl($path),$mode, false,$context);
case 'r+':
case 'w+':
case 'wb+':
@@ -77,16 +84,18 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{
$ext='';
}
$tmpFile=OCP\Files::tmpFile($ext);
- OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this, 'writeBack');
+ \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
if ($this->file_exists($path)) {
$this->getFile($path, $tmpFile);
}
self::$tempFiles[$tmpFile]=$path;
- return fopen('close://'.$tmpFile, $mode);
+ return fopen('close://'.$tmpFile,$mode);
}
+ return false;
}
public function writeBack($tmpFile) {
+ $this->init();
if (isset(self::$tempFiles[$tmpFile])) {
$this->uploadFile($tmpFile, self::$tempFiles[$tmpFile]);
unlink($tmpFile);
diff --git a/apps/files_external/lib/google.php b/apps/files_external/lib/google.php
index c836a5a07c0..7396c7e3f27 100644
--- a/apps/files_external/lib/google.php
+++ b/apps/files_external/lib/google.php
@@ -20,14 +20,17 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
+namespace OC\Files\Storage;
+
require_once 'Google/common.inc.php';
-class OC_Filestorage_Google extends OC_Filestorage_Common {
+class Google extends \OC\Files\Storage\Common {
private $consumer;
private $oauth_token;
private $sig_method;
private $entries;
+ private $id;
private static $tempFiles = array();
@@ -38,12 +41,13 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
) {
$consumer_key = isset($params['consumer_key']) ? $params['consumer_key'] : 'anonymous';
$consumer_secret = isset($params['consumer_secret']) ? $params['consumer_secret'] : 'anonymous';
- $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
- $this->oauth_token = new OAuthToken($params['token'], $params['token_secret']);
- $this->sig_method = new OAuthSignatureMethod_HMAC_SHA1();
+ $this->id = 'google::' . $params['token'];
+ $this->consumer = new \OAuthConsumer($consumer_key, $consumer_secret);
+ $this->oauth_token = new \OAuthToken($params['token'], $params['token_secret']);
+ $this->sig_method = new \OAuthSignatureMethod_HMAC_SHA1();
$this->entries = array();
} else {
- throw new Exception('Creating OC_Filestorage_Google storage failed');
+ throw new \Exception('Creating \OC\Files\Storage\Google storage failed');
}
}
@@ -68,7 +72,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
$tempStr .= '&' . urlencode($key) . '=' . urlencode($value);
}
$uri = preg_replace('/&/', '?', $tempStr, 1);
- $request = OAuthRequest::from_consumer_and_token($this->consumer,
+ $request = \OAuthRequest::from_consumer_and_token($this->consumer,
$this->oauth_token,
$httpMethod,
$uri,
@@ -110,7 +114,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
}
if ($isDownload) {
- $tmpFile = OC_Helper::tmpFile();
+ $tmpFile = \OC_Helper::tmpFile();
$handle = fopen($tmpFile, 'w');
curl_setopt($curl, CURLOPT_FILE, $handle);
}
@@ -139,7 +143,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
private function getFeed($feedUri, $httpMethod, $postData = null) {
$result = $this->sendRequest($feedUri, $httpMethod, $postData);
if ($result) {
- $dom = new DOMDocument();
+ $dom = new \DOMDocument();
$dom->loadXML($result);
return $dom;
}
@@ -194,6 +198,9 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
}
}
+ public function getId(){
+ return $this->id;
+ }
public function mkdir($path) {
$collection = dirname($path);
@@ -266,7 +273,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
$this->entries[$name] = $entry;
}
}
- OC_FakeDirStream::$dirs['google'.$path] = $files;
+ \OC\Files\Stream\Dir::register('google'.$path, $files);
return opendir('fakedir://google'.$path);
}
@@ -287,7 +294,6 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
//$stat['atime'] = strtotime($entry->getElementsByTagNameNS('http://schemas.google.com/g/2005',
// 'lastViewed')->item(0)->nodeValue);
$stat['mtime'] = strtotime($entry->getElementsByTagName('updated')->item(0)->nodeValue);
- $stat['ctime'] = strtotime($entry->getElementsByTagName('published')->item(0)->nodeValue);
}
}
if (isset($stat)) {
@@ -443,8 +449,8 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
} else {
$ext = '';
}
- $tmpFile = OC_Helper::tmpFile($ext);
- OC_CloseStreamWrapper::$callBacks[$tmpFile] = array($this, 'writeBack');
+ $tmpFile = \OC_Helper::tmpFile($ext);
+ \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
if ($this->file_exists($path)) {
$source = $this->fopen($path, 'r');
file_put_contents($tmpFile, $source);
@@ -482,7 +488,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
}
if (isset($uploadUri) && $handle = fopen($path, 'r')) {
$uploadUri .= '?convert=false';
- $mimetype = OC_Helper::getMimeType($path);
+ $mimetype = \OC_Helper::getMimeType($path);
$size = filesize($path);
$headers = array('X-Upload-Content-Type: ' => $mimetype, 'X-Upload-Content-Length: ' => $size);
$postData = '<?xml version="1.0" encoding="UTF-8"?>';
@@ -590,4 +596,4 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
}
-} \ No newline at end of file
+}
diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php
index 071a9cd5f95..96778b0b2e1 100644
--- a/apps/files_external/lib/smb.php
+++ b/apps/files_external/lib/smb.php
@@ -6,9 +6,11 @@
* See the COPYING-README file.
*/
+namespace OC\Files\Storage;
+
require_once 'smb4php/smb.php';
-class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{
+class SMB extends \OC\Files\Storage\StreamWrapper{
private $password;
private $user;
private $host;
@@ -30,14 +32,13 @@ class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{
if ( ! $this->share || $this->share[0]!='/') {
$this->share='/'.$this->share;
}
- if (substr($this->share, -1, 1)=='/') {
- $this->share=substr($this->share, 0, -1);
+ if(substr($this->share, -1, 1)=='/') {
+ $this->share = substr($this->share,0,-1);
}
+ }
- //create the root folder if necesary
- if ( ! $this->is_dir('')) {
- $this->mkdir('');
- }
+ public function getId(){
+ return 'smb::' . $this->user . '@' . $this->host . '/' . $this->share . '/' . $this->root;
}
public function constructUrl($path) {
@@ -65,11 +66,13 @@ class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{
/**
* check if a file or folder has been updated since $time
+ * @param string $path
* @param int $time
* @return bool
*/
- public function hasUpdated($path, $time) {
- if ( ! $path and $this->root=='/') {
+ public function hasUpdated($path,$time) {
+ $this->init();
+ if(!$path and $this->root=='/') {
// mtime doesn't work for shares, but giving the nature of the backend,
// doing a full update is still just fast enough
return true;
diff --git a/apps/files_external/lib/streamwrapper.php b/apps/files_external/lib/streamwrapper.php
index a386e333995..7c3ddcf8a2c 100644
--- a/apps/files_external/lib/streamwrapper.php
+++ b/apps/files_external/lib/streamwrapper.php
@@ -6,16 +6,33 @@
* See the COPYING-README file.
*/
+namespace OC\Files\Storage;
+
+abstract class StreamWrapper extends \OC\Files\Storage\Common{
+ private $ready = false;
+
+ protected function init(){
+ if($this->ready){
+ return;
+ }
+ $this->ready = true;
+
+ //create the root folder if necesary
+ if(!$this->is_dir('')) {
+ $this->mkdir('');
+ }
+ }
-abstract class OC_FileStorage_StreamWrapper extends OC_Filestorage_Common{
abstract public function constructUrl($path);
public function mkdir($path) {
+ $this->init();
return mkdir($this->constructUrl($path));
}
public function rmdir($path) {
- if ($this->file_exists($path)) {
+ $this->init();
+ if($this->file_exists($path)) {
$succes = rmdir($this->constructUrl($path));
clearstatcache();
return $succes;
@@ -25,10 +42,12 @@ abstract class OC_FileStorage_StreamWrapper extends OC_Filestorage_Common{
}
public function opendir($path) {
+ $this->init();
return opendir($this->constructUrl($path));
}
public function filetype($path) {
+ $this->init();
return filetype($this->constructUrl($path));
}
@@ -41,46 +60,54 @@ abstract class OC_FileStorage_StreamWrapper extends OC_Filestorage_Common{
}
public function file_exists($path) {
+ $this->init();
return file_exists($this->constructUrl($path));
}
public function unlink($path) {
+ $this->init();
$succes = unlink($this->constructUrl($path));
clearstatcache();
return $succes;
}
- public function fopen($path, $mode) {
- return fopen($this->constructUrl($path), $mode);
+ public function fopen($path,$mode) {
+ $this->init();
+ return fopen($this->constructUrl($path),$mode);
}
public function free_space($path) {
return 0;
}
- public function touch($path, $mtime = null) {
- if (is_null($mtime)) {
- $fh = $this->fopen($path, 'a');
- fwrite($fh, '');
+ public function touch($path,$mtime=null) {
+ $this->init();
+ if(is_null($mtime)) {
+ $fh = $this->fopen($path,'a');
+ fwrite($fh,'');
fclose($fh);
} else {
return false;//not supported
}
}
- public function getFile($path, $target) {
- return copy($this->constructUrl($path), $target);
+ public function getFile($path,$target) {
+ $this->init();
+ return copy($this->constructUrl($path),$target);
}
- public function uploadFile($path, $target) {
- return copy($path, $this->constructUrl($target));
+ public function uploadFile($path,$target) {
+ $this->init();
+ return copy($path,$this->constructUrl($target));
}
- public function rename($path1, $path2) {
- return rename($this->constructUrl($path1), $this->constructUrl($path2));
+ public function rename($path1,$path2) {
+ $this->init();
+ return rename($this->constructUrl($path1),$this->constructUrl($path2));
}
public function stat($path) {
+ $this->init();
return stat($this->constructUrl($path));
}
diff --git a/apps/files_external/lib/swift.php b/apps/files_external/lib/swift.php
index a071dfdbb03..cbf2007052b 100644
--- a/apps/files_external/lib/swift.php
+++ b/apps/files_external/lib/swift.php
@@ -6,24 +6,28 @@
* See the COPYING-README file.
*/
+namespace OC\Files\Storage;
+
require_once 'php-cloudfiles/cloudfiles.php';
-class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
+class SWIFT extends \OC\Files\Storage\Common{
+ private $id;
private $host;
private $root;
private $user;
private $token;
private $secure;
+ private $ready = false;
/**
- * @var CF_Authentication auth
+ * @var \CF_Authentication auth
*/
private $auth;
/**
- * @var CF_Connection conn
+ * @var \CF_Connection conn
*/
private $conn;
/**
- * @var CF_Container rootContainer
+ * @var \CF_Container rootContainer
*/
private $rootContainer;
@@ -35,18 +39,18 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
/**
* translate directory path to container name
- * @param string path
+ * @param string $path
* @return string
*/
private function getContainerName($path) {
- $path=trim(trim($this->root, '/')."/".$path, '/.');
+ $path=trim(trim($this->root, '/') . "/".$path, '/.');
return str_replace('/', '\\', $path);
}
/**
* get container by path
- * @param string path
- * @return CF_Container
+ * @param string $path
+ * @return \CF_Container
*/
private function getContainer($path) {
if ($path=='' or $path=='/') {
@@ -59,15 +63,15 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
$container=$this->conn->get_container($this->getContainerName($path));
$this->containers[$path]=$container;
return $container;
- } catch(NoSuchContainerException $e) {
+ } catch(\NoSuchContainerException $e) {
return null;
}
}
/**
* create container
- * @param string path
- * @return CF_Container
+ * @param string $path
+ * @return \CF_Container
*/
private function createContainer($path) {
if ($path=='' or $path=='/' or $path=='.') {
@@ -89,8 +93,8 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
/**
* get object by path
- * @param string path
- * @return CF_Object
+ * @param string $path
+ * @return \CF_Object
*/
private function getObject($path) {
if (isset($this->objects[$path])) {
@@ -107,7 +111,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
$obj=$container->get_object(basename($path));
$this->objects[$path]=$obj;
return $obj;
- } catch(NoSuchObjectException $e) {
+ } catch(\NoSuchObjectException $e) {
return null;
}
}
@@ -132,8 +136,8 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
/**
* create object
- * @param string path
- * @return CF_Object
+ * @param string $path
+ * @return \CF_Object
*/
private function createObject($path) {
$container=$this->getContainer(dirname($path));
@@ -154,7 +158,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
/**
* check if container for path exists
- * @param string path
+ * @param string $path
* @return bool
*/
private function containerExists($path) {
@@ -163,15 +167,15 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
/**
* get the list of emulated sub containers
- * @param CF_Container container
+ * @param \CF_Container $container
* @return array
*/
private function getSubContainers($container) {
- $tmpFile=OCP\Files::tmpFile();
+ $tmpFile=\OCP\Files::tmpFile();
$obj=$this->getSubContainerFile($container);
try {
$obj->save_to_filename($tmpFile);
- } catch(Exception $e) {
+ } catch(\Exception $e) {
return array();
}
$obj->save_to_filename($tmpFile);
@@ -185,15 +189,15 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
/**
* add an emulated sub container
- * @param CF_Container container
- * @param string name
+ * @param \CF_Container $container
+ * @param string $name
* @return bool
*/
private function addSubContainer($container, $name) {
if ( ! $name) {
return false;
}
- $tmpFile=OCP\Files::tmpFile();
+ $tmpFile=\OCP\Files::tmpFile();
$obj=$this->getSubContainerFile($container);
try {
$obj->save_to_filename($tmpFile);
@@ -201,16 +205,15 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
foreach ($containers as &$sub) {
$sub=trim($sub);
}
- if (array_search($name, $containers)!==false) {
+ if(array_search($name, $containers) !== false) {
unlink($tmpFile);
return false;
} else {
$fh=fopen($tmpFile, 'a');
- fwrite($fh, $name."\n");
+ fwrite($fh,$name . "\n");
}
- } catch(Exception $e) {
- $containers=array();
- file_put_contents($tmpFile, $name."\n");
+ } catch(\Exception $e) {
+ file_put_contents($tmpFile, $name . "\n");
}
$obj->load_from_filename($tmpFile);
@@ -220,20 +223,20 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
/**
* remove an emulated sub container
- * @param CF_Container container
- * @param string name
+ * @param \CF_Container $container
+ * @param string $name
* @return bool
*/
private function removeSubContainer($container, $name) {
if ( ! $name) {
return false;
}
- $tmpFile=OCP\Files::tmpFile();
+ $tmpFile=\OCP\Files::tmpFile();
$obj=$this->getSubContainerFile($container);
try {
$obj->save_to_filename($tmpFile);
$containers=file($tmpFile);
- } catch (Exception $e) {
+ } catch (\Exception $e) {
return false;
}
foreach ($containers as &$sub) {
@@ -255,8 +258,8 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
/**
* ensure a subcontainer file exists and return it's object
- * @param CF_Container container
- * @return CF_Object
+ * @param \CF_Container $container
+ * @return \CF_Object
*/
private function getSubContainerFile($container) {
try {
@@ -283,10 +286,19 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
if ( ! $this->root || $this->root[0]!='/') {
$this->root='/'.$this->root;
}
- $this->auth = new CF_Authentication($this->user, $this->token, null, $this->host);
+
+ }
+
+ private function init(){
+ if($this->ready){
+ return;
+ }
+ $this->ready = true;
+
+ $this->auth = new \CF_Authentication($this->user, $this->token, null, $this->host);
$this->auth->authenticate();
- $this->conn = new CF_Connection($this->auth);
+ $this->conn = new \CF_Connection($this->auth);
if ( ! $this->containerExists('/')) {
$this->rootContainer=$this->createContainer('/');
@@ -295,8 +307,13 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
}
+ public function getId(){
+ return $this->id;
+ }
+
public function mkdir($path) {
+ $this->init();
if ($this->containerExists($path)) {
return false;
} else {
@@ -306,7 +323,8 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function rmdir($path) {
- if ( ! $this->containerExists($path)) {
+ $this->init();
+ if (!$this->containerExists($path)) {
return false;
} else {
$this->emptyContainer($path);
@@ -343,6 +361,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function opendir($path) {
+ $this->init();
$container=$this->getContainer($path);
$files=$this->getObjects($container);
$i=array_search(self::SUBCONTAINER_FILE, $files);
@@ -352,11 +371,12 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
$subContainers=$this->getSubContainers($container);
$files=array_merge($files, $subContainers);
$id=$this->getContainerName($path);
- OC_FakeDirStream::$dirs[$id]=$files;
+ \OC\Files\Stream\Dir::register($id, $files);
return opendir('fakedir://'.$id);
}
public function filetype($path) {
+ $this->init();
if ($this->containerExists($path)) {
return 'dir';
} else {
@@ -373,6 +393,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function file_exists($path) {
+ $this->init();
if ($this->is_dir($path)) {
return true;
} else {
@@ -381,6 +402,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function file_get_contents($path) {
+ $this->init();
$obj=$this->getObject($path);
if (is_null($obj)) {
return false;
@@ -389,6 +411,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function file_put_contents($path, $content) {
+ $this->init();
$obj=$this->getObject($path);
if (is_null($obj)) {
$container=$this->getContainer(dirname($path));
@@ -402,6 +425,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function unlink($path) {
+ $this->init();
if ($this->containerExists($path)) {
return $this->rmdir($path);
}
@@ -415,6 +439,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function fopen($path, $mode) {
+ $this->init();
switch($mode) {
case 'r':
case 'rb':
@@ -440,7 +465,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
case 'c':
case 'c+':
$tmpFile=$this->getTmpFile($path);
- OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this, 'writeBack');
+ \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
self::$tempFiles[$tmpFile]=$path;
return fopen('close://'.$tmpFile, $mode);
}
@@ -458,6 +483,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function touch($path, $mtime=null) {
+ $this->init();
$obj=$this->getObject($path);
if (is_null($obj)) {
return false;
@@ -472,6 +498,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function rename($path1, $path2) {
+ $this->init();
$sourceContainer=$this->getContainer(dirname($path1));
$targetContainer=$this->getContainer(dirname($path2));
$result=$sourceContainer->move_object_to(basename($path1), $targetContainer, basename($path2));
@@ -484,6 +511,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function copy($path1, $path2) {
+ $this->init();
$sourceContainer=$this->getContainer(dirname($path1));
$targetContainer=$this->getContainer(dirname($path2));
$result=$sourceContainer->copy_object_to(basename($path1), $targetContainer, basename($path2));
@@ -495,6 +523,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function stat($path) {
+ $this->init();
$container=$this->getContainer($path);
if ( ! is_null($container)) {
return array(
@@ -523,17 +552,19 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
private function getTmpFile($path) {
+ $this->init();
$obj=$this->getObject($path);
if ( ! is_null($obj)) {
- $tmpFile=OCP\Files::tmpFile();
+ $tmpFile=\OCP\Files::tmpFile();
$obj->save_to_filename($tmpFile);
return $tmpFile;
} else {
- return OCP\Files::tmpFile();
+ return \OCP\Files::tmpFile();
}
}
private function fromTmpFile($tmpFile, $path) {
+ $this->init();
$obj=$this->getObject($path);
if (is_null($obj)) {
$obj=$this->createObject($path);
@@ -544,7 +575,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
/**
* remove custom mtime metadata
- * @param CF_Object obj
+ * @param \CF_Object $obj
*/
private function resetMTime($obj) {
if (isset($obj->metadata['Mtime'])) {
diff --git a/apps/files_external/lib/webdav.php b/apps/files_external/lib/webdav.php
index 920aefc12de..2a953ac63f4 100644
--- a/apps/files_external/lib/webdav.php
+++ b/apps/files_external/lib/webdav.php
@@ -6,14 +6,17 @@
* See the COPYING-README file.
*/
-class OC_FileStorage_DAV extends OC_Filestorage_Common{
+namespace OC\Files\Storage;
+
+class DAV extends \OC\Files\Storage\Common{
private $password;
private $user;
private $host;
private $secure;
private $root;
+ private $ready;
/**
- * @var Sabre_DAV_Client
+ * @var \Sabre_DAV_Client
*/
private $client;
@@ -43,6 +46,13 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
if (substr($this->root, -1, 1)!='/') {
$this->root.='/';
}
+ }
+
+ private function init(){
+ if($this->ready){
+ return;
+ }
+ $this->ready = true;
$settings = array(
'baseUri' => $this->createBaseUri(),
@@ -50,7 +60,7 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
'password' => $this->password,
);
- $this->client = new Sabre_DAV_Client($settings);
+ $this->client = new \Sabre_DAV_Client($settings);
$caview = \OCP\Files::getStorage('files_external');
if ($caview) {
@@ -63,6 +73,10 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
$this->mkdir('');
}
+ public function getId(){
+ return 'webdav::' . $this->user . '@' . $this->host . '/' . $this->root;
+ }
+
private function createBaseUri() {
$baseUri='http';
if ($this->secure) {
@@ -73,40 +87,45 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
}
public function mkdir($path) {
+ $this->init();
$path=$this->cleanPath($path);
return $this->simpleResponse('MKCOL', $path, null, 201);
}
public function rmdir($path) {
+ $this->init();
$path=$this->cleanPath($path);
return $this->simpleResponse('DELETE', $path, null, 204);
}
public function opendir($path) {
+ $this->init();
$path=$this->cleanPath($path);
try {
$response=$this->client->propfind($path, array(), 1);
$id=md5('webdav'.$this->root.$path);
- OC_FakeDirStream::$dirs[$id]=array();
+ $content = array();
$files=array_keys($response);
array_shift($files);//the first entry is the current directory
foreach ($files as $file) {
$file = urldecode(basename($file));
- OC_FakeDirStream::$dirs[$id][]=$file;
+ $content[]=$file;
}
+ \OC\Files\Stream\Dir::register($id, $content);
return opendir('fakedir://'.$id);
- } catch(Exception $e) {
+ } catch(\Exception $e) {
return false;
}
}
public function filetype($path) {
+ $this->init();
$path=$this->cleanPath($path);
try {
$response=$this->client->propfind($path, array('{DAV:}resourcetype'));
$responseType=$response["{DAV:}resourcetype"]->resourceType;
return (count($responseType)>0 and $responseType[0]=="{DAV:}collection")?'dir':'file';
- } catch(Exception $e) {
+ } catch(\Exception $e) {
error_log($e->getMessage());
\OCP\Util::writeLog("webdav client", \OCP\Util::sanitizeHTML($e->getMessage()), \OCP\Util::ERROR);
return false;
@@ -122,20 +141,23 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
}
public function file_exists($path) {
+ $this->init();
$path=$this->cleanPath($path);
try {
$this->client->propfind($path, array('{DAV:}resourcetype'));
return true;//no 404 exception
- } catch(Exception $e) {
+ } catch(\Exception $e) {
return false;
}
}
public function unlink($path) {
- return $this->simpleResponse('DELETE', $path, null, 204);
+ $this->init();
+ return $this->simpleResponse('DELETE', $path, null ,204);
}
- public function fopen($path, $mode) {
+ public function fopen($path,$mode) {
+ $this->init();
$path=$this->cleanPath($path);
switch($mode) {
case 'r':
@@ -172,9 +194,9 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
} else {
$ext='';
}
- $tmpFile=OCP\Files::tmpFile($ext);
- OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this, 'writeBack');
- if ($this->file_exists($path)) {
+ $tmpFile = \OCP\Files::tmpFile($ext);
+ \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
+ if($this->file_exists($path)) {
$this->getFile($path, $tmpFile);
}
self::$tempFiles[$tmpFile]=$path;
@@ -190,6 +212,7 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
}
public function free_space($path) {
+ $this->init();
$path=$this->cleanPath($path);
try {
$response=$this->client->propfind($path, array('{DAV:}quota-available-bytes'));
@@ -198,12 +221,13 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
} else {
return 0;
}
- } catch(Exception $e) {
+ } catch(\Exception $e) {
return 0;
}
}
public function touch($path, $mtime=null) {
+ $this->init();
if (is_null($mtime)) {
$mtime=time();
}
@@ -211,12 +235,14 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
$this->client->proppatch($path, array('{DAV:}lastmodified' => $mtime));
}
- public function getFile($path, $target) {
- $source=$this->fopen($path, 'r');
- file_put_contents($target, $source);
+ public function getFile($path,$target) {
+ $this->init();
+ $source=$this->fopen($path,'r');
+ file_put_contents($target,$source);
}
- public function uploadFile($path, $target) {
+ public function uploadFile($path,$target) {
+ $this->init();
$source=fopen($path, 'r');
$curl = curl_init();
@@ -230,47 +256,46 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
curl_close ($curl);
}
- public function rename($path1, $path2) {
+ public function rename($path1,$path2) {
+ $this->init();
$path1=$this->cleanPath($path1);
$path2=$this->root.$this->cleanPath($path2);
try {
$this->client->request('MOVE', $path1, null, array('Destination'=>$path2));
return true;
- } catch(Exception $e) {
- echo $e;
- echo 'fail';
+ } catch(\Exception $e) {
return false;
}
}
- public function copy($path1, $path2) {
+ public function copy($path1,$path2) {
+ $this->init();
$path1=$this->cleanPath($path1);
$path2=$this->root.$this->cleanPath($path2);
try {
$this->client->request('COPY', $path1, null, array('Destination'=>$path2));
return true;
- } catch(Exception $e) {
- echo $e;
- echo 'fail';
+ } catch(\Exception $e) {
return false;
}
}
public function stat($path) {
+ $this->init();
$path=$this->cleanPath($path);
try {
$response=$this->client->propfind($path, array('{DAV:}getlastmodified', '{DAV:}getcontentlength'));
return array(
'mtime'=>strtotime($response['{DAV:}getlastmodified']),
'size'=>(int)isset($response['{DAV:}getcontentlength']) ? $response['{DAV:}getcontentlength'] : 0,
- 'ctime'=>-1,
);
- } catch(Exception $e) {
+ } catch(\Exception $e) {
return array();
}
}
public function getMimeType($path) {
+ $this->init();
$path=$this->cleanPath($path);
try {
$response=$this->client->propfind($path, array('{DAV:}getcontenttype', '{DAV:}resourcetype'));
@@ -283,7 +308,7 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
} else {
return false;
}
- } catch(Exception $e) {
+ } catch(\Exception $e) {
return false;
}
}
@@ -296,12 +321,12 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
}
}
- private function simpleResponse($method, $path, $body, $expected) {
+ private function simpleResponse($method,$path,$body,$expected) {
$path=$this->cleanPath($path);
try {
$response=$this->client->request($method, $path, $body);
return $response['statusCode']==$expected;
- } catch(Exception $e) {
+ } catch(\Exception $e) {
return false;
}
}
diff --git a/apps/files_external/personal.php b/apps/files_external/personal.php
index 4215b28787e..268d1880232 100755
--- a/apps/files_external/personal.php
+++ b/apps/files_external/personal.php
@@ -24,7 +24,7 @@ OCP\Util::addScript('files_external', 'settings');
OCP\Util::addStyle('files_external', 'settings');
$backends = OC_Mount_Config::getBackends();
// Remove local storage
-unset($backends['OC_Filestorage_Local']);
+unset($backends['\OC\Files\Storage\Local']);
$tmpl = new OCP\Template('files_external', 'settings');
$tmpl->assign('isAdminPage', false, false);
$tmpl->assign('mounts', OC_Mount_Config::getPersonalMountPoints());
diff --git a/apps/files_external/tests/amazons3.php b/apps/files_external/tests/amazons3.php
index 39f96fe8e55..6b3a942b5ba 100644
--- a/apps/files_external/tests/amazons3.php
+++ b/apps/files_external/tests/amazons3.php
@@ -20,7 +20,9 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
-class Test_Filestorage_AmazonS3 extends Test_FileStorage {
+namespace Test\Files\Storage;
+
+class AmazonS3 extends Storage {
private $config;
private $id;
@@ -32,12 +34,12 @@ class Test_Filestorage_AmazonS3 extends Test_FileStorage {
$this->markTestSkipped('AmazonS3 backend not configured');
}
$this->config['amazons3']['bucket'] = $id; // Make sure we have a new empty bucket to work in
- $this->instance = new OC_Filestorage_AmazonS3($this->config['amazons3']);
+ $this->instance = new \OC\Files\Storage\AmazonS3($this->config['amazons3']);
}
public function tearDown() {
if ($this->instance) {
- $s3 = new AmazonS3(array('key' => $this->config['amazons3']['key'],
+ $s3 = new \AmazonS3(array('key' => $this->config['amazons3']['key'],
'secret' => $this->config['amazons3']['secret']));
if ($s3->delete_all_objects($this->id)) {
$s3->delete_bucket($this->id);
diff --git a/apps/files_external/tests/config.php b/apps/files_external/tests/config.php
index ff16b1c1d8a..65127175ad7 100644
--- a/apps/files_external/tests/config.php
+++ b/apps/files_external/tests/config.php
@@ -8,7 +8,7 @@ return array(
'root'=>'/test',
),
'webdav'=>array(
- 'run'=>false,
+ 'run'=>true,
'host'=>'localhost',
'user'=>'test',
'password'=>'test',
@@ -30,7 +30,7 @@ return array(
'root'=>'/',
),
'smb'=>array(
- 'run'=>false,
+ 'run'=>true,
'user'=>'test',
'password'=>'test',
'host'=>'localhost',
diff --git a/apps/files_external/tests/dropbox.php b/apps/files_external/tests/dropbox.php
index 304cb3ca38c..e4e598b06b0 100644
--- a/apps/files_external/tests/dropbox.php
+++ b/apps/files_external/tests/dropbox.php
@@ -6,7 +6,9 @@
* See the COPYING-README file.
*/
-class Test_Filestorage_Dropbox extends Test_FileStorage {
+namespace Test\Files\Storage;
+
+class Dropbox extends Storage {
private $config;
public function setUp() {
@@ -16,7 +18,7 @@ class Test_Filestorage_Dropbox extends Test_FileStorage {
$this->markTestSkipped('Dropbox backend not configured');
}
$this->config['dropbox']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
- $this->instance = new OC_Filestorage_Dropbox($this->config['dropbox']);
+ $this->instance = new \OC\Files\Storage\Dropbox($this->config['dropbox']);
}
public function tearDown() {
diff --git a/apps/files_external/tests/ftp.php b/apps/files_external/tests/ftp.php
index 91e4589ed18..923b5e39681 100644
--- a/apps/files_external/tests/ftp.php
+++ b/apps/files_external/tests/ftp.php
@@ -6,7 +6,9 @@
* See the COPYING-README file.
*/
-class Test_Filestorage_FTP extends Test_FileStorage {
+namespace Test\Files\Storage;
+
+class FTP extends Storage {
private $config;
public function setUp() {
@@ -16,12 +18,12 @@ class Test_Filestorage_FTP extends Test_FileStorage {
$this->markTestSkipped('FTP backend not configured');
}
$this->config['ftp']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
- $this->instance = new OC_Filestorage_FTP($this->config['ftp']);
+ $this->instance = new \OC\Files\Storage\FTP($this->config['ftp']);
}
public function tearDown() {
if ($this->instance) {
- OCP\Files::rmdirr($this->instance->constructUrl(''));
+ \OCP\Files::rmdirr($this->instance->constructUrl(''));
}
}
diff --git a/apps/files_external/tests/google.php b/apps/files_external/tests/google.php
index 379bf992ff5..f344163a8b9 100644
--- a/apps/files_external/tests/google.php
+++ b/apps/files_external/tests/google.php
@@ -20,8 +20,9 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
-class Test_Filestorage_Google extends Test_FileStorage {
+namespace Test\Files\Storage;
+class Google extends Storage {
private $config;
public function setUp() {
@@ -31,7 +32,7 @@ class Test_Filestorage_Google extends Test_FileStorage {
$this->markTestSkipped('Google backend not configured');
}
$this->config['google']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
- $this->instance = new OC_Filestorage_Google($this->config['google']);
+ $this->instance = new \OC\Files\Storage\Google($this->config['google']);
}
public function tearDown() {
diff --git a/apps/files_external/tests/smb.php b/apps/files_external/tests/smb.php
index 2d6268ef269..be3ea5a8308 100644
--- a/apps/files_external/tests/smb.php
+++ b/apps/files_external/tests/smb.php
@@ -6,7 +6,10 @@
* See the COPYING-README file.
*/
-class Test_Filestorage_SMB extends Test_FileStorage {
+namespace Test\Files\Storage;
+
+class SMB extends Storage {
+
private $config;
public function setUp() {
@@ -16,12 +19,12 @@ class Test_Filestorage_SMB extends Test_FileStorage {
$this->markTestSkipped('Samba backend not configured');
}
$this->config['smb']['root'] .= $id; //make sure we have an new empty folder to work in
- $this->instance = new OC_Filestorage_SMB($this->config['smb']);
+ $this->instance = new \OC\Files\Storage\SMB($this->config['smb']);
}
public function tearDown() {
if ($this->instance) {
- OCP\Files::rmdirr($this->instance->constructUrl(''));
+ \OCP\Files::rmdirr($this->instance->constructUrl(''));
}
}
}
diff --git a/apps/files_external/tests/swift.php b/apps/files_external/tests/swift.php
index 8b25db50996..5c782840246 100644
--- a/apps/files_external/tests/swift.php
+++ b/apps/files_external/tests/swift.php
@@ -6,7 +6,9 @@
* See the COPYING-README file.
*/
-class Test_Filestorage_SWIFT extends Test_FileStorage {
+namespace Test\Files\Storage;
+
+class SWIFT extends Storage {
private $config;
public function setUp() {
@@ -16,7 +18,7 @@ class Test_Filestorage_SWIFT extends Test_FileStorage {
$this->markTestSkipped('OpenStack SWIFT backend not configured');
}
$this->config['swift']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
- $this->instance = new OC_Filestorage_SWIFT($this->config['swift']);
+ $this->instance = new \OC\Files\Storage\SWIFT($this->config['swift']);
}
diff --git a/apps/files_external/tests/webdav.php b/apps/files_external/tests/webdav.php
index dd938a0c93a..1702898045e 100644
--- a/apps/files_external/tests/webdav.php
+++ b/apps/files_external/tests/webdav.php
@@ -6,7 +6,10 @@
* See the COPYING-README file.
*/
-class Test_Filestorage_DAV extends Test_FileStorage {
+namespace Test\Files\Storage;
+
+class DAV extends Storage {
+
private $config;
public function setUp() {
@@ -16,7 +19,7 @@ class Test_Filestorage_DAV extends Test_FileStorage {
$this->markTestSkipped('WebDAV backend not configured');
}
$this->config['webdav']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
- $this->instance = new OC_Filestorage_DAV($this->config['webdav']);
+ $this->instance = new \OC\Files\Storage\DAV($this->config['webdav']);
}
public function tearDown() {
diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php
index 0104d0d017f..d3e05cc62d8 100644
--- a/apps/files_sharing/appinfo/app.php
+++ b/apps/files_sharing/appinfo/app.php
@@ -2,8 +2,11 @@
OC::$CLASSPATH['OC_Share_Backend_File'] = "apps/files_sharing/lib/share/file.php";
OC::$CLASSPATH['OC_Share_Backend_Folder'] = 'apps/files_sharing/lib/share/folder.php';
-OC::$CLASSPATH['OC_Filestorage_Shared'] = "apps/files_sharing/lib/sharedstorage.php";
-OCP\Util::connectHook('OC_Filesystem', 'setup', 'OC_Filestorage_Shared', 'setup');
+OC::$CLASSPATH['OC\Files\Storage\Shared'] = "apps/files_sharing/lib/sharedstorage.php";
+OC::$CLASSPATH['OC\Files\Cache\Shared_Cache'] = 'apps/files_sharing/lib/cache.php';
+OC::$CLASSPATH['OC\Files\Cache\Shared_Permissions'] = 'apps/files_sharing/lib/permissions.php';
+OC::$CLASSPATH['OC\Files\Cache\Shared_Watcher'] = 'apps/files_sharing/lib/watcher.php';
+OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup');
OCP\Share::registerBackend('file', 'OC_Share_Backend_File');
OCP\Share::registerBackend('folder', 'OC_Share_Backend_Folder', 'file');
-OCP\Util::addScript('files_sharing', 'share'); \ No newline at end of file
+OCP\Util::addScript('files_sharing', 'share');
diff --git a/apps/files_sharing/appinfo/info.xml b/apps/files_sharing/appinfo/info.xml
index a44d0338bb6..1f24a4dde83 100644
--- a/apps/files_sharing/appinfo/info.xml
+++ b/apps/files_sharing/appinfo/info.xml
@@ -5,7 +5,7 @@
<description>File sharing between users</description>
<licence>AGPL</licence>
<author>Michael Gapczynski</author>
- <require>4.9</require>
+ <require>4.91</require>
<shipped>true</shipped>
<default_enable/>
<types>
diff --git a/apps/files_sharing/appinfo/update.php b/apps/files_sharing/appinfo/update.php
index e998626f4a4..1d22b32b503 100644
--- a/apps/files_sharing/appinfo/update.php
+++ b/apps/files_sharing/appinfo/update.php
@@ -9,10 +9,12 @@ if (version_compare($installedVersion, '0.3', '<')) {
OC_User::useBackend(new OC_User_Database());
OC_Group::useBackend(new OC_Group_Database());
OC_App::loadApps(array('authentication'));
+ $rootView = new \OC\Files\View('');
while ($row = $result->fetchRow()) {
- $itemSource = OC_FileCache::getId($row['source'], '');
+ $meta = $rootView->getFileInfo($$row['source']);
+ $itemSource = $meta['fileid'];
if ($itemSource != -1) {
- $file = OC_FileCache::get($row['source'], '');
+ $file = $meta;
if ($file['mimetype'] == 'httpd/unix-directory') {
$itemType = 'folder';
} else {
@@ -68,6 +70,6 @@ if (version_compare($installedVersion, '0.3.3', '<')) {
OC_App::loadApps(array('authentication'));
$users = OC_User::getUsers();
foreach ($users as $user) {
- OC_FileCache::delete('Shared', '/'.$user.'/files/');
+// OC_FileCache::delete('Shared', '/'.$user.'/files/');
}
-} \ No newline at end of file
+}
diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php
new file mode 100644
index 00000000000..9655e447875
--- /dev/null
+++ b/apps/files_sharing/lib/cache.php
@@ -0,0 +1,258 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Michael Gapczynski
+ * @copyright 2012 Michael Gapczynski mtgap@owncloud.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+namespace OC\Files\Cache;
+
+/**
+ * Metadata cache for shared files
+ *
+ * don't use this class directly if you need to get metadata, use \OC\Files\Filesystem::getFileInfo instead
+ */
+class Shared_Cache extends Cache {
+
+ private $files = array();
+
+ public function __construct($storage) {
+
+ }
+
+ /**
+ * @brief Get the source cache of a shared file or folder
+ * @param string $target Shared target file path
+ * @return \OC\Files\Cache\Cache
+ */
+ private function getSourceCache($target) {
+ $source = \OC_Share_Backend_File::getSource($target);
+ if (isset($source['path'])) {
+ $source['path'] = '/' . $source['uid_owner'] . '/' . $source['path'];
+ \OC\Files\Filesystem::initMountPoints($source['uid_owner']);
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source['path']);
+ if ($storage) {
+ $this->files[$target] = $internalPath;
+ $cache = $storage->getCache();
+ $this->storageId = $storage->getId();
+ $this->numericId = $cache->getNumericStorageId();
+ return $cache;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * get the stored metadata of a file or folder
+ *
+ * @param string/int $file
+ * @return array
+ */
+ public function get($file) {
+ if ($file == '') {
+ return \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_File::FORMAT_FILE_APP_ROOT);
+ } else if (is_string($file)) {
+ if ($cache = $this->getSourceCache($file)) {
+ return $cache->get($this->files[$file]);
+ }
+ } else {
+ $query = \OC_DB::prepare(
+ 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`
+ FROM `*PREFIX*filecache` WHERE `fileid` = ?');
+ $result = $query->execute(array($file));
+ $data = $result->fetchRow();
+ $data['fileid'] = (int)$data['fileid'];
+ $data['size'] = (int)$data['size'];
+ $data['mtime'] = (int)$data['mtime'];
+ $data['encrypted'] = (bool)$data['encrypted'];
+ $data['mimetype'] = $this->getMimetype($data['mimetype']);
+ $data['mimepart'] = $this->getMimetype($data['mimepart']);
+ return $data;
+ }
+ return false;
+ }
+
+ /**
+ * get the metadata of all files stored in $folder
+ *
+ * @param string $folder
+ * @return array
+ */
+ public function getFolderContents($folder) {
+ if ($folder == '') {
+ $files = \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_File::FORMAT_GET_FOLDER_CONTENTS);
+ foreach ($files as &$file) {
+ $file['mimetype'] = $this->getMimetype($file['mimetype']);
+ $file['mimepart'] = $this->getMimetype($file['mimepart']);
+ }
+ return $files;
+ } else {
+ if ($cache = $this->getSourceCache($folder)) {
+ return $cache->getFolderContents($this->files[$folder]);
+ }
+ }
+ return false;
+ }
+
+ /**
+ * store meta data for a file or folder
+ *
+ * @param string $file
+ * @param array $data
+ *
+ * @return int file id
+ */
+ public function put($file, array $data) {
+ if ($cache = $this->getSourceCache($file)) {
+ return $cache->put($this->files[$file], $data);
+ }
+ return false;
+ }
+
+ /**
+ * get the file id for a file
+ *
+ * @param string $file
+ * @return int
+ */
+ public function getId($file) {
+ if ($cache = $this->getSourceCache($file)) {
+ return $cache->getId($this->files[$file]);
+ }
+ return -1;
+ }
+
+ /**
+ * check if a file is available in the cache
+ *
+ * @param string $file
+ * @return bool
+ */
+ public function inCache($file) {
+ if ($file == '') {
+ return true;
+ }
+ return parent::inCache($file);
+ }
+
+ /**
+ * remove a file or folder from the cache
+ *
+ * @param string $file
+ */
+ public function remove($file) {
+ if ($cache = $this->getSourceCache($file)) {
+ $cache->remove($this->files[$file]);
+ }
+ }
+
+ /**
+ * Move a file or folder in the cache
+ *
+ * @param string $source
+ * @param string $target
+ */
+ public function move($source, $target) {
+ if ($cache = $this->getSourceCache($source)) {
+ $targetPath = \OC_Share_Backend_File::getSourcePath(dirname($target));
+ if ($targetPath) {
+ $targetPath .= '/' . basename($target);
+ $cache->move($this->files[$source], $targetPath);
+ }
+
+ }
+ }
+
+ /**
+ * remove all entries for files that are stored on the storage from the cache
+ */
+ public function clear() {
+ // Not a valid action for Shared Cache
+ }
+
+ /**
+ * @param string $file
+ *
+ * @return int, Cache::NOT_FOUND, Cache::PARTIAL, Cache::SHALLOW or Cache::COMPLETE
+ */
+ public function getStatus($file) {
+ if ($file == '') {
+ return self::COMPLETE;
+ }
+ if ($cache = $this->getSourceCache($file)) {
+ return $cache->getStatus($this->files[$file]);
+ }
+ return self::NOT_FOUND;
+ }
+
+ /**
+ * search for files matching $pattern
+ *
+ * @param string $pattern
+ * @return array of file data
+ */
+ public function search($pattern) {
+ // TODO
+ }
+
+ /**
+ * search for files by mimetype
+ *
+ * @param string $part1
+ * @param string $part2
+ * @return array
+ */
+ public function searchByMime($mimetype) {
+ if (strpos($mimetype, '/')) {
+ $where = '`mimetype` = ?';
+ } else {
+ $where = '`mimepart` = ?';
+ }
+ $mimetype = $this->getMimetypeId($mimetype);
+ $ids = $this->getAll();
+ $placeholders = join(',', array_fill(0, count($ids), '?'));
+ $query = \OC_DB::prepare('
+ SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`
+ FROM `*PREFIX*filecache` WHERE ' . $where . ' AND `fileid` IN (' . $placeholders . ')'
+ );
+ $result = $query->execute(array_merge(array($mimetype), $ids));
+ return $result->fetchAll();
+ }
+
+ /**
+ * get the size of a folder and set it in the cache
+ *
+ * @param string $path
+ * @return int
+ */
+ public function calculateFolderSize($path) {
+ if ($cache = $this->getSourceCache($path)) {
+ return $cache->calculateFolderSize($this->files[$path]);
+ }
+ return 0;
+ }
+
+ /**
+ * get all file ids on the files on the storage
+ *
+ * @return int[]
+ */
+ public function getAll() {
+ return \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_File::FORMAT_GET_ALL);
+ }
+
+}
diff --git a/apps/files_sharing/lib/permissions.php b/apps/files_sharing/lib/permissions.php
new file mode 100644
index 00000000000..2b068ff9350
--- /dev/null
+++ b/apps/files_sharing/lib/permissions.php
@@ -0,0 +1,85 @@
+<?php
+/**
+* ownCloud
+*
+* @author Michael Gapczynski
+* @copyright 2012 Michael Gapczynski mtgap@owncloud.com
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*/
+namespace OC\Files\Cache;
+
+class Shared_Permissions extends Permissions {
+
+ /**
+ * get the permissions for a single file
+ *
+ * @param int $fileId
+ * @param string $user
+ * @return int (-1 if file no permissions set)
+ */
+ public function get($fileId, $user) {
+ if ($fileId == -1) {
+ return \OCP\PERMISSION_READ;
+ }
+ $source = \OCP\Share::getItemSharedWithBySource('file', $fileId, \OC_Share_Backend_File::FORMAT_SHARED_STORAGE, null, true);
+ if ($source) {
+ return $source['permissions'];
+ } else {
+ return -1;
+ }
+ }
+
+ /**
+ * set the permissions of a file
+ *
+ * @param int $fileId
+ * @param string $user
+ * @param int $permissions
+ */
+ public function set($fileId, $user, $permissions) {
+ // Not a valid action for Shared Permissions
+ }
+
+ /**
+ * get the permissions of multiply files
+ *
+ * @param int[] $fileIds
+ * @param string $user
+ * @return int[]
+ */
+ public function getMultiple($fileIds, $user) {
+ if (count($fileIds) === 0) {
+ return array();
+ }
+ foreach ($fileIds as $fileId) {
+ $filePermissions[$fileId] = self::get($fileId, $user);
+ }
+ return $filePermissions;
+ }
+
+ /**
+ * remove the permissions for a file
+ *
+ * @param int $fileId
+ * @param string $user
+ */
+ public function remove($fileId, $user) {
+ // Not a valid action for Shared Permissions
+ }
+
+ public function removeMultiple($fileIds, $user) {
+ // Not a valid action for Shared Permissions
+ }
+}
diff --git a/apps/files_sharing/lib/share/file.php b/apps/files_sharing/lib/share/file.php
index ac585236831..6d3c55a008f 100644
--- a/apps/files_sharing/lib/share/file.php
+++ b/apps/files_sharing/lib/share/file.php
@@ -22,16 +22,18 @@
class OC_Share_Backend_File implements OCP\Share_Backend_File_Dependent {
const FORMAT_SHARED_STORAGE = 0;
- const FORMAT_FILE_APP = 1;
+ const FORMAT_GET_FOLDER_CONTENTS = 1;
const FORMAT_FILE_APP_ROOT = 2;
const FORMAT_OPENDIR = 3;
+ const FORMAT_GET_ALL = 4;
private $path;
public function isValidSource($itemSource, $uidOwner) {
- $path = OC_FileCache::getPath($itemSource, $uidOwner);
- if ($path) {
- $this->path = $path;
+ $query = \OC_DB::prepare('SELECT `name` FROM `*PREFIX*filecache` WHERE `fileid` = ?');
+ $result = $query->execute(array($itemSource));
+ if ($row = $result->fetchRow()) {
+ $this->path = $row['name'];
return true;
}
return false;
@@ -70,37 +72,21 @@ class OC_Share_Backend_File implements OCP\Share_Backend_File_Dependent {
public function formatItems($items, $format, $parameters = null) {
if ($format == self::FORMAT_SHARED_STORAGE) {
// Only 1 item should come through for this format call
- return array('path' => $items[key($items)]['path'], 'permissions' => $items[key($items)]['permissions']);
- } else if ($format == self::FORMAT_FILE_APP) {
- if (isset($parameters['mimetype_filter']) && $parameters['mimetype_filter']) {
- $mimetype_filter = $parameters['mimetype_filter'];
- }
+ return array('path' => $items[key($items)]['path'], 'permissions' => $items[key($items)]['permissions'], 'uid_owner' => $items[key($items)]['uid_owner']);
+ } else if ($format == self::FORMAT_GET_FOLDER_CONTENTS) {
$files = array();
foreach ($items as $item) {
- if (isset($mimetype_filter)
- && strpos($item['mimetype'], $mimetype_filter) !== 0
- && $item['mimetype'] != 'httpd/unix-directory') {
- continue;
- }
$file = array();
- $file['id'] = $item['file_source'];
+ $file['fileid'] = $item['file_source'];
+ $file['storage'] = $item['storage'];
$file['path'] = $item['file_target'];
+ $file['parent'] = $item['file_parent'];
$file['name'] = basename($item['file_target']);
- $file['ctime'] = $item['ctime'];
- $file['mtime'] = $item['mtime'];
$file['mimetype'] = $item['mimetype'];
+ $file['mimepart'] = $item['mimepart'];
$file['size'] = $item['size'];
+ $file['mtime'] = $item['mtime'];
$file['encrypted'] = $item['encrypted'];
- $file['versioned'] = $item['versioned'];
- $file['directory'] = $parameters['folder'];
- $file['type'] = ($item['mimetype'] == 'httpd/unix-directory') ? 'dir' : 'file';
- $file['permissions'] = $item['permissions'];
- if ($file['type'] == 'file') {
- // Remove Create permission if type is file
- $file['permissions'] &= ~OCP\PERMISSION_CREATE;
- }
- // NOTE: Temporary fix to allow unsharing of files in root of Shared directory
- $file['permissions'] |= OCP\PERMISSION_DELETE;
$files[] = $file;
}
return $files;
@@ -111,17 +97,48 @@ class OC_Share_Backend_File implements OCP\Share_Backend_File_Dependent {
if ($item['mtime'] > $mtime) {
$mtime = $item['mtime'];
}
- $size += $item['size'];
+ $size += (int)$item['size'];
}
- return array(0 => array('id' => -1, 'name' => 'Shared', 'mtime' => $mtime, 'mimetype' => 'httpd/unix-directory', 'size' => $size, 'writable' => false, 'type' => 'dir', 'directory' => '', 'permissions' => OCP\PERMISSION_READ));
+ return array('fileid' => -1, 'name' => 'Shared', 'mtime' => $mtime, 'mimetype' => 'httpd/unix-directory', 'size' => $size);
} else if ($format == self::FORMAT_OPENDIR) {
$files = array();
foreach ($items as $item) {
$files[] = basename($item['file_target']);
}
return $files;
+ } else if ($format == self::FORMAT_GET_ALL) {
+ $ids = array();
+ foreach ($items as $item) {
+ $ids[] = $item['file_source'];
+ }
+ return $ids;
}
return array();
}
+ public static function getSource($target) {
+ if ($target == '') {
+ return false;
+ }
+ $target = '/'.$target;
+ $target = rtrim($target, '/');
+ $pos = strpos($target, '/', 1);
+ // Get shared folder name
+ if ($pos !== false) {
+ $folder = substr($target, 0, $pos);
+ $source = \OCP\Share::getItemSharedWith('folder', $folder, \OC_Share_Backend_File::FORMAT_SHARED_STORAGE);
+ if ($source) {
+ $source['path'] = $source['path'].substr($target, strlen($folder));
+ return $source;
+ }
+ } else {
+ $source = \OCP\Share::getItemSharedWith('file', $target, \OC_Share_Backend_File::FORMAT_SHARED_STORAGE);
+ if ($source) {
+ return $source;
+ }
+ }
+ \OCP\Util::writeLog('files_sharing', 'File source not found for: '.$target, \OCP\Util::ERROR);
+ return false;
+ }
+
}
diff --git a/apps/files_sharing/lib/share/folder.php b/apps/files_sharing/lib/share/folder.php
index d414fcf10fc..11c8c6b1e80 100644
--- a/apps/files_sharing/lib/share/folder.php
+++ b/apps/files_sharing/lib/share/folder.php
@@ -21,47 +21,26 @@
class OC_Share_Backend_Folder extends OC_Share_Backend_File implements OCP\Share_Backend_Collection {
- public function formatItems($items, $format, $parameters = null) {
- if ($format == self::FORMAT_SHARED_STORAGE) {
- // Only 1 item should come through for this format call
- return array('path' => $items[key($items)]['path'], 'permissions' => $items[key($items)]['permissions']);
- } else if ($format == self::FORMAT_FILE_APP && isset($parameters['folder'])) {
- // Only 1 item should come through for this format call
- $folder = $items[key($items)];
- if (isset($parameters['mimetype_filter'])) {
- $mimetype_filter = $parameters['mimetype_filter'];
- } else {
- $mimetype_filter = '';
- }
- $path = $folder['path'].substr($parameters['folder'], 7 + strlen($folder['file_target']));
- $files = OC_FileCache::getFolderContent($path, '', $mimetype_filter);
- foreach ($files as &$file) {
- $file['directory'] = $parameters['folder'];
- $file['type'] = ($file['mimetype'] == 'httpd/unix-directory') ? 'dir' : 'file';
- $file['permissions'] = $folder['permissions'];
- if ($file['type'] == 'file') {
- // Remove Create permission if type is file
- $file['permissions'] &= ~OCP\PERMISSION_CREATE;
- }
- }
- return $files;
- }
- return array();
- }
-
public function getChildren($itemSource) {
$children = array();
$parents = array($itemSource);
+ $query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*mimetypes` WHERE `mimetype` = ?');
+ $result = $query->execute(array('httpd/unix-directory'));
+ if ($row = $result->fetchRow()) {
+ $mimetype = $row['id'];
+ } else {
+ $mimetype = -1;
+ }
while (!empty($parents)) {
$parents = "'".implode("','", $parents)."'";
- $query = OC_DB::prepare('SELECT `id`, `name`, `mimetype` FROM `*PREFIX*fscache` WHERE `parent` IN ('.$parents.')');
+ $query = OC_DB::prepare('SELECT `fileid`, `name`, `mimetype` FROM `*PREFIX*filecache` WHERE `parent` IN ('.$parents.')');
$result = $query->execute();
$parents = array();
while ($file = $result->fetchRow()) {
- $children[] = array('source' => $file['id'], 'file_path' => $file['name']);
+ $children[] = array('source' => $file['fileid'], 'file_path' => $file['name']);
// If a child folder is found look inside it
- if ($file['mimetype'] == 'httpd/unix-directory') {
- $parents[] = $file['id'];
+ if ($file['mimetype'] == $mimetype) {
+ $parents[] = $file['fileid'];
}
}
}
diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php
index 50db9166fe7..ea28ca69b93 100644
--- a/apps/files_sharing/lib/sharedstorage.php
+++ b/apps/files_sharing/lib/sharedstorage.php
@@ -20,10 +20,12 @@
*
*/
+namespace OC\Files\Storage;
+
/**
* Convert target path to source path and pass the function call to the correct storage provider
*/
-class OC_Filestorage_Shared extends OC_Filestorage_Common {
+class Shared extends \OC\Files\Storage\Common {
private $sharedFolder;
private $files = array();
@@ -32,54 +34,36 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
$this->sharedFolder = $arguments['sharedFolder'];
}
+ public function getId(){
+ return 'shared::' . $this->sharedFolder;
+ }
+
/**
- * @brief Get the source file path and the permissions granted for a shared file
+ * @brief Get the source file path, permissions, and owner for a shared file
* @param string Shared target file path
- * @return Returns array with the keys path and permissions or false if not found
+ * @return Returns array with the keys path, permissions, and owner or false if not found
*/
private function getFile($target) {
- $target = '/'.$target;
- $target = rtrim($target, '/');
- if (isset($this->files[$target])) {
- return $this->files[$target];
- } else {
- $pos = strpos($target, '/', 1);
- // Get shared folder name
- if ($pos !== false) {
- $folder = substr($target, 0, $pos);
- if (isset($this->files[$folder])) {
- $file = $this->files[$folder];
- } else {
- $file = OCP\Share::getItemSharedWith('folder', $folder, OC_Share_Backend_File::FORMAT_SHARED_STORAGE);
- }
- if ($file) {
- $this->files[$target]['path'] = $file['path'].substr($target, strlen($folder));
- $this->files[$target]['permissions'] = $file['permissions'];
- return $this->files[$target];
- }
- } else {
- $file = OCP\Share::getItemSharedWith('file', $target, OC_Share_Backend_File::FORMAT_SHARED_STORAGE);
- if ($file) {
- $this->files[$target] = $file;
- return $this->files[$target];
- }
+ if (!isset($this->files[$target])) {
+ $source = \OC_Share_Backend_File::getSource($target);
+ if ($source) {
+ $source['path'] = '/'.$source['uid_owner'].'/'.$source['path'];
}
- OCP\Util::writeLog('files_sharing', 'File source not found for: '.$target, OCP\Util::ERROR);
- return false;
+ $this->files[$target] = $source;
}
+ return $this->files[$target];
}
/**
* @brief Get the source file path for a shared file
* @param string Shared target file path
- * @return Returns source file path or false if not found
+ * @return string source file path or false if not found
*/
private function getSourcePath($target) {
- $file = $this->getFile($target);
- if (isset($file['path'])) {
- $uid = substr($file['path'], 1, strpos($file['path'], '/', 1) - 1);
- OC_Filesystem::mount('OC_Filestorage_Local', array('datadir' => OC_User::getHome($uid)), $uid);
- return $file['path'];
+ $source = $this->getFile($target);
+ if ($source) {
+ \OC\Files\Filesystem::initMountPoints($source['uid_owner']);
+ return $source['path'];
}
return false;
}
@@ -87,61 +71,42 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
/**
* @brief Get the permissions granted for a shared file
* @param string Shared target file path
- * @return Returns CRUDS permissions granted or false if not found
+ * @return int CRUDS permissions granted or false if not found
*/
- private function getPermissions($target) {
- $file = $this->getFile($target);
- if (isset($file['permissions'])) {
- return $file['permissions'];
+ public function getPermissions($target) {
+ $source = $this->getFile($target);
+ if ($source) {
+ return $source['permissions'];
}
return false;
}
- /**
- * @brief Get the internal path to pass to the storage filesystem call
- * @param string Source file path
- * @return Source file path with mount point stripped out
- */
- private function getInternalPath($path) {
- $mountPoint = OC_Filesystem::getMountPoint($path);
- $internalPath = substr($path, strlen($mountPoint));
- return $internalPath;
- }
-
- public function getOwner($target) {
- $shared_item = OCP\Share::getItemSharedWith('folder', $target, OC_Share_Backend_File::FORMAT_SHARED_STORAGE);
- if ($shared_item) {
- return $shared_item[0]["uid_owner"];
- }
- return null;
- }
-
public function mkdir($path) {
if ($path == '' || $path == '/' || !$this->isCreatable(dirname($path))) {
return false;
} else if ($source = $this->getSourcePath($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->mkdir($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->mkdir($internalPath);
}
return false;
}
public function rmdir($path) {
if (($source = $this->getSourcePath($path)) && $this->isDeletable($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->rmdir($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->rmdir($internalPath);
}
return false;
}
public function opendir($path) {
if ($path == '' || $path == '/') {
- $files = OCP\Share::getItemsSharedWith('file', OC_Share_Backend_Folder::FORMAT_OPENDIR);
- OC_FakeDirStream::$dirs['shared'] = $files;
+ $files = \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_Folder::FORMAT_OPENDIR);
+ \OC\Files\Stream\Dir::register('shared', $files);
return opendir('fakedir://shared');
} else if ($source = $this->getSourcePath($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->opendir($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->opendir($internalPath);
}
return false;
}
@@ -150,16 +115,16 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
if ($path == '' || $path == '/') {
return true;
} else if ($source = $this->getSourcePath($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->is_dir($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->is_dir($internalPath);
}
return false;
}
public function is_file($path) {
if ($source = $this->getSourcePath($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->is_file($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->is_file($internalPath);
}
return false;
}
@@ -168,11 +133,10 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
if ($path == '' || $path == '/') {
$stat['size'] = $this->filesize($path);
$stat['mtime'] = $this->filemtime($path);
- $stat['ctime'] = $this->filectime($path);
return $stat;
} else if ($source = $this->getSourcePath($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->stat($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->stat($internalPath);
}
return false;
}
@@ -181,8 +145,8 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
if ($path == '' || $path == '/') {
return 'dir';
} else if ($source = $this->getSourcePath($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->filetype($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->filetype($internalPath);
}
return false;
}
@@ -191,8 +155,8 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
if ($path == '' || $path == '/' || $this->is_dir($path)) {
return 0;
} else if ($source = $this->getSourcePath($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->filesize($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->filesize($internalPath);
}
return false;
}
@@ -201,7 +165,7 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
if ($path == '') {
return false;
}
- return ($this->getPermissions($path) & OCP\PERMISSION_CREATE);
+ return ($this->getPermissions($path) & \OCP\PERMISSION_CREATE);
}
public function isReadable($path) {
@@ -212,54 +176,33 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
if ($path == '') {
return false;
}
- return ($this->getPermissions($path) & OCP\PERMISSION_UPDATE);
+ return ($this->getPermissions($path) & \OCP\PERMISSION_UPDATE);
}
public function isDeletable($path) {
if ($path == '') {
return true;
}
- return ($this->getPermissions($path) & OCP\PERMISSION_DELETE);
+ return ($this->getPermissions($path) & \OCP\PERMISSION_DELETE);
}
public function isSharable($path) {
if ($path == '') {
return false;
}
- return ($this->getPermissions($path) & OCP\PERMISSION_SHARE);
+ return ($this->getPermissions($path) & \OCP\PERMISSION_SHARE);
}
public function file_exists($path) {
if ($path == '' || $path == '/') {
return true;
} else if ($source = $this->getSourcePath($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->file_exists($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->file_exists($internalPath);
}
return false;
}
- public function filectime($path) {
- if ($path == '' || $path == '/') {
- $ctime = 0;
- if ($dh = $this->opendir($path)) {
- while (($filename = readdir($dh)) !== false) {
- $tempctime = $this->filectime($filename);
- if ($tempctime < $ctime) {
- $ctime = $tempctime;
- }
- }
- }
- return $ctime;
- } else {
- $source = $this->getSourcePath($path);
- if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->filectime($this->getInternalPath($source));
- }
- }
- }
-
public function filemtime($path) {
if ($path == '' || $path == '/') {
$mtime = 0;
@@ -275,8 +218,8 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
} else {
$source = $this->getSourcePath($path);
if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->filemtime($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->filemtime($internalPath);
}
}
}
@@ -288,9 +231,9 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
'target' => $this->sharedFolder.$path,
'source' => $source,
);
- OCP\Util::emitHook('OC_Filestorage_Shared', 'file_get_contents', $info);
- $storage = OC_Filesystem::getStorage($source);
- return $storage->file_get_contents($this->getInternalPath($source));
+ \OCP\Util::emitHook('\OC\Files\Storage\Shared', 'file_get_contents', $info);
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->file_get_contents($internalPath);
}
}
@@ -304,9 +247,9 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
'target' => $this->sharedFolder.$path,
'source' => $source,
);
- OCP\Util::emitHook('OC_Filestorage_Shared', 'file_put_contents', $info);
- $storage = OC_Filesystem::getStorage($source);
- $result = $storage->file_put_contents($this->getInternalPath($source), $data);
+ \OCP\Util::emitHook('\OC\Files\Storage\Shared', 'file_put_contents', $info);
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ $result = $storage->file_put_contents($internalPath, $data);
return $result;
}
return false;
@@ -316,8 +259,8 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
// Delete the file if DELETE permission is granted
if ($source = $this->getSourcePath($path)) {
if ($this->isDeletable($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->unlink($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->unlink($internalPath);
} else if (dirname($path) == '/' || dirname($path) == '.') {
// Unshare the file from the user if in the root of the Shared folder
if ($this->is_dir($path)) {
@@ -325,7 +268,7 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
} else {
$itemType = 'file';
}
- return OCP\Share::unshareFromSelf($itemType, $path);
+ return \OCP\Share::unshareFromSelf($itemType, $path);
}
}
return false;
@@ -340,8 +283,9 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
if (dirname($path1) == dirname($path2)) {
// Rename the file if UPDATE permission is granted
if ($this->isUpdatable($path1)) {
- $storage = OC_Filesystem::getStorage($oldSource);
- return $storage->rename($this->getInternalPath($oldSource), $this->getInternalPath($newSource));
+ list($storage, $oldInternalPath) = \OC\Files\Filesystem::resolvePath($oldSource);
+ list( , $newInternalPath) = \OC\Files\Filesystem::resolvePath($newSource);
+ return $storage->rename($oldInternalPath, $newInternalPath);
}
} else {
// Move the file if DELETE and CREATE permissions are granted
@@ -355,8 +299,9 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
return $this->unlink($path1);
}
} else {
- $storage = OC_Filesystem::getStorage($oldSource);
- return $storage->rename($this->getInternalPath($oldSource), $this->getInternalPath($newSource));
+ list($storage, $oldInternalPath) = \OC\Files\Filesystem::resolvePath($oldSource);
+ list( , $newInternalPath) = \OC\Files\Filesystem::resolvePath($newSource);
+ return $storage->rename($oldInternalPath, $newInternalPath);
}
}
}
@@ -369,7 +314,7 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
if ($this->isCreatable(dirname($path2))) {
$source = $this->fopen($path1, 'r');
$target = $this->fopen($path2, 'w');
- return OC_Helper::streamCopy($source, $target);
+ return \OC_Helper::streamCopy($source, $target);
}
return false;
}
@@ -400,9 +345,9 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
'source' => $source,
'mode' => $mode,
);
- OCP\Util::emitHook('OC_Filestorage_Shared', 'fopen', $info);
- $storage = OC_Filesystem::getStorage($source);
- return $storage->fopen($this->getInternalPath($source), $mode);
+ \OCP\Util::emitHook('\OC\Files\Storage\Shared', 'fopen', $info);
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->fopen($internalPath, $mode);
}
return false;
}
@@ -412,47 +357,88 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
return 'httpd/unix-directory';
}
if ($source = $this->getSourcePath($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->getMimeType($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->getMimeType($internalPath);
}
return false;
}
public function free_space($path) {
+ if ($path == '') {
+ return -1;
+ }
$source = $this->getSourcePath($path);
if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->free_space($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->free_space($internalPath);
}
}
public function getLocalFile($path) {
if ($source = $this->getSourcePath($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->getLocalFile($this->getInternalPath($source));
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->getLocalFile($internalPath);
}
return false;
}
public function touch($path, $mtime = null) {
if ($source = $this->getSourcePath($path)) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->touch($this->getInternalPath($source), $mtime);
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->touch($internalPath, $mtime);
}
return false;
}
public static function setup($options) {
- $user_dir = $options['user_dir'];
- OC_Filesystem::mount('OC_Filestorage_Shared', array('sharedFolder' => '/Shared'), $user_dir.'/Shared/');
+ if (\OCP\Share::getItemsSharedWith('file')) {
+ $user_dir = $options['user_dir'];
+ \OC\Files\Filesystem::mount('\OC\Files\Storage\Shared', array('sharedFolder' => '/Shared'), $user_dir.'/Shared/');
+ }
}
- /**
- * check if a file or folder has been updated since $time
- * @param int $time
- * @return bool
- */
public function hasUpdated($path, $time) {
- //TODO
+ if ($path == '') {
+ return false;
+ }
+ return $this->filemtime($path) > $time;
+ }
+
+ public function getCache($path = '') {
+ return new \OC\Files\Cache\Shared_Cache($this);
+ }
+
+ public function getScanner($path = '') {
+ return new \OC\Files\Cache\Scanner($this);
+ }
+
+ public function getPermissionsCache($path = '') {
+ return new \OC\Files\Cache\Shared_Permissions($this);
+ }
+
+ public function getWatcher($path = '') {
+ return new \OC\Files\Cache\Shared_Watcher($this);
+ }
+
+ public function getOwner($path) {
+ if ($path == '') {
+ return false;
+ }
+ $source = $this->getFile($path);
+ if ($source) {
+ return $source['uid_owner'];
+ }
return false;
}
+
+ public function getETag($path) {
+ if ($path == '') {
+ return parent::getETag($path);
+ }
+ if ($source = $this->getSourcePath($path)) {
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
+ return $storage->getETag($internalPath);
+ }
+ return null;
+ }
+
}
diff --git a/apps/files_sharing/lib/watcher.php b/apps/files_sharing/lib/watcher.php
new file mode 100644
index 00000000000..e67d1ee9086
--- /dev/null
+++ b/apps/files_sharing/lib/watcher.php
@@ -0,0 +1,51 @@
+<?php
+/**
+* ownCloud
+*
+* @author Michael Gapczynski
+* @copyright 2012 Michael Gapczynski mtgap@owncloud.com
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+namespace OC\Files\Cache;
+
+/**
+ * check the storage backends for updates and change the cache accordingly
+ */
+class Shared_Watcher extends Watcher {
+
+ /**
+ * check $path for updates
+ *
+ * @param string $path
+ */
+ public function checkUpdate($path) {
+ if ($path != '') {
+ parent::checkUpdate($path);
+ }
+ }
+
+ /**
+ * remove deleted files in $path from the cache
+ *
+ * @param string $path
+ */
+ public function cleanFolder($path) {
+ if ($path != '') {
+ parent::cleanFolder($path);
+ }
+ }
+
+} \ No newline at end of file
diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php
index 5672c78dc33..9cf45e56fb9 100644
--- a/apps/files_sharing/public.php
+++ b/apps/files_sharing/public.php
@@ -9,9 +9,10 @@ if (isset($_GET['token'])) {
unset($_GET['file']);
$qry = \OC_DB::prepare('SELECT `source` FROM `*PREFIX*sharing` WHERE `target` = ?', 1);
$filepath = $qry->execute(array($_GET['token']))->fetchOne();
- if(isset($filepath)) {
- $info = OC_FileCache_Cached::get($filepath, '');
- if(strtolower($info['mimetype']) == 'httpd/unix-directory') {
+ if (isset($filepath)) {
+ $rootView = new \OC\Files\View('');
+ $info = $rootView->getFileInfo($filepath, '');
+ if (strtolower($info['mimetype']) == 'httpd/unix-directory') {
$_GET['dir'] = $filepath;
} else {
$_GET['file'] = $filepath;
@@ -25,7 +26,7 @@ if (isset($_GET['token'])) {
function getID($path) {
// use the share table from the db to find the item source if the file was reshared because shared files
//are not stored in the file cache.
- if (substr(OC_Filesystem::getMountPoint($path), -7, 6) == "Shared") {
+ if (substr(\OC\Files\Filesystem::getMountPoint($path), -7, 6) == "Shared") {
$path_parts = explode('/', $path, 5);
$user = $path_parts[1];
$intPath = '/'.$path_parts[4];
@@ -37,16 +38,19 @@ function getID($path) {
$row = $result->fetchRow();
$fileSource = $row['item_source'];
} else {
- $fileSource = OC_Filecache::getId($path, '');
+ $rootView = new \OC\Files\View('');
+ $meta = $rootView->getFileInfo($path);
+ $fileSource = $meta['fileid'];
}
return $fileSource;
}
+
// Enf of backward compatibility
/**
* lookup file path and owner by fetching it from the fscache
- * needed becaus OC_FileCache::getPath($id, $user) already requires the user
+ * needed because OC_FileCache::getPath($id, $user) already requires the user
* @param int $id
* @return array
*/
@@ -86,41 +90,43 @@ if (isset($_GET['t'])) {
OC_Util::setupFS($fileOwner);
}
}
-} else if (isset($_GET['file']) || isset($_GET['dir'])) {
- OCP\Util::writeLog('share', 'Missing token, trying fallback file/dir links', \OCP\Util::DEBUG);
- if (isset($_GET['dir'])) {
- $type = 'folder';
- $path = $_GET['dir'];
- if(strlen($path)>1 and substr($path, -1, 1)==='/') {
- $path=substr($path, 0, -1);
- }
- $baseDir = $path;
- $dir = $baseDir;
- } else {
- $type = 'file';
- $path = $_GET['file'];
- if(strlen($path)>1 and substr($path, -1, 1)==='/') {
- $path=substr($path, 0, -1);
+} else {
+ if (isset($_GET['file']) || isset($_GET['dir'])) {
+ OCP\Util::writeLog('share', 'Missing token, trying fallback file/dir links', \OCP\Util::DEBUG);
+ if (isset($_GET['dir'])) {
+ $type = 'folder';
+ $path = $_GET['dir'];
+ if (strlen($path) > 1 and substr($path, -1, 1) === '/') {
+ $path = substr($path, 0, -1);
+ }
+ $baseDir = $path;
+ $dir = $baseDir;
+ } else {
+ $type = 'file';
+ $path = $_GET['file'];
+ if (strlen($path) > 1 and substr($path, -1, 1) === '/') {
+ $path = substr($path, 0, -1);
+ }
}
- }
- $shareOwner = substr($path, 1, strpos($path, '/', 1) - 1);
+ $shareOwner = substr($path, 1, strpos($path, '/', 1) - 1);
- if (OCP\User::userExists($shareOwner)) {
- OC_Util::setupFS($shareOwner);
- $fileSource = getId($path);
- if ($fileSource != -1 ) {
- $linkItem = OCP\Share::getItemSharedWithByLink($type, $fileSource, $shareOwner);
- $pathAndUser['path'] = $path;
- $path_parts = explode('/', $path, 5);
- $pathAndUser['user'] = $path_parts[1];
- $fileOwner = $path_parts[1];
+ if (OCP\User::userExists($shareOwner)) {
+ OC_Util::setupFS($shareOwner);
+ $fileSource = getId($path);
+ if ($fileSource != -1) {
+ $linkItem = OCP\Share::getItemSharedWithByLink($type, $fileSource, $shareOwner);
+ $pathAndUser['path'] = $path;
+ $path_parts = explode('/', $path, 5);
+ $pathAndUser['user'] = $path_parts[1];
+ $fileOwner = $path_parts[1];
+ }
}
}
}
if ($linkItem) {
if (!isset($linkItem['item_type'])) {
- OCP\Util::writeLog('share', 'No item type set for share id: '.$linkItem['id'], \OCP\Util::ERROR);
+ OCP\Util::writeLog('share', 'No item type set for share id: ' . $linkItem['id'], \OCP\Util::ERROR);
header('HTTP/1.0 404 Not Found');
$tmpl = new OCP\Template('', '404', 'guest');
$tmpl->printPage();
@@ -128,11 +134,13 @@ if ($linkItem) {
}
if (isset($linkItem['share_with'])) {
// Authenticate share_with
- $url = OCP\Util::linkToPublic('files').'&t='.$token;
+ $url = OCP\Util::linkToPublic('files') . '&t=' . $token;
if (isset($_GET['file'])) {
- $url .= '&file='.urlencode($_GET['file']);
- } else if (isset($_GET['dir'])) {
- $url .= '&dir='.urlencode($_GET['dir']);
+ $url .= '&file=' . urlencode($_GET['file']);
+ } else {
+ if (isset($_GET['dir'])) {
+ $url .= '&dir=' . urlencode($_GET['dir']);
+ }
}
if (isset($_POST['password'])) {
$password = $_POST['password'];
@@ -173,13 +181,13 @@ if ($linkItem) {
}
}
}
- $basePath = substr($pathAndUser['path'], strlen('/'.$fileOwner.'/files'));
+ $basePath = substr($pathAndUser['path'], strlen('/' . $fileOwner . '/files'));
$path = $basePath;
if (isset($_GET['path'])) {
$path .= $_GET['path'];
}
- if (!$path || !OC_Filesystem::isValidPath($path) || !OC_Filesystem::file_exists($path)) {
- OCP\Util::writeLog('share', 'Invalid path '.$path.' for share id '.$linkItem['id'], \OCP\Util::ERROR);
+ if (!$path || !\OC\Files\Filesystem::isValidPath($path) || !\OC\Files\Filesystem::file_exists($path)) {
+ OCP\Util::writeLog('share', 'Invalid path ' . $path . ' for share id ' . $linkItem['id'], \OCP\Util::ERROR);
header('HTTP/1.0 404 Not Found');
$tmpl = new OCP\Template('', '404', 'guest');
$tmpl->printPage();
@@ -189,13 +197,15 @@ if ($linkItem) {
$file = basename($path);
// Download the file
if (isset($_GET['download'])) {
- if (isset($_GET['path']) && $_GET['path'] !== '' ) {
- if ( isset($_GET['files']) ) { // download selected files
+ if (isset($_GET['path']) && $_GET['path'] !== '') {
+ if (isset($_GET['files'])) { // download selected files
OC_Files::get($path, $_GET['files'], $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
- } else if (isset($_GET['path']) && $_GET['path'] != '' ) { // download a file from a shared directory
- OC_Files::get($dir, $file, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
- } else { // download the whole shared directory
- OC_Files::get($dir, $file, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
+ } else {
+ if (isset($_GET['path']) && $_GET['path'] != '') { // download a file from a shared directory
+ OC_Files::get($dir, $file, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
+ } else { // download the whole shared directory
+ OC_Files::get($dir, $file, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
+ }
}
} else { // download a single shared file
OC_Files::get($dir, $file, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
@@ -210,7 +220,7 @@ if ($linkItem) {
$tmpl->assign('displayName', \OCP\User::getDisplayName($shareOwner));
$tmpl->assign('dir', $dir);
$tmpl->assign('filename', $file);
- $tmpl->assign('mimetype', OC_Filesystem::getMimeType($path));
+ $tmpl->assign('mimetype', \OC\Files\Filesystem::getMimeType($path));
if (isset($_GET['path'])) {
$getPath = $_GET['path'];
} else {
@@ -221,7 +231,7 @@ if ($linkItem) {
.(isset($_GET['dir'])?'&dir='.$_GET['dir']:'')
.(isset($_GET['file'])?'&file='.$_GET['file']:'');
// Show file list
- if (OC_Filesystem::is_dir($path)) {
+ if (\OC\Files\Filesystem::is_dir($path)) {
OCP\Util::addStyle('files', 'files');
OCP\Util::addScript('files', 'files');
OCP\Util::addScript('files', 'filelist');
@@ -232,9 +242,9 @@ if ($linkItem) {
if ($i['type'] == 'file') {
$fileinfo = pathinfo($i['name']);
$i['basename'] = $fileinfo['filename'];
- $i['extension'] = isset($fileinfo['extension']) ? ('.'.$fileinfo['extension']) : '';
+ $i['extension'] = isset($fileinfo['extension']) ? ('.' . $fileinfo['extension']) : '';
}
- $i['directory'] = '/'.substr($i['directory'], $rootLength);
+ $i['directory'] = '/' . substr($i['directory'], $rootLength);
if ($i['directory'] == '/') {
$i['directory'] = '';
}
@@ -251,9 +261,137 @@ if ($linkItem) {
//add subdir breadcrumbs
foreach (explode('/', urldecode($getPath)) as $i) {
if ($i != '') {
- $pathtohere .= '/'.$i;
+ $pathtohere .= '/' . $i;
$breadcrumb[] = array('dir' => $pathtohere, 'name' => $i);
+ $path = $linkItem['path'];
+ if (isset($_GET['path'])) {
+ $path .= $_GET['path'];
+ $dir .= $_GET['path'];
+ if (!\OC\Files\Filesystem::file_exists($path)) {
+ header('HTTP/1.0 404 Not Found');
+ $tmpl = new OCP\Template('', '404', 'guest');
+ $tmpl->printPage();
+ exit();
+ }
+ }
+
+ $list = new OCP\Template('files', 'part.list', '');
+ $list->assign('files', $files, false);
+ $list->assign('publicListView', true);
+ $list->assign('baseURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&path=', false);
+ $list->assign('downloadURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download&path=', false);
+ $breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '');
+ $breadcrumbNav->assign('breadcrumb', $breadcrumb, false);
+ $breadcrumbNav->assign('baseURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&path=', false);
+ $folder = new OCP\Template('files', 'index', '');
+ $folder->assign('fileList', $list->fetchPage(), false);
+ $folder->assign('breadcrumb', $breadcrumbNav->fetchPage(), false);
+ $folder->assign('isCreatable', false);
+ $folder->assign('permissions', 0);
+ $folder->assign('files', $files);
+ $folder->assign('uploadMaxFilesize', 0);
+ $folder->assign('uploadMaxHumanFilesize', 0);
+ $folder->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true)));
+ $tmpl->assign('folder', $folder->fetchPage(), false);
+ $tmpl->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true)));
+ $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download&path=' . urlencode($getPath));
+ } else {
+ // Show file preview if viewer is available
+ if ($type == 'file') {
+ $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download');
+ } else {
+ OCP\Util::addStyle('files_sharing', 'public');
+ OCP\Util::addScript('files_sharing', 'public');
+ OCP\Util::addScript('files', 'fileactions');
+ $tmpl = new OCP\Template('files_sharing', 'public', 'base');
+ $tmpl->assign('owner', $uidOwner);
+ // Show file list
+ if (\OC\Files\Filesystem::is_dir($path)) {
+ OCP\Util::addStyle('files', 'files');
+ OCP\Util::addScript('files', 'files');
+ OCP\Util::addScript('files', 'filelist');
+ $files = array();
+ $rootLength = strlen($baseDir) + 1;
+ foreach (OC_Files::getDirectoryContent($path) as $i) {
+ $i['date'] = OCP\Util::formatDate($i['mtime']);
+ if ($i['type'] == 'file') {
+ $fileinfo = pathinfo($i['name']);
+ $i['basename'] = $fileinfo['filename'];
+ $i['extension'] = isset($fileinfo['extension']) ? ('.' . $fileinfo['extension']) : '';
+ }
+ $i['directory'] = '/' . substr('/' . $uidOwner . '/files' . $i['directory'], $rootLength);
+ if ($i['directory'] == '/') {
+ $i['directory'] = '';
+ }
+ $i['permissions'] = OCP\PERMISSION_READ;
+ $files[] = $i;
+ }
+ // Make breadcrumb
+ $breadcrumb = array();
+ $pathtohere = '';
+ $count = 1;
+ foreach (explode('/', $dir) as $i) {
+ if ($i != '') {
+ if ($i != $baseDir) {
+ $pathtohere .= '/' . $i;
+ }
+ if (strlen($pathtohere) < strlen($_GET['dir'])) {
+ continue;
+ }
+ $breadcrumb[] = array('dir' => str_replace($_GET['dir'], "", $pathtohere, $count), 'name' => $i);
+ }
+ }
+ $list = new OCP\Template('files', 'part.list', '');
+ $list->assign('files', $files, false);
+ $list->assign('publicListView', true);
+ $list->assign('baseURL', OCP\Util::linkToPublic('files') . '&dir=' . urlencode($_GET['dir']) . '&path=', false);
+ $list->assign('downloadURL', OCP\Util::linkToPublic('files') . '&download&dir=' . urlencode($_GET['dir']) . '&path=', false);
+ $breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '');
+ $breadcrumbNav->assign('breadcrumb', $breadcrumb, false);
+ $breadcrumbNav->assign('baseURL', OCP\Util::linkToPublic('files') . '&dir=' . urlencode($_GET['dir']) . '&path=', false);
+ $folder = new OCP\Template('files', 'index', '');
+ $folder->assign('fileList', $list->fetchPage(), false);
+ $folder->assign('breadcrumb', $breadcrumbNav->fetchPage(), false);
+ $folder->assign('dir', basename($dir));
+ $folder->assign('isCreatable', false);
+ $folder->assign('permissions', 0);
+ $folder->assign('files', $files);
+ $folder->assign('uploadMaxFilesize', 0);
+ $folder->assign('uploadMaxHumanFilesize', 0);
+ $folder->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true)));
+ $tmpl->assign('folder', $folder->fetchPage(), false);
+ $tmpl->assign('uidOwner', $uidOwner);
+ $tmpl->assign('dir', basename($dir));
+ $tmpl->assign('filename', basename($path));
+ $tmpl->assign('mimetype', \OC\Files\Filesystem::getMimeType($path));
+ $tmpl->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true)));
+ if (isset($_GET['path'])) {
+ $getPath = $_GET['path'];
+ } else {
+ $getPath = '';
+ }
+ $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . '&download&dir=' . urlencode($_GET['dir']) . '&path=' . urlencode($getPath), false);
+ } else {
+ // Show file preview if viewer is available
+ $tmpl->assign('uidOwner', $uidOwner);
+ $tmpl->assign('dir', dirname($path));
+ $tmpl->assign('filename', basename($path));
+ $tmpl->assign('mimetype', \OC\Files\Filesystem::getMimeType($path));
+ if ($type == 'file') {
+ $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . '&file=' . urlencode($_GET['file']) . '&download', false);
+ } else {
+ if (isset($_GET['path'])) {
+ $getPath = $_GET['path'];
+ } else {
+ $getPath = '';
+ }
+ $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . '&download&dir=' . urlencode($_GET['dir']) . '&path=' . urlencode($getPath), false);
+ }
+ }
+ $tmpl->printPage();
+ }
}
+ $tmpl->printPage();
}
$list = new OCP\Template('files', 'part.list', '');
@@ -279,21 +417,11 @@ if ($linkItem) {
$tmpl->assign('downloadURL', OCP\Util::linkToPublic('files')
.$urlLinkIdentifiers.'&download&path='.urlencode($getPath));
} else {
- // Show file preview if viewer is available
- if ($type == 'file') {
- $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files')
- .$urlLinkIdentifiers.'&download');
- } else {
- $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files')
- .$urlLinkIdentifiers.'&download&path='.urlencode($getPath));
- }
+ OCP\Util::writeLog('share', 'could not resolve linkItem', \OCP\Util::DEBUG);
}
- $tmpl->printPage();
}
- exit();
-} else {
- OCP\Util::writeLog('share', 'could not resolve linkItem', \OCP\Util::DEBUG);
}
header('HTTP/1.0 404 Not Found');
$tmpl = new OCP\Template('', '404', 'guest');
$tmpl->printPage();
+
diff --git a/apps/files_trashbin/ajax/undelete.php b/apps/files_trashbin/ajax/undelete.php
new file mode 100644
index 00000000000..a7bb5b9de2d
--- /dev/null
+++ b/apps/files_trashbin/ajax/undelete.php
@@ -0,0 +1,45 @@
+<?php
+
+if(!OCP\User::isLoggedIn()) {
+ exit;
+}
+
+$files = $_REQUEST['files'];
+$dirlisting = $_REQUEST['dirlisting'];
+$list = explode(';', $files);
+
+$error = array();
+$success = array();
+
+$i = 0;
+foreach ($list as $file) {
+ if ( $dirlisting=='0') {
+ $delimiter = strrpos($file, '.d');
+ $filename = substr($file, 0, $delimiter);
+ $timestamp = substr($file, $delimiter+2);
+ } else {
+ $path_parts = pathinfo($file);
+ $filename = $path_parts['basename'];
+ $timestamp = null;
+ }
+
+ if ( !OCA_Trash\Trashbin::restore($file, $filename, $timestamp) ) {
+ $error[] = $filename;
+ } else {
+ $success[$i]['filename'] = $file;
+ $success[$i]['timestamp'] = $timestamp;
+ $i++;
+ }
+
+}
+
+if ( $error ) {
+ $filelist = '';
+ foreach ( $error as $e ) {
+ $filelist .= $e.', ';
+ }
+ OCP\JSON::error(array("data" => array("message" => "Couldn't restore ".rtrim($filelist,', '), "success" => $success, "error" => $error)));
+} else {
+ OCP\JSON::success(array("data" => array("success" => $success)));
+}
+
diff --git a/apps/files_trashbin/appinfo/app.php b/apps/files_trashbin/appinfo/app.php
new file mode 100644
index 00000000000..3741d42c781
--- /dev/null
+++ b/apps/files_trashbin/appinfo/app.php
@@ -0,0 +1,7 @@
+<?php
+
+OC::$CLASSPATH['OCA_Trash\Hooks'] = 'apps/files_trashbin/lib/hooks.php';
+OC::$CLASSPATH['OCA_Trash\Trashbin'] = 'apps/files_trashbin/lib/trash.php';
+
+
+OCP\Util::connectHook('OC_Filesystem', 'delete', "OCA_Trash\Hooks", "remove_hook");
diff --git a/apps/files_trashbin/appinfo/database.xml b/apps/files_trashbin/appinfo/database.xml
new file mode 100644
index 00000000000..1144a1c9a97
--- /dev/null
+++ b/apps/files_trashbin/appinfo/database.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<database>
+
+ <name>*dbname*</name>
+ <create>true</create>
+ <overwrite>false</overwrite>
+
+ <charset>utf8</charset>
+
+ <table>
+
+ <name>*dbprefix*files_trash</name>
+
+ <declaration>
+
+ <field>
+ <name>id</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>50</length>
+ </field>
+
+ <field>
+ <name>user</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>50</length>
+ </field>
+
+ <field>
+ <name>timestamp</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>12</length>
+ </field>
+
+ <field>
+ <name>location</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>200</length>
+ </field>
+
+ <field>
+ <name>type</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>4</length>
+ </field>
+
+ <field>
+ <name>mime</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>30</length>
+ </field>
+
+ <index>
+ <name>id_index</name>
+ <field>
+ <name>id</name>
+ <sorting>ascending</sorting>
+ </field>
+ </index>
+
+ <index>
+ <name>timestamp_index</name>
+ <field>
+ <name>timestamp</name>
+ <sorting>ascending</sorting>
+ </field>
+ </index>
+
+ <index>
+ <name>user_index</name>
+ <field>
+ <name>user</name>
+ <sorting>ascending</sorting>
+ </field>
+ </index>
+
+ </declaration>
+
+ </table>
+
+</database>
diff --git a/apps/files_trashbin/appinfo/info.xml b/apps/files_trashbin/appinfo/info.xml
new file mode 100644
index 00000000000..9b486126361
--- /dev/null
+++ b/apps/files_trashbin/appinfo/info.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<info>
+ <id>files_trashbin</id>
+ <name>Trash</name>
+ <description>Trash bin</description>
+ <licence>AGPL</licence>
+ <author>Bjoern Schiessle</author>
+ <shipped>true</shipped>
+ <require>4.9</require>
+ <default_enable/>
+ <types>
+ <filesystem/>
+ </types>
+</info>
diff --git a/apps/files_trashbin/appinfo/version b/apps/files_trashbin/appinfo/version
new file mode 100644
index 00000000000..49d59571fbf
--- /dev/null
+++ b/apps/files_trashbin/appinfo/version
@@ -0,0 +1 @@
+0.1
diff --git a/apps/files_trashbin/download.php b/apps/files_trashbin/download.php
new file mode 100644
index 00000000000..665697dca5f
--- /dev/null
+++ b/apps/files_trashbin/download.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+* ownCloud - trash bin
+*
+* @author Bjoern Schiessle
+* @copyright 2013 Bjoern Schiessle schiessle@owncloud.com
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+// Check if we are a user
+OCP\User::checkLoggedIn();
+
+$filename = $_GET["file"];
+
+$view = new OC_FilesystemView('/'.\OCP\User::getUser().'/files_trashbin');
+
+if(!$view->file_exists($filename)) {
+ header("HTTP/1.0 404 Not Found");
+ $tmpl = new OCP\Template( '', '404', 'guest' );
+ $tmpl->assign('file', $filename);
+ $tmpl->printPage();
+ exit;
+}
+
+$ftype=$view->getMimeType( $filename );
+
+header('Content-Type:'.$ftype);if ( preg_match( "/MSIE/", $_SERVER["HTTP_USER_AGENT"] ) ) {
+ header( 'Content-Disposition: attachment; filename="' . rawurlencode( basename($filename) ) . '"' );
+} else {
+ header( 'Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode( basename($filename) )
+ . '; filename="' . rawurlencode( basename($filename) ) . '"' );
+}
+OCP\Response::disableCaching();
+header('Content-Length: '. $view->filesize($filename));
+
+OC_Util::obEnd();
+$view->readfile( $filename );
diff --git a/apps/files_trashbin/index.php b/apps/files_trashbin/index.php
new file mode 100644
index 00000000000..46a601cfdde
--- /dev/null
+++ b/apps/files_trashbin/index.php
@@ -0,0 +1,100 @@
+<?php
+
+// Check if we are a user
+OCP\User::checkLoggedIn();
+
+OCP\Util::addScript('files_trashbin', 'trash');
+OCP\Util::addScript('files_trashbin', 'disableDefaultActions');
+OCP\Util::addScript('files', 'fileactions');
+$tmpl = new OCP\Template('files_trashbin', 'index', 'user');
+
+$user = \OCP\User::getUser();
+$view = new OC_Filesystemview('/'.$user.'/files_trashbin');
+
+OCP\Util::addStyle('files', 'files');
+OCP\Util::addScript('files', 'filelist');
+
+$dir = isset($_GET['dir']) ? stripslashes($_GET['dir']) : '';
+
+if ($dir) {
+ $dirlisting = true;
+ $view = new \OC_FilesystemView('/'.\OCP\User::getUser().'/files_trashbin');
+ $fullpath = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath($dir);
+ $dirContent = opendir($fullpath);
+ $i = 0;
+ while($entryName = readdir($dirContent)) {
+ if ( $entryName != '.' && $entryName != '..' ) {
+ $pos = strpos($dir.'/', '/', 1);
+ $tmp = substr($dir, 0, $pos);
+ $pos = strrpos($tmp, '.d');
+ $timestamp = substr($tmp,$pos+2);
+ $result[] = array(
+ 'id' => $entryName,
+ 'timestamp' => $timestamp,
+ 'mime' => $view->getMimeType($dir.'/'.$entryName),
+ 'type' => $view->is_dir($dir.'/'.$entryName) ? 'dir' : 'file',
+ 'location' => $dir,
+ );
+ }
+ }
+ closedir($fullpath);
+
+} else {
+ $dirlisting = false;
+ $query = \OC_DB::prepare('SELECT id,location,timestamp,type,mime FROM *PREFIX*files_trash WHERE user=?');
+ $result = $query->execute(array($user))->fetchAll();
+}
+
+$files = array();
+foreach ($result as $r) {
+ $i = array();
+ $i['name'] = $r['id'];
+ $i['date'] = OCP\Util::formatDate($r['timestamp']);
+ $i['timestamp'] = $r['timestamp'];
+ $i['mimetype'] = $r['mime'];
+ $i['type'] = $r['type'];
+ if ($i['type'] == 'file') {
+ $fileinfo = pathinfo($r['id']);
+ $i['basename'] = $fileinfo['filename'];
+ $i['extension'] = isset($fileinfo['extension']) ? ('.'.$fileinfo['extension']) : '';
+ }
+ $i['directory'] = $r['location'];
+ if ($i['directory'] == '/') {
+ $i['directory'] = '';
+ }
+ $i['permissions'] = OCP\PERMISSION_READ;
+ $files[] = $i;
+}
+
+// Make breadcrumb
+$breadcrumb = array(array('dir' => '', 'name' => 'Trash'));
+$pathtohere = '';
+foreach (explode('/', $dir) as $i) {
+ if ($i != '') {
+ if ( preg_match('/^(.+)\.d[0-9]+$/', $i, $match) ) {
+ $name = $match[1];
+ } else {
+ $name = $i;
+ }
+ $pathtohere .= '/' . $i;
+ $breadcrumb[] = array('dir' => $pathtohere, 'name' => $name);
+ }
+}
+
+$breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '');
+$breadcrumbNav->assign('breadcrumb', $breadcrumb, false);
+$breadcrumbNav->assign('baseURL', OCP\Util::linkTo('files_trashbin', 'index.php') . '?dir=', false);
+
+$list = new OCP\Template('files_trashbin', 'part.list', '');
+$list->assign('files', $files, false);
+$list->assign('baseURL', OCP\Util::linkTo('files_trashbin', 'index.php'). '?dir='.$dir, false);
+$list->assign('downloadURL', OCP\Util::linkTo('files_trashbin', 'download.php') . '?file='.$dir, false);
+$list->assign('disableSharing', true);
+$list->assign('dirlisting', $dirlisting);
+$list->assign('disableDownloadActions', true);
+$tmpl->assign('breadcrumb', $breadcrumbNav->fetchPage(), false);
+$tmpl->assign('fileList', $list->fetchPage(), false);
+$tmpl->assign('files', $files);
+$tmpl->assign('dir', OC_Filesystem::normalizePath($view->getAbsolutePath()));
+
+$tmpl->printPage();
diff --git a/apps/files_trashbin/js/disableDefaultActions.js b/apps/files_trashbin/js/disableDefaultActions.js
new file mode 100644
index 00000000000..56b95407dd3
--- /dev/null
+++ b/apps/files_trashbin/js/disableDefaultActions.js
@@ -0,0 +1,3 @@
+/* disable download and sharing actions */
+var disableDownloadActions = true;
+var disableSharing = true;
diff --git a/apps/files_trashbin/js/trash.js b/apps/files_trashbin/js/trash.js
new file mode 100644
index 00000000000..3ad0ab04fb9
--- /dev/null
+++ b/apps/files_trashbin/js/trash.js
@@ -0,0 +1,158 @@
+
+$(document).ready(function() {
+
+ if (typeof FileActions !== 'undefined') {
+ FileActions.register('all', 'Restore', OC.PERMISSION_READ, OC.imagePath('core', 'actions/undelete.png'), function(filename) {
+ var tr=$('tr').filterAttr('data-file', filename);
+ var spinner = '<img class="move2trash" title="'+t('files_trashbin', 'perform restore operation')+'" src="'+ OC.imagePath('core', 'loader.gif') +'"></a>';
+ var undeleteAction = $('tr').filterAttr('data-file',filename).children("td.date");
+ undeleteAction[0].innerHTML = undeleteAction[0].innerHTML+spinner;
+ $.post(OC.filePath('files_trashbin','ajax','undelete.php'),
+ {files:tr.attr('data-file'), dirlisting:tr.attr('data-dirlisting') },
+ function(result){
+ for (var i = 0; i < result.data.success.length; i++) {
+ var row = document.getElementById(result.data.success[i].filename);
+ row.parentNode.removeChild(row);
+ }
+ if (result.status != 'success') {
+ OC.dialogs.alert(result.data.message, 'Error');
+ }
+ });
+
+ });
+ };
+
+ // Sets the select_all checkbox behaviour :
+ $('#select_all').click(function() {
+ if($(this).attr('checked')){
+ // Check all
+ $('td.filename input:checkbox').attr('checked', true);
+ $('td.filename input:checkbox').parent().parent().addClass('selected');
+ }else{
+ // Uncheck all
+ $('td.filename input:checkbox').attr('checked', false);
+ $('td.filename input:checkbox').parent().parent().removeClass('selected');
+ }
+ processSelection();
+ });
+
+ $('td.filename input:checkbox').live('change',function(event) {
+ if (event.shiftKey) {
+ var last = $(lastChecked).parent().parent().prevAll().length;
+ var first = $(this).parent().parent().prevAll().length;
+ var start = Math.min(first, last);
+ var end = Math.max(first, last);
+ var rows = $(this).parent().parent().parent().children('tr');
+ for (var i = start; i < end; i++) {
+ $(rows).each(function(index) {
+ if (index == i) {
+ var checkbox = $(this).children().children('input:checkbox');
+ $(checkbox).attr('checked', 'checked');
+ $(checkbox).parent().parent().addClass('selected');
+ }
+ });
+ }
+ }
+ var selectedCount=$('td.filename input:checkbox:checked').length;
+ $(this).parent().parent().toggleClass('selected');
+ if(!$(this).attr('checked')){
+ $('#select_all').attr('checked',false);
+ }else{
+ if(selectedCount==$('td.filename input:checkbox').length){
+ $('#select_all').attr('checked',true);
+ }
+ }
+ processSelection();
+ });
+
+ $('.undelete').click('click',function(event) {
+ var spinner = '<img class="move2trash" title="'+t('files_trashbin', 'perform undelete operation')+'" src="'+ OC.imagePath('core', 'loader.gif') +'"></a>';
+ var files=getSelectedFiles('file');
+ var fileslist=files.join(';');
+ var dirlisting=getSelectedFiles('dirlisting')[0];
+
+ for (var i in files) {
+ var undeleteAction = $('tr').filterAttr('data-file',files[i]).children("td.date");
+ undeleteAction[0].innerHTML = undeleteAction[0].innerHTML+spinner;
+ }
+
+ $.post(OC.filePath('files_trashbin','ajax','undelete.php'),
+ {files:fileslist, dirlisting:dirlisting},
+ function(result){
+ for (var i = 0; i < result.data.success.length; i++) {
+ var row = document.getElementById(result.data.success[i].filename);
+ row.parentNode.removeChild(row);
+ }
+ if (result.status != 'success') {
+ OC.dialogs.alert(result.data.message, 'Error');
+ }
+ });
+ });
+
+
+});
+
+function processSelection(){
+ var selected=getSelectedFiles();
+ var selectedFiles=selected.filter(function(el){return el.type=='file'});
+ var selectedFolders=selected.filter(function(el){return el.type=='dir'});
+ if(selectedFiles.length==0 && selectedFolders.length==0) {
+ $('#headerName>span.name').text(t('files','Name'));
+ $('#modified').text(t('files','Deleted'));
+ $('table').removeClass('multiselect');
+ $('.selectedActions').hide();
+ }
+ else {
+ $('.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});
+ }
+ 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});
+ }
+ }
+ $('#headerName>span.name').text(selection);
+ $('#modified').text('');
+ $('table').addClass('multiselect');
+ }
+}
+
+/**
+ * @brief get a list of selected files
+ * @param string property (option) the property of the file requested
+ * @return array
+ *
+ * possible values for property: name, mime, size and type
+ * if property is set, an array with that property for each file is returnd
+ * if it's ommited an array of objects with all properties is returned
+ */
+function getSelectedFiles(property){
+ var elements=$('td.filename input:checkbox:checked').parent().parent();
+ var files=[];
+ elements.each(function(i,element){
+ var file={
+ name:$(element).attr('data-filename'),
+ file:$(element).attr('data-file'),
+ timestamp:$(element).attr('data-timestamp'),
+ type:$(element).attr('data-type'),
+ dirlisting:$(element).attr('data-dirlisting')
+ };
+ if(property){
+ files.push(file[property]);
+ }else{
+ files.push(file);
+ }
+ });
+ return files;
+} \ No newline at end of file
diff --git a/apps/files_trashbin/l10n/.gitkeep b/apps/files_trashbin/l10n/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/apps/files_trashbin/l10n/.gitkeep
diff --git a/apps/files_trashbin/lib/hooks.php b/apps/files_trashbin/lib/hooks.php
new file mode 100644
index 00000000000..d3bee105b51
--- /dev/null
+++ b/apps/files_trashbin/lib/hooks.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * ownCloud - trash bin
+ *
+ * @author Bjoern Schiessle
+ * @copyright 2013 Bjoern Schiessle schiessle@owncloud.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+/**
+ * This class contains all hooks.
+ */
+
+namespace OCA_Trash;
+
+class Hooks {
+
+ /**
+ * @brief Copy files to trash bin
+ * @param array
+ *
+ * This function is connected to the delete signal of OC_Filesystem
+ * to copy the file to the trash bin
+ */
+ public static function remove_hook($params) {
+
+ if ( \OCP\App::isEnabled('files_trashbin') ) {
+ $path = $params['path'];
+ Trashbin::move2trash($path);
+ }
+ }
+}
diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php
new file mode 100644
index 00000000000..a7eff3d44e0
--- /dev/null
+++ b/apps/files_trashbin/lib/trash.php
@@ -0,0 +1,264 @@
+<?php
+/**
+ * ownCloud - trash bin
+ *
+ * @author Bjoern Schiessle
+ * @copyright 2013 Bjoern Schiessle schiessle@owncloud.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA_Trash;
+
+class Trashbin {
+
+ const DEFAULT_RETENTION_OBLIGATION=180; // how long do we keep files in the trash bin if no other value is defined in the config file (unit: days)
+ /**
+ * move file to the trash bin
+ *
+ * @param $file_path path to the deleted file/directory relative to the files root directory
+ */
+ public static function move2trash($file_path) {
+ $user = \OCP\User::getUser();
+ $view = new \OC_FilesystemView('/'. $user);
+ if (!$view->is_dir('files_trashbin')) {
+ $view->mkdir('files_trashbin');
+ $view->mkdir("versions_trashbin");
+ }
+
+ $path_parts = pathinfo($file_path);
+
+ $deleted = $path_parts['basename'];
+ $location = $path_parts['dirname'];
+ $timestamp = time();
+ $mime = $view->getMimeType('files'.$file_path);
+
+ if ( $view->is_dir('files'.$file_path) ) {
+ $type = 'dir';
+ } else {
+ $type = 'file';
+ }
+
+ self::copy_recursive($file_path, 'files_trashbin/'.$deleted.'.d'.$timestamp, $view);
+
+ if ( $view->file_exists('files_trashbin/'.$deleted.'.d'.$timestamp) ) {
+ $query = \OC_DB::prepare("INSERT INTO *PREFIX*files_trash (id,timestamp,location,type,mime,user) VALUES (?,?,?,?,?,?)");
+ $result = $query->execute(array($deleted, $timestamp, $location, $type, $mime, $user));
+ if ( !$result ) { // if file couldn't be added to the database than also don't store it in the trash bin.
+ $view->deleteAll('files_trashbin/'.$deleted.'.d'.$timestamp);
+ \OC_Log::write('files_trashbin', 'trash bin database couldn\'t be updated', \OC_log::ERROR);
+ return;
+ }
+
+ if ( \OCP\App::isEnabled('files_versions') ) {
+ if ( $view->is_dir('files_versions'.$file_path) ) {
+ $view->rename('files_versions'.$file_path, 'versions_trashbin/'. $deleted.'.d'.$timestamp);
+ } else if ( $versions = \OCA_Versions\Storage::getVersions($file_path) ) {
+ foreach ($versions as $v) {
+ $view->rename('files_versions'.$v['path'].'.v'.$v['version'], 'versions_trashbin/'. $deleted.'.v'.$v['version'].'.d'.$timestamp);
+ }
+ }
+ }
+ } else {
+ \OC_Log::write('files_trashbin', 'Couldn\'t move '.$file_path.' to the trash bin' , \OC_log::ERROR);
+ }
+
+ self::expire();
+ }
+
+
+ /**
+ * restore files from trash bin
+ * @param $file path to the deleted file
+ * @param $filename name of the file
+ * @param $timestamp time when the file was deleted
+ */
+ public static function restore($file, $filename, $timestamp) {
+
+ $user = \OCP\User::getUser();
+ $view = new \OC_FilesystemView('/'.$user);
+
+ if ( $timestamp ) {
+ $query = \OC_DB::prepare('SELECT location,type FROM *PREFIX*files_trash WHERE user=? AND id=? AND timestamp=?');
+ $result = $query->execute(array($user,$filename,$timestamp))->fetchAll();
+ if ( count($result) != 1 ) {
+ \OC_Log::write('files_trashbin', 'trash bin database inconsistent!', \OC_Log::ERROR);
+ return false;
+ }
+
+ // if location no longer exists, restore file in the root directory
+ $location = $result[0]['location'];
+ if ( $result[0]['location'] != '/' &&
+ (!$view->is_dir('files'.$result[0]['location']) ||
+ !$view->isUpdatable('files'.$result[0]['location'])) ) {
+ $location = '';
+ }
+ } else {
+ $path_parts = pathinfo($filename);
+ $result[] = array(
+ 'location' => $path_parts['dirname'],
+ 'type' => $view->is_dir('/files_trashbin/'.$file) ? 'dir' : 'files',
+ );
+ $location = '';
+ }
+
+ $source = \OC_Filesystem::normalizePath('files_trashbin/'.$file);
+ $target = \OC_Filesystem::normalizePath('files/'.$location.'/'.$filename);
+
+ // we need a extension in case a file/dir with the same name already exists
+ $ext = self::getUniqueExtension($location, $filename, $view);
+ $mtime = $view->filemtime($source);
+ if( $view->rename($source, $target.$ext) ) {
+ $view->touch($target.$ext, $mtime);
+ // if versioning app is enabled, copy versions from the trash bin back to the original location
+ if ( \OCP\App::isEnabled('files_versions') ) {
+ if ( $result[0]['type'] == 'dir' ) {
+ $view->rename(\OC_Filesystem::normalizePath('versions_trashbin/'. $file), \OC_Filesystem::normalizePath('files_versions/'.$location.'/'.$filename.$ext));
+ } else if ( $versions = self::getVersionsFromTrash($file, $timestamp) ) {
+ foreach ($versions as $v) {
+ if ($timestamp ) {
+ $view->rename('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v);
+ } else {
+ $view->rename('versions_trashbin/'.$file.'.v'.$v, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v);
+ }
+ }
+ }
+ }
+
+ if ( $timestamp ) {
+ $query = \OC_DB::prepare('DELETE FROM *PREFIX*files_trash WHERE user=? AND id=? AND timestamp=?');
+ $query->execute(array($user,$filename,$timestamp));
+ }
+
+ return true;
+ } else {
+ \OC_Log::write('files_trashbin', 'Couldn\'t restore file from trash bin, '.$filename , \OC_log::ERROR);
+ }
+
+ return false;
+ }
+
+ /**
+ * clean up the trash bin
+ */
+ private static function expire() {
+
+ $view = new \OC_FilesystemView('/'.\OCP\User::getUser());
+ $user = \OCP\User::getUser();
+
+ $query = \OC_DB::prepare('SELECT location,type,id,timestamp FROM *PREFIX*files_trash WHERE user=?');
+ $result = $query->execute(array($user))->fetchAll();
+
+ $retention_obligation = \OC_Config::getValue('trashbin_retention_obligation', self::DEFAULT_RETENTION_OBLIGATION);
+
+ $limit = time() - ($retention_obligation * 86400);
+
+ foreach ( $result as $r ) {
+ $timestamp = $r['timestamp'];
+ $filename = $r['id'];
+ if ( $r['timestamp'] < $limit ) {
+ $view->unlink('files_trashbin/'.$filename.'.d'.$timestamp);
+ if ($r['type'] == 'dir') {
+ $view->unlink('versions_trashbin/'.$filename.'.d'.$timestamp);
+ } else if ( $versions = self::getVersionsFromTrash($filename, $timestamp) ) {
+ foreach ($versions as $v) {
+ $view->unlink('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp);
+ }
+ }
+ }
+ }
+
+ $query = \OC_DB::prepare('DELETE FROM *PREFIX*files_trash WHERE user=? AND timestamp<?');
+ $query->execute(array($user,$limit));
+ }
+
+ /**
+ * recursive copy to copy a whole directory
+ *
+ * @param $source source path, relative to the users files directory
+ * @param $destination destination path relative to the users root directoy
+ * @param $view file view for the users root directory
+ */
+ private static function copy_recursive( $source, $destination, $view ) {
+ if ( $view->is_dir( 'files'.$source ) ) {
+ $view->mkdir( $destination );
+ $view->touch($destination, $view->filemtime('files'.$source));
+ foreach ( \OC_Files::getDirectoryContent($source) as $i ) {
+ $pathDir = $source.'/'.$i['name'];
+ if ( $view->is_dir('files'.$pathDir) ) {
+ self::copy_recursive($pathDir, $destination.'/'.$i['name'], $view);
+ } else {
+ $view->copy( 'files'.$pathDir, $destination . '/' . $i['name'] );
+ $view->touch($destination . '/' . $i['name'], $view->filemtime('files'.$pathDir));
+ }
+ }
+ } else {
+ $view->copy( 'files'.$source, $destination );
+ $view->touch($destination, $view->filemtime('files'.$source));
+ }
+ }
+
+ /**
+ * find all versions which belong to the file we want to restore
+ * @param $filename name of the file which should be restored
+ * @param $timestamp timestamp when the file was deleted
+ */
+ private static function getVersionsFromTrash($filename, $timestamp) {
+ $view = new \OC_FilesystemView('/'.\OCP\User::getUser().'/versions_trashbin');
+ $versionsName = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath($filename);
+ $versions = array();
+
+ if ($timestamp ) {
+ // fetch for old versions
+ $matches = glob( $versionsName.'.v*.d'.$timestamp );
+ $offset = -strlen($timestamp)-2;
+ } else {
+ $matches = glob( $versionsName.'.v*' );
+ }
+
+ foreach( $matches as $ma ) {
+ if ( $timestamp ) {
+ $parts = explode( '.v', substr($ma, 0, $offset) );
+ $versions[] = ( end( $parts ) );
+ } else {
+ $parts = explode( '.v', $ma );
+ $versions[] = ( end( $parts ) );
+ }
+ }
+ return $versions;
+ }
+
+ /**
+ * find unique extension for restored file if a file with the same name already exists
+ * @param $location where the file should be restored
+ * @param $filename name of the file
+ * @param $view filesystem view relative to users root directory
+ * @return string with unique extension
+ */
+ private static function getUniqueExtension($location, $filename, $view) {
+ $ext = '';
+ if ( $view->file_exists('files'.$location.'/'.$filename) ) {
+ $tmpext = '.restored';
+ $ext = $tmpext;
+ $i = 1;
+ while ( $view->file_exists('files'.$location.'/'.$filename.$ext) ) {
+ $ext = $tmpext.$i;
+ $i++;
+ }
+ }
+ return $ext;
+ }
+
+}
diff --git a/apps/files_trashbin/templates/index.php b/apps/files_trashbin/templates/index.php
new file mode 100644
index 00000000000..c3e51b4becd
--- /dev/null
+++ b/apps/files_trashbin/templates/index.php
@@ -0,0 +1,34 @@
+<!--[if IE 8]><style>input[type="checkbox"]{padding:0;}table td{position:static !important;}</style><![endif]-->
+<div id="controls">
+ <?php echo($_['breadcrumb']); ?>
+ <div id="file_action_panel"></div>
+</div>
+<div id='notification'></div>
+
+<?php if (isset($_['files']) && count($_['files'])==0):?>
+ <div id="emptyfolder"><?php echo $l->t('Nothing in here. Your trash bin is empty!')?></div>
+<?php endif; ?>
+
+<table>
+ <thead>
+ <tr>
+ <th id='headerName'>
+ <input type="checkbox" id="select_all" />
+ <span class='name'><?php echo $l->t( 'Name' ); ?></span>
+ <span class='selectedActions'>
+ <a href="" class="undelete">
+ <img class="svg" alt="<?php echo $l->t( 'Restore' ); ?>"
+ src="<?php echo OCP\image_path("core", "actions/undelete.png"); ?>" />
+ <?php echo $l->t('Restore')?>
+ </a>
+ </span>
+ </th>
+ <th id="headerDate">
+ <span id="modified"><?php echo $l->t( 'Deleted' ); ?></span>
+ </th>
+ </tr>
+ </thead>
+ <tbody id="fileList">
+ <?php echo($_['fileList']); ?>
+ </tbody>
+</table>
diff --git a/apps/files_trashbin/templates/part.list.php b/apps/files_trashbin/templates/part.list.php
new file mode 100644
index 00000000000..fe8a71f44e6
--- /dev/null
+++ b/apps/files_trashbin/templates/part.list.php
@@ -0,0 +1,76 @@
+<input type="hidden" id="disableSharing" data-status="<?php echo $_['disableSharing']; ?>">
+<?php foreach($_['files'] as $file):
+ $simple_file_size = OCP\simple_file_size($file['size']);
+ // the bigger the file, the darker the shade of grey; megabytes*2
+ $simple_size_color = intval(200-$file['size']/(1024*1024)*2);
+ if($simple_size_color<0) $simple_size_color = 0;
+ $relative_deleted_date = OCP\relative_modified_date($file['timestamp']);
+ // the older the file, the brighter the shade of grey; days*14
+ $relative_date_color = round((time()-$file['mtime'])/60/60/24*14);
+ if($relative_date_color>200) $relative_date_color = 200;
+ $name = str_replace('+', '%20', urlencode($file['name']));
+ $name = str_replace('%2F', '/', $name);
+ $directory = str_replace('+', '%20', urlencode($file['directory']));
+ $directory = str_replace('%2F', '/', $directory); ?>
+ <tr data-filename="<?php echo $file['name'];?>"
+ data-type="<?php echo ($file['type'] == 'dir')?'dir':'file'?>"
+ data-mime="<?php echo $file['mimetype']?>"
+ data-permissions='<?php echo $file['permissions']; ?>'
+ <?php if ( $_['dirlisting'] ): ?>
+ id="<?php echo $file['directory'].'/'.$file['name'];?>"
+ data-file="<?php echo $file['directory'].'/'.$file['name'];?>"
+ data-timestamp=''
+ data-dirlisting=1
+ <?php else: ?>
+ id="<?php echo $file['name'].'.d'.$file['timestamp'];?>"
+ data-file="<?php echo $file['name'].'.d'.$file['timestamp'];?>"
+ data-timestamp='<?php echo $file['timestamp'];?>'
+ data-dirlisting=0
+ <?php endif; ?>>
+ <td class="filename svg"
+ <?php if($file['type'] == 'dir'): ?>
+ style="background-image:url(<?php echo OCP\mimetype_icon('dir'); ?>)"
+ <?php else: ?>
+ style="background-image:url(<?php echo OCP\mimetype_icon($file['mimetype']); ?>)"
+ <?php endif; ?>
+ >
+ <?php if(!isset($_['readonly']) || !$_['readonly']): ?><input type="checkbox" /><?php endif; ?>
+ <?php if($file['type'] == 'dir'): ?>
+ <?php if( $_['dirlisting'] ): ?>
+ <a class="name" href="<?php echo $_['baseURL'].'/'.$name; ?>" title="">
+ <?php else: ?>
+ <a class="name" href="<?php echo $_['baseURL'].'/'.$name.'.d'.$file['timestamp']; ?>" title="">
+ <?php endif; ?>
+ <?php else: ?>
+ <?php if( $_['dirlisting'] ): ?>
+ <a class="name" href="<?php echo $_['downloadURL'].'/'.$name; ?>" title="">
+ <?php else: ?>
+ <a class="name" href="<?php echo $_['downloadURL'].'/'.$name.'.d'.$file['timestamp'];?>" title="">
+ <?php endif; ?>
+ <?php endif; ?>
+ <span class="nametext">
+ <?php if($file['type'] == 'dir'):?>
+ <?php echo htmlspecialchars($file['name']);?>
+ <?php else:?>
+ <?php echo htmlspecialchars($file['basename']);?><span
+ class='extension'><?php echo $file['extension'];?></span>
+ <?php endif;?>
+ </span>
+ <?php if($file['type'] == 'dir'):?>
+ <span class="uploadtext" currentUploads="0">
+ </span>
+ <?php endif;?>
+ </a>
+ </td>
+ <td class="date">
+ <span class="modified"
+ title="<?php echo $file['date']; ?>"
+ style="color:rgb(<?php echo $relative_date_color.','
+ .$relative_date_color.','
+ .$relative_date_color ?>)">
+ <?php echo $relative_deleted_date; ?>
+ </span>
+ </td>
+ </tr>
+<?php endforeach;
+ \ No newline at end of file
diff --git a/apps/files_versions/appinfo/app.php b/apps/files_versions/appinfo/app.php
index afc0a67edba..edd0a2f7022 100644
--- a/apps/files_versions/appinfo/app.php
+++ b/apps/files_versions/appinfo/app.php
@@ -12,5 +12,5 @@ OCP\Util::addscript('files_versions', 'versions');
// Listen to write signals
OCP\Util::connectHook('OC_Filesystem', 'write', "OCA_Versions\Hooks", "write_hook");
// Listen to delete and rename signals
-OCP\Util::connectHook('OC_Filesystem', 'delete', "OCA_Versions\Hooks", "remove_hook");
+OCP\Util::connectHook('OC_Filesystem', 'post-delete', "OCA_Versions\Hooks", "remove_hook");
OCP\Util::connectHook('OC_Filesystem', 'rename', "OCA_Versions\Hooks", "rename_hook"); \ No newline at end of file
diff --git a/apps/files_versions/appinfo/info.xml b/apps/files_versions/appinfo/info.xml
index e4e5a365d51..0155f8e830f 100644
--- a/apps/files_versions/appinfo/info.xml
+++ b/apps/files_versions/appinfo/info.xml
@@ -4,7 +4,7 @@
<name>Versions</name>
<licence>AGPL</licence>
<author>Frank Karlitschek</author>
- <require>4.9</require>
+ <require>4.91</require>
<shipped>true</shipped>
<description>Versioning of files</description>
<types>
diff --git a/apps/files_versions/lib/hooks.php b/apps/files_versions/lib/hooks.php
index 5fb9dc3c3c5..5cefc532895 100644
--- a/apps/files_versions/lib/hooks.php
+++ b/apps/files_versions/lib/hooks.php
@@ -21,9 +21,9 @@ class Hooks {
if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
- $versions = new Storage( new \OC_FilesystemView('') );
+ $versions = new Storage( new \OC\Files\View('') );
- $path = $params[\OC_Filesystem::signal_param_path];
+ $path = $params[\OC\Files\Filesystem::signal_param_path];
if($path<>'') $versions->store( $path );
@@ -39,15 +39,15 @@ 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') {
-
- $versions = new Storage( new \OC_FilesystemView('') );
-
- $path = $params[\OC_Filesystem::signal_param_path];
-
- if($path<>'') $versions->delete( $path );
-
- }
+ if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
+
+ $versions = new Storage( new \OC_FilesystemView('') );
+
+ $path = $params[\OC\Files\Filesystem::signal_param_path];
+
+ if($path<>'') $versions->delete( $path );
+
+ }
}
/**
@@ -58,15 +58,15 @@ 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') {
-
- $versions = new Storage( new \OC_FilesystemView('') );
-
+ if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
+
+ $versions = new Storage( new \OC_FilesystemView('') );
+
$oldpath = $params['oldpath'];
- $newpath = $params['newpath'];
-
- if($oldpath<>'' && $newpath<>'') $versions->rename( $oldpath, $newpath );
-
+ $newpath = $params['newpath'];
+
+ if($oldpath<>'' && $newpath<>'') $versions->rename( $oldpath, $newpath );
+
}
}
diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/versions.php
index 48be5e223ac..003d548d2b2 100644
--- a/apps/files_versions/lib/versions.php
+++ b/apps/files_versions/lib/versions.php
@@ -23,15 +23,15 @@ class Storage {
private static $max_versions_per_interval = array(
1 => array('intervalEndsAfter' => 10, //first 10sec, one version every 2sec
'step' => 2),
- 2 => array('intervalEndsAfter' => 60, //next minute, one version every 10sec
+ 2 => array('intervalEndsAfter' => 60, //next minute, one version every 10sec
'step' => 10),
3 => array('intervalEndsAfter' => 3600, //next hour, one version every minute
'step' => 60),
4 => array('intervalEndsAfter' => 86400, //next 24h, one version every hour
'step' => 3600),
- 5 => array('intervalEndsAfter' => 2592000, //next 30days, one version per day
+ 5 => array('intervalEndsAfter' => 2592000, //next 30days, one version per day
'step' => 86400),
- 6 => array('intervalEndsAfter' => -1, //until the end one version per week
+ 6 => array('intervalEndsAfter' => -1, //until the end one version per week
'step' => 604800),
);
@@ -58,8 +58,8 @@ class Storage {
public function store($filename) {
if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
list($uid, $filename) = self::getUidAndFilename($filename);
- $files_view = new \OC_FilesystemView('/'.$uid .'/files');
- $users_view = new \OC_FilesystemView('/'.$uid);
+ $files_view = new \OC\Files\View('/'.\OCP\User::getUser() .'/files');
+ $users_view = new \OC\Files\View('/'.\OCP\User::getUser());
//check if source file already exist as version to avoid recursions.
// todo does this check work?
@@ -86,8 +86,8 @@ class Storage {
// store a new version of a file
$result = $users_view->copy('files'.$filename, 'files_versions'.$filename.'.v'.$users_view->filemtime('files'.$filename));
- if ( ($versionsSize = \OCP\Config::getAppValue('files_versions', 'size')) === null ) {
- $versionsSize = self::calculateSize($uid);
+ if ( ($versionsSize = \OCP\Config::getAppValue('files_versions', 'size')) === null ) {
+ $versionsSize = self::calculateSize($uid);
}
$versionsSize += $users_view->filesize('files'.$filename);
@@ -105,42 +105,42 @@ class Storage {
* Delete versions of a file
*/
public static function delete($filename) {
- list($uid, $filename) = self::getUidAndFilename($filename);
+ list($uid, $filename) = self::getUidAndFilename($filename);
$versions_fileview = new \OC_FilesystemView('/'.$uid .'/files_versions');
-
- $abs_path = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$filename.'.v';
- if( ($versions = self::getVersions($filename)) ) {
- if ( ($versionsSize = \OCP\Config::getAppValue('files_versions', 'size')) === null ) {
- $versionsSize = self::calculateSize($uid);
- }
- foreach ($versions as $v) {
- unlink($abs_path . $v['version']);
- $versionsSize -= $v['size'];
- }
- \OCP\Config::setAppValue('files_versions', 'size', $versionsSize);
+
+ $abs_path = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$filename.'.v';
+ if( ($versions = self::getVersions($filename)) ) {
+ if ( ($versionsSize = \OCP\Config::getAppValue('files_versions', 'size')) === null ) {
+ $versionsSize = self::calculateSize($uid);
+ }
+ foreach ($versions as $v) {
+ unlink($abs_path . $v['version']);
+ $versionsSize -= $v['size'];
+ }
+ \OCP\Config::setAppValue('files_versions', 'size', $versionsSize);
}
}
- /**
- * rename versions of a file
- */
- public static function rename($oldpath, $newpath) {
+ /**
+ * rename versions of a file
+ */
+ public static function rename($oldpath, $newpath) {
list($uid, $oldpath) = self::getUidAndFilename($oldpath);
- list($uidn, $newpath) = self::getUidAndFilename($newpath);
+ list($uidn, $newpath) = self::getUidAndFilename($newpath);
$versions_view = new \OC_FilesystemView('/'.$uid .'/files_versions');
$files_view = new \OC_FilesystemView('/'.$uid .'/files');
- $abs_newpath = \OCP\Config::getSystemValue('datadirectory').$versions_view->getAbsolutePath('').$newpath;
-
+ $abs_newpath = \OCP\Config::getSystemValue('datadirectory').$versions_view->getAbsolutePath('').$newpath;
+
if ( $files_view->is_dir($oldpath) && $versions_view->is_dir($oldpath) ) {
$versions_view->rename($oldpath, $newpath);
- } else if ( ($versions = Storage::getVersions($oldpath)) ) {
- $info=pathinfo($abs_newpath);
- if(!file_exists($info['dirname'])) mkdir($info['dirname'], 0750, true);
- $versions = Storage::getVersions($oldpath);
+ } else if ( ($versions = Storage::getVersions($oldpath)) ) {
+ $info=pathinfo($abs_newpath);
+ if(!file_exists($info['dirname'])) mkdir($info['dirname'], 0750, true);
+ $versions = Storage::getVersions($oldpath);
foreach ($versions as $v) {
- $versions_view->rename($oldpath.'.v'.$v['version'], $newpath.'.v'.$v['version']);
- }
- }
+ $versions_view->rename($oldpath.'.v'.$v['version'], $newpath.'.v'.$v['version']);
+ }
+ }
}
/**
@@ -150,7 +150,7 @@ class Storage {
if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
list($uid, $filename) = self::getUidAndFilename($filename);
- $users_view = new \OC_FilesystemView('/'.$uid);
+ $users_view = new \OC\Files\View('/'.$uid);
$versionCreated = false;
//first create a new version
@@ -184,7 +184,7 @@ class Storage {
public static function getVersions( $filename, $count = 0 ) {
if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) {
list($uid, $filename) = self::getUidAndFilename($filename);
- $versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions');
+ $versions_fileview = new \OC\Files\View('/' . \OCP\User::getUser() . '/files_versions');
$versionsName = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath($filename);
$versions = array();
@@ -202,7 +202,7 @@ class Storage {
$key = $version.'#'.$filename;
$versions[$key]['cur'] = 0;
$versions[$key]['version'] = $version;
- $versions[$key]['path'] = $filename;
+ $versions[$key]['path'] = $filename;
$versions[$key]['size'] = $versions_fileview->filesize($filename.'.v'.$version);
// if file with modified date exists, flag it in array as currently enabled version
@@ -236,29 +236,29 @@ class Storage {
}
- /**
- * @brief get the size of all stored versions from a given user
- * @param $uid id from the user
- * @return size of vesions
- */
- private static function calculateSize($uid) {
- if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) {
- $versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions');
- $versionsRoot = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('');
-
- $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($versionsRoot), \RecursiveIteratorIterator::CHILD_FIRST);
-
+ /**
+ * @brief get the size of all stored versions from a given user
+ * @param $uid id from the user
+ * @return size of vesions
+ */
+ private static function calculateSize($uid) {
+ if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) {
+ $versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions');
+ $versionsRoot = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('');
+
+ $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($versionsRoot), \RecursiveIteratorIterator::CHILD_FIRST);
+
$size = 0;
-
- foreach ($iterator as $path) {
- if ( preg_match('/^.+\.v(\d+)$/', $path, $match) ) {
+
+ foreach ($iterator as $path) {
+ if ( preg_match('/^.+\.v(\d+)$/', $path, $match) ) {
$relpath = substr($path, strlen($versionsRoot)-1);
- $size += $versions_fileview->filesize($relpath);
- }
+ $size += $versions_fileview->filesize($relpath);
+ }
}
- return $size;
- }
+ return $size;
+ }
}
/**
@@ -267,11 +267,11 @@ class Storage {
* @return array with contains two arrays 'all' which contains all versions sorted by age and 'by_file' which contains all versions sorted by filename
*/
private static function getAllVersions($uid) {
- if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) {
+ if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) {
$versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions');
$versionsRoot = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('');
- $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($versionsRoot), \RecursiveIteratorIterator::CHILD_FIRST);
+ $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($versionsRoot), \RecursiveIteratorIterator::CHILD_FIRST);
$versions = array();
@@ -280,7 +280,7 @@ class Storage {
$relpath = substr($path, strlen($versionsRoot)-1);
$versions[$match[1].'#'.$relpath] = array('path' => $relpath, 'timestamp' => $match[1]);
}
- }
+ }
ksort($versions);
@@ -288,20 +288,20 @@ class Storage {
$result = array();
- foreach( $versions as $key => $value ) {
+ foreach( $versions as $key => $value ) {
$i++;
$size = $versions_fileview->filesize($value['path']);
$filename = substr($value['path'], 0, -strlen($value['timestamp'])-2);
-
+
$result['all'][$key]['version'] = $value['timestamp'];
- $result['all'][$key]['path'] = $filename;
+ $result['all'][$key]['path'] = $filename;
$result['all'][$key]['size'] = $size;
$filename = substr($value['path'], 0, -strlen($value['timestamp'])-2);
$result['by_file'][$filename][$key]['version'] = $value['timestamp'];
- $result['by_file'][$filename][$key]['path'] = $filename;
+ $result['by_file'][$filename][$key]['path'] = $filename;
$result['by_file'][$filename][$key]['size'] = $size;
-
+
}
return $result;
@@ -322,7 +322,7 @@ class Storage {
$quota = \OCP\Util::computerFileSize(\OC_Appconfig::getValue('files', 'default_quota'));
}
if ( $quota == null ) {
- $quota = \OC_Filesystem::free_space('/');
+ $quota = \OC\Files\Filesystem::free_space('/');
}
// make sure that we have the current size of the version history
@@ -332,7 +332,7 @@ class Storage {
}
}
- // calculate available space for version history
+ // calculate available space for version history
$rootInfo = \OC_FileCache::get('', '/'. $uid . '/files');
$free = $quota-$rootInfo['size']; // remaining free space for user
if ( $free > 0 ) {
@@ -394,7 +394,7 @@ class Storage {
$nextVersion = $prevTimestamp - $step;
if ( Storage::$max_versions_per_interval[$interval]['intervalEndsAfter'] == -1 ) {
$nextInterval = -1;
- } else {
+ } else {
$nextInterval = $time - Storage::$max_versions_per_interval[$interval]['intervalEndsAfter'];
}
$newInterval = true; // we changed the interval -> check same version with new interval
diff --git a/apps/user_ldap/ajax/deleteConfiguration.php b/apps/user_ldap/ajax/deleteConfiguration.php
new file mode 100644
index 00000000000..b7d633a049d
--- /dev/null
+++ b/apps/user_ldap/ajax/deleteConfiguration.php
@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * ownCloud - user_ldap
+ *
+ * @author Arthur Schiwon
+ * @copyright 2013 Arthur Schiwon blizzz@owncloud.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+// Check user and app status
+OCP\JSON::checkAdminUser();
+OCP\JSON::checkAppEnabled('user_ldap');
+OCP\JSON::callCheck();
+
+$prefix = $_POST['ldap_serverconfig_chooser'];
+if(\OCA\user_ldap\lib\Helper::deleteServerConfiguration($prefix)){
+ OCP\JSON::success();
+} else {
+ $l=OC_L10N::get('user_ldap');
+ OCP\JSON::error(array('message' => $l->t('Failed to delete the server configuration')));
+} \ No newline at end of file
diff --git a/apps/user_ldap/ajax/getConfiguration.php b/apps/user_ldap/ajax/getConfiguration.php
new file mode 100644
index 00000000000..dfae68d2dc9
--- /dev/null
+++ b/apps/user_ldap/ajax/getConfiguration.php
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * ownCloud - user_ldap
+ *
+ * @author Arthur Schiwon
+ * @copyright 2013 Arthur Schiwon blizzz@owncloud.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+// Check user and app status
+OCP\JSON::checkAdminUser();
+OCP\JSON::checkAppEnabled('user_ldap');
+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
diff --git a/apps/user_ldap/ajax/getNewServerConfigPrefix.php b/apps/user_ldap/ajax/getNewServerConfigPrefix.php
new file mode 100644
index 00000000000..17e78f87072
--- /dev/null
+++ b/apps/user_ldap/ajax/getNewServerConfigPrefix.php
@@ -0,0 +1,34 @@
+<?php
+
+/**
+ * ownCloud - user_ldap
+ *
+ * @author Arthur Schiwon
+ * @copyright 2013 Arthur Schiwon blizzz@owncloud.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+// Check user and app status
+OCP\JSON::checkAdminUser();
+OCP\JSON::checkAppEnabled('user_ldap');
+OCP\JSON::callCheck();
+
+$serverConnections = \OCA\user_ldap\lib\Helper::getServerConfigurationPrefixes();
+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
diff --git a/apps/user_ldap/ajax/setConfiguration.php b/apps/user_ldap/ajax/setConfiguration.php
new file mode 100644
index 00000000000..206487c7e0a
--- /dev/null
+++ b/apps/user_ldap/ajax/setConfiguration.php
@@ -0,0 +1,33 @@
+<?php
+
+/**
+ * ownCloud - user_ldap
+ *
+ * @author Arthur Schiwon
+ * @copyright 2013 Arthur Schiwon blizzz@owncloud.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+// Check user and app status
+OCP\JSON::checkAdminUser();
+OCP\JSON::checkAppEnabled('user_ldap');
+OCP\JSON::callCheck();
+
+$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
diff --git a/apps/user_ldap/ajax/testConfiguration.php b/apps/user_ldap/ajax/testConfiguration.php
index a82f7e4c17b..f8038e31469 100644
--- a/apps/user_ldap/ajax/testConfiguration.php
+++ b/apps/user_ldap/ajax/testConfiguration.php
@@ -4,7 +4,7 @@
* ownCloud - user_ldap
*
* @author Arthur Schiwon
- * @copyright 2012 Arthur Schiwon blizzz@owncloud.com
+ * @copyright 2012, 2013 Arthur Schiwon blizzz@owncloud.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -26,14 +26,16 @@ OCP\JSON::checkAdminUser();
OCP\JSON::checkAppEnabled('user_ldap');
OCP\JSON::callCheck();
-$connection = new \OCA\user_ldap\lib\Connection(null);
+$l=OC_L10N::get('user_ldap');
+
+$connection = new \OCA\user_ldap\lib\Connection('', null);
if($connection->setConfiguration($_POST)) {
//Configuration is okay
if($connection->bind()) {
- OCP\JSON::success(array('message' => 'The configuration is valid and the connection could be established!'));
+ OCP\JSON::success(array('message' => $l->t('The configuration is valid and the connection could be established!')));
} else {
- OCP\JSON::error(array('message' => 'The configuration is valid, but the Bind failed. Please check the server settings and credentials.'));
+ OCP\JSON::error(array('message' => $l->t('The configuration is valid, but the Bind failed. Please check the server settings and credentials.')));
}
} else {
- OCP\JSON::error(array('message' => 'The configuration is invalid. Please look in the ownCloud log for further details.'));
+ OCP\JSON::error(array('message' => $l->t('The configuration is invalid. Please look in the ownCloud log for further details.')));
}
diff --git a/apps/user_ldap/appinfo/app.php b/apps/user_ldap/appinfo/app.php
index ce3079da0ba..dec87684c9e 100644
--- a/apps/user_ldap/appinfo/app.php
+++ b/apps/user_ldap/appinfo/app.php
@@ -23,15 +23,23 @@
OCP\App::registerAdmin('user_ldap', 'settings');
-$connector = new OCA\user_ldap\lib\Connection('user_ldap');
-$userBackend = new OCA\user_ldap\USER_LDAP();
-$userBackend->setConnector($connector);
-$groupBackend = new OCA\user_ldap\GROUP_LDAP();
-$groupBackend->setConnector($connector);
+$configPrefixes = OCA\user_ldap\lib\Helper::getServerConfigurationPrefixes(true);
+if(count($configPrefixes) == 1) {
+ $connector = new OCA\user_ldap\lib\Connection($configPrefixes[0]);
+ $userBackend = new OCA\user_ldap\USER_LDAP();
+ $userBackend->setConnector($connector);
+ $groupBackend = new OCA\user_ldap\GROUP_LDAP();
+ $groupBackend->setConnector($connector);
+} else {
+ $userBackend = new OCA\user_ldap\User_Proxy($configPrefixes);
+ $groupBackend = new OCA\user_ldap\Group_Proxy($configPrefixes);
+}
-// register user backend
-OC_User::useBackend($userBackend);
-OC_Group::useBackend($groupBackend);
+if(count($configPrefixes) > 0) {
+ // register user backend
+ OC_User::useBackend($userBackend);
+ OC_Group::useBackend($groupBackend);
+}
// add settings page to navigation
$entry = array(
diff --git a/apps/user_ldap/appinfo/info.xml b/apps/user_ldap/appinfo/info.xml
index a7605775274..53269edfb34 100644
--- a/apps/user_ldap/appinfo/info.xml
+++ b/apps/user_ldap/appinfo/info.xml
@@ -7,7 +7,7 @@
This app is not compatible to the WebDAV user backend.</description>
<licence>AGPL</licence>
<author>Dominik Schmidt and Arthur Schiwon</author>
- <require>4.9</require>
+ <require>4.91</require>
<shipped>true</shipped>
<types>
<authentication/>
diff --git a/apps/user_ldap/appinfo/update.php b/apps/user_ldap/appinfo/update.php
index 9b54ba18b6c..f9681e38e68 100644
--- a/apps/user_ldap/appinfo/update.php
+++ b/apps/user_ldap/appinfo/update.php
@@ -5,7 +5,7 @@
//ATTENTION
//Upgrade from ownCloud 3 (LDAP backend 0.1) to ownCloud 4.5 (LDAP backend 0.3) is not supported!!
//You must do upgrade to ownCloud 4.0 first!
-//The upgrade stuff in the section from 0.1 to 0.2 is just to minimize the bad efffects.
+//The upgrade stuff in the section from 0.1 to 0.2 is just to minimize the bad effects.
//settings
$pw = OCP\Config::getAppValue('user_ldap', 'ldap_password');
@@ -22,12 +22,10 @@ if($state == 'unset') {
OCP\Config::setSystemValue('ldapIgnoreNamingRules', false);
}
-// ### SUPPORTED upgrade path starts here ###
-
//from version 0.2 to 0.3 (0.2.0.x dev version)
$objects = array('user', 'group');
-$connector = new \OCA\user_ldap\lib\Connection('user_ldap');
+$connector = new \OCA\user_ldap\lib\Connection();
$userBE = new \OCA\user_ldap\USER_LDAP();
$userBE->setConnector($connector);
$groupBE = new \OCA\user_ldap\GROUP_LDAP();
@@ -80,3 +78,13 @@ function escapeDN($dn) {
return $dn;
}
+
+
+// SUPPORTED UPGRADE FROM Version 0.3 (ownCloud 4.5) to 0.4 (ownCloud 5)
+
+if(!isset($connector)) {
+ $connector = new \OCA\user_ldap\lib\Connection();
+}
+//it is required, that connections do have ldap_configuration_active setting stored in the database
+$connector->getConfiguration();
+$connector->saveConfiguration(); \ No newline at end of file
diff --git a/apps/user_ldap/appinfo/version b/apps/user_ldap/appinfo/version
index b1a5f4781d1..705e30728e0 100644
--- a/apps/user_ldap/appinfo/version
+++ b/apps/user_ldap/appinfo/version
@@ -1 +1 @@
-0.3.0.1 \ No newline at end of file
+0.3.9.0 \ No newline at end of file
diff --git a/apps/user_ldap/group_ldap.php b/apps/user_ldap/group_ldap.php
index 63437310088..02ceecaea0b 100644
--- a/apps/user_ldap/group_ldap.php
+++ b/apps/user_ldap/group_ldap.php
@@ -171,7 +171,6 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
return array();
}
- $search = empty($search) ? '*' : '*'.$search.'*';
$groupUsers = array();
$isMemberUid = (strtolower($this->connection->ldapGroupMemberAssocAttr) == 'memberuid');
foreach($members as $member) {
@@ -179,7 +178,7 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
//we got uids, need to get their DNs to 'tranlsate' them to usernames
$filter = $this->combineFilterWithAnd(array(
\OCP\Util::mb_str_replace('%uid', $member, $this->connection>ldapLoginFilter, 'UTF-8'),
- $this->connection->ldapUserDisplayName.'='.$search
+ $this->getFilterPartForUserSearch($search)
));
$ldap_users = $this->fetchListOfUsers($filter, 'dn');
if(count($ldap_users) < 1) {
@@ -188,8 +187,8 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
$groupUsers[] = $this->dn2username($ldap_users[0]);
} else {
//we got DNs, check if we need to filter by search or we can give back all of them
- if($search != '*') {
- if(!$this->readAttribute($member, $this->connection->ldapUserDisplayName, $this->connection->ldapUserDisplayName.'='.$search)) {
+ if(!empty($search)) {
+ if(!$this->readAttribute($member, $this->connection->ldapUserDisplayName, $this->getFilterPartForUserSearch($search))) {
continue;
}
}
@@ -230,10 +229,9 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
if($limit <= 0) {
$limit = null;
}
- $search = empty($search) ? '*' : '*'.$search.'*';
$filter = $this->combineFilterWithAnd(array(
$this->connection->ldapGroupFilter,
- $this->connection->ldapGroupDisplayName.'='.$search
+ $this->getFilterPartForGroupSearch($search)
));
\OCP\Util::writeLog('user_ldap', 'getGroups Filter '.$filter, \OCP\Util::DEBUG);
$ldap_groups = $this->fetchListOfGroups($filter, array($this->connection->ldapGroupDisplayName, 'dn'), $limit, $offset);
diff --git a/apps/user_ldap/group_proxy.php b/apps/user_ldap/group_proxy.php
new file mode 100644
index 00000000000..5aa1aef0e0e
--- /dev/null
+++ b/apps/user_ldap/group_proxy.php
@@ -0,0 +1,178 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @author Artuhr Schiwon
+ * @copyright 2013 Arthur Schiwon blizzz@owncloud.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\user_ldap;
+
+class Group_Proxy extends lib\Proxy implements \OCP\GroupInterface {
+ private $backends = array();
+ private $refBackend = null;
+
+ /**
+ * @brief Constructor
+ * @param $serverConfigPrefixes array containing the config Prefixes
+ */
+ public function __construct($serverConfigPrefixes) {
+ parent::__construct();
+ foreach($serverConfigPrefixes as $configPrefix) {
+ $this->backends[$configPrefix] = new \OCA\user_ldap\GROUP_LDAP();
+ $connector = $this->getConnector($configPrefix);
+ $this->backends[$configPrefix]->setConnector($connector);
+ if(is_null($this->refBackend)) {
+ $this->refBackend = &$this->backends[$configPrefix];
+ }
+ }
+ }
+
+ /**
+ * @brief Tries the backends one after the other until a positive result is returned from the specified method
+ * @param $gid string, the gid connected to the request
+ * @param $method string, the method of the group backend that shall be called
+ * @param $parameters an array of parameters to be passed
+ * @return mixed, the result of the method or false
+ */
+ protected function walkBackends($gid, $method, $parameters) {
+ $cacheKey = $this->getGroupCacheKey($gid);
+ foreach($this->backends as $configPrefix => $backend) {
+ if($result = call_user_func_array(array($backend, $method), $parameters)) {
+ $this->writeToCache($cacheKey, $configPrefix);
+ return $result;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @brief Asks the backend connected to the server that supposely takes care of the gid from the request.
+ * @param $gid string, the gid connected to the request
+ * @param $method string, the method of the group backend that shall be called
+ * @param $parameters an array of parameters to be passed
+ * @return mixed, the result of the method or false
+ */
+ protected function callOnLastSeenOn($gid, $method, $parameters) {
+ $cacheKey = $this->getGroupCacheKey($gid);;
+ $prefix = $this->getFromCache($cacheKey);
+ //in case the uid has been found in the past, try this stored connection first
+ if(!is_null($prefix)) {
+ if(isset($this->backends[$prefix])) {
+ $result = call_user_func_array(array($this->backends[$prefix], $method), $parameters);
+ if(!$result) {
+ //not found here, reset cache to null
+ $this->writeToCache($cacheKey, null);
+ }
+ return $result;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @brief is user in group?
+ * @param $uid uid of the user
+ * @param $gid gid of the group
+ * @returns true/false
+ *
+ * Checks whether the user is member of a group or not.
+ */
+ public function inGroup($uid, $gid) {
+ return $this->handleRequest($gid, 'inGroup', array($uid, $gid));
+ }
+
+ /**
+ * @brief Get all groups a user belongs to
+ * @param $uid Name of the user
+ * @returns array with group names
+ *
+ * This function fetches all groups a user belongs to. It does not check
+ * if the user exists at all.
+ */
+ public function getUserGroups($uid) {
+ $groups = array();
+
+ foreach($this->backends as $backend) {
+ $backendGroups = $backend->getUserGroups($uid);
+ if (is_array($backendGroups)) {
+ $groups = array_merge($groups, $backendGroups);
+ }
+ }
+
+ return $groups;
+ }
+
+ /**
+ * @brief get a list of all users in a group
+ * @returns array with user ids
+ */
+ public function usersInGroup($gid, $search = '', $limit = -1, $offset = 0) {
+ $users = array();
+
+ foreach($this->backends as $backend) {
+ $backendUsers = $backend->usersInGroup($gid, $search, $limit, $offset);
+ if (is_array($backendUsers)) {
+ $users = array_merge($users, $backendUsers);
+ }
+ }
+
+ return $users;
+ }
+
+ /**
+ * @brief get a list of all groups
+ * @returns array with group names
+ *
+ * Returns a list with all groups
+ */
+ public function getGroups($search = '', $limit = -1, $offset = 0) {
+ $groups = array();
+
+ foreach($this->backends as $backend) {
+ $backendGroups = $backend->getGroups($search, $limit, $offset);
+ if (is_array($backendGroups)) {
+ $groups = array_merge($groups, $backendGroups);
+ }
+ }
+
+ return $groups;
+ }
+
+ /**
+ * check if a group exists
+ * @param string $gid
+ * @return bool
+ */
+ public function groupExists($gid) {
+ return $this->handleRequest($gid, 'groupExists', array($gid));
+ }
+
+ /**
+ * @brief Check if backend implements actions
+ * @param $actions bitwise-or'ed actions
+ * @returns boolean
+ *
+ * Returns the supported actions as int to be
+ * compared with OC_USER_BACKEND_CREATE_USER etc.
+ */
+ public function implementsActions($actions) {
+ //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 7063eead96a..166761bc1ff 100644
--- a/apps/user_ldap/js/settings.js
+++ b/apps/user_ldap/js/settings.js
@@ -1,6 +1,113 @@
+var LdapConfiguration = {
+ refreshConfig: function() {
+ if($('#ldap_serverconfig_chooser option').length < 2) {
+ LdapConfiguration.addConfiguration(true);
+ return;
+ }
+ $.post(
+ OC.filePath('user_ldap','ajax','getConfiguration.php'),
+ $('#ldap_serverconfig_chooser').serialize(),
+ function (result) {
+ if(result.status == 'success') {
+ $.each(result.configuration, function(configkey, configvalue) {
+ elementID = '#'+configkey;
+
+ //deal with Checkboxes
+ if($(elementID).is('input[type=checkbox]')) {
+ if(configvalue == 1) {
+ $(elementID).attr('checked', 'checked');
+ } else {
+ $(elementID).removeAttr('checked');
+ }
+ return;
+ }
+
+ //On Textareas, Multi-Line Settings come as array
+ if($(elementID).is('textarea') && $.isArray(configvalue)) {
+ configvalue = configvalue.join("\n");
+ }
+
+ // assign the value
+ $('#'+configkey).val(configvalue);
+ });
+ }
+ }
+ );
+ },
+
+ resetDefaults: function() {
+ $('#ldap').find('input[type=text], input[type=number], input[type=password], textarea, select').each(function() {
+ if($(this).attr('id') == 'ldap_serverconfig_chooser') {
+ return;
+ }
+ $(this).val($(this).attr('data-default'));
+ });
+ $('#ldap').find('input[type=checkbox]').each(function() {
+ if($(this).attr('data-default') == 1) {
+ $(this).attr('checked', 'checked');
+ } else {
+ $(this).removeAttr('checked');
+ }
+ });
+ },
+
+ deleteConfiguration: function() {
+ $.post(
+ OC.filePath('user_ldap','ajax','deleteConfiguration.php'),
+ $('#ldap_serverconfig_chooser').serialize(),
+ function (result) {
+ if(result.status == 'success') {
+ $('#ldap_serverconfig_chooser option:selected').remove();
+ $('#ldap_serverconfig_chooser option:first').select();
+ LdapConfiguration.refreshConfig();
+ } else {
+ OC.dialogs.alert(
+ result.message,
+ t('user_ldap', 'Deletion failed')
+ );
+ }
+ }
+ );
+ },
+
+ addConfiguration: function(doNotAsk) {
+ $.post(
+ OC.filePath('user_ldap','ajax','getNewServerConfigPrefix.php'),
+ function (result) {
+ if(result.status == 'success') {
+ if(doNotAsk) {
+ LdapConfiguration.resetDefaults();
+ } else {
+ OC.dialogs.confirm(
+ t('user_ldap', 'Take over settings from recent server configuration?'),
+ t('user_ldap', 'Keep settings?'),
+ function(keep) {
+ if(!keep) {
+ LdapConfiguration.resetDefaults();
+ }
+ }
+ );
+ }
+ $('#ldap_serverconfig_chooser option:selected').removeAttr('selected');
+ var html = '<option value="'+result.configPrefix+'" selected="selected">'+$('#ldap_serverconfig_chooser option').length+'. Server</option>';
+ $('#ldap_serverconfig_chooser option:last').before(html);
+ } else {
+ OC.dialogs.alert(
+ result.message,
+ t('user_ldap', 'Cannot add server configuration')
+ );
+ }
+ }
+ );
+ }
+}
+
$(document).ready(function() {
$('#ldapSettings').tabs();
+ $('#ldap_submit').button();
$('#ldap_action_test_connection').button();
+ $('#ldap_action_delete_configuration').button();
+ LdapConfiguration.refreshConfig();
$('#ldap_action_test_connection').click(function(event){
event.preventDefault();
$.post(
@@ -10,15 +117,60 @@ $(document).ready(function() {
if (result.status == 'success') {
OC.dialogs.alert(
result.message,
- 'Connection test succeeded'
+ t('user_ldap', 'Connection test succeeded')
);
} else {
OC.dialogs.alert(
result.message,
- 'Connection test failed'
+ t('user_ldap', 'Connection test failed')
);
}
}
);
});
+
+ $('#ldap_action_delete_configuration').click(function(event) {
+ event.preventDefault();
+ OC.dialogs.confirm(
+ t('user_ldap', 'Do you really want to delete the current Server Configuration?'),
+ t('user_ldap', 'Confirm Deletion'),
+ function(deleteConfiguration) {
+ if(deleteConfiguration) {
+ LdapConfiguration.deleteConfiguration();
+ }
+ }
+ );
+ });
+
+ $('#ldap_submit').click(function(event) {
+ event.preventDefault();
+ $.post(
+ OC.filePath('user_ldap','ajax','setConfiguration.php'),
+ $('#ldap').serialize(),
+ function (result) {
+ bgcolor = $('#ldap_submit').css('background');
+ if (result.status == 'success') {
+ //the dealing with colors is a but ugly, but the jQuery version in use has issues with rgba colors
+ $('#ldap_submit').css('background', '#fff');
+ $('#ldap_submit').effect('highlight', {'color':'#A8FA87'}, 5000, function() {
+ $('#ldap_submit').css('background', bgcolor);
+ });
+ } else {
+ $('#ldap_submit').css('background', '#fff');
+ $('#ldap_submit').effect('highlight', {'color':'#E97'}, 5000, function() {
+ $('#ldap_submit').css('background', bgcolor);
+ });
+ }
+ }
+ );
+ });
+
+ $('#ldap_serverconfig_chooser').change(function(event) {
+ value = $('#ldap_serverconfig_chooser option:selected:first').attr('value');
+ if(value == 'NEW') {
+ LdapConfiguration.addConfiguration(false);
+ } else {
+ LdapConfiguration.refreshConfig();
+ }
+ });
}); \ No newline at end of file
diff --git a/apps/user_ldap/l10n/es_AR.php b/apps/user_ldap/l10n/es_AR.php
index 331bf8699f4..5d42ea94437 100644
--- a/apps/user_ldap/l10n/es_AR.php
+++ b/apps/user_ldap/l10n/es_AR.php
@@ -1,8 +1,10 @@
<?php $TRANSLATIONS = array(
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>Advertencia:</b> Los Apps user_ldap y user_webdavauth son incompatibles. Puede que experimente un comportamiento inesperado. Pregunte al administrador del sistema para desactivar uno de ellos.",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Atención:</b> El módulo PHP LDAP no está instalado, este elemento no va a funcionar. Por favor, pedile al administrador que lo instale.",
"Host" => "Servidor",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Podés omitir el protocolo, excepto si SSL es requerido. En ese caso, empezá con ldaps://",
"Base DN" => "DN base",
+"One Base DN per line" => "Una DN base por línea",
"You can specify Base DN for users and groups in the Advanced tab" => "Podés especificar el DN base para usuarios y grupos en la pestaña \"Avanzado\"",
"User DN" => "DN usuario",
"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." => "El DN del usuario cliente con el que se hará la asociación, p.ej. uid=agente,dc=ejemplo,dc=com. Para acceso anónimo, dejá DN y contraseña vacíos.",
@@ -19,7 +21,9 @@
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "Sin ninguna plantilla, p. ej.: \"objectClass=posixGroup\".",
"Port" => "Puerto",
"Base User Tree" => "Ãrbol base de usuario",
+"One User Base DN per line" => "Una DN base de usuario por línea",
"Base Group Tree" => "Ãrbol base de grupo",
+"One Group Base DN per line" => "Una DN base de grupo por línea",
"Group-Member association" => "Asociación Grupo-Miembro",
"Use TLS" => "Usar TLS",
"Do not use it for SSL connections, it will fail." => "No usarlo para SSL, dará error.",
diff --git a/apps/user_ldap/l10n/ko.php b/apps/user_ldap/l10n/ko.php
index c0d09b5c3c1..78745a0e01f 100644
--- a/apps/user_ldap/l10n/ko.php
+++ b/apps/user_ldap/l10n/ko.php
@@ -1,8 +1,10 @@
<?php $TRANSLATIONS = array(
-"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>경고</b>user_ldap 앱과 user_webdavauth ì•±ì€ í˜¸í™˜ë˜ì§€ 않습니다. 오ë™ìž‘ì„ ì¼ìœ¼í‚¬ 수 있으므로, 시스템 관리ìžì—게 요청하여, 둘 중 하나를 비활성화 하시기 ë°”ëžë‹ˆë‹¤.",
+"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>경고:</b> user_ldap 앱과 user_webdavauth ì•±ì€ í˜¸í™˜ë˜ì§€ 않습니다. 오ë™ìž‘ì„ ì¼ìœ¼í‚¬ 수 있으므로, 시스템 관리ìžì—게 요청하여 둘 중 하나만 사용하ë„ë¡ í•˜ì‹­ì‹œì˜¤.",
+"<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 ëª¨ë“ˆì´ ë¹„í™œì„±í™”ë˜ì–´ 있거나 설치ë˜ì–´ 있지 않습니다. 백엔드를 사용할 수 없습니다. 시스템 관리ìžì—게 설치를 요청하십시오.",
"Host" => "호스트",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "SSLì„ ì‚¬ìš©í•˜ëŠ” 경우가 아니ë¼ë©´ í”„ë¡œí† ì½œì„ ìž…ë ¥í•˜ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤. SSLì„ ì‚¬ìš©í•˜ë ¤ë©´ ldaps://를 입력하십시오.",
"Base DN" => "기본 DN",
+"One Base DN per line" => "기본 DNì„ í•œ ì¤„ì— í•˜ë‚˜ì”© 입력하십시오",
"You can specify Base DN for users and groups in the Advanced tab" => "고급 탭ì—ì„œ ì‚¬ìš©ìž ë° ê·¸ë£¹ì— ëŒ€í•œ 기본 DNì„ ì§€ì •í•  수 있습니다.",
"User DN" => "ì‚¬ìš©ìž 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ê³¼ 암호를 비워 ë‘십시오.",
@@ -19,7 +21,9 @@
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "ìžë¦¬ 비움ìžë¥¼ 사용할 수 없습니다. 예제: \"objectClass=posixGroup\"",
"Port" => "í¬íŠ¸",
"Base User Tree" => "기본 ì‚¬ìš©ìž íŠ¸ë¦¬",
+"One User Base DN per line" => "ì‚¬ìš©ìž DNì„ í•œ ì¤„ì— í•˜ë‚˜ì”© 입력하십시오",
"Base Group Tree" => "기본 그룹 트리",
+"One Group Base DN per line" => "그룹 기본 DNì„ í•œ ì¤„ì— í•˜ë‚˜ì”© 입력하십시오",
"Group-Member association" => "그룹-íšŒì› ì—°ê²°",
"Use TLS" => "TLS 사용",
"Do not use it for SSL connections, it will fail." => "SSL ì—°ê²° ì‹œ 사용하는 경우 ì—°ê²°ë˜ì§€ 않습니다.",
diff --git a/apps/user_ldap/l10n/sk_SK.php b/apps/user_ldap/l10n/sk_SK.php
index 2b340c8573d..9268c9f147e 100644
--- a/apps/user_ldap/l10n/sk_SK.php
+++ b/apps/user_ldap/l10n/sk_SK.php
@@ -1,7 +1,10 @@
<?php $TRANSLATIONS = array(
+"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "<b>Upozornenie:</b> Aplikácie user_ldap a user_webdavauth nie sú kompatibilné. Môže nastávaÅ¥ neoÄakávané správanie. Požiadajte správcu systému aby jednu z nich zakázal.",
+"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Upozornenie:</b> nie je nainštalovaný LDAP modul pre PHP, backend vrstva nebude fungovať. Požádejte správcu systému aby ho nainštaloval.",
"Host" => "Hostiteľ",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Môžete vynechaÅ¥ protokol, s výnimkou požadovania SSL. Vtedy zaÄnite s ldaps://",
"Base DN" => "Základné DN",
+"One Base DN per line" => "Jedno základné DN na riadok",
"You can specify Base DN for users and groups in the Advanced tab" => "V rozšírenom nastavení môžete zadať základné DN pre používateľov a skupiny",
"User DN" => "Používateľské 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 klientského používateľa, ku ktorému tvoríte väzbu, napr. uid=agent,dc=example,dc=com. Pre anonymný prístup ponechajte údaje DN a Heslo prázdne.",
@@ -18,7 +21,9 @@
"without any placeholder, e.g. \"objectClass=posixGroup\"." => "bez zástupných znakov, napr. \"objectClass=posixGroup\"",
"Port" => "Port",
"Base User Tree" => "Základný používateľský strom",
+"One User Base DN per line" => "Jedna používateľská základná DN na riadok",
"Base Group Tree" => "Základný skupinový strom",
+"One Group Base DN per line" => "Jedna skupinová základná DN na riadok",
"Group-Member association" => "Asociácia Älena skupiny",
"Use TLS" => "Použi TLS",
"Do not use it for SSL connections, it will fail." => "Nepoužívajte pre pripojenie SSL, pripojenie zlyhá.",
diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php
index 422e43fc003..68cbe4a5e75 100644
--- a/apps/user_ldap/lib/access.php
+++ b/apps/user_ldap/lib/access.php
@@ -719,6 +719,50 @@ abstract class Access {
return $combinedFilter;
}
+ /**
+ * @brief creates a filter part for to perfrom search for users
+ * @param string $search the search term
+ * @return string the final filter part to use in LDAP searches
+ */
+ public function getFilterPartForUserSearch($search) {
+ return $this->getFilterPartForSearch($search, $this->connection->ldapAttributesForUserSearch, $this->connection->ldapUserDisplayName);
+ }
+
+ /**
+ * @brief creates a filter part for to perfrom search for groups
+ * @param string $search the search term
+ * @return string the final filter part to use in LDAP searches
+ */
+ public function getFilterPartForGroupSearch($search) {
+ return $this->getFilterPartForSearch($search, $this->connection->ldapAttributesForGroupSearch, $this->connection->ldapGroupDisplayName);
+ }
+
+ /**
+ * @brief creates a filter part for searches
+ * @param string $search the search term
+ * @param string $fallbackAttribute a fallback attribute in case the user
+ * did not define search attributes. Typically the display name attribute.
+ * @returns string the final filter part to use in LDAP searches
+ */
+ private function getFilterPartForSearch($search, $searchAttributes, $fallbackAttribute) {
+ $filter = array();
+ $search = empty($search) ? '*' : '*'.$search.'*';
+ if(!is_array($searchAttributes) || count($searchAttributes) == 0) {
+ if(empty($fallbackAttribute)) {
+ return '';
+ }
+ $filter[] = $fallbackAttribute . '=' . $search;
+ } else {
+ foreach($searchAttributes as $attribute) {
+ $filter[] = $attribute . '=' . $search;
+ }
+ }
+ if(count($filter) == 1) {
+ return '('.$filter[0].')';
+ }
+ return $this->combineFilterWithOr($filter);
+ }
+
public function areCredentialsValid($name, $password) {
$name = $this->DNasBaseParameter($name);
$testConnection = clone $this->connection;
@@ -912,7 +956,7 @@ abstract class Access {
$reOffset = ($offset - $limit) < 0 ? 0 : $offset - $limit;
//a bit recursive, $offset of 0 is the exit
\OCP\Util::writeLog('user_ldap', 'Looking for cookie L/O '.$limit.'/'.$reOffset, \OCP\Util::INFO);
- $this->search($filter, $base, $attr, $limit, $reOffset, true);
+ $this->search($filter, array($base), $attr, $limit, $reOffset, true);
$cookie = $this->getPagedResultCookie($base, $filter, $limit, $offset);
//still no cookie? obviously, the server does not like us. Let's skip paging efforts.
//TODO: remember this, probably does not change in the next request...
diff --git a/apps/user_ldap/lib/connection.php b/apps/user_ldap/lib/connection.php
index 7046cbbfc78..acc33e047c6 100644
--- a/apps/user_ldap/lib/connection.php
+++ b/apps/user_ldap/lib/connection.php
@@ -4,7 +4,7 @@
* ownCloud – LDAP Access
*
* @author Arthur Schiwon
- * @copyright 2012 Arthur Schiwon blizzz@owncloud.com
+ * @copyright 2012, 2013 Arthur Schiwon blizzz@owncloud.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -25,6 +25,7 @@ namespace OCA\user_ldap\lib;
class Connection {
private $ldapConnectionRes = null;
+ private $configPrefix;
private $configID;
private $configured = false;
@@ -35,6 +36,8 @@ class Connection {
protected $config = array(
'ldapHost' => null,
'ldapPort' => null,
+ 'ldapBackupHost' => null,
+ 'ldapBackupPort' => null,
'ldapBase' => null,
'ldapBaseUsers' => null,
'ldapBaseGroups' => null,
@@ -48,6 +51,7 @@ class Connection {
'ldapUserFilter' => null,
'ldapGroupFilter' => null,
'ldapGroupDisplayName' => null,
+ 'ldapGroupMemberAssocAttr' => null,
'ldapLoginFilter' => null,
'ldapQuotaAttribute' => null,
'ldapQuotaDefault' => null,
@@ -55,15 +59,24 @@ class Connection {
'ldapCacheTTL' => null,
'ldapUuidAttribute' => null,
'ldapOverrideUuidAttribute' => null,
+ 'ldapOverrideMainServer' => false,
+ 'ldapConfigurationActive' => false,
+ 'ldapAttributesForUserSearch' => null,
+ 'ldapAttributesForGroupSearch' => null,
'homeFolderNamingRule' => null,
'hasPagedResultSupport' => false,
);
- public function __construct($configID = 'user_ldap') {
+ /**
+ * @brief Constructor
+ * @param $configPrefix a string with the prefix for the configkey column (appconfig table)
+ * @param $configID a string with the value for the appid column (appconfig table) or null for on-the-fly connections
+ */
+ public function __construct($configPrefix = '', $configID = 'user_ldap') {
+ $this->configPrefix = $configPrefix;
$this->configID = $configID;
$this->cache = \OC_Cache::getGlobalCache();
$this->config['hasPagedResultSupport'] = (function_exists('ldap_control_paged_result') && function_exists('ldap_control_paged_result_response'));
- \OCP\Util::writeLog('user_ldap', 'PHP supports paged results? '.print_r($this->config['hasPagedResultSupport'], true), \OCP\Util::INFO);
}
public function __destruct() {
@@ -84,12 +97,12 @@ class Connection {
public function __set($name, $value) {
$changed = false;
- //omly few options are writable
+ //only few options are writable
if($name == 'ldapUuidAttribute') {
\OCP\Util::writeLog('user_ldap', 'Set config ldapUuidAttribute to '.$value, \OCP\Util::DEBUG);
$this->config[$name] = $value;
if(!empty($this->configID)) {
- \OCP\Config::setAppValue($this->configID, 'ldap_uuid_attribute', $value);
+ \OCP\Config::setAppValue($this->configID, $this->configPrefix.'ldap_uuid_attribute', $value);
}
$changed = true;
}
@@ -126,7 +139,7 @@ class Connection {
}
private function getCacheKey($key) {
- $prefix = 'LDAP-'.$this->configID.'-';
+ $prefix = 'LDAP-'.$this->configID.'-'.$this->configPrefix.'-';
if(is_null($key)) {
return $prefix;
}
@@ -164,7 +177,8 @@ class Connection {
if(!$this->configured) {
$this->readConfiguration();
}
- if(!$this->config['ldapCacheTTL']) {
+ if(!$this->config['ldapCacheTTL']
+ || !$this->config['ldapConfigurationActive']) {
return null;
}
$key = $this->getCacheKey($key);
@@ -176,43 +190,97 @@ class Connection {
$this->cache->clear($this->getCacheKey(null));
}
+ private function getValue($varname) {
+ static $defaults;
+ if(is_null($defaults)){
+ $defaults = $this->getDefaults();
+ }
+ return \OCP\Config::getAppValue($this->configID,
+ $this->configPrefix.$varname,
+ $defaults[$varname]);
+ }
+
+ private function setValue($varname, $value) {
+ \OCP\Config::setAppValue($this->configID,
+ $this->configPrefix.$varname,
+ $value);
+ }
+
/**
* Caches the general LDAP configuration.
*/
private function readConfiguration($force = false) {
- \OCP\Util::writeLog('user_ldap', 'Checking conf state: isConfigured? '.print_r($this->configured, true).' isForce? '.print_r($force, true).' configID? '.print_r($this->configID, true), \OCP\Util::DEBUG);
if((!$this->configured || $force) && !is_null($this->configID)) {
- \OCP\Util::writeLog('user_ldap', 'Reading the configuration', \OCP\Util::DEBUG);
- $this->config['ldapHost'] = \OCP\Config::getAppValue($this->configID, 'ldap_host', '');
- $this->config['ldapPort'] = \OCP\Config::getAppValue($this->configID, 'ldap_port', 389);
- $this->config['ldapAgentName'] = \OCP\Config::getAppValue($this->configID, 'ldap_dn', '');
- $this->config['ldapAgentPassword'] = base64_decode(\OCP\Config::getAppValue($this->configID, 'ldap_agent_password', ''));
- $this->config['ldapBase'] = preg_split('/\r\n|\r|\n/', \OCP\Config::getAppValue($this->configID, 'ldap_base', ''));
- $this->config['ldapBaseUsers'] = preg_split('/\r\n|\r|\n/', \OCP\Config::getAppValue($this->configID, 'ldap_base_users', $this->config['ldapBase']));
- $this->config['ldapBaseGroups'] = preg_split('/\r\n|\r|\n/', \OCP\Config::getAppValue($this->configID, 'ldap_base_groups', $this->config['ldapBase']));
- $this->config['ldapTLS'] = \OCP\Config::getAppValue($this->configID, 'ldap_tls', 0);
- $this->config['ldapNoCase'] = \OCP\Config::getAppValue($this->configID, 'ldap_nocase', 0);
- $this->config['turnOffCertCheck'] = \OCP\Config::getAppValue($this->configID, 'ldap_turn_off_cert_check', 0);
- $this->config['ldapUserDisplayName'] = mb_strtolower(\OCP\Config::getAppValue($this->configID, 'ldap_display_name', 'uid'), 'UTF-8');
- $this->config['ldapUserFilter'] = \OCP\Config::getAppValue($this->configID, 'ldap_userlist_filter', 'objectClass=person');
- $this->config['ldapGroupFilter'] = \OCP\Config::getAppValue($this->configID, 'ldap_group_filter', '(objectClass=posixGroup)');
- $this->config['ldapLoginFilter'] = \OCP\Config::getAppValue($this->configID, 'ldap_login_filter', '(uid=%uid)');
- $this->config['ldapGroupDisplayName'] = mb_strtolower(\OCP\Config::getAppValue($this->configID, 'ldap_group_display_name', 'uid'), 'UTF-8');
- $this->config['ldapQuotaAttribute'] = \OCP\Config::getAppValue($this->configID, 'ldap_quota_attr', '');
- $this->config['ldapQuotaDefault'] = \OCP\Config::getAppValue($this->configID, 'ldap_quota_def', '');
- $this->config['ldapEmailAttribute'] = \OCP\Config::getAppValue($this->configID, 'ldap_email_attr', '');
- $this->config['ldapGroupMemberAssocAttr'] = \OCP\Config::getAppValue($this->configID, 'ldap_group_member_assoc_attribute', 'uniqueMember');
- $this->config['ldapIgnoreNamingRules'] = \OCP\Config::getSystemValue('ldapIgnoreNamingRules', false);
- $this->config['ldapCacheTTL'] = \OCP\Config::getAppValue($this->configID, 'ldap_cache_ttl', 10*60);
- $this->config['ldapUuidAttribute'] = \OCP\Config::getAppValue($this->configID, 'ldap_uuid_attribute', 'auto');
- $this->config['ldapOverrideUuidAttribute'] = \OCP\Config::getAppValue($this->configID, 'ldap_override_uuid_attribute', 0);
- $this->config['homeFolderNamingRule'] = \OCP\Config::getAppValue($this->configID, 'home_folder_naming_rule', 'opt:username');
+ $defaults = $this->getDefaults();
+ $v = 'getValue';
+ $this->config['ldapHost'] = $this->$v('ldap_host');
+ $this->config['ldapBackupHost'] = $this->$v('ldap_backup_host');
+ $this->config['ldapPort'] = $this->$v('ldap_port');
+ $this->config['ldapBackupPort'] = $this->$v('ldap_backup_port');
+ $this->config['ldapOverrideMainServer']
+ = $this->$v('ldap_override_main_server');
+ $this->config['ldapAgentName'] = $this->$v('ldap_dn');
+ $this->config['ldapAgentPassword']
+ = base64_decode($this->$v('ldap_agent_password'));
+ $rawLdapBase = $this->$v('ldap_base');
+ $this->config['ldapBase']
+ = preg_split('/\r\n|\r|\n/', $rawLdapBase);
+ $this->config['ldapBaseUsers']
+ = preg_split('/\r\n|\r|\n/', ($this->$v('ldap_base_users')));
+ $this->config['ldapBaseGroups']
+ = preg_split('/\r\n|\r|\n/', $this->$v('ldap_base_groups'));
+ unset($rawLdapBase);
+ $this->config['ldapTLS'] = $this->$v('ldap_tls');
+ $this->config['ldapNoCase'] = $this->$v('ldap_nocase');
+ $this->config['turnOffCertCheck']
+ = $this->$v('ldap_turn_off_cert_check');
+ $this->config['ldapUserDisplayName']
+ = mb_strtolower($this->$v('ldap_display_name'),'UTF-8');
+ $this->config['ldapUserFilter']
+ = $this->$v('ldap_userlist_filter');
+ $this->config['ldapGroupFilter'] = $this->$v('ldap_group_filter');
+ $this->config['ldapLoginFilter'] = $this->$v('ldap_login_filter');
+ $this->config['ldapGroupDisplayName']
+ = mb_strtolower($this->$v('ldap_group_display_name'), 'UTF-8');
+ $this->config['ldapQuotaAttribute']
+ = $this->$v('ldap_quota_attr');
+ $this->config['ldapQuotaDefault']
+ = $this->$v('ldap_quota_def');
+ $this->config['ldapEmailAttribute']
+ = $this->$v('ldap_email_attr');
+ $this->config['ldapGroupMemberAssocAttr']
+ = $this->$v('ldap_group_member_assoc_attribute');
+ $this->config['ldapIgnoreNamingRules']
+ = \OCP\Config::getSystemValue('ldapIgnoreNamingRules', false);
+ $this->config['ldapCacheTTL'] = $this->$v('ldap_cache_ttl');
+ $this->config['ldapUuidAttribute']
+ = $this->$v('ldap_uuid_attribute');
+ $this->config['ldapOverrideUuidAttribute']
+ = $this->$v('ldap_override_uuid_attribute');
+ $this->config['homeFolderNamingRule']
+ = $this->$v('home_folder_naming_rule');
+ $this->config['ldapConfigurationActive']
+ = $this->$v('ldap_configuration_active');
+ $this->config['ldapAttributesForUserSearch']
+ = preg_split('/\r\n|\r|\n/', $this->$v('ldap_attributes_for_user_search'));
+ $this->config['ldapAttributesForGroupSearch']
+ = preg_split('/\r\n|\r|\n/', $this->$v('ldap_attributes_for_group_search'));
$this->configured = $this->validateConfiguration();
}
}
/**
+ * @return returns an array that maps internal variable names to database fields
+ */
+ private function getConfigTranslationArray() {
+ static $array = array('ldap_host'=>'ldapHost', 'ldap_port'=>'ldapPort', 'ldap_backup_host'=>'ldapBackupHost', 'ldap_backup_port'=>'ldapBackupPort', 'ldap_override_main_server' => 'ldapOverrideMainServer', 'ldap_dn'=>'ldapAgentName', 'ldap_agent_password'=>'ldapAgentPassword', 'ldap_base'=>'ldapBase', 'ldap_base_users'=>'ldapBaseUsers', 'ldap_base_groups'=>'ldapBaseGroups', 'ldap_userlist_filter'=>'ldapUserFilter', 'ldap_login_filter'=>'ldapLoginFilter', 'ldap_group_filter'=>'ldapGroupFilter', 'ldap_display_name'=>'ldapUserDisplayName', 'ldap_group_display_name'=>'ldapGroupDisplayName',
+
+ 'ldap_tls'=>'ldapTLS', 'ldap_nocase'=>'ldapNoCase', 'ldap_quota_def'=>'ldapQuotaDefault', 'ldap_quota_attr'=>'ldapQuotaAttribute', 'ldap_email_attr'=>'ldapEmailAttribute', 'ldap_group_member_assoc_attribute'=>'ldapGroupMemberAssocAttr', 'ldap_cache_ttl'=>'ldapCacheTTL', 'home_folder_naming_rule' => 'homeFolderNamingRule', 'ldap_turn_off_cert_check' => 'turnOffCertCheck', 'ldap_configuration_active' => 'ldapConfigurationActive', 'ldap_attributes_for_user_search' => 'ldapAttributesForUserSearch', 'ldap_attributes_for_group_search' => 'ldapAttributesForGroupSearch');
+ return $array;
+ }
+
+ /**
* @brief set LDAP configuration with values delivered by an array, not read from configuration
* @param $config array that holds the config parameters in an associated array
* @param &$setParameters optional; array where the set fields will be given to
@@ -223,9 +291,7 @@ class Connection {
return false;
}
- $params = array('ldap_host'=>'ldapHost', 'ldap_port'=>'ldapPort', 'ldap_dn'=>'ldapAgentName', 'ldap_agent_password'=>'ldapAgentPassword', 'ldap_base'=>'ldapBase', 'ldap_base_users'=>'ldapBaseUsers', 'ldap_base_groups'=>'ldapBaseGroups', 'ldap_userlist_filter'=>'ldapUserFilter', 'ldap_login_filter'=>'ldapLoginFilter', 'ldap_group_filter'=>'ldapGroupFilter', 'ldap_display_name'=>'ldapUserDisplayName', 'ldap_group_display_name'=>'ldapGroupDisplayName',
-
- 'ldap_tls'=>'ldapTLS', 'ldap_nocase'=>'ldapNoCase', 'ldap_quota_def'=>'ldapQuotaDefault', 'ldap_quota_attr'=>'ldapQuotaAttribute', 'ldap_email_attr'=>'ldapEmailAttribute', 'ldap_group_member_assoc_attribute'=>'ldapGroupMemberAssocAttr', 'ldap_cache_ttl'=>'ldapCacheTTL', 'home_folder_naming_rule' => 'homeFolderNamingRule');
+ $params = $this->getConfigTranslationArray();
foreach($config as $parameter => $value) {
if(isset($this->config[$parameter])) {
@@ -247,6 +313,71 @@ class Connection {
}
/**
+ * @brief saves the current Configuration in the database
+ */
+ public function saveConfiguration() {
+ $trans = array_flip($this->getConfigTranslationArray());
+ foreach($this->config as $key => $value) {
+ \OCP\Util::writeLog('user_ldap', 'LDAP: storing key '.$key.' value '.$value, \OCP\Util::DEBUG);
+ switch ($key) {
+ case 'ldapAgentPassword':
+ $value = base64_encode($value);
+ break;
+ case 'homeFolderNamingRule':
+ $value = empty($value) ? 'opt:username' : 'attr:'.$value;
+ break;
+ case 'ldapBase':
+ case 'ldapBaseUsers':
+ case 'ldapBaseGroups':
+ case 'ldapAttributesForUserSearch':
+ case 'ldapAttributesForGroupSearch':
+ if(is_array($value)){
+ $value = implode("\n", $value);
+ }
+ break;
+ case 'ldapIgnoreNamingRules':
+ case 'ldapOverrideUuidAttribute':
+ case 'ldapUuidAttribute':
+ case 'hasPagedResultSupport':
+ continue 2;
+ }
+ if(is_null($value)) {
+ $value = '';
+ }
+
+ $this->setValue($trans[$key], $value);
+ }
+ $this->clearCache();
+ }
+
+ /**
+ * @brief get the current LDAP configuration
+ * @return array
+ */
+ public function getConfiguration() {
+ $this->readConfiguration();
+ $trans = $this->getConfigTranslationArray();
+ $config = array();
+ foreach($trans as $dbKey => $classKey) {
+ if($classKey == 'homeFolderNamingRule') {
+ if(strpos($this->config[$classKey], 'opt') === 0) {
+ $config[$dbKey] = '';
+ } else {
+ $config[$dbKey] = substr($this->config[$classKey], 5);
+ }
+ continue;
+ } else if((strpos($classKey, 'ldapBase') !== false)
+ || (strpos($classKey, 'ldapAttributes') !== false)) {
+ $config[$dbKey] = implode("\n", $this->config[$classKey]);
+ continue;
+ }
+ $config[$dbKey] = $this->config[$classKey];
+ }
+
+ return $config;
+ }
+
+ /**
* @brief Validates the user specified configuration
* @returns true if configuration seems OK, false otherwise
*/
@@ -264,9 +395,21 @@ class Connection {
\OCP\Util::writeLog('user_ldap', 'No group filter is specified, LDAP group feature will not be used.', \OCP\Util::INFO);
}
if(!in_array($this->config['ldapUuidAttribute'], array('auto', 'entryuuid', 'nsuniqueid', 'objectguid')) && (!is_null($this->configID))) {
- \OCP\Config::setAppValue($this->configID, 'ldap_uuid_attribute', 'auto');
+ \OCP\Config::setAppValue($this->configID, $this->configPrefix.'ldap_uuid_attribute', 'auto');
\OCP\Util::writeLog('user_ldap', 'Illegal value for the UUID Attribute, reset to autodetect.', \OCP\Util::INFO);
}
+ if(empty($this->config['ldapBackupPort'])) {
+ //force default
+ $this->config['ldapBackupPort'] = $this->config['ldapPort'];
+ }
+ foreach(array('ldapAttributesForUserSearch', 'ldapAttributesForGroupSearch') as $key) {
+ if(is_array($this->config[$key])
+ && count($this->config[$key]) == 1
+ && empty($this->config[$key][0])) {
+ $this->config[$key] = array();
+ }
+ }
+
//second step: critical checks. If left empty or filled wrong, set as unconfigured and give a warning.
@@ -311,9 +454,50 @@ class Connection {
}
/**
+ * @returns an associative array with the default values. Keys are correspond
+ * to config-value entries in the database table
+ */
+ public function getDefaults() {
+ return array(
+ 'ldap_host' => '',
+ 'ldap_port' => '389',
+ 'ldap_backup_host' => '',
+ 'ldap_backup_port' => '',
+ 'ldap_override_main_server' => '',
+ 'ldap_dn' => '',
+ 'ldap_agent_password' => '',
+ 'ldap_base' => '',
+ 'ldap_base_users' => '',
+ 'ldap_base_groups' => '',
+ 'ldap_userlist_filter' => 'objectClass=person',
+ 'ldap_login_filter' => 'uid=%uid',
+ 'ldap_group_filter' => 'objectClass=posixGroup',
+ 'ldap_display_name' => 'cn',
+ 'ldap_group_display_name' => 'cn',
+ 'ldap_tls' => 1,
+ 'ldap_nocase' => 0,
+ 'ldap_quota_def' => '',
+ 'ldap_quota_attr' => '',
+ 'ldap_email_attr' => '',
+ 'ldap_group_member_assoc_attribute' => 'uniqueMember',
+ 'ldap_cache_ttl' => 600,
+ 'ldap_uuid_attribute' => 'auto',
+ 'ldap_override_uuid_attribute' => 0,
+ 'home_folder_naming_rule' => 'opt:username',
+ 'ldap_turn_off_cert_check' => 0,
+ 'ldap_configuration_active' => 1,
+ 'ldap_attributes_for_user_search' => '',
+ 'ldap_attributes_for_group_search' => '',
+ );
+ }
+
+ /**
* Connects and Binds to LDAP
*/
private function establishConnection() {
+ if(!$this->config['ldapConfigurationActive']) {
+ return null;
+ }
static $phpLDAPinstalled = true;
if(!$phpLDAPinstalled) {
return false;
@@ -336,16 +520,40 @@ class Connection {
\OCP\Util::writeLog('user_ldap', 'Could not turn off SSL certificate validation.', \OCP\Util::WARN);
}
}
- $this->ldapConnectionRes = ldap_connect($this->config['ldapHost'], $this->config['ldapPort']);
- if(ldap_set_option($this->ldapConnectionRes, LDAP_OPT_PROTOCOL_VERSION, 3)) {
- if(ldap_set_option($this->ldapConnectionRes, LDAP_OPT_REFERRALS, 0)) {
- if($this->config['ldapTLS']) {
- ldap_start_tls($this->ldapConnectionRes);
+ if(!$this->config['ldapOverrideMainServer'] && !$this->getFromCache('overrideMainServer')) {
+ $this->doConnect($this->config['ldapHost'], $this->config['ldapPort']);
+ $bindStatus = $this->bind();
+ $error = ldap_errno($this->ldapConnectionRes);
+ } else {
+ $bindStatus = false;
+ $error = null;
+ }
+
+ $error = null;
+ //if LDAP server is not reachable, try the Backup (Replica!) Server
+ if((!$bindStatus && ($error == -1))
+ || $this->config['ldapOverrideMainServer']
+ || $this->getFromCache('overrideMainServer')) {
+ $this->doConnect($this->config['ldapBackupHost'], $this->config['ldapBackupPort']);
+ $bindStatus = $this->bind();
+ if($bindStatus && $error == -1) {
+ //when bind to backup server succeeded and failed to main server,
+ //skip contacting him until next cache refresh
+ $this->writeToCache('overrideMainServer', true);
}
- }
}
+ return $bindStatus;
+ }
+ }
- return $this->bind();
+ private function doConnect($host, $port) {
+ $this->ldapConnectionRes = ldap_connect($host, $port);
+ if(ldap_set_option($this->ldapConnectionRes, LDAP_OPT_PROTOCOL_VERSION, 3)) {
+ if(ldap_set_option($this->ldapConnectionRes, LDAP_OPT_REFERRALS, 0)) {
+ if($this->config['ldapTLS']) {
+ ldap_start_tls($this->ldapConnectionRes);
+ }
+ }
}
}
@@ -353,6 +561,9 @@ class Connection {
* Binds to LDAP
*/
public function bind() {
+ if(!$this->config['ldapConfigurationActive']) {
+ return false;
+ }
$ldapLogin = @ldap_bind($this->getConnectionResource(), $this->config['ldapAgentName'], $this->config['ldapAgentPassword']);
if(!$ldapLogin) {
\OCP\Util::writeLog('user_ldap', 'Bind failed: ' . ldap_errno($this->ldapConnectionRes) . ': ' . ldap_error($this->ldapConnectionRes), \OCP\Util::ERROR);
diff --git a/apps/user_ldap/lib/helper.php b/apps/user_ldap/lib/helper.php
new file mode 100644
index 00000000000..29ce998dae7
--- /dev/null
+++ b/apps/user_ldap/lib/helper.php
@@ -0,0 +1,105 @@
+<?php
+
+/**
+ * ownCloud – LDAP Helper
+ *
+ * @author Arthur Schiwon
+ * @copyright 2013 Arthur Schiwon blizzz@owncloud.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\user_ldap\lib;
+
+class Helper {
+
+ /**
+ * @brief returns prefixes for each saved LDAP/AD server configuration.
+ * @param bool optional, whether only active configuration shall be
+ * retrieved, defaults to false
+ * @return array with a list of the available prefixes
+ *
+ * Configuration prefixes are used to set up configurations for n LDAP or
+ * AD servers. Since configuration is stored in the database, table
+ * appconfig under appid user_ldap, the common identifiers in column
+ * 'configkey' have a prefix. The prefix for the very first server
+ * configuration is empty.
+ * Configkey Examples:
+ * Server 1: ldap_login_filter
+ * Server 2: s1_ldap_login_filter
+ * Server 3: s2_ldap_login_filter
+ *
+ * The prefix needs to be passed to the constructor of Connection class,
+ * except the default (first) server shall be connected to.
+ *
+ */
+ static public function getServerConfigurationPrefixes($activeConfigurations = false) {
+ $referenceConfigkey = 'ldap_configuration_active';
+
+ $query = '
+ SELECT DISTINCT `configkey`
+ FROM `*PREFIX*appconfig`
+ WHERE `configkey` LIKE ?
+ ';
+ if($activeConfigurations) {
+ $query .= ' AND `configvalue` = 1';
+ }
+ $query = \OCP\DB::prepare($query);
+
+ $serverConfigs = $query->execute(array('%'.$referenceConfigkey))->fetchAll();
+ $prefixes = array();
+
+ foreach($serverConfigs as $serverConfig) {
+ $len = strlen($serverConfig['configkey']) - strlen($referenceConfigkey);
+ $prefixes[] = substr($serverConfig['configkey'], 0, $len);
+ }
+
+ return $prefixes;
+ }
+
+ /**
+ * @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
+ */
+ static public function deleteServerConfiguration($prefix) {
+ //just to be on the safe side
+ \OCP\User::checkAdminUser();
+
+ if(!in_array($prefix, self::getServerConfigurationPrefixes())) {
+ return false;
+ }
+
+ $query = \OCP\DB::prepare('
+ DELETE
+ FROM `*PREFIX*appconfig`
+ WHERE `configkey` LIKE ?
+ AND `appid` = "user_ldap"
+ AND `configkey` NOT IN ("enabled", "installed_version", "types", "bgjUpdateGroupsLastRun")
+ ');
+ $res = $query->execute(array($prefix.'%'));
+
+ if(\OCP\DB::isError($res)) {
+ return false;
+ }
+
+ if($res->numRows() == 0) {
+ return false;
+ }
+
+ return true;
+ }
+}
+
diff --git a/apps/user_ldap/lib/proxy.php b/apps/user_ldap/lib/proxy.php
new file mode 100644
index 00000000000..c80e2163475
--- /dev/null
+++ b/apps/user_ldap/lib/proxy.php
@@ -0,0 +1,104 @@
+<?php
+
+/**
+ * ownCloud – LDAP Backend Proxy
+ *
+ * @author Arthur Schiwon
+ * @copyright 2013 Arthur Schiwon blizzz@owncloud.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\user_ldap\lib;
+
+abstract class Proxy {
+ static private $connectors = array();
+
+ public function __construct() {
+ $this->cache = \OC_Cache::getGlobalCache();
+ }
+
+ private function addConnector($configPrefix) {
+ self::$connectors[$configPrefix] = new \OCA\user_ldap\lib\Connection($configPrefix);
+ }
+
+ protected function getConnector($configPrefix) {
+ if(!isset(self::$connectors[$configPrefix])) {
+ $this->addConnector($configPrefix);
+ }
+ return self::$connectors[$configPrefix];
+ }
+
+ protected function getConnectors() {
+ return self::$connectors;
+ }
+
+ protected function getUserCacheKey($uid) {
+ return 'user-'.$uid.'-lastSeenOn';
+ }
+
+ protected function getGroupCacheKey($gid) {
+ return 'group-'.$gid.'-lastSeenOn';
+ }
+
+ abstract protected function callOnLastSeenOn($id, $method, $parameters);
+ abstract protected function walkBackends($id, $method, $parameters);
+
+ /**
+ * @brief Takes care of the request to the User backend
+ * @param $uid string, the uid connected to the request
+ * @param $method string, the method of the user backend that shall be called
+ * @param $parameters an array of parameters to be passed
+ * @return mixed, the result of the specified method
+ */
+ protected function handleRequest($id, $method, $parameters) {
+ if(!$result = $this->callOnLastSeenOn($id, $method, $parameters)) {
+ $result = $this->walkBackends($id, $method, $parameters);
+ }
+ return $result;
+ }
+
+ private function getCacheKey($key) {
+ $prefix = 'LDAP-Proxy-';
+ if(is_null($key)) {
+ return $prefix;
+ }
+ return $prefix.md5($key);
+ }
+
+ public function getFromCache($key) {
+ if(!$this->isCached($key)) {
+ return null;
+ }
+ $key = $this->getCacheKey($key);
+
+ return unserialize(base64_decode($this->cache->get($key)));
+ }
+
+ public function isCached($key) {
+ $key = $this->getCacheKey($key);
+ return $this->cache->hasKey($key);
+ }
+
+ public function writeToCache($key, $value) {
+ $key = $this->getCacheKey($key);
+ $value = base64_encode(serialize($value));
+ $this->cache->set($key, $value, '2592000');
+ }
+
+ 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 58ec8e7f7a4..d5d2f648b38 100644
--- a/apps/user_ldap/settings.php
+++ b/apps/user_ldap/settings.php
@@ -23,58 +23,46 @@
OC_Util::checkAdminUser();
-$params = array('ldap_host', 'ldap_port', 'ldap_dn', 'ldap_agent_password', 'ldap_base', 'ldap_base_users', 'ldap_base_groups', 'ldap_userlist_filter', 'ldap_login_filter', 'ldap_group_filter', 'ldap_display_name', 'ldap_group_display_name', 'ldap_tls', 'ldap_turn_off_cert_check', 'ldap_nocase', 'ldap_quota_def', 'ldap_quota_attr', 'ldap_email_attr', 'ldap_group_member_assoc_attribute', 'ldap_cache_ttl', 'home_folder_naming_rule');
+$params = array('ldap_host', 'ldap_port', 'ldap_backup_host',
+ 'ldap_backup_port', 'ldap_override_main_server', 'ldap_dn',
+ 'ldap_agent_password', 'ldap_base', 'ldap_base_users',
+ 'ldap_base_groups', 'ldap_userlist_filter',
+ 'ldap_login_filter', 'ldap_group_filter', 'ldap_display_name',
+ 'ldap_group_display_name', 'ldap_tls',
+ 'ldap_turn_off_cert_check', 'ldap_nocase', 'ldap_quota_def',
+ 'ldap_quota_attr', 'ldap_email_attr',
+ 'ldap_group_member_assoc_attribute', 'ldap_cache_ttl',
+ 'home_folder_naming_rule'
+ );
OCP\Util::addscript('user_ldap', 'settings');
OCP\Util::addstyle('user_ldap', 'settings');
-if ($_POST) {
- $clearCache = false;
- foreach($params as $param) {
- if(isset($_POST[$param])) {
- $clearCache = true;
- if('ldap_agent_password' == $param) {
- OCP\Config::setAppValue('user_ldap', $param, base64_encode($_POST[$param]));
- } elseif('home_folder_naming_rule' == $param) {
- $value = empty($_POST[$param]) ? 'opt:username' : 'attr:'.$_POST[$param];
- OCP\Config::setAppValue('user_ldap', $param, $value);
- } else {
- OCP\Config::setAppValue('user_ldap', $param, $_POST[$param]);
- }
- }
- elseif('ldap_tls' == $param) {
- // unchecked checkboxes are not included in the post paramters
- OCP\Config::setAppValue('user_ldap', $param, 0);
- }
- elseif('ldap_nocase' == $param) {
- OCP\Config::setAppValue('user_ldap', $param, 0);
- }
- elseif('ldap_turn_off_cert_check' == $param) {
- OCP\Config::setAppValue('user_ldap', $param, 0);
- }
- }
- if($clearCache) {
- $ldap = new \OCA\user_ldap\lib\Connection('user_ldap');
- $ldap->clearCache();
- }
+// fill template
+$tmpl = new OCP\Template('user_ldap', 'settings');
+
+$prefixes = \OCA\user_ldap\lib\Helper::getServerConfigurationPrefixes();
+$scoHtml = '';
+$i = 1;
+$sel = ' selected';
+foreach($prefixes as $prefix) {
+ $scoHtml .= '<option value="'.$prefix.'"'.$sel.'>'.$i++.'. Server</option>';
+ $sel = '';
+}
+if(count($prefixes) == 0) {
+ $scoHtml .= '<option value="" selected>1. Server</option>';
}
+$tmpl->assign('serverConfigurationOptions', $scoHtml, false);
-// fill template
-$tmpl = new OCP\Template( 'user_ldap', 'settings');
-foreach($params as $param) {
- $value = OCP\Config::getAppValue('user_ldap', $param, '');
- $tmpl->assign($param, $value);
+// assign default values
+if(!isset($ldap)) {
+ $ldap = new \OCA\user_ldap\lib\Connection();
+}
+$defaults = $ldap->getDefaults();
+foreach($defaults as $key => $default) {
+ $tmpl->assign($key.'_default', $default);
}
-// settings with default values
-$tmpl->assign( 'ldap_port', OCP\Config::getAppValue('user_ldap', 'ldap_port', '389'));
-$tmpl->assign( 'ldap_display_name', OCP\Config::getAppValue('user_ldap', 'ldap_display_name', 'uid'));
-$tmpl->assign( 'ldap_group_display_name', OCP\Config::getAppValue('user_ldap', 'ldap_group_display_name', 'cn'));
-$tmpl->assign( 'ldap_group_member_assoc_attribute', OCP\Config::getAppValue('user_ldap', 'ldap_group_member_assoc_attribute', 'uniqueMember'));
-$tmpl->assign( 'ldap_agent_password', base64_decode(OCP\Config::getAppValue('user_ldap', 'ldap_agent_password')));
-$tmpl->assign( 'ldap_cache_ttl', OCP\Config::getAppValue('user_ldap', 'ldap_cache_ttl', '600'));
-$hfnr = OCP\Config::getAppValue('user_ldap', 'home_folder_naming_rule', 'opt:username');
-$hfnr = ($hfnr == 'opt:username') ? '' : substr($hfnr, strlen('attr:'));
-$tmpl->assign( 'home_folder_naming_rule', $hfnr, '');
+// $tmpl->assign();
return $tmpl->fetchPage();
diff --git a/apps/user_ldap/templates/settings.php b/apps/user_ldap/templates/settings.php
index b24c6e2f025..e6fa91cc85f 100644
--- a/apps/user_ldap/templates/settings.php
+++ b/apps/user_ldap/templates/settings.php
@@ -12,31 +12,43 @@
}
?>
<fieldset id="ldapSettings-1">
- <p><label for="ldap_host"><?php echo $l->t('Host');?></label><input type="text" id="ldap_host" name="ldap_host" value="<?php echo $_['ldap_host']; ?>" title="<?php echo $l->t('You can omit the protocol, except you require SSL. Then start with ldaps://');?>"></p>
- <p><label for="ldap_base"><?php echo $l->t('Base DN');?></label><textarea id="ldap_base" name="ldap_base" placeholder="<?php echo $l->t('One Base DN per line');?>" title="<?php echo $l->t('You can specify Base DN for users and groups in the Advanced tab');?>"><?php echo $_['ldap_base']; ?></textarea></p>
- <p><label for="ldap_dn"><?php echo $l->t('User DN');?></label><input type="text" id="ldap_dn" name="ldap_dn" value="<?php echo $_['ldap_dn']; ?>" title="<?php echo $l->t('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.');?>" /></p>
- <p><label for="ldap_agent_password"><?php echo $l->t('Password');?></label><input type="password" id="ldap_agent_password" name="ldap_agent_password" value="<?php echo $_['ldap_agent_password']; ?>" title="<?php echo $l->t('For anonymous access, leave DN and Password empty.');?>" /></p>
- <p><label for="ldap_login_filter"><?php echo $l->t('User Login Filter');?></label><input type="text" id="ldap_login_filter" name="ldap_login_filter" value="<?php echo $_['ldap_login_filter']; ?>" title="<?php echo $l->t('Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action.');?>" /><br /><small><?php echo $l->t('use %%uid placeholder, e.g. "uid=%%uid"');?></small></p>
- <p><label for="ldap_userlist_filter"><?php echo $l->t('User List Filter');?></label><input type="text" id="ldap_userlist_filter" name="ldap_userlist_filter" value="<?php echo $_['ldap_userlist_filter']; ?>" title="<?php echo $l->t('Defines the filter to apply, when retrieving users.');?>" /><br /><small><?php echo $l->t('without any placeholder, e.g. "objectClass=person".');?></small></p>
- <p><label for="ldap_group_filter"><?php echo $l->t('Group Filter');?></label><input type="text" id="ldap_group_filter" name="ldap_group_filter" value="<?php echo $_['ldap_group_filter']; ?>" title="<?php echo $l->t('Defines the filter to apply, when retrieving groups.');?>" /><br /><small><?php echo $l->t('without any placeholder, e.g. "objectClass=posixGroup".');?></small></p>
+ <p><label for="ldap_serverconfig_chooser"><?php echo $l->t('Server configuration');?></label><select id="ldap_serverconfig_chooser" name="ldap_serverconfig_chooser">
+ <?php echo $_['serverConfigurationOptions']; ?>
+ <option value="NEW"><?php echo $l->t('Add Server Configuration');?></option>
+ </select>
+ <button id="ldap_action_delete_configuration" name="ldap_action_delete_configuration">Delete Configuration</button>
+ </p>
+ <p><label for="ldap_host"><?php echo $l->t('Host');?></label><input type="text" id="ldap_host" name="ldap_host" data-default="<?php echo $_['ldap_host_default']; ?>" title="<?php echo $l->t('You can omit the protocol, except you require SSL. Then start with ldaps://');?>"></p>
+ <p><label for="ldap_base"><?php echo $l->t('Base DN');?></label><textarea id="ldap_base" name="ldap_base" placeholder="<?php echo $l->t('One Base DN per line');?>" title="<?php echo $l->t('You can specify Base DN for users and groups in the Advanced tab');?>" data-default="<?php echo $_['ldap_base_default']; ?>" ></textarea></p>
+ <p><label for="ldap_dn"><?php echo $l->t('User DN');?></label><input type="text" id="ldap_dn" name="ldap_dn" data-default="<?php echo $_['ldap_dn_default']; ?>" title="<?php echo $l->t('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.');?>" /></p>
+ <p><label for="ldap_agent_password"><?php echo $l->t('Password');?></label><input type="password" id="ldap_agent_password" name="ldap_agent_password" data-default="<?php echo $_['ldap_agent_password_default']; ?>" title="<?php echo $l->t('For anonymous access, leave DN and Password empty.');?>" /></p>
+ <p><label for="ldap_login_filter"><?php echo $l->t('User Login Filter');?></label><input type="text" id="ldap_login_filter" name="ldap_login_filter" data-default="<?php echo $_['ldap_login_filter_default']; ?>" title="<?php echo $l->t('Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action.');?>" /><br /><small><?php echo $l->t('use %%uid placeholder, e.g. "uid=%%uid"');?></small></p>
+ <p><label for="ldap_userlist_filter"><?php echo $l->t('User List Filter');?></label><input type="text" id="ldap_userlist_filter" name="ldap_userlist_filter" data-default="<?php echo $_['ldap_userlist_filter_default']; ?>" title="<?php echo $l->t('Defines the filter to apply, when retrieving users.');?>" /><br /><small><?php echo $l->t('without any placeholder, e.g. "objectClass=person".');?></small></p>
+ <p><label for="ldap_group_filter"><?php echo $l->t('Group Filter');?></label><input type="text" id="ldap_group_filter" name="ldap_group_filter" data-default="<?php echo $_['ldap_group_filter_default']; ?>" title="<?php echo $l->t('Defines the filter to apply, when retrieving groups.');?>" /><br /><small><?php echo $l->t('without any placeholder, e.g. "objectClass=posixGroup".');?></small></p>
</fieldset>
<fieldset id="ldapSettings-2">
- <p><label for="ldap_port"><?php echo $l->t('Port');?></label><input type="text" id="ldap_port" name="ldap_port" value="<?php echo $_['ldap_port']; ?>" /></p>
- <p><label for="ldap_base_users"><?php echo $l->t('Base User Tree');?></label><textarea id="ldap_base_users" name="ldap_base_users" placeholder="<?php echo $l->t('One User Base DN per line');?>" title="<?php echo $l->t('Base User Tree');?>"><?php echo $_['ldap_base_users']; ?></textarea></p>
- <p><label for="ldap_base_groups"><?php echo $l->t('Base Group Tree');?></label><textarea id="ldap_base_groups" name="ldap_base_groups" placeholder="<?php echo $l->t('One Group Base DN per line');?>" title="<?php echo $l->t('Base Group Tree');?>"><?php echo $_['ldap_base_groups']; ?></textarea></p>
- <p><label for="ldap_group_member_assoc_attribute"><?php echo $l->t('Group-Member association');?></label><select id="ldap_group_member_assoc_attribute" name="ldap_group_member_assoc_attribute"><option value="uniqueMember"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] == 'uniqueMember')) echo ' selected'; ?>>uniqueMember</option><option value="memberUid"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] == 'memberUid')) echo ' selected'; ?>>memberUid</option><option value="member"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] == 'member')) echo ' selected'; ?>>member (AD)</option></select></p>
- <p><label for="ldap_tls"><?php echo $l->t('Use TLS');?></label><input type="checkbox" id="ldap_tls" name="ldap_tls" value="1"<?php if ($_['ldap_tls']) echo ' checked'; ?> title="<?php echo $l->t('Do not use it for SSL connections, it will fail.');?>" /></p>
- <p><label for="ldap_nocase"><?php echo $l->t('Case insensitve LDAP server (Windows)');?></label> <input type="checkbox" id="ldap_nocase" name="ldap_nocase" value="1"<?php if (isset($_['ldap_nocase']) && ($_['ldap_nocase'])) echo ' checked'; ?>></p>
- <p><label for="ldap_turn_off_cert_check"><?php echo $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 echo $l->t('If connection only works with this option, import the LDAP server\'s SSL certificate in your ownCloud server.');?>" value="1"<?php if ($_['ldap_turn_off_cert_check']) echo ' checked'; ?>><br/><small><?php echo $l->t('Not recommended, use for testing only.');?></small></p>
- <p><label for="ldap_display_name"><?php echo $l->t('User Display Name Field');?></label><input type="text" id="ldap_display_name" name="ldap_display_name" value="<?php echo $_['ldap_display_name']; ?>" title="<?php echo $l->t('The LDAP attribute to use to generate the user`s ownCloud name.');?>" /></p>
- <p><label for="ldap_group_display_name"><?php echo $l->t('Group Display Name Field');?></label><input type="text" id="ldap_group_display_name" name="ldap_group_display_name" value="<?php echo $_['ldap_group_display_name']; ?>" title="<?php echo $l->t('The LDAP attribute to use to generate the groups`s ownCloud name.');?>" /></p>
- <p><label for="ldap_quota_attr">Quota Field</label><input type="text" id="ldap_quota_attr" name="ldap_quota_attr" value="<?php echo $_['ldap_quota_attr']; ?>" /></p>
- <p><label for="ldap_quota_def">Quota Default</label><input type="text" id="ldap_quota_def" name="ldap_quota_def" value="<?php if (isset($_['ldap_quota_def'])) echo $_['ldap_quota_def']; ?>" title="<?php echo $l->t('in bytes');?>" /></p>
- <p><label for="ldap_email_attr">Email Field</label><input type="text" id="ldap_email_attr" name="ldap_email_attr" value="<?php echo $_['ldap_email_attr']; ?>" /></p>
- <p><label for="ldap_cache_ttl">Cache Time-To-Live</label><input type="text" id="ldap_cache_ttl" name="ldap_cache_ttl" value="<?php echo $_['ldap_cache_ttl']; ?>" title="<?php echo $l->t('in seconds. A change empties the cache.');?>" /></p>
- <p><label for="home_folder_naming_rule">User Home Folder Naming Rule</label><input type="text" id="home_folder_naming_rule" name="home_folder_naming_rule" value="<?php echo $_['home_folder_naming_rule']; ?>" title="<?php echo $l->t('Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute.');?>" /></p>
+ <p><label for="ldap_configuration_active"><?php echo $l->t('Configuration Active');?></label><input type="checkbox" id="ldap_configuration_active" name="ldap_configuration_active" value="1" data-default="<?php echo $_['ldap_configuration_active_default']; ?>" title="<?php echo $l->t('When unchecked, this configuration will be skipped.');?>" /></p>
+ <p><label for="ldap_port"><?php echo $l->t('Port');?></label><input type="number" id="ldap_port" name="ldap_port" data-default="<?php echo $_['ldap_port_default']; ?>" /></p>
+ <p><label for="ldap_backup_host"><?php echo $l->t('Backup (Replica) Host');?></label><input type="text" id="ldap_backup_host" name="ldap_backup_host" data-default="<?php echo $_['ldap_backup_host_default']; ?>" title="<?php echo $l->t('Give an optional backup host. It must be a replica of the main LDAP/AD server.');?>"></p>
+ <p><label for="ldap_backup_port"><?php echo $l->t('Backup (Replica) Port');?></label><input type="number" id="ldap_backup_port" name="ldap_backup_port" data-default="<?php echo $_['ldap_backup_port_default']; ?>" /></p>
+ <p><label for="ldap_override_main_server"><?php echo $l->t('Disable Main Server');?></label><input type="checkbox" id="ldap_override_main_server" name="ldap_override_main_server" value="1" data-default="<?php echo $_['ldap_override_main_server_default']; ?>" title="<?php echo $l->t('When switched on, ownCloud will only connect to the replica server.');?>" /></p>
+ <p><label for="ldap_base_users"><?php echo $l->t('Base User Tree');?></label><textarea id="ldap_base_users" name="ldap_base_users" placeholder="<?php echo $l->t('One User Base DN per line');?>" data-default="<?php echo $_['ldap_base_users_default']; ?>" title="<?php echo $l->t('Base User Tree');?>"></textarea></p>
+ <p><label for="ldap_attributes_for_user_search"><?php echo $l->t('User Search Attributes');?></label><textarea id="ldap_attributes_for_user_search" name="ldap_attributes_for_user_search" placeholder="<?php echo $l->t('Optional; one attribute per line');?>" data-default="<?php echo $_['ldap_attributes_for_user_search_default']; ?>" title="<?php echo $l->t('User Search Attributes');?>"></textarea></p>
+ <p><label for="ldap_base_groups"><?php echo $l->t('Base Group Tree');?></label><textarea id="ldap_base_groups" name="ldap_base_groups" placeholder="<?php echo $l->t('One Group Base DN per line');?>" data-default="<?php echo $_['ldap_base_groups_default']; ?>" title="<?php echo $l->t('Base Group Tree');?>"></textarea></p>
+ <p><label for="ldap_attributes_for_group_search"><?php echo $l->t('Group Search Attributes');?></label><textarea id="ldap_attributes_for_group_search" name="ldap_attributes_for_group_search" placeholder="<?php echo $l->t('Optional; one attribute per line');?>" data-default="<?php echo $_['ldap_attributes_for_group_search_default']; ?>" title="<?php echo $l->t('Group Search Attributes');?>"></textarea></p>
+ <p><label for="ldap_group_member_assoc_attribute"><?php echo $l->t('Group-Member association');?></label><select id="ldap_group_member_assoc_attribute" name="ldap_group_member_assoc_attribute" data-default="<?php echo $_['ldap_group_member_assoc_attribute_default']; ?>" ><option value="uniqueMember"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] == 'uniqueMember')) echo ' selected'; ?>>uniqueMember</option><option value="memberUid"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] == 'memberUid')) echo ' selected'; ?>>memberUid</option><option value="member"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] == 'member')) echo ' selected'; ?>>member (AD)</option></select></p>
+ <p><label for="ldap_tls"><?php echo $l->t('Use TLS');?></label><input type="checkbox" id="ldap_tls" name="ldap_tls" value="1" data-default="<?php echo $_['ldap_tls_default']; ?>" title="<?php echo $l->t('Do not use it for SSL connections, it will fail.');?>" /></p>
+ <p><label for="ldap_nocase"><?php echo $l->t('Case insensitve LDAP server (Windows)');?></label> <input type="checkbox" id="ldap_nocase" name="ldap_nocase" data-default="<?php echo $_['ldap_nocase_default']; ?>" value="1"<?php if (isset($_['ldap_nocase']) && ($_['ldap_nocase'])) echo ' checked'; ?>></p>
+ <p><label for="ldap_turn_off_cert_check"><?php echo $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 echo $l->t('If connection only works with this option, import the LDAP server\'s SSL certificate in your ownCloud server.');?>" data-default="<?php echo $_['ldap_turn_off_cert_check_default']; ?>" value="1"><br/><small><?php echo $l->t('Not recommended, use for testing only.');?></small></p>
+ <p><label for="ldap_display_name"><?php echo $l->t('User Display Name Field');?></label><input type="text" id="ldap_display_name" name="ldap_display_name" data-default="<?php echo $_['ldap_display_name_default']; ?>" title="<?php echo $l->t('The LDAP attribute to use to generate the user`s ownCloud name.');?>" /></p>
+ <p><label for="ldap_group_display_name"><?php echo $l->t('Group Display Name Field');?></label><input type="text" id="ldap_group_display_name" name="ldap_group_display_name" data-default="<?php echo $_['ldap_group_display_name_default']; ?>" title="<?php echo $l->t('The LDAP attribute to use to generate the groups`s ownCloud name.');?>" /></p>
+ <p><label for="ldap_quota_attr">Quota Field</label><input type="text" id="ldap_quota_attr" name="ldap_quota_attr" data-default="<?php echo $_['ldap_quota_attr_default']; ?>"/></p>
+ <p><label for="ldap_quota_def">Quota Default</label><input type="text" id="ldap_quota_def" name="ldap_quota_def" data-default="<?php echo $_['ldap_quota_def_default']; ?>" title="<?php echo $l->t('in bytes');?>" /></p>
+ <p><label for="ldap_email_attr">Email Field</label><input type="text" id="ldap_email_attr" name="ldap_email_attr" data-default="<?php echo $_['ldap_email_attr_default']; ?>" /></p>
+ <p><label for="ldap_cache_ttl">Cache Time-To-Live</label><input type="number" id="ldap_cache_ttl" name="ldap_cache_ttl" title="<?php echo $l->t('in seconds. A change empties the cache.');?>" data-default="<?php echo $_['ldap_cache_ttl_default']; ?>" /></p>
+ <p><label for="home_folder_naming_rule">User Home Folder Naming Rule</label><input type="text" id="home_folder_naming_rule" name="home_folder_naming_rule" title="<?php echo $l->t('Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute.');?>" data-default="<?php echo $_['home_folder_naming_rule_default']; ?>" /></p>
</fieldset>
- <input type="submit" value="Save" /> <button id="ldap_action_test_connection" name="ldap_action_test_connection">Test Configuration</button> <a href="http://owncloud.org/support/ldap-backend/" target="_blank"><img src="<?php echo OCP\Util::imagePath('', 'actions/info.png'); ?>" style="height:1.75ex" /> <?php echo $l->t('Help');?></a>
+ <input id="ldap_submit" type="submit" value="Save" /> <button id="ldap_action_test_connection" name="ldap_action_test_connection">Test Configuration</button> <a href="http://doc.owncloud.org/server/5.0/admin_manual/auth_ldap.html" target="_blank"><img src="<?php echo OCP\Util::imagePath('', 'actions/info.png'); ?>" style="height:1.75ex" /> <?php echo $l->t('Help');?></a>
</div>
</form>
diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php
index b3180e11358..6aa8cd9b83c 100644
--- a/apps/user_ldap/user_ldap.php
+++ b/apps/user_ldap/user_ldap.php
@@ -116,10 +116,9 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface {
if($limit <= 0) {
$limit = null;
}
- $search = empty($search) ? '*' : '*'.$search.'*';
$filter = $this->combineFilterWithAnd(array(
$this->connection->ldapUserFilter,
- $this->connection->ldapUserDisplayName.'='.$search
+ $this->getFilterPartForUserSearch($search)
));
\OCP\Util::writeLog('user_ldap', 'getUsers: Options: search '.$search.' limit '.$limit.' offset '.$offset.' Filter: '.$filter, \OCP\Util::DEBUG);
diff --git a/apps/user_ldap/user_proxy.php b/apps/user_ldap/user_proxy.php
new file mode 100644
index 00000000000..a94be3354fc
--- /dev/null
+++ b/apps/user_ldap/user_proxy.php
@@ -0,0 +1,186 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @author Artuhr Schiwon
+ * @copyright 2013 Arthur Schiwon blizzz@owncloud.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\user_ldap;
+
+class User_Proxy extends lib\Proxy implements \OCP\UserInterface {
+ private $backends = array();
+ private $refBackend = null;
+
+ /**
+ * @brief Constructor
+ * @param $serverConfigPrefixes array containing the config Prefixes
+ */
+ public function __construct($serverConfigPrefixes) {
+ parent::__construct();
+ foreach($serverConfigPrefixes as $configPrefix) {
+ $this->backends[$configPrefix] = new \OCA\user_ldap\USER_LDAP();
+ $connector = $this->getConnector($configPrefix);
+ $this->backends[$configPrefix]->setConnector($connector);
+ if(is_null($this->refBackend)) {
+ $this->refBackend = &$this->backends[$configPrefix];
+ }
+ }
+ }
+
+ /**
+ * @brief Tries the backends one after the other until a positive result is returned from the specified method
+ * @param $uid string, the uid connected to the request
+ * @param $method string, the method of the user backend that shall be called
+ * @param $parameters an array of parameters to be passed
+ * @return mixed, the result of the method or false
+ */
+ protected function walkBackends($uid, $method, $parameters) {
+ $cacheKey = $this->getUserCacheKey($uid);
+ foreach($this->backends as $configPrefix => $backend) {
+ if($result = call_user_func_array(array($backend, $method), $parameters)) {
+ $this->writeToCache($cacheKey, $configPrefix);
+ return $result;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @brief Asks the backend connected to the server that supposely takes care of the uid from the request.
+ * @param $uid string, the uid connected to the request
+ * @param $method string, the method of the user backend that shall be called
+ * @param $parameters an array of parameters to be passed
+ * @return mixed, the result of the method or false
+ */
+ protected function callOnLastSeenOn($uid, $method, $parameters) {
+ $cacheKey = $this->getUserCacheKey($uid);
+ $prefix = $this->getFromCache($cacheKey);
+ //in case the uid has been found in the past, try this stored connection first
+ if(!is_null($prefix)) {
+ if(isset($this->backends[$prefix])) {
+ $result = call_user_func_array(array($this->backends[$prefix], $method), $parameters);
+ if(!$result) {
+ //not found here, reset cache to null
+ $this->writeToCache($cacheKey, null);
+ }
+ return $result;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @brief Check if backend implements actions
+ * @param $actions bitwise-or'ed actions
+ * @returns boolean
+ *
+ * Returns the supported actions as int to be
+ * compared with OC_USER_BACKEND_CREATE_USER etc.
+ */
+ public function implementsActions($actions) {
+ //it's the same across all our user backends obviously
+ return $this->refBackend->implementsActions($actions);
+ }
+
+ /**
+ * @brief Get a list of all users
+ * @returns array with all uids
+ *
+ * Get a list of all users.
+ */
+ public function getUsers($search = '', $limit = 10, $offset = 0) {
+ //we do it just as the /OC_User implementation: do not play around with limit and offset but ask all backends
+ $users = array();
+ foreach($this->backends as $backend) {
+ $backendUsers = $backend->getUsers($search, $limit, $offset);
+ if (is_array($backendUsers)) {
+ $users = array_merge($users, $backendUsers);
+ }
+ }
+ return $users;
+ }
+
+ /**
+ * @brief check if a user exists
+ * @param string $uid the username
+ * @return boolean
+ */
+ public function userExists($uid) {
+ return $this->handleRequest($uid, 'userExists', array($uid));
+ }
+
+ /**
+ * @brief Check if the password is correct
+ * @param $uid The username
+ * @param $password The password
+ * @returns true/false
+ *
+ * Check if the password is correct without logging in the user
+ */
+ public function checkPassword($uid, $password) {
+ return $this->handleRequest($uid, 'checkPassword', array($uid, $password));
+ }
+
+ /**
+ * @brief get the user's home directory
+ * @param string $uid the username
+ * @return boolean
+ */
+ public function getHome($uid) {
+ return $this->handleRequest($uid, 'getHome', array($uid));
+ }
+
+ /**
+ * @brief get display name of the user
+ * @param $uid user ID of the user
+ * @return display name
+ */
+ public function getDisplayName($uid) {
+ return $this->handleRequest($uid, 'getDisplayName', array($uid));
+ }
+
+ /**
+ * @brief Get a list of all display names
+ * @returns array with all displayNames (value) and the corresponding uids (key)
+ *
+ * Get a list of all display names and user ids.
+ */
+ public function getDisplayNames($search = '', $limit = null, $offset = null) {
+ //we do it just as the /OC_User implementation: do not play around with limit and offset but ask all backends
+ $users = array();
+ foreach($this->backends as $backend) {
+ $backendUsers = $backend->getDisplayNames($search, $limit, $offset);
+ if (is_array($backendUsers)) {
+ $users = array_merge($users, $backendUsers);
+ }
+ }
+ return $users;
+ }
+
+ /**
+ * @brief delete a user
+ * @param $uid The username of the user to delete
+ * @returns true/false
+ *
+ * Deletes a user
+ */
+ public function deleteUser($uid) {
+ return false;
+ }
+} \ No newline at end of file
diff --git a/apps/user_webdavauth/appinfo/info.xml b/apps/user_webdavauth/appinfo/info.xml
index e51f2e9ec4f..f62f03577e8 100755
--- a/apps/user_webdavauth/appinfo/info.xml
+++ b/apps/user_webdavauth/appinfo/info.xml
@@ -7,7 +7,7 @@
This app is not compatible to the LDAP user and group backend.</description>
<licence>AGPL</licence>
<author>Frank Karlitschek</author>
- <require>4.9</require>
+ <require>4.91</require>
<shipped>true</shipped>
<types>
<authentication/>
diff --git a/apps/user_webdavauth/l10n/es_AR.php b/apps/user_webdavauth/l10n/es_AR.php
index 245a5101341..103c3738e2d 100644
--- a/apps/user_webdavauth/l10n/es_AR.php
+++ b/apps/user_webdavauth/l10n/es_AR.php
@@ -1,3 +1,5 @@
<?php $TRANSLATIONS = array(
-"URL: http://" => "URL: http://"
+"WebDAV Authentication" => "Autenticación de WevDAV",
+"URL: http://" => "URL: http://",
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "onwCloud enviará las credenciales de usuario a esta URL. Este complemento verifica la respuesta e interpretará los códigos de respuesta HTTP 401 y 403 como credenciales inválidas y todas las otras respuestas como credenciales válidas."
);
diff --git a/apps/user_webdavauth/l10n/ko.php b/apps/user_webdavauth/l10n/ko.php
index 245a5101341..578ff35e721 100644
--- a/apps/user_webdavauth/l10n/ko.php
+++ b/apps/user_webdavauth/l10n/ko.php
@@ -1,3 +1,5 @@
<?php $TRANSLATIONS = array(
-"URL: http://" => "URL: http://"
+"WebDAV Authentication" => "WebDAV ì¸ì¦",
+"URL: http://" => "URL: http://",
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloudì—ì„œ ì´ URLë¡œ ì‚¬ìš©ìž ì¸ì¦ 정보를 보냅니다. ì´ í”ŒëŸ¬ê·¸ì¸ì€ ì‘ë‹µì„ í™•ì¸í•˜ì—¬ HTTP ìƒíƒœ 코드 401ì´ë‚˜ 403ì´ ëŒì•„온 ê²½ìš°ì— ìž˜ëª»ëœ ì¸ì¦ ì •ë³´ë¡œ 간주합니다. 다른 모든 ìƒíƒœ 코드는 올바른 ì¸ì¦ ì •ë³´ë¡œ 간주합니다."
);
diff --git a/apps/user_webdavauth/l10n/pt_BR.php b/apps/user_webdavauth/l10n/pt_BR.php
index 991c746a221..6ddd00ccc3e 100644
--- a/apps/user_webdavauth/l10n/pt_BR.php
+++ b/apps/user_webdavauth/l10n/pt_BR.php
@@ -1,3 +1,5 @@
<?php $TRANSLATIONS = array(
-"WebDAV URL: http://" => "URL do WebDAV: http://"
+"WebDAV Authentication" => "Autenticação WebDAV",
+"URL: http://" => "URL: http://",
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "O ownCloud enviará as credenciais do usuário para esta URL. Este plugin verifica a resposta e interpreta o os códigos de status do HTTP 401 e 403 como credenciais inválidas, e todas as outras respostas como credenciais válidas."
);
diff --git a/apps/user_webdavauth/l10n/ru_RU.php b/apps/user_webdavauth/l10n/ru_RU.php
index 245a5101341..46f74cb972f 100644
--- a/apps/user_webdavauth/l10n/ru_RU.php
+++ b/apps/user_webdavauth/l10n/ru_RU.php
@@ -1,3 +1,4 @@
<?php $TRANSLATIONS = array(
+"WebDAV Authentication" => "WebDAV аутентификациÑ",
"URL: http://" => "URL: http://"
);
diff --git a/apps/user_webdavauth/l10n/sk_SK.php b/apps/user_webdavauth/l10n/sk_SK.php
index 27f84a24f8b..c4e6dfddc7b 100644
--- a/apps/user_webdavauth/l10n/sk_SK.php
+++ b/apps/user_webdavauth/l10n/sk_SK.php
@@ -1,5 +1,5 @@
<?php $TRANSLATIONS = array(
"WebDAV Authentication" => "WebDAV overenie",
"URL: http://" => "URL: http://",
-"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud odoÅ¡le používateľské údajena zadanú URL. Plugin skontroluje odpoveÄ a považuje návratovou hodnotu HTTP 401 a 403 za neplatné údaje a vÅ¡etky ostatné hodnoty ako platné prihlasovacie údaje."
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud odoÅ¡le používateľské údaje na zadanú URL. Plugin skontroluje odpoveÄ a považuje návratovú hodnotu HTTP 401 a 403 za neplatné údaje a vÅ¡etky ostatné hodnoty ako platné prihlasovacie údaje."
);
diff --git a/config/config.sample.php b/config/config.sample.php
index 78d513c7f23..5264e948200 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -38,6 +38,12 @@ $CONFIG = array(
/* The automatic protocol detection of ownCloud can fail in certain reverse proxy situations. This option allows to manually override the protocol detection. For example "https" */
"overwriteprotocol" => "",
+/* The automatic webroot detection of ownCloud can fail in certain reverse proxy situations. This option allows to manually override the automatic detection. For example "/domain.tld/ownCloud" */
+"overwritewebroot" => "",
+
+/* The automatic detection of ownCloud can fail in certain reverse proxy situations. This option allows to define a manually override condition as regular expression for the remote ip address. For example "^10\.0\.0\.[1-3]$" */
+"overwritecondaddr" => "",
+
/* A proxy to use to connect to the internet. For example "myproxy.org:88" */
"proxy" => "",
@@ -102,6 +108,9 @@ $CONFIG = array(
/* Password to use for sendmail mail, depends on mail_smtpauth if this is used */
"mail_smtppassword" => "",
+/* How long should ownCloud keep deleted files in the trash bin, default value: 180 days */
+'trashbin_retention_obligation' => 180,
+
/* Check 3rdparty apps for malicious code fragments */
"appcodechecker" => "",
diff --git a/core/css/styles.css b/core/css/styles.css
index 7fb800f79e2..d82bdd2db4a 100644
--- a/core/css/styles.css
+++ b/core/css/styles.css
@@ -56,14 +56,15 @@ input[type="checkbox"]:hover+label, input[type="checkbox"]:focus+label { color:#
/* BUTTONS */
input[type="submit"], input[type="button"], button, .button, #quota, div.jp-progress, select, .pager li a {
width:auto; padding:.4em;
- background-color:rgba(230,230,230,.5); font-weight:bold; color:#555; text-shadow:#fff 0 1px 0; border:1px solid #bbb; border:1px solid rgba(180,180,180,.5); cursor:pointer;
- -moz-box-shadow:0 1px 1px #fff, 0 1px 1px #fff inset; -webkit-box-shadow:0 1px 1px #fff, 0 1px 1px #fff inset; box-shadow:0 1px 1px #fff, 0 1px 1px #fff inset;
+ background-color:rgba(240,240,240,.9); font-weight:bold; color:#555; text-shadow:rgba(255,255,255,.9) 0 1px 0; border:1px solid rgba(190,190,190,.9); cursor:pointer;
+ -moz-box-shadow:0 1px 1px rgba(255,255,255,.9), 0 1px 1px rgba(255,255,255,.9) inset; -webkit-box-shadow:0 1px 1px rgba(255,255,255,.9), 0 1px 1px rgba(255,255,255,.9) inset; box-shadow:0 1px 1px rgba(255,255,255,.9), 0 1px 1px rgba(255,255,255,.9) inset;
-moz-border-radius:.5em; -webkit-border-radius:.5em; border-radius:.5em;
}
input[type="submit"]:hover, input[type="submit"]:focus, input[type="button"]:hover, select:hover, select:focus, select:active, input[type="button"]:focus, .button:hover {
- background:rgba(255,255,255,.5); color:#333;
+ background:rgba(250,250,250,.9); color:#333;
}
input[type="submit"] img, input[type="button"] img, button img, .button img { cursor:pointer; }
+#header .button { border:none; -moz-box-shadow:none; -webkit-box-shadow:none; box-shadow:none; }
/* Primary action button, use sparingly */
.primary, input[type="submit"].primary, input[type="button"].primary, button.primary, .button.primary {
diff --git a/core/img/actions/undelete.png b/core/img/actions/undelete.png
new file mode 100644
index 00000000000..d712527ef61
--- /dev/null
+++ b/core/img/actions/undelete.png
Binary files differ
diff --git a/core/js/js.js b/core/js/js.js
index 01e47edf268..9c8cf4aa625 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -672,6 +672,7 @@ $(document).ready(function(){
// all the tipsy stuff needs to be here (in reverse order) to work
$('.jp-controls .jp-previous').tipsy({gravity:'nw', fade:true, live:true});
$('.jp-controls .jp-next').tipsy({gravity:'n', fade:true, live:true});
+ $('.displayName .action').tipsy({gravity:'se', fade:true, live:true});
$('.password .action').tipsy({gravity:'se', fade:true, live:true});
$('#upload').tipsy({gravity:'w', fade:true});
$('.selectedActions a').tipsy({gravity:'s', fade:true, live:true});
diff --git a/core/l10n/ar.php b/core/l10n/ar.php
index 495bfbd0eac..218eeed0722 100644
--- a/core/l10n/ar.php
+++ b/core/l10n/ar.php
@@ -32,6 +32,7 @@
"Yes" => "نعم",
"Ok" => "مواÙÙ‚",
"Error" => "خطأ",
+"Share" => "شارك",
"Error while sharing" => "حصل خطأ عند عملية المشاركة",
"Error while unsharing" => "حصل خطأ عند عملية إزالة المشاركة",
"Error while changing permissions" => "حصل خطأ عند عملية إعادة تعيين التصريح بالتوصل",
diff --git a/core/l10n/bg_BG.php b/core/l10n/bg_BG.php
index 9a2716277a3..587991499a9 100644
--- a/core/l10n/bg_BG.php
+++ b/core/l10n/bg_BG.php
@@ -9,6 +9,7 @@
"last year" => "поÑледната година",
"years ago" => "поÑледните години",
"Error" => "Грешка",
+"Share" => "СподелÑне",
"Password" => "Парола",
"Personal" => "Лични",
"Users" => "Потребители",
diff --git a/core/l10n/bn_BD.php b/core/l10n/bn_BD.php
index 2f13a497948..d698f470152 100644
--- a/core/l10n/bn_BD.php
+++ b/core/l10n/bn_BD.php
@@ -53,6 +53,7 @@
"Error" => "সমসà§à¦¯à¦¾",
"The app name is not specified." => "অà§à¦¯à¦¾à¦ªà§‡à¦° নামটি সà§à¦¨à¦¿à¦°à§à¦¦à¦¿à¦·à§à¦Ÿ নয়।",
"The required file {file} is not installed!" => "আবশà§à¦¯à¦¿à¦• {file} টি সংসà§à¦¥à¦¾à¦ªà¦¿à¦¤ নেই !",
+"Share" => "ভাগাভাগি কর",
"Error while sharing" => "ভাগাভাগি করতে সমসà§à¦¯à¦¾ দেখা দিয়েছে ",
"Error while unsharing" => "ভাগাভাগি বাতিল করতে সমসà§à¦¯à¦¾ দেখা দিয়েছে",
"Error while changing permissions" => "অনà§à¦®à¦¤à¦¿à¦¸à¦®à§‚হ পরিবরà§à¦¤à¦¨ করতে সমসà§à¦¯à¦¾ দেখা দিয়েছে",
diff --git a/core/l10n/ca.php b/core/l10n/ca.php
index c737f9aa42f..780366aaf0e 100644
--- a/core/l10n/ca.php
+++ b/core/l10n/ca.php
@@ -53,6 +53,8 @@
"Error" => "Error",
"The app name is not specified." => "No s'ha especificat el nom de l'aplicació.",
"The required file {file} is not installed!" => "El fitxer requerit {file} no està instal·lat!",
+"Share" => "Comparteix",
+"Shared" => "Compartit",
"Error while sharing" => "Error en compartir",
"Error while unsharing" => "Error en deixar de compartir",
"Error while changing permissions" => "Error en canviar els permisos",
diff --git a/core/l10n/cs_CZ.php b/core/l10n/cs_CZ.php
index 848415d6eac..a8fa035711c 100644
--- a/core/l10n/cs_CZ.php
+++ b/core/l10n/cs_CZ.php
@@ -53,6 +53,8 @@
"Error" => "Chyba",
"The app name is not specified." => "Není urÄen název aplikace.",
"The required file {file} is not installed!" => "Požadovaný soubor {file} není nainstalován.",
+"Share" => "Sdílet",
+"Shared" => "Sdílené",
"Error while sharing" => "Chyba při sdílení",
"Error while unsharing" => "Chyba při rušení sdílení",
"Error while changing permissions" => "Chyba při změně oprávnění",
diff --git a/core/l10n/da.php b/core/l10n/da.php
index 3252dcf495e..ca23b622289 100644
--- a/core/l10n/da.php
+++ b/core/l10n/da.php
@@ -53,6 +53,7 @@
"Error" => "Fejl",
"The app name is not specified." => "Den app navn er ikke angivet.",
"The required file {file} is not installed!" => "Den krævede fil {file} er ikke installeret!",
+"Share" => "Del",
"Error while sharing" => "Fejl under deling",
"Error while unsharing" => "Fejl under annullering af deling",
"Error while changing permissions" => "Fejl under justering af rettigheder",
diff --git a/core/l10n/de.php b/core/l10n/de.php
index b67234189fe..358e8e3e756 100644
--- a/core/l10n/de.php
+++ b/core/l10n/de.php
@@ -53,6 +53,7 @@
"Error" => "Fehler",
"The app name is not specified." => "Der App-Name ist nicht angegeben.",
"The required file {file} is not installed!" => "Die benötigte Datei {file} ist nicht installiert.",
+"Share" => "Freigeben",
"Error while sharing" => "Fehler beim Freigeben",
"Error while unsharing" => "Fehler beim Aufheben der Freigabe",
"Error while changing permissions" => "Fehler beim Ändern der Rechte",
diff --git a/core/l10n/de_DE.php b/core/l10n/de_DE.php
index 59b05bbe7c1..ca5b843a832 100644
--- a/core/l10n/de_DE.php
+++ b/core/l10n/de_DE.php
@@ -53,6 +53,8 @@
"Error" => "Fehler",
"The app name is not specified." => "Der App-Name ist nicht angegeben.",
"The required file {file} is not installed!" => "Die benötigte Datei {file} ist nicht installiert.",
+"Share" => "Freigeben",
+"Shared" => "Freigegeben",
"Error while sharing" => "Fehler bei der Freigabe",
"Error while unsharing" => "Fehler bei der Aufhebung der Freigabe",
"Error while changing permissions" => "Fehler bei der Änderung der Rechte",
diff --git a/core/l10n/el.php b/core/l10n/el.php
index 79cffb0685d..74ec378b9df 100644
--- a/core/l10n/el.php
+++ b/core/l10n/el.php
@@ -53,6 +53,7 @@
"Error" => "Σφάλμα",
"The app name is not specified." => "Δεν καθοÏίστηκε το όνομα της εφαÏμογής.",
"The required file {file} is not installed!" => "Το απαιτοÏμενο αÏχείο {file} δεν εγκαταστάθηκε!",
+"Share" => "ΔιαμοιÏασμός",
"Error while sharing" => "Σφάλμα κατά τον διαμοιÏασμό",
"Error while unsharing" => "Σφάλμα κατά το σταμάτημα του διαμοιÏασμοÏ",
"Error while changing permissions" => "Σφάλμα κατά την αλλαγή των δικαιωμάτων",
diff --git a/core/l10n/eo.php b/core/l10n/eo.php
index 0839cfe9f6f..7c0e65f4e03 100644
--- a/core/l10n/eo.php
+++ b/core/l10n/eo.php
@@ -53,6 +53,7 @@
"Error" => "Eraro",
"The app name is not specified." => "Ne indikiÄis nomo de la aplikaĵo.",
"The required file {file} is not installed!" => "La necesa dosiero {file} ne instaliÄis!",
+"Share" => "Kunhavigi",
"Error while sharing" => "Eraro dum kunhavigo",
"Error while unsharing" => "Eraro dum malkunhavigo",
"Error while changing permissions" => "Eraro dum ÅanÄo de permesoj",
diff --git a/core/l10n/es.php b/core/l10n/es.php
index 4bdbcac0e95..e046e3bf7a0 100644
--- a/core/l10n/es.php
+++ b/core/l10n/es.php
@@ -53,6 +53,8 @@
"Error" => "Fallo",
"The app name is not specified." => "El nombre de la app no se ha especificado.",
"The required file {file} is not installed!" => "El fichero {file} requerido, no está instalado.",
+"Share" => "Compartir",
+"Shared" => "Compartido",
"Error while sharing" => "Error compartiendo",
"Error while unsharing" => "Error descompartiendo",
"Error while changing permissions" => "Error cambiando permisos",
@@ -82,6 +84,8 @@
"Error setting expiration date" => "Error estableciendo fecha de caducidad",
"Sending ..." => "Enviando...",
"Email sent" => "Correo electrónico enviado",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "La actualización ha fracasado. Por favor, informe este problema a la <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">Comunidad de ownCloud</ a>.",
+"The update was successful. Redirecting you to ownCloud now." => "La actualización se ha realizado correctamente. Redireccionando a ownCloud ahora.",
"ownCloud password reset" => "Reiniciar contraseña de ownCloud",
"Use the following link to reset your password: {link}" => "Utiliza el siguiente enlace para restablecer tu contraseña: {link}",
"You will receive a link to reset your password via Email." => "Recibirás un enlace por correo electrónico para restablecer tu contraseña",
diff --git a/core/l10n/es_AR.php b/core/l10n/es_AR.php
index d588ac950c9..1ce26416f6e 100644
--- a/core/l10n/es_AR.php
+++ b/core/l10n/es_AR.php
@@ -53,6 +53,8 @@
"Error" => "Error",
"The app name is not specified." => "El nombre de la aplicación no esta especificado.",
"The required file {file} is not installed!" => "¡El archivo requerido {file} no está instalado!",
+"Share" => "Compartir",
+"Shared" => "Compartido",
"Error while sharing" => "Error al compartir",
"Error while unsharing" => "Error en el procedimiento de ",
"Error while changing permissions" => "Error al cambiar permisos",
@@ -82,6 +84,8 @@
"Error setting expiration date" => "Error al asignar fecha de vencimiento",
"Sending ..." => "Enviando...",
"Email sent" => "Email enviado",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "La actualización no pudo ser completada. Por favor, reportá el inconveniente a la comunidad <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud</a>.",
+"The update was successful. Redirecting you to ownCloud now." => "La actualización fue exitosa. Estás siendo redirigido a ownCloud.",
"ownCloud password reset" => "Restablecer contraseña de ownCloud",
"Use the following link to reset your password: {link}" => "Usá este enlace para restablecer tu contraseña: {link}",
"You will receive a link to reset your password via Email." => "Vas a recibir un enlace por e-mail para restablecer tu contraseña",
diff --git a/core/l10n/et_EE.php b/core/l10n/et_EE.php
index 4e3c003c9f6..f4328de9901 100644
--- a/core/l10n/et_EE.php
+++ b/core/l10n/et_EE.php
@@ -38,6 +38,7 @@
"Yes" => "Jah",
"Ok" => "Ok",
"Error" => "Viga",
+"Share" => "Jaga",
"Error while sharing" => "Viga jagamisel",
"Error while unsharing" => "Viga jagamise lõpetamisel",
"Error while changing permissions" => "Viga õiguste muutmisel",
diff --git a/core/l10n/eu.php b/core/l10n/eu.php
index da6aad73383..ed919d64d9d 100644
--- a/core/l10n/eu.php
+++ b/core/l10n/eu.php
@@ -53,6 +53,8 @@
"Error" => "Errorea",
"The app name is not specified." => "App izena ez dago zehaztuta.",
"The required file {file} is not installed!" => "Beharrezkoa den {file} fitxategia ez dago instalatuta!",
+"Share" => "Elkarbanatu",
+"Shared" => "Elkarbanatuta",
"Error while sharing" => "Errore bat egon da elkarbanatzean",
"Error while unsharing" => "Errore bat egon da elkarbanaketa desegitean",
"Error while changing permissions" => "Errore bat egon da baimenak aldatzean",
diff --git a/core/l10n/fa.php b/core/l10n/fa.php
index 7ed2831d821..6f1f65bd34f 100644
--- a/core/l10n/fa.php
+++ b/core/l10n/fa.php
@@ -53,6 +53,7 @@
"Error" => "خطا",
"The app name is not specified." => "نام برنامه تعیین نشده است.",
"The required file {file} is not installed!" => "پرونده { پرونده} درخواست شده نصب نشده است !",
+"Share" => "اشتراک‌گزاری",
"Error while sharing" => "خطا درحال به اشتراک گذاشتن",
"Error while unsharing" => "خطا درحال لغو اشتراک",
"Error while changing permissions" => "خطا در حال تغییر مجوز",
diff --git a/core/l10n/fi_FI.php b/core/l10n/fi_FI.php
index 6b5a833f36e..1f2568f9513 100644
--- a/core/l10n/fi_FI.php
+++ b/core/l10n/fi_FI.php
@@ -49,6 +49,7 @@
"Error" => "Virhe",
"The app name is not specified." => "Sovelluksen nimeä ei ole määritelty.",
"The required file {file} is not installed!" => "Vaadittua tiedostoa {file} ei ole asennettu!",
+"Share" => "Jaa",
"Error while sharing" => "Virhe jaettaessa",
"Error while unsharing" => "Virhe jakoa peruttaessa",
"Error while changing permissions" => "Virhe oikeuksia muuttaessa",
@@ -77,6 +78,8 @@
"Error setting expiration date" => "Virhe päättymispäivää asettaessa",
"Sending ..." => "Lähetetään...",
"Email sent" => "Sähköposti lähetetty",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "Päivitys epäonnistui. Ilmoita ongelmasta <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud-yhteisölle</a>.",
+"The update was successful. Redirecting you to ownCloud now." => "Päivitys onnistui. Selain ohjautuu nyt ownCloudiisi.",
"ownCloud password reset" => "ownCloud-salasanan nollaus",
"Use the following link to reset your password: {link}" => "Voit palauttaa salasanasi seuraavassa osoitteessa: {link}",
"You will receive a link to reset your password via Email." => "Saat sähköpostitse linkin nollataksesi salasanan.",
diff --git a/core/l10n/fr.php b/core/l10n/fr.php
index 46aac990bd2..202203753d2 100644
--- a/core/l10n/fr.php
+++ b/core/l10n/fr.php
@@ -53,6 +53,7 @@
"Error" => "Erreur",
"The app name is not specified." => "Le nom de l'application n'est pas spécifié.",
"The required file {file} is not installed!" => "Le fichier requis {file} n'est pas installé !",
+"Share" => "Partager",
"Error while sharing" => "Erreur lors de la mise en partage",
"Error while unsharing" => "Erreur lors de l'annulation du partage",
"Error while changing permissions" => "Erreur lors du changement des permissions",
diff --git a/core/l10n/gl.php b/core/l10n/gl.php
index a45d45d908c..e96d6962c90 100644
--- a/core/l10n/gl.php
+++ b/core/l10n/gl.php
@@ -53,6 +53,7 @@
"Error" => "Erro",
"The app name is not specified." => "Non se especificou o nome do aplicativo.",
"The required file {file} is not installed!" => "Non está instalado o ficheiro {file} que se precisa",
+"Share" => "Compartir",
"Error while sharing" => "Produciuse un erro ao compartir",
"Error while unsharing" => "Produciuse un erro ao deixar de compartir",
"Error while changing permissions" => "Produciuse un erro ao cambiar os permisos",
diff --git a/core/l10n/he.php b/core/l10n/he.php
index 88da2e8ddea..b7292c6edee 100644
--- a/core/l10n/he.php
+++ b/core/l10n/he.php
@@ -53,6 +53,7 @@
"Error" => "שגי××”",
"The app name is not specified." => "×©× ×”×™×™×©×•× ×œ× ×¦×•×™×Ÿ.",
"The required file {file} is not installed!" => "הקובץ הנדרש {file} ×ינו מותקן!",
+"Share" => "שתף",
"Error while sharing" => "שגי××” במהלך השיתוף",
"Error while unsharing" => "שגי××” במהלך ביטול השיתוף",
"Error while changing permissions" => "שגי××” במהלך שינוי ההגדרות",
diff --git a/core/l10n/hr.php b/core/l10n/hr.php
index 32e3779ee4b..78b767305a3 100644
--- a/core/l10n/hr.php
+++ b/core/l10n/hr.php
@@ -35,6 +35,7 @@
"Yes" => "Da",
"Ok" => "U redu",
"Error" => "Pogreška",
+"Share" => "Podijeli",
"Error while sharing" => "Greška prilikom djeljenja",
"Error while unsharing" => "GreÅ¡ka prilikom iskljuÄivanja djeljenja",
"Error while changing permissions" => "Greška prilikom promjena prava",
diff --git a/core/l10n/hu_HU.php b/core/l10n/hu_HU.php
index e03c6af27f5..30ddc7b8677 100644
--- a/core/l10n/hu_HU.php
+++ b/core/l10n/hu_HU.php
@@ -53,6 +53,7 @@
"Error" => "Hiba",
"The app name is not specified." => "Az alkalmazás neve nincs megadva.",
"The required file {file} is not installed!" => "A szükséges fájl: {file} nincs telepítve!",
+"Share" => "Megosztás",
"Error while sharing" => "Nem sikerült létrehozni a megosztást",
"Error while unsharing" => "Nem sikerült visszavonni a megosztást",
"Error while changing permissions" => "Nem sikerült módosítani a jogosultságokat",
diff --git a/core/l10n/ia.php b/core/l10n/ia.php
index 08f283450f8..7f2eac17367 100644
--- a/core/l10n/ia.php
+++ b/core/l10n/ia.php
@@ -21,6 +21,7 @@
"December" => "Decembre",
"Settings" => "Configurationes",
"Cancel" => "Cancellar",
+"Share" => "Compartir",
"Password" => "Contrasigno",
"ownCloud password reset" => "Reinitialisation del contrasigno de ownCLoud",
"Username" => "Nomine de usator",
diff --git a/core/l10n/id.php b/core/l10n/id.php
index 2c66ea8ce3d..896d444e833 100644
--- a/core/l10n/id.php
+++ b/core/l10n/id.php
@@ -36,6 +36,7 @@
"Yes" => "Ya",
"Ok" => "Oke",
"Error" => "gagal",
+"Share" => "berbagi",
"Error while sharing" => "gagal ketika membagikan",
"Error while unsharing" => "gagal ketika membatalkan pembagian",
"Error while changing permissions" => "gagal ketika merubah perijinan",
diff --git a/core/l10n/is.php b/core/l10n/is.php
index 6df2573100e..98766efc2c9 100644
--- a/core/l10n/is.php
+++ b/core/l10n/is.php
@@ -53,6 +53,7 @@
"Error" => "Villa",
"The app name is not specified." => "Nafn forrits ekki tilgreint",
"The required file {file} is not installed!" => "Umbeðina skráin {file} ekki tiltæk!",
+"Share" => "Deila",
"Error while sharing" => "Villa við deilingu",
"Error while unsharing" => "Villa við að hætta deilingu",
"Error while changing permissions" => "Villa við að breyta aðgangsheimildum",
diff --git a/core/l10n/it.php b/core/l10n/it.php
index 88749320d5b..ec094f643a4 100644
--- a/core/l10n/it.php
+++ b/core/l10n/it.php
@@ -53,6 +53,8 @@
"Error" => "Errore",
"The app name is not specified." => "Il nome dell'applicazione non è specificato.",
"The required file {file} is not installed!" => "Il file richiesto {file} non è installato!",
+"Share" => "Condividi",
+"Shared" => "Condivisi",
"Error while sharing" => "Errore durante la condivisione",
"Error while unsharing" => "Errore durante la rimozione della condivisione",
"Error while changing permissions" => "Errore durante la modifica dei permessi",
@@ -122,12 +124,12 @@
"web services under your control" => "servizi web nelle tue mani",
"Log out" => "Esci",
"Automatic logon rejected!" => "Accesso automatico rifiutato.",
-"If you did not change your password recently, your account may be compromised!" => "Se non hai cambiato la password recentemente, il tuo account potrebbe essere stato compromesso.",
+"If you did not change your password recently, your account may be compromised!" => "Se non hai cambiato la password recentemente, il tuo account potrebbe essere compromesso.",
"Please change your password to secure your account again." => "Cambia la password per rendere nuovamente sicuro il tuo account.",
"Lost your password?" => "Hai perso la password?",
"remember" => "ricorda",
"Log in" => "Accedi",
"prev" => "precedente",
"next" => "successivo",
-"Updating ownCloud to version %s, this may take a while." => "Aggiornamento di ownCloud alla versione %s in corso, potrebbe richiedere del tempo."
+"Updating ownCloud to version %s, this may take a while." => "Aggiornamento di ownCloud alla versione %s in corso, ciò potrebbe richiedere del tempo."
);
diff --git a/core/l10n/ja_JP.php b/core/l10n/ja_JP.php
index 7995147f062..155c201d9b7 100644
--- a/core/l10n/ja_JP.php
+++ b/core/l10n/ja_JP.php
@@ -53,6 +53,8 @@
"Error" => "エラー",
"The app name is not specified." => "アプリåãŒã—ã¦ã„ã•ã‚Œã¦ã„ã¾ã›ã‚“。",
"The required file {file} is not installed!" => "å¿…è¦ãªãƒ•ã‚¡ã‚¤ãƒ« {file} ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã¾ã›ã‚“ï¼",
+"Share" => "共有",
+"Shared" => "共有中",
"Error while sharing" => "共有ã§ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿ",
"Error while unsharing" => "共有解除ã§ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿ",
"Error while changing permissions" => "権é™å¤‰æ›´ã§ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿ",
diff --git a/core/l10n/ka_GE.php b/core/l10n/ka_GE.php
index 58771e080b3..ab4045601f9 100644
--- a/core/l10n/ka_GE.php
+++ b/core/l10n/ka_GE.php
@@ -38,6 +38,7 @@
"Yes" => "კი",
"Ok" => "დიáƒáƒ®",
"Error" => "შეცდáƒáƒ›áƒ",
+"Share" => "გáƒáƒ–იáƒáƒ áƒ”ბáƒ",
"Error while sharing" => "შეცდáƒáƒ›áƒ გáƒáƒ–იáƒáƒ áƒ”ბის დრáƒáƒ¡",
"Error while unsharing" => "შეცდáƒáƒ›áƒ გáƒáƒ–იáƒáƒ áƒ”ბის გáƒáƒ£áƒ¥áƒ›áƒ”ბის დრáƒáƒ¡",
"Error while changing permissions" => "შეცდáƒáƒ›áƒ დáƒáƒ¨áƒ•áƒ”ბის ცვლილების დრáƒáƒ¡",
diff --git a/core/l10n/ko.php b/core/l10n/ko.php
index 5897b890ec5..91c00c4a570 100644
--- a/core/l10n/ko.php
+++ b/core/l10n/ko.php
@@ -1,8 +1,8 @@
<?php $TRANSLATIONS = array(
-"User %s shared a file with you" => "User %s ê°€ 당신과 파ì¼ì„ 공유하였습니다.",
-"User %s shared a folder with you" => "User %s ê°€ 당신과 í´ë”를 공유하였습니다.",
-"User %s shared the file \"%s\" with you. It is available for download here: %s" => "User %s ê°€ íŒŒì¼ \"%s\"를 당신과 공유하였습니다. 다운로드는 여기서 %s í•  수 있습니다.",
-"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "User %s ê°€ í´ë” \"%s\"를 당신과 공유하였습니다. 다운로드는 여기서 %s í•  수 있습니다.",
+"User %s shared a file with you" => "%s ë‹˜ì´ íŒŒì¼ì„ 공유하였습니다",
+"User %s shared a folder with you" => "%s ë‹˜ì´ í´ë”를 공유하였습니다",
+"User %s shared the file \"%s\" with you. It is available for download here: %s" => "%s ë‹˜ì´ íŒŒì¼ \"%s\"ì„(를) 공유하였습니다. 여기ì—ì„œ 다운로드할 수 있습니다: %s",
+"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "%s ë‹˜ì´ í´ë” \"%s\"ì„(를) 공유하였습니다. 여기ì—ì„œ 다운로드할 수 있습니다: %s",
"Category type not provided." => "분류 형ì‹ì´ 제공ë˜ì§€ 않았습니다.",
"No category to add?" => "추가할 분류가 없습니까?",
"This category already exists: " => "ì´ ë¶„ë¥˜ëŠ” ì´ë¯¸ 존재합니다:",
@@ -53,6 +53,8 @@
"Error" => "오류",
"The app name is not specified." => "앱 ì´ë¦„ì´ ì§€ì •ë˜ì§€ 않았습니다.",
"The required file {file} is not installed!" => "필요한 íŒŒì¼ {file}ì´(ê°€) 설치ë˜ì§€ 않았습니다!",
+"Share" => "공유",
+"Shared" => "공유ë¨",
"Error while sharing" => "공유하는 중 오류 ë°œìƒ",
"Error while unsharing" => "공유 해제하는 중 오류 ë°œìƒ",
"Error while changing permissions" => "권한 변경하는 중 오류 ë°œìƒ",
@@ -82,6 +84,8 @@
"Error setting expiration date" => "만료 날짜 설정 오류",
"Sending ..." => "전송 중...",
"Email sent" => "ì´ë©”ì¼ ë°œì†¡ë¨",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "ì—…ë°ì´íŠ¸ê°€ 실패하였습니다. ì´ ë¬¸ì œë¥¼ <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud 커뮤니티</a>ì— ë³´ê³ í•´ 주십시오.",
+"The update was successful. Redirecting you to ownCloud now." => "ì—…ë°ì´íŠ¸ê°€ 성공하였습니다. ownCloudë¡œ ëŒì•„갑니다.",
"ownCloud password reset" => "ownCloud 암호 재설정",
"Use the following link to reset your password: {link}" => "ë‹¤ìŒ ë§í¬ë¥¼ 사용하여 암호를 재설정할 수 있습니다: {link}",
"You will receive a link to reset your password via Email." => "ì´ë©”ì¼ë¡œ 암호 재설정 ë§í¬ë¥¼ 보냈습니다.",
@@ -127,5 +131,5 @@
"Log in" => "로그ì¸",
"prev" => "ì´ì „",
"next" => "다ìŒ",
-"Updating ownCloud to version %s, this may take a while." => "ownCloud 를 버젼 %së¡œ ì—…ë°ì´íŠ¸ 하는 중, ì‹œê°„ì´ ì†Œìš”ë©ë‹ˆë‹¤."
+"Updating ownCloud to version %s, this may take a while." => "ownCloud를 버전 %s(으)ë¡œ ì—…ë°ì´íŠ¸í•©ë‹ˆë‹¤. ìž ì‹œ 기다려 주십시오."
);
diff --git a/core/l10n/lb.php b/core/l10n/lb.php
index 85d83d1f953..4069a778365 100644
--- a/core/l10n/lb.php
+++ b/core/l10n/lb.php
@@ -35,6 +35,7 @@
"Yes" => "Jo",
"Ok" => "OK",
"Error" => "Fehler",
+"Share" => "Deelen",
"Password" => "Passwuert",
"Unshare" => "Net méi deelen",
"create" => "erstellen",
diff --git a/core/l10n/lt_LT.php b/core/l10n/lt_LT.php
index 040a5a7f7fc..c2dc47c826c 100644
--- a/core/l10n/lt_LT.php
+++ b/core/l10n/lt_LT.php
@@ -38,6 +38,7 @@
"Yes" => "Taip",
"Ok" => "Gerai",
"Error" => "Klaida",
+"Share" => "Dalintis",
"Error while sharing" => "Klaida, dalijimosi metu",
"Error while unsharing" => "Klaida, kai atšaukiamas dalijimasis",
"Error while changing permissions" => "Klaida, keiÄiant privilegijas",
diff --git a/core/l10n/lv.php b/core/l10n/lv.php
index 66866249e76..dd63ab6c90f 100644
--- a/core/l10n/lv.php
+++ b/core/l10n/lv.php
@@ -21,6 +21,7 @@
"Settings" => "Iestatījumi",
"Cancel" => "Atcelt",
"Error" => "Kļūme",
+"Share" => "Līdzdalīt",
"Password" => "Parole",
"Unshare" => "PÄrtraukt lÄ«dzdalÄ«Å¡anu",
"Use the following link to reset your password: {link}" => "Izmantojiet šo linku lai mainītu paroli",
diff --git a/core/l10n/mk.php b/core/l10n/mk.php
index 3a8991437ba..0b202fa6667 100644
--- a/core/l10n/mk.php
+++ b/core/l10n/mk.php
@@ -53,6 +53,7 @@
"Error" => "Грешка",
"The app name is not specified." => "Името на апликацијата не е Ñпецифицирано.",
"The required file {file} is not installed!" => "Задолжителната датотека {file} не е инÑталирана!",
+"Share" => "Сподели",
"Error while sharing" => "Грешка при Ñподелување",
"Error while unsharing" => "Грешка при прекин на Ñподелување",
"Error while changing permissions" => "Грешка при промена на привилегии",
diff --git a/core/l10n/ms_MY.php b/core/l10n/ms_MY.php
index 3eff044ac55..477e82ea9f1 100644
--- a/core/l10n/ms_MY.php
+++ b/core/l10n/ms_MY.php
@@ -27,6 +27,7 @@
"Yes" => "Ya",
"Ok" => "Ok",
"Error" => "Ralat",
+"Share" => "Kongsi",
"Password" => "Kata laluan",
"ownCloud password reset" => "Set semula kata lalaun ownCloud",
"Use the following link to reset your password: {link}" => "Guna pautan berikut untuk menetapkan semula kata laluan anda: {link}",
diff --git a/core/l10n/nb_NO.php b/core/l10n/nb_NO.php
index a39e5d44bc4..65d6ea00cce 100644
--- a/core/l10n/nb_NO.php
+++ b/core/l10n/nb_NO.php
@@ -41,6 +41,7 @@
"Yes" => "Ja",
"Ok" => "Ok",
"Error" => "Feil",
+"Share" => "Del",
"Error while sharing" => "Feil under deling",
"Share with" => "Del med",
"Share with link" => "Del med link",
diff --git a/core/l10n/nl.php b/core/l10n/nl.php
index 27d32cfcc5e..91ab7827fd6 100644
--- a/core/l10n/nl.php
+++ b/core/l10n/nl.php
@@ -53,6 +53,7 @@
"Error" => "Fout",
"The app name is not specified." => "De app naam is niet gespecificeerd.",
"The required file {file} is not installed!" => "Het vereiste bestand {file} is niet geïnstalleerd!",
+"Share" => "Delen",
"Error while sharing" => "Fout tijdens het delen",
"Error while unsharing" => "Fout tijdens het stoppen met delen",
"Error while changing permissions" => "Fout tijdens het veranderen van permissies",
diff --git a/core/l10n/oc.php b/core/l10n/oc.php
index 3443f9d501e..5b399dd8264 100644
--- a/core/l10n/oc.php
+++ b/core/l10n/oc.php
@@ -36,6 +36,7 @@
"Yes" => "Ã’c",
"Ok" => "D'accòrdi",
"Error" => "Error",
+"Share" => "Parteja",
"Error while sharing" => "Error al partejar",
"Error while unsharing" => "Error al non partejar",
"Error while changing permissions" => "Error al cambiar permissions",
diff --git a/core/l10n/pl.php b/core/l10n/pl.php
index 142593930d0..1376fa1359d 100644
--- a/core/l10n/pl.php
+++ b/core/l10n/pl.php
@@ -53,6 +53,8 @@
"Error" => "BÅ‚Ä…d",
"The app name is not specified." => "Nazwa aplikacji nie jest określona.",
"The required file {file} is not installed!" => "Żądany plik {file} nie jest zainstalowany!",
+"Share" => "Udostępnij",
+"Shared" => "Udostępniono",
"Error while sharing" => "Błąd podczas współdzielenia",
"Error while unsharing" => "Błąd podczas zatrzymywania współdzielenia",
"Error while changing permissions" => "Błąd przy zmianie uprawnień",
diff --git a/core/l10n/pt_BR.php b/core/l10n/pt_BR.php
index 8ca2dd4fd0e..929f298c4c3 100644
--- a/core/l10n/pt_BR.php
+++ b/core/l10n/pt_BR.php
@@ -1,4 +1,8 @@
<?php $TRANSLATIONS = array(
+"User %s shared a file with you" => "O usuário %s compartilhou um arquivo com você",
+"User %s shared a folder with you" => "O usuário %s compartilhou uma pasta com você",
+"User %s shared the file \"%s\" with you. It is available for download here: %s" => "O usuário %s compartilhou com você o arquivo \"%s\", que está disponível para download em: %s",
+"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "O usuário %s compartilhou com você a pasta \"%s\", que está disponível para download em: %s",
"Category type not provided." => "Tipo de categoria não fornecido.",
"No category to add?" => "Nenhuma categoria adicionada?",
"This category already exists: " => "Essa categoria já existe",
@@ -49,6 +53,8 @@
"Error" => "Erro",
"The app name is not specified." => "O nome do app não foi especificado.",
"The required file {file} is not installed!" => "O arquivo {file} necessário não está instalado!",
+"Share" => "Compartilhar",
+"Shared" => "Compartilhados",
"Error while sharing" => "Erro ao compartilhar",
"Error while unsharing" => "Erro ao descompartilhar",
"Error while changing permissions" => "Erro ao mudar permissões",
@@ -58,6 +64,8 @@
"Share with link" => "Compartilhar com link",
"Password protect" => "Proteger com senha",
"Password" => "Senha",
+"Email link to person" => "Enviar link por e-mail",
+"Send" => "Enviar",
"Set expiration date" => "Definir data de expiração",
"Expiration date" => "Data de expiração",
"Share via email:" => "Compartilhar via e-mail:",
@@ -74,6 +82,10 @@
"Password protected" => "Protegido com senha",
"Error unsetting expiration date" => "Erro ao remover data de expiração",
"Error setting expiration date" => "Erro ao definir data de expiração",
+"Sending ..." => "Enviando ...",
+"Email sent" => "E-mail enviado",
+"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "A atualização falhou. Por favor, relate este problema para a <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">comunidade ownCloud</a>.",
+"The update was successful. Redirecting you to ownCloud now." => "A atualização teve êxito. Você será redirecionado ao ownCloud agora.",
"ownCloud password reset" => "Redefinir senha ownCloud",
"Use the following link to reset your password: {link}" => "Use o seguinte link para redefinir sua senha: {link}",
"You will receive a link to reset your password via Email." => "Você receberá um link para redefinir sua senha via e-mail.",
@@ -118,5 +130,6 @@
"remember" => "lembrete",
"Log in" => "Log in",
"prev" => "anterior",
-"next" => "próximo"
+"next" => "próximo",
+"Updating ownCloud to version %s, this may take a while." => "Atualizando ownCloud para a versão %s, isto pode levar algum tempo."
);
diff --git a/core/l10n/pt_PT.php b/core/l10n/pt_PT.php
index 4f60bf2694d..2189a7e811c 100644
--- a/core/l10n/pt_PT.php
+++ b/core/l10n/pt_PT.php
@@ -53,6 +53,8 @@
"Error" => "Erro",
"The app name is not specified." => "O nome da aplicação não foi especificado",
"The required file {file} is not installed!" => "O ficheiro necessário {file} não está instalado!",
+"Share" => "Partilhar",
+"Shared" => "Partilhado",
"Error while sharing" => "Erro ao partilhar",
"Error while unsharing" => "Erro ao deixar de partilhar",
"Error while changing permissions" => "Erro ao mudar permissões",
diff --git a/core/l10n/ro.php b/core/l10n/ro.php
index 3e389bfab0c..83587fa4a76 100644
--- a/core/l10n/ro.php
+++ b/core/l10n/ro.php
@@ -53,6 +53,7 @@
"Error" => "Eroare",
"The app name is not specified." => "Numele aplicației nu a fost specificat",
"The required file {file} is not installed!" => "Fișierul obligatoriu {file} nu este instalat!",
+"Share" => "Partajează",
"Error while sharing" => "Eroare la partajare",
"Error while unsharing" => "Eroare la anularea partajării",
"Error while changing permissions" => "Eroare la modificarea permisiunilor",
diff --git a/core/l10n/ru.php b/core/l10n/ru.php
index fd6a7c6094a..7b11ea43a4b 100644
--- a/core/l10n/ru.php
+++ b/core/l10n/ru.php
@@ -53,6 +53,7 @@
"Error" => "Ошибка",
"The app name is not specified." => "Ð˜Ð¼Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ указано",
"The required file {file} is not installed!" => "Ðеобходимый файл {file} не уÑтановлен!",
+"Share" => "Открыть доÑтуп",
"Error while sharing" => "Ошибка при открытии доÑтупа",
"Error while unsharing" => "Ошибка при закрытии доÑтупа",
"Error while changing permissions" => "Ошибка при Ñмене разрешений",
diff --git a/core/l10n/ru_RU.php b/core/l10n/ru_RU.php
index c706d1c6a1e..53a3b9b0d59 100644
--- a/core/l10n/ru_RU.php
+++ b/core/l10n/ru_RU.php
@@ -53,6 +53,8 @@
"Error" => "Ошибка",
"The app name is not specified." => "Ð˜Ð¼Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ указано.",
"The required file {file} is not installed!" => "Требуемый файл {файл} не уÑтановлен!",
+"Share" => "Сделать общим",
+"Shared" => "Опубликовано",
"Error while sharing" => "Ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ доÑтупа",
"Error while unsharing" => "Ошибка Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ доÑтупа",
"Error while changing permissions" => "Ошибка при изменении прав доÑтупа",
diff --git a/core/l10n/si_LK.php b/core/l10n/si_LK.php
index 3c4e69e89be..eab1ba10018 100644
--- a/core/l10n/si_LK.php
+++ b/core/l10n/si_LK.php
@@ -34,6 +34,7 @@
"Yes" => "ඔව්",
"Ok" => "හරි",
"Error" => "දà·à·‚යක්",
+"Share" => "බෙද෠හද෠ගන්න",
"Share with" => "බෙදà·à¶œà¶±à·Šà¶±",
"Share with link" => "යොමුවක් මඟින් බෙදà·à¶œà¶±à·Šà¶±",
"Password protect" => "මුර පදයකින් ආරක්à·à·à¶šà¶»à¶±à·Šà¶±",
diff --git a/core/l10n/sk_SK.php b/core/l10n/sk_SK.php
index ba488532f5e..ad5ae0ea371 100644
--- a/core/l10n/sk_SK.php
+++ b/core/l10n/sk_SK.php
@@ -53,6 +53,8 @@
"Error" => "Chyba",
"The app name is not specified." => "Nešpecifikované meno aplikácie.",
"The required file {file} is not installed!" => "Požadovaný súbor {file} nie je inštalovaný!",
+"Share" => "Zdieľaj",
+"Shared" => "Zdieľané",
"Error while sharing" => "Chyba poÄas zdieľania",
"Error while unsharing" => "Chyba poÄas ukonÄenia zdieľania",
"Error while changing permissions" => "Chyba poÄas zmeny oprávnení",
diff --git a/core/l10n/sl.php b/core/l10n/sl.php
index 413a46ffc79..54cf817a7a0 100644
--- a/core/l10n/sl.php
+++ b/core/l10n/sl.php
@@ -53,6 +53,7 @@
"Error" => "Napaka",
"The app name is not specified." => "Ime aplikacije ni podano.",
"The required file {file} is not installed!" => "Zahtevana datoteka {file} ni nameÅ¡Äena!",
+"Share" => "Souporaba",
"Error while sharing" => "Napaka med souporabo",
"Error while unsharing" => "Napaka med odstranjevanjem souporabe",
"Error while changing permissions" => "Napaka med spreminjanjem dovoljenj",
diff --git a/core/l10n/sr.php b/core/l10n/sr.php
index e8547c58acc..ecd316b7cfb 100644
--- a/core/l10n/sr.php
+++ b/core/l10n/sr.php
@@ -51,6 +51,7 @@
"Error" => "Грешка",
"The app name is not specified." => "Име програма није унето.",
"The required file {file} is not installed!" => "Потребна датотека {file} није инÑталирана.",
+"Share" => "Дељење",
"Error while sharing" => "Грешка у дељењу",
"Error while unsharing" => "Грешка код иÑкључења дељења",
"Error while changing permissions" => "Грешка код промене дозвола",
diff --git a/core/l10n/sv.php b/core/l10n/sv.php
index 1e461282c0b..a0dde652693 100644
--- a/core/l10n/sv.php
+++ b/core/l10n/sv.php
@@ -53,6 +53,8 @@
"Error" => "Fel",
"The app name is not specified." => " Namnet på appen är inte specificerad.",
"The required file {file} is not installed!" => "Den nödvändiga filen {file} är inte installerad!",
+"Share" => "Dela",
+"Shared" => "Delad",
"Error while sharing" => "Fel vid delning",
"Error while unsharing" => "Fel när delning skulle avslutas",
"Error while changing permissions" => "Fel vid ändring av rättigheter",
diff --git a/core/l10n/ta_LK.php b/core/l10n/ta_LK.php
index f4f204968ff..2b8829c717f 100644
--- a/core/l10n/ta_LK.php
+++ b/core/l10n/ta_LK.php
@@ -49,6 +49,7 @@
"Error" => "வழà¯",
"The app name is not specified." => "செயலி பெயர௠கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ.",
"The required file {file} is not installed!" => "தேவைபà¯à®ªà®Ÿà¯à®Ÿ கோபà¯à®ªà¯ {கோபà¯à®ªà¯} நிறà¯à®µà®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ!",
+"Share" => "பகிரà¯à®µà¯",
"Error while sharing" => "பகிரà¯à®®à¯ போதான வழà¯",
"Error while unsharing" => "பகிராமல௠உளà¯à®³à®ªà¯à®ªà¯‹à®¤à®¾à®© வழà¯",
"Error while changing permissions" => "அனà¯à®®à®¤à®¿à®•à®³à¯ மாறà¯à®®à¯à®ªà¯‹à®¤à®¾à®© வழà¯",
diff --git a/core/l10n/th_TH.php b/core/l10n/th_TH.php
index 9b491d24eae..7e00ac6e2df 100644
--- a/core/l10n/th_TH.php
+++ b/core/l10n/th_TH.php
@@ -53,6 +53,7 @@
"Error" => "พบข้อผิดพลาด",
"The app name is not specified." => "ชื่อของà¹à¸­à¸›à¸¢à¸±à¸‡à¹„ม่ได้รับà¸à¸²à¸£à¸£à¸°à¸šà¸¸à¸Šà¸·à¹ˆà¸­",
"The required file {file} is not installed!" => "ไฟล์ {file} ซึ่งเป็นไฟล์ที่จำเป็นต้องได้รับà¸à¸²à¸£à¸•à¸´à¸”ตั้งไว้à¸à¹ˆà¸­à¸™ ยังไม่ได้ถูà¸à¸•à¸´à¸”ตั้ง",
+"Share" => "à¹à¸Šà¸£à¹Œ",
"Error while sharing" => "เà¸à¸´à¸”ข้อผิดพลาดในระหว่างà¸à¸²à¸£à¹à¸Šà¸£à¹Œà¸‚้อมูล",
"Error while unsharing" => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹à¸Šà¸£à¹Œà¸‚้อมูล",
"Error while changing permissions" => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¸ªà¸´à¸—ธิ์à¸à¸²à¸£à¹€à¸‚้าใช้งาน",
diff --git a/core/l10n/tr.php b/core/l10n/tr.php
index f64ecbedd5a..624887674d1 100644
--- a/core/l10n/tr.php
+++ b/core/l10n/tr.php
@@ -53,6 +53,7 @@
"Error" => "Hata",
"The app name is not specified." => "uygulama adı belirtilmedi.",
"The required file {file} is not installed!" => "İhtiyaç duyulan {file} dosyası kurulu değil.",
+"Share" => "PaylaÅŸ",
"Error while sharing" => "Paylaşım sırasında hata ",
"Error while unsharing" => "Paylaşım iptal ediliyorken hata",
"Error while changing permissions" => "Ä°zinleri deÄŸiÅŸtirirken hata oluÅŸtu",
diff --git a/core/l10n/uk.php b/core/l10n/uk.php
index 34387cc914e..fa8150e7c9d 100644
--- a/core/l10n/uk.php
+++ b/core/l10n/uk.php
@@ -53,6 +53,7 @@
"Error" => "Помилка",
"The app name is not specified." => "Ðе визначено ім'Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸.",
"The required file {file} is not installed!" => "Ðеобхідний файл {file} не вÑтановлено!",
+"Share" => "ПоділитиÑÑ",
"Error while sharing" => "Помилка під Ñ‡Ð°Ñ Ð¿ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ—",
"Error while unsharing" => "Помилка під Ñ‡Ð°Ñ Ð²Ñ–Ð´Ð¼Ñ–Ð½Ð¸ публікації",
"Error while changing permissions" => "Помилка при зміні повноважень",
diff --git a/core/l10n/vi.php b/core/l10n/vi.php
index 1d538e99dbb..078cfa8dd8c 100644
--- a/core/l10n/vi.php
+++ b/core/l10n/vi.php
@@ -53,6 +53,7 @@
"Error" => "Lá»—i",
"The app name is not specified." => "Tên ứng dụng không được chỉ định.",
"The required file {file} is not installed!" => "Tập tin cần thiết {file} không được cài đặt!",
+"Share" => "Chia sẻ",
"Error while sharing" => "Lỗi trong quá trình chia sẻ",
"Error while unsharing" => "Lỗi trong quá trình gỡ chia sẻ",
"Error while changing permissions" => "Lá»—i trong quá trình phân quyá»n",
diff --git a/core/l10n/zh_CN.GB2312.php b/core/l10n/zh_CN.GB2312.php
index a76c3a6c796..9617d7260dc 100644
--- a/core/l10n/zh_CN.GB2312.php
+++ b/core/l10n/zh_CN.GB2312.php
@@ -38,6 +38,7 @@
"Yes" => "是",
"Ok" => "好的",
"Error" => "错误",
+"Share" => "分享",
"Error while sharing" => "分享出错",
"Error while unsharing" => "å–消分享出错",
"Error while changing permissions" => "å˜æ›´æƒé™å‡ºé”™",
diff --git a/core/l10n/zh_CN.php b/core/l10n/zh_CN.php
index 3918cd165d6..f18fd6b357d 100644
--- a/core/l10n/zh_CN.php
+++ b/core/l10n/zh_CN.php
@@ -53,6 +53,8 @@
"Error" => "错误",
"The app name is not specified." => "未指定Appå称。",
"The required file {file} is not installed!" => "所需文件{file}未安装ï¼",
+"Share" => "共享",
+"Shared" => "已共享",
"Error while sharing" => "共享时出错",
"Error while unsharing" => "å–消共享时出错",
"Error while changing permissions" => "修改æƒé™æ—¶å‡ºé”™",
diff --git a/core/l10n/zh_TW.php b/core/l10n/zh_TW.php
index 78a069a63dc..74cb3b34d08 100644
--- a/core/l10n/zh_TW.php
+++ b/core/l10n/zh_TW.php
@@ -53,6 +53,7 @@
"Error" => "錯誤",
"The app name is not specified." => "沒有指定 app å稱。",
"The required file {file} is not installed!" => "沒有安è£æ‰€éœ€çš„檔案 {file} ï¼",
+"Share" => "分享",
"Error while sharing" => "分享時發生錯誤",
"Error while unsharing" => "å–消分享時發生錯誤",
"Error while changing permissions" => "修改權é™æ™‚發生錯誤",
diff --git a/db_structure.xml b/db_structure.xml
index e878eac7690..f4111bfabd0 100644
--- a/db_structure.xml
+++ b/db_structure.xml
@@ -60,125 +60,186 @@
<table>
- <name>*dbprefix*fscache</name>
+ <name>*dbprefix*storages</name>
<declaration>
<field>
<name>id</name>
- <autoincrement>1</autoincrement>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>64</length>
+ </field>
+
+ <field>
+ <name>numeric_id</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
+ <autoincrement>1</autoincrement>
<length>4</length>
</field>
+ <index>
+ <name>storages_id_index</name>
+ <unique>true</unique>
+ <field>
+ <name>id</name>
+ <sorting>ascending</sorting>
+ </field>
+ </index>
+
+ </declaration>
+
+ </table>
+
+ <table>
+
+ <name>*dbprefix*mimetypes</name>
+
+ <declaration>
+
<field>
- <name>path</name>
- <type>text</type>
- <default></default>
+ <name>id</name>
+ <type>integer</type>
+ <default>0</default>
<notnull>true</notnull>
- <length>512</length>
+ <autoincrement>1</autoincrement>
+ <length>4</length>
</field>
<field>
- <name>path_hash</name>
+ <name>mimetype</name>
<type>text</type>
<default></default>
<notnull>true</notnull>
- <length>32</length>
+ <length>255</length>
</field>
+ <index>
+ <name>mimetype_id_index</name>
+ <unique>true</unique>
+ <field>
+ <name>mimetype</name>
+ <sorting>ascending</sorting>
+ </field>
+ </index>
+
+ </declaration>
+
+ </table>
+
+ <table>
+
+ <name>*dbprefix*filecache</name>
+
+ <declaration>
+
<field>
- <name>parent</name>
+ <name>fileid</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
- <length>8</length>
+ <autoincrement>1</autoincrement>
+ <length>4</length>
</field>
<field>
- <name>name</name>
- <type>text</type>
+ <name>storage</name>
+ <type>integer</type>
<default></default>
<notnull>true</notnull>
- <length>300</length>
+ <length>4</length>
</field>
<field>
- <name>user</name>
+ <name>path</name>
<type>text</type>
<default></default>
<notnull>true</notnull>
- <length>64</length>
+ <length>512</length>
</field>
<field>
- <name>size</name>
- <type>integer</type>
- <default>0</default>
+ <name>path_hash</name>
+ <type>text</type>
+ <default></default>
<notnull>true</notnull>
- <length>8</length>
+ <length>32</length>
</field>
<field>
- <name>ctime</name>
+ <name>parent</name>
<type>integer</type>
- <default>0</default>
+ <default></default>
<notnull>true</notnull>
- <length>8</length>
+ <length>4</length>
</field>
<field>
- <name>mtime</name>
- <type>integer</type>
- <default>0</default>
+ <name>name</name>
+ <type>text</type>
+ <default></default>
<notnull>true</notnull>
- <length>8</length>
+ <length>250</length>
</field>
<field>
<name>mimetype</name>
- <type>text</type>
+ <type>integer</type>
<default></default>
<notnull>true</notnull>
- <length>96</length>
+ <length>4</length>
</field>
<field>
<name>mimepart</name>
- <type>text</type>
+ <type>integer</type>
<default></default>
<notnull>true</notnull>
- <length>32</length>
+ <length>4</length>
</field>
<field>
- <name>encrypted</name>
+ <name>size</name>
<type>integer</type>
- <default>0</default>
+ <default></default>
<notnull>true</notnull>
- <length>1</length>
+ <length>4</length>
</field>
<field>
- <name>versioned</name>
+ <name>mtime</name>
<type>integer</type>
- <default>0</default>
+ <default></default>
<notnull>true</notnull>
- <length>1</length>
+ <length>4</length>
</field>
<field>
- <name>writable</name>
+ <name>encrypted</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
- <length>1</length>
+ <length>4</length>
+ </field>
+
+ <field>
+ <name>etag</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>40</length>
</field>
<index>
- <name>fscache_path_hash_index</name>
+ <name>fs_storage_path_hash</name>
+ <unique>true</unique>
+ <field>
+ <name>storage</name>
+ <sorting>ascending</sorting>
+ </field>
<field>
<name>path_hash</name>
<sorting>ascending</sorting>
@@ -186,29 +247,84 @@
</index>
<index>
- <name>parent_index</name>
+ <name>fs_parent_name_hash</name>
<field>
<name>parent</name>
<sorting>ascending</sorting>
</field>
+ <field>
+ <name>name</name>
+ <sorting>ascending</sorting>
+ </field>
</index>
<index>
- <name>name_index</name>
+ <name>fs_storage_mimetype</name>
<field>
- <name>name</name>
+ <name>storage</name>
+ <sorting>ascending</sorting>
+ </field>
+ <field>
+ <name>mimetype</name>
<sorting>ascending</sorting>
</field>
</index>
<index>
- <name>parent_name_index</name>
+ <name>fs_storage_mimepart</name>
<field>
- <name>parent</name>
+ <name>storage</name>
<sorting>ascending</sorting>
</field>
<field>
- <name>name</name>
+ <name>mimepart</name>
+ <sorting>ascending</sorting>
+ </field>
+ </index>
+
+ </declaration>
+
+ </table>
+
+ <table>
+
+ <name>*dbprefix*permissions</name>
+
+ <declaration>
+
+ <field>
+ <name>fileid</name>
+ <type>integer</type>
+ <default>0</default>
+ <notnull>true</notnull>
+ <length>4</length>
+ </field>
+
+ <field>
+ <name>user</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>64</length>
+ </field>
+
+ <field>
+ <name>permissions</name>
+ <type>integer</type>
+ <default>0</default>
+ <notnull>true</notnull>
+ <length>4</length>
+ </field>
+
+ <index>
+ <name>id_user_index</name>
+ <unique>true</unique>
+ <field>
+ <name>fileid</name>
+ <sorting>ascending</sorting>
+ </field>
+ <field>
+ <name>user</name>
<sorting>ascending</sorting>
</field>
</index>
diff --git a/index.html b/index.html
new file mode 100644
index 00000000000..69d42e3a0b3
--- /dev/null
+++ b/index.html
@@ -0,0 +1,6 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta http-equiv="refresh" content="0; URL=index.php">
+</head>
+</html>
diff --git a/l10n/.tx/config b/l10n/.tx/config
index 2aac0feedc5..b6589d8112d 100644
--- a/l10n/.tx/config
+++ b/l10n/.tx/config
@@ -40,6 +40,12 @@ source_file = templates/files_sharing.pot
source_lang = en
type = PO
+[owncloud.files_trashbin]
+file_filter = <lang>/files_trashbin.po
+source_file = templates/files_trashbin.pot
+source_lang = en
+type = PO
+
[owncloud.files_versions]
file_filter = <lang>/files_versions.po
source_file = templates/files_versions.pot
diff --git a/l10n/ar/core.po b/l10n/ar/core.po
index 0ce541f850c..f5850c1adf2 100644
--- a/l10n/ar/core.po
+++ b/l10n/ar/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
"MIME-Version: 1.0\n"
@@ -254,7 +254,7 @@ msgstr ""
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "شارك"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/ar/files.po b/l10n/ar/files.po
index 7063715d2f0..eaf6d1705c9 100644
--- a/l10n/ar/files.po
+++ b/l10n/ar/files.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
"MIME-Version: 1.0\n"
@@ -18,20 +18,6 @@ msgstr ""
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr ""
@@ -67,11 +53,11 @@ msgstr "المجلد المؤقت غير موجود"
msgid "Failed to write to disk"
msgstr ""
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -79,15 +65,15 @@ msgstr ""
msgid "Files"
msgstr "الملÙات"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "إلغاء مشاركة"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "محذوÙ"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr ""
@@ -111,7 +97,7 @@ msgstr ""
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr ""
@@ -119,12 +105,8 @@ msgstr ""
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:288
-msgid "deleted {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
msgstr ""
#: js/files.js:52
@@ -149,86 +131,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr ""
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "إغلق"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr ""
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr ""
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "الاسم"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "حجم"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "معدل"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr ""
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr ""
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr ""
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr ""
@@ -284,32 +258,40 @@ msgstr "مجلد"
msgid "From link"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr ""
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "لا يوجد شيء هنا. إرÙع بعض الملÙات!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "تحميل"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "حجم الترÙيع أعلى من المسموح"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "حجم الملÙات التي تريد ترÙيعها أعلى من المسموح على الخادم."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr ""
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/ar/files_trashbin.po b/l10n/ar/files_trashbin.po
new file mode 100644
index 00000000000..ee7ad818289
--- /dev/null
+++ b/l10n/ar/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/ar/settings.po b/l10n/ar/settings.po
index a2178a82e0a..0b638eea207 100644
--- a/l10n/ar/settings.po
+++ b/l10n/ar/settings.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
"MIME-Version: 1.0\n"
@@ -265,6 +265,14 @@ msgstr "مدير المجموعة"
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/bg_BG/core.po b/l10n/bg_BG/core.po
index 1e66831c050..9a35782ee7e 100644
--- a/l10n/bg_BG/core.po
+++ b/l10n/bg_BG/core.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
"MIME-Version: 1.0\n"
@@ -256,7 +256,7 @@ msgstr ""
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "СподелÑне"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/bg_BG/files.po b/l10n/bg_BG/files.po
index 2de8fabb143..f64a199c152 100644
--- a/l10n/bg_BG/files.po
+++ b/l10n/bg_BG/files.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
"MIME-Version: 1.0\n"
@@ -19,20 +19,6 @@ msgstr ""
"Language: bg_BG\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr ""
@@ -68,11 +54,11 @@ msgstr "ЛипÑва временна папка"
msgid "Failed to write to disk"
msgstr ""
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -80,15 +66,15 @@ msgstr ""
msgid "Files"
msgstr "Файлове"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr ""
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Изтриване"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Преименуване"
@@ -112,7 +98,7 @@ msgstr "отказ"
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "възтановÑване"
@@ -120,12 +106,8 @@ msgstr "възтановÑване"
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:288
-msgid "deleted {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
msgstr ""
#: js/files.js:52
@@ -150,86 +132,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr ""
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr ""
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr ""
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr ""
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Качването е ÑпрÑно."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Име"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Размер"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Променено"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr ""
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr ""
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr ""
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr ""
@@ -285,32 +259,40 @@ msgstr "Папка"
msgid "From link"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr ""
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "ÐÑма нищо тук. Качете нещо."
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "ИзтеглÑне"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Файлът който Ñте избрали за качване е прекалено голÑм"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr ""
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/bg_BG/files_trashbin.po b/l10n/bg_BG/files_trashbin.po
new file mode 100644
index 00000000000..e0e23f5d093
--- /dev/null
+++ b/l10n/bg_BG/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: bg_BG\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/bg_BG/settings.po b/l10n/bg_BG/settings.po
index 71667fa12a1..3ed0f6d3fd0 100644
--- a/l10n/bg_BG/settings.po
+++ b/l10n/bg_BG/settings.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
"MIME-Version: 1.0\n"
@@ -265,6 +265,14 @@ msgstr ""
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/bn_BD/core.po b/l10n/bn_BD/core.po
index dcaa8094dcd..6c25c59499a 100644
--- a/l10n/bn_BD/core.po
+++ b/l10n/bn_BD/core.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
"MIME-Version: 1.0\n"
@@ -253,7 +253,7 @@ msgstr "আবশà§à¦¯à¦¿à¦• {file} টি সংসà§à¦¥à¦¾à¦ªà¦¿à¦¤ নেà¦
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "ভাগাভাগি কর"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/bn_BD/files.po b/l10n/bn_BD/files.po
index 5d15b8d5bad..a7f37ff99c2 100644
--- a/l10n/bn_BD/files.po
+++ b/l10n/bn_BD/files.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
"MIME-Version: 1.0\n"
@@ -18,20 +18,6 @@ msgstr ""
"Language: bn_BD\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "%s কে সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à¦° করা সমà§à¦­à¦¬ হলো না - à¦à¦‡ নামের ফাইল বিদà§à¦¯à¦®à¦¾à¦¨"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "%s কে সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à¦° করা সমà§à¦­à¦¬ হলো না"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "ফাইলের নাম পরিবরà§à¦¤à¦¨ করা সমà§à¦­à¦¬ হলো না"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "কোন ফাইল আপলোড করা হয় নি। সমসà§à¦¯à¦¾ অজà§à¦žà¦¾à¦¤à¥¤"
@@ -67,11 +53,11 @@ msgstr "অসà§à¦¥à¦¾à§Ÿà§€ ফোলà§à¦¡à¦¾à¦° খোয়া গিয়েছ
msgid "Failed to write to disk"
msgstr "ডিসà§à¦•à§‡ লিখতে বà§à¦¯à¦°à§à¦¥"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr ""
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "যথেষà§à¦  পরিমাণ সà§à¦¥à¦¾à¦¨ নেই"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "ভà§à¦² ডিরেকà§à¦Ÿà¦°à¦¿"
@@ -79,15 +65,15 @@ msgstr "ভà§à¦² ডিরেকà§à¦Ÿà¦°à¦¿"
msgid "Files"
msgstr "ফাইল"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "ভাগাভাগি বাতিল "
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "মà§à¦›à§‡ ফেল"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "পূনঃনামকরণ"
@@ -111,7 +97,7 @@ msgstr "বাতিল"
msgid "replaced {new_name}"
msgstr "{new_name} পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨ করা হয়েছে"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "কà§à¦°à¦¿à§Ÿà¦¾ পà§à¦°à¦¤à§à¦¯à¦¾à¦¹à¦¾à¦°"
@@ -119,13 +105,9 @@ msgstr "কà§à¦°à¦¿à§Ÿà¦¾ পà§à¦°à¦¤à§à¦¯à¦¾à¦¹à¦¾à¦°"
msgid "replaced {new_name} with {old_name}"
msgstr "{new_name} কে {old_name} নামে পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨ করা হয়েছে"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "{files} ভাগাভাগি বাতিল কর"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "{files} মà§à¦›à§‡ ফেলা হয়েছে"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -149,86 +131,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "আপনার ফাইলটি আপলোড করা সমà§à¦­à¦¬ হলো না, কেননা à¦à¦Ÿà¦¿ হয় à¦à¦•à¦Ÿà¦¿ ফোলà§à¦¡à¦¾à¦° কিংবা à¦à¦° আকার ০ বাইট"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "আপলোড করতে সমসà§à¦¯à¦¾ "
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "বনà§à¦§"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "মà§à¦²à¦¤à§à¦¬à¦¿"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "১টি ফাইল আপলোড করা হচà§à¦›à§‡"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} টি ফাইল আপলোড করা হচà§à¦›à§‡"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "আপলোড বাতিল করা হয়েছে।"
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "ফাইল আপলোড চলমান। à¦à¦‡ পৃষà§à¦ à¦¾ পরিতà§à¦¯à¦¾à¦— করলে আপলোড বাতিল করা হবে।"
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URL ফাà¦à¦•à¦¾ রাখা যাবে না।"
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "ফোলà§à¦¡à¦¾à¦°à§‡à¦° নামটি সঠিক নয়। 'ভাগাভাগি করা' শà§à¦§à§à¦®à¦¾à¦¤à§à¦° Owncloud à¦à¦° জনà§à¦¯ সংরকà§à¦·à¦¿à¦¤à¥¤"
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} টি ফাইল সà§à¦•à§à¦¯à¦¾à¦¨ করা হয়েছে"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "সà§à¦•à§à¦¯à¦¾à¦¨ করার সময় সমসà§à¦¯à¦¾ দেখা দিয়েছে"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "নাম"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "আকার"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "পরিবরà§à¦¤à¦¿à¦¤"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "১টি ফোলà§à¦¡à¦¾à¦°"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} টি ফোলà§à¦¡à¦¾à¦°"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "১টি ফাইল"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} টি ফাইল"
@@ -284,32 +258,40 @@ msgstr "ফোলà§à¦¡à¦¾à¦°"
msgid "From link"
msgstr " লিংক থেকে"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "আপলোড বাতিল কর"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "à¦à¦–ানে কিছà§à¦‡ নেই। কিছৠআপলোড করà§à¦¨ !"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "ডাউনলোড"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "আপলোডের আকারটি অনেক বড়"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "আপনি à¦à¦‡ সারà§à¦­à¦¾à¦°à§‡ আপলোড করার জনà§à¦¯ অনà§à¦®à§‹à¦¦à¦¿à¦¤ ফাইলের সরà§à¦¬à§‹à¦šà§à¦š আকারের চেয়ে বৃহদাকার ফাইল আপলোড করার চেষà§à¦Ÿà¦¾ করছেন "
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "ফাইলগà§à¦²à§‹ সà§à¦•à§à¦¯à¦¾à¦¨ করা হচà§à¦›à§‡, দয়া করে অপেকà§à¦·à¦¾ করà§à¦¨à¥¤"
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "বরà§à¦¤à¦®à¦¾à¦¨ সà§à¦•à§à¦¯à¦¾à¦¨à¦¿à¦‚"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/bn_BD/files_trashbin.po b/l10n/bn_BD/files_trashbin.po
new file mode 100644
index 00000000000..e6d5c91dcb5
--- /dev/null
+++ b/l10n/bn_BD/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: bn_BD\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/bn_BD/settings.po b/l10n/bn_BD/settings.po
index 681984d8be6..c9bf33feef5 100644
--- a/l10n/bn_BD/settings.po
+++ b/l10n/bn_BD/settings.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
"MIME-Version: 1.0\n"
@@ -263,6 +263,14 @@ msgstr "গোষà§à¦ à§€ পà§à¦°à¦¶à¦¾à¦¸à¦•"
msgid "Storage"
msgstr "সংরকà§à¦·à¦£à¦¾à¦—ার"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "পূরà§à¦¬à¦¨à¦¿à¦°à§à¦§à¦¾à¦°à¦¿à¦¤"
diff --git a/l10n/ca/core.po b/l10n/ca/core.po
index 3fe5703a2f8..6eea0f16d43 100644
--- a/l10n/ca/core.po
+++ b/l10n/ca/core.po
@@ -10,9 +10,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
+"Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
"Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -255,11 +255,11 @@ msgstr "El fitxer requerit {file} no està instal·lat!"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Comparteix"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
-msgstr ""
+msgstr "Compartit"
#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
diff --git a/l10n/ca/files.po b/l10n/ca/files.po
index fef5f92725c..2f36e169c76 100644
--- a/l10n/ca/files.po
+++ b/l10n/ca/files.po
@@ -14,9 +14,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-28 00:04+0100\n"
-"PO-Revision-Date: 2013-01-27 15:24+0000\n"
-"Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -24,20 +24,6 @@ msgstr ""
"Language: ca\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "No s'ha pogut moure %s - Ja hi ha un fitxer amb aquest nom"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr " No s'ha pogut moure %s"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "No es pot canviar el nom del fitxer"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "No s'ha carregat cap fitxer. Error desconegut"
@@ -73,11 +59,11 @@ msgstr "S'ha perdut un fitxer temporal"
msgid "Failed to write to disk"
msgstr "Ha fallat en escriure al disc"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr "No hi ha prou espai disponible"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Directori no vàlid."
@@ -85,15 +71,15 @@ msgstr "Directori no vàlid."
msgid "Files"
msgstr "Fitxers"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Deixa de compartir"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Suprimeix"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Reanomena"
@@ -117,7 +103,7 @@ msgstr "cancel·la"
msgid "replaced {new_name}"
msgstr "s'ha substituït {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "desfés"
@@ -125,13 +111,9 @@ msgstr "desfés"
msgid "replaced {new_name} with {old_name}"
msgstr "s'ha substituït {old_name} per {new_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "no compartits {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "eliminats {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -155,86 +137,78 @@ msgstr "El vostre espai d'emmagatzemament és ple, els fitxers ja no es poden ac
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr "El vostre espai d'emmagatzemament és gairebé ple ({usedSpacePercent}%)"
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "S'està preparant la baixada. Pot trigar una estona si els fitxers són grans."
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "No es pot pujar el fitxer perquè és una carpeta o té 0 bytes"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Error en la pujada"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Tanca"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Pendents"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 fitxer pujant"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} fitxers en pujada"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "La pujada s'ha cancel·lat."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "La URL no pot ser buida"
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Nom de carpeta no vàlid. L'ús de 'Shared' està reservat per Owncloud"
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} fitxers escannejats"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "error durant l'escaneig"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Nom"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Mida"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Modificat"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 carpeta"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} carpetes"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 fitxer"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} fitxers"
@@ -290,32 +264,40 @@ msgstr "Carpeta"
msgid "From link"
msgstr "Des d'enllaç"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Cancel·la la pujada"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Res per aquí. Pugeu alguna cosa!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Baixa"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "La pujada és massa gran"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Els fitxers que esteu intentant pujar excedeixen la mida màxima de pujada del servidor"
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "S'estan escanejant els fitxers, espereu"
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Actualment escanejant"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Actualitzant la memòria de cau del sistema de fitxers..."
diff --git a/l10n/ca/files_trashbin.po b/l10n/ca/files_trashbin.po
new file mode 100644
index 00000000000..660728accb6
--- /dev/null
+++ b/l10n/ca/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ca\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/ca/settings.po b/l10n/ca/settings.po
index 1efd6df00e1..18973896d84 100644
--- a/l10n/ca/settings.po
+++ b/l10n/ca/settings.po
@@ -7,14 +7,15 @@
# <joan@montane.cat>, 2012.
# <josep_tomas@hotmail.com>, 2012.
# Josep Tomàs <jtomas.binsoft@gmail.com>, 2012.
+# <rcalvoi@yahoo.com>, 2013.
# <rcalvoi@yahoo.com>, 2011-2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 08:30+0000\n"
+"Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
"Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -233,7 +234,7 @@ msgstr "Desenvolupat per la <a href=\"http://ownCloud.org/contact\" target=\"_bl
#: templates/users.php:21 templates/users.php:79
msgid "Login Name"
-msgstr ""
+msgstr "Nom d'accés"
#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
@@ -257,7 +258,7 @@ msgstr "Un altre"
#: templates/users.php:80
msgid "Display Name"
-msgstr ""
+msgstr "Nom a mostrar"
#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
@@ -267,6 +268,14 @@ msgstr "Grup Admin"
msgid "Storage"
msgstr "Emmagatzemament"
+#: templates/users.php:97
+msgid "change display name"
+msgstr "canvia el nom a mostrar"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "estableix nova contrasenya"
+
#: templates/users.php:137
msgid "Default"
msgstr "Per defecte"
diff --git a/l10n/cs_CZ/core.po b/l10n/cs_CZ/core.po
index c65ccce2da5..4d163818fd9 100644
--- a/l10n/cs_CZ/core.po
+++ b/l10n/cs_CZ/core.po
@@ -11,9 +11,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
+"Last-Translator: Tomáš Chvátal <tomas.chvatal@gmail.com>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -256,11 +256,11 @@ msgstr "Požadovaný soubor {file} není nainstalován."
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Sdílet"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
-msgstr ""
+msgstr "Sdílené"
#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
diff --git a/l10n/cs_CZ/files.po b/l10n/cs_CZ/files.po
index de2fbc84153..29be735c3fc 100644
--- a/l10n/cs_CZ/files.po
+++ b/l10n/cs_CZ/files.po
@@ -10,9 +10,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-29 00:04+0100\n"
-"PO-Revision-Date: 2013-01-28 07:07+0000\n"
-"Last-Translator: Tomáš Chvátal <tomas.chvatal@gmail.com>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,20 +20,6 @@ msgstr ""
"Language: cs_CZ\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "Nelze přesunout %s - existuje soubor se stejným názvem"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "Nelze přesunout %s"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "Nelze přejmenovat soubor"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Soubor nebyl odeslán. Neznámá chyba"
@@ -69,11 +55,11 @@ msgstr "Chybí adresář pro doÄasné soubory"
msgid "Failed to write to disk"
msgstr "Zápis na disk selhal"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr "Nedostatek dostupného úložného prostoru"
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "Nedostatek dostupného místa"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Neplatný adresář"
@@ -81,15 +67,15 @@ msgstr "Neplatný adresář"
msgid "Files"
msgstr "Soubory"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Zrušit sdílení"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Smazat"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Přejmenovat"
@@ -113,7 +99,7 @@ msgstr "zrušit"
msgid "replaced {new_name}"
msgstr "nahrazeno {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "zpět"
@@ -121,13 +107,9 @@ msgstr "zpět"
msgid "replaced {new_name} with {old_name}"
msgstr "nahrazeno {new_name} s {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "sdílení zrušeno pro {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "smazáno {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -151,86 +133,78 @@ msgstr "Vaše úložiště je plné, nelze aktualizovat ani synchronizovat soubo
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr "Vaše úložiště je téměř plné ({usedSpacePercent}%)"
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "Vaše soubory ke stažení se připravují. Pokud jsou velké může to chvíli trvat."
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Nelze odeslat Váš soubor, protože je to adresář nebo má velikost 0 bajtů"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Chyba odesílání"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Zavřít"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Čekající"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "odesílá se 1 soubor"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "odesílám {count} souborů"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Odesílání zrušeno."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Probíhá odesílání souboru. Opuštění stránky vyústí ve zrušení nahrávání."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URL nemůže být prázdná"
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Neplatný název složky. Použití 'Shared' je rezervováno pro vnitřní potřeby Owncloud"
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "prozkoumáno {count} souborů"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "chyba při prohledávání"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Název"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Velikost"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Změněno"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 složka"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} složky"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 soubor"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} soubory"
@@ -286,32 +260,40 @@ msgstr "Složka"
msgid "From link"
msgstr "Z odkazu"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Zrušit odesílání"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Žádný obsah. Nahrajte něco."
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Stáhnout"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Odeslaný soubor je příliš velký"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Soubory, které se snažíte odeslat, pÅ™ekraÄují limit velikosti odesílání na tomto serveru."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Soubory se prohledávají, prosím Äekejte."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Aktuální prohledávání"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Aktualizuji mezipaměť souborového systému..."
diff --git a/l10n/cs_CZ/files_trashbin.po b/l10n/cs_CZ/files_trashbin.po
new file mode 100644
index 00000000000..74a1948515a
--- /dev/null
+++ b/l10n/cs_CZ/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: cs_CZ\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/cs_CZ/settings.po b/l10n/cs_CZ/settings.po
index 4157e0094b6..0e0e0a55996 100644
--- a/l10n/cs_CZ/settings.po
+++ b/l10n/cs_CZ/settings.po
@@ -8,14 +8,14 @@
# Martin <fireball@atlas.cz>, 2011-2012.
# Michal Hrušecký <Michal@hrusecky.net>, 2012.
# <Michal@hrusecky.net>, 2012.
-# Tomáš Chvátal <tomas.chvatal@gmail.com>, 2012.
+# Tomáš Chvátal <tomas.chvatal@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 07:20+0000\n"
+"Last-Translator: Tomáš Chvátal <tomas.chvatal@gmail.com>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -234,7 +234,7 @@ msgstr "Vyvinuto <a href=\"http://ownCloud.org/contact\" target=\"_blank\">komun
#: templates/users.php:21 templates/users.php:79
msgid "Login Name"
-msgstr ""
+msgstr "Přihlašovací jméno"
#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
@@ -258,7 +258,7 @@ msgstr "Jiná"
#: templates/users.php:80
msgid "Display Name"
-msgstr ""
+msgstr "Zobrazované jméno"
#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
@@ -268,6 +268,14 @@ msgstr "Správa skupiny"
msgid "Storage"
msgstr "Úložiště"
+#: templates/users.php:97
+msgid "change display name"
+msgstr "změnit zobrazované jméno"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "nastavit nové heslo"
+
#: templates/users.php:137
msgid "Default"
msgstr "Výchozí"
diff --git a/l10n/da/core.po b/l10n/da/core.po
index 4f1fdd3523e..fa817909c3b 100644
--- a/l10n/da/core.po
+++ b/l10n/da/core.po
@@ -16,8 +16,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
"MIME-Version: 1.0\n"
@@ -261,7 +261,7 @@ msgstr "Den krævede fil {file} er ikke installeret!"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Del"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/da/files.po b/l10n/da/files.po
index 2654e4e323c..a58ad1dfbc2 100644
--- a/l10n/da/files.po
+++ b/l10n/da/files.po
@@ -15,9 +15,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 11:55+0000\n"
-"Last-Translator: Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,20 +25,6 @@ msgstr ""
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "Kunne ikke flytte %s - der findes allerede en fil med dette navn"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "Kunne ikke flytte %s"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "Kunne ikke omdøbe fil"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Ingen fil blev uploadet. Ukendt fejl."
@@ -74,11 +60,11 @@ msgstr "Mangler en midlertidig mappe"
msgid "Failed to write to disk"
msgstr "Fejl ved skrivning til disk."
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr "Der er ikke nok plads til rådlighed"
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Ugyldig mappe."
@@ -86,15 +72,15 @@ msgstr "Ugyldig mappe."
msgid "Files"
msgstr "Filer"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Fjern deling"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Slet"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Omdøb"
@@ -118,7 +104,7 @@ msgstr "fortryd"
msgid "replaced {new_name}"
msgstr "erstattede {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "fortryd"
@@ -126,13 +112,9 @@ msgstr "fortryd"
msgid "replaced {new_name} with {old_name}"
msgstr "erstattede {new_name} med {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "ikke delte {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "slettede {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -156,86 +138,78 @@ msgstr "Din opbevaringsplads er fyldt op, filer kan ikke opdateres eller synkron
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr "Din opbevaringsplads er næsten fyldt op ({usedSpacePercent}%)"
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "Dit download forberedes. Dette kan tage lidt tid ved større filer."
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Kunne ikke uploade din fil, da det enten er en mappe eller er tom"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Fejl ved upload"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Luk"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Afventer"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 fil uploades"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} filer uploades"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Upload afbrudt."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Fil upload kører. Hvis du forlader siden nu, vil uploadet blive annuleret."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URLen kan ikke være tom."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Ugyldigt mappenavn. Brug af \"Shared\" er forbeholdt Owncloud"
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} filer skannet"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "fejl under scanning"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Navn"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Størrelse"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Ændret"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 mappe"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} mapper"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 fil"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} filer"
@@ -291,32 +265,40 @@ msgstr "Mappe"
msgid "From link"
msgstr "Fra link"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Fortryd upload"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Her er tomt. Upload noget!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Download"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Upload for stor"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Filerne, du prøver at uploade, er større end den maksimale størrelse for fil-upload på denne server."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Filerne bliver indlæst, vent venligst."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Indlæser"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/da/files_trashbin.po b/l10n/da/files_trashbin.po
new file mode 100644
index 00000000000..f79e0b15795
--- /dev/null
+++ b/l10n/da/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: da\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/da/settings.po b/l10n/da/settings.po
index 6df46a3c46c..41dabd7ce4f 100644
--- a/l10n/da/settings.po
+++ b/l10n/da/settings.po
@@ -17,8 +17,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
"MIME-Version: 1.0\n"
@@ -272,6 +272,14 @@ msgstr "Gruppe Administrator"
msgid "Storage"
msgstr "Opbevaring"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "Standard"
diff --git a/l10n/de/core.po b/l10n/de/core.po
index b9615f97a4a..ef51cc996c4 100644
--- a/l10n/de/core.po
+++ b/l10n/de/core.po
@@ -23,8 +23,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
"MIME-Version: 1.0\n"
@@ -268,7 +268,7 @@ msgstr "Die benötigte Datei {file} ist nicht installiert."
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Freigeben"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/de/files.po b/l10n/de/files.po
index 15ecd3bc993..93e568ef6e5 100644
--- a/l10n/de/files.po
+++ b/l10n/de/files.po
@@ -27,9 +27,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:01+0000\n"
-"Last-Translator: Marcel Kühlhorn <susefan93@gmx.de>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -37,20 +37,6 @@ msgstr ""
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits."
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "Konnte %s nicht verschieben"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "Konnte Datei nicht umbenennen"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Keine Datei hochgeladen. Unbekannter Fehler"
@@ -86,11 +72,11 @@ msgstr "Temporärer Ordner fehlt."
msgid "Failed to write to disk"
msgstr "Fehler beim Schreiben auf die Festplatte"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr "Nicht genug Speicherplatz verfügbar"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Ungültiges Verzeichnis"
@@ -98,15 +84,15 @@ msgstr "Ungültiges Verzeichnis"
msgid "Files"
msgstr "Dateien"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Nicht mehr freigeben"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Löschen"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Umbenennen"
@@ -130,7 +116,7 @@ msgstr "abbrechen"
msgid "replaced {new_name}"
msgstr "{new_name} wurde ersetzt"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "rückgängig machen"
@@ -138,13 +124,9 @@ msgstr "rückgängig machen"
msgid "replaced {new_name} with {old_name}"
msgstr "{old_name} ersetzt durch {new_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "Freigabe von {files} aufgehoben"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "{files} gelöscht"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -168,86 +150,78 @@ msgstr "Ihr Speicherplatz ist voll, Dateien können nicht mehr aktualisiert oder
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr "Ihr Speicherplatz ist fast aufgebraucht ({usedSpacePercent}%)"
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "Dein Download wird vorbereitet. Dies kann bei größeren Dateien etwas dauern."
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Deine Datei kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist."
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Fehler beim Upload"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Schließen"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Ausstehend"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "Eine Datei wird hoch geladen"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} Dateien werden hochgeladen"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Upload abgebrochen."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Dateiupload läuft. Wenn Du die Seite jetzt verlässt, wird der Upload abgebrochen."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "Die URL darf nicht leer sein"
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Ungültiger Verzeichnisname. Die Nutzung von \"Shared\" ist ownCloud vorbehalten."
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} Dateien wurden gescannt"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "Fehler beim Scannen"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Name"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Größe"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Bearbeitet"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 Ordner"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} Ordner"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 Datei"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} Dateien"
@@ -303,32 +277,40 @@ msgstr "Ordner"
msgid "From link"
msgstr "Von einem Link"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Upload abbrechen"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Alles leer. Lade etwas hoch!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Herunterladen"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Upload zu groß"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Dateien werden gescannt, bitte warten."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Scanne"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/de/files_encryption.po b/l10n/de/files_encryption.po
index 934dce6d114..2407e4ec911 100644
--- a/l10n/de/files_encryption.po
+++ b/l10n/de/files_encryption.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:15+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 12:47+0000\n"
"Last-Translator: Marcel Kühlhorn <susefan93@gmx.de>\n"
"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
"MIME-Version: 1.0\n"
diff --git a/l10n/de/files_trashbin.po b/l10n/de/files_trashbin.po
new file mode 100644
index 00000000000..0b445ccb0e6
--- /dev/null
+++ b/l10n/de/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: de\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/de/settings.po b/l10n/de/settings.po
index c26bb84c091..018f7ab7262 100644
--- a/l10n/de/settings.po
+++ b/l10n/de/settings.po
@@ -25,8 +25,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
"MIME-Version: 1.0\n"
@@ -280,6 +280,14 @@ msgstr "Gruppenadministrator"
msgid "Storage"
msgstr "Speicher"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "Standard"
diff --git a/l10n/de/user_ldap.po b/l10n/de/user_ldap.po
index 95aabcd2e67..e003a2e24bb 100644
--- a/l10n/de/user_ldap.po
+++ b/l10n/de/user_ldap.po
@@ -16,8 +16,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:08+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 12:47+0000\n"
"Last-Translator: Marcel Kühlhorn <susefan93@gmx.de>\n"
"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
"MIME-Version: 1.0\n"
diff --git a/l10n/de_DE/core.po b/l10n/de_DE/core.po
index 0d1dcf34486..f1b0ea2e3c1 100644
--- a/l10n/de_DE/core.po
+++ b/l10n/de_DE/core.po
@@ -24,8 +24,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n"
"MIME-Version: 1.0\n"
@@ -269,11 +269,11 @@ msgstr "Die benötigte Datei {file} ist nicht installiert."
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Freigeben"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
-msgstr ""
+msgstr "Freigegeben"
#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
diff --git a/l10n/de_DE/files.po b/l10n/de_DE/files.po
index d81df74a94a..dab36be8e0c 100644
--- a/l10n/de_DE/files.po
+++ b/l10n/de_DE/files.po
@@ -28,9 +28,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-29 00:04+0100\n"
-"PO-Revision-Date: 2013-01-28 21:38+0000\n"
-"Last-Translator: a.tangemann <a.tangemann@web.de>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -38,20 +38,6 @@ msgstr ""
"Language: de_DE\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "Konnte %s nicht verschieben"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "Konnte Datei nicht umbenennen"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Keine Datei hochgeladen. Unbekannter Fehler"
@@ -87,11 +73,11 @@ msgstr "Der temporäre Ordner fehlt."
msgid "Failed to write to disk"
msgstr "Fehler beim Schreiben auf die Festplatte"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr "Nicht genug Speicher vorhanden."
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "Nicht genügend Speicherplatz verfügbar"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Ungültiges Verzeichnis."
@@ -99,15 +85,15 @@ msgstr "Ungültiges Verzeichnis."
msgid "Files"
msgstr "Dateien"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Nicht mehr freigeben"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Löschen"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Umbenennen"
@@ -131,7 +117,7 @@ msgstr "abbrechen"
msgid "replaced {new_name}"
msgstr "{new_name} wurde ersetzt"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "rückgängig machen"
@@ -139,13 +125,9 @@ msgstr "rückgängig machen"
msgid "replaced {new_name} with {old_name}"
msgstr "{old_name} wurde ersetzt durch {new_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "Freigabe für {files} beendet"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "{files} gelöscht"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -169,86 +151,78 @@ msgstr "Ihr Speicher ist voll. Daher können keine Dateien mehr aktualisiert ode
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr "Ihr Speicher ist fast voll ({usedSpacePercent}%)"
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "Ihr Download wird vorbereitet. Dies kann bei größeren Dateien einen Moment dauern."
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Ihre Datei kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist."
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Fehler beim Upload"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Schließen"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Ausstehend"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 Datei wird hochgeladen"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} Dateien wurden hochgeladen"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Upload abgebrochen."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Der Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "Die URL darf nicht leer sein."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Ungültiger Verzeichnisname. Die Nutzung von \"Shared\" ist ownCloud vorbehalten"
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} Dateien wurden gescannt"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "Fehler beim Scannen"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Name"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Größe"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Bearbeitet"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 Ordner"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} Ordner"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 Datei"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} Dateien"
@@ -304,32 +278,40 @@ msgstr "Ordner"
msgid "From link"
msgstr "Von einem Link"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Upload abbrechen"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Alles leer. Bitte laden Sie etwas hoch!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Herunterladen"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Der Upload ist zu groß"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Dateien werden gescannt, bitte warten."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Scanne"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/de_DE/files_encryption.po b/l10n/de_DE/files_encryption.po
index 7521754abfd..daeb5466e57 100644
--- a/l10n/de_DE/files_encryption.po
+++ b/l10n/de_DE/files_encryption.po
@@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:14+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 12:47+0000\n"
"Last-Translator: Marcel Kühlhorn <susefan93@gmx.de>\n"
"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n"
"MIME-Version: 1.0\n"
diff --git a/l10n/de_DE/files_trashbin.po b/l10n/de_DE/files_trashbin.po
new file mode 100644
index 00000000000..7cf2c7e39ab
--- /dev/null
+++ b/l10n/de_DE/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: de_DE\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/de_DE/settings.po b/l10n/de_DE/settings.po
index 0c99f265629..008ed72b962 100644
--- a/l10n/de_DE/settings.po
+++ b/l10n/de_DE/settings.po
@@ -25,8 +25,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n"
"MIME-Version: 1.0\n"
@@ -280,6 +280,14 @@ msgstr "Gruppenadministrator"
msgid "Storage"
msgstr "Speicher"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "Standard"
diff --git a/l10n/de_DE/user_ldap.po b/l10n/de_DE/user_ldap.po
index e1d07152a62..a48677b16c2 100644
--- a/l10n/de_DE/user_ldap.po
+++ b/l10n/de_DE/user_ldap.po
@@ -16,8 +16,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:08+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 12:47+0000\n"
"Last-Translator: Marcel Kühlhorn <susefan93@gmx.de>\n"
"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n"
"MIME-Version: 1.0\n"
diff --git a/l10n/el/core.po b/l10n/el/core.po
index 6ad17c2deb6..07b4bd3275e 100644
--- a/l10n/el/core.po
+++ b/l10n/el/core.po
@@ -15,8 +15,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
"MIME-Version: 1.0\n"
@@ -260,7 +260,7 @@ msgstr "Το απαιτοÏμενο αÏχείο {file} δεν εγκαταστÎ
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "ΔιαμοιÏασμός"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/el/files.po b/l10n/el/files.po
index d756e7d0b9e..5b329a9908d 100644
--- a/l10n/el/files.po
+++ b/l10n/el/files.po
@@ -15,9 +15,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-29 00:04+0100\n"
-"PO-Revision-Date: 2013-01-28 02:25+0000\n"
-"Last-Translator: Efstathios Iosifidis <iefstathios@gmail.com>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,20 +25,6 @@ msgstr ""
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "Αδυναμία μετακίνησης του %s - υπάÏχει ήδη αÏχείο με αυτό το όνομα"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "Αδυναμία μετακίνησης του %s"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "Αδυναμία μετονομασίας αÏχείου"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Δεν ανέβηκε κάποιο αÏχείο. Άγνωστο σφάλμα"
@@ -74,11 +60,11 @@ msgstr "Λείπει ο Ï€ÏοσωÏινός φάκελος"
msgid "Failed to write to disk"
msgstr "Αποτυχία εγγÏαφής στο δίσκο"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr "Μη επαÏκής διαθέσιμος αποθηκευτικός χώÏος"
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "Δεν υπάÏχει αÏκετός διαθέσιμος χώÏος"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Μη έγκυÏος φάκελος."
@@ -86,15 +72,15 @@ msgstr "Μη έγκυÏος φάκελος."
msgid "Files"
msgstr "ΑÏχεία"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Διακοπή κοινής χÏήσης"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "ΔιαγÏαφή"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Μετονομασία"
@@ -118,7 +104,7 @@ msgstr "ακÏÏωση"
msgid "replaced {new_name}"
msgstr "{new_name} αντικαταστάθηκε"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "αναίÏεση"
@@ -126,13 +112,9 @@ msgstr "αναίÏεση"
msgid "replaced {new_name} with {old_name}"
msgstr "αντικαταστάθηκε το {new_name} με {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "μη διαμοιÏασμένα {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "διαγÏαμμένα {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -156,86 +138,78 @@ msgstr "Ο αποθηκευτικός σας χώÏος είναι γεμάτοÏ
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr "Ο αποθηκευτικός χώÏος είναι σχεδόν γεμάτος ({usedSpacePercent}%)"
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "Η λήψη Ï€Ïοετοιμάζεται. Αυτό μποÏεί να πάÏει ÏŽÏα εάν τα αÏχεία έχουν μεγάλο μέγεθος."
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Αδυναμία στην αποστολή του αÏχείου σας Î±Ï†Î¿Ï ÎµÎ¯Î½Î±Î¹ φάκελος ή έχει 0 bytes"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Σφάλμα Αποστολής"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Κλείσιμο"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "ΕκκÏεμεί"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 αÏχείο ανεβαίνει"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} αÏχεία ανεβαίνουν"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Η αποστολή ακυÏώθηκε."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Η αποστολή του αÏχείου βÏίσκεται σε εξέλιξη. Το κλείσιμο της σελίδας θα ακυÏώσει την αποστολή."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "Η URL δεν Ï€Ïέπει να είναι κενή."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Μη έγκυÏο όνομα φακέλου. Η χÏήση του 'ΚοινόχÏηστος' χÏησιμοποιείται από ο Owncloud"
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} αÏχεία ανιχνεÏτηκαν"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "σφάλμα κατά την ανίχνευση"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Όνομα"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Μέγεθος"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "ΤÏοποποιήθηκε"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 φάκελος"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} φάκελοι"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 αÏχείο"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} αÏχεία"
@@ -291,32 +265,40 @@ msgstr "Φάκελος"
msgid "From link"
msgstr "Από σÏνδεσμο"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "ΑκÏÏωση αποστολής"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Δεν υπάÏχει τίποτα εδώ. Ανέβασε κάτι!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Λήψη"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Î Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î¿ αÏχείο Ï€Ïος αποστολή"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Τα αÏχεία που Ï€Ïοσπαθείτε να ανεβάσετε υπεÏβαίνουν το μέγιστο μέγεθος αποστολής αÏχείων σε αυτόν τον διακομιστή."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Τα αÏχεία σαÏώνονται, παÏακαλώ πεÏιμένετε"
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "ΤÏέχουσα αναζήτηση "
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/el/files_trashbin.po b/l10n/el/files_trashbin.po
new file mode 100644
index 00000000000..af301af1b40
--- /dev/null
+++ b/l10n/el/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: el\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/el/settings.po b/l10n/el/settings.po
index 4e99eae3d5a..7f0a4b9c6c1 100644
--- a/l10n/el/settings.po
+++ b/l10n/el/settings.po
@@ -19,8 +19,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
"MIME-Version: 1.0\n"
@@ -274,6 +274,14 @@ msgstr "Ομάδα ΔιαχειÏιστών"
msgid "Storage"
msgstr "Αποθήκευση"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "ΠÏοκαθοÏισμένο"
diff --git a/l10n/eo/core.po b/l10n/eo/core.po
index 01b8ff631db..1347e38ac50 100644
--- a/l10n/eo/core.po
+++ b/l10n/eo/core.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
"MIME-Version: 1.0\n"
@@ -255,7 +255,7 @@ msgstr "La necesa dosiero {file} ne instaliÄis!"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Kunhavigi"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/eo/files.po b/l10n/eo/files.po
index 024dea90b07..fd6b90487f7 100644
--- a/l10n/eo/files.po
+++ b/l10n/eo/files.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
"MIME-Version: 1.0\n"
@@ -20,20 +20,6 @@ msgstr ""
"Language: eo\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "Ne eblis movi %s: dosiero kun ĉi tiu nomo jam ekzistas"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "Ne eblis movi %s"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "Ne eblis alinomigi dosieron"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Neniu dosiero alÅutiÄis. Nekonata eraro."
@@ -69,11 +55,11 @@ msgstr "Mankas tempa dosierujo"
msgid "Failed to write to disk"
msgstr "Malsukcesis skribo al disko"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr ""
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "Ne haveblas sufiĉa spaco"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Nevalida dosierujo."
@@ -81,15 +67,15 @@ msgstr "Nevalida dosierujo."
msgid "Files"
msgstr "Dosieroj"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Malkunhavigi"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Forigi"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Alinomigi"
@@ -113,7 +99,7 @@ msgstr "nuligi"
msgid "replaced {new_name}"
msgstr "anstataÅ­iÄis {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "malfari"
@@ -121,13 +107,9 @@ msgstr "malfari"
msgid "replaced {new_name} with {old_name}"
msgstr "anstataÅ­iÄis {new_name} per {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "malkunhaviÄis {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "foriÄis {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -151,86 +133,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "Via elÅuto pretiÄatas. Ĉi tio povas daÅ­ri iom da tempo se la dosieroj grandas."
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Ne eblis alÅuti vian dosieron ĉar Äi estas dosierujo aÅ­ havas 0 duumokojn"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "AlÅuta eraro"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Fermi"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Traktotaj"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 dosiero estas alÅutata"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} dosieroj alÅutatas"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "La alÅuto nuliÄis."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "DosieralÅuto plenumiÄas. Lasi la paÄon nun nuligus la alÅuton."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URL ne povas esti malplena."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Nevalida dosierujnomo. Uzo de “Shared†rezervatas de Owncloud."
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} dosieroj skaniÄis"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "eraro dum skano"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Nomo"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Grando"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Modifita"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 dosierujo"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} dosierujoj"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 dosiero"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} dosierujoj"
@@ -286,32 +260,40 @@ msgstr "Dosierujo"
msgid "From link"
msgstr "El ligilo"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Nuligi alÅuton"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Nenio estas ĉi tie. AlÅutu ion!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "ElÅuti"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "ElÅuto tro larÄa"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "La dosieroj, kiujn vi provas alÅuti, transpasas la maksimuman grandon por dosieralÅutoj en ĉi tiu servilo."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Dosieroj estas skanataj, bonvolu atendi."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Nuna skano"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/eo/files_trashbin.po b/l10n/eo/files_trashbin.po
new file mode 100644
index 00000000000..bddacc03661
--- /dev/null
+++ b/l10n/eo/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/eo/settings.po b/l10n/eo/settings.po
index 4c842f018fb..41af121efe5 100644
--- a/l10n/eo/settings.po
+++ b/l10n/eo/settings.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
"MIME-Version: 1.0\n"
@@ -265,6 +265,14 @@ msgstr "Grupadministranto"
msgid "Storage"
msgstr "Konservejo"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "DefaÅ­lta"
diff --git a/l10n/es/core.po b/l10n/es/core.po
index 03aade72afd..29d6918611b 100644
--- a/l10n/es/core.po
+++ b/l10n/es/core.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Felix Liberio <felix.liberio@gmail.com>, 2013.
# <javierkaiser@gmail.com>, 2012.
# Javier Llorente <javier@opensuse.org>, 2012.
# <juanma@kde.org.ar>, 2011-2013.
@@ -18,9 +19,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
+"Last-Translator: felix.liberio <felix.liberio@gmail.com>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -263,11 +264,11 @@ msgstr "El fichero {file} requerido, no está instalado."
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Compartir"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
-msgstr ""
+msgstr "Compartido"
#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
@@ -390,11 +391,11 @@ msgid ""
"The update was unsuccessful. Please report this issue to the <a "
"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
"community</a>."
-msgstr ""
+msgstr "La actualización ha fracasado. Por favor, informe este problema a la <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">Comunidad de ownCloud</ a>."
#: js/update.js:18
msgid "The update was successful. Redirecting you to ownCloud now."
-msgstr ""
+msgstr "La actualización se ha realizado correctamente. Redireccionando a ownCloud ahora."
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
diff --git a/l10n/es/files.po b/l10n/es/files.po
index db49dbe66b4..d927503e754 100644
--- a/l10n/es/files.po
+++ b/l10n/es/files.po
@@ -16,8 +16,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
"MIME-Version: 1.0\n"
@@ -26,20 +26,6 @@ msgstr ""
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "No se puede mover %s - Ya existe un archivo con ese nombre"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "No se puede mover %s"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "No se puede renombrar el archivo"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Fallo no se subió el fichero"
@@ -75,11 +61,11 @@ msgstr "Falta un directorio temporal"
msgid "Failed to write to disk"
msgstr "La escritura en disco ha fallado"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr ""
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "No hay suficiente espacio disponible"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Directorio invalido."
@@ -87,15 +73,15 @@ msgstr "Directorio invalido."
msgid "Files"
msgstr "Archivos"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Dejar de compartir"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Eliminar"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Renombrar"
@@ -119,7 +105,7 @@ msgstr "cancelar"
msgid "replaced {new_name}"
msgstr "reemplazado {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "deshacer"
@@ -127,13 +113,9 @@ msgstr "deshacer"
msgid "replaced {new_name} with {old_name}"
msgstr "reemplazado {new_name} con {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "{files} descompartidos"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "{files} eliminados"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -157,86 +139,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "Tu descarga esta siendo preparada. Esto puede tardar algun tiempo si los archivos son muy grandes."
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "No ha sido posible subir tu archivo porque es un directorio o tiene 0 bytes"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Error al subir el archivo"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "cerrrar"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Pendiente"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "subiendo 1 archivo"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "Subiendo {count} archivos"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Subida cancelada."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "La subida del archivo está en proceso. Salir de la página ahora cancelará la subida."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "La URL no puede estar vacía."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Nombre de carpeta invalido. El uso de \"Shared\" esta reservado para Owncloud"
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} archivos escaneados"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "error escaneando"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Nombre"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Tamaño"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Modificado"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 carpeta"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} carpetas"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 archivo"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} archivos"
@@ -292,32 +266,40 @@ msgstr "Carpeta"
msgid "From link"
msgstr "Desde el enlace"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Cancelar subida"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Aquí no hay nada. ¡Sube algo!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Descargar"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "El archivo es demasiado grande"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Los archivos que estás intentando subir sobrepasan el tamaño máximo permitido por este servidor."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Se están escaneando los archivos, por favor espere."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Ahora escaneando"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/es/files_encryption.po b/l10n/es/files_encryption.po
index 14b030edb0e..fa6fcc6a7b7 100644
--- a/l10n/es/files_encryption.po
+++ b/l10n/es/files_encryption.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 22:40+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 14:50+0000\n"
"Last-Translator: felix.liberio <felix.liberio@gmail.com>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
"MIME-Version: 1.0\n"
@@ -28,11 +28,11 @@ msgstr "Por favor, cambie su cliente de ownCloud y cambie su clave de cifrado pa
#: js/settings-personal.js:17
msgid "switched to client side encryption"
-msgstr "Cambiar a encriptación en lado cliente"
+msgstr "Cambiar a cifrado del lado del cliente"
#: js/settings-personal.js:21
msgid "Change encryption password to login password"
-msgstr "Cambie la clave de cifrado para ingresar su contraseña"
+msgstr "Cambie la clave de cifrado para su contraseña de inicio de sesión"
#: js/settings-personal.js:25
msgid "Please check your passwords and try again."
@@ -40,37 +40,37 @@ msgstr "Por favor revise su contraseña e intentelo de nuevo."
#: js/settings-personal.js:25
msgid "Could not change your file encryption password to your login password"
-msgstr ""
+msgstr "No se pudo cambiar la contraseña de cifrado de archivos de su contraseña de inicio de sesión"
#: templates/settings-personal.php:3 templates/settings.php:5
msgid "Choose encryption mode:"
-msgstr "Elegir el modo de encriptado:"
+msgstr "Elegir el modo de cifrado:"
#: templates/settings-personal.php:20 templates/settings.php:24
msgid ""
"Client side encryption (most secure but makes it impossible to access your "
"data from the web interface)"
-msgstr ""
+msgstr "Cifrado del lado del Cliente ( es el más seguro, pero hace que sea imposible acceder a sus datos desde la interfaz web)"
#: templates/settings-personal.php:30 templates/settings.php:36
msgid ""
"Server side encryption (allows you to access your files from the web "
"interface and the desktop client)"
-msgstr ""
+msgstr "Cifrado del lado del Servidor (le permite acceder a sus archivos desde la interfaz web y el cliente de escritorio)"
#: templates/settings-personal.php:41 templates/settings.php:60
msgid "None (no encryption at all)"
-msgstr ""
+msgstr "Ninguno (ningún cifrado en absoluto)"
#: templates/settings.php:10
msgid ""
"Important: Once you selected an encryption mode there is no way to change it"
" back"
-msgstr ""
+msgstr "Importante: Una vez que haya seleccionado un modo de cifrado no existe forma de cambiarlo de nuevo"
#: templates/settings.php:48
msgid "User specific (let the user decide)"
-msgstr ""
+msgstr "Específico del usuario (dejar que el usuario decida)"
#: templates/settings.php:65
msgid "Encryption"
diff --git a/l10n/es/files_trashbin.po b/l10n/es/files_trashbin.po
new file mode 100644
index 00000000000..2b25413fcc2
--- /dev/null
+++ b/l10n/es/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/es/settings.po b/l10n/es/settings.po
index d650521c6f8..310b9e21f5d 100644
--- a/l10n/es/settings.po
+++ b/l10n/es/settings.po
@@ -19,8 +19,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
"MIME-Version: 1.0\n"
@@ -274,6 +274,14 @@ msgstr "Grupo admin"
msgid "Storage"
msgstr "Alamacenamiento"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "Predeterminado"
diff --git a/l10n/es_AR/core.po b/l10n/es_AR/core.po
index 65487408405..71d928cfc40 100644
--- a/l10n/es_AR/core.po
+++ b/l10n/es_AR/core.po
@@ -3,15 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# CJTess <claudio.tessone@gmail.com>, 2013.
# <claudio.tessone@gmail.com>, 2012-2013.
# <javierkaiser@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
+"Last-Translator: cjtess <claudio.tessone@gmail.com>\n"
"Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -254,11 +255,11 @@ msgstr "¡El archivo requerido {file} no está instalado!"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Compartir"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
-msgstr ""
+msgstr "Compartido"
#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
@@ -381,11 +382,11 @@ msgid ""
"The update was unsuccessful. Please report this issue to the <a "
"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
"community</a>."
-msgstr ""
+msgstr "La actualización no pudo ser completada. Por favor, reportá el inconveniente a la comunidad <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud</a>."
#: js/update.js:18
msgid "The update was successful. Redirecting you to ownCloud now."
-msgstr ""
+msgstr "La actualización fue exitosa. Estás siendo redirigido a ownCloud."
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
diff --git a/l10n/es_AR/files.po b/l10n/es_AR/files.po
index 7de3e1c837a..dd36d78dc3f 100644
--- a/l10n/es_AR/files.po
+++ b/l10n/es_AR/files.po
@@ -4,13 +4,14 @@
#
# Translators:
# Agustin Ferrario <agustin.ferrario@hotmail.com.ar>, 2012-2013.
+# CJTess <claudio.tessone@gmail.com>, 2013.
# <claudio.tessone@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
"MIME-Version: 1.0\n"
@@ -19,20 +20,6 @@ msgstr ""
"Language: es_AR\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "No se pudo mover %s - Un archivo con este nombre ya existe"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "No se pudo mover %s "
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "No fue posible cambiar el nombre al archivo"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "El archivo no fue subido. Error desconocido"
@@ -68,11 +55,11 @@ msgstr "Falta un directorio temporal"
msgid "Failed to write to disk"
msgstr "Error al escribir en el disco"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr ""
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "No hay suficiente espacio disponible"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Directorio invalido."
@@ -80,15 +67,15 @@ msgstr "Directorio invalido."
msgid "Files"
msgstr "Archivos"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Dejar de compartir"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Borrar"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Cambiar nombre"
@@ -112,7 +99,7 @@ msgstr "cancelar"
msgid "replaced {new_name}"
msgstr "reemplazado {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "deshacer"
@@ -120,13 +107,9 @@ msgstr "deshacer"
msgid "replaced {new_name} with {old_name}"
msgstr "reemplazado {new_name} con {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "{files} se dejaron de compartir"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "{files} borrados"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -144,92 +127,84 @@ msgstr "Nombre invalido, '\\', '/', '<', '>', ':', '\"', '|', '?' y '*' no está
#: js/files.js:78
msgid "Your storage is full, files can not be updated or synced anymore!"
-msgstr ""
+msgstr "El almacenamiento está lleno, los archivos no se pueden seguir actualizando ni sincronizando"
#: js/files.js:82
msgid "Your storage is almost full ({usedSpacePercent}%)"
-msgstr ""
+msgstr "El almacenamiento está casi lleno ({usedSpacePercent}%)"
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "Tu descarga esta siendo preparada. Esto puede tardar algun tiempo si los archivos son muy grandes."
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "No fue posible subir el archivo porque es un directorio o porque su tamaño es 0 bytes"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Error al subir el archivo"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Cerrar"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Pendiente"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "Subiendo 1 archivo"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "Subiendo {count} archivos"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "La subida fue cancelada"
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "La subida del archivo está en proceso. Si salís de la página ahora, la subida se cancelará."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "La URL no puede estar vacía"
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Nombre de carpeta inválido. El uso de 'Shared' está reservado por ownCloud"
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} archivos escaneados"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "error mientras se escaneaba"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Nombre"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Tamaño"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Modificado"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 directorio"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} directorios"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 archivo"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} archivos"
@@ -285,32 +260,40 @@ msgstr "Carpeta"
msgid "From link"
msgstr "Desde enlace"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Cancelar subida"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "No hay nada. ¡Subí contenido!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Descargar"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "El archivo es demasiado grande"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Los archivos que intentás subir sobrepasan el tamaño máximo "
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Se están escaneando los archivos, por favor esperá."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Escaneo actual"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/es_AR/files_encryption.po b/l10n/es_AR/files_encryption.po
index 63c4ec00584..11ac9c0c6d7 100644
--- a/l10n/es_AR/files_encryption.po
+++ b/l10n/es_AR/files_encryption.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# CJTess <claudio.tessone@gmail.com>, 2013.
# <claudio.tessone@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-23 00:05+0100\n"
-"PO-Revision-Date: 2013-01-22 23:05+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 16:11+0000\n"
+"Last-Translator: cjtess <claudio.tessone@gmail.com>\n"
"Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -22,53 +23,53 @@ msgstr ""
msgid ""
"Please switch to your ownCloud client and change your encryption password to"
" complete the conversion."
-msgstr ""
+msgstr "Por favor, cambiá uu cliente de ownCloud y cambiá tu clave de encriptado para completar la conversión."
#: js/settings-personal.js:17
msgid "switched to client side encryption"
-msgstr ""
+msgstr "Cambiado a encriptación por parte del cliente"
#: js/settings-personal.js:21
msgid "Change encryption password to login password"
-msgstr ""
+msgstr "Cambiá la clave de encriptado para tu contraseña de inicio de sesión"
#: js/settings-personal.js:25
msgid "Please check your passwords and try again."
-msgstr ""
+msgstr "Por favor, revisá tu contraseña e intentalo de nuevo."
#: js/settings-personal.js:25
msgid "Could not change your file encryption password to your login password"
-msgstr ""
+msgstr "No se pudo cambiar la contraseña de encriptación de archivos de tu contraseña de inicio de sesión"
#: templates/settings-personal.php:3 templates/settings.php:5
msgid "Choose encryption mode:"
-msgstr ""
+msgstr "Elegir el modo de encriptación:"
#: templates/settings-personal.php:20 templates/settings.php:24
msgid ""
"Client side encryption (most secure but makes it impossible to access your "
"data from the web interface)"
-msgstr ""
+msgstr "Encriptación por parte del cliente (es el modo más seguro, pero hace que sea imposible acceder a tus datos desde la interfaz web)"
#: templates/settings-personal.php:30 templates/settings.php:36
msgid ""
"Server side encryption (allows you to access your files from the web "
"interface and the desktop client)"
-msgstr ""
+msgstr "Encriptación por parte del servidor (te permite acceder a tus archivos desde la interfaz web y desde el cliente de escritorio)"
#: templates/settings-personal.php:41 templates/settings.php:60
msgid "None (no encryption at all)"
-msgstr ""
+msgstr "Ninguno (ninguna encriptación en absoluto)"
#: templates/settings.php:10
msgid ""
"Important: Once you selected an encryption mode there is no way to change it"
" back"
-msgstr ""
+msgstr "Importante: Una vez que haya seleccionado un modo de encriptación, no existe forma de cambiarlo nuevamente"
#: templates/settings.php:48
msgid "User specific (let the user decide)"
-msgstr ""
+msgstr "Específico por usuario (deja que el usuario decida)"
#: templates/settings.php:65
msgid "Encryption"
diff --git a/l10n/es_AR/files_trashbin.po b/l10n/es_AR/files_trashbin.po
new file mode 100644
index 00000000000..d3f144da177
--- /dev/null
+++ b/l10n/es_AR/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es_AR\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/es_AR/settings.po b/l10n/es_AR/settings.po
index e5e3ae2bc01..d9b6327b4db 100644
--- a/l10n/es_AR/settings.po
+++ b/l10n/es_AR/settings.po
@@ -4,13 +4,14 @@
#
# Translators:
# Agustin Ferrario <agustin.ferrario@hotmail.com.ar>, 2012.
+# CJTess <claudio.tessone@gmail.com>, 2013.
# <claudio.tessone@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
"MIME-Version: 1.0\n"
@@ -123,7 +124,7 @@ msgstr "Documentación de Administrador"
#: templates/help.php:6
msgid "Online Documentation"
-msgstr "Documentación en linea"
+msgstr "Documentación en línea"
#: templates/help.php:7
msgid "Forum"
@@ -230,7 +231,7 @@ msgstr "Desarrollado por la <a href=\"http://ownCloud.org/contact\" target=\"_bl
#: templates/users.php:21 templates/users.php:79
msgid "Login Name"
-msgstr ""
+msgstr "Nombre de "
#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
@@ -254,7 +255,7 @@ msgstr "Otro"
#: templates/users.php:80
msgid "Display Name"
-msgstr ""
+msgstr "Nombre a mostrar"
#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
@@ -264,6 +265,14 @@ msgstr "Grupo Administrador"
msgid "Storage"
msgstr "Almacenamiento"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "Predeterminado"
diff --git a/l10n/es_AR/user_ldap.po b/l10n/es_AR/user_ldap.po
index a3b11101f5b..bd7fb599517 100644
--- a/l10n/es_AR/user_ldap.po
+++ b/l10n/es_AR/user_ldap.po
@@ -4,14 +4,15 @@
#
# Translators:
# Agustin Ferrario <agustin.ferrario@hotmail.com.ar>, 2013.
+# CJTess <claudio.tessone@gmail.com>, 2013.
# <claudio.tessone@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-16 00:19+0100\n"
-"PO-Revision-Date: 2013-01-15 23:20+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 16:22+0000\n"
+"Last-Translator: cjtess <claudio.tessone@gmail.com>\n"
"Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -30,7 +31,7 @@ msgstr "<b>Advertencia:</b> Los Apps user_ldap y user_webdavauth son incompatibl
msgid ""
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
"work. Please ask your system administrator to install it."
-msgstr ""
+msgstr "<b>Atención:</b> El módulo PHP LDAP no está instalado, este elemento no va a funcionar. Por favor, pedile al administrador que lo instale."
#: templates/settings.php:15
msgid "Host"
@@ -47,7 +48,7 @@ msgstr "DN base"
#: templates/settings.php:16
msgid "One Base DN per line"
-msgstr ""
+msgstr "Una DN base por línea"
#: templates/settings.php:16
msgid "You can specify Base DN for users and groups in the Advanced tab"
@@ -122,7 +123,7 @@ msgstr "Ãrbol base de usuario"
#: templates/settings.php:25
msgid "One User Base DN per line"
-msgstr ""
+msgstr "Una DN base de usuario por línea"
#: templates/settings.php:26
msgid "Base Group Tree"
@@ -130,7 +131,7 @@ msgstr "Ãrbol base de grupo"
#: templates/settings.php:26
msgid "One Group Base DN per line"
-msgstr ""
+msgstr "Una DN base de grupo por línea"
#: templates/settings.php:27
msgid "Group-Member association"
diff --git a/l10n/es_AR/user_webdavauth.po b/l10n/es_AR/user_webdavauth.po
index 429680ee8c6..6c88cac3fd0 100644
--- a/l10n/es_AR/user_webdavauth.po
+++ b/l10n/es_AR/user_webdavauth.po
@@ -4,14 +4,15 @@
#
# Translators:
# Agustin Ferrario <agustin.ferrario@hotmail.com.ar>, 2012.
+# CJTess <claudio.tessone@gmail.com>, 2013.
# <claudio.tessone@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-15 00:03+0100\n"
-"PO-Revision-Date: 2013-01-14 23:04+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 16:22+0000\n"
+"Last-Translator: cjtess <claudio.tessone@gmail.com>\n"
"Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,7 +22,7 @@ msgstr ""
#: templates/settings.php:3
msgid "WebDAV Authentication"
-msgstr ""
+msgstr "Autenticación de WevDAV"
#: templates/settings.php:4
msgid "URL: http://"
@@ -32,4 +33,4 @@ msgid ""
"ownCloud will send the user credentials to this URL. This plugin checks the "
"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
"credentials, and all other responses as valid credentials."
-msgstr ""
+msgstr "onwCloud enviará las credenciales de usuario a esta URL. Este complemento verifica la respuesta e interpretará los códigos de respuesta HTTP 401 y 403 como credenciales inválidas y todas las otras respuestas como credenciales válidas."
diff --git a/l10n/et_EE/core.po b/l10n/et_EE/core.po
index 62f3fd70152..2e7a0ddd0de 100644
--- a/l10n/et_EE/core.po
+++ b/l10n/et_EE/core.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
"MIME-Version: 1.0\n"
@@ -253,7 +253,7 @@ msgstr ""
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Jaga"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/et_EE/files.po b/l10n/et_EE/files.po
index ad6acde581c..1c693682ee7 100644
--- a/l10n/et_EE/files.po
+++ b/l10n/et_EE/files.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
"MIME-Version: 1.0\n"
@@ -19,20 +19,6 @@ msgstr ""
"Language: et_EE\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Ühtegi faili ei laetud üles. Tundmatu viga"
@@ -68,11 +54,11 @@ msgstr "Ajutiste failide kaust puudub"
msgid "Failed to write to disk"
msgstr "Kettale kirjutamine ebaõnnestus"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -80,15 +66,15 @@ msgstr ""
msgid "Files"
msgstr "Failid"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Lõpeta jagamine"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Kustuta"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "ümber"
@@ -112,7 +98,7 @@ msgstr "loobu"
msgid "replaced {new_name}"
msgstr "asendatud nimega {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "tagasi"
@@ -120,13 +106,9 @@ msgstr "tagasi"
msgid "replaced {new_name} with {old_name}"
msgstr "asendas nime {old_name} nimega {new_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "jagamata {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "kustutatud {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -150,86 +132,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Sinu faili üleslaadimine ebaõnnestus, kuna see on kaust või selle suurus on 0 baiti"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Ãœleslaadimise viga"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Sulge"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Ootel"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 faili üleslaadimisel"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} faili üleslaadimist"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Üleslaadimine tühistati."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Faili üleslaadimine on töös. Lehelt lahkumine katkestab selle üleslaadimise."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URL ei saa olla tühi."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} faili skännitud"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "viga skännimisel"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Nimi"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Suurus"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Muudetud"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 kaust"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} kausta"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 fail"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} faili"
@@ -285,32 +259,40 @@ msgstr "Kaust"
msgid "From link"
msgstr "Allikast"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Tühista üleslaadimine"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Siin pole midagi. Lae midagi üles!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Lae alla"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Ãœleslaadimine on liiga suur"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Failid, mida sa proovid üles laadida, ületab serveri poolt üleslaetavatele failidele määratud maksimaalse suuruse."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Faile skannitakse, palun oota"
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Praegune skannimine"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/et_EE/files_trashbin.po b/l10n/et_EE/files_trashbin.po
new file mode 100644
index 00000000000..f50b6ff0747
--- /dev/null
+++ b/l10n/et_EE/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: et_EE\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/et_EE/settings.po b/l10n/et_EE/settings.po
index 3f55c738851..3be449a7d2d 100644
--- a/l10n/et_EE/settings.po
+++ b/l10n/et_EE/settings.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
"MIME-Version: 1.0\n"
@@ -264,6 +264,14 @@ msgstr "Grupi admin"
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/eu/core.po b/l10n/eu/core.po
index 7bc85012c50..e4ffe9890e0 100644
--- a/l10n/eu/core.po
+++ b/l10n/eu/core.po
@@ -11,9 +11,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
+"Last-Translator: asieriko <asieriko@gmail.com>\n"
"Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -256,11 +256,11 @@ msgstr "Beharrezkoa den {file} fitxategia ez dago instalatuta!"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Elkarbanatu"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
-msgstr ""
+msgstr "Elkarbanatuta"
#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
diff --git a/l10n/eu/files.po b/l10n/eu/files.po
index a769d2ce3c3..e9705b048c2 100644
--- a/l10n/eu/files.po
+++ b/l10n/eu/files.po
@@ -11,9 +11,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-28 00:04+0100\n"
-"PO-Revision-Date: 2013-01-27 15:41+0000\n"
-"Last-Translator: Piarres Beobide <pi@beobide.net>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,20 +21,6 @@ msgstr ""
"Language: eu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "Ezin da %s mugitu - Izen hau duen fitxategia dagoeneko existitzen da"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "Ezin dira fitxategiak mugitu %s"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "Ezin izan da fitxategia berrizendatu"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Ez da fitxategirik igo. Errore ezezaguna"
@@ -70,11 +56,11 @@ msgstr "Aldi baterako karpeta falta da"
msgid "Failed to write to disk"
msgstr "Errore bat izan da diskoan idazterakoan"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr "Ez dago behar aina leku erabilgarri,"
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "Ez dago leku nahikorik."
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Baliogabeko karpeta."
@@ -82,15 +68,15 @@ msgstr "Baliogabeko karpeta."
msgid "Files"
msgstr "Fitxategiak"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Ez elkarbanatu"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Ezabatu"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Berrizendatu"
@@ -114,7 +100,7 @@ msgstr "ezeztatu"
msgid "replaced {new_name}"
msgstr "ordezkatua {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "desegin"
@@ -122,13 +108,9 @@ msgstr "desegin"
msgid "replaced {new_name} with {old_name}"
msgstr " {new_name}-k {old_name} ordezkatu du"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "elkarbanaketa utzita {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "ezabatuta {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -152,86 +134,78 @@ msgstr "Zure biltegiratzea beterik dago, ezingo duzu aurrerantzean fitxategirik
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr "Zure biltegiratzea nahiko beterik dago (%{usedSpacePercent})"
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "Zure deskarga prestatu egin behar da. Denbora bat har lezake fitxategiak handiak badira. "
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Ezin da zure fitxategia igo, karpeta bat da edo 0 byt ditu"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Igotzean errore bat suertatu da"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Itxi"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Zain"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "fitxategi 1 igotzen"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} fitxategi igotzen"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Igoera ezeztatuta"
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URLa ezin da hutsik egon."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Baliogabeako karpeta izena. 'Shared' izena Owncloudek erreserbatzen du"
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} fitxategi eskaneatuta"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "errore bat egon da eskaneatzen zen bitartean"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Izena"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Tamaina"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Aldatuta"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "karpeta bat"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} karpeta"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "fitxategi bat"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} fitxategi"
@@ -287,32 +261,40 @@ msgstr "Karpeta"
msgid "From link"
msgstr "Estekatik"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Ezeztatu igoera"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Ez dago ezer. Igo zerbait!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Deskargatu"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Igotakoa handiegia da"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Igotzen saiatzen ari zaren fitxategiak zerbitzari honek igotzeko onartzen duena baino handiagoak dira."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Fitxategiak eskaneatzen ari da, itxoin mezedez."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Orain eskaneatzen ari da"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/eu/files_trashbin.po b/l10n/eu/files_trashbin.po
new file mode 100644
index 00000000000..fe82ebdbfc8
--- /dev/null
+++ b/l10n/eu/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/eu/settings.po b/l10n/eu/settings.po
index 9ff185b18fb..e29eaae12e8 100644
--- a/l10n/eu/settings.po
+++ b/l10n/eu/settings.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
"MIME-Version: 1.0\n"
@@ -232,7 +232,7 @@ msgstr "<a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud komun
#: templates/users.php:21 templates/users.php:79
msgid "Login Name"
-msgstr ""
+msgstr "Sarrera Izena"
#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
@@ -256,7 +256,7 @@ msgstr "Besteak"
#: templates/users.php:80
msgid "Display Name"
-msgstr ""
+msgstr "Bistaratze Izena"
#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
@@ -266,6 +266,14 @@ msgstr "Talde administradorea"
msgid "Storage"
msgstr "Biltegiratzea"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "Lehenetsia"
diff --git a/l10n/fa/core.po b/l10n/fa/core.po
index b14c7903db5..7790d77f9ba 100644
--- a/l10n/fa/core.po
+++ b/l10n/fa/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
"MIME-Version: 1.0\n"
@@ -254,7 +254,7 @@ msgstr "پرونده { پرونده} درخواست شده نصب نشده اسØ
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "اشتراک‌گزاری"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/fa/files.po b/l10n/fa/files.po
index b153a65abbf..f101ae76370 100644
--- a/l10n/fa/files.po
+++ b/l10n/fa/files.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
"MIME-Version: 1.0\n"
@@ -21,20 +21,6 @@ msgstr ""
"Language: fa\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "%s نمی تواند حرکت کند - در حال حاضر پرونده با این نام وجود دارد. "
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "%s نمی تواند حرکت کند "
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "قادر به تغییر نام پرونده نیست."
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "هیچ Ùایلی آپلود نشد.خطای ناشناس"
@@ -70,11 +56,11 @@ msgstr "یک پوشه موقت گم شده است"
msgid "Failed to write to disk"
msgstr "نوشتن بر روی دیسک سخت ناموÙÙ‚ بود"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr ""
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "Ùضای کاÙÛŒ در دسترس نیست"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Ùهرست راهنما نامعتبر Ù…ÛŒ باشد."
@@ -82,15 +68,15 @@ msgstr "Ùهرست راهنما نامعتبر Ù…ÛŒ باشد."
msgid "Files"
msgstr "Ùایل ها"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "لغو اشتراک"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "پاک کردن"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "تغییرنام"
@@ -114,7 +100,7 @@ msgstr "لغو"
msgid "replaced {new_name}"
msgstr "{نام _جدید} جایگزین شد "
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "بازگشت"
@@ -122,13 +108,9 @@ msgstr "بازگشت"
msgid "replaced {new_name} with {old_name}"
msgstr "{نام_جدید} با { نام_قدیمی} جایگزین شد."
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "{ Ùایل های } قسمت نشده"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "{ Ùایل های } پاک شده"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -152,86 +134,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "دانلود شما در حال آماده شدن است. در صورتیکه پرونده ها بزرگ باشند ممکن است مدتی طول بکشد."
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "ناتوان در بارگذاری یا Ùایل یک پوشه است یا 0بایت دارد"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "خطا در بار گذاری"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "بستن"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "در انتظار"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 پرونده آپلود شد."
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{ شمار } Ùایل های در حال آپلود"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "بار گذاری لغو شد"
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "آپلودکردن پرونده در حال پیشرÙت است. در صورت خروج از صÙحه آپلود لغو میگردد. "
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URL نمی تواند خالی باشد."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "نام پوشه نامعتبر است. استÙاده از \" به اشتراک گذاشته شده \" متعلق به سایت Owncloud است."
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{ شمار } Ùایل های اسکن شده"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "خطا در حال انجام اسکن "
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "نام"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "اندازه"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "تغییر یاÙته"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 پوشه"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{ شمار} پوشه ها"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 پرونده"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{ شمار } Ùایل ها"
@@ -287,32 +261,40 @@ msgstr "پوشه"
msgid "From link"
msgstr "از پیوند"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "متوق٠کردن بار گذاری"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "اینجا هیچ چیز نیست."
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "بارگیری"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "حجم بارگذاری بسیار زیاد است"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Ùایلها بیش از حد تعیین شده در این سرور هستند\nمترجم:با تغییر Ùایل php,ini میتوان این محدودیت را برطر٠کرد"
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "پرونده ها در حال بازرسی هستند لطÙا صبر کنید"
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "بازرسی کنونی"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/fa/files_trashbin.po b/l10n/fa/files_trashbin.po
new file mode 100644
index 00000000000..99f4a8d73e0
--- /dev/null
+++ b/l10n/fa/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fa\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/fa/settings.po b/l10n/fa/settings.po
index 05c65056307..758c6c4152b 100644
--- a/l10n/fa/settings.po
+++ b/l10n/fa/settings.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
"MIME-Version: 1.0\n"
@@ -266,6 +266,14 @@ msgstr ""
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/fi_FI/core.po b/l10n/fi_FI/core.po
index 74a6747f32b..cd1630bfcfb 100644
--- a/l10n/fi_FI/core.po
+++ b/l10n/fi_FI/core.po
@@ -14,9 +14,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
+"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
"Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -259,7 +259,7 @@ msgstr "Vaadittua tiedostoa {file} ei ole asennettu!"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Jaa"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
@@ -386,11 +386,11 @@ msgid ""
"The update was unsuccessful. Please report this issue to the <a "
"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
"community</a>."
-msgstr ""
+msgstr "Päivitys epäonnistui. Ilmoita ongelmasta <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud-yhteisölle</a>."
#: js/update.js:18
msgid "The update was successful. Redirecting you to ownCloud now."
-msgstr ""
+msgstr "Päivitys onnistui. Selain ohjautuu nyt ownCloudiisi."
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
diff --git a/l10n/fi_FI/files.po b/l10n/fi_FI/files.po
index 16c19a658af..0208f51f421 100644
--- a/l10n/fi_FI/files.po
+++ b/l10n/fi_FI/files.po
@@ -12,9 +12,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-29 00:04+0100\n"
-"PO-Revision-Date: 2013-01-28 18:44+0000\n"
-"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -22,20 +22,6 @@ msgstr ""
"Language: fi_FI\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "Kohteen %s siirto ei onnistunut - Tiedosto samalla nimellä on jo olemassa"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "Kohteen %s siirto ei onnistunut"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "Tiedoston nimeäminen uudelleen ei onnistunut"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Tiedostoa ei lähetetty. Tuntematon virhe"
@@ -71,11 +57,11 @@ msgstr "Väliaikaiskansiota ei ole olemassa"
msgid "Failed to write to disk"
msgstr "Levylle kirjoitus epäonnistui"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr "Tallennustilaa ei ole riittävästi käytettävissä"
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "Tilaa ei ole riittävästi"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Virheellinen kansio."
@@ -83,15 +69,15 @@ msgstr "Virheellinen kansio."
msgid "Files"
msgstr "Tiedostot"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Peru jakaminen"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Poista"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Nimeä uudelleen"
@@ -115,7 +101,7 @@ msgstr "peru"
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "kumoa"
@@ -123,12 +109,8 @@ msgstr "kumoa"
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:288
-msgid "deleted {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
msgstr ""
#: js/files.js:52
@@ -153,86 +135,78 @@ msgstr "Tallennustila on loppu, tiedostoja ei voi enää päivittää tai synkro
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr "Tallennustila on melkein loppu ({usedSpacePercent}%)"
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "Lataustasi valmistellaan. Tämä saattaa kestää hetken, jos tiedostot ovat suuria kooltaan."
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Tiedoston lähetys epäonnistui, koska sen koko on 0 tavua tai kyseessä on kansio"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Lähetysvirhe."
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Sulje"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Odottaa"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr ""
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Lähetys peruttu."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Tiedoston lähetys on meneillään. Sivulta poistuminen nyt peruu tiedoston lähetyksen."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "Verkko-osoite ei voi olla tyhjä"
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Nimi"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Koko"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Muutettu"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 kansio"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} kansiota"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 tiedosto"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} tiedostoa"
@@ -288,32 +262,40 @@ msgstr "Kansio"
msgid "From link"
msgstr "Linkistä"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Peru lähetys"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Täällä ei ole mitään. Lähetä tänne jotakin!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Lataa"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Lähetettävä tiedosto on liian suuri"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Lähetettäväksi valitsemasi tiedostot ylittävät palvelimen salliman tiedostokoon rajan."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Tiedostoja tarkistetaan, odota hetki."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Tämänhetkinen tutkinta"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/fi_FI/files_trashbin.po b/l10n/fi_FI/files_trashbin.po
new file mode 100644
index 00000000000..6c75aef2cfe
--- /dev/null
+++ b/l10n/fi_FI/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi_FI\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/fi_FI/settings.po b/l10n/fi_FI/settings.po
index c662e178989..7596a234212 100644
--- a/l10n/fi_FI/settings.po
+++ b/l10n/fi_FI/settings.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
"MIME-Version: 1.0\n"
@@ -231,7 +231,7 @@ msgstr "Kehityksestä on vastannut <a href=\"http://ownCloud.org/contact\" targe
#: templates/users.php:21 templates/users.php:79
msgid "Login Name"
-msgstr ""
+msgstr "Kirjautumisnimi"
#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
@@ -255,7 +255,7 @@ msgstr "Muu"
#: templates/users.php:80
msgid "Display Name"
-msgstr ""
+msgstr "Näyttönimi"
#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
@@ -265,6 +265,14 @@ msgstr "Ryhmän ylläpitäjä"
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "Oletus"
diff --git a/l10n/fr/core.po b/l10n/fr/core.po
index 14e68eae7e2..81a4e6bd2ee 100644
--- a/l10n/fr/core.po
+++ b/l10n/fr/core.po
@@ -19,8 +19,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
"MIME-Version: 1.0\n"
@@ -264,7 +264,7 @@ msgstr "Le fichier requis {file} n'est pas installé !"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Partager"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/fr/files.po b/l10n/fr/files.po
index dd7d5c26359..de61e4b0576 100644
--- a/l10n/fr/files.po
+++ b/l10n/fr/files.po
@@ -20,9 +20,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 09:26+0000\n"
-"Last-Translator: dbasquin <dba@alternalease.fr>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -30,20 +30,6 @@ msgstr ""
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "Impossible de déplacer %s - Un fichier possédant ce nom existe déjà"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "Impossible de déplacer %s"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "Impossible de renommer le fichier"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Aucun fichier n'a été chargé. Erreur inconnue"
@@ -79,11 +65,11 @@ msgstr "Il manque un répertoire temporaire"
msgid "Failed to write to disk"
msgstr "Erreur d'écriture sur le disque"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr "Plus assez d'espace de stockage disponible"
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "Espace disponible insuffisant"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Dossier invalide."
@@ -91,15 +77,15 @@ msgstr "Dossier invalide."
msgid "Files"
msgstr "Fichiers"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Ne plus partager"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Supprimer"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Renommer"
@@ -123,7 +109,7 @@ msgstr "annuler"
msgid "replaced {new_name}"
msgstr "{new_name} a été remplacé"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "annuler"
@@ -131,13 +117,9 @@ msgstr "annuler"
msgid "replaced {new_name} with {old_name}"
msgstr "{new_name} a été remplacé par {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "Fichiers non partagés : {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "Fichiers supprimés : {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -161,86 +143,78 @@ msgstr "Votre espage de stockage est plein, les fichiers ne peuvent plus être t
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr "Votre espace de stockage est presque plein ({usedSpacePercent}%)"
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "Votre téléchargement est cours de préparation. Ceci peut nécessiter un certain temps si les fichiers sont volumineux."
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Impossible de charger vos fichiers car il s'agit d'un dossier ou le fichier fait 0 octet."
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Erreur de chargement"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Fermer"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "En cours"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 fichier en cours de téléchargement"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} fichiers téléversés"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Chargement annulé."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "L'URL ne peut-être vide"
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Nom de dossier invalide. L'utilisation du mot 'Shared' est réservée à Owncloud"
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} fichiers indexés"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "erreur lors de l'indexation"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Nom"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Taille"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Modifié"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 dossier"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} dossiers"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 fichier"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} fichiers"
@@ -296,32 +270,40 @@ msgstr "Dossier"
msgid "From link"
msgstr "Depuis le lien"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Annuler l'envoi"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Il n'y a rien ici ! Envoyez donc quelque chose :)"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Télécharger"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Fichier trop volumineux"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Les fichiers que vous essayez d'envoyer dépassent la taille maximale permise par ce serveur."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Les fichiers sont en cours d'analyse, veuillez patienter."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Analyse en cours"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/fr/files_trashbin.po b/l10n/fr/files_trashbin.po
new file mode 100644
index 00000000000..997e15235bc
--- /dev/null
+++ b/l10n/fr/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/fr/settings.po b/l10n/fr/settings.po
index c2827253a3b..320184d4152 100644
--- a/l10n/fr/settings.po
+++ b/l10n/fr/settings.po
@@ -22,8 +22,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
"MIME-Version: 1.0\n"
@@ -277,6 +277,14 @@ msgstr "Groupe Admin"
msgid "Storage"
msgstr "Support de stockage"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "Défaut"
diff --git a/l10n/gl/core.po b/l10n/gl/core.po
index e2701a3713b..9b469981078 100644
--- a/l10n/gl/core.po
+++ b/l10n/gl/core.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
"MIME-Version: 1.0\n"
@@ -255,7 +255,7 @@ msgstr "Non está instalado o ficheiro {file} que se precisa"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Compartir"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/gl/files.po b/l10n/gl/files.po
index a303b105799..19fcb367bac 100644
--- a/l10n/gl/files.po
+++ b/l10n/gl/files.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
"MIME-Version: 1.0\n"
@@ -19,20 +19,6 @@ msgstr ""
"Language: gl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "Non se moveu %s - Xa existe un ficheiro con ese nome."
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "Non se puido mover %s"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "Non se pode renomear o ficheiro"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Non se subiu ningún ficheiro. Erro descoñecido."
@@ -68,11 +54,11 @@ msgstr "Falta un cartafol temporal"
msgid "Failed to write to disk"
msgstr "Erro ao escribir no disco"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr ""
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "O espazo dispoñíbel é insuficiente"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "O directorio é incorrecto."
@@ -80,15 +66,15 @@ msgstr "O directorio é incorrecto."
msgid "Files"
msgstr "Ficheiros"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Deixar de compartir"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Eliminar"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Mudar o nome"
@@ -112,7 +98,7 @@ msgstr "cancelar"
msgid "replaced {new_name}"
msgstr "substituír {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "desfacer"
@@ -120,13 +106,9 @@ msgstr "desfacer"
msgid "replaced {new_name} with {old_name}"
msgstr "substituír {new_name} polo {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "{files} sen compartir"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "{files} eliminados"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -150,86 +132,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Non se puido subir o ficheiro pois ou é un directorio ou ten 0 bytes"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Erro na subida"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Pechar"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Pendentes"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 ficheiro subíndose"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} ficheiros subíndose"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Subida cancelada."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "A subida do ficheiro está en curso. Saír agora da páxina cancelará a subida."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URL non pode quedar baleiro."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Nome de cartafol non válido. O uso de 'Shared' está reservado por Owncloud"
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} ficheiros escaneados"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "erro mentres analizaba"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Nome"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Tamaño"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Modificado"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 cartafol"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} cartafoles"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 ficheiro"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} ficheiros"
@@ -285,32 +259,40 @@ msgstr "Cartafol"
msgid "From link"
msgstr "Dende a ligazón"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Cancelar a subida"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Nada por aquí. Envía algo."
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Descargar"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Envío demasiado grande"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Os ficheiros que trata de subir superan o tamaño máximo permitido neste servidor"
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Estanse analizando os ficheiros. Agarda."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Análise actual"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/gl/files_trashbin.po b/l10n/gl/files_trashbin.po
new file mode 100644
index 00000000000..7c20517d24e
--- /dev/null
+++ b/l10n/gl/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: gl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/gl/settings.po b/l10n/gl/settings.po
index d5af9d142a9..957989c610c 100644
--- a/l10n/gl/settings.po
+++ b/l10n/gl/settings.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
"MIME-Version: 1.0\n"
@@ -265,6 +265,14 @@ msgstr "Grupo Admin"
msgid "Storage"
msgstr "Almacenamento"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "Predeterminado"
diff --git a/l10n/he/core.po b/l10n/he/core.po
index c3ae441a83c..a8d90561ae2 100644
--- a/l10n/he/core.po
+++ b/l10n/he/core.po
@@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
"MIME-Version: 1.0\n"
@@ -257,7 +257,7 @@ msgstr "הקובץ הנדרש {file} ×ינו מותקן!"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "שתף"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/he/files.po b/l10n/he/files.po
index 60b53f30b7d..d40c3181983 100644
--- a/l10n/he/files.po
+++ b/l10n/he/files.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
"MIME-Version: 1.0\n"
@@ -21,20 +21,6 @@ msgstr ""
"Language: he\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "×œ× ×”×•×¢×œ×” קובץ. טעות בלתי מזוהה."
@@ -70,11 +56,11 @@ msgstr "תיקייה זמנית חסרה"
msgid "Failed to write to disk"
msgstr "הכתיבה לכונן נכשלה"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -82,15 +68,15 @@ msgstr ""
msgid "Files"
msgstr "קבצי×"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "הסר שיתוף"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "מחיקה"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "שינוי ש×"
@@ -114,7 +100,7 @@ msgstr "ביטול"
msgid "replaced {new_name}"
msgstr "{new_name} הוחלף"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "ביטול"
@@ -122,13 +108,9 @@ msgstr "ביטול"
msgid "replaced {new_name} with {old_name}"
msgstr "{new_name} הוחלף ב־{old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "בוטל ×©×™×ª×•×¤× ×©×œ {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "{files} נמחקו"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -152,86 +134,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "×œ× ×™×›×•×œ להעלות ×ת הקובץ מכיוון שזו תקיה ×ו שמשקל הקובץ 0 בתי×"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "שגי×ת העל××”"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "סגירה"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "ממתין"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "קובץ ×חד נשלח"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} ×§×‘×¦×™× × ×©×œ×—×™×"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "ההעל××” בוטלה."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "מתבצעת כעת העל×ת קבצי×. עזיבה של העמוד תבטל ×ת ההעל××”."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "קישור ×ינו יכול להיות ריק."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} ×§×‘×¦×™× × ×¡×¨×§×•"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "×ירעה שגי××” במהלך הסריקה"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "ש×"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "גודל"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "זמן שינוי"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "תיקייה ×חת"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} תיקיות"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "קובץ ×חד"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} קבצי×"
@@ -287,32 +261,40 @@ msgstr "תיקייה"
msgid "From link"
msgstr "מקישור"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "ביטול ההעל××”"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "×ין ×›×ן ×©×•× ×“×‘×¨. ×ולי ברצונך להעלות משהו?"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "הורדה"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "העל××” גדולה מידי"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "×”×§×‘×¦×™× ×©× ×™×¡×™×ª להעלות חרגו מהגודל המקסימלי להעל×ת ×§×‘×¦×™× ×¢×œ שרת ×–×”."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "×”×§×‘×¦×™× × ×¡×¨×§×™×, × × ×œ×”×ž×ª×™×Ÿ."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "הסריקה הנוכחית"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/he/files_trashbin.po b/l10n/he/files_trashbin.po
new file mode 100644
index 00000000000..ecba90622ca
--- /dev/null
+++ b/l10n/he/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: he\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/he/settings.po b/l10n/he/settings.po
index 53f1026fb77..2fb85237b0f 100644
--- a/l10n/he/settings.po
+++ b/l10n/he/settings.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
"MIME-Version: 1.0\n"
@@ -266,6 +266,14 @@ msgstr "מנהל הקבוצה"
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/hi/files.po b/l10n/hi/files.po
index 0c74c7074fb..c56da3dc54c 100644
--- a/l10n/hi/files.po
+++ b/l10n/hi/files.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
"MIME-Version: 1.0\n"
@@ -17,20 +17,6 @@ msgstr ""
"Language: hi\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr ""
@@ -66,11 +52,11 @@ msgstr ""
msgid "Failed to write to disk"
msgstr ""
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -78,15 +64,15 @@ msgstr ""
msgid "Files"
msgstr ""
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr ""
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr ""
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr ""
@@ -110,7 +96,7 @@ msgstr ""
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr ""
@@ -118,12 +104,8 @@ msgstr ""
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:288
-msgid "deleted {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
msgstr ""
#: js/files.js:52
@@ -148,86 +130,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr ""
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr ""
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr ""
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr ""
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr ""
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr ""
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr ""
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr ""
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr ""
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr ""
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr ""
@@ -283,32 +257,40 @@ msgstr ""
msgid "From link"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr ""
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr ""
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr ""
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr ""
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr ""
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/hi/files_trashbin.po b/l10n/hi/files_trashbin.po
new file mode 100644
index 00000000000..81376782a72
--- /dev/null
+++ b/l10n/hi/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/hi/settings.po b/l10n/hi/settings.po
index 9af2a151483..d03f926766d 100644
--- a/l10n/hi/settings.po
+++ b/l10n/hi/settings.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
"MIME-Version: 1.0\n"
@@ -262,6 +262,14 @@ msgstr ""
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/hr/core.po b/l10n/hr/core.po
index 2959d09753c..050cbe3ac79 100644
--- a/l10n/hr/core.po
+++ b/l10n/hr/core.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
"MIME-Version: 1.0\n"
@@ -256,7 +256,7 @@ msgstr ""
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Podijeli"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/hr/files.po b/l10n/hr/files.po
index edf64baef15..92a63cc100b 100644
--- a/l10n/hr/files.po
+++ b/l10n/hr/files.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
"MIME-Version: 1.0\n"
@@ -20,20 +20,6 @@ msgstr ""
"Language: hr\n"
"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;\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr ""
@@ -69,11 +55,11 @@ msgstr "Nedostaje privremena mapa"
msgid "Failed to write to disk"
msgstr "Neuspjelo pisanje na disk"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -81,15 +67,15 @@ msgstr ""
msgid "Files"
msgstr "Datoteke"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Prekini djeljenje"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Briši"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Promjeni ime"
@@ -113,7 +99,7 @@ msgstr "odustani"
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "vrati"
@@ -121,12 +107,8 @@ msgstr "vrati"
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:288
-msgid "deleted {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
msgstr ""
#: js/files.js:52
@@ -151,86 +133,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Nemoguće poslati datoteku jer je prazna ili je direktorij"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Pogreška pri slanju"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Zatvori"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "U tijeku"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 datoteka se uÄitava"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Slanje poništeno."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "UÄitavanje datoteke. NapuÅ¡tanjem stranice će prekinuti uÄitavanje."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "greÄka prilikom skeniranja"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Naziv"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "VeliÄina"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Zadnja promjena"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr ""
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr ""
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr ""
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr ""
@@ -286,32 +260,40 @@ msgstr "mapa"
msgid "From link"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Prekini upload"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Nema niÄega u ovoj mapi. PoÅ¡alji neÅ¡to!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Preuzmi"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Prijenos je preobiman"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Datoteke koje pokuÅ¡avate prenijeti prelaze maksimalnu veliÄinu za prijenos datoteka na ovom poslužitelju."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Datoteke se skeniraju, molimo priÄekajte."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Trenutno skeniranje"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/hr/files_trashbin.po b/l10n/hr/files_trashbin.po
new file mode 100644
index 00000000000..8c1029fd3eb
--- /dev/null
+++ b/l10n/hr/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hr\n"
+"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;\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/hr/settings.po b/l10n/hr/settings.po
index a8be98c5afb..247ce35fc2e 100644
--- a/l10n/hr/settings.po
+++ b/l10n/hr/settings.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
"MIME-Version: 1.0\n"
@@ -265,6 +265,14 @@ msgstr "Grupa Admin"
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/hu_HU/core.po b/l10n/hu_HU/core.po
index 4a9be1afdf6..aa5dc243807 100644
--- a/l10n/hu_HU/core.po
+++ b/l10n/hu_HU/core.po
@@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
"MIME-Version: 1.0\n"
@@ -257,7 +257,7 @@ msgstr "A szükséges fájl: {file} nincs telepítve!"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Megosztás"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/hu_HU/files.po b/l10n/hu_HU/files.po
index d5983f63946..3fc7f3effbf 100644
--- a/l10n/hu_HU/files.po
+++ b/l10n/hu_HU/files.po
@@ -14,9 +14,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-29 00:04+0100\n"
-"PO-Revision-Date: 2013-01-28 08:37+0000\n"
-"Last-Translator: akoscomp <nagy.akos@libreoffice.ro>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -24,20 +24,6 @@ msgstr ""
"Language: hu_HU\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "%s áthelyezése nem sikerült - már létezik másik fájl ezzel a névvel"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "Nem sikerült %s áthelyezése"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "Nem lehet átnevezni a fájlt"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Nem történt feltöltés. Ismeretlen hiba"
@@ -73,11 +59,11 @@ msgstr "Hiányzik egy ideiglenes mappa"
msgid "Failed to write to disk"
msgstr "Nem sikerült a lemezre történő írás"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr "Nincs elég szabad hely."
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "Nincs elég szabad hely"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Érvénytelen mappa."
@@ -85,15 +71,15 @@ msgstr "Érvénytelen mappa."
msgid "Files"
msgstr "Fájlok"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Megosztás visszavonása"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Törlés"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Ãtnevezés"
@@ -117,7 +103,7 @@ msgstr "mégse"
msgid "replaced {new_name}"
msgstr "a(z) {new_name} állományt kicseréltük"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "visszavonás"
@@ -125,13 +111,9 @@ msgstr "visszavonás"
msgid "replaced {new_name} with {old_name}"
msgstr "{new_name} fájlt kicseréltük ezzel: {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "{files} fájl megosztása visszavonva"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "{files} fájl törölve"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -155,86 +137,78 @@ msgstr "A tároló tele van, a fájlok nem frissíthetőek vagy szinkronizálhat
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr "A tároló majdnem tele van ({usedSpacePercent}%)"
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "Készül a letöltendő állomány. Ez eltarthat egy ideig, ha nagyok a fájlok."
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Nem tölthető fel, mert mappa volt, vagy 0 byte méretű"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Feltöltési hiba"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Bezárás"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Folyamatban"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 fájl töltődik föl"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} fájl töltődik föl"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "A feltöltést megszakítottuk."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Fájlfeltöltés van folyamatban. Az oldal elhagyása megszakítja a feltöltést."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "Az URL nem lehet semmi."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Érvénytelen mappanév. A név használata csak a Owncloud számára lehetséges."
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} fájlt találtunk"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "Hiba a fájllista-ellenőrzés során"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Név"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Méret"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Módosítva"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 mappa"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} mappa"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 fájl"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} fájl"
@@ -290,32 +264,40 @@ msgstr "Mappa"
msgid "From link"
msgstr "Feltöltés linkről"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "A feltöltés megszakítása"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Itt nincs semmi. Töltsön fel valamit!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Letöltés"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "A feltöltés túl nagy"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "A feltöltendő állományok mérete meghaladja a kiszolgálón megengedett maximális méretet."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "A fájllista ellenőrzése zajlik, kis türelmet!"
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Ellenőrzés alatt"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/hu_HU/files_trashbin.po b/l10n/hu_HU/files_trashbin.po
new file mode 100644
index 00000000000..1dcce92d773
--- /dev/null
+++ b/l10n/hu_HU/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hu_HU\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/hu_HU/settings.po b/l10n/hu_HU/settings.po
index 5aa7fcfb013..0e85339b48c 100644
--- a/l10n/hu_HU/settings.po
+++ b/l10n/hu_HU/settings.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
"MIME-Version: 1.0\n"
@@ -265,6 +265,14 @@ msgstr "Csoportadminisztrátor"
msgid "Storage"
msgstr "Tárhely"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "Alapértelmezett"
diff --git a/l10n/ia/core.po b/l10n/ia/core.po
index 0c74f327700..6359a737f3e 100644
--- a/l10n/ia/core.po
+++ b/l10n/ia/core.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
"MIME-Version: 1.0\n"
@@ -253,7 +253,7 @@ msgstr ""
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Compartir"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/ia/files.po b/l10n/ia/files.po
index b1a67c83777..bbf335b0314 100644
--- a/l10n/ia/files.po
+++ b/l10n/ia/files.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
"MIME-Version: 1.0\n"
@@ -19,20 +19,6 @@ msgstr ""
"Language: ia\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr ""
@@ -68,11 +54,11 @@ msgstr "Manca un dossier temporari"
msgid "Failed to write to disk"
msgstr ""
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -80,15 +66,15 @@ msgstr ""
msgid "Files"
msgstr "Files"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr ""
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Deler"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr ""
@@ -112,7 +98,7 @@ msgstr ""
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr ""
@@ -120,12 +106,8 @@ msgstr ""
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:288
-msgid "deleted {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
msgstr ""
#: js/files.js:52
@@ -150,86 +132,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr ""
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Clauder"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr ""
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr ""
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Nomine"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Dimension"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Modificate"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr ""
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr ""
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr ""
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr ""
@@ -285,32 +259,40 @@ msgstr "Dossier"
msgid "From link"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr ""
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Nihil hic. Incarga alcun cosa!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Discargar"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Incargamento troppo longe"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr ""
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/ia/files_trashbin.po b/l10n/ia/files_trashbin.po
new file mode 100644
index 00000000000..42db681745c
--- /dev/null
+++ b/l10n/ia/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ia\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/ia/settings.po b/l10n/ia/settings.po
index 8a5f778dd98..78f954d5837 100644
--- a/l10n/ia/settings.po
+++ b/l10n/ia/settings.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
"MIME-Version: 1.0\n"
@@ -264,6 +264,14 @@ msgstr ""
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/id/core.po b/l10n/id/core.po
index e3dcf88b98d..adf34a7cb25 100644
--- a/l10n/id/core.po
+++ b/l10n/id/core.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
"MIME-Version: 1.0\n"
@@ -256,7 +256,7 @@ msgstr ""
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "berbagi"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/id/files.po b/l10n/id/files.po
index 50113614716..a8584662620 100644
--- a/l10n/id/files.po
+++ b/l10n/id/files.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
"MIME-Version: 1.0\n"
@@ -20,20 +20,6 @@ msgstr ""
"Language: id\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr ""
@@ -69,11 +55,11 @@ msgstr "Kehilangan folder temporer"
msgid "Failed to write to disk"
msgstr "Gagal menulis ke disk"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -81,15 +67,15 @@ msgstr ""
msgid "Files"
msgstr "Berkas"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "batalkan berbagi"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Hapus"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr ""
@@ -113,7 +99,7 @@ msgstr "batalkan"
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "batal dikerjakan"
@@ -121,12 +107,8 @@ msgstr "batal dikerjakan"
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:288
-msgid "deleted {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
msgstr ""
#: js/files.js:52
@@ -151,86 +133,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Gagal mengunggah berkas anda karena berupa direktori atau mempunyai ukuran 0 byte"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Terjadi Galat Pengunggahan"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "tutup"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Menunggu"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr ""
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Pengunggahan dibatalkan."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "tautan tidak boleh kosong"
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Nama"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Ukuran"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Dimodifikasi"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr ""
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr ""
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr ""
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr ""
@@ -286,32 +260,40 @@ msgstr "Folder"
msgid "From link"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Batal mengunggah"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Tidak ada apa-apa di sini. Unggah sesuatu!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Unduh"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Unggahan terlalu besar"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Berkas yang anda coba unggah melebihi ukuran maksimum untuk pengunggahan berkas di server ini."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Berkas sedang dipindai, silahkan tunggu."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Sedang memindai"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/id/files_trashbin.po b/l10n/id/files_trashbin.po
new file mode 100644
index 00000000000..671c1c77ee9
--- /dev/null
+++ b/l10n/id/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/id/settings.po b/l10n/id/settings.po
index bcaf1c7afee..a594ba52ada 100644
--- a/l10n/id/settings.po
+++ b/l10n/id/settings.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
"MIME-Version: 1.0\n"
@@ -266,6 +266,14 @@ msgstr "Admin Grup"
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/is/core.po b/l10n/is/core.po
index 4916011fc43..fa83addcf99 100644
--- a/l10n/is/core.po
+++ b/l10n/is/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
"MIME-Version: 1.0\n"
@@ -254,7 +254,7 @@ msgstr "Umbeðina skráin {file} ekki tiltæk!"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Deila"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/is/files.po b/l10n/is/files.po
index bd387e20c3f..34313c0d99f 100644
--- a/l10n/is/files.po
+++ b/l10n/is/files.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
"MIME-Version: 1.0\n"
@@ -18,20 +18,6 @@ msgstr ""
"Language: is\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "Gat ekki fært %s - Skrá með þessu nafni er þegar til"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "Gat ekki fært %s"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "Gat ekki endurskýrt skrá"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Engin skrá var send inn. Óþekkt villa."
@@ -67,11 +53,11 @@ msgstr "Vantar bráðabirgðamöppu"
msgid "Failed to write to disk"
msgstr "Tókst ekki að skrifa á disk"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr ""
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "Ekki nægt pláss tiltækt"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Ógild mappa."
@@ -79,15 +65,15 @@ msgstr "Ógild mappa."
msgid "Files"
msgstr "Skrár"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Hætta deilingu"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Eyða"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Endurskýra"
@@ -111,7 +97,7 @@ msgstr "hætta við"
msgid "replaced {new_name}"
msgstr "endurskýrði {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "afturkalla"
@@ -119,13 +105,9 @@ msgstr "afturkalla"
msgid "replaced {new_name} with {old_name}"
msgstr "yfirskrifaði {new_name} með {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "Hætti við deilingu á {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "eyddi {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -149,86 +131,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Innsending á skrá mistókst, hugsanlega sendir þú möppu eða skráin er 0 bæti."
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Villa við innsendingu"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Loka"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Bíður"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 skrá innsend"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} skrár innsendar"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Hætt við innsendingu."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Innsending í gangi. Ef þú ferð af þessari síðu mun innsending misheppnast."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "Vefslóð má ekki vera tóm."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Óleyfilegt nafn á möppu. Nafnið 'Shared' er frátekið fyrir Owncloud"
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} skrár skimaðar"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "villa við skimun"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Nafn"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Stærð"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Breytt"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 mappa"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} möppur"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 skrá"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} skrár"
@@ -284,32 +258,40 @@ msgstr "Mappa"
msgid "From link"
msgstr "Af tengli"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Hætta við innsendingu"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Ekkert hér. Settu eitthvað inn!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Niðurhal"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Innsend skrá er of stór"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Skrárnar sem þú ert að senda inn eru stærri en hámarks innsendingarstærð á þessum netþjóni."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Verið er að skima skrár, vinsamlegast hinkraðu."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Er að skima"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/is/files_trashbin.po b/l10n/is/files_trashbin.po
new file mode 100644
index 00000000000..2ff20172cbd
--- /dev/null
+++ b/l10n/is/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: is\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/is/settings.po b/l10n/is/settings.po
index 15f488a9b26..10370198069 100644
--- a/l10n/is/settings.po
+++ b/l10n/is/settings.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
"MIME-Version: 1.0\n"
@@ -263,6 +263,14 @@ msgstr "Hópstjóri"
msgid "Storage"
msgstr "gagnapláss"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "Sjálfgefið"
diff --git a/l10n/it/core.po b/l10n/it/core.po
index 77ec770b0d5..c1cb41fed87 100644
--- a/l10n/it/core.po
+++ b/l10n/it/core.po
@@ -6,15 +6,16 @@
# <cosenal@gmail.com>, 2011.
# Francesco Apruzzese <cescoap@gmail.com>, 2011, 2012.
# <marco@carnazzo.it>, 2011, 2012.
+# <pgcloud@imballaggi.net>, 2013.
# <rb.colombo@gmail.com>, 2011.
# Vincenzo Reale <vinx.reale@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 07:30+0000\n"
+"Last-Translator: pgcloud <pgcloud@imballaggi.net>\n"
"Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -257,11 +258,11 @@ msgstr "Il file richiesto {file} non è installato!"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Condividi"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
-msgstr ""
+msgstr "Condivisi"
#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
@@ -557,7 +558,7 @@ msgstr "Accesso automatico rifiutato."
msgid ""
"If you did not change your password recently, your account may be "
"compromised!"
-msgstr "Se non hai cambiato la password recentemente, il tuo account potrebbe essere stato compromesso."
+msgstr "Se non hai cambiato la password recentemente, il tuo account potrebbe essere compromesso."
#: templates/login.php:13
msgid "Please change your password to secure your account again."
@@ -586,4 +587,4 @@ msgstr "successivo"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr "Aggiornamento di ownCloud alla versione %s in corso, potrebbe richiedere del tempo."
+msgstr "Aggiornamento di ownCloud alla versione %s in corso, ciò potrebbe richiedere del tempo."
diff --git a/l10n/it/files.po b/l10n/it/files.po
index 0a161d8c6e3..45e4a1587eb 100644
--- a/l10n/it/files.po
+++ b/l10n/it/files.po
@@ -11,9 +11,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-28 00:04+0100\n"
-"PO-Revision-Date: 2013-01-27 00:03+0000\n"
-"Last-Translator: Vincenzo Reale <vinx.reale@gmail.com>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,20 +21,6 @@ msgstr ""
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "Impossibile spostare %s - un file con questo nome esiste già"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "Impossibile spostare %s"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "Impossibile rinominare il file"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Nessun file è stato inviato. Errore sconosciuto"
@@ -70,11 +56,11 @@ msgstr "Cartella temporanea mancante"
msgid "Failed to write to disk"
msgstr "Scrittura su disco non riuscita"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr "Spazio di archiviazione insufficiente"
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "Spazio disponibile insufficiente"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Cartella non valida."
@@ -82,15 +68,15 @@ msgstr "Cartella non valida."
msgid "Files"
msgstr "File"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Rimuovi condivisione"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Elimina"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Rinomina"
@@ -114,7 +100,7 @@ msgstr "annulla"
msgid "replaced {new_name}"
msgstr "sostituito {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "annulla"
@@ -122,13 +108,9 @@ msgstr "annulla"
msgid "replaced {new_name} with {old_name}"
msgstr "sostituito {new_name} con {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "non condivisi {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "eliminati {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -152,86 +134,78 @@ msgstr "Lo spazio di archiviazione è pieno, i file non possono essere più aggi
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr "Lo spazio di archiviazione è quasi pieno ({usedSpacePercent}%)"
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "Il tuo scaricamento è in fase di preparazione. Ciò potrebbe richiedere del tempo se i file sono grandi."
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Impossibile inviare il file poiché è una cartella o ha dimensione 0 byte"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Errore di invio"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Chiudi"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "In corso"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 file in fase di caricamento"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} file in fase di caricamentoe"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Invio annullato"
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "L'URL non può essere vuoto."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Nome della cartella non valido. L'uso di 'Shared' è riservato da ownCloud"
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} file analizzati"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "errore durante la scansione"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Nome"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Dimensione"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Modificato"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 cartella"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} cartelle"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 file"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} file"
@@ -287,32 +261,40 @@ msgstr "Cartella"
msgid "From link"
msgstr "Da collegamento"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Annulla invio"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Non c'è niente qui. Carica qualcosa!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Scarica"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Il file caricato è troppo grande"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "I file che stai provando a caricare superano la dimensione massima consentita su questo server."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Scansione dei file in corso, attendi"
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Scansione corrente"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Aggiornamento della cache del filesystem in corso..."
diff --git a/l10n/it/files_trashbin.po b/l10n/it/files_trashbin.po
new file mode 100644
index 00000000000..b5021a55f50
--- /dev/null
+++ b/l10n/it/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: it\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/it/settings.po b/l10n/it/settings.po
index 6f1b11dd3f2..117e005d4ac 100644
--- a/l10n/it/settings.po
+++ b/l10n/it/settings.po
@@ -9,14 +9,14 @@
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
# <marco@carnazzo.it>, 2011-2013.
# <rb.colombo@gmail.com>, 2011.
-# Vincenzo Reale <vinx.reale@gmail.com>, 2012.
+# Vincenzo Reale <vinx.reale@gmail.com>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 06:40+0000\n"
+"Last-Translator: Vincenzo Reale <vinx.reale@gmail.com>\n"
"Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -235,7 +235,7 @@ msgstr "Sviluppato dalla <a href=\"http://ownCloud.org/contact\" target=\"_blank
#: templates/users.php:21 templates/users.php:79
msgid "Login Name"
-msgstr ""
+msgstr "Nome utente"
#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
@@ -259,7 +259,7 @@ msgstr "Altro"
#: templates/users.php:80
msgid "Display Name"
-msgstr ""
+msgstr "Nome visualizzato"
#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
@@ -269,6 +269,14 @@ msgstr "Gruppi amministrati"
msgid "Storage"
msgstr "Archiviazione"
+#: templates/users.php:97
+msgid "change display name"
+msgstr "cambia il nome visualizzato"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "imposta una nuova password"
+
#: templates/users.php:137
msgid "Default"
msgstr "Predefinito"
diff --git a/l10n/ja_JP/core.po b/l10n/ja_JP/core.po
index 76db5f78f9b..8b2b2d4cb7d 100644
--- a/l10n/ja_JP/core.po
+++ b/l10n/ja_JP/core.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
"MIME-Version: 1.0\n"
@@ -255,11 +255,11 @@ msgstr "å¿…è¦ãªãƒ•ã‚¡ã‚¤ãƒ« {file} ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã¾ã›ã‚“ï
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "共有"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
-msgstr ""
+msgstr "共有中"
#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
diff --git a/l10n/ja_JP/files.po b/l10n/ja_JP/files.po
index 5a4b882085b..9d8e49b3250 100644
--- a/l10n/ja_JP/files.po
+++ b/l10n/ja_JP/files.po
@@ -11,9 +11,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 01:10+0000\n"
-"Last-Translator: Daisuke Deguchi <ddeguchi@nagoya-u.jp>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,20 +21,6 @@ msgstr ""
"Language: ja_JP\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "%s を移動ã§ãã¾ã›ã‚“ã§ã—㟠― ã“ã®åå‰ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯ã™ã§ã«å­˜åœ¨ã—ã¾ã™"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "%s を移動ã§ãã¾ã›ã‚“ã§ã—ãŸ"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "ファイルåã®å¤‰æ›´ãŒã§ãã¾ã›ã‚“"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "ファイルã¯ä½•ã‚‚アップロードã•ã‚Œã¦ã„ã¾ã›ã‚“。ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼"
@@ -70,11 +56,11 @@ msgstr "テンãƒãƒ©ãƒªãƒ•ã‚©ãƒ«ãƒ€ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
msgid "Failed to write to disk"
msgstr "ディスクã¸ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr "ストレージã«å分ãªç©ºã容é‡ãŒã‚ã‚Šã¾ã›ã‚“"
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "利用å¯èƒ½ãªã‚¹ãƒšãƒ¼ã‚¹ãŒå分ã«ã‚ã‚Šã¾ã›ã‚“"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "無効ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã™ã€‚"
@@ -82,15 +68,15 @@ msgstr "無効ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã™ã€‚"
msgid "Files"
msgstr "ファイル"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "共有ã—ãªã„"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "削除"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "åå‰ã®å¤‰æ›´"
@@ -114,7 +100,7 @@ msgstr "キャンセル"
msgid "replaced {new_name}"
msgstr "{new_name} ã‚’ç½®æ›"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "å…ƒã«æˆ»ã™"
@@ -122,13 +108,9 @@ msgstr "å…ƒã«æˆ»ã™"
msgid "replaced {new_name} with {old_name}"
msgstr "{old_name} ã‚’ {new_name} ã«ç½®æ›"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "未共有 {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "削除 {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -152,86 +134,78 @@ msgstr "ã‚ãªãŸã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ã¯ä¸€æ¯ã§ã™ã€‚ファイルã®æ›´æ–°ã¨åŒ
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr "ã‚ãªãŸã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ã¯ã»ã¼ä¸€æ¯ã§ã™ï¼ˆ{usedSpacePercent}%)"
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "ダウンロードã®æº–備中ã§ã™ã€‚ファイルサイズãŒå¤§ãã„å ´åˆã¯å°‘ã—時間ãŒã‹ã‹ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。"
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "ディレクトリもã—ãã¯0ãƒã‚¤ãƒˆã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯ã‚¢ãƒƒãƒ—ロードã§ãã¾ã›ã‚“"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "アップロードエラー"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "é–‰ã˜ã‚‹"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "ä¿ç•™"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "ファイルを1ã¤ã‚¢ãƒƒãƒ—ロード中"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} ファイルをアップロード中"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "アップロードã¯ã‚­ãƒ£ãƒ³ã‚»ãƒ«ã•ã‚Œã¾ã—ãŸã€‚"
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "ファイル転é€ã‚’実行中ã§ã™ã€‚今ã“ã®ãƒšãƒ¼ã‚¸ã‹ã‚‰ç§»å‹•ã™ã‚‹ã¨ã‚¢ãƒƒãƒ—ロードãŒä¸­æ­¢ã•ã‚Œã¾ã™ã€‚"
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URLã¯ç©ºã«ã§ãã¾ã›ã‚“。"
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "無効ãªãƒ•ã‚©ãƒ«ãƒ€åã§ã™ã€‚'Shared' ã®åˆ©ç”¨ã¯ ownCloud ãŒäºˆç´„済ã¿ã§ã™ã€‚"
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} ファイルをスキャン"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "スキャン中ã®ã‚¨ãƒ©ãƒ¼"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "åå‰"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "サイズ"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "更新日時"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 フォルダ"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} フォルダ"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 ファイル"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} ファイル"
@@ -287,32 +261,40 @@ msgstr "フォルダ"
msgid "From link"
msgstr "リンク"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "アップロードをキャンセル"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "ã“ã“ã«ã¯ä½•ã‚‚ã‚ã‚Šã¾ã›ã‚“。何ã‹ã‚¢ãƒƒãƒ—ロードã—ã¦ãã ã•ã„。"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "ダウンロード"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "ファイルサイズãŒå¤§ãã™ãŽã¾ã™"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "アップロードã—よã†ã¨ã—ã¦ã„るファイルã¯ã€ã‚µãƒ¼ãƒã§è¦å®šã•ã‚ŒãŸæœ€å¤§ã‚µã‚¤ã‚ºã‚’超ãˆã¦ã„ã¾ã™ã€‚"
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "ファイルをスキャンã—ã¦ã„ã¾ã™ã€ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„。"
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "スキャン中"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/ja_JP/files_trashbin.po b/l10n/ja_JP/files_trashbin.po
new file mode 100644
index 00000000000..67b3cb9aa10
--- /dev/null
+++ b/l10n/ja_JP/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ja_JP\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/ja_JP/settings.po b/l10n/ja_JP/settings.po
index 4871013dbf6..5219c67a40f 100644
--- a/l10n/ja_JP/settings.po
+++ b/l10n/ja_JP/settings.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
"MIME-Version: 1.0\n"
@@ -266,6 +266,14 @@ msgstr "グループ管ç†è€…"
msgid "Storage"
msgstr "ストレージ"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "デフォルト"
diff --git a/l10n/ka_GE/core.po b/l10n/ka_GE/core.po
index 87ed1f83cd4..8400725e1df 100644
--- a/l10n/ka_GE/core.po
+++ b/l10n/ka_GE/core.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
"MIME-Version: 1.0\n"
@@ -253,7 +253,7 @@ msgstr ""
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "გáƒáƒ–იáƒáƒ áƒ”ბáƒ"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/ka_GE/files.po b/l10n/ka_GE/files.po
index 55891c6815d..1fad0f39af9 100644
--- a/l10n/ka_GE/files.po
+++ b/l10n/ka_GE/files.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
"MIME-Version: 1.0\n"
@@ -18,20 +18,6 @@ msgstr ""
"Language: ka_GE\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr ""
@@ -67,11 +53,11 @@ msgstr "დრáƒáƒ”ბითი სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე áƒáƒ  áƒáƒ áƒ¡áƒ”
msgid "Failed to write to disk"
msgstr "შეცდáƒáƒ›áƒ დისკზე ჩáƒáƒ¬áƒ”რისáƒáƒ¡"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -79,15 +65,15 @@ msgstr ""
msgid "Files"
msgstr "ფáƒáƒ˜áƒšáƒ”ბი"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "გáƒáƒ–იáƒáƒ áƒ”ბის მáƒáƒ®áƒ¡áƒœáƒ"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "წáƒáƒ¨áƒšáƒ"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "გáƒáƒ“áƒáƒ áƒ¥áƒ›áƒ”ვáƒ"
@@ -111,7 +97,7 @@ msgstr "უáƒáƒ áƒ§áƒáƒ¤áƒ"
msgid "replaced {new_name}"
msgstr "{new_name} შეცვლილიáƒ"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "დáƒáƒ‘რუნებáƒ"
@@ -119,13 +105,9 @@ msgstr "დáƒáƒ‘რუნებáƒ"
msgid "replaced {new_name} with {old_name}"
msgstr "{new_name} შეცვლილირ{old_name}–ით"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "გáƒáƒ–იáƒáƒ áƒ”ბრმáƒáƒ®áƒ¡áƒœáƒ˜áƒšáƒ˜ {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "წáƒáƒ¨áƒšáƒ˜áƒšáƒ˜ {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -149,86 +131,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "თქვენი ფáƒáƒ˜áƒšáƒ˜áƒ¡ áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვრვერ მáƒáƒ®áƒ”რხდáƒ. ის áƒáƒ áƒ˜áƒ¡ სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე დრშეიცáƒáƒ•áƒ¡ 0 ბáƒáƒ˜áƒ¢áƒ¡"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "შეცდáƒáƒ›áƒ áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვისáƒáƒ¡"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "დáƒáƒ®áƒ£áƒ áƒ•áƒ"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "მáƒáƒªáƒ“ის რეჟიმში"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 ფáƒáƒ˜áƒšáƒ˜áƒ¡ áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒ"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} ფáƒáƒ˜áƒšáƒ˜ იტვირთებáƒ"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვრშეჩერებულ იქნáƒ."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "მიმდინáƒáƒ áƒ”áƒáƒ‘ს ფáƒáƒ˜áƒšáƒ˜áƒ¡ áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒ. სხვრგვერდზე გáƒáƒ“áƒáƒ¡áƒ•áƒšáƒ გáƒáƒ›áƒáƒ˜áƒ¬áƒ•áƒ”ვს áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვის შეჩერებáƒáƒ¡"
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} ფáƒáƒ˜áƒšáƒ˜ სკáƒáƒœáƒ˜áƒ áƒ”ბულიáƒ"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "შეცდáƒáƒ›áƒ სკáƒáƒœáƒ˜áƒ áƒ”ბისáƒáƒ¡"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "სáƒáƒ®áƒ”ლი"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "ზáƒáƒ›áƒ"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "შეცვლილიáƒ"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 ფáƒáƒ˜áƒšáƒ˜"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} ფáƒáƒ˜áƒšáƒ˜"
@@ -284,32 +258,40 @@ msgstr "სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე"
msgid "From link"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვის გáƒáƒ£áƒ¥áƒ›áƒ”ბáƒ"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "áƒáƒ¥ áƒáƒ áƒáƒ¤áƒ”რი áƒáƒ  áƒáƒ áƒ˜áƒ¡. áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ე რáƒáƒ›áƒ”!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "ჩáƒáƒ›áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒ"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "áƒáƒ¡áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ი ფáƒáƒ˜áƒšáƒ˜ ძáƒáƒšáƒ˜áƒáƒœ დიდიáƒ"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ ზáƒáƒ›áƒ რáƒáƒ›áƒšáƒ˜áƒ¡ áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒáƒ¡áƒáƒª თქვენ áƒáƒžáƒ˜áƒ áƒ”ბთ, áƒáƒ­áƒáƒ áƒ‘ებს სერვერზე დáƒáƒ¨áƒ•áƒ”ბულ მáƒáƒ¥áƒ¡áƒ˜áƒ›áƒ£áƒ›áƒ¡."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "მიმდინáƒáƒ áƒ”áƒáƒ‘ს ფáƒáƒ˜áƒšáƒ”ბის სკáƒáƒœáƒ˜áƒ áƒ”ბáƒ, გთხáƒáƒ•áƒ— დáƒáƒ”ლáƒáƒ“áƒáƒ—."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "მიმდინáƒáƒ áƒ” სკáƒáƒœáƒ˜áƒ áƒ”ბáƒ"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/ka_GE/files_trashbin.po b/l10n/ka_GE/files_trashbin.po
new file mode 100644
index 00000000000..cab751104bb
--- /dev/null
+++ b/l10n/ka_GE/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ka_GE\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/ka_GE/settings.po b/l10n/ka_GE/settings.po
index 3f35403cfab..e81a43d6548 100644
--- a/l10n/ka_GE/settings.po
+++ b/l10n/ka_GE/settings.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
"MIME-Version: 1.0\n"
@@ -263,6 +263,14 @@ msgstr "ჯგუფის áƒáƒ“მინისტრáƒáƒ¢áƒáƒ áƒ˜"
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/ko/core.po b/l10n/ko/core.po
index 8ba96b125ba..f4e1345570a 100644
--- a/l10n/ko/core.po
+++ b/l10n/ko/core.po
@@ -6,14 +6,15 @@
# <aoiob4305@gmail.com>, 2013.
# 남ìžì‚¬ëžŒ <cessnagi@gmail.com>, 2012.
# <limonade83@gmail.com>, 2012.
+# Park Shinjo <kde@peremen.name>, 2013.
# Shinjo Park <kde@peremen.name>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 08:10+0000\n"
+"Last-Translator: Shinjo Park <kde@peremen.name>\n"
"Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -24,26 +25,26 @@ msgstr ""
#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
-msgstr "User %s ê°€ 당신과 파ì¼ì„ 공유하였습니다."
+msgstr "%s ë‹˜ì´ íŒŒì¼ì„ 공유하였습니다"
#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
-msgstr "User %s ê°€ 당신과 í´ë”를 공유하였습니다."
+msgstr "%s ë‹˜ì´ í´ë”를 공유하였습니다"
#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
-msgstr "User %s ê°€ íŒŒì¼ \"%s\"를 당신과 공유하였습니다. 다운로드는 여기서 %s í•  수 있습니다."
+msgstr "%s ë‹˜ì´ íŒŒì¼ \"%s\"ì„(를) 공유하였습니다. 여기ì—ì„œ 다운로드할 수 있습니다: %s"
#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
"here: %s"
-msgstr "User %s ê°€ í´ë” \"%s\"를 당신과 공유하였습니다. 다운로드는 여기서 %s í•  수 있습니다."
+msgstr "%s ë‹˜ì´ í´ë” \"%s\"ì„(를) 공유하였습니다. 여기ì—ì„œ 다운로드할 수 있습니다: %s"
#: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25
msgid "Category type not provided."
@@ -256,11 +257,11 @@ msgstr "필요한 íŒŒì¼ {file}ì´(ê°€) 설치ë˜ì§€ 않았습니다!"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "공유"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
-msgstr ""
+msgstr "공유ë¨"
#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
@@ -383,11 +384,11 @@ msgid ""
"The update was unsuccessful. Please report this issue to the <a "
"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
"community</a>."
-msgstr ""
+msgstr "ì—…ë°ì´íŠ¸ê°€ 실패하였습니다. ì´ ë¬¸ì œë¥¼ <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud 커뮤니티</a>ì— ë³´ê³ í•´ 주십시오."
#: js/update.js:18
msgid "The update was successful. Redirecting you to ownCloud now."
-msgstr ""
+msgstr "ì—…ë°ì´íŠ¸ê°€ 성공하였습니다. ownCloudë¡œ ëŒì•„갑니다."
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
@@ -585,4 +586,4 @@ msgstr "다ìŒ"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr "ownCloud 를 버젼 %së¡œ ì—…ë°ì´íŠ¸ 하는 중, ì‹œê°„ì´ ì†Œìš”ë©ë‹ˆë‹¤."
+msgstr "ownCloud를 버전 %s(으)ë¡œ ì—…ë°ì´íŠ¸í•©ë‹ˆë‹¤. ìž ì‹œ 기다려 주십시오."
diff --git a/l10n/ko/files.po b/l10n/ko/files.po
index 86f4240c0a1..cc5153e34c8 100644
--- a/l10n/ko/files.po
+++ b/l10n/ko/files.po
@@ -7,13 +7,14 @@
# 남ìžì‚¬ëžŒ <cessnagi@gmail.com>, 2012.
# Harim Park <fofwisdom@gmail.com>, 2013.
# <limonade83@gmail.com>, 2012.
+# Park Shinjo <kde@peremen.name>, 2013.
# Shinjo Park <kde@peremen.name>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
"MIME-Version: 1.0\n"
@@ -22,20 +23,6 @@ msgstr ""
"Language: ko\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "%s í•­ëª©ì„ ì´ë™ì‹œí‚¤ì§€ ëª»í•˜ì˜€ìŒ - íŒŒì¼ ì´ë¦„ì´ ì´ë¯¸ 존재함"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "%s í•­ëª©ì„ ì´ë”©ì‹œí‚¤ì§€ 못하였ìŒ"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "íŒŒì¼ ì´ë¦„바꾸기 í•  수 ì—†ìŒ"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "파ì¼ì´ 업로드ë˜ì§€ 않았습니다. ì•Œ 수 없는 오류입니다"
@@ -71,27 +58,27 @@ msgstr "ìž„ì‹œ í´ë”ê°€ 사ë¼ì§"
msgid "Failed to write to disk"
msgstr "디스í¬ì— 쓰지 못했습니다"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr ""
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "여유 ê³µê°„ì´ ë¶€ì¡±í•©ë‹ˆë‹¤"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
-msgstr "올바르지 ì•Šì€ ë””ë ‰í† ë¦¬ìž…ë‹ˆë‹¤."
+msgstr "올바르지 ì•Šì€ ë””ë ‰í„°ë¦¬ìž…ë‹ˆë‹¤."
#: appinfo/app.php:10
msgid "Files"
msgstr "파ì¼"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "공유 해제"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "삭제"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "ì´ë¦„ 바꾸기"
@@ -115,7 +102,7 @@ msgstr "취소"
msgid "replaced {new_name}"
msgstr "{new_name}ì„(를) 대체함"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "실행 취소"
@@ -123,13 +110,9 @@ msgstr "실행 취소"
msgid "replaced {new_name} with {old_name}"
msgstr "{old_name}ì´(ê°€) {new_name}(으)ë¡œ 대체ë¨"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "{files} 공유 í•´ì œë¨"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "{files} ì‚­ì œë¨"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -137,7 +120,7 @@ msgstr "'.' 는 올바르지 ì•Šì€ íŒŒì¼ ì´ë¦„ 입니다."
#: js/files.js:56
msgid "File name cannot be empty."
-msgstr "파ì¼ì´ë¦„ì€ ê³µëž€ì´ ë  ìˆ˜ 없습니다."
+msgstr "íŒŒì¼ ì´ë¦„ì´ ë¹„ì–´ ìžˆì„ ìˆ˜ 없습니다."
#: js/files.js:64
msgid ""
@@ -147,92 +130,84 @@ msgstr "í´ë” ì´ë¦„ì´ ì˜¬ë°”ë¥´ì§€ 않습니다. ì´ë¦„ì— ë¬¸ìž '\\', '/',
#: js/files.js:78
msgid "Your storage is full, files can not be updated or synced anymore!"
-msgstr ""
+msgstr "저장 ê³µê°„ì´ ê°€ë“ ì°¼ìŠµë‹ˆë‹¤. 파ì¼ì„ ì—…ë°ì´íŠ¸í•˜ê±°ë‚˜ ë™ê¸°í™”í•  수 없습니다!"
#: js/files.js:82
msgid "Your storage is almost full ({usedSpacePercent}%)"
-msgstr ""
+msgstr "저장 ê³µê°„ì´ ê±°ì˜ ê°€ë“ ì°¼ìŠµë‹ˆë‹¤ ({usedSpacePercent}%)"
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
-msgstr ""
+msgstr "다운로드가 준비 중입니다. íŒŒì¼ í¬ê¸°ê°€ í¬ë‹¤ë©´ ì‹œê°„ì´ ì˜¤ëž˜ 걸릴 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤."
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "ì´ íŒŒì¼ì€ 디렉터리ì´ê±°ë‚˜ 비어 있기 ë•Œë¬¸ì— ì—…ë¡œë“œí•  수 없습니다"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "업로드 오류"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "닫기"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "보류 중"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "íŒŒì¼ 1ê°œ 업로드 중"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "íŒŒì¼ {count}ê°œ 업로드 중"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "업로드가 취소ë˜ì—ˆìŠµë‹ˆë‹¤."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "íŒŒì¼ ì—…ë¡œë“œê°€ 진행 중입니다. ì´ íŽ˜ì´ì§€ë¥¼ 벗어나면 업로드가 취소ë©ë‹ˆë‹¤."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URLì„ ìž…ë ¥í•´ì•¼ 합니다."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "í´ë” ì´ë¦„ì´ ìœ íš¨í•˜ì§€ 않습니다. "
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "íŒŒì¼ {count}ê°œ 검색ë¨"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "검색 중 오류 ë°œìƒ"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "ì´ë¦„"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "í¬ê¸°"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "수정ë¨"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "í´ë” 1ê°œ"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "í´ë” {count}ê°œ"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "íŒŒì¼ 1ê°œ"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "íŒŒì¼ {count}ê°œ"
@@ -288,32 +263,40 @@ msgstr "í´ë”"
msgid "From link"
msgstr "ë§í¬ì—ì„œ"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "업로드 취소"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "ë‚´ìš©ì´ ì—†ìŠµë‹ˆë‹¤. 업로드할 수 있습니다!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "다운로드"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "업로드 용량 초과"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "ì´ íŒŒì¼ì´ 서버ì—ì„œ 허용하는 최대 업로드 가능 용량보다 í½ë‹ˆë‹¤."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "파ì¼ì„ 검색하고 있습니다. 기다려 주십시오."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "현재 검색"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "íŒŒì¼ ì‹œìŠ¤í…œ ìºì‹œ 업그레ì´ë“œ 중..."
diff --git a/l10n/ko/files_encryption.po b/l10n/ko/files_encryption.po
index 441ba8cec4b..2988d1f0cf5 100644
--- a/l10n/ko/files_encryption.po
+++ b/l10n/ko/files_encryption.po
@@ -4,14 +4,14 @@
#
# Translators:
# 남ìžì‚¬ëžŒ <cessnagi@gmail.com>, 2012.
-# Shinjo Park <kde@peremen.name>, 2012.
+# Shinjo Park <kde@peremen.name>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-23 00:05+0100\n"
-"PO-Revision-Date: 2013-01-22 23:05+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 08:20+0000\n"
+"Last-Translator: Shinjo Park <kde@peremen.name>\n"
"Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -23,53 +23,53 @@ msgstr ""
msgid ""
"Please switch to your ownCloud client and change your encryption password to"
" complete the conversion."
-msgstr ""
+msgstr "ownCloudë¡œ 전환한 ë‹¤ìŒ ì•”í˜¸í™”ì— ì‚¬ìš©í•  암호를 변경하면 ë³€í™˜ì´ ì™„ë£Œë©ë‹ˆë‹¤."
#: js/settings-personal.js:17
msgid "switched to client side encryption"
-msgstr ""
+msgstr "í´ë¼ì´ì–¸íŠ¸ 암호화로 변경ë¨"
#: js/settings-personal.js:21
msgid "Change encryption password to login password"
-msgstr ""
+msgstr "암호화 암호를 ë¡œê·¸ì¸ ì•”í˜¸ë¡œ 변경"
#: js/settings-personal.js:25
msgid "Please check your passwords and try again."
-msgstr ""
+msgstr "암호를 확ì¸í•œ ë‹¤ìŒ ë‹¤ì‹œ ì‹œë„하십시오."
#: js/settings-personal.js:25
msgid "Could not change your file encryption password to your login password"
-msgstr ""
+msgstr "암호화 암호를 ë¡œê·¸ì¸ ì•”í˜¸ë¡œ 변경할 수 없습니다"
#: templates/settings-personal.php:3 templates/settings.php:5
msgid "Choose encryption mode:"
-msgstr ""
+msgstr "암호화 모드 ì„ íƒ:"
#: templates/settings-personal.php:20 templates/settings.php:24
msgid ""
"Client side encryption (most secure but makes it impossible to access your "
"data from the web interface)"
-msgstr ""
+msgstr "í´ë¼ì´ì–¸íŠ¸ 암호화 (안전하지만 웹ì—ì„œ ë°ì´í„°ì— 접근할 수 ì—†ìŒ)"
#: templates/settings-personal.php:30 templates/settings.php:36
msgid ""
"Server side encryption (allows you to access your files from the web "
"interface and the desktop client)"
-msgstr ""
+msgstr "서버 암호화 (웹 ë° ë°ìŠ¤í¬í†± í´ë¼ì´ì–¸íŠ¸ì—ì„œ ë°ì´í„°ì— 접근할 수 있ìŒ)"
#: templates/settings-personal.php:41 templates/settings.php:60
msgid "None (no encryption at all)"
-msgstr ""
+msgstr "ì—†ìŒ (암호화하지 ì•ŠìŒ)"
#: templates/settings.php:10
msgid ""
"Important: Once you selected an encryption mode there is no way to change it"
" back"
-msgstr ""
+msgstr "알림: 암호화 모드를 ì„ íƒí•˜ë©´ 다른 것으로 변경할 수 없습니다"
#: templates/settings.php:48
msgid "User specific (let the user decide)"
-msgstr ""
+msgstr "ì‚¬ìš©ìž ì§€ì • (사용ìžë³„ 설정)"
#: templates/settings.php:65
msgid "Encryption"
diff --git a/l10n/ko/files_external.po b/l10n/ko/files_external.po
index f43b8963773..0c7bf2da326 100644
--- a/l10n/ko/files_external.po
+++ b/l10n/ko/files_external.po
@@ -5,14 +5,15 @@
# Translators:
# <aoiob4305@gmail.com>, 2013.
# 남ìžì‚¬ëžŒ <cessnagi@gmail.com>, 2012.
+# Park Shinjo <peremen@gmail.com>, 2013.
# Shinjo Park <kde@peremen.name>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-08 00:30+0100\n"
-"PO-Revision-Date: 2013-01-07 10:07+0000\n"
-"Last-Translator: aoiob4305 <aoiob4305@gmail.com>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 08:10+0000\n"
+"Last-Translator: Shinjo Park <kde@peremen.name>\n"
"Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -28,11 +29,11 @@ msgstr "ì ‘ê·¼ 허가ë¨"
msgid "Error configuring Dropbox storage"
msgstr "Dropbox 저장소 설정 오류"
-#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40
+#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:41
msgid "Grant access"
msgstr "접근 권한 부여"
-#: js/dropbox.js:73 js/google.js:72
+#: js/dropbox.js:73 js/google.js:73
msgid "Fill out all required fields"
msgstr "모든 필수 í•­ëª©ì„ ìž…ë ¥í•˜ì‹­ì‹œì˜¤"
@@ -40,22 +41,22 @@ msgstr "모든 필수 í•­ëª©ì„ ìž…ë ¥í•˜ì‹­ì‹œì˜¤"
msgid "Please provide a valid Dropbox app key and secret."
msgstr "올바른 Dropbox 앱 키와 암호를 입력하십시오."
-#: js/google.js:26 js/google.js:73 js/google.js:78
+#: js/google.js:26 js/google.js:74 js/google.js:79
msgid "Error configuring Google Drive storage"
msgstr "Google ë“œë¼ì´ë¸Œ 저장소 설정 오류"
-#: lib/config.php:434
+#: lib/config.php:405
msgid ""
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
"is not possible. Please ask your system administrator to install it."
-msgstr "<b>경고</b>\"smbclient\"ê°€ 설치ë˜ì§€ 않았습니다. CIFS/SMB 공유애 ì—°ê²°ì´ ë¶ˆê°€ëŠ¥ 합니다.. 시스템 관리ìžì—게 요청하여 설치하시기 ë°”ëžë‹ˆë‹¤."
+msgstr "<b>경고:</b> \"smbclient\"ê°€ 설치ë˜ì§€ 않았습니다. CIFS/SMB 공유 ìžì›ì— ì—°ê²°í•  수 없습니다. 시스템 관리ìžì—게 설치를 요청하십시오."
-#: lib/config.php:435
+#: lib/config.php:406
msgid ""
"<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."
-msgstr "<b>경고</b>PHPìš© FTP 지ì›ì´ 사용 불가능 하거나 설치ë˜ì§€ 않았습니다. FTP ê³µìœ ì— ì—°ê²°ì´ ë¶ˆê°€ëŠ¥ 합니다. 시스템 관리ìžì—게 요청하여 설치하시기 ë°”ëžë‹ˆë‹¤. "
+msgstr "<b>경고:</b> PHP FTP 지ì›ì´ 비활성화ë˜ì–´ 있거나 설치ë˜ì§€ 않았습니다. FTP 공유를 마운트할 수 없습니다. 시스템 관리ìžì—게 설치를 요청하십시오."
#: templates/settings.php:3
msgid "External Storage"
diff --git a/l10n/ko/files_trashbin.po b/l10n/ko/files_trashbin.po
new file mode 100644
index 00000000000..db8be55cbb1
--- /dev/null
+++ b/l10n/ko/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ko\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/ko/lib.po b/l10n/ko/lib.po
index c759d43ece3..ffbaa11a4ec 100644
--- a/l10n/ko/lib.po
+++ b/l10n/ko/lib.po
@@ -4,14 +4,15 @@
#
# Translators:
# 남ìžì‚¬ëžŒ <cessnagi@gmail.com>, 2012.
+# Park Shinjo <kde@peremen.name>, 2013.
# Shinjo Park <kde@peremen.name>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 08:10+0000\n"
+"Last-Translator: Shinjo Park <kde@peremen.name>\n"
"Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -43,25 +44,25 @@ msgstr "앱"
msgid "Admin"
msgstr "관리ìž"
-#: files.php:365
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "ZIP 다운로드가 비활성화ë˜ì—ˆìŠµë‹ˆë‹¤."
-#: files.php:366
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "파ì¼ì„ 개별ì ìœ¼ë¡œ 다운로드해야 합니다."
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "파ì¼ë¡œ ëŒì•„가기"
-#: files.php:390
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "ì„ íƒí•œ 파ì¼ë“¤ì€ ZIP 파ì¼ì„ ìƒì„±í•˜ê¸°ì— 너무 í½ë‹ˆë‹¤."
-#: helper.php:228
+#: helper.php:226
msgid "couldn't be determined"
-msgstr ""
+msgstr "ê²°ì •í•  수 ì—†ìŒ"
#: json.php:28
msgid "Application is not enabled"
diff --git a/l10n/ko/settings.po b/l10n/ko/settings.po
index 2236af6d9cd..3ae712d4835 100644
--- a/l10n/ko/settings.po
+++ b/l10n/ko/settings.po
@@ -7,14 +7,14 @@
# 남ìžì‚¬ëžŒ <cessnagi@gmail.com>, 2012.
# Harim Park <fofwisdom@gmail.com>, 2013.
# <limonade83@gmail.com>, 2012.
-# Shinjo Park <kde@peremen.name>, 2012.
+# Shinjo Park <kde@peremen.name>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 08:10+0000\n"
+"Last-Translator: Shinjo Park <kde@peremen.name>\n"
"Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -114,11 +114,11 @@ msgstr "apps.owncloud.comì— ìžˆëŠ” 앱 페ì´ì§€ë¥¼ 참고하십시오"
#: templates/apps.php:29
msgid "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
-msgstr "<span class=\"licence\"></span>-ë¼ì´ì„ ìŠ¤ ë³´ìœ ìž <span class=\"author\"></span>"
+msgstr "<span class=\"licence\"></span>-ë¼ì´ì„ ìŠ¤ë¨: <span class=\"author\"></span>"
#: templates/help.php:3
msgid "User Documentation"
-msgstr "유저 문서"
+msgstr "ì‚¬ìš©ìž ë¬¸ì„œ"
#: templates/help.php:4
msgid "Administrator Documentation"
@@ -134,7 +134,7 @@ msgstr "í¬ëŸ¼"
#: templates/help.php:9
msgid "Bugtracker"
-msgstr "버그트래커"
+msgstr "버그 트래커"
#: templates/help.php:11
msgid "Commercial Support"
@@ -147,11 +147,11 @@ msgstr "현재 공간 <strong>%s</strong>/<strong>%s</strong>ì„(를) 사용 중
#: templates/personal.php:12
msgid "Clients"
-msgstr "ê³ ê°"
+msgstr "í´ë¼ì´ì–¸íŠ¸"
#: templates/personal.php:13
msgid "Download Desktop Clients"
-msgstr "ë°ìŠ¤í¬íƒ‘ í´ë¼ì´ì–¸íŠ¸ 다운로드"
+msgstr "ë°ìŠ¤í¬í†± í´ë¼ì´ì–¸íŠ¸ 다운로드"
#: templates/personal.php:14
msgid "Download Android Client"
@@ -215,11 +215,11 @@ msgstr "WebDAV"
#: templates/personal.php:54
msgid "Use this address to connect to your ownCloud in your file manager"
-msgstr "íŒŒì¼ ë§¤ë‹ˆì €ì—ì„œ 사용ìžì˜ ownCloudì— ì ‘ì†í•˜ê¸° 위해 ì´ ì£¼ì†Œë¥¼ 사용하십시요."
+msgstr "íŒŒì¼ ê´€ë¦¬ìžì—ì„œ ownCloudì— ì ‘ì†í•˜ë ¤ë©´ ì´ ì£¼ì†Œë¥¼ 사용하십시오."
#: templates/personal.php:63
msgid "Version"
-msgstr "버젼"
+msgstr "버전"
#: templates/personal.php:65
msgid ""
@@ -233,7 +233,7 @@ msgstr "<a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud 커ë®
#: templates/users.php:21 templates/users.php:79
msgid "Login Name"
-msgstr ""
+msgstr "ë¡œê·¸ì¸ ì´ë¦„"
#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
@@ -257,7 +257,7 @@ msgstr "기타"
#: templates/users.php:80
msgid "Display Name"
-msgstr ""
+msgstr "표시 ì´ë¦„"
#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
@@ -267,6 +267,14 @@ msgstr "그룹 관리ìž"
msgid "Storage"
msgstr "저장소"
+#: templates/users.php:97
+msgid "change display name"
+msgstr "표시 ì´ë¦„ 변경"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "새 암호 설정"
+
#: templates/users.php:137
msgid "Default"
msgstr "기본값"
diff --git a/l10n/ko/user_ldap.po b/l10n/ko/user_ldap.po
index 53b9f3b081f..4afced481ee 100644
--- a/l10n/ko/user_ldap.po
+++ b/l10n/ko/user_ldap.po
@@ -5,14 +5,14 @@
# Translators:
# <aoiob4305@gmail.com>, 2013.
# 남ìžì‚¬ëžŒ <cessnagi@gmail.com>, 2012.
-# Shinjo Park <kde@peremen.name>, 2012.
+# Shinjo Park <kde@peremen.name>, 2012-2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-16 00:19+0100\n"
-"PO-Revision-Date: 2013-01-15 23:20+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 08:10+0000\n"
+"Last-Translator: Shinjo Park <kde@peremen.name>\n"
"Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,13 +25,13 @@ msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
" experience unexpected behaviour. Please ask your system administrator to "
"disable one of them."
-msgstr "<b>경고</b>user_ldap 앱과 user_webdavauth ì•±ì€ í˜¸í™˜ë˜ì§€ 않습니다. 오ë™ìž‘ì„ ì¼ìœ¼í‚¬ 수 있으므로, 시스템 관리ìžì—게 요청하여, 둘 중 하나를 비활성화 하시기 ë°”ëžë‹ˆë‹¤."
+msgstr "<b>경고:</b> user_ldap 앱과 user_webdavauth ì•±ì€ í˜¸í™˜ë˜ì§€ 않습니다. 오ë™ìž‘ì„ ì¼ìœ¼í‚¬ 수 있으므로, 시스템 관리ìžì—게 요청하여 둘 중 하나만 사용하ë„ë¡ í•˜ì‹­ì‹œì˜¤."
#: templates/settings.php:11
msgid ""
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
"work. Please ask your system administrator to install it."
-msgstr ""
+msgstr "<b>경고:</b> PHP LDAP ëª¨ë“ˆì´ ë¹„í™œì„±í™”ë˜ì–´ 있거나 설치ë˜ì–´ 있지 않습니다. 백엔드를 사용할 수 없습니다. 시스템 관리ìžì—게 설치를 요청하십시오."
#: templates/settings.php:15
msgid "Host"
@@ -48,7 +48,7 @@ msgstr "기본 DN"
#: templates/settings.php:16
msgid "One Base DN per line"
-msgstr ""
+msgstr "기본 DNì„ í•œ ì¤„ì— í•˜ë‚˜ì”© 입력하십시오"
#: templates/settings.php:16
msgid "You can specify Base DN for users and groups in the Advanced tab"
@@ -123,7 +123,7 @@ msgstr "기본 ì‚¬ìš©ìž íŠ¸ë¦¬"
#: templates/settings.php:25
msgid "One User Base DN per line"
-msgstr ""
+msgstr "ì‚¬ìš©ìž DNì„ í•œ ì¤„ì— í•˜ë‚˜ì”© 입력하십시오"
#: templates/settings.php:26
msgid "Base Group Tree"
@@ -131,7 +131,7 @@ msgstr "기본 그룹 트리"
#: templates/settings.php:26
msgid "One Group Base DN per line"
-msgstr ""
+msgstr "그룹 기본 DNì„ í•œ ì¤„ì— í•˜ë‚˜ì”© 입력하십시오"
#: templates/settings.php:27
msgid "Group-Member association"
diff --git a/l10n/ko/user_webdavauth.po b/l10n/ko/user_webdavauth.po
index bd135598c7f..f10bd76454e 100644
--- a/l10n/ko/user_webdavauth.po
+++ b/l10n/ko/user_webdavauth.po
@@ -5,13 +5,14 @@
# Translators:
# <aoiob4305@gmail.com>, 2013.
# 남ìžì‚¬ëžŒ <cessnagi@gmail.com>, 2012.
+# Park Shinjo <kde@peremen.name>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-15 00:03+0100\n"
-"PO-Revision-Date: 2013-01-14 23:04+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 08:10+0000\n"
+"Last-Translator: Shinjo Park <kde@peremen.name>\n"
"Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,7 +22,7 @@ msgstr ""
#: templates/settings.php:3
msgid "WebDAV Authentication"
-msgstr ""
+msgstr "WebDAV ì¸ì¦"
#: templates/settings.php:4
msgid "URL: http://"
@@ -32,4 +33,4 @@ msgid ""
"ownCloud will send the user credentials to this URL. This plugin checks the "
"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
"credentials, and all other responses as valid credentials."
-msgstr ""
+msgstr "ownCloudì—ì„œ ì´ URLë¡œ ì‚¬ìš©ìž ì¸ì¦ 정보를 보냅니다. ì´ í”ŒëŸ¬ê·¸ì¸ì€ ì‘ë‹µì„ í™•ì¸í•˜ì—¬ HTTP ìƒíƒœ 코드 401ì´ë‚˜ 403ì´ ëŒì•„온 ê²½ìš°ì— ìž˜ëª»ëœ ì¸ì¦ ì •ë³´ë¡œ 간주합니다. 다른 모든 ìƒíƒœ 코드는 올바른 ì¸ì¦ ì •ë³´ë¡œ 간주합니다."
diff --git a/l10n/ku_IQ/files.po b/l10n/ku_IQ/files.po
index b3b16e0bc71..6827e786ca6 100644
--- a/l10n/ku_IQ/files.po
+++ b/l10n/ku_IQ/files.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n"
"MIME-Version: 1.0\n"
@@ -17,20 +17,6 @@ msgstr ""
"Language: ku_IQ\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr ""
@@ -66,11 +52,11 @@ msgstr ""
msgid "Failed to write to disk"
msgstr ""
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -78,15 +64,15 @@ msgstr ""
msgid "Files"
msgstr ""
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr ""
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr ""
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr ""
@@ -110,7 +96,7 @@ msgstr ""
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr ""
@@ -118,12 +104,8 @@ msgstr ""
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:288
-msgid "deleted {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
msgstr ""
#: js/files.js:52
@@ -148,86 +130,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr ""
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "داخستن"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr ""
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr ""
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "ناونیشانی به‌سته‌ر نابێت به‌تاڵ بێت."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "ناو"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr ""
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr ""
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr ""
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr ""
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr ""
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr ""
@@ -283,32 +257,40 @@ msgstr "بوخچه"
msgid "From link"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr ""
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr ""
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "داگرتن"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr ""
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr ""
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/ku_IQ/files_trashbin.po b/l10n/ku_IQ/files_trashbin.po
new file mode 100644
index 00000000000..9d51dca2cd6
--- /dev/null
+++ b/l10n/ku_IQ/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ku_IQ\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/ku_IQ/settings.po b/l10n/ku_IQ/settings.po
index db582696a95..45bfc958c4c 100644
--- a/l10n/ku_IQ/settings.po
+++ b/l10n/ku_IQ/settings.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n"
"MIME-Version: 1.0\n"
@@ -262,6 +262,14 @@ msgstr ""
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/lb/core.po b/l10n/lb/core.po
index cf61dda08ca..18bf6381db1 100644
--- a/l10n/lb/core.po
+++ b/l10n/lb/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
"MIME-Version: 1.0\n"
@@ -254,7 +254,7 @@ msgstr ""
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Deelen"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/lb/files.po b/l10n/lb/files.po
index 89400d84768..6c93eac950d 100644
--- a/l10n/lb/files.po
+++ b/l10n/lb/files.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
"MIME-Version: 1.0\n"
@@ -18,20 +18,6 @@ msgstr ""
"Language: lb\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr ""
@@ -67,11 +53,11 @@ msgstr "Et feelt en temporären Dossier"
msgid "Failed to write to disk"
msgstr "Konnt net op den Disk schreiwen"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -79,15 +65,15 @@ msgstr ""
msgid "Files"
msgstr "Dateien"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Net méi deelen"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Läschen"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr ""
@@ -111,7 +97,7 @@ msgstr "ofbriechen"
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "réckgängeg man"
@@ -119,12 +105,8 @@ msgstr "réckgängeg man"
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:288
-msgid "deleted {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
msgstr ""
#: js/files.js:52
@@ -149,86 +131,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Kann deng Datei net eroplueden well et en Dossier ass oder 0 byte grouss ass."
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Fehler beim eroplueden"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Zoumaachen"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr ""
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr ""
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Upload ofgebrach."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "File Upload am gaang. Wann's de des Säit verléiss gëtt den Upload ofgebrach."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Numm"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Gréisst"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Geännert"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr ""
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr ""
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr ""
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr ""
@@ -284,32 +258,40 @@ msgstr "Dossier"
msgid "From link"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Upload ofbriechen"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Hei ass näischt. Lued eppes rop!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Eroflueden"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Upload ze grouss"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "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."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Fichieren gi gescannt, war weg."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Momentane Scan"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/lb/files_trashbin.po b/l10n/lb/files_trashbin.po
new file mode 100644
index 00000000000..b3405a18ed4
--- /dev/null
+++ b/l10n/lb/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lb\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/lb/settings.po b/l10n/lb/settings.po
index ffe1d795a65..0dbc3f3e7fe 100644
--- a/l10n/lb/settings.po
+++ b/l10n/lb/settings.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
"MIME-Version: 1.0\n"
@@ -263,6 +263,14 @@ msgstr "Gruppen Admin"
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/lt_LT/core.po b/l10n/lt_LT/core.po
index a6aff9a772f..8b6ad9ccc69 100644
--- a/l10n/lt_LT/core.po
+++ b/l10n/lt_LT/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
"MIME-Version: 1.0\n"
@@ -254,7 +254,7 @@ msgstr ""
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Dalintis"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/lt_LT/files.po b/l10n/lt_LT/files.po
index ade78b17896..973ce845150 100644
--- a/l10n/lt_LT/files.po
+++ b/l10n/lt_LT/files.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
"MIME-Version: 1.0\n"
@@ -20,20 +20,6 @@ msgstr ""
"Language: lt_LT\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr ""
@@ -69,11 +55,11 @@ msgstr "NÄ—ra laikinojo katalogo"
msgid "Failed to write to disk"
msgstr "Nepavyko įrašyti į diską"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -81,15 +67,15 @@ msgstr ""
msgid "Files"
msgstr "Failai"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Nebesidalinti"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "IÅ¡trinti"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Pervadinti"
@@ -113,7 +99,7 @@ msgstr "atšaukti"
msgid "replaced {new_name}"
msgstr "pakeiskite {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "anuliuoti"
@@ -121,13 +107,9 @@ msgstr "anuliuoti"
msgid "replaced {new_name} with {old_name}"
msgstr "pakeiskite {new_name} į {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "nebesidalinti {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "ištrinti {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -151,86 +133,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Neįmanoma įkelti failo - jo dydis gali būti 0 bitų arba tai katalogas"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Įkėlimo klaida"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Užverti"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Laukiantis"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "įkeliamas 1 failas"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} įkeliami failai"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Įkėlimas atšauktas."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Failo įkėlimas pradėtas. Jei paliksite šį puslapį, įkėlimas nutrūks."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} praskanuoti failai"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "klaida skanuojant"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Pavadinimas"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Dydis"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Pakeista"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 aplankalas"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} aplankalai"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 failas"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} failai"
@@ -286,32 +260,40 @@ msgstr "Katalogas"
msgid "From link"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Atšaukti siuntimą"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "ÄŒia tuÅ¡Äia. Ä®kelkite kÄ… nors!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Atsisiųsti"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Įkėlimui failas per didelis"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Bandomų įkelti failų dydis viršija maksimalų leidžiamą šiame serveryje"
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Skenuojami failai, prašome palaukti."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Å iuo metu skenuojama"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/lt_LT/files_trashbin.po b/l10n/lt_LT/files_trashbin.po
new file mode 100644
index 00000000000..8f201877c0f
--- /dev/null
+++ b/l10n/lt_LT/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lt_LT\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/lt_LT/settings.po b/l10n/lt_LT/settings.po
index 4c4d82e432c..23fe35cf9a1 100644
--- a/l10n/lt_LT/settings.po
+++ b/l10n/lt_LT/settings.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
"MIME-Version: 1.0\n"
@@ -264,6 +264,14 @@ msgstr ""
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/lv/core.po b/l10n/lv/core.po
index 723dfe3b854..33e4a0ab1a0 100644
--- a/l10n/lv/core.po
+++ b/l10n/lv/core.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
"MIME-Version: 1.0\n"
@@ -253,7 +253,7 @@ msgstr ""
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Līdzdalīt"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/lv/files.po b/l10n/lv/files.po
index f5fb737c584..e1a30aaf300 100644
--- a/l10n/lv/files.po
+++ b/l10n/lv/files.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
"MIME-Version: 1.0\n"
@@ -19,20 +19,6 @@ msgstr ""
"Language: lv\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr ""
@@ -68,11 +54,11 @@ msgstr "Trūkst pagaidu mapes"
msgid "Failed to write to disk"
msgstr "Nav iespÄ“jams saglabÄt"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -80,15 +66,15 @@ msgstr ""
msgid "Files"
msgstr "Faili"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "PÄrtraukt lÄ«dzdalÄ«Å¡anu"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Izdzēst"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "PÄrdÄ“vÄ“t"
@@ -112,7 +98,7 @@ msgstr "atcelt"
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "vienu soli atpakaļ"
@@ -120,12 +106,8 @@ msgstr "vienu soli atpakaļ"
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:288
-msgid "deleted {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
msgstr ""
#: js/files.js:52
@@ -150,86 +132,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Nav iespÄ“jams augÅ¡uplÄdÄ“t jÅ«su failu, jo tÄds jau eksistÄ“ vai arÄ« failam nav izmÄ“ra (0 baiti)"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "AugÅ¡uplÄdÄ“Å¡anas laikÄ radÄs kļūda"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr ""
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Gaida savu kÄrtu"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr ""
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "AugÅ¡uplÄde ir atcelta"
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Notiek augÅ¡upielÄde. Pametot lapu tagad, tiks atcelta augÅ¡upielÄde."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Nosaukums"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Izmērs"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Izmainīts"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr ""
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr ""
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr ""
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr ""
@@ -285,32 +259,40 @@ msgstr "Mape"
msgid "From link"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Atcelt augÅ¡uplÄdi"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Te vÄ“l nekas nav. RÄ«kojies, sÄc augÅ¡uplÄdÄ“t"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "LejuplÄdÄ“t"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Fails ir par lielu lai to augÅ¡uplÄdetu"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "JÅ«su augÅ¡uplÄdÄ“jamie faili pÄrsniedz servera pieļaujamo failu augÅ¡upielÄdes apjomu"
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Faili Å¡obrÄ«d tiek caurskatÄ«ti, nedaudz jÄpagaida."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Å obrÄ«d tiek pÄrbaudÄ«ti"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/lv/files_trashbin.po b/l10n/lv/files_trashbin.po
new file mode 100644
index 00000000000..eaa941cf0f7
--- /dev/null
+++ b/l10n/lv/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lv\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/lv/settings.po b/l10n/lv/settings.po
index afc2514715e..addf7402061 100644
--- a/l10n/lv/settings.po
+++ b/l10n/lv/settings.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
"MIME-Version: 1.0\n"
@@ -264,6 +264,14 @@ msgstr "Grupas administrators"
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/mk/core.po b/l10n/mk/core.po
index a6cc634a953..99fa224afd7 100644
--- a/l10n/mk/core.po
+++ b/l10n/mk/core.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
"MIME-Version: 1.0\n"
@@ -255,7 +255,7 @@ msgstr "Задолжителната датотека {file} не е инÑтаÐ
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Сподели"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/mk/files.po b/l10n/mk/files.po
index 875893ff2ab..ff1175a9902 100644
--- a/l10n/mk/files.po
+++ b/l10n/mk/files.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
"MIME-Version: 1.0\n"
@@ -20,20 +20,6 @@ msgstr ""
"Language: mk\n"
"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Ðиту еден фајл не Ñе вчита. Ðепозната грешка"
@@ -69,11 +55,11 @@ msgstr "Ðе поÑтои привремена папка"
msgid "Failed to write to disk"
msgstr "ÐеуÑпеав да запишам на диÑк"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -81,15 +67,15 @@ msgstr ""
msgid "Files"
msgstr "Датотеки"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Ðе Ñподелувај"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Избриши"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Преименувај"
@@ -113,7 +99,7 @@ msgstr "откажи"
msgid "replaced {new_name}"
msgstr "земенета {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "врати"
@@ -121,13 +107,9 @@ msgstr "врати"
msgid "replaced {new_name} with {old_name}"
msgstr "заменета {new_name} Ñо {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "без Ñподелување {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "избришани {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -151,86 +133,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Ðе може да Ñе преземе вашата датотека бидејќи фолдерот во кој Ñе наоѓа фајлот има големина од 0 бајти"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Грешка при преземање"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Затвои"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Чека"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 датотека Ñе подига"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} датотеки Ñе подигаат"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Преземањето е прекинато."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Подигање на датотека е во тек. Ðапуштење на Ñтраницата ќе го прекине."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "ÐдреÑата неможе да биде празна."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} датотеки Ñкенирани"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "грешка при Ñкенирање"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Име"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Големина"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Променето"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 папка"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} папки"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 датотека"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} датотеки"
@@ -286,32 +260,40 @@ msgstr "Папка"
msgid "From link"
msgstr "Од врÑка"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Откажи прикачување"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Тука нема ништо. Снимете нешто!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Преземи"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Датотеката е премногу голема"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Датотеките кои Ñе обидувате да ги подигнете ја надминуваат макÑималната големина за подигнување датотеки на овој Ñервер."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Се Ñкенираат датотеки, ве молам почекајте."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Моментално Ñкенирам"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/mk/files_trashbin.po b/l10n/mk/files_trashbin.po
new file mode 100644
index 00000000000..e171b9df53d
--- /dev/null
+++ b/l10n/mk/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: mk\n"
+"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/mk/settings.po b/l10n/mk/settings.po
index 8468db8e1a8..72c82ec24c9 100644
--- a/l10n/mk/settings.po
+++ b/l10n/mk/settings.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
"MIME-Version: 1.0\n"
@@ -265,6 +265,14 @@ msgstr "ÐдминиÑтратор на група"
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/ms_MY/core.po b/l10n/ms_MY/core.po
index 3a62b704348..e8d31c87c23 100644
--- a/l10n/ms_MY/core.po
+++ b/l10n/ms_MY/core.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
"MIME-Version: 1.0\n"
@@ -255,7 +255,7 @@ msgstr ""
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Kongsi"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/ms_MY/files.po b/l10n/ms_MY/files.po
index 642cde5a6e6..351ea5b3fd2 100644
--- a/l10n/ms_MY/files.po
+++ b/l10n/ms_MY/files.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
"MIME-Version: 1.0\n"
@@ -21,20 +21,6 @@ msgstr ""
"Language: ms_MY\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Tiada fail dimuatnaik. Ralat tidak diketahui."
@@ -70,11 +56,11 @@ msgstr "Folder sementara hilang"
msgid "Failed to write to disk"
msgstr "Gagal untuk disimpan"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -82,15 +68,15 @@ msgstr ""
msgid "Files"
msgstr "fail"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr ""
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Padam"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr ""
@@ -114,7 +100,7 @@ msgstr "Batal"
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr ""
@@ -122,12 +108,8 @@ msgstr ""
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:288
-msgid "deleted {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
msgstr ""
#: js/files.js:52
@@ -152,86 +134,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Tidak boleh memuatnaik fail anda kerana mungkin ianya direktori atau saiz fail 0 bytes"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Muat naik ralat"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Tutup"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Dalam proses"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr ""
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Muatnaik dibatalkan."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Nama "
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Saiz"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Dimodifikasi"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr ""
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr ""
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr ""
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr ""
@@ -287,32 +261,40 @@ msgstr "Folder"
msgid "From link"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Batal muat naik"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Tiada apa-apa di sini. Muat naik sesuatu!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Muat turun"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Muat naik terlalu besar"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Fail yang cuba dimuat naik melebihi saiz maksimum fail upload server"
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Fail sedang diimbas, harap bersabar."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Imbasan semasa"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/ms_MY/files_trashbin.po b/l10n/ms_MY/files_trashbin.po
new file mode 100644
index 00000000000..bebd72e8ed4
--- /dev/null
+++ b/l10n/ms_MY/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ms_MY\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/ms_MY/settings.po b/l10n/ms_MY/settings.po
index 020c1d29f4a..40df55766f6 100644
--- a/l10n/ms_MY/settings.po
+++ b/l10n/ms_MY/settings.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
"MIME-Version: 1.0\n"
@@ -266,6 +266,14 @@ msgstr ""
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/nb_NO/core.po b/l10n/nb_NO/core.po
index cf8ff804cf3..fe3666fe40a 100644
--- a/l10n/nb_NO/core.po
+++ b/l10n/nb_NO/core.po
@@ -14,8 +14,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
"MIME-Version: 1.0\n"
@@ -259,7 +259,7 @@ msgstr ""
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Del"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/nb_NO/files.po b/l10n/nb_NO/files.po
index 035398726fd..be448cfd6dd 100644
--- a/l10n/nb_NO/files.po
+++ b/l10n/nb_NO/files.po
@@ -16,8 +16,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
"MIME-Version: 1.0\n"
@@ -26,20 +26,6 @@ msgstr ""
"Language: nb_NO\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Ingen filer ble lastet opp. Ukjent feil."
@@ -75,11 +61,11 @@ msgstr "Mangler en midlertidig mappe"
msgid "Failed to write to disk"
msgstr "Klarte ikke å skrive til disk"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -87,15 +73,15 @@ msgstr ""
msgid "Files"
msgstr "Filer"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Avslutt deling"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Slett"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Omdøp"
@@ -119,7 +105,7 @@ msgstr "avbryt"
msgid "replaced {new_name}"
msgstr "erstatt {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "angre"
@@ -127,14 +113,10 @@ msgstr "angre"
msgid "replaced {new_name} with {old_name}"
msgstr "erstatt {new_name} med {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
msgstr ""
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "slettet {files}"
-
#: js/files.js:52
msgid "'.' is an invalid file name."
msgstr ""
@@ -157,86 +139,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Kan ikke laste opp filen din siden det er en mappe eller den har 0 bytes"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Opplasting feilet"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Lukk"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Ventende"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 fil lastes opp"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} filer laster opp"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Opplasting avbrutt."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URL-en kan ikke være tom."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} filer lest inn"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "feil under skanning"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Navn"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Størrelse"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Endret"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 mappe"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} mapper"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 fil"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} filer"
@@ -292,32 +266,40 @@ msgstr "Mappe"
msgid "From link"
msgstr "Fra link"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Avbryt opplasting"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Ingenting her. Last opp noe!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Last ned"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Opplasting for stor"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Filene du prøver å laste opp er for store for å laste opp til denne serveren."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Skanner etter filer, vennligst vent."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Pågående skanning"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/nb_NO/files_trashbin.po b/l10n/nb_NO/files_trashbin.po
new file mode 100644
index 00000000000..e986b6bbf33
--- /dev/null
+++ b/l10n/nb_NO/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nb_NO\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/nb_NO/settings.po b/l10n/nb_NO/settings.po
index 15ea0f7eb68..6544828d8a0 100644
--- a/l10n/nb_NO/settings.po
+++ b/l10n/nb_NO/settings.po
@@ -15,8 +15,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
"MIME-Version: 1.0\n"
@@ -270,6 +270,14 @@ msgstr "Gruppeadministrator"
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/nl/core.po b/l10n/nl/core.po
index e331b66a8d7..2631c0b1fd9 100644
--- a/l10n/nl/core.po
+++ b/l10n/nl/core.po
@@ -21,8 +21,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
"MIME-Version: 1.0\n"
@@ -266,7 +266,7 @@ msgstr "Het vereiste bestand {file} is niet geïnstalleerd!"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Delen"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/nl/files.po b/l10n/nl/files.po
index 0fcff7925a6..e89b67b08e6 100644
--- a/l10n/nl/files.po
+++ b/l10n/nl/files.po
@@ -19,8 +19,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
"MIME-Version: 1.0\n"
@@ -29,20 +29,6 @@ msgstr ""
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "Kon %s niet verplaatsen - Er bestaat al een bestand met deze naam"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "Kon %s niet verplaatsen"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "Kan bestand niet hernoemen"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Er was geen bestand geladen. Onbekende fout"
@@ -78,11 +64,11 @@ msgstr "Een tijdelijke map mist"
msgid "Failed to write to disk"
msgstr "Schrijven naar schijf mislukt"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr ""
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "Niet genoeg ruimte beschikbaar"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Ongeldige directory."
@@ -90,15 +76,15 @@ msgstr "Ongeldige directory."
msgid "Files"
msgstr "Bestanden"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Stop delen"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Verwijder"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Hernoem"
@@ -122,7 +108,7 @@ msgstr "annuleren"
msgid "replaced {new_name}"
msgstr "verving {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "ongedaan maken"
@@ -130,13 +116,9 @@ msgstr "ongedaan maken"
msgid "replaced {new_name} with {old_name}"
msgstr "verving {new_name} met {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "delen gestopt {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "verwijderde {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -160,86 +142,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "Uw download wordt voorbereid. Dit kan enige tijd duren bij grote bestanden."
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "uploaden van de file mislukt, het is of een directory of de bestandsgrootte is 0 bytes"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Upload Fout"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Sluit"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Wachten"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 bestand wordt ge-upload"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} bestanden aan het uploaden"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Uploaden geannuleerd."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Bestandsupload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URL kan niet leeg zijn."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Ongeldige mapnaam. Gebruik van'Gedeeld' is voorbehouden aan Owncloud"
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} bestanden gescanned"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "Fout tijdens het scannen"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Naam"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Bestandsgrootte"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Laatst aangepast"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 map"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} mappen"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 bestand"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} bestanden"
@@ -295,32 +269,40 @@ msgstr "Map"
msgid "From link"
msgstr "Vanaf link"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Upload afbreken"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Er bevindt zich hier niets. Upload een bestand!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Download"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Bestanden te groot"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "De bestanden die u probeert te uploaden zijn groter dan de maximaal toegestane bestandsgrootte voor deze server."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Bestanden worden gescand, even wachten."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Er wordt gescand"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/nl/files_trashbin.po b/l10n/nl/files_trashbin.po
new file mode 100644
index 00000000000..79849be8294
--- /dev/null
+++ b/l10n/nl/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/nl/settings.po b/l10n/nl/settings.po
index d3d08ece029..bc6514ffacf 100644
--- a/l10n/nl/settings.po
+++ b/l10n/nl/settings.po
@@ -18,8 +18,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
"MIME-Version: 1.0\n"
@@ -273,6 +273,14 @@ msgstr "Groep beheerder"
msgid "Storage"
msgstr "Opslag"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "Default"
diff --git a/l10n/nn_NO/files.po b/l10n/nn_NO/files.po
index 3cd6f2dfa04..ccd8d42d8b6 100644
--- a/l10n/nn_NO/files.po
+++ b/l10n/nn_NO/files.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
"MIME-Version: 1.0\n"
@@ -19,20 +19,6 @@ msgstr ""
"Language: nn_NO\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr ""
@@ -68,11 +54,11 @@ msgstr "Manglar ei mellombels mappe"
msgid "Failed to write to disk"
msgstr ""
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -80,15 +66,15 @@ msgstr ""
msgid "Files"
msgstr "Filer"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr ""
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Slett"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr ""
@@ -112,7 +98,7 @@ msgstr ""
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr ""
@@ -120,12 +106,8 @@ msgstr ""
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:288
-msgid "deleted {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
msgstr ""
#: js/files.js:52
@@ -150,86 +132,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr ""
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Lukk"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr ""
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr ""
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Namn"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Storleik"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Endra"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr ""
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr ""
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr ""
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr ""
@@ -285,32 +259,40 @@ msgstr "Mappe"
msgid "From link"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr ""
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Ingenting her. Last noko opp!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Last ned"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "For stor opplasting"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Filene du prøver å laste opp er større enn maksgrensa til denne tenaren."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr ""
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/nn_NO/files_trashbin.po b/l10n/nn_NO/files_trashbin.po
new file mode 100644
index 00000000000..522394a9a8e
--- /dev/null
+++ b/l10n/nn_NO/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nn_NO\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/nn_NO/settings.po b/l10n/nn_NO/settings.po
index cb70f810e6b..db09ffd1142 100644
--- a/l10n/nn_NO/settings.po
+++ b/l10n/nn_NO/settings.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
"MIME-Version: 1.0\n"
@@ -264,6 +264,14 @@ msgstr ""
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/oc/core.po b/l10n/oc/core.po
index 11903a2bbcf..8a0593cf3ec 100644
--- a/l10n/oc/core.po
+++ b/l10n/oc/core.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
"MIME-Version: 1.0\n"
@@ -253,7 +253,7 @@ msgstr ""
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Parteja"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/oc/files.po b/l10n/oc/files.po
index 7d952dff63c..49be6c576e9 100644
--- a/l10n/oc/files.po
+++ b/l10n/oc/files.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
"MIME-Version: 1.0\n"
@@ -18,20 +18,6 @@ msgstr ""
"Language: oc\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr ""
@@ -67,11 +53,11 @@ msgstr "Un dorsièr temporari manca"
msgid "Failed to write to disk"
msgstr "L'escriptura sul disc a fracassat"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -79,15 +65,15 @@ msgstr ""
msgid "Files"
msgstr "Fichièrs"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Non parteja"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Escafa"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Torna nomenar"
@@ -111,7 +97,7 @@ msgstr "anulla"
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "defar"
@@ -119,12 +105,8 @@ msgstr "defar"
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:288
-msgid "deleted {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
msgstr ""
#: js/files.js:52
@@ -149,86 +131,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Impossible d'amontcargar lo teu fichièr qu'es un repertòri o que ten pas que 0 octet."
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Error d'amontcargar"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr ""
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Al esperar"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 fichièr al amontcargar"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Amontcargar anullat."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Un amontcargar es a se far. Daissar aquesta pagina ara tamparà lo cargament. "
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "error pendant l'exploracion"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Nom"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Talha"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Modificat"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr ""
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr ""
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr ""
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr ""
@@ -284,32 +258,40 @@ msgstr "Dorsièr"
msgid "From link"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr " Anulla l'amontcargar"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Pas res dedins. Amontcarga qualquaren"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Avalcarga"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Amontcargament tròp gròs"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Los fichièrs que sias a amontcargar son tròp pesucs per la talha maxi pel servidor."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Los fiichièrs son a èsser explorats, "
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Exploracion en cors"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/oc/files_trashbin.po b/l10n/oc/files_trashbin.po
new file mode 100644
index 00000000000..7d4329b2947
--- /dev/null
+++ b/l10n/oc/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: oc\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/oc/settings.po b/l10n/oc/settings.po
index 624ac3293f6..593221357c3 100644
--- a/l10n/oc/settings.po
+++ b/l10n/oc/settings.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
"MIME-Version: 1.0\n"
@@ -263,6 +263,14 @@ msgstr "Grop Admin"
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/pl/core.po b/l10n/pl/core.po
index ba00a2aa5f5..73e2387f9d8 100644
--- a/l10n/pl/core.po
+++ b/l10n/pl/core.po
@@ -17,8 +17,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
"MIME-Version: 1.0\n"
@@ -262,11 +262,11 @@ msgstr "Żądany plik {file} nie jest zainstalowany!"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Udostępnij"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
-msgstr ""
+msgstr "Udostępniono"
#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
diff --git a/l10n/pl/files.po b/l10n/pl/files.po
index 273a818baff..36c7353658d 100644
--- a/l10n/pl/files.po
+++ b/l10n/pl/files.po
@@ -15,8 +15,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
"MIME-Version: 1.0\n"
@@ -25,20 +25,6 @@ msgstr ""
"Language: pl\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "Nie można było przenieść %s - Plik o takiej nazwie już istnieje"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "Nie można było przenieść %s"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "Nie można zmienić nazwy pliku"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Plik nie został załadowany. Nieznany błąd"
@@ -74,11 +60,11 @@ msgstr "Brak katalogu tymczasowego"
msgid "Failed to write to disk"
msgstr "BÅ‚Ä…d zapisu na dysk"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr ""
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "Za mało miejsca"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Zła ścieżka."
@@ -86,15 +72,15 @@ msgstr "Zła ścieżka."
msgid "Files"
msgstr "Pliki"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Nie udostępniaj"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Usuwa element"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Zmień nazwę"
@@ -118,7 +104,7 @@ msgstr "anuluj"
msgid "replaced {new_name}"
msgstr "zastÄ…piony {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "wróć"
@@ -126,13 +112,9 @@ msgstr "wróć"
msgid "replaced {new_name} with {old_name}"
msgstr "zastÄ…piony {new_name} z {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "Udostępniane wstrzymane {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "usunięto {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -156,86 +138,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Nie można wczytać pliku jeśli jest katalogiem lub ma 0 bajtów"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "BÅ‚Ä…d wczytywania"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Zamknij"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "OczekujÄ…ce"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 plik wczytany"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} przesyłanie plików"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Wczytywanie anulowane."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Wysyłanie pliku jest w toku. Teraz opuszczając stronę wysyłanie zostanie anulowane."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URL nie może być pusty."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Nazwa folderu nieprawidłowa. Wykorzystanie \"Shared\" jest zarezerwowane przez Owncloud"
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} pliki skanowane"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "Wystąpił błąd podczas skanowania"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Nazwa"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Rozmiar"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Czas modyfikacji"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 folder"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} foldery"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 plik"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} pliki"
@@ -291,32 +265,40 @@ msgstr "Katalog"
msgid "From link"
msgstr "Z linku"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Przestań wysyłać"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Brak zawartości. Proszę wysłać pliki!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Pobiera element"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Wysyłany plik ma za duży rozmiar"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Pliki które próbujesz przesłać, przekraczają maksymalną, dopuszczalną wielkość."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Skanowanie plików, proszę czekać."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Aktualnie skanowane"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/pl/files_trashbin.po b/l10n/pl/files_trashbin.po
new file mode 100644
index 00000000000..1c2572023cb
--- /dev/null
+++ b/l10n/pl/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pl\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/pl/settings.po b/l10n/pl/settings.po
index 3bca8654b80..6390f9daaf1 100644
--- a/l10n/pl/settings.po
+++ b/l10n/pl/settings.po
@@ -18,8 +18,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
"MIME-Version: 1.0\n"
@@ -273,6 +273,14 @@ msgstr "Grupa Admin"
msgid "Storage"
msgstr "Magazyn"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "Domyślny"
diff --git a/l10n/pl_PL/files.po b/l10n/pl_PL/files.po
index 81c77fd71ea..ab00380cb6b 100644
--- a/l10n/pl_PL/files.po
+++ b/l10n/pl_PL/files.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n"
"MIME-Version: 1.0\n"
@@ -17,20 +17,6 @@ msgstr ""
"Language: pl_PL\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr ""
@@ -66,11 +52,11 @@ msgstr ""
msgid "Failed to write to disk"
msgstr ""
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -78,15 +64,15 @@ msgstr ""
msgid "Files"
msgstr ""
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr ""
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr ""
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr ""
@@ -110,7 +96,7 @@ msgstr ""
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr ""
@@ -118,12 +104,8 @@ msgstr ""
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:288
-msgid "deleted {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
msgstr ""
#: js/files.js:52
@@ -148,86 +130,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr ""
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr ""
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr ""
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr ""
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr ""
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr ""
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr ""
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr ""
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr ""
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr ""
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr ""
@@ -283,32 +257,40 @@ msgstr ""
msgid "From link"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr ""
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr ""
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr ""
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr ""
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr ""
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/pl_PL/files_trashbin.po b/l10n/pl_PL/files_trashbin.po
new file mode 100644
index 00000000000..6a27483b434
--- /dev/null
+++ b/l10n/pl_PL/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pl_PL\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/pl_PL/settings.po b/l10n/pl_PL/settings.po
index 3bf2e6878b8..29b1d16e594 100644
--- a/l10n/pl_PL/settings.po
+++ b/l10n/pl_PL/settings.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n"
"MIME-Version: 1.0\n"
@@ -262,6 +262,14 @@ msgstr ""
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/pt_BR/core.po b/l10n/pt_BR/core.po
index 843960355d6..c180eefca15 100644
--- a/l10n/pt_BR/core.po
+++ b/l10n/pt_BR/core.po
@@ -10,6 +10,7 @@
# Guilherme Maluf Balzana <guimalufb@gmail.com>, 2012.
# <henrique@meira.net>, 2012.
# <philippi.sedir@gmail.com>, 2012.
+# Rodrigo Tavares <rodrigo.st23@hotmail.com>, 2013.
# Thiago Vicente <thiagovice@gmail.com>, 2012.
# Unforgiving Fallout <>, 2012.
# Van Der Fran <transifex@vanderland.com>, 2011, 2012.
@@ -17,9 +18,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
+"Last-Translator: rodrigost23 <rodrigo.st23@hotmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -30,26 +31,26 @@ msgstr ""
#: ajax/share.php:85
#, php-format
msgid "User %s shared a file with you"
-msgstr ""
+msgstr "O usuário %s compartilhou um arquivo com você"
#: ajax/share.php:87
#, php-format
msgid "User %s shared a folder with you"
-msgstr ""
+msgstr "O usuário %s compartilhou uma pasta com você"
#: ajax/share.php:89
#, php-format
msgid ""
"User %s shared the file \"%s\" with you. It is available for download here: "
"%s"
-msgstr ""
+msgstr "O usuário %s compartilhou com você o arquivo \"%s\", que está disponível para download em: %s"
#: ajax/share.php:91
#, php-format
msgid ""
"User %s shared the folder \"%s\" with you. It is available for download "
"here: %s"
-msgstr ""
+msgstr "O usuário %s compartilhou com você a pasta \"%s\", que está disponível para download em: %s"
#: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25
msgid "Category type not provided."
@@ -262,11 +263,11 @@ msgstr "O arquivo {file} necessário não está instalado!"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Compartilhar"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
-msgstr ""
+msgstr "Compartilhados"
#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
@@ -306,11 +307,11 @@ msgstr "Senha"
#: js/share.js:189
msgid "Email link to person"
-msgstr ""
+msgstr "Enviar link por e-mail"
#: js/share.js:190
msgid "Send"
-msgstr ""
+msgstr "Enviar"
#: js/share.js:194
msgid "Set expiration date"
@@ -378,22 +379,22 @@ msgstr "Erro ao definir data de expiração"
#: js/share.js:598
msgid "Sending ..."
-msgstr ""
+msgstr "Enviando ..."
#: js/share.js:609
msgid "Email sent"
-msgstr ""
+msgstr "E-mail enviado"
#: js/update.js:14
msgid ""
"The update was unsuccessful. Please report this issue to the <a "
"href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud "
"community</a>."
-msgstr ""
+msgstr "A atualização falhou. Por favor, relate este problema para a <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">comunidade ownCloud</a>."
#: js/update.js:18
msgid "The update was successful. Redirecting you to ownCloud now."
-msgstr ""
+msgstr "A atualização teve êxito. Você será redirecionado ao ownCloud agora."
#: lostpassword/controller.php:47
msgid "ownCloud password reset"
@@ -591,4 +592,4 @@ msgstr "próximo"
#: templates/update.php:3
#, php-format
msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
+msgstr "Atualizando ownCloud para a versão %s, isto pode levar algum tempo."
diff --git a/l10n/pt_BR/files.po b/l10n/pt_BR/files.po
index 38713a5ae3c..fdbe76ca2de 100644
--- a/l10n/pt_BR/files.po
+++ b/l10n/pt_BR/files.po
@@ -7,6 +7,7 @@
# <fred.maranhao@gmail.com>, 2012.
# Guilherme Maluf Balzana <guimalufb@gmail.com>, 2012.
# <philippi.sedir@gmail.com>, 2012.
+# Rodrigo Tavares <rodrigo.st23@hotmail.com>, 2013.
# <targinosilveira@gmail.com>, 2012.
# Thiago Vicente <thiagovice@gmail.com>, 2012.
# Unforgiving Fallout <>, 2012.
@@ -15,8 +16,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
@@ -25,20 +26,6 @@ msgstr ""
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Nenhum arquivo foi transferido. Erro desconhecido"
@@ -74,27 +61,27 @@ msgstr "Pasta temporária não encontrada"
msgid "Failed to write to disk"
msgstr "Falha ao escrever no disco"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
-msgstr ""
+msgstr "Diretório inválido."
#: appinfo/app.php:10
msgid "Files"
msgstr "Arquivos"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Descompartilhar"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Excluir"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Renomear"
@@ -118,7 +105,7 @@ msgstr "cancelar"
msgid "replaced {new_name}"
msgstr "substituído {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "desfazer"
@@ -126,21 +113,17 @@ msgstr "desfazer"
msgid "replaced {new_name} with {old_name}"
msgstr "Substituído {old_name} por {new_name} "
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "{files} não compartilhados"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "{files} apagados"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
-msgstr ""
+msgstr "'.' é um nome de arquivo inválido."
#: js/files.js:56
msgid "File name cannot be empty."
-msgstr ""
+msgstr "O nome do arquivo não pode estar vazio."
#: js/files.js:64
msgid ""
@@ -156,86 +139,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
-msgstr ""
+msgstr "Seu download está sendo preparado. Isto pode levar algum tempo se os arquivos forem grandes."
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Impossível enviar seus arquivo como diretório ou ele tem 0 bytes."
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Erro de envio"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Fechar"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Pendente"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "enviando 1 arquivo"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "Enviando {count} arquivos"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Envio cancelado."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Upload em andamento. Sair da página agora resultará no cancelamento do envio."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URL não pode ficar em branco"
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
-
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} arquivos scaneados"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "erro durante verificação"
+msgstr "Nome de pasta inválido. O uso de 'Shared' é reservado para o Owncloud"
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Nome"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Tamanho"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Modificado"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 pasta"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} pastas"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 arquivo"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} arquivos"
@@ -291,32 +266,40 @@ msgstr "Pasta"
msgid "From link"
msgstr "Do link"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Cancelar upload"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Nada aqui.Carrege alguma coisa!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Baixar"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Arquivo muito grande"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Os arquivos que você está tentando carregar excedeu o tamanho máximo para arquivos no servidor."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Arquivos sendo escaneados, por favor aguarde."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Scanning atual"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/pt_BR/files_encryption.po b/l10n/pt_BR/files_encryption.po
index ee24c51910d..5c733f9c615 100644
--- a/l10n/pt_BR/files_encryption.po
+++ b/l10n/pt_BR/files_encryption.po
@@ -4,13 +4,14 @@
#
# Translators:
# <philippi.sedir@gmail.com>, 2012.
+# Rodrigo Tavares <rodrigo.st23@hotmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-23 00:05+0100\n"
-"PO-Revision-Date: 2013-01-22 23:05+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 16:40+0000\n"
+"Last-Translator: rodrigost23 <rodrigo.st23@hotmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -22,53 +23,53 @@ msgstr ""
msgid ""
"Please switch to your ownCloud client and change your encryption password to"
" complete the conversion."
-msgstr ""
+msgstr "Por favor, vá ao seu cliente ownCloud e mude sua criptografia de senha para completar a conversão."
#: js/settings-personal.js:17
msgid "switched to client side encryption"
-msgstr ""
+msgstr "alterado para criptografia por parte do cliente"
#: js/settings-personal.js:21
msgid "Change encryption password to login password"
-msgstr ""
+msgstr "Mudar senha de criptografia para senha de login"
#: js/settings-personal.js:25
msgid "Please check your passwords and try again."
-msgstr ""
+msgstr "Por favor, verifique suas senhas e tente novamente."
#: js/settings-personal.js:25
msgid "Could not change your file encryption password to your login password"
-msgstr ""
+msgstr "Não foi possível mudar sua senha de criptografia de arquivos para sua senha de login"
#: templates/settings-personal.php:3 templates/settings.php:5
msgid "Choose encryption mode:"
-msgstr ""
+msgstr "Escolha o modo de criptografia:"
#: templates/settings-personal.php:20 templates/settings.php:24
msgid ""
"Client side encryption (most secure but makes it impossible to access your "
"data from the web interface)"
-msgstr ""
+msgstr "Criptografia por parte do cliente (mais segura, mas torna impossível acessar seus dados a partir da interface web)"
#: templates/settings-personal.php:30 templates/settings.php:36
msgid ""
"Server side encryption (allows you to access your files from the web "
"interface and the desktop client)"
-msgstr ""
+msgstr "Criptografia por parte do servidor (permite que você acesse seus arquivos da interface web e do cliente desktop)"
#: templates/settings-personal.php:41 templates/settings.php:60
msgid "None (no encryption at all)"
-msgstr ""
+msgstr "Nenhuma (sem qualquer criptografia)"
#: templates/settings.php:10
msgid ""
"Important: Once you selected an encryption mode there is no way to change it"
" back"
-msgstr ""
+msgstr "Importante: Uma vez que tiver escolhido um modo de criptografia, não há um meio de voltar atrás"
#: templates/settings.php:48
msgid "User specific (let the user decide)"
-msgstr ""
+msgstr "Específico por usuário (deixa o usuário decidir)"
#: templates/settings.php:65
msgid "Encryption"
diff --git a/l10n/pt_BR/files_external.po b/l10n/pt_BR/files_external.po
index cb394018175..3c17453294e 100644
--- a/l10n/pt_BR/files_external.po
+++ b/l10n/pt_BR/files_external.po
@@ -4,13 +4,14 @@
#
# Translators:
# <philippi.sedir@gmail.com>, 2012.
+# Rodrigo Tavares <rodrigo.st23@hotmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-13 00:17+0100\n"
-"PO-Revision-Date: 2012-12-11 23:22+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 15:50+0000\n"
+"Last-Translator: rodrigost23 <rodrigo.st23@hotmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -26,11 +27,11 @@ msgstr "Acesso concedido"
msgid "Error configuring Dropbox storage"
msgstr "Erro ao configurar armazenamento do Dropbox"
-#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40
+#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:41
msgid "Grant access"
msgstr "Permitir acesso"
-#: js/dropbox.js:73 js/google.js:72
+#: js/dropbox.js:73 js/google.js:73
msgid "Fill out all required fields"
msgstr "Preencha todos os campos obrigatórios"
@@ -38,22 +39,22 @@ msgstr "Preencha todos os campos obrigatórios"
msgid "Please provide a valid Dropbox app key and secret."
msgstr "Por favor forneça um app key e secret válido do Dropbox"
-#: js/google.js:26 js/google.js:73 js/google.js:78
+#: js/google.js:26 js/google.js:74 js/google.js:79
msgid "Error configuring Google Drive storage"
msgstr "Erro ao configurar armazenamento do Google Drive"
-#: lib/config.php:434
+#: lib/config.php:405
msgid ""
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
"is not possible. Please ask your system administrator to install it."
-msgstr ""
+msgstr "<b>Aviso:</b> \"smbclient\" não está instalado. Não será possível montar compartilhamentos de CIFS/SMB. Por favor, peça ao seu administrador do sistema para instalá-lo."
-#: lib/config.php:435
+#: lib/config.php:406
msgid ""
"<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."
-msgstr ""
+msgstr "<b>Aviso:</b> O suporte para FTP do PHP não está ativado ou instalado. Não será possível montar compartilhamentos FTP. Por favor, peça ao seu administrador do sistema para instalá-lo."
#: templates/settings.php:3
msgid "External Storage"
@@ -100,7 +101,7 @@ msgid "Users"
msgstr "Usuários"
#: templates/settings.php:108 templates/settings.php:109
-#: templates/settings.php:149 templates/settings.php:150
+#: templates/settings.php:144 templates/settings.php:145
msgid "Delete"
msgstr "Remover"
@@ -112,10 +113,10 @@ msgstr "Habilitar Armazenamento Externo do Usuário"
msgid "Allow users to mount their own external storage"
msgstr "Permitir usuários a montar seus próprios armazenamentos externos"
-#: templates/settings.php:139
+#: templates/settings.php:136
msgid "SSL root certificates"
msgstr "Certificados SSL raíz"
-#: templates/settings.php:158
+#: templates/settings.php:153
msgid "Import Root Certificate"
msgstr "Importar Certificado Raíz"
diff --git a/l10n/pt_BR/files_trashbin.po b/l10n/pt_BR/files_trashbin.po
new file mode 100644
index 00000000000..35114633850
--- /dev/null
+++ b/l10n/pt_BR/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pt_BR\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/pt_BR/files_versions.po b/l10n/pt_BR/files_versions.po
index 63442db0efe..d6cf483ba38 100644
--- a/l10n/pt_BR/files_versions.po
+++ b/l10n/pt_BR/files_versions.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-15 00:03+0100\n"
-"PO-Revision-Date: 2013-01-14 23:04+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 15:50+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
diff --git a/l10n/pt_BR/lib.po b/l10n/pt_BR/lib.po
index f1a550574ba..d20d57c8145 100644
--- a/l10n/pt_BR/lib.po
+++ b/l10n/pt_BR/lib.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 15:50+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
@@ -44,23 +44,23 @@ msgstr "Aplicações"
msgid "Admin"
msgstr "Admin"
-#: files.php:365
+#: files.php:202
msgid "ZIP download is turned off."
msgstr "Download ZIP está desligado."
-#: files.php:366
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr "Arquivos precisam ser baixados um de cada vez."
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr "Voltar para Arquivos"
-#: files.php:390
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr "Arquivos selecionados são muito grandes para gerar arquivo zip."
-#: helper.php:228
+#: helper.php:226
msgid "couldn't be determined"
msgstr ""
diff --git a/l10n/pt_BR/settings.po b/l10n/pt_BR/settings.po
index 06a011df783..49d4158b409 100644
--- a/l10n/pt_BR/settings.po
+++ b/l10n/pt_BR/settings.po
@@ -17,8 +17,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
@@ -29,7 +29,7 @@ msgstr ""
#: ajax/apps/ocs.php:20
msgid "Unable to load list from App Store"
-msgstr "Não foi possivel carregar lista da App Store"
+msgstr "Não foi possível carregar lista da App Store"
#: ajax/creategroup.php:10
msgid "Group already exists"
@@ -37,35 +37,35 @@ msgstr "Grupo já existe"
#: ajax/creategroup.php:19
msgid "Unable to add group"
-msgstr "Não foi possivel adicionar grupo"
+msgstr "Não foi possível adicionar grupo"
#: ajax/enableapp.php:11
msgid "Could not enable app. "
-msgstr "Não pôde habilitar aplicação"
+msgstr "Não foi possível habilitar aplicativo."
#: ajax/lostpassword.php:12
msgid "Email saved"
-msgstr "Email gravado"
+msgstr "E-mail guardado"
#: ajax/lostpassword.php:14
msgid "Invalid email"
-msgstr "Email inválido"
+msgstr "E-mail inválido"
#: ajax/removegroup.php:13
msgid "Unable to delete group"
-msgstr "Não foi possivel remover grupo"
+msgstr "Não foi possível remover grupo"
#: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18
msgid "Authentication error"
-msgstr "erro de autenticação"
+msgstr "Erro de autenticação"
#: ajax/removeuser.php:24
msgid "Unable to delete user"
-msgstr "Não foi possivel remover usuário"
+msgstr "Não foi possível remover usuário"
#: ajax/setlanguage.php:15
msgid "Language changed"
-msgstr "Mudou Idioma"
+msgstr "Idioma alterado"
#: ajax/setlanguage.php:17 ajax/setlanguage.php:20
msgid "Invalid request"
@@ -78,28 +78,28 @@ msgstr "Admins não podem se remover do grupo admin"
#: ajax/togglegroups.php:28
#, php-format
msgid "Unable to add user to group %s"
-msgstr "Não foi possivel adicionar usuário ao grupo %s"
+msgstr "Não foi possível adicionar usuário ao grupo %s"
#: ajax/togglegroups.php:34
#, php-format
msgid "Unable to remove user from group %s"
-msgstr "Não foi possivel remover usuário ao grupo %s"
+msgstr "Não foi possível remover usuário do grupo %s"
#: js/apps.js:28 js/apps.js:67
msgid "Disable"
-msgstr "Desabilitado"
+msgstr "Desabilitar"
#: js/apps.js:28 js/apps.js:55
msgid "Enable"
-msgstr "Habilitado"
+msgstr "Habilitar"
#: js/personal.js:69
msgid "Saving..."
-msgstr "Gravando..."
+msgstr "Guardando..."
#: personal.php:34 personal.php:35
msgid "__language_name__"
-msgstr "Português do Brasil"
+msgstr "Português (Brasil)"
#: templates/apps.php:10
msgid "Add your App"
@@ -111,7 +111,7 @@ msgstr "Mais Apps"
#: templates/apps.php:24
msgid "Select an App"
-msgstr "Selecione uma Aplicação"
+msgstr "Selecione um Aplicativo"
#: templates/apps.php:28
msgid "See application page at apps.owncloud.com"
@@ -123,19 +123,19 @@ msgstr "<span class=\"licence\"></span>-licenciado por <span class=\"author\"></
#: templates/help.php:3
msgid "User Documentation"
-msgstr ""
+msgstr "Documentação de Usuário"
#: templates/help.php:4
msgid "Administrator Documentation"
-msgstr ""
+msgstr "Documentação de Administrador"
#: templates/help.php:6
msgid "Online Documentation"
-msgstr ""
+msgstr "Documentação Online"
#: templates/help.php:7
msgid "Forum"
-msgstr ""
+msgstr "Fórum"
#: templates/help.php:9
msgid "Bugtracker"
@@ -143,7 +143,7 @@ msgstr ""
#: templates/help.php:11
msgid "Commercial Support"
-msgstr ""
+msgstr "Suporte Comercial"
#: templates/personal.php:8
#, php-format
@@ -156,15 +156,15 @@ msgstr "Clientes"
#: templates/personal.php:13
msgid "Download Desktop Clients"
-msgstr ""
+msgstr "Baixar Clientes Desktop"
#: templates/personal.php:14
msgid "Download Android Client"
-msgstr ""
+msgstr "Baixar Cliente Android"
#: templates/personal.php:15
msgid "Download iOS Client"
-msgstr ""
+msgstr "Baixar Cliente iOS"
#: templates/personal.php:21 templates/users.php:23 templates/users.php:81
msgid "Password"
@@ -196,15 +196,15 @@ msgstr "Alterar senha"
#: templates/personal.php:33
msgid "Email"
-msgstr "Email"
+msgstr "E-mail"
#: templates/personal.php:34
msgid "Your email address"
-msgstr "Seu endereço de email"
+msgstr "Seu endereço de e-mail"
#: templates/personal.php:35
msgid "Fill in an email address to enable password recovery"
-msgstr "Preencha um endereço de email para habilitar a recuperação de senha"
+msgstr "Preencha um endereço de e-mail para habilitar a recuperação de senha"
#: templates/personal.php:41 templates/personal.php:42
msgid "Language"
@@ -216,15 +216,15 @@ msgstr "Ajude a traduzir"
#: templates/personal.php:52
msgid "WebDAV"
-msgstr ""
+msgstr "WebDAV"
#: templates/personal.php:54
msgid "Use this address to connect to your ownCloud in your file manager"
-msgstr ""
+msgstr "Usar este endereço para conectar-se ao seu ownCloud no seu gerenciador de arquivos"
#: templates/personal.php:63
msgid "Version"
-msgstr ""
+msgstr "Versão"
#: templates/personal.php:65
msgid ""
@@ -238,7 +238,7 @@ msgstr "Desenvolvido pela <a href=\"http://ownCloud.org/contact\" target=\"_blan
#: templates/users.php:21 templates/users.php:79
msgid "Login Name"
-msgstr ""
+msgstr "Nome de Login"
#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
@@ -250,11 +250,11 @@ msgstr "Criar"
#: templates/users.php:35
msgid "Default Storage"
-msgstr ""
+msgstr "Armazenamento Padrão"
#: templates/users.php:42 templates/users.php:142
msgid "Unlimited"
-msgstr ""
+msgstr "Ilimitado"
#: templates/users.php:60 templates/users.php:157
msgid "Other"
@@ -262,7 +262,7 @@ msgstr "Outro"
#: templates/users.php:80
msgid "Display Name"
-msgstr ""
+msgstr "Nome de Exibição"
#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
@@ -270,11 +270,19 @@ msgstr "Grupo Administrativo"
#: templates/users.php:86
msgid "Storage"
+msgstr "Armazenamento"
+
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
msgstr ""
#: templates/users.php:137
msgid "Default"
-msgstr ""
+msgstr "Padrão"
#: templates/users.php:165
msgid "Delete"
diff --git a/l10n/pt_BR/user_webdavauth.po b/l10n/pt_BR/user_webdavauth.po
index db7d62a36b8..be539b59a8a 100644
--- a/l10n/pt_BR/user_webdavauth.po
+++ b/l10n/pt_BR/user_webdavauth.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Rodrigo Tavares <rodrigo.st23@hotmail.com>, 2013.
# <thoriumbr@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-15 00:03+0100\n"
-"PO-Revision-Date: 2013-01-14 23:04+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 16:22+0000\n"
+"Last-Translator: rodrigost23 <rodrigo.st23@hotmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,15 +21,15 @@ msgstr ""
#: templates/settings.php:3
msgid "WebDAV Authentication"
-msgstr ""
+msgstr "Autenticação WebDAV"
#: templates/settings.php:4
msgid "URL: http://"
-msgstr ""
+msgstr "URL: http://"
#: templates/settings.php:6
msgid ""
"ownCloud will send the user credentials to this URL. This plugin checks the "
"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
"credentials, and all other responses as valid credentials."
-msgstr ""
+msgstr "O ownCloud enviará as credenciais do usuário para esta URL. Este plugin verifica a resposta e interpreta o os códigos de status do HTTP 401 e 403 como credenciais inválidas, e todas as outras respostas como credenciais válidas."
diff --git a/l10n/pt_PT/core.po b/l10n/pt_PT/core.po
index afaa00874d6..de0bb148c45 100644
--- a/l10n/pt_PT/core.po
+++ b/l10n/pt_PT/core.po
@@ -15,9 +15,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
+"Last-Translator: Duarte Velez Grilo <duartegrilo@gmail.com>\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -260,11 +260,11 @@ msgstr "O ficheiro necessário {file} não está instalado!"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Partilhar"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
-msgstr ""
+msgstr "Partilhado"
#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
diff --git a/l10n/pt_PT/files.po b/l10n/pt_PT/files.po
index 38429e8ec21..0ffd2591560 100644
--- a/l10n/pt_PT/files.po
+++ b/l10n/pt_PT/files.po
@@ -9,14 +9,15 @@
# Duarte Velez Grilo <duartegrilo@gmail.com>, 2012.
# <geral@ricardolameiro.pt>, 2012.
# Helder Meneses <helder.meneses@gmail.com>, 2012.
+# Miguel Sousa <migueljorgesousa@sapo.pt>, 2013.
# <rjgpp.1994@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-29 00:04+0100\n"
-"PO-Revision-Date: 2013-01-28 17:06+0000\n"
-"Last-Translator: Duarte Velez Grilo <duartegrilo@gmail.com>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -24,20 +25,6 @@ msgstr ""
"Language: pt_PT\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "Não foi possível mover o ficheiro %s - Já existe um ficheiro com esse nome"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "Não foi possível move o ficheiro %s"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "Não foi possível renomear o ficheiro"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Nenhum ficheiro foi carregado. Erro desconhecido"
@@ -73,11 +60,11 @@ msgstr "Falta uma pasta temporária"
msgid "Failed to write to disk"
msgstr "Falhou a escrita no disco"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr "Não há espaço suficiente em disco"
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "Espaço em disco insuficiente!"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Directório Inválido"
@@ -85,15 +72,15 @@ msgstr "Directório Inválido"
msgid "Files"
msgstr "Ficheiros"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Deixar de partilhar"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Apagar"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Renomear"
@@ -117,7 +104,7 @@ msgstr "cancelar"
msgid "replaced {new_name}"
msgstr "{new_name} substituido"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "desfazer"
@@ -125,13 +112,9 @@ msgstr "desfazer"
msgid "replaced {new_name} with {old_name}"
msgstr "substituido {new_name} por {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "{files} não partilhado(s)"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "{files} eliminado(s)"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -155,86 +138,78 @@ msgstr "O seu armazenamento está cheio, os ficheiros não podem ser sincronizad
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr "O seu espaço de armazenamento está quase cheiro ({usedSpacePercent}%)"
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "O seu download está a ser preparado. Este processo pode demorar algum tempo se os ficheiros forem grandes."
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Não é possível fazer o envio do ficheiro devido a ser uma pasta ou ter 0 bytes"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Erro no envio"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Fechar"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Pendente"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "A enviar 1 ficheiro"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "A carregar {count} ficheiros"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Envio cancelado."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Envio de ficheiro em progresso. Irá cancelar o envio se sair da página agora."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "O URL não pode estar vazio."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Nome de pasta inválido. O Uso de 'shared' é reservado para o ownCloud"
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} ficheiros analisados"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "erro ao analisar"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Nome"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Tamanho"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Modificado"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 pasta"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} pastas"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 ficheiro"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} ficheiros"
@@ -290,32 +265,40 @@ msgstr "Pasta"
msgid "From link"
msgstr "Da ligação"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Cancelar envio"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Vazio. Envie alguma coisa!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Transferir"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Envio muito grande"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Os ficheiros que está a tentar enviar excedem o tamanho máximo de envio permitido neste servidor."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Os ficheiros estão a ser analisados, por favor aguarde."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Análise actual"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Atualizar cache do sistema de ficheiros..."
diff --git a/l10n/pt_PT/files_trashbin.po b/l10n/pt_PT/files_trashbin.po
new file mode 100644
index 00000000000..150827a263a
--- /dev/null
+++ b/l10n/pt_PT/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pt_PT\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/pt_PT/settings.po b/l10n/pt_PT/settings.po
index a2de9c1e4c6..3849efff6e7 100644
--- a/l10n/pt_PT/settings.po
+++ b/l10n/pt_PT/settings.po
@@ -4,17 +4,19 @@
#
# Translators:
# <daniel@mouxy.net>, 2012.
+# <duartegrilo@gmail.com>, 2013.
# Duarte Velez Grilo <duartegrilo@gmail.com>, 2012-2013.
# <geral@ricardolameiro.pt>, 2012.
# Helder Meneses <helder.meneses@gmail.com>, 2012.
+# Miguel Sousa <migueljorgesousa@sapo.pt>, 2013.
# <rjgpp.1994@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 01:00+0000\n"
+"Last-Translator: Miguel Sousa <migueljorgesousa@sapo.pt>\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -233,7 +235,7 @@ msgstr "Desenvolvido pela <a href=\"http://ownCloud.org/contact\" target=\"_blan
#: templates/users.php:21 templates/users.php:79
msgid "Login Name"
-msgstr ""
+msgstr "Nome de utilizador"
#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
@@ -257,7 +259,7 @@ msgstr "Outro"
#: templates/users.php:80
msgid "Display Name"
-msgstr ""
+msgstr "Nome público"
#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
@@ -267,6 +269,14 @@ msgstr "Grupo Administrador"
msgid "Storage"
msgstr "Armazenamento"
+#: templates/users.php:97
+msgid "change display name"
+msgstr "modificar nome exibido"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "definir nova palavra-passe"
+
#: templates/users.php:137
msgid "Default"
msgstr "Padrão"
diff --git a/l10n/ro/core.po b/l10n/ro/core.po
index 8bf554fdbea..6d283624614 100644
--- a/l10n/ro/core.po
+++ b/l10n/ro/core.po
@@ -13,8 +13,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
"MIME-Version: 1.0\n"
@@ -258,7 +258,7 @@ msgstr "Fișierul obligatoriu {file} nu este instalat!"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Partajează"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/ro/files.po b/l10n/ro/files.po
index e5a64577ebc..a199844446c 100644
--- a/l10n/ro/files.po
+++ b/l10n/ro/files.po
@@ -13,8 +13,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
"MIME-Version: 1.0\n"
@@ -23,20 +23,6 @@ msgstr ""
"Language: ro\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "Nu se poate de mutat %s - Fișier cu acest nume deja există"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "Nu s-a putut muta %s"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "Nu s-a putut redenumi fișierul"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Nici un fișier nu a fost încărcat. Eroare necunoscută"
@@ -72,11 +58,11 @@ msgstr "Lipsește un dosar temporar"
msgid "Failed to write to disk"
msgstr "Eroare la scriere pe disc"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr ""
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "Nu este suficient spațiu disponibil"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Director invalid."
@@ -84,15 +70,15 @@ msgstr "Director invalid."
msgid "Files"
msgstr "Fișiere"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Anulează partajarea"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Șterge"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Redenumire"
@@ -116,7 +102,7 @@ msgstr "anulare"
msgid "replaced {new_name}"
msgstr "inlocuit {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "Anulează ultima acțiune"
@@ -124,13 +110,9 @@ msgstr "Anulează ultima acțiune"
msgid "replaced {new_name} with {old_name}"
msgstr "{new_name} inlocuit cu {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "nedistribuit {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "Sterse {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -154,86 +136,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "Se pregătește descărcarea. Aceasta poate să dureze ceva timp dacă fișierele sunt mari."
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Nu s-a putut încărca fișierul tău deoarece pare să fie un director sau are 0 bytes."
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Eroare la încărcare"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "ÃŽnchide"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "În așteptare"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "un fișier se încarcă"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} fisiere incarcate"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Încărcare anulată."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Fișierul este în curs de încărcare. Părăsirea paginii va întrerupe încărcarea."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "Adresa URL nu poate fi goală."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Invalid folder name. Usage of 'Shared' is reserved by Ownclou"
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} fisiere scanate"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "eroare la scanarea"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Nume"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Dimensiune"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Modificat"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 folder"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} foldare"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 fisier"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} fisiere"
@@ -289,32 +263,40 @@ msgstr "Dosar"
msgid "From link"
msgstr "de la adresa"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Anulează încărcarea"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Nimic aici. Încarcă ceva!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Descarcă"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Fișierul încărcat este prea mare"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Fișierul care l-ai încărcat a depășită limita maximă admisă la încărcare pe acest server."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Fișierele sunt scanate, te rog așteptă."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "ÃŽn curs de scanare"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/ro/files_trashbin.po b/l10n/ro/files_trashbin.po
new file mode 100644
index 00000000000..68e72348ff6
--- /dev/null
+++ b/l10n/ro/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ro\n"
+"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/ro/settings.po b/l10n/ro/settings.po
index 9773ea8fced..e69c97841ff 100644
--- a/l10n/ro/settings.po
+++ b/l10n/ro/settings.po
@@ -14,8 +14,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
"MIME-Version: 1.0\n"
@@ -269,6 +269,14 @@ msgstr "Grupul Admin "
msgid "Storage"
msgstr "Stocare"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "Implicită"
diff --git a/l10n/ru/core.po b/l10n/ru/core.po
index bcc0d346275..6f8d26bc80e 100644
--- a/l10n/ru/core.po
+++ b/l10n/ru/core.po
@@ -17,8 +17,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
"MIME-Version: 1.0\n"
@@ -262,7 +262,7 @@ msgstr "Ðеобходимый файл {file} не уÑтановлен!"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Открыть доÑтуп"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/ru/files.po b/l10n/ru/files.po
index 0c617eada2f..ce99f9649d2 100644
--- a/l10n/ru/files.po
+++ b/l10n/ru/files.po
@@ -18,8 +18,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
"MIME-Version: 1.0\n"
@@ -28,20 +28,6 @@ msgstr ""
"Language: ru\n"
"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);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "Ðевозможно перемеÑтить %s - файл Ñ Ñ‚Ð°ÐºÐ¸Ð¼ именем уже ÑущеÑтвует"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "Ðевозможно перемеÑтить %s"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "Ðевозможно переименовать файл"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Файл не был загружен. ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°"
@@ -77,11 +63,11 @@ msgstr "Ðевозможно найти временную папку"
msgid "Failed to write to disk"
msgstr "Ошибка запиÑи на диÑк"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr ""
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "ÐедоÑтаточно Ñвободного меÑта"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Ðеправильный каталог."
@@ -89,15 +75,15 @@ msgstr "Ðеправильный каталог."
msgid "Files"
msgstr "Файлы"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Отменить публикацию"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Удалить"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Переименовать"
@@ -121,7 +107,7 @@ msgstr "отмена"
msgid "replaced {new_name}"
msgstr "заменено {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "отмена"
@@ -129,13 +115,9 @@ msgstr "отмена"
msgid "replaced {new_name} with {old_name}"
msgstr "заменено {new_name} на {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "не опубликованные {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "удаленные {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -159,86 +141,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Ðе удаетÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ файл размером 0 байт в каталог"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Ошибка загрузки"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Закрыть"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Ожидание"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "загружаетÑÑ 1 файл"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} файлов загружаетÑÑ"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Загрузка отменена."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Файл в процеÑÑе загрузки. Покинув Ñтраницу вы прервёте загрузку."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "СÑылка не может быть пуÑтой."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Ðеправильное Ð¸Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°. Ð˜Ð¼Ñ 'Shared' зарезервировано."
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} файлов проÑканировано"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "ошибка во Ð²Ñ€ÐµÐ¼Ñ ÑанированиÑ"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Ðазвание"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Размер"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Изменён"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 папка"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} папок"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 файл"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} файлов"
@@ -294,32 +268,40 @@ msgstr "Папка"
msgid "From link"
msgstr "Из ÑÑылки"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Отмена загрузки"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "ЗдеÑÑŒ ничего нет. Загрузите что-нибудь!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Скачать"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Файл Ñлишком большой"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Файлы, которые Ð’Ñ‹ пытаетеÑÑŒ загрузить, превышают лимит Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² на Ñтом Ñервере."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Подождите, файлы ÑканируютÑÑ."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Текущее Ñканирование"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/ru/files_trashbin.po b/l10n/ru/files_trashbin.po
new file mode 100644
index 00000000000..488b1f95b94
--- /dev/null
+++ b/l10n/ru/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ru\n"
+"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);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/ru/settings.po b/l10n/ru/settings.po
index 23d54be85fd..9ae6bc4fa91 100644
--- a/l10n/ru/settings.po
+++ b/l10n/ru/settings.po
@@ -19,8 +19,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
"MIME-Version: 1.0\n"
@@ -274,6 +274,14 @@ msgstr "Группа ÐдминиÑтраторы"
msgid "Storage"
msgstr "Хранилище"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "По-умолчанию"
diff --git a/l10n/ru_RU/core.po b/l10n/ru_RU/core.po
index ad1e6dddba8..6618f278e14 100644
--- a/l10n/ru_RU/core.po
+++ b/l10n/ru_RU/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n"
"MIME-Version: 1.0\n"
@@ -254,11 +254,11 @@ msgstr "Требуемый файл {файл} не уÑтановлен!"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Сделать общим"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
-msgstr ""
+msgstr "Опубликовано"
#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
diff --git a/l10n/ru_RU/files.po b/l10n/ru_RU/files.po
index 00422df23bf..5cffe8c9d8e 100644
--- a/l10n/ru_RU/files.po
+++ b/l10n/ru_RU/files.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <cdewqazxsqwe@gmail.com>, 2013.
# <cdewqazxsqwe@gmail.com>, 2012.
# <skoptev@ukr.net>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n"
"MIME-Version: 1.0\n"
@@ -19,20 +20,6 @@ msgstr ""
"Language: ru_RU\n"
"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);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Файл не был загружен. ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°"
@@ -68,27 +55,27 @@ msgstr "ОтÑутÑтвует Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¿Ð°Ð¿ÐºÐ°"
msgid "Failed to write to disk"
msgstr "Ðе удалоÑÑŒ запиÑать на диÑк"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr ""
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "Ðе доÑтаточно Ñвободного меÑта"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
-msgstr ""
+msgstr "Ðеверный каталог."
#: appinfo/app.php:10
msgid "Files"
msgstr "Файлы"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Скрыть"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Удалить"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Переименовать"
@@ -112,7 +99,7 @@ msgstr "отменить"
msgid "replaced {new_name}"
msgstr "заменено {новое_имÑ}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "отменить дейÑтвие"
@@ -120,21 +107,17 @@ msgstr "отменить дейÑтвие"
msgid "replaced {new_name} with {old_name}"
msgstr "заменено {новое_имÑ} Ñ {Ñтарое_имÑ}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "CовмеÑтное иÑпользование прекращено {файлы}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "удалено {файлы}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
-msgstr ""
+msgstr "'.' ÑвлÑетÑÑ Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¼ именем файла."
#: js/files.js:56
msgid "File name cannot be empty."
-msgstr ""
+msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° не может быть пуÑтым."
#: js/files.js:64
msgid ""
@@ -150,86 +133,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Ðевозможно загрузить файл,\n так как он имеет нулевой размер или ÑвлÑетÑÑ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸ÐµÐ¹"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Ошибка загрузки"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Закрыть"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Ожидающий решениÑ"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "загрузка 1 файла"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{количеÑтво} загружено файлов"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Загрузка отменена"
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "ПроцеÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ файла. ЕÑли покинуть Ñтраницу ÑейчаÑ, загрузка будет отменена."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URL не должен быть пуÑтым."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
-
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{количеÑтво} файлов отÑканировано"
+msgstr "Ðеверное Ð¸Ð¼Ñ Ð¿Ð°Ð¿ÐºÐ¸. ИÑпользование Ð½Ð°Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ 'Опубликовано' зарезервировано Owncloud"
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "ошибка при Ñканировании"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "ИмÑ"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Размер"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Изменен"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 папка"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{количеÑтво} папок"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 файл"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{количеÑтво} файлов"
@@ -285,32 +260,40 @@ msgstr "Папка"
msgid "From link"
msgstr "По ÑÑылке"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Отмена загрузки"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "ЗдеÑÑŒ ничего нет. Загрузите что-нибудь!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Загрузить"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Загрузка Ñлишком велика"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Размер файлов, которые Ð’Ñ‹ пытаетеÑÑŒ загрузить, превышает макÑимально допуÑтимый размер Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ на данный Ñервер."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Файлы ÑканируютÑÑ, пожалуйÑта, подождите."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Текущее Ñканирование"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Обновление кÑша файловой ÑиÑтемы... "
diff --git a/l10n/ru_RU/files_encryption.po b/l10n/ru_RU/files_encryption.po
index b27f0a2def2..2453fc2cb9d 100644
--- a/l10n/ru_RU/files_encryption.po
+++ b/l10n/ru_RU/files_encryption.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <cdewqazxsqwe@gmail.com>, 2013.
# <cdewqazxsqwe@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-23 00:05+0100\n"
-"PO-Revision-Date: 2013-01-22 23:05+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 12:11+0000\n"
+"Last-Translator: AnnaSch <cdewqazxsqwe@gmail.com>\n"
"Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -22,11 +23,11 @@ msgstr ""
msgid ""
"Please switch to your ownCloud client and change your encryption password to"
" complete the conversion."
-msgstr ""
+msgstr "ПожалуйÑта, переключитеÑÑŒ на ownCloud-клиент и измените Ваш пароль ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ð²ÐµÑ€Ñ‚Ð°Ñ†Ð¸Ð¸."
#: js/settings-personal.js:17
msgid "switched to client side encryption"
-msgstr ""
+msgstr "переключено на шифрование на клиентÑкой Ñтороне"
#: js/settings-personal.js:21
msgid "Change encryption password to login password"
@@ -34,7 +35,7 @@ msgstr ""
#: js/settings-personal.js:25
msgid "Please check your passwords and try again."
-msgstr ""
+msgstr "ПожалуйÑта, проверьте Ваш пароль и попробуйте Ñнова"
#: js/settings-personal.js:25
msgid "Could not change your file encryption password to your login password"
@@ -42,33 +43,33 @@ msgstr ""
#: templates/settings-personal.php:3 templates/settings.php:5
msgid "Choose encryption mode:"
-msgstr ""
+msgstr "Выберите ÑпоÑоб шифрованиÑ:"
#: templates/settings-personal.php:20 templates/settings.php:24
msgid ""
"Client side encryption (most secure but makes it impossible to access your "
"data from the web interface)"
-msgstr ""
+msgstr "Шифрование на Ñтороне клиента (наиболее безопаÑно, но делает невозможным получение доÑтупа к Вашим данным по вÑб-интерфейÑу)"
#: templates/settings-personal.php:30 templates/settings.php:36
msgid ""
"Server side encryption (allows you to access your files from the web "
"interface and the desktop client)"
-msgstr ""
+msgstr "Шифрование на Ñтороне Ñервера (позволÑет Вам получить доÑтуп к Вашим файлам по вÑб-интерфейÑу и деÑктопному клиенту)"
#: templates/settings-personal.php:41 templates/settings.php:60
msgid "None (no encryption at all)"
-msgstr ""
+msgstr "Ðет (шифрование полноÑтью отÑутÑтвует)"
#: templates/settings.php:10
msgid ""
"Important: Once you selected an encryption mode there is no way to change it"
" back"
-msgstr ""
+msgstr "Важно: Ðевозможно будет изменить выбранный ÑпоÑоб шифрованиÑ"
#: templates/settings.php:48
msgid "User specific (let the user decide)"
-msgstr ""
+msgstr "Специфика Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (позволено решить пользователю)"
#: templates/settings.php:65
msgid "Encryption"
diff --git a/l10n/ru_RU/files_trashbin.po b/l10n/ru_RU/files_trashbin.po
new file mode 100644
index 00000000000..de62fb208ef
--- /dev/null
+++ b/l10n/ru_RU/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ru_RU\n"
+"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);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/ru_RU/settings.po b/l10n/ru_RU/settings.po
index 8722c9ae955..518e0168171 100644
--- a/l10n/ru_RU/settings.po
+++ b/l10n/ru_RU/settings.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 13:40+0000\n"
+"Last-Translator: AnnaSch <cdewqazxsqwe@gmail.com>\n"
"Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -264,6 +264,14 @@ msgstr "Группа Admin"
msgid "Storage"
msgstr "Хранилище"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "назначить новый пароль"
+
#: templates/users.php:137
msgid "Default"
msgstr "По умолчанию"
diff --git a/l10n/ru_RU/user_webdavauth.po b/l10n/ru_RU/user_webdavauth.po
index a14bb9d28ed..48ae554ac04 100644
--- a/l10n/ru_RU/user_webdavauth.po
+++ b/l10n/ru_RU/user_webdavauth.po
@@ -3,15 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <cdewqazxsqwe@gmail.com>, 2013.
# <cdewqazxsqwe@gmail.com>, 2012.
# <skoptev@ukr.net>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-15 00:03+0100\n"
-"PO-Revision-Date: 2013-01-14 23:04+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 10:01+0000\n"
+"Last-Translator: AnnaSch <cdewqazxsqwe@gmail.com>\n"
"Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,7 +22,7 @@ msgstr ""
#: templates/settings.php:3
msgid "WebDAV Authentication"
-msgstr ""
+msgstr "WebDAV аутентификациÑ"
#: templates/settings.php:4
msgid "URL: http://"
diff --git a/l10n/si_LK/core.po b/l10n/si_LK/core.po
index 0d0fd472df8..c03125867c9 100644
--- a/l10n/si_LK/core.po
+++ b/l10n/si_LK/core.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
"MIME-Version: 1.0\n"
@@ -255,7 +255,7 @@ msgstr ""
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "බෙද෠හද෠ගන්න"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/si_LK/files.po b/l10n/si_LK/files.po
index 6f61a4f5cdf..51da12e3cb9 100644
--- a/l10n/si_LK/files.po
+++ b/l10n/si_LK/files.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
"MIME-Version: 1.0\n"
@@ -19,20 +19,6 @@ msgstr ""
"Language: si_LK\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "ගොනුවක් උඩුගත නොවුනි. නොහà·à¶³à·’නු දà·à·‚යක්"
@@ -68,11 +54,11 @@ msgstr "තà·à·€à¶šà·à¶½à·’ක ෆොල්ඩරයක් සොයà·à¶œà¶­
msgid "Failed to write to disk"
msgstr "තà·à¶§à·’ගත කිරීම අසà·à¶»à·Šà¶®à¶šà¶ºà·’"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -80,15 +66,15 @@ msgstr ""
msgid "Files"
msgstr "ගොනු"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "නොබෙදු"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "මකන්න"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "නà·à·€à¶­ නම් කරන්න"
@@ -112,7 +98,7 @@ msgstr "අත් හරින්න"
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "නිෂ්ප්â€à¶»à¶· කරන්න"
@@ -120,12 +106,8 @@ msgstr "නිෂ්ප්â€à¶»à¶· කරන්න"
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:288
-msgid "deleted {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
msgstr ""
#: js/files.js:52
@@ -150,86 +132,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "උඩුගත කිරීමේ දà·à·à¶ºà¶šà·Š"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "වසන්න"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr ""
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 ගොනුවක් උඩගත කෙරේ"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "උඩුගත කිරීම අත් හරින්න ලදී"
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "උඩුගතකිරීමක් සිදුවේ. පිටුව à·„à·à¶» යà·à¶¸à·™à¶±à·Š එය නà·à·€à¶­à·™à¶±à·” ඇත"
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "යොමුව හිස් විය නොහà·à¶š"
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "පරීක්ෂ෠කිරීමේදී දà·à·‚යක්"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "නම"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "ප්â€à¶»à¶¸à·à¶«à¶º"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "වෙනස් කළ"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 ෆොල්ඩරයක්"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr ""
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 ගොනුවක්"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr ""
@@ -285,32 +259,40 @@ msgstr "à·†à·à¶½à·Šà¶©à¶»à¶º"
msgid "From link"
msgstr "යොමුවෙන්"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "උඩුගත කිරීම අත් හරින්න"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "මෙහි කිසිවක් නොමà·à¶­. යමක් උඩුගත කරන්න"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "බà·à¶œà¶­ කිරීම"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "උඩුගත කිරීම විà·à·à¶½ à·€à·à¶©à·’ය"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "ඔබ උඩුගත කිරීමට තà·à¶­à·Š කරන ගොනු මෙම සේවà·à¶¯à·à¶ºà¶šà¶ºà· උඩුගත කිරීමට ඉඩදී ඇති උපරිම ගොනු විà·à·à¶½à¶­à·Šà·€à¶ºà¶§ වඩ෠වà·à¶©à·’ය"
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "ගොනු පරික්ෂ෠කෙරේ. මඳක් රà·à¶³à·“ සිටින්න"
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "වර්තමà·à¶± පරික්ෂà·à·€"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/si_LK/files_trashbin.po b/l10n/si_LK/files_trashbin.po
new file mode 100644
index 00000000000..6b753770151
--- /dev/null
+++ b/l10n/si_LK/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: si_LK\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/si_LK/settings.po b/l10n/si_LK/settings.po
index f5d37761925..3baa171814c 100644
--- a/l10n/si_LK/settings.po
+++ b/l10n/si_LK/settings.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
"MIME-Version: 1.0\n"
@@ -265,6 +265,14 @@ msgstr "කà·à¶«à·Šà¶© පරිපà·à¶½à¶š"
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/sk_SK/core.po b/l10n/sk_SK/core.po
index de52d7a52d3..8e64ab1aaff 100644
--- a/l10n/sk_SK/core.po
+++ b/l10n/sk_SK/core.po
@@ -13,8 +13,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
"MIME-Version: 1.0\n"
@@ -258,11 +258,11 @@ msgstr "Požadovaný súbor {file} nie je inštalovaný!"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Zdieľaj"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
-msgstr ""
+msgstr "Zdieľané"
#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
diff --git a/l10n/sk_SK/files.po b/l10n/sk_SK/files.po
index 083a241ac49..2ca4b672973 100644
--- a/l10n/sk_SK/files.po
+++ b/l10n/sk_SK/files.po
@@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
"MIME-Version: 1.0\n"
@@ -22,20 +22,6 @@ msgstr ""
"Language: sk_SK\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "Nie je možné presunúť %s - súbor s týmto menom už existuje"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "Nie je možné presunúť %s"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "Nemožno premenovať súbor"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Žiaden súbor nebol odoslaný. Neznáma chyba"
@@ -71,11 +57,11 @@ msgstr "Chýbajúci doÄasný prieÄinok"
msgid "Failed to write to disk"
msgstr "Zápis na disk sa nepodaril"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr ""
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "Nie je k dispozícii dostatok miesta"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Neplatný adresár"
@@ -83,15 +69,15 @@ msgstr "Neplatný adresár"
msgid "Files"
msgstr "Súbory"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Nezdielať"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Odstrániť"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Premenovať"
@@ -115,7 +101,7 @@ msgstr "zrušiť"
msgid "replaced {new_name}"
msgstr "prepísaný {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "vrátiť"
@@ -123,13 +109,9 @@ msgstr "vrátiť"
msgid "replaced {new_name} with {old_name}"
msgstr "prepísaný {new_name} súborom {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "zdieľanie zrušené pre {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "zmazané {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -147,92 +129,84 @@ msgstr "Nesprávne meno, '\\', '/', '<', '>', ':', '\"', '|', '?' a '*' nie sú
#: js/files.js:78
msgid "Your storage is full, files can not be updated or synced anymore!"
-msgstr ""
+msgstr "Vaše úložisko je plné. Súbory nemožno aktualizovať ani synchronizovať!"
#: js/files.js:82
msgid "Your storage is almost full ({usedSpacePercent}%)"
-msgstr ""
+msgstr "Vaše úložisko je takmer plné ({usedSpacePercent}%)"
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "Vaše sťahovanie sa pripravuje. Ak sú sťahované súbory veľké, môže to chvíľu trvať."
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Nemôžem nahraÅ¥ súbor lebo je to prieÄinok alebo má 0 bajtov."
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Chyba odosielania"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Zavrieť"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Čaká sa"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 súbor sa posiela "
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} súborov odosielaných"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Odosielanie zrušené"
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Opustenie stránky zruší práve prebiehajúce odosielanie súboru."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URL nemôže byť prázdne"
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Neplatné meno adresára. Používanie mena 'Shared' je vyhradené len pre Owncloud"
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} súborov prehľadaných"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "chyba poÄas kontroly"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Meno"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Veľkosť"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Upravené"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 prieÄinok"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} prieÄinkov"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 súbor"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} súborov"
@@ -288,32 +262,40 @@ msgstr "PrieÄinok"
msgid "From link"
msgstr "Z odkazu"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Zrušiť odosielanie"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Žiadny súbor. Nahrajte nieÄo!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Stiahnuť"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Odosielaný súbor je príliš veľký"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Súbory, ktoré sa snažíte nahrať, presahujú maximálnu veľkosť pre nahratie súborov na tento server."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Čakajte, súbory sú prehľadávané."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Práve prehliadané"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/sk_SK/files_external.po b/l10n/sk_SK/files_external.po
index 7a081bb7aa5..56de6320ffe 100644
--- a/l10n/sk_SK/files_external.po
+++ b/l10n/sk_SK/files_external.po
@@ -4,14 +4,15 @@
#
# Translators:
# <intense.feel@gmail.com>, 2012.
+# Marián Hvolka <marian.hvolka@stuba.sk>, 2013.
# <martin.babik@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-13 00:17+0100\n"
-"PO-Revision-Date: 2012-12-11 23:22+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 06:20+0000\n"
+"Last-Translator: mhh <marian.hvolka@stuba.sk>\n"
"Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -27,11 +28,11 @@ msgstr "Prístup povolený"
msgid "Error configuring Dropbox storage"
msgstr "Chyba pri konfigurácii úložiska Dropbox"
-#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40
+#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:41
msgid "Grant access"
msgstr "Povoliť prístup"
-#: js/dropbox.js:73 js/google.js:72
+#: js/dropbox.js:73 js/google.js:73
msgid "Fill out all required fields"
msgstr "Vyplňte všetky vyžadované kolónky"
@@ -39,22 +40,22 @@ msgstr "Vyplňte všetky vyžadované kolónky"
msgid "Please provide a valid Dropbox app key and secret."
msgstr "Zadajte platný kÄ¾ÃºÄ aplikácie a heslo Dropbox"
-#: js/google.js:26 js/google.js:73 js/google.js:78
+#: js/google.js:26 js/google.js:74 js/google.js:79
msgid "Error configuring Google Drive storage"
msgstr "Chyba pri konfigurácii úložiska Google drive"
-#: lib/config.php:434
+#: lib/config.php:405
msgid ""
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
"is not possible. Please ask your system administrator to install it."
-msgstr ""
+msgstr "<b>Upozornenie:</b> \"smbclient\" nie je nainštalovaný. Nie je možné pripojenie oddielov CIFS/SMB. Požiadajte administrátora systému, nech ho nainštaluje."
-#: lib/config.php:435
+#: lib/config.php:406
msgid ""
"<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."
-msgstr ""
+msgstr "<b>Upozornenie:</b> Podpora FTP v PHP nie je povolená alebo nainštalovaná. Nie je možné pripojenie oddielov FTP. Požiadajte administrátora systému, nech ho nainštaluje."
#: templates/settings.php:3
msgid "External Storage"
@@ -101,7 +102,7 @@ msgid "Users"
msgstr "Užívatelia"
#: templates/settings.php:108 templates/settings.php:109
-#: templates/settings.php:149 templates/settings.php:150
+#: templates/settings.php:144 templates/settings.php:145
msgid "Delete"
msgstr "Odstrániť"
@@ -113,10 +114,10 @@ msgstr "Povoliť externé úložisko"
msgid "Allow users to mount their own external storage"
msgstr "Povoliť užívateľom pripojiť ich vlastné externé úložisko"
-#: templates/settings.php:139
+#: templates/settings.php:136
msgid "SSL root certificates"
msgstr "Koreňové SSL certifikáty"
-#: templates/settings.php:158
+#: templates/settings.php:153
msgid "Import Root Certificate"
msgstr "Importovať koreňový certifikát"
diff --git a/l10n/sk_SK/files_trashbin.po b/l10n/sk_SK/files_trashbin.po
new file mode 100644
index 00000000000..8615310fbc8
--- /dev/null
+++ b/l10n/sk_SK/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk_SK\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/sk_SK/settings.po b/l10n/sk_SK/settings.po
index 74bc6b025bb..f5d4cc18d72 100644
--- a/l10n/sk_SK/settings.po
+++ b/l10n/sk_SK/settings.po
@@ -13,8 +13,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
"MIME-Version: 1.0\n"
@@ -234,7 +234,7 @@ msgstr "Vyvinuté <a href=\"http://ownCloud.org/contact\" target=\"_blank\">komu
#: templates/users.php:21 templates/users.php:79
msgid "Login Name"
-msgstr ""
+msgstr "Prihlasovacie meno"
#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
@@ -258,7 +258,7 @@ msgstr "Iné"
#: templates/users.php:80
msgid "Display Name"
-msgstr ""
+msgstr "Zobrazované meno"
#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
@@ -268,6 +268,14 @@ msgstr "Správca skupiny"
msgid "Storage"
msgstr "Úložisko"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "Predvolené"
diff --git a/l10n/sk_SK/user_ldap.po b/l10n/sk_SK/user_ldap.po
index 497fea635a1..e3c65fc426a 100644
--- a/l10n/sk_SK/user_ldap.po
+++ b/l10n/sk_SK/user_ldap.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Marián Hvolka <marian.hvolka@stuba.sk>, 2013.
# Roman Priesol <roman@priesol.net>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-16 00:19+0100\n"
-"PO-Revision-Date: 2013-01-15 23:20+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 06:20+0000\n"
+"Last-Translator: mhh <marian.hvolka@stuba.sk>\n"
"Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -23,13 +24,13 @@ msgid ""
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may"
" experience unexpected behaviour. Please ask your system administrator to "
"disable one of them."
-msgstr ""
+msgstr "<b>Upozornenie:</b> Aplikácie user_ldap a user_webdavauth nie sú kompatibilné. Môže nastávaÅ¥ neoÄakávané správanie. Požiadajte správcu systému aby jednu z nich zakázal."
#: templates/settings.php:11
msgid ""
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not "
"work. Please ask your system administrator to install it."
-msgstr ""
+msgstr "<b>Upozornenie:</b> nie je nainštalovaný LDAP modul pre PHP, backend vrstva nebude fungovať. Požádejte správcu systému aby ho nainštaloval."
#: templates/settings.php:15
msgid "Host"
@@ -46,7 +47,7 @@ msgstr "Základné DN"
#: templates/settings.php:16
msgid "One Base DN per line"
-msgstr ""
+msgstr "Jedno základné DN na riadok"
#: templates/settings.php:16
msgid "You can specify Base DN for users and groups in the Advanced tab"
@@ -121,7 +122,7 @@ msgstr "Základný používateľský strom"
#: templates/settings.php:25
msgid "One User Base DN per line"
-msgstr ""
+msgstr "Jedna používateľská základná DN na riadok"
#: templates/settings.php:26
msgid "Base Group Tree"
@@ -129,7 +130,7 @@ msgstr "Základný skupinový strom"
#: templates/settings.php:26
msgid "One Group Base DN per line"
-msgstr ""
+msgstr "Jedna skupinová základná DN na riadok"
#: templates/settings.php:27
msgid "Group-Member association"
diff --git a/l10n/sk_SK/user_webdavauth.po b/l10n/sk_SK/user_webdavauth.po
index 4e77a87a392..b3a30b89ca6 100644
--- a/l10n/sk_SK/user_webdavauth.po
+++ b/l10n/sk_SK/user_webdavauth.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 16:01+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 08:31+0000\n"
"Last-Translator: mhh <marian.hvolka@stuba.sk>\n"
"Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
"MIME-Version: 1.0\n"
@@ -32,4 +32,4 @@ msgid ""
"ownCloud will send the user credentials to this URL. This plugin checks the "
"response and will interpret the HTTP statuscodes 401 and 403 as invalid "
"credentials, and all other responses as valid credentials."
-msgstr "ownCloud odoÅ¡le používateľské údajena zadanú URL. Plugin skontroluje odpoveÄ a považuje návratovou hodnotu HTTP 401 a 403 za neplatné údaje a vÅ¡etky ostatné hodnoty ako platné prihlasovacie údaje."
+msgstr "ownCloud odoÅ¡le používateľské údaje na zadanú URL. Plugin skontroluje odpoveÄ a považuje návratovú hodnotu HTTP 401 a 403 za neplatné údaje a vÅ¡etky ostatné hodnoty ako platné prihlasovacie údaje."
diff --git a/l10n/sl/core.po b/l10n/sl/core.po
index e489f98a6c9..c1774ede61b 100644
--- a/l10n/sl/core.po
+++ b/l10n/sl/core.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
"MIME-Version: 1.0\n"
@@ -256,7 +256,7 @@ msgstr "Zahtevana datoteka {file} ni nameÅ¡Äena!"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Souporaba"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/sl/files.po b/l10n/sl/files.po
index 2302abc5376..dec7d656901 100644
--- a/l10n/sl/files.po
+++ b/l10n/sl/files.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
"MIME-Version: 1.0\n"
@@ -21,20 +21,6 @@ msgstr ""
"Language: sl\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Nobena datoteka ni naložena. Neznana napaka."
@@ -70,11 +56,11 @@ msgstr "Manjka zaÄasna mapa"
msgid "Failed to write to disk"
msgstr "Pisanje na disk je spodletelo"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -82,15 +68,15 @@ msgstr ""
msgid "Files"
msgstr "Datoteke"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Odstrani iz souporabe"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Izbriši"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Preimenuj"
@@ -114,7 +100,7 @@ msgstr "prekliÄi"
msgid "replaced {new_name}"
msgstr "zamenjano je ime {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "razveljavi"
@@ -122,13 +108,9 @@ msgstr "razveljavi"
msgid "replaced {new_name} with {old_name}"
msgstr "zamenjano ime {new_name} z imenom {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "odstranjeno iz souporabe {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "izbrisano {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -152,86 +134,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "PoÅ¡iljanje ni mogoÄe, saj gre za mapo, ali pa je datoteka velikosti 0 bajtov."
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Napaka med nalaganjem"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Zapri"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "V Äakanju ..."
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "Pošiljanje 1 datoteke"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "nalagam {count} datotek"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Pošiljanje je preklicano."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "V teku je pošiljanje datoteke. Če zapustite to stran zdaj, bo pošiljanje preklicano."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "Naslov URL ne sme biti prazen."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} files scanned"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "napaka med pregledovanjem datotek"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Ime"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Velikost"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Spremenjeno"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 mapa"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} map"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 datoteka"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} datotek"
@@ -287,32 +261,40 @@ msgstr "Mapa"
msgid "From link"
msgstr "Iz povezave"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "PrekliÄi poÅ¡iljanje"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Tukaj ni niÄesar. Naložite kaj!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Prejmi"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Nalaganje ni mogoÄe, ker je preveliko"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Datoteke, ki jih želite naložiti, presegajo najveÄjo dovoljeno velikost na tem strežniku."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Poteka preuÄevanje datotek, poÄakajte ..."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Trenutno poteka preuÄevanje"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/sl/files_trashbin.po b/l10n/sl/files_trashbin.po
new file mode 100644
index 00000000000..102ce0e9eb6
--- /dev/null
+++ b/l10n/sl/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sl\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/sl/settings.po b/l10n/sl/settings.po
index 225f4e3a203..c9d12a2351b 100644
--- a/l10n/sl/settings.po
+++ b/l10n/sl/settings.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
"MIME-Version: 1.0\n"
@@ -266,6 +266,14 @@ msgstr "Skrbnik skupine"
msgid "Storage"
msgstr "Shramba"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "Privzeto"
diff --git a/l10n/sr/core.po b/l10n/sr/core.po
index 80d0ec2de4f..b28eef045f0 100644
--- a/l10n/sr/core.po
+++ b/l10n/sr/core.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
"MIME-Version: 1.0\n"
@@ -255,7 +255,7 @@ msgstr "Потребна датотека {file} није инÑталирана
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Дељење"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/sr/files.po b/l10n/sr/files.po
index 06cef3e3222..0d4505ebefc 100644
--- a/l10n/sr/files.po
+++ b/l10n/sr/files.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
"MIME-Version: 1.0\n"
@@ -20,20 +20,6 @@ msgstr ""
"Language: sr\n"
"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);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr ""
@@ -69,11 +55,11 @@ msgstr "ÐедоÑтаје привремена фаÑцикла"
msgid "Failed to write to disk"
msgstr "Ðе могу да пишем на диÑк"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -81,15 +67,15 @@ msgstr ""
msgid "Files"
msgstr "Датотеке"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Укини дељење"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Обриши"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Преименуј"
@@ -113,7 +99,7 @@ msgstr "откажи"
msgid "replaced {new_name}"
msgstr "замењено {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "опозови"
@@ -121,13 +107,9 @@ msgstr "опозови"
msgid "replaced {new_name} with {old_name}"
msgstr "замењено {new_name} Ñа {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "укинуто дељење {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "обриÑано {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -151,86 +133,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Ðе могу да отпремим датотеку као фаÑциклу или она има 0 бајтова"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Грешка при отпремању"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Затвори"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Ðа чекању"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "Отпремам 1 датотеку"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "Отпремам {count} датотеке/а"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Отпремање је прекинуто."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Отпремање датотеке је у току. Ðко Ñада напуÑтите Ñтраницу, прекинућете отпремање."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "Скенирано датотека: {count}"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "грешка при Ñкенирању"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Ðазив"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Величина"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Измењено"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 фаÑцикла"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} фаÑцикле/и"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 датотека"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} датотеке/а"
@@ -286,32 +260,40 @@ msgstr "фаÑцикла"
msgid "From link"
msgstr "Са везе"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Прекини отпремање"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Овде нема ничег. Отпремите нешто!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Преузми"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Датотека је превелика"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Датотеке које желите да отпремите прелазе ограничење у величини."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Скенирам датотеке…"
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Тренутно Ñкенирање"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/sr/files_trashbin.po b/l10n/sr/files_trashbin.po
new file mode 100644
index 00000000000..4841b50b031
--- /dev/null
+++ b/l10n/sr/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sr\n"
+"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);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/sr/settings.po b/l10n/sr/settings.po
index 2d04a031388..02c0627b45c 100644
--- a/l10n/sr/settings.po
+++ b/l10n/sr/settings.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
"MIME-Version: 1.0\n"
@@ -264,6 +264,14 @@ msgstr "Управник групе"
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/sr@latin/files.po b/l10n/sr@latin/files.po
index baa78945561..73873acd218 100644
--- a/l10n/sr@latin/files.po
+++ b/l10n/sr@latin/files.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
"MIME-Version: 1.0\n"
@@ -18,20 +18,6 @@ msgstr ""
"Language: sr@latin\n"
"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);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr ""
@@ -67,11 +53,11 @@ msgstr "Nedostaje privremena fascikla"
msgid "Failed to write to disk"
msgstr ""
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -79,15 +65,15 @@ msgstr ""
msgid "Files"
msgstr "Fajlovi"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr ""
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Obriši"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr ""
@@ -111,7 +97,7 @@ msgstr ""
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr ""
@@ -119,12 +105,8 @@ msgstr ""
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:288
-msgid "deleted {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
msgstr ""
#: js/files.js:52
@@ -149,86 +131,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr ""
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Zatvori"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr ""
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr ""
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Ime"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "VeliÄina"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Zadnja izmena"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr ""
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr ""
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr ""
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr ""
@@ -284,32 +258,40 @@ msgstr ""
msgid "From link"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr ""
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Ovde nema niÄeg. PoÅ¡aljite neÅ¡to!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Preuzmi"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Pošiljka je prevelika"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Fajlovi koje želite da poÅ¡aljete prevazilaze ograniÄenje maksimalne veliÄine poÅ¡iljke na ovom serveru."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr ""
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/sr@latin/files_trashbin.po b/l10n/sr@latin/files_trashbin.po
new file mode 100644
index 00000000000..c7c81a1d61b
--- /dev/null
+++ b/l10n/sr@latin/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sr@latin\n"
+"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);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/sr@latin/settings.po b/l10n/sr@latin/settings.po
index e22f8796d29..da806c71a99 100644
--- a/l10n/sr@latin/settings.po
+++ b/l10n/sr@latin/settings.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
"MIME-Version: 1.0\n"
@@ -263,6 +263,14 @@ msgstr ""
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/sv/core.po b/l10n/sv/core.po
index 0df2d492ca5..71a6c4faec7 100644
--- a/l10n/sv/core.po
+++ b/l10n/sv/core.po
@@ -14,8 +14,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
"MIME-Version: 1.0\n"
@@ -259,11 +259,11 @@ msgstr "Den nödvändiga filen {file} är inte installerad!"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Dela"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
-msgstr ""
+msgstr "Delad"
#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
diff --git a/l10n/sv/files.po b/l10n/sv/files.po
index 8ad64f646e8..9d76f3178fc 100644
--- a/l10n/sv/files.po
+++ b/l10n/sv/files.po
@@ -14,9 +14,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 09:25+0000\n"
-"Last-Translator: Lokal_Profil <lokal_profil@hotmail.com>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -24,20 +24,6 @@ msgstr ""
"Language: sv\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "Kunde inte flytta %s - Det finns redan en fil med detta namn"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "Kan inte flytta %s"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "Kan inte byta namn på filen"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Ingen fil uppladdad. Okänt fel"
@@ -73,11 +59,11 @@ msgstr "Saknar en tillfällig mapp"
msgid "Failed to write to disk"
msgstr "Misslyckades spara till disk"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr "Inte tillräckligt med lagringsutrymme tillgängligt"
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "Inte tillräckligt med utrymme tillgängligt"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Felaktig mapp."
@@ -85,15 +71,15 @@ msgstr "Felaktig mapp."
msgid "Files"
msgstr "Filer"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Sluta dela"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Radera"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Byt namn"
@@ -117,7 +103,7 @@ msgstr "avbryt"
msgid "replaced {new_name}"
msgstr "ersatt {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "Ã¥ngra"
@@ -125,13 +111,9 @@ msgstr "Ã¥ngra"
msgid "replaced {new_name} with {old_name}"
msgstr "ersatt {new_name} med {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "stoppad delning {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "raderade {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -155,86 +137,78 @@ msgstr "Ditt lagringsutrymme är fullt, filer kan ej längre laddas upp eller sy
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr "Ditt lagringsutrymme är nästan fullt ({usedSpacePercent}%)"
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "Din nedladdning förbereds. Det kan ta tid om det är stora filer."
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Kunde inte ladda upp dina filer eftersom det antingen är en mapp eller har 0 bytes."
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Uppladdningsfel"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Stäng"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Väntar"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 filuppladdning"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} filer laddas upp"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Uppladdning avbruten."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URL kan inte vara tom."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Ogiltigt mappnamn. Användande av 'Shared' är reserverat av ownCloud"
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} filer skannade"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "fel vid skanning"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Namn"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Storlek"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Ändrad"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 mapp"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} mappar"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 fil"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} filer"
@@ -290,32 +264,40 @@ msgstr "Mapp"
msgid "From link"
msgstr "Från länk"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Avbryt uppladdning"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Ingenting här. Ladda upp något!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Ladda ner"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "För stor uppladdning"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Filerna du försöker ladda upp överstiger den maximala storleken för filöverföringar på servern."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Filer skannas, var god vänta"
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Aktuell skanning"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr "Uppgraderar filsystemets cache..."
diff --git a/l10n/sv/files_trashbin.po b/l10n/sv/files_trashbin.po
new file mode 100644
index 00000000000..0e87cb89c01
--- /dev/null
+++ b/l10n/sv/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sv\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/sv/settings.po b/l10n/sv/settings.po
index 3b39b6e2312..eef6b683428 100644
--- a/l10n/sv/settings.po
+++ b/l10n/sv/settings.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# André <lokal_profil@hotmail.com>, 2013.
# Christer Eriksson <post@hc3web.com>, 2012.
# Daniel Sandman <revoltism@gmail.com>, 2012.
# <hakan.thn@gmail.com>, 2011.
@@ -15,9 +16,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 02:00+0000\n"
+"Last-Translator: Lokal_Profil <lokal_profil@hotmail.com>\n"
"Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -236,7 +237,7 @@ msgstr "Utvecklad av <a href=\"http://ownCloud.org/contact\" target=\"_blank\">o
#: templates/users.php:21 templates/users.php:79
msgid "Login Name"
-msgstr ""
+msgstr "Inloggningsnamn"
#: templates/users.php:26 templates/users.php:82 templates/users.php:107
msgid "Groups"
@@ -260,7 +261,7 @@ msgstr "Annat"
#: templates/users.php:80
msgid "Display Name"
-msgstr ""
+msgstr "Visat namn"
#: templates/users.php:84 templates/users.php:121
msgid "Group Admin"
@@ -270,6 +271,14 @@ msgstr "Gruppadministratör"
msgid "Storage"
msgstr "Lagring"
+#: templates/users.php:97
+msgid "change display name"
+msgstr "ändra visat namn"
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr "ange nytt lösenord"
+
#: templates/users.php:137
msgid "Default"
msgstr "Förvald"
diff --git a/l10n/ta_LK/core.po b/l10n/ta_LK/core.po
index ec703bdcd4e..acdbe5f39a9 100644
--- a/l10n/ta_LK/core.po
+++ b/l10n/ta_LK/core.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
"MIME-Version: 1.0\n"
@@ -253,7 +253,7 @@ msgstr "தேவைபà¯à®ªà®Ÿà¯à®Ÿ கோபà¯à®ªà¯ {கோபà¯à®ªà¯} à
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "பகிரà¯à®µà¯"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/ta_LK/files.po b/l10n/ta_LK/files.po
index 9f5d785083a..c88cea4b33a 100644
--- a/l10n/ta_LK/files.po
+++ b/l10n/ta_LK/files.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
"MIME-Version: 1.0\n"
@@ -18,20 +18,6 @@ msgstr ""
"Language: ta_LK\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "ஒர௠கோபà¯à®ªà¯à®®à¯ பதிவேறà¯à®±à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ. அறியபà¯à®ªà®Ÿà®¾à®¤ வழà¯"
@@ -67,11 +53,11 @@ msgstr "ஒர௠தறà¯à®•à®¾à®²à®¿à®•à®®à®¾à®© கோபà¯à®ªà¯à®±à¯ˆà®¯à
msgid "Failed to write to disk"
msgstr "வடà¯à®Ÿà®¿à®²à¯ எழà¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -79,15 +65,15 @@ msgstr ""
msgid "Files"
msgstr "கோபà¯à®ªà¯à®•à®³à¯"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "பகிரபà¯à®ªà®Ÿà®¾à®¤à®¤à¯"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "அழிகà¯à®•"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "பெயரà¯à®®à®¾à®±à¯à®±à®®à¯"
@@ -111,7 +97,7 @@ msgstr "இரதà¯à®¤à¯ செயà¯à®•"
msgid "replaced {new_name}"
msgstr "மாறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯ {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "à®®à¯à®©à¯ செயல௠நீகà¯à®•à®®à¯ "
@@ -119,13 +105,9 @@ msgstr "à®®à¯à®©à¯ செயல௠நீகà¯à®•à®®à¯ "
msgid "replaced {new_name} with {old_name}"
msgstr "{new_name} ஆனத௠{old_name} இனால௠மாறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "பகிரபà¯à®ªà®Ÿà®¾à®¤à®¤à¯ {கோபà¯à®ªà¯à®•à®³à¯}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "நீகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯ {கோபà¯à®ªà¯à®•à®³à¯}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -149,86 +131,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "அடைவ௠அலà¯à®²à®¤à¯ 0 bytes ஠கொணà¯à®Ÿà¯à®³à¯à®³à®¤à®¾à®²à¯ உஙà¯à®•à®³à¯à®Ÿà¯ˆà®¯ கோபà¯à®ªà¯ˆ பதிவேறà¯à®± à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "பதிவேறà¯à®±à®²à¯ வழà¯"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "மூடà¯à®•"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "நிலà¯à®µà¯ˆà®¯à®¿à®²à¯à®³à¯à®³"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 கோபà¯à®ªà¯ பதிவேறà¯à®±à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{எணà¯à®£à®¿à®•à¯à®•à¯ˆ} கோபà¯à®ªà¯à®•à®³à¯ பதிவேறà¯à®±à®ªà¯à®ªà®Ÿà¯à®•à®¿à®©à¯à®±à®¤à¯"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "பதிவேறà¯à®±à®²à¯ இரதà¯à®¤à¯ செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "கோபà¯à®ªà¯ பதிவேறà¯à®±à®®à¯ செயலà¯à®ªà®¾à®Ÿà¯à®Ÿà®¿à®²à¯ உளà¯à®³à®¤à¯. இநà¯à®¤à®ªà¯ பகà¯à®•à®¤à¯à®¤à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ வெறியேறà¯à®µà®¤à®¾à®©à®¤à¯ பதிவேறà¯à®±à®²à¯ˆ இரதà¯à®¤à¯ செயà¯à®¯à¯à®®à¯."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URL வெறà¯à®®à¯ˆà®¯à®¾à®• இரà¯à®•à¯à®•à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{எணà¯à®£à®¿à®•à¯à®•à¯ˆ} கோபà¯à®ªà¯à®•à®³à¯ வரà¯à®Ÿà®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "வரà¯à®Ÿà¯à®®à¯ போதான வழà¯"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "பெயரà¯"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "அளவà¯"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "மாறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 கோபà¯à®ªà¯à®±à¯ˆ"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{எணà¯à®£à®¿à®•à¯à®•à¯ˆ} கோபà¯à®ªà¯à®±à¯ˆà®•à®³à¯"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 கோபà¯à®ªà¯"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{எணà¯à®£à®¿à®•à¯à®•à¯ˆ} கோபà¯à®ªà¯à®•à®³à¯"
@@ -284,32 +258,40 @@ msgstr "கோபà¯à®ªà¯à®±à¯ˆ"
msgid "From link"
msgstr "இணைபà¯à®ªà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "பதிவேறà¯à®±à®²à¯ˆ இரதà¯à®¤à¯ செயà¯à®•"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "இஙà¯à®•à¯ ஒனà¯à®±à¯à®®à¯ இலà¯à®²à¯ˆ. à®à®¤à®¾à®µà®¤à¯ பதிவேறà¯à®±à¯à®•!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "பதிவிறகà¯à®•à¯à®•"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "பதிவேறà¯à®±à®²à¯ மிகபà¯à®ªà¯†à®°à®¿à®¯à®¤à¯"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "நீஙà¯à®•à®³à¯ பதிவேறà¯à®± à®®à¯à®¯à®±à¯à®šà®¿à®•à¯à®•à¯à®®à¯ கோபà¯à®ªà¯à®•à®³à®¾à®©à®¤à¯ இநà¯à®¤ சேவையகதà¯à®¤à®¿à®²à¯ கோபà¯à®ªà¯ பதிவேறà¯à®±à®•à¯à®•à¯‚டிய ஆககà¯à®•à¯‚டிய அளவிலà¯à®®à¯ கூடியதà¯."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "கோபà¯à®ªà¯à®•à®³à¯ வரà¯à®Ÿà®ªà¯à®ªà®Ÿà¯à®•à®¿à®©à¯à®±à®©, தயவà¯à®šà¯†à®¯à¯à®¤à¯ காதà¯à®¤à®¿à®°à¯à®™à¯à®•à®³à¯."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "தறà¯à®ªà¯‹à®¤à¯ வரà¯à®Ÿà®ªà¯à®ªà®Ÿà¯à®ªà®µà¯ˆ"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/ta_LK/files_trashbin.po b/l10n/ta_LK/files_trashbin.po
new file mode 100644
index 00000000000..6699d6ca960
--- /dev/null
+++ b/l10n/ta_LK/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ta_LK\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/ta_LK/settings.po b/l10n/ta_LK/settings.po
index 9853ea2645c..2aaf1554459 100644
--- a/l10n/ta_LK/settings.po
+++ b/l10n/ta_LK/settings.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
"MIME-Version: 1.0\n"
@@ -263,6 +263,14 @@ msgstr "கà¯à®´à¯ நிரà¯à®µà®¾à®•à®¿"
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot
index 459384f62ca..f045b7f0344 100644
--- a/l10n/templates/core.pot
+++ b/l10n/templates/core.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot
index 385f79bc971..c85bf1abbef 100644
--- a/l10n/templates/files.pot
+++ b/l10n/templates/files.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,20 +17,6 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr ""
@@ -66,11 +52,11 @@ msgstr ""
msgid "Failed to write to disk"
msgstr ""
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -78,15 +64,15 @@ msgstr ""
msgid "Files"
msgstr ""
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr ""
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr ""
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr ""
@@ -110,7 +96,7 @@ msgstr ""
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr ""
@@ -118,12 +104,8 @@ msgstr ""
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:288
-msgid "deleted {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
msgstr ""
#: js/files.js:52
@@ -148,86 +130,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr ""
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr ""
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr ""
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr ""
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr ""
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr ""
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr ""
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr ""
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr ""
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr ""
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr ""
@@ -283,32 +257,40 @@ msgstr ""
msgid "From link"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr ""
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr ""
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr ""
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr ""
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr ""
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot
index ce76225fda2..c417aac9728 100644
--- a/l10n/templates/files_encryption.pot
+++ b/l10n/templates/files_encryption.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot
index a46c86e0b65..61d11f8c814 100644
--- a/l10n/templates/files_external.pot
+++ b/l10n/templates/files_external.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -25,11 +25,11 @@ msgstr ""
msgid "Error configuring Dropbox storage"
msgstr ""
-#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40
+#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:41
msgid "Grant access"
msgstr ""
-#: js/dropbox.js:73 js/google.js:72
+#: js/dropbox.js:73 js/google.js:73
msgid "Fill out all required fields"
msgstr ""
@@ -37,17 +37,17 @@ msgstr ""
msgid "Please provide a valid Dropbox app key and secret."
msgstr ""
-#: js/google.js:26 js/google.js:73 js/google.js:78
+#: js/google.js:26 js/google.js:74 js/google.js:79
msgid "Error configuring Google Drive storage"
msgstr ""
-#: lib/config.php:434
+#: lib/config.php:405
msgid ""
"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
"is not possible. Please ask your system administrator to install it."
msgstr ""
-#: lib/config.php:435
+#: lib/config.php:406
msgid ""
"<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 "
diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot
index fa7fe278295..faa73d04bf1 100644
--- a/l10n/templates/files_sharing.pot
+++ b/l10n/templates/files_sharing.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot
new file mode 100644
index 00000000000..b9480bd03c7
--- /dev/null
+++ b/l10n/templates/files_trashbin.pot
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot
index 5af79d543f4..fde4a367dc0 100644
--- a/l10n/templates/files_versions.pot
+++ b/l10n/templates/files_versions.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot
index 01f7eb678c0..b8c44b6184b 100644
--- a/l10n/templates/lib.pot
+++ b/l10n/templates/lib.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -41,23 +41,23 @@ msgstr ""
msgid "Admin"
msgstr ""
-#: files.php:365
+#: files.php:202
msgid "ZIP download is turned off."
msgstr ""
-#: files.php:366
+#: files.php:203
msgid "Files need to be downloaded one by one."
msgstr ""
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
msgid "Back to Files"
msgstr ""
-#: files.php:390
+#: files.php:227
msgid "Selected files too large to generate zip file."
msgstr ""
-#: helper.php:229
+#: helper.php:226
msgid "couldn't be determined"
msgstr ""
diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot
index c07b99aab76..37e3dd004a7 100644
--- a/l10n/templates/settings.pot
+++ b/l10n/templates/settings.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -262,6 +262,14 @@ msgstr ""
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot
index 002852e202d..5ad61de25c4 100644
--- a/l10n/templates/user_ldap.pot
+++ b/l10n/templates/user_ldap.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot
index 4687e50a638..d6f4d1f018a 100644
--- a/l10n/templates/user_webdavauth.pot
+++ b/l10n/templates/user_webdavauth.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/th_TH/core.po b/l10n/th_TH/core.po
index e218f60d9af..15c2ea22914 100644
--- a/l10n/th_TH/core.po
+++ b/l10n/th_TH/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
"MIME-Version: 1.0\n"
@@ -254,7 +254,7 @@ msgstr "ไฟล์ {file} ซึ่งเป็นไฟล์ที่จำà
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "à¹à¸Šà¸£à¹Œ"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/th_TH/files.po b/l10n/th_TH/files.po
index 3bde97a7e04..f6d46e93f2d 100644
--- a/l10n/th_TH/files.po
+++ b/l10n/th_TH/files.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 17:20+0000\n"
-"Last-Translator: AriesAnywhere Anywhere <ariesanywhere@gmail.com>\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,20 +19,6 @@ msgstr ""
"Language: th_TH\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "ไม่สามารถย้าย %s ได้ - ไฟล์ที่ใช้ชื่อนี้มีอยู่à¹à¸¥à¹‰à¸§"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "ไม่สามารถย้าย %s ได้"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "ไม่สามารถเปลี่ยนชื่อไฟล์ได้"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "ยังไม่มีไฟล์ใดที่ถูà¸à¸­à¸±à¸žà¹‚หลด เà¸à¸´à¸”ข้อผิดพลาดที่ไม่ทราบสาเหตุ"
@@ -68,11 +54,11 @@ msgstr "à¹à¸Ÿà¹‰à¸¡à¹€à¸­à¸à¸ªà¸²à¸£à¸Šà¸±à¹ˆà¸§à¸„ราวเà¸à¸´à¸”à¸à¸²
msgid "Failed to write to disk"
msgstr "เขียนข้อมูลลงà¹à¸œà¹ˆà¸™à¸”ิสà¸à¹Œà¸¥à¹‰à¸¡à¹€à¸«à¸¥à¸§"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr "เหลือพื้นที่ไม่เพียงสำหรับใช้งาน"
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "มีพื้นที่เหลือไม่เพียงพอ"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "ไดเร็à¸à¸—อรี่ไม่ถูà¸à¸•à¹‰à¸­à¸‡"
@@ -80,15 +66,15 @@ msgstr "ไดเร็à¸à¸—อรี่ไม่ถูà¸à¸•à¹‰à¸­à¸‡"
msgid "Files"
msgstr "ไฟล์"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹à¸Šà¸£à¹Œà¸‚้อมูล"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "ลบ"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "เปลี่ยนชื่อ"
@@ -112,7 +98,7 @@ msgstr "ยà¸à¹€à¸¥à¸´à¸"
msgid "replaced {new_name}"
msgstr "à¹à¸—นที่ {new_name} à¹à¸¥à¹‰à¸§"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "เลิà¸à¸—ำ"
@@ -120,13 +106,9 @@ msgstr "เลิà¸à¸—ำ"
msgid "replaced {new_name} with {old_name}"
msgstr "à¹à¸—นที่ {new_name} ด้วย {old_name} à¹à¸¥à¹‰à¸§"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹à¸Šà¸£à¹Œà¹à¸¥à¹‰à¸§ {files} ไฟล์"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "ลบไฟล์à¹à¸¥à¹‰à¸§ {files} ไฟล์"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -150,86 +132,78 @@ msgstr "พื้นที่จัดเà¸à¹‡à¸šà¸‚้อมูลของค
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr "พื้นที่จัดเà¸à¹‡à¸šà¸‚้อมูลของคุณใà¸à¸¥à¹‰à¹€à¸•à¹‡à¸¡à¹à¸¥à¹‰à¸§ ({usedSpacePercent}%)"
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "à¸à¸³à¸¥à¸±à¸‡à¹€à¸•à¸£à¸µà¸¢à¸¡à¸”าวน์โหลดข้อมูล หาà¸à¹„ฟล์มีขนาดใหà¸à¹ˆ อาจใช้เวลาสัà¸à¸„รู่"
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "ไม่สามารถอัพโหลดไฟล์ของคุณได้ เนื่องจาà¸à¹„ฟล์ดังà¸à¸¥à¹ˆà¸²à¸§à¹€à¸›à¹‡à¸™à¹„ดเร็à¸à¸—อรี่หรือมีขนาด 0 ไบต์"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸­à¸±à¸žà¹‚หลด"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "ปิด"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "อยู่ระหว่างดำเนินà¸à¸²à¸£"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "à¸à¸³à¸¥à¸±à¸‡à¸­à¸±à¸žà¹‚หลดไฟล์ 1 ไฟล์"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "à¸à¸³à¸¥à¸±à¸‡à¸­à¸±à¸žà¹‚หลด {count} ไฟล์"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "à¸à¸²à¸£à¸­à¸±à¸žà¹‚หลดถูà¸à¸¢à¸à¹€à¸¥à¸´à¸"
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "à¸à¸²à¸£à¸­à¸±à¸žà¹‚หลดไฟล์à¸à¸³à¸¥à¸±à¸‡à¸­à¸¢à¸¹à¹ˆà¹ƒà¸™à¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡à¸”ำเนินà¸à¸²à¸£ à¸à¸²à¸£à¸­à¸­à¸à¸ˆà¸²à¸à¸«à¸™à¹‰à¸²à¹€à¸§à¹‡à¸šà¸™à¸µà¹‰à¸ˆà¸°à¸—ำให้à¸à¸²à¸£à¸­à¸±à¸žà¹‚หลดถูà¸à¸¢à¸à¹€à¸¥à¸´à¸"
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URL ไม่สามารถเว้นว่างได้"
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "ชื่อโฟลเดอร์ไม่ถูà¸à¸•à¹‰à¸­à¸‡ à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ 'à¹à¸Šà¸£à¹Œ' สงวนไว้สำหรับ Owncloud เท่านั้น"
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "สà¹à¸à¸™à¹„ฟล์à¹à¸¥à¹‰à¸§ {count} ไฟล์"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "พบข้อผิดพลาดในระหว่างà¸à¸²à¸£à¸ªà¹à¸à¸™à¹„ฟล์"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "ชื่อ"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "ขนาด"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "ปรับปรุงล่าสุด"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 โฟลเดอร์"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} โฟลเดอร์"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 ไฟล์"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} ไฟล์"
@@ -285,32 +259,40 @@ msgstr "à¹à¸Ÿà¹‰à¸¡à¹€à¸­à¸à¸ªà¸²à¸£"
msgid "From link"
msgstr "จาà¸à¸¥à¸´à¸‡à¸à¹Œ"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸­à¸±à¸žà¹‚หลด"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "ยังไม่มีไฟล์ใดๆอยู่ที่นี่ à¸à¸£à¸¸à¸“าอัพโหลดไฟล์!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "ดาวน์โหลด"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "ไฟล์ที่อัพโหลดมีขนาดใหà¸à¹ˆà¹€à¸à¸´à¸™à¹„ป"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "ไฟล์ที่คุณพยายามที่จะอัพโหลดมีขนาดเà¸à¸´à¸™à¸à¸§à¹ˆà¸²à¸‚นาดสูงสุดที่à¸à¸³à¸«à¸™à¸”ไว้ให้อัพโหลดได้สำหรับเซิร์ฟเวอร์นี้"
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "ไฟล์à¸à¸³à¸¥à¸±à¸‡à¸­à¸¢à¸¹à¹ˆà¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡à¸à¸²à¸£à¸ªà¹à¸à¸™, à¸à¸£à¸¸à¸“ารอสัà¸à¸„รู่."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "ไฟล์ที่à¸à¸³à¸¥à¸±à¸‡à¸ªà¹à¸à¸™à¸­à¸¢à¸¹à¹ˆà¸‚ณะนี้"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/th_TH/files_trashbin.po b/l10n/th_TH/files_trashbin.po
new file mode 100644
index 00000000000..d9dc1b0c7ac
--- /dev/null
+++ b/l10n/th_TH/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: th_TH\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/th_TH/settings.po b/l10n/th_TH/settings.po
index 238a91cd1dc..13466b5fa06 100644
--- a/l10n/th_TH/settings.po
+++ b/l10n/th_TH/settings.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
"MIME-Version: 1.0\n"
@@ -265,6 +265,14 @@ msgstr "ผู้ดูà¹à¸¥à¸à¸¥à¸¸à¹ˆà¸¡"
msgid "Storage"
msgstr "พื้นที่จัดเà¸à¹‡à¸šà¸‚้อมูล"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "ค่าเริ่มต้น"
diff --git a/l10n/tr/core.po b/l10n/tr/core.po
index 1f3b9f92bc3..e6a8df2a9ad 100644
--- a/l10n/tr/core.po
+++ b/l10n/tr/core.po
@@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
"MIME-Version: 1.0\n"
@@ -257,7 +257,7 @@ msgstr "İhtiyaç duyulan {file} dosyası kurulu değil."
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "PaylaÅŸ"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/tr/files.po b/l10n/tr/files.po
index c6e1b108a7c..773605dbba6 100644
--- a/l10n/tr/files.po
+++ b/l10n/tr/files.po
@@ -13,8 +13,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
"MIME-Version: 1.0\n"
@@ -23,20 +23,6 @@ msgstr ""
"Language: tr\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "%s taşınamadı. Bu isimde dosya zaten var."
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "%s taşınamadı"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "Dosya adı değiştirilemedi"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Dosya yüklenmedi. Bilinmeyen hata"
@@ -72,11 +58,11 @@ msgstr "Geçici bir klasör eksik"
msgid "Failed to write to disk"
msgstr "Diske yazılamadı"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr ""
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "Yeterli disk alanı yok"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "Geçersiz dizin."
@@ -84,15 +70,15 @@ msgstr "Geçersiz dizin."
msgid "Files"
msgstr "Dosyalar"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Paylaşılmayan"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Sil"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Ä°sim deÄŸiÅŸtir."
@@ -116,7 +102,7 @@ msgstr "iptal"
msgid "replaced {new_name}"
msgstr "deÄŸiÅŸtirilen {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "geri al"
@@ -124,13 +110,9 @@ msgstr "geri al"
msgid "replaced {new_name} with {old_name}"
msgstr "{new_name} ismi {old_name} ile deÄŸiÅŸtirildi"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "paylaşılmamış {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "silinen {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -154,86 +136,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "İndirmeniz hazırlanıyor. Dosya büyük ise biraz zaman alabilir."
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Dosyanızın boyutu 0 byte olduğundan veya bir dizin olduğundan yüklenemedi"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Yükleme hatası"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Kapat"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Bekliyor"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 dosya yüklendi"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} dosya yükleniyor"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Yükleme iptal edildi."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Dosya yükleme işlemi sürüyor. Şimdi sayfadan ayrılırsanız işleminiz iptal olur."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URL boÅŸ olamaz."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "Geçersiz dizin adı. Shared isminin kullanımı Owncloud tarafından rezerver edilmiştir."
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} dosya tarandı"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "tararamada hata oluÅŸdu"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Ad"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Boyut"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "DeÄŸiÅŸtirilme"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 dizin"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} dizin"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 dosya"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} dosya"
@@ -289,32 +263,40 @@ msgstr "Klasör"
msgid "From link"
msgstr "Bağlantıdan"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Yüklemeyi iptal et"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Burada hiçbir şey yok. Birşeyler yükleyin!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Ä°ndir"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Yüklemeniz çok büyük"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Yüklemeye çalıştığınız dosyalar bu sunucudaki maksimum yükleme boyutunu aşıyor."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Dosyalar taranıyor, lütfen bekleyin."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Güncel tarama"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/tr/files_trashbin.po b/l10n/tr/files_trashbin.po
new file mode 100644
index 00000000000..03eb077131a
--- /dev/null
+++ b/l10n/tr/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: tr\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/tr/settings.po b/l10n/tr/settings.po
index 0fb46fd329c..6712f5fe47f 100644
--- a/l10n/tr/settings.po
+++ b/l10n/tr/settings.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
"MIME-Version: 1.0\n"
@@ -266,6 +266,14 @@ msgstr "Yönetici Grubu "
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/uk/core.po b/l10n/uk/core.po
index 55b74a2fc05..03b58445197 100644
--- a/l10n/uk/core.po
+++ b/l10n/uk/core.po
@@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
"MIME-Version: 1.0\n"
@@ -257,7 +257,7 @@ msgstr "Ðеобхідний файл {file} не вÑтановлено!"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "ПоділитиÑÑ"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/uk/files.po b/l10n/uk/files.po
index ac7166cb820..7f4b486f210 100644
--- a/l10n/uk/files.po
+++ b/l10n/uk/files.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
"MIME-Version: 1.0\n"
@@ -20,20 +20,6 @@ msgstr ""
"Language: uk\n"
"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);\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Ðе завантажено жодного файлу. Ðевідома помилка"
@@ -69,11 +55,11 @@ msgstr "ВідÑутній тимчаÑовий каталог"
msgid "Failed to write to disk"
msgstr "ÐевдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати на диÑк"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -81,15 +67,15 @@ msgstr ""
msgid "Files"
msgstr "Файли"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Заборонити доÑтуп"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Видалити"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Перейменувати"
@@ -113,7 +99,7 @@ msgstr "відміна"
msgid "replaced {new_name}"
msgstr "замінено {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "відмінити"
@@ -121,13 +107,9 @@ msgstr "відмінити"
msgid "replaced {new_name} with {old_name}"
msgstr "замінено {new_name} на {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "неопубліковано {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "видалено {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -151,86 +133,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Ðеможливо завантажити ваш файл тому, що він тека або файл розміром 0 байт"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Помилка завантаженнÑ"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Закрити"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "ОчікуваннÑ"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 файл завантажуєтьÑÑ"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} файлів завантажуєтьÑÑ"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑ€Ð²Ð°Ð½Ð¾."
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "ВиконуєтьÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ. Ð—Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ†Ñ–Ñ”Ñ— Ñторінки приведе до відміни завантаженнÑ."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URL не може бути пуÑтим."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} файлів проÑкановано"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "помилка при Ñкануванні"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Ім'Ñ"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Розмір"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Змінено"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 папка"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} папок"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 файл"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} файлів"
@@ -286,32 +260,40 @@ msgstr "Папка"
msgid "From link"
msgstr "З поÑиланнÑ"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Перервати завантаженнÑ"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Тут нічого немає. Відвантажте що-небудь!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Завантажити"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Файл занадто великий"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "Файли,що ви намагаєтеÑÑŒ відвантажити перевищують макÑимальний дозволений розмір файлів на цьому Ñервері."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Файли ÑкануютьÑÑ, зачекайте, будь-лаÑка."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Поточне ÑкануваннÑ"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/uk/files_trashbin.po b/l10n/uk/files_trashbin.po
new file mode 100644
index 00000000000..3dbbe27d588
--- /dev/null
+++ b/l10n/uk/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: uk\n"
+"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);\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/uk/settings.po b/l10n/uk/settings.po
index ff129914fee..561d4be190c 100644
--- a/l10n/uk/settings.po
+++ b/l10n/uk/settings.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
"MIME-Version: 1.0\n"
@@ -265,6 +265,14 @@ msgstr "ÐдмініÑтратор групи"
msgid "Storage"
msgstr "Сховище"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "За замовчуваннÑм"
diff --git a/l10n/vi/core.po b/l10n/vi/core.po
index 7f3635025e6..7434016d8e5 100644
--- a/l10n/vi/core.po
+++ b/l10n/vi/core.po
@@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
"MIME-Version: 1.0\n"
@@ -257,7 +257,7 @@ msgstr "Tập tin cần thiết {file} không được cài đặt!"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "Chia sẻ"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/vi/files.po b/l10n/vi/files.po
index 4250cfece6e..c7458d06103 100644
--- a/l10n/vi/files.po
+++ b/l10n/vi/files.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
"MIME-Version: 1.0\n"
@@ -21,20 +21,6 @@ msgstr ""
"Language: vi\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "Không có tập tin nào được tải lên. Lỗi không xác định"
@@ -70,11 +56,11 @@ msgstr "Không tìm thấy thư mục tạm"
msgid "Failed to write to disk"
msgstr "Không thể ghi "
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -82,15 +68,15 @@ msgstr ""
msgid "Files"
msgstr "Tập tin"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "Không chia sẽ"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "Xóa"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "Sửa tên"
@@ -114,7 +100,7 @@ msgstr "hủy"
msgid "replaced {new_name}"
msgstr "đã thay thế {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "lùi lại"
@@ -122,13 +108,9 @@ msgstr "lùi lại"
msgid "replaced {new_name} with {old_name}"
msgstr "đã thay thế {new_name} bằng {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "hủy chia sẽ {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "đã xóa {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -152,86 +134,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "Không thể tải lên tập tin này do nó là một thư mục hoặc kích thước tập tin bằng 0 byte"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "Tải lên lỗi"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "Äóng"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Chá»"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 tệp tin đang được tải lên"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} tập tin đang tải lên"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "Hủy tải lên"
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Tập tin tải lên Ä‘ang được xá»­ lý. Nếu bạn rá»i khá»i trang bây giá» sẽ hủy quá trình này."
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URL không được để trống."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} tập tin đã được quét"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "lỗi trong khi quét"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "Tên"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "Kích cỡ"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "Thay đổi"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 thư mục"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} thư mục"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 tập tin"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} tập tin"
@@ -287,32 +261,40 @@ msgstr "Thư mục"
msgid "From link"
msgstr "Từ liên kết"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "Hủy upload"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "Không có gì ở đây .Hãy tải lên một cái gì đó !"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "Tải xuống"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "Tập tin tải lên quá lớn"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "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ủ ."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "Tập tin Ä‘ang được quét ,vui lòng chá»."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "Hiện tại đang quét"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/vi/files_trashbin.po b/l10n/vi/files_trashbin.po
new file mode 100644
index 00000000000..41ce4eb64ec
--- /dev/null
+++ b/l10n/vi/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: vi\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/vi/settings.po b/l10n/vi/settings.po
index 3cb4e519b63..bac645946c1 100644
--- a/l10n/vi/settings.po
+++ b/l10n/vi/settings.po
@@ -13,8 +13,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
"MIME-Version: 1.0\n"
@@ -268,6 +268,14 @@ msgstr "Nhóm quản trị"
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/zh_CN.GB2312/core.po b/l10n/zh_CN.GB2312/core.po
index 54ee264a5a3..089c03e33c8 100644
--- a/l10n/zh_CN.GB2312/core.po
+++ b/l10n/zh_CN.GB2312/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n"
"MIME-Version: 1.0\n"
@@ -254,7 +254,7 @@ msgstr ""
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "分享"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/zh_CN.GB2312/files.po b/l10n/zh_CN.GB2312/files.po
index 4ae0f2a9225..8ad4ff2a597 100644
--- a/l10n/zh_CN.GB2312/files.po
+++ b/l10n/zh_CN.GB2312/files.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n"
"MIME-Version: 1.0\n"
@@ -19,20 +19,6 @@ msgstr ""
"Language: zh_CN.GB2312\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "没有上传文件。未知错误"
@@ -68,11 +54,11 @@ msgstr "丢失了一个临时文件夹"
msgid "Failed to write to disk"
msgstr "写ç£ç›˜å¤±è´¥"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -80,15 +66,15 @@ msgstr ""
msgid "Files"
msgstr "文件"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "å–消共享"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "删除"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "é‡å‘½å"
@@ -112,7 +98,7 @@ msgstr "å–消"
msgid "replaced {new_name}"
msgstr "å·²æ›¿æ¢ {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "撤销"
@@ -120,13 +106,9 @@ msgstr "撤销"
msgid "replaced {new_name} with {old_name}"
msgstr "已用 {old_name} æ›¿æ¢ {new_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "未分享的 {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "已删除的 {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -150,86 +132,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "ä¸èƒ½ä¸Šä¼ ä½ æŒ‡å®šçš„文件,å¯èƒ½å› ä¸ºå®ƒæ˜¯ä¸ªæ–‡ä»¶å¤¹æˆ–者大å°ä¸º0"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "上传错误"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "关闭"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "Pending"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 个文件正在上传"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} 个文件正在上传"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "上传å–消了"
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "文件正在上传。关闭页é¢ä¼šå–消上传。"
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "网å€ä¸èƒ½ä¸ºç©ºã€‚"
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} 个文件已扫æ"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "扫æ出错"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "åå­—"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "大å°"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "修改日期"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 个文件夹"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} 个文件夹"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 个文件"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} 个文件"
@@ -285,32 +259,40 @@ msgstr "文件夹"
msgid "From link"
msgstr "æ¥è‡ªé“¾æŽ¥"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "å–消上传"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "这里没有东西.上传点什么!"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "下载"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "上传的文件太大了"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "你正在试图上传的文件超过了此æœåŠ¡å™¨æ”¯æŒçš„最大的文件大å°."
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "正在扫æ文件,请ç¨å€™."
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "正在扫æ"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/zh_CN.GB2312/files_trashbin.po b/l10n/zh_CN.GB2312/files_trashbin.po
new file mode 100644
index 00000000000..4da5c5879dd
--- /dev/null
+++ b/l10n/zh_CN.GB2312/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh_CN.GB2312\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/zh_CN.GB2312/settings.po b/l10n/zh_CN.GB2312/settings.po
index deb922c37f4..17e86539b78 100644
--- a/l10n/zh_CN.GB2312/settings.po
+++ b/l10n/zh_CN.GB2312/settings.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n"
"MIME-Version: 1.0\n"
@@ -264,6 +264,14 @@ msgstr "群组管ç†å‘˜"
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/zh_CN/core.po b/l10n/zh_CN/core.po
index f7c192f722d..054c70f7faa 100644
--- a/l10n/zh_CN/core.po
+++ b/l10n/zh_CN/core.po
@@ -13,8 +13,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
"MIME-Version: 1.0\n"
@@ -258,11 +258,11 @@ msgstr "所需文件{file}未安装ï¼"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "共享"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
-msgstr ""
+msgstr "已共享"
#: js/share.js:141 js/share.js:611
msgid "Error while sharing"
diff --git a/l10n/zh_CN/files.po b/l10n/zh_CN/files.po
index ac41681ce43..3ccaa537b38 100644
--- a/l10n/zh_CN/files.po
+++ b/l10n/zh_CN/files.po
@@ -14,8 +14,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
"MIME-Version: 1.0\n"
@@ -24,20 +24,6 @@ msgstr ""
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "无法移动 %s - åŒå文件已存在"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "无法移动 %s"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "无法é‡å‘½å文件"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "没有文件被上传。未知错误"
@@ -73,11 +59,11 @@ msgstr "缺少临时目录"
msgid "Failed to write to disk"
msgstr "写入ç£ç›˜å¤±è´¥"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr ""
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "没有足够å¯ç”¨ç©ºé—´"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "无效文件夹。"
@@ -85,15 +71,15 @@ msgstr "无效文件夹。"
msgid "Files"
msgstr "文件"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "å–消分享"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "删除"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "é‡å‘½å"
@@ -117,7 +103,7 @@ msgstr "å–消"
msgid "replaced {new_name}"
msgstr "æ›¿æ¢ {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "撤销"
@@ -125,13 +111,9 @@ msgstr "撤销"
msgid "replaced {new_name} with {old_name}"
msgstr "已将 {old_name}替æ¢æˆ {new_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "å–消了共享 {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "删除了 {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -155,86 +137,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "下载正在准备中。如果文件较大å¯èƒ½ä¼šèŠ±è´¹ä¸€äº›æ—¶é—´ã€‚"
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "无法上传文件,因为它是一个目录或者大å°ä¸º 0 字节"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "上传错误"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "关闭"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "æ“作等待中"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1个文件上传中"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} 个文件上传中"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "上传已å–消"
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "文件正在上传中。现在离开此页会导致上传动作被å–消。"
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URLä¸èƒ½ä¸ºç©º"
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "无效文件夹å。'共享' 是 Owncloud 预留的文件夹å。"
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} 个文件已扫æ。"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "扫æ时出错"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "å称"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "大å°"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "修改日期"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1个文件夹"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} 个文件夹"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 个文件"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} 个文件"
@@ -290,32 +264,40 @@ msgstr "文件夹"
msgid "From link"
msgstr "æ¥è‡ªé“¾æŽ¥"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "å–消上传"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "这里还什么都没有。上传些东西å§ï¼"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "下载"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "上传文件过大"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "您正å°è¯•ä¸Šä¼ çš„文件超过了此æœåŠ¡å™¨å¯ä»¥ä¸Šä¼ çš„最大容é‡é™åˆ¶"
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "文件正在被扫æ,请ç¨å€™ã€‚"
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "当å‰æ‰«æ"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/zh_CN/files_trashbin.po b/l10n/zh_CN/files_trashbin.po
new file mode 100644
index 00000000000..68de848c4aa
--- /dev/null
+++ b/l10n/zh_CN/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh_CN\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/zh_CN/settings.po b/l10n/zh_CN/settings.po
index 53b7fa6a2c7..a7d5f860adc 100644
--- a/l10n/zh_CN/settings.po
+++ b/l10n/zh_CN/settings.po
@@ -13,8 +13,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
"MIME-Version: 1.0\n"
@@ -268,6 +268,14 @@ msgstr "组管ç†å‘˜"
msgid "Storage"
msgstr "存储"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "默认"
diff --git a/l10n/zh_HK/files.po b/l10n/zh_HK/files.po
index d8fe0228bcb..3a61b47c5ad 100644
--- a/l10n/zh_HK/files.po
+++ b/l10n/zh_HK/files.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
"MIME-Version: 1.0\n"
@@ -17,20 +17,6 @@ msgstr ""
"Language: zh_HK\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr ""
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr ""
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr ""
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr ""
@@ -66,11 +52,11 @@ msgstr ""
msgid "Failed to write to disk"
msgstr ""
-#: ajax/upload.php:48
-msgid "Not enough storage available"
+#: ajax/upload.php:51
+msgid "Not enough space available"
msgstr ""
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr ""
@@ -78,15 +64,15 @@ msgstr ""
msgid "Files"
msgstr ""
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr ""
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr ""
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr ""
@@ -110,7 +96,7 @@ msgstr ""
msgid "replaced {new_name}"
msgstr ""
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr ""
@@ -118,12 +104,8 @@ msgstr ""
msgid "replaced {new_name} with {old_name}"
msgstr ""
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr ""
-
-#: js/filelist.js:288
-msgid "deleted {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
msgstr ""
#: js/files.js:52
@@ -148,86 +130,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr ""
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr ""
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr ""
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr ""
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr ""
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr ""
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr ""
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr ""
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr ""
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr ""
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr ""
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr ""
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr ""
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr ""
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr ""
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr ""
@@ -283,32 +257,40 @@ msgstr ""
msgid "From link"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr ""
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr ""
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr ""
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr ""
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr ""
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr ""
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/zh_HK/files_trashbin.po b/l10n/zh_HK/files_trashbin.po
new file mode 100644
index 00000000000..d6fa5fa8285
--- /dev/null
+++ b/l10n/zh_HK/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh_HK\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/zh_HK/settings.po b/l10n/zh_HK/settings.po
index bbba342f382..9523f29e80b 100644
--- a/l10n/zh_HK/settings.po
+++ b/l10n/zh_HK/settings.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
"MIME-Version: 1.0\n"
@@ -262,6 +262,14 @@ msgstr ""
msgid "Storage"
msgstr ""
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr ""
diff --git a/l10n/zh_TW/core.po b/l10n/zh_TW/core.po
index ee734ce272b..787cdb9d00b 100644
--- a/l10n/zh_TW/core.po
+++ b/l10n/zh_TW/core.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:23+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-30 23:40+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
"MIME-Version: 1.0\n"
@@ -256,7 +256,7 @@ msgstr "沒有安è£æ‰€éœ€çš„檔案 {file} ï¼"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Share"
-msgstr ""
+msgstr "分享"
#: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
msgid "Shared"
diff --git a/l10n/zh_TW/files.po b/l10n/zh_TW/files.po
index a1e826aabd8..5082c3edac6 100644
--- a/l10n/zh_TW/files.po
+++ b/l10n/zh_TW/files.po
@@ -13,8 +13,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 23:05+0000\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:02+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
"MIME-Version: 1.0\n"
@@ -23,20 +23,6 @@ msgstr ""
"Language: zh_TW\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ajax/move.php:17
-#, php-format
-msgid "Could not move %s - File with this name already exists"
-msgstr "無法移動 %s - åŒå的檔案已經存在"
-
-#: ajax/move.php:24
-#, php-format
-msgid "Could not move %s"
-msgstr "無法移動 %s"
-
-#: ajax/rename.php:19
-msgid "Unable to rename file"
-msgstr "無法é‡æ–°å‘½å檔案"
-
#: ajax/upload.php:17
msgid "No file was uploaded. Unknown error"
msgstr "沒有檔案被上傳。未知的錯誤。"
@@ -72,11 +58,11 @@ msgstr "éºå¤±æš«å­˜è³‡æ–™å¤¾"
msgid "Failed to write to disk"
msgstr "寫入硬碟失敗"
-#: ajax/upload.php:48
-msgid "Not enough storage available"
-msgstr ""
+#: ajax/upload.php:51
+msgid "Not enough space available"
+msgstr "沒有足夠的å¯ç”¨ç©ºé–“"
-#: ajax/upload.php:77
+#: ajax/upload.php:82
msgid "Invalid directory."
msgstr "無效的資料夾。"
@@ -84,15 +70,15 @@ msgstr "無效的資料夾。"
msgid "Files"
msgstr "檔案"
-#: js/fileactions.js:117 templates/index.php:81 templates/index.php:82
+#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
msgid "Unshare"
msgstr "å–消共享"
-#: js/fileactions.js:119 templates/index.php:87 templates/index.php:88
+#: js/fileactions.js:119 templates/index.php:91 templates/index.php:92
msgid "Delete"
msgstr "刪除"
-#: js/fileactions.js:181
+#: js/fileactions.js:185
msgid "Rename"
msgstr "é‡æ–°å‘½å"
@@ -116,7 +102,7 @@ msgstr "å–消"
msgid "replaced {new_name}"
msgstr "å·²å–代 {new_name}"
-#: js/filelist.js:253 js/filelist.js:255 js/filelist.js:286 js/filelist.js:288
+#: js/filelist.js:253 js/filelist.js:255
msgid "undo"
msgstr "復原"
@@ -124,13 +110,9 @@ msgstr "復原"
msgid "replaced {new_name} with {old_name}"
msgstr "使用 {new_name} å–代 {old_name}"
-#: js/filelist.js:286
-msgid "unshared {files}"
-msgstr "å·²å–消分享 {files}"
-
-#: js/filelist.js:288
-msgid "deleted {files}"
-msgstr "已刪除 {files}"
+#: js/filelist.js:280
+msgid "perform delete operation"
+msgstr ""
#: js/files.js:52
msgid "'.' is an invalid file name."
@@ -154,86 +136,78 @@ msgstr ""
msgid "Your storage is almost full ({usedSpacePercent}%)"
msgstr ""
-#: js/files.js:219
+#: js/files.js:224
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "正在準備您的下載,若您的檔案較大,將會需è¦æ›´å¤šæ™‚間。"
-#: js/files.js:256
+#: js/files.js:261
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr "無法上傳您的檔案因為它å¯èƒ½æ˜¯ä¸€å€‹ç›®éŒ„或檔案大å°ç‚º0"
-#: js/files.js:256
+#: js/files.js:261
msgid "Upload Error"
msgstr "上傳發生錯誤"
-#: js/files.js:273
+#: js/files.js:278
msgid "Close"
msgstr "關閉"
-#: js/files.js:292 js/files.js:408 js/files.js:439
+#: js/files.js:297 js/files.js:413 js/files.js:444
msgid "Pending"
msgstr "等候中"
-#: js/files.js:312
+#: js/files.js:317
msgid "1 file uploading"
msgstr "1 個檔案正在上傳"
-#: js/files.js:315 js/files.js:370 js/files.js:385
+#: js/files.js:320 js/files.js:375 js/files.js:390
msgid "{count} files uploading"
msgstr "{count} 個檔案正在上傳"
-#: js/files.js:388 js/files.js:423
+#: js/files.js:393 js/files.js:428
msgid "Upload cancelled."
msgstr "上傳å–消"
-#: js/files.js:493
+#: js/files.js:502
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "檔案上傳中。離開此é é¢å°‡æœƒå–消上傳。"
-#: js/files.js:566
+#: js/files.js:575
msgid "URL cannot be empty."
msgstr "URL ä¸èƒ½ç‚ºç©ºç™½."
-#: js/files.js:571
+#: js/files.js:580
msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
msgstr "無效的資料夾å稱,'Shared' 的使用被 Owncloud ä¿ç•™"
-#: js/files.js:784
-msgid "{count} files scanned"
-msgstr "{count} 個檔案已掃æ"
-
-#: js/files.js:792
-msgid "error while scanning"
-msgstr "掃æ時發生錯誤"
-
-#: js/files.js:866 templates/index.php:63
+#: js/files.js:949 templates/index.php:67
msgid "Name"
msgstr "å稱"
-#: js/files.js:867 templates/index.php:74
+#: js/files.js:950 templates/index.php:78
msgid "Size"
msgstr "大å°"
-#: js/files.js:868 templates/index.php:76
+#: js/files.js:951 templates/index.php:80
msgid "Modified"
msgstr "修改"
-#: js/files.js:887
+#: js/files.js:970
msgid "1 folder"
msgstr "1 個資料夾"
-#: js/files.js:889
+#: js/files.js:972
msgid "{count} folders"
msgstr "{count} 個資料夾"
-#: js/files.js:897
+#: js/files.js:980
msgid "1 file"
msgstr "1 個檔案"
-#: js/files.js:899
+#: js/files.js:982
msgid "{count} files"
msgstr "{count} 個檔案"
@@ -289,32 +263,40 @@ msgstr "資料夾"
msgid "From link"
msgstr "從連çµ"
-#: templates/index.php:41
+#: templates/index.php:40
+msgid "Trash"
+msgstr ""
+
+#: templates/index.php:46
msgid "Cancel upload"
msgstr "å–消上傳"
-#: templates/index.php:55
+#: templates/index.php:59
msgid "Nothing in here. Upload something!"
msgstr "沒有任何æ±è¥¿ã€‚請上傳內容ï¼"
-#: templates/index.php:69
+#: templates/index.php:73
msgid "Download"
msgstr "下載"
-#: templates/index.php:101
+#: templates/index.php:105
msgid "Upload too large"
msgstr "上傳éŽå¤§"
-#: templates/index.php:103
+#: templates/index.php:107
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr "您試圖上傳的檔案已超éŽä¼ºæœå™¨çš„最大檔案大å°é™åˆ¶ã€‚ "
-#: templates/index.php:108
+#: templates/index.php:112
msgid "Files are being scanned, please wait."
msgstr "正在掃æ檔案,請ç¨ç­‰ã€‚"
-#: templates/index.php:111
+#: templates/index.php:115
msgid "Current scanning"
msgstr "ç›®å‰æŽƒæ"
+
+#: templates/upgrade.php:2
+msgid "Upgrading filesystem cache..."
+msgstr ""
diff --git a/l10n/zh_TW/files_trashbin.po b/l10n/zh_TW/files_trashbin.po
new file mode 100644
index 00000000000..7a77dadbdef
--- /dev/null
+++ b/l10n/zh_TW/files_trashbin.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2013-01-31 17:02+0100\n"
+"PO-Revision-Date: 2013-01-31 16:03+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh_TW\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: js/trash.js:7
+msgid "perform restore operation"
+msgstr ""
+
+#: js/trash.js:69
+msgid "perform undelete operation"
+msgstr ""
+
+#: js/trash.js:100 templates/index.php:17
+msgid "Name"
+msgstr ""
+
+#: js/trash.js:101 templates/index.php:27
+msgid "Deleted"
+msgstr ""
+
+#: js/trash.js:110
+msgid "1 folder"
+msgstr ""
+
+#: js/trash.js:112
+msgid "{count} folders"
+msgstr ""
+
+#: js/trash.js:120
+msgid "1 file"
+msgstr ""
+
+#: js/trash.js:122
+msgid "{count} files"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Nothing in here. Your trash bin is empty!"
+msgstr ""
+
+#: templates/index.php:20 templates/index.php:22
+msgid "Restore"
+msgstr ""
diff --git a/l10n/zh_TW/settings.po b/l10n/zh_TW/settings.po
index e657008a0c0..0b6948fb19c 100644
--- a/l10n/zh_TW/settings.po
+++ b/l10n/zh_TW/settings.po
@@ -14,8 +14,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 23:24+0000\n"
+"POT-Creation-Date: 2013-01-31 00:27+0100\n"
+"PO-Revision-Date: 2013-01-30 23:28+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
"MIME-Version: 1.0\n"
@@ -269,6 +269,14 @@ msgstr "群組 管ç†å“¡"
msgid "Storage"
msgstr "儲存å€"
+#: templates/users.php:97
+msgid "change display name"
+msgstr ""
+
+#: templates/users.php:101
+msgid "set new password"
+msgstr ""
+
#: templates/users.php:137
msgid "Default"
msgstr "é è¨­"
diff --git a/lib/app.php b/lib/app.php
index 108226fc1a1..fa3e14ce4d2 100644
--- a/lib/app.php
+++ b/lib/app.php
@@ -142,6 +142,8 @@ class OC_App{
* check if app is shipped
* @param string $appid the id of the app to check
* @return bool
+ *
+ * Check if an app that is installed is a shipped app or installed from the appstore.
*/
public static function isShipped($appid){
$info = self::getAppInfo($appid);
@@ -177,7 +179,7 @@ class OC_App{
* This function checks whether or not an app is enabled.
*/
public static function isEnabled( $app ) {
- if( 'files'==$app or 'yes' == OC_Appconfig::getValue( $app, 'enabled' )) {
+ if( 'files'==$app or ('yes' == OC_Appconfig::getValue( $app, 'enabled' ))) {
return true;
}
@@ -197,9 +199,10 @@ class OC_App{
if(!is_numeric($app)) {
$app = OC_Installer::installShippedApp($app);
}else{
+ $appdata=OC_OCSClient::getApplication($app);
$download=OC_OCSClient::getApplicationDownload($app, 1);
if(isset($download['downloadlink']) and $download['downloadlink']!='') {
- $app=OC_Installer::installApp(array('source'=>'http', 'href'=>$download['downloadlink']));
+ $app=OC_Installer::installApp(array('source'=>'http', 'href'=>$download['downloadlink'],'appdata'=>$appdata));
}
}
}
@@ -212,6 +215,9 @@ class OC_App{
return false;
}else{
OC_Appconfig::setValue( $app, 'enabled', 'yes' );
+ if(isset($appdata['id'])) {
+ OC_Appconfig::setValue( $app, 'ocsid', $appdata['id'] );
+ }
return true;
}
}else{
@@ -227,8 +233,13 @@ class OC_App{
* This function set an app as disabled in appconfig.
*/
public static function disable( $app ) {
- // check if app is a shiped app or not. if not delete
+ // check if app is a shipped app or not. if not delete
OC_Appconfig::setValue( $app, 'enabled', 'no' );
+
+ // check if app is a shipped app or not. if not delete
+ if(!OC_App::isShipped( $app )){
+ OC_Installer::removeApp( $app );
+ }
}
/**
@@ -495,7 +506,7 @@ class OC_App{
* @return string
*/
public static function getCurrentApp() {
- $script=substr($_SERVER["SCRIPT_NAME"], strlen(OC::$WEBROOT)+1);
+ $script=substr(OC_Request::scriptName(), strlen(OC::$WEBROOT)+1);
$topFolder=substr($script, 0, strpos($script, '/'));
if (empty($topFolder)) {
$path_info = OC_Request::getPathInfo();
@@ -621,9 +632,13 @@ class OC_App{
if(isset($info['shipped']) and ($info['shipped']=='true')) {
$info['internal']=true;
$info['internallabel']='Internal App';
+ $info['internalclass']='';
+ $info['update']=false;
} else {
$info['internal']=false;
$info['internallabel']='3rd Party App';
+ $info['internalclass']='externalapp';
+ $info['update']=OC_Installer::isUpdateAvailable($app);
}
$info['preview'] = OC_Helper::imagePath('settings', 'trans.png');
@@ -633,15 +648,15 @@ class OC_App{
}
$remoteApps = OC_App::getAppstoreApps();
if ( $remoteApps ) {
- // Remove duplicates
+ // Remove duplicates
foreach ( $appList as $app ) {
foreach ( $remoteApps AS $key => $remote ) {
if (
$app['name'] == $remote['name']
- // To set duplicate detection to use OCS ID instead of string name,
- // enable this code, remove the line of code above,
- // and add <ocs_id>[ID]</ocs_id> to info.xml of each 3rd party app:
- // OR $app['ocs_id'] == $remote['ocs_id']
+ // To set duplicate detection to use OCS ID instead of string name,
+ // enable this code, remove the line of code above,
+ // and add <ocs_id>[ID]</ocs_id> to info.xml of each 3rd party app:
+ // OR $app['ocs_id'] == $remote['ocs_id']
) {
unset( $remoteApps[$key]);
}
@@ -675,6 +690,15 @@ class OC_App{
$app1[$i]['author'] = $app['personid'];
$app1[$i]['ocs_id'] = $app['id'];
$app1[$i]['internal'] = $app1[$i]['active'] = 0;
+ $app1[$i]['update'] = false;
+ if($app['label']=='recommended'){
+ $app1[$i]['internallabel'] = 'Recommended';
+ $app1[$i]['internalclass'] = 'recommendedapp';
+ }else{
+ $app1[$i]['internallabel'] = '3rd Party';
+ $app1[$i]['internalclass'] = 'externalapp';
+ }
+
// rating img
if($app['score']>=0 and $app['score']<5) $img=OC_Helper::imagePath( "core", "rating/s1.png" );
@@ -803,16 +827,16 @@ class OC_App{
/**
* @param string $appid
- * @return OC_FilesystemView
+ * @return \OC\Files\View
*/
public static function getStorage($appid) {
if(OC_App::isEnabled($appid)) {//sanity check
if(OC_User::isLoggedIn()) {
- $view = new OC_FilesystemView('/'.OC_User::getUser());
+ $view = new \OC\Files\View('/'.OC_User::getUser());
if(!$view->file_exists($appid)) {
$view->mkdir($appid);
}
- return new OC_FilesystemView('/'.OC_User::getUser().'/'.$appid);
+ return new \OC\Files\View('/'.OC_User::getUser().'/'.$appid);
}else{
OC_Log::write('core', 'Can\'t get app storage, app '.$appid.', user not logged in', OC_Log::ERROR);
return false;
diff --git a/lib/archive/tar.php b/lib/archive/tar.php
index 0fa633c6038..117d88e5f42 100644
--- a/lib/archive/tar.php
+++ b/lib/archive/tar.php
@@ -308,7 +308,7 @@ class OC_Archive_TAR extends OC_Archive{
if($mode=='r' or $mode=='rb') {
return fopen($tmpFile, $mode);
}else{
- OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this, 'writeBack');
+ \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
self::$tempFiles[$tmpFile]=$path;
return fopen('close://'.$tmpFile, $mode);
}
diff --git a/lib/archive/zip.php b/lib/archive/zip.php
index 1c967baa08f..8e31795ded1 100644
--- a/lib/archive/zip.php
+++ b/lib/archive/zip.php
@@ -171,7 +171,7 @@ class OC_Archive_ZIP extends OC_Archive{
$ext='';
}
$tmpFile=OCP\Files::tmpFile($ext);
- OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this, 'writeBack');
+ \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
if($this->fileExists($path)) {
$this->extractFile($path, $tmpFile);
}
diff --git a/lib/base.php b/lib/base.php
index f9818d3514e..232350b59e2 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -112,6 +112,8 @@ class OC
$path = str_replace('\\', '/', $className) . '.php';
} elseif (strpos($className, 'Test_') === 0) {
$path = 'tests/lib/' . strtolower(str_replace('_', '/', substr($className, 5)) . '.php');
+ } elseif (strpos($className, 'Test\\') === 0) {
+ $path = 'tests/lib/' . strtolower(str_replace('\\', '/', substr($className, 5)) . '.php');
} else {
return false;
}
@@ -127,7 +129,7 @@ class OC
// calculate the root directories
OC::$SERVERROOT = str_replace("\\", '/', substr(__DIR__, 0, -4));
OC::$SUBURI = str_replace("\\", "/", substr(realpath($_SERVER["SCRIPT_FILENAME"]), strlen(OC::$SERVERROOT)));
- $scriptName = $_SERVER["SCRIPT_NAME"];
+ $scriptName = OC_Request::scriptName();
if (substr($scriptName, -1) == '/') {
$scriptName .= 'index.php';
//make sure suburi follows the same rules as scriptName
@@ -228,7 +230,7 @@ class OC
header('Strict-Transport-Security: max-age=31536000');
ini_set("session.cookie_secure", "on");
if (OC_Request::serverProtocol() <> 'https' and !OC::$CLI) {
- $url = "https://" . OC_Request::serverHost() . $_SERVER['REQUEST_URI'];
+ $url = "https://" . OC_Request::serverHost() . OC_Request::requestUri();
header("Location: $url");
exit();
}
@@ -420,10 +422,10 @@ class OC
}
// register the stream wrappers
- require_once 'streamwrappers.php';
- stream_wrapper_register("fakedir", "OC_FakeDirStream");
- stream_wrapper_register('static', 'OC_StaticStreamWrapper');
- stream_wrapper_register('close', 'OC_CloseStreamWrapper');
+ stream_wrapper_register('fakedir', 'OC\Files\Stream\Dir');
+ stream_wrapper_register('static', 'OC\Files\Stream\StaticStream');
+ stream_wrapper_register('close', 'OC\Files\Stream\Close');
+ stream_wrapper_register('oc', 'OC\Files\Stream\OC');
self::checkConfig();
self::checkInstalled();
@@ -502,7 +504,7 @@ class OC
// write error into log if locale can't be set
if (OC_Util::issetlocaleworking() == false) {
- OC_Log::write('core', 'setting locate to en_US.UTF-8 failed. Support is probably not installed on your system', OC_Log::ERROR);
+ OC_Log::write('core', 'setting locale to en_US.UTF-8 failed. Support is probably not installed on your system', OC_Log::ERROR);
}
if (OC_Config::getValue('installed', false)) {
if (OC_Appconfig::getValue('core', 'backgroundjobs_mode', 'ajax') == 'ajax') {
@@ -762,7 +764,7 @@ class OC
if (OC_User::login($_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"])) {
//OC_Log::write('core',"Logged in with HTTP Authentication", OC_Log::DEBUG);
OC_User::unsetMagicInCookie();
- $_REQUEST['redirect_url'] = (isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '');
+ $_REQUEST['redirect_url'] = OC_Request::requestUri();
OC_Util::redirectToDefaultPage();
}
return true;
diff --git a/lib/cache/file.php b/lib/cache/file.php
index 27d8b19f36e..f9ecf41dcac 100644
--- a/lib/cache/file.php
+++ b/lib/cache/file.php
@@ -15,11 +15,11 @@ class OC_Cache_File{
}
if(OC_User::isLoggedIn()) {
$subdir = 'cache';
- $view = new OC_FilesystemView('/'.OC_User::getUser());
+ $view = new \OC\Files\View('/'.OC_User::getUser());
if(!$view->file_exists($subdir)) {
$view->mkdir($subdir);
}
- $this->storage = new OC_FilesystemView('/'.OC_User::getUser().'/'.$subdir);
+ $this->storage = new \OC\Files\View('/'.OC_User::getUser().'/'.$subdir);
return $this->storage;
}else{
OC_Log::write('core', 'Can\'t get cache storage, user not logged in', OC_Log::ERROR);
diff --git a/lib/connector/sabre/directory.php b/lib/connector/sabre/directory.php
index 6076aed6fcd..a7201579366 100644
--- a/lib/connector/sabre/directory.php
+++ b/lib/connector/sabre/directory.php
@@ -62,7 +62,7 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
}
} else {
$newPath = $this->path . '/' . $name;
- OC_Filesystem::file_put_contents($newPath, $data);
+ \OC\Files\Filesystem::file_put_contents($newPath, $data);
return OC_Connector_Sabre_Node::getETagPropertyForPath($newPath);
}
@@ -78,7 +78,7 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
public function createDirectory($name) {
$newPath = $this->path . '/' . $name;
- OC_Filesystem::mkdir($newPath);
+ \OC\Files\Filesystem::mkdir($newPath);
}
@@ -93,7 +93,7 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
$path = $this->path . '/' . $name;
if (is_null($info)) {
- $info = OC_Files::getFileInfo($path);
+ $info = \OC\Files\Filesystem::getFileInfo($path);
}
if (!$info) {
@@ -116,12 +116,13 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
* @return Sabre_DAV_INode[]
*/
public function getChildren() {
- $folder_content = OC_Files::getDirectoryContent($this->path);
+
+ $folder_content = \OC\Files\Filesystem::getDirectoryContent($this->path);
$paths = array();
foreach($folder_content as $info) {
$paths[] = $this->path.'/'.$info['name'];
+ $properties[$this->path.'/'.$info['name']][self::GETETAG_PROPERTYNAME] = $info['etag'];
}
- $properties = array_fill_keys($paths, array());
if(count($paths)>0) {
//
// the number of arguments within IN conditions are limited in most databases
@@ -160,7 +161,7 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
public function childExists($name) {
$path = $this->path . '/' . $name;
- return OC_Filesystem::file_exists($path);
+ return \OC\Files\Filesystem::file_exists($path);
}
@@ -173,7 +174,7 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
if ($this->path != "/Shared") {
foreach($this->getChildren() as $child) $child->delete();
- OC_Filesystem::rmdir($this->path);
+ \OC\Files\Filesystem::rmdir($this->path);
}
}
@@ -184,10 +185,10 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
* @return array
*/
public function getQuotaInfo() {
- $rootInfo=OC_FileCache_Cached::get('');
+ $rootInfo=\OC\Files\Filesystem::getFileInfo('');
return array(
$rootInfo['size'],
- OC_Filesystem::free_space()
+ \OC\Files\Filesystem::free_space()
);
}
diff --git a/lib/connector/sabre/file.php b/lib/connector/sabre/file.php
index 8d963a1cf8d..1c18a391742 100644
--- a/lib/connector/sabre/file.php
+++ b/lib/connector/sabre/file.php
@@ -45,7 +45,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
*/
public function put($data) {
- OC_Filesystem::file_put_contents($this->path, $data);
+ \OC\Files\Filesystem::file_put_contents($this->path,$data);
return OC_Connector_Sabre_Node::getETagPropertyForPath($this->path);
}
@@ -57,7 +57,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
*/
public function get() {
- return OC_Filesystem::fopen($this->path, 'rb');
+ return \OC\Files\Filesystem::fopen($this->path,'rb');
}
@@ -68,7 +68,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
*/
public function delete() {
- OC_Filesystem::unlink($this->path);
+ \OC\Files\Filesystem::unlink($this->path);
}
@@ -98,16 +98,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
if (isset($properties[self::GETETAG_PROPERTYNAME])) {
return $properties[self::GETETAG_PROPERTYNAME];
}
- return $this->getETagPropertyForPath($this->path);
- }
-
- /**
- * Creates a ETag for this path.
- * @param string $path Path of the file
- * @return string|null Returns null if the ETag can not effectively be determined
- */
- static protected function createETag($path) {
- return OC_Filesystem::hash('md5', $path);
+ return null;
}
/**
@@ -122,7 +113,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
return $this->fileinfo_cache['mimetype'];
}
- return OC_Filesystem::getMimeType($this->path);
+ return \OC\Files\Filesystem::getMimeType($this->path);
}
}
diff --git a/lib/connector/sabre/node.php b/lib/connector/sabre/node.php
index 026ec9f7ec5..b48d3b41f24 100644
--- a/lib/connector/sabre/node.php
+++ b/lib/connector/sabre/node.php
@@ -84,12 +84,12 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
$newPath = $parentPath . '/' . $newName;
$oldPath = $this->path;
- OC_Filesystem::rename($this->path, $newPath);
+ \OC\Files\Filesystem::rename($this->path,$newPath);
$this->path = $newPath;
$query = OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertypath` = ? WHERE `userid` = ? AND `propertypath` = ?' );
- $query->execute( array( $newPath, OC_User::getUser(), $oldPath ));
+ $query->execute( array( $newPath,OC_User::getUser(), $oldPath ));
}
@@ -104,9 +104,9 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
*/
protected function getFileinfoCache() {
if (!isset($this->fileinfo_cache)) {
- if ($fileinfo_cache = OC_FileCache::get($this->path)) {
+ if ($fileinfo_cache = \OC\Files\Filesystem::getFileInfo($this->path)) {
} else {
- $fileinfo_cache = OC_Filesystem::stat($this->path);
+ $fileinfo_cache = \OC\Files\Filesystem::stat($this->path);
}
$this->fileinfo_cache = $fileinfo_cache;
@@ -134,7 +134,7 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
* Even if the modification time is set to a custom value the access time is set to now.
*/
public function touch($mtime) {
- OC_Filesystem::touch($this->path, $mtime);
+ \OC\Files\Filesystem::touch($this->path, $mtime);
}
/**
@@ -159,10 +159,10 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
} else {
if(!array_key_exists( $propertyName, $existing )) {
$query = OC_DB::prepare( 'INSERT INTO `*PREFIX*properties` (`userid`,`propertypath`,`propertyname`,`propertyvalue`) VALUES(?,?,?,?)' );
- $query->execute( array( OC_User::getUser(), $this->path, $propertyName, $propertyValue ));
+ $query->execute( array( OC_User::getUser(), $this->path, $propertyName,$propertyValue ));
} else {
$query = OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertyvalue` = ? WHERE `userid` = ? AND `propertypath` = ? AND `propertyname` = ?' );
- $query->execute( array( $propertyValue, OC_User::getUser(), $this->path, $propertyName ));
+ $query->execute( array( $propertyValue,OC_User::getUser(), $this->path, $propertyName ));
}
}
}
@@ -190,6 +190,7 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
while( $row = $result->fetchRow()) {
$this->property_cache[$row['propertyname']] = $row['propertyvalue'];
}
+ $this->property_cache[self::GETETAG_PROPERTYNAME] = $this->getETagPropertyForPath($this->path);
}
// if the array was empty, we need to return everything
@@ -205,57 +206,16 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
}
/**
- * @brief Creates a ETag for this path.
- * @param string $path Path of the file
- * @return string|null Returns null if the ETag can not effectively be determined
- */
- static protected function createETag($path) {
- if(self::$ETagFunction) {
- $hash = call_user_func(self::$ETagFunction, $path);
- return $hash;
- }else{
- return uniqid('', true);
- }
- }
-
- /**
- * @brief Returns the ETag surrounded by double-quotes for this path.
+ * Returns the ETag surrounded by double-quotes for this path.
* @param string $path Path of the file
* @return string|null Returns null if the ETag can not effectively be determined
*/
static public function getETagPropertyForPath($path) {
- $tag = self::createETag($path);
- if (empty($tag)) {
- return null;
+ $data = \OC\Files\Filesystem::getFileInfo($path);
+ if (isset($data['etag'])) {
+ return '"'.$data['etag'].'"';
}
- $etag = '"'.$tag.'"';
- $query = OC_DB::prepare( 'INSERT INTO `*PREFIX*properties` (`userid`,`propertypath`,`propertyname`,`propertyvalue`) VALUES(?,?,?,?)' );
- $query->execute( array( OC_User::getUser(), $path, self::GETETAG_PROPERTYNAME, $etag ));
- return $etag;
+ return null;
}
- /**
- * @brief Remove the ETag from the cache.
- * @param string $path Path of the file
- */
- static public function removeETagPropertyForPath($path) {
- // remove tags from this and parent paths
- $paths = array();
- while ($path != '/' && $path != '.' && $path != '' && $path != '\\') {
- $paths[] = $path;
- $path = dirname($path);
- }
- if (empty($paths)) {
- return;
- }
- $paths[] = $path;
- $path_placeholders = join(',', array_fill(0, count($paths), '?'));
- $query = OC_DB::prepare( 'DELETE FROM `*PREFIX*properties`'
- .' WHERE `userid` = ?'
- .' AND `propertyname` = ?'
- .' AND `propertypath` IN ('.$path_placeholders.')'
- );
- $vals = array( OC_User::getUser(), self::GETETAG_PROPERTYNAME );
- $query->execute(array_merge( $vals, $paths ));
- }
}
diff --git a/lib/connector/sabre/quotaplugin.php b/lib/connector/sabre/quotaplugin.php
index fbbb4a3cf6f..ce9a968eb3c 100644
--- a/lib/connector/sabre/quotaplugin.php
+++ b/lib/connector/sabre/quotaplugin.php
@@ -50,7 +50,7 @@ class OC_Connector_Sabre_QuotaPlugin extends Sabre_DAV_ServerPlugin {
$uri='/'.$uri;
}
list($parentUri, $newName) = Sabre_DAV_URLUtil::splitPath($uri);
- if ($length > OC_Filesystem::free_space($parentUri)) {
+ if ($length > \OC\Files\Filesystem::free_space($parentUri)) {
throw new Sabre_DAV_Exception_InsufficientStorage();
}
}
diff --git a/lib/connector/sabre/request.php b/lib/connector/sabre/request.php
new file mode 100644
index 00000000000..97a27996bf3
--- /dev/null
+++ b/lib/connector/sabre/request.php
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @author Stefan Herbrechtsmeier
+ * @copyright 2012 Stefan Herbrechtsmeier <stefan@herbrechtsmeier.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+class OC_Connector_Sabre_Request extends Sabre_HTTP_Request {
+ /**
+ * Returns the requested uri
+ *
+ * @return string
+ */
+ public function getUri() {
+ return OC_Request::requestUri();
+ }
+
+ /**
+ * Returns a specific item from the _SERVER array.
+ *
+ * Do not rely on this feature, it is for internal use only.
+ *
+ * @param string $field
+ * @return string
+ */
+ public function getRawServerValue($field) {
+ if($field == 'REQUEST_URI'){
+ return $this->getUri();
+ }
+ else{
+ return isset($this->_SERVER[$field])?$this->_SERVER[$field]:null;
+ }
+ }
+}
diff --git a/lib/filecache.php b/lib/filecache.php
deleted file mode 100644
index 7764890ef1a..00000000000
--- a/lib/filecache.php
+++ /dev/null
@@ -1,539 +0,0 @@
-<?php
-
-/**
-* @author Robin Appelman
-* @copyright 2011 Robin Appelman icewind1991@gmail.com
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
-* License as published by the Free Software Foundation; either
-* version 3 of the License, or any later version.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
-*
-* You should have received a copy of the GNU Affero General Public
-* License along with this library. If not, see <http://www.gnu.org/licenses/>.
-*
-*/
-
-/**
- * provide caching for filesystem info in the database
- *
- * not used by OC_Filesystem for reading filesystem info,
- * instead apps should use OC_FileCache::get where possible
- *
- * It will try to keep the data up to date but changes from outside
- * ownCloud can invalidate the cache
- *
- * Methods that take $path and $root params expect $path to be relative, like
- * /admin/files/file.txt, if $root is false
- *
- */
-class OC_FileCache{
-
- /**
- * get the filesystem info from the cache
- * @param string path
- * @param string root (optional)
- * @return array
- *
- * returns an associative array with the following keys:
- * - size
- * - mtime
- * - ctime
- * - mimetype
- * - encrypted
- * - versioned
- */
- public static function get($path, $root=false) {
- if(OC_FileCache_Update::hasUpdated($path, $root)) {
- if($root===false) {//filesystem hooks are only valid for the default root
- OC_Hook::emit('OC_Filesystem', 'post_write', array('path'=>$path));
- }else{
- OC_FileCache_Update::update($path, $root);
- }
- }
- return OC_FileCache_Cached::get($path, $root);
- }
-
- /**
- * put filesystem info in the cache
- * @param string $path
- * @param array data
- * @param string root (optional)
- * @note $data is an associative array in the same format as returned
- * by get
- */
- public static function put($path, $data, $root=false) {
- if($root===false) {
- $root=OC_Filesystem::getRoot();
- }
- $fullpath=OC_Filesystem::normalizePath($root.'/'.$path);
- $parent=self::getParentId($fullpath);
- $id=self::getId($fullpath, '');
- if(isset(OC_FileCache_Cached::$savedData[$fullpath])) {
- $data=array_merge(OC_FileCache_Cached::$savedData[$fullpath], $data);
- unset(OC_FileCache_Cached::$savedData[$fullpath]);
- }
- if($id!=-1) {
- self::update($id, $data);
- return;
- }
-
- // add parent directory to the file cache if it does not exist yet.
- if ($parent == -1 && $fullpath != $root) {
- $parentDir = dirname($path);
- self::scanFile($parentDir);
- $parent = self::getParentId($fullpath);
- }
-
- if(!isset($data['size']) or !isset($data['mtime'])) {//save incomplete data for the next time we write it
- OC_FileCache_Cached::$savedData[$fullpath]=$data;
- return;
- }
- if(!isset($data['encrypted'])) {
- $data['encrypted']=false;
- }
- if(!isset($data['versioned'])) {
- $data['versioned']=false;
- }
- $mimePart=dirname($data['mimetype']);
- $data['size']=(int)$data['size'];
- $data['ctime']=(int)$data['mtime'];
- $data['writable']=(int)$data['writable'];
- $data['encrypted']=(int)$data['encrypted'];
- $data['versioned']=(int)$data['versioned'];
- $user=OC_User::getUser();
- $query=OC_DB::prepare('INSERT INTO `*PREFIX*fscache`(`parent`, `name`, `path`, `path_hash`, `size`, `mtime`, `ctime`, `mimetype`, `mimepart`,`user`,`writable`,`encrypted`,`versioned`) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)');
- $result=$query->execute(array($parent, basename($fullpath), $fullpath, md5($fullpath), $data['size'], $data['mtime'], $data['ctime'], $data['mimetype'], $mimePart, $user, $data['writable'], $data['encrypted'], $data['versioned']));
- if(OC_DB::isError($result)) {
- OC_Log::write('files', 'error while writing file('.$fullpath.') to cache', OC_Log::ERROR);
- }
-
- if($cache=OC_Cache::getUserCache(true)) {
- $cache->remove('fileid/'.$fullpath);//ensure we don't have -1 cached
- }
- }
-
- /**
- * update filesystem info of a file
- * @param int $id
- * @param array $data
- */
- private static function update($id, $data) {
- $arguments=array();
- $queryParts=array();
- foreach(array('size','mtime','ctime','mimetype','encrypted','versioned', 'writable') as $attribute) {
- if(isset($data[$attribute])) {
- //Convert to int it args are false
- if($data[$attribute] === false) {
- $arguments[] = 0;
- }else{
- $arguments[] = $data[$attribute];
- }
- $queryParts[]='`'.$attribute.'`=?';
- }
- }
- if(isset($data['mimetype'])) {
- $arguments[]=dirname($data['mimetype']);
- $queryParts[]='`mimepart`=?';
- }
- $arguments[]=$id;
-
- if(!empty($queryParts)) {
- $sql = 'UPDATE `*PREFIX*fscache` SET '.implode(' , ', $queryParts).' WHERE `id`=?';
- $query=OC_DB::prepare($sql);
- $result=$query->execute($arguments);
- if(OC_DB::isError($result)) {
- OC_Log::write('files', 'error while updating file('.$id.') in cache', OC_Log::ERROR);
- }
- }
- }
-
- /**
- * register a file move in the cache
- * @param string oldPath
- * @param string newPath
- * @param string root (optional)
- */
- public static function move($oldPath, $newPath, $root=false) {
- if($root===false) {
- $root=OC_Filesystem::getRoot();
- }
- // If replacing an existing file, delete the file
- if (self::inCache($newPath, $root)) {
- self::delete($newPath, $root);
- }
- $oldPath=$root.$oldPath;
- $newPath=$root.$newPath;
- $newParent=self::getParentId($newPath);
- $query=OC_DB::prepare('UPDATE `*PREFIX*fscache` SET `parent`=? ,`name`=?, `path`=?, `path_hash`=? WHERE `path_hash`=?');
- $query->execute(array($newParent, basename($newPath), $newPath, md5($newPath), md5($oldPath)));
-
- if(($cache=OC_Cache::getUserCache(true)) && $cache->hasKey('fileid/'.$oldPath)) {
- $cache->set('fileid/'.$newPath, $cache->get('fileid/'.$oldPath));
- $cache->remove('fileid/'.$oldPath);
- }
-
- $query=OC_DB::prepare('SELECT `path` FROM `*PREFIX*fscache` WHERE `path` LIKE ?');
- $oldLength=strlen($oldPath);
- $updateQuery=OC_DB::prepare('UPDATE `*PREFIX*fscache` SET `path`=?, `path_hash`=? WHERE `path_hash`=?');
- while($row= $query->execute(array($oldPath.'/%'))->fetchRow()) {
- $old=$row['path'];
- $new=$newPath.substr($old, $oldLength);
- $updateQuery->execute(array($new, md5($new), md5($old)));
-
- if(($cache=OC_Cache::getUserCache(true)) && $cache->hasKey('fileid/'.$old)) {
- $cache->set('fileid/'.$new, $cache->get('fileid/'.$old));
- $cache->remove('fileid/'.$old);
- }
- }
- }
-
- /**
- * delete info from the cache
- * @param string path
- * @param string root (optional)
- */
- public static function delete($path, $root=false) {
- if($root===false) {
- $root=OC_Filesystem::getRoot();
- }
- $query=OC_DB::prepare('DELETE FROM `*PREFIX*fscache` WHERE `path_hash`=?');
- $query->execute(array(md5($root.$path)));
-
- //delete everything inside the folder
- $query=OC_DB::prepare('DELETE FROM `*PREFIX*fscache` WHERE `path` LIKE ?');
- $query->execute(array($root.$path.'/%'));
-
- OC_Cache::remove('fileid/'.$root.$path);
- }
-
- /**
- * return array of filenames matching the querty
- * @param string $query
- * @param boolean $returnData
- * @param string root (optional)
- * @return array of filepaths
- */
- public static function search($search, $returnData=false, $root=false) {
- if($root===false) {
- $root=OC_Filesystem::getRoot();
- }
- $rootLen=strlen($root);
- if(!$returnData) {
- $select = '`path`';
- }else{
- $select = '*';
- }
- if (OC_Config::getValue('dbtype') === 'oci8') {
- $where = 'LOWER(`name`) LIKE LOWER(?) AND `user`=?';
- } else {
- $where = '`name` LIKE ? AND `user`=?';
- }
- $query=OC_DB::prepare('SELECT '.$select.' FROM `*PREFIX*fscache` WHERE '.$where);
- $result=$query->execute(array("%$search%", OC_User::getUser()));
- $names=array();
- while($row=$result->fetchRow()) {
- if(!$returnData) {
- $names[]=substr($row['path'], $rootLen);
- }else{
- $row['path']=substr($row['path'], $rootLen);
- $names[]=$row;
- }
- }
- return $names;
- }
-
- /**
- * get all files and folders in a folder
- * @param string path
- * @param string root (optional)
- * @return array
- *
- * returns an array of assiciative arrays with the following keys:
- * - name
- * - size
- * - mtime
- * - ctime
- * - mimetype
- * - encrypted
- * - versioned
- */
- public static function getFolderContent($path, $root=false, $mimetype_filter='') {
- if(OC_FileCache_Update::hasUpdated($path, $root, true)) {
- OC_FileCache_Update::updateFolder($path, $root);
- }
- return OC_FileCache_Cached::getFolderContent($path, $root, $mimetype_filter);
- }
-
- /**
- * check if a file or folder is in the cache
- * @param string $path
- * @param string root (optional)
- * @return bool
- */
- public static function inCache($path, $root=false) {
- return self::getId($path, $root)!=-1;
- }
-
- /**
- * get the file id as used in the cache
- * @param string path
- * @param string root (optional)
- * @return int
- */
- public static function getId($path, $root=false) {
- if($root===false) {
- $root=OC_Filesystem::getRoot();
- }
-
- $fullPath=$root.$path;
- if(($cache=OC_Cache::getUserCache(true)) && $cache->hasKey('fileid/'.$fullPath)) {
- return $cache->get('fileid/'.$fullPath);
- }
-
- $query=OC_DB::prepare('SELECT `id` FROM `*PREFIX*fscache` WHERE `path_hash`=?');
- $result=$query->execute(array(md5($fullPath)));
- if(OC_DB::isError($result)) {
- OC_Log::write('files', 'error while getting file id of '.$path, OC_Log::ERROR);
- return -1;
- }
-
- $result=$result->fetchRow();
- if(is_array($result)) {
- $id=$result['id'];
- }else{
- $id=-1;
- }
- if($cache=OC_Cache::getUserCache(true)) {
- $cache->set('fileid/'.$fullPath, $id);
- }
-
- return $id;
- }
-
- /**
- * get the file path from the id, relative to the home folder of the user
- * @param int id
- * @param string user (optional)
- * @return string
- */
- public static function getPath($id, $user='') {
- if(!$user) {
- $user=OC_User::getUser();
- }
- $query=OC_DB::prepare('SELECT `path` FROM `*PREFIX*fscache` WHERE `id`=? AND `user`=?');
- $result=$query->execute(array($id, $user));
- $row=$result->fetchRow();
- $path=$row['path'];
- $root='/'.$user.'/files';
- if(substr($path, 0, strlen($root))!=$root) {
- return false;
- }
- return substr($path, strlen($root));
- }
-
- /**
- * get the file id of the parent folder, taking into account '/' has no parent
- * @param string $path
- * @return int
- */
- private static function getParentId($path) {
- if($path=='/') {
- return -1;
- }else{
- return self::getId(dirname($path), '');
- }
- }
-
- /**
- * adjust the size of the parent folders
- * @param string $path
- * @param int $sizeDiff
- * @param string root (optinal)
- */
- public static function increaseSize($path, $sizeDiff, $root=false) {
- if($sizeDiff==0) return;
- $item = OC_FileCache_Cached::get($path);
- //stop walking up the filetree if we hit a non-folder or reached the root folder
- if($path == '/' || $path=='' || $item['mimetype'] !== 'httpd/unix-directory') {
- return;
- }
- $id = $item['id'];
- while($id!=-1) {//walk up the filetree increasing the size of all parent folders
- $query=OC_DB::prepare('UPDATE `*PREFIX*fscache` SET `size`=`size`+? WHERE `id`=?');
- $query->execute(array($sizeDiff, $id));
- $path=dirname($path);
- if($path == '' or $path =='/') {
- return;
- }
- $parent = OC_FileCache_Cached::get($path);
- $id = $parent['id'];
- //stop walking up the filetree if we hit a non-folder
- if($parent['mimetype'] !== 'httpd/unix-directory') {
- return;
- }
- }
- }
-
- /**
- * recursively scan the filesystem and fill the cache
- * @param string $path
- * @param OC_EventSource $eventSource (optional)
- * @param int $count (optional)
- * @param string $root (optional)
- */
- public static function scan($path, $eventSource=false,&$count=0, $root=false) {
- if($eventSource) {
- $eventSource->send('scanning', array('file'=>$path, 'count'=>$count));
- }
- $lastSend=$count;
- // NOTE: Ugly hack to prevent shared files from going into the cache (the source already exists somewhere in the cache)
- if (substr($path, 0, 7) == '/Shared') {
- return;
- }
- if($root===false) {
- $view=OC_Filesystem::getView();
- }else{
- $view=new OC_FilesystemView($root);
- }
- self::scanFile($path, $root);
- $dh=$view->opendir($path.'/');
- $totalSize=0;
- if($dh) {
- while (($filename = readdir($dh)) !== false) {
- if($filename != '.' and $filename != '..') {
- $file=$path.'/'.$filename;
- if($view->is_dir($file.'/')) {
- self::scan($file, $eventSource, $count, $root);
- }else{
- $totalSize+=self::scanFile($file, $root);
- $count++;
- if($count>$lastSend+25 and $eventSource) {
- $lastSend=$count;
- $eventSource->send('scanning', array('file'=>$path, 'count'=>$count));
- }
- }
- }
- }
- }
-
- OC_FileCache_Update::cleanFolder($path, $root);
- self::increaseSize($path, $totalSize, $root);
- }
-
- /**
- * scan a single file
- * @param string path
- * @param string root (optional)
- * @return int size of the scanned file
- */
- public static function scanFile($path, $root=false) {
- // NOTE: Ugly hack to prevent shared files from going into the cache (the source already exists somewhere in the cache)
- if (substr($path, 0, 7) == '/Shared') {
- return;
- }
- if($root===false) {
- $view=OC_Filesystem::getView();
- }else{
- $view=new OC_FilesystemView($root);
- }
- if(!$view->is_readable($path)) return; //cant read, nothing we can do
- clearstatcache();
- $mimetype=$view->getMimeType($path);
- $stat=$view->stat($path);
- if($mimetype=='httpd/unix-directory') {
- $stat['size'] = 0;
- $writable=$view->is_writable($path.'/');
- }else{
- $writable=$view->is_writable($path);
- }
- $stat['mimetype']=$mimetype;
- $stat['writable']=$writable;
- if($path=='/') {
- $path='';
- }
- self::put($path, $stat, $root);
- return $stat['size'];
- }
-
- /**
- * find files by mimetype
- * @param string $part1
- * @param string $part2 (optional)
- * @param string root (optional)
- * @return array of file paths
- *
- * $part1 and $part2 together form the complete mimetype.
- * e.g. searchByMime('text', 'plain')
- *
- * seccond mimetype part can be ommited
- * e.g. searchByMime('audio')
- */
- public static function searchByMime($part1, $part2=null, $root=false) {
- if($root===false) {
- $root=OC_Filesystem::getRoot();
- }
- $rootLen=strlen($root);
- $root .= '%';
- $user=OC_User::getUser();
- if(!$part2) {
- $query=OC_DB::prepare('SELECT `path` FROM `*PREFIX*fscache` WHERE `mimepart`=? AND `user`=? AND `path` LIKE ?');
- $result=$query->execute(array($part1, $user, $root));
- }else{
- $query=OC_DB::prepare('SELECT `path` FROM `*PREFIX*fscache` WHERE `mimetype`=? AND `user`=? AND `path` LIKE ? ');
- $result=$query->execute(array($part1.'/'.$part2, $user, $root));
- }
- $names=array();
- while($row=$result->fetchRow()) {
- $names[]=substr($row['path'], $rootLen);
- }
- return $names;
- }
-
- /**
- * clean old pre-path_hash entries
- */
- public static function clean() {
- $query=OC_DB::prepare('DELETE FROM `*PREFIX*fscache` WHERE LENGTH(`path_hash`)<30');
- $query->execute();
- }
-
- /**
- * clear filecache entries
- * @param string user (optonal)
- */
- public static function clear($user='') {
- if($user) {
- $query=OC_DB::prepare('DELETE FROM `*PREFIX*fscache` WHERE `user`=?');
- $query->execute(array($user));
- }else{
- $query=OC_DB::prepare('DELETE FROM `*PREFIX*fscache`');
- $query->execute();
- }
- }
-
- /**
- * trigger an update for the cache by setting the mtimes to 0
- * @param string $user (optional)
- */
- public static function triggerUpdate($user='') {
- if($user) {
- $query=OC_DB::prepare('UPDATE `*PREFIX*fscache` SET `mtime`=0 WHERE `user`=? AND `mimetype`= ? ');
- $query->execute(array($user,'httpd/unix-directory'));
- }else{
- $query=OC_DB::prepare('UPDATE `*PREFIX*fscache` SET `mtime`=0 AND `mimetype`= ? ');
- $query->execute(array('httpd/unix-directory'));
- }
- }
-}
-
-//watch for changes and try to keep the cache up to date
-OC_Hook::connect('OC_Filesystem', 'post_write', 'OC_FileCache_Update', 'fileSystemWatcherWrite');
-OC_Hook::connect('OC_Filesystem', 'post_delete', 'OC_FileCache_Update', 'fileSystemWatcherDelete');
-OC_Hook::connect('OC_Filesystem', 'post_rename', 'OC_FileCache_Update', 'fileSystemWatcherRename');
-OC_Hook::connect('OC_User', 'post_deleteUser', 'OC_FileCache_Update', 'deleteFromUser');
diff --git a/lib/filecache/cached.php b/lib/filecache/cached.php
deleted file mode 100644
index 5e0a00746b9..00000000000
--- a/lib/filecache/cached.php
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
-/**
- * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-
-/**
- * get data from the filecache without checking for updates
- */
-class OC_FileCache_Cached{
- public static $savedData=array();
-
- public static function get($path, $root=false) {
- if($root===false) {
- $root=OC_Filesystem::getRoot();
- }
- $path=$root.$path;
- $stmt=OC_DB::prepare('SELECT `id`, `path`,`ctime`,`mtime`,`mimetype`,`size`,`encrypted`,`versioned`,`writable` FROM `*PREFIX*fscache` WHERE `path_hash`=?');
- if ( ! OC_DB::isError($stmt) ) {
- $result=$stmt->execute(array(md5($path)));
- if ( ! OC_DB::isError($result) ) {
- $result = $result->fetchRow();
- } else {
- OC:Log::write('OC_FileCache_Cached', 'could not execute get: '. OC_DB::getErrorMessage($result), OC_Log::ERROR);
- $result = false;
- }
- } else {
- OC_Log::write('OC_FileCache_Cached', 'could not prepare get: '. OC_DB::getErrorMessage($stmt), OC_Log::ERROR);
- $result = false;
- }
- if(is_array($result)) {
- if(isset(self::$savedData[$path])) {
- $result=array_merge($result, self::$savedData[$path]);
- }
- return $result;
- }else{
- if(isset(self::$savedData[$path])) {
- return self::$savedData[$path];
- }else{
- return array();
- }
- }
- }
-
- /**
- * get all files and folders in a folder
- * @param string path
- * @param string root (optional)
- * @return array
- *
- * returns an array of assiciative arrays with the following keys:
- * - path
- * - name
- * - size
- * - mtime
- * - ctime
- * - mimetype
- * - encrypted
- * - versioned
- */
- public static function getFolderContent($path, $root=false, $mimetype_filter='') {
- if($root===false) {
- $root=OC_Filesystem::getRoot();
- }
- $parent=OC_FileCache::getId($path, $root);
- if($parent==-1) {
- return array();
- }
- $query=OC_DB::prepare('SELECT `id`,`path`,`name`,`ctime`,`mtime`,`mimetype`,`size`,`encrypted`,`versioned`,`writable` FROM `*PREFIX*fscache` WHERE `parent`=? AND (`mimetype` LIKE ? OR `mimetype` = ?)');
- $result=$query->execute(array($parent, $mimetype_filter.'%', 'httpd/unix-directory'))->fetchAll();
- if(is_array($result)) {
- return $result;
- }else{
- OC_Log::write('files', 'getFolderContent(): file not found in cache ('.$path.')', OC_Log::DEBUG);
- return false;
- }
- }
-}
diff --git a/lib/filecache/update.php b/lib/filecache/update.php
deleted file mode 100644
index bc403113e7c..00000000000
--- a/lib/filecache/update.php
+++ /dev/null
@@ -1,227 +0,0 @@
-<?php
-/**
- * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-
-/**
- * handles updating the filecache according to outside changes
- */
-class OC_FileCache_Update{
- /**
- * check if a file or folder is updated outside owncloud
- * @param string path
- * @param string root (optional)
- * @param boolean folder
- * @return bool
- */
- public static function hasUpdated($path, $root=false, $folder=false) {
- if($root===false) {
- $view=OC_Filesystem::getView();
- }else{
- $view=new OC_FilesystemView($root);
- }
- if(!$view->file_exists($path)) {
- return false;
- }
- $cachedData=OC_FileCache_Cached::get($path, $root);
- if(isset($cachedData['mtime'])) {
- $cachedMTime=$cachedData['mtime'];
- if($folder) {
- return $view->hasUpdated($path.'/', $cachedMTime);
- }else{
- return $view->hasUpdated($path, $cachedMTime);
- }
- }else{//file not in cache, so it has to be updated
- if(($path=='/' or $path=='') and $root===false) {//dont auto update the home folder, it will be scanned
- return false;
- }
- return true;
- }
- }
-
- /**
- * delete non existing files from the cache
- */
- public static function cleanFolder($path, $root=false) {
- if($root===false) {
- $view=OC_Filesystem::getView();
- }else{
- $view=new OC_FilesystemView($root);
- }
-
- $cachedContent=OC_FileCache_Cached::getFolderContent($path, $root);
- foreach($cachedContent as $fileData) {
- $path=$fileData['path'];
- $file=$view->getRelativePath($path);
- if(!$view->file_exists($file)) {
- if($root===false) {//filesystem hooks are only valid for the default root
- OC_Hook::emit('OC_Filesystem', 'post_delete', array('path'=>$file));
- }else{
- self::delete($file, $root);
- }
- }
- }
- }
-
- /**
- * update the cache according to changes in the folder
- * @param string path
- * @param string root (optional)
- */
- public static function updateFolder($path, $root=false) {
- if($root===false) {
- $view=OC_Filesystem::getView();
- }else{
- $view=new OC_FilesystemView($root);
- }
- $dh=$view->opendir($path.'/');
- if($dh) {//check for changed/new files
- while (($filename = readdir($dh)) !== false) {
- if($filename != '.' and $filename != '..' and $filename != '') {
- $file=$path.'/'.$filename;
- $isDir=$view->is_dir($file);
- if(self::hasUpdated($file, $root, $isDir)) {
- if($isDir) {
- self::updateFolder($file, $root);
- }elseif($root===false) {//filesystem hooks are only valid for the default root
- OC_Hook::emit('OC_Filesystem', 'post_write', array('path'=>$file));
- }else{
- self::update($file, $root);
- }
- }
- }
- }
- }
-
- self::cleanFolder($path, $root);
-
- //update the folder last, so we can calculate the size correctly
- if($root===false) {//filesystem hooks are only valid for the default root
- OC_Hook::emit('OC_Filesystem', 'post_write', array('path'=>$path));
- }else{
- self::update($path, $root);
- }
- }
-
- /**
- * called when changes are made to files
- * @param array $params
- * @param string root (optional)
- */
- public static function fileSystemWatcherWrite($params) {
- $path=$params['path'];
- self::update($path);
- }
-
- /**
- * called when files are deleted
- * @param array $params
- * @param string root (optional)
- */
- public static function fileSystemWatcherDelete($params) {
- $path=$params['path'];
- self::delete($path);
- }
-
- /**
- * called when files are deleted
- * @param array $params
- * @param string root (optional)
- */
- public static function fileSystemWatcherRename($params) {
- $oldPath=$params['oldpath'];
- $newPath=$params['newpath'];
- self::rename($oldPath, $newPath);
- }
-
- /**
- * update the filecache according to changes to the filesystem
- * @param string path
- * @param string root (optional)
- */
- public static function update($path, $root=false) {
- if($root===false) {
- $view=OC_Filesystem::getView();
- }else{
- $view=new OC_FilesystemView($root);
- }
-
- $mimetype=$view->getMimeType($path);
-
- $size=0;
- $cached=OC_FileCache_Cached::get($path, $root);
- $cachedSize=isset($cached['size'])?$cached['size']:0;
-
- if($view->is_dir($path.'/')) {
- if(OC_FileCache::inCache($path, $root)) {
- $cachedContent=OC_FileCache_Cached::getFolderContent($path, $root);
- foreach($cachedContent as $file) {
- $size+=$file['size'];
- }
- $mtime=$view->filemtime($path.'/');
- $ctime=$view->filectime($path.'/');
- $writable=$view->is_writable($path.'/');
- OC_FileCache::put($path, array('size'=>$size,'mtime'=>$mtime,'ctime'=>$ctime,'mimetype'=>$mimetype, 'writable'=>$writable));
- }else{
- $count=0;
- OC_FileCache::scan($path, null, $count, $root);
- return; //increaseSize is already called inside scan
- }
- }else{
- $size=OC_FileCache::scanFile($path, $root);
- }
- if($path !== '' and $path !== '/') {
- OC_FileCache::increaseSize(dirname($path), $size-$cachedSize, $root);
- }
- }
-
- /**
- * update the filesystem after a delete has been detected
- * @param string path
- * @param string root (optional)
- */
- public static function delete($path, $root=false) {
- $cached=OC_FileCache_Cached::get($path, $root);
- if(!isset($cached['size'])) {
- return;
- }
- $size=$cached['size'];
- OC_FileCache::increaseSize(dirname($path), -$size, $root);
- OC_FileCache::delete($path, $root);
- }
-
- /**
- * update the filesystem after a rename has been detected
- * @param string oldPath
- * @param string newPath
- * @param string root (optional)
- */
- public static function rename($oldPath, $newPath, $root=false) {
- if(!OC_FileCache::inCache($oldPath, $root)) {
- return;
- }
- if($root===false) {
- $view=OC_Filesystem::getView();
- }else{
- $view=new OC_FilesystemView($root);
- }
-
- $cached=OC_FileCache_Cached::get($oldPath, $root);
- $oldSize=$cached['size'];
- OC_FileCache::increaseSize(dirname($oldPath), -$oldSize, $root);
- OC_FileCache::increaseSize(dirname($newPath), $oldSize, $root);
- OC_FileCache::move($oldPath, $newPath);
- }
-
- /**
- * delete files owned by user from the cache
- * @param string $parameters$parameters["uid"])
- */
- public static function deleteFromUser($parameters) {
- OC_FileCache::clear($parameters["uid"]);
- }
-}
diff --git a/lib/filechunking.php b/lib/filechunking.php
index 55a4d730430..d63a0d72c83 100644
--- a/lib/filechunking.php
+++ b/lib/filechunking.php
@@ -94,49 +94,49 @@ class OC_FileChunking {
}
public function file_assemble($path) {
- $absolutePath = OC_Filesystem::normalizePath(OC_Filesystem::getView()->getAbsolutePath($path));
+ $absolutePath = \OC\Files\Filesystem::normalizePath(\OC\Files\Filesystem::getView()->getAbsolutePath($path));
$data = '';
// use file_put_contents as method because that best matches what this function does
- if (OC_FileProxy::runPreProxies('file_put_contents', $absolutePath, $data) && OC_Filesystem::isValidPath($path)) {
- $path = OC_Filesystem::getView()->getRelativePath($absolutePath);
- $exists = OC_Filesystem::file_exists($path);
+ if (OC_FileProxy::runPreProxies('file_put_contents', $absolutePath, $data) && \OC\Files\Filesystem::isValidPath($path)) {
+ $path = \OC\Files\Filesystem::getView()->getRelativePath($absolutePath);
+ $exists = \OC\Files\Filesystem::file_exists($path);
$run = true;
if(!$exists) {
OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_create,
+ \OC\Files\Filesystem::CLASSNAME,
+ \OC\Files\Filesystem::signal_create,
array(
- OC_Filesystem::signal_param_path => $path,
- OC_Filesystem::signal_param_run => &$run
+ \OC\Files\Filesystem::signal_param_path => $path,
+ \OC\Files\Filesystem::signal_param_run => &$run
)
);
}
OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_write,
+ \OC\Files\Filesystem::CLASSNAME,
+ \OC\Files\Filesystem::signal_write,
array(
- OC_Filesystem::signal_param_path => $path,
- OC_Filesystem::signal_param_run => &$run
+ \OC\Files\Filesystem::signal_param_path => $path,
+ \OC\Files\Filesystem::signal_param_run => &$run
)
);
if(!$run) {
return false;
}
- $target = OC_Filesystem::fopen($path, 'w');
+ $target = \OC\Files\Filesystem::fopen($path, 'w');
if($target) {
$count = $this->assemble($target);
fclose($target);
if(!$exists) {
OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_post_create,
- array( OC_Filesystem::signal_param_path => $path)
+ \OC\Files\Filesystem::CLASSNAME,
+ \OC\Files\Filesystem::signal_post_create,
+ array( \OC\Files\Filesystem::signal_param_path => $path)
);
}
OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_post_write,
- array( OC_Filesystem::signal_param_path => $path)
+ \OC\Files\Filesystem::CLASSNAME,
+ \OC\Files\Filesystem::signal_post_write,
+ array( \OC\Files\Filesystem::signal_param_path => $path)
);
OC_FileProxy::runPostProxies('file_put_contents', $absolutePath, $count);
return $count > 0;
diff --git a/lib/fileproxy.php b/lib/fileproxy.php
index 2f81bde64a1..52ec79b4bdb 100644
--- a/lib/fileproxy.php
+++ b/lib/fileproxy.php
@@ -36,7 +36,7 @@
* The return value of the post-proxy will be used as the new result of the operation
* The operations that have a post-proxy are:
* file_get_contents, is_file, is_dir, file_exists, stat, is_readable,
- * is_writable, fileatime, filemtime, filectime, file_get_contents,
+ * is_writable, filemtime, filectime, file_get_contents,
* getMimeType, hash, fopen, free_space and search
*/
diff --git a/lib/fileproxy/fileoperations.php b/lib/fileproxy/fileoperations.php
index 516629adaec..47ccd8f8c26 100644
--- a/lib/fileproxy/fileoperations.php
+++ b/lib/fileproxy/fileoperations.php
@@ -28,10 +28,10 @@ class OC_FileProxy_FileOperations extends OC_FileProxy{
static $rootView;
public function premkdir($path) {
- if(!self::$rootView) {
- self::$rootView = new OC_FilesystemView('');
+ if(!self::$rootView){
+ self::$rootView = new \OC\Files\View('');
}
return !self::$rootView->file_exists($path);
}
-} \ No newline at end of file
+}
diff --git a/lib/fileproxy/quota.php b/lib/fileproxy/quota.php
index 503288142aa..7e0f631c8fb 100644
--- a/lib/fileproxy/quota.php
+++ b/lib/fileproxy/quota.php
@@ -22,7 +22,7 @@
*/
/**
- * user quota managment
+ * user quota management
*/
class OC_FileProxy_Quota extends OC_FileProxy{
@@ -57,23 +57,25 @@ class OC_FileProxy_Quota extends OC_FileProxy{
* @return int
*/
private function getFreeSpace($path) {
- $storage=OC_Filesystem::getStorage($path);
- $owner=$storage->getOwner($path);
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ * @var string $internalPath
+ */
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($path);
+ $owner=$storage->getOwner($internalPath);
+ if (!$owner) {
+ return -1;
+ }
$totalSpace=$this->getQuota($owner);
if($totalSpace==-1) {
return -1;
}
- $rootInfo=OC_FileCache::get('', "/".$owner."/files");
- // TODO Remove after merge of share_api
- if (OC_FileCache::inCache('/Shared', "/".$owner."/files")) {
- $sharedInfo=OC_FileCache::get('/Shared', "/".$owner."/files");
- } else {
- $sharedInfo = null;
- }
+ $view = new \OC\Files\View("/".$owner."/files");
+
+ $rootInfo=$view->getFileInfo('/');
$usedSpace=isset($rootInfo['size'])?$rootInfo['size']:0;
- $usedSpace=isset($sharedInfo['size'])?$usedSpace-$sharedInfo['size']:$usedSpace;
return $totalSpace-$usedSpace;
}
@@ -93,8 +95,8 @@ class OC_FileProxy_Quota extends OC_FileProxy{
}
public function preCopy($path1, $path2) {
- if(!self::$rootView) {
- self::$rootView = new OC_FilesystemView('');
+ if(!self::$rootView){
+ self::$rootView = new \OC\Files\View('');
}
return (self::$rootView->filesize($path1)<$this->getFreeSpace($path2) or $this->getFreeSpace($path2)==-1);
}
diff --git a/lib/files.php b/lib/files.php
index f4e0f140a44..e3245653f99 100644
--- a/lib/files.php
+++ b/lib/files.php
@@ -1,144 +1,48 @@
<?php
/**
-* ownCloud
-*
-* @author Frank Karlitschek
-* @copyright 2012 Frank Karlitschek frank@owncloud.org
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
-* License as published by the Free Software Foundation; either
-* version 3 of the License, or any later version.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
-*
-* You should have received a copy of the GNU Affero General Public
-* License along with this library. If not, see <http://www.gnu.org/licenses/>.
-*
-*/
+ * ownCloud
+ *
+ * @author Frank Karlitschek
+ * @copyright 2012 Frank Karlitschek frank@owncloud.org
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
/**
* Class for fileserver access
*
*/
class OC_Files {
- static $tmpFiles=array();
+ static $tmpFiles = array();
- /**
- * get the filesystem info
- * @param string path
- * @return array
- *
- * returns an associative array with the following keys:
- * - size
- * - mtime
- * - ctime
- * - mimetype
- * - encrypted
- * - versioned
- */
- public static function getFileInfo($path) {
- $path = OC_Filesystem::normalizePath($path);
- if (($path == '/Shared' || substr($path, 0, 8) == '/Shared/') && OC_App::isEnabled('files_sharing')) {
- if ($path == '/Shared') {
- list($info) = OCP\Share::getItemsSharedWith('file', OC_Share_Backend_File::FORMAT_FILE_APP_ROOT);
- } else {
- $info = array();
- if (OC_Filesystem::file_exists($path)) {
- $info['size'] = OC_Filesystem::filesize($path);
- $info['mtime'] = OC_Filesystem::filemtime($path);
- $info['ctime'] = OC_Filesystem::filectime($path);
- $info['mimetype'] = OC_Filesystem::getMimeType($path);
- $info['encrypted'] = false;
- $info['versioned'] = false;
- }
- }
- } else {
- $info = OC_FileCache::get($path);
- }
- return $info;
- }
-
- /**
- * get the content of a directory
- * @param dir $directory path under datadirectory
- */
- public static function getDirectoryContent($directory, $mimetype_filter = '') {
- $directory=OC_Filesystem::normalizePath($directory);
- if($directory=='/') {
- $directory='';
- }
- $files = array();
- if (($directory == '/Shared' || substr($directory, 0, 8) == '/Shared/') && OC_App::isEnabled('files_sharing')) {
- if ($directory == '/Shared') {
- $files = OCP\Share::getItemsSharedWith('file', OC_Share_Backend_File::FORMAT_FILE_APP, array('folder' => $directory, 'mimetype_filter' => $mimetype_filter));
- } else {
- $pos = strpos($directory, '/', 8);
- // Get shared folder name
- if ($pos !== false) {
- $itemTarget = substr($directory, 7, $pos - 7);
- } else {
- $itemTarget = substr($directory, 7);
- }
- $files = OCP\Share::getItemSharedWith('folder', $itemTarget, OC_Share_Backend_File::FORMAT_FILE_APP, array('folder' => $directory, 'mimetype_filter' => $mimetype_filter));
- }
- } else {
- $files = OC_FileCache::getFolderContent($directory, false, $mimetype_filter);
- foreach ($files as &$file) {
- $file['directory'] = $directory;
- $file['type'] = ($file['mimetype'] == 'httpd/unix-directory') ? 'dir' : 'file';
- $permissions = OCP\PERMISSION_READ;
- // NOTE: Remove check when new encryption is merged
- if (!$file['encrypted']) {
- $permissions |= OCP\PERMISSION_SHARE;
- }
- if ($file['type'] == 'dir' && $file['writable']) {
- $permissions |= OCP\PERMISSION_CREATE;
- }
- if ($file['writable']) {
- $permissions |= OCP\PERMISSION_UPDATE | OCP\PERMISSION_DELETE;
- }
- $file['permissions'] = $permissions;
- }
- if ($directory == '' && OC_App::isEnabled('files_sharing')) {
- // Add 'Shared' folder
- $files = array_merge($files, OCP\Share::getItemsSharedWith('file', OC_Share_Backend_File::FORMAT_FILE_APP_ROOT));
- }
- }
- usort($files, "fileCmp");//TODO: remove this once ajax is merged
- return $files;
+ static public function getFileInfo($path){
+ return \OC\Files\Filesystem::getFileInfo($path);
}
- public static function searchByMime($mimetype_filter) {
- $files = array();
- $dirs_to_check = array('');
- while (!empty($dirs_to_check)) {
- // get next subdir to check
- $dir = array_pop($dirs_to_check);
- $dir_content = self::getDirectoryContent($dir, $mimetype_filter);
- foreach($dir_content as $file) {
- if ($file['type'] == 'file') {
- $files[] = $dir.'/'.$file['name'];
- }
- else {
- $dirs_to_check[] = $dir.'/'.$file['name'];
- }
- }
- }
- return $files;
+ static public function getDirectoryContent($path){
+ return \OC\Files\Filesystem::getDirectoryContent($path);
}
/**
- * return the content of a file or return a zip file containning multiply files
- *
- * @param dir $dir
- * @param file $file ; seperated list of files to download
- * @param boolean $only_header ; boolean to only send header of the request
- */
+ * return the content of a file or return a zip file containing multiple files
+ *
+ * @param string $dir
+ * @param string $file ; separated list of files to download
+ * @param boolean $only_header ; boolean to only send header of the request
+ */
public static function get($dir, $files, $only_header = false) {
$xsendfile = false;
if (isset($_SERVER['MOD_X_SENDFILE_ENABLED']) ||
@@ -149,7 +53,7 @@ class OC_Files {
$files=explode(';', $files);
}
- if(is_array($files)) {
+ if (is_array($files)) {
self::validateZipDownload($dir, $files);
$executionTime = intval(ini_get('max_execution_time'));
set_time_limit(0);
@@ -162,19 +66,20 @@ class OC_Files {
if ($zip->open($filename, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE)!==true) {
exit("cannot open <$filename>\n");
}
- foreach($files as $file) {
- $file=$dir.'/'.$file;
- if(OC_Filesystem::is_file($file)) {
- $tmpFile=OC_Filesystem::toTmpFile($file);
- self::$tmpFiles[]=$tmpFile;
+ foreach ($files as $file) {
+ $file = $dir . '/' . $file;
+ if (\OC\Files\Filesystem::is_file($file)) {
+ $tmpFile = \OC\Files\Filesystem::toTmpFile($file);
+ self::$tmpFiles[] = $tmpFile;
$zip->addFile($tmpFile, basename($file));
- }elseif(OC_Filesystem::is_dir($file)) {
+ } elseif (\OC\Files\Filesystem::is_dir($file)) {
self::zipAddDir($file, $zip);
}
}
$zip->close();
+ $name = basename($dir) . '.zip';
set_time_limit($executionTime);
- }elseif(OC_Filesystem::is_dir($dir.'/'.$files)) {
+ } elseif (\OC\Files\Filesystem::is_dir($dir . '/' . $files)) {
self::validateZipDownload($dir, $files);
$executionTime = intval(ini_get('max_execution_time'));
set_time_limit(0);
@@ -187,53 +92,55 @@ class OC_Files {
if ($zip->open($filename, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE)!==true) {
exit("cannot open <$filename>\n");
}
- $file=$dir.'/'.$files;
+ $file = $dir . '/' . $files;
self::zipAddDir($file, $zip);
$zip->close();
+ $name = $files . '.zip';
set_time_limit($executionTime);
- }else{
- $zip=false;
- $filename=$dir.'/'.$files;
+ } else {
+ $zip = false;
+ $filename = $dir . '/' . $files;
+ $name = $files;
}
OC_Util::obEnd();
- if($zip or OC_Filesystem::is_readable($filename)) {
+ if ($zip or \OC\Files\Filesystem::isReadable($filename)) {
if ( preg_match( "/MSIE/", $_SERVER["HTTP_USER_AGENT"] ) ) {
- header( 'Content-Disposition: attachment; filename="' . rawurlencode( basename($filename) ) . '"' );
+ header( 'Content-Disposition: attachment; filename="' . rawurlencode($name) . '"' );
} else {
- header( 'Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode( basename($filename) )
- . '; filename="' . rawurlencode( basename($filename) ) . '"' );
+ header( 'Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode($name)
+ . '; filename="' . rawurlencode($name) . '"' );
}
header('Content-Transfer-Encoding: binary');
OC_Response::disableCaching();
- if($zip) {
+ if ($zip) {
ini_set('zlib.output_compression', 'off');
header('Content-Type: application/zip');
header('Content-Length: ' . filesize($filename));
self::addSendfileHeader($filename);
}else{
- header('Content-Type: '.OC_Filesystem::getMimeType($filename));
- header("Content-Length: ".OC_Filesystem::filesize($filename));
- $storage = OC_Filesystem::getStorage($filename);
- if ($storage instanceof OC_Filestorage_Local) {
- self::addSendfileHeader(OC_Filesystem::getLocalFile($filename));
+ header('Content-Type: '.\OC\Files\Filesystem::getMimeType($filename));
+ header("Content-Length: ".\OC\Files\Filesystem::filesize($filename));
+ list($storage) = \OC\Files\Filesystem::resolvePath($filename);
+ if ($storage instanceof \OC\File\Storage\Local) {
+ self::addSendfileHeader(\OC\Files\Filesystem::getLocalFile($filename));
}
}
- }elseif($zip or !OC_Filesystem::file_exists($filename)) {
+ } elseif ($zip or !\OC\Files\Filesystem::file_exists($filename)) {
header("HTTP/1.0 404 Not Found");
- $tmpl = new OC_Template( '', '404', 'guest' );
- $tmpl->assign('file', $filename);
+ $tmpl = new OC_Template('', '404', 'guest');
+ $tmpl->assign('file', $name);
$tmpl->printPage();
- }else{
+ } else {
header("HTTP/1.0 403 Forbidden");
die('403 Forbidden');
}
if($only_header) {
return ;
}
- if($zip) {
- $handle=fopen($filename, 'r');
+ if ($zip) {
+ $handle = fopen($filename, 'r');
if ($handle) {
- $chunkSize = 8*1024;// 1 MB chunks
+ $chunkSize = 8 * 1024; // 1 MB chunks
while (!feof($handle)) {
echo fread($handle, $chunkSize);
flush();
@@ -243,10 +150,10 @@ class OC_Files {
unlink($filename);
}
}else{
- OC_Filesystem::readfile($filename);
+ \OC\Files\Filesystem::readfile($filename);
}
- foreach(self::$tmpFiles as $tmpFile) {
- if(file_exists($tmpFile) and is_file($tmpFile)) {
+ foreach (self::$tmpFiles as $tmpFile) {
+ if (file_exists($tmpFile) and is_file($tmpFile)) {
unlink($tmpFile);
}
}
@@ -269,97 +176,27 @@ class OC_Files {
foreach($files as $file) {
$filename=$file['name'];
$file=$dir.'/'.$filename;
- if(OC_Filesystem::is_file($file)) {
- $tmpFile=OC_Filesystem::toTmpFile($file);
+ if(\OC\Files\Filesystem::is_file($file)) {
+ $tmpFile=\OC\Files\Filesystem::toTmpFile($file);
OC_Files::$tmpFiles[]=$tmpFile;
$zip->addFile($tmpFile, $internalDir.$filename);
- }elseif(OC_Filesystem::is_dir($file)) {
+ }elseif(\OC\Files\Filesystem::is_dir($file)) {
self::zipAddDir($file, $zip, $internalDir);
}
}
}
- /**
- * move a file or folder
- *
- * @param dir $sourceDir
- * @param file $source
- * @param dir $targetDir
- * @param file $target
- */
- public static function move($sourceDir, $source, $targetDir, $target) {
- if(OC_User::isLoggedIn() && ($sourceDir != '' || $source != 'Shared')) {
- $targetFile=self::normalizePath($targetDir.'/'.$target);
- $sourceFile=self::normalizePath($sourceDir.'/'.$source);
- return OC_Filesystem::rename($sourceFile, $targetFile);
- } else {
- return false;
- }
- }
-
- /**
- * copy a file or folder
- *
- * @param dir $sourceDir
- * @param file $source
- * @param dir $targetDir
- * @param file $target
- */
- public static function copy($sourceDir, $source, $targetDir, $target) {
- if(OC_User::isLoggedIn()) {
- $targetFile=$targetDir.'/'.$target;
- $sourceFile=$sourceDir.'/'.$source;
- return OC_Filesystem::copy($sourceFile, $targetFile);
- }
- }
-
- /**
- * create a new file or folder
- *
- * @param dir $dir
- * @param file $name
- * @param type $type
- */
- public static function newFile($dir, $name, $type) {
- if(OC_User::isLoggedIn()) {
- $file=$dir.'/'.$name;
- if($type=='dir') {
- return OC_Filesystem::mkdir($file);
- }elseif($type=='file') {
- $fileHandle=OC_Filesystem::fopen($file, 'w');
- if($fileHandle) {
- fclose($fileHandle);
- return true;
- }else{
- return false;
- }
- }
- }
- }
/**
- * deletes a file or folder
- *
- * @param dir $dir
- * @param file $name
- */
- public static function delete($dir, $file) {
- if(OC_User::isLoggedIn() && ($dir!= '' || $file != 'Shared')) {
- $file=$dir.'/'.$file;
- return OC_Filesystem::unlink($file);
- }
- }
-
- /**
- * checks if the selected files are within the size constraint. If not, outputs an error page.
- *
- * @param dir $dir
- * @param files $files
- */
+ * checks if the selected files are within the size constraint. If not, outputs an error page.
+ *
+ * @param dir $dir
+ * @param files $files
+ */
static function validateZipDownload($dir, $files) {
- if(!OC_Config::getValue('allowZipDownload', true)) {
+ if (!OC_Config::getValue('allowZipDownload', true)) {
$l = OC_L10N::get('lib');
header("HTTP/1.0 409 Conflict");
- $tmpl = new OC_Template( '', 'error', 'user' );
+ $tmpl = new OC_Template('', 'error', 'user');
$errors = array(
array(
'error' => $l->t('ZIP download is turned off.'),
@@ -372,19 +209,19 @@ class OC_Files {
}
$zipLimit = OC_Config::getValue('maxZipInputSize', OC_Helper::computerFileSize('800 MB'));
- if($zipLimit > 0) {
+ if ($zipLimit > 0) {
$totalsize = 0;
- if(is_array($files)) {
- foreach($files as $file) {
- $totalsize += OC_Filesystem::filesize($dir.'/'.$file);
+ if (is_array($files)) {
+ foreach ($files as $file) {
+ $totalsize += \OC\Files\Filesystem::filesize($dir . '/' . $file);
}
- }else{
- $totalsize += OC_Filesystem::filesize($dir.'/'.$files);
+ } else {
+ $totalsize += \OC\Files\Filesystem::filesize($dir . '/' . $files);
}
- if($totalsize > $zipLimit) {
+ if ($totalsize > $zipLimit) {
$l = OC_L10N::get('lib');
header("HTTP/1.0 409 Conflict");
- $tmpl = new OC_Template( '', 'error', 'user' );
+ $tmpl = new OC_Template('', 'error', 'user');
$errors = array(
array(
'error' => $l->t('Selected files too large to generate zip file.'),
@@ -399,78 +236,31 @@ class OC_Files {
}
/**
- * try to detect the mime type of a file
- *
- * @param string path
- * @return string guessed mime type
- */
- static function getMimeType($path) {
- return OC_Filesystem::getMimeType($path);
- }
-
- /**
- * get a file tree
- *
- * @param string path
- * @return array
- */
- static function getTree($path) {
- return OC_Filesystem::getTree($path);
- }
-
- /**
- * pull a file from a remote server
- * @param string source
- * @param string token
- * @param string dir
- * @param string file
- * @return string guessed mime type
- */
- static function pull($source, $token, $dir, $file) {
- $tmpfile=tempnam(get_temp_dir(), 'remoteCloudFile');
- $fp=fopen($tmpfile, 'w+');
- $url=$source.="/files/pull.php?token=$token";
- $ch=curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_FILE, $fp);
- curl_exec($ch);
- fclose($fp);
- $info=curl_getinfo($ch);
- $httpCode=$info['http_code'];
- curl_close($ch);
- if($httpCode==200 or $httpCode==0) {
- OC_Filesystem::fromTmpFile($tmpfile, $dir.'/'.$file);
- return true;
- }else{
- return false;
- }
- }
-
- /**
* set the maximum upload size limit for apache hosts using .htaccess
+ *
* @param int size filesisze in bytes
* @return false on failure, size on success
*/
static function setUploadLimit($size) {
//don't allow user to break his config -- upper boundary
- if($size > PHP_INT_MAX) {
+ if ($size > PHP_INT_MAX) {
//max size is always 1 byte lower than computerFileSize returns
- if($size > PHP_INT_MAX+1)
+ if ($size > PHP_INT_MAX + 1)
return false;
- $size -=1;
+ $size -= 1;
} else {
- $size=OC_Helper::humanFileSize($size);
- $size=substr($size, 0, -1);//strip the B
- $size=str_replace(' ', '', $size); //remove the space between the size and the postfix
+ $size = OC_Helper::humanFileSize($size);
+ $size = substr($size, 0, -1); //strip the B
+ $size = str_replace(' ', '', $size); //remove the space between the size and the postfix
}
//don't allow user to break his config -- broken or malicious size input
- if(intval($size) == 0) {
+ if (intval($size) == 0) {
return false;
}
- $htaccess = @file_get_contents(OC::$SERVERROOT.'/.htaccess'); //supress errors in case we don't have permissions for
- if(!$htaccess) {
+ $htaccess = @file_get_contents(OC::$SERVERROOT . '/.htaccess'); //supress errors in case we don't have permissions for
+ if (!$htaccess) {
return false;
}
@@ -479,52 +269,26 @@ class OC_Files {
'post_max_size'
);
- foreach($phpValueKeys as $key) {
- $pattern = '/php_value '.$key.' (\S)*/';
- $setting = 'php_value '.$key.' '.$size;
- $hasReplaced = 0;
- $content = preg_replace($pattern, $setting, $htaccess, 1, $hasReplaced);
- if($content !== null) {
+ foreach ($phpValueKeys as $key) {
+ $pattern = '/php_value ' . $key . ' (\S)*/';
+ $setting = 'php_value ' . $key . ' ' . $size;
+ $hasReplaced = 0;
+ $content = preg_replace($pattern, $setting, $htaccess, 1, $hasReplaced);
+ if ($content !== null) {
$htaccess = $content;
}
- if($hasReplaced == 0) {
+ if ($hasReplaced == 0) {
$htaccess .= "\n" . $setting;
}
}
//check for write permissions
- if(is_writable(OC::$SERVERROOT.'/.htaccess')) {
- file_put_contents(OC::$SERVERROOT.'/.htaccess', $htaccess);
+ if (is_writable(OC::$SERVERROOT . '/.htaccess')) {
+ file_put_contents(OC::$SERVERROOT . '/.htaccess', $htaccess);
return OC_Helper::computerFileSize($size);
} else {
- OC_Log::write('files', 'Can\'t write upload limit to '.OC::$SERVERROOT.'/.htaccess. Please check the file permissions', OC_Log::WARN);
+ OC_Log::write('files', 'Can\'t write upload limit to ' . OC::$SERVERROOT . '/.htaccess. Please check the file permissions', OC_Log::WARN);
}
-
return false;
}
-
- /**
- * normalize a path, removing any double, add leading /, etc
- * @param string $path
- * @return string
- */
- static public function normalizePath($path) {
- $path='/'.$path;
- $old='';
- while($old!=$path) {//replace any multiplicity of slashes with a single one
- $old=$path;
- $path=str_replace('//', '/', $path);
- }
- return $path;
- }
-}
-
-function fileCmp($a, $b) {
- if($a['type']=='dir' and $b['type']!='dir') {
- return -1;
- }elseif($a['type']!='dir' and $b['type']=='dir') {
- return 1;
- }else{
- return strnatcasecmp($a['name'], $b['name']);
- }
}
diff --git a/lib/files/cache/cache.php b/lib/files/cache/cache.php
new file mode 100644
index 00000000000..69cbaea8516
--- /dev/null
+++ b/lib/files/cache/cache.php
@@ -0,0 +1,521 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Cache;
+
+/**
+ * Metadata cache for the filesystem
+ *
+ * don't use this class directly if you need to get metadata, use \OC\Files\Filesystem::getFileInfo instead
+ */
+class Cache {
+ const NOT_FOUND = 0;
+ const PARTIAL = 1; //only partial data available, file not cached in the database
+ const SHALLOW = 2; //folder in cache, but not all child files are completely scanned
+ const COMPLETE = 3;
+
+ /**
+ * @var array partial data for the cache
+ */
+ private $partial = array();
+
+ /**
+ * @var string
+ */
+ private $storageId;
+
+ /**
+ * numeric storage id
+ *
+ * @var int $numericId
+ */
+ private $numericId;
+
+ private $mimetypeIds = array();
+ private $mimetypes = array();
+
+ /**
+ * @param \OC\Files\Storage\Storage|string $storage
+ */
+ public function __construct($storage) {
+ if ($storage instanceof \OC\Files\Storage\Storage) {
+ $this->storageId = $storage->getId();
+ } else {
+ $this->storageId = $storage;
+ }
+
+ $query = \OC_DB::prepare('SELECT `numeric_id` FROM `*PREFIX*storages` WHERE `id` = ?');
+ $result = $query->execute(array($this->storageId));
+ if ($row = $result->fetchRow()) {
+ $this->numericId = $row['numeric_id'];
+ } else {
+ $query = \OC_DB::prepare('INSERT INTO `*PREFIX*storages`(`id`) VALUES(?)');
+ $query->execute(array($this->storageId));
+ $this->numericId = \OC_DB::insertid('*PREFIX*filecache');
+ }
+ }
+
+ public function getNumericStorageId() {
+ return $this->numericId;
+ }
+
+ /**
+ * normalize mimetypes
+ *
+ * @param string $mime
+ * @return int
+ */
+ public function getMimetypeId($mime) {
+ if (!isset($this->mimetypeIds[$mime])) {
+ $query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*mimetypes` WHERE `mimetype` = ?');
+ $result = $query->execute(array($mime));
+ if ($row = $result->fetchRow()) {
+ $this->mimetypeIds[$mime] = $row['id'];
+ } else {
+ $query = \OC_DB::prepare('INSERT INTO `*PREFIX*mimetypes`(`mimetype`) VALUES(?)');
+ $query->execute(array($mime));
+ $this->mimetypeIds[$mime] = \OC_DB::insertid('*PREFIX*mimetypes');
+ }
+ $this->mimetypes[$this->mimetypeIds[$mime]] = $mime;
+ }
+ return $this->mimetypeIds[$mime];
+ }
+
+ public function getMimetype($id) {
+ if (!isset($this->mimetypes[$id])) {
+ $query = \OC_DB::prepare('SELECT `mimetype` FROM `*PREFIX*mimetypes` WHERE `id` = ?');
+ $result = $query->execute(array($id));
+ if ($row = $result->fetchRow()) {
+ $this->mimetypes[$id] = $row['mimetype'];
+ } else {
+ return null;
+ }
+ }
+ return $this->mimetypes[$id];
+ }
+
+ /**
+ * get the stored metadata of a file or folder
+ *
+ * @param string/int $file
+ * @return array
+ */
+ public function get($file) {
+ if (is_string($file) or $file == '') {
+ $where = 'WHERE `storage` = ? AND `path_hash` = ?';
+ $params = array($this->numericId, md5($file));
+ } else { //file id
+ $where = 'WHERE `fileid` = ?';
+ $params = array($file);
+ }
+ $query = \OC_DB::prepare(
+ 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `etag`
+ FROM `*PREFIX*filecache` ' . $where);
+ $result = $query->execute($params);
+ $data = $result->fetchRow();
+
+ //merge partial data
+ if (!$data and is_string($file)) {
+ if (isset($this->partial[$file])) {
+ $data = $this->partial[$file];
+ }
+ } else {
+ //fix types
+ $data['fileid'] = (int)$data['fileid'];
+ $data['size'] = (int)$data['size'];
+ $data['mtime'] = (int)$data['mtime'];
+ $data['encrypted'] = (bool)$data['encrypted'];
+ $data['storage'] = $this->storageId;
+ $data['mimetype'] = $this->getMimetype($data['mimetype']);
+ $data['mimepart'] = $this->getMimetype($data['mimepart']);
+ }
+
+ return $data;
+ }
+
+ /**
+ * get the metadata of all files stored in $folder
+ *
+ * @param string $folder
+ * @return array
+ */
+ public function getFolderContents($folder) {
+ $fileId = $this->getId($folder);
+ if ($fileId > -1) {
+ $query = \OC_DB::prepare(
+ 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `etag`
+ FROM `*PREFIX*filecache` WHERE parent = ? ORDER BY `name` ASC');
+ $result = $query->execute(array($fileId));
+ $files = $result->fetchAll();
+ foreach ($files as &$file) {
+ $file['mimetype'] = $this->getMimetype($file['mimetype']);
+ $file['mimepart'] = $this->getMimetype($file['mimepart']);
+ }
+ return $files;
+ } else {
+ return array();
+ }
+ }
+
+ /**
+ * store meta data for a file or folder
+ *
+ * @param string $file
+ * @param array $data
+ *
+ * @return int file id
+ */
+ public function put($file, array $data) {
+ if (($id = $this->getId($file)) > -1) {
+ $this->update($id, $data);
+ return $id;
+ } else {
+ if (isset($this->partial[$file])) { //add any saved partial data
+ $data = array_merge($this->partial[$file], $data);
+ unset($this->partial[$file]);
+ }
+
+ $requiredFields = array('size', 'mtime', 'mimetype');
+ foreach ($requiredFields as $field) {
+ if (!isset($data[$field])) { //data not complete save as partial and return
+ $this->partial[$file] = $data;
+ return -1;
+ }
+ }
+
+ $data['path'] = $file;
+ $data['parent'] = $this->getParentId($file);
+ $data['name'] = basename($file);
+ $data['encrypted'] = isset($data['encrypted']) ? ((int)$data['encrypted']) : 0;
+
+ list($queryParts, $params) = $this->buildParts($data);
+ $queryParts[] = '`storage`';
+ $params[] = $this->numericId;
+ $valuesPlaceholder = array_fill(0, count($queryParts), '?');
+
+ $query = \OC_DB::prepare('INSERT INTO `*PREFIX*filecache`(' . implode(', ', $queryParts) . ') VALUES(' . implode(', ', $valuesPlaceholder) . ')');
+ $query->execute($params);
+
+ return (int)\OC_DB::insertid('*PREFIX*filecache');
+ }
+ }
+
+ /**
+ * update the metadata in the cache
+ *
+ * @param int $id
+ * @param array $data
+ */
+ public function update($id, array $data) {
+ list($queryParts, $params) = $this->buildParts($data);
+ $params[] = $id;
+
+ $query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET ' . implode(' = ?, ', $queryParts) . '=? WHERE fileid = ?');
+ $query->execute($params);
+ }
+
+ /**
+ * extract query parts and params array from data array
+ *
+ * @param array $data
+ * @return array
+ */
+ function buildParts(array $data) {
+ $fields = array('path', 'parent', 'name', 'mimetype', 'size', 'mtime', 'encrypted', 'etag');
+ $params = array();
+ $queryParts = array();
+ foreach ($data as $name => $value) {
+ if (array_search($name, $fields) !== false) {
+ if ($name === 'path') {
+ $params[] = md5($value);
+ $queryParts[] = '`path_hash`';
+ } elseif ($name === 'mimetype') {
+ $params[] = $this->getMimetypeId(substr($value, 0, strpos($value, '/')));
+ $queryParts[] = '`mimepart`';
+ $value = $this->getMimetypeId($value);
+ }
+ $params[] = $value;
+ $queryParts[] = '`' . $name . '`';
+ }
+ }
+ return array($queryParts, $params);
+ }
+
+ /**
+ * get the file id for a file
+ *
+ * @param string $file
+ * @return int
+ */
+ public function getId($file) {
+ $pathHash = md5($file);
+
+ $query = \OC_DB::prepare('SELECT `fileid` FROM `*PREFIX*filecache` WHERE `storage` = ? AND `path_hash` = ?');
+ $result = $query->execute(array($this->numericId, $pathHash));
+
+ if ($row = $result->fetchRow()) {
+ return $row['fileid'];
+ } else {
+ return -1;
+ }
+ }
+
+ /**
+ * get the id of the parent folder of a file
+ *
+ * @param string $file
+ * @return int
+ */
+ public function getParentId($file) {
+ if ($file === '') {
+ return -1;
+ } else {
+ $parent = dirname($file);
+ if ($parent === '.') {
+ $parent = '';
+ }
+ return $this->getId($parent);
+ }
+ }
+
+ /**
+ * check if a file is available in the cache
+ *
+ * @param string $file
+ * @return bool
+ */
+ public function inCache($file) {
+ return $this->getId($file) != -1;
+ }
+
+ /**
+ * remove a file or folder from the cache
+ *
+ * @param string $file
+ */
+ public function remove($file) {
+ $entry = $this->get($file);
+ if ($entry['mimetype'] === 'httpd/unix-directory') {
+ $children = $this->getFolderContents($file);
+ foreach ($children as $child) {
+ $this->remove($child['path']);
+ }
+ }
+ $query = \OC_DB::prepare('DELETE FROM `*PREFIX*filecache` WHERE `fileid` = ?');
+ $query->execute(array($entry['fileid']));
+ }
+
+ /**
+ * Move a file or folder in the cache
+ *
+ * @param string $source
+ * @param string $target
+ */
+ public function move($source, $target) {
+ $sourceId = $this->getId($source);
+ $newParentId = $this->getParentId($target);
+
+ //find all child entries
+ $query = \OC_DB::prepare('SELECT `path`, `fileid` FROM `*PREFIX*filecache` WHERE `path` LIKE ?');
+ $result = $query->execute(array($source . '/%'));
+ $childEntries = $result->fetchAll();
+ $sourceLength = strlen($source);
+ $query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET `path` = ?, `path_hash` = ? WHERE `fileid` = ?');
+
+ foreach ($childEntries as $child) {
+ $targetPath = $target . substr($child['path'], $sourceLength);
+ $query->execute(array($targetPath, md5($targetPath), $child['fileid']));
+ }
+
+ $query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET `path` = ?, `path_hash` = ?, `parent` =? WHERE `fileid` = ?');
+ $query->execute(array($target, md5($target), $newParentId, $sourceId));
+ }
+
+ /**
+ * remove all entries for files that are stored on the storage from the cache
+ */
+ public function clear() {
+ $query = \OC_DB::prepare('DELETE FROM `*PREFIX*filecache` WHERE storage = ?');
+ $query->execute(array($this->numericId));
+
+ $query = \OC_DB::prepare('DELETE FROM `*PREFIX*storages` WHERE id = ?');
+ $query->execute(array($this->storageId));
+ }
+
+ /**
+ * @param string $file
+ *
+ * @return int, Cache::NOT_FOUND, Cache::PARTIAL, Cache::SHALLOW or Cache::COMPLETE
+ */
+ public function getStatus($file) {
+ $pathHash = md5($file);
+ $query = \OC_DB::prepare('SELECT `size` FROM `*PREFIX*filecache` WHERE `storage` = ? AND `path_hash` = ?');
+ $result = $query->execute(array($this->numericId, $pathHash));
+ if ($row = $result->fetchRow()) {
+ if ((int)$row['size'] === -1) {
+ return self::SHALLOW;
+ } else {
+ return self::COMPLETE;
+ }
+ } else {
+ if (isset($this->partial[$file])) {
+ return self::PARTIAL;
+ } else {
+ return self::NOT_FOUND;
+ }
+ }
+ }
+
+ /**
+ * search for files matching $pattern
+ *
+ * @param string $pattern
+ * @return array of file data
+ */
+ public function search($pattern) {
+ $query = \OC_DB::prepare('
+ SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `etag`
+ FROM `*PREFIX*filecache` WHERE `name` LIKE ? AND `storage` = ?'
+ );
+ $result = $query->execute(array($pattern, $this->numericId));
+ $files = array();
+ while ($row = $result->fetchRow()) {
+ $row['mimetype'] = $this->getMimetype($row['mimetype']);
+ $row['mimepart'] = $this->getMimetype($row['mimepart']);
+ $files[] = $row;
+ }
+ return $files;
+ }
+
+ /**
+ * search for files by mimetype
+ *
+ * @param string $mimetype
+ * @return array
+ */
+ public function searchByMime($mimetype) {
+ if (strpos($mimetype, '/')) {
+ $where = '`mimetype` = ?';
+ } else {
+ $where = '`mimepart` = ?';
+ }
+ $query = \OC_DB::prepare('
+ SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `etag`
+ FROM `*PREFIX*filecache` WHERE ' . $where . ' AND `storage` = ?'
+ );
+ $mimetype = $this->getMimetypeId($mimetype);
+ $result = $query->execute(array($mimetype, $this->numericId));
+ return $result->fetchAll();
+ }
+
+ /**
+ * update the folder size and the size of all parent folders
+ *
+ * @param $path
+ */
+ public function correctFolderSize($path) {
+ $this->calculateFolderSize($path);
+ if ($path !== '') {
+ $parent = dirname($path);
+ if ($parent === '.') {
+ $parent = '';
+ }
+ $this->correctFolderSize($parent);
+ }
+ }
+
+ /**
+ * get the size of a folder and set it in the cache
+ *
+ * @param string $path
+ * @return int
+ */
+ public function calculateFolderSize($path) {
+ $id = $this->getId($path);
+ if ($id === -1) {
+ return 0;
+ }
+ $query = \OC_DB::prepare('SELECT `size` FROM `*PREFIX*filecache` WHERE `parent` = ? AND `storage` = ?');
+ $result = $query->execute(array($id, $this->numericId));
+ $totalSize = 0;
+ $hasChilds = 0;
+ while ($row = $result->fetchRow()) {
+ $hasChilds = true;
+ $size = (int)$row['size'];
+ if ($size === -1) {
+ $totalSize = -1;
+ break;
+ } else {
+ $totalSize += $size;
+ }
+ }
+
+ if ($hasChilds) {
+ $this->update($id, array('size' => $totalSize));
+ }
+ return $totalSize;
+ }
+
+ /**
+ * get all file ids on the files on the storage
+ *
+ * @return int[]
+ */
+ public function getAll() {
+ $query = \OC_DB::prepare('SELECT `fileid` FROM `*PREFIX*filecache` WHERE `storage` = ?');
+ $result = $query->execute(array($this->numericId));
+ $ids = array();
+ while ($row = $result->fetchRow()) {
+ $ids[] = $row['fileid'];
+ }
+ return $ids;
+ }
+
+ /**
+ * find a folder in the cache which has not been fully scanned
+ *
+ * If multiply incomplete folders are in the cache, the one with the highest id will be returned,
+ * use the one with the highest id gives the best result with the background scanner, since that is most
+ * likely the folder where we stopped scanning previously
+ *
+ * @return string|bool the path of the folder or false when no folder matched
+ */
+ public function getIncomplete() {
+ $query = \OC_DB::prepare('SELECT `path` FROM `*PREFIX*filecache` WHERE `storage` = ? AND `size` = -1 ORDER BY `fileid` DESC LIMIT 1');
+ $query->execute(array($this->numericId));
+ if ($row = $query->fetchRow()) {
+ return $row['path'];
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * get the storage id of the storage for a file and the internal path of the file
+ *
+ * @return array, first element holding the storage id, second the path
+ */
+ static public function getById($id) {
+ $query = \OC_DB::prepare('SELECT `storage`, `path` FROM `*PREFIX*filecache` WHERE `fileid` = ?');
+ $result = $query->execute(array($id));
+ if ($row = $result->fetchRow()) {
+ $numericId = $row['storage'];
+ $path = $row['path'];
+ } else {
+ return null;
+ }
+
+ $query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*storages` WHERE `numeric_id` = ?');
+ $result = $query->execute(array($numericId));
+ if ($row = $result->fetchRow()) {
+ return array($row['id'], $path);
+ } else {
+ return null;
+ }
+ }
+}
diff --git a/lib/files/cache/legacy.php b/lib/files/cache/legacy.php
new file mode 100644
index 00000000000..33d4b8e7c9f
--- /dev/null
+++ b/lib/files/cache/legacy.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Cache;
+
+/**
+ * Provide read only support for the old filecache
+ */
+class Legacy {
+ private $user;
+
+ private $cacheHasItems = null;
+
+ public function __construct($user) {
+ $this->user = $user;
+ }
+
+ function getCount() {
+ $query = \OC_DB::prepare('SELECT COUNT(`id`) AS `count` FROM `*PREFIX*fscache` WHERE `user` = ?');
+ $result = $query->execute(array($this->user));
+ if ($row = $result->fetchRow()) {
+ return $row['count'];
+ } else {
+ return 0;
+ }
+ }
+
+ /**
+ * check if a legacy cache is present and holds items
+ *
+ * @return bool
+ */
+ function hasItems() {
+ if (!is_null($this->cacheHasItems)) {
+ return $this->cacheHasItems;
+ }
+ try {
+ $query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*fscache` WHERE `user` = ? LIMIT 1');
+ } catch (\Exception $e) {
+ $this->cacheHasItems = false;
+ return false;
+ }
+ try {
+ $result = $query->execute(array($this->user));
+ } catch (\Exception $e) {
+ $this->cacheHasItems = false;
+ return false;
+ }
+ $this->cacheHasItems = (bool)$result->fetchRow();
+ return $this->cacheHasItems;
+ }
+
+ /**
+ * @param string|int $path
+ * @return array
+ */
+ function get($path) {
+ if (is_numeric($path)) {
+ $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*fscache` WHERE `id` = ?');
+ } else {
+ $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*fscache` WHERE `path` = ?');
+ }
+ $result = $query->execute(array($path));
+ return $result->fetchRow();
+ }
+
+ /**
+ * @param int $id
+ * @return array
+ */
+ function getChildren($id) {
+ $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*fscache` WHERE `parent` = ?');
+ $result = $query->execute(array($id));
+ return $result->fetchAll();
+ }
+}
diff --git a/lib/files/cache/permissions.php b/lib/files/cache/permissions.php
new file mode 100644
index 00000000000..d0968337f02
--- /dev/null
+++ b/lib/files/cache/permissions.php
@@ -0,0 +1,102 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Cache;
+
+class Permissions {
+ /**
+ * @var string $storageId
+ */
+ private $storageId;
+
+ /**
+ * @param \OC\Files\Storage\Storage|string $storage
+ */
+ public function __construct($storage){
+ if($storage instanceof \OC\Files\Storage\Storage){
+ $this->storageId = $storage->getId();
+ }else{
+ $this->storageId = $storage;
+ }
+ }
+
+ /**
+ * get the permissions for a single file
+ *
+ * @param int $fileId
+ * @param string $user
+ * @return int (-1 if file no permissions set)
+ */
+ public function get($fileId, $user) {
+ $query = \OC_DB::prepare('SELECT `permissions` FROM `*PREFIX*permissions` WHERE `user` = ? AND `fileid` = ?');
+ $result = $query->execute(array($user, $fileId));
+ if ($row = $result->fetchRow()) {
+ return $row['permissions'];
+ } else {
+ return -1;
+ }
+ }
+
+ /**
+ * set the permissions of a file
+ *
+ * @param int $fileId
+ * @param string $user
+ * @param int $permissions
+ */
+ public function set($fileId, $user, $permissions) {
+ if (self::get($fileId, $user) !== -1) {
+ $query = \OC_DB::prepare('UPDATE `*PREFIX*permissions` SET `permissions` = ? WHERE `user` = ? AND `fileid` = ?');
+ } else {
+ $query = \OC_DB::prepare('INSERT INTO `*PREFIX*permissions`(`permissions`, `user`, `fileid`) VALUES(?, ?,? )');
+ }
+ $query->execute(array($permissions, $user, $fileId));
+ }
+
+ /**
+ * get the permissions of multiply files
+ *
+ * @param int[] $fileIds
+ * @param string $user
+ * @return int[]
+ */
+ public function getMultiple($fileIds, $user) {
+ if (count($fileIds) === 0) {
+ return array();
+ }
+ $params = $fileIds;
+ $params[] = $user;
+ $inPart = implode(', ', array_fill(0, count($fileIds), '?'));
+
+ $query = \OC_DB::prepare('SELECT `fileid`, `permissions` FROM `*PREFIX*permissions` WHERE `fileid` IN (' . $inPart . ') AND `user` = ?');
+ $result = $query->execute($params);
+ $filePermissions = array();
+ while ($row = $result->fetchRow()) {
+ $filePermissions[$row['fileid']] = $row['permissions'];
+ }
+ return $filePermissions;
+ }
+
+ /**
+ * remove the permissions for a file
+ *
+ * @param int $fileId
+ * @param string $user
+ */
+ public function remove($fileId, $user) {
+ $query = \OC_DB::prepare('DELETE FROM `*PREFIX*permissions` WHERE `fileid` = ? AND `user` = ?');
+ $query->execute(array($fileId, $user));
+ }
+
+ public function removeMultiple($fileIds, $user) {
+ $query = \OC_DB::prepare('DELETE FROM `*PREFIX*permissions` WHERE `fileid` = ? AND `user` = ?');
+ foreach($fileIds as $fileId){
+ $query->execute(array($fileId, $user));
+ }
+ }
+}
diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php
new file mode 100644
index 00000000000..bf0ef01d6b3
--- /dev/null
+++ b/lib/files/cache/scanner.php
@@ -0,0 +1,146 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Cache;
+
+class Scanner {
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ */
+ private $storage;
+
+ /**
+ * @var string $storageId
+ */
+ private $storageId;
+
+ /**
+ * @var \OC\Files\Cache\Cache $cache
+ */
+ private $cache;
+
+ const SCAN_RECURSIVE = true;
+ const SCAN_SHALLOW = false;
+
+ public function __construct(\OC\Files\Storage\Storage $storage) {
+ $this->storage = $storage;
+ $this->storageId = $this->storage->getId();
+ $this->cache = $storage->getCache();
+ }
+
+ /**
+ * get all the metadata of a file or folder
+ * *
+ *
+ * @param string $path
+ * @return array with metadata of the file
+ */
+ public function getData($path) {
+ $data = array();
+ if (!$this->storage->isReadable($path)) return null; //cant read, nothing we can do
+ $data['mimetype'] = $this->storage->getMimeType($path);
+ $data['mtime'] = $this->storage->filemtime($path);
+ if ($data['mimetype'] == 'httpd/unix-directory') {
+ $data['size'] = -1; //unknown
+ } else {
+ $data['size'] = $this->storage->filesize($path);
+ }
+ $data['etag'] = $this->storage->getETag($path);
+ return $data;
+ }
+
+ /**
+ * scan a single file and store it in the cache
+ *
+ * @param string $file
+ * @return array with metadata of the scanned file
+ */
+ public function scanFile($file) {
+ \OC_Hook::emit('\OC\Files\Cache\Scanner', 'scan_file', array('path' => $file, 'storage' => $this->storageId));
+ $data = $this->getData($file);
+ if ($data) {
+ if ($file) {
+ $parent = dirname($file);
+ if ($parent === '.') {
+ $parent = '';
+ }
+ if (!$this->cache->inCache($parent)) {
+ $this->scanFile($parent);
+ }
+ }
+ $id = $this->cache->put($file, $data);
+ }
+ return $data;
+ }
+
+ /**
+ * scan all the files in a folder and store them in the cache
+ *
+ * @param string $path
+ * @param SCAN_RECURSIVE/SCAN_SHALLOW $recursive
+ * @param bool $onlyChilds
+ * @return int the size of the scanned folder or -1 if the size is unknown at this stage
+ */
+ public function scan($path, $recursive = self::SCAN_RECURSIVE, $onlyChilds = false) {
+ \OC_Hook::emit('\OC\Files\Cache\Scanner', 'scan_folder', array('path' => $path, 'storage' => $this->storageId));
+ $childQueue = array();
+ if (!$onlyChilds) {
+ $this->scanFile($path);
+ }
+
+ $size = 0;
+ if ($dh = $this->storage->opendir($path)) {
+ \OC_DB::beginTransaction();
+ while ($file = readdir($dh)) {
+ if ($file !== '.' and $file !== '..') {
+ $child = ($path) ? $path . '/' . $file : $file;
+ $data = $this->scanFile($child);
+ if ($data) {
+ if ($data['mimetype'] === 'httpd/unix-directory') {
+ if ($recursive === self::SCAN_RECURSIVE) {
+ $childQueue[] = $child;
+ $data['size'] = 0;
+ } else {
+ $data['size'] = -1;
+ }
+ } else {
+ }
+ if ($data['size'] === -1) {
+ $size = -1;
+ } elseif ($size !== -1) {
+ $size += $data['size'];
+ }
+ }
+ }
+ }
+ \OC_DB::commit();
+ foreach ($childQueue as $child) {
+ $childSize = $this->scan($child, self::SCAN_RECURSIVE, true);
+ if ($childSize === -1) {
+ $size = -1;
+ } else {
+ $size += $childSize;
+ }
+ }
+ if ($size !== -1) {
+ $this->cache->put($path, array('size' => $size));
+ }
+ }
+ return $size;
+ }
+
+ /**
+ * walk over any folders that are not fully scanned yet and scan them
+ */
+ public function backgroundScan() {
+ while ($path = $this->cache->getIncomplete()) {
+ $this->scan($path);
+ $this->cache->correctFolderSize($path);
+ }
+ }
+}
diff --git a/lib/files/cache/updater.php b/lib/files/cache/updater.php
new file mode 100644
index 00000000000..d04541c219f
--- /dev/null
+++ b/lib/files/cache/updater.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Cache;
+
+/**
+ * listen to filesystem hooks and change the cache accordingly
+ */
+class Updater {
+
+ /**
+ * resolve a path to a storage and internal path
+ *
+ * @param string $path
+ * @return array consisting of the storage and the internal path
+ */
+ static public function resolvePath($path) {
+ $view = \OC\Files\Filesystem::getView();
+ return $view->resolvePath($path);
+ }
+
+ static public function writeUpdate($path) {
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ * @var string $internalPath
+ */
+ list($storage, $internalPath) = self::resolvePath($path);
+ if ($storage) {
+ $cache = $storage->getCache($internalPath);
+ $scanner = $storage->getScanner($internalPath);
+ $scanner->scan($internalPath, Scanner::SCAN_SHALLOW);
+ $cache->correctFolderSize($internalPath);
+ self::correctFolder($path, $storage->filemtime($internalPath));
+ }
+ }
+
+ static public function deleteUpdate($path) {
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ * @var string $internalPath
+ */
+ list($storage, $internalPath) = self::resolvePath($path);
+ if ($storage) {
+ $cache = $storage->getCache($internalPath);
+ $cache->remove($internalPath);
+ $cache->correctFolderSize($internalPath);
+ self::correctFolder($path, time());
+ }
+ }
+
+ /**
+ * Update the mtime and ETag of all parent folders
+ *
+ * @param string $path
+ * @param string $time
+ */
+ static public function correctFolder($path, $time) {
+ if ($path !== '' && $path !== '/') {
+ $parent = dirname($path);
+ if ($parent === '.') {
+ $parent = '';
+ }
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ * @var string $internalPath
+ */
+ list($storage, $internalPath) = self::resolvePath($parent);
+ if ($storage) {
+ $cache = $storage->getCache();
+ $id = $cache->getId($internalPath);
+ if ($id !== -1) {
+ $cache->update($id, array('mtime' => $time, 'etag' => $storage->getETag($internalPath)));
+ self::correctFolder($parent, $time);
+ }
+ }
+ }
+ }
+
+ /**
+ * @param array $params
+ */
+ static public function writeHook($params) {
+ self::writeUpdate($params['path']);
+ }
+
+ /**
+ * @param array $params
+ */
+ static public function renameHook($params) {
+ self::deleteUpdate($params['oldpath']);
+ self::writeUpdate($params['newpath']);
+ }
+
+ /**
+ * @param array $params
+ */
+ static public function deleteHook($params) {
+ self::deleteUpdate($params['path']);
+ }
+}
diff --git a/lib/files/cache/upgrade.php b/lib/files/cache/upgrade.php
new file mode 100644
index 00000000000..eb8c7297c3e
--- /dev/null
+++ b/lib/files/cache/upgrade.php
@@ -0,0 +1,159 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Cache;
+
+class Upgrade {
+ /**
+ * @var Legacy $legacy
+ */
+ private $legacy;
+
+ private $numericIds = array();
+
+ private $mimeTypeIds = array();
+
+ /**
+ * @param Legacy $legacy
+ */
+ public function __construct($legacy) {
+ $this->legacy = $legacy;
+ }
+
+ /**
+ * Preform a shallow upgrade
+ *
+ * @param string $path
+ * @param int $mode
+ */
+ function upgradePath($path, $mode = Scanner::SCAN_RECURSIVE) {
+ if (!$this->legacy->hasItems()) {
+ return;
+ }
+ \OC_Hook::emit('\OC\Files\Cache\Upgrade', 'migrate_path', $path);
+
+ if ($row = $this->legacy->get($path)) {
+ $data = $this->getNewData($row);
+ $this->insert($data);
+
+ $this->upgradeChilds($data['id'], $mode);
+ }
+ }
+
+ /**
+ * @param int $id
+ */
+ function upgradeChilds($id, $mode = Scanner::SCAN_RECURSIVE) {
+ $children = $this->legacy->getChildren($id);
+ foreach ($children as $child) {
+ $childData = $this->getNewData($child);
+ \OC_Hook::emit('\OC\Files\Cache\Upgrade', 'migrate_path', $child['path']);
+ $this->insert($childData);
+ if ($mode == Scanner::SCAN_RECURSIVE) {
+ $this->upgradeChilds($child['id']);
+ }
+ }
+ }
+
+ /**
+ * @param array $data the data for the new cache
+ */
+ function insert($data) {
+ if (!$this->inCache($data['storage'], $data['path_hash'])) {
+ $insertQuery = \OC_DB::prepare('INSERT INTO `*PREFIX*filecache`
+ ( `fileid`, `storage`, `path`, `path_hash`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted` )
+ VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
+
+ $insertQuery->execute(array($data['id'], $data['storage'], $data['path'], $data['path_hash'], $data['parent'], $data['name'],
+ $data['mimetype'], $data['mimepart'], $data['size'], $data['mtime'], $data['encrypted']));
+ }
+ }
+
+ /**
+ * @param string $storage
+ * @param string $pathHash
+ * @return bool
+ */
+ function inCache($storage, $pathHash) {
+ $query = \OC_DB::prepare('SELECT `fileid` FROM `*PREFIX*filecache` WHERE `storage` = ? AND `path_hash` = ?');
+ $result = $query->execute(array($storage, $pathHash));
+ return (bool)$result->fetchRow();
+ }
+
+ /**
+ * get the new data array from the old one
+ *
+ * @param array $data the data from the old cache
+ * @return array
+ */
+ function getNewData($data) {
+ $newData = $data;
+ list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($data['path']);
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ * @var string $internalPath;
+ */
+ $newData['path_hash'] = md5($internalPath);
+ $newData['path'] = $internalPath;
+ $newData['storage'] = $this->getNumericId($storage);
+ $newData['parent'] = ($internalPath === '') ? -1 : $data['parent'];
+ $newData['permissions'] = ($data['writable']) ? \OCP\PERMISSION_ALL : \OCP\PERMISSION_READ;
+ $newData['storage_object'] = $storage;
+ $newData['mimetype'] = $this->getMimetypeId($newData['mimetype'], $storage);
+ $newData['mimepart'] = $this->getMimetypeId($newData['mimepart'], $storage);
+ return $newData;
+ }
+
+ /**
+ * get the numeric storage id
+ *
+ * @param \OC\Files\Storage\Storage $storage
+ * @return int
+ */
+ function getNumericId($storage) {
+ $storageId = $storage->getId();
+ if (!isset($this->numericIds[$storageId])) {
+ $cache = $storage->getCache();
+ $this->numericIds[$storageId] = $cache->getNumericStorageId();
+ }
+ return $this->numericIds[$storageId];
+ }
+
+ /**
+ * @param string $mimetype
+ * @param \OC\Files\Storage\Storage $storage
+ * @return int
+ */
+ function getMimetypeId($mimetype, $storage) {
+ if (!isset($this->mimeTypeIds[$mimetype])) {
+ $cache = new Cache($storage);
+ $this->mimeTypeIds[$mimetype] = $cache->getMimetypeId($mimetype);
+ }
+ return $this->mimeTypeIds[$mimetype];
+ }
+
+ /**
+ * check if a cache upgrade is required for $user
+ *
+ * @param string $user
+ * @return bool
+ */
+ static function needUpgrade($user) {
+ $cacheVersion = (int)\OCP\Config::getUserValue($user, 'files', 'cache_version', 4);
+ return $cacheVersion < 5;
+ }
+
+ /**
+ * mark the filecache as upgrade
+ *
+ * @param string $user
+ */
+ static function upgradeDone($user) {
+ \OCP\Config::setUserValue($user, 'files', 'cache_version', 5);
+ }
+}
diff --git a/lib/files/cache/watcher.php b/lib/files/cache/watcher.php
new file mode 100644
index 00000000000..31059ec7f56
--- /dev/null
+++ b/lib/files/cache/watcher.php
@@ -0,0 +1,72 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Cache;
+
+/**
+ * check the storage backends for updates and change the cache accordingly
+ */
+class Watcher {
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ */
+ private $storage;
+
+ /**
+ * @var Cache $cache
+ */
+ private $cache;
+
+ /**
+ * @var Scanner $scanner;
+ */
+ private $scanner;
+
+ /**
+ * @param \OC\Files\Storage\Storage $storage
+ */
+ public function __construct(\OC\Files\Storage\Storage $storage) {
+ $this->storage = $storage;
+ $this->cache = $storage->getCache();
+ $this->scanner = $storage->getScanner();
+ }
+
+ /**
+ * check $path for updates
+ *
+ * @param string $path
+ */
+ public function checkUpdate($path) {
+ $cachedEntry = $this->cache->get($path);
+ if ($this->storage->hasUpdated($path, $cachedEntry['mtime'])) {
+ if ($this->storage->is_dir($path)) {
+ $this->scanner->scan($path, Scanner::SCAN_SHALLOW);
+ } else {
+ $this->scanner->scanFile($path);
+ }
+ if ($cachedEntry['mimetype'] === 'httpd/unix-directory') {
+ $this->cleanFolder($path);
+ }
+ $this->cache->correctFolderSize($path);
+ }
+ }
+
+ /**
+ * remove deleted files in $path from the cache
+ *
+ * @param string $path
+ */
+ public function cleanFolder($path) {
+ $cachedContent = $this->cache->getFolderContents($path);
+ foreach ($cachedContent as $entry) {
+ if (!$this->storage->file_exists($entry['path'])) {
+ $this->cache->remove($entry['path']);
+ }
+ }
+ }
+}
diff --git a/lib/files/filesystem.php b/lib/files/filesystem.php
new file mode 100644
index 00000000000..262fde320a1
--- /dev/null
+++ b/lib/files/filesystem.php
@@ -0,0 +1,628 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+/**
+ * Class for abstraction of filesystem functions
+ * This class won't call any filesystem functions for itself but but will pass them to the correct OC_Filestorage object
+ * this class should also handle all the file permission related stuff
+ *
+ * Hooks provided:
+ * read(path)
+ * write(path, &run)
+ * post_write(path)
+ * create(path, &run) (when a file is created, both create and write will be emitted in that order)
+ * post_create(path)
+ * delete(path, &run)
+ * post_delete(path)
+ * rename(oldpath,newpath, &run)
+ * post_rename(oldpath,newpath)
+ * copy(oldpath,newpath, &run) (if the newpath doesn't exists yes, copy, create and write will be emitted in that order)
+ * post_rename(oldpath,newpath)
+ *
+ * the &run parameter can be set to false to prevent the operation from occurring
+ */
+
+namespace OC\Files;
+
+class Filesystem {
+ public static $loaded = false;
+ /**
+ * @var \OC\Files\View $defaultInstance
+ */
+ static private $defaultInstance;
+
+
+ /**
+ * classname which used for hooks handling
+ * used as signalclass in OC_Hooks::emit()
+ */
+ const CLASSNAME = 'OC_Filesystem';
+
+ /**
+ * signalname emitted before file renaming
+ *
+ * @param string $oldpath
+ * @param string $newpath
+ */
+ const signal_rename = 'rename';
+
+ /**
+ * signal emitted after file renaming
+ *
+ * @param string $oldpath
+ * @param string $newpath
+ */
+ const signal_post_rename = 'post_rename';
+
+ /**
+ * signal emitted before file/dir creation
+ *
+ * @param string $path
+ * @param bool $run changing this flag to false in hook handler will cancel event
+ */
+ const signal_create = 'create';
+
+ /**
+ * signal emitted after file/dir creation
+ *
+ * @param string $path
+ * @param bool $run changing this flag to false in hook handler will cancel event
+ */
+ const signal_post_create = 'post_create';
+
+ /**
+ * signal emits before file/dir copy
+ *
+ * @param string $oldpath
+ * @param string $newpath
+ * @param bool $run changing this flag to false in hook handler will cancel event
+ */
+ const signal_copy = 'copy';
+
+ /**
+ * signal emits after file/dir copy
+ *
+ * @param string $oldpath
+ * @param string $newpath
+ */
+ const signal_post_copy = 'post_copy';
+
+ /**
+ * signal emits before file/dir save
+ *
+ * @param string $path
+ * @param bool $run changing this flag to false in hook handler will cancel event
+ */
+ const signal_write = 'write';
+
+ /**
+ * signal emits after file/dir save
+ *
+ * @param string $path
+ */
+ const signal_post_write = 'post_write';
+
+ /**
+ * signal emits when reading file/dir
+ *
+ * @param string $path
+ */
+ const signal_read = 'read';
+
+ /**
+ * signal emits when removing file/dir
+ *
+ * @param string $path
+ */
+ const signal_delete = 'delete';
+
+ /**
+ * parameters definitions for signals
+ */
+ const signal_param_path = 'path';
+ const signal_param_oldpath = 'oldpath';
+ const signal_param_newpath = 'newpath';
+
+ /**
+ * run - changing this flag to false in hook handler will cancel event
+ */
+ const signal_param_run = 'run';
+
+ /**
+ * get the mountpoint of the storage object for a path
+ ( note: because a storage is not always mounted inside the fakeroot, the returned mountpoint is relative to the absolute root of the filesystem and doesn't take the chroot into account
+ *
+ * @param string $path
+ * @return string
+ */
+ static public function getMountPoint($path) {
+ $mount = Mount::find($path);
+ if ($mount) {
+ return $mount->getMountPoint();
+ } else {
+ return '';
+ }
+ }
+
+ /**
+ * get a list of all mount points in a directory
+ *
+ * @param string $path
+ * @return string[]
+ */
+ static public function getMountPoints($path) {
+ $result = array();
+ $mounts = Mount::findIn($path);
+ foreach ($mounts as $mount) {
+ $result[] = $mount->getMountPoint();
+ }
+ return $result;
+ }
+
+ /**
+ * get the storage mounted at $mountPoint
+ *
+ * @param string $mountPoint
+ * @return \OC\Files\Storage\Storage
+ */
+ public static function getStorage($mountPoint) {
+ $mount = Mount::find($mountPoint);
+ return $mount->getStorage();
+ }
+
+ /**
+ * resolve a path to a storage and internal path
+ *
+ * @param string $path
+ * @return array consisting of the storage and the internal path
+ */
+ static public function resolvePath($path) {
+ $mount = Mount::find($path);
+ if ($mount) {
+ return array($mount->getStorage(), $mount->getInternalPath($path));
+ } else {
+ return array(null, null);
+ }
+ }
+
+ static public function init($root) {
+ if (self::$defaultInstance) {
+ return false;
+ }
+ self::$defaultInstance = new View($root);
+
+ //load custom mount config
+ self::initMountPoints();
+
+ self::$loaded = true;
+
+ return true;
+ }
+
+ /**
+ * Initialize system and personal mount points for a user
+ *
+ * @param string $user
+ */
+ public static function initMountPoints($user = '') {
+ if ($user == '') {
+ $user = \OC_User::getUser();
+ }
+ // Load system mount points
+ if (is_file(\OC::$SERVERROOT . '/config/mount.php')) {
+ $mountConfig = include 'config/mount.php';
+ if (isset($mountConfig['global'])) {
+ foreach ($mountConfig['global'] as $mountPoint => $options) {
+ self::mount($options['class'], $options['options'], $mountPoint);
+ }
+ }
+ if (isset($mountConfig['group'])) {
+ foreach ($mountConfig['group'] as $group => $mounts) {
+ if (\OC_Group::inGroup($user, $group)) {
+ foreach ($mounts as $mountPoint => $options) {
+ $mountPoint = self::setUserVars($user, $mountPoint);
+ foreach ($options as &$option) {
+ $option = self::setUserVars($user, $option);
+ }
+ self::mount($options['class'], $options['options'], $mountPoint);
+ }
+ }
+ }
+ }
+ if (isset($mountConfig['user'])) {
+ foreach ($mountConfig['user'] as $mountUser => $mounts) {
+ if ($user === 'all' or strtolower($mountUser) === strtolower($user)) {
+ foreach ($mounts as $mountPoint => $options) {
+ $mountPoint = self::setUserVars($user, $mountPoint);
+ foreach ($options as &$option) {
+ $option = self::setUserVars($user, $option);
+ }
+ self::mount($options['class'], $options['options'], $mountPoint);
+ }
+ }
+ }
+ }
+ }
+ // Load personal mount points
+ $root = \OC_User::getHome($user);
+ self::mount('\OC\Files\Storage\Local', array('datadir' => $root), $user);
+ if (is_file($root . '/mount.php')) {
+ $mountConfig = include $root . '/mount.php';
+ if (isset($mountConfig['user'][$user])) {
+ foreach ($mountConfig['user'][$user] as $mountPoint => $options) {
+ self::mount($options['class'], $options['options'], $mountPoint);
+ }
+ }
+ }
+ }
+
+ /**
+ * fill in the correct values for $user, and $password placeholders
+ *
+ * @param string $input
+ * @param string $input
+ * @return string
+ */
+ private static function setUserVars($user, $input) {
+ return str_replace('$user', $user, $input);
+ }
+
+ /**
+ * get the default filesystem view
+ *
+ * @return View
+ */
+ static public function getView() {
+ return self::$defaultInstance;
+ }
+
+ /**
+ * tear down the filesystem, removing all storage providers
+ */
+ static public function tearDown() {
+ self::clearMounts();
+ }
+
+ /**
+ * @brief get the relative path of the root data directory for the current user
+ * @return string
+ *
+ * Returns path like /admin/files
+ */
+ static public function getRoot() {
+ return self::$defaultInstance->getRoot();
+ }
+
+ /**
+ * clear all mounts and storage backends
+ */
+ public static function clearMounts() {
+ Mount::clear();
+ }
+
+ /**
+ * mount an \OC\Files\Storage\Storage in our virtual filesystem
+ *
+ * @param \OC\Files\Storage\Storage|string $class
+ * @param array $arguments
+ * @param string $mountpoint
+ */
+ static public function mount($class, $arguments, $mountpoint) {
+ new Mount($class, $mountpoint, $arguments);
+ }
+
+ /**
+ * return the path to a local version of the file
+ * we need this because we can't know if a file is stored local or not from outside the filestorage and for some purposes a local file is needed
+ *
+ * @param string $path
+ * @return string
+ */
+ static public function getLocalFile($path) {
+ return self::$defaultInstance->getLocalFile($path);
+ }
+
+ /**
+ * @param string $path
+ * @return string
+ */
+ static public function getLocalFolder($path) {
+ return self::$defaultInstance->getLocalFolder($path);
+ }
+
+ /**
+ * return path to file which reflects one visible in browser
+ *
+ * @param string $path
+ * @return string
+ */
+ static public function getLocalPath($path) {
+ $datadir = \OC_User::getHome(\OC_User::getUser()) . '/files';
+ $newpath = $path;
+ if (strncmp($newpath, $datadir, strlen($datadir)) == 0) {
+ $newpath = substr($path, strlen($datadir));
+ }
+ return $newpath;
+ }
+
+ /**
+ * check if the requested path is valid
+ *
+ * @param string $path
+ * @return bool
+ */
+ static public function isValidPath($path) {
+ $path = self::normalizePath($path);
+ if (!$path || $path[0] !== '/') {
+ $path = '/' . $path;
+ }
+ if (strstr($path, '/../') || strrchr($path, '/') === '/..') {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * checks if a file is blacklisted for storage in the filesystem
+ * Listens to write and rename hooks
+ *
+ * @param array $data from hook
+ */
+ static public function isBlacklisted($data) {
+ $blacklist = array('.htaccess');
+ if (isset($data['path'])) {
+ $path = $data['path'];
+ } else if (isset($data['newpath'])) {
+ $path = $data['newpath'];
+ }
+ if (isset($path)) {
+ $filename = strtolower(basename($path));
+ if (in_array($filename, $blacklist)) {
+ $data['run'] = false;
+ }
+ }
+ }
+
+ /**
+ * following functions are equivalent to their php builtin equivalents for arguments/return values.
+ */
+ static public function mkdir($path) {
+ return self::$defaultInstance->mkdir($path);
+ }
+
+ static public function rmdir($path) {
+ return self::$defaultInstance->rmdir($path);
+ }
+
+ static public function opendir($path) {
+ return self::$defaultInstance->opendir($path);
+ }
+
+ static public function readdir($path) {
+ return self::$defaultInstance->readdir($path);
+ }
+
+ static public function is_dir($path) {
+ return self::$defaultInstance->is_dir($path);
+ }
+
+ static public function is_file($path) {
+ return self::$defaultInstance->is_file($path);
+ }
+
+ static public function stat($path) {
+ return self::$defaultInstance->stat($path);
+ }
+
+ static public function filetype($path) {
+ return self::$defaultInstance->filetype($path);
+ }
+
+ static public function filesize($path) {
+ return self::$defaultInstance->filesize($path);
+ }
+
+ static public function readfile($path) {
+ return self::$defaultInstance->readfile($path);
+ }
+
+ static public function isCreatable($path) {
+ return self::$defaultInstance->isCreatable($path);
+ }
+
+ static public function isReadable($path) {
+ return self::$defaultInstance->isReadable($path);
+ }
+
+ static public function isUpdatable($path) {
+ return self::$defaultInstance->isUpdatable($path);
+ }
+
+ static public function isDeletable($path) {
+ return self::$defaultInstance->isDeletable($path);
+ }
+
+ static public function isSharable($path) {
+ return self::$defaultInstance->isSharable($path);
+ }
+
+ static public function file_exists($path) {
+ return self::$defaultInstance->file_exists($path);
+ }
+
+ static public function filemtime($path) {
+ return self::$defaultInstance->filemtime($path);
+ }
+
+ static public function touch($path, $mtime = null) {
+ return self::$defaultInstance->touch($path, $mtime);
+ }
+
+ static public function file_get_contents($path) {
+ return self::$defaultInstance->file_get_contents($path);
+ }
+
+ static public function file_put_contents($path, $data) {
+ return self::$defaultInstance->file_put_contents($path, $data);
+ }
+
+ static public function unlink($path) {
+ return self::$defaultInstance->unlink($path);
+ }
+
+ static public function rename($path1, $path2) {
+ return self::$defaultInstance->rename($path1, $path2);
+ }
+
+ static public function copy($path1, $path2) {
+ return self::$defaultInstance->copy($path1, $path2);
+ }
+
+ static public function fopen($path, $mode) {
+ return self::$defaultInstance->fopen($path, $mode);
+ }
+
+ static public function toTmpFile($path) {
+ return self::$defaultInstance->toTmpFile($path);
+ }
+
+ static public function fromTmpFile($tmpFile, $path) {
+ return self::$defaultInstance->fromTmpFile($tmpFile, $path);
+ }
+
+ static public function getMimeType($path) {
+ return self::$defaultInstance->getMimeType($path);
+ }
+
+ static public function hash($type, $path, $raw = false) {
+ return self::$defaultInstance->hash($type, $path, $raw);
+ }
+
+ static public function free_space($path = '/') {
+ return self::$defaultInstance->free_space($path);
+ }
+
+ static public function search($query) {
+ return self::$defaultInstance->search($query);
+ }
+
+ static public function searchByMime($query) {
+ return self::$defaultInstance->searchByMime($query);
+ }
+
+ /**
+ * check if a file or folder has been updated since $time
+ *
+ * @param string $path
+ * @param int $time
+ * @return bool
+ */
+ static public function hasUpdated($path, $time) {
+ return self::$defaultInstance->hasUpdated($path, $time);
+ }
+
+ /**
+ * normalize a path
+ *
+ * @param string $path
+ * @param bool $stripTrailingSlash
+ * @return string
+ */
+ public static function normalizePath($path, $stripTrailingSlash = true) {
+ if ($path == '') {
+ return '/';
+ }
+//no windows style slashes
+ $path = str_replace('\\', '/', $path);
+//add leading slash
+ if ($path[0] !== '/') {
+ $path = '/' . $path;
+ }
+//remove duplicate slashes
+ while (strpos($path, '//') !== false) {
+ $path = str_replace('//', '/', $path);
+ }
+//remove trailing slash
+ if ($stripTrailingSlash and strlen($path) > 1 and substr($path, -1, 1) === '/') {
+ $path = substr($path, 0, -1);
+ }
+//normalize unicode if possible
+ if (class_exists('Normalizer')) {
+ $path = \Normalizer::normalize($path);
+ }
+ return $path;
+ }
+
+ /**
+ * get the filesystem info
+ *
+ * @param string $path
+ * @return array
+ *
+ * returns an associative array with the following keys:
+ * - size
+ * - mtime
+ * - mimetype
+ * - encrypted
+ * - versioned
+ */
+ public static function getFileInfo($path) {
+ return self::$defaultInstance->getFileInfo($path);
+ }
+
+ /**
+ * change file metadata
+ *
+ * @param string $path
+ * @param array $data
+ * @return int
+ *
+ * returns the fileid of the updated file
+ */
+ public static function putFileInfo($path, $data) {
+ return self::$defaultInstance->putFileInfo($path, $data);
+ }
+
+ /**
+ * get the content of a directory
+ *
+ * @param string $directory path under datadirectory
+ * @return array
+ */
+ public static function getDirectoryContent($directory) {
+ return self::$defaultInstance->getDirectoryContent($directory);
+ }
+
+ /**
+ * Get the path of a file by id
+ *
+ * Note that the resulting path is not guarantied to be unique for the id, multiple paths can point to the same file
+ *
+ * @param int $id
+ * @return string
+ */
+ public static function getPath($id) {
+ return self::$defaultInstance->getPath($id);
+ }
+
+ /**
+ * get the ETag for a file or folder
+ *
+ * @param string $path
+ * @return string
+ */
+ static public function getETag($path) {
+ return self::$defaultInstance->getETag($path);
+ }
+}
+
+\OC_Hook::connect('OC_Filesystem', 'post_write', '\OC\Files\Cache\Updater', 'writeHook');
+\OC_Hook::connect('OC_Filesystem', 'post_delete', '\OC\Files\Cache\Updater', 'deleteHook');
+\OC_Hook::connect('OC_Filesystem', 'post_rename', '\OC\Files\Cache\Updater', 'renameHook');
+
+\OC_Util::setupFS();
diff --git a/lib/files/mount.php b/lib/files/mount.php
new file mode 100644
index 00000000000..74ee483b1be
--- /dev/null
+++ b/lib/files/mount.php
@@ -0,0 +1,188 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files;
+
+class Mount {
+ /**
+ * @var Mount[]
+ */
+ static private $mounts = array();
+
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ */
+ private $storage = null;
+ private $class;
+ private $storageId;
+ private $arguments = array();
+ private $mountPoint;
+
+ /**
+ * @param string|\OC\Files\Storage\Storage $storage
+ * @param string $mountpoint
+ * @param array $arguments (optional)
+ */
+ public function __construct($storage, $mountpoint, $arguments = null) {
+ if (is_null($arguments)) {
+ $arguments = array();
+ }
+
+ $mountpoint = self::formatPath($mountpoint);
+ if ($storage instanceof \OC\Files\Storage\Storage) {
+ $this->class = get_class($storage);
+ $this->storage = $storage;
+ } else {
+ // Update old classes to new namespace
+ if (strpos($storage, 'OC_Filestorage_') !== false) {
+ $storage = '\OC\Files\Storage\\' . substr($storage, 15);
+ }
+ $this->class = $storage;
+ $this->arguments = $arguments;
+ }
+ $this->mountPoint = $mountpoint;
+
+ self::$mounts[$this->mountPoint] = $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getMountPoint() {
+ return $this->mountPoint;
+ }
+
+ /**
+ * @return \OC\Files\Storage\Storage
+ */
+ private function createStorage() {
+ if (class_exists($this->class)) {
+ try {
+ return new $this->class($this->arguments);
+ } catch (\Exception $exception) {
+ \OC_Log::write('core', $exception->getMessage(), \OC_Log::ERROR);
+ return null;
+ }
+ } else {
+ \OC_Log::write('core', 'storage backend ' . $this->class . ' not found', \OC_Log::ERROR);
+ return null;
+ }
+ }
+
+ /**
+ * @return \OC\Files\Storage\Storage
+ */
+ public function getStorage() {
+ if (is_null($this->storage)) {
+ $this->storage = $this->createStorage();
+ }
+ return $this->storage;
+ }
+
+ /**
+ * @return string
+ */
+ public function getStorageId() {
+ if (!$this->storageId) {
+ if (is_null($this->storage)) {
+ $this->storage = $this->createStorage();
+ }
+ $this->storageId = $this->storage->getId();
+ }
+ return $this->storageId;
+ }
+
+ /**
+ * @param string $path
+ * @return string
+ */
+ public function getInternalPath($path) {
+ if ($this->mountPoint === $path or $this->mountPoint . '/' === $path) {
+ $internalPath = '';
+ } else {
+ $internalPath = substr($path, strlen($this->mountPoint));
+ }
+ return $internalPath;
+ }
+
+ /**
+ * @param string $path
+ * @return string
+ */
+ private static function formatPath($path) {
+ $path = Filesystem::normalizePath($path);
+ if (strlen($path) > 1) {
+ $path .= '/';
+ }
+ return $path;
+ }
+
+ /**
+ * Find the mount for $path
+ *
+ * @param $path
+ * @return Mount
+ */
+ public static function find($path) {
+ $path = self::formatPath($path);
+ if (isset(self::$mounts[$path])) {
+ return self::$mounts[$path];
+ }
+
+ \OC_Hook::emit('OC_Filesystem', 'get_mountpoint', array('path' => $path));
+ $foundMountPoint = '';
+ $mountPoints = array_keys(self::$mounts);
+ foreach ($mountPoints as $mountpoint) {
+ if (strpos($path, $mountpoint) === 0 and strlen($mountpoint) > strlen($foundMountPoint)) {
+ $foundMountPoint = $mountpoint;
+ }
+ }
+ if (isset(self::$mounts[$foundMountPoint])) {
+ return self::$mounts[$foundMountPoint];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Find all mounts in $path
+ *
+ * @param $path
+ * @return Mount[]
+ */
+ public static function findIn($path) {
+ $path = self::formatPath($path);
+ $result = array();
+ $pathLength = strlen($path);
+ $mountPoints = array_keys(self::$mounts);
+ foreach ($mountPoints as $mountPoint) {
+ if (substr($mountPoint, 0, $pathLength) === $path and strlen($mountPoint) > $pathLength) {
+ $result[] = self::$mounts[$mountPoint];
+ }
+ }
+ return $result;
+ }
+
+ public static function clear() {
+ self::$mounts = array();
+ }
+
+ /**
+ * @param string $id
+ * @return \OC\Files\Storage\Storage[]
+ */
+ public static function findById($id) {
+ $result = array();
+ foreach (self::$mounts as $mount) {
+ if ($mount->getStorageId() === $id) {
+ $result[] = $mount;
+ }
+ }
+ return $result;
+ }
+}
diff --git a/lib/filestorage/common.php b/lib/files/storage/common.php
index b97eb79d8d4..591803f0440 100644
--- a/lib/filestorage/common.php
+++ b/lib/files/storage/common.php
@@ -1,51 +1,34 @@
<?php
-
/**
-* ownCloud
-*
-* @author Michael Gapczynski
-* @copyright 2012 Michael Gapczynski GapczynskiM@gmail.com
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
-* License as published by the Free Software Foundation; either
-* version 3 of the License, or any later version.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
-*
-* You should have received a copy of the GNU Affero General Public
-* License along with this library. If not, see <http://www.gnu.org/licenses/>.
-*/
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Storage;
/**
* Storage backend class for providing common filesystem operation methods
* which are not storage-backend specific.
*
- * OC_Filestorage_Common is never used directly; it is extended by all other
+ * \OC\Files\Storage\Common is never used directly; it is extended by all other
* storage backends, where its methods may be overridden, and additional
* (backend-specific) methods are defined.
*
- * Some OC_Filestorage_Common methods call functions which are first defined
+ * Some \OC\Files\Storage\Common methods call functions which are first defined
* in classes which extend it, e.g. $this->stat() .
*/
-abstract class OC_Filestorage_Common extends OC_Filestorage {
+abstract class Common implements \OC\Files\Storage\Storage {
public function __construct($parameters) {}
-// abstract public function mkdir($path);
-// abstract public function rmdir($path);
-// abstract public function opendir($path);
public function is_dir($path) {
return $this->filetype($path)=='dir';
}
public function is_file($path) {
return $this->filetype($path)=='file';
}
-// abstract public function stat($path);
-// abstract public function filetype($path);
public function filesize($path) {
if($this->is_dir($path)) {
return 0;//by definition
@@ -55,29 +38,40 @@ abstract class OC_Filestorage_Common extends OC_Filestorage {
}
}
public function isCreatable($path) {
- return $this->isUpdatable($path);
+ if ($this->is_dir($path) && $this->isUpdatable($path)) {
+ return true;
+ }
+ return false;
}
-// abstract public function isReadable($path);
-// abstract public function isUpdatable($path);
public function isDeletable($path) {
return $this->isUpdatable($path);
}
public function isSharable($path) {
return $this->isReadable($path);
}
-// abstract public function file_exists($path);
- public function filectime($path) {
- $stat = $this->stat($path);
- return $stat['ctime'];
+ public function getPermissions($path){
+ $permissions = 0;
+ if($this->isCreatable($path)){
+ $permissions |= \OCP\PERMISSION_CREATE;
+ }
+ if($this->isReadable($path)){
+ $permissions |= \OCP\PERMISSION_READ;
+ }
+ if($this->isUpdatable($path)){
+ $permissions |= \OCP\PERMISSION_UPDATE;
+ }
+ if($this->isDeletable($path)){
+ $permissions |= \OCP\PERMISSION_DELETE;
+ }
+ if($this->isSharable($path)){
+ $permissions |= \OCP\PERMISSION_SHARE;
+ }
+ return $permissions;
}
public function filemtime($path) {
$stat = $this->stat($path);
return $stat['mtime'];
}
- public function fileatime($path) {
- $stat = $this->stat($path);
- return $stat['atime'];
- }
public function file_get_contents($path) {
$handle = $this->fopen($path, "r");
if(!$handle) {
@@ -89,94 +83,58 @@ abstract class OC_Filestorage_Common extends OC_Filestorage {
}
return fread($handle, $size);
}
- public function file_put_contents($path, $data) {
+ public function file_put_contents($path,$data) {
$handle = $this->fopen($path, "w");
return fwrite($handle, $data);
}
-// abstract public function unlink($path);
- public function rename($path1, $path2) {
- if($this->copy($path1, $path2)) {
+ public function rename($path1,$path2) {
+ if($this->copy($path1,$path2)) {
return $this->unlink($path1);
}else{
return false;
}
}
- public function copy($path1, $path2) {
- $source=$this->fopen($path1, 'r');
- $target=$this->fopen($path2, 'w');
- $count=OC_Helper::streamCopy($source, $target);
+ public function copy($path1,$path2) {
+ $source=$this->fopen($path1,'r');
+ $target=$this->fopen($path2,'w');
+ $count=\OC_Helper::streamCopy($source,$target);
return $count>0;
}
-// abstract public function fopen($path, $mode);
/**
* @brief Deletes all files and folders recursively within a directory
- * @param $directory The directory whose contents will be deleted
- * @param $empty Flag indicating whether directory will be emptied
- * @returns true/false
+ * @param string $directory The directory whose contents will be deleted
+ * @param bool $empty Flag indicating whether directory will be emptied
+ * @returns bool
*
* @note By default the directory specified by $directory will be
* deleted together with its contents. To avoid this set $empty to true
*/
public function deleteAll( $directory, $empty = false ) {
-
- // strip leading slash
- if( substr( $directory, 0, 1 ) == "/" ) {
-
- $directory = substr( $directory, 1 );
-
- }
-
- // strip trailing slash
- if( substr( $directory, -1) == "/" ) {
-
- $directory = substr( $directory, 0, -1 );
-
- }
+ $directory = trim($directory,'/');
if ( !$this->file_exists( \OCP\USER::getUser() . '/' . $directory ) || !$this->is_dir( \OCP\USER::getUser() . '/' . $directory ) ) {
-
return false;
-
- } elseif( !$this->is_readable( \OCP\USER::getUser() . '/' . $directory ) ) {
-
+ } elseif( !$this->isReadable( \OCP\USER::getUser() . '/' . $directory ) ) {
return false;
-
} else {
-
$directoryHandle = $this->opendir( \OCP\USER::getUser() . '/' . $directory );
-
while ( $contents = readdir( $directoryHandle ) ) {
-
if ( $contents != '.' && $contents != '..') {
-
$path = $directory . "/" . $contents;
-
if ( $this->is_dir( $path ) ) {
-
- deleteAll( $path );
-
+ $this->deleteAll( $path );
} else {
-
$this->unlink( \OCP\USER::getUser() .'/' . $path ); // TODO: make unlink use same system path as is_dir
-
}
}
-
}
-
//$this->closedir( $directoryHandle ); // TODO: implement closedir in OC_FSV
-
if ( $empty == false ) {
-
if ( !$this->rmdir( $directory ) ) {
-
- return false;
-
+ return false;
}
-
}
-
return true;
}
@@ -188,73 +146,71 @@ abstract class OC_Filestorage_Common extends OC_Filestorage {
if($this->is_dir($path)) {
return 'httpd/unix-directory';
}
- $source=$this->fopen($path, 'r');
+ $source=$this->fopen($path,'r');
if(!$source) {
return false;
}
- $head=fread($source, 8192);//8kb should suffice to determine a mimetype
- if($pos=strrpos($path, '.')) {
- $extension=substr($path, $pos);
+ $head=fread($source,8192);//8kb should suffice to determine a mimetype
+ if($pos=strrpos($path,'.')) {
+ $extension=substr($path,$pos);
}else{
$extension='';
}
- $tmpFile=OC_Helper::tmpFile($extension);
- file_put_contents($tmpFile, $head);
- $mime=OC_Helper::getMimeType($tmpFile);
+ $tmpFile=\OC_Helper::tmpFile($extension);
+ file_put_contents($tmpFile,$head);
+ $mime=\OC_Helper::getMimeType($tmpFile);
unlink($tmpFile);
return $mime;
}
- public function hash($type, $path, $raw = false) {
- $tmpFile=$this->getLocalFile();
- $hash=hash($type, $tmpFile, $raw);
+ public function hash($type,$path,$raw = false) {
+ $tmpFile=$this->getLocalFile($path);
+ $hash=hash($type,$tmpFile,$raw);
unlink($tmpFile);
return $hash;
}
-// abstract public function free_space($path);
public function search($query) {
return $this->searchInDir($query);
}
public function getLocalFile($path) {
return $this->toTmpFile($path);
}
- private function toTmpFile($path) {//no longer in the storage api, still usefull here
- $source=$this->fopen($path, 'r');
+ private function toTmpFile($path) {//no longer in the storage api, still useful here
+ $source=$this->fopen($path,'r');
if(!$source) {
return false;
}
- if($pos=strrpos($path, '.')) {
- $extension=substr($path, $pos);
+ if($pos=strrpos($path,'.')) {
+ $extension=substr($path,$pos);
}else{
$extension='';
}
- $tmpFile=OC_Helper::tmpFile($extension);
- $target=fopen($tmpFile, 'w');
- OC_Helper::streamCopy($source, $target);
+ $tmpFile=\OC_Helper::tmpFile($extension);
+ $target=fopen($tmpFile,'w');
+ \OC_Helper::streamCopy($source,$target);
return $tmpFile;
}
public function getLocalFolder($path) {
- $baseDir=OC_Helper::tmpFolder();
- $this->addLocalFolder($path, $baseDir);
+ $baseDir=\OC_Helper::tmpFolder();
+ $this->addLocalFolder($path,$baseDir);
return $baseDir;
}
- private function addLocalFolder($path, $target) {
+ private function addLocalFolder($path,$target) {
if($dh=$this->opendir($path)) {
while($file=readdir($dh)) {
if($file!=='.' and $file!=='..') {
if($this->is_dir($path.'/'.$file)) {
mkdir($target.'/'.$file);
- $this->addLocalFolder($path.'/'.$file, $target.'/'.$file);
+ $this->addLocalFolder($path.'/'.$file,$target.'/'.$file);
}else{
$tmp=$this->toTmpFile($path.'/'.$file);
- rename($tmp, $target.'/'.$file);
+ rename($tmp,$target.'/'.$file);
}
}
}
}
}
-// abstract public function touch($path, $mtime=null);
- protected function searchInDir($query, $dir='') {
+ protected function searchInDir($query,$dir='') {
$files=array();
$dh=$this->opendir($dir);
if($dh) {
@@ -264,7 +220,7 @@ abstract class OC_Filestorage_Common extends OC_Filestorage {
$files[]=$dir.'/'.$item;
}
if($this->is_dir($dir.'/'.$item)) {
- $files=array_merge($files, $this->searchInDir($query, $dir.'/'.$item));
+ $files=array_merge($files,$this->searchInDir($query,$dir.'/'.$item));
}
}
}
@@ -273,19 +229,52 @@ abstract class OC_Filestorage_Common extends OC_Filestorage {
/**
* check if a file or folder has been updated since $time
+ * @param string $path
* @param int $time
* @return bool
*/
- public function hasUpdated($path, $time) {
+ public function hasUpdated($path,$time) {
return $this->filemtime($path)>$time;
}
+ public function getCache($path=''){
+ return new \OC\Files\Cache\Cache($this);
+ }
+
+ public function getScanner($path=''){
+ return new \OC\Files\Cache\Scanner($this);
+ }
+
+ public function getPermissionsCache($path=''){
+ return new \OC\Files\Cache\Permissions($this);
+ }
+
+ public function getWatcher($path=''){
+ return new \OC\Files\Cache\Watcher($this);
+ }
+
/**
* get the owner of a path
- * @param $path The path to get the owner
+ * @param string $path The path to get the owner
* @return string uid or false
*/
public function getOwner($path) {
- return OC_User::getUser();
+ return \OC_User::getUser();
+ }
+
+ /**
+ * get the ETag for a file or folder
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getETag($path){
+ $ETagFunction = \OC_Connector_Sabre_Node::$ETagFunction;
+ if($ETagFunction) {
+ $hash = call_user_func($ETagFunction, $path);
+ return $hash;
+ }else{
+ return uniqid();
+ }
}
}
diff --git a/lib/filestorage/commontest.php b/lib/files/storage/commontest.php
index 3b038b3fda9..fbdb7fbf110 100644
--- a/lib/filestorage/commontest.php
+++ b/lib/files/storage/commontest.php
@@ -22,20 +22,25 @@
*/
/**
- * test implementation for OC_FileStorage_Common with OC_FileStorage_Local
+ * test implementation for \OC\Files\Storage\Common with \OC\Files\Storage\Local
*/
-class OC_Filestorage_CommonTest extends OC_Filestorage_Common{
+namespace OC\Files\Storage;
+
+class CommonTest extends \OC\Files\Storage\Common{
/**
* underlying local storage used for missing functions
- * @var OC_FileStorage_Local
+ * @var \OC\Files\Storage\Local
*/
private $storage;
public function __construct($params) {
- $this->storage=new OC_Filestorage_Local($params);
+ $this->storage=new \OC\Files\Storage\Local($params);
}
+ public function getId(){
+ return 'test::'.$this->storage->getId();
+ }
public function mkdir($path) {
return $this->storage->mkdir($path);
}
diff --git a/lib/filestorage/local.php b/lib/files/storage/local.php
index 4a4019a3224..9fc9d375bb3 100644
--- a/lib/filestorage/local.php
+++ b/lib/files/storage/local.php
@@ -1,8 +1,17 @@
<?php
/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Storage;
+
+/**
* for local filestore, we only have to map the paths
*/
-class OC_Filestorage_Local extends OC_Filestorage_Common{
+class Local extends \OC\Files\Storage\Common{
protected $datadir;
public function __construct($arguments) {
$this->datadir=$arguments['datadir'];
@@ -10,6 +19,9 @@ class OC_Filestorage_Local extends OC_Filestorage_Common{
$this->datadir.='/';
}
}
+ public function getId(){
+ return 'local::'.$this->datadir;
+ }
public function mkdir($path) {
return @mkdir($this->datadir.$path);
}
@@ -20,7 +32,7 @@ class OC_Filestorage_Local extends OC_Filestorage_Common{
return opendir($this->datadir.$path);
}
public function is_dir($path) {
- if(substr($path, -1)=='/') {
+ if(substr($path,-1)=='/') {
$path=substr($path, 0, -1);
}
return is_dir($this->datadir.$path);
@@ -68,9 +80,6 @@ class OC_Filestorage_Local extends OC_Filestorage_Common{
public function file_exists($path) {
return file_exists($this->datadir.$path);
}
- public function filectime($path) {
- return filectime($this->datadir.$path);
- }
public function filemtime($path) {
return filemtime($this->datadir.$path);
}
@@ -100,11 +109,11 @@ class OC_Filestorage_Local extends OC_Filestorage_Common{
}
public function rename($path1, $path2) {
if (!$this->isUpdatable($path1)) {
- OC_Log::write('core', 'unable to rename, file is not writable : '.$path1, OC_Log::ERROR);
+ \OC_Log::write('core','unable to rename, file is not writable : '.$path1,\OC_Log::ERROR);
return false;
}
if(! $this->file_exists($path1)) {
- OC_Log::write('core', 'unable to rename, file does not exists : '.$path1, OC_Log::ERROR);
+ \OC_Log::write('core','unable to rename, file does not exists : '.$path1,\OC_Log::ERROR);
return false;
}
@@ -143,7 +152,7 @@ class OC_Filestorage_Local extends OC_Filestorage_Common{
public function getMimeType($path) {
if($this->isReadable($path)) {
- return OC_Helper::getMimeType($this->datadir.$path);
+ return \OC_Helper::getMimeType($this->datadir . $path);
}else{
return false;
}
diff --git a/lib/files/storage/storage.php b/lib/files/storage/storage.php
new file mode 100644
index 00000000000..2cc835236ba
--- /dev/null
+++ b/lib/files/storage/storage.php
@@ -0,0 +1,88 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Storage;
+
+/**
+ * Provide a common interface to all different storage options
+ */
+interface Storage{
+ public function __construct($parameters);
+ public function getId();
+ public function mkdir($path);
+ public function rmdir($path);
+ public function opendir($path);
+ public function is_dir($path);
+ public function is_file($path);
+ public function stat($path);
+ public function filetype($path);
+ public function filesize($path);
+ public function isCreatable($path);
+ public function isReadable($path);
+ public function isUpdatable($path);
+ public function isDeletable($path);
+ public function isSharable($path);
+ public function getPermissions($path);
+ public function file_exists($path);
+ public function filemtime($path);
+ public function file_get_contents($path);
+ public function file_put_contents($path,$data);
+ public function unlink($path);
+ public function rename($path1,$path2);
+ public function copy($path1,$path2);
+ public function fopen($path,$mode);
+ public function getMimeType($path);
+ public function hash($type,$path,$raw = false);
+ public function free_space($path);
+ public function search($query);
+ public function touch($path, $mtime=null);
+ public function getLocalFile($path);// get a path to a local version of the file, whether the original file is local or remote
+ public function getLocalFolder($path);// get a path to a local version of the folder, whether the original file is local or remote
+ /**
+ * check if a file or folder has been updated since $time
+ * @param int $time
+ * @return bool
+ *
+ * hasUpdated for folders should return at least true if a file inside the folder is add, removed or renamed.
+ * returning true for other changes in the folder is optional
+ */
+ public function hasUpdated($path,$time);
+
+ /**
+ * @param string $path
+ * @return \OC\Files\Cache\Cache
+ */
+ public function getCache($path='');
+ /**
+ * @param string $path
+ * @return \OC\Files\Cache\Scanner
+ */
+ public function getScanner($path='');
+
+ public function getOwner($path);
+
+ /**
+ * @param string $path
+ * @return \OC\Files\Cache\Permissions
+ */
+ public function getPermissionsCache($path='');
+
+ /**
+ * @param string $path
+ * @return \OC\Files\Cache\Watcher
+ */
+ public function getWatcher($path='');
+
+ /**
+ * get the ETag for a file or folder
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getETag($path);
+}
diff --git a/lib/files/storage/temporary.php b/lib/files/storage/temporary.php
new file mode 100644
index 00000000000..ffc55e27507
--- /dev/null
+++ b/lib/files/storage/temporary.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Storage;
+
+/**
+ * local storage backnd in temporary folder for testing purpores
+ */
+class Temporary extends Local{
+ public function __construct($arguments) {
+ $this->datadir=\OC_Helper::tmpFolder();
+ }
+
+ public function cleanUp() {
+ \OC_Helper::rmdirr($this->datadir);
+ }
+
+ public function __destruct() {
+ $this->cleanUp();
+ }
+}
diff --git a/lib/files/stream/close.php b/lib/files/stream/close.php
new file mode 100644
index 00000000000..80de3497c36
--- /dev/null
+++ b/lib/files/stream/close.php
@@ -0,0 +1,100 @@
+<?php
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Stream;
+
+/**
+ * stream wrapper that provides a callback on stream close
+ */
+class Close {
+ private static $callBacks = array();
+ private $path = '';
+ private $source;
+ private static $open = array();
+
+ public function stream_open($path, $mode, $options, &$opened_path) {
+ $path = substr($path, strlen('close://'));
+ $this->path = $path;
+ $this->source = fopen($path, $mode);
+ if (is_resource($this->source)) {
+ $this->meta = stream_get_meta_data($this->source);
+ }
+ self::$open[] = $path;
+ return is_resource($this->source);
+ }
+
+ public function stream_seek($offset, $whence = SEEK_SET) {
+ fseek($this->source, $offset, $whence);
+ }
+
+ public function stream_tell() {
+ return ftell($this->source);
+ }
+
+ public function stream_read($count) {
+ return fread($this->source, $count);
+ }
+
+ public function stream_write($data) {
+ return fwrite($this->source, $data);
+ }
+
+ public function stream_set_option($option, $arg1, $arg2) {
+ switch ($option) {
+ case STREAM_OPTION_BLOCKING:
+ stream_set_blocking($this->source, $arg1);
+ break;
+ case STREAM_OPTION_READ_TIMEOUT:
+ stream_set_timeout($this->source, $arg1, $arg2);
+ break;
+ case STREAM_OPTION_WRITE_BUFFER:
+ stream_set_write_buffer($this->source, $arg1, $arg2);
+ }
+ }
+
+ public function stream_stat() {
+ return fstat($this->source);
+ }
+
+ public function stream_lock($mode) {
+ flock($this->source, $mode);
+ }
+
+ public function stream_flush() {
+ return fflush($this->source);
+ }
+
+ public function stream_eof() {
+ return feof($this->source);
+ }
+
+ public function url_stat($path) {
+ $path = substr($path, strlen('close://'));
+ if (file_exists($path)) {
+ return stat($path);
+ } else {
+ return false;
+ }
+ }
+
+ public function stream_close() {
+ fclose($this->source);
+ if (isset(self::$callBacks[$this->path])) {
+ call_user_func(self::$callBacks[$this->path], $this->path);
+ }
+ }
+
+ public function unlink($path) {
+ $path = substr($path, strlen('close://'));
+ return unlink($path);
+ }
+
+ public static function registerCallback($path, $callback) {
+ self::$callBacks[$path] = $callback;
+ }
+}
diff --git a/lib/files/stream/dir.php b/lib/files/stream/dir.php
new file mode 100644
index 00000000000..6ca884fc994
--- /dev/null
+++ b/lib/files/stream/dir.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Stream;
+
+class Dir {
+ private static $dirs = array();
+ private $name;
+ private $index;
+
+ public function dir_opendir($path, $options) {
+ $this->name = substr($path, strlen('fakedir://'));
+ $this->index = 0;
+ if (!isset(self::$dirs[$this->name])) {
+ self::$dirs[$this->name] = array();
+ }
+ return true;
+ }
+
+ public function dir_readdir() {
+ if ($this->index >= count(self::$dirs[$this->name])) {
+ return false;
+ }
+ $filename = self::$dirs[$this->name][$this->index];
+ $this->index++;
+ return $filename;
+ }
+
+ public function dir_closedir() {
+ $this->name = '';
+ return true;
+ }
+
+ public function dir_rewinddir() {
+ $this->index = 0;
+ return true;
+ }
+
+ public static function register($path, $content) {
+ self::$dirs[$path] = $content;
+ }
+}
diff --git a/lib/files/stream/oc.php b/lib/files/stream/oc.php
new file mode 100644
index 00000000000..88e7e062df9
--- /dev/null
+++ b/lib/files/stream/oc.php
@@ -0,0 +1,129 @@
+<?php
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Stream;
+
+/**
+ * a stream wrappers for ownCloud's virtual filesystem
+ */
+class OC {
+ /**
+ * @var \OC\Files\View
+ */
+ static private $rootView;
+
+ private $path;
+ private $dirSource;
+ private $fileSource;
+ private $meta;
+
+ private function setup(){
+ if (!self::$rootView) {
+ self::$rootView = new \OC\Files\View('');
+ }
+ }
+
+ public function stream_open($path, $mode, $options, &$opened_path) {
+ $this->setup();
+ $path = substr($path, strlen('oc://'));
+ $this->path = $path;
+ $this->fileSource = self::$rootView->fopen($path, $mode);
+ if (is_resource($this->fileSource)) {
+ $this->meta = stream_get_meta_data($this->fileSource);
+ }
+ return is_resource($this->fileSource);
+ }
+
+ public function stream_seek($offset, $whence = SEEK_SET) {
+ fseek($this->fileSource, $offset, $whence);
+ }
+
+ public function stream_tell() {
+ return ftell($this->fileSource);
+ }
+
+ public function stream_read($count) {
+ return fread($this->fileSource, $count);
+ }
+
+ public function stream_write($data) {
+ return fwrite($this->fileSource, $data);
+ }
+
+ public function stream_set_option($option, $arg1, $arg2) {
+ switch ($option) {
+ case STREAM_OPTION_BLOCKING:
+ stream_set_blocking($this->fileSource, $arg1);
+ break;
+ case STREAM_OPTION_READ_TIMEOUT:
+ stream_set_timeout($this->fileSource, $arg1, $arg2);
+ break;
+ case STREAM_OPTION_WRITE_BUFFER:
+ stream_set_write_buffer($this->fileSource, $arg1, $arg2);
+ }
+ }
+
+ public function stream_stat() {
+ return fstat($this->fileSource);
+ }
+
+ public function stream_lock($mode) {
+ flock($this->fileSource, $mode);
+ }
+
+ public function stream_flush() {
+ return fflush($this->fileSource);
+ }
+
+ public function stream_eof() {
+ return feof($this->fileSource);
+ }
+
+ public function url_stat($path) {
+ $this->setup();
+ $path = substr($path, strlen('oc://'));
+ if (self::$rootView->file_exists($path)) {
+ return self::$rootView->stat($path);
+ } else {
+ return false;
+ }
+ }
+
+ public function stream_close() {
+ fclose($this->fileSource);
+ }
+
+ public function unlink($path) {
+ $this->setup();
+ $path = substr($path, strlen('oc://'));
+ return self::$rootView->unlink($path);
+ }
+
+ public function dir_opendir($path, $options) {
+ $this->setup();
+ $path = substr($path, strlen('oc://'));
+ $this->path = $path;
+ $this->dirSource = self::$rootView->opendir($path);
+ if (is_resource($this->dirSource)) {
+ $this->meta = stream_get_meta_data($this->dirSource);
+ }
+ return is_resource($this->dirSource);
+ }
+
+ public function dir_readdir() {
+ return readdir($this->dirSource);
+ }
+
+ public function dir_closedir() {
+ closedir($this->dirSource);
+ }
+
+ public function dir_rewinddir() {
+ rewinddir($this->dirSource);
+ }
+}
diff --git a/lib/streamwrappers.php b/lib/files/stream/staticstream.php
index 981c280f0dd..7725a6a5a04 100644
--- a/lib/streamwrappers.php
+++ b/lib/files/stream/staticstream.php
@@ -1,54 +1,30 @@
<?php
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
-class OC_FakeDirStream{
- public static $dirs=array();
- private $name;
- private $index;
-
- public function dir_opendir($path, $options) {
- $this->name=substr($path, strlen('fakedir://'));
- $this->index=0;
- if(!isset(self::$dirs[$this->name])) {
- self::$dirs[$this->name]=array();
- }
- return true;
- }
-
- public function dir_readdir() {
- if($this->index>=count(self::$dirs[$this->name])) {
- return false;
- }
- $filename=self::$dirs[$this->name][$this->index];
- $this->index++;
- return $filename;
- }
-
- public function dir_closedir() {
- $this->name='';
- return true;
- }
-
- public function dir_rewinddir() {
- $this->index=0;
- return true;
- }
-}
+namespace OC\Files\Stream;
-class OC_StaticStreamWrapper {
+class StaticStream {
public $context;
protected static $data = array();
- protected $path = '';
+ protected $path = '';
protected $pointer = 0;
protected $writable = false;
- public function stream_close() {}
+ public function stream_close() {
+ }
public function stream_eof() {
return $this->pointer >= strlen(self::$data[$this->path]);
}
- public function stream_flush() {}
+ public function stream_flush() {
+ }
public function stream_open($path, $mode, $options, &$opened_path) {
switch ($mode[0]) {
@@ -213,89 +189,3 @@ class OC_StaticStreamWrapper {
return false;
}
}
-
-/**
- * stream wrapper that provides a callback on stream close
- */
-class OC_CloseStreamWrapper{
- public static $callBacks=array();
- private $path='';
- private $source;
- private static $open=array();
- public function stream_open($path, $mode, $options, &$opened_path) {
- $path=substr($path, strlen('close://'));
- $this->path=$path;
- $this->source=fopen($path, $mode);
- if(is_resource($this->source)) {
- $this->meta=stream_get_meta_data($this->source);
- }
- self::$open[]=$path;
- return is_resource($this->source);
- }
-
- public function stream_seek($offset, $whence=SEEK_SET) {
- fseek($this->source, $offset, $whence);
- }
-
- public function stream_tell() {
- return ftell($this->source);
- }
-
- public function stream_read($count) {
- return fread($this->source, $count);
- }
-
- public function stream_write($data) {
- return fwrite($this->source, $data);
- }
-
- public function stream_set_option($option, $arg1, $arg2) {
- switch($option) {
- case STREAM_OPTION_BLOCKING:
- stream_set_blocking($this->source, $arg1);
- break;
- case STREAM_OPTION_READ_TIMEOUT:
- stream_set_timeout($this->source, $arg1, $arg2);
- break;
- case STREAM_OPTION_WRITE_BUFFER:
- stream_set_write_buffer($this->source, $arg1, $arg2);
- }
- }
-
- public function stream_stat() {
- return fstat($this->source);
- }
-
- public function stream_lock($mode) {
- flock($this->source, $mode);
- }
-
- public function stream_flush() {
- return fflush($this->source);
- }
-
- public function stream_eof() {
- return feof($this->source);
- }
-
- public function url_stat($path) {
- $path=substr($path, strlen('close://'));
- if(file_exists($path)) {
- return stat($path);
- }else{
- return false;
- }
- }
-
- public function stream_close() {
- fclose($this->source);
- if(isset(self::$callBacks[$this->path])) {
- call_user_func(self::$callBacks[$this->path], $this->path);
- }
- }
-
- public function unlink($path) {
- $path=substr($path, strlen('close://'));
- return unlink($path);
- }
-}
diff --git a/lib/files/view.php b/lib/files/view.php
new file mode 100644
index 00000000000..302232b5134
--- /dev/null
+++ b/lib/files/view.php
@@ -0,0 +1,958 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+/**
+ * Class to provide access to ownCloud filesystem via a "view", and methods for
+ * working with files within that view (e.g. read, write, delete, etc.). Each
+ * view is restricted to a set of directories via a virtual root. The default view
+ * uses the currently logged in user's data directory as root (parts of
+ * OC_Filesystem are merely a wrapper for OC_FilesystemView).
+ *
+ * Apps that need to access files outside of the user data folders (to modify files
+ * belonging to a user other than the one currently logged in, for example) should
+ * use this class directly rather than using OC_Filesystem, or making use of PHP's
+ * built-in file manipulation functions. This will ensure all hooks and proxies
+ * are triggered correctly.
+ *
+ * Filesystem functions are not called directly; they are passed to the correct
+ * \OC\Files\Storage\Storage object
+ */
+
+namespace OC\Files;
+
+class View {
+ private $fakeRoot = '';
+ private $internal_path_cache = array();
+ private $storage_cache = array();
+
+ public function __construct($root) {
+ $this->fakeRoot = $root;
+ }
+
+ public function getAbsolutePath($path = '/') {
+ if (!$path) {
+ $path = '/';
+ }
+ if ($path[0] !== '/') {
+ $path = '/' . $path;
+ }
+ return $this->fakeRoot . $path;
+ }
+
+ /**
+ * change the root to a fake root
+ *
+ * @param string $fakeRoot
+ * @return bool
+ */
+ public function chroot($fakeRoot) {
+ if (!$fakeRoot == '') {
+ if ($fakeRoot[0] !== '/') {
+ $fakeRoot = '/' . $fakeRoot;
+ }
+ }
+ $this->fakeRoot = $fakeRoot;
+ }
+
+ /**
+ * get the fake root
+ *
+ * @return string
+ */
+ public function getRoot() {
+ return $this->fakeRoot;
+ }
+
+ /**
+ * get path relative to the root of the view
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getRelativePath($path) {
+ if ($this->fakeRoot == '') {
+ return $path;
+ }
+ if (strpos($path, $this->fakeRoot) !== 0) {
+ return null;
+ } else {
+ $path = substr($path, strlen($this->fakeRoot));
+ if (strlen($path) === 0) {
+ return '/';
+ } else {
+ return $path;
+ }
+ }
+ }
+
+ /**
+ * get the mountpoint of the storage object for a path
+ ( note: because a storage is not always mounted inside the fakeroot, the returned mountpoint is relative to the absolute root of the filesystem and doesn't take the chroot into account
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getMountPoint($path) {
+ return Filesystem::getMountPoint($this->getAbsolutePath($path));
+ }
+
+ /**
+ * resolve a path to a storage and internal path
+ *
+ * @param string $path
+ * @return array consisting of the storage and the internal path
+ */
+ public function resolvePath($path) {
+ return Filesystem::resolvePath($this->getAbsolutePath($path));
+ }
+
+ /**
+ * return the path to a local version of the file
+ * we need this because we can't know if a file is stored local or not from outside the filestorage and for some purposes a local file is needed
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getLocalFile($path) {
+ $parent = substr($path, 0, strrpos($path, '/'));
+ $path = $this->getAbsolutePath($path);
+ list($storage, $internalPath) = Filesystem::resolvePath($path);
+ if (Filesystem::isValidPath($parent) and $storage) {
+ return $storage->getLocalFile($internalPath);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @param string $path
+ * @return string
+ */
+ public function getLocalFolder($path) {
+ $parent = substr($path, 0, strrpos($path, '/'));
+ $path = $this->getAbsolutePath($path);
+ list($storage, $internalPath) = Filesystem::resolvePath($path);
+ if (Filesystem::isValidPath($parent) and $storage) {
+ return $storage->getLocalFolder($internalPath);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * the following functions operate with arguments and return values identical
+ * to those of their PHP built-in equivalents. Mostly they are merely wrappers
+ * for \OC\Files\Storage\Storage via basicOperation().
+ */
+ public function mkdir($path) {
+ return $this->basicOperation('mkdir', $path, array('create', 'write'));
+ }
+
+ public function rmdir($path) {
+ return $this->basicOperation('rmdir', $path, array('delete'));
+ }
+
+ public function opendir($path) {
+ return $this->basicOperation('opendir', $path, array('read'));
+ }
+
+ public function readdir($handle) {
+ $fsLocal = new Storage\Local(array('datadir' => '/'));
+ return $fsLocal->readdir($handle);
+ }
+
+ public function is_dir($path) {
+ if ($path == '/') {
+ return true;
+ }
+ return $this->basicOperation('is_dir', $path);
+ }
+
+ public function is_file($path) {
+ if ($path == '/') {
+ return false;
+ }
+ return $this->basicOperation('is_file', $path);
+ }
+
+ public function stat($path) {
+ return $this->basicOperation('stat', $path);
+ }
+
+ public function filetype($path) {
+ return $this->basicOperation('filetype', $path);
+ }
+
+ public function filesize($path) {
+ return $this->basicOperation('filesize', $path);
+ }
+
+ public function readfile($path) {
+ @ob_end_clean();
+ $handle = $this->fopen($path, 'rb');
+ if ($handle) {
+ $chunkSize = 8192; // 8 MB chunks
+ while (!feof($handle)) {
+ echo fread($handle, $chunkSize);
+ flush();
+ }
+ $size = $this->filesize($path);
+ return $size;
+ }
+ return false;
+ }
+
+ public function isCreatable($path) {
+ return $this->basicOperation('isCreatable', $path);
+ }
+
+ public function isReadable($path) {
+ return $this->basicOperation('isReadable', $path);
+ }
+
+ public function isUpdatable($path) {
+ return $this->basicOperation('isUpdatable', $path);
+ }
+
+ public function isDeletable($path) {
+ return $this->basicOperation('isDeletable', $path);
+ }
+
+ public function isSharable($path) {
+ return $this->basicOperation('isSharable', $path);
+ }
+
+ public function file_exists($path) {
+ if ($path == '/') {
+ return true;
+ }
+ return $this->basicOperation('file_exists', $path);
+ }
+
+ public function filemtime($path) {
+ return $this->basicOperation('filemtime', $path);
+ }
+
+ public function touch($path, $mtime = null) {
+ if (!is_null($mtime) and !is_numeric($mtime)) {
+ $mtime = strtotime($mtime);
+ }
+ return $this->basicOperation('touch', $path, array('write'), $mtime);
+ }
+
+ public function file_get_contents($path) {
+ return $this->basicOperation('file_get_contents', $path, array('read'));
+ }
+
+ public function file_put_contents($path, $data) {
+ if (is_resource($data)) { //not having to deal with streams in file_put_contents makes life easier
+ $absolutePath = Filesystem::normalizePath($this->getAbsolutePath($path));
+ if (\OC_FileProxy::runPreProxies('file_put_contents', $absolutePath, $data) && Filesystem::isValidPath($path)) {
+ $path = $this->getRelativePath($absolutePath);
+ $exists = $this->file_exists($path);
+ $run = true;
+ if ($this->fakeRoot == Filesystem::getRoot()) {
+ if (!$exists) {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_create,
+ array(
+ Filesystem::signal_param_path => $path,
+ Filesystem::signal_param_run => &$run
+ )
+ );
+ }
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_write,
+ array(
+ Filesystem::signal_param_path => $path,
+ Filesystem::signal_param_run => &$run
+ )
+ );
+ }
+ if (!$run) {
+ return false;
+ }
+ $target = $this->fopen($path, 'w');
+ if ($target) {
+ $count = \OC_Helper::streamCopy($data, $target);
+ fclose($target);
+ fclose($data);
+ if ($this->fakeRoot == Filesystem::getRoot()) {
+ if (!$exists) {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_post_create,
+ array(Filesystem::signal_param_path => $path)
+ );
+ }
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_post_write,
+ array(Filesystem::signal_param_path => $path)
+ );
+ }
+ \OC_FileProxy::runPostProxies('file_put_contents', $absolutePath, $count);
+ return $count > 0;
+ } else {
+ return false;
+ }
+ } else {
+ return false;
+ }
+ } else {
+ return $this->basicOperation('file_put_contents', $path, array('create', 'write'), $data);
+ }
+ }
+
+ public function unlink($path) {
+ return $this->basicOperation('unlink', $path, array('delete'));
+ }
+
+ public function deleteAll($directory, $empty = false) {
+ return $this->basicOperation('deleteAll', $directory, array('delete'), $empty);
+ }
+
+ public function rename($path1, $path2) {
+ $postFix1 = (substr($path1, -1, 1) === '/') ? '/' : '';
+ $postFix2 = (substr($path2, -1, 1) === '/') ? '/' : '';
+ $absolutePath1 = Filesystem::normalizePath($this->getAbsolutePath($path1));
+ $absolutePath2 = Filesystem::normalizePath($this->getAbsolutePath($path2));
+ if (\OC_FileProxy::runPreProxies('rename', $absolutePath1, $absolutePath2) and Filesystem::isValidPath($path2)) {
+ $path1 = $this->getRelativePath($absolutePath1);
+ $path2 = $this->getRelativePath($absolutePath2);
+
+ if ($path1 == null or $path2 == null) {
+ return false;
+ }
+ $run = true;
+ if ($this->fakeRoot == Filesystem::getRoot()) {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME, Filesystem::signal_rename,
+ array(
+ Filesystem::signal_param_oldpath => $path1,
+ Filesystem::signal_param_newpath => $path2,
+ Filesystem::signal_param_run => &$run
+ )
+ );
+ }
+ if ($run) {
+ $mp1 = $this->getMountPoint($path1 . $postFix1);
+ $mp2 = $this->getMountPoint($path2 . $postFix2);
+ if ($mp1 == $mp2) {
+ list($storage, $internalPath1) = Filesystem::resolvePath($absolutePath1 . $postFix1);
+ list(, $internalPath2) = Filesystem::resolvePath($absolutePath2 . $postFix2);
+ if ($storage) {
+ $result = $storage->rename($internalPath1, $internalPath2);
+ } else {
+ $result = false;
+ }
+ } else {
+ $source = $this->fopen($path1 . $postFix1, 'r');
+ $target = $this->fopen($path2 . $postFix2, 'w');
+ $count = \OC_Helper::streamCopy($source, $target);
+ list($storage1, $internalPath1) = Filesystem::resolvePath($absolutePath1 . $postFix1);
+ $storage1->unlink($internalPath1);
+ $result = $count > 0;
+ }
+ if ($this->fakeRoot == Filesystem::getRoot()) {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_post_rename,
+ array(
+ Filesystem::signal_param_oldpath => $path1,
+ Filesystem::signal_param_newpath => $path2
+ )
+ );
+ }
+ return $result;
+ } else {
+ return false;
+ }
+ } else {
+ return false;
+ }
+ }
+
+ public function copy($path1, $path2) {
+ $postFix1 = (substr($path1, -1, 1) === '/') ? '/' : '';
+ $postFix2 = (substr($path2, -1, 1) === '/') ? '/' : '';
+ $absolutePath1 = Filesystem::normalizePath($this->getAbsolutePath($path1));
+ $absolutePath2 = Filesystem::normalizePath($this->getAbsolutePath($path2));
+ if (\OC_FileProxy::runPreProxies('copy', $absolutePath1, $absolutePath2) and Filesystem::isValidPath($path2)) {
+ $path1 = $this->getRelativePath($absolutePath1);
+ $path2 = $this->getRelativePath($absolutePath2);
+
+ if ($path1 == null or $path2 == null) {
+ return false;
+ }
+ $run = true;
+ $exists = $this->file_exists($path2);
+ if ($this->fakeRoot == Filesystem::getRoot()) {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_copy,
+ array(
+ Filesystem::signal_param_oldpath => $path1,
+ Filesystem::signal_param_newpath => $path2,
+ Filesystem::signal_param_run => &$run
+ )
+ );
+ if ($run and !$exists) {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_create,
+ array(
+ Filesystem::signal_param_path => $path2,
+ Filesystem::signal_param_run => &$run
+ )
+ );
+ }
+ if ($run) {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_write,
+ array(
+ Filesystem::signal_param_path => $path2,
+ Filesystem::signal_param_run => &$run
+ )
+ );
+ }
+ }
+ if ($run) {
+ $mp1 = $this->getMountPoint($path1 . $postFix1);
+ $mp2 = $this->getMountPoint($path2 . $postFix2);
+ if ($mp1 == $mp2) {
+ list($storage, $internalPath1) = Filesystem::resolvePath($absolutePath1 . $postFix1);
+ list(, $internalPath2) = Filesystem::resolvePath($absolutePath2 . $postFix2);
+ if ($storage) {
+ $result = $storage->copy($internalPath1, $internalPath2);
+ } else {
+ $result = false;
+ }
+ } else {
+ $source = $this->fopen($path1 . $postFix1, 'r');
+ $target = $this->fopen($path2 . $postFix2, 'w');
+ $result = \OC_Helper::streamCopy($source, $target);
+ }
+ if ($this->fakeRoot == Filesystem::getRoot()) {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_post_copy,
+ array(
+ Filesystem::signal_param_oldpath => $path1,
+ Filesystem::signal_param_newpath => $path2
+ )
+ );
+ if (!$exists) {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_post_create,
+ array(Filesystem::signal_param_path => $path2)
+ );
+ }
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_post_write,
+ array(Filesystem::signal_param_path => $path2)
+ );
+ }
+ return $result;
+ } else {
+ return false;
+ }
+ } else {
+ return false;
+ }
+ }
+
+ public function fopen($path, $mode) {
+ $hooks = array();
+ switch ($mode) {
+ case 'r':
+ case 'rb':
+ $hooks[] = 'read';
+ break;
+ case 'r+':
+ case 'rb+':
+ case 'w+':
+ case 'wb+':
+ case 'x+':
+ case 'xb+':
+ case 'a+':
+ case 'ab+':
+ $hooks[] = 'read';
+ $hooks[] = 'write';
+ break;
+ case 'w':
+ case 'wb':
+ case 'x':
+ case 'xb':
+ case 'a':
+ case 'ab':
+ $hooks[] = 'write';
+ break;
+ default:
+ \OC_Log::write('core', 'invalid mode (' . $mode . ') for ' . $path, \OC_Log::ERROR);
+ }
+
+ return $this->basicOperation('fopen', $path, $hooks, $mode);
+ }
+
+ public function toTmpFile($path) {
+ if (Filesystem::isValidPath($path)) {
+ $source = $this->fopen($path, 'r');
+ if ($source) {
+ $extension = '';
+ $extOffset = strpos($path, '.');
+ if ($extOffset !== false) {
+ $extension = substr($path, strrpos($path, '.'));
+ }
+ $tmpFile = \OC_Helper::tmpFile($extension);
+ file_put_contents($tmpFile, $source);
+ return $tmpFile;
+ } else {
+ return false;
+ }
+ } else {
+ return false;
+ }
+ }
+
+ public function fromTmpFile($tmpFile, $path) {
+ if (Filesystem::isValidPath($path)) {
+ if (!$tmpFile) {
+ debug_print_backtrace();
+ }
+ $source = fopen($tmpFile, 'r');
+ if ($source) {
+ $this->file_put_contents($path, $source);
+ unlink($tmpFile);
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ return false;
+ }
+ }
+
+ public function getMimeType($path) {
+ return $this->basicOperation('getMimeType', $path);
+ }
+
+ public function hash($type, $path, $raw = false) {
+ $postFix = (substr($path, -1, 1) === '/') ? '/' : '';
+ $absolutePath = Filesystem::normalizePath($this->getAbsolutePath($path));
+ if (\OC_FileProxy::runPreProxies('hash', $absolutePath) && Filesystem::isValidPath($path)) {
+ $path = $this->getRelativePath($absolutePath);
+ if ($path == null) {
+ return false;
+ }
+ if (Filesystem::$loaded && $this->fakeRoot == Filesystem::getRoot()) {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ Filesystem::signal_read,
+ array(Filesystem::signal_param_path => $path)
+ );
+ }
+ list($storage, $internalPath) = Filesystem::resolvePath($absolutePath . $postFix);
+ if ($storage) {
+ $result = $storage->hash($type, $internalPath, $raw);
+ $result = \OC_FileProxy::runPostProxies('hash', $absolutePath, $result);
+ return $result;
+ }
+ }
+ return null;
+ }
+
+ public function free_space($path = '/') {
+ return $this->basicOperation('free_space', $path);
+ }
+
+ /**
+ * @brief abstraction layer for basic filesystem functions: wrapper for \OC\Files\Storage\Storage
+ * @param string $operation
+ * @param string $path
+ * @param array $hooks (optional)
+ * @param mixed $extraParam (optional)
+ * @return mixed
+ *
+ * This method takes requests for basic filesystem functions (e.g. reading & writing
+ * files), processes hooks and proxies, sanitises paths, and finally passes them on to
+ * \OC\Files\Storage\Storage for delegation to a storage backend for execution
+ */
+ private function basicOperation($operation, $path, $hooks = array(), $extraParam = null) {
+ $postFix = (substr($path, -1, 1) === '/') ? '/' : '';
+ $absolutePath = Filesystem::normalizePath($this->getAbsolutePath($path));
+ if (\OC_FileProxy::runPreProxies($operation, $absolutePath, $extraParam) and Filesystem::isValidPath($path)) {
+ $path = $this->getRelativePath($absolutePath);
+ if ($path == null) {
+ return false;
+ }
+ $run = $this->runHooks($hooks, $path);
+ list($storage, $internalPath) = Filesystem::resolvePath($absolutePath . $postFix);
+ if ($run and $storage) {
+ if (!is_null($extraParam)) {
+ $result = $storage->$operation($internalPath, $extraParam);
+ } else {
+ $result = $storage->$operation($internalPath);
+ }
+ $result = \OC_FileProxy::runPostProxies($operation, $this->getAbsolutePath($path), $result);
+ if (Filesystem::$loaded and $this->fakeRoot == Filesystem::getRoot()) {
+ if ($operation != 'fopen') { //no post hooks for fopen, the file stream is still open
+ $this->runHooks($hooks, $path, true);
+ }
+ }
+ return $result;
+ }
+ }
+ return null;
+ }
+
+ private function runHooks($hooks, $path, $post = false) {
+ $prefix = ($post) ? 'post_' : '';
+ $run = true;
+ if (Filesystem::$loaded and $this->fakeRoot == Filesystem::getRoot()) {
+ foreach ($hooks as $hook) {
+ if ($hook != 'read') {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ $prefix . $hook,
+ array(
+ Filesystem::signal_param_run => &$run,
+ Filesystem::signal_param_path => $path
+ )
+ );
+ } elseif (!$post) {
+ \OC_Hook::emit(
+ Filesystem::CLASSNAME,
+ $prefix . $hook,
+ array(
+ Filesystem::signal_param_path => $path
+ )
+ );
+ }
+ }
+ }
+ return $run;
+ }
+
+ /**
+ * check if a file or folder has been updated since $time
+ *
+ * @param string $path
+ * @param int $time
+ * @return bool
+ */
+ public function hasUpdated($path, $time) {
+ return $this->basicOperation('hasUpdated', $path, array(), $time);
+ }
+
+ /**
+ * get the filesystem info
+ *
+ * @param string $path
+ * @return array
+ *
+ * returns an associative array with the following keys:
+ * - size
+ * - mtime
+ * - mimetype
+ * - encrypted
+ * - versioned
+ */
+ public function getFileInfo($path) {
+ $data = array();
+ $path = Filesystem::normalizePath($this->fakeRoot . '/' . $path);
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ * @var string $internalPath
+ */
+ list($storage, $internalPath) = Filesystem::resolvePath($path);
+ if ($storage) {
+ $cache = $storage->getCache($internalPath);
+ $permissionsCache = $storage->getPermissionsCache($internalPath);
+ $user = \OC_User::getUser();
+
+ if (!$cache->inCache($internalPath)) {
+ $scanner = $storage->getScanner($internalPath);
+ $scanner->scan($internalPath, Cache\Scanner::SCAN_SHALLOW);
+ } else {
+ $watcher = $storage->getWatcher($internalPath);
+ $watcher->checkUpdate($internalPath);
+ }
+
+ $data = $cache->get($internalPath);
+
+ if ($data and $data['fileid']) {
+ if ($data['mimetype'] === 'httpd/unix-directory') {
+ //add the sizes of other mountpoints to the folder
+ $mountPoints = Filesystem::getMountPoints($path);
+ foreach ($mountPoints as $mountPoint) {
+ $subStorage = Filesystem::getStorage($mountPoint);
+ if ($subStorage) {
+ $subCache = $subStorage->getCache('');
+ $rootEntry = $subCache->get('');
+ $data['size'] += $rootEntry['size'];
+ }
+ }
+ }
+
+ $permissions = $permissionsCache->get($data['fileid'], $user);
+ if ($permissions === -1) {
+ $permissions = $storage->getPermissions($internalPath);
+ $permissionsCache->set($data['fileid'], $user, $permissions);
+ }
+ $data['permissions'] = $permissions;
+ }
+ }
+ return $data;
+ }
+
+ /**
+ * get the content of a directory
+ *
+ * @param string $directory path under datadirectory
+ * @return array
+ */
+ public function getDirectoryContent($directory, $mimetype_filter = '') {
+ $result = array();
+ $path = Filesystem::normalizePath($this->fakeRoot . '/' . $directory);
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ * @var string $internalPath
+ */
+ list($storage, $internalPath) = Filesystem::resolvePath($path);
+ if ($storage) {
+ $cache = $storage->getCache($internalPath);
+ $permissionsCache = $storage->getPermissionsCache($internalPath);
+ $user = \OC_User::getUser();
+
+ if ($cache->getStatus($internalPath) < Cache\Cache::COMPLETE) {
+ $scanner = $storage->getScanner($internalPath);
+ $scanner->scan($internalPath, Cache\Scanner::SCAN_SHALLOW);
+ } else {
+ $watcher = $storage->getWatcher($internalPath);
+ $watcher->checkUpdate($internalPath);
+ }
+
+ $files = $cache->getFolderContents($internalPath); //TODO: mimetype_filter
+
+ $ids = array();
+ foreach ($files as $i => $file) {
+ $files[$i]['type'] = $file['mimetype'] === 'httpd/unix-directory' ? 'dir' : 'file';
+ $ids[] = $file['fileid'];
+
+ $permissions = $permissionsCache->get($file['fileid'], $user);
+ if ($permissions === -1) {
+ $permissions = $storage->getPermissions($file['path']);
+ $permissionsCache->set($file['fileid'], $user, $permissions);
+ }
+ $files[$i]['permissions'] = $permissions;
+ }
+
+ //add a folder for any mountpoint in this directory and add the sizes of other mountpoints to the folders
+ $mountPoints = Filesystem::getMountPoints($path);
+ $dirLength = strlen($path);
+ foreach ($mountPoints as $mountPoint) {
+ $subStorage = Filesystem::getStorage($mountPoint);
+ if ($subStorage) {
+ $subCache = $subStorage->getCache('');
+
+ if ($subCache->getStatus('') === Cache\Cache::NOT_FOUND) {
+ $subScanner = $subStorage->getScanner('');
+ $subScanner->scanFile('');
+ }
+
+ $rootEntry = $subCache->get('');
+ if ($rootEntry) {
+ $relativePath = trim(substr($mountPoint, $dirLength), '/');
+ if ($pos = strpos($relativePath, '/')) { //mountpoint inside subfolder add size to the correct folder
+ $entryName = substr($relativePath, 0, $pos);
+ foreach ($files as &$entry) {
+ if ($entry['name'] === $entryName) {
+ $entry['size'] += $rootEntry['size'];
+ }
+ }
+ } else { //mountpoint in this folder, add an entry for it
+ $rootEntry['name'] = $relativePath;
+ $rootEntry['type'] = $rootEntry['mimetype'] === 'httpd/unix-directory' ? 'dir' : 'file';
+ $subPermissionsCache = $subStorage->getPermissionsCache('');
+ $permissions = $subPermissionsCache->get($rootEntry['fileid'], $user);
+ if ($permissions === -1) {
+ $permissions = $subStorage->getPermissions($rootEntry['path']);
+ $subPermissionsCache->set($rootEntry['fileid'], $user, $permissions);
+ }
+ $rootEntry['permissions'] = $permissions;
+
+ //remove any existing entry with the same name
+ foreach ($files as $i => $file) {
+ if ($file['name'] === $rootEntry['name']) {
+ unset($files[$i]);
+ break;
+ }
+ }
+ $files[] = $rootEntry;
+ }
+ }
+ }
+ }
+
+ if ($mimetype_filter) {
+ foreach ($files as $file) {
+ if (strpos($mimetype_filter, '/')) {
+ if ($file['mimetype'] === $mimetype_filter) {
+ $result[] = $file;
+ }
+ } else {
+ if ($file['mimepart'] === $mimetype_filter) {
+ $result[] = $file;
+ }
+ }
+ }
+ } else {
+ $result = $files;
+ }
+ }
+ return $result;
+ }
+
+ /**
+ * change file metadata
+ *
+ * @param string $path
+ * @param array $data
+ * @return int
+ *
+ * returns the fileid of the updated file
+ */
+ public function putFileInfo($path, $data) {
+ $path = Filesystem::normalizePath($this->fakeRoot . '/' . $path);
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ * @var string $internalPath
+ */
+ list($storage, $internalPath) = Filesystem::resolvePath($path);
+ if ($storage) {
+ $cache = $storage->getCache($path);
+
+ if (!$cache->inCache($internalPath)) {
+ $scanner = $storage->getScanner($internalPath);
+ $scanner->scan($internalPath, Cache\Scanner::SCAN_SHALLOW);
+ }
+
+ return $cache->put($internalPath, $data);
+ } else {
+ return -1;
+ }
+ }
+
+ /**
+ * search for files with the name matching $query
+ *
+ * @param string $query
+ * @return array
+ */
+ public function search($query) {
+ return $this->searchCommon('%' . $query . '%', 'search');
+ }
+
+ /**
+ * search for files by mimetype
+ *
+ * @param string $query
+ * @return array
+ */
+ public function searchByMime($mimetype) {
+ return $this->searchCommon($mimetype, 'searchByMime');
+ }
+
+ /**
+ * @param string $query
+ * @param string $method
+ * @return array
+ */
+ private function searchCommon($query, $method) {
+ $files = array();
+ $rootLength = strlen($this->fakeRoot);
+
+ $mountPoint = Filesystem::getMountPoint($this->fakeRoot);
+ $storage = Filesystem::getStorage($mountPoint);
+ if ($storage) {
+ $cache = $storage->getCache('');
+
+ $results = $cache->$method($query);
+ foreach ($results as $result) {
+ if (substr($mountPoint . $result['path'], 0, $rootLength) === $this->fakeRoot) {
+ $result['path'] = substr($mountPoint . $result['path'], $rootLength);
+ $files[] = $result;
+ }
+ }
+
+ $mountPoints = Filesystem::getMountPoints($this->fakeRoot);
+ foreach ($mountPoints as $mountPoint) {
+ $storage = Filesystem::getStorage($mountPoint);
+ if ($storage) {
+ $cache = $storage->getCache('');
+
+ $relativeMountPoint = substr($mountPoint, $rootLength);
+ $results = $cache->$method($query);
+ foreach ($results as $result) {
+ $result['path'] = $relativeMountPoint . $result['path'];
+ $files[] = $result;
+ }
+ }
+ }
+ }
+ return $files;
+ }
+
+ /**
+ * get the ETag for a file or folder
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getETag($path) {
+ /**
+ * @var Storage\Storage $storage
+ * @var string $internalPath
+ */
+ list($storage, $internalPath) = $this->resolvePath($path);
+ if ($storage) {
+ return $storage->getETag($internalPath);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Get the path of a file by id, relative to the view
+ *
+ * Note that the resulting path is not guarantied to be unique for the id, multiple paths can point to the same file
+ *
+ * @param int $id
+ * @return string
+ */
+ public function getPath($id) {
+ list($storage, $internalPath) = Cache\Cache::getById($id);
+ $mounts = Mount::findById($storage);
+ foreach ($mounts as $mount) {
+ /**
+ * @var \OC\Files\Mount $mount
+ */
+ $fullPath = $mount->getMountPoint() . $internalPath;
+ if (!is_null($path = $this->getRelativePath($fullPath))) {
+ return $path;
+ }
+ }
+ return null;
+ }
+}
diff --git a/lib/filestorage.php b/lib/filestorage.php
deleted file mode 100644
index 2e03c4cb6da..00000000000
--- a/lib/filestorage.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-
-/**
-* ownCloud
-*
-* @author Frank Karlitschek
-* @copyright 2012 Frank Karlitschek frank@owncloud.org
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
-* License as published by the Free Software Foundation; either
-* version 3 of the License, or any later version.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
-*
-* You should have received a copy of the GNU Affero General Public
-* License along with this library. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/**
- * Provide a common interface to all different storage options
- */
-abstract class OC_Filestorage{
- abstract public function __construct($parameters);
- abstract public function mkdir($path);
- abstract public function rmdir($path);
- abstract public function opendir($path);
- abstract public function is_dir($path);
- abstract public function is_file($path);
- abstract public function stat($path);
- abstract public function filetype($path);
- abstract public function filesize($path);
- abstract public function isCreatable($path);
- abstract public function isReadable($path);
- abstract public function isUpdatable($path);
- abstract public function isDeletable($path);
- abstract public function isSharable($path);
- abstract public function file_exists($path);
- abstract public function filectime($path);
- abstract public function filemtime($path);
- abstract public function file_get_contents($path);
- abstract public function file_put_contents($path, $data);
- abstract public function unlink($path);
- abstract public function rename($path1, $path2);
- abstract public function copy($path1, $path2);
- abstract public function fopen($path, $mode);
- abstract public function getMimeType($path);
- abstract public function hash($type, $path, $raw = false);
- abstract public function free_space($path);
- abstract public function search($query);
- abstract public function touch($path, $mtime=null);
- abstract public function getLocalFile($path);// get a path to a local version of the file, whether the original file is local or remote
- abstract public function getLocalFolder($path);// get a path to a local version of the folder, whether the original file is local or remote
- /**
- * check if a file or folder has been updated since $time
- * @param int $time
- * @return bool
- *
- * hasUpdated for folders should return at least true if a file inside the folder is add, removed or renamed.
- * returning true for other changes in the folder is optional
- */
- abstract public function hasUpdated($path, $time);
- abstract public function getOwner($path);
-}
diff --git a/lib/filestorage/temporary.php b/lib/filestorage/temporary.php
deleted file mode 100644
index 876ba045a63..00000000000
--- a/lib/filestorage/temporary.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * local storage backnd in temporary folder for testing purpores
- */
-class OC_Filestorage_Temporary extends OC_Filestorage_Local{
- public function __construct($arguments) {
- $this->datadir=OC_Helper::tmpFolder();
- }
-
- public function cleanUp() {
- OC_Helper::rmdirr($this->datadir);
- }
-
- public function __destruct() {
- $this->cleanUp();
- }
-}
diff --git a/lib/filesystem.php b/lib/filesystem.php
index f185d777def..57cca902303 100644
--- a/lib/filesystem.php
+++ b/lib/filesystem.php
@@ -1,26 +1,11 @@
<?php
/**
-* ownCloud
-*
-* @author Frank Karlitschek
-* @copyright 2012 Frank Karlitschek frank@owncloud.org
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
-* License as published by the Free Software Foundation; either
-* version 3 of the License, or any later version.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
-*
-* You should have received a copy of the GNU Affero General Public
-* License along with this library. If not, see <http://www.gnu.org/licenses/>.
-*
-*/
-
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
/**
* Class for abstraction of filesystem functions
@@ -31,578 +16,397 @@
* read(path)
* write(path, &run)
* post_write(path)
- * create(path, &run) (when a file is created, both create and write will be emited in that order)
+ * create(path, &run) (when a file is created, both create and write will be emitted in that order)
* post_create(path)
* delete(path, &run)
* post_delete(path)
- * rename(oldpath, newpath, &run)
- * post_rename(oldpath, newpath)
- * copy(oldpath, newpath, &run) (if the newpath doesn't exists yes, copy, create and write will be emited in that order)
- * post_rename(oldpath, newpath)
+ * rename(oldpath,newpath, &run)
+ * post_rename(oldpath,newpath)
+ * copy(oldpath,newpath, &run) (if the newpath doesn't exists yes, copy, create and write will be emitted in that order)
+ * post_rename(oldpath,newpath)
*
- * the &run parameter can be set to false to prevent the operation from occuring
+ * the &run parameter can be set to false to prevent the operation from occurring
*/
-class OC_Filesystem{
- static private $storages=array();
- static private $mounts=array();
- static private $loadedUsers=array();
- public static $loaded=false;
- /**
- * @var OC_Filestorage $defaultInstance
- */
- static private $defaultInstance;
-
-
- /**
- * classname which used for hooks handling
- * used as signalclass in OC_Hooks::emit()
- */
- const CLASSNAME = 'OC_Filesystem';
-
- /**
- * signalname emited before file renaming
- * @param oldpath
- * @param newpath
- */
- const signal_rename = 'rename';
-
- /**
- * signal emited after file renaming
- * @param oldpath
- * @param newpath
- */
- const signal_post_rename = 'post_rename';
-
- /**
- * signal emited before file/dir creation
- * @param path
- * @param run changing this flag to false in hook handler will cancel event
- */
- const signal_create = 'create';
-
- /**
- * signal emited after file/dir creation
- * @param path
- * @param run changing this flag to false in hook handler will cancel event
- */
- const signal_post_create = 'post_create';
-
- /**
- * signal emits before file/dir copy
- * @param oldpath
- * @param newpath
- * @param run changing this flag to false in hook handler will cancel event
- */
- const signal_copy = 'copy';
-
- /**
- * signal emits after file/dir copy
- * @param oldpath
- * @param newpath
- */
- const signal_post_copy = 'post_copy';
-
- /**
- * signal emits before file/dir save
- * @param path
- * @param run changing this flag to false in hook handler will cancel event
- */
- const signal_write = 'write';
-
- /**
- * signal emits after file/dir save
- * @param path
- */
- const signal_post_write = 'post_write';
-
- /**
- * signal emits when reading file/dir
- * @param path
- */
- const signal_read = 'read';
-
- /**
- * signal emits when removing file/dir
- * @param path
- */
- const signal_delete = 'delete';
-
+/**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
+class OC_Filesystem {
/**
- * parameters definitions for signals
+ * get the mountpoint of the storage object for a path
+ ( note: because a storage is not always mounted inside the fakeroot, the returned mountpoint is relative to the absolute root of the filesystem and doesn't take the chroot into account
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ * @param string $path
+ * @return string
*/
- const signal_param_path = 'path';
- const signal_param_oldpath = 'oldpath';
- const signal_param_newpath = 'newpath';
+ static public function getMountPoint($path) {
+ return \OC\Files\Filesystem::getMountPoint($path);
+ }
/**
- * run - changing this flag to false in hook handler will cancel event
+ * resolve a path to a storage and internal path
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ * @param string $path
+ * @return array consisting of the storage and the internal path
*/
- const signal_param_run = 'run';
+ static public function resolvePath($path) {
+ return \OC\Files\Filesystem::resolvePath($path);
+ }
/**
- * get the mountpoint of the storage object for a path
- ( note: because a storage is not always mounted inside the fakeroot, the returned mountpoint is relative to the absolute root of the filesystem and doesn't take the chroot into account
- *
- * @param string path
- * @return string
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
*/
- static public function getMountPoint($path) {
- OC_Hook::emit(self::CLASSNAME, 'get_mountpoint', array('path'=>$path));
- if(!$path) {
- $path='/';
- }
- if($path[0]!=='/') {
- $path='/'.$path;
- }
- $path=str_replace('//', '/', $path);
- $foundMountPoint='';
- $mountPoints=array_keys(OC_Filesystem::$mounts);
- foreach($mountPoints as $mountpoint) {
- if($mountpoint==$path) {
- return $mountpoint;
- }
- if(strpos($path, $mountpoint)===0 and strlen($mountpoint)>strlen($foundMountPoint)) {
- $foundMountPoint=$mountpoint;
- }
- }
- return $foundMountPoint;
- }
-
- /**
- * get the part of the path relative to the mountpoint of the storage it's stored in
- * @param string path
- * @return bool
- */
- static public function getInternalPath($path) {
- $mountPoint=self::getMountPoint($path);
- $internalPath=substr($path, strlen($mountPoint));
- return $internalPath;
- }
-
- static private function mountPointsLoaded($user) {
- return in_array($user, self::$loadedUsers);
- }
-
- /**
- * get the storage object for a path
- * @param string path
- * @return OC_Filestorage
- */
- static public function getStorage($path) {
- $user = ltrim(substr($path, 0, strpos($path, '/', 1)), '/');
- // check mount points if file was shared from a different user
- if ($user != OC_User::getUser() && !self::mountPointsLoaded($user)) {
- OC_Util::loadUserMountPoints($user);
- self::loadSystemMountPoints($user);
- self::$loadedUsers[] = $user;
- }
-
- $mountpoint=self::getMountPoint($path);
- if($mountpoint) {
- if(!isset(OC_Filesystem::$storages[$mountpoint])) {
- $mount=OC_Filesystem::$mounts[$mountpoint];
- OC_Filesystem::$storages[$mountpoint]=OC_Filesystem::createStorage($mount['class'], $mount['arguments']);
- }
- return OC_Filesystem::$storages[$mountpoint];
- }
- }
-
- static private function loadSystemMountPoints($user) {
- if(is_file(OC::$SERVERROOT.'/config/mount.php')) {
- $mountConfig=include OC::$SERVERROOT.'/config/mount.php';
- if(isset($mountConfig['global'])) {
- foreach($mountConfig['global'] as $mountPoint=>$options) {
- self::mount($options['class'], $options['options'], $mountPoint);
- }
- }
-
- if(isset($mountConfig['group'])) {
- foreach($mountConfig['group'] as $group=>$mounts) {
- if(OC_Group::inGroup($user, $group)) {
- foreach($mounts as $mountPoint=>$options) {
- $mountPoint=self::setUserVars($mountPoint, $user);
- foreach($options as &$option) {
- $option=self::setUserVars($option, $user);
- }
- self::mount($options['class'], $options['options'], $mountPoint);
- }
- }
- }
- }
-
- if(isset($mountConfig['user'])) {
- foreach($mountConfig['user'] as $mountUser=>$mounts) {
- if($user==='all' or strtolower($mountUser)===strtolower($user)) {
- foreach($mounts as $mountPoint=>$options) {
- $mountPoint=self::setUserVars($mountPoint, $user);
- foreach($options as &$option) {
- $option=self::setUserVars($option, $user);
- }
- self::mount($options['class'], $options['options'], $mountPoint);
- }
- }
- }
- }
-
- $mtime=filemtime(OC::$SERVERROOT.'/config/mount.php');
- $previousMTime=OC_Appconfig::getValue('files', 'mountconfigmtime', 0);
- if($mtime>$previousMTime) {//mount config has changed, filecache needs to be updated
- OC_FileCache::triggerUpdate();
- OC_Appconfig::setValue('files', 'mountconfigmtime', $mtime);
- }
- }
- }
-
- static public function init($root, $user = '') {
- if(self::$defaultInstance) {
- return false;
- }
- self::$defaultInstance=new OC_FilesystemView($root);
-
- //load custom mount config
- if (!isset($user)) {
- $user = OC_User::getUser();
- }
- self::loadSystemMountPoints($user);
-
- self::$loaded=true;
- }
-
- /**
- * fill in the correct values for $user, and $password placeholders
- * @param string intput
- * @return string
- */
- private static function setUserVars($input, $user) {
- if (isset($user)) {
- return str_replace('$user', $user, $input);
- } else {
- return str_replace('$user', OC_User::getUser(), $input);
- }
+ static public function init($root) {
+ return \OC\Files\Filesystem::init($root);
}
/**
* get the default filesystem view
- * @return OC_FilesystemView
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ * @return \OC\Files\View
*/
static public function getView() {
- return self::$defaultInstance;
+ return \OC\Files\Filesystem::getView();
}
/**
* tear down the filesystem, removing all storage providers
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
*/
static public function tearDown() {
- self::$storages=array();
- }
-
- /**
- * create a new storage of a specific type
- * @param string type
- * @param array arguments
- * @return OC_Filestorage
- */
- static private function createStorage($class, $arguments) {
- if(class_exists($class)) {
- try {
- return new $class($arguments);
- } catch (Exception $exception) {
- OC_Log::write('core', $exception->getMessage(), OC_Log::ERROR);
- return false;
- }
- }else{
- OC_Log::write('core', 'storage backend '.$class.' not found', OC_Log::ERROR);
- return false;
- }
- }
-
- /**
- * change the root to a fake root
- * @param string fakeRoot
- * @return bool
- */
- static public function chroot($fakeRoot) {
- return self::$defaultInstance->chroot($fakeRoot);
+ \OC\Files\Filesystem::tearDown();
}
/**
* @brief get the relative path of the root data directory for the current user
* @return string
*
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
* Returns path like /admin/files
*/
static public function getRoot() {
- return self::$defaultInstance->getRoot();
+ return \OC\Files\Filesystem::getRoot();
}
/**
* clear all mounts and storage backends
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
*/
public static function clearMounts() {
- self::$mounts=array();
- self::$storages=array();
+ \OC\Files\Filesystem::clearMounts();
}
/**
- * mount an OC_Filestorage in our virtual filesystem
- * @param OC_Filestorage storage
- * @param string mountpoint
- */
+ * mount an \OC\Files\Storage\Storage in our virtual filesystem
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ * @param \OC\Files\Storage\Storage $class
+ * @param array $arguments
+ * @param string $mountpoint
+ */
static public function mount($class, $arguments, $mountpoint) {
- if($mountpoint[0]!='/') {
- $mountpoint='/'.$mountpoint;
- }
- if(substr($mountpoint, -1)!=='/') {
- $mountpoint=$mountpoint.'/';
- }
- self::$mounts[$mountpoint]=array('class'=>$class, 'arguments'=>$arguments);
+ \OC\Files\Filesystem::mount($class, $arguments, $mountpoint);
}
/**
- * return the path to a local version of the file
- * we need this because we can't know if a file is stored local or not from outside the filestorage and for some purposes a local file is needed
- * @param string path
- * @return string
- */
+ * return the path to a local version of the file
+ * we need this because we can't know if a file is stored local or not from outside the filestorage and for some purposes a local file is needed
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ * @param string $path
+ * @return string
+ */
static public function getLocalFile($path) {
- return self::$defaultInstance->getLocalFile($path);
+ return \OC\Files\Filesystem::getLocalFile($path);
}
+
/**
- * @param string path
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ * @param string $path
* @return string
*/
static public function getLocalFolder($path) {
- return self::$defaultInstance->getLocalFolder($path);
+ return \OC\Files\Filesystem::getLocalFolder($path);
}
/**
- * return path to file which reflects one visible in browser
- * @param string path
- * @return string
- */
+ * return path to file which reflects one visible in browser
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ * @param string $path
+ * @return string
+ */
static public function getLocalPath($path) {
- $datadir = OC_User::getHome(OC_User::getUser()).'/files';
- $newpath = $path;
- if (strncmp($newpath, $datadir, strlen($datadir)) == 0) {
- $newpath = substr($path, strlen($datadir));
- }
- return $newpath;
+ return \OC\Files\Filesystem::getLocalPath($path);
}
/**
* check if the requested path is valid
- * @param string path
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ * @param string $path
* @return bool
*/
static public function isValidPath($path) {
- $path = self::normalizePath($path);
- if(!$path || $path[0]!=='/') {
- $path='/'.$path;
- }
- if(strstr($path, '/../') || strrchr($path, '/') === '/..' ) {
- return false;
- }
- if(self::isFileBlacklisted($path)) {
- return false;
- }
- return true;
+ return \OC\Files\Filesystem::isValidPath($path);
}
/**
- * checks if a file is blacklsited for storage in the filesystem
+ * checks if a file is blacklisted for storage in the filesystem
* Listens to write and rename hooks
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
* @param array $data from hook
*/
static public function isBlacklisted($data) {
- if (isset($data['path'])) {
- $path = $data['path'];
- } else if (isset($data['newpath'])) {
- $path = $data['newpath'];
- }
- if (isset($path)) {
- $data['run'] = !self::isFileBlacklisted($path);
- }
- }
-
- static public function isFileBlacklisted($path) {
- $blacklist = array('.htaccess');
- $filename = strtolower(basename($path));
- return in_array($filename, $blacklist);
+ \OC\Files\Filesystem::isBlacklisted($data);
}
/**
- * following functions are equivilent to their php buildin equivilents for arguments/return values.
+ * following functions are equivalent to their php builtin equivalents for arguments/return values.
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
*/
static public function mkdir($path) {
- return self::$defaultInstance->mkdir($path);
+ return \OC\Files\Filesystem::mkdir($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function rmdir($path) {
- return self::$defaultInstance->rmdir($path);
+ return \OC\Files\Filesystem::rmdir($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function opendir($path) {
- return self::$defaultInstance->opendir($path);
+ return \OC\Files\Filesystem::opendir($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function readdir($path) {
- return self::$defaultInstance->readdir($path);
+ return \OC\Files\Filesystem::readdir($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function is_dir($path) {
- return self::$defaultInstance->is_dir($path);
+ return \OC\Files\Filesystem::is_dir($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function is_file($path) {
- return self::$defaultInstance->is_file($path);
+ return \OC\Files\Filesystem::is_file($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function stat($path) {
- return self::$defaultInstance->stat($path);
+ return \OC\Files\Filesystem::stat($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function filetype($path) {
- return self::$defaultInstance->filetype($path);
+ return \OC\Files\Filesystem::filetype($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function filesize($path) {
- return self::$defaultInstance->filesize($path);
+ return \OC\Files\Filesystem::filesize($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function readfile($path) {
- return self::$defaultInstance->readfile($path);
+ return \OC\Files\Filesystem::readfile($path);
}
+
/**
- * @deprecated Replaced by isReadable() as part of CRUDS
- */
+ * @deprecated Replaced by isReadable() as part of CRUDS
+ */
static public function is_readable($path) {
- return self::$defaultInstance->is_readable($path);
+ return \OC\Files\Filesystem::isReadable($path);
}
+
/**
- * @deprecated Replaced by isCreatable(), isUpdatable(), isDeletable() as part of CRUDS
- */
- static public function is_writable($path) {
- return self::$defaultInstance->is_writable($path);
- }
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function isCreatable($path) {
- return self::$defaultInstance->isCreatable($path);
+ return \OC\Files\Filesystem::isCreatable($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function isReadable($path) {
- return self::$defaultInstance->isReadable($path);
+ return \OC\Files\Filesystem::isReadable($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function isUpdatable($path) {
- return self::$defaultInstance->isUpdatable($path);
+ return \OC\Files\Filesystem::isUpdatable($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function isDeletable($path) {
- return self::$defaultInstance->isDeletable($path);
+ return \OC\Files\Filesystem::isDeletable($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function isSharable($path) {
- return self::$defaultInstance->isSharable($path);
+ return \OC\Files\Filesystem::isSharable($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function file_exists($path) {
- return self::$defaultInstance->file_exists($path);
- }
- static public function filectime($path) {
- return self::$defaultInstance->filectime($path);
+ return \OC\Files\Filesystem::file_exists($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function filemtime($path) {
- return self::$defaultInstance->filemtime($path);
+ return \OC\Files\Filesystem::filemtime($path);
}
- static public function touch($path, $mtime=null) {
- return self::$defaultInstance->touch($path, $mtime);
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
+ static public function touch($path, $mtime = null) {
+ return \OC\Files\Filesystem::touch($path, $mtime);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function file_get_contents($path) {
- return self::$defaultInstance->file_get_contents($path);
+ return \OC\Files\Filesystem::file_get_contents($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function file_put_contents($path, $data) {
- return self::$defaultInstance->file_put_contents($path, $data);
+ return \OC\Files\Filesystem::file_put_contents($path, $data);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function unlink($path) {
- return self::$defaultInstance->unlink($path);
+ return \OC\Files\Filesystem::unlink($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function rename($path1, $path2) {
- return self::$defaultInstance->rename($path1, $path2);
+ return \OC\Files\Filesystem::rename($path1, $path2);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function copy($path1, $path2) {
- return self::$defaultInstance->copy($path1, $path2);
+ return \OC\Files\Filesystem::copy($path1, $path2);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function fopen($path, $mode) {
- return self::$defaultInstance->fopen($path, $mode);
+ return \OC\Files\Filesystem::fopen($path, $mode);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function toTmpFile($path) {
- return self::$defaultInstance->toTmpFile($path);
+ return \OC\Files\Filesystem::toTmpFile($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function fromTmpFile($tmpFile, $path) {
- return self::$defaultInstance->fromTmpFile($tmpFile, $path);
+ return \OC\Files\Filesystem::fromTmpFile($tmpFile, $path);
}
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function getMimeType($path) {
- return self::$defaultInstance->getMimeType($path);
+ return \OC\Files\Filesystem::getMimeType($path);
}
+
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function hash($type, $path, $raw = false) {
- return self::$defaultInstance->hash($type, $path, $raw);
+ return \OC\Files\Filesystem::hash($type, $path, $raw);
}
- static public function free_space($path='/') {
- return self::$defaultInstance->free_space($path);
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
+ static public function free_space($path = '/') {
+ return \OC\Files\Filesystem::free_space($path);
}
+ /**
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ */
static public function search($query) {
- return OC_FileCache::search($query);
+ return \OC\Files\Filesystem::search($query);
}
/**
* check if a file or folder has been updated since $time
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ * @param string $path
* @param int $time
* @return bool
*/
static public function hasUpdated($path, $time) {
- return self::$defaultInstance->hasUpdated($path, $time);
- }
-
- static public function removeETagHook($params, $root = false) {
- if (isset($params['path'])) {
- $path=$params['path'];
- } else {
- $path=$params['oldpath'];
- }
-
- if ($root) { // reduce path to the required part of it (no 'username/files')
- $fakeRootView = new OC_FilesystemView($root);
- $count = 1;
- $path=str_replace(OC_App::getStorage("files")->getAbsolutePath(), "", $fakeRootView->getAbsolutePath($path), $count);
- }
-
- $path = self::normalizePath($path);
- OC_Connector_Sabre_Node::removeETagPropertyForPath($path);
+ return \OC\Files\Filesystem::hasUpdated($path, $time);
}
/**
* normalize a path
- * @param string path
+ *
+ * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
+ * @param string $path
* @param bool $stripTrailingSlash
* @return string
*/
- public static function normalizePath($path, $stripTrailingSlash=true) {
- if($path=='') {
- return '/';
- }
- //no windows style slashes
- $path=str_replace('\\', '/', $path);
- //add leading slash
- if($path[0]!=='/') {
- $path='/'.$path;
- }
- //remove trainling slash
- if($stripTrailingSlash and strlen($path)>1 and substr($path, -1, 1)==='/') {
- $path=substr($path, 0, -1);
- }
- //remove duplicate slashes
- while(strpos($path, '//')!==false) {
- $path=str_replace('//', '/', $path);
- }
- //normalize unicode if possible
- if(class_exists('Normalizer')) {
- $path=Normalizer::normalize($path);
- }
- return $path;
+ public static function normalizePath($path, $stripTrailingSlash = true) {
+ return \OC\Files\Filesystem::normalizePath($path, $stripTrailingSlash);
}
}
-OC_Hook::connect('OC_Filesystem', 'post_write', 'OC_Filesystem', 'removeETagHook');
-OC_Hook::connect('OC_Filesystem', 'post_delete', 'OC_Filesystem', 'removeETagHook');
-OC_Hook::connect('OC_Filesystem', 'post_rename', 'OC_Filesystem', 'removeETagHook');
-
-OC_Util::setupFS();
-require_once 'filecache.php';
diff --git a/lib/filesystemview.php b/lib/filesystemview.php
index 1fc8e83d68f..d6bca62e06a 100644
--- a/lib/filesystemview.php
+++ b/lib/filesystemview.php
@@ -1,662 +1,9 @@
<?php
/**
- * ownCloud
- *
- * @author Frank Karlitschek
- * @copyright 2012 Frank Karlitschek frank@owncloud.org
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file. */
-
-/**
- * Class to provide access to ownCloud filesystem via a "view", and methods for
- * working with files within that view (e.g. read, write, delete, etc.). Each
- * view is restricted to a set of directories via a virtual root. The default view
- * uses the currently logged in user's data directory as root (parts of
- * OC_Filesystem are merely a wrapper for OC_FilesystemView).
- *
- * Apps that need to access files outside of the user data folders (to modify files
- * belonging to a user other than the one currently logged in, for example) should
- * use this class directly rather than using OC_Filesystem, or making use of PHP's
- * built-in file manipulation functions. This will ensure all hooks and proxies
- * are triggered correctly.
- *
- * Filesystem functions are not called directly; they are passed to the correct
- * OC_Filestorage object
- *
- * @note default root (if $root is empty or '/') is /data/[user]/
- * @note If you don't include a leading slash, you may encounter problems.
- * e.g. use $v = new \OC_FilesystemView( '/' . $params['uid'] ); not
- * $v = new \OC_FilesystemView( $params['uid'] );
- */
-class OC_FilesystemView {
- private $fakeRoot='';
- private $internal_path_cache=array();
- private $storage_cache=array();
-
- public function __construct($root) {
- $this->fakeRoot=$root;
- }
-
- public function getAbsolutePath($path = '/') {
- if(!$path || $path[0]!=='/') {
- $path='/'.$path;
- }
- return $this->fakeRoot.$path;
- }
-
- /**
- * change the root to a fake toor
- * @param string fakeRoot
- * @return bool
- */
- public function chroot($fakeRoot) {
- if(!$fakeRoot=='') {
- if($fakeRoot[0]!=='/') {
- $fakeRoot='/'.$fakeRoot;
- }
- }
- $this->fakeRoot=$fakeRoot;
- }
-
- /**
- * get the fake root
- * @return string
- */
- public function getRoot() {
- return $this->fakeRoot;
- }
-
- /**
- * get the part of the path relative to the mountpoint of the storage it's stored in
- * @param string path
- * @return bool
- */
- public function getInternalPath($path) {
- if (!isset($this->internal_path_cache[$path])) {
- $this->internal_path_cache[$path] = OC_Filesystem::getInternalPath($this->getAbsolutePath($path));
- }
- return $this->internal_path_cache[$path];
- }
-
- /**
- * get path relative to the root of the view
- * @param string path
- * @return string
- */
- public function getRelativePath($path) {
- if($this->fakeRoot=='') {
- return $path;
- }
- if(strpos($path, $this->fakeRoot)!==0) {
- return null;
- }else{
- $path=substr($path, strlen($this->fakeRoot));
- if(strlen($path)===0) {
- return '/';
- }else{
- return $path;
- }
- }
- }
-
- /**
- * get the storage object for a path
- * @param string path
- * @return OC_Filestorage
- */
- public function getStorage($path) {
- if (!isset($this->storage_cache[$path])) {
- $this->storage_cache[$path] = OC_Filesystem::getStorage($this->getAbsolutePath($path));
- }
- return $this->storage_cache[$path];
- }
-
- /**
- * get the mountpoint of the storage object for a path
- ( note: because a storage is not always mounted inside the fakeroot, the returned mountpoint is relative to the absolute root of the filesystem and doesn't take the chroot into account
- *
- * @param string path
- * @return string
- */
- public function getMountPoint($path) {
- return OC_Filesystem::getMountPoint($this->getAbsolutePath($path));
- }
-
- /**
- * return the path to a local version of the file
- * we need this because we can't know if a file is stored local or not from outside the filestorage and for some purposes a local file is needed
- * @param string path
- * @return string
- */
- public function getLocalFile($path) {
- $parent=substr($path, 0, strrpos($path, '/'));
- if(OC_Filesystem::isValidPath($parent) and $storage=$this->getStorage($path)) {
- return $storage->getLocalFile($this->getInternalPath($path));
- }
- }
- /**
- * @param string path
- * @return string
- */
- public function getLocalFolder($path) {
- $parent=substr($path, 0, strrpos($path, '/'));
- if(OC_Filesystem::isValidPath($parent) and $storage=$this->getStorage($path)) {
- return $storage->getLocalFolder($this->getInternalPath($path));
- }
- }
-
- /**
- * the following functions operate with arguments and return values identical
- * to those of their PHP built-in equivalents. Mostly they are merely wrappers
- * for OC_Filestorage via basicOperation().
- */
- public function mkdir($path) {
- return $this->basicOperation('mkdir', $path, array('create', 'write'));
- }
- public function rmdir($path) {
- return $this->basicOperation('rmdir', $path, array('delete'));
- }
- public function opendir($path) {
- return $this->basicOperation('opendir', $path, array('read'));
- }
- public function readdir($handle) {
- $fsLocal= new OC_Filestorage_Local( array( 'datadir' => '/' ) );
- return $fsLocal->readdir( $handle );
- }
- public function is_dir($path) {
- if($path=='/') {
- return true;
- }
- return $this->basicOperation('is_dir', $path);
- }
- public function is_file($path) {
- if($path=='/') {
- return false;
- }
- return $this->basicOperation('is_file', $path);
- }
- public function stat($path) {
- return $this->basicOperation('stat', $path);
- }
- public function filetype($path) {
- return $this->basicOperation('filetype', $path);
- }
- public function filesize($path) {
- return $this->basicOperation('filesize', $path);
- }
- public function readfile($path) {
- OC_Util::obEnd();
- $handle=$this->fopen($path, 'rb');
- if ($handle) {
- $chunkSize = 8192;// 8 MB chunks
- while (!feof($handle)) {
- echo fread($handle, $chunkSize);
- flush();
- }
- $size=$this->filesize($path);
- return $size;
- }
- return false;
- }
- /**
- * @deprecated Replaced by isReadable() as part of CRUDS
- */
- public function is_readable($path) {
- return $this->basicOperation('isReadable', $path);
- }
- /**
- * @deprecated Replaced by isCreatable(), isUpdatable(), isDeletable() as part of CRUDS
- */
- public function is_writable($path) {
- return $this->basicOperation('isUpdatable', $path);
- }
- public function isCreatable($path) {
- return $this->basicOperation('isCreatable', $path);
- }
- public function isReadable($path) {
- return $this->basicOperation('isReadable', $path);
- }
- public function isUpdatable($path) {
- return $this->basicOperation('isUpdatable', $path);
- }
- public function isDeletable($path) {
- return $this->basicOperation('isDeletable', $path);
- }
- public function isSharable($path) {
- return $this->basicOperation('isSharable', $path);
- }
- public function file_exists($path) {
- if($path=='/') {
- return true;
- }
- return $this->basicOperation('file_exists', $path);
- }
- public function filectime($path) {
- return $this->basicOperation('filectime', $path);
- }
- public function filemtime($path) {
- return $this->basicOperation('filemtime', $path);
- }
- public function touch($path, $mtime=null) {
- if(!is_null($mtime) and !is_numeric($mtime)) {
- $mtime = strtotime($mtime);
- }
- return $this->basicOperation('touch', $path, array('write'), $mtime);
- }
- public function file_get_contents($path) {
- return $this->basicOperation('file_get_contents', $path, array('read'));
- }
- public function file_put_contents($path, $data) {
- if(is_resource($data)) {//not having to deal with streams in file_put_contents makes life easier
- $absolutePath = OC_Filesystem::normalizePath($this->getAbsolutePath($path));
- if (OC_FileProxy::runPreProxies('file_put_contents', $absolutePath, $data) && OC_Filesystem::isValidPath($path)) {
- $path = $this->getRelativePath($absolutePath);
- $exists = $this->file_exists($path);
- $run = true;
- if( $this->fakeRoot==OC_Filesystem::getRoot() ) {
- if(!$exists) {
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_create,
- array(
- OC_Filesystem::signal_param_path => $path,
- OC_Filesystem::signal_param_run => &$run
- )
- );
- }
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_write,
- array(
- OC_Filesystem::signal_param_path => $path,
- OC_Filesystem::signal_param_run => &$run
- )
- );
- }
- if(!$run) {
- return false;
- }
- $target=$this->fopen($path, 'w');
- if($target) {
- $count=OC_Helper::streamCopy($data, $target);
- fclose($target);
- fclose($data);
- if( $this->fakeRoot==OC_Filesystem::getRoot() ) {
- if(!$exists) {
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_post_create,
- array( OC_Filesystem::signal_param_path => $path)
- );
- }
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_post_write,
- array( OC_Filesystem::signal_param_path => $path)
- );
- }
- OC_FileProxy::runPostProxies('file_put_contents', $absolutePath, $count);
- return $count > 0;
- }else{
- return false;
- }
- }
- }else{
- return $this->basicOperation('file_put_contents', $path, array('create', 'write'), $data);
- }
- }
- public function unlink($path) {
- return $this->basicOperation('unlink', $path, array('delete'));
- }
- public function deleteAll( $directory, $empty = false ) {
- return $this->basicOperation( 'deleteAll', $directory, array('delete'), $empty );
- }
- public function rename($path1, $path2) {
- $postFix1=(substr($path1, -1, 1)==='/')?'/':'';
- $postFix2=(substr($path2, -1, 1)==='/')?'/':'';
- $absolutePath1 = OC_Filesystem::normalizePath($this->getAbsolutePath($path1));
- $absolutePath2 = OC_Filesystem::normalizePath($this->getAbsolutePath($path2));
- if(OC_FileProxy::runPreProxies('rename', $absolutePath1, $absolutePath2) and OC_Filesystem::isValidPath($path2)) {
- $path1 = $this->getRelativePath($absolutePath1);
- $path2 = $this->getRelativePath($absolutePath2);
-
- if($path1 == null or $path2 == null) {
- return false;
- }
- $run=true;
- if( $this->fakeRoot==OC_Filesystem::getRoot() ) {
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME, OC_Filesystem::signal_rename,
- array(
- OC_Filesystem::signal_param_oldpath => $path1,
- OC_Filesystem::signal_param_newpath => $path2,
- OC_Filesystem::signal_param_run => &$run
- )
- );
- }
- if($run) {
- $mp1 = $this->getMountPoint($path1.$postFix1);
- $mp2 = $this->getMountPoint($path2.$postFix2);
- if($mp1 == $mp2) {
- if($storage = $this->getStorage($path1)) {
- $result = $storage->rename($this->getInternalPath($path1.$postFix1), $this->getInternalPath($path2.$postFix2));
- }
- } else {
- $source = $this->fopen($path1.$postFix1, 'r');
- $target = $this->fopen($path2.$postFix2, 'w');
- $count = OC_Helper::streamCopy($source, $target);
- $storage1 = $this->getStorage($path1);
- $storage1->unlink($this->getInternalPath($path1.$postFix1));
- $result = $count>0;
- }
- if( $this->fakeRoot==OC_Filesystem::getRoot() ) {
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_post_rename,
- array(
- OC_Filesystem::signal_param_oldpath => $path1,
- OC_Filesystem::signal_param_newpath => $path2
- )
- );
- }
- return $result;
- }
- }
- }
- public function copy($path1, $path2) {
- $postFix1=(substr($path1, -1, 1)==='/')?'/':'';
- $postFix2=(substr($path2, -1, 1)==='/')?'/':'';
- $absolutePath1 = OC_Filesystem::normalizePath($this->getAbsolutePath($path1));
- $absolutePath2 = OC_Filesystem::normalizePath($this->getAbsolutePath($path2));
- if(OC_FileProxy::runPreProxies('copy', $absolutePath1, $absolutePath2) and OC_Filesystem::isValidPath($path2)) {
- $path1 = $this->getRelativePath($absolutePath1);
- $path2 = $this->getRelativePath($absolutePath2);
-
- if($path1 == null or $path2 == null) {
- return false;
- }
- $run=true;
- if( $this->fakeRoot==OC_Filesystem::getRoot() ) {
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_copy,
- array(
- OC_Filesystem::signal_param_oldpath => $path1,
- OC_Filesystem::signal_param_newpath=>$path2,
- OC_Filesystem::signal_param_run => &$run
- )
- );
- $exists=$this->file_exists($path2);
- if($run and !$exists) {
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_create,
- array(
- OC_Filesystem::signal_param_path => $path2,
- OC_Filesystem::signal_param_run => &$run
- )
- );
- }
- if($run) {
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_write,
- array(
- OC_Filesystem::signal_param_path => $path2,
- OC_Filesystem::signal_param_run => &$run
- )
- );
- }
- }
- if($run) {
- $mp1=$this->getMountPoint($path1.$postFix1);
- $mp2=$this->getMountPoint($path2.$postFix2);
- if($mp1 == $mp2) {
- if($storage = $this->getStorage($path1.$postFix1)) {
- $result=$storage->copy($this->getInternalPath($path1.$postFix1), $this->getInternalPath($path2.$postFix2));
- }
- } else {
- $source = $this->fopen($path1.$postFix1, 'r');
- $target = $this->fopen($path2.$postFix2, 'w');
- $result = OC_Helper::streamCopy($source, $target);
- }
- if( $this->fakeRoot==OC_Filesystem::getRoot() ) {
- // If the file to be copied originates within
- // the user's data directory
-
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_post_copy,
- array(
- OC_Filesystem::signal_param_oldpath => $path1,
- OC_Filesystem::signal_param_newpath=>$path2
- )
- );
- if(!$exists) {
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_post_create,
- array(OC_Filesystem::signal_param_path => $path2)
- );
- }
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_post_write,
- array( OC_Filesystem::signal_param_path => $path2)
- );
-
- } else {
- // If this is not a normal file copy operation
- // and the file originates somewhere else
- // (e.g. a version rollback operation), do not
- // perform all the other post_write actions
-
- // Update webdav properties
- OC_Filesystem::removeETagHook(array("path" => $path2), $this->fakeRoot);
-
- $splitPath2 = explode( '/', $path2 );
-
- // Only cache information about files
- // that are being copied from within
- // the user files directory. Caching
- // other files, like VCS backup files,
- // serves no purpose
- if ( $splitPath2[1] == 'files' ) {
-
- OC_FileCache_Update::update($path2, $this->fakeRoot);
-
- }
-
- }
-
- return $result;
-
- }
- }
- }
- public function fopen($path, $mode) {
- $hooks=array();
- switch($mode) {
- case 'r':
- case 'rb':
- $hooks[]='read';
- break;
- case 'r+':
- case 'rb+':
- case 'w+':
- case 'wb+':
- case 'x+':
- case 'xb+':
- case 'a+':
- case 'ab+':
- $hooks[]='read';
- $hooks[]='write';
- break;
- case 'w':
- case 'wb':
- case 'x':
- case 'xb':
- case 'a':
- case 'ab':
- $hooks[]='write';
- break;
- default:
- OC_Log::write('core', 'invalid mode ('.$mode.') for '.$path, OC_Log::ERROR);
- }
-
- return $this->basicOperation('fopen', $path, $hooks, $mode);
- }
- public function toTmpFile($path) {
- if(OC_Filesystem::isValidPath($path)) {
- $source = $this->fopen($path, 'r');
- if($source) {
- $extension='';
- $extOffset=strpos($path, '.');
- if($extOffset !== false) {
- $extension=substr($path, strrpos($path, '.'));
- }
- $tmpFile = OC_Helper::tmpFile($extension);
- file_put_contents($tmpFile, $source);
- return $tmpFile;
- }
- }
- }
- public function fromTmpFile($tmpFile, $path) {
- if(OC_Filesystem::isValidPath($path)) {
- if(!$tmpFile) {
- debug_print_backtrace();
- }
- $source=fopen($tmpFile, 'r');
- if($source) {
- $this->file_put_contents($path, $source);
- unlink($tmpFile);
- return true;
- } else {
- }
- } else {
- return false;
- }
- }
-
- public function getMimeType($path) {
- return $this->basicOperation('getMimeType', $path);
- }
- public function hash($type, $path, $raw = false) {
- $postFix=(substr($path, -1, 1)==='/')?'/':'';
- $absolutePath = OC_Filesystem::normalizePath($this->getAbsolutePath($path));
- if (OC_FileProxy::runPreProxies('hash', $absolutePath) && OC_Filesystem::isValidPath($path)) {
- $path = $this->getRelativePath($absolutePath);
- if ($path == null) {
- return false;
- }
- if (OC_Filesystem::$loaded && $this->fakeRoot == OC_Filesystem::getRoot()) {
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_read,
- array( OC_Filesystem::signal_param_path => $path)
- );
- }
- if ($storage = $this->getStorage($path.$postFix)) {
- $result = $storage->hash($type, $this->getInternalPath($path.$postFix), $raw);
- $result = OC_FileProxy::runPostProxies('hash', $absolutePath, $result);
- return $result;
- }
- }
- return null;
- }
-
- public function free_space($path='/') {
- return $this->basicOperation('free_space', $path);
- }
-
- /**
- * @brief abstraction layer for basic filesystem functions: wrapper for OC_Filestorage
- * @param string $operation
- * @param string #path
- * @param array (optional) hooks
- * @param mixed (optional) $extraParam
- * @return mixed
- *
- * This method takes requests for basic filesystem functions (e.g. reading & writing
- * files), processes hooks and proxies, sanitises paths, and finally passes them on to
- * OC_Filestorage for delegation to a storage backend for execution
- */
- private function basicOperation($operation, $path, $hooks=array(), $extraParam=null) {
- $postFix=(substr($path, -1, 1)==='/')?'/':'';
- $absolutePath = OC_Filesystem::normalizePath($this->getAbsolutePath($path));
- if(OC_FileProxy::runPreProxies($operation, $absolutePath, $extraParam) and OC_Filesystem::isValidPath($path)) {
- $path = $this->getRelativePath($absolutePath);
- if($path == null) {
- return false;
- }
- $internalPath = $this->getInternalPath($path.$postFix);
- $run=$this->runHooks($hooks, $path);
- if($run and $storage = $this->getStorage($path.$postFix)) {
- if(!is_null($extraParam)) {
- $result = $storage->$operation($internalPath, $extraParam);
- } else {
- $result = $storage->$operation($internalPath);
- }
- $result = OC_FileProxy::runPostProxies($operation, $this->getAbsolutePath($path), $result);
- if(OC_Filesystem::$loaded and $this->fakeRoot==OC_Filesystem::getRoot()) {
- if($operation!='fopen') {//no post hooks for fopen, the file stream is still open
- $this->runHooks($hooks, $path, true);
- }
- }
- return $result;
- }
- }
- return null;
- }
-
- private function runHooks($hooks, $path, $post=false) {
- $prefix=($post)?'post_':'';
- $run=true;
- if(OC_Filesystem::$loaded and $this->fakeRoot==OC_Filesystem::getRoot()) {
- foreach($hooks as $hook) {
- if($hook!='read') {
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- $prefix.$hook,
- array(
- OC_Filesystem::signal_param_run => &$run,
- OC_Filesystem::signal_param_path => $path
- )
- );
- } elseif(!$post) {
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- $prefix.$hook,
- array(
- OC_Filesystem::signal_param_path => $path
- )
- );
- }
- }
- }
- return $run;
- }
-
- /**
- * check if a file or folder has been updated since $time
- * @param int $time
- * @return bool
- */
- public function hasUpdated($path, $time) {
- return $this->basicOperation('hasUpdated', $path, array(), $time);
- }
-}
+class OC_FilesystemView extends \OC\Files\View {}
diff --git a/lib/group/database.php b/lib/group/database.php
index c5dd402b212..1e2328f4c08 100644
--- a/lib/group/database.php
+++ b/lib/group/database.php
@@ -219,21 +219,14 @@ class OC_Group_Database extends OC_Group_Backend {
*/
public function DisplayNamesInGroup($gid, $search = '', $limit = -1, $offset = 0) {
$displayNames = '';
- /*
-
- SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
- FROM Persons
- INNER JOIN Orders
- ON Persons.P_Id=Orders.P_Id
- ORDER BY Persons.LastName
- */
+
$stmt = OC_DB::prepare('SELECT `*PREFIX*users`.`uid`, `*PREFIX*users`.`displayname` FROM `*PREFIX*users` INNER JOIN `*PREFIX*group_user` ON `*PREFIX*group_user`.`uid` = `*PREFIX*users`.`uid` WHERE `gid` = ? AND `*PREFIX*group_user.uid` LIKE ?', $limit, $offset);
$result = $stmt->execute(array($gid, $search.'%'));
$users = array();
while ($row = $result->fetchRow()) {
$displayName = trim($row['displayname'], ' ');
$displayNames[$row['uid']] = empty($displayName) ? $row['uid'] : $displayName;
- }
+ }
return $displayNames;
}
}
diff --git a/lib/helper.php b/lib/helper.php
index 425dc138c5a..0e549d006a1 100644
--- a/lib/helper.php
+++ b/lib/helper.php
@@ -324,7 +324,7 @@ class OC_Helper {
self::copyr("$src/$file", "$dest/$file");
}
}
- }elseif(file_exists($src) && !OC_Filesystem::isFileBlacklisted($src)) {
+ }elseif(file_exists($src) && !\OC\Files\Filesystem::isFileBlacklisted($src)) {
copy($src, $dest);
}
}
@@ -618,7 +618,7 @@ class OC_Helper {
$newpath = $path . '/' . $filename;
$counter = 2;
- while (OC_Filesystem::file_exists($newpath)) {
+ while (\OC\Files\Filesystem::file_exists($newpath)) {
$newname = $name . ' (' . $counter . ')' . $ext;
$newpath = $path . '/' . $newname;
$counter++;
@@ -757,7 +757,7 @@ class OC_Helper {
$post_max_size = OCP\Util::computerFileSize(ini_get('post_max_size'));
$maxUploadFilesize = min($upload_max_filesize, $post_max_size);
- $freeSpace = OC_Filesystem::free_space($dir);
+ $freeSpace = \OC\Files\Filesystem::free_space($dir);
$freeSpace = max($freeSpace, 0);
return min($maxUploadFilesize, $freeSpace);
@@ -787,12 +787,12 @@ class OC_Helper {
* Calculate the disc space
*/
public static function getStorageInfo() {
- $rootInfo = OC_FileCache::get('');
+ $rootInfo = \OC\Files\Filesystem::getFileInfo('/');
$used = $rootInfo['size'];
if ($used < 0) {
$used = 0;
}
- $free = OC_Filesystem::free_space();
+ $free = \OC\Files\Filesystem::free_space();
$total = $free + $used;
if ($total == 0) {
$total = 1; // prevent division by zero
diff --git a/lib/image.php b/lib/image.php
index cfc6d477395..eaa35350bcb 100644
--- a/lib/image.php
+++ b/lib/image.php
@@ -455,7 +455,7 @@ class OC_Image {
default:
// this is mostly file created from encrypted file
- $this->resource = imagecreatefromstring(\OC_Filesystem::file_get_contents(\OC_Filesystem::getLocalPath($imagepath)));
+ $this->resource = imagecreatefromstring(\OC\Files\Filesystem::file_get_contents(\OC\Files\Filesystem::getLocalPath($imagepath)));
$itype = IMAGETYPE_PNG;
OC_Log::write('core', 'OC_Image->loadFromFile, Default', OC_Log::DEBUG);
break;
diff --git a/lib/installer.php b/lib/installer.php
index 7dc8b0cef8d..c86f801b5fc 100644
--- a/lib/installer.php
+++ b/lib/installer.php
@@ -141,13 +141,17 @@ class OC_Installer{
return false;
}
- //check if an app with the same id is already installed
- if(self::isInstalled( $info['id'] )) {
- OC_Log::write('core', 'App already installed', OC_Log::WARN);
+ // check if shipped tag is set which is only allowed for apps that are shipped with ownCloud
+ if(isset($info['shipped']) and ($info['shipped']=='true')) {
+ OC_Log::write('core', 'App can\'t be installed because it contains the <shipped>true</shippe> tag which is not allowed for non shipped apps', OC_Log::ERROR);
+ OC_Helper::rmdirr($extractDir);
+ return false;
+ }
+
+ // check if the ocs version is the same as the version in info.xml/version
+ if(!isset($info['version']) or ($info['version']<>$data['appdata']['version'])) {
+ OC_Log::write('core', 'App can\'t be installed because the version in info.xml/version is not the same as the version reported from the app store', OC_Log::ERROR);
OC_Helper::rmdirr($extractDir);
- if($data['source']=='http') {
- unlink($path);
- }
return false;
}
@@ -226,7 +230,6 @@ class OC_Installer{
/**
* @brief Update an application
* @param $data array with all information
- * @returns integer
*
* This function installs an app. All information needed are passed in the
* associative array $data.
@@ -250,9 +253,55 @@ class OC_Installer{
*
* upgrade.php can determine the current installed version of the app using "OC_Appconfig::getValue($appid, 'installed_version')"
*/
- public static function upgradeApp( $data = array()) {
- // TODO: write function
- return true;
+ public static function updateApp( $app ) {
+ $ocsid=OC_Appconfig::getValue( $app, 'ocsid');
+ OC_App::disable($app);
+ OC_App::enable($ocsid);
+ return(true);
+ }
+
+ /**
+ * @brief Check if an update for the app is available
+ * @param $name name of the application
+ * @returns empty string is no update available or the version number of the update
+ *
+ * The function will check if an update for a version is available
+ */
+ public static function isUpdateAvailable( $app ) {
+ $ocsid=OC_Appconfig::getValue( $app, 'ocsid', '');
+
+ if($ocsid<>''){
+
+ $ocsdata=OC_OCSClient::getApplication($ocsid);
+ $ocsversion= (string) $ocsdata['version'];
+ $currentversion=OC_App::getAppVersion($app);
+ if($ocsversion<>$currentversion){
+ return($ocsversion);
+
+ }else{
+ return('');
+ }
+
+ }else{
+ return('');
+ }
+
+ }
+
+ /**
+ * @brief Check if app is already downloaded
+ * @param $name name of the application to remove
+ * @returns true/false
+ *
+ * The function will check if the app is already downloaded in the apps repository
+ */
+ public static function isDownloaded( $name ) {
+
+ $downloaded=false;
+ foreach(OC::$APPSROOTS as $dir) {
+ if(is_dir($dir['path'].'/'.$name)) $downloaded=true;
+ }
+ return($downloaded);
}
/**
@@ -276,8 +325,36 @@ class OC_Installer{
* this has to be done by the function oc_app_uninstall().
*/
public static function removeApp( $name, $options = array()) {
- // TODO: write function
- return true;
+
+ if(isset($options['keeppreferences']) and $options['keeppreferences']==false ){
+ // todo
+ // remove preferences
+ }
+
+ if(isset($options['keepappconfig']) and $options['keepappconfig']==false ){
+ // todo
+ // remove app config
+ }
+
+ if(isset($options['keeptables']) and $options['keeptables']==false ){
+ // todo
+ // remove app database tables
+ }
+
+ if(isset($options['keepfiles']) and $options['keepfiles']==false ){
+ // todo
+ // remove user files
+ }
+
+ if(OC_Installer::isDownloaded( $name )) {
+ $appdir=OC_App::getInstallPath().'/'.$name;
+ OC_Helper::rmdirr($appdir);
+
+ }else{
+ OC_Log::write('core', 'can\'t remove app '.$name.'. It is not installed.', OC_Log::ERROR);
+
+ }
+
}
/**
diff --git a/lib/l10n.php b/lib/l10n.php
index ca53b3cf65c..ee879009265 100644
--- a/lib/l10n.php
+++ b/lib/l10n.php
@@ -287,7 +287,7 @@ class OC_L10N{
}
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
- $accepted_languages = preg_split('/,\s*/', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
+ $accepted_languages = preg_split('/,\s*/', strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']));
if(is_array($app)) {
$available = $app;
}
diff --git a/lib/l10n/ko.php b/lib/l10n/ko.php
index c4716f9f8bd..859657f46b4 100644
--- a/lib/l10n/ko.php
+++ b/lib/l10n/ko.php
@@ -9,6 +9,7 @@
"Files need to be downloaded one by one." => "파ì¼ì„ 개별ì ìœ¼ë¡œ 다운로드해야 합니다.",
"Back to Files" => "파ì¼ë¡œ ëŒì•„가기",
"Selected files too large to generate zip file." => "ì„ íƒí•œ 파ì¼ë“¤ì€ ZIP 파ì¼ì„ ìƒì„±í•˜ê¸°ì— 너무 í½ë‹ˆë‹¤.",
+"couldn't be determined" => "ê²°ì •í•  수 ì—†ìŒ",
"Application is not enabled" => "ì•±ì´ í™œì„±í™”ë˜ì§€ 않았습니다",
"Authentication error" => "ì¸ì¦ 오류",
"Token expired. Please reload page." => "토í°ì´ 만료ë˜ì—ˆìŠµë‹ˆë‹¤. 페ì´ì§€ë¥¼ 새로 고치십시오.",
diff --git a/lib/ocs/cloud.php b/lib/ocs/cloud.php
index 2d18b1db3f2..179ed8f3107 100644
--- a/lib/ocs/cloud.php
+++ b/lib/ocs/cloud.php
@@ -45,11 +45,11 @@ class OC_OCS_Cloud {
if(OC_User::userExists($parameters['user'])) {
// calculate the disc space
$userDir = '/'.$parameters['user'].'/files';
- OC_Filesystem::init($userDir);
- $rootInfo = OC_FileCache::get('');
- $sharedInfo = OC_FileCache::get('/Shared');
+ \OC\Files\Filesystem::init($useDir);
+ $rootInfo = \OC\Files\Filesystem::getFileInfo('');
+ $sharedInfo = \OC\Files\Filesystem::getFileInfo('/Shared');
$used = $rootInfo['size'] - $sharedInfo['size'];
- $free = OC_Filesystem::free_space();
+ $free = \OC\Files\Filesystem::free_space();
$total = $free + $used;
if($total===0) $total = 1; // prevent division by zero
$relative = round(($used/$total)*10000)/100;
diff --git a/lib/ocsclient.php b/lib/ocsclient.php
index ca0665da436..30163c1e403 100644
--- a/lib/ocsclient.php
+++ b/lib/ocsclient.php
@@ -123,6 +123,8 @@ class OC_OCSClient{
$app=array();
$app['id']=(string)$tmp[$i]->id;
$app['name']=(string)$tmp[$i]->name;
+ $app['label']=(string)$tmp[$i]->label;
+ $app['version']=(string)$tmp[$i]->version;
$app['type']=(string)$tmp[$i]->typeid;
$app['typename']=(string)$tmp[$i]->typename;
$app['personid']=(string)$tmp[$i]->personid;
@@ -162,7 +164,9 @@ class OC_OCSClient{
$app=array();
$app['id']=$tmp->id;
$app['name']=$tmp->name;
+ $app['version']=$tmp->version;
$app['type']=$tmp->typeid;
+ $app['label']=$tmp->label;
$app['typename']=$tmp->typename;
$app['personid']=$tmp->personid;
$app['detailpage']=$tmp->detailpage;
diff --git a/lib/public/files.php b/lib/public/files.php
index 75e1d2fbbc1..f6b3e0ee38a 100644
--- a/lib/public/files.php
+++ b/lib/public/files.php
@@ -99,7 +99,7 @@ class Files {
/**
* @param string appid
* @param $app app
- * @return OC_FilesystemView
+ * @return \OC\Files\View
*/
public static function getStorage( $app ) {
return \OC_App::getStorage( $app );
diff --git a/lib/public/share.php b/lib/public/share.php
index e1d77e652d5..3c5c2d53782 100644
--- a/lib/public/share.php
+++ b/lib/public/share.php
@@ -37,8 +37,7 @@ class Share {
const SHARE_TYPE_REMOTE = 6;
/** CRUDS permissions (Create, Read, Update, Delete, Share) using a bitmask
- * Construct permissions for share() and setPermissions with Or (|)
- * e.g. Give user read and update permissions: PERMISSION_READ | PERMISSION_UPDATE
+ * Construct permissions for share() and setPermissions with Or (|) e.g. Give user read and update permissions: PERMISSION_READ | PERMISSION_UPDATE
* Check if permission is granted with And (&) e.g. Check if delete is granted: if ($permissions & PERMISSION_DELETE)
* Remove permissions with And (&) and Not (~) e.g. Remove the update permission: $permissions &= ~PERMISSION_UPDATE
* Apps are required to handle permissions on their own, this class only stores and manages the permissions of shares
@@ -67,17 +66,14 @@ class Share {
public static function registerBackend($itemType, $class, $collectionOf = null, $supportedFileExtensions = null) {
if (self::isEnabled()) {
if (!isset(self::$backendTypes[$itemType])) {
- self::$backendTypes[$itemType] = array('class' => $class,
- 'collectionOf' => $collectionOf,
- 'supportedFileExtensions' => $supportedFileExtensions);
+ self::$backendTypes[$itemType] = array('class' => $class, 'collectionOf' => $collectionOf, 'supportedFileExtensions' => $supportedFileExtensions);
if(count(self::$backendTypes) === 1) {
\OC_Util::addScript('core', 'share');
\OC_Util::addStyle('core', 'share');
}
return true;
}
- \OC_Log::write('OCP\Share', 'Sharing backend '.$class.' not registered, '
- .self::$backendTypes[$itemType]['class'].' is already registered for '.$itemType, \OC_Log::WARN);
+ \OC_Log::write('OCP\Share', 'Sharing backend '.$class.' not registered, '.self::$backendTypes[$itemType]['class'].' is already registered for '.$itemType, \OC_Log::WARN);
}
return false;
}
@@ -103,20 +99,8 @@ class Share {
* @param int Number of items to return (optional) Returns all by default
* @return Return depends on format
*/
- public static function getItemsSharedWith($itemType,
- $format = self::FORMAT_NONE,
- $parameters = null,
- $limit = -1,
- $includeCollections = false) {
- return self::getItems($itemType,
- null,
- self::$shareTypeUserAndGroups,
- \OC_User::getUser(),
- null,
- $format,
- $parameters,
- $limit,
- $includeCollections);
+ public static function getItemsSharedWith($itemType, $format = self::FORMAT_NONE, $parameters = null, $limit = -1, $includeCollections = false) {
+ return self::getItems($itemType, null, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, $limit, $includeCollections);
}
/**
@@ -126,20 +110,8 @@ class Share {
* @param int Format (optional) Format type must be defined by the backend
* @return Return depends on format
*/
- public static function getItemSharedWith($itemType,
- $itemTarget,
- $format = self::FORMAT_NONE,
- $parameters = null,
- $includeCollections = false) {
- return self::getItems($itemType,
- $itemTarget,
- self::$shareTypeUserAndGroups,
- \OC_User::getUser(),
- null,
- $format,
- $parameters,
- 1,
- $includeCollections);
+ public static function getItemSharedWith($itemType, $itemTarget, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) {
+ return self::getItems($itemType, $itemTarget, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, 1, $includeCollections);
}
/**
@@ -149,20 +121,8 @@ class Share {
* @param int Format (optional) Format type must be defined by the backend
* @return Return depends on format
*/
- public static function getItemSharedWithBySource($itemType,
- $itemSource,
- $format = self::FORMAT_NONE,
- $parameters = null,
- $includeCollections = false) {
- return self::getItems($itemType,
- $itemSource,
- self::$shareTypeUserAndGroups,
- \OC_User::getUser(),
- null,
- $format,
- $parameters,
- 1,
- $includeCollections, true);
+ public static function getItemSharedWithBySource($itemType, $itemSource, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) {
+ return self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, 1, $includeCollections, true);
}
/**
@@ -173,14 +133,7 @@ class Share {
* @return Item
*/
public static function getItemSharedWithByLink($itemType, $itemSource, $uidOwner) {
- return self::getItems($itemType,
- $itemSource,
- self::SHARE_TYPE_LINK,
- null,
- $uidOwner,
- self::FORMAT_NONE,
- null,
- 1);
+ return self::getItems($itemType, $itemSource, self::SHARE_TYPE_LINK, null, $uidOwner, self::FORMAT_NONE, null, 1);
}
/**
@@ -189,7 +142,7 @@ class Share {
* @return Item
*/
public static function getShareByToken($token) {
- $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*share` WHERE `token` = ?', 1);
+ $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*share` WHERE `token` = ?',1);
$result = $query->execute(array($token));
if (\OC_DB::isError($result)) {
\OC_Log::write('OCP\Share', \OC_DB::getErrorMessage($result) . ', token=' . $token, \OC_Log::ERROR);
@@ -204,20 +157,8 @@ class Share {
* @param int Number of items to return (optional) Returns all by default
* @return Return depends on format
*/
- public static function getItemsShared($itemType,
- $format = self::FORMAT_NONE,
- $parameters = null,
- $limit = -1,
- $includeCollections = false) {
- return self::getItems($itemType,
- null,
- null,
- null,
- \OC_User::getUser(),
- $format,
- $parameters,
- $limit,
- $includeCollections);
+ public static function getItemsShared($itemType, $format = self::FORMAT_NONE, $parameters = null, $limit = -1, $includeCollections = false) {
+ return self::getItems($itemType, null, null, null, \OC_User::getUser(), $format, $parameters, $limit, $includeCollections);
}
/**
@@ -227,20 +168,8 @@ class Share {
* @param int Format (optional) Format type must be defined by the backend
* @return Return depends on format
*/
- public static function getItemShared($itemType,
- $itemSource,
- $format = self::FORMAT_NONE,
- $parameters = null,
- $includeCollections = false) {
- return self::getItems($itemType,
- $itemSource,
- null,
- null,
- \OC_User::getUser(),
- $format,
- $parameters,
- -1,
- $includeCollections);
+ public static function getItemShared($itemType, $itemSource, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) {
+ return self::getItems($itemType, $itemSource, null, null, \OC_User::getUser(), $format, $parameters, -1, $includeCollections);
}
/**
@@ -270,26 +199,14 @@ class Share {
if ($sharingPolicy == 'groups_only') {
$inGroup = array_intersect(\OC_Group::getUserGroups($uidOwner), \OC_Group::getUserGroups($shareWith));
if (empty($inGroup)) {
- $message = 'Sharing '.$itemSource.' failed, because the user '.$shareWith.' is not a member'
- .' of any groups that '.$uidOwner.' is a member of';
+ $message = 'Sharing '.$itemSource.' failed, because the user '.$shareWith.' is not a member of any groups that '.$uidOwner.' is a member of';
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
throw new \Exception($message);
}
}
// Check if the item source is already shared with the user, either from the same owner or a different user
- $checkExists = self::getItems($itemType,
- $itemSource,
- self::$shareTypeUserAndGroups,
- $shareWith,
- null,
- self::FORMAT_NONE,
- null,
- 1,
- true,
- true);
- if ($checkExists) {
- // Only allow the same share to occur again if it is the same owner and is not a user share,
- // this use case is for increasing permissions for a specific user
+ if ($checkExists = self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups, $shareWith, null, self::FORMAT_NONE, null, 1, true, true)) {
+ // Only allow the same share to occur again if it is the same owner and is not a user share, this use case is for increasing permissions for a specific user
if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) {
$message = 'Sharing '.$itemSource.' failed, because this item is already shared with '.$shareWith;
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
@@ -303,26 +220,14 @@ class Share {
throw new \Exception($message);
}
if ($sharingPolicy == 'groups_only' && !\OC_Group::inGroup($uidOwner, $shareWith)) {
- $message = 'Sharing '.$itemSource.' failed, because '.$uidOwner
- .' is not a member of the group '.$shareWith;
+ $message = 'Sharing '.$itemSource.' failed, because '.$uidOwner.' is not a member of the group '.$shareWith;
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
throw new \Exception($message);
}
// Check if the item source is already shared with the group, either from the same owner or a different user
// The check for each user in the group is done inside the put() function
- $checkExists = self::getItems($itemType,
- $itemSource,
- self::SHARE_TYPE_GROUP,
- $shareWith,
- null,
- self::FORMAT_NONE,
- null,
- 1,
- true,
- true);
- if ($checkExists) {
- // Only allow the same share to occur again if it is the same owner and is not a group share,
- // this use case is for increasing permissions for a specific user
+ if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_GROUP, $shareWith, null, self::FORMAT_NONE, null, 1, true, true)) {
+ // Only allow the same share to occur again if it is the same owner and is not a group share, this use case is for increasing permissions for a specific user
if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) {
$message = 'Sharing '.$itemSource.' failed, because this item is already shared with '.$shareWith;
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
@@ -337,15 +242,7 @@ class Share {
} else if ($shareType === self::SHARE_TYPE_LINK) {
if (\OC_Appconfig::getValue('core', 'shareapi_allow_links', 'yes') == 'yes') {
// when updating a link share
- $checkExists = self::getItems($itemType,
- $itemSource,
- self::SHARE_TYPE_LINK,
- null,
- $uidOwner,
- self::FORMAT_NONE,
- null,
- 1);
- if ($checkExists) {
+ if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_LINK, null, $uidOwner, self::FORMAT_NONE, null, 1)) {
// remember old token
$oldToken = $checkExists['token'];
//delete the old share
@@ -365,14 +262,7 @@ class Share {
} else {
$token = \OC_Util::generate_random_bytes(self::TOKEN_LENGTH);
}
- $result = self::put($itemType,
- $itemSource,
- $shareType,
- $shareWith,
- $uidOwner,
- $permissions,
- null,
- $token);
+ $result = self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions, null, $token);
if ($result) {
return $token;
} else {
@@ -410,41 +300,36 @@ class Share {
throw new \Exception($message);
}
// If the item is a folder, scan through the folder looking for equivalent item types
- if ($itemType == 'folder') {
- $parentFolder = self::put('folder', $itemSource, $shareType, $shareWith, $uidOwner, $permissions, true);
- if ($parentFolder && $files = \OC_Files::getDirectoryContent($itemSource)) {
- for ($i = 0; $i < count($files); $i++) {
- $name = substr($files[$i]['name'], strpos($files[$i]['name'], $itemSource) - strlen($itemSource));
- if ($files[$i]['mimetype'] == 'httpd/unix-directory'
- && $children = \OC_Files::getDirectoryContent($name, '/')
- ) {
- // Continue scanning into child folders
- array_push($files, $children);
- } else {
- // Check file extension for an equivalent item type to convert to
- $extension = strtolower(substr($itemSource, strrpos($itemSource, '.') + 1));
- foreach (self::$backends as $type => $backend) {
- if (isset($backend->dependsOn)
- && $backend->dependsOn == 'file'
- && isset($backend->supportedFileExtensions)
- && in_array($extension, $backend->supportedFileExtensions)
- ) {
- $itemType = $type;
- break;
- }
- }
- // Pass on to put() to check if this item should be converted,
- // the item won't be inserted into the database unless it can be converted
- self::put($itemType, $name, $shareType, $shareWith, $uidOwner, $permissions, $parentFolder);
- }
- }
- return true;
- }
- return false;
- } else {
+// if ($itemType == 'folder') {
+// $parentFolder = self::put('folder', $itemSource, $shareType, $shareWith, $uidOwner, $permissions, true);
+// if ($parentFolder && $files = \OC\Files\Filesystem::getDirectoryContent($itemSource)) {
+// for ($i = 0; $i < count($files); $i++) {
+// $name = substr($files[$i]['name'], strpos($files[$i]['name'], $itemSource) - strlen($itemSource));
+// if ($files[$i]['mimetype'] == 'httpd/unix-directory'
+// && $children = \OC\Files\Filesystem::getDirectoryContent($name, '/')
+// ) {
+// // Continue scanning into child folders
+// array_push($files, $children);
+// } else {
+// // Check file extension for an equivalent item type to convert to
+// $extension = strtolower(substr($itemSource, strrpos($itemSource, '.') + 1));
+// foreach (self::$backends as $type => $backend) {
+// if (isset($backend->dependsOn) && $backend->dependsOn == 'file' && isset($backend->supportedFileExtensions) && in_array($extension, $backend->supportedFileExtensions)) {
+// $itemType = $type;
+// break;
+// }
+// }
+// // Pass on to put() to check if this item should be converted, the item won't be inserted into the database unless it can be converted
+// self::put($itemType, $name, $shareType, $shareWith, $uidOwner, $permissions, $parentFolder);
+// }
+// }
+// return true;
+// }
+// return false;
+// } else {
// Put the item into the database
return self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions);
- }
+// }
}
/**
@@ -456,15 +341,7 @@ class Share {
* @return Returns true on success or false on failure
*/
public static function unshare($itemType, $itemSource, $shareType, $shareWith) {
- $item = self::getItems($itemType,
- $itemSource,
- $shareType,
- $shareWith,
- \OC_User::getUser(),
- self::FORMAT_NONE,
- null,
- 1);
- if ($item) {
+ if ($item = self::getItems($itemType, $itemSource, $shareType, $shareWith, \OC_User::getUser(), self::FORMAT_NONE, null, 1)) {
self::delete($item['id']);
return true;
}
@@ -478,8 +355,7 @@ class Share {
* @return Returns true on success or false on failure
*/
public static function unshareAll($itemType, $itemSource) {
- $shares = self::getItemShared($itemType, $itemSource);
- if ($shares) {
+ if ($shares = self::getItemShared($itemType, $itemSource)) {
foreach ($shares as $share) {
self::delete($share['id']);
}
@@ -498,27 +374,11 @@ class Share {
*
*/
public static function unshareFromSelf($itemType, $itemTarget) {
- $item = self::getItemSharedWith($itemType, $itemTarget);
- if ($item) {
+ if ($item = self::getItemSharedWith($itemType, $itemTarget)) {
if ((int)$item['share_type'] === self::SHARE_TYPE_GROUP) {
- // Insert an extra row for the group share and set permission to 0
- // to prevent it from showing up for the user
- $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` ('
- .'`item_type`, `item_source`, `item_target`, `parent`, `share_type`, `share_with`, '
- .'`uid_owner`, `permissions`, `stime`, `file_source`, `file_target`'
- .') VALUES (?,?,?,?,?,?,?,?,?,?,?)');
- $query->execute(array(
- $item['item_type'],
- $item['item_source'],
- $item['item_target'],
- $item['id'],
- self::$shareTypeGroupUserUnique,
- \OC_User::getUser(),
- $item['uid_owner'],
- 0,
- $item['stime'],
- $item['file_source'],
- $item['file_target']));
+ // Insert an extra row for the group share and set permission to 0 to prevent it from showing up for the user
+ $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`, `parent`, `share_type`, `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`, `file_target`) VALUES (?,?,?,?,?,?,?,?,?,?,?)');
+ $query->execute(array($item['item_type'], $item['item_source'], $item['item_target'], $item['id'], self::$shareTypeGroupUserUnique, \OC_User::getUser(), $item['uid_owner'], 0, $item['stime'], $item['file_source'], $item['file_target']));
\OC_DB::insertid('*PREFIX*share');
// Delete all reshares by this user of the group share
self::delete($item['id'], true, \OC_User::getUser());
@@ -545,24 +405,13 @@ class Share {
* @return Returns true on success or false on failure
*/
public static function setPermissions($itemType, $itemSource, $shareType, $shareWith, $permissions) {
- $item = self::getItems($itemType,
- $itemSource,
- $shareType,
- $shareWith,
- \OC_User::getUser(),
- self::FORMAT_NONE,
- null,
- 1,
- false);
- if ($item) {
- // Check if this item is a reshare and
- // verify that the permissions granted don't exceed the parent shared item
+ if ($item = self::getItems($itemType, $itemSource, $shareType, $shareWith, \OC_User::getUser(), self::FORMAT_NONE, null, 1, false)) {
+ // Check if this item is a reshare and verify that the permissions granted don't exceed the parent shared item
if (isset($item['parent'])) {
$query = \OC_DB::prepare('SELECT `permissions` FROM `*PREFIX*share` WHERE `id` = ?', 1);
$result = $query->execute(array($item['parent']))->fetchRow();
if (~(int)$result['permissions'] & $permissions) {
- $message = 'Setting permissions for '.$itemSource.' failed, '
- .'because the permissions exceed permissions granted to '.\OC_User::getUser();
+ $message = 'Setting permissions for '.$itemSource.' failed, because the permissions exceed permissions granted to '.\OC_User::getUser();
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
throw new \Exception($message);
}
@@ -579,12 +428,9 @@ class Share {
$parents = array($item['id']);
while (!empty($parents)) {
$parents = "'".implode("','", $parents)."'";
- $query = \OC_DB::prepare('SELECT `id`, `permissions`'
- .' FROM `*PREFIX*share`'
- .' WHERE `parent` IN ('.$parents.')');
+ $query = \OC_DB::prepare('SELECT `id`, `permissions` FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.')');
$result = $query->execute();
- // Reset parents array,
- // only go through loop again if items are found that need permissions removed
+ // Reset parents array, only go through loop again if items are found that need permissions removed
$parents = array();
while ($item = $result->fetchRow()) {
// Check if permissions need to be removed
@@ -598,9 +444,7 @@ class Share {
// Remove the permissions for all reshares of this item
if (!empty($ids)) {
$ids = "'".implode("','", $ids)."'";
- $query = \OC_DB::prepare('UPDATE `*PREFIX*share`'
- .' SET `permissions` = `permissions` & ?'
- .' WHERE `id` IN ('.$ids.')');
+ $query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `permissions` = `permissions` & ? WHERE `id` IN ('.$ids.')');
$query->execute(array($permissions));
}
}
@@ -613,16 +457,7 @@ class Share {
}
public static function setExpirationDate($itemType, $itemSource, $date) {
- $items = self::getItems($itemType,
- $itemSource,
- null,
- null,
- \OC_User::getUser(),
- self::FORMAT_NONE,
- null,
- -1,
- false);
- if ($items) {
+ if ($items = self::getItems($itemType, $itemSource, null, null, \OC_User::getUser(), self::FORMAT_NONE, null, -1, false)) {
if (!empty($items)) {
if ($date == '') {
$date = null;
@@ -684,8 +519,7 @@ class Share {
if (!self::getBackend($itemType) instanceof Share_Backend_Collection) {
unset($collectionTypes[0]);
}
- // Return array if collections were found or the item type is a collection itself
- // - collections can be inside collections
+ // Return array if collections were found or the item type is a collection itself - collections can be inside collections
if (count($collectionTypes) > 0) {
return $collectionTypes;
}
@@ -696,8 +530,7 @@ class Share {
* @brief Get shared items from the database
* @param string Item type
* @param string Item source or target (optional)
- * @param int SHARE_TYPE_USER, SHARE_TYPE_GROUP, SHARE_TYPE_LINK,
- * $shareTypeUserAndGroups, or $shareTypeGroupUserUnique
+ * @param int SHARE_TYPE_USER, SHARE_TYPE_GROUP, SHARE_TYPE_LINK, $shareTypeUserAndGroups, or $shareTypeGroupUserUnique
* @param string User or group the item is being shared with
* @param string User that is the owner of shared items (optional)
* @param int Format to convert items to with formatItems()
@@ -709,16 +542,7 @@ class Share {
* See public functions getItem(s)... for parameter usage
*
*/
- private static function getItems($itemType,
- $item = null,
- $shareType = null,
- $shareWith = null,
- $uidOwner = null,
- $format = self::FORMAT_NONE,
- $parameters = null,
- $limit = -1,
- $includeCollections = false,
- $itemShareWithBySource = false) {
+ private static function getItems($itemType, $item = null, $shareType = null, $shareWith = null, $uidOwner = null, $format = self::FORMAT_NONE, $parameters = null, $limit = -1, $includeCollections = false, $itemShareWithBySource = false) {
if (!self::isEnabled()) {
if ($limit == 1 || (isset($uidOwner) && isset($item))) {
return false;
@@ -727,11 +551,10 @@ class Share {
}
}
$backend = self::getBackend($itemType);
- // Get filesystem root to add it to the file target and remove from the file source,
- // match file_source with the file cache
+ // Get filesystem root to add it to the file target and remove from the file source, match file_source with the file cache
if ($itemType == 'file' || $itemType == 'folder') {
- $root = \OC_Filesystem::getRoot();
- $where = 'INNER JOIN `*PREFIX*fscache` ON `file_source` = `*PREFIX*fscache`.`id`';
+ $root = \OC\Files\Filesystem::getRoot();
+ $where = 'INNER JOIN `*PREFIX*filecache` ON `file_source` = `*PREFIX*filecache`.`fileid`';
if (!isset($item)) {
$where .= ' WHERE `file_target` IS NOT NULL';
}
@@ -817,7 +640,7 @@ class Share {
} else {
if ($itemType == 'file' || $itemType == 'folder') {
$where .= ' `file_target` = ?';
- $item = \OC_Filesystem::normalizePath($item);
+ $item = \OC\Files\Filesystem::normalizePath($item);
} else {
$where .= ' `item_target` = ?';
}
@@ -831,8 +654,7 @@ class Share {
}
if ($limit != -1 && !$includeCollections) {
if ($shareType == self::$shareTypeUserAndGroups) {
- // Make sure the unique user target is returned if it exists,
- // unique targets should follow the group share in the database
+ // Make sure the unique user target is returned if it exists, unique targets should follow the group share in the database
// If the limit is not 1, the filtering can be done later
$where .= ' ORDER BY `*PREFIX*share`.`id` DESC';
}
@@ -848,34 +670,29 @@ class Share {
// TODO Optimize selects
if ($format == self::FORMAT_STATUSES) {
if ($itemType == 'file' || $itemType == 'folder') {
- $select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`, '
- .'`share_type`, `file_source`, `path`, `expiration`';
+ $select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`, `share_type`, `file_source`, `path`, `expiration`';
} else {
$select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `expiration`';
}
} else {
if (isset($uidOwner)) {
if ($itemType == 'file' || $itemType == 'folder') {
- $select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`, `share_type`, '
- .'`share_with`, `file_source`, `path`, `permissions`, `stime`, `expiration`, `token`';
+ $select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`, `share_type`, `share_with`, `file_source`, `path`, `permissions`, `stime`, `expiration`, `token`';
} else {
- $select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `share_with`, '
- .'`permissions`, `stime`, `file_source`, `expiration`, `token`';
+ $select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `share_with`, `permissions`, `stime`, `file_source`, `expiration`, `token`';
}
} else {
if ($fileDependent) {
if (($itemType == 'file' || $itemType == 'folder')
- && $format == \OC_Share_Backend_File::FORMAT_FILE_APP
+ && $format == \OC_Share_Backend_File::FORMAT_GET_FOLDER_CONTENTS
|| $format == \OC_Share_Backend_File::FORMAT_FILE_APP_ROOT
) {
$select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`, `uid_owner`, '
- .'`share_type`, `share_with`, `file_source`, `path`, `file_target`, `permissions`, '
- .'`expiration`, `name`, `ctime`, `mtime`, `mimetype`, `size`, `encrypted`, '
- .'`versioned`, `writable`';
+ .'`share_type`, `share_with`, `file_source`, `path`, `file_target`, '
+ .'`permissions`, `expiration`, `storage`, `*PREFIX*filecache`.`parent` as `file_parent`, '
+ .'`name` `mtime`, `mimetype`, `mimepart`, `size`, `encrypted`, `etag`';
} else {
- $select = '`*PREFIX*share`.`id`, `item_type`, `item_source`, `item_target`, '
- .'`*PREFIX*share`.`parent`, `share_type`, `share_with`, `uid_owner`, `file_source`, '
- .'`path`, `file_target`, `permissions`, `stime`, `expiration`, `token`';
+ $select = '`*PREFIX*share`.`id`, `item_type`, `item_source`, `item_target`, `*PREFIX*share`.`parent`, `share_type`, `share_with`, `uid_owner`, `file_source`, `path`, `file_target`, `permissions`, `stime`, `expiration`, `token`';
}
} else {
$select = '*';
@@ -886,9 +703,7 @@ class Share {
$query = \OC_DB::prepare('SELECT '.$select.' FROM `*PREFIX*share` '.$where, $queryLimit);
$result = $query->execute($queryArgs);
if (\OC_DB::isError($result)) {
- \OC_Log::write('OCP\Share', \OC_DB::getErrorMessage($result)
- . ', select=' . $select
- . ' where=' . $where, \OC_Log::ERROR);
+ \OC_Log::write('OCP\Share', \OC_DB::getErrorMessage($result) . ', select=' . $select . ' where=' . $where, \OC_Log::ERROR);
}
$items = array();
$targets = array();
@@ -905,8 +720,7 @@ class Share {
} else if (!isset($uidOwner)) {
// Check if the same target already exists
if (isset($targets[$row[$column]])) {
- // Check if the same owner shared with the user twice through a group and user share
- // - this is allowed
+ // Check if the same owner shared with the user twice through a group and user share - this is allowed
$id = $targets[$row[$column]];
if ($items[$id]['uid_owner'] == $row['uid_owner']) {
// Switch to group share type to ensure resharing conditions aren't bypassed
@@ -914,11 +728,8 @@ class Share {
$items[$id]['share_type'] = self::SHARE_TYPE_GROUP;
$items[$id]['share_with'] = $row['share_with'];
}
- // Switch ids if sharing permission is granted on only one share
- // to ensure correct parent is used if resharing
- if (~(int)$items[$id]['permissions'] & PERMISSION_SHARE
- && (int)$row['permissions'] & PERMISSION_SHARE
- ) {
+ // Switch ids if sharing permission is granted on only one share to ensure correct parent is used if resharing
+ if (~(int)$items[$id]['permissions'] & PERMISSION_SHARE && (int)$row['permissions'] & PERMISSION_SHARE) {
$items[$row['id']] = $items[$id];
unset($items[$id]);
$id = $row['id'];
@@ -936,7 +747,8 @@ class Share {
if (isset($row['parent'])) {
$row['path'] = '/Shared/'.basename($row['path']);
} else {
- $row['path'] = substr($row['path'], $root);
+ // Strip 'files' from path
+ $row['path'] = substr($row['path'], 5);
}
}
if (isset($row['expiration'])) {
@@ -961,7 +773,7 @@ class Share {
$collectionItems = array();
foreach ($items as &$row) {
// Return only the item instead of a 2-dimensional array
- if ($limit == 1 && $row['item_type'] == $itemType && $row[$column] == $item) {
+ if ($limit == 1 && $row[$column] == $item && ($row['item_type'] == $itemType || $itemType == 'file')) {
if ($format == self::FORMAT_NONE) {
return $row;
} else {
@@ -970,9 +782,7 @@ class Share {
}
// Check if this is a collection of the requested item type
if ($includeCollections && $collectionTypes && in_array($row['item_type'], $collectionTypes)) {
- if (($collectionBackend = self::getBackend($row['item_type']))
- && $collectionBackend instanceof Share_Backend_Collection
- ) {
+ if (($collectionBackend = self::getBackend($row['item_type'])) && $collectionBackend instanceof Share_Backend_Collection) {
// Collections can be inside collections, check if the item is a collection
if (isset($item) && $row['item_type'] == $itemType && $row[$column] == $item) {
$collectionItems[] = $row;
@@ -996,9 +806,10 @@ class Share {
if ($row['item_type'] == 'file' || $row['item_type'] == 'folder') {
$childItem['file_source'] = $child['source'];
} else {
- $childItem['file_source'] = \OC_FileCache::getId($child['file_path']);
+ $meta = \OC\Files\Filesystem::getFileInfo($child['file_path']);
+ $childItem['file_source'] = $meta['fileid'];
}
- $childItem['file_target'] = \OC_Filesystem::normalizePath($child['file_path']);
+ $childItem['file_target'] = \OC\Files\Filesystem::normalizePath($child['file_path']);
}
if (isset($item)) {
if ($childItem[$column] == $item) {
@@ -1029,6 +840,9 @@ class Share {
if (!empty($collectionItems)) {
$items = array_merge($items, $collectionItems);
}
+ if (empty($items) && $limit == 1) {
+ return false;
+ }
if ($format == self::FORMAT_NONE) {
return $items;
} else if ($format == self::FORMAT_STATUSES) {
@@ -1064,18 +878,10 @@ class Share {
* @param bool|array Parent folder target (optional)
* @return bool Returns true on success or false on failure
*/
- private static function put($itemType,
- $itemSource,
- $shareType,
- $shareWith,
- $uidOwner,
- $permissions,
- $parentFolder = null,
- $token = null) {
+ private static function put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions, $parentFolder = null, $token = null) {
$backend = self::getBackend($itemType);
// Check if this is a reshare
- $checkReshare = self::getItemSharedWithBySource($itemType, $itemSource, self::FORMAT_NONE, null, true);
- if ($checkReshare) {
+ if ($checkReshare = self::getItemSharedWithBySource($itemType, $itemSource, self::FORMAT_NONE, null, true)) {
// Check if attempting to share back to owner
if ($checkReshare['uid_owner'] == $shareWith && $shareType == self::SHARE_TYPE_USER) {
$message = 'Sharing '.$itemSource.' failed, because the user '.$shareWith.' is the original sharer';
@@ -1085,8 +891,7 @@ class Share {
// Check if share permissions is granted
if ((int)$checkReshare['permissions'] & PERMISSION_SHARE) {
if (~(int)$checkReshare['permissions'] & $permissions) {
- $message = 'Sharing '.$itemSource.' failed, '
- .'because the permissions exceed permissions granted to '.$uidOwner;
+ $message = 'Sharing '.$itemSource.' failed, because the permissions exceed permissions granted to '.$uidOwner;
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
throw new \Exception($message);
} else {
@@ -1108,8 +913,7 @@ class Share {
$suggestedItemTarget = null;
$suggestedFileTarget = null;
if (!$backend->isValidSource($itemSource, $uidOwner)) {
- $message = 'Sharing '.$itemSource.' failed, '
- .'because the sharing backend for '.$itemType.' could not find its source';
+ $message = 'Sharing '.$itemSource.' failed, because the sharing backend for '.$itemType.' could not find its source';
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
throw new \Exception($message);
}
@@ -1119,7 +923,8 @@ class Share {
if ($itemType == 'file' || $itemType == 'folder') {
$fileSource = $itemSource;
} else {
- $fileSource = \OC_FileCache::getId($filePath);
+ $meta = \OC\Files\Filesystem::getFileInfo($filePath);
+ $fileSource = $meta['fileid'];
}
if ($fileSource == -1) {
$message = 'Sharing '.$itemSource.' failed, because the file could not be found in the file cache';
@@ -1131,27 +936,14 @@ class Share {
$fileSource = null;
}
}
- $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`, `parent`,'
- .' `share_type`, `share_with`, `uid_owner`, `permissions`,'
- .' `stime`, `file_source`, `file_target`, `token`'
- .') VALUES (?,?,?,?,?,?,?,?,?,?,?,?)');
+ $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`, `parent`, `share_type`, `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`, `file_target`, `token`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)');
// Share with a group
if ($shareType == self::SHARE_TYPE_GROUP) {
- $groupItemTarget = self::generateTarget($itemType,
- $itemSource,
- $shareType,
- $shareWith['group'],
- $uidOwner,
- $suggestedItemTarget);
+ $groupItemTarget = self::generateTarget($itemType, $itemSource, $shareType, $shareWith['group'], $uidOwner, $suggestedItemTarget);
if (isset($fileSource)) {
if ($parentFolder) {
if ($parentFolder === true) {
- $groupFileTarget = self::generateTarget('file',
- $filePath,
- $shareType,
- $shareWith['group'],
- $uidOwner,
- $suggestedFileTarget);
+ $groupFileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith['group'], $uidOwner, $suggestedFileTarget);
// Set group default file target for future use
$parentFolders[0]['folder'] = $groupFileTarget;
} else {
@@ -1160,50 +952,21 @@ class Share {
$parent = $parentFolder[0]['id'];
}
} else {
- $groupFileTarget = self::generateTarget('file',
- $filePath,
- $shareType,
- $shareWith['group'],
- $uidOwner,
- $suggestedFileTarget);
+ $groupFileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith['group'], $uidOwner, $suggestedFileTarget);
}
} else {
$groupFileTarget = null;
}
- $query->execute(array(
- $itemType,
- $itemSource,
- $groupItemTarget,
- $parent,
- $shareType,
- $shareWith['group'],
- $uidOwner,
- $permissions,
- time(),
- $fileSource,
- $groupFileTarget,
- $token));
+ $query->execute(array($itemType, $itemSource, $groupItemTarget, $parent, $shareType, $shareWith['group'], $uidOwner, $permissions, time(), $fileSource, $groupFileTarget, $token));
// Save this id, any extra rows for this group share will need to reference it
$parent = \OC_DB::insertid('*PREFIX*share');
// Loop through all users of this group in case we need to add an extra row
foreach ($shareWith['users'] as $uid) {
- $itemTarget = self::generateTarget($itemType,
- $itemSource,
- self::SHARE_TYPE_USER,
- $uid,
- $uidOwner,
- $suggestedItemTarget,
- $parent);
+ $itemTarget = self::generateTarget($itemType, $itemSource, self::SHARE_TYPE_USER, $uid, $uidOwner, $suggestedItemTarget, $parent);
if (isset($fileSource)) {
if ($parentFolder) {
if ($parentFolder === true) {
- $fileTarget = self::generateTarget('file',
- $filePath,
- self::SHARE_TYPE_USER,
- $uid,
- $uidOwner,
- $suggestedFileTarget,
- $parent);
+ $fileTarget = self::generateTarget('file', $filePath, self::SHARE_TYPE_USER, $uid, $uidOwner, $suggestedFileTarget, $parent);
if ($fileTarget != $groupFileTarget) {
$parentFolders[$uid]['folder'] = $fileTarget;
}
@@ -1212,13 +975,7 @@ class Share {
$parent = $parentFolder[$uid]['id'];
}
} else {
- $fileTarget = self::generateTarget('file',
- $filePath,
- self::SHARE_TYPE_USER,
- $uid,
- $uidOwner,
- $suggestedFileTarget,
- $parent);
+ $fileTarget = self::generateTarget('file', $filePath, self::SHARE_TYPE_USER, $uid, $uidOwner, $suggestedFileTarget, $parent);
}
} else {
$fileTarget = null;
@@ -1239,19 +996,7 @@ class Share {
));
// Insert an extra row for the group share if the item or file target is unique for this user
if ($itemTarget != $groupItemTarget || (isset($fileSource) && $fileTarget != $groupFileTarget)) {
- $query->execute(array(
- $itemType,
- $itemSource,
- $itemTarget,
- $parent,
- self::$shareTypeGroupUserUnique,
- $uid,
- $uidOwner,
- $permissions,
- time(),
- $fileSource,
- $fileTarget,
- $token));
+ $query->execute(array($itemType, $itemSource, $itemTarget, $parent, self::$shareTypeGroupUserUnique, $uid, $uidOwner, $permissions, time(), $fileSource, $fileTarget, $token));
$id = \OC_DB::insertid('*PREFIX*share');
}
}
@@ -1260,50 +1005,23 @@ class Share {
return $parentFolders;
}
} else {
- $itemTarget = self::generateTarget($itemType,
- $itemSource,
- $shareType,
- $shareWith,
- $uidOwner,
- $suggestedItemTarget);
+ $itemTarget = self::generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $suggestedItemTarget);
if (isset($fileSource)) {
if ($parentFolder) {
if ($parentFolder === true) {
- $fileTarget = self::generateTarget('file',
- $filePath,
- $shareType,
- $shareWith,
- $uidOwner,
- $suggestedFileTarget);
+ $fileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith, $uidOwner, $suggestedFileTarget);
$parentFolders['folder'] = $fileTarget;
} else {
$fileTarget = $parentFolder['folder'].$itemSource;
$parent = $parentFolder['id'];
}
} else {
- $fileTarget = self::generateTarget('file',
- $filePath,
- $shareType,
- $shareWith,
- $uidOwner,
- $suggestedFileTarget);
+ $fileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith, $uidOwner, $suggestedFileTarget);
}
} else {
$fileTarget = null;
}
- $query->execute(array(
- $itemType,
- $itemSource,
- $itemTarget,
- $parent,
- $shareType,
- $shareWith,
- $uidOwner,
- $permissions,
- time(),
- $fileSource,
- $fileTarget,
- $token));
+ $query->execute(array($itemType, $itemSource, $itemTarget, $parent, $shareType, $shareWith, $uidOwner, $permissions, time(), $fileSource, $fileTarget, $token));
$id = \OC_DB::insertid('*PREFIX*share');
\OC_Hook::emit('OCP\Share', 'post_shared', array(
'itemType' => $itemType,
@@ -1338,13 +1056,7 @@ class Share {
* @param int The id of the parent group share (optional)
* @return string Item target
*/
- private static function generateTarget($itemType,
- $itemSource,
- $shareType,
- $shareWith,
- $uidOwner,
- $suggestedTarget = null,
- $groupParent = null) {
+ private static function generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $suggestedTarget = null, $groupParent = null) {
$backend = self::getBackend($itemType);
if ($shareType == self::SHARE_TYPE_LINK) {
if (isset($suggestedTarget)) {
@@ -1396,7 +1108,8 @@ class Share {
}
if ($item['uid_owner'] == $uidOwner) {
if ($itemType == 'file' || $itemType == 'folder') {
- if ($item['file_source'] == \OC_FileCache::getId($itemSource)) {
+ $meta = \OC\Files\Filesystem::getFileInfo($itemSource);
+ if ($item['file_source'] == $meta['fileid']) {
return $target;
}
} else if ($item['item_source'] == $itemSource) {
@@ -1410,43 +1123,18 @@ class Share {
// Find similar targets to improve backend's chances to generate a unqiue target
if ($userAndGroups) {
if ($column == 'file_target') {
- $checkTargets = \OC_DB::prepare('SELECT `'.$column.'`'
- .' FROM `*PREFIX*share`'
- .' WHERE `item_type` IN (\'file\', \'folder\')'
- .' AND `share_type` IN (?,?,?)'
- .' AND `share_with`'
- .' IN (\''.implode('\',\'', $userAndGroups).'\')');
- $result = $checkTargets->execute(array(
- self::SHARE_TYPE_USER,
- self::SHARE_TYPE_GROUP,
- self::$shareTypeGroupUserUnique));
+ $checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` IN (\'file\', \'folder\') AND `share_type` IN (?,?,?) AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\')');
+ $result = $checkTargets->execute(array(self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique));
} else {
- $checkTargets = \OC_DB::prepare('SELECT `'.$column.'`'
- .' FROM `*PREFIX*share`'
- .' WHERE `item_type` = ?'
- .' AND `share_type` IN (?,?,?)'
- .' AND `share_with`'
- .' IN (\''.implode('\',\'', $userAndGroups).'\')');
- $result = $checkTargets->execute(array(
- $itemType,
- self::SHARE_TYPE_USER,
- self::SHARE_TYPE_GROUP,
- self::$shareTypeGroupUserUnique));
+ $checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` = ? AND `share_type` IN (?,?,?) AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\')');
+ $result = $checkTargets->execute(array($itemType, self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique));
}
} else {
if ($column == 'file_target') {
- $checkTargets = \OC_DB::prepare('SELECT `'.$column.'`'
- .' FROM `*PREFIX*share`'
- .' WHERE `item_type` IN (\'file\', \'folder\')'
- .' AND `share_type` = ?'
- .' AND `share_with` = ?');
+ $checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` IN (\'file\', \'folder\') AND `share_type` = ? AND `share_with` = ?');
$result = $checkTargets->execute(array(self::SHARE_TYPE_GROUP, $shareWith));
} else {
- $checkTargets = \OC_DB::prepare('SELECT `'.$column.'`'
- .' FROM `*PREFIX*share`'
- .' WHERE `item_type` = ?'
- .' AND `share_type` = ?'
- .' AND `share_with` = ?');
+ $checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` = ? AND `share_type` = ? AND `share_with` = ?');
$result = $checkTargets->execute(array($itemType, self::SHARE_TYPE_GROUP, $shareWith));
}
}
@@ -1474,43 +1162,21 @@ class Share {
$parents = array($parent);
while (!empty($parents)) {
$parents = "'".implode("','", $parents)."'";
- // Check the owner on the first search of reshares,
- // useful for finding and deleting the reshares by a single user of a group share
+ // Check the owner on the first search of reshares, useful for finding and deleting the reshares by a single user of a group share
if (count($ids) == 1 && isset($uidOwner)) {
- $query = \OC_DB::prepare('SELECT `id`, `uid_owner`, `item_type`, `item_target`, `parent`'
- .' FROM `*PREFIX*share`'
- .' WHERE `parent` IN ('.$parents.')'
- .' AND `uid_owner` = ?');
+ $query = \OC_DB::prepare('SELECT `id`, `uid_owner`, `item_type`, `item_target`, `parent` FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.') AND `uid_owner` = ?');
$result = $query->execute(array($uidOwner));
} else {
- $query = \OC_DB::prepare('SELECT `id`, `item_type`, `item_target`, `parent`, `uid_owner`'
- .' FROM `*PREFIX*share`'
- .' WHERE `parent` IN ('.$parents.')');
+ $query = \OC_DB::prepare('SELECT `id`, `item_type`, `item_target`, `parent`, `uid_owner` FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.')');
$result = $query->execute();
}
// Reset parents array, only go through loop again if items are found
$parents = array();
while ($item = $result->fetchRow()) {
- // Search for a duplicate parent share,
- // this occurs when an item is shared to the same user through a group and user
- // or the same item is shared by different users
+ // Search for a duplicate parent share, this occurs when an item is shared to the same user through a group and user or the same item is shared by different users
$userAndGroups = array_merge(array($item['uid_owner']), \OC_Group::getUserGroups($item['uid_owner']));
- $query = \OC_DB::prepare('SELECT `id`, `permissions`'
- .' FROM `*PREFIX*share`'
- .' WHERE `item_type` = ?'
- .' AND `item_target` = ?'
- .' AND `share_type` IN (?,?,?)'
- .' AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\')'
- .' AND `uid_owner` != ?'
- .' AND `id` != ?');
- $duplicateParent = $query->execute(array(
- $item['item_type'],
- $item['item_target'],
- self::SHARE_TYPE_USER,
- self::SHARE_TYPE_GROUP,
- self::$shareTypeGroupUserUnique,
- $item['uid_owner'],
- $item['parent']))->fetchRow();
+ $query = \OC_DB::prepare('SELECT `id`, `permissions` FROM `*PREFIX*share` WHERE `item_type` = ? AND `item_target` = ? AND `share_type` IN (?,?,?) AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\') AND `uid_owner` != ? AND `id` != ?');
+ $duplicateParent = $query->execute(array($item['item_type'], $item['item_target'], self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique, $item['uid_owner'], $item['parent']))->fetchRow();
if ($duplicateParent) {
// Change the parent to the other item id if share permission is granted
if ($duplicateParent['permissions'] & PERMISSION_SHARE) {
@@ -1539,10 +1205,7 @@ class Share {
public static function post_deleteUser($arguments) {
// Delete any items shared with the deleted user
- $query = \OC_DB::prepare('DELETE FROM `*PREFIX*share`'
- .' WHERE `share_with` = ?'
- .' AND `share_type` = ?'
- .' OR `share_type` = ?');
+ $query = \OC_DB::prepare('DELETE FROM `*PREFIX*share` WHERE `share_with` = ? AND `share_type` = ? OR `share_type` = ?');
$result = $query->execute(array($arguments['uid'], self::SHARE_TYPE_USER, self::$shareTypeGroupUserUnique));
// Delete any items the deleted user shared
$query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*share` WHERE `uid_owner` = ?');
@@ -1556,46 +1219,21 @@ class Share {
// Find the group shares and check if the user needs a unique target
$query = \OC_DB::prepare('SELECT * FROM `*PREFIX*share` WHERE `share_type` = ? AND `share_with` = ?');
$result = $query->execute(array(self::SHARE_TYPE_GROUP, $arguments['gid']));
- $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`, `parent`,'
- .' `share_type`, `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`,'
- .' `file_target`)'
- .' VALUES (?,?,?,?,?,?,?,?,?,?,?)');
+ $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`, `parent`, `share_type`, `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`, `file_target`) VALUES (?,?,?,?,?,?,?,?,?,?,?)');
while ($item = $result->fetchRow()) {
if ($item['item_type'] == 'file' || $item['item_type'] == 'file') {
$itemTarget = null;
} else {
- $itemTarget = self::generateTarget($item['item_type'],
- $item['item_source'],
- self::SHARE_TYPE_USER,
- $arguments['uid'],
- $item['uid_owner'],
- $item['item_target'],
- $item['id']);
+ $itemTarget = self::generateTarget($item['item_type'], $item['item_source'], self::SHARE_TYPE_USER, $arguments['uid'], $item['uid_owner'], $item['item_target'], $item['id']);
}
if (isset($item['file_source'])) {
- $fileTarget = self::generateTarget($item['item_type'],
- $item['item_source'],
- self::SHARE_TYPE_USER,
- $arguments['uid'],
- $item['uid_owner'],
- $item['file_target'],
- $item['id']);
+ $fileTarget = self::generateTarget($item['item_type'], $item['item_source'], self::SHARE_TYPE_USER, $arguments['uid'], $item['uid_owner'], $item['file_target'], $item['id']);
} else {
$fileTarget = null;
}
// Insert an extra row for the group share if the item or file target is unique for this user
if ($itemTarget != $item['item_target'] || $fileTarget != $item['file_target']) {
- $query->execute(array($item['item_type'],
- $item['item_source'],
- $itemTarget,
- $item['id'],
- self::$shareTypeGroupUserUnique,
- $arguments['uid'],
- $item['uid_owner'],
- $item['permissions'],
- $item['stime'],
- $item['file_source'],
- $fileTarget));
+ $query->execute(array($item['item_type'], $item['item_source'], $itemTarget, $item['id'], self::$shareTypeGroupUserUnique, $arguments['uid'], $item['uid_owner'], $item['permissions'], $item['stime'], $item['file_source'], $fileTarget));
\OC_DB::insertid('*PREFIX*share');
}
}
@@ -1603,15 +1241,8 @@ class Share {
public static function post_removeFromGroup($arguments) {
// TODO Don't call if user deleted?
- $query = \OC_DB::prepare('SELECT `id`, `share_type`'
- .' FROM `*PREFIX*share`'
- .' WHERE (`share_type` = ? AND `share_with` = ?)'
- .' OR (`share_type` = ? AND `share_with` = ?)');
- $result = $query->execute(array(
- self::SHARE_TYPE_GROUP,
- $arguments['gid'],
- self::$shareTypeGroupUserUnique,
- $arguments['uid']));
+ $query = \OC_DB::prepare('SELECT `id`, `share_type` FROM `*PREFIX*share` WHERE (`share_type` = ? AND `share_with` = ?) OR (`share_type` = ? AND `share_with` = ?)');
+ $result = $query->execute(array(self::SHARE_TYPE_GROUP, $arguments['gid'], self::$shareTypeGroupUserUnique, $arguments['uid']));
while ($item = $result->fetchRow()) {
if ($item['share_type'] == self::SHARE_TYPE_GROUP) {
// Delete all reshares by this user of the group share
@@ -1668,13 +1299,10 @@ interface Share_Backend {
* @param int Format
* @return ?
*
- * The items array is a 3-dimensional array with the item_source as the first key
- * and the share id as the second key to an array with the share info.
+ * The items array is a 3-dimensional array with the item_source as the first key and the share id as the second key to an array with the share info.
* The key/value pairs included in the share info depend on the function originally called:
- * If called by getItem(s)Shared: id, item_type, item, item_source,
- * share_type, share_with, permissions, stime, file_source
- * If called by getItem(s)SharedWith: id, item_type, item, item_source,
- * item_target, share_type, share_with, permissions, stime, file_source, file_target
+ * If called by getItem(s)Shared: id, item_type, item, item_source, share_type, share_with, permissions, stime, file_source
+ * If called by getItem(s)SharedWith: id, item_type, item, item_source, item_target, share_type, share_with, permissions, stime, file_source, file_target
* This function allows the backend to control the output of shared items with custom formats.
* It is only called through calls to the public getItem(s)Shared(With) functions.
*/
@@ -1707,8 +1335,7 @@ interface Share_Backend_Collection extends Share_Backend {
/**
* @brief Get the sources of the children of the item
* @param string Item source
- * @return array Returns an array of children each inside an array with the keys:
- * source, target, and file_path if applicable
+ * @return array Returns an array of children each inside an array with the keys: source, target, and file_path if applicable
*/
public function getChildren($itemSource);
diff --git a/lib/public/util.php b/lib/public/util.php
index 413dbcccd28..a78a52f326e 100644
--- a/lib/public/util.php
+++ b/lib/public/util.php
@@ -219,6 +219,28 @@ class Util {
}
/**
+ * @brief Returns the request uri
+ * @returns the request uri
+ *
+ * Returns the request uri, even if the website uses one or more
+ * reverse proxies
+ */
+ public static function getRequestUri() {
+ return(\OC_Request::requestUri());
+ }
+
+ /**
+ * @brief Returns the script name
+ * @returns the script name
+ *
+ * Returns the script name, even if the website uses one or more
+ * reverse proxies
+ */
+ public static function getScriptName() {
+ return(\OC_Request::scriptName());
+ }
+
+ /**
* @brief Creates path to an image
* @param string $app app
* @param string $image image name
diff --git a/lib/request.php b/lib/request.php
index f2f15c21103..1661a1406ca 100755
--- a/lib/request.php
+++ b/lib/request.php
@@ -8,6 +8,15 @@
class OC_Request {
/**
+ * @brief Check overwrite condition
+ * @returns true/false
+ */
+ private static function isOverwriteCondition() {
+ $regex = '/' . OC_Config::getValue('overwritecondaddr', '') . '/';
+ return $regex === '//' or preg_match($regex, $_SERVER['REMOTE_ADDR']) === 1;
+ }
+
+ /**
* @brief Returns the server host
* @returns the server host
*
@@ -18,7 +27,7 @@ class OC_Request {
if(OC::$CLI) {
return 'localhost';
}
- if(OC_Config::getValue('overwritehost', '')<>'') {
+ if(OC_Config::getValue('overwritehost', '')<>'' and self::isOverwriteCondition()) {
return OC_Config::getValue('overwritehost');
}
if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
@@ -43,7 +52,7 @@ class OC_Request {
* Returns the server protocol. It respects reverse proxy servers and load balancers
*/
public static function serverProtocol() {
- if(OC_Config::getValue('overwriteprotocol', '')<>'') {
+ if(OC_Config::getValue('overwriteprotocol', '')<>'' and self::isOverwriteCondition()) {
return OC_Config::getValue('overwriteprotocol');
}
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
@@ -59,6 +68,38 @@ class OC_Request {
}
/**
+ * @brief Returns the request uri
+ * @returns the request uri
+ *
+ * Returns the request uri, even if the website uses one or more
+ * reverse proxies
+ */
+ public static function requestUri() {
+ $uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
+ if (OC_Config::getValue('overwritewebroot', '') <> '' and self::isOverwriteCondition()) {
+ $uri = self::scriptName() . substr($uri, strlen($_SERVER['SCRIPT_NAME']));
+ }
+ return $uri;
+ }
+
+ /**
+ * @brief Returns the script name
+ * @returns the script name
+ *
+ * Returns the script name, even if the website uses one or more
+ * reverse proxies
+ */
+ public static function scriptName() {
+ $name = $_SERVER['SCRIPT_NAME'];
+ if (OC_Config::getValue('overwritewebroot', '') <> '' and self::isOverwriteCondition()) {
+ $serverroot = str_replace("\\", '/', substr(__DIR__, 0, -4));
+ $suburi = str_replace("\\", "/", substr(realpath($_SERVER["SCRIPT_FILENAME"]), strlen($serverroot)));
+ $name = OC_Config::getValue('overwritewebroot', '') . $suburi;
+ }
+ return $name;
+ }
+
+ /**
* @brief get Path info from request
* @returns string Path info or false when not found
*/
diff --git a/lib/search/provider/file.php b/lib/search/provider/file.php
index ea536ef77de..4d88c2a87f1 100644
--- a/lib/search/provider/file.php
+++ b/lib/search/provider/file.php
@@ -2,7 +2,7 @@
class OC_Search_Provider_File extends OC_Search_Provider{
function search($query) {
- $files=OC_FileCache::search($query, true);
+ $files=\OC\Files\Filesystem::search($query, true);
$results=array();
$l=OC_L10N::get('lib');
foreach($files as $fileData) {
diff --git a/lib/user/database.php b/lib/user/database.php
index 7deeb0c4697..8dfd9534a96 100644
--- a/lib/user/database.php
+++ b/lib/user/database.php
@@ -156,12 +156,23 @@ class OC_User_Database extends OC_User_Backend {
public function getDisplayNames($search = '', $limit = null, $offset = null) {
$displayNames = array();
$query = OC_DB::prepare('SELECT `uid`, `displayname` FROM `*PREFIX*users` WHERE LOWER(`displayname`) LIKE LOWER(?)', $limit, $offset);
- $result = $query->execute(array($search.'%'));
+ $result = $query->execute(array($search.'%'));
$users = array();
- while ($row = $result->fetchRow()) {
- $displayName = trim($row['displayname'], ' ');
- $displayNames[$row['uid']] = empty($displayName) ? $row['uid'] : $displayName;
- }
+ while ($row = $result->fetchRow()) {
+ $displayNames[$row['uid']] = $row['displayname'];
+ }
+
+ // let's see if we can also find some users who don't have a display name yet
+ $query = OC_DB::prepare('SELECT `uid`, `displayname` FROM `*PREFIX*users` WHERE LOWER(`uid`) LIKE LOWER(?)', $limit, $offset);
+ $result = $query->execute(array($search.'%'));
+ while ($row = $result->fetchRow()) {
+ $displayName = trim($row['displayname'], ' ');
+ if ( empty($displayName) ) {
+ $displayNames[$row['uid']] = $row['uid'];
+ }
+ }
+
+
return $displayNames;
}
diff --git a/lib/util.php b/lib/util.php
index 0543df979d3..809f6a88be7 100755
--- a/lib/util.php
+++ b/lib/util.php
@@ -39,7 +39,7 @@ class OC_Util {
$CONFIG_DATADIRECTORY = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" );
//first set up the local "root" storage
if(!self::$rootMounted) {
- OC_Filesystem::mount('OC_Filestorage_Local', array('datadir'=>$CONFIG_DATADIRECTORY), '/');
+ \OC\Files\Filesystem::mount('\OC\Files\Storage\Local', array('datadir'=>$CONFIG_DATADIRECTORY), '/');
self::$rootMounted=true;
}
@@ -51,51 +51,30 @@ class OC_Util {
mkdir( $userdirectory, 0755, true );
}
//jail the user into his "home" directory
- OC_Filesystem::mount('OC_Filestorage_Local', array('datadir' => $user_root), $user);
- OC_Filesystem::init($user_dir, $user);
+ \OC\Files\Filesystem::init($user_dir);
+
$quotaProxy=new OC_FileProxy_Quota();
$fileOperationProxy = new OC_FileProxy_FileOperations();
OC_FileProxy::register($quotaProxy);
OC_FileProxy::register($fileOperationProxy);
- // Load personal mount config
- self::loadUserMountPoints($user);
+
OC_Hook::emit('OC_Filesystem', 'setup', array('user' => $user, 'user_dir' => $user_dir));
}
+ return true;
}
public static function tearDownFS() {
- OC_Filesystem::tearDown();
+ \OC\Files\Filesystem::tearDown();
self::$fsSetup=false;
}
- public static function loadUserMountPoints($user) {
- $user_dir = '/'.$user.'/files';
- $user_root = OC_User::getHome($user);
- $userdirectory = $user_root . '/files';
- if (is_file($user_root.'/mount.php')) {
- $mountConfig = include $user_root.'/mount.php';
- if (isset($mountConfig['user'][$user])) {
- foreach ($mountConfig['user'][$user] as $mountPoint => $options) {
- OC_Filesystem::mount($options['class'], $options['options'], $mountPoint);
- }
- }
-
- $mtime=filemtime($user_root.'/mount.php');
- $previousMTime=OC_Preferences::getValue($user, 'files', 'mountconfigmtime', 0);
- if($mtime>$previousMTime) {//mount config has changed, filecache needs to be updated
- OC_FileCache::triggerUpdate($user);
- OC_Preferences::setValue($user, 'files', 'mountconfigmtime', $mtime);
- }
- }
- }
-
/**
* get the current installed version of ownCloud
* @return array
*/
public static function getVersion() {
// hint: We only can count up. So the internal version number of ownCloud 4.5 will be 4.90.0. This is not visible to the user
- return array(4, 91, 03);
+ return array(4, 91, 9);
}
/**
@@ -157,14 +136,14 @@ class OC_Util {
* @param string $text the text content for the element
*/
public static function addHeader( $tag, $attributes, $text='') {
- self::$headers[]=array('tag'=>$tag,'attributes'=>$attributes, 'text'=>$text);
+ self::$headers[] = array('tag'=>$tag, 'attributes'=>$attributes, 'text'=>$text);
}
/**
* formats a timestamp in the "right" way
*
* @param int timestamp $timestamp
- * @param bool dateOnly option to ommit time from the result
+ * @param bool dateOnly option to omit time from the result
*/
public static function formatDate( $timestamp, $dateOnly=false) {
if(isset($_SESSION['timezone'])) {//adjust to clients timezone if we know it
@@ -333,7 +312,7 @@ class OC_Util {
public static function checkLoggedIn() {
// Check if we are a user
if( !OC_User::isLoggedIn()) {
- header( 'Location: '.OC_Helper::linkToAbsolute( '', 'index.php', array('redirect_url' => $_SERVER["REQUEST_URI"])));
+ header( 'Location: '.OC_Helper::linkToAbsolute( '', 'index.php', array('redirect_url' => OC_Request::requestUri())));
exit();
}
}
@@ -398,6 +377,17 @@ class OC_Util {
}
/**
+ * @brief Static lifespan (in seconds) when a request token expires.
+ * @see OC_Util::callRegister()
+ * @see OC_Util::isCallRegistered()
+ * @description
+ * Also required for the client side to compute the piont in time when to
+ * request a fresh token. The client will do so when nearly 97% of the
+ * timespan coded here has expired.
+ */
+ public static $callLifespan = 3600; // 3600 secs = 1 hour
+
+ /**
* @brief Register an get/post call. Important to prevent CSRF attacks.
* @todo Write howto: CSRF protection guide
* @return $token Generated token.
@@ -405,6 +395,8 @@ class OC_Util {
* Creates a 'request token' (random) and stores it inside the session.
* Ever subsequent (ajax) request must use such a valid token to succeed,
* otherwise the request will be denied as a protection against CSRF.
+ * The tokens expire after a fixed lifespan.
+ * @see OC_Util::$callLifespan
* @see OC_Util::isCallRegistered()
*/
public static function callRegister() {
@@ -423,6 +415,7 @@ class OC_Util {
/**
* @brief Check an ajax get/post call if the request token is valid.
* @return boolean False if request token is not set or is invalid.
+ * @see OC_Util::$callLifespan
* @see OC_Util::callRegister()
*/
public static function isCallRegistered() {
diff --git a/ocs/providers.php b/ocs/providers.php
index 0c7cbaeff08..bf94b85dcfb 100644
--- a/ocs/providers.php
+++ b/ocs/providers.php
@@ -23,7 +23,7 @@
require_once '../lib/base.php';
-$url=OCP\Util::getServerProtocol().'://'.substr(OCP\Util::getServerHost().$_SERVER['REQUEST_URI'], 0, -17).'ocs/v1.php/';
+$url=OCP\Util::getServerProtocol().'://'.substr(OCP\Util::getServerHost().OCP\Util::getRequestUri(), 0, -17).'ocs/v1.php/';
echo('
<providers>
diff --git a/settings/ajax/apps/ocs.php b/settings/ajax/apps/ocs.php
index 1ffba26ad1d..d0205a1ba34 100644
--- a/settings/ajax/apps/ocs.php
+++ b/settings/ajax/apps/ocs.php
@@ -44,6 +44,11 @@ if(is_array($catagoryNames)) {
} else {
$pre=$app['preview'];
}
+ if($app['label']=='recommended') {
+ $label='3rd Party App';
+ } else {
+ $label='Recommended';
+ }
$apps[]=array(
'name'=>$app['name'],
'id'=>$app['id'],
@@ -53,7 +58,8 @@ if(is_array($catagoryNames)) {
'license'=>$app['license'],
'preview'=>$pre,
'internal'=>false,
- 'internallabel'=>'3rd Party App',
+ 'internallabel'=>$label,
+ 'update'=>false,
);
}
}
diff --git a/settings/ajax/updateapp.php b/settings/ajax/updateapp.php
new file mode 100644
index 00000000000..77c0bbc3e36
--- /dev/null
+++ b/settings/ajax/updateapp.php
@@ -0,0 +1,17 @@
+<?php
+
+OC_JSON::checkAdminUser();
+OCP\JSON::callCheck();
+
+$appid = $_POST['appid'];
+
+$result = OC_Installer::updateApp($appid);
+if($result !== false) {
+ OC_JSON::success(array('data' => array('appid' => $appid)));
+} else {
+ $l = OC_L10N::get('settings');
+ OC_JSON::error(array("data" => array( "message" => $l->t("Couldn't update app.") )));
+}
+
+
+
diff --git a/settings/apps.php b/settings/apps.php
index b6426a31c97..b9ed2cac93a 100644
--- a/settings/apps.php
+++ b/settings/apps.php
@@ -31,13 +31,17 @@ OC_App::setActiveNavigationEntry( "core_apps" );
function app_sort( $a, $b ) {
if ($a['active'] != $b['active']) {
-
+
return $b['active'] - $a['active'];
-
+
+ }
+
+ if ($a['internal'] != $b['internal']) {
+ return $b['internal'] - $a['internal'];
}
-
+
return strcmp($a['name'], $b['name']);
-
+
}
$combinedApps = OC_App::listAllApps();
@@ -52,3 +56,4 @@ $appid = (isset($_GET['appid'])?strip_tags($_GET['appid']):'');
$tmpl->assign('appid', $appid);
$tmpl->printPage();
+
diff --git a/settings/css/settings.css b/settings/css/settings.css
index 4d0f6efd2c8..667539cd685 100644
--- a/settings/css/settings.css
+++ b/settings/css/settings.css
@@ -22,13 +22,13 @@ form { display:inline; }
table:not(.nostyle) th { height:2em; color:#999; }
table:not(.nostyle) th, table:not(.nostyle) td { border-bottom:1px solid #ddd; padding:0 .5em; padding-left:.8em; text-align:left; font-weight:normal; }
td.name, td.password { padding-left:.8em; }
-td.password>img, td.remove>a, td.quota>img { visibility:hidden; }
-td.password, td.quota { width:12em; cursor:pointer; }
-td.password>span, td.quota>span { margin-right: 1.2em; color: #C7C7C7; }
+td.password>img,td.displayName>img, td.remove>a, td.quota>img { visibility:hidden; }
+td.password, td.quota, td.displayName { width:12em; cursor:pointer; }
+td.password>span, td.quota>span, rd.displayName>span { margin-right: 1.2em; color: #C7C7C7; }
td.remove { width:1em; padding-right:1em; }
-tr:hover>td.password>span { margin:0; cursor:pointer; }
-tr:hover>td.remove>a, tr:hover>td.password>img, tr:hover>td.quota>img { visibility:visible; cursor:pointer; }
+tr:hover>td.password>span, tr:hover>td.displayName>span { margin:0; cursor:pointer; }
+tr:hover>td.remove>a, tr:hover>td.password>img,tr:hover>td.displayName>img, tr:hover>td.quota>img { visibility:visible; cursor:pointer; }
tr:hover>td.remove>a { float:right; }
li.selected { background-color:#ddd; }
#content>table:not(.nostyle) { margin-top:3em; }
@@ -50,10 +50,13 @@ li { color:#888; }
li.active { color:#000; }
small.externalapp { color:#FFF; background-color:#BBB; font-weight:bold; font-size: 0.6em; margin: 0; padding: 0.1em 0.2em; border-radius: 4px;}
small.externalapp.list { float: right; }
+small.recommendedapp { color:#FFF; background-color:#888; font-weight:bold; font-size: 0.6em; margin: 0; padding: 0.1em 0.2em; border-radius: 4px;}
+small.recommendedapp.list { float: right; }
span.version { margin-left:1em; margin-right:1em; color:#555; }
.app { position: relative; display: inline-block; padding: 0.2em 0 0.2em 0 !important; text-overflow: hidden; overflow: hidden; white-space: nowrap; /*transition: .2s max-width linear; -o-transition: .2s max-width linear; -moz-transition: .2s max-width linear; -webkit-transition: .2s max-width linear; -ms-transition: .2s max-width linear;*/ }
-.app.externalapp { max-width: 12.5em; z-index: 100; }
+.app.externalapp { max-width: 12.5em; }
+.app.recommendedapp { max-width: 12.5em; }
/* Transition to complete width! */
.app:hover, .app:active { max-width: inherit; }
diff --git a/settings/js/apps.js b/settings/js/apps.js
index c4c36b4bb12..68a3fa54de7 100644
--- a/settings/js/apps.js
+++ b/settings/js/apps.js
@@ -24,6 +24,14 @@ OC.Settings.Apps = OC.Settings.Apps || {
page.find('span.author').text(app.author);
page.find('span.licence').text(app.licence);
+ if (app.update != false) {
+ page.find('input.update').show();
+ page.find('input.update').data('appid', app.id);
+ page.find('input.update').attr('value',t('settings', 'Update to {appversion}', {appversion:app.update}));
+ } else {
+ page.find('input.update').hide();
+ }
+
page.find('input.enable').show();
page.find('input.enable').val((app.active) ? t('settings', 'Disable') : t('settings', 'Enable'));
page.find('input.enable').data('appid', app.id);
@@ -44,6 +52,7 @@ OC.Settings.Apps = OC.Settings.Apps || {
appData = appitem.data('app');
appData.active = !active;
appitem.data('app', appData);
+ element.val(t('settings','Please wait....'));
if(active) {
$.post(OC.filePath('settings','ajax','disableapp.php'),{appid:appid},function(result) {
if(!result || result.status!='success') {
@@ -70,6 +79,20 @@ OC.Settings.Apps = OC.Settings.Apps || {
$('#leftcontent li[data-id="'+appid+'"]').addClass('active');
}
},
+ updateApp:function(appid, element) {
+ console.log('updateApp:', appid, element);
+ element.val(t('settings','Updateing....'));
+ $.post(OC.filePath('settings','ajax','updateapp.php'),{appid:appid},function(result) {
+ if(!result || result.status!='success') {
+ OC.dialogs.alert(t('settings','Error while updating app'),t('settings','Error'));
+ }
+ else {
+ element.val(t('settings','Updated'));
+ element.hide();
+ }
+ },'json');
+ },
+
insertApp:function(appdata) {
var applist = $('#leftcontent li');
var app =
@@ -154,6 +177,13 @@ $(document).ready(function(){
OC.Settings.Apps.enableApp(appid, active, element);
}
});
+ $('#rightcontent input.update').click(function(){
+ var element = $(this);
+ var appid=$(this).data('appid');
+ if(appid) {
+ OC.Settings.Apps.updateApp(appid, element);
+ }
+ });
if(appid) {
var item = $('#leftcontent li[data-id="'+appid+'"]');
diff --git a/settings/l10n/ca.php b/settings/l10n/ca.php
index 1f23c2cfd66..2f9bcba4a5c 100644
--- a/settings/l10n/ca.php
+++ b/settings/l10n/ca.php
@@ -49,13 +49,17 @@
"Use this address to connect to your ownCloud in your file manager" => "Useu aquesta adreça per connectar amb ownCloud des del gestor de fitxers",
"Version" => "Versió",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Desenvolupat per la <a href=\"http://ownCloud.org/contact\" target=\"_blank\">comunitat ownCloud</a>, el <a href=\"https://github.com/owncloud\" target=\"_blank\">codi font</a> té llicència <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
+"Login Name" => "Nom d'accés",
"Groups" => "Grups",
"Create" => "Crea",
"Default Storage" => "Emmagatzemament per defecte",
"Unlimited" => "Il·limitat",
"Other" => "Un altre",
+"Display Name" => "Nom a mostrar",
"Group Admin" => "Grup Admin",
"Storage" => "Emmagatzemament",
+"change display name" => "canvia el nom a mostrar",
+"set new password" => "estableix nova contrasenya",
"Default" => "Per defecte",
"Delete" => "Suprimeix"
);
diff --git a/settings/l10n/cs_CZ.php b/settings/l10n/cs_CZ.php
index be75a679c65..a2d8e335dcb 100644
--- a/settings/l10n/cs_CZ.php
+++ b/settings/l10n/cs_CZ.php
@@ -49,13 +49,17 @@
"Use this address to connect to your ownCloud in your file manager" => "Použijte tuto adresu pro připojení k vašemu ownCloud skrze správce souborů",
"Version" => "Verze",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Vyvinuto <a href=\"http://ownCloud.org/contact\" target=\"_blank\">komunitou ownCloud</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">zdrojový kód</a> je licencován pod <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
+"Login Name" => "Přihlašovací jméno",
"Groups" => "Skupiny",
"Create" => "Vytvořit",
"Default Storage" => "Výchozí úložiště",
"Unlimited" => "NeomezenÄ›",
"Other" => "Jiná",
+"Display Name" => "Zobrazované jméno",
"Group Admin" => "Správa skupiny",
"Storage" => "Úložiště",
+"change display name" => "změnit zobrazované jméno",
+"set new password" => "nastavit nové heslo",
"Default" => "Výchozí",
"Delete" => "Smazat"
);
diff --git a/settings/l10n/es_AR.php b/settings/l10n/es_AR.php
index bbf45bc5620..ce807b642ec 100644
--- a/settings/l10n/es_AR.php
+++ b/settings/l10n/es_AR.php
@@ -24,7 +24,7 @@
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licenciado por <span class=\"author\">",
"User Documentation" => "Documentación de Usuario",
"Administrator Documentation" => "Documentación de Administrador",
-"Online Documentation" => "Documentación en linea",
+"Online Documentation" => "Documentación en línea",
"Forum" => "Foro",
"Bugtracker" => "Informar errores",
"Commercial Support" => "Soporte comercial",
@@ -49,11 +49,13 @@
"Use this address to connect to your ownCloud in your file manager" => "Utiliza esta dirección para conectarte con ownCloud en tu Administrador de Archivos",
"Version" => "Versión",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Desarrollado por la <a href=\"http://ownCloud.org/contact\" target=\"_blank\">comunidad ownCloud</a>, el <a href=\"https://github.com/owncloud\" target=\"_blank\">código fuente</a> está bajo licencia <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
+"Login Name" => "Nombre de ",
"Groups" => "Grupos",
"Create" => "Crear",
"Default Storage" => "Almacenamiento Predeterminado",
"Unlimited" => "Ilimitado",
"Other" => "Otro",
+"Display Name" => "Nombre a mostrar",
"Group Admin" => "Grupo Administrador",
"Storage" => "Almacenamiento",
"Default" => "Predeterminado",
diff --git a/settings/l10n/eu.php b/settings/l10n/eu.php
index 29e3a810ca4..dd9eb48304e 100644
--- a/settings/l10n/eu.php
+++ b/settings/l10n/eu.php
@@ -49,11 +49,13 @@
"Use this address to connect to your ownCloud in your file manager" => "Erabili helbide hau zure fitxategi kudeatzailean zure ownCloudera konektatzeko",
"Version" => "Bertsioa",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "<a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud komunitateak</a> garatuta, <a href=\"https://github.com/owncloud\" target=\"_blank\">itubruru kodea</a><a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr> lizentziarekin banatzen da</a>.",
+"Login Name" => "Sarrera Izena",
"Groups" => "Taldeak",
"Create" => "Sortu",
"Default Storage" => "Lehenetsitako Biltegiratzea",
"Unlimited" => "Mugarik gabe",
"Other" => "Besteak",
+"Display Name" => "Bistaratze Izena",
"Group Admin" => "Talde administradorea",
"Storage" => "Biltegiratzea",
"Default" => "Lehenetsia",
diff --git a/settings/l10n/fi_FI.php b/settings/l10n/fi_FI.php
index 84b18902b99..f8a19ae0f9c 100644
--- a/settings/l10n/fi_FI.php
+++ b/settings/l10n/fi_FI.php
@@ -49,10 +49,12 @@
"Use this address to connect to your ownCloud in your file manager" => "Käytä tätä osoitetta yhdistäessäsi ownCloudiisi tiedostonhallintaa käyttäen",
"Version" => "Versio",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Kehityksestä on vastannut <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud-yhteisö</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">lähdekoodi</a> on julkaistu lisenssin <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> alaisena.",
+"Login Name" => "Kirjautumisnimi",
"Groups" => "Ryhmät",
"Create" => "Luo",
"Unlimited" => "Rajoittamaton",
"Other" => "Muu",
+"Display Name" => "Näyttönimi",
"Group Admin" => "Ryhmän ylläpitäjä",
"Default" => "Oletus",
"Delete" => "Poista"
diff --git a/settings/l10n/it.php b/settings/l10n/it.php
index 2199f7d8db8..c8d8f16acea 100644
--- a/settings/l10n/it.php
+++ b/settings/l10n/it.php
@@ -49,13 +49,17 @@
"Use this address to connect to your ownCloud in your file manager" => "Usa questo indirizzo per connetterti al tuo ownCloud dal tuo gestore file",
"Version" => "Versione",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Sviluppato dalla <a href=\"http://ownCloud.org/contact\" target=\"_blank\">comunità di ownCloud</a>, il <a href=\"https://github.com/owncloud\" target=\"_blank\">codice sorgente</a> è licenziato nei termini della <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
+"Login Name" => "Nome utente",
"Groups" => "Gruppi",
"Create" => "Crea",
"Default Storage" => "Archiviazione predefinita",
"Unlimited" => "Illimitata",
"Other" => "Altro",
+"Display Name" => "Nome visualizzato",
"Group Admin" => "Gruppi amministrati",
"Storage" => "Archiviazione",
+"change display name" => "cambia il nome visualizzato",
+"set new password" => "imposta una nuova password",
"Default" => "Predefinito",
"Delete" => "Elimina"
);
diff --git a/settings/l10n/ko.php b/settings/l10n/ko.php
index 3a794eb3ceb..3601d77c9fe 100644
--- a/settings/l10n/ko.php
+++ b/settings/l10n/ko.php
@@ -21,16 +21,16 @@
"More Apps" => "ë” ë§Žì€ ì•±",
"Select an App" => "앱 ì„ íƒ",
"See application page at apps.owncloud.com" => "apps.owncloud.comì— ìžˆëŠ” 앱 페ì´ì§€ë¥¼ 참고하십시오",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-ë¼ì´ì„ ìŠ¤ ë³´ìœ ìž <span class=\"author\"></span>",
-"User Documentation" => "유저 문서",
+"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-ë¼ì´ì„ ìŠ¤ë¨: <span class=\"author\"></span>",
+"User Documentation" => "ì‚¬ìš©ìž ë¬¸ì„œ",
"Administrator Documentation" => "ê´€ë¦¬ìž ë¬¸ì„œ",
"Online Documentation" => "온ë¼ì¸ 문서",
"Forum" => "í¬ëŸ¼",
-"Bugtracker" => "버그트래커",
+"Bugtracker" => "버그 트래커",
"Commercial Support" => "ìƒì—…ìš© 지ì›",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "현재 공간 <strong>%s</strong>/<strong>%s</strong>ì„(를) 사용 중입니다",
-"Clients" => "ê³ ê°",
-"Download Desktop Clients" => "ë°ìŠ¤í¬íƒ‘ í´ë¼ì´ì–¸íŠ¸ 다운로드",
+"Clients" => "í´ë¼ì´ì–¸íŠ¸",
+"Download Desktop Clients" => "ë°ìŠ¤í¬í†± í´ë¼ì´ì–¸íŠ¸ 다운로드",
"Download Android Client" => "안드로ì´ë“œ í´ë¼ì´ì–¸íŠ¸ 다운로드",
"Download iOS Client" => "iOS í´ë¼ì´ì–¸íŠ¸ 다운로드",
"Password" => "암호",
@@ -46,16 +46,20 @@
"Language" => "언어",
"Help translate" => "번역 ë•ê¸°",
"WebDAV" => "WebDAV",
-"Use this address to connect to your ownCloud in your file manager" => "íŒŒì¼ ë§¤ë‹ˆì €ì—ì„œ 사용ìžì˜ ownCloudì— ì ‘ì†í•˜ê¸° 위해 ì´ ì£¼ì†Œë¥¼ 사용하십시요.",
-"Version" => "버젼",
+"Use this address to connect to your ownCloud in your file manager" => "íŒŒì¼ ê´€ë¦¬ìžì—ì„œ ownCloudì— ì ‘ì†í•˜ë ¤ë©´ ì´ ì£¼ì†Œë¥¼ 사용하십시오.",
+"Version" => "버전",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "<a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud 커뮤니티</a>ì— ì˜í•´ì„œ 개발ë˜ì—ˆìŠµë‹ˆë‹¤. <a href=\"https://github.com/owncloud\" target=\"_blank\">ì›ë³¸ 코드</a>는 <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>ì— ë”°ë¼ ì‚¬ìš©ì´ í—ˆê°€ë©ë‹ˆë‹¤.",
+"Login Name" => "ë¡œê·¸ì¸ ì´ë¦„",
"Groups" => "그룹",
"Create" => "만들기",
"Default Storage" => "기본 저장소",
"Unlimited" => "무제한",
"Other" => "기타",
+"Display Name" => "표시 ì´ë¦„",
"Group Admin" => "그룹 관리ìž",
"Storage" => "저장소",
+"change display name" => "표시 ì´ë¦„ 변경",
+"set new password" => "새 암호 설정",
"Default" => "기본값",
"Delete" => "삭제"
);
diff --git a/settings/l10n/pt_BR.php b/settings/l10n/pt_BR.php
index f14233d7e58..e3146a33c5b 100644
--- a/settings/l10n/pt_BR.php
+++ b/settings/l10n/pt_BR.php
@@ -1,29 +1,37 @@
<?php $TRANSLATIONS = array(
-"Unable to load list from App Store" => "Não foi possivel carregar lista da App Store",
+"Unable to load list from App Store" => "Não foi possível carregar lista da App Store",
"Group already exists" => "Grupo já existe",
-"Unable to add group" => "Não foi possivel adicionar grupo",
-"Could not enable app. " => "Não pôde habilitar aplicação",
-"Email saved" => "Email gravado",
-"Invalid email" => "Email inválido",
-"Unable to delete group" => "Não foi possivel remover grupo",
-"Authentication error" => "erro de autenticação",
-"Unable to delete user" => "Não foi possivel remover usuário",
-"Language changed" => "Mudou Idioma",
+"Unable to add group" => "Não foi possível adicionar grupo",
+"Could not enable app. " => "Não foi possível habilitar aplicativo.",
+"Email saved" => "E-mail guardado",
+"Invalid email" => "E-mail inválido",
+"Unable to delete group" => "Não foi possível remover grupo",
+"Authentication error" => "Erro de autenticação",
+"Unable to delete user" => "Não foi possível remover usuário",
+"Language changed" => "Idioma alterado",
"Invalid request" => "Pedido inválido",
"Admins can't remove themself from the admin group" => "Admins não podem se remover do grupo admin",
-"Unable to add user to group %s" => "Não foi possivel adicionar usuário ao grupo %s",
-"Unable to remove user from group %s" => "Não foi possivel remover usuário ao grupo %s",
-"Disable" => "Desabilitado",
-"Enable" => "Habilitado",
-"Saving..." => "Gravando...",
-"__language_name__" => "Português do Brasil",
+"Unable to add user to group %s" => "Não foi possível adicionar usuário ao grupo %s",
+"Unable to remove user from group %s" => "Não foi possível remover usuário do grupo %s",
+"Disable" => "Desabilitar",
+"Enable" => "Habilitar",
+"Saving..." => "Guardando...",
+"__language_name__" => "Português (Brasil)",
"Add your App" => "Adicione seu Aplicativo",
"More Apps" => "Mais Apps",
-"Select an App" => "Selecione uma Aplicação",
+"Select an App" => "Selecione um Aplicativo",
"See application page at apps.owncloud.com" => "Ver página do aplicativo em apps.owncloud.com",
"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licenciado por <span class=\"author\"></span>",
+"User Documentation" => "Documentação de Usuário",
+"Administrator Documentation" => "Documentação de Administrador",
+"Online Documentation" => "Documentação Online",
+"Forum" => "Fórum",
+"Commercial Support" => "Suporte Comercial",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Você usou <strong>%s</strong> do seu espaço de <strong>%s</strong>",
"Clients" => "Clientes",
+"Download Desktop Clients" => "Baixar Clientes Desktop",
+"Download Android Client" => "Baixar Cliente Android",
+"Download iOS Client" => "Baixar Cliente iOS",
"Password" => "Senha",
"Your password was changed" => "Sua senha foi alterada",
"Unable to change your password" => "Não é possivel alterar a sua senha",
@@ -31,15 +39,24 @@
"New password" => "Nova senha",
"show" => "mostrar",
"Change password" => "Alterar senha",
-"Email" => "Email",
-"Your email address" => "Seu endereço de email",
-"Fill in an email address to enable password recovery" => "Preencha um endereço de email para habilitar a recuperação de senha",
+"Email" => "E-mail",
+"Your email address" => "Seu endereço de e-mail",
+"Fill in an email address to enable password recovery" => "Preencha um endereço de e-mail para habilitar a recuperação de senha",
"Language" => "Idioma",
"Help translate" => "Ajude a traduzir",
+"WebDAV" => "WebDAV",
+"Use this address to connect to your ownCloud in your file manager" => "Usar este endereço para conectar-se ao seu ownCloud no seu gerenciador de arquivos",
+"Version" => "Versão",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Desenvolvido pela <a href=\"http://ownCloud.org/contact\" target=\"_blank\">comunidade ownCloud</a>, o <a href=\"https://github.com/owncloud\" target=\"_blank\">código fonte</a> está licenciado sob <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
+"Login Name" => "Nome de Login",
"Groups" => "Grupos",
"Create" => "Criar",
+"Default Storage" => "Armazenamento Padrão",
+"Unlimited" => "Ilimitado",
"Other" => "Outro",
+"Display Name" => "Nome de Exibição",
"Group Admin" => "Grupo Administrativo",
+"Storage" => "Armazenamento",
+"Default" => "Padrão",
"Delete" => "Apagar"
);
diff --git a/settings/l10n/pt_PT.php b/settings/l10n/pt_PT.php
index af5dfbf6e47..24bf8c75e5e 100644
--- a/settings/l10n/pt_PT.php
+++ b/settings/l10n/pt_PT.php
@@ -49,13 +49,17 @@
"Use this address to connect to your ownCloud in your file manager" => "Use este endereço no seu gestor de ficheiros para ligar à sua ownCloud",
"Version" => "Versão",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Desenvolvido pela <a href=\"http://ownCloud.org/contact\" target=\"_blank\">comunidade ownCloud</a>, o<a href=\"https://github.com/owncloud\" target=\"_blank\">código fonte</a> está licenciado sob a <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
+"Login Name" => "Nome de utilizador",
"Groups" => "Grupos",
"Create" => "Criar",
"Default Storage" => "Armazenamento Padrão",
"Unlimited" => "Ilimitado",
"Other" => "Outro",
+"Display Name" => "Nome público",
"Group Admin" => "Grupo Administrador",
"Storage" => "Armazenamento",
+"change display name" => "modificar nome exibido",
+"set new password" => "definir nova palavra-passe",
"Default" => "Padrão",
"Delete" => "Apagar"
);
diff --git a/settings/l10n/ru_RU.php b/settings/l10n/ru_RU.php
index 50c3b136c47..642b31ada7b 100644
--- a/settings/l10n/ru_RU.php
+++ b/settings/l10n/ru_RU.php
@@ -56,6 +56,7 @@
"Other" => "Другой",
"Group Admin" => "Группа Admin",
"Storage" => "Хранилище",
+"set new password" => "назначить новый пароль",
"Default" => "По умолчанию",
"Delete" => "Удалить"
);
diff --git a/settings/l10n/sk_SK.php b/settings/l10n/sk_SK.php
index 3941bd51ae7..6f93d0db0b4 100644
--- a/settings/l10n/sk_SK.php
+++ b/settings/l10n/sk_SK.php
@@ -49,11 +49,13 @@
"Use this address to connect to your ownCloud in your file manager" => "Použite túto adresu pre pripojenie vášho ownCloud k súborovému správcovi",
"Version" => "Verzia",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Vyvinuté <a href=\"http://ownCloud.org/contact\" target=\"_blank\">komunitou ownCloud</a>,<a href=\"https://github.com/owncloud\" target=\"_blank\">zdrojový kód</a> je licencovaný pod <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
+"Login Name" => "Prihlasovacie meno",
"Groups" => "Skupiny",
"Create" => "Vytvoriť",
"Default Storage" => "Predvolené úložisko",
"Unlimited" => "Nelimitované",
"Other" => "Iné",
+"Display Name" => "Zobrazované meno",
"Group Admin" => "Správca skupiny",
"Storage" => "Úložisko",
"Default" => "Predvolené",
diff --git a/settings/l10n/sv.php b/settings/l10n/sv.php
index 4c30873b3ca..29d11d8574e 100644
--- a/settings/l10n/sv.php
+++ b/settings/l10n/sv.php
@@ -49,13 +49,17 @@
"Use this address to connect to your ownCloud in your file manager" => "Använd denna adress för att ansluta till ownCloud i din filhanterare",
"Version" => "Version",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Utvecklad av <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud kommunity</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">källkoden</a> är licenserad under <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
+"Login Name" => "Inloggningsnamn",
"Groups" => "Grupper",
"Create" => "Skapa",
"Default Storage" => "Förvald lagring",
"Unlimited" => "Obegränsad",
"Other" => "Annat",
+"Display Name" => "Visat namn",
"Group Admin" => "Gruppadministratör",
"Storage" => "Lagring",
+"change display name" => "ändra visat namn",
+"set new password" => "ange nytt lösenord",
"Default" => "Förvald",
"Delete" => "Radera"
);
diff --git a/settings/routes.php b/settings/routes.php
index 0a5b2fbfd38..0a8af0dde2b 100644
--- a/settings/routes.php
+++ b/settings/routes.php
@@ -53,6 +53,8 @@ $this->create('settings_ajax_enableapp', '/settings/ajax/enableapp.php')
->actionInclude('settings/ajax/enableapp.php');
$this->create('settings_ajax_disableapp', '/settings/ajax/disableapp.php')
->actionInclude('settings/ajax/disableapp.php');
+$this->create('settings_ajax_updateapp', '/settings/ajax/updateapp.php')
+ ->actionInclude('settings/ajax/updateapp.php');
$this->create('settings_ajax_navigationdetect', '/settings/ajax/navigationdetect.php')
->actionInclude('settings/ajax/navigationdetect.php');
$this->create('apps_custom', '/settings/js/apps-custom.js')
diff --git a/settings/templates/apps.php b/settings/templates/apps.php
index d418b9a66a1..3f0d2a9d1c6 100644
--- a/settings/templates/apps.php
+++ b/settings/templates/apps.php
@@ -7,7 +7,7 @@
<script type="text/javascript" src="<?php echo OC_Helper::linkTo('settings/js', 'apps.js');?>"></script>
<div id="controls">
- <a class="button" target="_blank" href="http://owncloud.org/dev/apps/getting-started/"><?php echo $l->t('Add your App');?></a>
+ <a class="button" target="_blank" href="http://owncloud.org/dev"><?php echo $l->t('Add your App');?></a>
<a class="button" target="_blank" href="http://apps.owncloud.com"><?php echo $l->t('More Apps');?></a>
</div>
<ul id="leftcontent" class="applist">
@@ -15,7 +15,7 @@
<li <?php if($app['active']) echo 'class="active"'?> data-id="<?php echo $app['id'] ?>" <?php if ( isset( $app['ocs_id'] ) ) { echo "data-id-ocs=\"{$app['ocs_id']}\""; } ?>
data-type="<?php echo $app['internal'] ? 'internal' : 'external' ?>" data-installed="1">
<a class="app<?php if(!$app['internal']) echo ' externalapp' ?>" href="?appid=<?php echo $app['id'] ?>"><?php echo htmlentities($app['name']) ?></a>
- <?php if(!$app['internal']) echo '<small class="externalapp list">3rd party</small>' ?>
+ <?php if(!$app['internal']) echo '<small class="'.$app['internalclass'].' list">'.$app['internallabel'].'</small>' ?>
</li>
<?php endforeach;?>
</ul>
@@ -28,5 +28,6 @@
<p class="appslink hidden"><a href="#" target="_blank"><?php echo $l->t('See application page at apps.owncloud.com');?></a></p>
<p class="license hidden"><?php echo $l->t('<span class="licence"></span>-licensed by <span class="author"></span>');?></p>
<input class="enable hidden" type="submit" />
+ <input class="update hidden" type="submit" value="<?php echo($l->t('Update')); ?>" />
</div>
-</div> \ No newline at end of file
+</div>
diff --git a/settings/templates/users.php b/settings/templates/users.php
index f30c21efaef..4d7c29678ce 100644
--- a/settings/templates/users.php
+++ b/settings/templates/users.php
@@ -94,11 +94,11 @@ $_['subadmingroups'] = array_flip($items);
<td class="name"><?php echo $user["name"]; ?></td>
<td class="displayName"><span><?php echo $user["displayName"]; ?></span> <img class="svg action"
src="<?php echo image_path('core', 'actions/rename.svg')?>"
- alt="change display name" title="change display name"/>
+ alt="<?php echo $l->t("change display name")?>" title="<?php echo $l->t("change display name")?>"/>
</td>
<td class="password"><span>â—â—â—â—â—â—â—</span> <img class="svg action"
src="<?php echo image_path('core', 'actions/rename.svg')?>"
- alt="set new password" title="set new password"/>
+ alt="<?php echo $l->t("set new password")?>" title="<?php echo $l->t("set new password")?>"/>
</td>
<td class="groups"><select
class="groupsselect"
diff --git a/tests/lib/cache/file.php b/tests/lib/cache/file.php
index d64627198e0..5dcd3268804 100644
--- a/tests/lib/cache/file.php
+++ b/tests/lib/cache/file.php
@@ -38,8 +38,8 @@ class Test_Cache_File extends Test_Cache {
}
//set up temporary storage
- OC_Filesystem::clearMounts();
- OC_Filesystem::mount('OC_Filestorage_Temporary', array(), '/');
+ \OC\Files\Filesystem::clearMounts();
+ \OC\Files\Filesystem::mount('\OC\Files\Storage\Temporary',array(),'/');
OC_User::clearBackends();
OC_User::useBackend(new OC_User_Dummy());
@@ -51,7 +51,7 @@ class Test_Cache_File extends Test_Cache {
OC_User::setUserId('test');
//set up the users dir
- $rootView=new OC_FilesystemView('');
+ $rootView=new \OC\Files\View('');
$rootView->mkdir('/test');
$this->instance=new OC_Cache_File();
diff --git a/tests/lib/files/cache/cache.php b/tests/lib/files/cache/cache.php
new file mode 100644
index 00000000000..c466fbb63e7
--- /dev/null
+++ b/tests/lib/files/cache/cache.php
@@ -0,0 +1,215 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Files\Cache;
+
+class Cache extends \PHPUnit_Framework_TestCase {
+ /**
+ * @var \OC\Files\Storage\Temporary $storage;
+ */
+ private $storage;
+
+ /**
+ * @var \OC\Files\Cache\Cache $cache
+ */
+ private $cache;
+
+ public function testSimple() {
+ $file1 = 'foo';
+ $file2 = 'foo/bar';
+ $data1 = array('size' => 100, 'mtime' => 50, 'mimetype' => 'foo/folder');
+ $data2 = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'foo/file');
+
+ $this->assertFalse($this->cache->inCache($file1));
+ $this->assertEquals($this->cache->get($file1), null);
+
+ $id1 = $this->cache->put($file1, $data1);
+ $this->assertTrue($this->cache->inCache($file1));
+ $cacheData1 = $this->cache->get($file1);
+ foreach ($data1 as $key => $value) {
+ $this->assertEquals($value, $cacheData1[$key]);
+ }
+ $this->assertEquals($cacheData1['mimepart'], 'foo');
+ $this->assertEquals($cacheData1['fileid'], $id1);
+ $this->assertEquals($id1, $this->cache->getId($file1));
+
+ $this->assertFalse($this->cache->inCache($file2));
+ $id2 = $this->cache->put($file2, $data2);
+ $this->assertTrue($this->cache->inCache($file2));
+ $cacheData2 = $this->cache->get($file2);
+ foreach ($data2 as $key => $value) {
+ $this->assertEquals($value, $cacheData2[$key]);
+ }
+ $this->assertEquals($cacheData1['fileid'], $cacheData2['parent']);
+ $this->assertEquals($cacheData2['fileid'], $id2);
+ $this->assertEquals($id2, $this->cache->getId($file2));
+ $this->assertEquals($id1, $this->cache->getParentId($file2));
+
+ $newSize = 1050;
+ $newId2 = $this->cache->put($file2, array('size' => $newSize));
+ $cacheData2 = $this->cache->get($file2);
+ $this->assertEquals($newId2, $id2);
+ $this->assertEquals($cacheData2['size'], $newSize);
+ $this->assertEquals($cacheData1, $this->cache->get($file1));
+
+ $this->cache->remove($file2);
+ $this->assertFalse($this->cache->inCache($file2));
+ $this->assertEquals($this->cache->get($file2), null);
+ $this->assertTrue($this->cache->inCache($file1));
+
+ $this->assertEquals($cacheData1, $this->cache->get($id1));
+ }
+
+ public function testPartial() {
+ $file1 = 'foo';
+
+ $this->cache->put($file1, array('size' => 10));
+ $this->assertEquals(array('size' => 10), $this->cache->get($file1));
+
+ $this->cache->put($file1, array('mtime' => 15));
+ $this->assertEquals(array('size' => 10, 'mtime' => 15), $this->cache->get($file1));
+
+ $this->cache->put($file1, array('size' => 12));
+ $this->assertEquals(array('size' => 12, 'mtime' => 15), $this->cache->get($file1));
+ }
+
+ public function testFolder() {
+ $file1 = 'folder';
+ $file2 = 'folder/bar';
+ $file3 = 'folder/foo';
+ $data1 = array('size' => 100, 'mtime' => 50, 'mimetype' => 'httpd/unix-directory');
+ $fileData = array();
+ $fileData['bar'] = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'foo/file');
+ $fileData['foo'] = array('size' => 20, 'mtime' => 25, 'mimetype' => 'foo/file');
+
+ $this->cache->put($file1, $data1);
+ $this->cache->put($file2, $fileData['bar']);
+ $this->cache->put($file3, $fileData['foo']);
+
+ $content = $this->cache->getFolderContents($file1);
+ $this->assertEquals(count($content), 2);
+ foreach ($content as $cachedData) {
+ $data = $fileData[$cachedData['name']];
+ foreach ($data as $name => $value) {
+ $this->assertEquals($value, $cachedData[$name]);
+ }
+ }
+
+ $file4 = 'folder/unkownSize';
+ $fileData['unkownSize'] = array('size' => -1, 'mtime' => 25, 'mimetype' => 'foo/file');
+ $this->cache->put($file4, $fileData['unkownSize']);
+
+ $this->assertEquals(-1, $this->cache->calculateFolderSize($file1));
+
+ $fileData['unkownSize'] = array('size' => 5, 'mtime' => 25, 'mimetype' => 'foo/file');
+ $this->cache->put($file4, $fileData['unkownSize']);
+
+ $this->assertEquals(1025, $this->cache->calculateFolderSize($file1));
+
+ $this->cache->remove('folder');
+ $this->assertFalse($this->cache->inCache('folder/foo'));
+ $this->assertFalse($this->cache->inCache('folder/bar'));
+ }
+
+ function testStatus() {
+ $this->assertEquals(\OC\Files\Cache\Cache::NOT_FOUND, $this->cache->getStatus('foo'));
+ $this->cache->put('foo', array('size' => -1));
+ $this->assertEquals(\OC\Files\Cache\Cache::PARTIAL, $this->cache->getStatus('foo'));
+ $this->cache->put('foo', array('size' => -1, 'mtime' => 20, 'mimetype' => 'foo/file'));
+ $this->assertEquals(\OC\Files\Cache\Cache::SHALLOW, $this->cache->getStatus('foo'));
+ $this->cache->put('foo', array('size' => 10));
+ $this->assertEquals(\OC\Files\Cache\Cache::COMPLETE, $this->cache->getStatus('foo'));
+ }
+
+ function testSearch() {
+ $file1 = 'folder';
+ $file2 = 'folder/foobar';
+ $file3 = 'folder/foo';
+ $data1 = array('size' => 100, 'mtime' => 50, 'mimetype' => 'foo/folder');
+ $fileData = array();
+ $fileData['foobar'] = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'foo/file');
+ $fileData['foo'] = array('size' => 20, 'mtime' => 25, 'mimetype' => 'foo/file');
+
+ $this->cache->put($file1, $data1);
+ $this->cache->put($file2, $fileData['foobar']);
+ $this->cache->put($file3, $fileData['foo']);
+
+ $this->assertEquals(2, count($this->cache->search('%foo%')));
+ $this->assertEquals(1, count($this->cache->search('foo')));
+ $this->assertEquals(1, count($this->cache->search('%folder%')));
+ $this->assertEquals(1, count($this->cache->search('folder%')));
+ $this->assertEquals(3, count($this->cache->search('%')));
+
+ $this->assertEquals(3, count($this->cache->searchByMime('foo')));
+ $this->assertEquals(2, count($this->cache->searchByMime('foo/file')));
+ }
+
+ function testMove() {
+ $file1 = 'folder';
+ $file2 = 'folder/bar';
+ $file3 = 'folder/foo';
+ $file4 = 'folder/foo/1';
+ $file5 = 'folder/foo/2';
+ $data = array('size' => 100, 'mtime' => 50, 'mimetype' => 'foo/bar');
+
+ $this->cache->put($file1, $data);
+ $this->cache->put($file2, $data);
+ $this->cache->put($file3, $data);
+ $this->cache->put($file4, $data);
+ $this->cache->put($file5, $data);
+
+ $this->cache->move('folder/foo', 'folder/foobar');
+
+ $this->assertFalse($this->cache->inCache('folder/foo'));
+ $this->assertFalse($this->cache->inCache('folder/foo/1'));
+ $this->assertFalse($this->cache->inCache('folder/foo/2'));
+
+ $this->assertTrue($this->cache->inCache('folder/bar'));
+ $this->assertTrue($this->cache->inCache('folder/foobar'));
+ $this->assertTrue($this->cache->inCache('folder/foobar/1'));
+ $this->assertTrue($this->cache->inCache('folder/foobar/2'));
+ }
+
+ function testGetIncomplete() {
+ $file1 = 'folder1';
+ $file2 = 'folder2';
+ $file3 = 'folder3';
+ $file4 = 'folder4';
+ $data = array('size' => 10, 'mtime' => 50, 'mimetype' => 'foo/bar');
+
+ $this->cache->put($file1, $data);
+ $data['size'] = -1;
+ $this->cache->put($file2, $data);
+ $this->cache->put($file3, $data);
+ $data['size'] = 12;
+ $this->cache->put($file4, $data);
+
+ $this->assertEquals($file3, $this->cache->getIncomplete());
+ }
+
+ function testNonExisting() {
+ $this->assertFalse($this->cache->get('foo.txt'));
+ $this->assertEquals(array(), $this->cache->getFolderContents('foo'));
+ }
+
+ function testGetById() {
+ $storageId = $this->storage->getId();
+ $data = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'foo/file');
+ $id = $this->cache->put('foo', $data);
+ $this->assertEquals(array($storageId, 'foo'), \OC\Files\Cache\Cache::getById($id));
+ }
+
+ public function tearDown() {
+ $this->cache->clear();
+ }
+
+ public function setUp() {
+ $this->storage = new \OC\Files\Storage\Temporary(array());
+ $this->cache = new \OC\Files\Cache\Cache($this->storage);
+ }
+}
diff --git a/tests/lib/files/cache/permissions.php b/tests/lib/files/cache/permissions.php
new file mode 100644
index 00000000000..56dbbc4518e
--- /dev/null
+++ b/tests/lib/files/cache/permissions.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Files\Cache;
+
+class Permissions extends \PHPUnit_Framework_TestCase {
+ /***
+ * @var \OC\Files\Cache\Permissions $permissionsCache
+ */
+ private $permissionsCache;
+
+ function setUp(){
+ $this->permissionsCache=new \OC\Files\Cache\Permissions('dummy');
+ }
+
+ function testSimple() {
+ $ids = range(1, 10);
+ $user = uniqid();
+
+ $this->assertEquals(-1, $this->permissionsCache->get(1, $user));
+ $this->permissionsCache->set(1, $user, 1);
+ $this->assertEquals(1, $this->permissionsCache->get(1, $user));
+ $this->assertEquals(-1, $this->permissionsCache->get(2, $user));
+ $this->assertEquals(-1, $this->permissionsCache->get(1, $user . '2'));
+
+ $this->permissionsCache->set(1, $user, 2);
+ $this->assertEquals(2, $this->permissionsCache->get(1, $user));
+
+ $this->permissionsCache->set(2, $user, 1);
+ $this->assertEquals(1, $this->permissionsCache->get(2, $user));
+
+ $this->permissionsCache->remove(1, $user);
+ $this->assertEquals(-1, $this->permissionsCache->get(1, $user));
+ $this->permissionsCache->remove(1, $user . '2');
+ $this->assertEquals(1, $this->permissionsCache->get(2, $user));
+
+ $expected = array();
+ foreach ($ids as $id) {
+ $this->permissionsCache->set($id, $user, 10 + $id);
+ $expected[$id] = 10 + $id;
+ }
+ $this->assertEquals($expected, $this->permissionsCache->getMultiple($ids, $user));
+
+ $this->permissionsCache->removeMultiple(array(10, 9), $user);
+ unset($expected[9]);
+ unset($expected[10]);
+ $this->assertEquals($expected, $this->permissionsCache->getMultiple($ids, $user));
+
+ $this->permissionsCache->removeMultiple($ids, $user);
+ }
+}
diff --git a/tests/lib/files/cache/scanner.php b/tests/lib/files/cache/scanner.php
new file mode 100644
index 00000000000..3885c99e6d3
--- /dev/null
+++ b/tests/lib/files/cache/scanner.php
@@ -0,0 +1,141 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Files\Cache;
+
+class Scanner extends \PHPUnit_Framework_TestCase {
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ */
+ private $storage;
+
+ /**
+ * @var \OC\Files\Cache\Scanner $scanner
+ */
+ private $scanner;
+
+ /**
+ * @var \OC\Files\Cache\Cache $cache
+ */
+ private $cache;
+
+ function testFile() {
+ $data = "dummy file data\n";
+ $this->storage->file_put_contents('foo.txt', $data);
+ $this->scanner->scanFile('foo.txt');
+
+ $this->assertEquals($this->cache->inCache('foo.txt'), true);
+ $cachedData = $this->cache->get('foo.txt');
+ $this->assertEquals($cachedData['size'], strlen($data));
+ $this->assertEquals($cachedData['mimetype'], 'text/plain');
+ $this->assertNotEquals($cachedData['parent'], -1); //parent folders should be scanned automatically
+
+ $data = file_get_contents(\OC::$SERVERROOT . '/core/img/logo.png');
+ $this->storage->file_put_contents('foo.png', $data);
+ $this->scanner->scanFile('foo.png');
+
+ $this->assertEquals($this->cache->inCache('foo.png'), true);
+ $cachedData = $this->cache->get('foo.png');
+ $this->assertEquals($cachedData['size'], strlen($data));
+ $this->assertEquals($cachedData['mimetype'], 'image/png');
+ }
+
+ private function fillTestFolders() {
+ $textData = "dummy file data\n";
+ $imgData = file_get_contents(\OC::$SERVERROOT . '/core/img/logo.png');
+ $this->storage->mkdir('folder');
+ $this->storage->file_put_contents('foo.txt', $textData);
+ $this->storage->file_put_contents('foo.png', $imgData);
+ $this->storage->file_put_contents('folder/bar.txt', $textData);
+ }
+
+ function testFolder() {
+ $this->fillTestFolders();
+
+ $this->scanner->scan('');
+ $this->assertEquals($this->cache->inCache(''), true);
+ $this->assertEquals($this->cache->inCache('foo.txt'), true);
+ $this->assertEquals($this->cache->inCache('foo.png'), true);
+ $this->assertEquals($this->cache->inCache('folder'), true);
+ $this->assertEquals($this->cache->inCache('folder/bar.txt'), true);
+
+ $cachedDataText = $this->cache->get('foo.txt');
+ $cachedDataText2 = $this->cache->get('foo.txt');
+ $cachedDataImage = $this->cache->get('foo.png');
+ $cachedDataFolder = $this->cache->get('');
+ $cachedDataFolder2 = $this->cache->get('folder');
+
+ $this->assertEquals($cachedDataImage['parent'], $cachedDataText['parent']);
+ $this->assertEquals($cachedDataFolder['fileid'], $cachedDataImage['parent']);
+ $this->assertEquals($cachedDataFolder['size'], $cachedDataImage['size'] + $cachedDataText['size'] + $cachedDataText2['size']);
+ $this->assertEquals($cachedDataFolder2['size'], $cachedDataText2['size']);
+ }
+
+ function testShallow() {
+ $this->fillTestFolders();
+
+ $this->scanner->scan('', \OC\Files\Cache\Scanner::SCAN_SHALLOW);
+ $this->assertEquals($this->cache->inCache(''), true);
+ $this->assertEquals($this->cache->inCache('foo.txt'), true);
+ $this->assertEquals($this->cache->inCache('foo.png'), true);
+ $this->assertEquals($this->cache->inCache('folder'), true);
+ $this->assertEquals($this->cache->inCache('folder/bar.txt'), false);
+
+ $cachedDataFolder = $this->cache->get('');
+ $cachedDataFolder2 = $this->cache->get('folder');
+
+ $this->assertEquals(-1, $cachedDataFolder['size']);
+ $this->assertEquals(-1, $cachedDataFolder2['size']);
+
+ $this->scanner->scan('folder', \OC\Files\Cache\Scanner::SCAN_SHALLOW);
+
+ $cachedDataFolder2 = $this->cache->get('folder');
+
+ $this->assertNotEquals($cachedDataFolder2['size'], -1);
+
+ $this->cache->correctFolderSize('folder');
+
+ $cachedDataFolder = $this->cache->get('');
+ $this->assertNotEquals($cachedDataFolder['size'], -1);
+ }
+
+ function testBackgroundScan(){
+ $this->fillTestFolders();
+ $this->storage->mkdir('folder2');
+ $this->storage->file_put_contents('folder2/bar.txt', 'foobar');
+
+ $this->scanner->scan('', \OC\Files\Cache\Scanner::SCAN_SHALLOW);
+ $this->assertFalse($this->cache->inCache('folder/bar.txt'));
+ $this->assertFalse($this->cache->inCache('folder/2bar.txt'));
+ $cachedData = $this->cache->get('');
+ $this->assertEquals(-1, $cachedData['size']);
+
+ $this->scanner->backgroundScan();
+
+ $this->assertTrue($this->cache->inCache('folder/bar.txt'));
+ $this->assertTrue($this->cache->inCache('folder/bar.txt'));
+
+ $cachedData = $this->cache->get('');
+ $this->assertnotEquals(-1, $cachedData['size']);
+
+ $this->assertFalse($this->cache->getIncomplete());
+ }
+
+ function setUp() {
+ $this->storage = new \OC\Files\Storage\Temporary(array());
+ $this->scanner = new \OC\Files\Cache\Scanner($this->storage);
+ $this->cache = new \OC\Files\Cache\Cache($this->storage);
+ }
+
+ function tearDown() {
+ $ids = $this->cache->getAll();
+ $permissionsCache = $this->storage->getPermissionsCache();
+ $permissionsCache->removeMultiple($ids, \OC_User::getUser());
+ $this->cache->clear();
+ }
+}
diff --git a/tests/lib/files/cache/updater.php b/tests/lib/files/cache/updater.php
new file mode 100644
index 00000000000..b83dd0c26e5
--- /dev/null
+++ b/tests/lib/files/cache/updater.php
@@ -0,0 +1,147 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Files\Cache;
+
+use \OC\Files\Filesystem as Filesystem;
+
+class Updater extends \PHPUnit_Framework_TestCase {
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ */
+ private $storage;
+
+ /**
+ * @var \OC\Files\Cache\Scanner $scanner
+ */
+ private $scanner;
+
+ /**
+ * @var \OC\Files\Cache\Cache $cache
+ */
+ private $cache;
+
+ private static $user;
+
+ public function setUp() {
+ $this->storage = new \OC\Files\Storage\Temporary(array());
+ $textData = "dummy file data\n";
+ $imgData = file_get_contents(\OC::$SERVERROOT . '/core/img/logo.png');
+ $this->storage->mkdir('folder');
+ $this->storage->file_put_contents('foo.txt', $textData);
+ $this->storage->file_put_contents('foo.png', $imgData);
+ $this->storage->file_put_contents('folder/bar.txt', $textData);
+ $this->storage->file_put_contents('folder/bar2.txt', $textData);
+
+ $this->scanner = $this->storage->getScanner();
+ $this->scanner->scan('');
+ $this->cache = $this->storage->getCache();
+
+ if (!self::$user) {
+ if (!\OC\Files\Filesystem::getView()) {
+ self::$user = uniqid();
+ \OC\Files\Filesystem::init('/' . self::$user . '/files');
+ } else {
+ self::$user = \OC_User::getUser();
+ }
+ }
+
+ Filesystem::clearMounts();
+ Filesystem::mount($this->storage, array(), '/' . self::$user . '/files');
+
+ \OC_Hook::connect('OC_Filesystem', 'post_write', '\OC\Files\Cache\Updater', 'writeHook');
+ \OC_Hook::connect('OC_Filesystem', 'post_delete', '\OC\Files\Cache\Updater', 'deleteHook');
+ \OC_Hook::connect('OC_Filesystem', 'post_rename', '\OC\Files\Cache\Updater', 'renameHook');
+
+ }
+
+ public function tearDown() {
+ if ($this->cache) {
+ $this->cache->clear();
+ }
+ Filesystem::tearDown();
+ }
+
+ public function testWrite() {
+ $textSize = strlen("dummy file data\n");
+ $imageSize = filesize(\OC::$SERVERROOT . '/core/img/logo.png');
+ $rootCachedData = $this->cache->get('');
+ $this->assertEquals(3 * $textSize + $imageSize, $rootCachedData['size']);
+
+ $fooCachedData = $this->cache->get('foo.txt');
+ Filesystem::file_put_contents('foo.txt', 'asd');
+ $cachedData = $this->cache->get('foo.txt');
+ $this->assertEquals(3, $cachedData['size']);
+ $this->assertNotEquals($fooCachedData['etag'], $cachedData['etag']);
+ $mtime = $cachedData['mtime'];
+ $cachedData = $this->cache->get('');
+ $this->assertEquals(2 * $textSize + $imageSize + 3, $cachedData['size']);
+ $this->assertNotEquals($rootCachedData['etag'], $cachedData['etag']);
+ $this->assertGreaterThanOrEqual($rootCachedData['mtime'], $mtime);
+ $rootCachedData = $cachedData;
+
+ $this->assertFalse($this->cache->inCache('bar.txt'));
+ Filesystem::file_put_contents('bar.txt', 'asd');
+ $this->assertTrue($this->cache->inCache('bar.txt'));
+ $cachedData = $this->cache->get('bar.txt');
+ $this->assertEquals(3, $cachedData['size']);
+ $mtime = $cachedData['mtime'];
+ $cachedData = $this->cache->get('');
+ $this->assertEquals(2 * $textSize + $imageSize + 2 * 3, $cachedData['size']);
+ $this->assertNotEquals($rootCachedData['etag'], $cachedData['etag']);
+ $this->assertGreaterThanOrEqual($rootCachedData['mtime'], $mtime);
+ }
+
+ public function testDelete() {
+ $textSize = strlen("dummy file data\n");
+ $imageSize = filesize(\OC::$SERVERROOT . '/core/img/logo.png');
+ $rootCachedData = $this->cache->get('');
+ $this->assertEquals(3 * $textSize + $imageSize, $rootCachedData['size']);
+
+ $this->assertTrue($this->cache->inCache('foo.txt'));
+ Filesystem::unlink('foo.txt', 'asd');
+ $this->assertFalse($this->cache->inCache('foo.txt'));
+ $cachedData = $this->cache->get('');
+ $this->assertEquals(2 * $textSize + $imageSize, $cachedData['size']);
+ $this->assertNotEquals($rootCachedData['etag'], $cachedData['etag']);
+ $this->assertGreaterThanOrEqual($rootCachedData['mtime'], $cachedData['mtime']);
+ $rootCachedData = $cachedData;
+
+ Filesystem::mkdir('bar_folder');
+ $this->assertTrue($this->cache->inCache('bar_folder'));
+ $cachedData = $this->cache->get('');
+ $this->assertNotEquals($rootCachedData['etag'], $cachedData['etag']);
+ $rootCachedData = $cachedData;
+ Filesystem::rmdir('bar_folder');
+ $this->assertFalse($this->cache->inCache('bar_folder'));
+ $cachedData = $this->cache->get('');
+ $this->assertNotEquals($rootCachedData['etag'], $cachedData['etag']);
+ $this->assertGreaterThanOrEqual($rootCachedData['mtime'], $cachedData['mtime']);
+ }
+
+ public function testRename() {
+ $textSize = strlen("dummy file data\n");
+ $imageSize = filesize(\OC::$SERVERROOT . '/core/img/logo.png');
+ $rootCachedData = $this->cache->get('');
+ $this->assertEquals(3 * $textSize + $imageSize, $rootCachedData['size']);
+
+ $this->assertTrue($this->cache->inCache('foo.txt'));
+ $fooCachedData = $this->cache->get('foo.txt');
+ $this->assertFalse($this->cache->inCache('bar.txt'));
+ Filesystem::rename('foo.txt', 'bar.txt');
+ $this->assertFalse($this->cache->inCache('foo.txt'));
+ $this->assertTrue($this->cache->inCache('bar.txt'));
+ $cachedData = $this->cache->get('bar.txt');
+ $this->assertNotEquals($fooCachedData['etag'], $cachedData['etag']);
+ $mtime = $cachedData['mtime'];
+ $cachedData = $this->cache->get('');
+ $this->assertEquals(3 * $textSize + $imageSize, $cachedData['size']);
+ $this->assertNotEquals($rootCachedData['etag'], $cachedData['etag']);
+ $this->assertEquals($mtime, $cachedData['mtime']);
+ }
+}
diff --git a/tests/lib/files/cache/watcher.php b/tests/lib/files/cache/watcher.php
new file mode 100644
index 00000000000..e8a1689cab0
--- /dev/null
+++ b/tests/lib/files/cache/watcher.php
@@ -0,0 +1,121 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Files\Cache;
+
+class Watcher extends \PHPUnit_Framework_TestCase {
+
+ /**
+ * @var \OC\Files\Storage\Storage[] $storages;
+ */
+ private $storages = array();
+
+ public function setUp() {
+ \OC\Files\Filesystem::clearMounts();
+ }
+
+ public function tearDown() {
+ foreach ($this->storages as $storage) {
+ $cache = $storage->getCache();
+ $ids = $cache->getAll();
+ $permissionsCache = $storage->getPermissionsCache();
+ $permissionsCache->removeMultiple($ids, \OC_User::getUser());
+ $cache->clear();
+ }
+ }
+
+ function testWatcher() {
+ $storage = $this->getTestStorage();
+ $cache = $storage->getCache();
+ $updater = $storage->getWatcher();
+
+ //set the mtime to the past so it can detect an mtime change
+ $cache->put('', array('mtime' => 10));
+
+ $this->assertTrue($cache->inCache('folder/bar.txt'));
+ $this->assertTrue($cache->inCache('folder/bar2.txt'));
+
+ $this->assertFalse($cache->inCache('bar.test'));
+ $storage->file_put_contents('bar.test', 'foo');
+ $updater->checkUpdate('');
+ $this->assertTrue($cache->inCache('bar.test'));
+ $cachedData = $cache->get('bar.test');
+ $this->assertEquals(3, $cachedData['size']);
+
+ $cache->put('bar.test', array('mtime' => 10));
+ $storage->file_put_contents('bar.test', 'test data');
+
+ $updater->checkUpdate('bar.test');
+ $cachedData = $cache->get('bar.test');
+ $this->assertEquals(9, $cachedData['size']);
+
+ $cache->put('folder', array('mtime' => 10));
+
+ $storage->unlink('folder/bar2.txt');
+ $updater->checkUpdate('folder');
+
+ $this->assertTrue($cache->inCache('folder/bar.txt'));
+ $this->assertFalse($cache->inCache('folder/bar2.txt'));
+ }
+
+ public function testFileToFolder() {
+ $storage = $this->getTestStorage();
+ $cache = $storage->getCache();
+ $updater = $storage->getWatcher();
+
+ //set the mtime to the past so it can detect an mtime change
+ $cache->put('', array('mtime' => 10));
+
+ $storage->unlink('foo.txt');
+ $storage->rename('folder', 'foo.txt');
+ $updater->checkUpdate('');
+
+ $entry = $cache->get('foo.txt');
+ $this->assertEquals(-1, $entry['size']);
+ $this->assertEquals('httpd/unix-directory', $entry['mimetype']);
+ $this->assertFalse($cache->inCache('folder'));
+ $this->assertFalse($cache->inCache('folder/bar.txt'));
+
+ $storage = $this->getTestStorage();
+ $cache = $storage->getCache();
+ $updater = $storage->getWatcher();
+
+ //set the mtime to the past so it can detect an mtime change
+ $cache->put('foo.txt', array('mtime' => 10));
+
+ $storage->unlink('foo.txt');
+ $storage->rename('folder', 'foo.txt');
+ $updater->checkUpdate('foo.txt');
+
+ $entry = $cache->get('foo.txt');
+ $this->assertEquals('httpd/unix-directory', $entry['mimetype']);
+ $this->assertTrue($cache->inCache('foo.txt/bar.txt'));
+ }
+
+ /**
+ * @param bool $scan
+ * @return \OC\Files\Storage\Storage
+ */
+ private function getTestStorage($scan = true) {
+ $storage = new \OC\Files\Storage\Temporary(array());
+ $textData = "dummy file data\n";
+ $imgData = file_get_contents(\OC::$SERVERROOT . '/core/img/logo.png');
+ $storage->mkdir('folder');
+ $storage->file_put_contents('foo.txt', $textData);
+ $storage->file_put_contents('foo.png', $imgData);
+ $storage->file_put_contents('folder/bar.txt', $textData);
+ $storage->file_put_contents('folder/bar2.txt', $textData);
+
+ if ($scan) {
+ $scanner = $storage->getScanner();
+ $scanner->scan('');
+ }
+ $this->storages[] = $storage;
+ return $storage;
+ }
+}
diff --git a/tests/lib/files/filesystem.php b/tests/lib/files/filesystem.php
new file mode 100644
index 00000000000..5837093fdd6
--- /dev/null
+++ b/tests/lib/files/filesystem.php
@@ -0,0 +1,110 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Robin Appelman
+ * @copyright 2012 Robin Appelman icewind@owncloud.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test\Files;
+
+class Filesystem extends \PHPUnit_Framework_TestCase {
+ /**
+ * @var array tmpDirs
+ */
+ private $tmpDirs=array();
+
+ /**
+ * @return array
+ */
+ private function getStorageData() {
+ $dir = \OC_Helper::tmpFolder();
+ $this->tmpDirs[] = $dir;
+ return array('datadir' => $dir);
+ }
+
+ public function tearDown() {
+ foreach ($this->tmpDirs as $dir) {
+ \OC_Helper::rmdirr($dir);
+ }
+ }
+
+ public function setUp() {
+ \OC\Files\Filesystem::clearMounts();
+ }
+
+ public function testMount() {
+ \OC\Files\Filesystem::mount('\OC\Files\Storage\Local',self::getStorageData(),'/');
+ $this->assertEquals('/',\OC\Files\Filesystem::getMountPoint('/'));
+ $this->assertEquals('/',\OC\Files\Filesystem::getMountPoint('/some/folder'));
+ list( , $internalPath)=\OC\Files\Filesystem::resolvePath('/');
+ $this->assertEquals('',$internalPath);
+ list( , $internalPath)=\OC\Files\Filesystem::resolvePath('/some/folder');
+ $this->assertEquals('some/folder',$internalPath);
+
+ \OC\Files\Filesystem::mount('\OC\Files\Storage\Local',self::getStorageData(),'/some');
+ $this->assertEquals('/',\OC\Files\Filesystem::getMountPoint('/'));
+ $this->assertEquals('/some/',\OC\Files\Filesystem::getMountPoint('/some/folder'));
+ $this->assertEquals('/some/',\OC\Files\Filesystem::getMountPoint('/some/'));
+ $this->assertEquals('/some/',\OC\Files\Filesystem::getMountPoint('/some'));
+ list( , $internalPath)=\OC\Files\Filesystem::resolvePath('/some/folder');
+ $this->assertEquals('folder',$internalPath);
+ }
+
+ public function testNormalize() {
+ $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('/path/'));
+ $this->assertEquals('/path/', \OC\Files\Filesystem::normalizePath('/path/', false));
+ $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('path'));
+ $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('\path'));
+ $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo//bar/'));
+ $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo////bar'));
+ if (class_exists('Normalizer')) {
+ $this->assertEquals("/foo/bar\xC3\xBC", \OC\Files\Filesystem::normalizePath("/foo/baru\xCC\x88"));
+ }
+ }
+
+ public function testHooks() {
+ if(\OC\Files\Filesystem::getView()){
+ $user = \OC_User::getUser();
+ }else{
+ $user=uniqid();
+ \OC\Files\Filesystem::init('/'.$user.'/files');
+ }
+ \OC_Hook::clear('OC_Filesystem');
+ \OC_Hook::connect('OC_Filesystem', 'post_write', $this, 'dummyHook');
+
+ \OC\Files\Filesystem::mount('OC\Files\Storage\Temporary', array(), '/');
+
+ $rootView=new \OC\Files\View('');
+ $rootView->mkdir('/'.$user);
+ $rootView->mkdir('/'.$user.'/files');
+
+ \OC\Files\Filesystem::file_put_contents('/foo', 'foo');
+ \OC\Files\Filesystem::mkdir('/bar');
+ \OC\Files\Filesystem::file_put_contents('/bar//foo', 'foo');
+
+ $tmpFile = \OC_Helper::tmpFile();
+ file_put_contents($tmpFile, 'foo');
+ $fh = fopen($tmpFile, 'r');
+ \OC\Files\Filesystem::file_put_contents('/bar//foo', $fh);
+ }
+
+ public function dummyHook($arguments) {
+ $path = $arguments['path'];
+ $this->assertEquals($path, \OC\Files\Filesystem::normalizePath($path)); //the path passed to the hook should already be normalized
+ }
+}
diff --git a/tests/lib/files/mount.php b/tests/lib/files/mount.php
new file mode 100644
index 00000000000..f223f0f6c53
--- /dev/null
+++ b/tests/lib/files/mount.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Files;
+
+use \OC\Files\Storage\Temporary;
+
+class Mount extends \PHPUnit_Framework_TestCase {
+ public function setup() {
+ \OC_Util::setupFS();
+ \OC\Files\Mount::clear();
+ }
+
+ public function testFind() {
+ $this->assertNull(\OC\Files\Mount::find('/'));
+
+ $rootMount = new \OC\Files\Mount(new Temporary(array()), '/');
+ $this->assertEquals($rootMount, \OC\Files\Mount::find('/'));
+ $this->assertEquals($rootMount, \OC\Files\Mount::find('/foo/bar'));
+
+ $storage = new Temporary(array());
+ $mount = new \OC\Files\Mount($storage, '/foo');
+ $this->assertEquals($rootMount, \OC\Files\Mount::find('/'));
+ $this->assertEquals($mount, \OC\Files\Mount::find('/foo/bar'));
+
+ $this->assertEquals(1, count(\OC\Files\Mount::findIn('/')));
+ new \OC\Files\Mount(new Temporary(array()), '/bar');
+ $this->assertEquals(2, count(\OC\Files\Mount::findIn('/')));
+
+ $id = $mount->getStorageId();
+ $this->assertEquals(array($mount), \OC\Files\Mount::findById($id));
+
+ $mount2 = new \OC\Files\Mount($storage, '/foo/bar');
+ $this->assertEquals(array($mount, $mount2), \OC\Files\Mount::findById($id));
+ }
+}
diff --git a/tests/lib/filestorage/commontest.php b/tests/lib/files/storage/commontest.php
index 6719fcff4e8..744d4608420 100644
--- a/tests/lib/filestorage/commontest.php
+++ b/tests/lib/files/storage/commontest.php
@@ -20,7 +20,9 @@
*
*/
-class Test_Filestorage_CommonTest extends Test_FileStorage {
+namespace Test\Files\Storage;
+
+class CommonTest extends Storage {
/**
* @var string tmpDir
*/
@@ -30,11 +32,10 @@ class Test_Filestorage_CommonTest extends Test_FileStorage {
if(!file_exists($this->tmpDir)) {
mkdir($this->tmpDir);
}
- $this->instance=new OC_Filestorage_CommonTest(array('datadir'=>$this->tmpDir));
+ $this->instance=new \OC\Files\Storage\CommonTest(array('datadir'=>$this->tmpDir));
}
public function tearDown() {
- OC_Helper::rmdirr($this->tmpDir);
+ \OC_Helper::rmdirr($this->tmpDir);
}
}
-
diff --git a/tests/lib/filestorage/local.php b/tests/lib/files/storage/local.php
index d7d71e8f372..1aad138aa33 100644
--- a/tests/lib/filestorage/local.php
+++ b/tests/lib/files/storage/local.php
@@ -20,18 +20,20 @@
*
*/
-class Test_Filestorage_Local extends Test_FileStorage {
+namespace Test\Files\Storage;
+
+class Local extends Storage {
/**
* @var string tmpDir
*/
private $tmpDir;
public function setUp() {
- $this->tmpDir=OC_Helper::tmpFolder();
- $this->instance=new OC_Filestorage_Local(array('datadir'=>$this->tmpDir));
+ $this->tmpDir=\OC_Helper::tmpFolder();
+ $this->instance=new \OC\Files\Storage\Local(array('datadir'=>$this->tmpDir));
}
public function tearDown() {
- OC_Helper::rmdirr($this->tmpDir);
+ \OC_Helper::rmdirr($this->tmpDir);
}
}
diff --git a/tests/lib/filestorage.php b/tests/lib/files/storage/storage.php
index c408efb7543..781c0f92c92 100644
--- a/tests/lib/filestorage.php
+++ b/tests/lib/files/storage/storage.php
@@ -20,9 +20,11 @@
*
*/
-abstract class Test_FileStorage extends PHPUnit_Framework_TestCase {
+namespace Test\Files\Storage;
+
+abstract class Storage extends \PHPUnit_Framework_TestCase {
/**
- * @var OC_Filestorage instance
+ * @var \OC\Files\Storage\Storage instance
*/
protected $instance;
@@ -36,7 +38,7 @@ abstract class Test_FileStorage extends PHPUnit_Framework_TestCase {
$this->assertFalse($this->instance->is_file('/'), 'Root folder is a file');
$this->assertEquals('dir', $this->instance->filetype('/'));
- //without this, any further testing would be useless, not an acutal requirement for filestorage though
+ //without this, any further testing would be useless, not an actual requirement for filestorage though
$this->assertTrue($this->instance->isUpdatable('/'), 'Root folder is not writable');
}
@@ -83,7 +85,7 @@ abstract class Test_FileStorage extends PHPUnit_Framework_TestCase {
* test the various uses of file_get_contents and file_put_contents
*/
public function testGetPutContents() {
- $sourceFile = OC::$SERVERROOT . '/tests/data/lorem.txt';
+ $sourceFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
$sourceText = file_get_contents($sourceFile);
//fill a file with string data
@@ -103,21 +105,21 @@ abstract class Test_FileStorage extends PHPUnit_Framework_TestCase {
$this->assertEquals('httpd/unix-directory', $this->instance->getMimeType('/'));
$this->assertEquals(false, $this->instance->getMimeType('/non/existing/file'));
- $textFile = OC::$SERVERROOT . '/tests/data/lorem.txt';
+ $textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
$this->instance->file_put_contents('/lorem.txt', file_get_contents($textFile, 'r'));
$this->assertEquals('text/plain', $this->instance->getMimeType('/lorem.txt'));
- $pngFile = OC::$SERVERROOT . '/tests/data/logo-wide.png';
+ $pngFile = \OC::$SERVERROOT . '/tests/data/logo-wide.png';
$this->instance->file_put_contents('/logo-wide.png', file_get_contents($pngFile, 'r'));
$this->assertEquals('image/png', $this->instance->getMimeType('/logo-wide.png'));
- $svgFile = OC::$SERVERROOT . '/tests/data/logo-wide.svg';
+ $svgFile = \OC::$SERVERROOT . '/tests/data/logo-wide.svg';
$this->instance->file_put_contents('/logo-wide.svg', file_get_contents($svgFile, 'r'));
$this->assertEquals('image/svg+xml', $this->instance->getMimeType('/logo-wide.svg'));
}
public function testCopyAndMove() {
- $textFile = OC::$SERVERROOT . '/tests/data/lorem.txt';
+ $textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
$this->instance->file_put_contents('/source.txt', file_get_contents($textFile));
$this->instance->copy('/source.txt', '/target.txt');
$this->assertTrue($this->instance->file_exists('/target.txt'));
@@ -130,7 +132,7 @@ abstract class Test_FileStorage extends PHPUnit_Framework_TestCase {
}
public function testLocal() {
- $textFile = OC::$SERVERROOT . '/tests/data/lorem.txt';
+ $textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
$this->instance->file_put_contents('/lorem.txt', file_get_contents($textFile));
$localFile = $this->instance->getLocalFile('/lorem.txt');
$this->assertTrue(file_exists($localFile));
@@ -151,7 +153,7 @@ abstract class Test_FileStorage extends PHPUnit_Framework_TestCase {
}
public function testStat() {
- $textFile = OC::$SERVERROOT . '/tests/data/lorem.txt';
+ $textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
$ctimeStart = time();
$this->instance->file_put_contents('/lorem.txt', file_get_contents($textFile));
$this->assertTrue($this->instance->isReadable('/lorem.txt'));
@@ -200,11 +202,11 @@ abstract class Test_FileStorage extends PHPUnit_Framework_TestCase {
}
public function testSearch() {
- $textFile = OC::$SERVERROOT . '/tests/data/lorem.txt';
+ $textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
$this->instance->file_put_contents('/lorem.txt', file_get_contents($textFile, 'r'));
- $pngFile = OC::$SERVERROOT . '/tests/data/logo-wide.png';
+ $pngFile = \OC::$SERVERROOT . '/tests/data/logo-wide.png';
$this->instance->file_put_contents('/logo-wide.png', file_get_contents($pngFile, 'r'));
- $svgFile = OC::$SERVERROOT . '/tests/data/logo-wide.svg';
+ $svgFile = \OC::$SERVERROOT . '/tests/data/logo-wide.svg';
$this->instance->file_put_contents('/logo-wide.svg', file_get_contents($svgFile, 'r'));
$result = $this->instance->search('logo');
$this->assertEquals(2, count($result));
@@ -213,7 +215,7 @@ abstract class Test_FileStorage extends PHPUnit_Framework_TestCase {
}
public function testFOpen() {
- $textFile = OC::$SERVERROOT . '/tests/data/lorem.txt';
+ $textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
$fh = @$this->instance->fopen('foo', 'r');
if ($fh) {
diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php
new file mode 100644
index 00000000000..a064e44f3ef
--- /dev/null
+++ b/tests/lib/files/view.php
@@ -0,0 +1,251 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file. */
+
+namespace Test\Files;
+
+class View extends \PHPUnit_Framework_TestCase {
+ /**
+ * @var \OC\Files\Storage\Storage[] $storages;
+ */
+ private $storages = array();
+
+ public function setUp() {
+ \OC\Files\Filesystem::clearMounts();
+ }
+
+ public function tearDown() {
+ foreach ($this->storages as $storage) {
+ $cache = $storage->getCache();
+ $ids = $cache->getAll();
+ $permissionsCache = $storage->getPermissionsCache();
+ $permissionsCache->removeMultiple($ids, \OC_User::getUser());
+ $cache->clear();
+ }
+ }
+
+ public function testCacheAPI() {
+ $storage1 = $this->getTestStorage();
+ $storage2 = $this->getTestStorage();
+ $storage3 = $this->getTestStorage();
+ \OC\Files\Filesystem::mount($storage1, array(), '/');
+ \OC\Files\Filesystem::mount($storage2, array(), '/substorage');
+ \OC\Files\Filesystem::mount($storage3, array(), '/folder/anotherstorage');
+ $textSize = strlen("dummy file data\n");
+ $imageSize = filesize(\OC::$SERVERROOT . '/core/img/logo.png');
+ $storageSize = $textSize * 2 + $imageSize;
+
+ $rootView = new \OC\Files\View('');
+
+ $cachedData = $rootView->getFileInfo('/foo.txt');
+ $this->assertEquals($textSize, $cachedData['size']);
+ $this->assertEquals('text/plain', $cachedData['mimetype']);
+ $this->assertNotEquals(-1, $cachedData['permissions']);
+
+ $cachedData = $rootView->getFileInfo('/');
+ $this->assertEquals($storageSize * 3, $cachedData['size']);
+ $this->assertEquals('httpd/unix-directory', $cachedData['mimetype']);
+
+ $cachedData = $rootView->getFileInfo('/folder');
+ $this->assertEquals($storageSize + $textSize, $cachedData['size']);
+ $this->assertEquals('httpd/unix-directory', $cachedData['mimetype']);
+
+ $folderData = $rootView->getDirectoryContent('/');
+ /**
+ * expected entries:
+ * folder
+ * foo.png
+ * foo.txt
+ * substorage
+ */
+ $this->assertEquals(4, count($folderData));
+ $this->assertEquals('folder', $folderData[0]['name']);
+ $this->assertEquals('foo.png', $folderData[1]['name']);
+ $this->assertEquals('foo.txt', $folderData[2]['name']);
+ $this->assertEquals('substorage', $folderData[3]['name']);
+
+ $this->assertEquals($storageSize + $textSize, $folderData[0]['size']);
+ $this->assertEquals($imageSize, $folderData[1]['size']);
+ $this->assertEquals($textSize, $folderData[2]['size']);
+ $this->assertEquals($storageSize, $folderData[3]['size']);
+
+ $folderData = $rootView->getDirectoryContent('/substorage');
+ /**
+ * expected entries:
+ * folder
+ * foo.png
+ * foo.txt
+ */
+ $this->assertEquals(3, count($folderData));
+ $this->assertEquals('folder', $folderData[0]['name']);
+ $this->assertEquals('foo.png', $folderData[1]['name']);
+ $this->assertEquals('foo.txt', $folderData[2]['name']);
+
+ $folderView = new \OC\Files\View('/folder');
+ $this->assertEquals($rootView->getFileInfo('/folder'), $folderView->getFileInfo('/'));
+
+ $cachedData = $rootView->getFileInfo('/foo.txt');
+ $this->assertFalse($cachedData['encrypted']);
+ $id = $rootView->putFileInfo('/foo.txt', array('encrypted' => true));
+ $cachedData = $rootView->getFileInfo('/foo.txt');
+ $this->assertTrue($cachedData['encrypted']);
+ $this->assertEquals($cachedData['fileid'], $id);
+
+ $this->assertFalse($rootView->getFileInfo('/non/existing'));
+ $this->assertEquals(array(), $rootView->getDirectoryContent('/non/existing'));
+ }
+
+ function testGetPath() {
+ $storage1 = $this->getTestStorage();
+ $storage2 = $this->getTestStorage();
+ $storage3 = $this->getTestStorage();
+ \OC\Files\Filesystem::mount($storage1, array(), '/');
+ \OC\Files\Filesystem::mount($storage2, array(), '/substorage');
+ \OC\Files\Filesystem::mount($storage3, array(), '/folder/anotherstorage');
+
+ $rootView = new \OC\Files\View('');
+
+ $cachedData = $rootView->getFileInfo('/foo.txt');
+ $id1 = $cachedData['fileid'];
+ $this->assertEquals('/foo.txt', $rootView->getPath($id1));
+
+ $cachedData = $rootView->getFileInfo('/substorage/foo.txt');
+ $id2 = $cachedData['fileid'];
+ $this->assertEquals('/substorage/foo.txt', $rootView->getPath($id2));
+
+ $folderView = new \OC\Files\View('/substorage');
+ $this->assertEquals('/foo.txt', $folderView->getPath($id2));
+ $this->assertNull($folderView->getPath($id1));
+ }
+
+ function testMountPointOverwrite() {
+ $storage1 = $this->getTestStorage(false);
+ $storage2 = $this->getTestStorage();
+ $storage1->mkdir('substorage');
+ \OC\Files\Filesystem::mount($storage1, array(), '/');
+ \OC\Files\Filesystem::mount($storage2, array(), '/substorage');
+
+ $rootView = new \OC\Files\View('');
+ $folderContent = $rootView->getDirectoryContent('/');
+ $this->assertEquals(4, count($folderContent));
+ }
+
+ function testCacheIncompleteFolder() {
+ $storage1 = $this->getTestStorage(false);
+ \OC\Files\Filesystem::mount($storage1, array(), '/');
+ $rootView = new \OC\Files\View('');
+
+ $entries = $rootView->getDirectoryContent('/');
+ $this->assertEquals(3, count($entries));
+
+ // /folder will already be in the cache but not scanned
+ $entries = $rootView->getDirectoryContent('/folder');
+ $this->assertEquals(1, count($entries));
+ }
+
+ public function testAutoScan() {
+ $storage1 = $this->getTestStorage(false);
+ $storage2 = $this->getTestStorage(false);
+ \OC\Files\Filesystem::mount($storage1, array(), '/');
+ \OC\Files\Filesystem::mount($storage2, array(), '/substorage');
+ $textSize = strlen("dummy file data\n");
+
+ $rootView = new \OC\Files\View('');
+
+ $cachedData = $rootView->getFileInfo('/');
+ $this->assertEquals('httpd/unix-directory', $cachedData['mimetype']);
+ $this->assertEquals(-1, $cachedData['size']);
+
+ $folderData = $rootView->getDirectoryContent('/substorage/folder');
+ $this->assertEquals('text/plain', $folderData[0]['mimetype']);
+ $this->assertEquals($textSize, $folderData[0]['size']);
+ }
+
+ function testSearch() {
+ $storage1 = $this->getTestStorage();
+ $storage2 = $this->getTestStorage();
+ $storage3 = $this->getTestStorage();
+ \OC\Files\Filesystem::mount($storage1, array(), '/');
+ \OC\Files\Filesystem::mount($storage2, array(), '/substorage');
+ \OC\Files\Filesystem::mount($storage3, array(), '/folder/anotherstorage');
+
+ $rootView = new \OC\Files\View('');
+
+ $results = $rootView->search('foo');
+ $this->assertEquals(6, count($results));
+ $paths = array();
+ foreach ($results as $result) {
+ $this->assertEquals($result['path'], \OC\Files\Filesystem::normalizePath($result['path']));
+ $paths[] = $result['path'];
+ }
+ $this->assertContains('/foo.txt', $paths);
+ $this->assertContains('/foo.png', $paths);
+ $this->assertContains('/substorage/foo.txt', $paths);
+ $this->assertContains('/substorage/foo.png', $paths);
+ $this->assertContains('/folder/anotherstorage/foo.txt', $paths);
+ $this->assertContains('/folder/anotherstorage/foo.png', $paths);
+
+ $folderView = new \OC\Files\View('/folder');
+ $results = $folderView->search('bar');
+ $this->assertEquals(2, count($results));
+ $paths = array();
+ foreach ($results as $result) {
+ $paths[] = $result['path'];
+ }
+ $this->assertContains('/anotherstorage/folder/bar.txt', $paths);
+ $this->assertContains('/bar.txt', $paths);
+
+ $results = $folderView->search('foo');
+ $this->assertEquals(2, count($results));
+ $paths = array();
+ foreach ($results as $result) {
+ $paths[] = $result['path'];
+ }
+ $this->assertContains('/anotherstorage/foo.txt', $paths);
+ $this->assertContains('/anotherstorage/foo.png', $paths);
+
+ $this->assertEquals(6, count($rootView->searchByMime('text')));
+ $this->assertEquals(3, count($folderView->searchByMime('text')));
+ }
+
+ function testWatcher() {
+ $storage1 = $this->getTestStorage();
+ \OC\Files\Filesystem::mount($storage1, array(), '/');
+
+ $rootView = new \OC\Files\View('');
+
+ $cachedData = $rootView->getFileInfo('foo.txt');
+ $this->assertEquals(16, $cachedData['size']);
+
+ $rootView->putFileInfo('foo.txt', array('mtime' => 10));
+ $storage1->file_put_contents('foo.txt', 'foo');
+ clearstatcache();
+
+ $cachedData = $rootView->getFileInfo('foo.txt');
+ $this->assertEquals(3, $cachedData['size']);
+ }
+
+ /**
+ * @param bool $scan
+ * @return \OC\Files\Storage\Storage
+ */
+ private function getTestStorage($scan = true) {
+ $storage = new \OC\Files\Storage\Temporary(array());
+ $textData = "dummy file data\n";
+ $imgData = file_get_contents(\OC::$SERVERROOT . '/core/img/logo.png');
+ $storage->mkdir('folder');
+ $storage->file_put_contents('foo.txt', $textData);
+ $storage->file_put_contents('foo.png', $imgData);
+ $storage->file_put_contents('folder/bar.txt', $textData);
+
+ if ($scan) {
+ $scanner = $storage->getScanner();
+ $scanner->scan('');
+ }
+ $this->storages[] = $storage;
+ return $storage;
+ }
+}
diff --git a/tests/lib/filesystem.php b/tests/lib/filesystem.php
deleted file mode 100644
index ee31ef4364d..00000000000
--- a/tests/lib/filesystem.php
+++ /dev/null
@@ -1,139 +0,0 @@
-<?php
-/**
- * ownCloud
- *
- * @author Robin Appelman
- * @copyright 2012 Robin Appelman icewind@owncloud.com
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-class Test_Filesystem extends PHPUnit_Framework_TestCase {
- /**
- * @var array tmpDirs
- */
- private $tmpDirs = array();
-
- /**
- * @return array
- */
- private function getStorageData() {
- $dir = OC_Helper::tmpFolder();
- $this->tmpDirs[] = $dir;
- return array('datadir' => $dir);
- }
-
- public function tearDown() {
- foreach ($this->tmpDirs as $dir) {
- OC_Helper::rmdirr($dir);
- }
- }
-
- public function setUp() {
- OC_Filesystem::clearMounts();
- }
-
- public function testMount() {
- OC_Filesystem::mount('OC_Filestorage_Local', self::getStorageData(), '/');
- $this->assertEquals('/', OC_Filesystem::getMountPoint('/'));
- $this->assertEquals('/', OC_Filesystem::getMountPoint('/some/folder'));
- $this->assertEquals('', OC_Filesystem::getInternalPath('/'));
- $this->assertEquals('some/folder', OC_Filesystem::getInternalPath('/some/folder'));
-
- OC_Filesystem::mount('OC_Filestorage_Local', self::getStorageData(), '/some');
- $this->assertEquals('/', OC_Filesystem::getMountPoint('/'));
- $this->assertEquals('/some/', OC_Filesystem::getMountPoint('/some/folder'));
- $this->assertEquals('/some/', OC_Filesystem::getMountPoint('/some/'));
- $this->assertEquals('/', OC_Filesystem::getMountPoint('/some'));
- $this->assertEquals('folder', OC_Filesystem::getInternalPath('/some/folder'));
- }
-
- public function testNormalize() {
- $this->assertEquals('/path', OC_Filesystem::normalizePath('/path/'));
- $this->assertEquals('/path/', OC_Filesystem::normalizePath('/path/', false));
- $this->assertEquals('/path', OC_Filesystem::normalizePath('path'));
- $this->assertEquals('/path', OC_Filesystem::normalizePath('\path'));
- $this->assertEquals('/foo/bar', OC_Filesystem::normalizePath('/foo//bar/'));
- $this->assertEquals('/foo/bar', OC_Filesystem::normalizePath('/foo////bar'));
- if (class_exists('Normalizer')) {
- $this->assertEquals("/foo/bar\xC3\xBC", OC_Filesystem::normalizePath("/foo/baru\xCC\x88"));
- }
- }
-
- public function testBlacklist() {
- OC_Hook::clear('OC_Filesystem');
- OC::registerFilesystemHooks();
-
- $run = true;
- OC_Hook::emit(
- OC_Filesystem::CLASSNAME,
- OC_Filesystem::signal_write,
- array(
- OC_Filesystem::signal_param_path => '/test/.htaccess',
- OC_Filesystem::signal_param_run => &$run
- )
- );
- $this->assertFalse($run);
-
- if (OC_Filesystem::getView()) {
- $user = OC_User::getUser();
- } else {
- $user = uniqid();
- OC_Filesystem::init('/' . $user . '/files');
- }
-
- OC_Filesystem::mount('OC_Filestorage_Temporary', array(), '/');
-
- $rootView = new OC_FilesystemView('');
- $rootView->mkdir('/' . $user);
- $rootView->mkdir('/' . $user . '/files');
-
- $this->assertFalse((bool)$rootView->file_put_contents('/.htaccess', 'foo'));
- $this->assertFalse((bool)OC_Filesystem::file_put_contents('/.htaccess', 'foo'));
- $fh = fopen(__FILE__, 'r');
- $this->assertFalse((bool)OC_Filesystem::file_put_contents('/.htaccess', $fh));
- }
-
- public function testHooks() {
- if (OC_Filesystem::getView()) {
- $user = OC_User::getUser();
- } else {
- $user = uniqid();
- OC_Filesystem::init('/' . $user . '/files');
- }
- OC_Hook::clear('OC_Filesystem');
- OC_Hook::connect('OC_Filesystem', 'post_write', $this, 'dummyHook');
-
- OC_Filesystem::mount('OC_Filestorage_Temporary', array(), '/');
-
- $rootView = new OC_FilesystemView('');
- $rootView->mkdir('/' . $user);
- $rootView->mkdir('/' . $user . '/files');
-
- OC_Filesystem::file_put_contents('/foo', 'foo');
- OC_Filesystem::mkdir('/bar');
- OC_Filesystem::file_put_contents('/bar//foo', 'foo');
-
- $tmpFile = OC_Helper::tmpFile();
- file_put_contents($tmpFile, 'foo');
- $fh = fopen($tmpFile, 'r');
- OC_Filesystem::file_put_contents('/bar//foo', $fh);
- }
-
- public function dummyHook($arguments) {
- $path = $arguments['path'];
- $this->assertEquals($path, OC_Filesystem::normalizePath($path)); //the path passed to the hook should already be normalized
- }
-}
diff --git a/tests/lib/streamwrappers.php b/tests/lib/streamwrappers.php
index aebbc93b902..2237ee7d378 100644
--- a/tests/lib/streamwrappers.php
+++ b/tests/lib/streamwrappers.php
@@ -1,41 +1,41 @@
<?php
/**
-* ownCloud
-*
-* @author Robin Appelman
-* @copyright 2012 Robin Appelman icewind@owncloud.com
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
-* License as published by the Free Software Foundation; either
-* version 3 of the License, or any later version.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
-*
-* You should have received a copy of the GNU Affero General Public
-* License along with this library. If not, see <http://www.gnu.org/licenses/>.
-*
-*/
+ * ownCloud
+ *
+ * @author Robin Appelman
+ * @copyright 2012 Robin Appelman icewind@owncloud.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
class Test_StreamWrappers extends PHPUnit_Framework_TestCase {
public function testFakeDir() {
- $items=array('foo', 'bar');
- OC_FakeDirStream::$dirs['test']=$items;
- $dh=opendir('fakedir://test');
- $result=array();
- while($file=readdir($dh)) {
- $result[]=$file;
+ $items = array('foo', 'bar');
+ \OC\Files\Stream\Dir::register('test', $items);
+ $dh = opendir('fakedir://test');
+ $result = array();
+ while ($file = readdir($dh)) {
+ $result[] = $file;
$this->assertContains($file, $items);
}
$this->assertEquals(count($items), count($result));
}
public function testStaticStream() {
- $sourceFile=OC::$SERVERROOT.'/tests/data/lorem.txt';
- $staticFile='static://test';
+ $sourceFile = OC::$SERVERROOT . '/tests/data/lorem.txt';
+ $staticFile = 'static://test';
$this->assertFalse(file_exists($staticFile));
file_put_contents($staticFile, file_get_contents($sourceFile));
$this->assertTrue(file_exists($staticFile));
@@ -47,27 +47,27 @@ class Test_StreamWrappers extends PHPUnit_Framework_TestCase {
public function testCloseStream() {
//ensure all basic stream stuff works
- $sourceFile=OC::$SERVERROOT.'/tests/data/lorem.txt';
- $tmpFile=OC_Helper::TmpFile('.txt');
- $file='close://'.$tmpFile;
+ $sourceFile = OC::$SERVERROOT . '/tests/data/lorem.txt';
+ $tmpFile = OC_Helper::TmpFile('.txt');
+ $file = 'close://' . $tmpFile;
$this->assertTrue(file_exists($file));
file_put_contents($file, file_get_contents($sourceFile));
$this->assertEquals(file_get_contents($sourceFile), file_get_contents($file));
unlink($file);
clearstatcache();
$this->assertFalse(file_exists($file));
-
+
//test callback
- $tmpFile=OC_Helper::TmpFile('.txt');
- $file='close://'.$tmpFile;
- OC_CloseStreamWrapper::$callBacks[$tmpFile]=array('Test_StreamWrappers', 'closeCallBack');
- $fh=fopen($file, 'w');
+ $tmpFile = OC_Helper::TmpFile('.txt');
+ $file = 'close://' . $tmpFile;
+ \OC\Files\Stream\Close::registerCallback($tmpFile, array('Test_StreamWrappers', 'closeCallBack'));
+ $fh = fopen($file, 'w');
fwrite($fh, 'asd');
- try{
+ try {
fclose($fh);
$this->fail('Expected exception');
- }catch(Exception $e) {
- $path=$e->getMessage();
+ } catch (Exception $e) {
+ $path = $e->getMessage();
$this->assertEquals($path, $tmpFile);
}
}
@@ -75,4 +75,23 @@ class Test_StreamWrappers extends PHPUnit_Framework_TestCase {
public static function closeCallBack($path) {
throw new Exception($path);
}
+
+ public function testOC() {
+ \OC\Files\Mount::clear();
+ $storage = new \OC\Files\Storage\Temporary(array());
+ $storage->file_put_contents('foo.txt', 'asd');
+ new \OC\Files\Mount($storage, '/');
+
+ $this->assertTrue(file_exists('oc:///foo.txt'));
+ $this->assertEquals('asd', file_get_contents('oc:///foo.txt'));
+ $this->assertEquals(array('.', '..', 'foo.txt'), scandir('oc:///'));
+
+ file_put_contents('oc:///bar.txt', 'qwerty');
+ $this->assertEquals('qwerty', $storage->file_get_contents('bar.txt'));
+ $this->assertEquals(array('.', '..', 'bar.txt', 'foo.txt'), scandir('oc:///'));
+ $this->assertEquals('qwerty', file_get_contents('oc:///bar.txt'));
+
+ unlink('oc:///foo.txt');
+ $this->assertEquals(array('.', '..', 'bar.txt'), scandir('oc:///'));
+ }
}