summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/files/ajax/delete.php4
-rw-r--r--apps/files/js/filelist.js14
-rw-r--r--apps/files/l10n/af_ZA.js1
-rw-r--r--apps/files/l10n/af_ZA.json1
-rw-r--r--apps/files/l10n/fr.js2
-rw-r--r--apps/files/l10n/fr.json2
-rw-r--r--apps/files/l10n/gl.js1
-rw-r--r--apps/files/l10n/gl.json1
-rw-r--r--apps/files/tests/js/filelistSpec.js34
-rw-r--r--apps/files_encryption/ajax/changeRecoveryPassword.php7
-rw-r--r--apps/files_encryption/ajax/updatePrivateKeyPassword.php6
-rw-r--r--apps/files_encryption/appinfo/update.php5
-rw-r--r--apps/files_encryption/appinfo/version2
-rw-r--r--apps/files_encryption/exception/encryptionException.php4
-rw-r--r--apps/files_encryption/hooks/hooks.php226
-rw-r--r--apps/files_encryption/l10n/ar.js1
-rw-r--r--apps/files_encryption/l10n/ar.json1
-rw-r--r--apps/files_encryption/l10n/ast.js1
-rw-r--r--apps/files_encryption/l10n/ast.json1
-rw-r--r--apps/files_encryption/l10n/bg_BG.js1
-rw-r--r--apps/files_encryption/l10n/bg_BG.json1
-rw-r--r--apps/files_encryption/l10n/ca.js1
-rw-r--r--apps/files_encryption/l10n/ca.json1
-rw-r--r--apps/files_encryption/l10n/cs_CZ.js1
-rw-r--r--apps/files_encryption/l10n/cs_CZ.json1
-rw-r--r--apps/files_encryption/l10n/da.js1
-rw-r--r--apps/files_encryption/l10n/da.json1
-rw-r--r--apps/files_encryption/l10n/de.js1
-rw-r--r--apps/files_encryption/l10n/de.json1
-rw-r--r--apps/files_encryption/l10n/de_DE.js1
-rw-r--r--apps/files_encryption/l10n/de_DE.json1
-rw-r--r--apps/files_encryption/l10n/el.js1
-rw-r--r--apps/files_encryption/l10n/el.json1
-rw-r--r--apps/files_encryption/l10n/en_GB.js1
-rw-r--r--apps/files_encryption/l10n/en_GB.json1
-rw-r--r--apps/files_encryption/l10n/es.js1
-rw-r--r--apps/files_encryption/l10n/es.json1
-rw-r--r--apps/files_encryption/l10n/es_AR.js1
-rw-r--r--apps/files_encryption/l10n/es_AR.json1
-rw-r--r--apps/files_encryption/l10n/es_MX.js1
-rw-r--r--apps/files_encryption/l10n/es_MX.json1
-rw-r--r--apps/files_encryption/l10n/et_EE.js1
-rw-r--r--apps/files_encryption/l10n/et_EE.json1
-rw-r--r--apps/files_encryption/l10n/eu.js1
-rw-r--r--apps/files_encryption/l10n/eu.json1
-rw-r--r--apps/files_encryption/l10n/fr.js1
-rw-r--r--apps/files_encryption/l10n/fr.json1
-rw-r--r--apps/files_encryption/l10n/gl.js12
-rw-r--r--apps/files_encryption/l10n/gl.json12
-rw-r--r--apps/files_encryption/l10n/hr.js1
-rw-r--r--apps/files_encryption/l10n/hr.json1
-rw-r--r--apps/files_encryption/l10n/hu_HU.js1
-rw-r--r--apps/files_encryption/l10n/hu_HU.json1
-rw-r--r--apps/files_encryption/l10n/id.js1
-rw-r--r--apps/files_encryption/l10n/id.json1
-rw-r--r--apps/files_encryption/l10n/it.js1
-rw-r--r--apps/files_encryption/l10n/it.json1
-rw-r--r--apps/files_encryption/l10n/ja.js1
-rw-r--r--apps/files_encryption/l10n/ja.json1
-rw-r--r--apps/files_encryption/l10n/ko.js1
-rw-r--r--apps/files_encryption/l10n/ko.json1
-rw-r--r--apps/files_encryption/l10n/lt_LT.js1
-rw-r--r--apps/files_encryption/l10n/lt_LT.json1
-rw-r--r--apps/files_encryption/l10n/nb_NO.js1
-rw-r--r--apps/files_encryption/l10n/nb_NO.json1
-rw-r--r--apps/files_encryption/l10n/nl.js1
-rw-r--r--apps/files_encryption/l10n/nl.json1
-rw-r--r--apps/files_encryption/l10n/pl.js1
-rw-r--r--apps/files_encryption/l10n/pl.json1
-rw-r--r--apps/files_encryption/l10n/pt_BR.js1
-rw-r--r--apps/files_encryption/l10n/pt_BR.json1
-rw-r--r--apps/files_encryption/l10n/pt_PT.js1
-rw-r--r--apps/files_encryption/l10n/pt_PT.json1
-rw-r--r--apps/files_encryption/l10n/ru.js1
-rw-r--r--apps/files_encryption/l10n/ru.json1
-rw-r--r--apps/files_encryption/l10n/sk_SK.js1
-rw-r--r--apps/files_encryption/l10n/sk_SK.json1
-rw-r--r--apps/files_encryption/l10n/sl.js1
-rw-r--r--apps/files_encryption/l10n/sl.json1
-rw-r--r--apps/files_encryption/l10n/sv.js1
-rw-r--r--apps/files_encryption/l10n/sv.json1
-rw-r--r--apps/files_encryption/l10n/tr.js1
-rw-r--r--apps/files_encryption/l10n/tr.json1
-rw-r--r--apps/files_encryption/l10n/uk.js1
-rw-r--r--apps/files_encryption/l10n/uk.json1
-rw-r--r--apps/files_encryption/l10n/zh_CN.js1
-rw-r--r--apps/files_encryption/l10n/zh_CN.json1
-rw-r--r--apps/files_encryption/l10n/zh_TW.js1
-rw-r--r--apps/files_encryption/l10n/zh_TW.json1
-rw-r--r--apps/files_encryption/lib/helper.php98
-rw-r--r--apps/files_encryption/lib/keymanager.php541
-rw-r--r--apps/files_encryption/lib/migration.php264
-rw-r--r--apps/files_encryption/lib/proxy.php11
-rw-r--r--apps/files_encryption/lib/session.php36
-rw-r--r--apps/files_encryption/lib/util.php117
-rwxr-xr-xapps/files_encryption/tests/crypt.php38
-rw-r--r--apps/files_encryption/tests/helper.php60
-rw-r--r--apps/files_encryption/tests/hooks.php138
-rw-r--r--apps/files_encryption/tests/keymanager.php294
-rw-r--r--apps/files_encryption/tests/migration.php259
-rw-r--r--apps/files_encryption/tests/proxy.php22
-rwxr-xr-xapps/files_encryption/tests/share.php231
-rw-r--r--apps/files_encryption/tests/stream.php19
-rw-r--r--apps/files_encryption/tests/testcase.php31
-rwxr-xr-xapps/files_encryption/tests/trashbin.php113
-rwxr-xr-xapps/files_encryption/tests/util.php119
-rwxr-xr-xapps/files_encryption/tests/webdav.php30
-rw-r--r--apps/files_external/l10n/gl.js2
-rw-r--r--apps/files_external/l10n/gl.json2
-rw-r--r--apps/files_external/lib/smb_oc.php31
-rw-r--r--apps/files_external/tests/mountconfig.php40
-rw-r--r--apps/files_sharing/l10n/ca.js6
-rw-r--r--apps/files_sharing/l10n/ca.json6
-rw-r--r--apps/files_sharing/l10n/gl.js6
-rw-r--r--apps/files_sharing/l10n/gl.json6
-rw-r--r--apps/files_trashbin/appinfo/app.php2
-rw-r--r--apps/files_trashbin/l10n/af_ZA.js6
-rw-r--r--apps/files_trashbin/l10n/af_ZA.json4
-rw-r--r--apps/files_trashbin/lib/exceptions/copyrecursiveexception.php (renamed from apps/files_trashbin/lib/exceptions.php)0
-rw-r--r--apps/files_trashbin/lib/trashbin.php181
-rw-r--r--apps/files_versions/appinfo/app.php5
-rw-r--r--apps/files_versions/appinfo/routes.php2
-rw-r--r--apps/files_versions/download.php2
-rw-r--r--apps/files_versions/lib/storage.php (renamed from apps/files_versions/lib/versions.php)0
-rw-r--r--apps/files_versions/tests/versions.php1
-rw-r--r--apps/user_ldap/appinfo/register_command.php1
-rw-r--r--apps/user_ldap/command/search.php100
-rw-r--r--apps/user_ldap/l10n/af_ZA.js1
-rw-r--r--apps/user_ldap/l10n/af_ZA.json1
-rw-r--r--apps/user_ldap/l10n/en_GB.js1
-rw-r--r--apps/user_ldap/l10n/en_GB.json1
-rw-r--r--apps/user_ldap/l10n/es.js1
-rw-r--r--apps/user_ldap/l10n/es.json1
-rw-r--r--apps/user_ldap/l10n/fr.js6
-rw-r--r--apps/user_ldap/l10n/fr.json6
-rw-r--r--apps/user_ldap/l10n/gl.js6
-rw-r--r--apps/user_ldap/l10n/gl.json6
-rw-r--r--apps/user_ldap/l10n/it.js1
-rw-r--r--apps/user_ldap/l10n/it.json1
-rw-r--r--apps/user_ldap/l10n/tr.js1
-rw-r--r--apps/user_ldap/l10n/tr.json1
-rw-r--r--apps/user_ldap/lib/access.php52
-rw-r--r--apps/user_ldap/user_ldap.php5
-rw-r--r--autotest.cmd55
-rw-r--r--bower.json11
-rw-r--r--config/config.sample.php38
-rw-r--r--core/css/header.css4
-rw-r--r--core/img/filetypes/image-vector.png (renamed from core/img/filetypes/image-svg+xml.png)bin885 -> 885 bytes
-rw-r--r--core/img/filetypes/image-vector.svg (renamed from core/img/filetypes/image-svg+xml.svg)0
-rw-r--r--core/img/filetypes/image.pngbin903 -> 695 bytes
-rw-r--r--core/img/filetypes/image.svg66
-rw-r--r--core/js/jstz.js358
-rw-r--r--core/js/share.js2
-rw-r--r--core/l10n/ca.js2
-rw-r--r--core/l10n/ca.json2
-rw-r--r--core/l10n/da.js14
-rw-r--r--core/l10n/da.json14
-rw-r--r--core/templates/login.php2
-rw-r--r--core/vendor/.gitignore11
-rw-r--r--core/vendor/blueimp-md5/.bower.json53
-rw-r--r--core/vendor/handlebars/.bower.json16
-rw-r--r--core/vendor/jcrop/.bower.json14
-rw-r--r--core/vendor/jquery/.bower.json21
-rw-r--r--core/vendor/jsTimezoneDetect/.bower.json23
-rw-r--r--core/vendor/jsTimezoneDetect/LICENCE.txt22
-rw-r--r--core/vendor/jsTimezoneDetect/jstz.js358
-rw-r--r--core/vendor/moment/.bower.json30
-rw-r--r--core/vendor/select2/.bower.json24
-rw-r--r--core/vendor/snapjs/.bower.json31
-rw-r--r--core/vendor/strengthify/.bower.json19
-rw-r--r--core/vendor/underscore/.bower.json33
-rw-r--r--core/vendor/zxcvbn/.bower.json14
-rw-r--r--lib/base.php8
-rw-r--r--lib/l10n/ast.js2
-rw-r--r--lib/l10n/ast.json2
-rw-r--r--lib/l10n/bg_BG.js2
-rw-r--r--lib/l10n/bg_BG.json2
-rw-r--r--lib/l10n/ca.js3
-rw-r--r--lib/l10n/ca.json3
-rw-r--r--lib/l10n/cs_CZ.js2
-rw-r--r--lib/l10n/cs_CZ.json2
-rw-r--r--lib/l10n/da.js4
-rw-r--r--lib/l10n/da.json4
-rw-r--r--lib/l10n/de.js2
-rw-r--r--lib/l10n/de.json2
-rw-r--r--lib/l10n/de_DE.js2
-rw-r--r--lib/l10n/de_DE.json2
-rw-r--r--lib/l10n/el.js2
-rw-r--r--lib/l10n/el.json2
-rw-r--r--lib/l10n/en_GB.js2
-rw-r--r--lib/l10n/en_GB.json2
-rw-r--r--lib/l10n/eo.js2
-rw-r--r--lib/l10n/eo.json2
-rw-r--r--lib/l10n/es.js2
-rw-r--r--lib/l10n/es.json2
-rw-r--r--lib/l10n/et_EE.js2
-rw-r--r--lib/l10n/et_EE.json2
-rw-r--r--lib/l10n/eu.js2
-rw-r--r--lib/l10n/eu.json2
-rw-r--r--lib/l10n/fi_FI.js2
-rw-r--r--lib/l10n/fi_FI.json2
-rw-r--r--lib/l10n/fr.js2
-rw-r--r--lib/l10n/fr.json2
-rw-r--r--lib/l10n/gl.js7
-rw-r--r--lib/l10n/gl.json7
-rw-r--r--lib/l10n/hr.js2
-rw-r--r--lib/l10n/hr.json2
-rw-r--r--lib/l10n/hu_HU.js2
-rw-r--r--lib/l10n/hu_HU.json2
-rw-r--r--lib/l10n/id.js2
-rw-r--r--lib/l10n/id.json2
-rw-r--r--lib/l10n/it.js2
-rw-r--r--lib/l10n/it.json2
-rw-r--r--lib/l10n/ja.js2
-rw-r--r--lib/l10n/ja.json2
-rw-r--r--lib/l10n/ko.js2
-rw-r--r--lib/l10n/ko.json2
-rw-r--r--lib/l10n/nb_NO.js2
-rw-r--r--lib/l10n/nb_NO.json2
-rw-r--r--lib/l10n/nl.js2
-rw-r--r--lib/l10n/nl.json2
-rw-r--r--lib/l10n/pl.js2
-rw-r--r--lib/l10n/pl.json2
-rw-r--r--lib/l10n/pt_BR.js2
-rw-r--r--lib/l10n/pt_BR.json2
-rw-r--r--lib/l10n/pt_PT.js2
-rw-r--r--lib/l10n/pt_PT.json2
-rw-r--r--lib/l10n/ro.js2
-rw-r--r--lib/l10n/ro.json2
-rw-r--r--lib/l10n/ru.js2
-rw-r--r--lib/l10n/ru.json2
-rw-r--r--lib/l10n/sk_SK.js2
-rw-r--r--lib/l10n/sk_SK.json2
-rw-r--r--lib/l10n/sl.js2
-rw-r--r--lib/l10n/sl.json2
-rw-r--r--lib/l10n/sv.js2
-rw-r--r--lib/l10n/sv.json2
-rw-r--r--lib/l10n/tr.js2
-rw-r--r--lib/l10n/tr.json2
-rw-r--r--lib/l10n/uk.js3
-rw-r--r--lib/l10n/uk.json3
-rw-r--r--lib/l10n/zh_CN.js2
-rw-r--r--lib/l10n/zh_CN.json2
-rw-r--r--lib/l10n/zh_TW.js2
-rw-r--r--lib/l10n/zh_TW.json2
-rw-r--r--lib/private/activitymanager.php16
-rw-r--r--lib/private/app.php4
-rw-r--r--lib/private/app/dependencyanalyzer.php87
-rw-r--r--lib/private/app/infoparser.php74
-rw-r--r--lib/private/app/platform.php33
-rw-r--r--lib/private/appframework/app.php10
-rw-r--r--lib/private/appframework/http/dispatcher.php8
-rw-r--r--lib/private/files/cache/cache.php2
-rw-r--r--lib/private/files/cache/wrapper/cachejail.php255
-rw-r--r--lib/private/files/cache/wrapper/cachepermissionsmask.php32
-rw-r--r--lib/private/files/cache/wrapper/cachewrapper.php247
-rw-r--r--lib/private/files/node/file.php10
-rw-r--r--lib/private/files/node/folder.php7
-rw-r--r--lib/private/files/node/node.php71
-rw-r--r--lib/private/files/storage/local.php78
-rw-r--r--lib/private/files/storage/mappedlocal.php87
-rw-r--r--lib/private/files/storage/wrapper/jail.php413
-rw-r--r--lib/private/files/storage/wrapper/permissionsmask.php111
-rw-r--r--lib/private/group/backend.php32
-rw-r--r--lib/private/group/group.php8
-rw-r--r--lib/private/group/interface.php2
-rw-r--r--lib/private/group/manager.php2
-rw-r--r--lib/private/helper.php13
-rw-r--r--lib/private/image.php523
-rw-r--r--lib/private/installer.php2
-rw-r--r--lib/private/log/errorlog.php48
-rw-r--r--lib/private/naturalsort.php11
-rw-r--r--lib/private/naturalsort_defaultcollator.php19
-rw-r--r--lib/private/preview.php80
-rw-r--r--lib/private/preview/bitmap.php126
-rw-r--r--lib/private/preview/illustrator.php19
-rw-r--r--lib/private/preview/image.php9
-rw-r--r--lib/private/preview/markdown.php18
-rw-r--r--lib/private/preview/movie.php150
-rw-r--r--lib/private/preview/mp3.php15
-rw-r--r--lib/private/preview/msoffice2003.php18
-rw-r--r--lib/private/preview/msoffice2007.php18
-rw-r--r--lib/private/preview/msofficedoc.php18
-rw-r--r--lib/private/preview/office-cl.php138
-rw-r--r--lib/private/preview/office.php84
-rw-r--r--lib/private/preview/opendocument.php18
-rw-r--r--lib/private/preview/pdf.php19
-rw-r--r--lib/private/preview/photoshop.php19
-rw-r--r--lib/private/preview/postscript.php19
-rw-r--r--lib/private/preview/provider.php12
-rw-r--r--lib/private/preview/staroffice.php18
-rw-r--r--lib/private/preview/svg.php71
-rw-r--r--lib/private/preview/tiff.php19
-rw-r--r--lib/private/preview/txt.php29
-rw-r--r--lib/private/request.php33
-rw-r--r--lib/private/security/crypto.php20
-rw-r--r--lib/private/server.php28
-rw-r--r--lib/private/setup.php4
-rw-r--r--lib/private/user/backend.php45
-rw-r--r--lib/private/user/interface.php4
-rw-r--r--lib/private/user/manager.php6
-rw-r--r--lib/private/user/user.php14
-rw-r--r--lib/private/util.php13
-rw-r--r--lib/public/activity/iextension.php7
-rw-r--r--lib/public/appframework/controller.php2
-rw-r--r--lib/public/appframework/http/response.php73
-rw-r--r--lib/public/defaults.php8
-rw-r--r--lib/public/files/ihomestorage.php24
-rw-r--r--lib/public/files/storage.php4
-rw-r--r--lib/public/iservercontainer.php7
-rw-r--r--lib/public/share.php83
-rw-r--r--lib/public/share_backend.php68
-rw-r--r--lib/public/share_backend_collection.php29
-rw-r--r--lib/public/share_backend_file_dependent.php31
-rw-r--r--lib/public/template.php91
-rw-r--r--settings/admin.php4
-rw-r--r--settings/controller/appsettingscontroller.php10
-rw-r--r--settings/css/settings.css6
-rw-r--r--settings/l10n/ar.js2
-rw-r--r--settings/l10n/ar.json2
-rw-r--r--settings/l10n/ast.js2
-rw-r--r--settings/l10n/ast.json2
-rw-r--r--settings/l10n/az.js1
-rw-r--r--settings/l10n/az.json1
-rw-r--r--settings/l10n/bg_BG.js2
-rw-r--r--settings/l10n/bg_BG.json2
-rw-r--r--settings/l10n/ca.js34
-rw-r--r--settings/l10n/ca.json34
-rw-r--r--settings/l10n/cs_CZ.js4
-rw-r--r--settings/l10n/cs_CZ.json4
-rw-r--r--settings/l10n/da.js4
-rw-r--r--settings/l10n/da.json4
-rw-r--r--settings/l10n/de.js4
-rw-r--r--settings/l10n/de.json4
-rw-r--r--settings/l10n/de_DE.js4
-rw-r--r--settings/l10n/de_DE.json4
-rw-r--r--settings/l10n/el.js2
-rw-r--r--settings/l10n/el.json2
-rw-r--r--settings/l10n/en_GB.js4
-rw-r--r--settings/l10n/en_GB.json4
-rw-r--r--settings/l10n/es.js4
-rw-r--r--settings/l10n/es.json4
-rw-r--r--settings/l10n/es_AR.js2
-rw-r--r--settings/l10n/es_AR.json2
-rw-r--r--settings/l10n/es_MX.js2
-rw-r--r--settings/l10n/es_MX.json2
-rw-r--r--settings/l10n/et_EE.js2
-rw-r--r--settings/l10n/et_EE.json2
-rw-r--r--settings/l10n/eu.js2
-rw-r--r--settings/l10n/eu.json2
-rw-r--r--settings/l10n/fa.js1
-rw-r--r--settings/l10n/fa.json1
-rw-r--r--settings/l10n/fi_FI.js3
-rw-r--r--settings/l10n/fi_FI.json3
-rw-r--r--settings/l10n/fr.js2
-rw-r--r--settings/l10n/fr.json2
-rw-r--r--settings/l10n/gl.js8
-rw-r--r--settings/l10n/gl.json8
-rw-r--r--settings/l10n/hr.js2
-rw-r--r--settings/l10n/hr.json2
-rw-r--r--settings/l10n/hu_HU.js2
-rw-r--r--settings/l10n/hu_HU.json2
-rw-r--r--settings/l10n/id.js2
-rw-r--r--settings/l10n/id.json2
-rw-r--r--settings/l10n/it.js3
-rw-r--r--settings/l10n/it.json3
-rw-r--r--settings/l10n/ja.js2
-rw-r--r--settings/l10n/ja.json2
-rw-r--r--settings/l10n/ko.js2
-rw-r--r--settings/l10n/ko.json2
-rw-r--r--settings/l10n/mk.js1
-rw-r--r--settings/l10n/mk.json1
-rw-r--r--settings/l10n/nb_NO.js2
-rw-r--r--settings/l10n/nb_NO.json2
-rw-r--r--settings/l10n/nl.js4
-rw-r--r--settings/l10n/nl.json4
-rw-r--r--settings/l10n/pl.js2
-rw-r--r--settings/l10n/pl.json2
-rw-r--r--settings/l10n/pt_BR.js4
-rw-r--r--settings/l10n/pt_BR.json4
-rw-r--r--settings/l10n/pt_PT.js89
-rw-r--r--settings/l10n/pt_PT.json89
-rw-r--r--settings/l10n/ro.js1
-rw-r--r--settings/l10n/ro.json1
-rw-r--r--settings/l10n/ru.js2
-rw-r--r--settings/l10n/ru.json2
-rw-r--r--settings/l10n/sk_SK.js2
-rw-r--r--settings/l10n/sk_SK.json2
-rw-r--r--settings/l10n/sl.js2
-rw-r--r--settings/l10n/sl.json2
-rw-r--r--settings/l10n/sv.js2
-rw-r--r--settings/l10n/sv.json2
-rw-r--r--settings/l10n/tr.js6
-rw-r--r--settings/l10n/tr.json6
-rw-r--r--settings/l10n/uk.js6
-rw-r--r--settings/l10n/uk.json6
-rw-r--r--settings/l10n/zh_CN.js2
-rw-r--r--settings/l10n/zh_CN.json2
-rw-r--r--settings/l10n/zh_TW.js2
-rw-r--r--settings/l10n/zh_TW.json2
-rw-r--r--settings/templates/admin.php36
-rw-r--r--settings/templates/apps.php11
-rw-r--r--tests/core/lostpassword/controller/lostcontrollertest.php8
-rw-r--r--tests/data/app/expected-info.json32
-rw-r--r--tests/data/app/valid-info.xml7
-rw-r--r--tests/enable_all.php1
-rw-r--r--tests/lib/activitymanager.php7
-rw-r--r--tests/lib/api.php2
-rw-r--r--tests/lib/app/dependencyanalyzer.php109
-rw-r--r--tests/lib/app/infoparser.php20
-rw-r--r--tests/lib/appframework/AppTest.php2
-rw-r--r--tests/lib/appframework/controller/ControllerTest.php3
-rw-r--r--tests/lib/appframework/http/DispatcherTest.php24
-rw-r--r--tests/lib/appframework/http/ResponseTest.php86
-rw-r--r--tests/lib/db.php2
-rw-r--r--tests/lib/db/migrator.php2
-rw-r--r--tests/lib/db/mysqlmigration.php2
-rw-r--r--tests/lib/db/sqlitemigration.php2
-rw-r--r--tests/lib/files/cache/cache.php8
-rw-r--r--tests/lib/files/cache/updaterlegacy.php2
-rw-r--r--tests/lib/files/cache/wrapper/cachejail.php67
-rw-r--r--tests/lib/files/cache/wrapper/cachepermissionsmask.php94
-rw-r--r--tests/lib/files/filesystem.php12
-rw-r--r--tests/lib/files/node/file.php41
-rw-r--r--tests/lib/files/node/folder.php19
-rw-r--r--tests/lib/files/node/integration.php2
-rw-r--r--tests/lib/files/node/node.php52
-rw-r--r--tests/lib/files/node/root.php7
-rw-r--r--tests/lib/files/objectstore/swift.php6
-rw-r--r--tests/lib/files/storage/wrapper/jail.php55
-rw-r--r--tests/lib/files/storage/wrapper/permissionsmask.php105
-rw-r--r--tests/lib/files/view.php2
-rw-r--r--tests/lib/memcache/apc.php2
-rw-r--r--tests/lib/memcache/apcu.php2
-rw-r--r--tests/lib/memcache/memcached.php6
-rw-r--r--tests/lib/memcache/xcache.php2
-rw-r--r--tests/lib/ocs/privatedata.php2
-rw-r--r--tests/lib/repair/repaircollation.php2
-rw-r--r--tests/lib/repair/repairinnodb.php2
-rw-r--r--tests/lib/repair/repairlegacystorage.php8
-rw-r--r--tests/lib/request.php17
-rw-r--r--tests/lib/session/memory.php2
-rw-r--r--tests/lib/share/backend.php2
-rw-r--r--tests/lib/tags.php10
-rw-r--r--tests/lib/testcase.php6
-rw-r--r--tests/lib/util.php6
-rw-r--r--tests/phpunit-autotest.xml3
447 files changed, 6094 insertions, 3728 deletions
diff --git a/apps/files/ajax/delete.php b/apps/files/ajax/delete.php
index 323b70706ce..4d4232e872e 100644
--- a/apps/files/ajax/delete.php
+++ b/apps/files/ajax/delete.php
@@ -27,7 +27,9 @@ $success = true;
//Now delete
foreach ($files as $file) {
if (\OC\Files\Filesystem::file_exists($dir . '/' . $file) &&
- !\OC\Files\Filesystem::unlink($dir . '/' . $file)) {
+ !(\OC\Files\Filesystem::isDeletable($dir . '/' . $file) &&
+ \OC\Files\Filesystem::unlink($dir . '/' . $file))
+ ) {
$filesWithError .= $file . "\n";
$success = false;
}
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index bec0155e90e..6ffc10cdcbd 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -526,7 +526,8 @@
mimetype: $el.attr('data-mime'),
type: $el.attr('data-type'),
size: parseInt($el.attr('data-size'), 10),
- etag: $el.attr('data-etag')
+ etag: $el.attr('data-etag'),
+ permissions: parseInt($el.attr('data-permissions'), 10)
};
},
@@ -1636,7 +1637,7 @@
this.$el.find('.selectedActions').addClass('hidden');
}
else {
- canDelete = (this.getDirectoryPermissions() & OC.PERMISSION_DELETE);
+ canDelete = (this.getDirectoryPermissions() & OC.PERMISSION_DELETE) && this.isSelectedDeletable();
this.$el.find('.selectedActions').removeClass('hidden');
this.$el.find('#headerSize a>span:first').text(OC.Util.humanFileSize(summary.totalSize));
var selection = '';
@@ -1657,6 +1658,15 @@
},
/**
+ * Check whether all selected files are deletable
+ */
+ isSelectedDeletable: function() {
+ return _.reduce(this.getSelectedFiles(), function(deletable, file) {
+ return deletable && (file.permissions & OC.PERMISSION_DELETE);
+ }, true);
+ },
+
+ /**
* Returns whether all files are selected
* @return true if all files are selected, false otherwise
*/
diff --git a/apps/files/l10n/af_ZA.js b/apps/files/l10n/af_ZA.js
index 1a4639183ed..8671027db6e 100644
--- a/apps/files/l10n/af_ZA.js
+++ b/apps/files/l10n/af_ZA.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Share" : "Deel",
"Unshare" : "Deel terug neem",
+ "Error" : "Fout",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
diff --git a/apps/files/l10n/af_ZA.json b/apps/files/l10n/af_ZA.json
index 0e7116887f0..cd3182e3f69 100644
--- a/apps/files/l10n/af_ZA.json
+++ b/apps/files/l10n/af_ZA.json
@@ -1,6 +1,7 @@
{ "translations": {
"Share" : "Deel",
"Unshare" : "Deel terug neem",
+ "Error" : "Fout",
"_%n folder_::_%n folders_" : ["",""],
"_%n file_::_%n files_" : ["",""],
"_Uploading %n file_::_Uploading %n files_" : ["",""],
diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js
index 719d3355bca..a5a4f25bf1d 100644
--- a/apps/files/l10n/fr.js
+++ b/apps/files/l10n/fr.js
@@ -70,7 +70,7 @@ OC.L10N.register(
"Your storage is almost full ({usedSpacePercent}%)" : "Votre espace de stockage est presque plein ({usedSpacePercent}%)",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'application de chiffrement est activée mais vos clés ne sont pas initialisées, veuillez vous déconnecter et ensuite vous reconnecter.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée pour l'application de chiffrement est invalide ! Veuillez mettre à jour le mot de passe de votre clef privée dans vos paramètres personnels pour récupérer l'accès à vos fichiers chiffrés.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Le chiffrement était désactivé mais vos fichiers sont toujours chiffrés. Veuillez vous rendre sur vos Paramètres personnels pour déchiffrer vos fichiers.",
+ "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Le chiffrement a été désactivé mais vos fichiers sont toujours chiffrés. Veuillez vous rendre sur vos paramètres personnels pour déchiffrer vos fichiers.",
"{dirs} and {files}" : "{dirs} et {files}",
"%s could not be renamed as it has been deleted" : "%s ne peut être renommé car il a été supprimé ",
"%s could not be renamed" : "%s ne peut être renommé",
diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json
index 8501a8551b7..26707810a75 100644
--- a/apps/files/l10n/fr.json
+++ b/apps/files/l10n/fr.json
@@ -68,7 +68,7 @@
"Your storage is almost full ({usedSpacePercent}%)" : "Votre espace de stockage est presque plein ({usedSpacePercent}%)",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'application de chiffrement est activée mais vos clés ne sont pas initialisées, veuillez vous déconnecter et ensuite vous reconnecter.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée pour l'application de chiffrement est invalide ! Veuillez mettre à jour le mot de passe de votre clef privée dans vos paramètres personnels pour récupérer l'accès à vos fichiers chiffrés.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Le chiffrement était désactivé mais vos fichiers sont toujours chiffrés. Veuillez vous rendre sur vos Paramètres personnels pour déchiffrer vos fichiers.",
+ "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Le chiffrement a été désactivé mais vos fichiers sont toujours chiffrés. Veuillez vous rendre sur vos paramètres personnels pour déchiffrer vos fichiers.",
"{dirs} and {files}" : "{dirs} et {files}",
"%s could not be renamed as it has been deleted" : "%s ne peut être renommé car il a été supprimé ",
"%s could not be renamed" : "%s ne peut être renommé",
diff --git a/apps/files/l10n/gl.js b/apps/files/l10n/gl.js
index a169f5c21cf..53757da49b5 100644
--- a/apps/files/l10n/gl.js
+++ b/apps/files/l10n/gl.js
@@ -6,6 +6,7 @@ OC.L10N.register(
"Unknown error" : "Produciuse un erro descoñecido",
"Could not move %s - File with this name already exists" : "Non foi posíbel mover %s; Xa existe un ficheiro con ese nome.",
"Could not move %s" : "Non foi posíbel mover %s",
+ "Permission denied" : "Permiso denegado",
"File name cannot be empty." : "O nome de ficheiro non pode estar baleiro",
"\"%s\" is an invalid file name." : "«%s» é un nome incorrecto de ficheiro.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nome incorrecto, non se permite «\\», «/», «<», «>», «:», «\"», «|», «?» e «*».",
diff --git a/apps/files/l10n/gl.json b/apps/files/l10n/gl.json
index cf1f30dcfc4..0e131a0ffa6 100644
--- a/apps/files/l10n/gl.json
+++ b/apps/files/l10n/gl.json
@@ -4,6 +4,7 @@
"Unknown error" : "Produciuse un erro descoñecido",
"Could not move %s - File with this name already exists" : "Non foi posíbel mover %s; Xa existe un ficheiro con ese nome.",
"Could not move %s" : "Non foi posíbel mover %s",
+ "Permission denied" : "Permiso denegado",
"File name cannot be empty." : "O nome de ficheiro non pode estar baleiro",
"\"%s\" is an invalid file name." : "«%s» é un nome incorrecto de ficheiro.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nome incorrecto, non se permite «\\», «/», «<», «>», «:», «\"», «|», «?» e «*».",
diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js
index a7fa14eb14a..21f8a12f4b5 100644
--- a/apps/files/tests/js/filelistSpec.js
+++ b/apps/files/tests/js/filelistSpec.js
@@ -97,7 +97,8 @@ describe('OCA.Files.FileList tests', function() {
name: 'One.txt',
mimetype: 'text/plain',
size: 12,
- etag: 'abc'
+ etag: 'abc',
+ permissions: OC.PERMISSION_ALL
}, {
id: 2,
type: 'file',
@@ -105,6 +106,7 @@ describe('OCA.Files.FileList tests', function() {
mimetype: 'image/jpeg',
size: 12049,
etag: 'def',
+ permissions: OC.PERMISSION_ALL
}, {
id: 3,
type: 'file',
@@ -112,13 +114,15 @@ describe('OCA.Files.FileList tests', function() {
mimetype: 'application/pdf',
size: 58009,
etag: '123',
+ permissions: OC.PERMISSION_ALL
}, {
id: 4,
type: 'dir',
name: 'somedir',
mimetype: 'httpd/unix-directory',
size: 250,
- etag: '456'
+ etag: '456',
+ permissions: OC.PERMISSION_ALL
}];
pageSizeStub = sinon.stub(OCA.Files.FileList.prototype, 'pageSize').returns(20);
fileList = new OCA.Files.FileList($('#app-content-files'));
@@ -1479,6 +1483,17 @@ describe('OCA.Files.FileList tests', function() {
$('.select-all').click();
expect(fileList.$el.find('.delete-selected').hasClass('hidden')).toEqual(true);
});
+ it('show doesnt show the delete action if one or more files are not deletable', function () {
+ fileList.setFiles(testFiles);
+ $('#permissions').val(OC.PERMISSION_READ | OC.PERMISSION_DELETE);
+ $('.select-all').click();
+ expect(fileList.$el.find('.delete-selected').hasClass('hidden')).toEqual(false);
+ testFiles[0].permissions = OC.PERMISSION_READ;
+ $('.select-all').click();
+ fileList.setFiles(testFiles);
+ $('.select-all').click();
+ expect(fileList.$el.find('.delete-selected').hasClass('hidden')).toEqual(true);
+ });
});
describe('Actions', function() {
beforeEach(function() {
@@ -1495,7 +1510,8 @@ describe('OCA.Files.FileList tests', function() {
mimetype: 'text/plain',
type: 'file',
size: 12,
- etag: 'abc'
+ etag: 'abc',
+ permissions: OC.PERMISSION_ALL
});
expect(files[1]).toEqual({
id: 3,
@@ -1503,7 +1519,8 @@ describe('OCA.Files.FileList tests', function() {
name: 'Three.pdf',
mimetype: 'application/pdf',
size: 58009,
- etag: '123'
+ etag: '123',
+ permissions: OC.PERMISSION_ALL
});
expect(files[2]).toEqual({
id: 4,
@@ -1511,7 +1528,8 @@ describe('OCA.Files.FileList tests', function() {
name: 'somedir',
mimetype: 'httpd/unix-directory',
size: 250,
- etag: '456'
+ etag: '456',
+ permissions: OC.PERMISSION_ALL
});
});
it('Removing a file removes it from the selection', function() {
@@ -1524,7 +1542,8 @@ describe('OCA.Files.FileList tests', function() {
mimetype: 'text/plain',
type: 'file',
size: 12,
- etag: 'abc'
+ etag: 'abc',
+ permissions: OC.PERMISSION_ALL
});
expect(files[1]).toEqual({
id: 4,
@@ -1532,7 +1551,8 @@ describe('OCA.Files.FileList tests', function() {
name: 'somedir',
mimetype: 'httpd/unix-directory',
size: 250,
- etag: '456'
+ etag: '456',
+ permissions: OC.PERMISSION_ALL
});
});
describe('Download', function() {
diff --git a/apps/files_encryption/ajax/changeRecoveryPassword.php b/apps/files_encryption/ajax/changeRecoveryPassword.php
index bf647f2c8fa..01b76a969b6 100644
--- a/apps/files_encryption/ajax/changeRecoveryPassword.php
+++ b/apps/files_encryption/ajax/changeRecoveryPassword.php
@@ -55,16 +55,15 @@ $proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
$keyId = $util->getRecoveryKeyId();
-$keyPath = '/owncloud_private_key/' . $keyId . '.private.key';
-$encryptedRecoveryKey = $view->file_get_contents($keyPath);
-$decryptedRecoveryKey = \OCA\Encryption\Crypt::decryptPrivateKey($encryptedRecoveryKey, $oldPassword);
+$encryptedRecoveryKey = Encryption\Keymanager::getPrivateSystemKey($keyId);
+$decryptedRecoveryKey = $encryptedRecoveryKey ? \OCA\Encryption\Crypt::decryptPrivateKey($encryptedRecoveryKey, $oldPassword) : false;
if ($decryptedRecoveryKey) {
$cipher = \OCA\Encryption\Helper::getCipher();
$encryptedKey = \OCA\Encryption\Crypt::symmetricEncryptFileContent($decryptedRecoveryKey, $newPassword, $cipher);
if ($encryptedKey) {
- \OCA\Encryption\Keymanager::setPrivateSystemKey($encryptedKey, $keyId . '.private.key');
+ \OCA\Encryption\Keymanager::setPrivateSystemKey($encryptedKey, $keyId);
$return = true;
}
}
diff --git a/apps/files_encryption/ajax/updatePrivateKeyPassword.php b/apps/files_encryption/ajax/updatePrivateKeyPassword.php
index fa5e279b21b..97da3811a0f 100644
--- a/apps/files_encryption/ajax/updatePrivateKeyPassword.php
+++ b/apps/files_encryption/ajax/updatePrivateKeyPassword.php
@@ -36,10 +36,8 @@ if ($passwordCorrect !== false) {
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
-$keyPath = '/' . $user . '/files_encryption/' . $user . '.private.key';
-
-$encryptedKey = $view->file_get_contents($keyPath);
-$decryptedKey = \OCA\Encryption\Crypt::decryptPrivateKey($encryptedKey, $oldPassword);
+$encryptedKey = Encryption\Keymanager::getPrivateKey($view, $user);
+$decryptedKey = $encryptedKey ? \OCA\Encryption\Crypt::decryptPrivateKey($encryptedKey, $oldPassword) : false;
if ($decryptedKey) {
$cipher = \OCA\Encryption\Helper::getCipher();
diff --git a/apps/files_encryption/appinfo/update.php b/apps/files_encryption/appinfo/update.php
index a29667ec6b6..957cf746974 100644
--- a/apps/files_encryption/appinfo/update.php
+++ b/apps/files_encryption/appinfo/update.php
@@ -4,7 +4,8 @@ use OCA\Files_Encryption\Migration;
$installedVersion=OCP\Config::getAppValue('files_encryption', 'installed_version');
-if (version_compare($installedVersion, '0.6', '<')) {
+// Migration OC7 -> OC8
+if (version_compare($installedVersion, '0.7', '<')) {
$m = new Migration();
- $m->dropTableEncryption();
+ $m->reorganizeFolderStructure();
}
diff --git a/apps/files_encryption/appinfo/version b/apps/files_encryption/appinfo/version
index ee6cdce3c29..faef31a4357 100644
--- a/apps/files_encryption/appinfo/version
+++ b/apps/files_encryption/appinfo/version
@@ -1 +1 @@
-0.6.1
+0.7.0
diff --git a/apps/files_encryption/exception/encryptionException.php b/apps/files_encryption/exception/encryptionException.php
index c51a3b3439f..de1f16b4f4b 100644
--- a/apps/files_encryption/exception/encryptionException.php
+++ b/apps/files_encryption/exception/encryptionException.php
@@ -27,7 +27,7 @@ namespace OCA\Encryption\Exception;
* Base class for all encryption exception
*
* Possible Error Codes:
- * 10 - unknown error
+ * 10 - generic error
* 20 - unexpected end of encryption header
* 30 - unexpected blog size
* 40 - encryption header to large
@@ -38,7 +38,7 @@ namespace OCA\Encryption\Exception;
* 90 - private key missing
*/
class EncryptionException extends \Exception {
- const UNKNOWN = 10;
+ const GENERIC = 10;
const UNEXPECTED_END_OF_ENCRYPTION_HEADER = 20;
const UNEXPECTED_BLOG_SIZE = 30;
const ENCRYPTION_HEADER_TO_LARGE = 40;
diff --git a/apps/files_encryption/hooks/hooks.php b/apps/files_encryption/hooks/hooks.php
index eadd2b64b80..a6b7555b376 100644
--- a/apps/files_encryption/hooks/hooks.php
+++ b/apps/files_encryption/hooks/hooks.php
@@ -3,8 +3,10 @@
/**
* ownCloud
*
- * @author Sam Tuke
- * @copyright 2012 Sam Tuke samtuke@owncloud.org
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Sam Tuke <samtuke@owncloud.org>
+ * @author 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
@@ -35,7 +37,7 @@ class Hooks {
// file for which we want to delete the keys after the delete operation was successful
private static $deleteFiles = array();
// file for which we want to delete the keys after the delete operation was successful
- private static $umountedFiles = array();
+ private static $unmountedFiles = array();
/**
* Startup encryption backend upon user login
@@ -64,7 +66,7 @@ class Hooks {
//check if all requirements are met
if (!Helper::checkRequirements() || !Helper::checkConfiguration()) {
$error_msg = $l->t("Missing requirements.");
- $hint = $l->t('Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled.');
+ $hint = $l->t('Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled.');
\OC_App::disable('files_encryption');
\OCP\Util::writeLog('Encryption library', $error_msg . ' ' . $hint, \OCP\Util::ERROR);
\OCP\Template::printErrorPage($error_msg, $hint);
@@ -150,18 +152,7 @@ class Hooks {
public static function postDeleteUser($params) {
if (\OCP\App::isEnabled('files_encryption')) {
- $view = new \OC\Files\View('/');
-
- // cleanup public key
- $publicKey = '/public-keys/' . $params['uid'] . '.public.key';
-
- // Disable encryption proxy to prevent recursive calls
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
- $view->unlink($publicKey);
-
- \OC_FileProxy::$enabled = $proxyStatus;
+ Keymanager::deletePublicKey(new \OC\Files\View(), $params['uid']);
}
}
@@ -242,7 +233,7 @@ class Hooks {
\OC_FileProxy::$enabled = false;
// Save public key
- $view->file_put_contents('/public-keys/' . $user . '.public.key', $keypair['publicKey']);
+ Keymanager::setPublicKey($keypair['publicKey'], $user);
// Encrypt private key with new password
$encryptedKey = \OCA\Encryption\Crypt::symmetricEncryptFileContent($keypair['privateKey'], $newUserPassword, Helper::getCipher());
@@ -290,7 +281,7 @@ class Hooks {
$l = new \OC_L10N('files_encryption');
$users = array();
- $view = new \OC\Files\View('/public-keys/');
+ $view = new \OC\Files\View('/');
switch ($params['shareType']) {
case \OCP\Share::SHARE_TYPE_USER:
@@ -303,7 +294,7 @@ class Hooks {
$notConfigured = array();
foreach ($users as $user) {
- if (!$view->file_exists($user . '.public.key')) {
+ if (!Keymanager::publicKeyExists($view, $user)) {
$notConfigured[] = $user;
}
}
@@ -328,7 +319,7 @@ class Hooks {
$path = \OC\Files\Filesystem::getPath($params['fileSource']);
- self::updateKeyfiles($path, $params['itemType']);
+ self::updateKeyfiles($path);
}
}
@@ -336,9 +327,8 @@ class Hooks {
* update keyfiles and share keys recursively
*
* @param string $path to the file/folder
- * @param string $type 'file' or 'folder'
*/
- private static function updateKeyfiles($path, $type) {
+ private static function updateKeyfiles($path) {
$view = new \OC\Files\View('/');
$userId = \OCP\User::getUser();
$session = new \OCA\Encryption\Session($view);
@@ -350,7 +340,7 @@ class Hooks {
$mountPoint = $mount->getMountPoint();
// if a folder was shared, get a list of all (sub-)folders
- if ($type === 'folder') {
+ if ($view->is_dir('/' . $userId . '/files' . $path)) {
$allFiles = $util->getAllFiles($path, $mountPoint);
} else {
$allFiles = array($path);
@@ -407,11 +397,10 @@ class Hooks {
// Unshare every user who no longer has access to the file
$delUsers = array_diff($userIds, $sharingUsers);
-
- list($owner, $ownerPath) = $util->getUidAndFilename($path);
+ $keyPath = Keymanager::getKeyPath($view, $util, $path);
// delete share key
- Keymanager::delShareKey($view, $delUsers, $ownerPath, $owner);
+ Keymanager::delShareKey($view, $delUsers, $keyPath, $userId, $path);
}
}
@@ -437,37 +426,24 @@ class Hooks {
$user = \OCP\User::getUser();
$view = new \OC\Files\View('/');
$util = new Util($view, $user);
- list($ownerOld, $pathOld) = $util->getUidAndFilename($params['oldpath']);
// we only need to rename the keys if the rename happens on the same mountpoint
// otherwise we perform a stream copy, so we get a new set of keys
$mp1 = $view->getMountPoint('/' . $user . '/files/' . $params['oldpath']);
$mp2 = $view->getMountPoint('/' . $user . '/files/' . $params['newpath']);
- $type = $view->is_dir('/' . $user . '/files/' . $params['oldpath']) ? 'folder' : 'file';
+ $oldKeysPath = Keymanager::getKeyPath($view, $util, $params['oldpath']);
if ($mp1 === $mp2) {
- if ($util->isSystemWideMountPoint($pathOld)) {
- $oldShareKeyPath = 'files_encryption/share-keys/' . $pathOld;
- } else {
- $oldShareKeyPath = $ownerOld . '/' . 'files_encryption/share-keys/' . $pathOld;
- }
- // gather share keys here because in postRename() the file will be moved already
- $oldShareKeys = Helper::findShareKeys($pathOld, $oldShareKeyPath, $view);
- if (count($oldShareKeys) === 0) {
- \OC_Log::write(
- 'Encryption library', 'No share keys found for "' . $pathOld . '"',
- \OC_Log::WARN
- );
- }
self::$renamedFiles[$params['oldpath']] = array(
- 'uid' => $ownerOld,
- 'path' => $pathOld,
- 'type' => $type,
'operation' => $operation,
- 'sharekeys' => $oldShareKeys
+ 'oldKeysPath' => $oldKeysPath,
+ );
+ } else {
+ self::$renamedFiles[$params['oldpath']] = array(
+ 'operation' => 'cleanup',
+ 'oldKeysPath' => $oldKeysPath,
);
-
}
}
@@ -482,81 +458,40 @@ class Hooks {
return true;
}
- // Disable encryption proxy to prevent recursive calls
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
$view = new \OC\Files\View('/');
$userId = \OCP\User::getUser();
$util = new Util($view, $userId);
- $oldShareKeys = null;
- if (isset(self::$renamedFiles[$params['oldpath']]['uid']) &&
- isset(self::$renamedFiles[$params['oldpath']]['path'])) {
- $ownerOld = self::$renamedFiles[$params['oldpath']]['uid'];
- $pathOld = self::$renamedFiles[$params['oldpath']]['path'];
- $type = self::$renamedFiles[$params['oldpath']]['type'];
+ if (isset(self::$renamedFiles[$params['oldpath']]['operation']) &&
+ isset(self::$renamedFiles[$params['oldpath']]['oldKeysPath'])) {
$operation = self::$renamedFiles[$params['oldpath']]['operation'];
- $oldShareKeys = self::$renamedFiles[$params['oldpath']]['sharekeys'];
+ $oldKeysPath = self::$renamedFiles[$params['oldpath']]['oldKeysPath'];
unset(self::$renamedFiles[$params['oldpath']]);
+ if ($operation === 'cleanup') {
+ return $view->unlink($oldKeysPath);
+ }
} else {
\OCP\Util::writeLog('Encryption library', "can't get path and owner from the file before it was renamed", \OCP\Util::DEBUG);
- \OC_FileProxy::$enabled = $proxyStatus;
return false;
}
list($ownerNew, $pathNew) = $util->getUidAndFilename($params['newpath']);
- // Format paths to be relative to user files dir
- if ($util->isSystemWideMountPoint($pathOld)) {
- $oldKeyfilePath = 'files_encryption/keyfiles/' . $pathOld;
- $oldShareKeyPath = 'files_encryption/share-keys/' . $pathOld;
- } else {
- $oldKeyfilePath = $ownerOld . '/' . 'files_encryption/keyfiles/' . $pathOld;
- $oldShareKeyPath = $ownerOld . '/' . 'files_encryption/share-keys/' . $pathOld;
- }
-
if ($util->isSystemWideMountPoint($pathNew)) {
- $newKeyfilePath = 'files_encryption/keyfiles/' . $pathNew;
- $newShareKeyPath = 'files_encryption/share-keys/' . $pathNew;
- } else {
- $newKeyfilePath = $ownerNew . '/files_encryption/keyfiles/' . $pathNew;
- $newShareKeyPath = $ownerNew . '/files_encryption/share-keys/' . $pathNew;
- }
-
- // create new key folders if it doesn't exists
- if (!$view->file_exists(dirname($newShareKeyPath))) {
- $view->mkdir(dirname($newShareKeyPath));
- }
- if (!$view->file_exists(dirname($newKeyfilePath))) {
- $view->mkdir(dirname($newKeyfilePath));
- }
-
- // handle share keys
- if ($type === 'file') {
- $oldKeyfilePath .= '.key';
- $newKeyfilePath .= '.key';
-
- foreach ($oldShareKeys as $src) {
- $dst = \OC\Files\Filesystem::normalizePath(str_replace($pathOld, $pathNew, $src));
- $view->$operation($src, $dst);
- }
-
+ $newKeysPath = 'files_encryption/keys/' . $pathNew;
} else {
- // handle share-keys folders
- $view->$operation($oldShareKeyPath, $newShareKeyPath);
+ $newKeysPath = $ownerNew . '/files_encryption/keys/' . $pathNew;
}
- // Rename keyfile so it isn't orphaned
- if ($view->file_exists($oldKeyfilePath)) {
- $view->$operation($oldKeyfilePath, $newKeyfilePath);
+ // create key folders if it doesn't exists
+ if (!$view->file_exists(dirname($newKeysPath))) {
+ $view->mkdir(dirname($newKeysPath));
}
+ $view->$operation($oldKeysPath, $newKeysPath);
// update sharing-keys
- self::updateKeyfiles($params['newpath'], $type);
-
- \OC_FileProxy::$enabled = $proxyStatus;
+ self::updateKeyfiles($params['newpath']);
}
/**
@@ -592,37 +527,28 @@ class Hooks {
*/
public static function postDelete($params) {
- if (!isset(self::$deleteFiles[$params[\OC\Files\Filesystem::signal_param_path]])) {
+ $path = $params[\OC\Files\Filesystem::signal_param_path];
+
+ if (!isset(self::$deleteFiles[$path])) {
return true;
}
- $deletedFile = self::$deleteFiles[$params[\OC\Files\Filesystem::signal_param_path]];
- $path = $deletedFile['path'];
- $user = $deletedFile['uid'];
+ $deletedFile = self::$deleteFiles[$path];
+ $keyPath = $deletedFile['keyPath'];
// we don't need to remember the file any longer
- unset(self::$deleteFiles[$params[\OC\Files\Filesystem::signal_param_path]]);
+ unset(self::$deleteFiles[$path]);
$view = new \OC\Files\View('/');
// return if the file still exists and wasn't deleted correctly
- if ($view->file_exists('/' . $user . '/files/' . $path)) {
+ if ($view->file_exists('/' . \OCP\User::getUser() . '/files/' . $path)) {
return true;
}
- // Disable encryption proxy to prevent recursive calls
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
// Delete keyfile & shareKey so it isn't orphaned
- if (!Keymanager::deleteFileKey($view, $path, $user)) {
- \OCP\Util::writeLog('Encryption library',
- 'Keyfile or shareKey could not be deleted for file "' . $user.'/files/'.$path . '"', \OCP\Util::ERROR);
- }
-
- Keymanager::delAllShareKeys($view, $user, $path);
+ $view->unlink($keyPath);
- \OC_FileProxy::$enabled = $proxyStatus;
}
/**
@@ -631,6 +557,7 @@ class Hooks {
* @return boolean|null
*/
public static function preDelete($params) {
+ $view = new \OC\Files\View('/');
$path = $params[\OC\Files\Filesystem::signal_param_path];
// skip this method if the trash bin is enabled or if we delete a file
@@ -639,68 +566,61 @@ class Hooks {
return true;
}
- $util = new Util(new \OC\Files\View('/'), \OCP\USER::getUser());
- list($owner, $ownerPath) = $util->getUidAndFilename($path);
+ $util = new Util($view, \OCP\USER::getUser());
- self::$deleteFiles[$params[\OC\Files\Filesystem::signal_param_path]] = array(
- 'uid' => $owner,
- 'path' => $ownerPath);
+ $keysPath = Keymanager::getKeyPath($view, $util, $path);
+
+ self::$deleteFiles[$path] = array(
+ 'keyPath' => $keysPath);
}
/**
* unmount file from yourself
* remember files/folders which get unmounted
*/
- public static function preUmount($params) {
+ public static function preUnmount($params) {
+ $view = new \OC\Files\View('/');
+ $user = \OCP\User::getUser();
$path = $params[\OC\Files\Filesystem::signal_param_path];
- $user = \OCP\USER::getUser();
-
- $view = new \OC\Files\View();
- $itemType = $view->is_dir('/' . $user . '/files' . $path) ? 'folder' : 'file';
$util = new Util($view, $user);
list($owner, $ownerPath) = $util->getUidAndFilename($path);
- self::$umountedFiles[$params[\OC\Files\Filesystem::signal_param_path]] = array(
- 'uid' => $owner,
- 'path' => $ownerPath,
- 'itemType' => $itemType);
+ $keysPath = Keymanager::getKeyPath($view, $util, $path);
+
+ self::$unmountedFiles[$path] = array(
+ 'keyPath' => $keysPath,
+ 'owner' => $owner,
+ 'ownerPath' => $ownerPath
+ );
}
/**
* unmount file from yourself
*/
- public static function postUmount($params) {
+ public static function postUnmount($params) {
- if (!isset(self::$umountedFiles[$params[\OC\Files\Filesystem::signal_param_path]])) {
+ $path = $params[\OC\Files\Filesystem::signal_param_path];
+ $user = \OCP\User::getUser();
+
+ if (!isset(self::$unmountedFiles[$path])) {
return true;
}
- $umountedFile = self::$umountedFiles[$params[\OC\Files\Filesystem::signal_param_path]];
- $path = $umountedFile['path'];
- $user = $umountedFile['uid'];
- $itemType = $umountedFile['itemType'];
+ $umountedFile = self::$unmountedFiles[$path];
+ $keyPath = $umountedFile['keyPath'];
+ $owner = $umountedFile['owner'];
+ $ownerPath = $umountedFile['ownerPath'];
$view = new \OC\Files\View();
- $util = new Util($view, $user);
// we don't need to remember the file any longer
- unset(self::$umountedFiles[$params[\OC\Files\Filesystem::signal_param_path]]);
+ unset(self::$unmountedFiles[$path]);
- // if we unshare a folder we need a list of all (sub-)files
- if ($itemType === 'folder') {
- $allFiles = $util->getAllFiles($path);
- } else {
- $allFiles = array($path);
- }
-
- foreach ($allFiles as $path) {
-
- // check if the user still has access to the file, otherwise delete share key
- $sharingUsers = \OCP\Share::getUsersSharingFile($path, $user);
- if (!in_array(\OCP\User::getUser(), $sharingUsers['users'])) {
- Keymanager::delShareKey($view, array(\OCP\User::getUser()), $path, $user);
- }
+ // check if the user still has access to the file, otherwise delete share key
+ $sharingUsers = \OCP\Share::getUsersSharingFile($path, $user);
+ if (!in_array(\OCP\User::getUser(), $sharingUsers['users'])) {
+ Keymanager::delShareKey($view, array(\OCP\User::getUser()), $keyPath, $owner, $ownerPath);
}
}
diff --git a/apps/files_encryption/l10n/ar.js b/apps/files_encryption/l10n/ar.js
index 9f51322cf92..ce9c2e91fb8 100644
--- a/apps/files_encryption/l10n/ar.js
+++ b/apps/files_encryption/l10n/ar.js
@@ -15,7 +15,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "لا يمكن فك التشفير من هذا الملف, من الممكن ان يكون هذا الملف مُشارك. يرجى سؤال صاحب الملف لإعادة مشاركتة معك.",
"Unknown error. Please check your system settings or contact your administrator" : "خطأ غير معروف, الرجاء التحقق من إعدادات نظامك أو راسل المدير",
"Missing requirements." : "متطلبات ناقصة.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "يرجى التاكد من ان اصدار PHP 5.3.3 او احدث , مثبت و التاكد من ان OpenSSL مفعل و مهيئ بشكل صحيح. حتى الان برنامج التتشفير تم تعطيلة.",
"Following users are not set up for encryption:" : "المستخدمين التاليين لم يتم تعيين لهم التشفيير:",
"Initial encryption started... This can take some time. Please wait." : "بدأ التشفير... من الممكن ان ياخذ بعض الوقت. يرجى الانتظار.",
"Initial encryption running... Please try again later." : "جاري تفعيل التشفير المبدئي ، الرجاء المحاولة لاحقا",
diff --git a/apps/files_encryption/l10n/ar.json b/apps/files_encryption/l10n/ar.json
index d7caa1b31d0..d43201b8cd5 100644
--- a/apps/files_encryption/l10n/ar.json
+++ b/apps/files_encryption/l10n/ar.json
@@ -13,7 +13,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "لا يمكن فك التشفير من هذا الملف, من الممكن ان يكون هذا الملف مُشارك. يرجى سؤال صاحب الملف لإعادة مشاركتة معك.",
"Unknown error. Please check your system settings or contact your administrator" : "خطأ غير معروف, الرجاء التحقق من إعدادات نظامك أو راسل المدير",
"Missing requirements." : "متطلبات ناقصة.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "يرجى التاكد من ان اصدار PHP 5.3.3 او احدث , مثبت و التاكد من ان OpenSSL مفعل و مهيئ بشكل صحيح. حتى الان برنامج التتشفير تم تعطيلة.",
"Following users are not set up for encryption:" : "المستخدمين التاليين لم يتم تعيين لهم التشفيير:",
"Initial encryption started... This can take some time. Please wait." : "بدأ التشفير... من الممكن ان ياخذ بعض الوقت. يرجى الانتظار.",
"Initial encryption running... Please try again later." : "جاري تفعيل التشفير المبدئي ، الرجاء المحاولة لاحقا",
diff --git a/apps/files_encryption/l10n/ast.js b/apps/files_encryption/l10n/ast.js
index c909d4ee021..c350f3605c2 100644
--- a/apps/files_encryption/l10n/ast.js
+++ b/apps/files_encryption/l10n/ast.js
@@ -15,7 +15,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Nun pudo descifrase esti ficheru, dablemente seya un ficheru compartíu. Solicita al propietariu del mesmu que vuelva a compartilu contigo.",
"Unknown error. Please check your system settings or contact your administrator" : "Fallu desconocíu. Por favor, comprueba los axustes del sistema o contauta col alministrador",
"Missing requirements." : "Requisitos incompletos.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, asegúrate de que PHP 5.3.3 o postreru ta instaláu y que la estensión OpenSSL de PHP ta habilitada y configurada correutamente. Pel momentu, l'aplicación de cifráu deshabilitóse.",
"Following users are not set up for encryption:" : "Los siguientes usuarios nun se configuraron pal cifráu:",
"Initial encryption started... This can take some time. Please wait." : "Cifráu aniciáu..... Esto pue llevar un tiempu. Por favor espera.",
"Initial encryption running... Please try again later." : "Cifráu inicial en cursu... Inténtalo dempués.",
diff --git a/apps/files_encryption/l10n/ast.json b/apps/files_encryption/l10n/ast.json
index d34a727863d..6418e044717 100644
--- a/apps/files_encryption/l10n/ast.json
+++ b/apps/files_encryption/l10n/ast.json
@@ -13,7 +13,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Nun pudo descifrase esti ficheru, dablemente seya un ficheru compartíu. Solicita al propietariu del mesmu que vuelva a compartilu contigo.",
"Unknown error. Please check your system settings or contact your administrator" : "Fallu desconocíu. Por favor, comprueba los axustes del sistema o contauta col alministrador",
"Missing requirements." : "Requisitos incompletos.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, asegúrate de que PHP 5.3.3 o postreru ta instaláu y que la estensión OpenSSL de PHP ta habilitada y configurada correutamente. Pel momentu, l'aplicación de cifráu deshabilitóse.",
"Following users are not set up for encryption:" : "Los siguientes usuarios nun se configuraron pal cifráu:",
"Initial encryption started... This can take some time. Please wait." : "Cifráu aniciáu..... Esto pue llevar un tiempu. Por favor espera.",
"Initial encryption running... Please try again later." : "Cifráu inicial en cursu... Inténtalo dempués.",
diff --git a/apps/files_encryption/l10n/bg_BG.js b/apps/files_encryption/l10n/bg_BG.js
index 87ffacc697d..258c9d2723e 100644
--- a/apps/files_encryption/l10n/bg_BG.js
+++ b/apps/files_encryption/l10n/bg_BG.js
@@ -24,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Неуспешно разшифроване на този файл, вероятно това е споделен файл. Моля, поискай собственика на файла да го сподели повторно с теб.",
"Unknown error. Please check your system settings or contact your administrator" : "Непозната грешка. Моля, провери системните настройки или се свържи с администратора.",
"Missing requirements." : "Липсва задължителна информация.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Моля, увери се, че PHP 5.3.3 или по-нова версия е инсталирана, и че OpenSSL заедно съответната PHP добавка са включени и правилно настроени. За сега, криптиращото приложение ще бъде изключено.",
"Following users are not set up for encryption:" : "Следните потребители не са настроени за криптиране:",
"Initial encryption started... This can take some time. Please wait." : "Първоначалното криптиране започна... Това може да отнеме време. Моля изчакай.",
"Initial encryption running... Please try again later." : "Тече първоначално криптиране... Моля опитай по-късно.",
diff --git a/apps/files_encryption/l10n/bg_BG.json b/apps/files_encryption/l10n/bg_BG.json
index 6e0ac83b494..8a2abbfc5c4 100644
--- a/apps/files_encryption/l10n/bg_BG.json
+++ b/apps/files_encryption/l10n/bg_BG.json
@@ -22,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Неуспешно разшифроване на този файл, вероятно това е споделен файл. Моля, поискай собственика на файла да го сподели повторно с теб.",
"Unknown error. Please check your system settings or contact your administrator" : "Непозната грешка. Моля, провери системните настройки или се свържи с администратора.",
"Missing requirements." : "Липсва задължителна информация.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Моля, увери се, че PHP 5.3.3 или по-нова версия е инсталирана, и че OpenSSL заедно съответната PHP добавка са включени и правилно настроени. За сега, криптиращото приложение ще бъде изключено.",
"Following users are not set up for encryption:" : "Следните потребители не са настроени за криптиране:",
"Initial encryption started... This can take some time. Please wait." : "Първоначалното криптиране започна... Това може да отнеме време. Моля изчакай.",
"Initial encryption running... Please try again later." : "Тече първоначално криптиране... Моля опитай по-късно.",
diff --git a/apps/files_encryption/l10n/ca.js b/apps/files_encryption/l10n/ca.js
index 2cc924a7523..033792d4233 100644
--- a/apps/files_encryption/l10n/ca.js
+++ b/apps/files_encryption/l10n/ca.js
@@ -15,7 +15,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es pot desencriptar aquest fitxer, probablement és un fitxer compartit. Demaneu al propietari del fitxer que el comparteixi de nou amb vós.",
"Unknown error. Please check your system settings or contact your administrator" : "Error desconegut. Comproveu l'arranjament del sistema o aviseu a l'administrador",
"Missing requirements." : "Manca de requisits.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Assegureu-vos que teniu instal·lat PHP 5.3.3 o una versió superior i que està activat Open SSL i habilitada i configurada correctament l'extensió de PHP. De moment, l'aplicació d'encriptació s'ha desactivat.",
"Following users are not set up for encryption:" : "Els usuaris següents no estan configurats per a l'encriptació:",
"Initial encryption started... This can take some time. Please wait." : "La encriptació inicial ha començat... Pot trigar una estona, espereu.",
"Initial encryption running... Please try again later." : "encriptació inicial en procés... Proveu-ho més tard.",
diff --git a/apps/files_encryption/l10n/ca.json b/apps/files_encryption/l10n/ca.json
index 378af112cf2..85130ff900e 100644
--- a/apps/files_encryption/l10n/ca.json
+++ b/apps/files_encryption/l10n/ca.json
@@ -13,7 +13,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es pot desencriptar aquest fitxer, probablement és un fitxer compartit. Demaneu al propietari del fitxer que el comparteixi de nou amb vós.",
"Unknown error. Please check your system settings or contact your administrator" : "Error desconegut. Comproveu l'arranjament del sistema o aviseu a l'administrador",
"Missing requirements." : "Manca de requisits.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Assegureu-vos que teniu instal·lat PHP 5.3.3 o una versió superior i que està activat Open SSL i habilitada i configurada correctament l'extensió de PHP. De moment, l'aplicació d'encriptació s'ha desactivat.",
"Following users are not set up for encryption:" : "Els usuaris següents no estan configurats per a l'encriptació:",
"Initial encryption started... This can take some time. Please wait." : "La encriptació inicial ha començat... Pot trigar una estona, espereu.",
"Initial encryption running... Please try again later." : "encriptació inicial en procés... Proveu-ho més tard.",
diff --git a/apps/files_encryption/l10n/cs_CZ.js b/apps/files_encryption/l10n/cs_CZ.js
index 5d4d36557b7..af26da94d78 100644
--- a/apps/files_encryption/l10n/cs_CZ.js
+++ b/apps/files_encryption/l10n/cs_CZ.js
@@ -24,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento soubor se nepodařilo dešifrovat, pravděpodobně je sdílený. Požádejte prosím majitele souboru, aby jej s vámi znovu sdílel.",
"Unknown error. Please check your system settings or contact your administrator" : "Neznámá chyba. Zkontrolujte nastavení systému nebo kontaktujte vašeho správce.",
"Missing requirements." : "Nesplněné závislosti.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Ujistěte se prosím, že máte nainstalované PHP 5.3.3 nebo novější a že máte povolené a správně nakonfigurované OpenSSL včetně jeho rozšíření pro PHP. Prozatím byla aplikace pro šifrování vypnuta.",
"Following users are not set up for encryption:" : "Následující uživatelé nemají nastavené šifrování:",
"Initial encryption started... This can take some time. Please wait." : "Počáteční šifrování zahájeno... Toto může chvíli trvat. Počkejte prosím.",
"Initial encryption running... Please try again later." : "Probíhá počáteční šifrování... Zkuste to prosím znovu později.",
diff --git a/apps/files_encryption/l10n/cs_CZ.json b/apps/files_encryption/l10n/cs_CZ.json
index 3f25a78695e..f60e17ec0e2 100644
--- a/apps/files_encryption/l10n/cs_CZ.json
+++ b/apps/files_encryption/l10n/cs_CZ.json
@@ -22,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento soubor se nepodařilo dešifrovat, pravděpodobně je sdílený. Požádejte prosím majitele souboru, aby jej s vámi znovu sdílel.",
"Unknown error. Please check your system settings or contact your administrator" : "Neznámá chyba. Zkontrolujte nastavení systému nebo kontaktujte vašeho správce.",
"Missing requirements." : "Nesplněné závislosti.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Ujistěte se prosím, že máte nainstalované PHP 5.3.3 nebo novější a že máte povolené a správně nakonfigurované OpenSSL včetně jeho rozšíření pro PHP. Prozatím byla aplikace pro šifrování vypnuta.",
"Following users are not set up for encryption:" : "Následující uživatelé nemají nastavené šifrování:",
"Initial encryption started... This can take some time. Please wait." : "Počáteční šifrování zahájeno... Toto může chvíli trvat. Počkejte prosím.",
"Initial encryption running... Please try again later." : "Probíhá počáteční šifrování... Zkuste to prosím znovu později.",
diff --git a/apps/files_encryption/l10n/da.js b/apps/files_encryption/l10n/da.js
index 95e3a115cd7..eea2a08f83a 100644
--- a/apps/files_encryption/l10n/da.js
+++ b/apps/files_encryption/l10n/da.js
@@ -24,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke kryptere denne fil, sandsynligvis fordi felen er delt. Bed venligst filens ejer om at dele den med dig på ny.",
"Unknown error. Please check your system settings or contact your administrator" : "Ukendt fejl. Venligst tjek dine systemindstillinger eller kontakt din systemadministrator",
"Missing requirements." : "Manglende betingelser.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Sørg for at PHP 5.3.3 eller nyere er installeret og at OpenSSL sammen med PHP-udvidelsen er aktiveret og korrekt konfigureret. Indtil videre er krypteringsprogrammet deaktiveret.",
"Following users are not set up for encryption:" : "Følgende brugere er ikke sat op til kryptering:",
"Initial encryption started... This can take some time. Please wait." : "Førstegangskrypteringen er påbegyndt... Dette kan tage nogen tid. Vent venligst.",
"Initial encryption running... Please try again later." : "Kryptering foretages... Prøv venligst igen senere.",
diff --git a/apps/files_encryption/l10n/da.json b/apps/files_encryption/l10n/da.json
index 141d6998d47..96d989ce7ba 100644
--- a/apps/files_encryption/l10n/da.json
+++ b/apps/files_encryption/l10n/da.json
@@ -22,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke kryptere denne fil, sandsynligvis fordi felen er delt. Bed venligst filens ejer om at dele den med dig på ny.",
"Unknown error. Please check your system settings or contact your administrator" : "Ukendt fejl. Venligst tjek dine systemindstillinger eller kontakt din systemadministrator",
"Missing requirements." : "Manglende betingelser.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Sørg for at PHP 5.3.3 eller nyere er installeret og at OpenSSL sammen med PHP-udvidelsen er aktiveret og korrekt konfigureret. Indtil videre er krypteringsprogrammet deaktiveret.",
"Following users are not set up for encryption:" : "Følgende brugere er ikke sat op til kryptering:",
"Initial encryption started... This can take some time. Please wait." : "Førstegangskrypteringen er påbegyndt... Dette kan tage nogen tid. Vent venligst.",
"Initial encryption running... Please try again later." : "Kryptering foretages... Prøv venligst igen senere.",
diff --git a/apps/files_encryption/l10n/de.js b/apps/files_encryption/l10n/de.js
index e02b6cd473c..c6a61b3a232 100644
--- a/apps/files_encryption/l10n/de.js
+++ b/apps/files_encryption/l10n/de.js
@@ -24,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Die Datei kann nicht entschlüsselt werden, da die Datei möglicherweise eine geteilte Datei ist. Bitte frage den Dateibesitzer, ob er die Datei nochmals mit Dir teilt.",
"Unknown error. Please check your system settings or contact your administrator" : "Unbekannter Fehler. Bitte prüfe Deine Systemeinstellungen oder kontaktiere Deinen Administrator",
"Missing requirements." : "Fehlende Vorraussetzungen",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Bitte stelle sicher, dass PHP 5.3.3 oder neuer installiert und das OpenSSL zusammen mit der PHP-Erweiterung aktiviert und richtig konfiguriert ist. Zur Zeit ist die Verschlüsselungs-App deaktiviert.",
"Following users are not set up for encryption:" : "Für folgende Nutzer ist keine Verschlüsselung eingerichtet:",
"Initial encryption started... This can take some time. Please wait." : "Initialverschlüsselung gestartet... Dies kann einige Zeit dauern. Bitte warten.",
"Initial encryption running... Please try again later." : "Anfangsverschlüsselung läuft … Bitte versuche es später wieder.",
diff --git a/apps/files_encryption/l10n/de.json b/apps/files_encryption/l10n/de.json
index c3077fc61a9..4739c547537 100644
--- a/apps/files_encryption/l10n/de.json
+++ b/apps/files_encryption/l10n/de.json
@@ -22,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Die Datei kann nicht entschlüsselt werden, da die Datei möglicherweise eine geteilte Datei ist. Bitte frage den Dateibesitzer, ob er die Datei nochmals mit Dir teilt.",
"Unknown error. Please check your system settings or contact your administrator" : "Unbekannter Fehler. Bitte prüfe Deine Systemeinstellungen oder kontaktiere Deinen Administrator",
"Missing requirements." : "Fehlende Vorraussetzungen",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Bitte stelle sicher, dass PHP 5.3.3 oder neuer installiert und das OpenSSL zusammen mit der PHP-Erweiterung aktiviert und richtig konfiguriert ist. Zur Zeit ist die Verschlüsselungs-App deaktiviert.",
"Following users are not set up for encryption:" : "Für folgende Nutzer ist keine Verschlüsselung eingerichtet:",
"Initial encryption started... This can take some time. Please wait." : "Initialverschlüsselung gestartet... Dies kann einige Zeit dauern. Bitte warten.",
"Initial encryption running... Please try again later." : "Anfangsverschlüsselung läuft … Bitte versuche es später wieder.",
diff --git a/apps/files_encryption/l10n/de_DE.js b/apps/files_encryption/l10n/de_DE.js
index 84dd13df2a9..5b5e12c78a4 100644
--- a/apps/files_encryption/l10n/de_DE.js
+++ b/apps/files_encryption/l10n/de_DE.js
@@ -24,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Die Datei kann nicht entschlüsselt werden, da die Datei möglicherweise eine geteilte Datei ist. Bitte fragen Sie den Dateibesitzer, dass er die Datei nochmals mit Ihnen teilt.",
"Unknown error. Please check your system settings or contact your administrator" : "Unbekannter Fehler. Bitte prüfen Sie die Systemeinstellungen oder kontaktieren Sie Ihren Administrator",
"Missing requirements." : "Fehlende Voraussetzungen",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Bitte stellen Sie sicher, dass PHP 5.3.3 oder neuer installiert und das OpenSSL zusammen mit der PHP-Erweiterung aktiviert und richtig konfiguriert ist. Zur Zeit ist die Verschlüsselungs-App deaktiviert.",
"Following users are not set up for encryption:" : "Für folgende Nutzer ist keine Verschlüsselung eingerichtet:",
"Initial encryption started... This can take some time. Please wait." : "Anfangsverschlüsselung gestartet … Dieses kann einige Zeit dauern. Bitte warten.",
"Initial encryption running... Please try again later." : "Anfangsverschlüsselung läuft … Bitte versuchen Sie es später wieder.",
diff --git a/apps/files_encryption/l10n/de_DE.json b/apps/files_encryption/l10n/de_DE.json
index 0e9ee5084c4..8830cc6022d 100644
--- a/apps/files_encryption/l10n/de_DE.json
+++ b/apps/files_encryption/l10n/de_DE.json
@@ -22,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Die Datei kann nicht entschlüsselt werden, da die Datei möglicherweise eine geteilte Datei ist. Bitte fragen Sie den Dateibesitzer, dass er die Datei nochmals mit Ihnen teilt.",
"Unknown error. Please check your system settings or contact your administrator" : "Unbekannter Fehler. Bitte prüfen Sie die Systemeinstellungen oder kontaktieren Sie Ihren Administrator",
"Missing requirements." : "Fehlende Voraussetzungen",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Bitte stellen Sie sicher, dass PHP 5.3.3 oder neuer installiert und das OpenSSL zusammen mit der PHP-Erweiterung aktiviert und richtig konfiguriert ist. Zur Zeit ist die Verschlüsselungs-App deaktiviert.",
"Following users are not set up for encryption:" : "Für folgende Nutzer ist keine Verschlüsselung eingerichtet:",
"Initial encryption started... This can take some time. Please wait." : "Anfangsverschlüsselung gestartet … Dieses kann einige Zeit dauern. Bitte warten.",
"Initial encryption running... Please try again later." : "Anfangsverschlüsselung läuft … Bitte versuchen Sie es später wieder.",
diff --git a/apps/files_encryption/l10n/el.js b/apps/files_encryption/l10n/el.js
index 03a94c2a85e..4f29f7adf96 100644
--- a/apps/files_encryption/l10n/el.js
+++ b/apps/files_encryption/l10n/el.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλώ ζητήστε από τον ιδιοκτήτη του αρχείου να το ξαναμοιραστεί μαζί σας.",
"Unknown error. Please check your system settings or contact your administrator" : "Άγνωστο σφάλμα. Παρακαλώ ελέγξτε τις ρυθμίσεις του συστήματό σας ή επικοινωνήστε με τον διαχειριστή συστημάτων σας",
"Missing requirements." : "Προαπαιτούμενα που απουσιάζουν.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Παρακαλώ επιβεβαιώστε ότι η PHP 5.3.3 ή νεότερη είναι εγκατεστημένη και ότι το OpenSSL μαζί με το PHP extension είναι ενεργοποιήμένο και έχει ρυθμιστεί σωστά. Προς το παρόν, η εφαρμογή κρυπτογράφησης είναι απενεργοποιημένη.",
"Following users are not set up for encryption:" : "Οι κάτωθι χρήστες δεν έχουν ρυθμιστεί για κρυπογράφηση:",
"Initial encryption started... This can take some time. Please wait." : "Η αρχική κρυπτογράφηση άρχισε... Αυτό μπορεί να πάρει κάποια ώρα. Παρακαλώ περιμένετε.",
"Initial encryption running... Please try again later." : "Εκτέλεση αρχικής κρυπτογράφησης... Παρακαλώ προσπαθήστε αργότερα.",
diff --git a/apps/files_encryption/l10n/el.json b/apps/files_encryption/l10n/el.json
index 13ed5ab7755..1157966dcef 100644
--- a/apps/files_encryption/l10n/el.json
+++ b/apps/files_encryption/l10n/el.json
@@ -20,7 +20,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλώ ζητήστε από τον ιδιοκτήτη του αρχείου να το ξαναμοιραστεί μαζί σας.",
"Unknown error. Please check your system settings or contact your administrator" : "Άγνωστο σφάλμα. Παρακαλώ ελέγξτε τις ρυθμίσεις του συστήματό σας ή επικοινωνήστε με τον διαχειριστή συστημάτων σας",
"Missing requirements." : "Προαπαιτούμενα που απουσιάζουν.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Παρακαλώ επιβεβαιώστε ότι η PHP 5.3.3 ή νεότερη είναι εγκατεστημένη και ότι το OpenSSL μαζί με το PHP extension είναι ενεργοποιήμένο και έχει ρυθμιστεί σωστά. Προς το παρόν, η εφαρμογή κρυπτογράφησης είναι απενεργοποιημένη.",
"Following users are not set up for encryption:" : "Οι κάτωθι χρήστες δεν έχουν ρυθμιστεί για κρυπογράφηση:",
"Initial encryption started... This can take some time. Please wait." : "Η αρχική κρυπτογράφηση άρχισε... Αυτό μπορεί να πάρει κάποια ώρα. Παρακαλώ περιμένετε.",
"Initial encryption running... Please try again later." : "Εκτέλεση αρχικής κρυπτογράφησης... Παρακαλώ προσπαθήστε αργότερα.",
diff --git a/apps/files_encryption/l10n/en_GB.js b/apps/files_encryption/l10n/en_GB.js
index cae7d2c9679..96a13912ef3 100644
--- a/apps/files_encryption/l10n/en_GB.js
+++ b/apps/files_encryption/l10n/en_GB.js
@@ -24,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Cannot decrypt this file, which is probably a shared file. Please ask the file owner to reshare the file with you.",
"Unknown error. Please check your system settings or contact your administrator" : "Unknown error. Please check your system settings or contact your administrator",
"Missing requirements." : "Missing requirements.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled.",
"Following users are not set up for encryption:" : "Following users are not set up for encryption:",
"Initial encryption started... This can take some time. Please wait." : "Initial encryption started... This can take some time. Please wait.",
"Initial encryption running... Please try again later." : "Initial encryption running... Please try again later.",
diff --git a/apps/files_encryption/l10n/en_GB.json b/apps/files_encryption/l10n/en_GB.json
index d0b9ece1781..3a722673a84 100644
--- a/apps/files_encryption/l10n/en_GB.json
+++ b/apps/files_encryption/l10n/en_GB.json
@@ -22,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Cannot decrypt this file, which is probably a shared file. Please ask the file owner to reshare the file with you.",
"Unknown error. Please check your system settings or contact your administrator" : "Unknown error. Please check your system settings or contact your administrator",
"Missing requirements." : "Missing requirements.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled.",
"Following users are not set up for encryption:" : "Following users are not set up for encryption:",
"Initial encryption started... This can take some time. Please wait." : "Initial encryption started... This can take some time. Please wait.",
"Initial encryption running... Please try again later." : "Initial encryption running... Please try again later.",
diff --git a/apps/files_encryption/l10n/es.js b/apps/files_encryption/l10n/es.js
index 28f52666d45..045b0ee8abe 100644
--- a/apps/files_encryption/l10n/es.js
+++ b/apps/files_encryption/l10n/es.js
@@ -24,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.",
"Unknown error. Please check your system settings or contact your administrator" : "Error desconocido. Revise la configuración de su sistema o contacte a su administrador",
"Missing requirements." : "Requisitos incompletos.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, asegúrese de que PHP 5.3.3 o posterior está instalado y que la extensión OpenSSL de PHP está habilitada y configurada correctamente. Por el momento, la aplicación de cifrado ha sido deshabilitada.",
"Following users are not set up for encryption:" : "Los siguientes usuarios no han sido configurados para el cifrado:",
"Initial encryption started... This can take some time. Please wait." : "Encriptación iniciada..... Esto puede tomar un tiempo. Por favor espere.",
"Initial encryption running... Please try again later." : "Cifrado inicial en curso... Inténtelo más tarde.",
diff --git a/apps/files_encryption/l10n/es.json b/apps/files_encryption/l10n/es.json
index 8bed1ad1aba..f3717c0c049 100644
--- a/apps/files_encryption/l10n/es.json
+++ b/apps/files_encryption/l10n/es.json
@@ -22,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.",
"Unknown error. Please check your system settings or contact your administrator" : "Error desconocido. Revise la configuración de su sistema o contacte a su administrador",
"Missing requirements." : "Requisitos incompletos.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, asegúrese de que PHP 5.3.3 o posterior está instalado y que la extensión OpenSSL de PHP está habilitada y configurada correctamente. Por el momento, la aplicación de cifrado ha sido deshabilitada.",
"Following users are not set up for encryption:" : "Los siguientes usuarios no han sido configurados para el cifrado:",
"Initial encryption started... This can take some time. Please wait." : "Encriptación iniciada..... Esto puede tomar un tiempo. Por favor espere.",
"Initial encryption running... Please try again later." : "Cifrado inicial en curso... Inténtelo más tarde.",
diff --git a/apps/files_encryption/l10n/es_AR.js b/apps/files_encryption/l10n/es_AR.js
index bde0e920689..e0da73dae9b 100644
--- a/apps/files_encryption/l10n/es_AR.js
+++ b/apps/files_encryption/l10n/es_AR.js
@@ -14,7 +14,6 @@ OC.L10N.register(
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "¡Tu llave privada no es válida! Aparenta que tu clave fue cambiada fuera de %s (de tus directorios). Puedes actualizar la contraseña de tu clave privadaen las configuraciones personales para recobrar el acceso a tus archivos encriptados.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No se puede descibrar este archivo, probablemente sea un archivo compartido. Por favor pídele al dueño que recomparta el archivo contigo.",
"Missing requirements." : "Requisitos incompletos.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, asegúrese de que PHP 5.3.3 o una versión más reciente esté instalado y que OpenSSL junto con la extensión PHP esté habilitado y configurado apropiadamente. Por ahora, la aplicación de encriptación ha sido deshabilitada.",
"Following users are not set up for encryption:" : "Los siguientes usuarios no fueron configurados para encriptar:",
"Initial encryption started... This can take some time. Please wait." : "Encriptación inicial comenzada... Esto puede durar un tiempo. Por favor espere.",
"Initial encryption running... Please try again later." : "Encriptación inicial corriendo... Por favor intente mas tarde. ",
diff --git a/apps/files_encryption/l10n/es_AR.json b/apps/files_encryption/l10n/es_AR.json
index 6251abd7ec6..ac76c994787 100644
--- a/apps/files_encryption/l10n/es_AR.json
+++ b/apps/files_encryption/l10n/es_AR.json
@@ -12,7 +12,6 @@
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "¡Tu llave privada no es válida! Aparenta que tu clave fue cambiada fuera de %s (de tus directorios). Puedes actualizar la contraseña de tu clave privadaen las configuraciones personales para recobrar el acceso a tus archivos encriptados.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No se puede descibrar este archivo, probablemente sea un archivo compartido. Por favor pídele al dueño que recomparta el archivo contigo.",
"Missing requirements." : "Requisitos incompletos.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, asegúrese de que PHP 5.3.3 o una versión más reciente esté instalado y que OpenSSL junto con la extensión PHP esté habilitado y configurado apropiadamente. Por ahora, la aplicación de encriptación ha sido deshabilitada.",
"Following users are not set up for encryption:" : "Los siguientes usuarios no fueron configurados para encriptar:",
"Initial encryption started... This can take some time. Please wait." : "Encriptación inicial comenzada... Esto puede durar un tiempo. Por favor espere.",
"Initial encryption running... Please try again later." : "Encriptación inicial corriendo... Por favor intente mas tarde. ",
diff --git a/apps/files_encryption/l10n/es_MX.js b/apps/files_encryption/l10n/es_MX.js
index 99a633c6e43..e445cd03b05 100644
--- a/apps/files_encryption/l10n/es_MX.js
+++ b/apps/files_encryption/l10n/es_MX.js
@@ -14,7 +14,6 @@ OC.L10N.register(
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "¡Su clave privada no es válida! Tal vez su contraseña ha sido cambiada desde fuera. de %s (Ej:Su directorio corporativo). Puede actualizar la contraseña de su clave privada en sus opciones personales para recuperar el acceso a sus archivos.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.",
"Missing requirements." : "Requisitos incompletos.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, asegúrese de que PHP 5.3.3 o posterior está instalado y que la extensión OpenSSL de PHP está habilitada y configurada correctamente. Por el momento, la aplicación de cifrado ha sido deshabilitada.",
"Following users are not set up for encryption:" : "Los siguientes usuarios no han sido configurados para el cifrado:",
"Initial encryption started... This can take some time. Please wait." : "Encriptación iniciada... Esto puede tomar un tiempo. Por favor espere.",
"Encryption" : "Cifrado",
diff --git a/apps/files_encryption/l10n/es_MX.json b/apps/files_encryption/l10n/es_MX.json
index fe257ee670a..3ca4e51a139 100644
--- a/apps/files_encryption/l10n/es_MX.json
+++ b/apps/files_encryption/l10n/es_MX.json
@@ -12,7 +12,6 @@
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "¡Su clave privada no es válida! Tal vez su contraseña ha sido cambiada desde fuera. de %s (Ej:Su directorio corporativo). Puede actualizar la contraseña de su clave privada en sus opciones personales para recuperar el acceso a sus archivos.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.",
"Missing requirements." : "Requisitos incompletos.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, asegúrese de que PHP 5.3.3 o posterior está instalado y que la extensión OpenSSL de PHP está habilitada y configurada correctamente. Por el momento, la aplicación de cifrado ha sido deshabilitada.",
"Following users are not set up for encryption:" : "Los siguientes usuarios no han sido configurados para el cifrado:",
"Initial encryption started... This can take some time. Please wait." : "Encriptación iniciada... Esto puede tomar un tiempo. Por favor espere.",
"Encryption" : "Cifrado",
diff --git a/apps/files_encryption/l10n/et_EE.js b/apps/files_encryption/l10n/et_EE.js
index 93fa8084ff9..57297e8b9a3 100644
--- a/apps/files_encryption/l10n/et_EE.js
+++ b/apps/files_encryption/l10n/et_EE.js
@@ -24,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Sa ei saa seda faili dekrüpteerida, see on tõenäoliselt jagatud fail. Palun lase omanikul seda faili sinuga uuesti jagada.",
"Unknown error. Please check your system settings or contact your administrator" : "Tundmatu viga. Palun võta ühendust oma administraatoriga.",
"Missing requirements." : "Nõutavad on puudu.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Palun veendu, et on paigaldatud PHP 5.3.3 või uuem ning PHP OpenSSL laiendus on lubatud ning seadistatud korrektselt. Hetkel krüpteerimise rakendus on peatatud.",
"Following users are not set up for encryption:" : "Järgmised kasutajad pole seadistatud krüpteeringuks:",
"Initial encryption started... This can take some time. Please wait." : "Algne krüpteerimine käivitati... See võib võtta natuke aega. Palun oota.",
"Initial encryption running... Please try again later." : "Toimub esmane krüpteerimine... Palun proovi hiljem uuesti.",
diff --git a/apps/files_encryption/l10n/et_EE.json b/apps/files_encryption/l10n/et_EE.json
index 873bc8945d7..364eb02ef4f 100644
--- a/apps/files_encryption/l10n/et_EE.json
+++ b/apps/files_encryption/l10n/et_EE.json
@@ -22,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Sa ei saa seda faili dekrüpteerida, see on tõenäoliselt jagatud fail. Palun lase omanikul seda faili sinuga uuesti jagada.",
"Unknown error. Please check your system settings or contact your administrator" : "Tundmatu viga. Palun võta ühendust oma administraatoriga.",
"Missing requirements." : "Nõutavad on puudu.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Palun veendu, et on paigaldatud PHP 5.3.3 või uuem ning PHP OpenSSL laiendus on lubatud ning seadistatud korrektselt. Hetkel krüpteerimise rakendus on peatatud.",
"Following users are not set up for encryption:" : "Järgmised kasutajad pole seadistatud krüpteeringuks:",
"Initial encryption started... This can take some time. Please wait." : "Algne krüpteerimine käivitati... See võib võtta natuke aega. Palun oota.",
"Initial encryption running... Please try again later." : "Toimub esmane krüpteerimine... Palun proovi hiljem uuesti.",
diff --git a/apps/files_encryption/l10n/eu.js b/apps/files_encryption/l10n/eu.js
index d5c23d016f0..65242e2da90 100644
--- a/apps/files_encryption/l10n/eu.js
+++ b/apps/files_encryption/l10n/eu.js
@@ -21,7 +21,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ezin izan da fitxategi hau deszifratu, ziurrenik elkarbanatutako fitxategi bat da. Mesdez, eskatu fitxategiaren jabeari fitxategia zurekin berriz elkarbana dezan.",
"Unknown error. Please check your system settings or contact your administrator" : "Errore ezezaguna. Mesedez, egiaztatu zure sistemaren ezarpenak edo jarri zure administrariarekin kontaktuan.",
"Missing requirements." : "Eskakizun batzuk ez dira betetzen.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Mesedez ziurtatu PHP 5.3.3 edo berriago bat instalatuta dagoela eta OpenSSL PHP hedapenarekin gaitua eta ongi konfiguratuta dagoela. Oraingoz, enkriptazio aplikazioa desgaituta dago.",
"Following users are not set up for encryption:" : "Hurrengo erabiltzaileak ez daude enktriptatzeko konfiguratutak:",
"Initial encryption started... This can take some time. Please wait." : "Hasierako enkriptazioa hasi da... Honek denbora har dezake. Mesedez itxaron.",
"Initial encryption running... Please try again later." : "Hasierako enkriptaketa abian... mesedez, saiatu beranduago.",
diff --git a/apps/files_encryption/l10n/eu.json b/apps/files_encryption/l10n/eu.json
index 3b932fd769e..961ffe3270a 100644
--- a/apps/files_encryption/l10n/eu.json
+++ b/apps/files_encryption/l10n/eu.json
@@ -19,7 +19,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ezin izan da fitxategi hau deszifratu, ziurrenik elkarbanatutako fitxategi bat da. Mesdez, eskatu fitxategiaren jabeari fitxategia zurekin berriz elkarbana dezan.",
"Unknown error. Please check your system settings or contact your administrator" : "Errore ezezaguna. Mesedez, egiaztatu zure sistemaren ezarpenak edo jarri zure administrariarekin kontaktuan.",
"Missing requirements." : "Eskakizun batzuk ez dira betetzen.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Mesedez ziurtatu PHP 5.3.3 edo berriago bat instalatuta dagoela eta OpenSSL PHP hedapenarekin gaitua eta ongi konfiguratuta dagoela. Oraingoz, enkriptazio aplikazioa desgaituta dago.",
"Following users are not set up for encryption:" : "Hurrengo erabiltzaileak ez daude enktriptatzeko konfiguratutak:",
"Initial encryption started... This can take some time. Please wait." : "Hasierako enkriptazioa hasi da... Honek denbora har dezake. Mesedez itxaron.",
"Initial encryption running... Please try again later." : "Hasierako enkriptaketa abian... mesedez, saiatu beranduago.",
diff --git a/apps/files_encryption/l10n/fr.js b/apps/files_encryption/l10n/fr.js
index b5bcaff19c2..fc5e2d5c5fb 100644
--- a/apps/files_encryption/l10n/fr.js
+++ b/apps/files_encryption/l10n/fr.js
@@ -24,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de déchiffrer ce fichier, il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire de ce fichier de le repartager avec vous.",
"Unknown error. Please check your system settings or contact your administrator" : "Erreur inconnue. Veuillez vérifier vos paramètres système ou contacter un administrateur.",
"Missing requirements." : "Système minimum requis non respecté.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Veuillez vous assurer qu'une version de PHP 5.3.3 ou supérieure est installée et qu'OpenSSL et son extension PHP sont activés et configurés correctement. En attendant, l'application de chiffrement été désactivée.",
"Following users are not set up for encryption:" : "Les utilisateurs suivants ne sont pas configurés pour le chiffrement :",
"Initial encryption started... This can take some time. Please wait." : "Chiffrement initial démarré... Cela peut prendre un certain temps. Veuillez patienter.",
"Initial encryption running... Please try again later." : "Chiffrement initial en cours... Veuillez re-essayer ultérieurement.",
diff --git a/apps/files_encryption/l10n/fr.json b/apps/files_encryption/l10n/fr.json
index 24de660bb3c..c4a4fd1a23e 100644
--- a/apps/files_encryption/l10n/fr.json
+++ b/apps/files_encryption/l10n/fr.json
@@ -22,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de déchiffrer ce fichier, il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire de ce fichier de le repartager avec vous.",
"Unknown error. Please check your system settings or contact your administrator" : "Erreur inconnue. Veuillez vérifier vos paramètres système ou contacter un administrateur.",
"Missing requirements." : "Système minimum requis non respecté.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Veuillez vous assurer qu'une version de PHP 5.3.3 ou supérieure est installée et qu'OpenSSL et son extension PHP sont activés et configurés correctement. En attendant, l'application de chiffrement été désactivée.",
"Following users are not set up for encryption:" : "Les utilisateurs suivants ne sont pas configurés pour le chiffrement :",
"Initial encryption started... This can take some time. Please wait." : "Chiffrement initial démarré... Cela peut prendre un certain temps. Veuillez patienter.",
"Initial encryption running... Please try again later." : "Chiffrement initial en cours... Veuillez re-essayer ultérieurement.",
diff --git a/apps/files_encryption/l10n/gl.js b/apps/files_encryption/l10n/gl.js
index d32e9f600fb..d85841118a6 100644
--- a/apps/files_encryption/l10n/gl.js
+++ b/apps/files_encryption/l10n/gl.js
@@ -3,16 +3,19 @@ OC.L10N.register(
{
"Unknown error" : "Produciuse un erro descoñecido",
"Missing recovery key password" : "Falta a chave de recuperación",
- "Please repeat the recovery key password" : "Por favor repita a chave de recuperación",
- "Repeated recovery key password does not match the provided recovery key password" : "A repetición da chave de recuperación non coincide coa chave de recuperación establecida",
+ "Please repeat the recovery key password" : "Repita a chave de recuperación",
+ "Repeated recovery key password does not match the provided recovery key password" : "A repetición da chave de recuperación non coincide coa chave de recuperación estabelecida",
"Recovery key successfully enabled" : "Activada satisfactoriamente a chave de recuperación",
"Could not disable recovery key. Please check your recovery key password!" : "Non foi posíbel desactivar a chave de recuperación. Comprobe o contrasinal da chave de recuperación!",
"Recovery key successfully disabled" : "Desactivada satisfactoriamente a chave de recuperación",
- "Please provide the old recovery password" : "Por favor introduza a chave de recuperación anterior",
- "Please provide a new recovery password" : "Por favor introduza a nova chave de recuperación",
+ "Please provide the old recovery password" : "Introduza a chave de recuperación antiga",
+ "Please provide a new recovery password" : "Introduza a nova chave de recuperación",
"Please repeat the new recovery password" : "Por favor repita a nova chave de recuperación",
"Password successfully changed." : "O contrasinal foi cambiado satisfactoriamente",
"Could not change the password. Maybe the old password was not correct." : "Non foi posíbel cambiar o contrasinal. Probabelmente o contrasinal antigo non é o correcto.",
+ "Could not update the private key password." : "Non foi posíbel actualizar o contrasinal da chave privada.",
+ "The old password was not correct, please try again." : "O contrasinal antigo non é correcto, ténteo de novo.",
+ "The current log-in password was not correct, please try again." : "O actual contrasinal de acceso non é correcto, ténteo de novo.",
"Private key password successfully updated." : "A chave privada foi actualizada correctamente.",
"File recovery settings updated" : "Actualizouse o ficheiro de axustes de recuperación",
"Could not update file recovery" : "Non foi posíbel actualizar o ficheiro de recuperación",
@@ -21,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel descifrar o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con vostede.",
"Unknown error. Please check your system settings or contact your administrator" : "Produciuse un erro descoñecido. Comprobe os axustes do sistema ou contacte co administrador",
"Missing requirements." : "Non se cumpren os requisitos.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Asegúrese de que está instalado o PHP 5.3.3 ou posterior e de que o OpenSSL xunto coa extensión PHP estean activados e configurados correctamente. Polo de agora foi desactivada a aplicación de cifrado.",
"Following users are not set up for encryption:" : "Os seguintes usuarios non teñen configuración para o cifrado:",
"Initial encryption started... This can take some time. Please wait." : "Comezou o cifrado inicial... Isto pode levar bastante tempo. Agarde.",
"Initial encryption running... Please try again later." : "O cifrado inicial está en execución... Tenteo máis tarde.",
diff --git a/apps/files_encryption/l10n/gl.json b/apps/files_encryption/l10n/gl.json
index 8ffcafe8e88..cb8f65d575f 100644
--- a/apps/files_encryption/l10n/gl.json
+++ b/apps/files_encryption/l10n/gl.json
@@ -1,16 +1,19 @@
{ "translations": {
"Unknown error" : "Produciuse un erro descoñecido",
"Missing recovery key password" : "Falta a chave de recuperación",
- "Please repeat the recovery key password" : "Por favor repita a chave de recuperación",
- "Repeated recovery key password does not match the provided recovery key password" : "A repetición da chave de recuperación non coincide coa chave de recuperación establecida",
+ "Please repeat the recovery key password" : "Repita a chave de recuperación",
+ "Repeated recovery key password does not match the provided recovery key password" : "A repetición da chave de recuperación non coincide coa chave de recuperación estabelecida",
"Recovery key successfully enabled" : "Activada satisfactoriamente a chave de recuperación",
"Could not disable recovery key. Please check your recovery key password!" : "Non foi posíbel desactivar a chave de recuperación. Comprobe o contrasinal da chave de recuperación!",
"Recovery key successfully disabled" : "Desactivada satisfactoriamente a chave de recuperación",
- "Please provide the old recovery password" : "Por favor introduza a chave de recuperación anterior",
- "Please provide a new recovery password" : "Por favor introduza a nova chave de recuperación",
+ "Please provide the old recovery password" : "Introduza a chave de recuperación antiga",
+ "Please provide a new recovery password" : "Introduza a nova chave de recuperación",
"Please repeat the new recovery password" : "Por favor repita a nova chave de recuperación",
"Password successfully changed." : "O contrasinal foi cambiado satisfactoriamente",
"Could not change the password. Maybe the old password was not correct." : "Non foi posíbel cambiar o contrasinal. Probabelmente o contrasinal antigo non é o correcto.",
+ "Could not update the private key password." : "Non foi posíbel actualizar o contrasinal da chave privada.",
+ "The old password was not correct, please try again." : "O contrasinal antigo non é correcto, ténteo de novo.",
+ "The current log-in password was not correct, please try again." : "O actual contrasinal de acceso non é correcto, ténteo de novo.",
"Private key password successfully updated." : "A chave privada foi actualizada correctamente.",
"File recovery settings updated" : "Actualizouse o ficheiro de axustes de recuperación",
"Could not update file recovery" : "Non foi posíbel actualizar o ficheiro de recuperación",
@@ -19,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel descifrar o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con vostede.",
"Unknown error. Please check your system settings or contact your administrator" : "Produciuse un erro descoñecido. Comprobe os axustes do sistema ou contacte co administrador",
"Missing requirements." : "Non se cumpren os requisitos.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Asegúrese de que está instalado o PHP 5.3.3 ou posterior e de que o OpenSSL xunto coa extensión PHP estean activados e configurados correctamente. Polo de agora foi desactivada a aplicación de cifrado.",
"Following users are not set up for encryption:" : "Os seguintes usuarios non teñen configuración para o cifrado:",
"Initial encryption started... This can take some time. Please wait." : "Comezou o cifrado inicial... Isto pode levar bastante tempo. Agarde.",
"Initial encryption running... Please try again later." : "O cifrado inicial está en execución... Tenteo máis tarde.",
diff --git a/apps/files_encryption/l10n/hr.js b/apps/files_encryption/l10n/hr.js
index f20ce757c05..0474a024642 100644
--- a/apps/files_encryption/l10n/hr.js
+++ b/apps/files_encryption/l10n/hr.js
@@ -15,7 +15,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ovu datoteku nije moguće dešifrirati, vjerojatno je riječ o zajedničkoj datoteci. Molimopitajte vlasnika datoteke da je ponovo podijeli s vama.",
"Unknown error. Please check your system settings or contact your administrator" : "Pogreška nepoznata. Molimo provjerite svoje sistemske postavke ili kontaktirajte svog administratora.",
"Missing requirements." : "Nedostaju preduvjeti.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Molimo osigurajte da je instaliran PHP 5.3.3 ili noviji i da je OpenSSL zajedno s PHP ekstenzijom propisno aktivirani konfiguriran. Za sada, aplikacija šifriranja je deaktivirana.",
"Following users are not set up for encryption:" : "Sljedeći korisnici nisu određeni za šifriranje:",
"Initial encryption started... This can take some time. Please wait." : "Počelo inicijalno šifriranje... To može potrajati neko vrijeme. Molimo, pričekajte.",
"Initial encryption running... Please try again later." : "Inicijalno šifriranje u tijeku... Molimo, pokušajte ponovno kasnije.",
diff --git a/apps/files_encryption/l10n/hr.json b/apps/files_encryption/l10n/hr.json
index 04e664336d3..7c2af923fbd 100644
--- a/apps/files_encryption/l10n/hr.json
+++ b/apps/files_encryption/l10n/hr.json
@@ -13,7 +13,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ovu datoteku nije moguće dešifrirati, vjerojatno je riječ o zajedničkoj datoteci. Molimopitajte vlasnika datoteke da je ponovo podijeli s vama.",
"Unknown error. Please check your system settings or contact your administrator" : "Pogreška nepoznata. Molimo provjerite svoje sistemske postavke ili kontaktirajte svog administratora.",
"Missing requirements." : "Nedostaju preduvjeti.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Molimo osigurajte da je instaliran PHP 5.3.3 ili noviji i da je OpenSSL zajedno s PHP ekstenzijom propisno aktivirani konfiguriran. Za sada, aplikacija šifriranja je deaktivirana.",
"Following users are not set up for encryption:" : "Sljedeći korisnici nisu određeni za šifriranje:",
"Initial encryption started... This can take some time. Please wait." : "Počelo inicijalno šifriranje... To može potrajati neko vrijeme. Molimo, pričekajte.",
"Initial encryption running... Please try again later." : "Inicijalno šifriranje u tijeku... Molimo, pokušajte ponovno kasnije.",
diff --git a/apps/files_encryption/l10n/hu_HU.js b/apps/files_encryption/l10n/hu_HU.js
index f30194e0578..92538d1ce56 100644
--- a/apps/files_encryption/l10n/hu_HU.js
+++ b/apps/files_encryption/l10n/hu_HU.js
@@ -14,7 +14,6 @@ OC.L10N.register(
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Az állományok titkosításához használt titkos kulcsa érvénytelen. Valószínűleg a %s rendszeren kívül változtatta meg a jelszavát (pl. a munkahelyi címtárban). A személyes beállításoknál frissítheti a titkos kulcsát, hogy ismét elérhesse a titkosított állományait.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Az állományt nem sikerült dekódolni, valószínűleg ez egy megosztott fájl. Kérje meg az állomány tulajdonosát, hogy újra ossza meg Önnel ezt az állományt!",
"Missing requirements." : "Hiányzó követelmények.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Kérem gondoskodjon arról, hogy PHP 5.3.3 vagy annál frissebb legyen telepítve, továbbá az OpenSSL a megfelelő PHP-bővítménnyel együtt rendelkezésre álljon és helyesen legyen konfigurálva! A titkosító modul egyelőre kikapcsolásra került.",
"Following users are not set up for encryption:" : "A következő felhasználók nem állították be a titkosítást:",
"Initial encryption started... This can take some time. Please wait." : "A titkosítási folyamat megkezdődött... Ez hosszabb ideig is eltarthat. Kérem várjon.",
"Initial encryption running... Please try again later." : "Kezedeti titkosítás fut... Próbálja később.",
diff --git a/apps/files_encryption/l10n/hu_HU.json b/apps/files_encryption/l10n/hu_HU.json
index 510bf199284..023cb51fc5a 100644
--- a/apps/files_encryption/l10n/hu_HU.json
+++ b/apps/files_encryption/l10n/hu_HU.json
@@ -12,7 +12,6 @@
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Az állományok titkosításához használt titkos kulcsa érvénytelen. Valószínűleg a %s rendszeren kívül változtatta meg a jelszavát (pl. a munkahelyi címtárban). A személyes beállításoknál frissítheti a titkos kulcsát, hogy ismét elérhesse a titkosított állományait.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Az állományt nem sikerült dekódolni, valószínűleg ez egy megosztott fájl. Kérje meg az állomány tulajdonosát, hogy újra ossza meg Önnel ezt az állományt!",
"Missing requirements." : "Hiányzó követelmények.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Kérem gondoskodjon arról, hogy PHP 5.3.3 vagy annál frissebb legyen telepítve, továbbá az OpenSSL a megfelelő PHP-bővítménnyel együtt rendelkezésre álljon és helyesen legyen konfigurálva! A titkosító modul egyelőre kikapcsolásra került.",
"Following users are not set up for encryption:" : "A következő felhasználók nem állították be a titkosítást:",
"Initial encryption started... This can take some time. Please wait." : "A titkosítási folyamat megkezdődött... Ez hosszabb ideig is eltarthat. Kérem várjon.",
"Initial encryption running... Please try again later." : "Kezedeti titkosítás fut... Próbálja később.",
diff --git a/apps/files_encryption/l10n/id.js b/apps/files_encryption/l10n/id.js
index 805d7878436..6c621bddd04 100644
--- a/apps/files_encryption/l10n/id.js
+++ b/apps/files_encryption/l10n/id.js
@@ -21,7 +21,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat mendekripsi berkas ini, mungkin ini adalah berkas bersama. Silakan meminta pemilik berkas ini untuk membagikan kembali dengan Anda.",
"Unknown error. Please check your system settings or contact your administrator" : "Kesalahan tidak diketahui. Silakan periksa pengaturan sistem Anda atau hubungi administrator",
"Missing requirements." : "Persyaratan tidak terpenuhi.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Pastikan bahwa PHP 5.3.3 atau yang lebih baru telah diinstal dan OpenSSL bersama ekstensi PHP telah diaktifkan dan dikonfigurasi dengan benar. Untuk saat ini, aplikasi enkripsi akan dinonaktifkan.",
"Following users are not set up for encryption:" : "Pengguna berikut belum diatur untuk enkripsi:",
"Initial encryption started... This can take some time. Please wait." : "Enskripsi awal dijalankan... Ini dapat memakan waktu. Silakan tunggu.",
"Initial encryption running... Please try again later." : "Enkripsi awal sedang berjalan... Sialakn coba lagi nanti.",
diff --git a/apps/files_encryption/l10n/id.json b/apps/files_encryption/l10n/id.json
index 826ebdba373..090e56c76b2 100644
--- a/apps/files_encryption/l10n/id.json
+++ b/apps/files_encryption/l10n/id.json
@@ -19,7 +19,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat mendekripsi berkas ini, mungkin ini adalah berkas bersama. Silakan meminta pemilik berkas ini untuk membagikan kembali dengan Anda.",
"Unknown error. Please check your system settings or contact your administrator" : "Kesalahan tidak diketahui. Silakan periksa pengaturan sistem Anda atau hubungi administrator",
"Missing requirements." : "Persyaratan tidak terpenuhi.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Pastikan bahwa PHP 5.3.3 atau yang lebih baru telah diinstal dan OpenSSL bersama ekstensi PHP telah diaktifkan dan dikonfigurasi dengan benar. Untuk saat ini, aplikasi enkripsi akan dinonaktifkan.",
"Following users are not set up for encryption:" : "Pengguna berikut belum diatur untuk enkripsi:",
"Initial encryption started... This can take some time. Please wait." : "Enskripsi awal dijalankan... Ini dapat memakan waktu. Silakan tunggu.",
"Initial encryption running... Please try again later." : "Enkripsi awal sedang berjalan... Sialakn coba lagi nanti.",
diff --git a/apps/files_encryption/l10n/it.js b/apps/files_encryption/l10n/it.js
index d253dae8f68..6a63d188c36 100644
--- a/apps/files_encryption/l10n/it.js
+++ b/apps/files_encryption/l10n/it.js
@@ -24,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossibile decifrare questo file, probabilmente è un file condiviso. Chiedi al proprietario del file di condividere nuovamente il file con te.",
"Unknown error. Please check your system settings or contact your administrator" : "Errore sconosciuto. Controlla le impostazioni di sistema o contatta il tuo amministratore",
"Missing requirements." : "Requisiti mancanti.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Assicurati che sia installato PHP 5.3.3 o versioni successive e che l'estensione OpenSSL di PHP sia abilitata e configurata correttamente. Per ora, l'applicazione di cifratura è disabilitata.",
"Following users are not set up for encryption:" : "I seguenti utenti non sono configurati per la cifratura:",
"Initial encryption started... This can take some time. Please wait." : "Cifratura iniziale avviata... Potrebbe richiedere del tempo. Attendi.",
"Initial encryption running... Please try again later." : "Cifratura iniziale in esecuzione... Riprova più tardi.",
diff --git a/apps/files_encryption/l10n/it.json b/apps/files_encryption/l10n/it.json
index d5257715faa..f92e26a40ee 100644
--- a/apps/files_encryption/l10n/it.json
+++ b/apps/files_encryption/l10n/it.json
@@ -22,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossibile decifrare questo file, probabilmente è un file condiviso. Chiedi al proprietario del file di condividere nuovamente il file con te.",
"Unknown error. Please check your system settings or contact your administrator" : "Errore sconosciuto. Controlla le impostazioni di sistema o contatta il tuo amministratore",
"Missing requirements." : "Requisiti mancanti.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Assicurati che sia installato PHP 5.3.3 o versioni successive e che l'estensione OpenSSL di PHP sia abilitata e configurata correttamente. Per ora, l'applicazione di cifratura è disabilitata.",
"Following users are not set up for encryption:" : "I seguenti utenti non sono configurati per la cifratura:",
"Initial encryption started... This can take some time. Please wait." : "Cifratura iniziale avviata... Potrebbe richiedere del tempo. Attendi.",
"Initial encryption running... Please try again later." : "Cifratura iniziale in esecuzione... Riprova più tardi.",
diff --git a/apps/files_encryption/l10n/ja.js b/apps/files_encryption/l10n/ja.js
index a21870de7c2..765d1193de4 100644
--- a/apps/files_encryption/l10n/ja.js
+++ b/apps/files_encryption/l10n/ja.js
@@ -24,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "このファイルを復号化できません、共有ファイルの可能性があります。ファイルの所有者にお願いして、ファイルを共有しなおしてもらってください。",
"Unknown error. Please check your system settings or contact your administrator" : "不明なエラーです。システム設定を確認するか、管理者に問い合わせてください。",
"Missing requirements." : "必要要件が満たされていません。",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "必ず、PHP 5.3.3もしくはそれ以上をインストールし、同時にOpenSSLのPHP拡張を有効にした上でOpenSSLも同様にインストール、適切に設定してください。現時点では暗号化アプリは無効になっています。",
"Following users are not set up for encryption:" : "以下のユーザーは、暗号化設定がされていません:",
"Initial encryption started... This can take some time. Please wait." : "暗号化の初期化作業を開始しました... この処理にはしばらく時間がかかります。お待ちください。",
"Initial encryption running... Please try again later." : "初期暗号化実行中... 後でもう一度お試しください。",
diff --git a/apps/files_encryption/l10n/ja.json b/apps/files_encryption/l10n/ja.json
index d689ca954d0..1bfa3c4b650 100644
--- a/apps/files_encryption/l10n/ja.json
+++ b/apps/files_encryption/l10n/ja.json
@@ -22,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "このファイルを復号化できません、共有ファイルの可能性があります。ファイルの所有者にお願いして、ファイルを共有しなおしてもらってください。",
"Unknown error. Please check your system settings or contact your administrator" : "不明なエラーです。システム設定を確認するか、管理者に問い合わせてください。",
"Missing requirements." : "必要要件が満たされていません。",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "必ず、PHP 5.3.3もしくはそれ以上をインストールし、同時にOpenSSLのPHP拡張を有効にした上でOpenSSLも同様にインストール、適切に設定してください。現時点では暗号化アプリは無効になっています。",
"Following users are not set up for encryption:" : "以下のユーザーは、暗号化設定がされていません:",
"Initial encryption started... This can take some time. Please wait." : "暗号化の初期化作業を開始しました... この処理にはしばらく時間がかかります。お待ちください。",
"Initial encryption running... Please try again later." : "初期暗号化実行中... 後でもう一度お試しください。",
diff --git a/apps/files_encryption/l10n/ko.js b/apps/files_encryption/l10n/ko.js
index 223fe99f990..82c29ecb11a 100644
--- a/apps/files_encryption/l10n/ko.js
+++ b/apps/files_encryption/l10n/ko.js
@@ -14,7 +14,6 @@ OC.L10N.register(
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "개인 키가 올바르지 않습니다! 암호가 %s(예: 회사 디렉터리) 외부에서 변경된 것 같습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 수정하십시오.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "이 파일을 복호화할 수 없습니다. 공유된 파일일 수도 있습니다. 파일 소유자에게 공유를 다시 요청하십시오.",
"Missing requirements." : "요구 사항이 부족합니다.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "PHP 5.3.3 이상 설치 여부, PHP의 OpenSSL 확장 기능 활성화 및 설정 여부를 확인하십시오. 암호화 앱이 비활성화 되었습니다.",
"Following users are not set up for encryption:" : "다음 사용자는 암호화를 사용할 수 없습니다:",
"Initial encryption started... This can take some time. Please wait." : "초기 암호화가 시작되었습니다... 시간이 걸릴 수도 있으니 기다려 주십시오.",
"Encryption" : "암호화",
diff --git a/apps/files_encryption/l10n/ko.json b/apps/files_encryption/l10n/ko.json
index bb5ff7df70c..e1b53e0983e 100644
--- a/apps/files_encryption/l10n/ko.json
+++ b/apps/files_encryption/l10n/ko.json
@@ -12,7 +12,6 @@
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "개인 키가 올바르지 않습니다! 암호가 %s(예: 회사 디렉터리) 외부에서 변경된 것 같습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 수정하십시오.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "이 파일을 복호화할 수 없습니다. 공유된 파일일 수도 있습니다. 파일 소유자에게 공유를 다시 요청하십시오.",
"Missing requirements." : "요구 사항이 부족합니다.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "PHP 5.3.3 이상 설치 여부, PHP의 OpenSSL 확장 기능 활성화 및 설정 여부를 확인하십시오. 암호화 앱이 비활성화 되었습니다.",
"Following users are not set up for encryption:" : "다음 사용자는 암호화를 사용할 수 없습니다:",
"Initial encryption started... This can take some time. Please wait." : "초기 암호화가 시작되었습니다... 시간이 걸릴 수도 있으니 기다려 주십시오.",
"Encryption" : "암호화",
diff --git a/apps/files_encryption/l10n/lt_LT.js b/apps/files_encryption/l10n/lt_LT.js
index afcc478e34c..98541b865fe 100644
--- a/apps/files_encryption/l10n/lt_LT.js
+++ b/apps/files_encryption/l10n/lt_LT.js
@@ -14,7 +14,6 @@ OC.L10N.register(
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Jūsų privatus raktas yra netinkamas! Panašu, kad Jūsų slaptažodis buvo pakeistas už %s (pvz. Jūsų organizacijos kataloge). Galite atnaujinti savo privataus rakto slaptažodį savo asmeniniuose nustatymuose, kad atkurti prieigą prie savo šifruotų failų.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Failo iššifruoti nepavyko, gali būti jog jis yra pasidalintas su jumis. Paprašykite failo savininko, kad jums iš naujo pateiktų šį failą.",
"Missing requirements." : "Trūkstami laukai.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Prašome įsitikinti, kad PHP 5.3.3 ar naujesnė yra įdiegta ir kad OpenSSL kartu su PHP plėtiniu yra šjungti ir teisingai sukonfigūruoti. Kol kas šifravimo programa bus išjungta.",
"Following users are not set up for encryption:" : "Sekantys naudotojai nenustatyti šifravimui:",
"Initial encryption started... This can take some time. Please wait." : "Pradėtas pirminis šifravimas... Tai gali užtrukti. Prašome palaukti.",
"Encryption" : "Šifravimas",
diff --git a/apps/files_encryption/l10n/lt_LT.json b/apps/files_encryption/l10n/lt_LT.json
index c2ffc891638..e0e486d020b 100644
--- a/apps/files_encryption/l10n/lt_LT.json
+++ b/apps/files_encryption/l10n/lt_LT.json
@@ -12,7 +12,6 @@
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Jūsų privatus raktas yra netinkamas! Panašu, kad Jūsų slaptažodis buvo pakeistas už %s (pvz. Jūsų organizacijos kataloge). Galite atnaujinti savo privataus rakto slaptažodį savo asmeniniuose nustatymuose, kad atkurti prieigą prie savo šifruotų failų.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Failo iššifruoti nepavyko, gali būti jog jis yra pasidalintas su jumis. Paprašykite failo savininko, kad jums iš naujo pateiktų šį failą.",
"Missing requirements." : "Trūkstami laukai.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Prašome įsitikinti, kad PHP 5.3.3 ar naujesnė yra įdiegta ir kad OpenSSL kartu su PHP plėtiniu yra šjungti ir teisingai sukonfigūruoti. Kol kas šifravimo programa bus išjungta.",
"Following users are not set up for encryption:" : "Sekantys naudotojai nenustatyti šifravimui:",
"Initial encryption started... This can take some time. Please wait." : "Pradėtas pirminis šifravimas... Tai gali užtrukti. Prašome palaukti.",
"Encryption" : "Šifravimas",
diff --git a/apps/files_encryption/l10n/nb_NO.js b/apps/files_encryption/l10n/nb_NO.js
index f690a78e5f8..10c96516b1c 100644
--- a/apps/files_encryption/l10n/nb_NO.js
+++ b/apps/files_encryption/l10n/nb_NO.js
@@ -15,7 +15,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke dekryptere denne filen. Dette er sannsynligvis en delt fil. Spør eieren av filen om å dele den med deg på nytt.",
"Unknown error. Please check your system settings or contact your administrator" : "Ukjent feil. Sjekk systeminnstillingene eller kontakt administratoren.",
"Missing requirements." : "Manglende krav.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Vennligst se til at PHP 5.3.3 eller nyere er installert og at OpenSSL sammen med PHP-utvidelsen er aktivert og riktig konfigurert. Enn så lenge er krypterings-appen deaktivert.",
"Following users are not set up for encryption:" : "Følgende brukere er ikke satt opp for kryptering:",
"Initial encryption started... This can take some time. Please wait." : "Førstegangs kryptering startet... Dette kan ta litt tid. Vennligst vent.",
"Initial encryption running... Please try again later." : "Førstegangs kryptering kjører... Prøv igjen senere.",
diff --git a/apps/files_encryption/l10n/nb_NO.json b/apps/files_encryption/l10n/nb_NO.json
index f525462cd74..772b2ff61b7 100644
--- a/apps/files_encryption/l10n/nb_NO.json
+++ b/apps/files_encryption/l10n/nb_NO.json
@@ -13,7 +13,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke dekryptere denne filen. Dette er sannsynligvis en delt fil. Spør eieren av filen om å dele den med deg på nytt.",
"Unknown error. Please check your system settings or contact your administrator" : "Ukjent feil. Sjekk systeminnstillingene eller kontakt administratoren.",
"Missing requirements." : "Manglende krav.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Vennligst se til at PHP 5.3.3 eller nyere er installert og at OpenSSL sammen med PHP-utvidelsen er aktivert og riktig konfigurert. Enn så lenge er krypterings-appen deaktivert.",
"Following users are not set up for encryption:" : "Følgende brukere er ikke satt opp for kryptering:",
"Initial encryption started... This can take some time. Please wait." : "Førstegangs kryptering startet... Dette kan ta litt tid. Vennligst vent.",
"Initial encryption running... Please try again later." : "Førstegangs kryptering kjører... Prøv igjen senere.",
diff --git a/apps/files_encryption/l10n/nl.js b/apps/files_encryption/l10n/nl.js
index 4587f707f0a..4ba98adff34 100644
--- a/apps/files_encryption/l10n/nl.js
+++ b/apps/files_encryption/l10n/nl.js
@@ -24,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan dit bestand niet ontcijferen, waarschijnlijk is het een gedeeld bestand, Vraag de eigenaar om het bestand opnieuw met u te delen.",
"Unknown error. Please check your system settings or contact your administrator" : "Onbekende fout. Controleer uw systeeminstellingen of neem contact op met de beheerder",
"Missing requirements." : "Missende benodigdheden.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Wees er zeker van dat PHP5.3.3 of nieuwer is geïstalleerd en dat de OpenSSL PHP extensie is ingeschakeld en correct geconfigureerd. De versleutel-app is voorlopig uitgeschakeld.",
"Following users are not set up for encryption:" : "De volgende gebruikers hebben geen configuratie voor encryptie:",
"Initial encryption started... This can take some time. Please wait." : "initiële versleuteling gestart... Dit kan even duren, geduld a.u.b.",
"Initial encryption running... Please try again later." : "Initiële versleuteling bezig... Probeer het later opnieuw.",
diff --git a/apps/files_encryption/l10n/nl.json b/apps/files_encryption/l10n/nl.json
index cd456faa614..fe0d21610b8 100644
--- a/apps/files_encryption/l10n/nl.json
+++ b/apps/files_encryption/l10n/nl.json
@@ -22,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan dit bestand niet ontcijferen, waarschijnlijk is het een gedeeld bestand, Vraag de eigenaar om het bestand opnieuw met u te delen.",
"Unknown error. Please check your system settings or contact your administrator" : "Onbekende fout. Controleer uw systeeminstellingen of neem contact op met de beheerder",
"Missing requirements." : "Missende benodigdheden.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Wees er zeker van dat PHP5.3.3 of nieuwer is geïstalleerd en dat de OpenSSL PHP extensie is ingeschakeld en correct geconfigureerd. De versleutel-app is voorlopig uitgeschakeld.",
"Following users are not set up for encryption:" : "De volgende gebruikers hebben geen configuratie voor encryptie:",
"Initial encryption started... This can take some time. Please wait." : "initiële versleuteling gestart... Dit kan even duren, geduld a.u.b.",
"Initial encryption running... Please try again later." : "Initiële versleuteling bezig... Probeer het later opnieuw.",
diff --git a/apps/files_encryption/l10n/pl.js b/apps/files_encryption/l10n/pl.js
index 29b67619139..26f3cff7397 100644
--- a/apps/files_encryption/l10n/pl.js
+++ b/apps/files_encryption/l10n/pl.js
@@ -24,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Nie można odszyfrować tego pliku, prawdopodobnie jest to plik udostępniony. Poproś właściciela pliku o ponowne udostępnianie pliku Tobie.",
"Unknown error. Please check your system settings or contact your administrator" : "Nieznany błąd. Proszę sprawdzić ustawienia systemowe lub skontaktować się z administratorem",
"Missing requirements." : "Brak wymagań.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Proszę upewnić się, że PHP 5.3.3 lub nowszy jest zainstalowany i że OpenSSL oraz rozszerzenie PHP jest włączone i poprawnie skonfigurowane. Obecnie szyfrowanie aplikacji zostało wyłączone.",
"Following users are not set up for encryption:" : "Następujący użytkownicy nie mają skonfigurowanego szyfrowania:",
"Initial encryption started... This can take some time. Please wait." : "Rozpoczęto szyfrowanie... To może chwilę potrwać. Proszę czekać.",
"Initial encryption running... Please try again later." : "Trwa szyfrowanie początkowe...Spróbuj ponownie.",
diff --git a/apps/files_encryption/l10n/pl.json b/apps/files_encryption/l10n/pl.json
index 8d70e50340e..ae2b3f06218 100644
--- a/apps/files_encryption/l10n/pl.json
+++ b/apps/files_encryption/l10n/pl.json
@@ -22,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Nie można odszyfrować tego pliku, prawdopodobnie jest to plik udostępniony. Poproś właściciela pliku o ponowne udostępnianie pliku Tobie.",
"Unknown error. Please check your system settings or contact your administrator" : "Nieznany błąd. Proszę sprawdzić ustawienia systemowe lub skontaktować się z administratorem",
"Missing requirements." : "Brak wymagań.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Proszę upewnić się, że PHP 5.3.3 lub nowszy jest zainstalowany i że OpenSSL oraz rozszerzenie PHP jest włączone i poprawnie skonfigurowane. Obecnie szyfrowanie aplikacji zostało wyłączone.",
"Following users are not set up for encryption:" : "Następujący użytkownicy nie mają skonfigurowanego szyfrowania:",
"Initial encryption started... This can take some time. Please wait." : "Rozpoczęto szyfrowanie... To może chwilę potrwać. Proszę czekać.",
"Initial encryption running... Please try again later." : "Trwa szyfrowanie początkowe...Spróbuj ponownie.",
diff --git a/apps/files_encryption/l10n/pt_BR.js b/apps/files_encryption/l10n/pt_BR.js
index bd0c47ce98e..c519bdfde2b 100644
--- a/apps/files_encryption/l10n/pt_BR.js
+++ b/apps/files_encryption/l10n/pt_BR.js
@@ -24,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Este arquivo não pode ser decriptado, provavelmente este é um arquivo compartilhado. Poe favoe peça ao dono do arquivo para compartilha-lo com você.",
"Unknown error. Please check your system settings or contact your administrator" : "Erro desconhecido. Por favor, verifique as configurações do sistema ou entre em contato com o administrador",
"Missing requirements." : "Requisitos não encontrados.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, certifique-se que o PHP 5.3.3 ou mais recente está instalado e que a extensão PHP OpenSSL está habilitado e configurado corretamente. Por enquanto, o aplicativo de criptografia foi desativado.",
"Following users are not set up for encryption:" : "Seguintes usuários não estão configurados para criptografia:",
"Initial encryption started... This can take some time. Please wait." : "Criptografia inicial inicializada... Isto pode tomar algum tempo. Por favor espere.",
"Initial encryption running... Please try again later." : "Criptografia inicial em execução ... Por favor, tente novamente mais tarde.",
diff --git a/apps/files_encryption/l10n/pt_BR.json b/apps/files_encryption/l10n/pt_BR.json
index aa9404beb68..8aae593d03e 100644
--- a/apps/files_encryption/l10n/pt_BR.json
+++ b/apps/files_encryption/l10n/pt_BR.json
@@ -22,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Este arquivo não pode ser decriptado, provavelmente este é um arquivo compartilhado. Poe favoe peça ao dono do arquivo para compartilha-lo com você.",
"Unknown error. Please check your system settings or contact your administrator" : "Erro desconhecido. Por favor, verifique as configurações do sistema ou entre em contato com o administrador",
"Missing requirements." : "Requisitos não encontrados.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, certifique-se que o PHP 5.3.3 ou mais recente está instalado e que a extensão PHP OpenSSL está habilitado e configurado corretamente. Por enquanto, o aplicativo de criptografia foi desativado.",
"Following users are not set up for encryption:" : "Seguintes usuários não estão configurados para criptografia:",
"Initial encryption started... This can take some time. Please wait." : "Criptografia inicial inicializada... Isto pode tomar algum tempo. Por favor espere.",
"Initial encryption running... Please try again later." : "Criptografia inicial em execução ... Por favor, tente novamente mais tarde.",
diff --git a/apps/files_encryption/l10n/pt_PT.js b/apps/files_encryption/l10n/pt_PT.js
index 3a642a27cc4..b08e0c4b05c 100644
--- a/apps/files_encryption/l10n/pt_PT.js
+++ b/apps/files_encryption/l10n/pt_PT.js
@@ -24,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível desencriptar este ficheiro, provavelmente é um ficheiro partilhado. Por favor, peça ao proprietário do ficheiro para voltar a partilhar o ficheiro consigo.",
"Unknown error. Please check your system settings or contact your administrator" : "Erro desconhecido. Por favor, verifique as configurações do sistema ou entre em contacto com o seu administrador ",
"Missing requirements." : "Requisitos em falta.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, certifique-se que o PHP 5.3.3 ou superior está instalado e que o OpenSSL juntamente com a extensão PHP estão ativados e devidamente configurados. Por agora, a app de encriptação foi desativada.",
"Following users are not set up for encryption:" : "Os utilizadores seguintes não estão configurados para encriptação:",
"Initial encryption started... This can take some time. Please wait." : "A encriptação inicial foi iniciada ... Esta pode demorar algum tempo. Aguarde, por favor.",
"Initial encryption running... Please try again later." : "A encriptação inicial está em execução ... Por favor, tente de novo mais tarde.",
diff --git a/apps/files_encryption/l10n/pt_PT.json b/apps/files_encryption/l10n/pt_PT.json
index f90e10625cc..b51554eaae3 100644
--- a/apps/files_encryption/l10n/pt_PT.json
+++ b/apps/files_encryption/l10n/pt_PT.json
@@ -22,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível desencriptar este ficheiro, provavelmente é um ficheiro partilhado. Por favor, peça ao proprietário do ficheiro para voltar a partilhar o ficheiro consigo.",
"Unknown error. Please check your system settings or contact your administrator" : "Erro desconhecido. Por favor, verifique as configurações do sistema ou entre em contacto com o seu administrador ",
"Missing requirements." : "Requisitos em falta.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, certifique-se que o PHP 5.3.3 ou superior está instalado e que o OpenSSL juntamente com a extensão PHP estão ativados e devidamente configurados. Por agora, a app de encriptação foi desativada.",
"Following users are not set up for encryption:" : "Os utilizadores seguintes não estão configurados para encriptação:",
"Initial encryption started... This can take some time. Please wait." : "A encriptação inicial foi iniciada ... Esta pode demorar algum tempo. Aguarde, por favor.",
"Initial encryption running... Please try again later." : "A encriptação inicial está em execução ... Por favor, tente de novo mais tarde.",
diff --git a/apps/files_encryption/l10n/ru.js b/apps/files_encryption/l10n/ru.js
index 965f383691f..e43a6430f27 100644
--- a/apps/files_encryption/l10n/ru.js
+++ b/apps/files_encryption/l10n/ru.js
@@ -24,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу расшифровать файл, возможно это опубликованный файл. Пожалуйста, попросите владельца файла поделиться им с вами еще раз.",
"Unknown error. Please check your system settings or contact your administrator" : "Неизвестная ошибка. Пожалуйста, проверьте системные настройки или свяжитесь с администратором",
"Missing requirements." : "Требования отсутствуют.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Пожалуйста, убедитесь, что версия PHP 5.3.3 или новее, а также, что OpenSSL и соответствующее расширение PHP включены и правильно настроены. На данный момент приложение шифрования отключено.",
"Following users are not set up for encryption:" : "Для следующих пользователей шифрование не настроено:",
"Initial encryption started... This can take some time. Please wait." : "Начато начальное шифрование... Это может занять какое-то время. Пожалуйста, подождите.",
"Initial encryption running... Please try again later." : "Работает первоначальное шифрование... Пожалуйста, повторите попытку позже.",
diff --git a/apps/files_encryption/l10n/ru.json b/apps/files_encryption/l10n/ru.json
index 7548e510c43..93584da0cc4 100644
--- a/apps/files_encryption/l10n/ru.json
+++ b/apps/files_encryption/l10n/ru.json
@@ -22,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу расшифровать файл, возможно это опубликованный файл. Пожалуйста, попросите владельца файла поделиться им с вами еще раз.",
"Unknown error. Please check your system settings or contact your administrator" : "Неизвестная ошибка. Пожалуйста, проверьте системные настройки или свяжитесь с администратором",
"Missing requirements." : "Требования отсутствуют.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Пожалуйста, убедитесь, что версия PHP 5.3.3 или новее, а также, что OpenSSL и соответствующее расширение PHP включены и правильно настроены. На данный момент приложение шифрования отключено.",
"Following users are not set up for encryption:" : "Для следующих пользователей шифрование не настроено:",
"Initial encryption started... This can take some time. Please wait." : "Начато начальное шифрование... Это может занять какое-то время. Пожалуйста, подождите.",
"Initial encryption running... Please try again later." : "Работает первоначальное шифрование... Пожалуйста, повторите попытку позже.",
diff --git a/apps/files_encryption/l10n/sk_SK.js b/apps/files_encryption/l10n/sk_SK.js
index cf7606bb1ad..19b2e9d1e39 100644
--- a/apps/files_encryption/l10n/sk_SK.js
+++ b/apps/files_encryption/l10n/sk_SK.js
@@ -15,7 +15,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento súbor sa nepodarilo dešifrovať, pravdepodobne je zdieľaný. Požiadajte majiteľa súboru, aby ho s vami znovu vyzdieľal.",
"Unknown error. Please check your system settings or contact your administrator" : "Neznáma chyba. Skontrolujte si vaše systémové nastavenia alebo kontaktujte administrátora",
"Missing requirements." : "Chýbajúce požiadavky.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Prosím uistite sa, že PHP verzie 5.3.3 alebo novšej je nainštalované a tiež, že OpenSSL knižnica spolu z PHP rozšírením je povolená a konfigurovaná správne. Nateraz bola aplikácia šifrovania zablokovaná.",
"Following users are not set up for encryption:" : "Nasledujúci používatelia nie sú nastavení pre šifrovanie:",
"Initial encryption started... This can take some time. Please wait." : "Počiatočné šifrovanie započalo ... To môže nejakú dobu trvať. Čakajte prosím.",
"Initial encryption running... Please try again later." : "Počiatočné šifrovanie beží... Skúste to neskôr znovu.",
diff --git a/apps/files_encryption/l10n/sk_SK.json b/apps/files_encryption/l10n/sk_SK.json
index 6229150b737..6e61effcf65 100644
--- a/apps/files_encryption/l10n/sk_SK.json
+++ b/apps/files_encryption/l10n/sk_SK.json
@@ -13,7 +13,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento súbor sa nepodarilo dešifrovať, pravdepodobne je zdieľaný. Požiadajte majiteľa súboru, aby ho s vami znovu vyzdieľal.",
"Unknown error. Please check your system settings or contact your administrator" : "Neznáma chyba. Skontrolujte si vaše systémové nastavenia alebo kontaktujte administrátora",
"Missing requirements." : "Chýbajúce požiadavky.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Prosím uistite sa, že PHP verzie 5.3.3 alebo novšej je nainštalované a tiež, že OpenSSL knižnica spolu z PHP rozšírením je povolená a konfigurovaná správne. Nateraz bola aplikácia šifrovania zablokovaná.",
"Following users are not set up for encryption:" : "Nasledujúci používatelia nie sú nastavení pre šifrovanie:",
"Initial encryption started... This can take some time. Please wait." : "Počiatočné šifrovanie započalo ... To môže nejakú dobu trvať. Čakajte prosím.",
"Initial encryption running... Please try again later." : "Počiatočné šifrovanie beží... Skúste to neskôr znovu.",
diff --git a/apps/files_encryption/l10n/sl.js b/apps/files_encryption/l10n/sl.js
index 3bb41a62f22..7969a6b5cfd 100644
--- a/apps/files_encryption/l10n/sl.js
+++ b/apps/files_encryption/l10n/sl.js
@@ -24,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Te datoteke ni mogoče šifrirati, ker je to najverjetneje datoteka v souporabi. Prosite lastnika datoteke, da jo da ponovno v souporabo.",
"Unknown error. Please check your system settings or contact your administrator" : "Neznana napaka. Preverite nastavitve sistema ali pa stopite v stik s skrbnikom sistema.",
"Missing requirements." : "Manjkajoče zahteve",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Preverite, ali je na strežniku nameščen paket PHP 5.3.3 ali novejši, da je omogočen in pravilno nastavljen PHP OpenSSL. Z obstoječimi možnostmi šifriranje ni mogoče.",
"Following users are not set up for encryption:" : "Navedeni uporabniki še nimajo nastavljenega šifriranja:",
"Initial encryption started... This can take some time. Please wait." : "Začetno šifriranje je začeto ... Opravilo je lahko dolgotrajno.",
"Initial encryption running... Please try again later." : "Začetno šifriranje je v teku ... Poskusite kasneje.",
diff --git a/apps/files_encryption/l10n/sl.json b/apps/files_encryption/l10n/sl.json
index a9909c6551a..31c401df567 100644
--- a/apps/files_encryption/l10n/sl.json
+++ b/apps/files_encryption/l10n/sl.json
@@ -22,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Te datoteke ni mogoče šifrirati, ker je to najverjetneje datoteka v souporabi. Prosite lastnika datoteke, da jo da ponovno v souporabo.",
"Unknown error. Please check your system settings or contact your administrator" : "Neznana napaka. Preverite nastavitve sistema ali pa stopite v stik s skrbnikom sistema.",
"Missing requirements." : "Manjkajoče zahteve",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Preverite, ali je na strežniku nameščen paket PHP 5.3.3 ali novejši, da je omogočen in pravilno nastavljen PHP OpenSSL. Z obstoječimi možnostmi šifriranje ni mogoče.",
"Following users are not set up for encryption:" : "Navedeni uporabniki še nimajo nastavljenega šifriranja:",
"Initial encryption started... This can take some time. Please wait." : "Začetno šifriranje je začeto ... Opravilo je lahko dolgotrajno.",
"Initial encryption running... Please try again later." : "Začetno šifriranje je v teku ... Poskusite kasneje.",
diff --git a/apps/files_encryption/l10n/sv.js b/apps/files_encryption/l10n/sv.js
index 44d58564ba7..2631dc969b9 100644
--- a/apps/files_encryption/l10n/sv.js
+++ b/apps/files_encryption/l10n/sv.js
@@ -15,7 +15,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ej dekryptera denna fil, förmodligen är det en delad fil. Be ägaren av filen att dela den med dig.",
"Unknown error. Please check your system settings or contact your administrator" : "Okänt fel. Kontrollera dina systeminställningar eller kontakta din administratör",
"Missing requirements." : "Krav som saknas",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Kontrollera att PHP 5.3.3 eller senare är installerad och att tillägget OpenSSL PHP är aktiverad och korrekt konfigurerad. Kryptering är tillsvidare inaktiverad.",
"Following users are not set up for encryption:" : "Följande användare har inte aktiverat kryptering:",
"Initial encryption started... This can take some time. Please wait." : "Initiala krypteringen har påbörjats... Detta kan ta lite tid. Var god vänta.",
"Initial encryption running... Please try again later." : "Initiala krypteringen körs... Var god försök igen senare.",
diff --git a/apps/files_encryption/l10n/sv.json b/apps/files_encryption/l10n/sv.json
index 5ee6606b665..46f738de914 100644
--- a/apps/files_encryption/l10n/sv.json
+++ b/apps/files_encryption/l10n/sv.json
@@ -13,7 +13,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ej dekryptera denna fil, förmodligen är det en delad fil. Be ägaren av filen att dela den med dig.",
"Unknown error. Please check your system settings or contact your administrator" : "Okänt fel. Kontrollera dina systeminställningar eller kontakta din administratör",
"Missing requirements." : "Krav som saknas",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Kontrollera att PHP 5.3.3 eller senare är installerad och att tillägget OpenSSL PHP är aktiverad och korrekt konfigurerad. Kryptering är tillsvidare inaktiverad.",
"Following users are not set up for encryption:" : "Följande användare har inte aktiverat kryptering:",
"Initial encryption started... This can take some time. Please wait." : "Initiala krypteringen har påbörjats... Detta kan ta lite tid. Var god vänta.",
"Initial encryption running... Please try again later." : "Initiala krypteringen körs... Var god försök igen senare.",
diff --git a/apps/files_encryption/l10n/tr.js b/apps/files_encryption/l10n/tr.js
index 41240bf5ed6..56787c176f8 100644
--- a/apps/files_encryption/l10n/tr.js
+++ b/apps/files_encryption/l10n/tr.js
@@ -24,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Bu dosya muhtemelen bir paylaşılan dosya olduğundan şifrelemesi kaldırılamıyor. Lütfen dosyayı sizinle bir daha paylaşması için dosya sahibi ile iletişime geçin.",
"Unknown error. Please check your system settings or contact your administrator" : "Bilinmeyen hata. Lütfen sistem ayarlarınızı denetleyin veya yöneticiniz ile iletişime geçin",
"Missing requirements." : "Gereklilikler eksik.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "PHP 5.3.3 veya daha sürümü ile birlikte OpenSSL ve OpenSSL PHP uzantısının birlikte etkin olduğundan ve doğru bir şekilde yapılandırıldığından emin olun. Şimdilik şifreleme uygulaması devre dışı bırakıldı.",
"Following users are not set up for encryption:" : "Aşağıdaki kullanıcılar şifreleme için ayarlanmamış:",
"Initial encryption started... This can take some time. Please wait." : "İlk şifreleme başladı... Bu biraz zaman alabilir. Lütfen bekleyin.",
"Initial encryption running... Please try again later." : "İlk şifreleme çalışıyor... Lütfen daha sonra tekrar deneyin.",
diff --git a/apps/files_encryption/l10n/tr.json b/apps/files_encryption/l10n/tr.json
index d951321dd82..92cd17c57b6 100644
--- a/apps/files_encryption/l10n/tr.json
+++ b/apps/files_encryption/l10n/tr.json
@@ -22,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Bu dosya muhtemelen bir paylaşılan dosya olduğundan şifrelemesi kaldırılamıyor. Lütfen dosyayı sizinle bir daha paylaşması için dosya sahibi ile iletişime geçin.",
"Unknown error. Please check your system settings or contact your administrator" : "Bilinmeyen hata. Lütfen sistem ayarlarınızı denetleyin veya yöneticiniz ile iletişime geçin",
"Missing requirements." : "Gereklilikler eksik.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "PHP 5.3.3 veya daha sürümü ile birlikte OpenSSL ve OpenSSL PHP uzantısının birlikte etkin olduğundan ve doğru bir şekilde yapılandırıldığından emin olun. Şimdilik şifreleme uygulaması devre dışı bırakıldı.",
"Following users are not set up for encryption:" : "Aşağıdaki kullanıcılar şifreleme için ayarlanmamış:",
"Initial encryption started... This can take some time. Please wait." : "İlk şifreleme başladı... Bu biraz zaman alabilir. Lütfen bekleyin.",
"Initial encryption running... Please try again later." : "İlk şifreleme çalışıyor... Lütfen daha sonra tekrar deneyin.",
diff --git a/apps/files_encryption/l10n/uk.js b/apps/files_encryption/l10n/uk.js
index db740bc45e6..15783a5172e 100644
--- a/apps/files_encryption/l10n/uk.js
+++ b/apps/files_encryption/l10n/uk.js
@@ -24,7 +24,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не можу розшифрувати цей файл, можливо він опублікований. Будь ласка, попросіть власника опублікувати його заново.",
"Unknown error. Please check your system settings or contact your administrator" : "Невідома помилка. Будь ласка, перевірте налаштування системи або зверніться до адміністратора.",
"Missing requirements." : "Відсутні вимоги.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Будь ласка, впевніться, що встановлена версія PHP 5.3.3 або новіша, а також, що OpenSSL та інші розширення PHP підключені та вірно налаштовані. На даний момент додаток шифрування відключений.",
"Following users are not set up for encryption:" : "Для наступних користувачів шифрування не налаштоване:",
"Initial encryption started... This can take some time. Please wait." : "Початкове шифрування почалося... Це може зайняти деякий час. Будь ласка, почекайте.",
"Initial encryption running... Please try again later." : "Початкове шифрування працює... Це може зайняти деякий час. Будь ласка, почекайте.",
diff --git a/apps/files_encryption/l10n/uk.json b/apps/files_encryption/l10n/uk.json
index b2953e5e53c..69444961860 100644
--- a/apps/files_encryption/l10n/uk.json
+++ b/apps/files_encryption/l10n/uk.json
@@ -22,7 +22,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не можу розшифрувати цей файл, можливо він опублікований. Будь ласка, попросіть власника опублікувати його заново.",
"Unknown error. Please check your system settings or contact your administrator" : "Невідома помилка. Будь ласка, перевірте налаштування системи або зверніться до адміністратора.",
"Missing requirements." : "Відсутні вимоги.",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Будь ласка, впевніться, що встановлена версія PHP 5.3.3 або новіша, а також, що OpenSSL та інші розширення PHP підключені та вірно налаштовані. На даний момент додаток шифрування відключений.",
"Following users are not set up for encryption:" : "Для наступних користувачів шифрування не налаштоване:",
"Initial encryption started... This can take some time. Please wait." : "Початкове шифрування почалося... Це може зайняти деякий час. Будь ласка, почекайте.",
"Initial encryption running... Please try again later." : "Початкове шифрування працює... Це може зайняти деякий час. Будь ласка, почекайте.",
diff --git a/apps/files_encryption/l10n/zh_CN.js b/apps/files_encryption/l10n/zh_CN.js
index 17995f4597e..a7da9155ef6 100644
--- a/apps/files_encryption/l10n/zh_CN.js
+++ b/apps/files_encryption/l10n/zh_CN.js
@@ -15,7 +15,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : " 无法解密这个文件(或许这是一个共享文件?),请询问文件所有者重新与您分享这个文件。",
"Unknown error. Please check your system settings or contact your administrator" : "未知错误。请检查系统设置或联系您的管理员",
"Missing requirements." : "必填项未填写。",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "请确认安装了 PHP 5.3.3 或更新版本,且 OpenSSL 及其 PHP 扩展已经启用并正确配置。加密应用现在已被禁用。",
"Following users are not set up for encryption:" : "以下用户还没有设置加密:",
"Initial encryption started... This can take some time. Please wait." : "初始加密启动中....这可能会花一些时间,请稍后再试。",
"Initial encryption running... Please try again later." : "初始加密运行中....请稍后再试。",
diff --git a/apps/files_encryption/l10n/zh_CN.json b/apps/files_encryption/l10n/zh_CN.json
index fa6de35d12a..34576ee72d0 100644
--- a/apps/files_encryption/l10n/zh_CN.json
+++ b/apps/files_encryption/l10n/zh_CN.json
@@ -13,7 +13,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : " 无法解密这个文件(或许这是一个共享文件?),请询问文件所有者重新与您分享这个文件。",
"Unknown error. Please check your system settings or contact your administrator" : "未知错误。请检查系统设置或联系您的管理员",
"Missing requirements." : "必填项未填写。",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "请确认安装了 PHP 5.3.3 或更新版本,且 OpenSSL 及其 PHP 扩展已经启用并正确配置。加密应用现在已被禁用。",
"Following users are not set up for encryption:" : "以下用户还没有设置加密:",
"Initial encryption started... This can take some time. Please wait." : "初始加密启动中....这可能会花一些时间,请稍后再试。",
"Initial encryption running... Please try again later." : "初始加密运行中....请稍后再试。",
diff --git a/apps/files_encryption/l10n/zh_TW.js b/apps/files_encryption/l10n/zh_TW.js
index e344178a333..3bd3143c5b9 100644
--- a/apps/files_encryption/l10n/zh_TW.js
+++ b/apps/files_encryption/l10n/zh_TW.js
@@ -15,7 +15,6 @@ OC.L10N.register(
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "無法解密這個檔案,也許這是分享的檔案。請詢問檔案所有人重新分享檔案給您。",
"Unknown error. Please check your system settings or contact your administrator" : "未知錯誤請檢查您的系統設定或是聯絡您的管理員",
"Missing requirements." : "遺失必要條件。",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "請確認已安裝 PHP 5.3.3 或是更新的版本以及 OpenSSL 也一併安裝在 PHP extension 裡面並啟用及設置完成。現在,加密功能是停用的。",
"Following users are not set up for encryption:" : "以下的使用者無法設定加密:",
"Initial encryption started... This can take some time. Please wait." : "加密初始已啟用...這個需要一些時間。請稍等。",
"Initial encryption running... Please try again later." : "加密初始執行中...請晚點再試。",
diff --git a/apps/files_encryption/l10n/zh_TW.json b/apps/files_encryption/l10n/zh_TW.json
index 44b48c9ccc3..cf85da08c9f 100644
--- a/apps/files_encryption/l10n/zh_TW.json
+++ b/apps/files_encryption/l10n/zh_TW.json
@@ -13,7 +13,6 @@
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "無法解密這個檔案,也許這是分享的檔案。請詢問檔案所有人重新分享檔案給您。",
"Unknown error. Please check your system settings or contact your administrator" : "未知錯誤請檢查您的系統設定或是聯絡您的管理員",
"Missing requirements." : "遺失必要條件。",
- "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "請確認已安裝 PHP 5.3.3 或是更新的版本以及 OpenSSL 也一併安裝在 PHP extension 裡面並啟用及設置完成。現在,加密功能是停用的。",
"Following users are not set up for encryption:" : "以下的使用者無法設定加密:",
"Initial encryption started... This can take some time. Please wait." : "加密初始已啟用...這個需要一些時間。請稍等。",
"Initial encryption running... Please try again later." : "加密初始執行中...請晚點再試。",
diff --git a/apps/files_encryption/lib/helper.php b/apps/files_encryption/lib/helper.php
index 7a50ade82f3..34deb112798 100644
--- a/apps/files_encryption/lib/helper.php
+++ b/apps/files_encryption/lib/helper.php
@@ -3,8 +3,10 @@
/**
* ownCloud
*
- * @author Florin Peter
- * @copyright 2013 Florin Peter <owncloud@florin-peter.de>
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Florin Peter <owncloud@florin-peter.de>
+ * @author 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
@@ -68,9 +70,9 @@ class Helper {
\OCP\Util::connectHook('OC_Filesystem', 'post_copy', 'OCA\Encryption\Hooks', 'postRenameOrCopy');
\OCP\Util::connectHook('OC_Filesystem', 'post_delete', 'OCA\Encryption\Hooks', 'postDelete');
\OCP\Util::connectHook('OC_Filesystem', 'delete', 'OCA\Encryption\Hooks', 'preDelete');
- \OCP\Util::connectHook('OC_Filesystem', 'post_umount', 'OCA\Encryption\Hooks', 'postUmount');
- \OCP\Util::connectHook('OC_Filesystem', 'umount', 'OCA\Encryption\Hooks', 'preUmount');
\OCP\Util::connectHook('\OC\Core\LostPassword\Controller\LostController', 'post_passwordReset', 'OCA\Encryption\Hooks', 'postPasswordReset');
+ \OCP\Util::connectHook('OC_Filesystem', 'post_umount', 'OCA\Encryption\Hooks', 'postUnmount');
+ \OCP\Util::connectHook('OC_Filesystem', 'umount', 'OCA\Encryption\Hooks', 'preUnmount');
}
/**
@@ -106,6 +108,25 @@ class Helper {
}
/**
+ * get recovery key id
+ *
+ * @return string|bool recovery key ID or false
+ */
+ public static function getRecoveryKeyId() {
+ $appConfig = \OC::$server->getAppConfig();
+ $key = $appConfig->getValue('files_encryption', 'recoveryKeyId');
+
+ return ($key === null) ? false : $key;
+ }
+
+ public static function getPublicShareKeyId() {
+ $appConfig = \OC::$server->getAppConfig();
+ $key = $appConfig->getValue('files_encryption', 'publicShareKeyId');
+
+ return ($key === null) ? false : $key;
+ }
+
+ /**
* enable recovery
*
* @param string $recoveryKeyId
@@ -124,38 +145,22 @@ class Helper {
$appConfig->setValue('files_encryption', 'recoveryKeyId', $recoveryKeyId);
}
- if (!$view->is_dir('/owncloud_private_key')) {
- $view->mkdir('/owncloud_private_key');
- }
-
- if (
- (!$view->file_exists("/public-keys/" . $recoveryKeyId . ".public.key")
- || !$view->file_exists("/owncloud_private_key/" . $recoveryKeyId . ".private.key"))
- ) {
+ if (!Keymanager::recoveryKeyExists($view)) {
$keypair = \OCA\Encryption\Crypt::createKeypair();
- \OC_FileProxy::$enabled = false;
-
// Save public key
-
- if (!$view->is_dir('/public-keys')) {
- $view->mkdir('/public-keys');
- }
-
- $view->file_put_contents('/public-keys/' . $recoveryKeyId . '.public.key', $keypair['publicKey']);
+ Keymanager::setPublicKey($keypair['publicKey'], $recoveryKeyId);
$cipher = \OCA\Encryption\Helper::getCipher();
$encryptedKey = \OCA\Encryption\Crypt::symmetricEncryptFileContent($keypair['privateKey'], $recoveryPassword, $cipher);
if ($encryptedKey) {
- Keymanager::setPrivateSystemKey($encryptedKey, $recoveryKeyId . '.private.key');
+ Keymanager::setPrivateSystemKey($encryptedKey, $recoveryKeyId);
// Set recoveryAdmin as enabled
$appConfig->setValue('files_encryption', 'recoveryAdminEnabled', 1);
$return = true;
}
- \OC_FileProxy::$enabled = true;
-
} else { // get recovery key and check the password
$util = new \OCA\Encryption\Util(new \OC\Files\View('/'), \OCP\User::getUser());
$return = $util->checkRecoveryPassword($recoveryPassword);
@@ -387,14 +392,10 @@ class Helper {
* @return bool true if requirements are met
*/
public static function checkRequirements() {
- $result = true;
//openssl extension needs to be loaded
- $result &= extension_loaded("openssl");
- // we need php >= 5.3.3
- $result &= version_compare(phpversion(), '5.3.3', '>=');
+ return extension_loaded("openssl");
- return (bool) $result;
}
/**
@@ -433,47 +434,6 @@ class Helper {
}
/**
- * find all share keys for a given file
- *
- * @param string $filePath path to the file name relative to the user's files dir
- * for example "subdir/filename.txt"
- * @param string $shareKeyPath share key prefix path relative to the user's data dir
- * for example "user1/files_encryption/share-keys/subdir/filename.txt"
- * @param \OC\Files\View $rootView root view, relative to data/
- * @return array list of share key files, path relative to data/$user
- */
- public static function findShareKeys($filePath, $shareKeyPath, \OC\Files\View $rootView) {
- $result = array();
-
- $user = \OCP\User::getUser();
- $util = new Util($rootView, $user);
- // get current sharing state
- $sharingEnabled = \OCP\Share::isEnabled();
-
- // get users sharing this file
- $usersSharing = $util->getSharingUsersArray($sharingEnabled, $filePath);
-
- $pathinfo = pathinfo($shareKeyPath);
-
- $baseDir = $pathinfo['dirname'] . '/';
- $fileName = $pathinfo['basename'];
- foreach ($usersSharing as $user) {
- $keyName = $fileName . '.' . $user . '.shareKey';
- if ($rootView->file_exists($baseDir . $keyName)) {
- $result[] = $baseDir . $keyName;
- } else {
- \OC_Log::write(
- 'Encryption library',
- 'No share key found for user "' . $user . '" for file "' . $fileName . '"',
- \OC_Log::WARN
- );
- }
- }
-
- return $result;
- }
-
- /**
* remember from which file the tmp file (getLocalFile() call) was created
* @param string $tmpFile path of tmp file
* @param string $originalFile path of the original file relative to data/
diff --git a/apps/files_encryption/lib/keymanager.php b/apps/files_encryption/lib/keymanager.php
index 9560126ef33..c8de1a73d27 100644
--- a/apps/files_encryption/lib/keymanager.php
+++ b/apps/files_encryption/lib/keymanager.php
@@ -3,8 +3,9 @@
/**
* ownCloud
*
- * @author Bjoern Schiessle
- * @copyright 2012 Bjoern Schiessle <schiessle@owncloud.com>
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author 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
@@ -29,22 +30,22 @@ namespace OCA\Encryption;
*/
class Keymanager {
+ // base dir where all the file related keys are stored
+ private static $keys_base_dir = '/files_encryption/keys/';
+ private static $encryption_base_dir = '/files_encryption';
+ private static $public_key_dir = '/files_encryption/public_keys';
+
/**
- * retrieve the ENCRYPTED private key from a user
+ * read key from hard disk
*
- * @param \OC\Files\View $view
- * @param string $user
- * @return string private key or false (hopefully)
- * @note the key returned by this method must be decrypted before use
+ * @param string $path to key
+ * @return string|bool either the key or false
*/
- public static function getPrivateKey(\OC\Files\View $view, $user) {
-
- $path = '/' . $user . '/' . 'files_encryption' . '/' . $user . '.private.key';
- $key = false;
-
+ private static function getKey($path, $view) {
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
+ $key = false;
if ($view->file_exists($path)) {
$key = $view->file_get_contents($path);
}
@@ -55,22 +56,53 @@ class Keymanager {
}
/**
- * retrieve public key for a specified user
+ * write key to disk
+ *
+ *
+ * @param string $path path to key directory
+ * @param string $name key name
+ * @param string $key key
* @param \OC\Files\View $view
- * @param string $userId
- * @return string public key or false
+ * @return bool
*/
- public static function getPublicKey(\OC\Files\View $view, $userId) {
-
+ private static function setKey($path, $name, $key, $view) {
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
- $result = $view->file_get_contents('/public-keys/' . $userId . '.public.key');
+ self::keySetPreparation($view, $path);
+ $result = $view->file_put_contents($path . '/' . $name, $key);
\OC_FileProxy::$enabled = $proxyStatus;
- return $result;
+ return (is_int($result) && $result > 0) ? true : false;
+ }
+
+ /**
+ * retrieve the ENCRYPTED private key from a user
+ *
+ * @param \OC\Files\View $view
+ * @param string $user
+ * @return string private key or false (hopefully)
+ * @note the key returned by this method must be decrypted before use
+ */
+ public static function getPrivateKey(\OC\Files\View $view, $user) {
+ $path = '/' . $user . '/' . 'files_encryption' . '/' . $user . '.privateKey';
+ return self::getKey($path, $view);
+ }
+
+ /**
+ * retrieve public key for a specified user
+ * @param \OC\Files\View $view
+ * @param string $userId
+ * @return string public key or false
+ */
+ public static function getPublicKey(\OC\Files\View $view, $userId) {
+ $path = self::$public_key_dir . '/' . $userId . '.publicKey';
+ return self::getKey($path, $view);
+ }
+ public static function getPublicKeyPath() {
+ return self::$public_key_dir;
}
/**
@@ -97,11 +129,8 @@ class Keymanager {
public static function getPublicKeys(\OC\Files\View $view, array $userIds) {
$keys = array();
-
foreach ($userIds as $userId) {
-
$keys[$userId] = self::getPublicKey($view, $userId);
-
}
return $keys;
@@ -120,39 +149,97 @@ class Keymanager {
* asymmetrically encrypt the keyfile before passing it to this method
*/
public static function setFileKey(\OC\Files\View $view, $util, $path, $catfile) {
+ $path = self::getKeyPath($view, $util, $path);
+ return self::setKey($path, 'fileKey', $catfile, $view);
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
+ }
+
+ /**
+ * get path to key folder for a given file
+ *
+ * @param \OC\Files\View $view relative to data directory
+ * @param \OCA\Encryption\Util $util
+ * @param string $path path to the file, relative to the users file directory
+ * @return string
+ */
+ public static function getKeyPath($view, $util, $path) {
+
+ if ($view->is_dir('/' . \OCP\User::getUser() . '/' . $path)) {
+ throw new Exception\EncryptionException('file was expected but directoy was given', Exception\EncryptionException::GENERIC);
+ }
list($owner, $filename) = $util->getUidAndFilename($path);
+ $filename = Helper::stripPartialFileExtension($filename);
+ $filePath_f = ltrim($filename, '/');
// in case of system wide mount points the keys are stored directly in the data directory
if ($util->isSystemWideMountPoint($filename)) {
- $basePath = '/files_encryption/keyfiles';
+ $keyPath = self::$keys_base_dir . $filePath_f . '/';
} else {
- $basePath = '/' . $owner . '/files_encryption/keyfiles';
+ $keyPath = '/' . $owner . self::$keys_base_dir . $filePath_f . '/';
}
- $targetPath = self::keySetPreparation($view, $filename, $basePath);
+ return $keyPath;
+ }
- // try reusing key file if part file
- if (Helper::isPartialFilePath($targetPath)) {
+ /**
+ * get path to file key for a given file
+ *
+ * @param \OC\Files\View $view relative to data directory
+ * @param \OCA\Encryption\Util $util
+ * @param string $path path to the file, relative to the users file directory
+ * @return string
+ */
+ public static function getFileKeyPath($view, $util, $path) {
+ $keyDir = self::getKeyPath($view, $util, $path);
+ return $keyDir . 'fileKey';
+ }
- $result = $view->file_put_contents(
- $basePath . '/' . Helper::stripPartialFileExtension($targetPath) . '.key', $catfile);
+ /**
+ * get path to share key for a given user
+ *
+ * @param \OC\Files\View $view relateive to data directory
+ * @param \OCA\Encryption\Util $util
+ * @param string $path path to file relative to the users files directoy
+ * @param string $uid user for whom we want the share-key path
+ * @retrun string
+ */
+ public static function getShareKeyPath($view, $util, $path, $uid) {
+ $keyDir = self::getKeyPath($view, $util, $path);
+ return $keyDir . $uid . '.shareKey';
+ }
- } else {
+ /**
+ * delete public key from a given user
+ *
+ * @param \OC\Files\View $view
+ * @param string $uid user
+ * @return bool
+ */
+ public static function deletePublicKey($view, $uid) {
- $result = $view->file_put_contents($basePath . '/' . $targetPath . '.key', $catfile);
+ $result = false;
+ if (!\OCP\User::userExists($uid)) {
+ $publicKey = self::$public_key_dir . '/' . $uid . '.publicKey';
+ $result = $view->unlink($publicKey);
}
- \OC_FileProxy::$enabled = $proxyStatus;
-
return $result;
+ }
+ /**
+ * check if public key for user exists
+ *
+ * @param \OC\Files\View $view
+ * @param string $uid
+ */
+ public static function publicKeyExists($view, $uid) {
+ return $view->file_exists(self::$public_key_dir . '/'. $uid . '.publicKey');
}
+
+
/**
* retrieve keyfile for an encrypted file
* @param \OC\Files\View $view
@@ -164,176 +251,97 @@ class Keymanager {
* of the keyfile must be performed by client code
*/
public static function getFileKey($view, $util, $filePath) {
+ $path = self::getFileKeyPath($view, $util, $filePath);
+ return self::getKey($path, $view);
+ }
+ /**
+ * store private key from the user
+ * @param string $key
+ * @return bool
+ * @note Encryption of the private key must be performed by client code
+ * as no encryption takes place here
+ */
+ public static function setPrivateKey($key, $user = '') {
- list($owner, $filename) = $util->getUidAndFilename($filePath);
- $filename = Helper::stripPartialFileExtension($filename);
- $filePath_f = ltrim($filename, '/');
-
- // in case of system wide mount points the keys are stored directly in the data directory
- if ($util->isSystemWideMountPoint($filename)) {
- $keyfilePath = '/files_encryption/keyfiles/' . $filePath_f . '.key';
- } else {
- $keyfilePath = '/' . $owner . '/files_encryption/keyfiles/' . $filePath_f . '.key';
- }
-
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
- if ($view->file_exists($keyfilePath)) {
-
- $result = $view->file_get_contents($keyfilePath);
-
- } else {
-
- $result = false;
-
- }
-
- \OC_FileProxy::$enabled = $proxyStatus;
+ $user = $user === '' ? \OCP\User::getUser() : $user;
+ $path = '/' . $user . '/files_encryption';
+ $header = Crypt::generateHeader();
- return $result;
+ return self::setKey($path, $user . '.privateKey', $header . $key, new \OC\Files\View());
}
/**
- * Delete a keyfile
+ * check if recovery key exists
*
* @param \OC\Files\View $view
- * @param string $path path of the file the key belongs to
- * @param string $userId the user to whom the file belongs
- * @return bool Outcome of unlink operation
- * @note $path must be relative to data/user/files. e.g. mydoc.txt NOT
- * /data/admin/files/mydoc.txt
+ * @return bool
*/
- public static function deleteFileKey($view, $path, $userId=null) {
-
- $trimmed = ltrim($path, '/');
+ public static function recoveryKeyExists($view) {
- if ($trimmed === '') {
- \OCP\Util::writeLog('Encryption library',
- 'Can\'t delete file-key empty path given!', \OCP\Util::ERROR);
- return false;
- }
+ $result = false;
- if ($userId === null) {
- $userId = Helper::getUser($path);
+ $recoveryKeyId = Helper::getRecoveryKeyId();
+ if ($recoveryKeyId) {
+ $result = ($view->file_exists(self::$public_key_dir . '/' . $recoveryKeyId . ".publicKey")
+ && $view->file_exists(self::$encryption_base_dir . '/' . $recoveryKeyId . ".privateKey"));
}
- $util = new Util($view, $userId);
- if($util->isSystemWideMountPoint($path)) {
- $keyPath = '/files_encryption/keyfiles/' . $trimmed;
- } else {
- $keyPath = '/' . $userId . '/files_encryption/keyfiles/' . $trimmed;
- }
+ return $result;
+ }
+ public static function publicShareKeyExists($view) {
$result = false;
- $fileExists = $view->file_exists('/' . $userId . '/files/' . $trimmed);
- if ($view->is_dir($keyPath) && !$fileExists) {
- \OCP\Util::writeLog('files_encryption', 'deleteFileKey: delete file key: ' . $keyPath, \OCP\Util::DEBUG);
- $result = $view->unlink($keyPath);
- } elseif ($view->file_exists($keyPath . '.key') && !$fileExists) {
- \OCP\Util::writeLog('files_encryption', 'deleteFileKey: delete file key: ' . $keyPath, \OCP\Util::DEBUG);
- $result = $view->unlink($keyPath . '.key');
-
- }
+ $publicShareKeyId = Helper::getPublicShareKeyId();
+ if ($publicShareKeyId) {
+ $result = ($view->file_exists(self::$public_key_dir . '/' . $publicShareKeyId . ".publicKey")
+ && $view->file_exists(self::$encryption_base_dir . '/' . $publicShareKeyId . ".privateKey"));
- if ($fileExists) {
- \OCP\Util::writeLog('Encryption library',
- 'Did not delete the file key, file still exists: ' . '/' . $userId . '/files/' . $trimmed, \OCP\Util::ERROR);
- } elseif (!$result) {
- \OCP\Util::writeLog('Encryption library',
- 'Could not delete keyfile; does not exist: "' . $keyPath, \OCP\Util::ERROR);
}
return $result;
-
}
/**
- * store private key from the user
+ * store public key from the user
* @param string $key
+ * @param string $user
+ *
* @return bool
- * @note Encryption of the private key must be performed by client code
- * as no encryption takes place here
*/
- public static function setPrivateKey($key, $user = '') {
-
- if ($user === '') {
- $user = \OCP\User::getUser();
- }
-
- $header = Crypt::generateHeader();
-
- $view = new \OC\Files\View('/' . $user . '/files_encryption');
-
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
- if (!$view->file_exists('')) {
- $view->mkdir('');
- }
-
- $result = $view->file_put_contents($user . '.private.key', $header . $key);
-
- \OC_FileProxy::$enabled = $proxyStatus;
+ public static function setPublicKey($key, $user = '') {
- return $result;
+ $user = $user === '' ? \OCP\User::getUser() : $user;
+ return self::setKey(self::$public_key_dir, $user . '.publicKey', $key, new \OC\Files\View('/'));
}
/**
* write private system key (recovery and public share key) to disk
*
* @param string $key encrypted key
- * @param string $keyName name of the key file
+ * @param string $keyName name of the key
* @return boolean
*/
public static function setPrivateSystemKey($key, $keyName) {
+ $keyName = $keyName . '.privateKey';
$header = Crypt::generateHeader();
- $view = new \OC\Files\View('/owncloud_private_key');
-
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
- if (!$view->file_exists('')) {
- $view->mkdir('');
- }
-
- $result = $view->file_put_contents($keyName, $header . $key);
-
- \OC_FileProxy::$enabled = $proxyStatus;
-
- return $result;
+ return self::setKey(self::$encryption_base_dir, $keyName,$header . $key, new \OC\Files\View());
}
/**
- * store share key
+ * read private system key (recovery and public share key) from disk
*
- * @param \OC\Files\View $view
- * @param string $path where the share key is stored
- * @param string $shareKey
- * @return bool true/false
- * @note The keyfile is not encrypted here. Client code must
- * asymmetrically encrypt the keyfile before passing it to this method
+ * @param string $keyName name of the key
+ * @return string|boolean private system key or false
*/
- private static function setShareKey(\OC\Files\View $view, $path, $shareKey) {
-
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
- $result = $view->file_put_contents($path, $shareKey);
-
- \OC_FileProxy::$enabled = $proxyStatus;
-
- if (is_int($result) && $result > 0) {
- return true;
- } else {
- return false;
- }
+ public static function getPrivateSystemKey($keyName) {
+ $path = $keyName . '.privateKey';
+ return self::getKey($path, new \OC\Files\View(self::$encryption_base_dir));
}
/**
@@ -344,35 +352,17 @@ class Keymanager {
* @param array $shareKeys
* @return bool
*/
- public static function setShareKeys(\OC\Files\View $view, $util, $path, array $shareKeys) {
-
- // $shareKeys must be an array with the following format:
- // [userId] => [encrypted key]
-
- list($owner, $filename) = $util->getUidAndFilename($path);
+ public static function setShareKeys($view, $util, $path, array $shareKeys) {
// in case of system wide mount points the keys are stored directly in the data directory
- if ($util->isSystemWideMountPoint($filename)) {
- $basePath = '/files_encryption/share-keys';
- } else {
- $basePath = '/' . $owner . '/files_encryption/share-keys';
- }
+ $basePath = Keymanager::getKeyPath($view, $util, $path);
- $shareKeyPath = self::keySetPreparation($view, $filename, $basePath);
+ self::keySetPreparation($view, $basePath);
$result = true;
foreach ($shareKeys as $userId => $shareKey) {
-
- // try reusing key file if part file
- if (Helper::isPartialFilePath($shareKeyPath)) {
- $writePath = $basePath . '/' . Helper::stripPartialFileExtension($shareKeyPath) . '.' . $userId . '.shareKey';
- } else {
- $writePath = $basePath . '/' . $shareKeyPath . '.' . $userId . '.shareKey';
- }
-
- if (!self::setShareKey($view, $writePath, $shareKey)) {
-
+ if (!self::setKey($basePath, $userId . '.shareKey', $shareKey, $view)) {
// If any of the keys are not set, flag false
$result = false;
}
@@ -392,89 +382,9 @@ class Keymanager {
* @note The sharekey returned is encrypted. Decryption
* of the keyfile must be performed by client code
*/
- public static function getShareKey(\OC\Files\View $view, $userId, $util, $filePath) {
-
- // try reusing key file if part file
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
- list($owner, $filename) = $util->getUidAndFilename($filePath);
- $filename = Helper::stripPartialFileExtension($filename);
- // in case of system wide mount points the keys are stored directly in the data directory
- if ($util->isSystemWideMountPoint($filename)) {
- $shareKeyPath = '/files_encryption/share-keys/' . $filename . '.' . $userId . '.shareKey';
- } else {
- $shareKeyPath = '/' . $owner . '/files_encryption/share-keys/' . $filename . '.' . $userId . '.shareKey';
- }
-
- if ($view->file_exists($shareKeyPath)) {
-
- $result = $view->file_get_contents($shareKeyPath);
-
- } else {
-
- $result = false;
-
- }
-
- \OC_FileProxy::$enabled = $proxyStatus;
-
- return $result;
-
- }
-
- /**
- * delete all share keys of a given file
- * @param \OC\Files\View $view
- * @param string $userId owner of the file
- * @param string $filePath path to the file, relative to the owners file dir
- */
- public static function delAllShareKeys($view, $userId, $filePath) {
-
- $filePath = ltrim($filePath, '/');
-
- if ($view->file_exists('/' . $userId . '/files/' . $filePath)) {
- \OCP\Util::writeLog('Encryption library',
- 'File still exists, stop deleting share keys!', \OCP\Util::ERROR);
- return false;
- }
-
- if ($filePath === '') {
- \OCP\Util::writeLog('Encryption library',
- 'Can\'t delete share-keys empty path given!', \OCP\Util::ERROR);
- return false;
- }
-
- $util = new util($view, $userId);
-
- if ($util->isSystemWideMountPoint($filePath)) {
- $baseDir = '/files_encryption/share-keys/';
- } else {
- $baseDir = $userId . '/files_encryption/share-keys/';
- }
-
- $result = true;
-
- if ($view->is_dir($baseDir . $filePath)) {
- \OCP\Util::writeLog('files_encryption', 'delAllShareKeys: delete share keys: ' . $baseDir . $filePath, \OCP\Util::DEBUG);
- $result = $view->unlink($baseDir . $filePath);
- } else {
- $sharingEnabled = \OCP\Share::isEnabled();
- $users = $util->getSharingUsersArray($sharingEnabled, $filePath);
- foreach($users as $user) {
- $keyName = $baseDir . $filePath . '.' . $user . '.shareKey';
- if ($view->file_exists($keyName)) {
- \OCP\Util::writeLog(
- 'files_encryption',
- 'dellAllShareKeys: delete share keys: "' . $keyName . '"',
- \OCP\Util::DEBUG
- );
- $result &= $view->unlink($keyName);
- }
- }
- }
-
- return (bool)$result;
+ public static function getShareKey($view, $userId, $util, $filePath) {
+ $path = self::getShareKeyPath($view, $util, $filePath, $userId);
+ return self::getKey($path, $view);
}
/**
@@ -482,45 +392,19 @@ class Keymanager {
*
* @param \OC\Files\View $view relative to data/
* @param array $userIds list of users we want to remove
- * @param string $filename the owners name of the file for which we want to remove the users relative to data/user/files
- * @param string $owner owner of the file
+ * @param string $keyPath
+ * @param string $owner the owner of the file
+ * @param string $ownerPath the owners name of the file for which we want to remove the users relative to data/user/files
*/
- public static function delShareKey($view, $userIds, $filename, $owner) {
+ public static function delShareKey($view, $userIds, $keysPath, $owner, $ownerPath) {
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
- $util = new Util($view, $owner);
-
- if ($util->isSystemWideMountPoint($filename)) {
- $shareKeyPath = \OC\Files\Filesystem::normalizePath('/files_encryption/share-keys/' . $filename);
- } else {
- $shareKeyPath = \OC\Files\Filesystem::normalizePath('/' . $owner . '/files_encryption/share-keys/' . $filename);
+ $key = array_search($owner, $userIds, true);
+ if ($key !== false && $view->file_exists('/' . $owner . '/files/' . $ownerPath)) {
+ unset($userIds[$key]);
}
- if ($view->is_dir($shareKeyPath)) {
-
- self::recursiveDelShareKeys($shareKeyPath, $userIds, $owner, $view);
-
- } else {
-
- foreach ($userIds as $userId) {
+ self::recursiveDelShareKeys($keysPath, $userIds, $view);
- if ($userId === $owner && $view->file_exists('/' . $owner . '/files/' . $filename)) {
- \OCP\Util::writeLog('files_encryption', 'Tried to delete owner key, but the file still exists!', \OCP\Util::FATAL);
- continue;
- }
- $result = $view->unlink($shareKeyPath . '.' . $userId . '.shareKey');
- \OCP\Util::writeLog('files_encryption', 'delShareKey: delete share key: ' . $shareKeyPath . '.' . $userId . '.shareKey' , \OCP\Util::DEBUG);
- if (!$result) {
- \OCP\Util::writeLog('Encryption library',
- 'Could not delete shareKey; does not exist: "' . $shareKeyPath . '.' . $userId
- . '.shareKey"', \OCP\Util::ERROR);
- }
- }
- }
-
- \OC_FileProxy::$enabled = $proxyStatus;
}
/**
@@ -528,35 +412,23 @@ class Keymanager {
*
* @param string $dir directory
* @param array $userIds user ids for which the share keys should be deleted
- * @param string $owner owner of the file
* @param \OC\Files\View $view view relative to data/
*/
- private static function recursiveDelShareKeys($dir, $userIds, $owner, $view) {
+ private static function recursiveDelShareKeys($dir, $userIds, $view) {
$dirContent = $view->opendir($dir);
- $dirSlices = explode('/', ltrim($dir, '/'));
- $realFileDir = '/' . $owner . '/files/' . implode('/', array_slice($dirSlices, 3)) . '/';
if (is_resource($dirContent)) {
while (($file = readdir($dirContent)) !== false) {
if (!\OC\Files\Filesystem::isIgnoredDir($file)) {
if ($view->is_dir($dir . '/' . $file)) {
- self::recursiveDelShareKeys($dir . '/' . $file, $userIds, $owner, $view);
+ self::recursiveDelShareKeys($dir . '/' . $file, $userIds, $view);
} else {
foreach ($userIds as $userId) {
- $fileNameFromShareKey = self::getFilenameFromShareKey($file, $userId);
- if (!$fileNameFromShareKey) {
- continue;
- }
- $realFile = $realFileDir . $fileNameFromShareKey;
-
- if ($userId === $owner &&
- $view->file_exists($realFile)) {
- \OCP\Util::writeLog('files_encryption', 'original file still exists, keep owners share key!', \OCP\Util::ERROR);
- continue;
+ if ($userId . '.shareKey' === $file) {
+ \OCP\Util::writeLog('files_encryption', 'recursiveDelShareKey: delete share key: ' . $file, \OCP\Util::DEBUG);
+ $view->unlink($dir . '/' . $file);
}
- \OCP\Util::writeLog('files_encryption', 'recursiveDelShareKey: delete share key: ' . $file, \OCP\Util::DEBUG);
- $view->unlink($dir . '/' . $file);
}
}
}
@@ -567,21 +439,15 @@ class Keymanager {
/**
* Make preparations to vars and filesystem for saving a keyfile
- * @param string|boolean $path
+ *
+ * @param \OC\Files\View $view
+ * @param string $path relatvie to the views root
* @param string $basePath
*/
- protected static function keySetPreparation(\OC\Files\View $view, $path, $basePath) {
-
- $targetPath = ltrim($path, '/');
-
- $path_parts = pathinfo($targetPath);
-
+ protected static function keySetPreparation($view, $path) {
// If the file resides within a subdirectory, create it
- if (
- isset($path_parts['dirname'])
- && !$view->file_exists($basePath . '/' . $path_parts['dirname'])
- ) {
- $sub_dirs = explode('/', $basePath . '/' . $path_parts['dirname']);
+ if (!$view->file_exists($path)) {
+ $sub_dirs = explode('/', $path);
$dir = '';
foreach ($sub_dirs as $sub_dir) {
$dir .= '/' . $sub_dir;
@@ -590,27 +456,6 @@ class Keymanager {
}
}
}
-
- return $targetPath;
-
}
- /**
- * extract filename from share key name
- * @param string $shareKey (filename.userid.sharekey)
- * @param string $userId
- * @return string|false filename or false
- */
- protected static function getFilenameFromShareKey($shareKey, $userId) {
- $expectedSuffix = '.' . $userId . '.' . 'shareKey';
- $suffixLen = strlen($expectedSuffix);
-
- $suffix = substr($shareKey, -$suffixLen);
-
- if ($suffix !== $expectedSuffix) {
- return false;
- }
-
- return substr($shareKey, 0, -$suffixLen);
- }
}
diff --git a/apps/files_encryption/lib/migration.php b/apps/files_encryption/lib/migration.php
index 59389911b5b..ee2e52114cf 100644
--- a/apps/files_encryption/lib/migration.php
+++ b/apps/files_encryption/lib/migration.php
@@ -2,8 +2,9 @@
/**
* ownCloud
*
- * @author Thomas Müller
- * @copyright 2014 Thomas Müller deepdiver@owncloud.com
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author 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
@@ -25,26 +26,257 @@ namespace OCA\Files_Encryption;
class Migration {
- public function __construct($tableName = 'encryption') {
- $this->tableName = $tableName;
+ /**
+ * @var \OC\Files\View
+ */
+ private $view;
+ private $public_share_key_id;
+ private $recovery_key_id;
+
+ public function __construct() {
+ $this->view = new \OC\Files\View();
+ $this->public_share_key_id = \OCA\Encryption\Helper::getPublicShareKeyId();
+ $this->recovery_key_id = \OCA\Encryption\Helper::getRecoveryKeyId();
+ }
+
+ public function reorganizeFolderStructure() {
+
+ $this->createPathForKeys('/files_encryption');
+
+ // backup system wide folders
+ $this->backupSystemWideKeys();
+
+ // rename public keys
+ $this->renamePublicKeys();
+
+ // rename system wide mount point
+ $this->renameFileKeys('', '/files_encryption/keyfiles');
+
+ // rename system private keys
+ $this->renameSystemPrivateKeys();
+
+ // delete old system wide folders
+ $this->view->deleteAll('/public-keys');
+ $this->view->deleteAll('/owncloud_private_key');
+ $this->view->deleteAll('/files_encryption/share-keys');
+ $this->view->deleteAll('/files_encryption/keyfiles');
+
+ $users = \OCP\User::getUsers();
+ foreach ($users as $user) {
+ // backup all keys
+ if ($this->backupUserKeys($user)) {
+ // create new 'key' folder
+ $this->view->mkdir($user . '/files_encryption/keys');
+ // rename users private key
+ $this->renameUsersPrivateKey($user);
+ // rename file keys
+ $path = $user . '/files_encryption/keyfiles';
+ $this->renameFileKeys($user, $path);
+ $trashPath = $user . '/files_trashbin/keyfiles';
+ if (\OC_App::isEnabled('files_trashbin') && $this->view->is_dir($trashPath)) {
+ $this->renameFileKeys($user, $trashPath, true);
+ $this->view->deleteAll($trashPath);
+ $this->view->deleteAll($user . '/files_trashbin/share-keys');
+ }
+ // delete old folders
+ $this->deleteOldKeys($user);
+ }
+ }
+ }
+
+ private function backupSystemWideKeys() {
+ $backupDir = 'encryption_migration_backup_' . date("Y-m-d_H-i-s");
+ $this->view->mkdir($backupDir);
+ $this->view->copy('owncloud_private_key', $backupDir . '/owncloud_private_key');
+ $this->view->copy('public-keys', $backupDir . '/public-keys');
+ $this->view->copy('files_encryption', $backupDir . '/files_encryption');
+ }
+
+ private function backupUserKeys($user) {
+ $encryptionDir = $user . '/files_encryption';
+ if ($this->view->is_dir($encryptionDir)) {
+ $backupDir = $user . '/encryption_migration_backup_' . date("Y-m-d_H-i-s");
+ $this->view->mkdir($backupDir);
+ $this->view->copy($encryptionDir, $backupDir);
+ return true;
+ }
+ return false;
+ }
+
+ private function renamePublicKeys() {
+ $dh = $this->view->opendir('public-keys');
+
+ $this->createPathForKeys('files_encryption/public_keys');
+
+ if (is_resource($dh)) {
+ while (($oldPublicKey = readdir($dh)) !== false) {
+ if (!\OC\Files\Filesystem::isIgnoredDir($oldPublicKey)) {
+ $newPublicKey = substr($oldPublicKey, 0, strlen($oldPublicKey) - strlen('.public.key')) . '.publicKey';
+ $this->view->rename('public-keys/' . $oldPublicKey , 'files_encryption/public_keys/' . $newPublicKey);
+ }
+ }
+ closedir($dh);
+ }
+ }
+
+ private function renameSystemPrivateKeys() {
+ $dh = $this->view->opendir('owncloud_private_key');
+
+ if (is_resource($dh)) {
+ while (($oldPrivateKey = readdir($dh)) !== false) {
+ if (!\OC\Files\Filesystem::isIgnoredDir($oldPrivateKey)) {
+ $newPrivateKey = substr($oldPrivateKey, 0, strlen($oldPrivateKey) - strlen('.private.key')) . '.privateKey';
+ $this->view->rename('owncloud_private_key/' . $oldPrivateKey , 'files_encryption/' . $newPrivateKey);
+ }
+ }
+ closedir($dh);
+ }
+ }
+
+ private function renameUsersPrivateKey($user) {
+ $oldPrivateKey = $user . '/files_encryption/' . $user . '.private.key';
+ $newPrivateKey = substr($oldPrivateKey, 0, strlen($oldPrivateKey) - strlen('.private.key')) . '.privateKey';
+
+ $this->view->rename($oldPrivateKey, $newPrivateKey);
+ }
+
+ private function getFileName($file, $trash) {
+
+ $extLength = strlen('.key');
+
+ if ($trash) {
+ $parts = explode('.', $file);
+ if ($parts[count($parts) - 1] !== 'key') {
+ $extLength = $extLength + strlen('.' . $parts[count($parts) - 1]);
+ }
+ }
+
+ $filename = substr($file, 0, strlen($file) - $extLength);
+
+ return $filename;
+ }
+
+ private function getExtension($file, $trash) {
+
+ $extension = '';
+
+ if ($trash) {
+ $parts = explode('.', $file);
+ if ($parts[count($parts) - 1] !== 'key') {
+ $extension = '.' . $parts[count($parts) - 1];
+ }
+ }
+
+ return $extension;
+ }
+
+ private function getFilePath($path, $user, $trash) {
+ $offset = $trash ? strlen($user . '/files_trashbin/keyfiles') : strlen($user . '/files_encryption/keyfiles');
+ return substr($path, $offset);
+ }
+
+ private function getTargetDir($user, $filePath, $filename, $extension, $trash) {
+ if ($trash) {
+ $targetDir = $user . '/files_trashbin/keys/' . $filePath . '/' . $filename . $extension;
+ } else {
+ $targetDir = $user . '/files_encryption/keys/' . $filePath . '/' . $filename . $extension;
+ }
+
+ return $targetDir;
+ }
+
+ private function renameFileKeys($user, $path, $trash = false) {
+
+ $dh = $this->view->opendir($path);
+
+ if (is_resource($dh)) {
+ while (($file = readdir($dh)) !== false) {
+ if (!\OC\Files\Filesystem::isIgnoredDir($file)) {
+ if ($this->view->is_dir($path . '/' . $file)) {
+ $this->renameFileKeys($user, $path . '/' . $file, $trash);
+ } else {
+ $filename = $this->getFileName($file, $trash);
+ $filePath = $this->getFilePath($path, $user, $trash);
+ $extension = $this->getExtension($file, $trash);
+ $targetDir = $this->getTargetDir($user, $filePath, $filename, $extension, $trash);
+ $this->createPathForKeys($targetDir);
+ $this->view->copy($path . '/' . $file, $targetDir . '/fileKey');
+ $this->renameShareKeys($user, $filePath, $filename, $targetDir, $trash);
+ }
+ }
+ }
+ closedir($dh);
+ }
}
- // migrate settings from oc_encryption to oc_preferences
- public function dropTableEncryption() {
- $tableName = $this->tableName;
- if (!\OC_DB::tableExists($tableName)) {
- return;
+ private function getOldShareKeyPath($user, $filePath, $trash) {
+ if ($trash) {
+ $oldShareKeyPath = $user . '/files_trashbin/share-keys/' . $filePath;
+ } else {
+ $oldShareKeyPath = $user . '/files_encryption/share-keys/' . $filePath;
}
- $sql = "select `uid`, max(`recovery_enabled`) as `recovery_enabled`, min(`migration_status`) as `migration_status` from `*PREFIX*$tableName` group by `uid`";
- $query = \OCP\DB::prepare($sql);
- $result = $query->execute(array())->fetchAll();
- foreach ($result as $row) {
- \OC_Preferences::setValue($row['uid'], 'files_encryption', 'recovery_enabled', $row['recovery_enabled']);
- \OC_Preferences::setValue($row['uid'], 'files_encryption', 'migration_status', $row['migration_status']);
+ return $oldShareKeyPath;
+ }
+
+ private function getUidFromShareKey($file, $filename, $trash) {
+ $extLength = strlen('.shareKey');
+ if ($trash) {
+ $parts = explode('.', $file);
+ if ($parts[count($parts) - 1] !== 'shareKey') {
+ $extLength = $extLength + strlen('.' . $parts[count($parts) - 1]);
+ }
}
- \OC_DB::dropTable($tableName);
+ $uid = substr($file, strlen($filename) + 1, $extLength * -1);
+
+ return $uid;
}
+ private function renameShareKeys($user, $filePath, $filename, $target, $trash) {
+ $oldShareKeyPath = $this->getOldShareKeyPath($user, $filePath, $trash);
+ $dh = $this->view->opendir($oldShareKeyPath);
+
+ if (is_resource($dh)) {
+ while (($file = readdir($dh)) !== false) {
+ if (!\OC\Files\Filesystem::isIgnoredDir($file)) {
+ if ($this->view->is_dir($oldShareKeyPath . '/' . $file)) {
+ continue;
+ } else {
+ if (substr($file, 0, strlen($filename) +1) === $filename . '.') {
+
+ $uid = $this->getUidFromShareKey($file, $filename, $trash);
+ if ($uid === $this->public_share_key_id ||
+ $uid === $this->recovery_key_id ||
+ \OCP\User::userExists($uid)) {
+ $this->view->copy($oldShareKeyPath . '/' . $file, $target . '/' . $uid . '.shareKey');
+ }
+ }
+ }
+
+ }
+ }
+ closedir($dh);
+ }
+ }
+
+ private function deleteOldKeys($user) {
+ $this->view->deleteAll($user . '/files_encryption/keyfiles');
+ $this->view->deleteAll($user . '/files_encryption/share-keys');
+ }
+
+ private function createPathForKeys($path) {
+ if (!$this->view->file_exists($path)) {
+ $sub_dirs = explode('/', $path);
+ $dir = '';
+ foreach ($sub_dirs as $sub_dir) {
+ $dir .= '/' . $sub_dir;
+ if (!$this->view->is_dir($dir)) {
+ $this->view->mkdir($dir);
+ }
+ }
+ }
+ }
+
+
}
diff --git a/apps/files_encryption/lib/proxy.php b/apps/files_encryption/lib/proxy.php
index a358a46a6e7..0e8ca7319f0 100644
--- a/apps/files_encryption/lib/proxy.php
+++ b/apps/files_encryption/lib/proxy.php
@@ -3,10 +3,11 @@
/**
* ownCloud
*
- * @author Bjoern Schiessle, Sam Tuke, Robin Appelman
- * @copyright 2012 Sam Tuke <samtuke@owncloud.com>
- * 2012 Robin Appelman <icewind1991@gmail.com>
- * 2014 Bjoern Schiessle <schiessle@owncloud.com>
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Bjoern Schiessle <schiessle@owncloud.com>
+ * @author Sam Tuke <samtuke@owncloud.com>
+ * @author 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
@@ -204,11 +205,11 @@ class Proxy extends \OC_FileProxy {
public function postFile_get_contents($path, $data) {
$plainData = null;
- $view = new \OC\Files\View('/');
// If data is a catfile
if (
Crypt::mode() === 'server'
+ && $this->shouldEncrypt($path)
&& Crypt::isCatfileContent($data)
) {
diff --git a/apps/files_encryption/lib/session.php b/apps/files_encryption/lib/session.php
index 132748b6ea5..7f1e0664cdc 100644
--- a/apps/files_encryption/lib/session.php
+++ b/apps/files_encryption/lib/session.php
@@ -2,8 +2,10 @@
/**
* ownCloud
*
- * @author Sam Tuke
- * @copyright 2012 Sam Tuke samtuke@owncloud.com
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Sam Tuke <samtuke@owncloud.com>
+ * @author 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
@@ -46,51 +48,38 @@ class Session {
$this->view = $view;
- if (!$this->view->is_dir('owncloud_private_key')) {
+ if (!$this->view->is_dir('files_encryption')) {
- $this->view->mkdir('owncloud_private_key');
+ $this->view->mkdir('files_encryption');
}
$appConfig = \OC::$server->getAppConfig();
- $publicShareKeyId = $appConfig->getValue('files_encryption', 'publicShareKeyId');
+ $publicShareKeyId = Helper::getPublicShareKeyId();
- if ($publicShareKeyId === null) {
+ if ($publicShareKeyId === false) {
$publicShareKeyId = 'pubShare_' . substr(md5(time()), 0, 8);
$appConfig->setValue('files_encryption', 'publicShareKeyId', $publicShareKeyId);
}
- if (
- !$this->view->file_exists("/public-keys/" . $publicShareKeyId . ".public.key")
- || !$this->view->file_exists("/owncloud_private_key/" . $publicShareKeyId . ".private.key")
- ) {
+ if (!Keymanager::publicShareKeyExists($view)) {
$keypair = Crypt::createKeypair();
- // Disable encryption proxy to prevent recursive calls
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
// Save public key
-
- if (!$view->is_dir('/public-keys')) {
- $view->mkdir('/public-keys');
- }
-
- $this->view->file_put_contents('/public-keys/' . $publicShareKeyId . '.public.key', $keypair['publicKey']);
+ Keymanager::setPublicKey($keypair['publicKey'], $publicShareKeyId);
// Encrypt private key empty passphrase
$cipher = \OCA\Encryption\Helper::getCipher();
$encryptedKey = \OCA\Encryption\Crypt::symmetricEncryptFileContent($keypair['privateKey'], '', $cipher);
if ($encryptedKey) {
- Keymanager::setPrivateSystemKey($encryptedKey, $publicShareKeyId . '.private.key');
+ Keymanager::setPrivateSystemKey($encryptedKey, $publicShareKeyId);
} else {
\OCP\Util::writeLog('files_encryption', 'Could not create public share keys', \OCP\Util::ERROR);
}
- \OC_FileProxy::$enabled = $proxyStatus;
-
}
if (\OCA\Encryption\Helper::isPublicAccess() && !self::getPublicSharePrivateKey()) {
@@ -98,8 +87,7 @@ class Session {
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
- $encryptedKey = $this->view->file_get_contents(
- '/owncloud_private_key/' . $publicShareKeyId . '.private.key');
+ $encryptedKey = Keymanager::getPrivateSystemKey($publicShareKeyId);
$privateKey = Crypt::decryptPrivateKey($encryptedKey, '');
self::setPublicSharePrivateKey($privateKey);
diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php
index d214d13de69..42a7e20c87f 100644
--- a/apps/files_encryption/lib/util.php
+++ b/apps/files_encryption/lib/util.php
@@ -2,10 +2,11 @@
/**
* ownCloud
*
- * @author Sam Tuke, Frank Karlitschek, Bjoern Schiessle
- * @copyright 2012 Sam Tuke <samtuke@owncloud.com>,
- * Frank Karlitschek <frank@owncloud.org>,
- * Bjoern Schiessle <schiessle@owncloud.com>
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Sam Tuke <samtuke@owncloud.com>,
+ * @author Frank Karlitschek <frank@owncloud.org>,
+ * @author 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
@@ -44,10 +45,10 @@ class Util {
private $client; // Client side encryption mode flag
private $publicKeyDir; // Dir containing all public user keys
private $encryptionDir; // Dir containing user's files_encryption
- private $keyfilesPath; // Dir containing user's keyfiles
- private $shareKeysPath; // Dir containing env keys for shared files
+ private $keysPath; // Dir containing all file related encryption keys
private $publicKeyPath; // Path to user's public key
private $privateKeyPath; // Path to user's private key
+ private $userFilesDir;
private $publicShareKeyId;
private $recoveryKeyId;
private $isPublic;
@@ -72,14 +73,13 @@ class Util {
$this->fileFolderName = 'files';
$this->userFilesDir =
'/' . $userId . '/' . $this->fileFolderName; // TODO: Does this need to be user configurable?
- $this->publicKeyDir = '/' . 'public-keys';
+ $this->publicKeyDir = Keymanager::getPublicKeyPath();
$this->encryptionDir = '/' . $this->userId . '/' . 'files_encryption';
- $this->keyfilesPath = $this->encryptionDir . '/' . 'keyfiles';
- $this->shareKeysPath = $this->encryptionDir . '/' . 'share-keys';
+ $this->keysPath = $this->encryptionDir . '/' . 'keys';
$this->publicKeyPath =
- $this->publicKeyDir . '/' . $this->userId . '.public.key'; // e.g. data/public-keys/admin.public.key
+ $this->publicKeyDir . '/' . $this->userId . '.publicKey'; // e.g. data/public-keys/admin.publicKey
$this->privateKeyPath =
- $this->encryptionDir . '/' . $this->userId . '.private.key'; // e.g. data/admin/admin.private.key
+ $this->encryptionDir . '/' . $this->userId . '.privateKey'; // e.g. data/admin/admin.privateKey
// make sure that the owners home is mounted
\OC\Files\Filesystem::initMountPoints($userId);
@@ -99,8 +99,7 @@ class Util {
if (
!$this->view->file_exists($this->encryptionDir)
- or !$this->view->file_exists($this->keyfilesPath)
- or !$this->view->file_exists($this->shareKeysPath)
+ or !$this->view->file_exists($this->keysPath)
or !$this->view->file_exists($this->publicKeyPath)
or !$this->view->file_exists($this->privateKeyPath)
) {
@@ -149,8 +148,7 @@ class Util {
$this->userDir,
$this->publicKeyDir,
$this->encryptionDir,
- $this->keyfilesPath,
- $this->shareKeysPath
+ $this->keysPath
);
// Check / create all necessary dirs
@@ -727,8 +725,8 @@ class Util {
}
if ($successful) {
- $this->view->rename($this->keyfilesPath, $this->keyfilesPath . '.backup');
- $this->view->rename($this->shareKeysPath, $this->shareKeysPath . '.backup');
+ $this->backupAllKeys('decryptAll');
+ $this->view->deleteAll($this->keysPath);
}
\OC_FileProxy::$enabled = true;
@@ -845,9 +843,9 @@ class Util {
break;
- case 'keyfilesPath':
+ case 'keysPath':
- return $this->keyfilesPath;
+ return $this->keysPath;
break;
@@ -1365,22 +1363,14 @@ class Util {
public function checkRecoveryPassword($password) {
$result = false;
- $pathKey = '/owncloud_private_key/' . $this->recoveryKeyId . ".private.key";
-
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
- $recoveryKey = $this->view->file_get_contents($pathKey);
+ $recoveryKey = Keymanager::getPrivateSystemKey($this->recoveryKeyId);
$decryptedRecoveryKey = Crypt::decryptPrivateKey($recoveryKey, $password);
if ($decryptedRecoveryKey) {
$result = true;
}
- \OC_FileProxy::$enabled = $proxyStatus;
-
-
return $result;
}
@@ -1395,19 +1385,17 @@ class Util {
* add recovery key to all encrypted files
*/
public function addRecoveryKeys($path = '/') {
- $dirContent = $this->view->getDirectoryContent($this->keyfilesPath . $path);
+ $dirContent = $this->view->getDirectoryContent($this->keysPath . '/' . $path);
foreach ($dirContent as $item) {
// get relative path from files_encryption/keyfiles/
- $filePath = substr($item['path'], strlen('files_encryption/keyfiles'));
- if ($item['type'] === 'dir') {
+ $filePath = substr($item['path'], strlen('files_encryption/keys'));
+ if ($this->view->is_dir($this->userFilesDir . '/' . $filePath)) {
$this->addRecoveryKeys($filePath . '/');
} else {
$session = new \OCA\Encryption\Session(new \OC\Files\View('/'));
$sharingEnabled = \OCP\Share::isEnabled();
- // remove '.key' extension from path e.g. 'file.txt.key' to 'file.txt'
- $file = substr($filePath, 0, -4);
- $usersSharing = $this->getSharingUsersArray($sharingEnabled, $file);
- $this->setSharedFileKeyfiles($session, $usersSharing, $file);
+ $usersSharing = $this->getSharingUsersArray($sharingEnabled, $filePath);
+ $this->setSharedFileKeyfiles($session, $usersSharing, $filePath);
}
}
}
@@ -1416,16 +1404,14 @@ class Util {
* remove recovery key to all encrypted files
*/
public function removeRecoveryKeys($path = '/') {
- $dirContent = $this->view->getDirectoryContent($this->keyfilesPath . $path);
+ $dirContent = $this->view->getDirectoryContent($this->keysPath . '/' . $path);
foreach ($dirContent as $item) {
// get relative path from files_encryption/keyfiles
- $filePath = substr($item['path'], strlen('files_encryption/keyfiles'));
- if ($item['type'] === 'dir') {
+ $filePath = substr($item['path'], strlen('files_encryption/keys'));
+ if ($this->view->is_dir($this->userFilesDir . '/' . $filePath)) {
$this->removeRecoveryKeys($filePath . '/');
} else {
- // remove '.key' extension from path e.g. 'file.txt.key' to 'file.txt'
- $file = substr($filePath, 0, -4);
- $this->view->unlink($this->shareKeysPath . '/' . $file . '.' . $this->recoveryKeyId . '.shareKey');
+ $this->view->unlink($this->keysPath . '/' . $filePath . '/' . $this->recoveryKeyId . '.shareKey');
}
}
}
@@ -1455,27 +1441,17 @@ class Util {
}
$filteredUids = $this->filterShareReadyUsers($userIds);
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
//decrypt file key
- $encKeyfile = $this->view->file_get_contents($this->keyfilesPath . $file . ".key");
- $shareKey = $this->view->file_get_contents(
- $this->shareKeysPath . $file . "." . $this->recoveryKeyId . ".shareKey");
+ $encKeyfile = Keymanager::getFileKey($this->view, $this, $file);
+ $shareKey = Keymanager::getShareKey($this->view, $this->recoveryKeyId, $this, $file);
$plainKeyfile = Crypt::multiKeyDecrypt($encKeyfile, $shareKey, $privateKey);
// encrypt file key again to all users, this time with the new public key for the recovered use
$userPubKeys = Keymanager::getPublicKeys($this->view, $filteredUids['ready']);
$multiEncKey = Crypt::multiKeyEncrypt($plainKeyfile, $userPubKeys);
- // write new keys to filesystem TDOO!
- $this->view->file_put_contents($this->keyfilesPath . $file . '.key', $multiEncKey['data']);
- foreach ($multiEncKey['keys'] as $userId => $shareKey) {
- $shareKeyPath = $this->shareKeysPath . $file . '.' . $userId . '.shareKey';
- $this->view->file_put_contents($shareKeyPath, $shareKey);
- }
+ Keymanager::setFileKey($this->view, $this, $file, $multiEncKey['data']);
+ Keymanager::setShareKeys($this->view, $this, $file, $multiEncKey['keys']);
- // Return proxy to original status
- \OC_FileProxy::$enabled = $proxyStatus;
}
/**
@@ -1484,16 +1460,14 @@ class Util {
* @param string $privateKey private recovery key which is used to decrypt the files
*/
private function recoverAllFiles($path, $privateKey) {
- $dirContent = $this->view->getDirectoryContent($this->keyfilesPath . $path);
+ $dirContent = $this->view->getDirectoryContent($this->keysPath . '/' . $path);
foreach ($dirContent as $item) {
// get relative path from files_encryption/keyfiles
- $filePath = substr($item['path'], strlen('files_encryption/keyfiles'));
- if ($item['type'] === 'dir') {
+ $filePath = substr($item['path'], strlen('files_encryption/keys'));
+ if ($this->view->is_dir($this->userFilesDir . '/' . $filePath)) {
$this->recoverAllFiles($filePath . '/', $privateKey);
} else {
- // remove '.key' extension from path e.g. 'file.txt.key' to 'file.txt'
- $file = substr($filePath, 0, -4);
- $this->recoverFile($file, $privateKey);
+ $this->recoverFile($filePath, $privateKey);
}
}
}
@@ -1504,16 +1478,9 @@ class Util {
*/
public function recoverUsersFiles($recoveryPassword) {
- // Disable encryption proxy to prevent recursive calls
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
- $encryptedKey = $this->view->file_get_contents(
- '/owncloud_private_key/' . $this->recoveryKeyId . '.private.key');
+ $encryptedKey = Keymanager::getPrivateSystemKey( $this->recoveryKeyId);
$privateKey = Crypt::decryptPrivateKey($encryptedKey, $recoveryPassword);
- \OC_FileProxy::$enabled = $proxyStatus;
-
$this->recoverAllFiles('/', $privateKey);
}
@@ -1527,10 +1494,9 @@ class Util {
$backupDir = $this->encryptionDir . '/backup.';
$backupDir .= ($purpose === '') ? date("Y-m-d_H-i-s") . '/' : $purpose . '.' . date("Y-m-d_H-i-s") . '/';
$this->view->mkdir($backupDir);
- $this->view->copy($this->shareKeysPath, $backupDir . 'share-keys/');
- $this->view->copy($this->keyfilesPath, $backupDir . 'keyfiles/');
- $this->view->copy($this->privateKeyPath, $backupDir . $this->userId . '.private.key');
- $this->view->copy($this->publicKeyPath, $backupDir . $this->userId . '.public.key');
+ $this->view->copy($this->keysPath, $backupDir . 'keys/');
+ $this->view->copy($this->privateKeyPath, $backupDir . $this->userId . '.privateKey');
+ $this->view->copy($this->publicKeyPath, $backupDir . $this->userId . '.publicKey');
}
/**
@@ -1590,7 +1556,10 @@ class Util {
$encryptedKey = Keymanager::getPrivateKey($this->view, $params['uid']);
- $privateKey = Crypt::decryptPrivateKey($encryptedKey, $params['password']);
+ $privateKey = false;
+ if ($encryptedKey) {
+ $privateKey = Crypt::decryptPrivateKey($encryptedKey, $params['password']);
+ }
if ($privateKey === false) {
\OCP\Util::writeLog('Encryption library', 'Private key for user "' . $params['uid']
diff --git a/apps/files_encryption/tests/crypt.php b/apps/files_encryption/tests/crypt.php
index 7369be8ff05..ab2ce066cdb 100755
--- a/apps/files_encryption/tests/crypt.php
+++ b/apps/files_encryption/tests/crypt.php
@@ -33,20 +33,6 @@ class Test_Encryption_Crypt extends \OCA\Files_Encryption\Tests\TestCase {
public static function setUpBeforeClass() {
parent::setUpBeforeClass();
- // reset backend
- \OC_User::clearBackends();
- \OC_User::useBackend('database');
-
- // Filesystem related hooks
- \OCA\Encryption\Helper::registerFilesystemHooks();
-
- // Filesystem related hooks
- \OCA\Encryption\Helper::registerUserHooks();
-
- // clear and register hooks
- \OC_FileProxy::clearProxies();
- \OC_FileProxy::register(new OCA\Encryption\Proxy());
-
// create test user
self::loginHelper(\Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1, true);
}
@@ -99,14 +85,6 @@ class Test_Encryption_Crypt extends \OCA\Files_Encryption\Tests\TestCase {
// cleanup test user
\OC_User::deleteUser(\Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1);
- \OC_Hook::clear();
- \OC_FileProxy::clearProxies();
-
- // Delete keys in /data/
- $view = new \OC\Files\View('/');
- $view->rmdir('public-keys');
- $view->rmdir('owncloud_private_key');
-
parent::tearDownAfterClass();
}
@@ -211,8 +189,6 @@ class Test_Encryption_Crypt extends \OCA\Files_Encryption\Tests\TestCase {
// Teardown
$this->view->unlink($this->userId . '/files/' . $filename);
-
- Encryption\Keymanager::deleteFileKey($this->view, $filename);
}
/**
@@ -252,8 +228,6 @@ class Test_Encryption_Crypt extends \OCA\Files_Encryption\Tests\TestCase {
// Teardown
$this->view->unlink($this->userId . '/files/' . $filename);
-
- Encryption\Keymanager::deleteFileKey($this->view, $filename);
}
/**
@@ -293,11 +267,7 @@ class Test_Encryption_Crypt extends \OCA\Files_Encryption\Tests\TestCase {
$this->assertEquals($this->dataLong . $this->dataLong, $decrypted);
// Teardown
-
$this->view->unlink($this->userId . '/files/' . $filename);
-
- Encryption\Keymanager::deleteFileKey($this->view, $filename);
-
}
/**
@@ -341,11 +311,7 @@ class Test_Encryption_Crypt extends \OCA\Files_Encryption\Tests\TestCase {
$this->assertEquals($this->dataLong . $this->dataLong, $decrypted);
// Teardown
-
$this->view->unlink($this->userId . '/files/' . $filename);
-
- Encryption\Keymanager::deleteFileKey($this->view, $filename);
-
}
/**
@@ -393,11 +359,7 @@ class Test_Encryption_Crypt extends \OCA\Files_Encryption\Tests\TestCase {
$this->assertEquals($this->dataLong . $this->dataLong, $decrypted);
// Teardown
-
$this->view->unlink($this->userId . '/files/' . $filename);
-
- Encryption\Keymanager::deleteFileKey($this->view, $filename);
-
}
/**
diff --git a/apps/files_encryption/tests/helper.php b/apps/files_encryption/tests/helper.php
index fcde7dc5df3..88ba9f20d53 100644
--- a/apps/files_encryption/tests/helper.php
+++ b/apps/files_encryption/tests/helper.php
@@ -38,14 +38,6 @@ class Test_Encryption_Helper extends \OCA\Files_Encryption\Tests\TestCase {
}
public static function tearDownAfterClass() {
- \OC_Hook::clear();
- \OC_FileProxy::clearProxies();
-
- // Delete keys in /data/
- $view = new \OC\Files\View('/');
- $view->rmdir('public-keys');
- $view->rmdir('owncloud_private_key');
-
parent::tearDownAfterClass();
}
@@ -125,56 +117,4 @@ class Test_Encryption_Helper extends \OCA\Files_Encryption\Tests\TestCase {
self::cleanUpUsers();
}
- function userNamesProvider() {
- return array(
- array('testuser' . $this->getUniqueID()),
- array('user.name.with.dots'),
- );
- }
-
- /**
- * Tests whether share keys can be found
- *
- * @dataProvider userNamesProvider
- */
- function testFindShareKeys($userName) {
- self::setUpUsers();
- // note: not using dataProvider as we want to make
- // sure that the correct keys are match and not any
- // other ones that might happen to have similar names
- self::setupHooks();
- self::loginHelper($userName, true);
- $testDir = 'testFindShareKeys' . $this->getUniqueID() . '/';
- $baseDir = $userName . '/files/' . $testDir;
- $fileList = array(
- 't est.txt',
- 't est_.txt',
- 't est.doc.txt',
- 't est(.*).txt', // make sure the regexp is escaped
- 'multiple.dots.can.happen.too.txt',
- 't est.' . $userName . '.txt',
- 't est_.' . $userName . '.shareKey.txt',
- 'who would upload their.shareKey',
- 'user ones file.txt',
- 'user ones file.txt.backup',
- '.t est.txt'
- );
-
- $rootView = new \OC\Files\View('/');
- $rootView->mkdir($baseDir);
- foreach ($fileList as $fileName) {
- $rootView->file_put_contents($baseDir . $fileName, 'dummy');
- }
-
- $shareKeysDir = $userName . '/files_encryption/share-keys/' . $testDir;
- foreach ($fileList as $fileName) {
- // make sure that every file only gets its correct respective keys
- $result = Encryption\Helper::findShareKeys($baseDir . $fileName, $shareKeysDir . $fileName, $rootView);
- $this->assertEquals(
- array($shareKeysDir . $fileName . '.' . $userName . '.shareKey'),
- $result
- );
- }
- self::cleanUpUsers();
- }
}
diff --git a/apps/files_encryption/tests/hooks.php b/apps/files_encryption/tests/hooks.php
index 4b8be0c7c1c..d5a30f5074a 100644
--- a/apps/files_encryption/tests/hooks.php
+++ b/apps/files_encryption/tests/hooks.php
@@ -63,28 +63,6 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
'.t est.txt'
);
- // reset backend
- \OC_User::clearBackends();
- \OC_User::useBackend('database');
-
- \OC_Hook::clear('OC_Filesystem');
- \OC_Hook::clear('OC_User');
-
- // clear share hooks
- \OC_Hook::clear('OCP\\Share');
- \OC::registerShareHooks();
- \OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup');
-
- // Filesystem related hooks
- \OCA\Encryption\Helper::registerFilesystemHooks();
-
- // Sharing related hooks
- \OCA\Encryption\Helper::registerShareHooks();
-
- // clear and register proxies
- \OC_FileProxy::clearProxies();
- \OC_FileProxy::register(new OCA\Encryption\Proxy());
-
// create test user
self::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1, true);
self::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2, true);
@@ -114,14 +92,6 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
\OC_User::deleteUser(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
\OC_User::deleteUser(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2);
- \OC_Hook::clear();
- \OC_FileProxy::clearProxies();
-
- // Delete keys in /data/
- $view = new \OC\Files\View('/');
- $view->rmdir('public-keys');
- $view->rmdir('owncloud_private_key');
-
parent::tearDownAfterClass();
}
@@ -163,10 +133,10 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
// check if all keys are generated
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
+ self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keyfiles/' . $this->filename . '.key'));
+ self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
self::logoutHelper();
@@ -178,10 +148,10 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
// check if all keys are generated
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
+ self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keyfiles/' . $this->filename . '.key'));
+ self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
// create a dummy file that we can delete something outside of data/user/files
@@ -193,10 +163,10 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
// all keys should still exist
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
+ self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keyfiles/' . $this->filename . '.key'));
+ self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
// delete the file in data/user/files
@@ -205,17 +175,17 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
// check if keys from user2 are really deleted
$this->assertFalse($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
+ self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
$this->assertFalse($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keyfiles/' . $this->filename . '.key'));
+ self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
// but user1 keys should still exist
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
+ self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keyfiles/' . $this->filename . '.key'));
+ self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
if ($stateFilesTrashbin) {
OC_App::enable('files_trashbin');
@@ -244,10 +214,10 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
// check if all keys are generated
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
+ self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keyfiles/' . $this->filename . '.key'));
+ self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
// get the file info from previous created file
$fileInfo = $this->user1View->getFileInfo($this->filename);
@@ -260,8 +230,8 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
// check if new share key exists
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
+ self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
self::logoutHelper();
self::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2);
@@ -272,10 +242,10 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
// keys should be stored at user1s dir, not in user2s
$this->assertFalse($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
+ self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
$this->assertFalse($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keyfiles/' . $this->filename . '.key'));
+ self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
// delete the Shared file from user1 in data/user2/files/Shared
$result = $this->user2View->unlink($this->filename);
@@ -284,13 +254,13 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
// share key for user2 from user1s home should be gone, all other keys should still exists
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
+ self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
$this->assertFalse($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
+ self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
$this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keyfiles/' . $this->filename . '.key'));
+ self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
// cleanup
@@ -327,12 +297,12 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
function doTestRenameHook($filename) {
// check if keys exists
$this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/'
- . $filename . '.' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
$this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keyfiles/'
- . $filename . '.key'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $filename . '/fileKey'));
// make subfolder and sub-subfolder
$this->rootView->mkdir('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder);
@@ -351,18 +321,18 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
// keys should be renamed too
$this->assertFalse($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/'
- . $filename . '.' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
$this->assertFalse($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keyfiles/'
- . $filename . '.key'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $filename . '/fileKey'));
$this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/' . $this->folder . '/' . $this->folder . '/'
- . $filename . '.' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->folder . '/' . $this->folder . '/'
+ . $filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
$this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keyfiles/' . $this->folder . '/' . $this->folder . '/'
- . $filename . '.key'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->folder . '/' . $this->folder . '/'
+ . $filename . '/fileKey'));
// cleanup
$this->rootView->unlink('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder);
@@ -389,12 +359,12 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
function doTestCopyHook($filename) {
// check if keys exists
$this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/'
- . $filename . '.' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
$this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keyfiles/'
- . $filename . '.key'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $filename . '/fileKey'));
// make subfolder and sub-subfolder
$this->rootView->mkdir('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder);
@@ -410,18 +380,18 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
// keys should be copied too
$this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/'
- . $filename . '.' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
$this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keyfiles/'
- . $filename . '.key'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
+ . $filename . '/fileKey'));
$this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/' . $this->folder . '/' . $this->folder . '/'
- . $filename . '.' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->folder . '/' . $this->folder . '/'
+ . $filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
$this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keyfiles/' . $this->folder . '/' . $this->folder . '/'
- . $filename . '.key'));
+ '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->folder . '/' . $this->folder . '/'
+ . $filename . '/fileKey'));
// cleanup
$this->rootView->unlink('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder);
@@ -439,8 +409,8 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
// set user password for the first time
\OCA\Encryption\Hooks::postCreateUser(array('uid' => 'newUser', 'password' => 'newUserPassword'));
- $this->assertTrue($view->file_exists('public-keys/newUser.public.key'));
- $this->assertTrue($view->file_exists('newUser/files_encryption/newUser.private.key'));
+ $this->assertTrue($view->file_exists(\OCA\Encryption\Keymanager::getPublicKeyPath() . '/newUser.publicKey'));
+ $this->assertTrue($view->file_exists('newUser/files_encryption/newUser.privateKey'));
// check if we are able to decrypt the private key
$encryptedKey = \OCA\Encryption\Keymanager::getPrivateKey($view, 'newUser');
diff --git a/apps/files_encryption/tests/keymanager.php b/apps/files_encryption/tests/keymanager.php
index b4dc6ddeb56..21f03839430 100644
--- a/apps/files_encryption/tests/keymanager.php
+++ b/apps/files_encryption/tests/keymanager.php
@@ -28,17 +28,6 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {
public static function setUpBeforeClass() {
parent::setUpBeforeClass();
- // reset backend
- \OC_User::clearBackends();
- \OC_User::useBackend('database');
-
- // Filesystem related hooks
- \OCA\Encryption\Helper::registerFilesystemHooks();
-
- // clear and register hooks
- \OC_FileProxy::clearProxies();
- \OC_FileProxy::register(new OCA\Encryption\Proxy());
-
// disable file proxy by default
\OC_FileProxy::$enabled = false;
@@ -78,9 +67,7 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {
}
function tearDown() {
- $this->view->deleteAll('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys');
- $this->view->deleteAll('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keyfiles');
-
+ $this->view->deleteAll('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys');
parent::tearDown();
}
@@ -94,14 +81,6 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {
OC_App::enable('files_trashbin');
}
- \OC_Hook::clear();
- \OC_FileProxy::clearProxies();
-
- // Delete keys in /data/
- $view = new \OC\Files\View('/');
- $view->rmdir('public-keys');
- $view->rmdir('owncloud_private_key');
-
parent::tearDownAfterClass();
}
@@ -140,27 +119,6 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {
$this->assertArrayHasKey('key', $sslInfo);
}
- function fileNameFromShareKeyProvider() {
- return array(
- array('file.user.shareKey', 'user', 'file'),
- array('file.name.with.dots.user.shareKey', 'user', 'file.name.with.dots'),
- array('file.name.user.with.dots.shareKey', 'user.with.dots', 'file.name'),
- array('file.txt', 'user', false),
- array('user.shareKey', 'user', false),
- );
- }
-
- /**
- * @small
- *
- * @dataProvider fileNameFromShareKeyProvider
- */
- function testGetFilenameFromShareKey($fileName, $user, $expectedFileName) {
- $this->assertEquals($expectedFileName,
- \TestProtectedKeymanagerMethods::testGetFilenameFromShareKey($fileName, $user)
- );
- }
-
/**
* @medium
*/
@@ -180,7 +138,7 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {
Encryption\Keymanager::setFileKey($this->view, $util, $file, $key);
- $this->assertTrue($this->view->file_exists('/' . $this->userId . '/files_encryption/keyfiles/' . $file . '.key'));
+ $this->assertTrue($this->view->file_exists('/' . $this->userId . '/files_encryption/keys/' . $file . '/fileKey'));
// cleanup
$this->view->unlink('/' . $this->userId . '/files/' . $file);
@@ -198,7 +156,7 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {
Encryption\Keymanager::setPrivateKey($key, 'dummyUser');
- $this->assertTrue($this->view->file_exists('/dummyUser/files_encryption/dummyUser.private.key'));
+ $this->assertTrue($this->view->file_exists('/dummyUser/files_encryption/dummyUser.privateKey'));
//clean up
$this->view->deleteAll('/dummyUser');
@@ -210,14 +168,19 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {
function testSetPrivateSystemKey() {
$key = "dummy key";
- $keyName = "myDummyKey.private.key";
+ $keyName = "myDummyKey";
+ $encHeader = Encryption\Crypt::generateHeader();
Encryption\Keymanager::setPrivateSystemKey($key, $keyName);
- $this->assertTrue($this->view->file_exists('/owncloud_private_key/' . $keyName));
+ $this->assertTrue($this->view->file_exists('/files_encryption/' . $keyName . '.privateKey'));
+
+ $result = Encryption\Keymanager::getPrivateSystemKey($keyName);
+
+ $this->assertSame($encHeader . $key, $result);
// clean up
- $this->view->unlink('/owncloud_private_key/' . $keyName);
+ $this->view->unlink('/files_encryption/' . $keyName.'.privateKey');
}
@@ -256,70 +219,78 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {
$this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1/existingFile.txt', 'data');
// create folder structure for some dummy share key files
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1');
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder');
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder');
+ $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1');
+ $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/existingFile.txt');
+ $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1');
+ $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file2');
+ $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/subfolder');
+ $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/subfolder/file2');
+ $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/subfolder/subsubfolder');
+ $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/subfolder/subsubfolder/file1');
+ $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/subfolder/subsubfolder/file2');
// create some dummy share keys
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.user1.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.user1.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.user1.test.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.test-keymanager-userxdot.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.userx.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.' . Test_Encryption_Keymanager::TEST_USER . '.userx.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.user1.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.' . Test_Encryption_Keymanager::TEST_USER . '.user1.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file2.user2.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file2.user3.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/file2.user3.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder/file1.user1.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder/file2.user2.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder/file2.user3.shareKey', 'data');
+ $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/existingFile.txt/user1.shareKey', 'data');
+ $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/existingFile.txt/' . Test_Encryption_Keymanager::TEST_USER . '.shareKey', 'data');
+ $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/user1.shareKey', 'data');
+ $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/user1.test.shareKey', 'data');
+ $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/test-keymanager-userxdot.shareKey', 'data');
+ $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/userx.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey', 'data');
+ $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/' . Test_Encryption_Keymanager::TEST_USER . '.userx.shareKey', 'data');
+ $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/user1.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey', 'data');
+ $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/' . Test_Encryption_Keymanager::TEST_USER . '.user1.shareKey', 'data');
+ $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file2/user2.shareKey', 'data');
+ $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file2/user3.shareKey', 'data');
+ $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/subfolder/file2/user3.shareKey', 'data');
+ $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/subfolder/subsubfolder/file1/user1.shareKey', 'data');
+ $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/subfolder/subsubfolder/file2/user2.shareKey', 'data');
+ $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/subfolder/subsubfolder/file2/user3.shareKey', 'data');
// recursive delete share keys from user1 and user2
- Encryption\Keymanager::delShareKey($this->view, array('user1', 'user2', Test_Encryption_Keymanager::TEST_USER), '/folder1/', Test_Encryption_Keymanager::TEST_USER);
+ Encryption\Keymanager::delShareKey($this->view,
+ array('user1', 'user2', Test_Encryption_Keymanager::TEST_USER),
+ Encryption\Keymanager::getKeyPath($this->view, new Encryption\Util($this->view, Test_Encryption_Keymanager::TEST_USER), '/folder1'),
+ Test_Encryption_Keymanager::TEST_USER,
+ '/folder1');
// check if share keys from user1 and user2 are deleted
$this->assertFalse($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.user1.shareKey'));
+ '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/existingFile.txt/user1.shareKey'));
$this->assertFalse($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.user1.shareKey'));
+ '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1/user1.shareKey'));
$this->assertFalse($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file2.user2.shareKey'));
+ '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file2/user2.shareKey'));
$this->assertFalse($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder/file1.user1.shareKey'));
+ '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder/file1/user1.shareKey'));
$this->assertFalse($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder/file2.user2.shareKey'));
+ '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder/file2/user2.shareKey'));
// check if share keys from user3 still exists
$this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file2.user3.shareKey'));
+ '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file2/user3.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder/file2.user3.shareKey'));
+ '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/subfolder/subsubfolder/file2/user3.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/file2.user3.shareKey'));
+ '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/subfolder/file2/user3.shareKey'));
- // check if share keys for user or file with similar name
+ // check if share keys for user or file with similar name
$this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.user1.test.shareKey'));
+ '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/user1.test.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.test-keymanager-userxdot.shareKey'));
+ '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/test-keymanager-userxdot.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.' . Test_Encryption_Keymanager::TEST_USER . '.userx.shareKey'));
+ '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/' . Test_Encryption_Keymanager::TEST_USER . '.userx.shareKey'));
// FIXME: this case currently cannot be distinguished, needs further fixing
- /*
$this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.userx.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey'));
+ '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/userx.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.user1.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey'));
+ '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/user1.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1.' . Test_Encryption_Keymanager::TEST_USER . '.user1.shareKey'));
- */
+ '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/' . Test_Encryption_Keymanager::TEST_USER . '.user1.shareKey'));
// owner key from existing file should still exists because the file is still there
$this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey'));
+ '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/existingFile.txt/' . Test_Encryption_Keymanager::TEST_USER . '.shareKey'));
// cleanup
$this->view->deleteAll('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
@@ -344,7 +315,12 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {
$this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey', 'data');
// recursive delete share keys from user1 and user2
- Encryption\Keymanager::delShareKey($this->view, array('user1', 'user2', Test_Encryption_Keymanager::TEST_USER), '/folder1/existingFile.txt', Test_Encryption_Keymanager::TEST_USER);
+ Encryption\Keymanager::delShareKey($this->view,
+ array('user1', 'user2', Test_Encryption_Keymanager::TEST_USER),
+ Encryption\Keymanager::getKeyPath($this->view, new Encryption\Util($this->view, Test_Encryption_Keymanager::TEST_USER), '/folder1/existingFile.txt'),
+ Test_Encryption_Keymanager::TEST_USER,
+ '/folder1/existingFile.txt');
+
// check if share keys from user1 and user2 are deleted
$this->assertFalse($this->view->file_exists(
@@ -362,147 +338,16 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {
}
- /**
- * @medium
- */
- function testDeleteFileKey() {
-
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1/existingFile.txt', 'data');
-
- // create folder structure for some dummy file key files
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keyfiles/folder1');
-
- // create dummy keyfile
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keyfiles/folder1/dummyFile.txt.key', 'data');
-
- // recursive delete share keys from user1 and user2
- $result = Encryption\Keymanager::deleteFileKey($this->view, '/folder1/existingFile.txt');
- $this->assertFalse($result);
-
- $result2 = Encryption\Keymanager::deleteFileKey($this->view, '/folder1/dummyFile.txt');
- $this->assertTrue($result2);
-
- // check if file key from dummyFile was deleted
- $this->assertFalse($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keyfiles/folder1/dummyFile.txt.key'));
-
- // check if file key from existing file still exists
- $this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keyfiles/folder1/existingFile.txt.key'));
-
- // cleanup
- $this->view->deleteAll('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
-
- }
-
- /**
- * @medium
- */
- function testDeleteFileKeyFolder() {
-
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1/existingFile.txt', 'data');
-
- // create folder structure for some dummy file key files
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keyfiles/folder1');
-
- // create dummy keyfile
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keyfiles/folder1/dummyFile.txt.key', 'data');
-
- // recursive delete share keys from user1 and user2
- $result = Encryption\Keymanager::deleteFileKey($this->view, '/folder1');
- $this->assertFalse($result);
-
- // all file keys should still exists if we try to delete a folder with keys for which some files still exists
- $this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keyfiles/folder1/dummyFile.txt.key'));
- $this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keyfiles/folder1/existingFile.txt.key'));
-
- // delete folder
- $this->view->unlink('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
- // create dummy keyfile
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keyfiles/folder1/dummyFile.txt.key', 'data');
-
- // now file keys should be deleted since the folder no longer exists
- $result = Encryption\Keymanager::deleteFileKey($this->view, '/folder1');
- $this->assertTrue($result);
-
- $this->assertFalse($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keyfiles/folder1'));
-
- // cleanup
- $this->view->deleteAll('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
-
- }
-
- function testDelAllShareKeysFile() {
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1/existingFile.txt', 'data');
-
- // create folder structure for some dummy share key files
- $this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1');
-
- // create some dummy share keys for the existing file
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.user1.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.user2.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.user3.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey', 'data');
-
- // create some dummy share keys for a non-existing file
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/nonexistingFile.txt.user1.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/nonexistingFile.txt.user2.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/nonexistingFile.txt.user3.shareKey', 'data');
- $this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/nonexistingFile.txt.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey', 'data');
-
- // try to del all share keys from a existing file, should fail because the file still exists
- $result = Encryption\Keymanager::delAllShareKeys($this->view, Test_Encryption_Keymanager::TEST_USER, 'folder1/existingFile.txt');
- $this->assertFalse($result);
-
- // check if share keys still exists
- $this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey'));
- $this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.user1.shareKey'));
- $this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.user2.shareKey'));
- $this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.user3.shareKey'));
-
- // try to del all share keys from file, should succeed because the does not exist any more
- $result2 = Encryption\Keymanager::delAllShareKeys($this->view, Test_Encryption_Keymanager::TEST_USER, 'folder1/nonexistingFile.txt');
- $this->assertTrue($result2);
-
- // check if share keys are really gone
- $this->assertFalse($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/nonexistingFile.txt.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey'));
- // check that it only deleted keys or users who had access, others remain
- $this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/nonexistingFile.txt.user1.shareKey'));
- $this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/nonexistingFile.txt.user2.shareKey'));
- $this->assertTrue($this->view->file_exists(
- '/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/nonexistingFile.txt.user3.shareKey'));
-
- // cleanup
- $this->view->deleteAll('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
-
- }
-
function testKeySetPreperation() {
$basePath = '/'.Test_Encryption_Keymanager::TEST_USER.'/files';
$path = '/folder1/subfolder/subsubfolder/file.txt';
$this->assertFalse($this->view->is_dir($basePath . '/testKeySetPreperation'));
- $result = TestProtectedKeymanagerMethods::testKeySetPreperation($this->view, $path, $basePath);
-
- // return path without leading slash
- $this->assertSame('folder1/subfolder/subsubfolder/file.txt', $result);
+ TestProtectedKeymanagerMethods::testKeySetPreperation($this->view, $basePath . $path);
// check if directory structure was created
- $this->assertTrue($this->view->is_dir($basePath . '/folder1/subfolder/subsubfolder'));
+ $this->assertTrue($this->view->is_dir($basePath . $path));
// cleanup
$this->view->deleteAll($basePath . '/folder1');
@@ -516,18 +361,11 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {
class TestProtectedKeymanagerMethods extends \OCA\Encryption\Keymanager {
/**
- * @param string $sharekey
- */
- public static function testGetFilenameFromShareKey($sharekey, $user) {
- return self::getFilenameFromShareKey($sharekey, $user);
- }
-
- /**
* @param \OC\Files\View $view relative to data/
* @param string $path
* @param string $basePath
*/
- public static function testKeySetPreperation($view, $path, $basePath) {
- return self::keySetPreparation($view, $path, $basePath);
+ public static function testKeySetPreperation($view, $path) {
+ return self::keySetPreparation($view, $path);
}
}
diff --git a/apps/files_encryption/tests/migration.php b/apps/files_encryption/tests/migration.php
index 8ca2e94c90a..21c4e354c29 100644
--- a/apps/files_encryption/tests/migration.php
+++ b/apps/files_encryption/tests/migration.php
@@ -2,8 +2,9 @@
/**
* ownCloud
*
- * @author Thomas Müller
- * @copyright 2014 Thomas Müller deepdiver@owncloud.com
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author 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
@@ -23,7 +24,29 @@
use OCA\Encryption;
use OCA\Files_Encryption\Migration;
-class Test_Migration extends \Test\TestCase {
+class Test_Migration extends \OCA\Files_Encryption\Tests\TestCase {
+
+ const TEST_ENCRYPTION_MIGRATION_USER1='test_encryption_user1';
+ const TEST_ENCRYPTION_MIGRATION_USER2='test_encryption_user2';
+ const TEST_ENCRYPTION_MIGRATION_USER3='test_encryption_user3';
+
+ private $view;
+ private $public_share_key_id;
+ private $recovery_key_id;
+
+ public static function setUpBeforeClass() {
+ parent::setUpBeforeClass();
+ self::loginHelper(self::TEST_ENCRYPTION_MIGRATION_USER1, true);
+ self::loginHelper(self::TEST_ENCRYPTION_MIGRATION_USER2, true);
+ self::loginHelper(self::TEST_ENCRYPTION_MIGRATION_USER3, true);
+ }
+
+ public static function tearDownAfterClass() {
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_MIGRATION_USER1);
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_MIGRATION_USER2);
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_MIGRATION_USER3);
+ parent::tearDownAfterClass();
+ }
protected function tearDown() {
if (OC_DB::tableExists('encryption_test')) {
@@ -34,26 +57,17 @@ class Test_Migration extends \Test\TestCase {
parent::tearDown();
}
- protected function setUp() {
- parent::setUp();
-
+ public function setUp() {
+ $this->loginHelper(self::TEST_ENCRYPTION_MIGRATION_USER1);
+ $this->view = new \OC\Files\View();
+ $this->public_share_key_id = Encryption\Helper::getPublicShareKeyId();
+ $this->recovery_key_id = Encryption\Helper::getRecoveryKeyId();
if (OC_DB::tableExists('encryption_test')) {
OC_DB::dropTable('encryption_test');
}
$this->assertTableNotExist('encryption_test');
}
- public function testEncryptionTableDoesNotExist() {
-
- $this->assertTableNotExist('encryption_test');
-
- $migration = new Migration('encryption_test');
- $migration->dropTableEncryption();
-
- $this->assertTableNotExist('encryption_test');
-
- }
-
public function checkLastIndexId() {
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` ('
.' `item_type`, `item_source`, `item_target`, `share_type`,'
@@ -91,89 +105,160 @@ class Test_Migration extends \Test\TestCase {
$this->checkLastIndexId();
}
- public function testDataMigration() {
- // TODO travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('Fails on travis');
+ /**
+ * @param string $table
+ */
+ public function assertTableNotExist($table) {
+ $type=OC_Config::getValue( "dbtype", "sqlite" );
+ if( $type == 'sqlite' || $type == 'sqlite3' ) {
+ // sqlite removes the tables after closing the DB
+ $this->assertTrue(true);
+ } else {
+ $this->assertFalse(OC_DB::tableExists($table), 'Table ' . $table . ' exists.');
}
-
- $this->assertTableNotExist('encryption_test');
-
- // create test table
- OC_DB::createDbFromStructure(__DIR__ . '/encryption_table.xml');
- $this->assertTableExist('encryption_test');
-
- OC_DB::executeAudited('INSERT INTO `*PREFIX*encryption_test` values(?, ?, ?, ?)',
- array('user1', 'server-side', 1, 1));
-
- // preform migration
- $migration = new Migration('encryption_test');
- $migration->dropTableEncryption();
-
- // assert
- $this->assertTableNotExist('encryption_test');
-
- $rec = \OC_Preferences::getValue('user1', 'files_encryption', 'recovery_enabled');
- $mig = \OC_Preferences::getValue('user1', 'files_encryption', 'migration_status');
-
- $this->assertEquals(1, $rec);
- $this->assertEquals(1, $mig);
}
- public function testDuplicateDataMigration() {
- // TODO travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('Fails on travis');
+ protected function createDummyShareKeys($uid) {
+ $this->view->mkdir($uid . '/files_encryption/share-keys/folder1/folder2/folder3');
+ $this->view->mkdir($uid . '/files_encryption/share-keys/folder2/');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder1/folder2/folder3/file3.' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder1/folder2/folder3/file3.' . self::TEST_ENCRYPTION_MIGRATION_USER2 . '.shareKey' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder1/folder2/folder3/file3.' . self::TEST_ENCRYPTION_MIGRATION_USER3 . '.shareKey' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder1/folder2/file2.' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder1/folder2/file2.' . self::TEST_ENCRYPTION_MIGRATION_USER2 . '.shareKey' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder1/folder2/file2.' . self::TEST_ENCRYPTION_MIGRATION_USER3 . '.shareKey' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder1/file.1.' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder1/file.1.' . self::TEST_ENCRYPTION_MIGRATION_USER2 . '.shareKey' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder1/file.1.' . self::TEST_ENCRYPTION_MIGRATION_USER3 . '.shareKey' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder2/file.2.1.' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder2/file.2.1.' . self::TEST_ENCRYPTION_MIGRATION_USER2 . '.shareKey' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder2/file.2.1.' . self::TEST_ENCRYPTION_MIGRATION_USER3 . '.shareKey' , 'data');
+ if ($this->public_share_key_id) {
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder2/file.2.1.' . $this->public_share_key_id . '.shareKey' , 'data');
}
-
- // create test table
- OC_DB::createDbFromStructure(__DIR__ . '/encryption_table.xml');
-
- // in case of duplicate entries we want to preserve 0 on migration status and 1 on recovery
- $data = array(
- array('user1', 'server-side', 1, 1),
- array('user1', 'server-side', 1, 0),
- array('user1', 'server-side', 0, 1),
- array('user1', 'server-side', 0, 0),
- );
- foreach ($data as $d) {
- OC_DB::executeAudited(
- 'INSERT INTO `*PREFIX*encryption_test` values(?, ?, ?, ?)',
- $d);
+ if ($this->recovery_key_id) {
+ $this->view->file_put_contents($uid . '/files_encryption/share-keys/folder2/file.2.1.' . $this->recovery_key_id . '.shareKey' , 'data');
}
+ }
- // preform migration
- $migration = new Migration('encryption_test');
- $migration->dropTableEncryption();
+ protected function createDummyFileKeys($uid) {
+ $this->view->mkdir($uid . '/files_encryption/keyfiles/folder1/folder2/folder3');
+ $this->view->mkdir($uid . '/files_encryption/keyfiles/folder2/');
+ $this->view->file_put_contents($uid . '/files_encryption/keyfiles/folder1/folder2/folder3/file3.key' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/keyfiles/folder1/folder2/file2.key' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/keyfiles/folder1/file.1.key' , 'data');
+ $this->view->file_put_contents($uid . '/files_encryption/keyfiles/folder2/file.2.1.key' , 'data');
+ }
- // assert
- $this->assertTableNotExist('encryption_test');
+ protected function createDummyFilesInTrash($uid) {
+ $this->view->mkdir($uid . '/files_trashbin/share-keys');
+ $this->view->mkdir($uid . '/files_trashbin/share-keys/folder1.d7437648723');
+ $this->view->file_put_contents($uid . '/files_trashbin/share-keys/file1.' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey.d5457864' , 'data');
+ $this->view->file_put_contents($uid . '/files_trashbin/share-keys/file1.' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey.d5457864' , 'data');
+ $this->view->file_put_contents($uid . '/files_trashbin/share-keys/folder1.d7437648723/file2.' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey' , 'data');
+
+ $this->view->mkdir($uid . '/files_trashbin/keyfiles');
+ $this->view->mkdir($uid . '/files_trashbin/keyfiles/folder1.d7437648723');
+ $this->view->file_put_contents($uid . '/files_trashbin/keyfiles/file1.key.d5457864' , 'data');
+ $this->view->file_put_contents($uid . '/files_trashbin/keyfiles/folder1.d7437648723/file2.key' , 'data');
+ }
+
+ protected function createDummySystemWideKeys() {
+ $this->view->mkdir('owncloud_private_key');
+ $this->view->file_put_contents('owncloud_private_key/systemwide_1.private.key', 'data');
+ $this->view->file_put_contents('owncloud_private_key/systemwide_2.private.key', 'data');
+ }
- $rec = \OC_Preferences::getValue('user1', 'files_encryption', 'recovery_enabled');
- $mig = \OC_Preferences::getValue('user1', 'files_encryption', 'migration_status');
+ public function testMigrateToNewFolderStructure() {
+
+ // go back to the state before migration
+ $this->view->rename('/files_encryption/public_keys', '/public-keys');
+ $this->view->rename('/public-keys/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.publicKey', '/public-keys/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.public.key');
+ $this->view->rename('/public-keys/' . self::TEST_ENCRYPTION_MIGRATION_USER2 . '.publicKey', '/public-keys/' . self::TEST_ENCRYPTION_MIGRATION_USER2 . '.public.key');
+ $this->view->rename('/public-keys/' . self::TEST_ENCRYPTION_MIGRATION_USER3 . '.publicKey', '/public-keys/' . self::TEST_ENCRYPTION_MIGRATION_USER3 . '.public.key');
+ $this->view->deleteAll(self::TEST_ENCRYPTION_MIGRATION_USER1 . '/files_encryption/keys');
+ $this->view->deleteAll(self::TEST_ENCRYPTION_MIGRATION_USER2 . '/files_encryption/keys');
+ $this->view->deleteAll(self::TEST_ENCRYPTION_MIGRATION_USER3 . '/files_encryption/keys');
+ $this->view->rename(self::TEST_ENCRYPTION_MIGRATION_USER1 . '/files_encryption/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.privateKey',
+ self::TEST_ENCRYPTION_MIGRATION_USER1 . '/files_encryption/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.private.key');
+ $this->view->rename(self::TEST_ENCRYPTION_MIGRATION_USER2 . '/files_encryption/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.privateKey',
+ self::TEST_ENCRYPTION_MIGRATION_USER2 . '/files_encryption/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.private.key');
+ $this->view->rename(self::TEST_ENCRYPTION_MIGRATION_USER3 . '/files_encryption/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.privateKey',
+ self::TEST_ENCRYPTION_MIGRATION_USER3 . '/files_encryption/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.private.key');
+
+ $this->createDummyShareKeys(self::TEST_ENCRYPTION_MIGRATION_USER1);
+ $this->createDummyShareKeys(self::TEST_ENCRYPTION_MIGRATION_USER2);
+ $this->createDummyShareKeys(self::TEST_ENCRYPTION_MIGRATION_USER3);
+
+ $this->createDummyFileKeys(self::TEST_ENCRYPTION_MIGRATION_USER1);
+ $this->createDummyFileKeys(self::TEST_ENCRYPTION_MIGRATION_USER2);
+ $this->createDummyFileKeys(self::TEST_ENCRYPTION_MIGRATION_USER3);
+
+ $this->createDummyFilesInTrash(self::TEST_ENCRYPTION_MIGRATION_USER2);
+
+ // no user for system wide mount points
+ $this->createDummyFileKeys('');
+ $this->createDummyShareKeys('');
+
+ $this->createDummySystemWideKeys();
+
+ $m = new \OCA\Files_Encryption\Migration();
+ $m->reorganizeFolderStructure();
+
+ // TODO Verify that all files at the right place
+ $this->assertTrue($this->view->file_exists('/files_encryption/public_keys/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.publicKey'));
+ $this->assertTrue($this->view->file_exists('/files_encryption/public_keys/' . self::TEST_ENCRYPTION_MIGRATION_USER2 . '.publicKey'));
+ $this->assertTrue($this->view->file_exists('/files_encryption/public_keys/' . self::TEST_ENCRYPTION_MIGRATION_USER3 . '.publicKey'));
+ $this->verifyNewKeyPath(self::TEST_ENCRYPTION_MIGRATION_USER1);
+ $this->verifyNewKeyPath(self::TEST_ENCRYPTION_MIGRATION_USER2);
+ $this->verifyNewKeyPath(self::TEST_ENCRYPTION_MIGRATION_USER3);
+ // system wide keys
+ $this->verifyNewKeyPath('');
+ // trash
+ $this->verifyFilesInTrash(self::TEST_ENCRYPTION_MIGRATION_USER2);
- $this->assertEquals(1, $rec);
- $this->assertEquals(0, $mig);
}
- /**
- * @param string $table
- */
- public function assertTableExist($table) {
- $this->assertTrue(OC_DB::tableExists($table), 'Table ' . $table . ' does not exist');
+ protected function verifyFilesInTrash($uid) {
+ // share keys
+ $this->view->file_exists($uid . '/files_trashbin/keys/file1.d5457864/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey.d5457864' , 'data');
+ $this->view->file_exists($uid . '/files_trashbin/keys/file1.d5457864/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey.d5457864' , 'data');
+ $this->view->file_exists($uid . '/files_trashbin/keys/folder1.d7437648723/file2/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey' , 'data');
+
+ // file keys
+ $this->view->file_exists($uid . '/files_trashbin/keys/file1.d5457864/fileKey.d5457864' , 'data');
+ $this->view->file_exists($uid . '/files_trashbin/keyfiles/file1.d5457864/fileKey.d5457864' , 'data');
+ $this->view->file_exists($uid . '/files_trashbin/keyfiles/folder1.d7437648723/file2/fileKey' , 'data');
}
- /**
- * @param string $table
- */
- public function assertTableNotExist($table) {
- $type=OC_Config::getValue( "dbtype", "sqlite" );
- if( $type == 'sqlite' || $type == 'sqlite3' ) {
- // sqlite removes the tables after closing the DB
- $this->assertTrue(true);
- } else {
- $this->assertFalse(OC_DB::tableExists($table), 'Table ' . $table . ' exists.');
+ protected function verifyNewKeyPath($uid) {
+ // private key
+ if ($uid !== '') {
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/' . $uid . '.privateKey'));
+ }
+ // file keys
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/folder2/folder3/file3/fileKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/folder2/file2/fileKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/file.1/fileKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder2/file.2.1/fileKey'));
+ // share keys
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/folder2/folder3/file3/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/folder2/folder3/file3/' . self::TEST_ENCRYPTION_MIGRATION_USER2 . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/folder2/folder3/file3/' . self::TEST_ENCRYPTION_MIGRATION_USER3 . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/folder2/file2/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/folder2/file2/' . self::TEST_ENCRYPTION_MIGRATION_USER2 . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/folder2/file2/' . self::TEST_ENCRYPTION_MIGRATION_USER3 . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/file.1/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/file.1/' . self::TEST_ENCRYPTION_MIGRATION_USER2 . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder1/file.1/' . self::TEST_ENCRYPTION_MIGRATION_USER3 . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder2/file.2.1/' . self::TEST_ENCRYPTION_MIGRATION_USER1 . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder2/file.2.1/' . self::TEST_ENCRYPTION_MIGRATION_USER2 . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder2/file.2.1/' . self::TEST_ENCRYPTION_MIGRATION_USER3 . '.shareKey'));
+ if ($this->public_share_key_id) {
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder2/file.2.1/' . $this->public_share_key_id . '.shareKey'));
+ }
+ if ($this->recovery_key_id) {
+ $this->assertTrue($this->view->file_exists($uid . '/files_encryption/keys/folder2/file.2.1/' . $this->recovery_key_id . '.shareKey'));
}
}
-
}
diff --git a/apps/files_encryption/tests/proxy.php b/apps/files_encryption/tests/proxy.php
index a91222327f1..72a9a9a5551 100644
--- a/apps/files_encryption/tests/proxy.php
+++ b/apps/files_encryption/tests/proxy.php
@@ -44,20 +44,6 @@ class Test_Encryption_Proxy extends \OCA\Files_Encryption\Tests\TestCase {
public static function setUpBeforeClass() {
parent::setUpBeforeClass();
- // reset backend
- \OC_User::clearBackends();
- \OC_User::useBackend('database');
-
- \OC_Hook::clear('OC_Filesystem');
- \OC_Hook::clear('OC_User');
-
- // Filesystem related hooks
- \OCA\Encryption\Helper::registerFilesystemHooks();
-
- // clear and register hooks
- \OC_FileProxy::clearProxies();
- \OC_FileProxy::register(new OCA\Encryption\Proxy());
-
// create test user
self::loginHelper(\Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1, true);
}
@@ -85,14 +71,6 @@ class Test_Encryption_Proxy extends \OCA\Files_Encryption\Tests\TestCase {
// cleanup test user
\OC_User::deleteUser(\Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1);
- \OC_Hook::clear();
- \OC_FileProxy::clearProxies();
-
- // Delete keys in /data/
- $view = new \OC\Files\View('/');
- $view->rmdir('public-keys');
- $view->rmdir('owncloud_private_key');
-
parent::tearDownAfterClass();
}
diff --git a/apps/files_encryption/tests/share.php b/apps/files_encryption/tests/share.php
index 24b828433d0..f827017569f 100755
--- a/apps/files_encryption/tests/share.php
+++ b/apps/files_encryption/tests/share.php
@@ -47,30 +47,15 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
public static function setUpBeforeClass() {
parent::setUpBeforeClass();
- // reset backend
- \OC_User::clearBackends();
- \OC_User::useBackend('database');
-
// enable resharing
\OC::$server->getAppConfig()->setValue('core', 'shareapi_allow_resharing', 'yes');
- // clear share hooks
- \OC_Hook::clear('OCP\\Share');
-
// register share hooks
\OC::registerShareHooks();
\OCA\Files_Sharing\Helper::registerHooks();
- // Sharing related hooks
- \OCA\Encryption\Helper::registerShareHooks();
-
- // Filesystem related hooks
- \OCA\Encryption\Helper::registerFilesystemHooks();
-
// clear and register hooks
- \OC_FileProxy::clearProxies();
\OC_FileProxy::register(new OCA\Files\Share\Proxy());
- \OC_FileProxy::register(new OCA\Encryption\Proxy());
// create users
self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1, true);
@@ -127,14 +112,6 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
\OC_User::deleteUser(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
\OC_User::deleteUser(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4);
- \OC_Hook::clear();
- \OC_FileProxy::clearProxies();
-
- // Delete keys in /data/
- $view = new \OC\Files\View('/');
- $view->rmdir('public-keys');
- $view->rmdir('owncloud_private_key');
-
parent::tearDownAfterClass();
}
@@ -178,8 +155,8 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key for user1 exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// login as user1
self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
@@ -202,8 +179,8 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// cleanup
$this->view->chroot('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/');
@@ -212,8 +189,8 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
}
}
@@ -239,8 +216,8 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key for user2 exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
// login as user2
self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
@@ -266,16 +243,16 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
// unshare the file with user1
\OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// cleanup
$this->view->chroot('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/');
@@ -284,8 +261,8 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
}
}
@@ -335,9 +312,9 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key for user1 exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys' . $this->folder1
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// login as user1
self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
@@ -361,9 +338,9 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys'
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys'
. $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// cleanup
$this->view->chroot('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files');
@@ -372,9 +349,9 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys'
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys'
. $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
}
return $fileInfo;
@@ -413,9 +390,9 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key for user3 exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys' . $this->folder1
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
// login as user3
self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
@@ -444,9 +421,9 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key for user3 exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys' . $this->folder1
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey'));
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey'));
// login as user3
self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4);
@@ -469,9 +446,9 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys'
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys'
. $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey'));
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey'));
// login as user1
self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
@@ -481,9 +458,9 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys'
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys'
. $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
// login as admin
self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
@@ -493,9 +470,9 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys'
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys'
. $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// cleanup
$this->view->chroot('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files');
@@ -504,9 +481,9 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys'
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys'
. $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
}
}
@@ -548,8 +525,8 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key for public exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . $publicShareKeyId . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . $publicShareKeyId . '.shareKey'));
// some hacking to simulate public link
//$GLOBALS['app'] = 'files_sharing';
@@ -572,8 +549,8 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . $publicShareKeyId . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . $publicShareKeyId . '.shareKey'));
// cleanup
$this->view->chroot('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/');
@@ -582,8 +559,8 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
}
/**
@@ -624,11 +601,11 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key for user2 and user3 exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey'));
// login as user1
self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
@@ -648,11 +625,11 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey'));
// cleanup
$this->view->chroot('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/');
@@ -661,8 +638,8 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
}
@@ -708,19 +685,19 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key for admin and recovery exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' . $this->folder1
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' . $this->folder1
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
// disable recovery for admin
$this->assertTrue($util->setRecoveryForUser(0));
@@ -730,12 +707,12 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key for recovery not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' . $this->folder1
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
// enable recovery for admin
$this->assertTrue($util->setRecoveryForUser(1));
@@ -745,12 +722,12 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key for admin and recovery exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' . $this->folder1
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
// cleanup
$this->view->chroot('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/');
@@ -760,12 +737,12 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key for recovery not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' . $this->folder1
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
$this->assertTrue(\OCA\Encryption\Helper::adminEnableRecovery(null, 'test123'));
$this->assertTrue(\OCA\Encryption\Helper::adminDisableRecovery('test123'));
@@ -815,19 +792,19 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key for user and recovery exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/keys/'
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/' . $this->folder1
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/keys/' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/' . $this->folder1
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/keys/' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
// login as admin
self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
@@ -859,19 +836,19 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key for user and recovery exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/keys/'
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/' . $this->folder1
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/keys/' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/' . $this->folder1
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/keys/' . $this->folder1
. $this->subfolder . $this->subsubfolder . '/'
- . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
+ . $this->filename . '/' . $recoveryKeyId . '.shareKey'));
// enable recovery for admin
$this->assertTrue($util->setRecoveryForUser(0));
@@ -915,8 +892,8 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
$this->assertGreaterThan(0, $fileInfo['unencrypted_size']);
// break users public key
- $this->view->rename('/public-keys/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.public.key',
- '/public-keys/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.public.key_backup');
+ $this->view->rename(\OCA\Encryption\Keymanager::getPublicKeyPath() . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.publicKey',
+ \OCA\Encryption\Keymanager::getPublicKeyPath() . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.publicKey_backup');
// re-enable the file proxy
\OC_FileProxy::$enabled = $proxyStatus;
@@ -934,8 +911,8 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key for user1 not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
// disable encryption proxy to prevent recursive calls
$proxyStatus = \OC_FileProxy::$enabled;
@@ -943,12 +920,12 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// break user1 public key
$this->view->rename(
- '/public-keys/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.public.key_backup',
- '/public-keys/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.public.key');
+ \OCA\Encryption\Keymanager::getPublicKeyPath() . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.publicKey_backup',
+ \OCA\Encryption\Keymanager::getPublicKeyPath() . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.publicKey');
// remove share file
- $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3
+ $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3
. '.shareKey');
// re-enable the file proxy
@@ -959,8 +936,8 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
// cleanup
$this->view->chroot('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/');
@@ -995,8 +972,8 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
// check if share key for user2 exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
- . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/keys/'
+ . $this->filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// login as user2
@@ -1068,10 +1045,10 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
$this->assertEquals($this->dataShort, $newDecrypt);
// check if additional share key for user2 exists
- $this->assertTrue($view->file_exists('files_encryption/share-keys' . $newFolder . '/' . $filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ $this->assertTrue($view->file_exists('files_encryption/keys' . $newFolder . '/' . $filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// check that old keys were removed/moved properly
- $this->assertFalse($view->file_exists('files_encryption/share-keys' . $folder . '/' . $filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ $this->assertFalse($view->file_exists('files_encryption/keys' . $folder . '/' . $filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// tear down
\OC\Files\Filesystem::unlink($newFolder);
@@ -1120,8 +1097,8 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
\OCP\Share::shareItem('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, \OCP\Constants::PERMISSION_ALL);
// check that the share keys exist
- $this->assertTrue($view->file_exists('files_encryption/share-keys' . $folder . '/' . $filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
- $this->assertTrue($view->file_exists('files_encryption/share-keys' . $folder . '/' . $filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ $this->assertTrue($view->file_exists('files_encryption/keys' . $folder . '/' . $filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
+ $this->assertTrue($view->file_exists('files_encryption/keys' . $folder . '/' . $filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// move the file into the subfolder as the test user
self::loginHelper($userId);
@@ -1133,12 +1110,12 @@ class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
$this->assertEquals($this->dataShort, $newDecrypt);
// check if additional share key for user2 exists
- $this->assertTrue($view->file_exists('files_encryption/share-keys' . $subFolder . '/' . $filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
- $this->assertTrue($view->file_exists('files_encryption/share-keys' . $subFolder . '/' . $filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ $this->assertTrue($view->file_exists('files_encryption/keys' . $subFolder . '/' . $filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
+ $this->assertTrue($view->file_exists('files_encryption/keys' . $subFolder . '/' . $filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// check that old keys were removed/moved properly
- $this->assertFalse($view->file_exists('files_encryption/share-keys' . $folder . '/' . $filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
- $this->assertFalse($view->file_exists('files_encryption/share-keys' . $folder . '/' . $filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+ $this->assertFalse($view->file_exists('files_encryption/keys' . $folder . '/' . $filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
+ $this->assertFalse($view->file_exists('files_encryption/keys' . $folder . '/' . $filename . '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
// tear down
\OC\Files\Filesystem::unlink($subFolder);
diff --git a/apps/files_encryption/tests/stream.php b/apps/files_encryption/tests/stream.php
index b1404ca282a..f4824935ca0 100644
--- a/apps/files_encryption/tests/stream.php
+++ b/apps/files_encryption/tests/stream.php
@@ -42,17 +42,6 @@ class Test_Encryption_Stream extends \OCA\Files_Encryption\Tests\TestCase {
public static function setUpBeforeClass() {
parent::setUpBeforeClass();
- // reset backend
- \OC_User::clearBackends();
- \OC_User::useBackend('database');
-
- // Filesystem related hooks
- \OCA\Encryption\Helper::registerFilesystemHooks();
-
- // clear and register hooks
- \OC_FileProxy::clearProxies();
- \OC_FileProxy::register(new OCA\Encryption\Proxy());
-
// create test user
self::loginHelper(\Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1, true);
}
@@ -94,14 +83,6 @@ class Test_Encryption_Stream extends \OCA\Files_Encryption\Tests\TestCase {
// cleanup test user
\OC_User::deleteUser(\Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1);
- \OC_Hook::clear();
- \OC_FileProxy::clearProxies();
-
- // Delete keys in /data/
- $view = new \OC\Files\View('/');
- $view->rmdir('public-keys');
- $view->rmdir('owncloud_private_key');
-
parent::tearDownAfterClass();
}
diff --git a/apps/files_encryption/tests/testcase.php b/apps/files_encryption/tests/testcase.php
index 3106aeda8ea..743a876ab45 100644
--- a/apps/files_encryption/tests/testcase.php
+++ b/apps/files_encryption/tests/testcase.php
@@ -14,6 +14,7 @@ use OCA\Encryption;
* Class Test_Encryption_TestCase
*/
abstract class TestCase extends \Test\TestCase {
+
/**
* @param string $user
* @param bool $create
@@ -50,4 +51,34 @@ abstract class TestCase extends \Test\TestCase {
\OC_User::setUserId(false);
\OC\Files\Filesystem::tearDown();
}
+
+ public static function setUpBeforeClass() {
+ parent::setUpBeforeClass();
+
+ // reset backend
+ \OC_User::clearBackends();
+ \OC_User::useBackend('database');
+
+ \OCA\Encryption\Helper::registerFilesystemHooks();
+ \OCA\Encryption\Helper::registerUserHooks();
+ \OCA\Encryption\Helper::registerShareHooks();
+
+ \OC::registerShareHooks();
+ \OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup');
+
+ // clear and register hooks
+ \OC_FileProxy::clearProxies();
+ \OC_FileProxy::register(new \OCA\Encryption\Proxy());
+ }
+
+ public static function tearDownAfterClass() {
+ \OC_Hook::clear();
+ \OC_FileProxy::clearProxies();
+
+ // Delete keys in /data/
+ $view = new \OC\Files\View('/');
+ $view->deleteAll('files_encryption');
+
+ parent::tearDownAfterClass();
+ }
}
diff --git a/apps/files_encryption/tests/trashbin.php b/apps/files_encryption/tests/trashbin.php
index a43e8f964a2..de5b8bd6edb 100755
--- a/apps/files_encryption/tests/trashbin.php
+++ b/apps/files_encryption/tests/trashbin.php
@@ -45,23 +45,9 @@ class Test_Encryption_Trashbin extends \OCA\Files_Encryption\Tests\TestCase {
public static function setUpBeforeClass() {
parent::setUpBeforeClass();
- // reset backend
- \OC_User::clearBackends();
- \OC_User::useBackend('database');
-
- \OC_Hook::clear('OC_Filesystem');
- \OC_Hook::clear('OC_User');
-
// trashbin hooks
\OCA\Files_Trashbin\Trashbin::registerHooks();
- // Filesystem related hooks
- \OCA\Encryption\Helper::registerFilesystemHooks();
-
- // clear and register hooks
- \OC_FileProxy::clearProxies();
- \OC_FileProxy::register(new OCA\Encryption\Proxy());
-
// create test user
self::loginHelper(self::TEST_ENCRYPTION_TRASHBIN_USER1, true);
}
@@ -107,14 +93,6 @@ class Test_Encryption_Trashbin extends \OCA\Files_Encryption\Tests\TestCase {
// cleanup test user
\OC_User::deleteUser(self::TEST_ENCRYPTION_TRASHBIN_USER1);
- \OC_Hook::clear();
- \OC_FileProxy::clearProxies();
-
- // Delete keys in /data/
- $view = new \OC\Files\View('/');
- $view->rmdir('public-keys');
- $view->rmdir('owncloud_private_key');
-
parent::tearDownAfterClass();
}
@@ -138,22 +116,20 @@ class Test_Encryption_Trashbin extends \OCA\Files_Encryption\Tests\TestCase {
// check if key for admin exists
$this->assertTrue($this->view->file_exists(
- '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/' . $filename
- . '.key'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/' . $filename . '/fileKey'));
$this->assertTrue($this->view->file_exists(
- '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/' . $filename2
- . '.key'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/' . $filename2 . '/fileKey'));
// check if share key for admin exists
$this->assertTrue($this->view->file_exists(
- '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename . '.' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/'
+ . $filename . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
$this->assertTrue($this->view->file_exists(
- '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename2 . '.' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/'
+ . $filename2 . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
// delete first file
- \OC\FIles\Filesystem::unlink($filename);
+ \OC\Files\Filesystem::unlink($filename);
// check if file not exists
$this->assertFalse($this->view->file_exists(
@@ -161,13 +137,12 @@ class Test_Encryption_Trashbin extends \OCA\Files_Encryption\Tests\TestCase {
// check if key for admin not exists
$this->assertFalse($this->view->file_exists(
- '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/' . $filename
- . '.key'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/' . $filename . '/fileKey'));
// check if share key for admin not exists
$this->assertFalse($this->view->file_exists(
- '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename . '.' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/'
+ . $filename . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
// check that second file still exists
$this->assertTrue($this->view->file_exists(
@@ -175,13 +150,12 @@ class Test_Encryption_Trashbin extends \OCA\Files_Encryption\Tests\TestCase {
// check that key for second file still exists
$this->assertTrue($this->view->file_exists(
- '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/' . $filename2
- . '.key'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/' . $filename2 . '/fileKey'));
// check that share key for second file still exists
$this->assertTrue($this->view->file_exists(
- '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename2 . '.' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/'
+ . $filename2 . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
// get files
$trashFiles = $this->view->getDirectoryContent(
@@ -199,15 +173,16 @@ class Test_Encryption_Trashbin extends \OCA\Files_Encryption\Tests\TestCase {
// check if we found the file we created
$this->assertNotNull($trashFileSuffix);
+ $this->assertTrue($this->view->is_dir('/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keys/' . $filename . '.' . $trashFileSuffix));
+
// check if key for admin not exists
$this->assertTrue($this->view->file_exists(
- '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keyfiles/' . $filename
- . '.key.' . $trashFileSuffix));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keys/' . $filename . '.' . $trashFileSuffix . '/fileKey'));
// check if share key for admin not exists
$this->assertTrue($this->view->file_exists(
- '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/share-keys/' . $filename
- . '.' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey.' . $trashFileSuffix));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keys/' . $filename
+ . '.' . $trashFileSuffix . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
}
/**
@@ -242,6 +217,13 @@ class Test_Encryption_Trashbin extends \OCA\Files_Encryption\Tests\TestCase {
// prepare file information
$timestamp = str_replace('d', '', $trashFileSuffix);
+ // before calling the restore operation the keys shouldn't be there
+ $this->assertFalse($this->view->file_exists(
+ '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/' . $filename . '/fileKey'));
+ $this->assertFalse($this->view->file_exists(
+ '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/'
+ . $filename . '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
+
// restore first file
$this->assertTrue(\OCA\Files_Trashbin\Trashbin::restore($filename . '.' . $trashFileSuffix, $filename, $timestamp));
@@ -251,13 +233,12 @@ class Test_Encryption_Trashbin extends \OCA\Files_Encryption\Tests\TestCase {
// check if key for admin exists
$this->assertTrue($this->view->file_exists(
- '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/'
- . $filename . '.key'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/' . $filename . '/fileKey'));
// check if share key for admin exists
$this->assertTrue($this->view->file_exists(
- '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename . '.' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/'
+ . $filename . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
// check that second file was NOT restored
$this->assertFalse($this->view->file_exists(
@@ -265,13 +246,12 @@ class Test_Encryption_Trashbin extends \OCA\Files_Encryption\Tests\TestCase {
// check if key for admin exists
$this->assertFalse($this->view->file_exists(
- '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/'
- . $filename2 . '.key'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/' . $filename2 . '/fileKey'));
// check if share key for admin exists
$this->assertFalse($this->view->file_exists(
- '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename2 . '.' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/'
+ . $filename2 . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
}
/**
@@ -291,13 +271,12 @@ class Test_Encryption_Trashbin extends \OCA\Files_Encryption\Tests\TestCase {
// check if key for admin exists
$this->assertTrue($this->view->file_exists(
- '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/' . $filename
- . '.key'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/' . $filename . '/fileKey'));
// check if share key for admin exists
$this->assertTrue($this->view->file_exists(
- '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename . '.' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/'
+ . $filename . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
// delete file
\OC\Files\Filesystem::unlink($filename);
@@ -308,13 +287,13 @@ class Test_Encryption_Trashbin extends \OCA\Files_Encryption\Tests\TestCase {
// check if key for admin not exists
$this->assertFalse($this->view->file_exists(
- '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/' . $filename
- . '.key'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/' . $filename . '/'
+ . $filename . '.key'));
// check if share key for admin not exists
$this->assertFalse($this->view->file_exists(
- '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename . '.' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/'
+ . $filename . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
// find created file with timestamp
$query = \OC_DB::prepare('SELECT `timestamp`,`type` FROM `*PREFIX*files_trash`'
@@ -328,13 +307,13 @@ class Test_Encryption_Trashbin extends \OCA\Files_Encryption\Tests\TestCase {
// check if key for admin exists
$this->assertTrue($this->view->file_exists(
- '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keyfiles/' . $filename
- . '.key.' . $trashFileSuffix));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keys/' . $filename
+ . '.' . $trashFileSuffix . '/fileKey'));
// check if share key for admin exists
$this->assertTrue($this->view->file_exists(
- '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/share-keys/' . $filename
- . '.' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey.' . $trashFileSuffix));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keys/'
+ . $filename . '.' . $trashFileSuffix . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
// get timestamp from file
$timestamp = str_replace('d', '', $trashFileSuffix);
@@ -349,13 +328,13 @@ class Test_Encryption_Trashbin extends \OCA\Files_Encryption\Tests\TestCase {
// check if key for admin not exists
$this->assertFalse($this->view->file_exists(
- '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keyfiles/' . $filename
- . '.key.' . $trashFileSuffix));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keys/' . $filename
+ . '.' . $trashFileSuffix . '/fileKey'));
// check if share key for admin not exists
$this->assertFalse($this->view->file_exists(
- '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/share-keys/' . $filename
- . '.' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey.' . $trashFileSuffix));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keys/' . $filename
+ . '.' . $trashFileSuffix . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
}
}
diff --git a/apps/files_encryption/tests/util.php b/apps/files_encryption/tests/util.php
index b8057202a07..8d9aba423cd 100755
--- a/apps/files_encryption/tests/util.php
+++ b/apps/files_encryption/tests/util.php
@@ -43,12 +43,6 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
public static function setUpBeforeClass() {
parent::setUpBeforeClass();
- // reset backend
- \OC_User::clearBackends();
- \OC_User::useBackend('database');
-
- self::setupHooks();
-
// create test user
self::loginHelper(self::TEST_ENCRYPTION_UTIL_USER1, true);
self::loginHelper(self::TEST_ENCRYPTION_UTIL_USER2, true);
@@ -85,13 +79,13 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
$this->genPublicKey = $keypair['publicKey'];
$this->genPrivateKey = $keypair['privateKey'];
- $this->publicKeyDir = '/' . 'public-keys';
+ $this->publicKeyDir = \OCA\Encryption\Keymanager::getPublicKeyPath();
$this->encryptionDir = '/' . $this->userId . '/' . 'files_encryption';
- $this->keyfilesPath = $this->encryptionDir . '/' . 'keyfiles';
+ $this->keysPath = $this->encryptionDir . '/' . 'keys';
$this->publicKeyPath =
- $this->publicKeyDir . '/' . $this->userId . '.public.key'; // e.g. data/public-keys/admin.public.key
+ $this->publicKeyDir . '/' . $this->userId . '.publicKey'; // e.g. data/public-keys/admin.publicKey
$this->privateKeyPath =
- $this->encryptionDir . '/' . $this->userId . '.private.key'; // e.g. data/admin/admin.private.key
+ $this->encryptionDir . '/' . $this->userId . '.privateKey'; // e.g. data/admin/admin.privateKey
$this->view = new \OC\Files\View('/');
@@ -126,26 +120,9 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
\OC_Group::deleteGroup(self::TEST_ENCRYPTION_UTIL_GROUP1);
\OC_Group::deleteGroup(self::TEST_ENCRYPTION_UTIL_GROUP2);
- \OC_Hook::clear();
- \OC_FileProxy::clearProxies();
-
- // Delete keys in /data/
- $view = new \OC\Files\View('/');
- $view->rmdir('public-keys');
- $view->rmdir('owncloud_private_key');
-
parent::tearDownAfterClass();
}
- public static function setupHooks() {
- // Filesystem related hooks
- \OCA\Encryption\Helper::registerFilesystemHooks();
-
- // clear and register hooks
- \OC_FileProxy::clearProxies();
- \OC_FileProxy::register(new OCA\Encryption\Proxy());
- }
-
/**
* @medium
* test that paths set during User construction are correct
@@ -155,7 +132,7 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
$this->assertEquals($this->publicKeyDir, $util->getPath('publicKeyDir'));
$this->assertEquals($this->encryptionDir, $util->getPath('encryptionDir'));
- $this->assertEquals($this->keyfilesPath, $util->getPath('keyfilesPath'));
+ $this->assertEquals($this->keysPath, $util->getPath('keysPath'));
$this->assertEquals($this->publicKeyPath, $util->getPath('publicKeyPath'));
$this->assertEquals($this->privateKeyPath, $util->getPath('privateKeyPath'));
@@ -396,16 +373,18 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
// file should no longer be encrypted
$this->assertEquals(0, $fileInfoUnencrypted['encrypted']);
+ $backupPath = $this->getBackupPath('decryptAll');
+
// check if the keys where moved to the backup location
- $this->assertTrue($this->view->is_dir($this->userId . '/files_encryption/keyfiles.backup'));
- $this->assertTrue($this->view->file_exists($this->userId . '/files_encryption/keyfiles.backup/' . $filename . '.key'));
- $this->assertTrue($this->view->is_dir($this->userId . '/files_encryption/share-keys.backup'));
- $this->assertTrue($this->view->file_exists($this->userId . '/files_encryption/share-keys.backup/' . $filename . '.' . $user . '.shareKey'));
+ $this->assertTrue($this->view->is_dir($backupPath . '/keys'));
+ $this->assertTrue($this->view->file_exists($backupPath . '/keys/' . $filename . '/fileKey'));
+ $this->assertTrue($this->view->file_exists($backupPath . '/keys/' . $filename . '/' . $user . '.shareKey'));
+ $this->assertTrue($this->view->file_exists($backupPath . '/' . $user . '.privateKey'));
+ $this->assertTrue($this->view->file_exists($backupPath . '/' . $user . '.publicKey'));
// cleanup
$this->view->unlink($this->userId . '/files/' . $filename);
- $this->view->deleteAll($this->userId . '/files_encryption/keyfiles.backup');
- $this->view->deleteAll($this->userId . '/files_encryption/share-keys.backup');
+ $this->view->deleteAll($backupPath);
OC_App::enable('files_encryption');
}
@@ -418,38 +397,28 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
// create some dummy key files
$encPath = '/' . self::TEST_ENCRYPTION_UTIL_USER1 . '/files_encryption';
- $this->view->file_put_contents($encPath . '/keyfiles/foo.key', 'key');
- $this->view->file_put_contents($encPath . '/share-keys/foo.user1.shareKey', 'share key');
+ $this->view->mkdir($encPath . '/keys/foo');
+ $this->view->file_put_contents($encPath . '/keys/foo/fileKey', 'key');
+ $this->view->file_put_contents($encPath . '/keys/foo/user1.shareKey', 'share key');
$util = new \OCA\Encryption\Util($this->view, self::TEST_ENCRYPTION_UTIL_USER1);
- $util->backupAllKeys('testing');
+ $util->backupAllKeys('testBackupAllKeys');
- $encFolderContent = $this->view->getDirectoryContent($encPath);
-
- $backupPath = '';
- foreach ($encFolderContent as $c) {
- $name = $c['name'];
- if (substr($name, 0, strlen('backup')) === 'backup') {
- $backupPath = $encPath . '/'. $c['name'];
- break;
- }
- }
-
- $this->assertTrue($backupPath !== '');
+ $backupPath = $this->getBackupPath('testBackupAllKeys');
// check backupDir Content
- $this->assertTrue($this->view->is_dir($backupPath . '/keyfiles'));
- $this->assertTrue($this->view->is_dir($backupPath . '/share-keys'));
- $this->assertTrue($this->view->file_exists($backupPath . '/keyfiles/foo.key'));
- $this->assertTrue($this->view->file_exists($backupPath . '/share-keys/foo.user1.shareKey'));
- $this->assertTrue($this->view->file_exists($backupPath . '/' . self::TEST_ENCRYPTION_UTIL_USER1 . '.private.key'));
- $this->assertTrue($this->view->file_exists($backupPath . '/' . self::TEST_ENCRYPTION_UTIL_USER1 . '.public.key'));
+ $this->assertTrue($this->view->is_dir($backupPath . '/keys'));
+ $this->assertTrue($this->view->is_dir($backupPath . '/keys/foo'));
+ $this->assertTrue($this->view->file_exists($backupPath . '/keys/foo/fileKey'));
+ $this->assertTrue($this->view->file_exists($backupPath . '/keys/foo/user1.shareKey'));
+ $this->assertTrue($this->view->file_exists($backupPath . '/' . self::TEST_ENCRYPTION_UTIL_USER1 . '.privateKey'));
+ $this->assertTrue($this->view->file_exists($backupPath . '/' . self::TEST_ENCRYPTION_UTIL_USER1 . '.publicKey'));
//cleanup
$this->view->deleteAll($backupPath);
- $this->view->unlink($encPath . '/keyfiles/foo.key', 'key');
- $this->view->unlink($encPath . '/share-keys/foo.user1.shareKey', 'share key');
+ $this->view->unlink($encPath . '/keys/foo/fileKey');
+ $this->view->unlink($encPath . '/keys/foo/user1.shareKey');
}
@@ -473,8 +442,8 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
// rename keyfile for file1 so that the decryption for file1 fails
// Expected behaviour: decryptAll() returns false, file2 gets decrypted anyway
- $this->view->rename($this->userId . '/files_encryption/keyfiles/' . $file1 . '.key',
- $this->userId . '/files_encryption/keyfiles/' . $file1 . '.key.moved');
+ $this->view->rename($this->userId . '/files_encryption/keys/' . $file1 . '/fileKey',
+ $this->userId . '/files_encryption/keys/' . $file1 . '/fileKey.moved');
// decrypt all encrypted files
$result = $util->decryptAll();
@@ -492,12 +461,13 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
$this->assertEquals(0, $fileInfoUnencrypted2['encrypted']);
// keyfiles and share keys should still exist
- $this->assertTrue($this->view->is_dir($this->userId . '/files_encryption/keyfiles/'));
- $this->assertTrue($this->view->is_dir($this->userId . '/files_encryption/share-keys/'));
+ $this->assertTrue($this->view->is_dir($this->userId . '/files_encryption/keys/'));
+ $this->assertTrue($this->view->file_exists($this->userId . '/files_encryption/keys/' . $file1 . '/fileKey.moved'));
+ $this->assertTrue($this->view->file_exists($this->userId . '/files_encryption/keys/' . $file1 . '/' . $this->userId . '.shareKey'));
// rename the keyfile for file1 back
- $this->view->rename($this->userId . '/files_encryption/keyfiles/' . $file1 . '.key.moved',
- $this->userId . '/files_encryption/keyfiles/' . $file1 . '.key');
+ $this->view->rename($this->userId . '/files_encryption/keys/' . $file1 . '/fileKey.moved',
+ $this->userId . '/files_encryption/keys/' . $file1 . '/fileKey');
// try again to decrypt all encrypted files
$result = $util->decryptAll();
@@ -515,15 +485,30 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
$this->assertEquals(0, $fileInfoUnencrypted2['encrypted']);
// keyfiles and share keys should be deleted
- $this->assertFalse($this->view->is_dir($this->userId . '/files_encryption/keyfiles/'));
- $this->assertFalse($this->view->is_dir($this->userId . '/files_encryption/share-keys/'));
+ $this->assertFalse($this->view->is_dir($this->userId . '/files_encryption/keys/'));
//cleanup
+ $backupPath = $this->getBackupPath('decryptAll');
$this->view->unlink($this->userId . '/files/' . $file1);
$this->view->unlink($this->userId . '/files/' . $file2);
- $this->view->deleteAll($this->userId . '/files_encryption/keyfiles.backup');
- $this->view->deleteAll($this->userId . '/files_encryption/share-keys.backup');
+ $this->view->deleteAll($backupPath);
+
+ }
+
+ function getBackupPath($extension) {
+ $encPath = '/' . self::TEST_ENCRYPTION_UTIL_USER1 . '/files_encryption';
+ $encFolderContent = $this->view->getDirectoryContent($encPath);
+
+ $backupPath = '';
+ foreach ($encFolderContent as $c) {
+ $name = $c['name'];
+ if (substr($name, 0, strlen('backup.' . $extension)) === 'backup.' . $extension) {
+ $backupPath = $encPath . '/'. $c['name'];
+ break;
+ }
+ }
+ return $backupPath;
}
/**
diff --git a/apps/files_encryption/tests/webdav.php b/apps/files_encryption/tests/webdav.php
index 7cadeaf0ba9..a04a7621291 100755
--- a/apps/files_encryption/tests/webdav.php
+++ b/apps/files_encryption/tests/webdav.php
@@ -45,20 +45,6 @@ class Test_Encryption_Webdav extends \OCA\Files_Encryption\Tests\TestCase {
public static function setUpBeforeClass() {
parent::setUpBeforeClass();
- // reset backend
- \OC_User::clearBackends();
- \OC_User::useBackend('database');
-
- // Filesystem related hooks
- \OCA\Encryption\Helper::registerFilesystemHooks();
-
- // Filesystem related hooks
- \OCA\Encryption\Helper::registerUserHooks();
-
- // clear and register hooks
- \OC_FileProxy::clearProxies();
- \OC_FileProxy::register(new OCA\Encryption\Proxy());
-
// create test user
self::loginHelper(\Test_Encryption_Webdav::TEST_ENCRYPTION_WEBDAV_USER1, true);
@@ -106,14 +92,6 @@ class Test_Encryption_Webdav extends \OCA\Files_Encryption\Tests\TestCase {
// cleanup test user
\OC_User::deleteUser(\Test_Encryption_Webdav::TEST_ENCRYPTION_WEBDAV_USER1);
- \OC_Hook::clear();
- \OC_FileProxy::clearProxies();
-
- // Delete keys in /data/
- $view = new \OC\Files\View('/');
- $view->rmdir('public-keys');
- $view->rmdir('owncloud_private_key');
-
parent::tearDownAfterClass();
}
@@ -143,11 +121,11 @@ class Test_Encryption_Webdav extends \OCA\Files_Encryption\Tests\TestCase {
// check if key-file was created
$this->assertTrue($this->view->file_exists(
- '/' . $this->userId . '/files_encryption/keyfiles/' . $filename . '.key'));
+ '/' . $this->userId . '/files_encryption/keys/' . $filename . '/fileKey'));
// check if shareKey-file was created
$this->assertTrue($this->view->file_exists(
- '/' . $this->userId . '/files_encryption/share-keys/' . $filename . '.' . $this->userId . '.shareKey'));
+ '/' . $this->userId . '/files_encryption/keys/' . $filename . '/' . $this->userId . '.shareKey'));
// disable encryption proxy to prevent recursive calls
$proxyStatus = \OC_FileProxy::$enabled;
@@ -217,11 +195,11 @@ class Test_Encryption_Webdav extends \OCA\Files_Encryption\Tests\TestCase {
// check if key-file was removed
$this->assertFalse($this->view->file_exists(
- '/' . $this->userId . '/files_encryption/keyfiles' . $filename . '.key'));
+ '/' . $this->userId . '/files_encryption/keys/' . $filename . '/fileKey'));
// check if shareKey-file was removed
$this->assertFalse($this->view->file_exists(
- '/' . $this->userId . '/files_encryption/share-keys' . $filename . '.' . $this->userId . '.shareKey'));
+ '/' . $this->userId . '/files_encryption/keys/' . $filename . '/' . $this->userId . '.shareKey'));
}
/**
diff --git a/apps/files_external/l10n/gl.js b/apps/files_external/l10n/gl.js
index 0ff342e958d..1ce8dfcc783 100644
--- a/apps/files_external/l10n/gl.js
+++ b/apps/files_external/l10n/gl.js
@@ -18,7 +18,7 @@ OC.L10N.register(
"Secret Key" : "Clave secreta",
"Hostname" : "Nome de máquina",
"Port" : "Porto",
- "Region" : "Autonomía",
+ "Region" : "Rexión",
"Enable SSL" : "Activar SSL",
"Enable Path Style" : "Activar o estilo de ruta",
"App key" : "Clave da API",
diff --git a/apps/files_external/l10n/gl.json b/apps/files_external/l10n/gl.json
index 549de28f928..10a8e4d467b 100644
--- a/apps/files_external/l10n/gl.json
+++ b/apps/files_external/l10n/gl.json
@@ -16,7 +16,7 @@
"Secret Key" : "Clave secreta",
"Hostname" : "Nome de máquina",
"Port" : "Porto",
- "Region" : "Autonomía",
+ "Region" : "Rexión",
"Enable SSL" : "Activar SSL",
"Enable Path Style" : "Activar o estilo de ruta",
"App key" : "Clave da API",
diff --git a/apps/files_external/lib/smb_oc.php b/apps/files_external/lib/smb_oc.php
index e6f3aaf4052..a7c93d97fd1 100644
--- a/apps/files_external/lib/smb_oc.php
+++ b/apps/files_external/lib/smb_oc.php
@@ -13,12 +13,16 @@ require_once __DIR__ . '/../3rdparty/smb4php/smb.php';
class SMB_OC extends \OC\Files\Storage\SMB {
private $username_as_share;
+ /**
+ * @param array $params
+ * @throws \Exception
+ */
public function __construct($params) {
if (isset($params['host']) && \OC::$server->getSession()->exists('smb-credentials')) {
$host=$params['host'];
$this->username_as_share = ($params['username_as_share'] === 'true');
- $params_auth = \OC::$server->getSession()->get('smb-credentials');
+ $params_auth = json_decode(\OC::$server->getCrypto()->decrypt(\OC::$server->getSession()->get('smb-credentials')), true);
$user = \OC::$server->getSession()->get('loginname');
$password = $params_auth['password'];
@@ -44,14 +48,35 @@ class SMB_OC extends \OC\Files\Storage\SMB {
}
}
- public static function login( $params ) {
- \OC::$server->getSession()->set('smb-credentials', $params);
+
+ /**
+ * Intercepts the user credentials on login and stores them
+ * encrypted inside the session if SMB_OC storage is enabled.
+ * @param array $params
+ */
+ public static function login($params) {
+ $mountpoints = \OC_Mount_Config::getAbsoluteMountPoints($params['uid']);
+ $mountpointClasses = array();
+ foreach($mountpoints as $mountpoint) {
+ $mountpointClasses[$mountpoint['class']] = true;
+ }
+ if(isset($mountpointClasses['\OC\Files\Storage\SMB_OC'])) {
+ \OC::$server->getSession()->set('smb-credentials', \OC::$server->getCrypto()->encrypt(json_encode($params)));
+ }
}
+ /**
+ * @param string $path
+ * @return boolean
+ */
public function isSharable($path) {
return false;
}
+ /**
+ * @param bool $isPersonal
+ * @return bool
+ */
public function test($isPersonal = true) {
if ($isPersonal) {
if ($this->stat('')) {
diff --git a/apps/files_external/tests/mountconfig.php b/apps/files_external/tests/mountconfig.php
index ab65e648643..342f020d3a9 100644
--- a/apps/files_external/tests/mountconfig.php
+++ b/apps/files_external/tests/mountconfig.php
@@ -296,10 +296,6 @@ class Test_Mount_Config extends \Test\TestCase {
* @dataProvider applicableConfigProvider
*/
public function testReadWriteGlobalConfig($mountType, $applicable, $expectApplicableArray) {
- // TODO travis: samba share test doesn't work on travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('samba share test doesn\'t work on travis');
- }
$mountType = $mountType;
$applicable = $applicable;
@@ -340,10 +336,6 @@ class Test_Mount_Config extends \Test\TestCase {
* Test reading and writing config
*/
public function testReadWritePersonalConfig() {
- // TODO travis: samba share test doesn't work on travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('samba share test doesn\'t work on travis');
- }
$mountType = OC_Mount_Config::MOUNT_TYPE_USER;
$applicable = self::TEST_USER1;
@@ -479,10 +471,6 @@ class Test_Mount_Config extends \Test\TestCase {
* Test password obfuscation
*/
public function testPasswordObfuscation() {
- // TODO travis: samba share test doesn't work on travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('samba share test doesn\'t work on travis');
- }
$mountType = OC_Mount_Config::MOUNT_TYPE_USER;
$applicable = self::TEST_USER1;
@@ -524,10 +512,6 @@ class Test_Mount_Config extends \Test\TestCase {
* Test read legacy passwords
*/
public function testReadLegacyPassword() {
- // TODO travis: samba share test doesn't work on travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('samba share test doesn\'t work on travis');
- }
$mountType = OC_Mount_Config::MOUNT_TYPE_USER;
$applicable = self::TEST_USER1;
@@ -640,10 +624,6 @@ class Test_Mount_Config extends \Test\TestCase {
* @param bool $expectVisible whether to expect the mount point to be visible for $testUser
*/
public function testMount($isPersonal, $mountType, $applicable, $testUser, $expectVisible) {
- // TODO travis: samba share test doesn't work on travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('samba share test doesn\'t work on travis');
- }
$mountConfig = array(
'host' => 'someost',
@@ -684,10 +664,6 @@ class Test_Mount_Config extends \Test\TestCase {
* The config will be merged by getSystemMountPoints().
*/
public function testConfigMerging() {
- // TODO travis: samba share test doesn't work on travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('samba share test doesn\'t work on travis');
- }
$mountType = OC_Mount_Config::MOUNT_TYPE_USER;
$isPersonal = false;
@@ -759,10 +735,6 @@ class Test_Mount_Config extends \Test\TestCase {
* have the same path, the config must NOT be merged.
*/
public function testRereadMountpointWithSamePath() {
- // TODO travis: samba share test doesn't work on travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('samba share test doesn\'t work on travis');
- }
$mountType = OC_Mount_Config::MOUNT_TYPE_USER;
$isPersonal = false;
@@ -895,10 +867,6 @@ class Test_Mount_Config extends \Test\TestCase {
* @param int $expected index of expected visible mount
*/
public function testPriority($mounts, $expected) {
- // TODO travis: samba share test doesn't work on travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('samba share test doesn\'t work on travis');
- }
$mountConfig = array(
'host' => 'somehost',
@@ -933,10 +901,6 @@ class Test_Mount_Config extends \Test\TestCase {
* Test for persistence of priority when changing mount options
*/
public function testPriorityPersistence() {
- // TODO travis: samba share test doesn't work on travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('samba share test doesn\'t work on travis');
- }
$class = '\OC\Files\Storage\SMB';
$priority = 123;
@@ -986,10 +950,6 @@ class Test_Mount_Config extends \Test\TestCase {
* Test for correct personal configuration loading in file sharing scenarios
*/
public function testMultiUserPersonalConfigLoading() {
- // TODO travis: multi user config test doesn't work on travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('multi user config test doesn\'t work on travis');
- }
$mountConfig = array(
'host' => 'somehost',
'user' => 'someuser',
diff --git a/apps/files_sharing/l10n/ca.js b/apps/files_sharing/l10n/ca.js
index 51153252cba..4a22d71fb59 100644
--- a/apps/files_sharing/l10n/ca.js
+++ b/apps/files_sharing/l10n/ca.js
@@ -4,10 +4,10 @@ OC.L10N.register(
"Server to server sharing is not enabled on this server" : "La compartició entre servidors no està activada en aquest servidor",
"Invalid or untrusted SSL certificate" : "El certificat SSL és invàlid o no és fiable",
"Couldn't add remote share" : "No s'ha pogut afegir una compartició remota",
- "Shared with you" : "Compartit amb vós",
- "Shared with others" : "Compartit amb altres",
+ "Shared with you" : "Us han compartit",
+ "Shared with others" : "Heu compartit",
"Shared by link" : "Compartit amb enllaç",
- "No files have been shared with you yet." : "Encara no hi ha fitxers compartits amb vós.",
+ "No files have been shared with you yet." : "Encara no us han compartit fitxters.",
"You haven't shared any files yet." : "Encara no heu compartit cap fitxer.",
"You haven't shared any files by link yet." : "Encara no heu compartit cap fitxer amb enllaç.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Voleu afegir la compartició remota {nom} des de {owner}@{remote}?",
diff --git a/apps/files_sharing/l10n/ca.json b/apps/files_sharing/l10n/ca.json
index 88d2fa70811..83668750494 100644
--- a/apps/files_sharing/l10n/ca.json
+++ b/apps/files_sharing/l10n/ca.json
@@ -2,10 +2,10 @@
"Server to server sharing is not enabled on this server" : "La compartició entre servidors no està activada en aquest servidor",
"Invalid or untrusted SSL certificate" : "El certificat SSL és invàlid o no és fiable",
"Couldn't add remote share" : "No s'ha pogut afegir una compartició remota",
- "Shared with you" : "Compartit amb vós",
- "Shared with others" : "Compartit amb altres",
+ "Shared with you" : "Us han compartit",
+ "Shared with others" : "Heu compartit",
"Shared by link" : "Compartit amb enllaç",
- "No files have been shared with you yet." : "Encara no hi ha fitxers compartits amb vós.",
+ "No files have been shared with you yet." : "Encara no us han compartit fitxters.",
"You haven't shared any files yet." : "Encara no heu compartit cap fitxer.",
"You haven't shared any files by link yet." : "Encara no heu compartit cap fitxer amb enllaç.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Voleu afegir la compartició remota {nom} des de {owner}@{remote}?",
diff --git a/apps/files_sharing/l10n/gl.js b/apps/files_sharing/l10n/gl.js
index 45d20914ee8..0a2396b1ceb 100644
--- a/apps/files_sharing/l10n/gl.js
+++ b/apps/files_sharing/l10n/gl.js
@@ -2,6 +2,7 @@ OC.L10N.register(
"files_sharing",
{
"Server to server sharing is not enabled on this server" : "Neste servidor non está activada a compartición de servidor a servidor",
+ "The mountpoint name contains invalid characters." : "O nome do punto de montaxe contén caracteres inválidos.",
"Invalid or untrusted SSL certificate" : "Certificado SSL incorrecto ou non fiábel",
"Couldn't add remote share" : "Non foi posíbel engadir a compartición remota",
"Shared with you" : "Compartido con vostede",
@@ -32,6 +33,9 @@ OC.L10N.register(
"Add to your ownCloud" : "Engadir ao seu ownCloud",
"Download" : "Descargar",
"Download %s" : "Descargar %s",
- "Direct link" : "Ligazón directa"
+ "Direct link" : "Ligazón directa",
+ "Server-to-Server Sharing" : "Compartición Servidor-a-Servidor",
+ "Allow users on this server to send shares to other servers" : "Permitir aos ususarios de este servidor enviar comparticións a outros servidores",
+ "Allow users on this server to receive shares from other servers" : "Permitir aos usuarios de este servidor recibir comparticións de outros servidores"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/gl.json b/apps/files_sharing/l10n/gl.json
index 5ddd5b02155..c26585047ee 100644
--- a/apps/files_sharing/l10n/gl.json
+++ b/apps/files_sharing/l10n/gl.json
@@ -1,5 +1,6 @@
{ "translations": {
"Server to server sharing is not enabled on this server" : "Neste servidor non está activada a compartición de servidor a servidor",
+ "The mountpoint name contains invalid characters." : "O nome do punto de montaxe contén caracteres inválidos.",
"Invalid or untrusted SSL certificate" : "Certificado SSL incorrecto ou non fiábel",
"Couldn't add remote share" : "Non foi posíbel engadir a compartición remota",
"Shared with you" : "Compartido con vostede",
@@ -30,6 +31,9 @@
"Add to your ownCloud" : "Engadir ao seu ownCloud",
"Download" : "Descargar",
"Download %s" : "Descargar %s",
- "Direct link" : "Ligazón directa"
+ "Direct link" : "Ligazón directa",
+ "Server-to-Server Sharing" : "Compartición Servidor-a-Servidor",
+ "Allow users on this server to send shares to other servers" : "Permitir aos ususarios de este servidor enviar comparticións a outros servidores",
+ "Allow users on this server to receive shares from other servers" : "Permitir aos usuarios de este servidor recibir comparticións de outros servidores"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_trashbin/appinfo/app.php b/apps/files_trashbin/appinfo/app.php
index 7df52da6314..0e2cbaa529f 100644
--- a/apps/files_trashbin/appinfo/app.php
+++ b/apps/files_trashbin/appinfo/app.php
@@ -3,8 +3,6 @@ $l = \OC::$server->getL10N('files_trashbin');
OCP\Util::addTranslations('files_trashbin');
-OC::$CLASSPATH['OCA\Files_Trashbin\Exceptions\CopyRecursiveException'] = 'files_trashbin/lib/exceptions.php';
-
// register hooks
\OCA\Files_Trashbin\Trashbin::registerHooks();
diff --git a/apps/files_trashbin/l10n/af_ZA.js b/apps/files_trashbin/l10n/af_ZA.js
new file mode 100644
index 00000000000..bde70775250
--- /dev/null
+++ b/apps/files_trashbin/l10n/af_ZA.js
@@ -0,0 +1,6 @@
+OC.L10N.register(
+ "files_trashbin",
+ {
+ "Error" : "Fout"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_trashbin/l10n/af_ZA.json b/apps/files_trashbin/l10n/af_ZA.json
new file mode 100644
index 00000000000..0ed511058ba
--- /dev/null
+++ b/apps/files_trashbin/l10n/af_ZA.json
@@ -0,0 +1,4 @@
+{ "translations": {
+ "Error" : "Fout"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files_trashbin/lib/exceptions.php b/apps/files_trashbin/lib/exceptions/copyrecursiveexception.php
index 23e50293b77..23e50293b77 100644
--- a/apps/files_trashbin/lib/exceptions.php
+++ b/apps/files_trashbin/lib/exceptions/copyrecursiveexception.php
diff --git a/apps/files_trashbin/lib/trashbin.php b/apps/files_trashbin/lib/trashbin.php
index 52d24143902..661fc271dfc 100644
--- a/apps/files_trashbin/lib/trashbin.php
+++ b/apps/files_trashbin/lib/trashbin.php
@@ -92,11 +92,8 @@ class Trashbin {
if (!$view->is_dir('files_trashbin/versions')) {
$view->mkdir('files_trashbin/versions');
}
- if (!$view->is_dir('files_trashbin/keyfiles')) {
- $view->mkdir('files_trashbin/keyfiles');
- }
- if (!$view->is_dir('files_trashbin/share-keys')) {
- $view->mkdir('files_trashbin/share-keys');
+ if (!$view->is_dir('files_trashbin/keys')) {
+ $view->mkdir('files_trashbin/keys');
}
}
@@ -277,78 +274,23 @@ class Trashbin {
return 0;
}
- $util = new \OCA\Encryption\Util(new \OC\Files\View('/'), $user);
+ $util = new \OCA\Encryption\Util($rootView, $user);
- // disable proxy to prevent recursive calls
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
- if ($util->isSystemWideMountPoint($ownerPath)) {
- $baseDir = '/files_encryption/';
- } else {
- $baseDir = $owner . '/files_encryption/';
- }
-
- $keyfile = \OC\Files\Filesystem::normalizePath($baseDir . '/keyfiles/' . $ownerPath);
-
- if ($rootView->is_dir($keyfile) || $rootView->file_exists($keyfile . '.key')) {
- // move keyfiles
- if ($rootView->is_dir($keyfile)) {
- $size += self::calculateSize(new \OC\Files\View($keyfile));
- if ($owner !== $user) {
- self::copy_recursive($keyfile, $owner . '/files_trashbin/keyfiles/' . basename($ownerPath) . '.d' . $timestamp, $rootView);
- }
- $rootView->rename($keyfile, $user . '/files_trashbin/keyfiles/' . $filename . '.d' . $timestamp);
- } else {
- $size += $rootView->filesize($keyfile . '.key');
- if ($owner !== $user) {
- $rootView->copy($keyfile . '.key', $owner . '/files_trashbin/keyfiles/' . basename($ownerPath) . '.key.d' . $timestamp);
- }
- $rootView->rename($keyfile . '.key', $user . '/files_trashbin/keyfiles/' . $filename . '.key.d' . $timestamp);
- }
+ $baseDir = '/files_encryption/';
+ if (!$util->isSystemWideMountPoint($ownerPath)) {
+ $baseDir = $owner . $baseDir;
}
- // retain share keys
- $sharekeys = \OC\Files\Filesystem::normalizePath($baseDir . '/share-keys/' . $ownerPath);
+ $keyfiles = \OC\Files\Filesystem::normalizePath($baseDir . '/keys/' . $ownerPath);
- if ($rootView->is_dir($sharekeys)) {
- $size += self::calculateSize(new \OC\Files\View($sharekeys));
+ if ($rootView->is_dir($keyfiles)) {
+ $size += self::calculateSize(new \OC\Files\View($keyfiles));
if ($owner !== $user) {
- self::copy_recursive($sharekeys, $owner . '/files_trashbin/share-keys/' . basename($ownerPath) . '.d' . $timestamp, $rootView);
- }
- $rootView->rename($sharekeys, $user . '/files_trashbin/share-keys/' . $filename . '.d' . $timestamp);
- } else {
- // handle share-keys
- $matches = \OCA\Encryption\Helper::findShareKeys($ownerPath, $sharekeys, $rootView);
- foreach ($matches as $src) {
- // get source file parts
- $pathinfo = pathinfo($src);
-
- // we only want to keep the users key so we can access the private key
- $userShareKey = $filename . '.' . $user . '.shareKey';
-
- // if we found the share-key for the owner, we need to move it to files_trashbin
- if ($pathinfo['basename'] == $userShareKey) {
-
- // calculate size
- $size += $rootView->filesize($sharekeys . '.' . $user . '.shareKey');
-
- // move file
- $rootView->rename($sharekeys . '.' . $user . '.shareKey', $user . '/files_trashbin/share-keys/' . $userShareKey . '.d' . $timestamp);
- } elseif ($owner !== $user) {
- $ownerShareKey = basename($ownerPath) . '.' . $owner . '.shareKey';
- if ($pathinfo['basename'] == $ownerShareKey) {
- $rootView->rename($sharekeys . '.' . $owner . '.shareKey', $owner . '/files_trashbin/share-keys/' . $ownerShareKey . '.d' . $timestamp);
- }
- } else {
- // don't keep other share-keys
- unlink($src);
- }
+ self::copy_recursive($keyfiles, $owner . '/files_trashbin/keys/' . basename($ownerPath) . '.d' . $timestamp, $rootView);
}
+ $rootView->rename($keyfiles, $user . '/files_trashbin/keys/' . $filename . '.d' . $timestamp);
}
- // enable proxy
- \OC_FileProxy::$enabled = $proxyStatus;
}
return $size;
}
@@ -492,7 +434,7 @@ class Trashbin {
* @return bool
*/
private static function restoreEncryptionKeys(\OC\Files\View $view, $file, $filename, $uniqueFilename, $location, $timestamp) {
- // Take care of encryption keys TODO! Get '.key' in file between file name and delete date (also for permanent delete!)
+
if (\OCP\App::isEnabled('files_encryption')) {
$user = \OCP\User::getUser();
$rootView = new \OC\Files\View('/');
@@ -506,84 +448,31 @@ class Trashbin {
return false;
}
- $util = new \OCA\Encryption\Util(new \OC\Files\View('/'), $user);
+ $util = new \OCA\Encryption\Util($rootView, $user);
- if ($util->isSystemWideMountPoint($ownerPath)) {
- $baseDir = '/files_encryption/';
- } else {
- $baseDir = $owner . '/files_encryption/';
+ $baseDir = '/files_encryption/';
+ if (!$util->isSystemWideMountPoint($ownerPath)) {
+ $baseDir = $owner . $baseDir;
}
- $path_parts = pathinfo($file);
- $source_location = $path_parts['dirname'];
+ $source_location = dirname($file);
- if ($view->is_dir('/files_trashbin/keyfiles/' . $file)) {
+ if ($view->is_dir('/files_trashbin/keys/' . $file)) {
if ($source_location != '.') {
- $keyfile = \OC\Files\Filesystem::normalizePath($user . '/files_trashbin/keyfiles/' . $source_location . '/' . $filename);
- $sharekey = \OC\Files\Filesystem::normalizePath($user . '/files_trashbin/share-keys/' . $source_location . '/' . $filename);
+ $keyfile = \OC\Files\Filesystem::normalizePath($user . '/files_trashbin/keys/' . $source_location . '/' . $filename);
} else {
- $keyfile = \OC\Files\Filesystem::normalizePath($user . '/files_trashbin/keyfiles/' . $filename);
- $sharekey = \OC\Files\Filesystem::normalizePath($user . '/files_trashbin/share-keys/' . $filename);
+ $keyfile = \OC\Files\Filesystem::normalizePath($user . '/files_trashbin/keys/' . $filename);
}
- } else {
- $keyfile = \OC\Files\Filesystem::normalizePath($user . '/files_trashbin/keyfiles/' . $source_location . '/' . $filename . '.key');
}
if ($timestamp) {
$keyfile .= '.d' . $timestamp;
}
- // disable proxy to prevent recursive calls
- $proxyStatus = \OC_FileProxy::$enabled;
- \OC_FileProxy::$enabled = false;
-
- if ($rootView->file_exists($keyfile)) {
- // handle directory
- if ($rootView->is_dir($keyfile)) {
-
- // handle keyfiles
- $rootView->rename($keyfile, $baseDir . '/keyfiles/' . $ownerPath);
-
- // handle share-keys
- if ($timestamp) {
- $sharekey .= '.d' . $timestamp;
- }
- $rootView->rename($sharekey, $baseDir . '/share-keys/' . $ownerPath);
- } else {
- // handle keyfiles
- $rootView->rename($keyfile, $baseDir . '/keyfiles/' . $ownerPath . '.key');
-
- // handle share-keys
- $ownerShareKey = \OC\Files\Filesystem::normalizePath($user . '/files_trashbin/share-keys/' . $source_location . '/' . $filename . '.' . $user . '.shareKey');
- if ($timestamp) {
- $ownerShareKey .= '.d' . $timestamp;
- }
-
- // move only owners key
- $rootView->rename($ownerShareKey, $baseDir . '/share-keys/' . $ownerPath . '.' . $user . '.shareKey');
-
- // try to re-share if file is shared
- $filesystemView = new \OC\Files\View('/');
- $session = new \OCA\Encryption\Session($filesystemView);
- $util = new \OCA\Encryption\Util($filesystemView, $user);
-
- // fix the file size
- $absolutePath = \OC\Files\Filesystem::normalizePath('/' . $owner . '/files/' . $ownerPath);
- $util->fixFileSize($absolutePath);
-
- // get current sharing state
- $sharingEnabled = \OCP\Share::isEnabled();
-
- // get users sharing this file
- $usersSharing = $util->getSharingUsersArray($sharingEnabled, $target);
-
- // Attempt to set shareKey
- $util->setSharedFileKeyfiles($session, $usersSharing, $target);
- }
+ if ($rootView->is_dir($keyfile)) {
+ $rootView->rename($keyfile, $baseDir . '/keys/' . $ownerPath);
}
- // enable proxy
- \OC_FileProxy::$enabled = $proxyStatus;
}
}
@@ -678,27 +567,15 @@ class Trashbin {
if (\OCP\App::isEnabled('files_encryption')) {
$user = \OCP\User::getUser();
- if ($view->is_dir('/files_trashbin/files/' . $file)) {
- $keyfile = \OC\Files\Filesystem::normalizePath('files_trashbin/keyfiles/' . $filename);
- $sharekeys = \OC\Files\Filesystem::normalizePath('files_trashbin/share-keys/' . $filename);
- } else {
- $keyfile = \OC\Files\Filesystem::normalizePath('files_trashbin/keyfiles/' . $filename . '.key');
- $sharekeys = \OC\Files\Filesystem::normalizePath('files_trashbin/share-keys/' . $filename . '.' . $user . '.shareKey');
- }
+ $keyfiles = \OC\Files\Filesystem::normalizePath('files_trashbin/keys/' . $filename);
+
if ($timestamp) {
- $keyfile .= '.d' . $timestamp;
- $sharekeys .= '.d' . $timestamp;
+ $keyfiles .= '.d' . $timestamp;
}
- if ($view->file_exists($keyfile)) {
- if ($view->is_dir($keyfile)) {
- $size += self::calculateSize(new \OC\Files\View('/' . $user . '/' . $keyfile));
- $size += self::calculateSize(new \OC\Files\View('/' . $user . '/' . $sharekeys));
- } else {
- $size += $view->filesize($keyfile);
- $size += $view->filesize($sharekeys);
- }
- $view->unlink($keyfile);
- $view->unlink($sharekeys);
+ if ($view->is_dir($keyfiles)) {
+ $size += self::calculateSize(new \OC\Files\View('/' . $user . '/' . $keyfiles));
+ $view->deleteAll($keyfiles);
+
}
}
return $size;
diff --git a/apps/files_versions/appinfo/app.php b/apps/files_versions/appinfo/app.php
index 78de1528f32..ae29bceb37c 100644
--- a/apps/files_versions/appinfo/app.php
+++ b/apps/files_versions/appinfo/app.php
@@ -1,10 +1,5 @@
<?php
-//require_once 'files_versions/versions.php';
-OC::$CLASSPATH['OCA\Files_Versions\Storage'] = 'files_versions/lib/versions.php';
-OC::$CLASSPATH['OCA\Files_Versions\Hooks'] = 'files_versions/lib/hooks.php';
-OC::$CLASSPATH['OCA\Files_Versions\Capabilities'] = 'files_versions/lib/capabilities.php';
-
OCP\Util::addTranslations('files_versions');
OCP\Util::addscript('files_versions', 'versions');
OCP\Util::addStyle('files_versions', 'versions');
diff --git a/apps/files_versions/appinfo/routes.php b/apps/files_versions/appinfo/routes.php
index 057834213e4..83c7746d1e7 100644
--- a/apps/files_versions/appinfo/routes.php
+++ b/apps/files_versions/appinfo/routes.php
@@ -11,6 +11,8 @@ function() {
require_once __DIR__ . '/../ajax/preview.php';
});
+$this->create('files_versions_download', 'download.php')
+ ->actionInclude('files_versions/download.php');
$this->create('files_versions_ajax_getVersions', 'ajax/getVersions.php')
->actionInclude('files_versions/ajax/getVersions.php');
$this->create('files_versions_ajax_rollbackVersion', 'ajax/rollbackVersion.php')
diff --git a/apps/files_versions/download.php b/apps/files_versions/download.php
index 2fe56d2e638..e5139450f5e 100644
--- a/apps/files_versions/download.php
+++ b/apps/files_versions/download.php
@@ -22,7 +22,7 @@
*/
OCP\JSON::checkAppEnabled('files_versions');
-//OCP\JSON::callCheck();
+OCP\JSON::checkLoggedIn();
$file = $_GET['file'];
$revision=(int)$_GET['revision'];
diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/storage.php
index 82e0ecc3e2f..82e0ecc3e2f 100644
--- a/apps/files_versions/lib/versions.php
+++ b/apps/files_versions/lib/storage.php
diff --git a/apps/files_versions/tests/versions.php b/apps/files_versions/tests/versions.php
index 6205a6881f0..cf0ffb320e2 100644
--- a/apps/files_versions/tests/versions.php
+++ b/apps/files_versions/tests/versions.php
@@ -21,7 +21,6 @@
*/
require_once __DIR__ . '/../appinfo/app.php';
-require_once __DIR__ . '/../lib/versions.php';
/**
* Class Test_Files_versions
diff --git a/apps/user_ldap/appinfo/register_command.php b/apps/user_ldap/appinfo/register_command.php
index f65b9773388..1a0227db95e 100644
--- a/apps/user_ldap/appinfo/register_command.php
+++ b/apps/user_ldap/appinfo/register_command.php
@@ -11,3 +11,4 @@ $application->add(new OCA\user_ldap\Command\SetConfig());
$application->add(new OCA\user_ldap\Command\TestConfig());
$application->add(new OCA\user_ldap\Command\CreateEmptyConfig());
$application->add(new OCA\user_ldap\Command\DeleteConfig());
+$application->add(new OCA\user_ldap\Command\Search());
diff --git a/apps/user_ldap/command/search.php b/apps/user_ldap/command/search.php
new file mode 100644
index 00000000000..e20255510d8
--- /dev/null
+++ b/apps/user_ldap/command/search.php
@@ -0,0 +1,100 @@
+<?php
+/**
+ * Copyright (c) 2014 Arthur Schiwon <blizzz@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\user_ldap\Command;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+use OCA\user_ldap\User_Proxy;
+use OCA\user_ldap\Group_Proxy;
+use OCA\user_ldap\lib\Helper;
+use OCA\user_ldap\lib\LDAP;
+
+class Search extends Command {
+ protected function configure() {
+ $this
+ ->setName('ldap:search')
+ ->setDescription('executes a user or group search')
+ ->addArgument(
+ 'search',
+ InputArgument::REQUIRED,
+ 'the search string (can be empty)'
+ )
+ ->addOption(
+ 'group',
+ null,
+ InputOption::VALUE_NONE,
+ 'searches groups instead of users'
+ )
+ ->addOption(
+ 'offset',
+ null,
+ InputOption::VALUE_REQUIRED,
+ 'The offset of the result set. Needs to be a multiple of limit. defaults to 0.',
+ 0
+ )
+ ->addOption(
+ 'limit',
+ null,
+ InputOption::VALUE_REQUIRED,
+ 'limit the results. 0 means no limit, defaults to 15',
+ 15
+ )
+ ;
+ }
+
+ /**
+ * Tests whether the offset and limit options are valid
+ * @param int $offset
+ * @param int $limit
+ * @throws \InvalidArgumentException
+ */
+ protected function validateOffsetAndLimit($offset, $limit) {
+ if($limit < 0) {
+ throw new \InvalidArgumentException('limit must be 0 or greater');
+ }
+ if($offset < 0) {
+ throw new \InvalidArgumentException('offset must be 0 or greater');
+ }
+ if($limit === 0 && $offset !== 0) {
+ throw new \InvalidArgumentException('offset must be 0 if limit is also set to 0');
+ }
+ if($offset > 0 && ($offset % $limit !== 0)) {
+ throw new \InvalidArgumentException('offset must be a multiple of limit');
+ }
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output) {
+ $configPrefixes = Helper::getServerConfigurationPrefixes(true);
+ $ldapWrapper = new LDAP();
+
+ $offset = intval($input->getOption('offset'));
+ $limit = intval($input->getOption('limit'));
+ $this->validateOffsetAndLimit($offset, $limit);
+
+ if($input->getOption('group')) {
+ $proxy = new Group_Proxy($configPrefixes, $ldapWrapper);
+ $getMethod = 'getGroups';
+ $printID = false;
+ } else {
+ $proxy = new User_Proxy($configPrefixes, $ldapWrapper);
+ $getMethod = 'getDisplayNames';
+ $printID = true;
+ }
+
+ $result = $proxy->$getMethod($input->getArgument('search'), $limit, $offset);
+ foreach($result as $id => $name) {
+ $line = $name . ($printID ? ' ('.$id.')' : '');
+ $output->writeln($line);
+ }
+ }
+}
diff --git a/apps/user_ldap/l10n/af_ZA.js b/apps/user_ldap/l10n/af_ZA.js
index fc00b542daa..610359a094c 100644
--- a/apps/user_ldap/l10n/af_ZA.js
+++ b/apps/user_ldap/l10n/af_ZA.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"user_ldap",
{
+ "Error" : "Fout",
"_%s group found_::_%s groups found_" : ["",""],
"_%s user found_::_%s users found_" : ["",""],
"Help" : "Hulp",
diff --git a/apps/user_ldap/l10n/af_ZA.json b/apps/user_ldap/l10n/af_ZA.json
index ec83ea0849a..05463be095e 100644
--- a/apps/user_ldap/l10n/af_ZA.json
+++ b/apps/user_ldap/l10n/af_ZA.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "Error" : "Fout",
"_%s group found_::_%s groups found_" : ["",""],
"_%s user found_::_%s users found_" : ["",""],
"Help" : "Hulp",
diff --git a/apps/user_ldap/l10n/en_GB.js b/apps/user_ldap/l10n/en_GB.js
index d87ce836807..9476b44dde0 100644
--- a/apps/user_ldap/l10n/en_GB.js
+++ b/apps/user_ldap/l10n/en_GB.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Confirm Deletion",
"_%s group found_::_%s groups found_" : ["%s group found","%s groups found"],
"_%s user found_::_%s users found_" : ["%s user found","%s users found"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings.",
"Could not find the desired feature" : "Could not find the desired feature",
"Invalid Host" : "Invalid Host",
"Server" : "Server",
diff --git a/apps/user_ldap/l10n/en_GB.json b/apps/user_ldap/l10n/en_GB.json
index 8fd6ed30d4f..fd6861a5184 100644
--- a/apps/user_ldap/l10n/en_GB.json
+++ b/apps/user_ldap/l10n/en_GB.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Confirm Deletion",
"_%s group found_::_%s groups found_" : ["%s group found","%s groups found"],
"_%s user found_::_%s users found_" : ["%s user found","%s users found"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings.",
"Could not find the desired feature" : "Could not find the desired feature",
"Invalid Host" : "Invalid Host",
"Server" : "Server",
diff --git a/apps/user_ldap/l10n/es.js b/apps/user_ldap/l10n/es.js
index 172d32c9092..3ad81e2aa76 100644
--- a/apps/user_ldap/l10n/es.js
+++ b/apps/user_ldap/l10n/es.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Confirmar eliminación",
"_%s group found_::_%s groups found_" : ["Grupo %s encontrado","Grupos %s encontrados"],
"_%s user found_::_%s users found_" : ["Usuario %s encontrado","Usuarios %s encontrados"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "No se pudo detectar el atributo de nombre de usuario pantalla. Por favor especifique lo mismo en ajustes avanzados ldap.",
"Could not find the desired feature" : "No se puede encontrar la función deseada.",
"Invalid Host" : "Host inválido",
"Server" : "Servidor",
diff --git a/apps/user_ldap/l10n/es.json b/apps/user_ldap/l10n/es.json
index b0308c4cbaf..f76ab313190 100644
--- a/apps/user_ldap/l10n/es.json
+++ b/apps/user_ldap/l10n/es.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Confirmar eliminación",
"_%s group found_::_%s groups found_" : ["Grupo %s encontrado","Grupos %s encontrados"],
"_%s user found_::_%s users found_" : ["Usuario %s encontrado","Usuarios %s encontrados"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "No se pudo detectar el atributo de nombre de usuario pantalla. Por favor especifique lo mismo en ajustes avanzados ldap.",
"Could not find the desired feature" : "No se puede encontrar la función deseada.",
"Invalid Host" : "Host inválido",
"Server" : "Servidor",
diff --git a/apps/user_ldap/l10n/fr.js b/apps/user_ldap/l10n/fr.js
index d363530f5c5..3aeaaf0bb5c 100644
--- a/apps/user_ldap/l10n/fr.js
+++ b/apps/user_ldap/l10n/fr.js
@@ -97,13 +97,13 @@ OC.L10N.register(
"in seconds. A change empties the cache." : "en secondes. Tout changement vide le cache.",
"Directory Settings" : "Paramètres du répertoire",
"User Display Name Field" : "Champ \"nom d'affichage\" de l'utilisateur",
- "The LDAP attribute to use to generate the user's display name." : "L'attribut LDAP utilisé pour générer le nom d'utilisateur affiché.",
+ "The LDAP attribute to use to generate the user's display name." : "L'attribut LDAP utilisé pour générer le nom d'affichage de l'utilisateur.",
"Base User Tree" : "DN racine de l'arbre utilisateurs",
"One User Base DN per line" : "Un DN racine utilisateur par ligne",
"User Search Attributes" : "Recherche des attributs utilisateur",
"Optional; one attribute per line" : "Optionnel, un attribut par ligne",
"Group Display Name Field" : "Champ \"nom d'affichage\" du groupe",
- "The LDAP attribute to use to generate the groups's display name." : "L'attribut LDAP utilisé pour générer le nom de groupe affiché.",
+ "The LDAP attribute to use to generate the groups's display name." : "L'attribut LDAP utilisé pour générer le nom d'affichage du groupe.",
"Base Group Tree" : "DN racine de l'arbre groupes",
"One Group Base DN per line" : "Un DN racine groupe par ligne",
"Group Search Attributes" : "Recherche des attributs du groupe",
@@ -120,7 +120,7 @@ OC.L10N.register(
"User Home Folder Naming Rule" : "Convention de nommage du répertoire utilisateur",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Laisser vide ",
"Internal Username" : "Nom d'utilisateur interne",
- "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Par défaut le nom d'utilisateur interne sera créé à partir de l'attribut UUID. Ceci permet d'assurer que le nom d'utilisateur est unique et que les caractères ne nécessitent pas de conversion. Le nom d'utilisateur interne doit contenir uniquement les caractères suivants : [ a-zA-Z0-9_.@- ]. Les autres caractères sont remplacés par leur correspondance ASCII ou simplement omis. En cas de collision, un nombre est incrémenté/décrémenté. Le nom d'utilisateur interne est utilisé pour identifier l'utilisateur au sein du système. C'est aussi le nom par défaut du répertoire utilisateur dans ownCloud. C'est aussi le port d'URLs distants, par exemple pour tous les services *DAV. Le comportement par défaut peut être modifié à l'aide de ce paramètre. Pour obtenir un comportement similaire aux versions précédentes à ownCloud 5, saisir le nom d'utilisateur à afficher dans le champ suivant. Laissez à blanc pour le comportement par défaut. Les modifications prendront effet seulement pour les nouveaux (ajoutés) utilisateurs LDAP.",
+ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Par défaut le nom d'utilisateur interne sera créé à partir de l'attribut UUID. Ceci permet d'assurer que le nom d'utilisateur est unique et que les caractères ne nécessitent pas de conversion. Le nom d'utilisateur interne doit contenir uniquement les caractères suivants : [ a-zA-Z0-9_.@- ]. Les autres caractères sont remplacés par leur correspondance ASCII ou simplement omis. En cas de collision, un nombre est ajouté/incrémenté. Le nom d'utilisateur interne est utilisé pour identifier l'utilisateur au sein du système. C'est aussi le nom par défaut du répertoire utilisateur dans ownCloud. Il fait aussi partie de certains URL de services, par exemple pour tous les services *DAV. Le comportement par défaut peut être modifié à l'aide de ce paramètre. Pour obtenir un comportement similaire aux versions précédentes à ownCloud 5, saisir le nom d'utilisateur à afficher dans le champ suivant. Laissez à blanc pour le comportement par défaut. Les modifications prendront effet seulement pour les nouveaux (ajoutés) utilisateurs LDAP.",
"Internal Username Attribute:" : "Nom d'utilisateur interne :",
"Override UUID detection" : "Surcharger la détection d'UUID",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Par défaut, l'attribut UUID est automatiquement détecté. Cet attribut est utilisé pour identifier les utilisateurs et groupes de façon fiable. Un nom d'utilisateur interne basé sur l'UUID sera automatiquement créé, sauf s'il est spécifié autrement ci-dessus. Vous pouvez modifier ce comportement et définir l'attribut de votre choix. Vous devez alors vous assurer que l'attribut de votre choix peut être récupéré pour les utilisateurs ainsi que pour les groupes et qu'il soit unique. Laisser à blanc pour le comportement par défaut. Les modifications seront effectives uniquement pour les nouveaux (ajoutés) utilisateurs et groupes LDAP.",
diff --git a/apps/user_ldap/l10n/fr.json b/apps/user_ldap/l10n/fr.json
index 9879534bac7..31d56f28b40 100644
--- a/apps/user_ldap/l10n/fr.json
+++ b/apps/user_ldap/l10n/fr.json
@@ -95,13 +95,13 @@
"in seconds. A change empties the cache." : "en secondes. Tout changement vide le cache.",
"Directory Settings" : "Paramètres du répertoire",
"User Display Name Field" : "Champ \"nom d'affichage\" de l'utilisateur",
- "The LDAP attribute to use to generate the user's display name." : "L'attribut LDAP utilisé pour générer le nom d'utilisateur affiché.",
+ "The LDAP attribute to use to generate the user's display name." : "L'attribut LDAP utilisé pour générer le nom d'affichage de l'utilisateur.",
"Base User Tree" : "DN racine de l'arbre utilisateurs",
"One User Base DN per line" : "Un DN racine utilisateur par ligne",
"User Search Attributes" : "Recherche des attributs utilisateur",
"Optional; one attribute per line" : "Optionnel, un attribut par ligne",
"Group Display Name Field" : "Champ \"nom d'affichage\" du groupe",
- "The LDAP attribute to use to generate the groups's display name." : "L'attribut LDAP utilisé pour générer le nom de groupe affiché.",
+ "The LDAP attribute to use to generate the groups's display name." : "L'attribut LDAP utilisé pour générer le nom d'affichage du groupe.",
"Base Group Tree" : "DN racine de l'arbre groupes",
"One Group Base DN per line" : "Un DN racine groupe par ligne",
"Group Search Attributes" : "Recherche des attributs du groupe",
@@ -118,7 +118,7 @@
"User Home Folder Naming Rule" : "Convention de nommage du répertoire utilisateur",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Laisser vide ",
"Internal Username" : "Nom d'utilisateur interne",
- "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Par défaut le nom d'utilisateur interne sera créé à partir de l'attribut UUID. Ceci permet d'assurer que le nom d'utilisateur est unique et que les caractères ne nécessitent pas de conversion. Le nom d'utilisateur interne doit contenir uniquement les caractères suivants : [ a-zA-Z0-9_.@- ]. Les autres caractères sont remplacés par leur correspondance ASCII ou simplement omis. En cas de collision, un nombre est incrémenté/décrémenté. Le nom d'utilisateur interne est utilisé pour identifier l'utilisateur au sein du système. C'est aussi le nom par défaut du répertoire utilisateur dans ownCloud. C'est aussi le port d'URLs distants, par exemple pour tous les services *DAV. Le comportement par défaut peut être modifié à l'aide de ce paramètre. Pour obtenir un comportement similaire aux versions précédentes à ownCloud 5, saisir le nom d'utilisateur à afficher dans le champ suivant. Laissez à blanc pour le comportement par défaut. Les modifications prendront effet seulement pour les nouveaux (ajoutés) utilisateurs LDAP.",
+ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Par défaut le nom d'utilisateur interne sera créé à partir de l'attribut UUID. Ceci permet d'assurer que le nom d'utilisateur est unique et que les caractères ne nécessitent pas de conversion. Le nom d'utilisateur interne doit contenir uniquement les caractères suivants : [ a-zA-Z0-9_.@- ]. Les autres caractères sont remplacés par leur correspondance ASCII ou simplement omis. En cas de collision, un nombre est ajouté/incrémenté. Le nom d'utilisateur interne est utilisé pour identifier l'utilisateur au sein du système. C'est aussi le nom par défaut du répertoire utilisateur dans ownCloud. Il fait aussi partie de certains URL de services, par exemple pour tous les services *DAV. Le comportement par défaut peut être modifié à l'aide de ce paramètre. Pour obtenir un comportement similaire aux versions précédentes à ownCloud 5, saisir le nom d'utilisateur à afficher dans le champ suivant. Laissez à blanc pour le comportement par défaut. Les modifications prendront effet seulement pour les nouveaux (ajoutés) utilisateurs LDAP.",
"Internal Username Attribute:" : "Nom d'utilisateur interne :",
"Override UUID detection" : "Surcharger la détection d'UUID",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Par défaut, l'attribut UUID est automatiquement détecté. Cet attribut est utilisé pour identifier les utilisateurs et groupes de façon fiable. Un nom d'utilisateur interne basé sur l'UUID sera automatiquement créé, sauf s'il est spécifié autrement ci-dessus. Vous pouvez modifier ce comportement et définir l'attribut de votre choix. Vous devez alors vous assurer que l'attribut de votre choix peut être récupéré pour les utilisateurs ainsi que pour les groupes et qu'il soit unique. Laisser à blanc pour le comportement par défaut. Les modifications seront effectives uniquement pour les nouveaux (ajoutés) utilisateurs et groupes LDAP.",
diff --git a/apps/user_ldap/l10n/gl.js b/apps/user_ldap/l10n/gl.js
index ef75c8df65c..a2359d41ebc 100644
--- a/apps/user_ldap/l10n/gl.js
+++ b/apps/user_ldap/l10n/gl.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Confirmar a eliminación",
"_%s group found_::_%s groups found_" : ["Atopouse %s grupo","Atopáronse %s grupos"],
"_%s user found_::_%s users found_" : ["Atopouse %s usuario","Atopáronse %s usuarios"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Non foi posíbel detectar o atributo nome de usuario que mostrar. Especifiqueo vostede mesmo nos axustes avanzados de LDAP.",
"Could not find the desired feature" : "Non foi posíbel atopar a función desexada",
"Invalid Host" : "Máquina incorrecta",
"Server" : "Servidor",
@@ -48,6 +49,7 @@ OC.L10N.register(
"Edit raw filter instead" : "Editar, no seu canto, o filtro en bruto",
"Raw LDAP filter" : "Filtro LDAP en bruto",
"The filter specifies which LDAP groups shall have access to the %s instance." : "O filtro especifica que grupos LDAP teñen acceso á instancia %s.",
+ "Test Filter" : "Filtro de probas",
"groups found" : "atopáronse grupos",
"Users login with this attribute:" : "Os usuarios inician sesión con este atributo:",
"LDAP Username:" : "Nome de usuario LDAP:",
@@ -67,11 +69,15 @@ OC.L10N.register(
"For anonymous access, leave DN and Password empty." : "Para o acceso anónimo deixe o DN e o contrasinal baleiros.",
"One Base DN per line" : "Un DN base por liña",
"You can specify Base DN for users and groups in the Advanced tab" : "Pode especificar a DN base para usuarios e grupos na lapela de «Avanzado»",
+ "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita as peticións LDAP automáticas. E o mellor para as configuracións máis grandes, mais require algúns coñecementos de LDAP.",
+ "Manually enter LDAP filters (recommended for large directories)" : "Introduza manualmente os filtros LDAP (recomendado para directorios grandes)",
"Limit %s access to users meeting these criteria:" : "Limitar o acceso a %s para os usuarios que cumpren con estes criterios:",
"The filter specifies which LDAP users shall have access to the %s instance." : "O filtro especifica que usuarios LDAP teñen acceso á instancia %s.",
"users found" : "atopáronse usuarios",
+ "Saving" : "Gardando",
"Back" : "Atrás",
"Continue" : "Continuar",
+ "LDAP" : "LDAP",
"Expert" : "Experto",
"Advanced" : "Avanzado",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Aviso:</b> As aplicacións user_ldap e user_webdavauth son incompatíbeis. Pode acontecer un comportamento estraño. Consulte co administrador do sistema para desactivar unha delas.",
diff --git a/apps/user_ldap/l10n/gl.json b/apps/user_ldap/l10n/gl.json
index 99b0807ef54..0f6d4e00cdf 100644
--- a/apps/user_ldap/l10n/gl.json
+++ b/apps/user_ldap/l10n/gl.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Confirmar a eliminación",
"_%s group found_::_%s groups found_" : ["Atopouse %s grupo","Atopáronse %s grupos"],
"_%s user found_::_%s users found_" : ["Atopouse %s usuario","Atopáronse %s usuarios"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Non foi posíbel detectar o atributo nome de usuario que mostrar. Especifiqueo vostede mesmo nos axustes avanzados de LDAP.",
"Could not find the desired feature" : "Non foi posíbel atopar a función desexada",
"Invalid Host" : "Máquina incorrecta",
"Server" : "Servidor",
@@ -46,6 +47,7 @@
"Edit raw filter instead" : "Editar, no seu canto, o filtro en bruto",
"Raw LDAP filter" : "Filtro LDAP en bruto",
"The filter specifies which LDAP groups shall have access to the %s instance." : "O filtro especifica que grupos LDAP teñen acceso á instancia %s.",
+ "Test Filter" : "Filtro de probas",
"groups found" : "atopáronse grupos",
"Users login with this attribute:" : "Os usuarios inician sesión con este atributo:",
"LDAP Username:" : "Nome de usuario LDAP:",
@@ -65,11 +67,15 @@
"For anonymous access, leave DN and Password empty." : "Para o acceso anónimo deixe o DN e o contrasinal baleiros.",
"One Base DN per line" : "Un DN base por liña",
"You can specify Base DN for users and groups in the Advanced tab" : "Pode especificar a DN base para usuarios e grupos na lapela de «Avanzado»",
+ "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita as peticións LDAP automáticas. E o mellor para as configuracións máis grandes, mais require algúns coñecementos de LDAP.",
+ "Manually enter LDAP filters (recommended for large directories)" : "Introduza manualmente os filtros LDAP (recomendado para directorios grandes)",
"Limit %s access to users meeting these criteria:" : "Limitar o acceso a %s para os usuarios que cumpren con estes criterios:",
"The filter specifies which LDAP users shall have access to the %s instance." : "O filtro especifica que usuarios LDAP teñen acceso á instancia %s.",
"users found" : "atopáronse usuarios",
+ "Saving" : "Gardando",
"Back" : "Atrás",
"Continue" : "Continuar",
+ "LDAP" : "LDAP",
"Expert" : "Experto",
"Advanced" : "Avanzado",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Aviso:</b> As aplicacións user_ldap e user_webdavauth son incompatíbeis. Pode acontecer un comportamento estraño. Consulte co administrador do sistema para desactivar unha delas.",
diff --git a/apps/user_ldap/l10n/it.js b/apps/user_ldap/l10n/it.js
index d7a4e192ec6..30b9a39f0ea 100644
--- a/apps/user_ldap/l10n/it.js
+++ b/apps/user_ldap/l10n/it.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Conferma l'eliminazione",
"_%s group found_::_%s groups found_" : ["%s gruppo trovato","%s gruppi trovati"],
"_%s user found_::_%s users found_" : ["%s utente trovato","%s utenti trovati"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Impossibile rilevare l'attributo nome visualizzato dell'utente. Specificalo nelle impostazioni avanzate di ldap.",
"Could not find the desired feature" : "Impossibile trovare la funzionalità desiderata",
"Invalid Host" : "Host non valido",
"Server" : "Server",
diff --git a/apps/user_ldap/l10n/it.json b/apps/user_ldap/l10n/it.json
index 44a529bc0c5..58b405730a4 100644
--- a/apps/user_ldap/l10n/it.json
+++ b/apps/user_ldap/l10n/it.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Conferma l'eliminazione",
"_%s group found_::_%s groups found_" : ["%s gruppo trovato","%s gruppi trovati"],
"_%s user found_::_%s users found_" : ["%s utente trovato","%s utenti trovati"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Impossibile rilevare l'attributo nome visualizzato dell'utente. Specificalo nelle impostazioni avanzate di ldap.",
"Could not find the desired feature" : "Impossibile trovare la funzionalità desiderata",
"Invalid Host" : "Host non valido",
"Server" : "Server",
diff --git a/apps/user_ldap/l10n/tr.js b/apps/user_ldap/l10n/tr.js
index 75f3678fdd9..a4c308e5354 100644
--- a/apps/user_ldap/l10n/tr.js
+++ b/apps/user_ldap/l10n/tr.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Silmeyi onayla",
"_%s group found_::_%s groups found_" : ["%s grup bulundu","%s grup bulundu"],
"_%s user found_::_%s users found_" : ["%s kullanıcı bulundu","%s kullanıcı bulundu"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Görüntülenecek kullanıcı adı özelliği algılanamadı. Lütfen gelişmiş ldap ayarlarına girerek kendiniz belirleyin.",
"Could not find the desired feature" : "İstenen özellik bulunamadı",
"Invalid Host" : "Geçersiz Makine",
"Server" : "Sunucu",
diff --git a/apps/user_ldap/l10n/tr.json b/apps/user_ldap/l10n/tr.json
index 9b6f3a37ade..dbd4a9b7406 100644
--- a/apps/user_ldap/l10n/tr.json
+++ b/apps/user_ldap/l10n/tr.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Silmeyi onayla",
"_%s group found_::_%s groups found_" : ["%s grup bulundu","%s grup bulundu"],
"_%s user found_::_%s users found_" : ["%s kullanıcı bulundu","%s kullanıcı bulundu"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Görüntülenecek kullanıcı adı özelliği algılanamadı. Lütfen gelişmiş ldap ayarlarına girerek kendiniz belirleyin.",
"Could not find the desired feature" : "İstenen özellik bulunamadı",
"Invalid Host" : "Geçersiz Makine",
"Server" : "Sunucu",
diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php
index 6f28a87d30c..5a4d324fba2 100644
--- a/apps/user_ldap/lib/access.php
+++ b/apps/user_ldap/lib/access.php
@@ -403,6 +403,8 @@ class Access extends LDAPUtility implements user\IUserTools {
//a new user/group! Add it only if it doesn't conflict with other backend's users or existing groups
//disabling Cache is required to avoid that the new user is cached as not-existing in fooExists check
+ //NOTE: mind, disabling cache affects only this instance! Using it
+ // outside of core user management will still cache the user as non-existing.
$originalTTL = $this->connection->ldapCacheTTL;
$this->connection->setConfiguration(array('ldapCacheTTL' => 0));
if(($isUser && !\OCP\User::userExists($intName))
@@ -507,6 +509,7 @@ class Access extends LDAPUtility implements user\IUserTools {
if($isUsers) {
//cache the user names so it does not need to be retrieved
//again later (e.g. sharing dialogue).
+ $this->cacheUserExists($ocName);
$this->cacheUserDisplayName($ocName, $nameByLDAP);
}
}
@@ -516,6 +519,14 @@ class Access extends LDAPUtility implements user\IUserTools {
}
/**
+ * caches a user as existing
+ * @param string $ocName the internal ownCloud username
+ */
+ public function cacheUserExists($ocName) {
+ $this->connection->writeToCache('userExists'.$ocName, true);
+ }
+
+ /**
* caches the user display name
* @param string $ocName the internal ownCloud username
* @param string $displayName the display name
@@ -1142,6 +1153,33 @@ class Access extends LDAPUtility implements user\IUserTools {
}
/**
+ * creates a filter part for searches by splitting up the given search
+ * string into single words
+ * @param string $search the search term
+ * @param string[] $searchAttributes needs to have at least two attributes,
+ * otherwise it does not make sense :)
+ * @return string the final filter part to use in LDAP searches
+ * @throws \Exception
+ */
+ private function getAdvancedFilterPartForSearch($search, $searchAttributes) {
+ if(!is_array($searchAttributes) || count($searchAttributes) < 2) {
+ throw new \Exception('searchAttributes must be an array with at least two string');
+ }
+ $searchWords = explode(' ', trim($search));
+ $wordFilters = array();
+ foreach($searchWords as $word) {
+ $word .= '*';
+ //every word needs to appear at least once
+ $wordMatchOneAttrFilters = array();
+ foreach($searchAttributes as $attr) {
+ $wordMatchOneAttrFilters[] = $attr . '=' . $word;
+ }
+ $wordFilters[] = $this->combineFilterWithOr($wordMatchOneAttrFilters);
+ }
+ return $this->combineFilterWithAnd($wordFilters);
+ }
+
+ /**
* creates a filter part for searches
* @param string $search the search term
* @param string[]|null $searchAttributes
@@ -1151,7 +1189,19 @@ class Access extends LDAPUtility implements user\IUserTools {
*/
private function getFilterPartForSearch($search, $searchAttributes, $fallbackAttribute) {
$filter = array();
- $search = empty($search) ? '*' : '*'.$search.'*';
+ $haveMultiSearchAttributes = (is_array($searchAttributes) && count($searchAttributes) > 0);
+ if($haveMultiSearchAttributes && strpos(trim($search), ' ') !== false) {
+ try {
+ return $this->getAdvancedFilterPartForSearch($search, $searchAttributes);
+ } catch(\Exception $e) {
+ \OCP\Util::writeLog(
+ 'user_ldap',
+ 'Creating advanced filter for search failed, falling back to simple method.',
+ \OCP\Util::INFO
+ );
+ }
+ }
+ $search = empty($search) ? '*' : $search.'*';
if(!is_array($searchAttributes) || count($searchAttributes) === 0) {
if(empty($fallbackAttribute)) {
return '';
diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php
index c2f87ebeb22..38c32cbda4a 100644
--- a/apps/user_ldap/user_ldap.php
+++ b/apps/user_ldap/user_ldap.php
@@ -291,7 +291,12 @@ class USER_LDAP extends BackendUtility implements \OCP\UserInterface {
*/
public function countUsers() {
$filter = $this->access->getFilterForUserCount();
+ $cacheKey = 'countUsers-'.$filter;
+ if(!is_null($entries = $this->access->connection->getFromCache($cacheKey))) {
+ return $entries;
+ }
$entries = $this->access->countUsers($filter);
+ $this->access->connection->writeToCache($cacheKey, $entries);
return $entries;
}
}
diff --git a/autotest.cmd b/autotest.cmd
index 5f1b1ae3a1d..2129e2d30d6 100644
--- a/autotest.cmd
+++ b/autotest.cmd
@@ -7,8 +7,10 @@
:: @copyright 2012, 2013 Thomas Müller thomas.mueller@tmit.eu
::
-set DATADIR=data-autotest
+@echo off
+
set BASEDIR=%~dp0
+set DATADIR=%BASEDIR%data-autotest
:: create autoconfig for sqlite, mysql, postgresql and mssql
echo ^<?php > .\tests\autoconfig-sqlite.php
@@ -18,7 +20,7 @@ echo 'dbtype' ^=^> 'sqlite'^, >> .\tests\autoconfig-sqlite.ph
echo 'dbtableprefix' ^=^> 'oc_'^, >> .\tests\autoconfig-sqlite.php
echo 'adminlogin' ^=^> 'admin'^, >> .\tests\autoconfig-sqlite.php
echo 'adminpass' ^=^> 'admin'^, >> .\tests\autoconfig-sqlite.php
-echo 'directory' ^=^> '%BASEDIR%%DATADIR%'^, >> .\tests\autoconfig-sqlite.php
+echo 'directory' ^=^> '%DATADIR%'^, >> .\tests\autoconfig-sqlite.php
echo ^)^; >> .\tests\autoconfig-sqlite.php
echo ^<?php > .\tests\autoconfig-mysql.php
@@ -28,7 +30,7 @@ echo 'dbtype' ^=^> 'mysql'^, >> .\tests\autoconfig-mysql.php
echo 'dbtableprefix' ^=^> 'oc_'^, >> .\tests\autoconfig-mysql.php
echo 'adminlogin' ^=^> 'admin'^, >> .\tests\autoconfig-mysql.php
echo 'adminpass' ^=^> 'admin'^, >> .\tests\autoconfig-mysql.php
-echo 'directory' ^=^> '%BASEDIR%%DATADIR%'^, >> .\tests\autoconfig-mysql.php
+echo 'directory' ^=^> '%DATADIR%'^, >> .\tests\autoconfig-mysql.php
echo 'dbuser' ^=^> 'oc_autotest'^, >> .\tests\autoconfig-mysql.php
echo 'dbname' ^=^> 'oc_autotest'^, >> .\tests\autoconfig-mysql.php
echo 'dbhost' ^=^> 'localhost'^, >> .\tests\autoconfig-mysql.php
@@ -42,7 +44,7 @@ echo 'dbtype' ^=^> 'pgsql'^, >> .\tests\autoconfig-pgsql.php
echo 'dbtableprefix' ^=^> 'oc_'^, >> .\tests\autoconfig-pgsql.php
echo 'adminlogin' ^=^> 'admin'^, >> .\tests\autoconfig-pgsql.php
echo 'adminpass' ^=^> 'admin'^, >> .\tests\autoconfig-pgsql.php
-echo 'directory' ^=^> '%BASEDIR%%DATADIR%'^, >> .\tests\autoconfig-pgsql.php
+echo 'directory' ^=^> '%DATADIR%'^, >> .\tests\autoconfig-pgsql.php
echo 'dbuser' ^=^> 'oc_autotest'^, >> .\tests\autoconfig-pgsql.php
echo 'dbname' ^=^> 'oc_autotest'^, >> .\tests\autoconfig-pgsql.php
echo 'dbhost' ^=^> 'localhost'^, >> .\tests\autoconfig-pgsql.php
@@ -56,7 +58,7 @@ echo 'dbtype' ^=^> 'mssql'^, >> .\tests\autoconfig-mssql.php
echo 'dbtableprefix' ^=^> 'oc_'^, >> .\tests\autoconfig-mssql.php
echo 'adminlogin' ^=^> 'admin'^, >> .\tests\autoconfig-mssql.php
echo 'adminpass' ^=^> 'admin'^, >> .\tests\autoconfig-mssql.php
-echo 'directory' ^=^> '%BASEDIR%%DATADIR%'^, >> .\tests\autoconfig-mssql.php
+echo 'directory' ^=^> '%DATADIR%'^, >> .\tests\autoconfig-mssql.php
echo 'dbuser' ^=^> 'oc_autotest'^, >> .\tests\autoconfig-mssql.php
echo 'dbname' ^=^> 'oc_autotest'^, >> .\tests\autoconfig-mssql.php
echo 'dbhost' ^=^> 'localhost\sqlexpress'^, >> .\tests\autoconfig-mssql.php
@@ -65,24 +67,40 @@ echo ^)^; >> .\tests\autoconfig-mssql.php
echo localhost:5432:*:oc_autotest:owncloud > %APPDATA%\postgresql\pgpass.conf
+@echo on
+
+:: Back up existing (dev) config if one exists
+if exist config\config.php (
+ copy /y config\config.php config\config-autotest-backup.php
+)
+
::
:: start test execution
::
if [%1] == [] (
- echo "Running on all database backends"
- call:execute_tests "sqlite"
- call:execute_tests "mysql"
- call:execute_tests "mssql"
- ::call:execute_tests "ora"
- call:execute_tests "pgsql"
+ @echo "Running on all database backends"
+ call:execute_tests "sqlite" "%2"
+ call:execute_tests "mysql" "%2"
+ call:execute_tests "mssql" "%2"
+ ::call:execute_tests "ora" "%2"
+ call:execute_tests "pgsql" "%2"
) else (
- call:execute_tests "%1"
+ call:execute_tests "%1" "%2"
)
+goto:restore_config
+
+goto:eof
+
+:restore_config
+ :: Restore existing config
+ if exist config\config-autotest-backup.php (
+ copy /y config\config-autotest-backup.php config\config.php
+ )
goto:eof
:execute_tests
- echo "Setup environment for %~1 testing ..."
+ @echo "Setup environment for %~1 testing ..."
:: back to root folder
cd %BASEDIR%
@@ -109,22 +127,25 @@ goto:eof
copy /y %BASEDIR%\tests\autoconfig-%~1.php %BASEDIR%\config\autoconfig.php
:: trigger installation
- php -f index.php
+ @echo INDEX
+ call php -f index.php
+ @echo END INDEX
::test execution
- echo "Testing with %~1 ..."
+ @echo "Testing with %~1 ..."
cd tests
rmdir /s /q coverage-html-%~1
md coverage-html-%~1
php -f enable_all.php
+
:: no external files on windows for now
cd ..
php occ app:disable files_external
cd tests
- call phpunit --bootstrap bootstrap.php --configuration phpunit-autotest.xml --log-junit autotest-results-%~1.xml --coverage-clover autotest-clover-%~1.xml --coverage-html coverage-html-%~1
+ call phpunit --bootstrap bootstrap.php --configuration phpunit-autotest.xml --log-junit autotest-results-%~1.xml --coverage-clover autotest-clover-%~1.xml --coverage-html coverage-html-%~1 %~2
- echo "Done with testing %~1 ..."
+ @echo "Done with testing %~1 ..."
cd %BASEDIR%
goto:eof
diff --git a/bower.json b/bower.json
index b18078f6fc4..5b025791dfe 100644
--- a/bower.json
+++ b/bower.json
@@ -13,15 +13,16 @@
"tests"
],
"dependencies": {
- "blueimp-md5": "1.0.1",
- "handlebars": "1.3.0",
+ "blueimp-md5": "~1.0.1",
+ "handlebars": "~1.3.0",
"jcrop": "~0.9.12",
"jquery": "~1.10.0",
+ "jsTimezoneDetect": "~1.0.5",
"moment": "~2.8.3",
- "select2": "3.4.8",
+ "select2": "~3.4.8",
"zxcvbn": "*",
- "snapjs": "2.0.0-rc1",
+ "snapjs": "~2.0.0-rc1",
"strengthify": "*",
- "underscore": "1.6.0"
+ "underscore": "~1.6.0"
}
}
diff --git a/config/config.sample.php b/config/config.sample.php
index c0e653c7c46..791ffa3df90 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -53,6 +53,9 @@ $CONFIG = array(
* all your passwords. This example is for documentation only,
* and you should never use it.
*
+ * @deprecated This salt is deprecated and only used for legacy-compatibility, developers
+ * should *NOT* use this value for anything nowadays.
+ *
*'passwordsalt' => 'd3c944a9af095aa08f',
*/
'passwordsalt' => '',
@@ -77,7 +80,8 @@ $CONFIG = array(
/**
* Where user files are stored; this defaults to ``data/`` in the ownCloud
- * directory. The SQLite database is also stored here, when you use SQLite.
+ * directory. The SQLite database is also stored here, when you use SQLite. (SQLite is
+ * available only in ownCloud Community Edition)
*/
'datadirectory' => '/var/www/owncloud/data',
@@ -88,8 +92,15 @@ $CONFIG = array(
'version' => '',
/**
- * Identifies the database used with this installation: ``sqlite``, ``mysql``,
- * ``pgsql``, ``oci``, or ``mssql``.
+ * Identifies the database used with this installation. See also config option
+ * ``supportedDatabases``
+ *
+ * Available:
+ * - sqlite (SQLite3 - Community Edition Only)
+ * - mysql (MySQL)
+ * - pgsql (PostgreSQL)
+ * - oci (Oracle - Enterprise Edition Only)
+ * - mssql (Microsoft SQL Server - Enterprise Edition Only)
*/
'dbtype' => 'sqlite',
@@ -440,6 +451,15 @@ $CONFIG = array(
*/
'check_for_working_htaccess' => true,
+/**
+ * In certain environments it is desired to have a read-only config file.
+ * When this switch is set to ``true`` ownCloud will not verify whether the
+ * configuration is writable. However, it will not be possible to configure
+ * all options via the web-interface. Furthermore, when updating ownCloud
+ * it is required to make the config file writable again for the update
+ * process.
+ */
+'config_is_read_only' => false,
/**
* Logging
@@ -447,8 +467,10 @@ $CONFIG = array(
/**
* By default the ownCloud logs are sent to the ``owncloud.log`` file in the
- * default ownCloud data directory. If syslogging is desired, set this parameter
- * to ``syslog``.
+ * default ownCloud data directory.
+ * If syslogging is desired, set this parameter to ``syslog``.
+ * Setting this parameter to ``errorlog`` will use the PHP error_log function
+ * for logging.
*/
'log_type' => 'owncloud',
@@ -832,11 +854,11 @@ $CONFIG = array(
* Database types that are supported for installation.
*
* Available:
- * - sqlite (SQLite3)
+ * - sqlite (SQLite3 - Community Edition Only)
* - mysql (MySQL)
* - pgsql (PostgreSQL)
- * - oci (Oracle)
- * - mssql (Microsoft SQL Server)
+ * - oci (Oracle - Enterprise Edition Only)
+ * - mssql (Microsoft SQL Server - Enterprise Edition Only)
*/
'supportedDatabases' => array(
'sqlite',
diff --git a/core/css/header.css b/core/css/header.css
index 026240ea1b0..02e47ad0966 100644
--- a/core/css/header.css
+++ b/core/css/header.css
@@ -273,8 +273,8 @@
z-index: 2000;
display: none;
background-color: #383c43;
- border-bottom-left-radius:7px; border-bottom:1px #333 solid; border-left:1px #333 solid;
- box-shadow:0 0 7px rgb(29,45,68);
+ border-bottom-left-radius: 7px;
+ box-shadow: 0 0 7px rgb(29,45,68);
-moz-box-sizing: border-box; box-sizing: border-box;
}
#expanddiv a {
diff --git a/core/img/filetypes/image-svg+xml.png b/core/img/filetypes/image-vector.png
index a847f78fcd8..a847f78fcd8 100644
--- a/core/img/filetypes/image-svg+xml.png
+++ b/core/img/filetypes/image-vector.png
Binary files differ
diff --git a/core/img/filetypes/image-svg+xml.svg b/core/img/filetypes/image-vector.svg
index 1f0a54a21ca..1f0a54a21ca 100644
--- a/core/img/filetypes/image-svg+xml.svg
+++ b/core/img/filetypes/image-vector.svg
diff --git a/core/img/filetypes/image.png b/core/img/filetypes/image.png
index 5cdc05029af..305c3d4db27 100644
--- a/core/img/filetypes/image.png
+++ b/core/img/filetypes/image.png
Binary files differ
diff --git a/core/img/filetypes/image.svg b/core/img/filetypes/image.svg
index 86cbb633bf3..0159eed6482 100644
--- a/core/img/filetypes/image.svg
+++ b/core/img/filetypes/image.svg
@@ -1,57 +1,39 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs>
- <radialGradient id="t" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(.028917 0 0 .012353 26.973 38.471)" r="117.14"/>
<linearGradient id="a">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
- <radialGradient id="u" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-.028917 0 0 .012353 21.027 38.471)" r="117.14"/>
- <linearGradient id="l" x1="302.86" gradientUnits="userSpaceOnUse" y1="366.65" gradientTransform="matrix(.084497 0 0 .012353 -6.5396 38.471)" x2="302.86" y2="609.51">
- <stop stop-opacity="0" offset="0"/>
- <stop offset=".5"/>
- <stop stop-opacity="0" offset="1"/>
- </linearGradient>
- <linearGradient id="r" x1="16.626" gradientUnits="userSpaceOnUse" y1="15.298" gradientTransform="matrix(.57894 0 0 .65062 2.0784 1.9502)" x2="20.055" y2="24.628">
+ <linearGradient id="f" y2="43" gradientUnits="userSpaceOnUse" y1="5.5641" gradientTransform="matrix(.56757 0 0 .72973 2.3784 -2.5135)" x2="24" x1="24">
<stop stop-color="#fff" offset="0"/>
- <stop stop-color="#fff" stop-opacity="0" offset="1"/>
+ <stop stop-opacity=".23529" stop-color="#fff" offset=".036262"/>
+ <stop stop-opacity=".15686" stop-color="#fff" offset=".95056"/>
+ <stop stop-opacity=".39216" stop-color="#fff" offset="1"/>
</linearGradient>
- <linearGradient id="o" x1="24" gradientUnits="userSpaceOnUse" y1="5.5641" gradientTransform="matrix(.77477 0 0 .61261 -2.5946 1.2973)" x2="24" y2="43">
- <stop stop-color="#fff" offset="0"/>
- <stop stop-color="#fff" stop-opacity=".23529" offset=".036262"/>
- <stop stop-color="#fff" stop-opacity=".15686" offset=".95056"/>
- <stop stop-color="#fff" stop-opacity=".39216" offset="1"/>
- </linearGradient>
- <linearGradient id="p" x1="25.132" gradientUnits="userSpaceOnUse" y1=".98521" gradientTransform="matrix(.85714 0 0 .52148 -4.5714 2.6844)" x2="25.132" y2="47.013">
+ <linearGradient id="e" y2="47.013" gradientUnits="userSpaceOnUse" y1=".98521" gradientTransform="matrix(.65714 0 0 .63012 .22856 -1.0896)" x2="25.132" x1="25.132">
<stop stop-color="#f4f4f4" offset="0"/>
<stop stop-color="#dbdbdb" offset="1"/>
</linearGradient>
- <linearGradient id="q" x1="-51.786" gradientUnits="userSpaceOnUse" y1="50.786" gradientTransform="matrix(.69214 0 0 .48803 46.352 2.1033)" x2="-51.786" y2="2.9062">
- <stop stop-color="#a0a0a0" offset="0"/>
- <stop stop-color="#bebebe" offset="1"/>
- </linearGradient>
- <linearGradient id="m" x1="45.414" gradientUnits="userSpaceOnUse" y1="15.27" gradientTransform="matrix(.32723 0 0 .25356 -38.234 -30.559)" x2="45.567" y2="96.253">
- <stop stop-color="#262626" offset="0"/>
- <stop stop-color="#4d4d4d" offset="1"/>
- </linearGradient>
- <linearGradient id="n" x1="-24.032" gradientUnits="userSpaceOnUse" y1="-13.091" gradientTransform="matrix(.74286 0 0 .74074 1.8384 4.0069)" x2="-24.098" y2="-40.164">
- <stop stop-color="#1d1d1d" offset="0"/>
- <stop offset="1"/>
- </linearGradient>
- <linearGradient id="s" x1="149.98" gradientUnits="userSpaceOnUse" y1="-104.24" gradientTransform="matrix(.28088 0 0 .28276 -22.128 49.806)" x2="149.98" y2="-174.97">
- <stop stop-color="#272727" offset="0"/>
- <stop stop-color="#454545" offset="1"/>
+ <radialGradient id="c" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(.015663 0 0 .0082353 17.61 25.981)" r="117.14"/>
+ <radialGradient id="b" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-.015663 0 0 .0082353 14.39 25.981)" r="117.14"/>
+ <linearGradient id="d" y2="609.51" gradientUnits="userSpaceOnUse" y1="366.65" gradientTransform="matrix(.045769 0 0 .0082353 -.54232 25.981)" x2="302.86" x1="302.86">
+ <stop stop-opacity="0" offset="0"/>
+ <stop offset=".5"/>
+ <stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
- <g opacity=".4" stroke-width=".0225" transform="matrix(.66667 0 0 .66667 0 -1.6667)">
- <rect y="43" width="40.8" fill="url(#l)" x="3.6" height="3"/>
- <path d="m3.6 43v2.9998c-1.4891 0.006-3.6-0.672-3.6-1.5s1.6618-1.5 3.6-1.5z" fill="url(#u)"/>
- <path d="m44.4 43v2.9998c1.4891 0.0056 3.6-0.67211 3.6-1.5001 0-0.828-1.6618-1.4997-3.6-1.4997z" fill="url(#t)"/>
+ <g>
+ <rect opacity=".15" height="2" width="22.1" y="29" x="4.95" fill="url(#d)"/>
+ <path opacity=".15" fill="url(#b)" d="m4.95 29v1.9999c-0.8066 0.004-1.95-0.448-1.95-1s0.9001-1 1.95-1z"/>
+ <path opacity=".15" fill="url(#c)" d="m27.05 29v1.9999c0.80661 0.0038 1.95-0.44807 1.95-1.0001 0-0.552-0.90012-0.99982-1.95-0.99982z"/>
+ <path fill="url(#e)" d="m4.5 0.49996c5.2705 0 23 0.00185 23 0.00185l0.000028 28.998h-23v-29z"/>
+ <path stroke-linejoin="round" d="m26.5 28.5h-21v-27h21z" stroke="url(#f)" stroke-linecap="round" fill="none"/>
+ <path opacity=".3" stroke-linejoin="round" d="m4.5 0.49996c5.2705 0 23 0.00185 23 0.00185l0.000028 28.998h-23v-29z" stroke="#000" stroke-width=".99992" fill="none"/>
+ </g>
+ <g>
+ <path opacity="0.898" d="m7.7886 21.255h16.423v-15.51h-16.423m3.628 2.8735c1.0944 0 1.981 0.8261 1.981 1.8451s-0.88656 1.8458-1.981 1.8458c-1.0938 0-1.9796-0.8261-1.9796-1.8458 0-1.019 0.88588-1.8451 1.9796-1.8451zm-2.6108 9.4533 2.9348-2.2011 1.4939 1.0904 5.9206-4.3819 2.2011 1.6359 1.4932-1.0897v4.9464z" fill-rule="evenodd" clip-rule="evenodd" fill="#5b2d8d"/>
+ <path fill="#fff" d="m10.658 12.066c-1.8593-0.82639-1.2884-3.3318 0.75961-3.3335 1.9297-0.00157 2.6205 2.394 0.93791 3.2524-0.61512 0.31381-1.1197 0.33792-1.6975 0.08111z"/>
+ <path fill="#fff" d="m10.392 16.949 1.3399-1.004 0.73508 0.52638c0.4043 0.28951 0.80332 0.48661 0.88673 0.43799 0.0834-0.04861 1.4203-1.0288 2.9709-2.1782l2.8192-2.0899 0.43502 0.32295c0.23926 0.17762 0.7424 0.5447 1.1181 0.81574l0.68306 0.49279 0.70677-0.53895 0.70677-0.53895v2.3791 2.3791h-6.8707-6.8707l1.3399-1.004z"/>
</g>
- <path stroke-linejoin="round" stroke="url(#q)" stroke-width=".0066667" d="m0.99997 4c6.8745 0 30 0.0015 30 0.0015l0.000036 23.999h-30v-24z" fill="url(#p)"/>
- <path stroke-linejoin="round" d="m30.333 27.333h-28.667v-22.667h28.667z" stroke="url(#o)" stroke-linecap="round" stroke-width=".0066667" fill="none"/>
- <rect ry="0" rx="0" transform="matrix(-.99999 .0037552 .0024409 -1 0 0)" height="19.903" width="25.952" stroke="url(#n)" stroke-linecap="round" y="-26.012" x="-29.015" stroke-width=".0066668" fill="url(#m)"/>
- <path style="color:#000000" d="m14.458 9.5417c-0.73638 0-1.3333 1.1939-1.3333 2.6667 0 0.24505 0.01072 0.48294 0.04167 0.70833-0.15826-0.15989-0.30816-0.33156-0.5-0.47917-1.1673-0.89808-2.4885-1.1461-2.9375-0.5625-0.44904 0.58363 0.14525 1.7894 1.3125 2.6875 0.22148 0.1704 0.44175 0.29391 0.66667 0.41667-0.25479 0.03257-0.52266 0.08822-0.79167 0.16667-1.4139 0.41232-2.3937 1.3347-2.1875 2.0417 0.20616 0.70693 1.5236 0.93315 2.9375 0.52083 0.2651-0.07731 0.52042-0.1633 0.75-0.27083-0.05604 0.10202-0.11595 0.20204-0.16667 0.3125-2.7782 2.4796-5.0625 7.2292-5.0625 7.2292l0.95833 0.02083c0.5207-1.25 1.8077-3.994 3.7925-6.293-0.28085 1.1684-0.0992 2.2006 0.5 2.4167 0.69271 0.24982 1.667-0.67708 2.1667-2.0625 0.04494-0.12462 0.06976-0.25209 0.10417-0.375 0.05396 0.11891 0.10152 0.23517 0.16667 0.35417 0.70727 1.2918 1.8124 2.062 2.4583 1.7083 0.64591-0.35364 0.58227-1.6874-0.125-2.9792-0.04035-0.07369-0.08227-0.13821-0.125-0.20833 0.07835 0.02437 0.14794 0.04131 0.22917 0.0625 1.4251 0.37181 2.7308 0.10836 2.9167-0.60417 0.18591-0.71253-0.82495-1.5865-2.25-1.9583-0.02183-0.0057-0.04073-0.01544-0.0625-0.02083 0.01921-0.01078 0.04331-0.0098 0.0625-0.02083 1.2754-0.73638 2.014-1.8623 1.6458-2.5-0.36819-0.63772-1.7037-0.54888-2.9792 0.1875-0.40854 0.23587-0.74162 0.50638-1.0208 0.79167 0.10589-0.38234 0.16667-0.82364 0.16667-1.2917 0-1.4728-0.59695-2.6667-1.3333-2.6667zm0.042 4.4583c0.92048 0 1.6667 0.74619 1.6667 1.6667 0 0.92047-0.74619 1.6667-1.6667 1.6667-0.92048 0-1.6667-0.74619-1.6667-1.6667 0-0.921 0.747-1.667 1.667-1.667z" fill="url(#s)"/>
- <path d="m14.458 10.188c-0.73638 0-1.3333 1.1939-1.3333 2.6667 0 0.24504 0.01072 0.48294 0.04167 0.70833-0.15826-0.15989-0.30816-0.33156-0.5-0.47917-1.1673-0.89808-2.4885-1.1461-2.9375-0.5625-0.44904 0.58363 0.14525 1.7894 1.3125 2.6875 0.22148 0.1704 0.44175 0.29391 0.66667 0.41667-0.25479 0.03257-0.52266 0.08822-0.79167 0.16667-1.4139 0.41232-2.3937 1.3347-2.1875 2.0417 0.20616 0.70693 1.5236 0.93315 2.9375 0.52083 0.2651-0.07731 0.52042-0.1633 0.75-0.27083-0.05604 0.10202-0.11595 0.20204-0.16667 0.3125-2.7782 2.479-5.0625 7.229-5.0625 7.229l0.95833 0.02083c0.52039-1.2493 1.8073-3.9927 3.7917-6.2917-0.28085 1.1684-0.0992 2.2006 0.5 2.4167 0.69271 0.24982 1.667-0.67708 2.1667-2.0625 0.04494-0.12462 0.06976-0.25209 0.10417-0.375 0.05396 0.11891 0.10152 0.23517 0.16667 0.35417 0.70727 1.2918 1.8124 2.062 2.4583 1.7083 0.64591-0.35364 0.58227-1.6874-0.125-2.9792-0.04035-0.07369-0.08227-0.13821-0.125-0.20833 0.07835 0.02437 0.14794 0.04131 0.22917 0.0625 1.4251 0.37181 2.7308 0.10836 2.9167-0.60417 0.18591-0.71253-0.82495-1.5865-2.25-1.9583-0.02183-0.0057-0.04073-0.01544-0.0625-0.02083 0.01921-0.01078 0.04331-0.0098 0.0625-0.02083 1.2754-0.73638 2.014-1.8623 1.6458-2.5-0.36819-0.63772-1.7037-0.54888-2.9792 0.1875-0.40854 0.23587-0.74162 0.50638-1.0208 0.79167 0.10589-0.38234 0.16667-0.82364 0.16667-1.2917 0-1.4728-0.59695-2.6667-1.3333-2.6667zm0.042 4.458c0.92048 0 1.6667 0.74619 1.6667 1.6667 0 0.92048-0.74619 1.6667-1.6667 1.6667-0.92048 0-1.6667-0.74619-1.6667-1.6667 0-0.92048 0.74619-1.6667 1.6667-1.6667z" fill="#d2d2d2"/>
- <path opacity=".15" fill="url(#r)" d="m2.6667 5.6667 0.0087 12c0.7672-0.012 26.076-4.424 26.658-4.636l-0.000092-7.3644z" fill-rule="evenodd"/>
</svg>
diff --git a/core/js/jstz.js b/core/js/jstz.js
deleted file mode 100644
index 0f9abe8b78d..00000000000
--- a/core/js/jstz.js
+++ /dev/null
@@ -1,358 +0,0 @@
-/**
- * This script gives you the zone info key representing your device's time zone setting.
- *
- * @name jsTimezoneDetect
- * @version 1.0.5
- * @author Jon Nylander
- * @license MIT License - http://www.opensource.org/licenses/mit-license.php
- *
- * For usage and examples, visit:
- * http://pellepim.bitbucket.org/jstz/
- *
- * Copyright (c) Jon Nylander
- */
-
-/*jslint undef: true */
-/*global console, exports*/
-
-(function(root) {
- /**
- * Namespace to hold all the code for timezone detection.
- */
- var jstz = (function () {
- 'use strict';
- var HEMISPHERE_SOUTH = 's',
-
- /**
- * Gets the offset in minutes from UTC for a certain date.
- * @param {Date} date
- * @returns {Number}
- */
- get_date_offset = function (date) {
- var offset = -date.getTimezoneOffset();
- return (offset !== null ? offset : 0);
- },
-
- get_date = function (year, month, date) {
- var d = new Date();
- if (year !== undefined) {
- d.setFullYear(year);
- }
- d.setMonth(month);
- d.setDate(date);
- return d;
- },
-
- get_january_offset = function (year) {
- return get_date_offset(get_date(year, 0 ,2));
- },
-
- get_june_offset = function (year) {
- return get_date_offset(get_date(year, 5, 2));
- },
-
- /**
- * Private method.
- * Checks whether a given date is in daylight saving time.
- * If the date supplied is after august, we assume that we're checking
- * for southern hemisphere DST.
- * @param {Date} date
- * @returns {Boolean}
- */
- date_is_dst = function (date) {
- var is_southern = date.getMonth() > 7,
- base_offset = is_southern ? get_june_offset(date.getFullYear()) :
- get_january_offset(date.getFullYear()),
- date_offset = get_date_offset(date),
- is_west = base_offset < 0,
- dst_offset = base_offset - date_offset;
-
- if (!is_west && !is_southern) {
- return dst_offset < 0;
- }
-
- return dst_offset !== 0;
- },
-
- /**
- * This function does some basic calculations to create information about
- * the user's timezone. It uses REFERENCE_YEAR as a solid year for which
- * the script has been tested rather than depend on the year set by the
- * client device.
- *
- * Returns a key that can be used to do lookups in jstz.olson.timezones.
- * eg: "720,1,2".
- *
- * @returns {String}
- */
-
- lookup_key = function () {
- var january_offset = get_january_offset(),
- june_offset = get_june_offset(),
- diff = january_offset - june_offset;
-
- if (diff < 0) {
- return january_offset + ",1";
- } else if (diff > 0) {
- return june_offset + ",1," + HEMISPHERE_SOUTH;
- }
-
- return january_offset + ",0";
- },
-
- /**
- * Uses get_timezone_info() to formulate a key to use in the olson.timezones dictionary.
- *
- * Returns a primitive object on the format:
- * {'timezone': TimeZone, 'key' : 'the key used to find the TimeZone object'}
- *
- * @returns Object
- */
- determine = function () {
- var key = lookup_key();
- return new jstz.TimeZone(jstz.olson.timezones[key]);
- },
-
- /**
- * This object contains information on when daylight savings starts for
- * different timezones.
- *
- * The list is short for a reason. Often we do not have to be very specific
- * to single out the correct timezone. But when we do, this list comes in
- * handy.
- *
- * Each value is a date denoting when daylight savings starts for that timezone.
- */
- dst_start_for = function (tz_name) {
-
- var ru_pre_dst_change = new Date(2010, 6, 15, 1, 0, 0, 0), // In 2010 Russia had DST, this allows us to detect Russia :)
- dst_starts = {
- 'America/Denver': new Date(2011, 2, 13, 3, 0, 0, 0),
- 'America/Mazatlan': new Date(2011, 3, 3, 3, 0, 0, 0),
- 'America/Chicago': new Date(2011, 2, 13, 3, 0, 0, 0),
- 'America/Mexico_City': new Date(2011, 3, 3, 3, 0, 0, 0),
- 'America/Asuncion': new Date(2012, 9, 7, 3, 0, 0, 0),
- 'America/Santiago': new Date(2012, 9, 3, 3, 0, 0, 0),
- 'America/Campo_Grande': new Date(2012, 9, 21, 5, 0, 0, 0),
- 'America/Montevideo': new Date(2011, 9, 2, 3, 0, 0, 0),
- 'America/Sao_Paulo': new Date(2011, 9, 16, 5, 0, 0, 0),
- 'America/Los_Angeles': new Date(2011, 2, 13, 8, 0, 0, 0),
- 'America/Santa_Isabel': new Date(2011, 3, 5, 8, 0, 0, 0),
- 'America/Havana': new Date(2012, 2, 10, 2, 0, 0, 0),
- 'America/New_York': new Date(2012, 2, 10, 7, 0, 0, 0),
- 'Europe/Helsinki': new Date(2013, 2, 31, 5, 0, 0, 0),
- 'Pacific/Auckland': new Date(2011, 8, 26, 7, 0, 0, 0),
- 'America/Halifax': new Date(2011, 2, 13, 6, 0, 0, 0),
- 'America/Goose_Bay': new Date(2011, 2, 13, 2, 1, 0, 0),
- 'America/Miquelon': new Date(2011, 2, 13, 5, 0, 0, 0),
- 'America/Godthab': new Date(2011, 2, 27, 1, 0, 0, 0),
- 'Europe/Moscow': ru_pre_dst_change,
- 'Asia/Amman': new Date(2013, 2, 29, 1, 0, 0, 0),
- 'Asia/Beirut': new Date(2013, 2, 31, 2, 0, 0, 0),
- 'Asia/Damascus': new Date(2013, 3, 6, 2, 0, 0, 0),
- 'Asia/Jerusalem': new Date(2013, 2, 29, 5, 0, 0, 0),
- 'Asia/Yekaterinburg': ru_pre_dst_change,
- 'Asia/Omsk': ru_pre_dst_change,
- 'Asia/Krasnoyarsk': ru_pre_dst_change,
- 'Asia/Irkutsk': ru_pre_dst_change,
- 'Asia/Yakutsk': ru_pre_dst_change,
- 'Asia/Vladivostok': ru_pre_dst_change,
- 'Asia/Baku': new Date(2013, 2, 31, 4, 0, 0),
- 'Asia/Yerevan': new Date(2013, 2, 31, 3, 0, 0),
- 'Asia/Kamchatka': ru_pre_dst_change,
- 'Asia/Gaza': new Date(2010, 2, 27, 4, 0, 0),
- 'Africa/Cairo': new Date(2010, 4, 1, 3, 0, 0),
- 'Europe/Minsk': ru_pre_dst_change,
- 'Pacific/Apia': new Date(2010, 10, 1, 1, 0, 0, 0),
- 'Pacific/Fiji': new Date(2010, 11, 1, 0, 0, 0),
- 'Australia/Perth': new Date(2008, 10, 1, 1, 0, 0, 0)
- };
-
- return dst_starts[tz_name];
- };
-
- return {
- determine: determine,
- date_is_dst: date_is_dst,
- dst_start_for: dst_start_for
- };
- }());
-
- /**
- * Simple object to perform ambiguity check and to return name of time zone.
- */
- jstz.TimeZone = function (tz_name) {
- 'use strict';
- /**
- * The keys in this object are timezones that we know may be ambiguous after
- * a preliminary scan through the olson_tz object.
- *
- * The array of timezones to compare must be in the order that daylight savings
- * starts for the regions.
- */
- var AMBIGUITIES = {
- 'America/Denver': ['America/Denver', 'America/Mazatlan'],
- 'America/Chicago': ['America/Chicago', 'America/Mexico_City'],
- 'America/Santiago': ['America/Santiago', 'America/Asuncion', 'America/Campo_Grande'],
- 'America/Montevideo': ['America/Montevideo', 'America/Sao_Paulo'],
- 'Asia/Beirut': ['Asia/Amman', 'Asia/Jerusalem', 'Asia/Beirut', 'Europe/Helsinki','Asia/Damascus'],
- 'Pacific/Auckland': ['Pacific/Auckland', 'Pacific/Fiji'],
- 'America/Los_Angeles': ['America/Los_Angeles', 'America/Santa_Isabel'],
- 'America/New_York': ['America/Havana', 'America/New_York'],
- 'America/Halifax': ['America/Goose_Bay', 'America/Halifax'],
- 'America/Godthab': ['America/Miquelon', 'America/Godthab'],
- 'Asia/Dubai': ['Europe/Moscow'],
- 'Asia/Dhaka': ['Asia/Yekaterinburg'],
- 'Asia/Jakarta': ['Asia/Omsk'],
- 'Asia/Shanghai': ['Asia/Krasnoyarsk', 'Australia/Perth'],
- 'Asia/Tokyo': ['Asia/Irkutsk'],
- 'Australia/Brisbane': ['Asia/Yakutsk'],
- 'Pacific/Noumea': ['Asia/Vladivostok'],
- 'Pacific/Tarawa': ['Asia/Kamchatka', 'Pacific/Fiji'],
- 'Pacific/Tongatapu': ['Pacific/Apia'],
- 'Asia/Baghdad': ['Europe/Minsk'],
- 'Asia/Baku': ['Asia/Yerevan','Asia/Baku'],
- 'Africa/Johannesburg': ['Asia/Gaza', 'Africa/Cairo']
- },
-
- timezone_name = tz_name,
-
- /**
- * Checks if a timezone has possible ambiguities. I.e timezones that are similar.
- *
- * For example, if the preliminary scan determines that we're in America/Denver.
- * We double check here that we're really there and not in America/Mazatlan.
- *
- * This is done by checking known dates for when daylight savings start for different
- * timezones during 2010 and 2011.
- */
- ambiguity_check = function () {
- var ambiguity_list = AMBIGUITIES[timezone_name],
- length = ambiguity_list.length,
- i = 0,
- tz = ambiguity_list[0];
-
- for (; i < length; i += 1) {
- tz = ambiguity_list[i];
-
- if (jstz.date_is_dst(jstz.dst_start_for(tz))) {
- timezone_name = tz;
- return;
- }
- }
- },
-
- /**
- * Checks if it is possible that the timezone is ambiguous.
- */
- is_ambiguous = function () {
- return typeof (AMBIGUITIES[timezone_name]) !== 'undefined';
- };
-
- if (is_ambiguous()) {
- ambiguity_check();
- }
-
- return {
- name: function () {
- return timezone_name;
- }
- };
- };
-
- jstz.olson = {};
-
- /*
- * The keys in this dictionary are comma separated as such:
- *
- * First the offset compared to UTC time in minutes.
- *
- * Then a flag which is 0 if the timezone does not take daylight savings into account and 1 if it
- * does.
- *
- * Thirdly an optional 's' signifies that the timezone is in the southern hemisphere,
- * only interesting for timezones with DST.
- *
- * The mapped arrays is used for constructing the jstz.TimeZone object from within
- * jstz.determine_timezone();
- */
- jstz.olson.timezones = {
- '-720,0' : 'Pacific/Majuro',
- '-660,0' : 'Pacific/Pago_Pago',
- '-600,1' : 'America/Adak',
- '-600,0' : 'Pacific/Honolulu',
- '-570,0' : 'Pacific/Marquesas',
- '-540,0' : 'Pacific/Gambier',
- '-540,1' : 'America/Anchorage',
- '-480,1' : 'America/Los_Angeles',
- '-480,0' : 'Pacific/Pitcairn',
- '-420,0' : 'America/Phoenix',
- '-420,1' : 'America/Denver',
- '-360,0' : 'America/Guatemala',
- '-360,1' : 'America/Chicago',
- '-360,1,s' : 'Pacific/Easter',
- '-300,0' : 'America/Bogota',
- '-300,1' : 'America/New_York',
- '-270,0' : 'America/Caracas',
- '-240,1' : 'America/Halifax',
- '-240,0' : 'America/Santo_Domingo',
- '-240,1,s' : 'America/Santiago',
- '-210,1' : 'America/St_Johns',
- '-180,1' : 'America/Godthab',
- '-180,0' : 'America/Argentina/Buenos_Aires',
- '-180,1,s' : 'America/Montevideo',
- '-120,0' : 'America/Noronha',
- '-120,1' : 'America/Noronha',
- '-60,1' : 'Atlantic/Azores',
- '-60,0' : 'Atlantic/Cape_Verde',
- '0,0' : 'UTC',
- '0,1' : 'Europe/London',
- '60,1' : 'Europe/Berlin',
- '60,0' : 'Africa/Lagos',
- '60,1,s' : 'Africa/Windhoek',
- '120,1' : 'Asia/Beirut',
- '120,0' : 'Africa/Johannesburg',
- '180,0' : 'Asia/Baghdad',
- '180,1' : 'Europe/Moscow',
- '210,1' : 'Asia/Tehran',
- '240,0' : 'Asia/Dubai',
- '240,1' : 'Asia/Baku',
- '270,0' : 'Asia/Kabul',
- '300,1' : 'Asia/Yekaterinburg',
- '300,0' : 'Asia/Karachi',
- '330,0' : 'Asia/Kolkata',
- '345,0' : 'Asia/Kathmandu',
- '360,0' : 'Asia/Dhaka',
- '360,1' : 'Asia/Omsk',
- '390,0' : 'Asia/Rangoon',
- '420,1' : 'Asia/Krasnoyarsk',
- '420,0' : 'Asia/Jakarta',
- '480,0' : 'Asia/Shanghai',
- '480,1' : 'Asia/Irkutsk',
- '525,0' : 'Australia/Eucla',
- '525,1,s' : 'Australia/Eucla',
- '540,1' : 'Asia/Yakutsk',
- '540,0' : 'Asia/Tokyo',
- '570,0' : 'Australia/Darwin',
- '570,1,s' : 'Australia/Adelaide',
- '600,0' : 'Australia/Brisbane',
- '600,1' : 'Asia/Vladivostok',
- '600,1,s' : 'Australia/Sydney',
- '630,1,s' : 'Australia/Lord_Howe',
- '660,1' : 'Asia/Kamchatka',
- '660,0' : 'Pacific/Noumea',
- '690,0' : 'Pacific/Norfolk',
- '720,1,s' : 'Pacific/Auckland',
- '720,0' : 'Pacific/Tarawa',
- '765,1,s' : 'Pacific/Chatham',
- '780,0' : 'Pacific/Tongatapu',
- '780,1,s' : 'Pacific/Apia',
- '840,0' : 'Pacific/Kiritimati'
- };
-
- if (typeof exports !== 'undefined') {
- exports.jstz = jstz;
- } else {
- root.jstz = jstz;
- }
-})(this);
diff --git a/core/js/share.js b/core/js/share.js
index d9ae0168129..b856363d157 100644
--- a/core/js/share.js
+++ b/core/js/share.js
@@ -447,7 +447,7 @@ OC.Share={
$('#shareWith').autocomplete({minLength: 2, delay: 750, source: function(search, response) {
var $loading = $('#dropdown .shareWithLoading');
$loading.removeClass('hidden');
- $.get(OC.filePath('core', 'ajax', 'share.php'), { fetch: 'getShareWith', search: search.term, itemShares: OC.Share.itemShares }, function(result) {
+ $.get(OC.filePath('core', 'ajax', 'share.php'), { fetch: 'getShareWith', search: search.term.trim(), itemShares: OC.Share.itemShares }, function(result) {
$loading.addClass('hidden');
if (result.status == 'success' && result.data.length > 0) {
$( "#shareWith" ).autocomplete( "option", "autoFocus", true );
diff --git a/core/l10n/ca.js b/core/l10n/ca.js
index ee837ea7b7f..edec2f989f6 100644
--- a/core/l10n/ca.js
+++ b/core/l10n/ca.js
@@ -184,7 +184,7 @@ OC.L10N.register(
"This means only administrators can use the instance." : "Això significa que només els administradors poden usar la instància.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "Contacteu amb l'administrador del sistema si aquest missatge persisteix o apareix inesperadament.",
"Thank you for your patience." : "Gràcies per la paciència.",
- "You are accessing the server from an untrusted domain." : "Esteu accedint el servidor des d'un domini no fiable",
+ "You are accessing the server from an untrusted domain." : "Esteu accedint al servidor des d'un domini no fiable",
"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Contacteu amb l'administrador. Si sou un administrador d'aquesta instància, configureu el paràmetre \"trusted_domain\" a config/config.php. Hi ha un exemple de configuració a config/config.sampe.php",
"Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "En funció de la teva configuració, com a administrador podries utilitzar el botó d'abaix per confiar en aquest domini.",
"Add \"%s\" as trusted domain" : "Afegeix \"%s\" com a domini de confiança",
diff --git a/core/l10n/ca.json b/core/l10n/ca.json
index 374e9a51440..fea3cdefec2 100644
--- a/core/l10n/ca.json
+++ b/core/l10n/ca.json
@@ -182,7 +182,7 @@
"This means only administrators can use the instance." : "Això significa que només els administradors poden usar la instància.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "Contacteu amb l'administrador del sistema si aquest missatge persisteix o apareix inesperadament.",
"Thank you for your patience." : "Gràcies per la paciència.",
- "You are accessing the server from an untrusted domain." : "Esteu accedint el servidor des d'un domini no fiable",
+ "You are accessing the server from an untrusted domain." : "Esteu accedint al servidor des d'un domini no fiable",
"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Contacteu amb l'administrador. Si sou un administrador d'aquesta instància, configureu el paràmetre \"trusted_domain\" a config/config.php. Hi ha un exemple de configuració a config/config.sampe.php",
"Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "En funció de la teva configuració, com a administrador podries utilitzar el botó d'abaix per confiar en aquest domini.",
"Add \"%s\" as trusted domain" : "Afegeix \"%s\" com a domini de confiança",
diff --git a/core/l10n/da.js b/core/l10n/da.js
index a1222792fc5..ea228ee8b81 100644
--- a/core/l10n/da.js
+++ b/core/l10n/da.js
@@ -106,9 +106,9 @@ OC.L10N.register(
"Enter new" : "Indtast nyt",
"Delete" : "Slet",
"Add" : "Tilføj",
- "Edit tags" : "Rediger tags",
+ "Edit tags" : "Redigér mærker",
"Error loading dialog template: {error}" : "Fejl ved indlæsning dialog skabelon: {error}",
- "No tags selected for deletion." : "Ingen tags markeret til sletning.",
+ "No tags selected for deletion." : "Ingen mærker markeret til sletning.",
"unknown text" : "ukendt tekst",
"Hello world!" : "Hej verden!",
"sunny" : "solrigt",
@@ -133,11 +133,11 @@ OC.L10N.register(
"Apps" : "Apps",
"Admin" : "Admin",
"Help" : "Hjælp",
- "Error loading tags" : "Fejl ved indlæsning af tags",
- "Tag already exists" : "Tag eksistere allerede",
- "Error deleting tag(s)" : "Fejl ved sletning af tag(s)",
- "Error tagging" : "Fejl ved tagging",
- "Error untagging" : "Fejl ved fjernelse af tag",
+ "Error loading tags" : "Fejl ved indlæsning af mærker",
+ "Tag already exists" : "Mærket eksisterer allerede",
+ "Error deleting tag(s)" : "Fejl ved sletning af mærke(r)",
+ "Error tagging" : "Fejl ved opmærkning",
+ "Error untagging" : "Fejl ved fjernelse af opmærkning",
"Error favoriting" : "Fejl ved favoritering",
"Error unfavoriting" : "Fejl ved fjernelse af favorisering.",
"Access forbidden" : "Adgang forbudt",
diff --git a/core/l10n/da.json b/core/l10n/da.json
index 5111e5d3e05..021d43e8c7b 100644
--- a/core/l10n/da.json
+++ b/core/l10n/da.json
@@ -104,9 +104,9 @@
"Enter new" : "Indtast nyt",
"Delete" : "Slet",
"Add" : "Tilføj",
- "Edit tags" : "Rediger tags",
+ "Edit tags" : "Redigér mærker",
"Error loading dialog template: {error}" : "Fejl ved indlæsning dialog skabelon: {error}",
- "No tags selected for deletion." : "Ingen tags markeret til sletning.",
+ "No tags selected for deletion." : "Ingen mærker markeret til sletning.",
"unknown text" : "ukendt tekst",
"Hello world!" : "Hej verden!",
"sunny" : "solrigt",
@@ -131,11 +131,11 @@
"Apps" : "Apps",
"Admin" : "Admin",
"Help" : "Hjælp",
- "Error loading tags" : "Fejl ved indlæsning af tags",
- "Tag already exists" : "Tag eksistere allerede",
- "Error deleting tag(s)" : "Fejl ved sletning af tag(s)",
- "Error tagging" : "Fejl ved tagging",
- "Error untagging" : "Fejl ved fjernelse af tag",
+ "Error loading tags" : "Fejl ved indlæsning af mærker",
+ "Tag already exists" : "Mærket eksisterer allerede",
+ "Error deleting tag(s)" : "Fejl ved sletning af mærke(r)",
+ "Error tagging" : "Fejl ved opmærkning",
+ "Error untagging" : "Fejl ved fjernelse af opmærkning",
"Error favoriting" : "Fejl ved favoritering",
"Error unfavoriting" : "Fejl ved fjernelse af favorisering.",
"Access forbidden" : "Adgang forbudt",
diff --git a/core/templates/login.php b/core/templates/login.php
index 425c3db75c8..86a1b605df5 100644
--- a/core/templates/login.php
+++ b/core/templates/login.php
@@ -1,5 +1,5 @@
<?php /** @var $l OC_L10N */ ?>
-<?php script('core', 'jstz') ?>
+<?php vendor_script('jsTimezoneDetect/jstz') ?>
<!--[if IE 8]><style>input[type="checkbox"]{padding:0;}</style><![endif]-->
<form method="post" name="login">
diff --git a/core/vendor/.gitignore b/core/vendor/.gitignore
index e76afeb476d..36748f845a6 100644
--- a/core/vendor/.gitignore
+++ b/core/vendor/.gitignore
@@ -1,6 +1,5 @@
test/
src/
-.bower.json
bower.json
.gitignore
.jshintrc
@@ -8,12 +7,14 @@ bower.json
CHANGELOG*
Gemfile
gruntfile.js
+Gruntfile.js
Makefile
package.json
README*
# underscore
underscore/**
+!underscore/.bower.json
!underscore/underscore.js
!underscore/LICENSE
@@ -28,10 +29,12 @@ moment/benchmarks
moment/locale
moment/min/**
moment/moment.js
+moment/scripts
!moment/min/moment-with-locales.js
# jquery
jquery/**
+!jquery/.bower.json
!jquery/jquery*
!jquery/MIT-LICENSE.txt
@@ -42,12 +45,17 @@ jcrop/css/jquery.Jcrop.min.css
jcrop/js/**
!jcrop/js/jquery.Jcrop.js
+# jsTimezoneDetect
+jsTimezoneDetect/jstz.min.js
+
# handlebars
handlebars/**
+!handlebars/.bower.json
!handlebars/handlebars.js
# select2
select2/**
+!select2/.bower.json
!select2/select2.js
!select2/select2.css
!select2/select2.png
@@ -57,6 +65,7 @@ select2/**
#zxcvbn
zxcvbn/**
+!zxcvbn/.bower.json
!zxcvbn/zxcvbn.js
!zxcvbn/LICENSE.txt
diff --git a/core/vendor/blueimp-md5/.bower.json b/core/vendor/blueimp-md5/.bower.json
new file mode 100644
index 00000000000..89288baad76
--- /dev/null
+++ b/core/vendor/blueimp-md5/.bower.json
@@ -0,0 +1,53 @@
+{
+ "name": "blueimp-md5",
+ "version": "1.0.3",
+ "title": "JavaScript MD5",
+ "description": "JavaScript MD5 implementation.",
+ "keywords": [
+ "javascript",
+ "md5"
+ ],
+ "homepage": "https://github.com/blueimp/JavaScript-MD5",
+ "author": {
+ "name": "Sebastian Tschan",
+ "url": "https://blueimp.net"
+ },
+ "maintainers": [
+ {
+ "name": "Sebastian Tschan",
+ "url": "https://blueimp.net"
+ }
+ ],
+ "contributors": [
+ {
+ "name": "Paul Johnston",
+ "url": "http://pajhome.org.uk/crypt/md5"
+ }
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/blueimp/JavaScript-MD5.git"
+ },
+ "bugs": "https://github.com/blueimp/JavaScript-MD5/issues",
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "http://www.opensource.org/licenses/MIT"
+ }
+ ],
+ "devDependencies": {
+ "mocha": "1.11.0",
+ "expect.js": "0.2.0",
+ "uglify-js": "2.3.6"
+ },
+ "main": "js/md5.js",
+ "_release": "1.0.3",
+ "_resolution": {
+ "type": "version",
+ "tag": "1.0.3",
+ "commit": "299407012031ac6f60f832d3b5fa975fcb88b550"
+ },
+ "_source": "git://github.com/blueimp/JavaScript-MD5.git",
+ "_target": "~1.0.1",
+ "_originalSource": "blueimp-md5"
+} \ No newline at end of file
diff --git a/core/vendor/handlebars/.bower.json b/core/vendor/handlebars/.bower.json
new file mode 100644
index 00000000000..2d17a2faacb
--- /dev/null
+++ b/core/vendor/handlebars/.bower.json
@@ -0,0 +1,16 @@
+{
+ "name": "handlebars",
+ "version": "1.3.0",
+ "main": "handlebars.js",
+ "dependencies": {},
+ "homepage": "https://github.com/components/handlebars.js",
+ "_release": "1.3.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v1.3.0",
+ "commit": "ddd21a44be399ae4de486ddd868bacf84e92b9c4"
+ },
+ "_source": "git://github.com/components/handlebars.js.git",
+ "_target": "~1.3.0",
+ "_originalSource": "handlebars"
+} \ No newline at end of file
diff --git a/core/vendor/jcrop/.bower.json b/core/vendor/jcrop/.bower.json
new file mode 100644
index 00000000000..4fba44732cf
--- /dev/null
+++ b/core/vendor/jcrop/.bower.json
@@ -0,0 +1,14 @@
+{
+ "name": "jcrop",
+ "homepage": "https://github.com/tapmodo/Jcrop",
+ "version": "0.9.12",
+ "_release": "0.9.12",
+ "_resolution": {
+ "type": "version",
+ "tag": "v0.9.12",
+ "commit": "1902fbc6afa14481dc019a17e0dcb7d62b808a98"
+ },
+ "_source": "git://github.com/tapmodo/Jcrop.git",
+ "_target": "~0.9.12",
+ "_originalSource": "jcrop"
+} \ No newline at end of file
diff --git a/core/vendor/jquery/.bower.json b/core/vendor/jquery/.bower.json
new file mode 100644
index 00000000000..72b99da7090
--- /dev/null
+++ b/core/vendor/jquery/.bower.json
@@ -0,0 +1,21 @@
+{
+ "name": "jquery",
+ "version": "1.10.2",
+ "description": "jQuery component",
+ "keywords": [
+ "jquery",
+ "component"
+ ],
+ "main": "jquery.js",
+ "license": "MIT",
+ "homepage": "https://github.com/jquery/jquery",
+ "_release": "1.10.2",
+ "_resolution": {
+ "type": "version",
+ "tag": "1.10.2",
+ "commit": "16b079b164d62bd807c612806842a13bf9b04d17"
+ },
+ "_source": "git://github.com/jquery/jquery.git",
+ "_target": "~1.10.0",
+ "_originalSource": "jquery"
+} \ No newline at end of file
diff --git a/core/vendor/jsTimezoneDetect/.bower.json b/core/vendor/jsTimezoneDetect/.bower.json
new file mode 100644
index 00000000000..2a3668ff309
--- /dev/null
+++ b/core/vendor/jsTimezoneDetect/.bower.json
@@ -0,0 +1,23 @@
+{
+ "name": "jstzdetect",
+ "version": "1.0.6",
+ "main": "jstz.min.js",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "components",
+ "bower_components",
+ "test",
+ "tests"
+ ],
+ "homepage": "https://github.com/HenningM/jstimezonedetect",
+ "_release": "1.0.6",
+ "_resolution": {
+ "type": "version",
+ "tag": "v1.0.6",
+ "commit": "bd595ed253292934991a414979007f3d51a1547d"
+ },
+ "_source": "git://github.com/HenningM/jstimezonedetect.git",
+ "_target": "~1.0.5",
+ "_originalSource": "jsTimezoneDetect"
+} \ No newline at end of file
diff --git a/core/vendor/jsTimezoneDetect/LICENCE.txt b/core/vendor/jsTimezoneDetect/LICENCE.txt
new file mode 100644
index 00000000000..c48af16c647
--- /dev/null
+++ b/core/vendor/jsTimezoneDetect/LICENCE.txt
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2012 Jon Nylander, project maintained at
+https://bitbucket.org/pellepim/jstimezonedetect
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to
+do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE. \ No newline at end of file
diff --git a/core/vendor/jsTimezoneDetect/jstz.js b/core/vendor/jsTimezoneDetect/jstz.js
new file mode 100644
index 00000000000..6f38183f856
--- /dev/null
+++ b/core/vendor/jsTimezoneDetect/jstz.js
@@ -0,0 +1,358 @@
+/**
+ * This script gives you the zone info key representing your device's time zone setting.
+ *
+ * @name jsTimezoneDetect
+ * @version 1.0.5
+ * @author Jon Nylander
+ * @license MIT License - http://www.opensource.org/licenses/mit-license.php
+ *
+ * For usage and examples, visit:
+ * http://pellepim.bitbucket.org/jstz/
+ *
+ * Copyright (c) Jon Nylander
+ */
+
+/*jslint undef: true */
+/*global console, exports*/
+
+(function(root) {
+ /**
+ * Namespace to hold all the code for timezone detection.
+ */
+ var jstz = (function () {
+ 'use strict';
+ var HEMISPHERE_SOUTH = 's',
+
+ /**
+ * Gets the offset in minutes from UTC for a certain date.
+ * @param {Date} date
+ * @returns {Number}
+ */
+ get_date_offset = function (date) {
+ var offset = -date.getTimezoneOffset();
+ return (offset !== null ? offset : 0);
+ },
+
+ get_date = function (year, month, date) {
+ var d = new Date();
+ if (year !== undefined) {
+ d.setFullYear(year);
+ }
+ d.setMonth(month);
+ d.setDate(date);
+ return d;
+ },
+
+ get_january_offset = function (year) {
+ return get_date_offset(get_date(year, 0 ,2));
+ },
+
+ get_june_offset = function (year) {
+ return get_date_offset(get_date(year, 5, 2));
+ },
+
+ /**
+ * Private method.
+ * Checks whether a given date is in daylight saving time.
+ * If the date supplied is after august, we assume that we're checking
+ * for southern hemisphere DST.
+ * @param {Date} date
+ * @returns {Boolean}
+ */
+ date_is_dst = function (date) {
+ var is_southern = date.getMonth() > 7,
+ base_offset = is_southern ? get_june_offset(date.getFullYear()) :
+ get_january_offset(date.getFullYear()),
+ date_offset = get_date_offset(date),
+ is_west = base_offset < 0,
+ dst_offset = base_offset - date_offset;
+
+ if (!is_west && !is_southern) {
+ return dst_offset < 0;
+ }
+
+ return dst_offset !== 0;
+ },
+
+ /**
+ * This function does some basic calculations to create information about
+ * the user's timezone. It uses REFERENCE_YEAR as a solid year for which
+ * the script has been tested rather than depend on the year set by the
+ * client device.
+ *
+ * Returns a key that can be used to do lookups in jstz.olson.timezones.
+ * eg: "720,1,2".
+ *
+ * @returns {String}
+ */
+
+ lookup_key = function () {
+ var january_offset = get_january_offset(),
+ june_offset = get_june_offset(),
+ diff = january_offset - june_offset;
+
+ if (diff < 0) {
+ return january_offset + ",1";
+ } else if (diff > 0) {
+ return june_offset + ",1," + HEMISPHERE_SOUTH;
+ }
+
+ return january_offset + ",0";
+ },
+
+ /**
+ * Uses get_timezone_info() to formulate a key to use in the olson.timezones dictionary.
+ *
+ * Returns a primitive object on the format:
+ * {'timezone': TimeZone, 'key' : 'the key used to find the TimeZone object'}
+ *
+ * @returns Object
+ */
+ determine = function () {
+ var key = lookup_key();
+ return new jstz.TimeZone(jstz.olson.timezones[key]);
+ },
+
+ /**
+ * This object contains information on when daylight savings starts for
+ * different timezones.
+ *
+ * The list is short for a reason. Often we do not have to be very specific
+ * to single out the correct timezone. But when we do, this list comes in
+ * handy.
+ *
+ * Each value is a date denoting when daylight savings starts for that timezone.
+ */
+ dst_start_for = function (tz_name) {
+
+ var ru_pre_dst_change = new Date(2010, 6, 15, 1, 0, 0, 0), // In 2010 Russia had DST, this allows us to detect Russia :)
+ dst_starts = {
+ 'America/Denver': new Date(2011, 2, 13, 3, 0, 0, 0),
+ 'America/Mazatlan': new Date(2011, 3, 3, 3, 0, 0, 0),
+ 'America/Chicago': new Date(2011, 2, 13, 3, 0, 0, 0),
+ 'America/Mexico_City': new Date(2011, 3, 3, 3, 0, 0, 0),
+ 'America/Asuncion': new Date(2012, 9, 7, 3, 0, 0, 0),
+ 'America/Santiago': new Date(2012, 9, 3, 3, 0, 0, 0),
+ 'America/Campo_Grande': new Date(2012, 9, 21, 5, 0, 0, 0),
+ 'America/Montevideo': new Date(2011, 9, 2, 3, 0, 0, 0),
+ 'America/Sao_Paulo': new Date(2011, 9, 16, 5, 0, 0, 0),
+ 'America/Los_Angeles': new Date(2011, 2, 13, 8, 0, 0, 0),
+ 'America/Santa_Isabel': new Date(2011, 3, 5, 8, 0, 0, 0),
+ 'America/Havana': new Date(2012, 2, 10, 2, 0, 0, 0),
+ 'America/New_York': new Date(2012, 2, 10, 7, 0, 0, 0),
+ 'Europe/Helsinki': new Date(2013, 2, 31, 5, 0, 0, 0),
+ 'Pacific/Auckland': new Date(2011, 8, 26, 7, 0, 0, 0),
+ 'America/Halifax': new Date(2011, 2, 13, 6, 0, 0, 0),
+ 'America/Goose_Bay': new Date(2011, 2, 13, 2, 1, 0, 0),
+ 'America/Miquelon': new Date(2011, 2, 13, 5, 0, 0, 0),
+ 'America/Godthab': new Date(2011, 2, 27, 1, 0, 0, 0),
+ 'Europe/Moscow': ru_pre_dst_change,
+ 'Asia/Amman': new Date(2013, 2, 29, 1, 0, 0, 0),
+ 'Asia/Beirut': new Date(2013, 2, 31, 2, 0, 0, 0),
+ 'Asia/Damascus': new Date(2013, 3, 6, 2, 0, 0, 0),
+ 'Asia/Jerusalem': new Date(2013, 2, 29, 5, 0, 0, 0),
+ 'Asia/Yekaterinburg': ru_pre_dst_change,
+ 'Asia/Omsk': ru_pre_dst_change,
+ 'Asia/Krasnoyarsk': ru_pre_dst_change,
+ 'Asia/Irkutsk': ru_pre_dst_change,
+ 'Asia/Yakutsk': ru_pre_dst_change,
+ 'Asia/Vladivostok': ru_pre_dst_change,
+ 'Asia/Baku': new Date(2013, 2, 31, 4, 0, 0),
+ 'Asia/Yerevan': new Date(2013, 2, 31, 3, 0, 0),
+ 'Asia/Kamchatka': ru_pre_dst_change,
+ 'Asia/Gaza': new Date(2010, 2, 27, 4, 0, 0),
+ 'Africa/Cairo': new Date(2010, 4, 1, 3, 0, 0),
+ 'Europe/Minsk': ru_pre_dst_change,
+ 'Pacific/Apia': new Date(2010, 10, 1, 1, 0, 0, 0),
+ 'Pacific/Fiji': new Date(2010, 11, 1, 0, 0, 0),
+ 'Australia/Perth': new Date(2008, 10, 1, 1, 0, 0, 0)
+ };
+
+ return dst_starts[tz_name];
+ };
+
+ return {
+ determine: determine,
+ date_is_dst: date_is_dst,
+ dst_start_for: dst_start_for
+ };
+ }());
+
+ /**
+ * Simple object to perform ambiguity check and to return name of time zone.
+ */
+ jstz.TimeZone = function (tz_name) {
+ 'use strict';
+ /**
+ * The keys in this object are timezones that we know may be ambiguous after
+ * a preliminary scan through the olson_tz object.
+ *
+ * The array of timezones to compare must be in the order that daylight savings
+ * starts for the regions.
+ */
+ var AMBIGUITIES = {
+ 'America/Denver': ['America/Denver', 'America/Mazatlan'],
+ 'America/Chicago': ['America/Chicago', 'America/Mexico_City'],
+ 'America/Santiago': ['America/Santiago', 'America/Asuncion', 'America/Campo_Grande'],
+ 'America/Montevideo': ['America/Montevideo', 'America/Sao_Paulo'],
+ 'Asia/Beirut': ['Asia/Amman', 'Asia/Jerusalem', 'Asia/Beirut', 'Europe/Helsinki','Asia/Damascus'],
+ 'Pacific/Auckland': ['Pacific/Auckland', 'Pacific/Fiji'],
+ 'America/Los_Angeles': ['America/Los_Angeles', 'America/Santa_Isabel'],
+ 'America/New_York': ['America/Havana', 'America/New_York'],
+ 'America/Halifax': ['America/Goose_Bay', 'America/Halifax'],
+ 'America/Godthab': ['America/Miquelon', 'America/Godthab'],
+ 'Asia/Dubai': ['Europe/Moscow'],
+ 'Asia/Dhaka': ['Asia/Yekaterinburg'],
+ 'Asia/Jakarta': ['Asia/Omsk'],
+ 'Asia/Shanghai': ['Asia/Krasnoyarsk', 'Australia/Perth'],
+ 'Asia/Tokyo': ['Asia/Irkutsk'],
+ 'Australia/Brisbane': ['Asia/Yakutsk'],
+ 'Pacific/Noumea': ['Asia/Vladivostok'],
+ 'Pacific/Tarawa': ['Asia/Kamchatka', 'Pacific/Fiji'],
+ 'Pacific/Tongatapu': ['Pacific/Apia'],
+ 'Asia/Baghdad': ['Europe/Minsk'],
+ 'Asia/Baku': ['Asia/Yerevan','Asia/Baku'],
+ 'Africa/Johannesburg': ['Asia/Gaza', 'Africa/Cairo']
+ },
+
+ timezone_name = tz_name,
+
+ /**
+ * Checks if a timezone has possible ambiguities. I.e timezones that are similar.
+ *
+ * For example, if the preliminary scan determines that we're in America/Denver.
+ * We double check here that we're really there and not in America/Mazatlan.
+ *
+ * This is done by checking known dates for when daylight savings start for different
+ * timezones during 2010 and 2011.
+ */
+ ambiguity_check = function () {
+ var ambiguity_list = AMBIGUITIES[timezone_name],
+ length = ambiguity_list.length,
+ i = 0,
+ tz = ambiguity_list[0];
+
+ for (; i < length; i += 1) {
+ tz = ambiguity_list[i];
+
+ if (jstz.date_is_dst(jstz.dst_start_for(tz))) {
+ timezone_name = tz;
+ return;
+ }
+ }
+ },
+
+ /**
+ * Checks if it is possible that the timezone is ambiguous.
+ */
+ is_ambiguous = function () {
+ return typeof (AMBIGUITIES[timezone_name]) !== 'undefined';
+ };
+
+ if (is_ambiguous()) {
+ ambiguity_check();
+ }
+
+ return {
+ name: function () {
+ return timezone_name;
+ }
+ };
+ };
+
+ jstz.olson = {};
+
+ /*
+ * The keys in this dictionary are comma separated as such:
+ *
+ * First the offset compared to UTC time in minutes.
+ *
+ * Then a flag which is 0 if the timezone does not take daylight savings into account and 1 if it
+ * does.
+ *
+ * Thirdly an optional 's' signifies that the timezone is in the southern hemisphere,
+ * only interesting for timezones with DST.
+ *
+ * The mapped arrays is used for constructing the jstz.TimeZone object from within
+ * jstz.determine_timezone();
+ */
+ jstz.olson.timezones = {
+ '-720,0' : 'Pacific/Majuro',
+ '-660,0' : 'Pacific/Pago_Pago',
+ '-600,1' : 'America/Adak',
+ '-600,0' : 'Pacific/Honolulu',
+ '-570,0' : 'Pacific/Marquesas',
+ '-540,0' : 'Pacific/Gambier',
+ '-540,1' : 'America/Anchorage',
+ '-480,1' : 'America/Los_Angeles',
+ '-480,0' : 'Pacific/Pitcairn',
+ '-420,0' : 'America/Phoenix',
+ '-420,1' : 'America/Denver',
+ '-360,0' : 'America/Guatemala',
+ '-360,1' : 'America/Chicago',
+ '-360,1,s' : 'Pacific/Easter',
+ '-300,0' : 'America/Bogota',
+ '-300,1' : 'America/New_York',
+ '-270,0' : 'America/Caracas',
+ '-240,1' : 'America/Halifax',
+ '-240,0' : 'America/Santo_Domingo',
+ '-240,1,s' : 'America/Santiago',
+ '-210,1' : 'America/St_Johns',
+ '-180,1' : 'America/Godthab',
+ '-180,0' : 'America/Argentina/Buenos_Aires',
+ '-180,1,s' : 'America/Montevideo',
+ '-120,0' : 'America/Noronha',
+ '-120,1' : 'America/Noronha',
+ '-60,1' : 'Atlantic/Azores',
+ '-60,0' : 'Atlantic/Cape_Verde',
+ '0,0' : 'Etc/UTC',
+ '0,1' : 'Europe/London',
+ '60,1' : 'Europe/Berlin',
+ '60,0' : 'Africa/Lagos',
+ '60,1,s' : 'Africa/Windhoek',
+ '120,1' : 'Asia/Beirut',
+ '120,0' : 'Africa/Johannesburg',
+ '180,0' : 'Asia/Baghdad',
+ '180,1' : 'Europe/Moscow',
+ '210,1' : 'Asia/Tehran',
+ '240,0' : 'Asia/Dubai',
+ '240,1' : 'Asia/Baku',
+ '270,0' : 'Asia/Kabul',
+ '300,1' : 'Asia/Yekaterinburg',
+ '300,0' : 'Asia/Karachi',
+ '330,0' : 'Asia/Kolkata',
+ '345,0' : 'Asia/Kathmandu',
+ '360,0' : 'Asia/Dhaka',
+ '360,1' : 'Asia/Omsk',
+ '390,0' : 'Asia/Rangoon',
+ '420,1' : 'Asia/Krasnoyarsk',
+ '420,0' : 'Asia/Jakarta',
+ '480,0' : 'Asia/Shanghai',
+ '480,1' : 'Asia/Irkutsk',
+ '525,0' : 'Australia/Eucla',
+ '525,1,s' : 'Australia/Eucla',
+ '540,1' : 'Asia/Yakutsk',
+ '540,0' : 'Asia/Tokyo',
+ '570,0' : 'Australia/Darwin',
+ '570,1,s' : 'Australia/Adelaide',
+ '600,0' : 'Australia/Brisbane',
+ '600,1' : 'Asia/Vladivostok',
+ '600,1,s' : 'Australia/Sydney',
+ '630,1,s' : 'Australia/Lord_Howe',
+ '660,1' : 'Asia/Kamchatka',
+ '660,0' : 'Pacific/Noumea',
+ '690,0' : 'Pacific/Norfolk',
+ '720,1,s' : 'Pacific/Auckland',
+ '720,0' : 'Pacific/Tarawa',
+ '765,1,s' : 'Pacific/Chatham',
+ '780,0' : 'Pacific/Tongatapu',
+ '780,1,s' : 'Pacific/Apia',
+ '840,0' : 'Pacific/Kiritimati'
+ };
+
+ if (typeof exports !== 'undefined') {
+ exports.jstz = jstz;
+ } else {
+ root.jstz = jstz;
+ }
+})(this);
diff --git a/core/vendor/moment/.bower.json b/core/vendor/moment/.bower.json
new file mode 100644
index 00000000000..e9bdc9bda6f
--- /dev/null
+++ b/core/vendor/moment/.bower.json
@@ -0,0 +1,30 @@
+{
+ "name": "moment",
+ "version": "2.8.4",
+ "main": "moment.js",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests",
+ "tasks",
+ "component.json",
+ "composer.json",
+ "CONTRIBUTING.md",
+ "ender.js",
+ "Gruntfile.js",
+ "package.js",
+ "package.json"
+ ],
+ "homepage": "https://github.com/moment/moment",
+ "_release": "2.8.4",
+ "_resolution": {
+ "type": "version",
+ "tag": "2.8.4",
+ "commit": "7ae59de2fc3a1298ae829f6369fe3589b2cd87f8"
+ },
+ "_source": "git://github.com/moment/moment.git",
+ "_target": "~2.8.3",
+ "_originalSource": "moment"
+} \ No newline at end of file
diff --git a/core/vendor/select2/.bower.json b/core/vendor/select2/.bower.json
new file mode 100644
index 00000000000..0c915721f10
--- /dev/null
+++ b/core/vendor/select2/.bower.json
@@ -0,0 +1,24 @@
+{
+ "name": "select2",
+ "version": "3.4.8",
+ "main": [
+ "select2.js",
+ "select2.css",
+ "select2.png",
+ "select2x2.png",
+ "select2-spinner.gif"
+ ],
+ "dependencies": {
+ "jquery": ">= 1.7.1"
+ },
+ "homepage": "https://github.com/ivaynberg/select2",
+ "_release": "3.4.8",
+ "_resolution": {
+ "type": "version",
+ "tag": "3.4.8",
+ "commit": "ee0f36a47e2133b23330fbec740b2d3a17a0d9c2"
+ },
+ "_source": "git://github.com/ivaynberg/select2.git",
+ "_target": "~3.4.8",
+ "_originalSource": "select2"
+} \ No newline at end of file
diff --git a/core/vendor/snapjs/.bower.json b/core/vendor/snapjs/.bower.json
new file mode 100644
index 00000000000..b10afbb2d87
--- /dev/null
+++ b/core/vendor/snapjs/.bower.json
@@ -0,0 +1,31 @@
+{
+ "name": "Snap.js",
+ "description": "A Library for creating beautiful mobile shelfs in Javascript (Facebook and Path style side menus)",
+ "version": "2.0.0-rc1",
+ "author": "Jacob Kelley <jakie8@gmail.com>",
+ "keywords": [
+ "mobile shelfs",
+ "nav",
+ "menu",
+ "mobile",
+ "side menu"
+ ],
+ "license": "MIT",
+ "main": [
+ "./dist/latest/snap.js",
+ "./dist/latest/snap.css"
+ ],
+ "scripts": [
+ "snap.js"
+ ],
+ "homepage": "https://github.com/jakiestfu/Snap.js",
+ "_release": "2.0.0-rc1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.0.0-rc1",
+ "commit": "15c77da330d9e8ca580a922bc748d88553838a73"
+ },
+ "_source": "git://github.com/jakiestfu/Snap.js.git",
+ "_target": "~2.0.0-rc1",
+ "_originalSource": "snapjs"
+} \ No newline at end of file
diff --git a/core/vendor/strengthify/.bower.json b/core/vendor/strengthify/.bower.json
new file mode 100644
index 00000000000..abba0d7e00e
--- /dev/null
+++ b/core/vendor/strengthify/.bower.json
@@ -0,0 +1,19 @@
+{
+ "name": "strengthify",
+ "homepage": "https://github.com/MorrisJobke/strengthify",
+ "authors": [
+ "Morris Jobke <hey@morrisjobke.de>"
+ ],
+ "description": "Combine jQuery and zxcvbn to create a password strength meter.",
+ "main": "jquery.strengthify.js",
+ "license": "MIT",
+ "_release": "f1dd3eaf28",
+ "_resolution": {
+ "type": "branch",
+ "branch": "master",
+ "commit": "f1dd3eaf289be559885325a6585f6dd6ae2fa8c3"
+ },
+ "_source": "git://github.com/MorrisJobke/strengthify.git",
+ "_target": "*",
+ "_originalSource": "strengthify"
+} \ No newline at end of file
diff --git a/core/vendor/underscore/.bower.json b/core/vendor/underscore/.bower.json
new file mode 100644
index 00000000000..2389206fd47
--- /dev/null
+++ b/core/vendor/underscore/.bower.json
@@ -0,0 +1,33 @@
+{
+ "name": "underscore",
+ "version": "1.6.0",
+ "main": "underscore.js",
+ "keywords": [
+ "util",
+ "functional",
+ "server",
+ "client",
+ "browser"
+ ],
+ "ignore": [
+ "underscore-min.js",
+ "docs",
+ "test",
+ "*.yml",
+ "*.map",
+ "CNAME",
+ "index.html",
+ "favicon.ico",
+ "CONTRIBUTING.md"
+ ],
+ "homepage": "https://github.com/jashkenas/underscore",
+ "_release": "1.6.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "1.6.0",
+ "commit": "1f4bf626f23a99f7a676f5076dc1b1475554c8f7"
+ },
+ "_source": "git://github.com/jashkenas/underscore.git",
+ "_target": "~1.6.0",
+ "_originalSource": "underscore"
+} \ No newline at end of file
diff --git a/core/vendor/zxcvbn/.bower.json b/core/vendor/zxcvbn/.bower.json
new file mode 100644
index 00000000000..8c86cd8c0e4
--- /dev/null
+++ b/core/vendor/zxcvbn/.bower.json
@@ -0,0 +1,14 @@
+{
+ "name": "zxcvbn",
+ "main": "zxcvbn.js",
+ "homepage": "https://github.com/lowe/zxcvbn",
+ "_release": "f2a8cda13d",
+ "_resolution": {
+ "type": "branch",
+ "branch": "master",
+ "commit": "f2a8cda13d247f4956d3334ee7cbae80a2c61a97"
+ },
+ "_source": "git://github.com/lowe/zxcvbn.git",
+ "_target": "*",
+ "_originalSource": "zxcvbn"
+} \ No newline at end of file
diff --git a/lib/base.php b/lib/base.php
index 5c33be351a4..74b668551ab 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -188,9 +188,9 @@ class OC {
public static function checkConfig() {
$l = \OC::$server->getL10N('lib');
- if (file_exists(self::$configDir . "/config.php")
- and !is_writable(self::$configDir . "/config.php")
- ) {
+ $configFileWritable = file_exists(self::$configDir . "/config.php") && is_writable(self::$configDir . "/config.php");
+ if (!$configFileWritable && !OC_Helper::isReadOnlyConfigEnabled()
+ || !$configFileWritable && \OCP\Util::needUpgrade()) {
if (self::$CLI) {
echo $l->t('Cannot write into "config" directory!')."\n";
echo $l->t('This can usually be fixed by giving the webserver write access to the config directory')."\n";
@@ -466,7 +466,7 @@ class OC {
}
// setup the basic server
- self::$server = new \OC\Server();
+ self::$server = new \OC\Server(\OC::$WEBROOT);
\OC::$server->getEventLogger()->log('autoloader', 'Autoloader', $loaderStart, $loaderEnd);
\OC::$server->getEventLogger()->start('boot', 'Initialize');
diff --git a/lib/l10n/ast.js b/lib/l10n/ast.js
index 7c1dd6ed304..f1d66a1d91a 100644
--- a/lib/l10n/ast.js
+++ b/lib/l10n/ast.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Davezu esto pue iguase %sdándo-y al sirvidor web accesu d'escritura al direutoriu de configuración%s.",
"Sample configuration detected" : "Configuración d'amuesa detectada",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Detectose que la configuración d'amuesa copiose. Esto pue encaboxar la instalación y dexala ensín soporte. Llee la documentación enantes de facer cambéos en config.php",
+ "PHP %s or higher is required." : "Necesítase PHP %s o superior",
"Help" : "Ayuda",
"Personal" : "Personal",
"Settings" : "Axustes",
@@ -103,7 +104,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Instala ún d'estos locales nel to sistema y reanicia'l sirvidor web",
"Please ask your server administrator to install the module." : "Por favor, entrúga-y al to alministrador del sirvidor pa instalar el módulu.",
"PHP module %s not installed." : "Nun ta instaláu'l módulu PHP %s",
- "PHP %s or higher is required." : "Necesítase PHP %s o superior",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Por favor, entrúga-y al to alministrador del sirvidor p'anovar PHP a la cabera versión. La to versión PHP nun ta sofitada por ownCloud y la comunidá PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Ta habilitáu'l mou seguru de PHP. ownCloud requier que tea deshabilitáu pa furrular afayadízamente",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Mou seguru de PHP ye un entornu en desusu que tien de desactivase. Contauta col alministrador del sirvidor pa desactivalu en php.ini o na configuración del sirvidor web.",
diff --git a/lib/l10n/ast.json b/lib/l10n/ast.json
index 8585975ac12..fcc52e8c679 100644
--- a/lib/l10n/ast.json
+++ b/lib/l10n/ast.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Davezu esto pue iguase %sdándo-y al sirvidor web accesu d'escritura al direutoriu de configuración%s.",
"Sample configuration detected" : "Configuración d'amuesa detectada",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Detectose que la configuración d'amuesa copiose. Esto pue encaboxar la instalación y dexala ensín soporte. Llee la documentación enantes de facer cambéos en config.php",
+ "PHP %s or higher is required." : "Necesítase PHP %s o superior",
"Help" : "Ayuda",
"Personal" : "Personal",
"Settings" : "Axustes",
@@ -101,7 +102,6 @@
"Please install one of these locales on your system and restart your webserver." : "Instala ún d'estos locales nel to sistema y reanicia'l sirvidor web",
"Please ask your server administrator to install the module." : "Por favor, entrúga-y al to alministrador del sirvidor pa instalar el módulu.",
"PHP module %s not installed." : "Nun ta instaláu'l módulu PHP %s",
- "PHP %s or higher is required." : "Necesítase PHP %s o superior",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Por favor, entrúga-y al to alministrador del sirvidor p'anovar PHP a la cabera versión. La to versión PHP nun ta sofitada por ownCloud y la comunidá PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Ta habilitáu'l mou seguru de PHP. ownCloud requier que tea deshabilitáu pa furrular afayadízamente",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Mou seguru de PHP ye un entornu en desusu que tien de desactivase. Contauta col alministrador del sirvidor pa desactivalu en php.ini o na configuración del sirvidor web.",
diff --git a/lib/l10n/bg_BG.js b/lib/l10n/bg_BG.js
index a0c0dc3b8e7..ab1da741b91 100644
--- a/lib/l10n/bg_BG.js
+++ b/lib/l10n/bg_BG.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Това обикновено може да бъде оправено като %s даде разрешение на уеб сървъра да записва в config папката %s.",
"Sample configuration detected" : "Открита е примерна конфигурация",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Усетено беше че примерната конфигурация е копирана. Това може да развли инсталацията ти и не се поддържа. Моля, прочети документацията преди да правиш промени на config.php",
+ "PHP %s or higher is required." : "Изисква се PHP %s или по-нова.",
"Help" : "Помощ",
"Personal" : "Лични",
"Settings" : "Настройки",
@@ -105,7 +106,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Моля, инсталирай едно от следните език-държава на сървъра и рестартирай уеб сървъра.",
"Please ask your server administrator to install the module." : "Моля, поискай твоят администратор да инсталира модула.",
"PHP module %s not installed." : "PHP модулът %s не е инсталиран.",
- "PHP %s or higher is required." : "Изисква се PHP %s или по-нова.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Моля, поискай твоят администратор да обнови PHP до най-новата верския. Твоята PHP версия вече не се поддържа от ownCloud и PHP общността.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode е включен. ownCloud изисква този режим да бъде изключен, за да функионира нормално.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode е непропръчителна и общо взето безсмислена настройка и трябва да бъде изключена. Моля, поискай твоя администратор да я изключи ви php.ini или в конфигурацията на уве сървъра.",
diff --git a/lib/l10n/bg_BG.json b/lib/l10n/bg_BG.json
index aedb28be19e..137f6d20496 100644
--- a/lib/l10n/bg_BG.json
+++ b/lib/l10n/bg_BG.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Това обикновено може да бъде оправено като %s даде разрешение на уеб сървъра да записва в config папката %s.",
"Sample configuration detected" : "Открита е примерна конфигурация",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Усетено беше че примерната конфигурация е копирана. Това може да развли инсталацията ти и не се поддържа. Моля, прочети документацията преди да правиш промени на config.php",
+ "PHP %s or higher is required." : "Изисква се PHP %s или по-нова.",
"Help" : "Помощ",
"Personal" : "Лични",
"Settings" : "Настройки",
@@ -103,7 +104,6 @@
"Please install one of these locales on your system and restart your webserver." : "Моля, инсталирай едно от следните език-държава на сървъра и рестартирай уеб сървъра.",
"Please ask your server administrator to install the module." : "Моля, поискай твоят администратор да инсталира модула.",
"PHP module %s not installed." : "PHP модулът %s не е инсталиран.",
- "PHP %s or higher is required." : "Изисква се PHP %s или по-нова.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Моля, поискай твоят администратор да обнови PHP до най-новата верския. Твоята PHP версия вече не се поддържа от ownCloud и PHP общността.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode е включен. ownCloud изисква този режим да бъде изключен, за да функионира нормално.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode е непропръчителна и общо взето безсмислена настройка и трябва да бъде изключена. Моля, поискай твоя администратор да я изключи ви php.ini или в конфигурацията на уве сървъра.",
diff --git a/lib/l10n/ca.js b/lib/l10n/ca.js
index d416b93503a..ef9d7a74768 100644
--- a/lib/l10n/ca.js
+++ b/lib/l10n/ca.js
@@ -7,11 +7,13 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Això normalment es pot solucionar donant a %s permís d'escriptura a la carpeta de configuració %s",
"Sample configuration detected" : "Configuració d'exemple detectada",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "S'ha detectat que la configuració d'exemple ha estat copiada. Això no està suportat, i podria corrompre la vostra instalació. Siusplau, llegiu la documentació abans de realitzar canvis a config.php",
+ "PHP %s or higher is required." : "Es requereix PHP %s o superior.",
"Help" : "Ajuda",
"Personal" : "Personal",
"Settings" : "Configuració",
"Users" : "Usuaris",
"Admin" : "Administració",
+ "Recommended" : "Recomanat",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "L'aplicació \\\"%s\\\" no es pot instal·lar perquè no es compatible amb aquesta versió de ownCloud.",
"No app name specified" : "No heu especificat cap nom d'aplicació",
"Unknown filetype" : "Tipus de fitxer desconegut",
@@ -101,7 +103,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Siusplau, instal·li un d'aquests arxius de localització en el seu sistema, i reinicii el seu servidor web.",
"Please ask your server administrator to install the module." : "Demaneu a l'administrador del sistema que instal·li el mòdul.",
"PHP module %s not installed." : "El mòdul PHP %s no està instal·lat.",
- "PHP %s or higher is required." : "Es requereix PHP %s o superior.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Demaneu a l'administrador que actualitzi PHP a l'última versió. La versió que teniu instal·lada no té suport d'ownCloud ni de la comunitat PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "El mode segur de PHP està activat. OwnCloud requereix que es desactivi per funcionar correctament.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "El mode segur de PHP està desfasat i és principalment inútil i hauria de desactivar-se. Demaneu a l'administrador que el desactivi a php.ini o a la configuració del servidor web.",
diff --git a/lib/l10n/ca.json b/lib/l10n/ca.json
index 2698ed1846f..0277d0220f7 100644
--- a/lib/l10n/ca.json
+++ b/lib/l10n/ca.json
@@ -5,11 +5,13 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Això normalment es pot solucionar donant a %s permís d'escriptura a la carpeta de configuració %s",
"Sample configuration detected" : "Configuració d'exemple detectada",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "S'ha detectat que la configuració d'exemple ha estat copiada. Això no està suportat, i podria corrompre la vostra instalació. Siusplau, llegiu la documentació abans de realitzar canvis a config.php",
+ "PHP %s or higher is required." : "Es requereix PHP %s o superior.",
"Help" : "Ajuda",
"Personal" : "Personal",
"Settings" : "Configuració",
"Users" : "Usuaris",
"Admin" : "Administració",
+ "Recommended" : "Recomanat",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." : "L'aplicació \\\"%s\\\" no es pot instal·lar perquè no es compatible amb aquesta versió de ownCloud.",
"No app name specified" : "No heu especificat cap nom d'aplicació",
"Unknown filetype" : "Tipus de fitxer desconegut",
@@ -99,7 +101,6 @@
"Please install one of these locales on your system and restart your webserver." : "Siusplau, instal·li un d'aquests arxius de localització en el seu sistema, i reinicii el seu servidor web.",
"Please ask your server administrator to install the module." : "Demaneu a l'administrador del sistema que instal·li el mòdul.",
"PHP module %s not installed." : "El mòdul PHP %s no està instal·lat.",
- "PHP %s or higher is required." : "Es requereix PHP %s o superior.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Demaneu a l'administrador que actualitzi PHP a l'última versió. La versió que teniu instal·lada no té suport d'ownCloud ni de la comunitat PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "El mode segur de PHP està activat. OwnCloud requereix que es desactivi per funcionar correctament.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "El mode segur de PHP està desfasat i és principalment inútil i hauria de desactivar-se. Demaneu a l'administrador que el desactivi a php.ini o a la configuració del servidor web.",
diff --git a/lib/l10n/cs_CZ.js b/lib/l10n/cs_CZ.js
index b4419c8ef99..4f427778861 100644
--- a/lib/l10n/cs_CZ.js
+++ b/lib/l10n/cs_CZ.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "To lze obvykle vyřešit %spovolením zápisu webovému serveru do konfiguračního adresáře%s.",
"Sample configuration detected" : "Byla detekována vzorová konfigurace",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Pravděpodobně byla zkopírována konfigurační nastavení ze vzorových souborů. Toto není podporováno a může poškodit vaši instalaci. Nahlédněte prosím do dokumentace před prováděním změn v souboru config.php",
+ "PHP %s or higher is required." : "Je vyžadováno PHP %s nebo vyšší.",
"Help" : "Nápověda",
"Personal" : "Osobní",
"Settings" : "Nastavení",
@@ -105,7 +106,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Prosím nainstalujte alespoň jeden z těchto jazyků do svého systému a restartujte webový server.",
"Please ask your server administrator to install the module." : "Požádejte svého správce systému o instalaci tohoto modulu.",
"PHP module %s not installed." : "PHP modul %s není nainstalován.",
- "PHP %s or higher is required." : "Je vyžadováno PHP %s nebo vyšší.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Požádejte svého správce systému o aktualizaci PHP na nejnovější verzi. Vaše verze PHP již není podporována komunitami ownCloud a PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Je zapnut PHP Safe Mode. Pro správnou funkčnost ownCloud je třeba toto vypnout.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode je zastaralé a většinou zbytečné nastavení, které je třeba vypnout. Požádejte prosím správce systému o jeho zákaz v php.ini nebo v konfiguraci webového serveru.",
diff --git a/lib/l10n/cs_CZ.json b/lib/l10n/cs_CZ.json
index a487b849291..0cafc263cd7 100644
--- a/lib/l10n/cs_CZ.json
+++ b/lib/l10n/cs_CZ.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "To lze obvykle vyřešit %spovolením zápisu webovému serveru do konfiguračního adresáře%s.",
"Sample configuration detected" : "Byla detekována vzorová konfigurace",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Pravděpodobně byla zkopírována konfigurační nastavení ze vzorových souborů. Toto není podporováno a může poškodit vaši instalaci. Nahlédněte prosím do dokumentace před prováděním změn v souboru config.php",
+ "PHP %s or higher is required." : "Je vyžadováno PHP %s nebo vyšší.",
"Help" : "Nápověda",
"Personal" : "Osobní",
"Settings" : "Nastavení",
@@ -103,7 +104,6 @@
"Please install one of these locales on your system and restart your webserver." : "Prosím nainstalujte alespoň jeden z těchto jazyků do svého systému a restartujte webový server.",
"Please ask your server administrator to install the module." : "Požádejte svého správce systému o instalaci tohoto modulu.",
"PHP module %s not installed." : "PHP modul %s není nainstalován.",
- "PHP %s or higher is required." : "Je vyžadováno PHP %s nebo vyšší.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Požádejte svého správce systému o aktualizaci PHP na nejnovější verzi. Vaše verze PHP již není podporována komunitami ownCloud a PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Je zapnut PHP Safe Mode. Pro správnou funkčnost ownCloud je třeba toto vypnout.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode je zastaralé a většinou zbytečné nastavení, které je třeba vypnout. Požádejte prosím správce systému o jeho zákaz v php.ini nebo v konfiguraci webového serveru.",
diff --git a/lib/l10n/da.js b/lib/l10n/da.js
index af85c3e93d1..f8154f68bdd 100644
--- a/lib/l10n/da.js
+++ b/lib/l10n/da.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dette kan som regel rettes ved at %sgive webserveren skriveadgang til config-mappen%s.",
"Sample configuration detected" : "Eksempel for konfiguration registreret",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Der er registreret at eksempel for konfiguration er blevet kopieret. Dette kan ødelægge din installation og understøttes ikke. Læs venligst dokumentationen før der foretages ændringer i config.php",
+ "PHP %s or higher is required." : "Der kræves PHP %s eller nyere.",
"Help" : "Hjælp",
"Personal" : "Personligt",
"Settings" : "Indstillinger",
@@ -30,7 +31,7 @@ OC.L10N.register(
"App does not provide an info.xml file" : "Der følger ingen info.xml-fil med appen",
"App can't be installed because of not allowed code in the App" : "Appen kan ikke installeres, da den indeholder ikke-tilladt kode",
"App can't be installed because it is not compatible with this version of ownCloud" : "Appen kan ikke installeres, da den ikke er kompatibel med denne version af ownCloud.",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Appen kan ikke installeres, da den indeholder taget\n<shipped>\n\ntrue\n</shipped>\n\nhvilket ikke er tilladt for ikke-medfølgende apps",
+ "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Appen kan ikke installeres, da den indeholder mærket <shipped>true</shipped>, hvilket ikke er tilladt for ikke-medfølgende apps",
"App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "App kan ikke installeres, da versionen i info.xml/version ikke er den samme som versionen rapporteret fra app-storen",
"Application is not enabled" : "Programmet er ikke aktiveret",
"Authentication error" : "Adgangsfejl",
@@ -105,7 +106,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Installér venligst én af disse lokaliteter på dit system, og genstart din webserver.",
"Please ask your server administrator to install the module." : "Du bedes anmode din serveradministrator om at installere modulet.",
"PHP module %s not installed." : "PHP-modulet %s er ikke installeret.",
- "PHP %s or higher is required." : "Der kræves PHP %s eller nyere.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Bed venligst din serveradministrator om at opdatere PHP til seneste version. Din PHP-version understøttes ikke længere af ownCload og PHP-fællesskabet.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode er slået til. ownCload kræver at denne er slået fra, for at fungere ordentligt.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode er udgået og stort set en ubrugelig indstilling, der bør slås fra. Spørg venligst din serveradministrator om at slå den fra i php.ini eller din webeserver-konfiguration.",
diff --git a/lib/l10n/da.json b/lib/l10n/da.json
index 59ff0e87b98..39d2a4e4902 100644
--- a/lib/l10n/da.json
+++ b/lib/l10n/da.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dette kan som regel rettes ved at %sgive webserveren skriveadgang til config-mappen%s.",
"Sample configuration detected" : "Eksempel for konfiguration registreret",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Der er registreret at eksempel for konfiguration er blevet kopieret. Dette kan ødelægge din installation og understøttes ikke. Læs venligst dokumentationen før der foretages ændringer i config.php",
+ "PHP %s or higher is required." : "Der kræves PHP %s eller nyere.",
"Help" : "Hjælp",
"Personal" : "Personligt",
"Settings" : "Indstillinger",
@@ -28,7 +29,7 @@
"App does not provide an info.xml file" : "Der følger ingen info.xml-fil med appen",
"App can't be installed because of not allowed code in the App" : "Appen kan ikke installeres, da den indeholder ikke-tilladt kode",
"App can't be installed because it is not compatible with this version of ownCloud" : "Appen kan ikke installeres, da den ikke er kompatibel med denne version af ownCloud.",
- "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Appen kan ikke installeres, da den indeholder taget\n<shipped>\n\ntrue\n</shipped>\n\nhvilket ikke er tilladt for ikke-medfølgende apps",
+ "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Appen kan ikke installeres, da den indeholder mærket <shipped>true</shipped>, hvilket ikke er tilladt for ikke-medfølgende apps",
"App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "App kan ikke installeres, da versionen i info.xml/version ikke er den samme som versionen rapporteret fra app-storen",
"Application is not enabled" : "Programmet er ikke aktiveret",
"Authentication error" : "Adgangsfejl",
@@ -103,7 +104,6 @@
"Please install one of these locales on your system and restart your webserver." : "Installér venligst én af disse lokaliteter på dit system, og genstart din webserver.",
"Please ask your server administrator to install the module." : "Du bedes anmode din serveradministrator om at installere modulet.",
"PHP module %s not installed." : "PHP-modulet %s er ikke installeret.",
- "PHP %s or higher is required." : "Der kræves PHP %s eller nyere.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Bed venligst din serveradministrator om at opdatere PHP til seneste version. Din PHP-version understøttes ikke længere af ownCload og PHP-fællesskabet.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode er slået til. ownCload kræver at denne er slået fra, for at fungere ordentligt.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode er udgået og stort set en ubrugelig indstilling, der bør slås fra. Spørg venligst din serveradministrator om at slå den fra i php.ini eller din webeserver-konfiguration.",
diff --git a/lib/l10n/de.js b/lib/l10n/de.js
index 215052da7f9..8417825b4a9 100644
--- a/lib/l10n/de.js
+++ b/lib/l10n/de.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dies kann normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das config-Verzeichnis %s gegeben wird.",
"Sample configuration detected" : "Beispielkonfiguration gefunden",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Es wurde festgestellt, dass die Beispielkonfiguration kopiert wurde, Dies wird nicht unterstützt kann zum Abruch Ihrer Installation führen. Bitte lese die Dokumentation vor der Änderung an der config.php.",
+ "PHP %s or higher is required." : "PHP %s oder höher wird benötigt.",
"Help" : "Hilfe",
"Personal" : "Persönlich",
"Settings" : "Einstellungen",
@@ -105,7 +106,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Bitte installiere eine dieser Sprachen auf Deinem System und starte den Webserver neu.",
"Please ask your server administrator to install the module." : "Bitte frage, für die Installation des Moduls, Deinen Server-Administrator.",
"PHP module %s not installed." : "PHP-Modul %s nicht installiert.",
- "PHP %s or higher is required." : "PHP %s oder höher wird benötigt.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Bitte frage zur Aktualisierung von PHP auf die letzte Version Deinen Server-Administrator. Deine PHP-Version wird nicht länger durch ownCloud und der PHP-Gemeinschaft unterstützt.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP-Sicherheitsmodus ist aktiviert. ownCloud benötigt für eine korrekte Funktion eine Deaktivierung von diesem Modus.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Der PHP-Sicherheitsmodus ist eine veraltete und meist nutzlose Einstellung, die deaktiviert werden sollte. Bitte frage Deinen Server-Administrator zur Deaktivierung in der php.ini oder Deiner Webserver-Konfiguration.",
diff --git a/lib/l10n/de.json b/lib/l10n/de.json
index 086fc888986..3ef5638db98 100644
--- a/lib/l10n/de.json
+++ b/lib/l10n/de.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dies kann normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das config-Verzeichnis %s gegeben wird.",
"Sample configuration detected" : "Beispielkonfiguration gefunden",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Es wurde festgestellt, dass die Beispielkonfiguration kopiert wurde, Dies wird nicht unterstützt kann zum Abruch Ihrer Installation führen. Bitte lese die Dokumentation vor der Änderung an der config.php.",
+ "PHP %s or higher is required." : "PHP %s oder höher wird benötigt.",
"Help" : "Hilfe",
"Personal" : "Persönlich",
"Settings" : "Einstellungen",
@@ -103,7 +104,6 @@
"Please install one of these locales on your system and restart your webserver." : "Bitte installiere eine dieser Sprachen auf Deinem System und starte den Webserver neu.",
"Please ask your server administrator to install the module." : "Bitte frage, für die Installation des Moduls, Deinen Server-Administrator.",
"PHP module %s not installed." : "PHP-Modul %s nicht installiert.",
- "PHP %s or higher is required." : "PHP %s oder höher wird benötigt.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Bitte frage zur Aktualisierung von PHP auf die letzte Version Deinen Server-Administrator. Deine PHP-Version wird nicht länger durch ownCloud und der PHP-Gemeinschaft unterstützt.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP-Sicherheitsmodus ist aktiviert. ownCloud benötigt für eine korrekte Funktion eine Deaktivierung von diesem Modus.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Der PHP-Sicherheitsmodus ist eine veraltete und meist nutzlose Einstellung, die deaktiviert werden sollte. Bitte frage Deinen Server-Administrator zur Deaktivierung in der php.ini oder Deiner Webserver-Konfiguration.",
diff --git a/lib/l10n/de_DE.js b/lib/l10n/de_DE.js
index 6d99b090604..087d771ee66 100644
--- a/lib/l10n/de_DE.js
+++ b/lib/l10n/de_DE.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dies kann normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das config-Verzeichnis %s gegeben wird.",
"Sample configuration detected" : "Beispielkonfiguration gefunden",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Es wurde festgestellt, dass die Beispielkonfiguration kopiert wurde, Dies wird nicht unterstützt kann zum Abruch Ihrer Installation führen. Bitte lesen Sie die Dokumentation vor der Änderung an der config.php.",
+ "PHP %s or higher is required." : "PHP %s oder höher wird benötigt.",
"Help" : "Hilfe",
"Personal" : "Persönlich",
"Settings" : "Einstellungen",
@@ -105,7 +106,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Bitte installieren Sie eine dieser Sprachen auf Ihrem System und starten Sie den Webserver neu.",
"Please ask your server administrator to install the module." : "Bitte fragen Sie, für die Installation des Moduls, Ihren Server-Administrator.",
"PHP module %s not installed." : "PHP-Modul %s nicht installiert.",
- "PHP %s or higher is required." : "PHP %s oder höher wird benötigt.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Bitte fragen Sie zur Aktualisierung von PHP auf die letzte Version Ihren Server-Administrator. Ihre PHP-Version wird nicht länger durch ownCloud und der PHP-Gemeinschaft unterstützt.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP-Sicherheitsmodus ist aktiviert. ownCloud benötigt für eine korrekte Funktion eine Deaktivierung von diesem Modus.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Der PHP-Sicherheitsmodus ist eine veraltete und meist nutzlose Einstellung, die deaktiviert werden sollte. Bitte fragen Sie Ihren Server-Administrator zur Deaktivierung in der php.ini oder Ihrer Webserver-Konfiguration.",
diff --git a/lib/l10n/de_DE.json b/lib/l10n/de_DE.json
index fd16f063b78..f67a201d32e 100644
--- a/lib/l10n/de_DE.json
+++ b/lib/l10n/de_DE.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dies kann normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das config-Verzeichnis %s gegeben wird.",
"Sample configuration detected" : "Beispielkonfiguration gefunden",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Es wurde festgestellt, dass die Beispielkonfiguration kopiert wurde, Dies wird nicht unterstützt kann zum Abruch Ihrer Installation führen. Bitte lesen Sie die Dokumentation vor der Änderung an der config.php.",
+ "PHP %s or higher is required." : "PHP %s oder höher wird benötigt.",
"Help" : "Hilfe",
"Personal" : "Persönlich",
"Settings" : "Einstellungen",
@@ -103,7 +104,6 @@
"Please install one of these locales on your system and restart your webserver." : "Bitte installieren Sie eine dieser Sprachen auf Ihrem System und starten Sie den Webserver neu.",
"Please ask your server administrator to install the module." : "Bitte fragen Sie, für die Installation des Moduls, Ihren Server-Administrator.",
"PHP module %s not installed." : "PHP-Modul %s nicht installiert.",
- "PHP %s or higher is required." : "PHP %s oder höher wird benötigt.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Bitte fragen Sie zur Aktualisierung von PHP auf die letzte Version Ihren Server-Administrator. Ihre PHP-Version wird nicht länger durch ownCloud und der PHP-Gemeinschaft unterstützt.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP-Sicherheitsmodus ist aktiviert. ownCloud benötigt für eine korrekte Funktion eine Deaktivierung von diesem Modus.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Der PHP-Sicherheitsmodus ist eine veraltete und meist nutzlose Einstellung, die deaktiviert werden sollte. Bitte fragen Sie Ihren Server-Administrator zur Deaktivierung in der php.ini oder Ihrer Webserver-Konfiguration.",
diff --git a/lib/l10n/el.js b/lib/l10n/el.js
index 5d0048837fb..f0643b73e37 100644
--- a/lib/l10n/el.js
+++ b/lib/l10n/el.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Αυτό μπορεί συνήθως να διορθωθεί %sπαρέχοντας δικαιώματα εγγραφής για το φάκελο config στο διακομιστή δικτύου%s.",
"Sample configuration detected" : "Ανιχνεύθηκε δείγμα εγκατάστασης",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Έχει ανιχνευθεί ότι το δείγμα εγκατάστασης έχει αντιγραφεί. Αυτό μπορεί να σπάσει την εγκατάστασή σας και δεν υποστηρίζεται. Παρακαλώ διαβάστε την τεκμηρίωση πριν εκτελέσετε αλλαγές στο config.php",
+ "PHP %s or higher is required." : "PHP %s ή νεώτερη απαιτείται.",
"Help" : "Βοήθεια",
"Personal" : "Προσωπικά",
"Settings" : "Ρυθμίσεις",
@@ -103,7 +104,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Παρακαλώ να εγκαταστήσετε μία από αυτές τις τοπικές ρυθμίσεις στο σύστημά σας και να επανεκκινήσετε τον διακομιστή δικτύου σας.",
"Please ask your server administrator to install the module." : "Παρακαλώ ζητήστε από το διαχειριστή του διακομιστή σας να εγκαταστήσει τη μονάδα.",
"PHP module %s not installed." : "Η μονάδα %s PHP δεν είναι εγκατεστημένη. ",
- "PHP %s or higher is required." : "PHP %s ή νεώτερη απαιτείται.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Παρακαλώ ζητήστε από το διαχειριστή του διακομιστή σας να ενημερώσει τον PHP στη νεώτερη έκδοση. Η έκδοση του PHP σας δεν υποστηρίζεται πλεον από το ownCloud και την κοινότητα PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Η Ασφαλής Λειτουργία PHP έχει ενεργοποιηθεί. Το ownCloud απαιτεί να είναι απενεργοποιημένη για να λειτουργεί σωστά.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Η Ασφαλής Λειτουργεία PHP είναι μια ξεπερασμένη και κατά κύριο λόγο άχρηστη ρύθμιση που θα πρέπει να είναι απενεργοποιημένη. Παρακαλώ ζητήστε από το διαχειριστή του διακομιστή σας να την απενεργοποιήσει στο php.ini ή στις ρυθμίσεις του διακομιστή δικτύου σας.",
diff --git a/lib/l10n/el.json b/lib/l10n/el.json
index 65ff3ab3aa1..b1895fbb79b 100644
--- a/lib/l10n/el.json
+++ b/lib/l10n/el.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Αυτό μπορεί συνήθως να διορθωθεί %sπαρέχοντας δικαιώματα εγγραφής για το φάκελο config στο διακομιστή δικτύου%s.",
"Sample configuration detected" : "Ανιχνεύθηκε δείγμα εγκατάστασης",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Έχει ανιχνευθεί ότι το δείγμα εγκατάστασης έχει αντιγραφεί. Αυτό μπορεί να σπάσει την εγκατάστασή σας και δεν υποστηρίζεται. Παρακαλώ διαβάστε την τεκμηρίωση πριν εκτελέσετε αλλαγές στο config.php",
+ "PHP %s or higher is required." : "PHP %s ή νεώτερη απαιτείται.",
"Help" : "Βοήθεια",
"Personal" : "Προσωπικά",
"Settings" : "Ρυθμίσεις",
@@ -101,7 +102,6 @@
"Please install one of these locales on your system and restart your webserver." : "Παρακαλώ να εγκαταστήσετε μία από αυτές τις τοπικές ρυθμίσεις στο σύστημά σας και να επανεκκινήσετε τον διακομιστή δικτύου σας.",
"Please ask your server administrator to install the module." : "Παρακαλώ ζητήστε από το διαχειριστή του διακομιστή σας να εγκαταστήσει τη μονάδα.",
"PHP module %s not installed." : "Η μονάδα %s PHP δεν είναι εγκατεστημένη. ",
- "PHP %s or higher is required." : "PHP %s ή νεώτερη απαιτείται.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Παρακαλώ ζητήστε από το διαχειριστή του διακομιστή σας να ενημερώσει τον PHP στη νεώτερη έκδοση. Η έκδοση του PHP σας δεν υποστηρίζεται πλεον από το ownCloud και την κοινότητα PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Η Ασφαλής Λειτουργία PHP έχει ενεργοποιηθεί. Το ownCloud απαιτεί να είναι απενεργοποιημένη για να λειτουργεί σωστά.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Η Ασφαλής Λειτουργεία PHP είναι μια ξεπερασμένη και κατά κύριο λόγο άχρηστη ρύθμιση που θα πρέπει να είναι απενεργοποιημένη. Παρακαλώ ζητήστε από το διαχειριστή του διακομιστή σας να την απενεργοποιήσει στο php.ini ή στις ρυθμίσεις του διακομιστή δικτύου σας.",
diff --git a/lib/l10n/en_GB.js b/lib/l10n/en_GB.js
index 9e5400deb2d..ad098f96a77 100644
--- a/lib/l10n/en_GB.js
+++ b/lib/l10n/en_GB.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "This can usually be fixed by %sgiving the webserver write access to the config directory%s.",
"Sample configuration detected" : "Sample configuration detected",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php",
+ "PHP %s or higher is required." : "PHP %s or higher is required.",
"Help" : "Help",
"Personal" : "Personal",
"Settings" : "Settings",
@@ -105,7 +106,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Please install one of these locales on your system and restart your webserver.",
"Please ask your server administrator to install the module." : "Please ask your server administrator to install the module.",
"PHP module %s not installed." : "PHP module %s not installed.",
- "PHP %s or higher is required." : "PHP %s or higher is required.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config.",
diff --git a/lib/l10n/en_GB.json b/lib/l10n/en_GB.json
index e3a44ec8e9b..bdd63ddfa14 100644
--- a/lib/l10n/en_GB.json
+++ b/lib/l10n/en_GB.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "This can usually be fixed by %sgiving the webserver write access to the config directory%s.",
"Sample configuration detected" : "Sample configuration detected",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php",
+ "PHP %s or higher is required." : "PHP %s or higher is required.",
"Help" : "Help",
"Personal" : "Personal",
"Settings" : "Settings",
@@ -103,7 +104,6 @@
"Please install one of these locales on your system and restart your webserver." : "Please install one of these locales on your system and restart your webserver.",
"Please ask your server administrator to install the module." : "Please ask your server administrator to install the module.",
"PHP module %s not installed." : "PHP module %s not installed.",
- "PHP %s or higher is required." : "PHP %s or higher is required.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config.",
diff --git a/lib/l10n/eo.js b/lib/l10n/eo.js
index ea912c1cca0..92c9bf52df5 100644
--- a/lib/l10n/eo.js
+++ b/lib/l10n/eo.js
@@ -2,6 +2,7 @@ OC.L10N.register(
"lib",
{
"See %s" : "Vidi %s",
+ "PHP %s or higher is required." : "PHP %s aŭ pli alta necesas.",
"Help" : "Helpo",
"Personal" : "Persona",
"Settings" : "Agordo",
@@ -50,7 +51,6 @@ OC.L10N.register(
"The username is already being used" : "La uzantonomo jam uzatas",
"Please ask your server administrator to install the module." : "Bonvolu peti vian sistemadministranton, ke ĝi instalu la modulon.",
"PHP module %s not installed." : "La PHP-modulo %s ne instalitas.",
- "PHP %s or higher is required." : "PHP %s aŭ pli alta necesas.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 necesas"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/eo.json b/lib/l10n/eo.json
index 7e1ed7bb813..b1d12a9ce7b 100644
--- a/lib/l10n/eo.json
+++ b/lib/l10n/eo.json
@@ -1,5 +1,6 @@
{ "translations": {
"See %s" : "Vidi %s",
+ "PHP %s or higher is required." : "PHP %s aŭ pli alta necesas.",
"Help" : "Helpo",
"Personal" : "Persona",
"Settings" : "Agordo",
@@ -48,7 +49,6 @@
"The username is already being used" : "La uzantonomo jam uzatas",
"Please ask your server administrator to install the module." : "Bonvolu peti vian sistemadministranton, ke ĝi instalu la modulon.",
"PHP module %s not installed." : "La PHP-modulo %s ne instalitas.",
- "PHP %s or higher is required." : "PHP %s aŭ pli alta necesas.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 necesas"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/es.js b/lib/l10n/es.js
index 9cdd328e974..e332a693b05 100644
--- a/lib/l10n/es.js
+++ b/lib/l10n/es.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Esto puede ser facilmente solucionado, %sdando permisos de escritura al directorio de configuración en el servidor Web%s.",
"Sample configuration detected" : "Ejemplo de configuración detectado",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Se ha detectado que el ejemplo de configuración ha sido copiado. Esto puede arruinar su instalación y es un caso para el que no se brinda soporte. Lea la documentación antes de hacer cambios en config.php",
+ "PHP %s or higher is required." : "Se requiere PHP %s o superior.",
"Help" : "Ayuda",
"Personal" : "Personal",
"Settings" : "Ajustes",
@@ -105,7 +106,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Instale uno de estos idiomas en su sistema y reinicie su servidor web.",
"Please ask your server administrator to install the module." : "Consulte al administrador de su servidor para instalar el módulo.",
"PHP module %s not installed." : "El ódulo PHP %s no está instalado.",
- "PHP %s or higher is required." : "Se requiere PHP %s o superior.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Consulte a su administrador del servidor para actualizar PHP a la versión más reciente. Su versión de PHP ya no es apoyado por ownCloud y la comunidad PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe mode está habilitado. ownCloud requiere que se desactive para que funcione correctamente.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Modo Seguro de PHP es un entorno en desuso y en su mayoría inútil que debe ser desactivada. Contacte al administrador del servidor para desactivarlo en php.ini o en la configuración del servidor web.",
diff --git a/lib/l10n/es.json b/lib/l10n/es.json
index c14b03c15df..be4d69b63cd 100644
--- a/lib/l10n/es.json
+++ b/lib/l10n/es.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Esto puede ser facilmente solucionado, %sdando permisos de escritura al directorio de configuración en el servidor Web%s.",
"Sample configuration detected" : "Ejemplo de configuración detectado",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Se ha detectado que el ejemplo de configuración ha sido copiado. Esto puede arruinar su instalación y es un caso para el que no se brinda soporte. Lea la documentación antes de hacer cambios en config.php",
+ "PHP %s or higher is required." : "Se requiere PHP %s o superior.",
"Help" : "Ayuda",
"Personal" : "Personal",
"Settings" : "Ajustes",
@@ -103,7 +104,6 @@
"Please install one of these locales on your system and restart your webserver." : "Instale uno de estos idiomas en su sistema y reinicie su servidor web.",
"Please ask your server administrator to install the module." : "Consulte al administrador de su servidor para instalar el módulo.",
"PHP module %s not installed." : "El ódulo PHP %s no está instalado.",
- "PHP %s or higher is required." : "Se requiere PHP %s o superior.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Consulte a su administrador del servidor para actualizar PHP a la versión más reciente. Su versión de PHP ya no es apoyado por ownCloud y la comunidad PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe mode está habilitado. ownCloud requiere que se desactive para que funcione correctamente.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Modo Seguro de PHP es un entorno en desuso y en su mayoría inútil que debe ser desactivada. Contacte al administrador del servidor para desactivarlo en php.ini o en la configuración del servidor web.",
diff --git a/lib/l10n/et_EE.js b/lib/l10n/et_EE.js
index 8fbc25c4403..b8a5e326086 100644
--- a/lib/l10n/et_EE.js
+++ b/lib/l10n/et_EE.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Tavaliselt saab selle lahendada %s andes veebiserverile seadete kataloogile \"config\" kirjutusõigused %s",
"Sample configuration detected" : "Tuvastati näidisseaded",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Tuvastati, et kopeeriti näidisseaded. See võib lõhkuda sinu saidi ja see pole toetatud. Palun loe enne faili config.php muutmist dokumentatsiooni",
+ "PHP %s or higher is required." : "PHP %s või uuem on nõutav.",
"Help" : "Abiinfo",
"Personal" : "Isiklik",
"Settings" : "Seaded",
@@ -103,7 +104,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Palun paigalda mõni neist lokaatides oma süsteemi ning taaskäivita veebiserver.",
"Please ask your server administrator to install the module." : "Palu oma serveri haldajal moodul paigadalda.",
"PHP module %s not installed." : "PHP moodulit %s pole paigaldatud.",
- "PHP %s or higher is required." : "PHP %s või uuem on nõutav.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Palu oma serveri haldajal uuendada PHP viimasele versioonile. Sinu PHP versioon pole enam toetatud ownCloud-i ja PHP kogukonna poolt.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode on lubatud. ownCloud vajab normaalseks toimimiseks, et see oleks keelatud.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode on aegunud ja üldiselt kasutu seadistus, mis tuleks keelata. Palu oma serveri haldajal see keelata php.ini failis või veebiserveri seadetes.",
diff --git a/lib/l10n/et_EE.json b/lib/l10n/et_EE.json
index 099000bd74a..d3bdd8ece8c 100644
--- a/lib/l10n/et_EE.json
+++ b/lib/l10n/et_EE.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Tavaliselt saab selle lahendada %s andes veebiserverile seadete kataloogile \"config\" kirjutusõigused %s",
"Sample configuration detected" : "Tuvastati näidisseaded",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Tuvastati, et kopeeriti näidisseaded. See võib lõhkuda sinu saidi ja see pole toetatud. Palun loe enne faili config.php muutmist dokumentatsiooni",
+ "PHP %s or higher is required." : "PHP %s või uuem on nõutav.",
"Help" : "Abiinfo",
"Personal" : "Isiklik",
"Settings" : "Seaded",
@@ -101,7 +102,6 @@
"Please install one of these locales on your system and restart your webserver." : "Palun paigalda mõni neist lokaatides oma süsteemi ning taaskäivita veebiserver.",
"Please ask your server administrator to install the module." : "Palu oma serveri haldajal moodul paigadalda.",
"PHP module %s not installed." : "PHP moodulit %s pole paigaldatud.",
- "PHP %s or higher is required." : "PHP %s või uuem on nõutav.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Palu oma serveri haldajal uuendada PHP viimasele versioonile. Sinu PHP versioon pole enam toetatud ownCloud-i ja PHP kogukonna poolt.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode on lubatud. ownCloud vajab normaalseks toimimiseks, et see oleks keelatud.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode on aegunud ja üldiselt kasutu seadistus, mis tuleks keelata. Palu oma serveri haldajal see keelata php.ini failis või veebiserveri seadetes.",
diff --git a/lib/l10n/eu.js b/lib/l10n/eu.js
index b5b6b7d364b..a312260ce51 100644
--- a/lib/l10n/eu.js
+++ b/lib/l10n/eu.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Hau normalean konpondu daiteke %sweb zerbitzarira config karpetan idazteko baimenak emanez%s.",
"Sample configuration detected" : "Adibide-ezarpena detektatua",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Detektatu da adibide-ezarpena kopiatu dela. Honek zure instalazioa apur dezake eta ez da onartzen. Irakurri dokumentazioa config.php fitxategia aldatu aurretik.",
+ "PHP %s or higher is required." : "PHP %s edo berriagoa behar da.",
"Help" : "Laguntza",
"Personal" : "Pertsonala",
"Settings" : "Ezarpenak",
@@ -103,7 +104,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Instalatu hauetako lokal bat zure sisteman eta berrabiarazi zure web zerbitzaria.",
"Please ask your server administrator to install the module." : "Mesedez eskatu zure zerbitzariaren kudeatzaileari modulua instala dezan.",
"PHP module %s not installed." : "PHPren %s modulua ez dago instalaturik.",
- "PHP %s or higher is required." : "PHP %s edo berriagoa behar da.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Mesedez eskatu zure zerbitzariaren kudeatzaileari PHP azkenengo bertsiora eguneratzea. Zure PHP bertsioa ez dute ez ownCloud eta ez PHP komunitateek mantentzen.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP SafeMode gaitua dago. ownCloudek ongi funtzionatzeko desgaitua behar du.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode ia erabiligabeko ezarpen zahar bat da eta desgaituta egon beharko luke. Mesedez eskatu zerbitzariaren kudeatzaileari php.ini edo zure web zerbitzariaren konfigurazioan desgaitu dezan.",
diff --git a/lib/l10n/eu.json b/lib/l10n/eu.json
index 77a7f6f095e..39c82354efd 100644
--- a/lib/l10n/eu.json
+++ b/lib/l10n/eu.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Hau normalean konpondu daiteke %sweb zerbitzarira config karpetan idazteko baimenak emanez%s.",
"Sample configuration detected" : "Adibide-ezarpena detektatua",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Detektatu da adibide-ezarpena kopiatu dela. Honek zure instalazioa apur dezake eta ez da onartzen. Irakurri dokumentazioa config.php fitxategia aldatu aurretik.",
+ "PHP %s or higher is required." : "PHP %s edo berriagoa behar da.",
"Help" : "Laguntza",
"Personal" : "Pertsonala",
"Settings" : "Ezarpenak",
@@ -101,7 +102,6 @@
"Please install one of these locales on your system and restart your webserver." : "Instalatu hauetako lokal bat zure sisteman eta berrabiarazi zure web zerbitzaria.",
"Please ask your server administrator to install the module." : "Mesedez eskatu zure zerbitzariaren kudeatzaileari modulua instala dezan.",
"PHP module %s not installed." : "PHPren %s modulua ez dago instalaturik.",
- "PHP %s or higher is required." : "PHP %s edo berriagoa behar da.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Mesedez eskatu zure zerbitzariaren kudeatzaileari PHP azkenengo bertsiora eguneratzea. Zure PHP bertsioa ez dute ez ownCloud eta ez PHP komunitateek mantentzen.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP SafeMode gaitua dago. ownCloudek ongi funtzionatzeko desgaitua behar du.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode ia erabiligabeko ezarpen zahar bat da eta desgaituta egon beharko luke. Mesedez eskatu zerbitzariaren kudeatzaileari php.ini edo zure web zerbitzariaren konfigurazioan desgaitu dezan.",
diff --git a/lib/l10n/fi_FI.js b/lib/l10n/fi_FI.js
index 1097dd20850..4e609e2ac28 100644
--- a/lib/l10n/fi_FI.js
+++ b/lib/l10n/fi_FI.js
@@ -6,6 +6,7 @@ OC.L10N.register(
"See %s" : "Katso %s",
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Tämän voi yleensä korjata antamalla %shttp-palvelimelle kirjoitusoikeuden asetushakemistoon%s.",
"Sample configuration detected" : "Esimerkkimääritykset havaittu",
+ "PHP %s or higher is required." : "PHP %s tai sitä uudempi vaaditaan.",
"Help" : "Ohje",
"Personal" : "Henkilökohtainen",
"Settings" : "Asetukset",
@@ -92,7 +93,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Asenna ainakin yksi kyseisistä maa-asetuksista järjestelmään ja käynnistä http-palvelin uudelleen.",
"Please ask your server administrator to install the module." : "Pyydä palvelimen ylläpitäjää asentamaan moduulin.",
"PHP module %s not installed." : "PHP-moduulia %s ei ole asennettu.",
- "PHP %s or higher is required." : "PHP %s tai sitä uudempi vaaditaan.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Pyydä palvelimen ylläpitäjää päivittämään PHP uusimpaan versioon. Käyttämäsi PHP-versio ei ole enää tuettu ownCloud- ja PHP-yhteisön toimesta.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP:n \"Safe Mode\" on käytössä. ownCloud vaatii toimiakseen \"Safe Moden\" poistamisen käytöstä.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP:n Safe Mode on vanhennettu ja muutenkin lähes hyödytön asetus, joka tulee poistaa käytöstä. Pyydä järjestelmän ylläpitäjää poistamaan ominaisuus käytöstä php.ini-tiedoston kautta tai http-palvelimen asetuksista.",
diff --git a/lib/l10n/fi_FI.json b/lib/l10n/fi_FI.json
index 2bd73df0379..adedc8bf4e2 100644
--- a/lib/l10n/fi_FI.json
+++ b/lib/l10n/fi_FI.json
@@ -4,6 +4,7 @@
"See %s" : "Katso %s",
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Tämän voi yleensä korjata antamalla %shttp-palvelimelle kirjoitusoikeuden asetushakemistoon%s.",
"Sample configuration detected" : "Esimerkkimääritykset havaittu",
+ "PHP %s or higher is required." : "PHP %s tai sitä uudempi vaaditaan.",
"Help" : "Ohje",
"Personal" : "Henkilökohtainen",
"Settings" : "Asetukset",
@@ -90,7 +91,6 @@
"Please install one of these locales on your system and restart your webserver." : "Asenna ainakin yksi kyseisistä maa-asetuksista järjestelmään ja käynnistä http-palvelin uudelleen.",
"Please ask your server administrator to install the module." : "Pyydä palvelimen ylläpitäjää asentamaan moduulin.",
"PHP module %s not installed." : "PHP-moduulia %s ei ole asennettu.",
- "PHP %s or higher is required." : "PHP %s tai sitä uudempi vaaditaan.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Pyydä palvelimen ylläpitäjää päivittämään PHP uusimpaan versioon. Käyttämäsi PHP-versio ei ole enää tuettu ownCloud- ja PHP-yhteisön toimesta.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP:n \"Safe Mode\" on käytössä. ownCloud vaatii toimiakseen \"Safe Moden\" poistamisen käytöstä.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP:n Safe Mode on vanhennettu ja muutenkin lähes hyödytön asetus, joka tulee poistaa käytöstä. Pyydä järjestelmän ylläpitäjää poistamaan ominaisuus käytöstä php.ini-tiedoston kautta tai http-palvelimen asetuksista.",
diff --git a/lib/l10n/fr.js b/lib/l10n/fr.js
index 18a20a37148..9fc1557c86c 100644
--- a/lib/l10n/fr.js
+++ b/lib/l10n/fr.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Ce problème est généralement résolu %sen donnant au serveur web un accès en écriture au répertoire de configuration%s.",
"Sample configuration detected" : "Configuration d'exemple détectée",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Il a été détecté que la configuration donnée à titre d'exemple a été copiée. Cela peut rendre votre installation inopérante et n'est pas pris en charge. Veuillez lire la documentation avant d'effectuer des modifications dans config.php",
+ "PHP %s or higher is required." : "PHP %s ou supérieur est requis.",
"Help" : "Aide",
"Personal" : "Personnel",
"Settings" : "Paramètres",
@@ -105,7 +106,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Veuillez installer l'un de ces paramètres régionaux sur votre système et redémarrer votre serveur web.",
"Please ask your server administrator to install the module." : "Veuillez demander à votre administrateur d’installer le module.",
"PHP module %s not installed." : "Le module PHP %s n’est pas installé.",
- "PHP %s or higher is required." : "PHP %s ou supérieur est requis.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Veuillez demander à votre administrateur de mettre à jour PHP vers sa dernière version disponible. La vôtre n’est plus prise en charge par ownCloud ni par la communauté PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode est activé. ownCloud requiert sa désactivation afin de fonctionner correctement.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode est déprécié, inutile la plupart du temps, et doit être désactivé. Veuillez demander à votre administrateur serveur de le désactiver dans le fichier php.ini ou dans votre configuration du serveur web.",
diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json
index b8cecae6c5d..80eb7b85b4e 100644
--- a/lib/l10n/fr.json
+++ b/lib/l10n/fr.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Ce problème est généralement résolu %sen donnant au serveur web un accès en écriture au répertoire de configuration%s.",
"Sample configuration detected" : "Configuration d'exemple détectée",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Il a été détecté que la configuration donnée à titre d'exemple a été copiée. Cela peut rendre votre installation inopérante et n'est pas pris en charge. Veuillez lire la documentation avant d'effectuer des modifications dans config.php",
+ "PHP %s or higher is required." : "PHP %s ou supérieur est requis.",
"Help" : "Aide",
"Personal" : "Personnel",
"Settings" : "Paramètres",
@@ -103,7 +104,6 @@
"Please install one of these locales on your system and restart your webserver." : "Veuillez installer l'un de ces paramètres régionaux sur votre système et redémarrer votre serveur web.",
"Please ask your server administrator to install the module." : "Veuillez demander à votre administrateur d’installer le module.",
"PHP module %s not installed." : "Le module PHP %s n’est pas installé.",
- "PHP %s or higher is required." : "PHP %s ou supérieur est requis.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Veuillez demander à votre administrateur de mettre à jour PHP vers sa dernière version disponible. La vôtre n’est plus prise en charge par ownCloud ni par la communauté PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode est activé. ownCloud requiert sa désactivation afin de fonctionner correctement.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode est déprécié, inutile la plupart du temps, et doit être désactivé. Veuillez demander à votre administrateur serveur de le désactiver dans le fichier php.ini ou dans votre configuration du serveur web.",
diff --git a/lib/l10n/gl.js b/lib/l10n/gl.js
index 596b302009c..08b923c6d0f 100644
--- a/lib/l10n/gl.js
+++ b/lib/l10n/gl.js
@@ -5,6 +5,9 @@ OC.L10N.register(
"This can usually be fixed by giving the webserver write access to the config directory" : "Polo xeral, isto pode ser fixado para permitirlle ao servidor web acceso de escritura ao directorio «config»",
"See %s" : "Vexa %s",
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Polo xeral, isto pode ser fixado para %spermitirlle ao servidor web acceso de escritura ao directorio «config»%s.",
+ "Sample configuration detected" : "Detectouse a configuración de exemplo",
+ "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Detectouse que foi copiada a configuración de exemplo. Isto pode rachar a súa instalación e non é compatíbel. Lea a documentación antes de facer cambios en config.php",
+ "PHP %s or higher is required." : "Requirese PHP %s ou superior.",
"Help" : "Axuda",
"Personal" : "Persoal",
"Settings" : "Axustes",
@@ -15,6 +18,8 @@ OC.L10N.register(
"No app name specified" : "Non se especificou o nome da aplicación",
"Unknown filetype" : "Tipo de ficheiro descoñecido",
"Invalid image" : "Imaxe incorrecta",
+ "Database Error" : "Produciuse un erro na base de datos",
+ "Please contact your system administrator." : "Contacte co administrador.",
"web services under your control" : "servizos web baixo o seu control",
"App directory already exists" : "Xa existe o directorio da aplicación",
"Can't create app folder. Please fix permissions. %s" : "Non é posíbel crear o cartafol de aplicacións. Corrixa os permisos. %s",
@@ -50,6 +55,7 @@ OC.L10N.register(
"PostgreSQL username and/or password not valid" : "Nome de usuario e/ou contrasinal de PostgreSQL incorrecto",
"Set an admin username." : "Estabeleza un nome de usuario administrador",
"Set an admin password." : "Estabeleza un contrasinal de administrador",
+ "Can't create or write into the data directory %s" : "Non é posíbel crear ou escribir o directorio «data» %s",
"%s shared »%s« with you" : "%s compartiu «%s» con vostede",
"Sharing %s failed, because the file does not exist" : "Fallou a compartición de %s, o ficheiro non existe",
"You are not allowed to share %s" : "Non ten permiso para compartir %s",
@@ -100,7 +106,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Instale unha destas configuracións locais no seu sistema e reinicie o servidor web.",
"Please ask your server administrator to install the module." : "Pregúntelle ao administrador do servidor pola instalación do módulo.",
"PHP module %s not installed." : "O módulo PHP %s non está instalado.",
- "PHP %s or higher is required." : "Requirese PHP %s ou superior.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Pregúntelle ao administrador do servidor pola actualización de PHP á versión máis recente. A súa versión de PHP xa non é asistida polas comunidades de ownCloud e PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "O modo seguro de PHP está activado. ownCloud precisa que estea desactivado para traballar doadamente.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "O modo seguro de PHP é un entorno en desuso e maiormente inútil que ten que seren desactivado. Pregúntelle ao administrador do servidor pola desactivación en php.ini ou na configuración do servidor web.",
diff --git a/lib/l10n/gl.json b/lib/l10n/gl.json
index 2b65b3a8f89..060b559cee2 100644
--- a/lib/l10n/gl.json
+++ b/lib/l10n/gl.json
@@ -3,6 +3,9 @@
"This can usually be fixed by giving the webserver write access to the config directory" : "Polo xeral, isto pode ser fixado para permitirlle ao servidor web acceso de escritura ao directorio «config»",
"See %s" : "Vexa %s",
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Polo xeral, isto pode ser fixado para %spermitirlle ao servidor web acceso de escritura ao directorio «config»%s.",
+ "Sample configuration detected" : "Detectouse a configuración de exemplo",
+ "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Detectouse que foi copiada a configuración de exemplo. Isto pode rachar a súa instalación e non é compatíbel. Lea a documentación antes de facer cambios en config.php",
+ "PHP %s or higher is required." : "Requirese PHP %s ou superior.",
"Help" : "Axuda",
"Personal" : "Persoal",
"Settings" : "Axustes",
@@ -13,6 +16,8 @@
"No app name specified" : "Non se especificou o nome da aplicación",
"Unknown filetype" : "Tipo de ficheiro descoñecido",
"Invalid image" : "Imaxe incorrecta",
+ "Database Error" : "Produciuse un erro na base de datos",
+ "Please contact your system administrator." : "Contacte co administrador.",
"web services under your control" : "servizos web baixo o seu control",
"App directory already exists" : "Xa existe o directorio da aplicación",
"Can't create app folder. Please fix permissions. %s" : "Non é posíbel crear o cartafol de aplicacións. Corrixa os permisos. %s",
@@ -48,6 +53,7 @@
"PostgreSQL username and/or password not valid" : "Nome de usuario e/ou contrasinal de PostgreSQL incorrecto",
"Set an admin username." : "Estabeleza un nome de usuario administrador",
"Set an admin password." : "Estabeleza un contrasinal de administrador",
+ "Can't create or write into the data directory %s" : "Non é posíbel crear ou escribir o directorio «data» %s",
"%s shared »%s« with you" : "%s compartiu «%s» con vostede",
"Sharing %s failed, because the file does not exist" : "Fallou a compartición de %s, o ficheiro non existe",
"You are not allowed to share %s" : "Non ten permiso para compartir %s",
@@ -98,7 +104,6 @@
"Please install one of these locales on your system and restart your webserver." : "Instale unha destas configuracións locais no seu sistema e reinicie o servidor web.",
"Please ask your server administrator to install the module." : "Pregúntelle ao administrador do servidor pola instalación do módulo.",
"PHP module %s not installed." : "O módulo PHP %s non está instalado.",
- "PHP %s or higher is required." : "Requirese PHP %s ou superior.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Pregúntelle ao administrador do servidor pola actualización de PHP á versión máis recente. A súa versión de PHP xa non é asistida polas comunidades de ownCloud e PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "O modo seguro de PHP está activado. ownCloud precisa que estea desactivado para traballar doadamente.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "O modo seguro de PHP é un entorno en desuso e maiormente inútil que ten que seren desactivado. Pregúntelle ao administrador do servidor pola desactivación en php.ini ou na configuración do servidor web.",
diff --git a/lib/l10n/hr.js b/lib/l10n/hr.js
index ead1e15d2cf..e5f9cfd044d 100644
--- a/lib/l10n/hr.js
+++ b/lib/l10n/hr.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Ovo se obično može popraviti %sdavanjem pristupa web poslužitelju za pisanje u config direktoriju%s.",
"Sample configuration detected" : "Nađena ogledna konfiguracija",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Otkriveno je da je ogledna konfiguracija kopirana. To može vašu instalaciju prekinuti i nije podržano.Molimo pročitajte dokumentaciju prije nego li izvršite promjene na config.php",
+ "PHP %s or higher is required." : "PHP verzija treba biti %s ili viša.",
"Help" : "Pomoć",
"Personal" : "Osobno",
"Settings" : "Postavke",
@@ -101,7 +102,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Molimo instalirajte jednu od ovih regionalnih shema u svoj sustav i ponovno pokrenite svoj web poslužitelj.",
"Please ask your server administrator to install the module." : "Molimo zamolite svog administratora poslužitelja da instalira modul.",
"PHP module %s not installed." : "PHP modul %s nije instaliran.",
- "PHP %s or higher is required." : "PHP verzija treba biti %s ili viša.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Molimo zamolite svog administratora poslužitelja da ažurira PHP na najnoviju verziju.Vašu PHP verziju ownCloud i PHP zajednica više ne podržavaju.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Aktiviran je PHP siguran način rada. Da bi ownCloud radio kako treba, taj mod treba oemogućiti.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP siguran način rada je zastarjela i uglavnom beskorisna postavka koju treba onemogućiti. Molimo zamolite svogadministratora poslužitelja da je onemogući, bilo u php.ini ili u vašoj konfiguraciji web poslužitelja.",
diff --git a/lib/l10n/hr.json b/lib/l10n/hr.json
index 01bd54eccfc..64c94528af0 100644
--- a/lib/l10n/hr.json
+++ b/lib/l10n/hr.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Ovo se obično može popraviti %sdavanjem pristupa web poslužitelju za pisanje u config direktoriju%s.",
"Sample configuration detected" : "Nađena ogledna konfiguracija",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Otkriveno je da je ogledna konfiguracija kopirana. To može vašu instalaciju prekinuti i nije podržano.Molimo pročitajte dokumentaciju prije nego li izvršite promjene na config.php",
+ "PHP %s or higher is required." : "PHP verzija treba biti %s ili viša.",
"Help" : "Pomoć",
"Personal" : "Osobno",
"Settings" : "Postavke",
@@ -99,7 +100,6 @@
"Please install one of these locales on your system and restart your webserver." : "Molimo instalirajte jednu od ovih regionalnih shema u svoj sustav i ponovno pokrenite svoj web poslužitelj.",
"Please ask your server administrator to install the module." : "Molimo zamolite svog administratora poslužitelja da instalira modul.",
"PHP module %s not installed." : "PHP modul %s nije instaliran.",
- "PHP %s or higher is required." : "PHP verzija treba biti %s ili viša.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Molimo zamolite svog administratora poslužitelja da ažurira PHP na najnoviju verziju.Vašu PHP verziju ownCloud i PHP zajednica više ne podržavaju.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Aktiviran je PHP siguran način rada. Da bi ownCloud radio kako treba, taj mod treba oemogućiti.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP siguran način rada je zastarjela i uglavnom beskorisna postavka koju treba onemogućiti. Molimo zamolite svogadministratora poslužitelja da je onemogući, bilo u php.ini ili u vašoj konfiguraciji web poslužitelja.",
diff --git a/lib/l10n/hu_HU.js b/lib/l10n/hu_HU.js
index be14e2d1f66..cc336e5e5cd 100644
--- a/lib/l10n/hu_HU.js
+++ b/lib/l10n/hu_HU.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Ez rendszerint úgy oldható meg, hogy %sírási jogot adunk a webszervernek a config könyvtárra%s.",
"Sample configuration detected" : "A példabeállítások vannak beállítva",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Úgy tűnik a példakonfigurációt próbálja ténylegesen használni. Ez nem támogatott, és működésképtelenné teheti a telepítést. Kérjük olvassa el a dokumentációt és azt követően változtasson a config.php-n!",
+ "PHP %s or higher is required." : "PHP %s vagy ennél újabb szükséges.",
"Help" : "Súgó",
"Personal" : "Személyes",
"Settings" : "Beállítások",
@@ -103,7 +104,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Kérjük állítsa be a következő lokalizációk valamelyikét a rendszeren és indítsa újra a webszervert!",
"Please ask your server administrator to install the module." : "Kérje meg a rendszergazdát, hogy telepítse a modult!",
"PHP module %s not installed." : "A %s PHP modul nincs telepítve.",
- "PHP %s or higher is required." : "PHP %s vagy ennél újabb szükséges.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Kérje meg a rendszergazdát, hogy frissítse a PHP-t újabb változatra! Ezt a PHP változatot már nem támogatja az ownCloud és a PHP fejlesztői közösség.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Be van állítva a PHP Safe Mode. Az ownCloud megfelelő működéséhez szükséges, hogy ez ki legyen kapcsolva.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "A PHP Safe Mode egy régi, már nem támogatott és haszontalan üzemmód, amit érdemes letiltani. Kérje meg a rendszergazdát, hogy tiltsa le vagy a php.ini-ben, vagy a webszerver beállításokban!",
diff --git a/lib/l10n/hu_HU.json b/lib/l10n/hu_HU.json
index 434b2bbde9b..58847746ece 100644
--- a/lib/l10n/hu_HU.json
+++ b/lib/l10n/hu_HU.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Ez rendszerint úgy oldható meg, hogy %sírási jogot adunk a webszervernek a config könyvtárra%s.",
"Sample configuration detected" : "A példabeállítások vannak beállítva",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Úgy tűnik a példakonfigurációt próbálja ténylegesen használni. Ez nem támogatott, és működésképtelenné teheti a telepítést. Kérjük olvassa el a dokumentációt és azt követően változtasson a config.php-n!",
+ "PHP %s or higher is required." : "PHP %s vagy ennél újabb szükséges.",
"Help" : "Súgó",
"Personal" : "Személyes",
"Settings" : "Beállítások",
@@ -101,7 +102,6 @@
"Please install one of these locales on your system and restart your webserver." : "Kérjük állítsa be a következő lokalizációk valamelyikét a rendszeren és indítsa újra a webszervert!",
"Please ask your server administrator to install the module." : "Kérje meg a rendszergazdát, hogy telepítse a modult!",
"PHP module %s not installed." : "A %s PHP modul nincs telepítve.",
- "PHP %s or higher is required." : "PHP %s vagy ennél újabb szükséges.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Kérje meg a rendszergazdát, hogy frissítse a PHP-t újabb változatra! Ezt a PHP változatot már nem támogatja az ownCloud és a PHP fejlesztői közösség.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Be van állítva a PHP Safe Mode. Az ownCloud megfelelő működéséhez szükséges, hogy ez ki legyen kapcsolva.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "A PHP Safe Mode egy régi, már nem támogatott és haszontalan üzemmód, amit érdemes letiltani. Kérje meg a rendszergazdát, hogy tiltsa le vagy a php.ini-ben, vagy a webszerver beállításokban!",
diff --git a/lib/l10n/id.js b/lib/l10n/id.js
index 368cb6b7921..92594afcde6 100644
--- a/lib/l10n/id.js
+++ b/lib/l10n/id.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Hal ini biasanya dapat diperbaiki dengan %s memberikan akses tulis bagi situs web ke %s direktori config.",
"Sample configuration detected" : "Konfigurasi sampel ditemukan",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Ditemukan bahwa konfigurasi sampel telah disalin. Hal ini dapat merusak instalasi Anda dan tidak didukung. Silahkan baca dokumentasi sebelum melakukan perubahan pada config.php",
+ "PHP %s or higher is required." : "Diperlukan PHP %s atau yang lebih tinggi.",
"Help" : "Bantuan",
"Personal" : "Pribadi",
"Settings" : "Pengaturan",
@@ -99,7 +100,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Mohon instal paling tidak satu lokal pada sistem Anda dan jalankan ulang server web.",
"Please ask your server administrator to install the module." : "Mohon tanyakan administrator Anda untuk menginstal module.",
"PHP module %s not installed." : "Module PHP %s tidak terinstal.",
- "PHP %s or higher is required." : "Diperlukan PHP %s atau yang lebih tinggi.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Mohon tanyakan administrator Anda untuk memperbarui PHP ke versi terkini. Versi PHP Anda tidak lagi didukung oleh ownCloud dan komunitas PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode diaktifkan. ownCloud memerlukan ini untuk dinonaktifkan untuk dapat bekerja dengan banar.",
"PHP modules have been installed, but they are still listed as missing?" : "Modul PHP telah terinstal, tetapi mereka terlihat tidak ada?",
diff --git a/lib/l10n/id.json b/lib/l10n/id.json
index e2b1712e1c5..9b9f9202eb5 100644
--- a/lib/l10n/id.json
+++ b/lib/l10n/id.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Hal ini biasanya dapat diperbaiki dengan %s memberikan akses tulis bagi situs web ke %s direktori config.",
"Sample configuration detected" : "Konfigurasi sampel ditemukan",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Ditemukan bahwa konfigurasi sampel telah disalin. Hal ini dapat merusak instalasi Anda dan tidak didukung. Silahkan baca dokumentasi sebelum melakukan perubahan pada config.php",
+ "PHP %s or higher is required." : "Diperlukan PHP %s atau yang lebih tinggi.",
"Help" : "Bantuan",
"Personal" : "Pribadi",
"Settings" : "Pengaturan",
@@ -97,7 +98,6 @@
"Please install one of these locales on your system and restart your webserver." : "Mohon instal paling tidak satu lokal pada sistem Anda dan jalankan ulang server web.",
"Please ask your server administrator to install the module." : "Mohon tanyakan administrator Anda untuk menginstal module.",
"PHP module %s not installed." : "Module PHP %s tidak terinstal.",
- "PHP %s or higher is required." : "Diperlukan PHP %s atau yang lebih tinggi.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Mohon tanyakan administrator Anda untuk memperbarui PHP ke versi terkini. Versi PHP Anda tidak lagi didukung oleh ownCloud dan komunitas PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode diaktifkan. ownCloud memerlukan ini untuk dinonaktifkan untuk dapat bekerja dengan banar.",
"PHP modules have been installed, but they are still listed as missing?" : "Modul PHP telah terinstal, tetapi mereka terlihat tidak ada?",
diff --git a/lib/l10n/it.js b/lib/l10n/it.js
index eb25f2fc086..fca3e291a43 100644
--- a/lib/l10n/it.js
+++ b/lib/l10n/it.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Ciò può essere normalmente corretto %sfornendo al server web accesso in scrittura alla cartella \"config\"%s",
"Sample configuration detected" : "Configurazione di esempio rilevata",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "È stato rilevato che la configurazione di esempio è stata copiata. Ciò può compromettere la tua installazione e non è supportato. Leggi la documentazione prima di modificare il file config.php",
+ "PHP %s or higher is required." : "Richiesto PHP %s o superiore",
"Help" : "Aiuto",
"Personal" : "Personale",
"Settings" : "Impostazioni",
@@ -105,7 +106,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Installa una delle seguenti localizzazioni sul tuo sistema e riavvia il server web.",
"Please ask your server administrator to install the module." : "Chiedi all'amministratore del tuo server di installare il modulo.",
"PHP module %s not installed." : "Il modulo PHP %s non è installato.",
- "PHP %s or higher is required." : "Richiesto PHP %s o superiore",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Chiedi al tuo amministratore di aggiornare PHP all'ultima versione. La tua versione di PHP non è più supportata da ownCloud e dalla comunità di PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode è abilitato. ownCloud richiede che sia disabilitato per funzionare correttamente.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode è un'impostazione sconsigliata e solitamente inutile che dovrebbe essere disabilitata. Chiedi al tuo amministratore di disabilitarlo nel file php.ini o nella configurazione del server web.",
diff --git a/lib/l10n/it.json b/lib/l10n/it.json
index ef4ae9ab370..5f5e77d0232 100644
--- a/lib/l10n/it.json
+++ b/lib/l10n/it.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Ciò può essere normalmente corretto %sfornendo al server web accesso in scrittura alla cartella \"config\"%s",
"Sample configuration detected" : "Configurazione di esempio rilevata",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "È stato rilevato che la configurazione di esempio è stata copiata. Ciò può compromettere la tua installazione e non è supportato. Leggi la documentazione prima di modificare il file config.php",
+ "PHP %s or higher is required." : "Richiesto PHP %s o superiore",
"Help" : "Aiuto",
"Personal" : "Personale",
"Settings" : "Impostazioni",
@@ -103,7 +104,6 @@
"Please install one of these locales on your system and restart your webserver." : "Installa una delle seguenti localizzazioni sul tuo sistema e riavvia il server web.",
"Please ask your server administrator to install the module." : "Chiedi all'amministratore del tuo server di installare il modulo.",
"PHP module %s not installed." : "Il modulo PHP %s non è installato.",
- "PHP %s or higher is required." : "Richiesto PHP %s o superiore",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Chiedi al tuo amministratore di aggiornare PHP all'ultima versione. La tua versione di PHP non è più supportata da ownCloud e dalla comunità di PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode è abilitato. ownCloud richiede che sia disabilitato per funzionare correttamente.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode è un'impostazione sconsigliata e solitamente inutile che dovrebbe essere disabilitata. Chiedi al tuo amministratore di disabilitarlo nel file php.ini o nella configurazione del server web.",
diff --git a/lib/l10n/ja.js b/lib/l10n/ja.js
index e6b0b3240f1..96472897aa7 100644
--- a/lib/l10n/ja.js
+++ b/lib/l10n/ja.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "多くの場合、これは %s Webサーバーにconfigディレクトリ %s への書き込み権限を与えることで解決できます。",
"Sample configuration detected" : "サンプル設定が見つかりました。",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "サンプル設定がコピーされてそのままです。このままではインストールが失敗し、サポート対象外になります。config.phpを変更する前にドキュメントを確認してください。",
+ "PHP %s or higher is required." : "PHP %s 以上が必要です。",
"Help" : "ヘルプ",
"Personal" : "個人",
"Settings" : "設定",
@@ -105,7 +106,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "これらのロケールのうちいずれかをシステムにインストールし、Webサーバーを再起動してください。",
"Please ask your server administrator to install the module." : "サーバー管理者にモジュールのインストールを依頼してください。",
"PHP module %s not installed." : "PHP のモジュール %s がインストールされていません。",
- "PHP %s or higher is required." : "PHP %s 以上が必要です。",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "PHPを最新バージョンに更新するようサーバー管理者に依頼してください。現在のPHPのバージョンは、ownCloudおよびPHPコミュニティでサポートされていません。",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHPセーフモードは有効です。ownCloudを適切に動作させるには無効化する必要があります。",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHPセーフモードは推奨されておらず、ほとんど役に立たない設定のため、無効化すべきです。サーバー管理者に、php.iniもしくはWebサーバー設定で無効化するよう依頼してください。",
diff --git a/lib/l10n/ja.json b/lib/l10n/ja.json
index 722f5235c6f..ec3a1a4fa22 100644
--- a/lib/l10n/ja.json
+++ b/lib/l10n/ja.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "多くの場合、これは %s Webサーバーにconfigディレクトリ %s への書き込み権限を与えることで解決できます。",
"Sample configuration detected" : "サンプル設定が見つかりました。",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "サンプル設定がコピーされてそのままです。このままではインストールが失敗し、サポート対象外になります。config.phpを変更する前にドキュメントを確認してください。",
+ "PHP %s or higher is required." : "PHP %s 以上が必要です。",
"Help" : "ヘルプ",
"Personal" : "個人",
"Settings" : "設定",
@@ -103,7 +104,6 @@
"Please install one of these locales on your system and restart your webserver." : "これらのロケールのうちいずれかをシステムにインストールし、Webサーバーを再起動してください。",
"Please ask your server administrator to install the module." : "サーバー管理者にモジュールのインストールを依頼してください。",
"PHP module %s not installed." : "PHP のモジュール %s がインストールされていません。",
- "PHP %s or higher is required." : "PHP %s 以上が必要です。",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "PHPを最新バージョンに更新するようサーバー管理者に依頼してください。現在のPHPのバージョンは、ownCloudおよびPHPコミュニティでサポートされていません。",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHPセーフモードは有効です。ownCloudを適切に動作させるには無効化する必要があります。",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHPセーフモードは推奨されておらず、ほとんど役に立たない設定のため、無効化すべきです。サーバー管理者に、php.iniもしくはWebサーバー設定で無効化するよう依頼してください。",
diff --git a/lib/l10n/ko.js b/lib/l10n/ko.js
index 22f8cb191ae..97acbb9c006 100644
--- a/lib/l10n/ko.js
+++ b/lib/l10n/ko.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"lib",
{
+ "PHP %s or higher is required." : "%s 버전의 PHP 혹은 높은 버전을 필요로 합니다.",
"Help" : "도움말",
"Personal" : "개인",
"Settings" : "설정",
@@ -61,7 +62,6 @@ OC.L10N.register(
"A valid password must be provided" : "올바른 암호를 입력해야 함",
"The username is already being used" : "이 사용자명은 현재 사용중입니다",
"PHP module %s not installed." : "%s PHP 모듈이 설치되지 않았습니다.",
- "PHP %s or higher is required." : "%s 버전의 PHP 혹은 높은 버전을 필요로 합니다.",
"PostgreSQL >= 9 required" : "PostgreSQL 9 혹은 이상 버전을 필요로합니다",
"Please upgrade your database version" : "데이터베이스 버전을 업그레이드 하십시오",
"Error occurred while checking PostgreSQL version" : "PostgreSQL 버전을 확인하던중 오류가 발생하였습니다"
diff --git a/lib/l10n/ko.json b/lib/l10n/ko.json
index 4743476540c..b3d3abcffb9 100644
--- a/lib/l10n/ko.json
+++ b/lib/l10n/ko.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "PHP %s or higher is required." : "%s 버전의 PHP 혹은 높은 버전을 필요로 합니다.",
"Help" : "도움말",
"Personal" : "개인",
"Settings" : "설정",
@@ -59,7 +60,6 @@
"A valid password must be provided" : "올바른 암호를 입력해야 함",
"The username is already being used" : "이 사용자명은 현재 사용중입니다",
"PHP module %s not installed." : "%s PHP 모듈이 설치되지 않았습니다.",
- "PHP %s or higher is required." : "%s 버전의 PHP 혹은 높은 버전을 필요로 합니다.",
"PostgreSQL >= 9 required" : "PostgreSQL 9 혹은 이상 버전을 필요로합니다",
"Please upgrade your database version" : "데이터베이스 버전을 업그레이드 하십시오",
"Error occurred while checking PostgreSQL version" : "PostgreSQL 버전을 확인하던중 오류가 발생하였습니다"
diff --git a/lib/l10n/nb_NO.js b/lib/l10n/nb_NO.js
index c50537ce67d..ff563266f66 100644
--- a/lib/l10n/nb_NO.js
+++ b/lib/l10n/nb_NO.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dette kan vanligvis ordnes ved %så gi web-serveren skrivetilgang til config-mappen%s.",
"Sample configuration detected" : "Eksempelkonfigurasjon oppdaget",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Det ble oppdaget at eksempelkonfigurasjonen er blitt kopiert. Dette kan ødelegge installasjonen din og støttes ikke. Les dokumentasjonen før du gjør endringer i config.php",
+ "PHP %s or higher is required." : "PHP %s eller nyere kreves.",
"Help" : "Hjelp",
"Personal" : "Personlig",
"Settings" : "Innstillinger",
@@ -102,7 +103,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Vennligst installer en av disse nasjonale innstillingene på systemet ditt og start webserveren på nytt.",
"Please ask your server administrator to install the module." : "Be server-administratoren om å installere modulen.",
"PHP module %s not installed." : "PHP-modul %s er ikke installert.",
- "PHP %s or higher is required." : "PHP %s eller nyere kreves.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Be server-administratoren om å oppdatere PHP til nyeste versjon. PHP-versjonen du bruker støttes ikke lenger av ownCloud og PHP-fellesskapet.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode er aktivert. ownCloud krever at det deaktiveres for å fungere korrekt.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode er en avskrevet og stort sett unyttig innstilling som bør deaktiveres. Be server-administratoren om å deaktivere det i php.ini eller i konfigurasjonen for web-serveren.",
diff --git a/lib/l10n/nb_NO.json b/lib/l10n/nb_NO.json
index 4fe3148dc19..5ae49378b6f 100644
--- a/lib/l10n/nb_NO.json
+++ b/lib/l10n/nb_NO.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dette kan vanligvis ordnes ved %så gi web-serveren skrivetilgang til config-mappen%s.",
"Sample configuration detected" : "Eksempelkonfigurasjon oppdaget",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Det ble oppdaget at eksempelkonfigurasjonen er blitt kopiert. Dette kan ødelegge installasjonen din og støttes ikke. Les dokumentasjonen før du gjør endringer i config.php",
+ "PHP %s or higher is required." : "PHP %s eller nyere kreves.",
"Help" : "Hjelp",
"Personal" : "Personlig",
"Settings" : "Innstillinger",
@@ -100,7 +101,6 @@
"Please install one of these locales on your system and restart your webserver." : "Vennligst installer en av disse nasjonale innstillingene på systemet ditt og start webserveren på nytt.",
"Please ask your server administrator to install the module." : "Be server-administratoren om å installere modulen.",
"PHP module %s not installed." : "PHP-modul %s er ikke installert.",
- "PHP %s or higher is required." : "PHP %s eller nyere kreves.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Be server-administratoren om å oppdatere PHP til nyeste versjon. PHP-versjonen du bruker støttes ikke lenger av ownCloud og PHP-fellesskapet.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode er aktivert. ownCloud krever at det deaktiveres for å fungere korrekt.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode er en avskrevet og stort sett unyttig innstilling som bør deaktiveres. Be server-administratoren om å deaktivere det i php.ini eller i konfigurasjonen for web-serveren.",
diff --git a/lib/l10n/nl.js b/lib/l10n/nl.js
index 4fdff3c67ef..5bd8569ad87 100644
--- a/lib/l10n/nl.js
+++ b/lib/l10n/nl.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dit kan hersteld worden door de webserver %sschrijfrechten te geven op de de config directory%s",
"Sample configuration detected" : "Voorbeeldconfiguratie gevonden",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Blijkbaar is de voorbeeldconfiguratie gekopieerd. Dit kan uw installatie beschadigen en wordt niet dan ook ondersteund. Lees de documentatie voordat u wijzigingen aan config.php doorvoert",
+ "PHP %s or higher is required." : "PHP %s of hoger vereist.",
"Help" : "Help",
"Personal" : "Persoonlijk",
"Settings" : "Instellingen",
@@ -105,7 +106,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Installeer één van de talen op uw systeem en herstart uw webserver.",
"Please ask your server administrator to install the module." : "Vraag uw beheerder om de module te installeren.",
"PHP module %s not installed." : "PHP module %s niet geïnstalleerd.",
- "PHP %s or higher is required." : "PHP %s of hoger vereist.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Vraag uw beheerder om PHP bij te werken tot de laatste versie. Uw PHP versie wordt niet langer ondersteund door ownCloud en de PHP community.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode is ingeschakeld. Voor een goede werking van ownCloud moet die modus zijn uitgeschakeld.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode is niet langer zinvol en zou eigenlijk gedeactiveerd moeten worden. Vraag uw beheerder om Safe Mode in php.ini of in de webserver configuratie te deactiveren.",
diff --git a/lib/l10n/nl.json b/lib/l10n/nl.json
index be980d330d6..f504ecdcad1 100644
--- a/lib/l10n/nl.json
+++ b/lib/l10n/nl.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dit kan hersteld worden door de webserver %sschrijfrechten te geven op de de config directory%s",
"Sample configuration detected" : "Voorbeeldconfiguratie gevonden",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Blijkbaar is de voorbeeldconfiguratie gekopieerd. Dit kan uw installatie beschadigen en wordt niet dan ook ondersteund. Lees de documentatie voordat u wijzigingen aan config.php doorvoert",
+ "PHP %s or higher is required." : "PHP %s of hoger vereist.",
"Help" : "Help",
"Personal" : "Persoonlijk",
"Settings" : "Instellingen",
@@ -103,7 +104,6 @@
"Please install one of these locales on your system and restart your webserver." : "Installeer één van de talen op uw systeem en herstart uw webserver.",
"Please ask your server administrator to install the module." : "Vraag uw beheerder om de module te installeren.",
"PHP module %s not installed." : "PHP module %s niet geïnstalleerd.",
- "PHP %s or higher is required." : "PHP %s of hoger vereist.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Vraag uw beheerder om PHP bij te werken tot de laatste versie. Uw PHP versie wordt niet langer ondersteund door ownCloud en de PHP community.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode is ingeschakeld. Voor een goede werking van ownCloud moet die modus zijn uitgeschakeld.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode is niet langer zinvol en zou eigenlijk gedeactiveerd moeten worden. Vraag uw beheerder om Safe Mode in php.ini of in de webserver configuratie te deactiveren.",
diff --git a/lib/l10n/pl.js b/lib/l10n/pl.js
index a766151eab2..33a91c57d9a 100644
--- a/lib/l10n/pl.js
+++ b/lib/l10n/pl.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Można to zwykle rozwiązać przez %sdodanie serwerowi www uprawnień zapisu do katalogu config%s.",
"Sample configuration detected" : "Wykryto przykładową konfigurację",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Wykryto skopiowanie przykładowej konfiguracji. To może popsuć Twoją instalację i nie jest wspierane. Proszę przeczytać dokumentację przed dokonywaniem zmian w config.php",
+ "PHP %s or higher is required." : "PHP %s lub wyższe jest wymagane.",
"Help" : "Pomoc",
"Personal" : "Osobiste",
"Settings" : "Ustawienia",
@@ -103,7 +104,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Proszę zainstalować jedno z poniższych locale w Twoim systemie i uruchomić ponownie serwer www.",
"Please ask your server administrator to install the module." : "Proszę poproś administratora serwera aby zainstalował ten moduł.",
"PHP module %s not installed." : "Moduł PHP %s nie jest zainstalowany.",
- "PHP %s or higher is required." : "PHP %s lub wyższe jest wymagane.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Proszę poproś administratora serwera aby zaktualizował PHP do najnowszej wersji. Twoja wersja PHP nie jest już dłużej wspierana przez ownCloud i społeczność PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Bezpieczny tryb PHP jest aktywny. ownCloud do poprawnej pracy wymaga aby był on wyłączony.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Bezpieczny tryb PHP jest przestarzały i w większości bezużyteczny i powinien być wyłączony. Proszę poproś administratora serwera aby wyłączył go w php.ini lub w pliku konfiguracyjnym serwera www.",
diff --git a/lib/l10n/pl.json b/lib/l10n/pl.json
index c546a115f5e..896757fecda 100644
--- a/lib/l10n/pl.json
+++ b/lib/l10n/pl.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Można to zwykle rozwiązać przez %sdodanie serwerowi www uprawnień zapisu do katalogu config%s.",
"Sample configuration detected" : "Wykryto przykładową konfigurację",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Wykryto skopiowanie przykładowej konfiguracji. To może popsuć Twoją instalację i nie jest wspierane. Proszę przeczytać dokumentację przed dokonywaniem zmian w config.php",
+ "PHP %s or higher is required." : "PHP %s lub wyższe jest wymagane.",
"Help" : "Pomoc",
"Personal" : "Osobiste",
"Settings" : "Ustawienia",
@@ -101,7 +102,6 @@
"Please install one of these locales on your system and restart your webserver." : "Proszę zainstalować jedno z poniższych locale w Twoim systemie i uruchomić ponownie serwer www.",
"Please ask your server administrator to install the module." : "Proszę poproś administratora serwera aby zainstalował ten moduł.",
"PHP module %s not installed." : "Moduł PHP %s nie jest zainstalowany.",
- "PHP %s or higher is required." : "PHP %s lub wyższe jest wymagane.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Proszę poproś administratora serwera aby zaktualizował PHP do najnowszej wersji. Twoja wersja PHP nie jest już dłużej wspierana przez ownCloud i społeczność PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Bezpieczny tryb PHP jest aktywny. ownCloud do poprawnej pracy wymaga aby był on wyłączony.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Bezpieczny tryb PHP jest przestarzały i w większości bezużyteczny i powinien być wyłączony. Proszę poproś administratora serwera aby wyłączył go w php.ini lub w pliku konfiguracyjnym serwera www.",
diff --git a/lib/l10n/pt_BR.js b/lib/l10n/pt_BR.js
index 370bff17480..8e0b5f3bf08 100644
--- a/lib/l10n/pt_BR.js
+++ b/lib/l10n/pt_BR.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Isso geralmente pode ser corrigido dando permissão de gravação %sgiving ao webserver para o directory%s de configuração.",
"Sample configuration detected" : "Exemplo de configuração detectada",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Foi detectado que a configuração exemplo foi copiada. Isso pode desestabilizar sua instalação e não é suportado. Por favor, leia a documentação antes de realizar mudanças no config.php",
+ "PHP %s or higher is required." : "É requerido PHP %s ou superior.",
"Help" : "Ajuda",
"Personal" : "Pessoal",
"Settings" : "Configurações",
@@ -105,7 +106,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Por favor, defina uma dessas localizações em seu sistema e reinicie o seu servidor web.",
"Please ask your server administrator to install the module." : "Por favor, peça ao seu administrador do servidor para instalar o módulo.",
"PHP module %s not installed." : "Módulo PHP %s não instalado.",
- "PHP %s or higher is required." : "É requerido PHP %s ou superior.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Por favor, peça ao seu administrador do servidor para atualizar o PHP para a versão mais recente. A sua versão do PHP não é mais suportado pelo ownCloud e a comunidade PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode está habilitado. ownCloud exige que ele esteja desativado para funcionar corretamente.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode é um cenário obsoleto e praticamente inútil que deve ser desativado. Por favor, peça ao seu administrador do servidor para desativá-lo no php.ini ou na sua configuração webserver.",
diff --git a/lib/l10n/pt_BR.json b/lib/l10n/pt_BR.json
index 465d0d2bf29..9b4983f6dfb 100644
--- a/lib/l10n/pt_BR.json
+++ b/lib/l10n/pt_BR.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Isso geralmente pode ser corrigido dando permissão de gravação %sgiving ao webserver para o directory%s de configuração.",
"Sample configuration detected" : "Exemplo de configuração detectada",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Foi detectado que a configuração exemplo foi copiada. Isso pode desestabilizar sua instalação e não é suportado. Por favor, leia a documentação antes de realizar mudanças no config.php",
+ "PHP %s or higher is required." : "É requerido PHP %s ou superior.",
"Help" : "Ajuda",
"Personal" : "Pessoal",
"Settings" : "Configurações",
@@ -103,7 +104,6 @@
"Please install one of these locales on your system and restart your webserver." : "Por favor, defina uma dessas localizações em seu sistema e reinicie o seu servidor web.",
"Please ask your server administrator to install the module." : "Por favor, peça ao seu administrador do servidor para instalar o módulo.",
"PHP module %s not installed." : "Módulo PHP %s não instalado.",
- "PHP %s or higher is required." : "É requerido PHP %s ou superior.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Por favor, peça ao seu administrador do servidor para atualizar o PHP para a versão mais recente. A sua versão do PHP não é mais suportado pelo ownCloud e a comunidade PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode está habilitado. ownCloud exige que ele esteja desativado para funcionar corretamente.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode é um cenário obsoleto e praticamente inútil que deve ser desativado. Por favor, peça ao seu administrador do servidor para desativá-lo no php.ini ou na sua configuração webserver.",
diff --git a/lib/l10n/pt_PT.js b/lib/l10n/pt_PT.js
index 0bbac09c9b1..ebb5ddd8d45 100644
--- a/lib/l10n/pt_PT.js
+++ b/lib/l10n/pt_PT.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Isto pode ser resolvido normalmente %sdando ao servidor web direitos de escrita no directório de configuração%s.",
"Sample configuration detected" : "Exemplo de configuração detectada",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Foi detectado que a configuração de amostra foi copiada. Isso pode danificar a sua instalação e não é suportado. Por favor, leia a documentação antes de realizar mudanças no config.php",
+ "PHP %s or higher is required." : "Necessário PHP %s ou maior.",
"Help" : "Ajuda",
"Personal" : "Pessoal",
"Settings" : "Configurações",
@@ -105,7 +106,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Por favor instale um destes locais no seu sistema e reinicie o seu servidor web.",
"Please ask your server administrator to install the module." : "Por favor pergunte ao seu administrador do servidor para instalar o modulo.",
"PHP module %s not installed." : "O modulo %s PHP não está instalado.",
- "PHP %s or higher is required." : "Necessário PHP %s ou maior.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Por favor pessa ao seu administrador de servidor para actualizar o PHP para a ultima versão. A sua versão de PHP não é mais suportada pelo owncloud e a comunidade PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "O modo seguro de PHP está activo. O ownCloud requer que isto esteja desactivado para funcionar em condições.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "O modo seguro PHP está obsoleto e a maior parte das definições inúteis devem ser desactivadas. Por favor pessa ao seu administrador de servidor para desactivar isto em php.ini ou no seu config do servidor web.",
diff --git a/lib/l10n/pt_PT.json b/lib/l10n/pt_PT.json
index 067dc4b9751..ae35da25bdc 100644
--- a/lib/l10n/pt_PT.json
+++ b/lib/l10n/pt_PT.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Isto pode ser resolvido normalmente %sdando ao servidor web direitos de escrita no directório de configuração%s.",
"Sample configuration detected" : "Exemplo de configuração detectada",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Foi detectado que a configuração de amostra foi copiada. Isso pode danificar a sua instalação e não é suportado. Por favor, leia a documentação antes de realizar mudanças no config.php",
+ "PHP %s or higher is required." : "Necessário PHP %s ou maior.",
"Help" : "Ajuda",
"Personal" : "Pessoal",
"Settings" : "Configurações",
@@ -103,7 +104,6 @@
"Please install one of these locales on your system and restart your webserver." : "Por favor instale um destes locais no seu sistema e reinicie o seu servidor web.",
"Please ask your server administrator to install the module." : "Por favor pergunte ao seu administrador do servidor para instalar o modulo.",
"PHP module %s not installed." : "O modulo %s PHP não está instalado.",
- "PHP %s or higher is required." : "Necessário PHP %s ou maior.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Por favor pessa ao seu administrador de servidor para actualizar o PHP para a ultima versão. A sua versão de PHP não é mais suportada pelo owncloud e a comunidade PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "O modo seguro de PHP está activo. O ownCloud requer que isto esteja desactivado para funcionar em condições.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "O modo seguro PHP está obsoleto e a maior parte das definições inúteis devem ser desactivadas. Por favor pessa ao seu administrador de servidor para desactivar isto em php.ini ou no seu config do servidor web.",
diff --git a/lib/l10n/ro.js b/lib/l10n/ro.js
index baedf6b6f51..e7596313c1f 100644
--- a/lib/l10n/ro.js
+++ b/lib/l10n/ro.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Cannot write into \"config\" directory!" : "Nu se poate scrie în folderul \"config\"!",
"See %s" : "Vezi %s",
+ "PHP %s or higher is required." : "Versiunea PHP %s sau mai mare este necesară.",
"Help" : "Ajutor",
"Personal" : "Personal",
"Settings" : "Setări",
@@ -49,7 +50,6 @@ OC.L10N.register(
"Cannot write into \"config\" directory" : "Nu se poate scrie în folderul \"config\"",
"Cannot write into \"apps\" directory" : "Nu se poate scrie în folderul \"apps\"",
"PHP module %s not installed." : "Modulul PHP %s nu este instalat.",
- "PHP %s or higher is required." : "Versiunea PHP %s sau mai mare este necesară.",
"PHP modules have been installed, but they are still listed as missing?" : "Modulele PHP au fost instalate, dar apar ca lipsind?",
"PostgreSQL >= 9 required" : "Este necesară versiunea 9 sau mai mare a PostgreSQL",
"Please upgrade your database version" : "Actualizați baza de date la o versiune mai nouă",
diff --git a/lib/l10n/ro.json b/lib/l10n/ro.json
index ba971437442..9fb7f014389 100644
--- a/lib/l10n/ro.json
+++ b/lib/l10n/ro.json
@@ -1,6 +1,7 @@
{ "translations": {
"Cannot write into \"config\" directory!" : "Nu se poate scrie în folderul \"config\"!",
"See %s" : "Vezi %s",
+ "PHP %s or higher is required." : "Versiunea PHP %s sau mai mare este necesară.",
"Help" : "Ajutor",
"Personal" : "Personal",
"Settings" : "Setări",
@@ -47,7 +48,6 @@
"Cannot write into \"config\" directory" : "Nu se poate scrie în folderul \"config\"",
"Cannot write into \"apps\" directory" : "Nu se poate scrie în folderul \"apps\"",
"PHP module %s not installed." : "Modulul PHP %s nu este instalat.",
- "PHP %s or higher is required." : "Versiunea PHP %s sau mai mare este necesară.",
"PHP modules have been installed, but they are still listed as missing?" : "Modulele PHP au fost instalate, dar apar ca lipsind?",
"PostgreSQL >= 9 required" : "Este necesară versiunea 9 sau mai mare a PostgreSQL",
"Please upgrade your database version" : "Actualizați baza de date la o versiune mai nouă",
diff --git a/lib/l10n/ru.js b/lib/l10n/ru.js
index 490a3f6a1e2..15e80df0b30 100644
--- a/lib/l10n/ru.js
+++ b/lib/l10n/ru.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Обычно это можно исправить, %sпредоставив веб-серверу права на запись в папке конфигурации%s.",
"Sample configuration detected" : "Обнаружена конфигурация из примера",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Была обнаружена конфигурация из примера. Это может повредить вашей системе и это не поддерживается. Пожалуйста прочтите доументацию перед внесением изменений в файл config.php",
+ "PHP %s or higher is required." : "Требуется PHP %s или выше",
"Help" : "Помощь",
"Personal" : "Личное",
"Settings" : "Настройки",
@@ -105,7 +106,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Установите одну из этих локалей на вашей системе и перезапустите веб-сервер.",
"Please ask your server administrator to install the module." : "Пожалуйста, попростите администратора сервера установить модуль.",
"PHP module %s not installed." : "Не установлен PHP-модуль %s.",
- "PHP %s or higher is required." : "Требуется PHP %s или выше",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Пожалуйста, обратитесь к администратору сервера, чтобы обновить PHP до последней версии. Ваша версия PHP больше не поддерживается ownCloud и сообществом PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Включен безопасный режим PHP. ownCloud требует, чтобы он был выключен для корректной работы.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Безопасный режим PHP не поддерживается и его следует выключить как практически бесполезную настройку. Пожалуйста, попросите администратора сервера выключить его в php.ini либо в вашей конфигурации веб-сервера.",
diff --git a/lib/l10n/ru.json b/lib/l10n/ru.json
index 103121a374a..3058c0282de 100644
--- a/lib/l10n/ru.json
+++ b/lib/l10n/ru.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Обычно это можно исправить, %sпредоставив веб-серверу права на запись в папке конфигурации%s.",
"Sample configuration detected" : "Обнаружена конфигурация из примера",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Была обнаружена конфигурация из примера. Это может повредить вашей системе и это не поддерживается. Пожалуйста прочтите доументацию перед внесением изменений в файл config.php",
+ "PHP %s or higher is required." : "Требуется PHP %s или выше",
"Help" : "Помощь",
"Personal" : "Личное",
"Settings" : "Настройки",
@@ -103,7 +104,6 @@
"Please install one of these locales on your system and restart your webserver." : "Установите одну из этих локалей на вашей системе и перезапустите веб-сервер.",
"Please ask your server administrator to install the module." : "Пожалуйста, попростите администратора сервера установить модуль.",
"PHP module %s not installed." : "Не установлен PHP-модуль %s.",
- "PHP %s or higher is required." : "Требуется PHP %s или выше",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Пожалуйста, обратитесь к администратору сервера, чтобы обновить PHP до последней версии. Ваша версия PHP больше не поддерживается ownCloud и сообществом PHP.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Включен безопасный режим PHP. ownCloud требует, чтобы он был выключен для корректной работы.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Безопасный режим PHP не поддерживается и его следует выключить как практически бесполезную настройку. Пожалуйста, попросите администратора сервера выключить его в php.ini либо в вашей конфигурации веб-сервера.",
diff --git a/lib/l10n/sk_SK.js b/lib/l10n/sk_SK.js
index ec902af2641..6afcb4fc06a 100644
--- a/lib/l10n/sk_SK.js
+++ b/lib/l10n/sk_SK.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "To je zvyčajne možné opraviť tým, že %sudelíte webovému serveru oprávnenie na zápis k adresáru s konfiguráciou%s.",
"Sample configuration detected" : "Detekovaná bola vzorová konfigurácia",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Zistilo sa, že konfigurácia bola skopírovaná zo vzorových súborov. Takáto konfigurácia nie je podporovaná a môže poškodiť vašu inštaláciu. Prečítajte si dokumentáciu pred vykonaním zmien v config.php",
+ "PHP %s or higher is required." : "Požadovaná verzia PHP %s alebo vyššia.",
"Help" : "Pomoc",
"Personal" : "Osobné",
"Settings" : "Nastavenia",
@@ -104,7 +105,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Prosím, nainštalujte si aspoň jeden z týchto jazykov so svojho systému a reštartujte webserver.",
"Please ask your server administrator to install the module." : "Prosím, požiadajte administrátora vášho servera o inštaláciu modulu.",
"PHP module %s not installed." : "PHP modul %s nie je nainštalovaný.",
- "PHP %s or higher is required." : "Požadovaná verzia PHP %s alebo vyššia.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Prosím, požiadajte administrátora vášho servera o aktualizáciu PHP na najnovšiu verziu. Vaša verzia PHP už nie je podporovaná ownCloud-om a PHP komunitou.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode je zapnutý. ownCloud pre správnu funkčnosť vyžaduje, aby bol vypnutý.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode je zastarané a väčšinou zbytočné nastavenie, ktoré by malo byť vypnuté. Prosím, požiadajte administrátora vášho serveru o jeho vypnutie v php.ini alebo v nastaveniach webového servera.",
diff --git a/lib/l10n/sk_SK.json b/lib/l10n/sk_SK.json
index e2c219d5a1c..0d8adf8412f 100644
--- a/lib/l10n/sk_SK.json
+++ b/lib/l10n/sk_SK.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "To je zvyčajne možné opraviť tým, že %sudelíte webovému serveru oprávnenie na zápis k adresáru s konfiguráciou%s.",
"Sample configuration detected" : "Detekovaná bola vzorová konfigurácia",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Zistilo sa, že konfigurácia bola skopírovaná zo vzorových súborov. Takáto konfigurácia nie je podporovaná a môže poškodiť vašu inštaláciu. Prečítajte si dokumentáciu pred vykonaním zmien v config.php",
+ "PHP %s or higher is required." : "Požadovaná verzia PHP %s alebo vyššia.",
"Help" : "Pomoc",
"Personal" : "Osobné",
"Settings" : "Nastavenia",
@@ -102,7 +103,6 @@
"Please install one of these locales on your system and restart your webserver." : "Prosím, nainštalujte si aspoň jeden z týchto jazykov so svojho systému a reštartujte webserver.",
"Please ask your server administrator to install the module." : "Prosím, požiadajte administrátora vášho servera o inštaláciu modulu.",
"PHP module %s not installed." : "PHP modul %s nie je nainštalovaný.",
- "PHP %s or higher is required." : "Požadovaná verzia PHP %s alebo vyššia.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Prosím, požiadajte administrátora vášho servera o aktualizáciu PHP na najnovšiu verziu. Vaša verzia PHP už nie je podporovaná ownCloud-om a PHP komunitou.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode je zapnutý. ownCloud pre správnu funkčnosť vyžaduje, aby bol vypnutý.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode je zastarané a väčšinou zbytočné nastavenie, ktoré by malo byť vypnuté. Prosím, požiadajte administrátora vášho serveru o jeho vypnutie v php.ini alebo v nastaveniach webového servera.",
diff --git a/lib/l10n/sl.js b/lib/l10n/sl.js
index 8277186b0b3..10b19ea2769 100644
--- a/lib/l10n/sl.js
+++ b/lib/l10n/sl.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Napako je mogoče odpraviti z %sdodelitvijo dovoljenja spletnemu strežniku za pisanje v nastavitveno mapo%s.",
"Sample configuration detected" : "Zaznana je neustrezna preizkusna nastavitev",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Zaznano je, da je bila v sistem kopirana datoteka z enostavno nastavitvijo. To lahko vpliva na namestitev in zato možnost ni podprta. Pred spremembami datoteke config.php si natančno preberite dokumentacijo.",
+ "PHP %s or higher is required." : "Zahtevana je različica PHP %s ali višja.",
"Help" : "Pomoč",
"Personal" : "Osebno",
"Settings" : "Nastavitve",
@@ -105,7 +106,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Namestiti je treba podporo za vsaj eno od navedenih jezikovnih določil v sistemu in nato ponovno zagnati spletni strežnik.",
"Please ask your server administrator to install the module." : "Obvestite skrbnika strežnika, da je treba namestiti manjkajoč modul.",
"PHP module %s not installed." : "Modul PHP %s ni nameščen.",
- "PHP %s or higher is required." : "Zahtevana je različica PHP %s ali višja.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Obvestite skrbnika strežnika, da je treba posodobiti okolje PHP na najnovejšo različico. Trenutno nameščene različice skupnost PHP in ownCloud ne podpira več.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Omogočen je varni način PHP. Za pravilno delovanje system ownCloud je treba možnost onemogočiti.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Možnost varnega načina PHP je opuščena in jo je priporočljivo onemogočiti. Stopite v stik s skrbnikom sistema oziroma onemogočite možnost v datoteki php.ini ali med nastavitvami spletnega strežnika.",
diff --git a/lib/l10n/sl.json b/lib/l10n/sl.json
index a5d22213f1d..98c9f81d6d4 100644
--- a/lib/l10n/sl.json
+++ b/lib/l10n/sl.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Napako je mogoče odpraviti z %sdodelitvijo dovoljenja spletnemu strežniku za pisanje v nastavitveno mapo%s.",
"Sample configuration detected" : "Zaznana je neustrezna preizkusna nastavitev",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Zaznano je, da je bila v sistem kopirana datoteka z enostavno nastavitvijo. To lahko vpliva na namestitev in zato možnost ni podprta. Pred spremembami datoteke config.php si natančno preberite dokumentacijo.",
+ "PHP %s or higher is required." : "Zahtevana je različica PHP %s ali višja.",
"Help" : "Pomoč",
"Personal" : "Osebno",
"Settings" : "Nastavitve",
@@ -103,7 +104,6 @@
"Please install one of these locales on your system and restart your webserver." : "Namestiti je treba podporo za vsaj eno od navedenih jezikovnih določil v sistemu in nato ponovno zagnati spletni strežnik.",
"Please ask your server administrator to install the module." : "Obvestite skrbnika strežnika, da je treba namestiti manjkajoč modul.",
"PHP module %s not installed." : "Modul PHP %s ni nameščen.",
- "PHP %s or higher is required." : "Zahtevana je različica PHP %s ali višja.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Obvestite skrbnika strežnika, da je treba posodobiti okolje PHP na najnovejšo različico. Trenutno nameščene različice skupnost PHP in ownCloud ne podpira več.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "Omogočen je varni način PHP. Za pravilno delovanje system ownCloud je treba možnost onemogočiti.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "Možnost varnega načina PHP je opuščena in jo je priporočljivo onemogočiti. Stopite v stik s skrbnikom sistema oziroma onemogočite možnost v datoteki php.ini ali med nastavitvami spletnega strežnika.",
diff --git a/lib/l10n/sv.js b/lib/l10n/sv.js
index 9bfaa59074c..f8b950bbacc 100644
--- a/lib/l10n/sv.js
+++ b/lib/l10n/sv.js
@@ -4,6 +4,7 @@ OC.L10N.register(
"Cannot write into \"config\" directory!" : "Kan inte skriva till \"config\" katalogen!",
"This can usually be fixed by giving the webserver write access to the config directory" : "Detta kan vanligtvis åtgärdas genom att ge skrivrättigheter till config katalgogen",
"See %s" : "Se %s",
+ "PHP %s or higher is required." : "PHP %s eller högre krävs.",
"Help" : "Hjälp",
"Personal" : "Personligt",
"Settings" : "Inställningar",
@@ -93,7 +94,6 @@ OC.L10N.register(
"This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Detta kan vanligtvis åtgärdas genom att ge <a href=\"%s\" target=\"_blank\">webservern skrivrättigheter till rootkatalogen</a>.",
"Please ask your server administrator to install the module." : "Vänligen be din administratör att installera modulen.",
"PHP module %s not installed." : "PHP modulen %s är inte installerad.",
- "PHP %s or higher is required." : "PHP %s eller högre krävs.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Vänligen be serveradministratören uppdatera PHP till den senaste versionen. Din PHP-version stöds inte längre av ownCloud.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode är aktiverat. ownCloud kräver att det är deaktiverat för att fungera korrekt.",
"Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes är aktiverat. ownCloud kräver att det är deaktiverat för att fungera korrekt.",
diff --git a/lib/l10n/sv.json b/lib/l10n/sv.json
index 299911142a3..30646813198 100644
--- a/lib/l10n/sv.json
+++ b/lib/l10n/sv.json
@@ -2,6 +2,7 @@
"Cannot write into \"config\" directory!" : "Kan inte skriva till \"config\" katalogen!",
"This can usually be fixed by giving the webserver write access to the config directory" : "Detta kan vanligtvis åtgärdas genom att ge skrivrättigheter till config katalgogen",
"See %s" : "Se %s",
+ "PHP %s or higher is required." : "PHP %s eller högre krävs.",
"Help" : "Hjälp",
"Personal" : "Personligt",
"Settings" : "Inställningar",
@@ -91,7 +92,6 @@
"This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Detta kan vanligtvis åtgärdas genom att ge <a href=\"%s\" target=\"_blank\">webservern skrivrättigheter till rootkatalogen</a>.",
"Please ask your server administrator to install the module." : "Vänligen be din administratör att installera modulen.",
"PHP module %s not installed." : "PHP modulen %s är inte installerad.",
- "PHP %s or higher is required." : "PHP %s eller högre krävs.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Vänligen be serveradministratören uppdatera PHP till den senaste versionen. Din PHP-version stöds inte längre av ownCloud.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode är aktiverat. ownCloud kräver att det är deaktiverat för att fungera korrekt.",
"Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Magic Quotes är aktiverat. ownCloud kräver att det är deaktiverat för att fungera korrekt.",
diff --git a/lib/l10n/tr.js b/lib/l10n/tr.js
index 17a97c31e8a..cf50932d707 100644
--- a/lib/l10n/tr.js
+++ b/lib/l10n/tr.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Bu genellikle, %sweb sunucusuna config dizinine yazma erişimi verilerek%s çözülebilir",
"Sample configuration detected" : "Örnek yapılandırma tespit edildi",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Örnek yapılandırmanın kopyalanmış olabileceği tespit edildi. Bu kurulumunuzu bozabilir ve desteklenmemektedir. Lütfen config.php dosyasında değişiklik yapmadan önce belgelendirmeyi okuyun",
+ "PHP %s or higher is required." : "PHP %s veya daha üst sürümü gerekli.",
"Help" : "Yardım",
"Personal" : "Kişisel",
"Settings" : "Ayarlar",
@@ -105,7 +106,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "Lütfen bu yerellerden birini sisteminize yükleyin ve web sunucunuzu yeniden başlatın.",
"Please ask your server administrator to install the module." : "Lütfen modülün kurulması için sunucu yöneticinize danışın.",
"PHP module %s not installed." : "PHP modülü %s yüklü değil.",
- "PHP %s or higher is required." : "PHP %s veya daha üst sürümü gerekli.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Lütfen PHP'yi en son sürüme güncellemesi için sunucu yönetinize danışın. PHP sürümünüz ownCloud ve PHP topluluğu tarafından artık desteklenmemektedir.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Güvenli Kip (Safe Mode) etkin. ownCloud düzgün çalışabilmesi için bunun devre dışı olmasını gerektirir.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Güvenli Kip (Safe Mode), eskimiş ve devre dışı bırakılması gereken en kullanışsız ayardır. Lütfen php.ini veya web sunucu yapılandırması içerisinde devre dışı bırakması için sunucu yöneticinize danışın.",
diff --git a/lib/l10n/tr.json b/lib/l10n/tr.json
index b6023ba4e08..1c186dd27f3 100644
--- a/lib/l10n/tr.json
+++ b/lib/l10n/tr.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Bu genellikle, %sweb sunucusuna config dizinine yazma erişimi verilerek%s çözülebilir",
"Sample configuration detected" : "Örnek yapılandırma tespit edildi",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Örnek yapılandırmanın kopyalanmış olabileceği tespit edildi. Bu kurulumunuzu bozabilir ve desteklenmemektedir. Lütfen config.php dosyasında değişiklik yapmadan önce belgelendirmeyi okuyun",
+ "PHP %s or higher is required." : "PHP %s veya daha üst sürümü gerekli.",
"Help" : "Yardım",
"Personal" : "Kişisel",
"Settings" : "Ayarlar",
@@ -103,7 +104,6 @@
"Please install one of these locales on your system and restart your webserver." : "Lütfen bu yerellerden birini sisteminize yükleyin ve web sunucunuzu yeniden başlatın.",
"Please ask your server administrator to install the module." : "Lütfen modülün kurulması için sunucu yöneticinize danışın.",
"PHP module %s not installed." : "PHP modülü %s yüklü değil.",
- "PHP %s or higher is required." : "PHP %s veya daha üst sürümü gerekli.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "Lütfen PHP'yi en son sürüme güncellemesi için sunucu yönetinize danışın. PHP sürümünüz ownCloud ve PHP topluluğu tarafından artık desteklenmemektedir.",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Güvenli Kip (Safe Mode) etkin. ownCloud düzgün çalışabilmesi için bunun devre dışı olmasını gerektirir.",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Güvenli Kip (Safe Mode), eskimiş ve devre dışı bırakılması gereken en kullanışsız ayardır. Lütfen php.ini veya web sunucu yapılandırması içerisinde devre dışı bırakması için sunucu yöneticinize danışın.",
diff --git a/lib/l10n/uk.js b/lib/l10n/uk.js
index 5afce6b2ced..4512cb25227 100644
--- a/lib/l10n/uk.js
+++ b/lib/l10n/uk.js
@@ -17,6 +17,8 @@ OC.L10N.register(
"No app name specified" : "Не вказано ім'я додатку",
"Unknown filetype" : "Невідомий тип файлу",
"Invalid image" : "Невірне зображення",
+ "Database Error" : "Помилка бази даних",
+ "Please contact your system administrator." : "Будь ласка, зверніться до системного адміністратора.",
"web services under your control" : "підконтрольні Вам веб-сервіси",
"App directory already exists" : "Тека додатку вже існує",
"Can't create app folder. Please fix permissions. %s" : "Неможливо створити теку додатку. Будь ласка, виправте права доступу. %s",
@@ -77,6 +79,7 @@ OC.L10N.register(
"years ago" : "роки тому",
"A valid username must be provided" : "Потрібно задати вірне ім'я користувача",
"A valid password must be provided" : "Потрібно задати вірний пароль",
+ "The username is already being used" : "Ім'я користувача вже використовується",
"No database drivers (sqlite, mysql, or postgresql) installed." : "Не встановлено драйвер бази даних (sqlite, mysql, or postgresql).",
"Cannot write into \"config\" directory" : "Не можу писати у теку \"config\"",
"Cannot write into \"apps\" directory" : "Не можу писати у теку \"apps\"",
diff --git a/lib/l10n/uk.json b/lib/l10n/uk.json
index 9c632437ac2..87f34e15657 100644
--- a/lib/l10n/uk.json
+++ b/lib/l10n/uk.json
@@ -15,6 +15,8 @@
"No app name specified" : "Не вказано ім'я додатку",
"Unknown filetype" : "Невідомий тип файлу",
"Invalid image" : "Невірне зображення",
+ "Database Error" : "Помилка бази даних",
+ "Please contact your system administrator." : "Будь ласка, зверніться до системного адміністратора.",
"web services under your control" : "підконтрольні Вам веб-сервіси",
"App directory already exists" : "Тека додатку вже існує",
"Can't create app folder. Please fix permissions. %s" : "Неможливо створити теку додатку. Будь ласка, виправте права доступу. %s",
@@ -75,6 +77,7 @@
"years ago" : "роки тому",
"A valid username must be provided" : "Потрібно задати вірне ім'я користувача",
"A valid password must be provided" : "Потрібно задати вірний пароль",
+ "The username is already being used" : "Ім'я користувача вже використовується",
"No database drivers (sqlite, mysql, or postgresql) installed." : "Не встановлено драйвер бази даних (sqlite, mysql, or postgresql).",
"Cannot write into \"config\" directory" : "Не можу писати у теку \"config\"",
"Cannot write into \"apps\" directory" : "Не можу писати у теку \"apps\"",
diff --git a/lib/l10n/zh_CN.js b/lib/l10n/zh_CN.js
index 54d9afc315b..1aa656dea0a 100644
--- a/lib/l10n/zh_CN.js
+++ b/lib/l10n/zh_CN.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Cannot write into \"config\" directory!" : "无法写入“config”目录!",
"See %s" : "查看 %s",
+ "PHP %s or higher is required." : "要求 PHP 版本 %s 或者更高。",
"Help" : "帮助",
"Personal" : "个人",
"Settings" : "设置",
@@ -89,7 +90,6 @@ OC.L10N.register(
"Setting locale to %s failed" : "设置语言为 %s 失败",
"Please ask your server administrator to install the module." : "请联系服务器管理员安装模块。",
"PHP module %s not installed." : "PHP %s 模块未安装。",
- "PHP %s or higher is required." : "要求 PHP 版本 %s 或者更高。",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "请联系服务器管理员升级 PHP 到最新的版本。ownCloud 和 PHP 社区已经不再支持此版本的 PHP。",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode 已经启用,ownCloud 需要 Safe Mode 停用以正常工作。",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode 已经被废弃并且应当被停用。请联系服务器管理员在 php.ini 或您的服务器设置中停用 Safe Mode。",
diff --git a/lib/l10n/zh_CN.json b/lib/l10n/zh_CN.json
index 3168f94af58..bad13fcc12b 100644
--- a/lib/l10n/zh_CN.json
+++ b/lib/l10n/zh_CN.json
@@ -1,6 +1,7 @@
{ "translations": {
"Cannot write into \"config\" directory!" : "无法写入“config”目录!",
"See %s" : "查看 %s",
+ "PHP %s or higher is required." : "要求 PHP 版本 %s 或者更高。",
"Help" : "帮助",
"Personal" : "个人",
"Settings" : "设置",
@@ -87,7 +88,6 @@
"Setting locale to %s failed" : "设置语言为 %s 失败",
"Please ask your server administrator to install the module." : "请联系服务器管理员安装模块。",
"PHP module %s not installed." : "PHP %s 模块未安装。",
- "PHP %s or higher is required." : "要求 PHP 版本 %s 或者更高。",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "请联系服务器管理员升级 PHP 到最新的版本。ownCloud 和 PHP 社区已经不再支持此版本的 PHP。",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP Safe Mode 已经启用,ownCloud 需要 Safe Mode 停用以正常工作。",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP Safe Mode 已经被废弃并且应当被停用。请联系服务器管理员在 php.ini 或您的服务器设置中停用 Safe Mode。",
diff --git a/lib/l10n/zh_TW.js b/lib/l10n/zh_TW.js
index 18fcfe06de9..6c63fea871b 100644
--- a/lib/l10n/zh_TW.js
+++ b/lib/l10n/zh_TW.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "%s允許網頁伺服器寫入設定目錄%s通常可以解決這個問題",
"Sample configuration detected" : "偵測到範本設定",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "看來您直接複製了範本設定來使用,這可能會毀掉你的安裝,請閱讀說明文件後對 config.php 進行適當的修改",
+ "PHP %s or higher is required." : "需要 PHP %s 或更高版本",
"Help" : "說明",
"Personal" : "個人",
"Settings" : "設定",
@@ -103,7 +104,6 @@ OC.L10N.register(
"Please install one of these locales on your system and restart your webserver." : "請在系統中安裝這些語系的其中一個,然後重啓網頁伺服器",
"Please ask your server administrator to install the module." : "請詢問系統管理員來安裝這些模組",
"PHP module %s not installed." : "未安裝 PHP 模組 %s",
- "PHP %s or higher is required." : "需要 PHP %s 或更高版本",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "請詢問系統管理員將 PHP 升級至最新版,目前的 PHP 版本已經不再被 ownCloud 和 PHP 社群支援",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP 安全模式已經啟動,ownCloud 需要您將它關閉才能正常運作",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP 安全模式已經被棄用,並且在大多數狀況下無助於提升安全性,它應該被關閉。請詢問系統管理員將其在 php.ini 或網頁伺服器當中關閉。",
diff --git a/lib/l10n/zh_TW.json b/lib/l10n/zh_TW.json
index f6befb07d0a..efd8293d9db 100644
--- a/lib/l10n/zh_TW.json
+++ b/lib/l10n/zh_TW.json
@@ -5,6 +5,7 @@
"This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "%s允許網頁伺服器寫入設定目錄%s通常可以解決這個問題",
"Sample configuration detected" : "偵測到範本設定",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "看來您直接複製了範本設定來使用,這可能會毀掉你的安裝,請閱讀說明文件後對 config.php 進行適當的修改",
+ "PHP %s or higher is required." : "需要 PHP %s 或更高版本",
"Help" : "說明",
"Personal" : "個人",
"Settings" : "設定",
@@ -101,7 +102,6 @@
"Please install one of these locales on your system and restart your webserver." : "請在系統中安裝這些語系的其中一個,然後重啓網頁伺服器",
"Please ask your server administrator to install the module." : "請詢問系統管理員來安裝這些模組",
"PHP module %s not installed." : "未安裝 PHP 模組 %s",
- "PHP %s or higher is required." : "需要 PHP %s 或更高版本",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." : "請詢問系統管理員將 PHP 升級至最新版,目前的 PHP 版本已經不再被 ownCloud 和 PHP 社群支援",
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." : "PHP 安全模式已經啟動,ownCloud 需要您將它關閉才能正常運作",
"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." : "PHP 安全模式已經被棄用,並且在大多數狀況下無助於提升安全性,它應該被關閉。請詢問系統管理員將其在 php.ini 或網頁伺服器當中關閉。",
diff --git a/lib/private/activitymanager.php b/lib/private/activitymanager.php
index f31b121c8e8..e0ee7c1b055 100644
--- a/lib/private/activitymanager.php
+++ b/lib/private/activitymanager.php
@@ -247,16 +247,28 @@ class ActivityManager implements IManager {
* @return array
*/
function getQueryForFilter($filter) {
+
+ $conditions = array();
+ $parameters = array();
+
foreach($this->extensions as $extension) {
$c = $extension();
if ($c instanceof IExtension) {
$result = $c->getQueryForFilter($filter);
if (is_array($result)) {
- return $result;
+ list($condition, $parameter) = $result;
+ if ($condition && is_array($parameter)) {
+ $conditions[] = $condition;
+ $parameters = array_merge($parameters, $parameter);
+ }
}
}
}
- return array(null, null);
+ if (empty($conditions)) {
+ return array(null, null);
+ }
+
+ return array(' and ((' . implode(') or (', $conditions) . '))', $parameters);
}
}
diff --git a/lib/private/app.php b/lib/private/app.php
index 8e36d43bfb1..86db8fd9f55 100644
--- a/lib/private/app.php
+++ b/lib/private/app.php
@@ -809,7 +809,7 @@ class OC_App {
if(isset($info['shipped']) and ($info['shipped'] == 'true')) {
$info['internal'] = true;
- $info['internallabel'] = $l->t('Recommended');
+ $info['internallabel'] = (string)$l->t('Recommended');
$info['internalclass'] = 'recommendedapp';
$info['removable'] = false;
} else {
@@ -920,7 +920,7 @@ class OC_App {
$app1[$i]['score'] = $app['score'];
$app1[$i]['removable'] = false;
if ($app['label'] == 'recommended') {
- $app1[$i]['internallabel'] = $l->t('Recommended');
+ $app1[$i]['internallabel'] = (string)$l->t('Recommended');
$app1[$i]['internalclass'] = 'recommendedapp';
}
diff --git a/lib/private/app/dependencyanalyzer.php b/lib/private/app/dependencyanalyzer.php
new file mode 100644
index 00000000000..fb4b3761656
--- /dev/null
+++ b/lib/private/app/dependencyanalyzer.php
@@ -0,0 +1,87 @@
+<?php
+ /**
+ * @author Thomas Müller
+ * @copyright 2014 Thomas Müller deepdiver@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\App;
+
+class DependencyAnalyzer {
+
+ /** @var Platform */
+ private $system;
+
+ /** @var \OCP\IL10N */
+ private $l;
+
+ /** @var array */
+ private $missing;
+
+ /** @var array */
+ private $dependencies;
+
+ /**
+ * @param array $app
+ * @param Platform $platform
+ * @param \OCP\IL10N $l
+ */
+ function __construct(array $app, $platform, $l) {
+ $this->system = $platform;
+ $this->l = $l;
+ $this->missing = array();
+ $this->dependencies = array();
+ if (array_key_exists('dependencies', $app)) {
+ $this->dependencies = $app['dependencies'];
+ }
+ }
+
+ /**
+ * @param array $app
+ * @returns array of missing dependencies
+ */
+ public function analyze() {
+ $this->analysePhpVersion();
+ $this->analyseSupportedDatabases();
+ return $this->missing;
+ }
+
+ private function analysePhpVersion() {
+ if (isset($this->dependencies['php']['@attributes']['min-version'])) {
+ $minVersion = $this->dependencies['php']['@attributes']['min-version'];
+ if (version_compare($this->system->getPhpVersion(), $minVersion, '<')) {
+ $this->missing[] = (string)$this->l->t('PHP %s or higher is required.', $minVersion);
+ }
+ }
+ if (isset($this->dependencies['php']['@attributes']['max-version'])) {
+ $maxVersion = $this->dependencies['php']['@attributes']['max-version'];
+ if (version_compare($this->system->getPhpVersion(), $maxVersion, '>')) {
+ $this->missing[] = (string)$this->l->t('PHP with a version less then %s is required.', $maxVersion);
+ }
+ }
+ }
+
+ private function analyseSupportedDatabases() {
+ if (!isset($this->dependencies['database'])) {
+ return;
+ }
+
+ $supportedDatabases = $this->dependencies['database'];
+ if (empty($supportedDatabases)) {
+ return;
+ }
+ $supportedDatabases = array_map(function($db) {
+ if (isset($db['@value'])) {
+ return $db['@value'];
+ }
+ return $db;
+ }, $supportedDatabases);
+ $currentDatabase = $this->system->getDatabase();
+ if (!in_array($currentDatabase, $supportedDatabases)) {
+ $this->missing[] = (string)$this->l->t('Following databases are supported: %s', join(', ', $supportedDatabases));
+ }
+ }
+}
diff --git a/lib/private/app/infoparser.php b/lib/private/app/infoparser.php
index b4bdbea5c04..0bfbf6bd139 100644
--- a/lib/private/app/infoparser.php
+++ b/lib/private/app/infoparser.php
@@ -47,7 +47,7 @@ class InfoParser {
if ($xml == false) {
return null;
}
- $array = json_decode(json_encode((array)$xml), TRUE);
+ $array = $this->xmlToArray($xml, false);
if (is_null($array)) {
return null;
}
@@ -60,8 +60,11 @@ class InfoParser {
if (!array_key_exists('public', $array)) {
$array['public'] = array();
}
+ if (!array_key_exists('types', $array)) {
+ $array['types'] = array();
+ }
- if (array_key_exists('documentation', $array)) {
+ if (array_key_exists('documentation', $array) && is_array($array['documentation'])) {
foreach ($array['documentation'] as $key => $url) {
// If it is not an absolute URL we assume it is a key
// i.e. admin-ldap will get converted to go.php?to=admin-ldap
@@ -73,9 +76,70 @@ class InfoParser {
}
}
if (array_key_exists('types', $array)) {
- foreach ($array['types'] as $type => $v) {
- unset($array['types'][$type]);
- $array['types'][] = $type;
+ if (is_array($array['types'])) {
+ foreach ($array['types'] as $type => $v) {
+ unset($array['types'][$type]);
+ if (is_string($type)) {
+ $array['types'][] = $type;
+ }
+ }
+ } else {
+ $array['types'] = array();
+ }
+ }
+
+ return $array;
+ }
+
+ /**
+ * @param \SimpleXMLElement $xml
+ * @return array
+ */
+ function xmlToArray($xml) {
+ if (!$xml->children()) {
+ return (string)$xml;
+ }
+
+ $array = array();
+ foreach ($xml->children() as $element => $node) {
+ $totalElement = count($xml->{$element});
+
+ if (!isset($array[$element])) {
+ $array[$element] = "";
+ }
+ /**
+ * @var \SimpleXMLElement $node
+ */
+
+ // Has attributes
+ if ($attributes = $node->attributes()) {
+ $data = array(
+ '@attributes' => array(),
+ );
+ if (!count($node->children())){
+ $value = (string)$node;
+ if (!empty($value)) {
+ $data['@value'] = (string)$node;
+ }
+ } else {
+ $data = array_merge($data, $this->xmlToArray($node));
+ }
+ foreach ($attributes as $attr => $value) {
+ $data['@attributes'][$attr] = (string)$value;
+ }
+
+ if ($totalElement > 1) {
+ $array[$element][] = $data;
+ } else {
+ $array[$element] = $data;
+ }
+ // Just a value
+ } else {
+ if ($totalElement > 1) {
+ $array[$element][] = $this->xmlToArray($node);
+ } else {
+ $array[$element] = $this->xmlToArray($node);
+ }
}
}
diff --git a/lib/private/app/platform.php b/lib/private/app/platform.php
new file mode 100644
index 00000000000..39f8a2979f9
--- /dev/null
+++ b/lib/private/app/platform.php
@@ -0,0 +1,33 @@
+<?php
+ /**
+ * @author Thomas Müller
+ * @copyright 2014 Thomas Müller deepdiver@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\App;
+
+use OCP\IConfig;
+
+class Platform {
+
+ function __construct(IConfig $config) {
+ $this->config = $config;
+ }
+
+ public function getPhpVersion() {
+ return phpversion();
+ }
+
+ public function getDatabase() {
+ $dbType = $this->config->getSystemValue('dbtype', 'sqlite');
+ if ($dbType === 'sqlite3') {
+ $dbType = 'sqlite';
+ }
+
+ return $dbType;
+ }
+}
diff --git a/lib/private/appframework/app.php b/lib/private/appframework/app.php
index baf52d02054..f56ba4af870 100644
--- a/lib/private/appframework/app.php
+++ b/lib/private/appframework/app.php
@@ -53,7 +53,7 @@ class App {
// initialize the dispatcher and run all the middleware before the controller
$dispatcher = $container['Dispatcher'];
- list($httpHeaders, $responseHeaders, $output) =
+ list($httpHeaders, $responseHeaders, $responseCookies, $output) =
$dispatcher->dispatch($controller, $methodName);
if(!is_null($httpHeaders)) {
@@ -64,6 +64,14 @@ class App {
header($name . ': ' . $value);
}
+ foreach($responseCookies as $name => $value) {
+ $expireDate = null;
+ if($value['expireDate'] instanceof \DateTime) {
+ $expireDate = $value['expireDate']->getTimestamp();
+ }
+ setcookie($name, $value['value'], $expireDate, $container->getServer()->getWebRoot(), null, $container->getServer()->getConfig()->getSystemValue('forcessl', false), true);
+ }
+
if(!is_null($output)) {
header('Content-Length: ' . strlen($output));
print($output);
diff --git a/lib/private/appframework/http/dispatcher.php b/lib/private/appframework/http/dispatcher.php
index 29a661d5743..24540ef3c94 100644
--- a/lib/private/appframework/http/dispatcher.php
+++ b/lib/private/appframework/http/dispatcher.php
@@ -48,7 +48,7 @@ class Dispatcher {
* @param Http $protocol the http protocol with contains all status headers
* @param MiddlewareDispatcher $middlewareDispatcher the dispatcher which
* runs the middleware
- * @param ControllerMethodReflector the reflector that is used to inject
+ * @param ControllerMethodReflector $reflector the reflector that is used to inject
* the arguments for the controller
* @param IRequest $request the incoming request
*/
@@ -71,6 +71,7 @@ class Dispatcher {
* @return array $array[0] contains a string with the http main header,
* $array[1] contains headers in the form: $key => value, $array[2] contains
* the response output
+ * @throws \Exception
*/
public function dispatch(Controller $controller, $methodName) {
$out = array(null, array(), null);
@@ -102,13 +103,14 @@ class Dispatcher {
// get the output which should be printed and run the after output
// middleware to modify the response
$output = $response->render();
- $out[2] = $this->middlewareDispatcher->beforeOutput(
+ $out[3] = $this->middlewareDispatcher->beforeOutput(
$controller, $methodName, $output);
// depending on the cache object the headers need to be changed
$out[0] = $this->protocol->getStatusHeader($response->getStatus(),
$response->getLastModified(), $response->getETag());
- $out[1] = $response->getHeaders();
+ $out[1] = array_merge($response->getHeaders());
+ $out[2] = $response->getCookies();
return $out;
}
diff --git a/lib/private/files/cache/cache.php b/lib/private/files/cache/cache.php
index 2c12f834518..4157da2281c 100644
--- a/lib/private/files/cache/cache.php
+++ b/lib/private/files/cache/cache.php
@@ -585,7 +585,7 @@ class Cache {
/**
* 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,
+ * If multiple 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
*
diff --git a/lib/private/files/cache/wrapper/cachejail.php b/lib/private/files/cache/wrapper/cachejail.php
new file mode 100644
index 00000000000..7982293f5ed
--- /dev/null
+++ b/lib/private/files/cache/wrapper/cachejail.php
@@ -0,0 +1,255 @@
+<?php
+/**
+ * Copyright (c) 2014 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\Wrapper;
+
+/**
+ * Jail to a subdirectory of the wrapped cache
+ */
+class CacheJail extends CacheWrapper {
+ /**
+ * @var string
+ */
+ protected $root;
+
+ /**
+ * @param \OC\Files\Cache\Cache $cache
+ * @param string $root
+ */
+ public function __construct($cache, $root) {
+ parent::__construct($cache);
+ $this->root = $root;
+ }
+
+ protected function getSourcePath($path) {
+ if ($path === '') {
+ return $this->root;
+ } else {
+ return $this->root . '/' . $path;
+ }
+ }
+
+ /**
+ * @param string $path
+ * @return null|string the jailed path or null if the path is outside the jail
+ */
+ protected function getJailedPath($path) {
+ $rootLength = strlen($this->root) + 1;
+ if ($path === $this->root) {
+ return '';
+ } else if (substr($path, 0, $rootLength) === $this->root . '/') {
+ return substr($path, $rootLength);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @param array $entry
+ * @return array
+ */
+ protected function formatCacheEntry($entry) {
+ if (isset($entry['path'])) {
+ $entry['path'] = $this->getJailedPath($entry['path']);
+ }
+ return $entry;
+ }
+
+ protected function filterCacheEntry($entry) {
+ $rootLength = strlen($this->root) + 1;
+ return ($entry['path'] === $this->root) or (substr($entry['path'], 0, $rootLength) === $this->root . '/');
+ }
+
+ /**
+ * get the stored metadata of a file or folder
+ *
+ * @param string /int $file
+ * @return array|false
+ */
+ public function get($file) {
+ if (is_string($file) or $file == '') {
+ $file = $this->getSourcePath($file);
+ }
+ return parent::get($file);
+ }
+
+ /**
+ * store meta data for a file or folder
+ *
+ * @param string $file
+ * @param array $data
+ *
+ * @return int file id
+ */
+ public function put($file, array $data) {
+ return $this->cache->put($this->getSourcePath($file), $data);
+ }
+
+ /**
+ * update the metadata in the cache
+ *
+ * @param int $id
+ * @param array $data
+ */
+ public function update($id, array $data) {
+ $this->cache->update($this->getSourcePath($id), $data);
+ }
+
+ /**
+ * get the file id for a file
+ *
+ * @param string $file
+ * @return int
+ */
+ public function getId($file) {
+ return $this->cache->getId($this->getSourcePath($file));
+ }
+
+ /**
+ * get the id of the parent folder of a file
+ *
+ * @param string $file
+ * @return int
+ */
+ public function getParentId($file) {
+ if ($file === '') {
+ return -1;
+ } else {
+ return $this->cache->getParentId($this->getSourcePath($file));
+ }
+ }
+
+ /**
+ * check if a file is available in the cache
+ *
+ * @param string $file
+ * @return bool
+ */
+ public function inCache($file) {
+ return $this->cache->inCache($this->getSourcePath($file));
+ }
+
+ /**
+ * remove a file or folder from the cache
+ *
+ * @param string $file
+ */
+ public function remove($file) {
+ $this->cache->remove($this->getSourcePath($file));
+ }
+
+ /**
+ * Move a file or folder in the cache
+ *
+ * @param string $source
+ * @param string $target
+ */
+ public function move($source, $target) {
+ $this->cache->move($this->getSourcePath($source), $this->getSourcePath($target));
+ }
+
+ /**
+ * remove all entries for files that are stored on the storage from the cache
+ */
+ public function clear() {
+ $this->cache->remove($this->root);
+ }
+
+ /**
+ * @param string $file
+ *
+ * @return int, Cache::NOT_FOUND, Cache::PARTIAL, Cache::SHALLOW or Cache::COMPLETE
+ */
+ public function getStatus($file) {
+ return $this->cache->getStatus($this->getSourcePath($file));
+ }
+
+ private function formatSearchResults($results) {
+ $results = array_filter($results, array($this, 'filterCacheEntry'));
+ $results = array_values($results);
+ return array_map(array($this, 'formatCacheEntry'), $results);
+ }
+
+ /**
+ * search for files matching $pattern
+ *
+ * @param string $pattern
+ * @return array an array of file data
+ */
+ public function search($pattern) {
+ $results = $this->cache->search($pattern);
+ return $this->formatSearchResults($results);
+ }
+
+ /**
+ * search for files by mimetype
+ *
+ * @param string $mimetype
+ * @return array
+ */
+ public function searchByMime($mimetype) {
+ $results = $this->cache->searchByMime($mimetype);
+ return $this->formatSearchResults($results);
+ }
+
+ /**
+ * update the folder size and the size of all parent folders
+ *
+ * @param string|boolean $path
+ * @param array $data (optional) meta data of the folder
+ */
+ public function correctFolderSize($path, $data = null) {
+ $this->cache->correctFolderSize($this->getSourcePath($path), $data);
+ }
+
+ /**
+ * get the size of a folder and set it in the cache
+ *
+ * @param string $path
+ * @param array $entry (optional) meta data of the folder
+ * @return int
+ */
+ public function calculateFolderSize($path, $entry = null) {
+ return $this->cache->calculateFolderSize($this->getSourcePath($path), $entry);
+ }
+
+ /**
+ * get all file ids on the files on the storage
+ *
+ * @return int[]
+ */
+ public function getAll() {
+ // not supported
+ return array();
+ }
+
+ /**
+ * 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() {
+ // not supported
+ return false;
+ }
+
+ /**
+ * get the path of a file on this storage by it's id
+ *
+ * @param int $id
+ * @return string|null
+ */
+ public function getPathById($id) {
+ $path = $this->cache->getPathById($id);
+ return $this->getJailedPath($path);
+ }
+}
diff --git a/lib/private/files/cache/wrapper/cachepermissionsmask.php b/lib/private/files/cache/wrapper/cachepermissionsmask.php
new file mode 100644
index 00000000000..6ce6a4ebc44
--- /dev/null
+++ b/lib/private/files/cache/wrapper/cachepermissionsmask.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Copyright (c) 2014 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\Wrapper;
+
+class CachePermissionsMask extends CacheWrapper {
+ /**
+ * @var int
+ */
+ protected $mask;
+
+ /**
+ * @param \OC\Files\Cache\Cache $cache
+ * @param int $mask
+ */
+ public function __construct($cache, $mask) {
+ parent::__construct($cache);
+ $this->mask = $mask;
+ }
+
+ protected function formatCacheEntry($entry) {
+ if (isset($entry['permissions'])) {
+ $entry['permissions'] &= $this->mask;
+ }
+ return $entry;
+ }
+}
diff --git a/lib/private/files/cache/wrapper/cachewrapper.php b/lib/private/files/cache/wrapper/cachewrapper.php
new file mode 100644
index 00000000000..040358ec657
--- /dev/null
+++ b/lib/private/files/cache/wrapper/cachewrapper.php
@@ -0,0 +1,247 @@
+<?php
+/**
+ * Copyright (c) 2014 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\Wrapper;
+
+use OC\Files\Cache\Cache;
+
+class CacheWrapper extends Cache {
+ /**
+ * @var \OC\Files\Cache\Cache
+ */
+ protected $cache;
+
+ /**
+ * @param \OC\Files\Cache\Cache $cache
+ */
+ public function __construct($cache) {
+ $this->cache = $cache;
+ }
+
+ /**
+ * Make it easy for wrappers to modify every returned cache entry
+ *
+ * @param array $entry
+ * @return array
+ */
+ protected function formatCacheEntry($entry) {
+ return $entry;
+ }
+
+ /**
+ * get the stored metadata of a file or folder
+ *
+ * @param string /int $file
+ * @return array|false
+ */
+ public function get($file) {
+ $result = $this->cache->get($file);
+ if ($result) {
+ $result = $this->formatCacheEntry($result);
+ }
+ return $result;
+ }
+
+ /**
+ * get the metadata of all files stored in $folder
+ *
+ * @param string $folder
+ * @return array
+ */
+ public function getFolderContents($folder) {
+ // cant do a simple $this->cache->.... call here since getFolderContentsById needs to be called on this
+ // and not the wrapped cache
+ $fileId = $this->getId($folder);
+ return $this->getFolderContentsById($fileId);
+ }
+
+ /**
+ * get the metadata of all files stored in $folder
+ *
+ * @param int $fileId the file id of the folder
+ * @return array
+ */
+ public function getFolderContentsById($fileId) {
+ $results = $this->cache->getFolderContentsById($fileId);
+ return array_map(array($this, 'formatCacheEntry'), $results);
+ }
+
+ /**
+ * store meta data for a file or folder
+ *
+ * @param string $file
+ * @param array $data
+ *
+ * @return int file id
+ */
+ public function put($file, array $data) {
+ return $this->cache->put($file, $data);
+ }
+
+ /**
+ * update the metadata in the cache
+ *
+ * @param int $id
+ * @param array $data
+ */
+ public function update($id, array $data) {
+ $this->cache->update($id, $data);
+ }
+
+ /**
+ * get the file id for a file
+ *
+ * @param string $file
+ * @return int
+ */
+ public function getId($file) {
+ return $this->cache->getId($file);
+ }
+
+ /**
+ * get the id of the parent folder of a file
+ *
+ * @param string $file
+ * @return int
+ */
+ public function getParentId($file) {
+ return $this->cache->getParentId($file);
+ }
+
+ /**
+ * check if a file is available in the cache
+ *
+ * @param string $file
+ * @return bool
+ */
+ public function inCache($file) {
+ return $this->cache->inCache($file);
+ }
+
+ /**
+ * remove a file or folder from the cache
+ *
+ * @param string $file
+ */
+ public function remove($file) {
+ $this->cache->remove($file);
+ }
+
+ /**
+ * Move a file or folder in the cache
+ *
+ * @param string $source
+ * @param string $target
+ */
+ public function move($source, $target) {
+ $this->cache->move($source, $target);
+ }
+
+ /**
+ * remove all entries for files that are stored on the storage from the cache
+ */
+ public function clear() {
+ $this->cache->clear();
+ }
+
+ /**
+ * @param string $file
+ *
+ * @return int, Cache::NOT_FOUND, Cache::PARTIAL, Cache::SHALLOW or Cache::COMPLETE
+ */
+ public function getStatus($file) {
+ return $this->cache->getStatus($file);
+ }
+
+ /**
+ * search for files matching $pattern
+ *
+ * @param string $pattern
+ * @return array an array of file data
+ */
+ public function search($pattern) {
+ $results = $this->cache->search($pattern);
+ return array_map(array($this, 'formatCacheEntry'), $results);
+ }
+
+ /**
+ * search for files by mimetype
+ *
+ * @param string $mimetype
+ * @return array
+ */
+ public function searchByMime($mimetype) {
+ $results = $this->cache->searchByMime($mimetype);
+ return array_map(array($this, 'formatCacheEntry'), $results);
+ }
+
+ /**
+ * update the folder size and the size of all parent folders
+ *
+ * @param string|boolean $path
+ * @param array $data (optional) meta data of the folder
+ */
+ public function correctFolderSize($path, $data = null) {
+ $this->cache->correctFolderSize($path, $data);
+ }
+
+ /**
+ * get the size of a folder and set it in the cache
+ *
+ * @param string $path
+ * @param array $entry (optional) meta data of the folder
+ * @return int
+ */
+ public function calculateFolderSize($path, $entry = null) {
+ return $this->cache->calculateFolderSize($path, $entry);
+ }
+
+ /**
+ * get all file ids on the files on the storage
+ *
+ * @return int[]
+ */
+ public function getAll() {
+ return $this->cache->getAll();
+ }
+
+ /**
+ * find a folder in the cache which has not been fully scanned
+ *
+ * If multiple 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() {
+ return $this->cache->getIncomplete();
+ }
+
+ /**
+ * get the path of a file on this storage by it's id
+ *
+ * @param int $id
+ * @return string|null
+ */
+ public function getPathById($id) {
+ return $this->cache->getPathById($id);
+ }
+
+ /**
+ * get the storage id of the storage for a file and the internal path of the file
+ * unlike getPathById this does not limit the search to files on this storage and
+ * instead does a global search in the cache table
+ *
+ * @param int $id
+ * @return array, first element holding the storage id, second the path
+ */
+ static public function getById($id) {
+ return parent::getById($id);
+ }
+}
diff --git a/lib/private/files/node/file.php b/lib/private/files/node/file.php
index 81e251c20b8..1c47294cdae 100644
--- a/lib/private/files/node/file.php
+++ b/lib/private/files/node/file.php
@@ -34,6 +34,7 @@ class File extends Node implements \OCP\Files\File {
if ($this->checkPermissions(\OCP\Constants::PERMISSION_UPDATE)) {
$this->sendHooks(array('preWrite'));
$this->view->file_put_contents($this->path, $data);
+ $this->fileInfo = null;
$this->sendHooks(array('postWrite'));
} else {
throw new NotPermittedException();
@@ -41,13 +42,6 @@ class File extends Node implements \OCP\Files\File {
}
/**
- * @return string
- */
- public function getMimeType() {
- return $this->view->getMimeType($this->path);
- }
-
- /**
* @param string $mode
* @return resource
* @throws \OCP\Files\NotPermittedException
@@ -94,6 +88,7 @@ class File extends Node implements \OCP\Files\File {
$nonExisting = new NonExistingFile($this->root, $this->view, $this->path);
$this->root->emit('\OC\Files', 'postDelete', array($nonExisting));
$this->exists = false;
+ $this->fileInfo = null;
} else {
throw new NotPermittedException();
}
@@ -138,6 +133,7 @@ class File extends Node implements \OCP\Files\File {
$this->root->emit('\OC\Files', 'postRename', array($this, $targetNode));
$this->root->emit('\OC\Files', 'postWrite', array($targetNode));
$this->path = $targetPath;
+ $this->fileInfo = null;
return $targetNode;
} else {
throw new NotPermittedException();
diff --git a/lib/private/files/node/folder.php b/lib/private/files/node/folder.php
index 83e20871528..54a699be532 100644
--- a/lib/private/files/node/folder.php
+++ b/lib/private/files/node/folder.php
@@ -321,13 +321,6 @@ class Folder extends Node implements \OCP\Files\Folder {
return $this->view->free_space($this->path);
}
- /**
- * @return bool
- */
- public function isCreatable() {
- return $this->checkPermissions(\OCP\Constants::PERMISSION_CREATE);
- }
-
public function delete() {
if ($this->checkPermissions(\OCP\Constants::PERMISSION_DELETE)) {
$this->sendHooks(array('preDelete'));
diff --git a/lib/private/files/node/node.php b/lib/private/files/node/node.php
index c52f5bbd54f..b80db28e8ec 100644
--- a/lib/private/files/node/node.php
+++ b/lib/private/files/node/node.php
@@ -8,10 +8,10 @@
namespace OC\Files\Node;
-use OCP\Files\NotFoundException;
+use OCP\Files\FileInfo;
use OCP\Files\NotPermittedException;
-class Node implements \OCP\Files\Node {
+class Node implements \OCP\Files\Node, FileInfo {
/**
* @var \OC\Files\View $view
*/
@@ -28,6 +28,11 @@ class Node implements \OCP\Files\Node {
protected $path;
/**
+ * @var \OCP\Files\FileInfo
+ */
+ protected $fileInfo;
+
+ /**
* @param \OC\Files\View $view
* @param \OC\Files\Node\Root $root
* @param string $path
@@ -38,6 +43,13 @@ class Node implements \OCP\Files\Node {
$this->path = $path;
}
+ private function getFileInfo() {
+ if (!$this->fileInfo) {
+ $this->fileInfo = $this->view->getFileInfo($this->path);
+ }
+ return $this->fileInfo;
+ }
+
/**
* @param string[] $hooks
*/
@@ -85,6 +97,12 @@ class Node implements \OCP\Files\Node {
$this->sendHooks(array('preTouch'));
$this->view->touch($this->path, $mtime);
$this->sendHooks(array('postTouch'));
+ if ($this->fileInfo) {
+ if (is_null($mtime)) {
+ $mtime = time();
+ }
+ $this->fileInfo['mtime'] = $mtime;
+ }
} else {
throw new NotPermittedException();
}
@@ -118,8 +136,7 @@ class Node implements \OCP\Files\Node {
* @return int
*/
public function getId() {
- $info = $this->view->getFileInfo($this->path);
- return $info['fileid'];
+ return $this->getFileInfo()->getId();
}
/**
@@ -133,58 +150,60 @@ class Node implements \OCP\Files\Node {
* @return int
*/
public function getMTime() {
- return $this->view->filemtime($this->path);
+ return $this->getFileInfo()->getMTime();
}
/**
* @return int
*/
public function getSize() {
- return $this->view->filesize($this->path);
+ return $this->getFileInfo()->getSize();
}
/**
* @return string
*/
public function getEtag() {
- $info = $this->view->getFileInfo($this->path);
- return $info['etag'];
+ return $this->getFileInfo()->getEtag();
}
/**
* @return int
*/
public function getPermissions() {
- $info = $this->view->getFileInfo($this->path);
- return $info['permissions'];
+ return $this->getFileInfo()->getPermissions();
}
/**
* @return bool
*/
public function isReadable() {
- return $this->checkPermissions(\OCP\Constants::PERMISSION_READ);
+ return $this->getFileInfo()->isReadable();
}
/**
* @return bool
*/
public function isUpdateable() {
- return $this->checkPermissions(\OCP\Constants::PERMISSION_UPDATE);
+ return $this->getFileInfo()->isUpdateable();
}
/**
* @return bool
*/
public function isDeletable() {
- return $this->checkPermissions(\OCP\Constants::PERMISSION_DELETE);
+ return $this->getFileInfo()->isDeletable();
}
/**
* @return bool
*/
public function isShareable() {
- return $this->checkPermissions(\OCP\Constants::PERMISSION_SHARE);
+ return $this->getFileInfo()->isShareable();
+ }
+
+ public function isCreatable() {
+ return $this->getFileInfo()->isCreatable();
}
/**
@@ -240,4 +259,28 @@ class Node implements \OCP\Files\Node {
}
return true;
}
+
+ public function isMounted() {
+ return $this->getFileInfo()->isMounted();
+ }
+
+ public function isShared() {
+ return $this->getFileInfo()->isShared();
+ }
+
+ public function getMimeType() {
+ return $this->getFileInfo()->getMimetype();
+ }
+
+ public function getMimePart() {
+ return $this->getFileInfo()->getMimePart();
+ }
+
+ public function getType() {
+ return $this->getFileInfo()->getType();
+ }
+
+ public function isEncrypted() {
+ return $this->getFileInfo()->isEncrypted();
+ }
}
diff --git a/lib/private/files/storage/local.php b/lib/private/files/storage/local.php
index 1c5fafc12fa..e8be7daba7e 100644
--- a/lib/private/files/storage/local.php
+++ b/lib/private/files/storage/local.php
@@ -35,7 +35,7 @@ if (\OC_Util::runningOnWindows()) {
}
public function mkdir($path) {
- return @mkdir($this->datadir . $path, 0777, true);
+ return @mkdir($this->getSourcePath($path), 0777, true);
}
public function rmdir($path) {
@@ -44,7 +44,7 @@ if (\OC_Util::runningOnWindows()) {
}
try {
$it = new \RecursiveIteratorIterator(
- new \RecursiveDirectoryIterator($this->datadir . $path),
+ new \RecursiveDirectoryIterator($this->getSourcePath($path)),
\RecursiveIteratorIterator::CHILD_FIRST
);
/**
@@ -68,30 +68,30 @@ if (\OC_Util::runningOnWindows()) {
}
$it->next();
}
- return rmdir($this->datadir . $path);
+ return rmdir($this->getSourcePath($path));
} catch (\UnexpectedValueException $e) {
return false;
}
}
public function opendir($path) {
- return opendir($this->datadir . $path);
+ return opendir($this->getSourcePath($path));
}
public function is_dir($path) {
if (substr($path, -1) == '/') {
$path = substr($path, 0, -1);
}
- return is_dir($this->datadir . $path);
+ return is_dir($this->getSourcePath($path));
}
public function is_file($path) {
- return is_file($this->datadir . $path);
+ return is_file($this->getSourcePath($path));
}
public function stat($path) {
clearstatcache();
- $fullPath = $this->datadir . $path;
+ $fullPath = $this->getSourcePath($path);
$statResult = stat($fullPath);
if (PHP_INT_SIZE === 4 && !$this->is_dir($path)) {
$filesize = $this->filesize($path);
@@ -102,9 +102,9 @@ if (\OC_Util::runningOnWindows()) {
}
public function filetype($path) {
- $filetype = filetype($this->datadir . $path);
+ $filetype = filetype($this->getSourcePath($path));
if ($filetype == 'link') {
- $filetype = filetype(realpath($this->datadir . $path));
+ $filetype = filetype(realpath($this->getSourcePath($path)));
}
return $filetype;
}
@@ -113,7 +113,7 @@ if (\OC_Util::runningOnWindows()) {
if ($this->is_dir($path)) {
return 0;
}
- $fullPath = $this->datadir . $path;
+ $fullPath = $this->getSourcePath($path);
if (PHP_INT_SIZE === 4) {
$helper = new \OC\LargeFileHelper;
return $helper->getFilesize($fullPath);
@@ -122,19 +122,20 @@ if (\OC_Util::runningOnWindows()) {
}
public function isReadable($path) {
- return is_readable($this->datadir . $path);
+ return is_readable($this->getSourcePath($path));
}
public function isUpdatable($path) {
- return is_writable($this->datadir . $path);
+ return is_writable($this->getSourcePath($path));
}
public function file_exists($path) {
- return file_exists($this->datadir . $path);
+ return file_exists($this->getSourcePath($path));
}
public function filemtime($path) {
- return filemtime($this->datadir . $path);
+ clearstatcache($this->getSourcePath($path));
+ return filemtime($this->getSourcePath($path));
}
public function touch($path, $mtime = null) {
@@ -145,30 +146,30 @@ if (\OC_Util::runningOnWindows()) {
return false;
}
if (!is_null($mtime)) {
- $result = touch($this->datadir . $path, $mtime);
+ $result = touch($this->getSourcePath($path), $mtime);
} else {
- $result = touch($this->datadir . $path);
+ $result = touch($this->getSourcePath($path));
}
if ($result) {
- clearstatcache(true, $this->datadir . $path);
+ clearstatcache(true, $this->getSourcePath($path));
}
return $result;
}
public function file_get_contents($path) {
- return file_get_contents($this->datadir . $path);
+ return file_get_contents($this->getSourcePath($path));
}
- public function file_put_contents($path, $data) { //trigger_error("$path = ".var_export($path, 1));
- return file_put_contents($this->datadir . $path, $data);
+ public function file_put_contents($path, $data) {
+ return file_put_contents($this->getSourcePath($path), $data);
}
public function unlink($path) {
if ($this->is_dir($path)) {
return $this->rmdir($path);
} else if ($this->is_file($path)) {
- return unlink($this->datadir . $path);
+ return unlink($this->getSourcePath($path));
} else {
return false;
}
@@ -200,27 +201,27 @@ if (\OC_Util::runningOnWindows()) {
$this->unlink($path2);
}
- return rename($this->datadir . $path1, $this->datadir . $path2);
+ return rename($this->getSourcePath($path1), $this->getSourcePath($path2));
}
public function copy($path1, $path2) {
if ($this->is_dir($path1)) {
return parent::copy($path1, $path2);
} else {
- return copy($this->datadir . $path1, $this->datadir . $path2);
+ return copy($this->getSourcePath($path1), $this->getSourcePath($path2));
}
}
public function fopen($path, $mode) {
- return fopen($this->datadir . $path, $mode);
+ return fopen($this->getSourcePath($path), $mode);
}
public function hash($type, $path, $raw = false) {
- return hash_file($type, $this->datadir . $path, $raw);
+ return hash_file($type, $this->getSourcePath($path), $raw);
}
public function free_space($path) {
- $space = @disk_free_space($this->datadir . $path);
+ $space = @disk_free_space($this->getSourcePath($path));
if ($space === false || is_null($space)) {
return \OCP\Files\FileInfo::SPACE_UNKNOWN;
}
@@ -232,11 +233,11 @@ if (\OC_Util::runningOnWindows()) {
}
public function getLocalFile($path) {
- return $this->datadir . $path;
+ return $this->getSourcePath($path);
}
public function getLocalFolder($path) {
- return $this->datadir . $path;
+ return $this->getSourcePath($path);
}
/**
@@ -244,12 +245,16 @@ if (\OC_Util::runningOnWindows()) {
*/
protected function searchInDir($query, $dir = '') {
$files = array();
- foreach (scandir($this->datadir . $dir) as $item) {
- if ($item == '.' || $item == '..') continue;
+ $physicalDir = $this->getSourcePath($dir);
+ foreach (scandir($physicalDir) as $item) {
+ if ($item == '.' || $item == '..')
+ continue;
+ $physicalItem = $physicalDir . '/' . $item;
+
if (strstr(strtolower($item), strtolower($query)) !== false) {
$files[] = $dir . '/' . $item;
}
- if (is_dir($this->datadir . $dir . '/' . $item)) {
+ if (is_dir($physicalItem)) {
$files = array_merge($files, $this->searchInDir($query, $dir . '/' . $item));
}
}
@@ -272,6 +277,17 @@ if (\OC_Util::runningOnWindows()) {
}
/**
+ * Get the source path (on disk) of a given path
+ *
+ * @param string $path
+ * @return string
+ */
+ protected function getSourcePath($path) {
+ $fullPath = $this->datadir . $path;
+ return $fullPath;
+ }
+
+ /**
* {@inheritdoc}
*/
public function isLocal() {
diff --git a/lib/private/files/storage/mappedlocal.php b/lib/private/files/storage/mappedlocal.php
index c232c0298b1..8f813f973b9 100644
--- a/lib/private/files/storage/mappedlocal.php
+++ b/lib/private/files/storage/mappedlocal.php
@@ -31,7 +31,7 @@ class MappedLocal extends \OC\Files\Storage\Common {
}
public function mkdir($path) {
- return @mkdir($this->buildPath($path), 0777, true);
+ return @mkdir($this->getSourcePath($path), 0777, true);
}
public function rmdir($path) {
@@ -40,7 +40,7 @@ class MappedLocal extends \OC\Files\Storage\Common {
}
try {
$it = new \RecursiveIteratorIterator(
- new \RecursiveDirectoryIterator($this->buildPath($path)),
+ new \RecursiveDirectoryIterator($this->getSourcePath($path)),
\RecursiveIteratorIterator::CHILD_FIRST
);
/**
@@ -64,7 +64,7 @@ class MappedLocal extends \OC\Files\Storage\Common {
}
$it->next();
}
- if ($result = @rmdir($this->buildPath($path))) {
+ if ($result = @rmdir($this->getSourcePath($path))) {
$this->cleanMapper($path);
}
return $result;
@@ -75,7 +75,7 @@ class MappedLocal extends \OC\Files\Storage\Common {
public function opendir($path) {
$files = array('.', '..');
- $physicalPath = $this->buildPath($path);
+ $physicalPath = $this->getSourcePath($path);
$logicalPath = $this->mapper->physicalToLogic($physicalPath);
$dh = opendir($physicalPath);
@@ -101,15 +101,16 @@ class MappedLocal extends \OC\Files\Storage\Common {
if (substr($path, -1) == '/') {
$path = substr($path, 0, -1);
}
- return is_dir($this->buildPath($path));
+ return is_dir($this->getSourcePath($path));
}
public function is_file($path) {
- return is_file($this->buildPath($path));
+ return is_file($this->getSourcePath($path));
}
public function stat($path) {
- $fullPath = $this->buildPath($path);
+ clearstatcache();
+ $fullPath = $this->getSourcePath($path);
$statResult = stat($fullPath);
if (PHP_INT_SIZE === 4 && !$this->is_dir($path)) {
$filesize = $this->filesize($path);
@@ -120,9 +121,9 @@ class MappedLocal extends \OC\Files\Storage\Common {
}
public function filetype($path) {
- $filetype = filetype($this->buildPath($path));
+ $filetype = filetype($this->getSourcePath($path));
if ($filetype == 'link') {
- $filetype = filetype(realpath($this->buildPath($path)));
+ $filetype = filetype(realpath($this->getSourcePath($path)));
}
return $filetype;
}
@@ -131,7 +132,7 @@ class MappedLocal extends \OC\Files\Storage\Common {
if ($this->is_dir($path)) {
return 0;
}
- $fullPath = $this->buildPath($path);
+ $fullPath = $this->getSourcePath($path);
if (PHP_INT_SIZE === 4) {
$helper = new \OC\LargeFileHelper;
return $helper->getFilesize($fullPath);
@@ -140,43 +141,47 @@ class MappedLocal extends \OC\Files\Storage\Common {
}
public function isReadable($path) {
- return is_readable($this->buildPath($path));
+ return is_readable($this->getSourcePath($path));
}
public function isUpdatable($path) {
- return is_writable($this->buildPath($path));
+ return is_writable($this->getSourcePath($path));
}
public function file_exists($path) {
- return file_exists($this->buildPath($path));
+ return file_exists($this->getSourcePath($path));
}
public function filemtime($path) {
- return filemtime($this->buildPath($path));
+ clearstatcache($this->getSourcePath($path));
+ return filemtime($this->getSourcePath($path));
}
public function touch($path, $mtime = null) {
// sets the modification time of the file to the given value.
// If mtime is nil the current time is set.
// note that the access time of the file always changes to the current time.
+ if ($this->file_exists($path) and !$this->isUpdatable($path)) {
+ return false;
+ }
if (!is_null($mtime)) {
- $result = touch($this->buildPath($path), $mtime);
+ $result = touch($this->getSourcePath($path), $mtime);
} else {
- $result = touch($this->buildPath($path));
+ $result = touch($this->getSourcePath($path));
}
if ($result) {
- clearstatcache(true, $this->buildPath($path));
+ clearstatcache(true, $this->getSourcePath($path));
}
return $result;
}
public function file_get_contents($path) {
- return file_get_contents($this->buildPath($path));
+ return file_get_contents($this->getSourcePath($path));
}
public function file_put_contents($path, $data) {
- return file_put_contents($this->buildPath($path), $data);
+ return file_put_contents($this->getSourcePath($path), $data);
}
public function unlink($path) {
@@ -208,8 +213,8 @@ class MappedLocal extends \OC\Files\Storage\Common {
$this->unlink($path2);
}
- $physicPath1 = $this->buildPath($path1);
- $physicPath2 = $this->buildPath($path2);
+ $physicPath1 = $this->getSourcePath($path1);
+ $physicPath2 = $this->getSourcePath($path2);
if ($return = rename($physicPath1, $physicPath2)) {
// mapper needs to create copies or all children
$this->copyMapping($path1, $path2);
@@ -237,7 +242,7 @@ class MappedLocal extends \OC\Files\Storage\Common {
closedir($dir);
return true;
} else {
- if ($return = copy($this->buildPath($path1), $this->buildPath($path2))) {
+ if ($return = copy($this->getSourcePath($path1), $this->getSourcePath($path2))) {
$this->copyMapping($path1, $path2);
}
return $return;
@@ -245,7 +250,7 @@ class MappedLocal extends \OC\Files\Storage\Common {
}
public function fopen($path, $mode) {
- return fopen($this->buildPath($path), $mode);
+ return fopen($this->getSourcePath($path), $mode);
}
/**
@@ -256,7 +261,7 @@ class MappedLocal extends \OC\Files\Storage\Common {
private function delTree($dir, $isLogicPath = true) {
$dirRelative = $dir;
if ($isLogicPath) {
- $dir = $this->buildPath($dir);
+ $dir = $this->getSourcePath($dir);
}
if (!file_exists($dir)) {
return true;
@@ -288,11 +293,15 @@ class MappedLocal extends \OC\Files\Storage\Common {
}
public function hash($type, $path, $raw = false) {
- return hash_file($type, $this->buildPath($path), $raw);
+ return hash_file($type, $this->getSourcePath($path), $raw);
}
public function free_space($path) {
- return @disk_free_space($this->buildPath($path));
+ $space = @disk_free_space($this->getSourcePath($path));
+ if ($space === false || is_null($space)) {
+ return \OCP\Files\FileInfo::SPACE_UNKNOWN;
+ }
+ return $space;
}
public function search($query) {
@@ -300,11 +309,11 @@ class MappedLocal extends \OC\Files\Storage\Common {
}
public function getLocalFile($path) {
- return $this->buildPath($path);
+ return $this->getSourcePath($path);
}
public function getLocalFolder($path) {
- return $this->buildPath($path);
+ return $this->getSourcePath($path);
}
/**
@@ -312,7 +321,7 @@ class MappedLocal extends \OC\Files\Storage\Common {
*/
protected function searchInDir($query, $dir = '') {
$files = array();
- $physicalDir = $this->buildPath($dir);
+ $physicalDir = $this->getSourcePath($dir);
foreach (scandir($physicalDir) as $item) {
if ($item == '.' || $item == '..')
continue;
@@ -337,18 +346,30 @@ class MappedLocal extends \OC\Files\Storage\Common {
* @return bool
*/
public function hasUpdated($path, $time) {
- return $this->filemtime($path) > $time;
+ if ($this->file_exists($path)) {
+ return $this->filemtime($path) > $time;
+ } else {
+ return true;
+ }
}
/**
+ * Get the source path (on disk) of a given path
+ *
* @param string $path
- * @param bool $create
* @return string
*/
- private function buildPath($path, $create = true) {
+ protected function getSourcePath($path) {
$path = $this->stripLeading($path);
$fullPath = $this->datadir . $path;
- return $this->mapper->logicToPhysical($fullPath, $create);
+ return $this->mapper->logicToPhysical($fullPath, true);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function isLocal() {
+ return true;
}
/**
diff --git a/lib/private/files/storage/wrapper/jail.php b/lib/private/files/storage/wrapper/jail.php
new file mode 100644
index 00000000000..22b96765757
--- /dev/null
+++ b/lib/private/files/storage/wrapper/jail.php
@@ -0,0 +1,413 @@
+<?php
+/**
+ * Copyright (c) 2014 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\Wrapper;
+
+use OC\Files\Cache\Wrapper\CacheJail;
+
+/**
+ * Jail to a subdirectory of the wrapped storage
+ *
+ * This restricts access to a subfolder of the wrapped storage with the subfolder becoming the root folder new storage
+ */
+class Jail extends Wrapper {
+ /**
+ * @var string
+ */
+ protected $rootPath;
+
+ /**
+ * @param array $arguments ['storage' => $storage, 'mask' => $root]
+ *
+ * $storage: The storage that will be wrapper
+ * $root: The folder in the wrapped storage that will become the root folder of the wrapped storage
+ */
+ public function __construct($arguments) {
+ parent::__construct($arguments);
+ $this->rootPath = $arguments['root'];
+ }
+
+ protected function getSourcePath($path) {
+ if ($path === '') {
+ return $this->rootPath;
+ } else {
+ return $this->rootPath . '/' . $path;
+ }
+ }
+
+ public function getId() {
+ return 'link:' . parent::getId() . ':' . $this->rootPath;
+ }
+
+ /**
+ * see http://php.net/manual/en/function.mkdir.php
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function mkdir($path) {
+ return $this->storage->mkdir($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.rmdir.php
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function rmdir($path) {
+ return $this->storage->rmdir($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.opendir.php
+ *
+ * @param string $path
+ * @return resource
+ */
+ public function opendir($path) {
+ return $this->storage->opendir($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.is_dir.php
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function is_dir($path) {
+ return $this->storage->is_dir($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.is_file.php
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function is_file($path) {
+ return $this->storage->is_file($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.stat.php
+ * only the following keys are required in the result: size and mtime
+ *
+ * @param string $path
+ * @return array
+ */
+ public function stat($path) {
+ return $this->storage->stat($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.filetype.php
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function filetype($path) {
+ return $this->storage->filetype($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.filesize.php
+ * The result for filesize when called on a folder is required to be 0
+ *
+ * @param string $path
+ * @return int
+ */
+ public function filesize($path) {
+ return $this->storage->filesize($this->getSourcePath($path));
+ }
+
+ /**
+ * check if a file can be created in $path
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function isCreatable($path) {
+ return $this->storage->isCreatable($this->getSourcePath($path));
+ }
+
+ /**
+ * check if a file can be read
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function isReadable($path) {
+ return $this->storage->isReadable($this->getSourcePath($path));
+ }
+
+ /**
+ * check if a file can be written to
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function isUpdatable($path) {
+ return $this->storage->isUpdatable($this->getSourcePath($path));
+ }
+
+ /**
+ * check if a file can be deleted
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function isDeletable($path) {
+ return $this->storage->isDeletable($this->getSourcePath($path));
+ }
+
+ /**
+ * check if a file can be shared
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function isSharable($path) {
+ return $this->storage->isSharable($this->getSourcePath($path));
+ }
+
+ /**
+ * get the full permissions of a path.
+ * Should return a combination of the PERMISSION_ constants defined in lib/public/constants.php
+ *
+ * @param string $path
+ * @return int
+ */
+ public function getPermissions($path) {
+ return $this->storage->getPermissions($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.file_exists.php
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function file_exists($path) {
+ return $this->storage->file_exists($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.filemtime.php
+ *
+ * @param string $path
+ * @return int
+ */
+ public function filemtime($path) {
+ return $this->storage->filemtime($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.file_get_contents.php
+ *
+ * @param string $path
+ * @return string
+ */
+ public function file_get_contents($path) {
+ return $this->storage->file_get_contents($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.file_put_contents.php
+ *
+ * @param string $path
+ * @param string $data
+ * @return bool
+ */
+ public function file_put_contents($path, $data) {
+ return $this->storage->file_put_contents($this->getSourcePath($path), $data);
+ }
+
+ /**
+ * see http://php.net/manual/en/function.unlink.php
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function unlink($path) {
+ return $this->storage->unlink($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.rename.php
+ *
+ * @param string $path1
+ * @param string $path2
+ * @return bool
+ */
+ public function rename($path1, $path2) {
+ return $this->storage->rename($this->getSourcePath($path1), $this->getSourcePath($path2));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.copy.php
+ *
+ * @param string $path1
+ * @param string $path2
+ * @return bool
+ */
+ public function copy($path1, $path2) {
+ return $this->storage->copy($this->getSourcePath($path1), $this->getSourcePath($path2));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.fopen.php
+ *
+ * @param string $path
+ * @param string $mode
+ * @return resource
+ */
+ public function fopen($path, $mode) {
+ return $this->storage->fopen($this->getSourcePath($path), $mode);
+ }
+
+ /**
+ * get the mimetype for a file or folder
+ * The mimetype for a folder is required to be "httpd/unix-directory"
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getMimeType($path) {
+ return $this->storage->getMimeType($this->getSourcePath($path));
+ }
+
+ /**
+ * see http://php.net/manual/en/function.hash.php
+ *
+ * @param string $type
+ * @param string $path
+ * @param bool $raw
+ * @return string
+ */
+ public function hash($type, $path, $raw = false) {
+ return $this->storage->hash($type, $this->getSourcePath($path), $raw);
+ }
+
+ /**
+ * see http://php.net/manual/en/function.free_space.php
+ *
+ * @param string $path
+ * @return int
+ */
+ public function free_space($path) {
+ return $this->storage->free_space($this->getSourcePath($path));
+ }
+
+ /**
+ * search for occurrences of $query in file names
+ *
+ * @param string $query
+ * @return array
+ */
+ public function search($query) {
+ return $this->storage->search($query);
+ }
+
+ /**
+ * see http://php.net/manual/en/function.touch.php
+ * If the backend does not support the operation, false should be returned
+ *
+ * @param string $path
+ * @param int $mtime
+ * @return bool
+ */
+ public function touch($path, $mtime = null) {
+ return $this->storage->touch($this->getSourcePath($path), $mtime);
+ }
+
+ /**
+ * get the path to a local version of the file.
+ * The local version of the file can be temporary and doesn't have to be persistent across requests
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getLocalFile($path) {
+ return $this->storage->getLocalFile($this->getSourcePath($path));
+ }
+
+ /**
+ * get the path to a local version of the folder.
+ * The local version of the folder can be temporary and doesn't have to be persistent across requests
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getLocalFolder($path) {
+ return $this->storage->getLocalFolder($this->getSourcePath($path));
+ }
+
+ /**
+ * check if a file or folder has been updated since $time
+ *
+ * @param string $path
+ * @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) {
+ return $this->storage->hasUpdated($this->getSourcePath($path), $time);
+ }
+
+ /**
+ * get a cache instance for the storage
+ *
+ * @param string $path
+ * @param \OC\Files\Storage\Storage (optional) the storage to pass to the cache
+ * @return \OC\Files\Cache\Cache
+ */
+ public function getCache($path = '', $storage = null) {
+ if (!$storage) {
+ $storage = $this;
+ }
+ $sourceCache = $this->storage->getCache($this->getSourcePath($path), $storage);
+ return new CacheJail($sourceCache, $this->rootPath);
+ }
+
+ /**
+ * get the user id of the owner of a file or folder
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getOwner($path) {
+ return $this->storage->getOwner($this->getSourcePath($path));
+ }
+
+ /**
+ * get a watcher instance for the cache
+ *
+ * @param string $path
+ * @param \OC\Files\Storage\Storage (optional) the storage to pass to the watcher
+ * @return \OC\Files\Cache\Watcher
+ */
+ public function getWatcher($path = '', $storage = null) {
+ if (!$storage) {
+ $storage = $this;
+ }
+ return $this->storage->getWatcher($this->getSourcePath($path), $storage);
+ }
+
+ /**
+ * get the ETag for a file or folder
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getETag($path) {
+ return $this->storage->getETag($this->getSourcePath($path));
+ }
+}
diff --git a/lib/private/files/storage/wrapper/permissionsmask.php b/lib/private/files/storage/wrapper/permissionsmask.php
new file mode 100644
index 00000000000..955cb54591b
--- /dev/null
+++ b/lib/private/files/storage/wrapper/permissionsmask.php
@@ -0,0 +1,111 @@
+<?php
+/**
+ * Copyright (c) 2014 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\Wrapper;
+
+use OC\Files\Cache\Wrapper\CachePermissionsMask;
+use OCP\Constants;
+
+/**
+ * Mask the permissions of a storage
+ *
+ * This can be used to restrict update, create, delete and/or share permissions of a storage
+ *
+ * Note that the read permissions cant be masked
+ */
+class PermissionsMask extends Wrapper {
+ /**
+ * @var int the permissions bits we want to keep
+ */
+ private $mask;
+
+ /**
+ * @param array $arguments ['storage' => $storage, 'mask' => $mask]
+ *
+ * $storage: The storage the permissions mask should be applied on
+ * $mask: The permission bits that should be kept, a combination of the \OCP\Constant::PERMISSION_ constants
+ */
+ public function __construct($arguments) {
+ parent::__construct($arguments);
+ $this->mask = $arguments['mask'];
+ }
+
+ private function checkMask($permissions) {
+ return ($this->mask & $permissions) === $permissions;
+ }
+
+ public function isUpdatable($path) {
+ return $this->checkMask(Constants::PERMISSION_UPDATE) and parent::isUpdatable($path);
+ }
+
+ public function isCreatable($path) {
+ return $this->checkMask(Constants::PERMISSION_CREATE) and parent::isCreatable($path);
+ }
+
+ public function isDeletable($path) {
+ return $this->checkMask(Constants::PERMISSION_DELETE) and parent::isDeletable($path);
+ }
+
+ public function getPermissions($path) {
+ return $this->storage->getPermissions($path) & $this->mask;
+ }
+
+ public function rename($path1, $path2) {
+ return $this->checkMask(Constants::PERMISSION_UPDATE) and parent::rename($path1, $path2);
+ }
+
+ public function copy($path1, $path2) {
+ return $this->checkMask(Constants::PERMISSION_CREATE) and parent::copy($path1, $path2);
+ }
+
+ public function touch($path, $mtime = null) {
+ $permissions = $this->file_exists($path) ? Constants::PERMISSION_UPDATE : Constants::PERMISSION_CREATE;
+ return $this->checkMask($permissions) and parent::touch($path, $mtime);
+ }
+
+ public function mkdir($path) {
+ return $this->checkMask(Constants::PERMISSION_CREATE) and parent::mkdir($path);
+ }
+
+ public function rmdir($path) {
+ return $this->checkMask(Constants::PERMISSION_DELETE) and parent::rmdir($path);
+ }
+
+ public function unlink($path) {
+ return $this->checkMask(Constants::PERMISSION_DELETE) and parent::unlink($path);
+ }
+
+ public function file_put_contents($path, $data) {
+ $permissions = $this->file_exists($path) ? Constants::PERMISSION_UPDATE : Constants::PERMISSION_CREATE;
+ return $this->checkMask($permissions) and parent::file_put_contents($path, $data);
+ }
+
+ public function fopen($path, $mode) {
+ if ($mode === 'r' or $mode === 'rb') {
+ return parent::fopen($path, $mode);
+ } else {
+ $permissions = $this->file_exists($path) ? Constants::PERMISSION_UPDATE : Constants::PERMISSION_CREATE;
+ return $this->checkMask($permissions) ? parent::fopen($path, $mode) : false;
+ }
+ }
+
+ /**
+ * get a cache instance for the storage
+ *
+ * @param string $path
+ * @param \OC\Files\Storage\Storage (optional) the storage to pass to the cache
+ * @return \OC\Files\Cache\Cache
+ */
+ public function getCache($path = '', $storage = null) {
+ if (!$storage) {
+ $storage = $this;
+ }
+ $sourceCache = parent::getCache($path, $storage);
+ return new CachePermissionsMask($sourceCache, $this->mask);
+ }
+}
diff --git a/lib/private/group/backend.php b/lib/private/group/backend.php
index ab694268bb3..9348463a53c 100644
--- a/lib/private/group/backend.php
+++ b/lib/private/group/backend.php
@@ -23,29 +23,51 @@
/**
* error code for functions not provided by the group backend
+ * @deprecated Use \OC_Group_Backend::NOT_IMPLEMENTED instead
*/
define('OC_GROUP_BACKEND_NOT_IMPLEMENTED', -501);
/**
* actions that user backends can define
*/
+/** @deprecated Use \OC_Group_Backend::CREATE_GROUP instead */
define('OC_GROUP_BACKEND_CREATE_GROUP', 0x00000001);
+/** @deprecated Use \OC_Group_Backend::DELETE_GROUP instead */
define('OC_GROUP_BACKEND_DELETE_GROUP', 0x00000010);
+/** @deprecated Use \OC_Group_Backend::ADD_TO_GROUP instead */
define('OC_GROUP_BACKEND_ADD_TO_GROUP', 0x00000100);
+/** @deprecated Use \OC_Group_Backend::REMOVE_FROM_GOUP instead */
define('OC_GROUP_BACKEND_REMOVE_FROM_GOUP', 0x00001000);
+/** @deprecated Obsolete */
define('OC_GROUP_BACKEND_GET_DISPLAYNAME', 0x00010000); //OBSOLETE
+/** @deprecated Use \OC_Group_Backend::COUNT_USERS instead */
define('OC_GROUP_BACKEND_COUNT_USERS', 0x00100000);
/**
* Abstract base class for user management
*/
abstract class OC_Group_Backend implements OC_Group_Interface {
+ /**
+ * error code for functions not provided by the group backend
+ */
+ const NOT_IMPLEMENTED = -501;
+
+ /**
+ * actions that user backends can define
+ */
+ const CREATE_GROUP = 0x00000001;
+ const DELETE_GROUP = 0x00000010;
+ const ADD_TO_GROUP = 0x00000100;
+ const REMOVE_FROM_GOUP = 0x00001000;
+ //OBSOLETE const GET_DISPLAYNAME = 0x00010000;
+ const COUNT_USERS = 0x00100000;
+
protected $possibleActions = array(
- OC_GROUP_BACKEND_CREATE_GROUP => 'createGroup',
- OC_GROUP_BACKEND_DELETE_GROUP => 'deleteGroup',
- OC_GROUP_BACKEND_ADD_TO_GROUP => 'addToGroup',
- OC_GROUP_BACKEND_REMOVE_FROM_GOUP => 'removeFromGroup',
- OC_GROUP_BACKEND_COUNT_USERS => 'countUsersInGroup',
+ self::CREATE_GROUP => 'createGroup',
+ self::DELETE_GROUP => 'deleteGroup',
+ self::ADD_TO_GROUP => 'addToGroup',
+ self::REMOVE_FROM_GOUP => 'removeFromGroup',
+ self::COUNT_USERS => 'countUsersInGroup',
);
/**
diff --git a/lib/private/group/group.php b/lib/private/group/group.php
index 6f8b84dff1a..6111051ea09 100644
--- a/lib/private/group/group.php
+++ b/lib/private/group/group.php
@@ -118,7 +118,7 @@ class Group implements IGroup {
$this->emitter->emit('\OC\Group', 'preAddUser', array($this, $user));
}
foreach ($this->backends as $backend) {
- if ($backend->implementsActions(OC_GROUP_BACKEND_ADD_TO_GROUP)) {
+ if ($backend->implementsActions(\OC_Group_Backend::ADD_TO_GROUP)) {
$backend->addToGroup($user->getUID(), $this->gid);
if ($this->users) {
$this->users[$user->getUID()] = $user;
@@ -142,7 +142,7 @@ class Group implements IGroup {
$this->emitter->emit('\OC\Group', 'preRemoveUser', array($this, $user));
}
foreach ($this->backends as $backend) {
- if ($backend->implementsActions(OC_GROUP_BACKEND_REMOVE_FROM_GOUP) and $backend->inGroup($user->getUID(), $this->gid)) {
+ if ($backend->implementsActions(\OC_Group_Backend::REMOVE_FROM_GOUP) and $backend->inGroup($user->getUID(), $this->gid)) {
$backend->removeFromGroup($user->getUID(), $this->gid);
$result = true;
}
@@ -191,7 +191,7 @@ class Group implements IGroup {
public function count($search = '') {
$users = false;
foreach ($this->backends as $backend) {
- if($backend->implementsActions(OC_GROUP_BACKEND_COUNT_USERS)) {
+ if($backend->implementsActions(\OC_Group_Backend::COUNT_USERS)) {
if($users === false) {
//we could directly add to a bool variable, but this would
//be ugly
@@ -234,7 +234,7 @@ class Group implements IGroup {
$this->emitter->emit('\OC\Group', 'preDelete', array($this));
}
foreach ($this->backends as $backend) {
- if ($backend->implementsActions(OC_GROUP_BACKEND_DELETE_GROUP)) {
+ if ($backend->implementsActions(\OC_Group_Backend::DELETE_GROUP)) {
$result = true;
$backend->deleteGroup($this->gid);
}
diff --git a/lib/private/group/interface.php b/lib/private/group/interface.php
index ee5c2d635d6..ee2d718e5dd 100644
--- a/lib/private/group/interface.php
+++ b/lib/private/group/interface.php
@@ -28,7 +28,7 @@ interface OC_Group_Interface {
* @return boolean
*
* Returns the supported actions as int to be
- * compared with OC_GROUP_BACKEND_CREATE_GROUP etc.
+ * compared with \OC_Group_Backend::CREATE_GROUP etc.
*/
public function implementsActions($actions);
diff --git a/lib/private/group/manager.php b/lib/private/group/manager.php
index 417be79ab30..be7bf972693 100644
--- a/lib/private/group/manager.php
+++ b/lib/private/group/manager.php
@@ -134,7 +134,7 @@ class Manager extends PublicEmitter implements IGroupManager {
} else {
$this->emit('\OC\Group', 'preCreate', array($gid));
foreach ($this->backends as $backend) {
- if ($backend->implementsActions(OC_GROUP_BACKEND_CREATE_GROUP)) {
+ if ($backend->implementsActions(\OC_Group_Backend::CREATE_GROUP)) {
$backend->createGroup($gid);
$group = $this->getGroupObject($gid);
$this->emit('\OC\Group', 'postCreate', array($group));
diff --git a/lib/private/helper.php b/lib/private/helper.php
index d43eefcdc52..fb4ddfae3b7 100644
--- a/lib/private/helper.php
+++ b/lib/private/helper.php
@@ -158,7 +158,10 @@ class OC_Helper {
$alias = array(
'application/octet-stream' => 'file', // use file icon as fallback
- 'application/illustrator' => 'image',
+ 'application/illustrator' => 'image/vector',
+ 'application/postscript' => 'image/vector',
+ 'image/svg+xml' => 'image/vector',
+
'application/coreldraw' => 'image',
'application/x-gimp' => 'image',
'application/x-photoshop' => 'image',
@@ -973,4 +976,12 @@ class OC_Helper {
return array('free' => $free, 'used' => $used, 'total' => $total, 'relative' => $relative);
}
+
+ /**
+ * Returns whether the config file is set manually to read-only
+ * @return bool
+ */
+ public static function isReadOnlyConfigEnabled() {
+ return \OC::$server->getConfig()->getSystemValue('config_is_read_only', false);
+ }
}
diff --git a/lib/private/image.php b/lib/private/image.php
index bab91745c05..78cacc84452 100644
--- a/lib/private/image.php
+++ b/lib/private/image.php
@@ -1,25 +1,17 @@
<?php
/**
-* ownCloud
-*
-* @author Thomas Tanghus
-* @copyright 2011 Thomas Tanghus <thomas@tanghus.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/>.
-*
-*/
+ * ownCloud
+ *
+ * @author Thomas Tanghus
+ * @copyright 2011 Thomas Tanghus <thomas@tanghus.net>
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ *
+ */
+
/**
* Class for basic image manipulation
*/
@@ -33,10 +25,16 @@ class OC_Image {
private $fileInfo;
/**
- * Get mime type for an image file.
- * @param string|null $filePath The path to a local image file.
- * @return string The mime type if the it could be determined, otherwise an empty string.
- */
+ * @var \OCP\ILogger
+ */
+ private $logger;
+
+ /**
+ * Get mime type for an image file.
+ *
+ * @param string|null $filePath The path to a local image file.
+ * @return string The mime type if the it could be determined, otherwise an empty string.
+ */
static public function getMimeTypeForFile($filePath) {
// exif_imagetype throws "read error!" if file is less than 12 byte
if (filesize($filePath) > 11) {
@@ -49,14 +47,19 @@ class OC_Image {
/**
* Constructor.
+ *
* @param resource|string $imageRef The path to a local file, a base64 encoded string or a resource created by
* an imagecreate* function.
- * @return \OC_Image False on error
+ * @param \OCP\ILogger $logger
*/
- public function __construct($imageRef = null) {
- //OC_Log::write('core',__METHOD__.'(): start', OC_Log::DEBUG);
- if(!extension_loaded('gd') || !function_exists('gd_info')) {
- OC_Log::write('core', __METHOD__.'(): GD module not installed', OC_Log::ERROR);
+ public function __construct($imageRef = null, $logger = null) {
+ $this->logger = $logger;
+ if (is_null($logger)) {
+ $this->logger = \OC::$server->getLogger();
+ }
+
+ if (!extension_loaded('gd') || !function_exists('gd_info')) {
+ $this->logger->error(__METHOD__ . '(): GD module not installed', array('app' => 'core'));
return false;
}
@@ -64,51 +67,56 @@ class OC_Image {
$this->fileInfo = new finfo(FILEINFO_MIME_TYPE);
}
- if(!is_null($imageRef)) {
+ if (!is_null($imageRef)) {
$this->load($imageRef);
}
}
/**
- * Determine whether the object contains an image resource.
- * @return bool
- */
+ * Determine whether the object contains an image resource.
+ *
+ * @return bool
+ */
public function valid() { // apparently you can't name a method 'empty'...
return is_resource($this->resource);
}
/**
- * Returns the MIME type of the image or an empty string if no image is loaded.
- * @return string
- */
+ * Returns the MIME type of the image or an empty string if no image is loaded.
+ *
+ * @return string
+ */
public function mimeType() {
return $this->valid() ? $this->mimeType : '';
}
/**
- * Returns the width of the image or -1 if no image is loaded.
- * @return int
- */
+ * Returns the width of the image or -1 if no image is loaded.
+ *
+ * @return int
+ */
public function width() {
return $this->valid() ? imagesx($this->resource) : -1;
}
/**
- * Returns the height of the image or -1 if no image is loaded.
- * @return int
- */
+ * Returns the height of the image or -1 if no image is loaded.
+ *
+ * @return int
+ */
public function height() {
return $this->valid() ? imagesy($this->resource) : -1;
}
/**
- * Returns the width when the image orientation is top-left.
- * @return int
- */
+ * Returns the width when the image orientation is top-left.
+ *
+ * @return int
+ */
public function widthTopLeft() {
$o = $this->getOrientation();
- OC_Log::write('core', 'OC_Image->widthTopLeft() Orientation: '.$o, OC_Log::DEBUG);
- switch($o) {
+ $this->logger->debug('OC_Image->widthTopLeft() Orientation: ' . $o, array('app' => 'core'));
+ switch ($o) {
case -1:
case 1:
case 2: // Not tested
@@ -125,13 +133,14 @@ class OC_Image {
}
/**
- * Returns the height when the image orientation is top-left.
- * @return int
- */
+ * Returns the height when the image orientation is top-left.
+ *
+ * @return int
+ */
public function heightTopLeft() {
$o = $this->getOrientation();
- OC_Log::write('core', 'OC_Image->heightTopLeft() Orientation: '.$o, OC_Log::DEBUG);
- switch($o) {
+ $this->logger->debug('OC_Image->heightTopLeft() Orientation: ' . $o, array('app' => 'core'));
+ switch ($o) {
case -1:
case 1:
case 2: // Not tested
@@ -149,32 +158,34 @@ class OC_Image {
/**
* Outputs the image.
+ *
* @param string $mimeType
* @return bool
*/
- public function show($mimeType=null) {
- if($mimeType === null) {
+ public function show($mimeType = null) {
+ if ($mimeType === null) {
$mimeType = $this->mimeType();
}
- header('Content-Type: '.$mimeType);
+ header('Content-Type: ' . $mimeType);
return $this->_output(null, $mimeType);
}
/**
* Saves the image.
+ *
* @param string $filePath
* @param string $mimeType
* @return bool
*/
- public function save($filePath=null, $mimeType=null) {
- if($mimeType === null) {
+ public function save($filePath = null, $mimeType = null) {
+ if ($mimeType === null) {
$mimeType = $this->mimeType();
}
- if($filePath === null && $this->filePath === null) {
- OC_Log::write('core', __METHOD__.'(): called with no path.', OC_Log::ERROR);
+ if ($filePath === null && $this->filePath === null) {
+ $this->logger->error(__METHOD__ . '(): called with no path.', array('app' => 'core'));
return false;
- } elseif($filePath === null && $this->filePath !== null) {
+ } elseif ($filePath === null && $this->filePath !== null) {
$filePath = $this->filePath;
}
return $this->_output($filePath, $mimeType);
@@ -182,22 +193,21 @@ class OC_Image {
/**
* Outputs/saves the image.
+ *
* @param string $filePath
* @param string $mimeType
* @return bool
* @throws Exception
*/
- private function _output($filePath=null, $mimeType=null) {
- if($filePath) {
+ private function _output($filePath = null, $mimeType = null) {
+ if ($filePath) {
if (!file_exists(dirname($filePath)))
mkdir(dirname($filePath), 0777, true);
- if(!is_writable(dirname($filePath))) {
- OC_Log::write('core',
- __METHOD__.'(): Directory \''.dirname($filePath).'\' is not writable.',
- OC_Log::ERROR);
+ if (!is_writable(dirname($filePath))) {
+ $this->logger->error(__METHOD__ . '(): Directory \'' . dirname($filePath) . '\' is not writable.', array('app' => 'core'));
return false;
- } elseif(is_writable(dirname($filePath)) && file_exists($filePath) && !is_writable($filePath)) {
- OC_Log::write('core', __METHOD__.'(): File \''.$filePath.'\' is not writable.', OC_Log::ERROR);
+ } elseif (is_writable(dirname($filePath)) && file_exists($filePath) && !is_writable($filePath)) {
+ $this->logger->error(__METHOD__ . '(): File \'' . $filePath . '\' is not writable.', array('app' => 'core'));
return false;
}
}
@@ -206,8 +216,8 @@ class OC_Image {
}
$imageType = $this->imageType;
- if($mimeType !== null) {
- switch($mimeType) {
+ if ($mimeType !== null) {
+ switch ($mimeType) {
case 'image/gif':
$imageType = IMAGETYPE_GIF;
break;
@@ -228,7 +238,7 @@ class OC_Image {
}
}
- switch($imageType) {
+ switch ($imageType) {
case IMAGETYPE_GIF:
$retVal = imagegif($this->resource, $filePath);
break;
@@ -259,22 +269,22 @@ class OC_Image {
}
/**
- * Prints the image when called as $image().
- */
+ * Prints the image when called as $image().
+ */
public function __invoke() {
return $this->show();
}
/**
- * @return resource Returns the image resource in any.
- */
+ * @return resource Returns the image resource in any.
+ */
public function resource() {
return $this->resource;
}
/**
- * @return string Returns the raw image data.
- */
+ * @return string Returns the raw image data.
+ */
function data() {
ob_start();
switch ($this->mimeType) {
@@ -289,11 +299,11 @@ class OC_Image {
break;
default:
$res = imagepng($this->resource);
- OC_Log::write('core', 'OC_Image->data. Couldn\'t guess mimetype, defaulting to png', OC_Log::INFO);
+ $this->logger->info('OC_Image->data. Could not guess mime-type, defaulting to png', array('app' => 'core'));
break;
}
if (!$res) {
- OC_Log::write('core', 'OC_Image->data. Error getting image data.', OC_Log::ERROR);
+ $this->logger->error('OC_Image->data. Error getting image data.', array('app' => 'core'));
}
return ob_get_clean();
}
@@ -306,43 +316,49 @@ class OC_Image {
}
/**
- * (I'm open for suggestions on better method name ;)
- * Get the orientation based on EXIF data.
- * @return int The orientation or -1 if no EXIF data is available.
- */
+ * (I'm open for suggestions on better method name ;)
+ * Get the orientation based on EXIF data.
+ *
+ * @return int The orientation or -1 if no EXIF data is available.
+ */
public function getOrientation() {
- if(!is_callable('exif_read_data')) {
- OC_Log::write('core', 'OC_Image->fixOrientation() Exif module not enabled.', OC_Log::DEBUG);
+ if ($this->imageType !== IMAGETYPE_JPEG) {
+ $this->logger->debug('OC_Image->fixOrientation() Image is not a JPEG.', array('app' => 'core'));
return -1;
}
- if(!$this->valid()) {
- OC_Log::write('core', 'OC_Image->fixOrientation() No image loaded.', OC_Log::DEBUG);
+ if (!is_callable('exif_read_data')) {
+ $this->logger->debug('OC_Image->fixOrientation() Exif module not enabled.', array('app' => 'core'));
return -1;
}
- if(is_null($this->filePath) || !is_readable($this->filePath)) {
- OC_Log::write('core', 'OC_Image->fixOrientation() No readable file path set.', OC_Log::DEBUG);
+ if (!$this->valid()) {
+ $this->logger->debug('OC_Image->fixOrientation() No image loaded.', array('app' => 'core'));
+ return -1;
+ }
+ if (is_null($this->filePath) || !is_readable($this->filePath)) {
+ $this->logger->debug('OC_Image->fixOrientation() No readable file path set.', array('app' => 'core'));
return -1;
}
$exif = @exif_read_data($this->filePath, 'IFD0');
- if(!$exif) {
+ if (!$exif) {
return -1;
}
- if(!isset($exif['Orientation'])) {
+ if (!isset($exif['Orientation'])) {
return -1;
}
return $exif['Orientation'];
}
/**
- * (I'm open for suggestions on better method name ;)
- * Fixes orientation based on EXIF data.
- * @return bool.
- */
+ * (I'm open for suggestions on better method name ;)
+ * Fixes orientation based on EXIF data.
+ *
+ * @return bool.
+ */
public function fixOrientation() {
$o = $this->getOrientation();
- OC_Log::write('core', 'OC_Image->fixOrientation() Orientation: '.$o, OC_Log::DEBUG);
+ $this->logger->debug('OC_Image->fixOrientation() Orientation: ' . $o, array('app' => 'core'));
$rotate = 0;
- switch($o) {
+ switch ($o) {
case -1:
return false; //Nothing to fix
case 1:
@@ -371,24 +387,24 @@ class OC_Image {
$rotate = 90;
break;
}
- if($rotate) {
+ if ($rotate) {
$res = imagerotate($this->resource, $rotate, 0);
- if($res) {
- if(imagealphablending($res, true)) {
- if(imagesavealpha($res, true)) {
+ if ($res) {
+ if (imagealphablending($res, true)) {
+ if (imagesavealpha($res, true)) {
imagedestroy($this->resource);
$this->resource = $res;
return true;
} else {
- OC_Log::write('core', 'OC_Image->fixOrientation() Error during alphasaving.', OC_Log::DEBUG);
+ $this->logger->debug('OC_Image->fixOrientation() Error during alpha-saving', array('app' => 'core'));
return false;
}
} else {
- OC_Log::write('core', 'OC_Image->fixOrientation() Error during alphablending.', OC_Log::DEBUG);
+ $this->logger->debug('OC_Image->fixOrientation() Error during alpha-blending', array('app' => 'core'));
return false;
}
} else {
- OC_Log::write('core', 'OC_Image->fixOrientation() Error during oriention fixing.', OC_Log::DEBUG);
+ $this->logger->debug('OC_Image->fixOrientation() Error during orientation fixing', array('app' => 'core'));
return false;
}
}
@@ -397,52 +413,54 @@ class OC_Image {
/**
* Loads an image from a local file, a base64 encoded string or a resource created by an imagecreate* function.
+ *
* @param resource|string $imageRef The path to a local file, a base64 encoded string or a resource created by an imagecreate* function or a file resource (file handle ).
* @return resource|false An image resource or false on error
*/
public function load($imageRef) {
- if(is_resource($imageRef)) {
- if(get_resource_type($imageRef) == 'gd') {
+ if (is_resource($imageRef)) {
+ if (get_resource_type($imageRef) == 'gd') {
$this->resource = $imageRef;
return $this->resource;
- } elseif(in_array(get_resource_type($imageRef), array('file', 'stream'))) {
+ } elseif (in_array(get_resource_type($imageRef), array('file', 'stream'))) {
return $this->loadFromFileHandle($imageRef);
}
- } elseif($this->loadFromBase64($imageRef) !== false) {
+ } elseif ($this->loadFromBase64($imageRef) !== false) {
return $this->resource;
- } elseif($this->loadFromFile($imageRef) !== false) {
+ } elseif ($this->loadFromFile($imageRef) !== false) {
return $this->resource;
- } elseif($this->loadFromData($imageRef) !== false) {
+ } elseif ($this->loadFromData($imageRef) !== false) {
return $this->resource;
- } else {
- OC_Log::write('core', __METHOD__.'(): couldn\'t load anything. Giving up!', OC_Log::DEBUG);
- return false;
}
+ $this->logger->debug(__METHOD__ . '(): could not load anything. Giving up!', array('app' => 'core'));
+ return false;
}
/**
- * Loads an image from an open file handle.
- * It is the responsibility of the caller to position the pointer at the correct place and to close the handle again.
- * @param resource $handle
- * @return resource|false An image resource or false on error
- */
+ * Loads an image from an open file handle.
+ * It is the responsibility of the caller to position the pointer at the correct place and to close the handle again.
+ *
+ * @param resource $handle
+ * @return resource|false An image resource or false on error
+ */
public function loadFromFileHandle($handle) {
- OC_Log::write('core', __METHOD__.'(): Trying', OC_Log::DEBUG);
$contents = stream_get_contents($handle);
- if($this->loadFromData($contents)) {
+ if ($this->loadFromData($contents)) {
return $this->resource;
}
+ return false;
}
/**
- * Loads an image from a local file.
- * @param bool|string $imagePath The path to a local file.
- * @return bool|resource An image resource or false on error
- */
- public function loadFromFile($imagePath=false) {
+ * Loads an image from a local file.
+ *
+ * @param bool|string $imagePath The path to a local file.
+ * @return bool|resource An image resource or false on error
+ */
+ public function loadFromFile($imagePath = false) {
// exif_imagetype throws "read error!" if file is less than 12 byte
- if(!@is_file($imagePath) || !file_exists($imagePath) || filesize($imagePath) < 12 || !is_readable($imagePath)) {
- OC_Log::write('core', 'OC_Image->loadFromFile, couldn\'t load: ' . (string) urlencode($imagePath), OC_Log::DEBUG);
+ if (!@is_file($imagePath) || !file_exists($imagePath) || filesize($imagePath) < 12 || !is_readable($imagePath)) {
+ $this->logger->debug('OC_Image->loadFromFile, could not load: ' . (string)urlencode($imagePath), array('app' => 'core'));
return false;
}
$iType = exif_imagetype($imagePath);
@@ -454,18 +472,14 @@ class OC_Image {
imagealphablending($this->resource, true);
imagesavealpha($this->resource, true);
} else {
- OC_Log::write('core',
- 'OC_Image->loadFromFile, GIF images not supported: '.$imagePath,
- OC_Log::DEBUG);
+ $this->logger->debug('OC_Image->loadFromFile, GIF images not supported: ' . $imagePath, array('app' => 'core'));
}
break;
case IMAGETYPE_JPEG:
if (imagetypes() & IMG_JPG) {
$this->resource = imagecreatefromjpeg($imagePath);
} else {
- OC_Log::write('core',
- 'OC_Image->loadFromFile, JPG images not supported: '.$imagePath,
- OC_Log::DEBUG);
+ $this->logger->debug('OC_Image->loadFromFile, JPG images not supported: ' . $imagePath, array('app' => 'core'));
}
break;
case IMAGETYPE_PNG:
@@ -475,31 +489,25 @@ class OC_Image {
imagealphablending($this->resource, true);
imagesavealpha($this->resource, true);
} else {
- OC_Log::write('core',
- 'OC_Image->loadFromFile, PNG images not supported: '.$imagePath,
- OC_Log::DEBUG);
+ $this->logger->debug('OC_Image->loadFromFile, PNG images not supported: ' . $imagePath, array('app' => 'core'));
}
break;
case IMAGETYPE_XBM:
if (imagetypes() & IMG_XPM) {
$this->resource = imagecreatefromxbm($imagePath);
} else {
- OC_Log::write('core',
- 'OC_Image->loadFromFile, XBM/XPM images not supported: '.$imagePath,
- OC_Log::DEBUG);
+ $this->logger->debug('OC_Image->loadFromFile, XBM/XPM images not supported: ' . $imagePath, array('app' => 'core'));
}
break;
case IMAGETYPE_WBMP:
if (imagetypes() & IMG_WBMP) {
$this->resource = imagecreatefromwbmp($imagePath);
} else {
- OC_Log::write('core',
- 'OC_Image->loadFromFile, WBMP images not supported: '.$imagePath,
- OC_Log::DEBUG);
+ $this->logger->debug('OC_Image->loadFromFile, WBMP images not supported: ' . $imagePath, array('app' => 'core'));
}
break;
case IMAGETYPE_BMP:
- $this->resource = $this->imagecreatefrombmp($imagePath);
+ $this->resource = $this->imagecreatefrombmp($imagePath);
break;
/*
case IMAGETYPE_TIFF_II: // (intel byte order)
@@ -530,10 +538,10 @@ class OC_Image {
// this is mostly file created from encrypted file
$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);
+ $this->logger->debug('OC_Image->loadFromFile, Default', array('app' => 'core'));
break;
}
- if($this->valid()) {
+ if ($this->valid()) {
$this->imageType = $iType;
$this->mimeType = image_type_to_mime_type($iType);
$this->filePath = $imagePath;
@@ -542,47 +550,49 @@ class OC_Image {
}
/**
- * Loads an image from a string of data.
- * @param string $str A string of image data as read from a file.
- * @return bool|resource An image resource or false on error
- */
+ * Loads an image from a string of data.
+ *
+ * @param string $str A string of image data as read from a file.
+ * @return bool|resource An image resource or false on error
+ */
public function loadFromData($str) {
- if(is_resource($str)) {
+ if (is_resource($str)) {
return false;
}
$this->resource = @imagecreatefromstring($str);
if ($this->fileInfo) {
$this->mimeType = $this->fileInfo->buffer($str);
}
- if(is_resource($this->resource)) {
+ if (is_resource($this->resource)) {
imagealphablending($this->resource, false);
imagesavealpha($this->resource, true);
}
- if(!$this->resource) {
- OC_Log::write('core', 'OC_Image->loadFromData, couldn\'t load', OC_Log::DEBUG);
+ if (!$this->resource) {
+ $this->logger->debug('OC_Image->loadFromFile, could not load', array('app' => 'core'));
return false;
}
return $this->resource;
}
/**
- * Loads an image from a base64 encoded string.
- * @param string $str A string base64 encoded string of image data.
- * @return bool|resource An image resource or false on error
- */
+ * Loads an image from a base64 encoded string.
+ *
+ * @param string $str A string base64 encoded string of image data.
+ * @return bool|resource An image resource or false on error
+ */
public function loadFromBase64($str) {
- if(!is_string($str)) {
+ if (!is_string($str)) {
return false;
}
$data = base64_decode($str);
- if($data) { // try to load from string data
+ if ($data) { // try to load from string data
$this->resource = @imagecreatefromstring($data);
if ($this->fileInfo) {
$this->mimeType = $this->fileInfo->buffer($data);
}
- if(!$this->resource) {
- OC_Log::write('core', 'OC_Image->loadFromBase64, couldn\'t load', OC_Log::DEBUG);
+ if (!$this->resource) {
+ $this->logger->debug('OC_Image->loadFromBase64, could not load', array('app' => 'core'));
return false;
}
return $this->resource;
@@ -593,6 +603,7 @@ class OC_Image {
/**
* Create a new image from file or URL
+ *
* @link http://www.programmierer-forum.de/function-imagecreatefrombmp-laeuft-mit-allen-bitraten-t143137.htm
* @version 1.00
* @param string $fileName <p>
@@ -602,7 +613,7 @@ class OC_Image {
*/
private function imagecreatefrombmp($fileName) {
if (!($fh = fopen($fileName, 'rb'))) {
- trigger_error('imagecreatefrombmp: Can not open ' . $fileName, E_USER_WARNING);
+ $this->logger->warning('imagecreatefrombmp: Can not open ' . $fileName, array('app' => 'core'));
return false;
}
// read file header
@@ -610,7 +621,7 @@ class OC_Image {
// check for bitmap
if ($meta['type'] != 19778) {
fclose($fh);
- trigger_error('imagecreatefrombmp: ' . $fileName . ' is not a bitmap!', E_USER_WARNING);
+ $this->logger->warning('imagecreatefrombmp: Can not open ' . $fileName . ' is not a bitmap!', array('app' => 'core'));
return false;
}
// read image header
@@ -622,7 +633,7 @@ class OC_Image {
// set bytes and padding
$meta['bytes'] = $meta['bits'] / 8;
$this->bitDepth = $meta['bits']; //remember the bit depth for the imagebmp call
- $meta['decal'] = 4 - (4 * (($meta['width'] * $meta['bytes'] / 4)- floor($meta['width'] * $meta['bytes'] / 4)));
+ $meta['decal'] = 4 - (4 * (($meta['width'] * $meta['bytes'] / 4) - floor($meta['width'] * $meta['bytes'] / 4)));
if ($meta['decal'] == 4) {
$meta['decal'] = 0;
}
@@ -634,7 +645,7 @@ class OC_Image {
$meta['imagesize'] = @filesize($fileName) - $meta['offset'];
if ($meta['imagesize'] < 1) {
fclose($fh);
- trigger_error('imagecreatefrombmp: Can not obtain filesize of ' . $fileName . '!', E_USER_WARNING);
+ $this->logger->warning('imagecreatefrombmp: Can not obtain file size of ' . $fileName . ' is not a bitmap!', array('app' => 'core'));
return false;
}
}
@@ -654,6 +665,14 @@ class OC_Image {
}
// create gd image
$im = imagecreatetruecolor($meta['width'], $meta['height']);
+ if ($im == false) {
+ fclose($fh);
+ $this->logger->warning(
+ 'imagecreatefrombmp: imagecreatetruecolor failed for file "' . $fileName . '" with dimensions ' . $meta['width'] . 'x' . $meta['height'],
+ array('app' => 'core'));
+ return false;
+ }
+
$data = fread($fh, $meta['imagesize']);
$p = 0;
$vide = chr(0);
@@ -667,7 +686,7 @@ class OC_Image {
case 32:
case 24:
if (!($part = substr($data, $p, 3))) {
- trigger_error($error, E_USER_WARNING);
+ $this->logger->warning($error, array('app' => 'core'));
return $im;
}
$color = unpack('V', $part . $vide);
@@ -675,7 +694,7 @@ class OC_Image {
case 16:
if (!($part = substr($data, $p, 2))) {
fclose($fh);
- trigger_error($error, E_USER_WARNING);
+ $this->logger->warning($error, array('app' => 'core'));
return $im;
}
$color = unpack('v', $part);
@@ -683,12 +702,12 @@ class OC_Image {
break;
case 8:
$color = unpack('n', $vide . substr($data, $p, 1));
- $color[1] = $palette[ $color[1] + 1 ];
+ $color[1] = $palette[$color[1] + 1];
break;
case 4:
$color = unpack('n', $vide . substr($data, floor($p), 1));
$color[1] = ($p * 2) % 2 == 0 ? $color[1] >> 4 : $color[1] & 0x0F;
- $color[1] = $palette[ $color[1] + 1 ];
+ $color[1] = $palette[$color[1] + 1];
break;
case 1:
$color = unpack('n', $vide . substr($data, floor($p), 1));
@@ -718,13 +737,11 @@ class OC_Image {
$color[1] = ($color[1] & 0x1);
break;
}
- $color[1] = $palette[ $color[1] + 1 ];
+ $color[1] = $palette[$color[1] + 1];
break;
default:
fclose($fh);
- trigger_error('imagecreatefrombmp: '
- . $fileName . ' has ' . $meta['bits'] . ' bits and this is not supported!',
- E_USER_WARNING);
+ $this->logger->warning('imagecreatefrombmp: ' . $fileName . ' has ' . $meta['bits'] . ' bits and this is not supported!', array('app' => 'core'));
return false;
}
imagesetpixel($im, $x, $y, $color[1]);
@@ -739,24 +756,25 @@ class OC_Image {
}
/**
- * Resizes the image preserving ratio.
- * @param integer $maxSize The maximum size of either the width or height.
- * @return bool
- */
+ * Resizes the image preserving ratio.
+ *
+ * @param integer $maxSize The maximum size of either the width or height.
+ * @return bool
+ */
public function resize($maxSize) {
- if(!$this->valid()) {
- OC_Log::write('core', __METHOD__.'(): No image loaded', OC_Log::ERROR);
+ if (!$this->valid()) {
+ $this->logger->error(__METHOD__ . '(): No image loaded', array('app' => 'core'));
return false;
}
- $widthOrig=imageSX($this->resource);
- $heightOrig=imageSY($this->resource);
- $ratioOrig = $widthOrig/$heightOrig;
+ $widthOrig = imageSX($this->resource);
+ $heightOrig = imageSY($this->resource);
+ $ratioOrig = $widthOrig / $heightOrig;
if ($ratioOrig > 1) {
- $newHeight = round($maxSize/$ratioOrig);
+ $newHeight = round($maxSize / $ratioOrig);
$newWidth = $maxSize;
} else {
- $newWidth = round($maxSize*$ratioOrig);
+ $newWidth = round($maxSize * $ratioOrig);
$newHeight = $maxSize;
}
@@ -771,21 +789,21 @@ class OC_Image {
*/
public function preciseResize($width, $height) {
if (!$this->valid()) {
- OC_Log::write('core', __METHOD__.'(): No image loaded', OC_Log::ERROR);
+ $this->logger->error(__METHOD__ . '(): No image loaded', array('app' => 'core'));
return false;
}
- $widthOrig=imageSX($this->resource);
- $heightOrig=imageSY($this->resource);
+ $widthOrig = imageSX($this->resource);
+ $heightOrig = imageSY($this->resource);
$process = imagecreatetruecolor($width, $height);
if ($process == false) {
- OC_Log::write('core', __METHOD__.'(): Error creating true color image', OC_Log::ERROR);
+ $this->logger->error(__METHOD__ . '(): Error creating true color image', array('app' => 'core'));
imagedestroy($process);
return false;
}
// preserve transparency
- if($this->imageType == IMAGETYPE_GIF or $this->imageType == IMAGETYPE_PNG) {
+ if ($this->imageType == IMAGETYPE_GIF or $this->imageType == IMAGETYPE_PNG) {
imagecolortransparent($process, imagecolorallocatealpha($process, 0, 0, 0, 127));
imagealphablending($process, false);
imagesavealpha($process, true);
@@ -793,7 +811,7 @@ class OC_Image {
imagecopyresampled($process, $this->resource, 0, 0, 0, 0, $width, $height, $widthOrig, $heightOrig);
if ($process == false) {
- OC_Log::write('core', __METHOD__.'(): Error resampling process image '.$width.'x'.$height, OC_Log::ERROR);
+ $this->logger->error(__METHOD__ . '(): Error re-sampling process image', array('app' => 'core'));
imagedestroy($process);
return false;
}
@@ -803,46 +821,47 @@ class OC_Image {
}
/**
- * Crops the image to the middle square. If the image is already square it just returns.
- * @param int $size maximum size for the result (optional)
- * @return bool for success or failure
- */
- public function centerCrop($size=0) {
- if(!$this->valid()) {
- OC_Log::write('core', 'OC_Image->centerCrop, No image loaded', OC_Log::ERROR);
+ * Crops the image to the middle square. If the image is already square it just returns.
+ *
+ * @param int $size maximum size for the result (optional)
+ * @return bool for success or failure
+ */
+ public function centerCrop($size = 0) {
+ if (!$this->valid()) {
+ $this->logger->error('OC_Image->centerCrop, No image loaded', array('app' => 'core'));
return false;
}
- $widthOrig=imageSX($this->resource);
- $heightOrig=imageSY($this->resource);
- if($widthOrig === $heightOrig and $size==0) {
+ $widthOrig = imageSX($this->resource);
+ $heightOrig = imageSY($this->resource);
+ if ($widthOrig === $heightOrig and $size == 0) {
return true;
}
- $ratioOrig = $widthOrig/$heightOrig;
+ $ratioOrig = $widthOrig / $heightOrig;
$width = $height = min($widthOrig, $heightOrig);
if ($ratioOrig > 1) {
- $x = ($widthOrig/2) - ($width/2);
+ $x = ($widthOrig / 2) - ($width / 2);
$y = 0;
} else {
- $y = ($heightOrig/2) - ($height/2);
+ $y = ($heightOrig / 2) - ($height / 2);
$x = 0;
}
- if($size>0) {
- $targetWidth=$size;
- $targetHeight=$size;
- }else{
- $targetWidth=$width;
- $targetHeight=$height;
+ if ($size > 0) {
+ $targetWidth = $size;
+ $targetHeight = $size;
+ } else {
+ $targetWidth = $width;
+ $targetHeight = $height;
}
$process = imagecreatetruecolor($targetWidth, $targetHeight);
if ($process == false) {
- OC_Log::write('core', 'OC_Image->centerCrop. Error creating true color image', OC_Log::ERROR);
+ $this->logger->error('OC_Image->centerCrop, Error creating true color image', array('app' => 'core'));
imagedestroy($process);
return false;
}
// preserve transparency
- if($this->imageType == IMAGETYPE_GIF or $this->imageType == IMAGETYPE_PNG) {
+ if ($this->imageType == IMAGETYPE_GIF or $this->imageType == IMAGETYPE_PNG) {
imagecolortransparent($process, imagecolorallocatealpha($process, 0, 0, 0, 127));
imagealphablending($process, false);
imagesavealpha($process, true);
@@ -850,9 +869,7 @@ class OC_Image {
imagecopyresampled($process, $this->resource, 0, 0, $x, $y, $targetWidth, $targetHeight, $width, $height);
if ($process == false) {
- OC_Log::write('core',
- 'OC_Image->centerCrop. Error resampling process image '.$width.'x'.$height,
- OC_Log::ERROR);
+ $this->logger->error('OC_Image->centerCrop, Error re-sampling process image ' . $width . 'x' . $height, array('app' => 'core'));
imagedestroy($process);
return false;
}
@@ -862,27 +879,28 @@ class OC_Image {
}
/**
- * Crops the image from point $x$y with dimension $wx$h.
- * @param int $x Horizontal position
- * @param int $y Vertical position
- * @param int $w Width
- * @param int $h Height
- * @return bool for success or failure
- */
+ * Crops the image from point $x$y with dimension $wx$h.
+ *
+ * @param int $x Horizontal position
+ * @param int $y Vertical position
+ * @param int $w Width
+ * @param int $h Height
+ * @return bool for success or failure
+ */
public function crop($x, $y, $w, $h) {
- if(!$this->valid()) {
- OC_Log::write('core', __METHOD__.'(): No image loaded', OC_Log::ERROR);
+ if (!$this->valid()) {
+ $this->logger->error(__METHOD__ . '(): No image loaded', array('app' => 'core'));
return false;
}
$process = imagecreatetruecolor($w, $h);
if ($process == false) {
- OC_Log::write('core', __METHOD__.'(): Error creating true color image', OC_Log::ERROR);
+ $this->logger->error(__METHOD__ . '(): Error creating true color image', array('app' => 'core'));
imagedestroy($process);
return false;
}
// preserve transparency
- if($this->imageType == IMAGETYPE_GIF or $this->imageType == IMAGETYPE_PNG) {
+ if ($this->imageType == IMAGETYPE_GIF or $this->imageType == IMAGETYPE_PNG) {
imagecolortransparent($process, imagecolorallocatealpha($process, 0, 0, 0, 127));
imagealphablending($process, false);
imagesavealpha($process, true);
@@ -890,7 +908,7 @@ class OC_Image {
imagecopyresampled($process, $this->resource, 0, 0, $x, $y, $w, $h, $w, $h);
if ($process == false) {
- OC_Log::write('core', __METHOD__.'(): Error resampling process image '.$w.'x'.$h, OC_Log::ERROR);
+ $this->logger->error(__METHOD__ . '(): Error re-sampling process image ' . $w . 'x' . $h, array('app' => 'core'));
imagedestroy($process);
return false;
}
@@ -900,41 +918,44 @@ class OC_Image {
}
/**
- * Resizes the image to fit within a boundry while preserving ratio.
+ * Resizes the image to fit within a boundary while preserving ratio.
+ *
* @param integer $maxWidth
* @param integer $maxHeight
* @return bool
*/
public function fitIn($maxWidth, $maxHeight) {
- if(!$this->valid()) {
- OC_Log::write('core', __METHOD__.'(): No image loaded', OC_Log::ERROR);
+ if (!$this->valid()) {
+ $this->logger->error(__METHOD__ . '(): No image loaded', array('app' => 'core'));
return false;
}
- $widthOrig=imageSX($this->resource);
- $heightOrig=imageSY($this->resource);
- $ratio = $widthOrig/$heightOrig;
+ $widthOrig = imageSX($this->resource);
+ $heightOrig = imageSY($this->resource);
+ $ratio = $widthOrig / $heightOrig;
- $newWidth = min($maxWidth, $ratio*$maxHeight);
- $newHeight = min($maxHeight, $maxWidth/$ratio);
+ $newWidth = min($maxWidth, $ratio * $maxHeight);
+ $newHeight = min($maxHeight, $maxWidth / $ratio);
$this->preciseResize(round($newWidth), round($newHeight));
return true;
}
public function destroy() {
- if($this->valid()) {
+ if ($this->valid()) {
imagedestroy($this->resource);
}
- $this->resource=null;
+ $this->resource = null;
}
public function __destruct() {
$this->destroy();
}
}
-if ( ! function_exists( 'imagebmp') ) {
+
+if (!function_exists('imagebmp')) {
/**
* Output a BMP image to either the browser or a file
+ *
* @link http://www.ugia.cn/wp-data/imagebmp.php
* @author legend <legendsky@hotmail.com>
* @link http://www.programmierer-forum.de/imagebmp-gute-funktion-gefunden-t143716.htm
@@ -945,11 +966,10 @@ if ( ! function_exists( 'imagebmp') ) {
* @param int $compression [optional]
* @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
*/
- function imagebmp($im, $fileName='', $bit=24, $compression=0) {
+ function imagebmp($im, $fileName = '', $bit = 24, $compression = 0) {
if (!in_array($bit, array(1, 4, 8, 16, 24, 32))) {
$bit = 24;
- }
- else if ($bit == 32) {
+ } else if ($bit == 32) {
$bit = 24;
}
$bits = pow(2, $bit);
@@ -971,7 +991,7 @@ if ( ! function_exists( 'imagebmp') ) {
if ($padding % 4 != 0) {
$extra = str_repeat("\0", $padding);
}
- for ($j = $height - 1; $j >= 0; $j --) {
+ for ($j = $height - 1; $j >= 0; $j--) {
$i = 0;
while ($i < $width) {
$bin = 0;
@@ -985,8 +1005,7 @@ if ( ! function_exists( 'imagebmp') ) {
}
$bmpData .= $extra;
}
- }
- // RLE8
+ } // RLE8
else if ($compression == 1 && $bit == 8) {
for ($j = $height - 1; $j >= 0; $j--) {
$lastIndex = "\0";
@@ -999,8 +1018,7 @@ if ( ! function_exists( 'imagebmp') ) {
}
$lastIndex = $index;
$sameNum = 1;
- }
- else {
+ } else {
$sameNum++;
}
}
@@ -1010,8 +1028,7 @@ if ( ! function_exists( 'imagebmp') ) {
}
$sizeQuad = strlen($rgbQuad);
$sizeData = strlen($bmpData);
- }
- else {
+ } else {
$extra = '';
$padding = 4 - ($width * ($bit / 8)) % 4;
if ($padding % 4 != 0) {
@@ -1020,7 +1037,7 @@ if ( ! function_exists( 'imagebmp') ) {
$bmpData = '';
for ($j = $height - 1; $j >= 0; $j--) {
for ($i = 0; $i < $width; $i++) {
- $index = imagecolorat($im, $i, $j);
+ $index = imagecolorat($im, $i, $j);
$colors = imagecolorsforindex($im, $index);
if ($bit == 16) {
$bin = 0 << $bit;
@@ -1028,8 +1045,7 @@ if ( ! function_exists( 'imagebmp') ) {
$bin |= ($colors['green'] >> 3) << 5;
$bin |= $colors['blue'] >> 3;
$bmpData .= pack("v", $bin);
- }
- else {
+ } else {
$bmpData .= pack("c*", $colors['blue'], $colors['green'], $colors['red']);
}
}
@@ -1047,20 +1063,21 @@ if ( ! function_exists( 'imagebmp') ) {
fclose($fp);
return true;
}
- echo $fileHeader . $infoHeader. $rgbQuad . $bmpData;
+ echo $fileHeader . $infoHeader . $rgbQuad . $bmpData;
return true;
}
}
-if ( ! function_exists( 'exif_imagetype' ) ) {
+if (!function_exists('exif_imagetype')) {
/**
* Workaround if exif_imagetype does not exist
+ *
* @link http://www.php.net/manual/en/function.exif-imagetype.php#80383
* @param string $fileName
* @return string|boolean
*/
- function exif_imagetype ( $fileName ) {
- if ( ( $info = getimagesize( $fileName ) ) !== false ) {
+ function exif_imagetype($fileName) {
+ if (($info = getimagesize($fileName)) !== false) {
return $info[2];
}
return false;
diff --git a/lib/private/installer.php b/lib/private/installer.php
index f43969691c7..60ed06ae352 100644
--- a/lib/private/installer.php
+++ b/lib/private/installer.php
@@ -568,7 +568,7 @@ class OC_Installer{
// iterate the bad patterns
foreach($blacklist as $bl) {
- $cmd = 'grep -ri '.escapeshellarg($bl).' '.$folder.'';
+ $cmd = 'grep --include \\*.php -ri '.escapeshellarg($bl).' '.$folder.'';
$result = exec($cmd);
// bad pattern found
if($result<>'') {
diff --git a/lib/private/log/errorlog.php b/lib/private/log/errorlog.php
new file mode 100644
index 00000000000..007ab307722
--- /dev/null
+++ b/lib/private/log/errorlog.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2014 Christian Kampka <christian@kampka.net>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+class OC_Log_Errorlog {
+
+
+ /**
+ * Init class data
+ */
+ public static function init() {
+ }
+
+ /**
+ * write a message in the log
+ * @param string $app
+ * @param string $message
+ * @param int $level
+ */
+ public static function write($app, $message, $level) {
+ $minLevel = min(OC_Config::getValue("loglevel", OC_Log::WARN), OC_Log::ERROR);
+ if ($level >= $minLevel) {
+ error_log('[owncloud]['.$app.'] '.$message);
+ }
+ }
+}
+
diff --git a/lib/private/naturalsort.php b/lib/private/naturalsort.php
index eb00f99a672..6e259630f79 100644
--- a/lib/private/naturalsort.php
+++ b/lib/private/naturalsort.php
@@ -9,16 +9,6 @@
namespace OC;
-class NaturalSort_DefaultCollator {
-
- public function compare($a, $b) {
- if ($a === $b) {
- return 0;
- }
- return ($a < $b) ? -1 : 1;
- }
-}
-
class NaturalSort {
private static $instance;
private $collator;
@@ -114,4 +104,3 @@ class NaturalSort {
return self::$instance;
}
}
-
diff --git a/lib/private/naturalsort_defaultcollator.php b/lib/private/naturalsort_defaultcollator.php
new file mode 100644
index 00000000000..e1007f8d7b4
--- /dev/null
+++ b/lib/private/naturalsort_defaultcollator.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Copyright (c) 2014 Vincent Petry <PVince81@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ *
+ */
+
+namespace OC;
+
+class NaturalSort_DefaultCollator {
+ public function compare($a, $b) {
+ if ($a === $b) {
+ return 0;
+ }
+ return ($a < $b) ? -1 : 1;
+ }
+}
diff --git a/lib/private/preview.php b/lib/private/preview.php
index c9d8810be6f..7305bf1cc0e 100644
--- a/lib/private/preview.php
+++ b/lib/private/preview.php
@@ -16,14 +16,6 @@ namespace OC;
use OC\Preview\Provider;
use OCP\Files\NotFoundException;
-require_once 'preview/image.php';
-require_once 'preview/movie.php';
-require_once 'preview/mp3.php';
-require_once 'preview/svg.php';
-require_once 'preview/txt.php';
-require_once 'preview/office.php';
-require_once 'preview/bitmap.php';
-
class Preview {
//the thumbnail folder
const THUMBNAILS_FOLDER = 'thumbnails';
@@ -106,7 +98,7 @@ class Preview {
self::initProviders();
}
- if (empty(self::$providers)) {
+ if (empty(self::$providers) && \OC::$server->getConfig()->getSystemValue('enable_previews', true)) {
\OC_Log::write('core', 'No preview providers exist', \OC_Log::ERROR);
throw new \Exception('No preview providers');
}
@@ -744,10 +736,11 @@ class Preview {
return;
}
- if (count(self::$providers) > 0) {
+ if (!empty(self::$providers)) {
return;
}
+ self::registerCoreProviders();
foreach (self::$registeredProviders as $provider) {
$class = $provider['class'];
$options = $provider['options'];
@@ -759,7 +752,74 @@ class Preview {
$keys = array_map('strlen', array_keys(self::$providers));
array_multisort($keys, SORT_DESC, self::$providers);
+ }
+
+ protected static function registerCoreProviders() {
+ self::registerProvider('OC\Preview\TXT');
+ self::registerProvider('OC\Preview\MarkDown');
+ self::registerProvider('OC\Preview\Image');
+ self::registerProvider('OC\Preview\MP3');
+
+ // SVG, Office and Bitmap require imagick
+ if (extension_loaded('imagick')) {
+ $checkImagick = new \Imagick();
+
+ $imagickProviders = array(
+ 'SVG' => 'OC\Preview\SVG',
+ 'TIFF' => 'OC\Preview\TIFF',
+ 'PDF' => 'OC\Preview\PDF',
+ 'AI' => 'OC\Preview\Illustrator',
+ 'PSD' => 'OC\Preview\Photoshop',
+ // Requires adding 'eps' => array('application/postscript', null), to lib/private/mimetypes.list.php
+ 'EPS' => 'OC\Preview\Postscript',
+ );
+
+ foreach ($imagickProviders as $queryFormat => $provider) {
+ if (count($checkImagick->queryFormats($queryFormat)) === 1) {
+ self::registerProvider($provider);
+ }
+ }
+
+ if (count($checkImagick->queryFormats('PDF')) === 1) {
+ // Office previews are currently not supported on Windows
+ if (!\OC_Util::runningOnWindows() && \OC_Helper::is_function_enabled('shell_exec')) {
+ $officeFound = is_string(\OC::$server->getConfig()->getSystemValue('preview_libreoffice_path', null));
+
+ if (!$officeFound) {
+ //let's see if there is libreoffice or openoffice on this machine
+ $whichLibreOffice = shell_exec('command -v libreoffice');
+ $officeFound = !empty($whichLibreOffice);
+ if (!$officeFound) {
+ $whichOpenOffice = shell_exec('command -v openoffice');
+ $officeFound = !empty($whichOpenOffice);
+ }
+ }
+
+ if ($officeFound) {
+ self::registerProvider('OC\Preview\MSOfficeDoc');
+ self::registerProvider('OC\Preview\MSOffice2003');
+ self::registerProvider('OC\Preview\MSOffice2007');
+ self::registerProvider('OC\Preview\OpenDocument');
+ self::registerProvider('OC\Preview\StarOffice');
+ }
+ }
+ }
+ }
+
+ // Video requires avconv or ffmpeg and is therefor
+ // currently not supported on Windows.
+ if (!\OC_Util::runningOnWindows()) {
+ $avconvBinary = \OC_Helper::findBinaryPath('avconv');
+ $ffmpegBinary = ($avconvBinary) ? null : \OC_Helper::findBinaryPath('ffmpeg');
+ if ($avconvBinary || $ffmpegBinary) {
+ // FIXME // a bit hacky but didn't want to use subclasses
+ \OC\Preview\Movie::$avconvBinary = $avconvBinary;
+ \OC\Preview\Movie::$ffmpegBinary = $ffmpegBinary;
+
+ self::registerProvider('OC\Preview\Movie');
+ }
+ }
}
/**
diff --git a/lib/private/preview/bitmap.php b/lib/private/preview/bitmap.php
index 748a63a6afa..25f65cf7fc9 100644
--- a/lib/private/preview/bitmap.php
+++ b/lib/private/preview/bitmap.php
@@ -5,113 +5,33 @@
* later.
* See the COPYING-README file.
*/
-namespace OC\Preview;
-
-use Imagick;
-
-if (extension_loaded('imagick')) {
-
- $checkImagick = new Imagick();
-
- class Bitmap extends Provider {
-
- public function getMimeType() {
- return null;
- }
-
- public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
- $tmpPath = $fileview->toTmpFile($path);
- //create imagick object from bitmap or vector file
- try{
- // Layer 0 contains either the bitmap or
- // a flat representation of all vector layers
- $bp = new Imagick($tmpPath . '[0]');
-
- $bp->setImageFormat('png');
- } catch (\Exception $e) {
- \OC_Log::write('core', $e->getmessage(), \OC_Log::ERROR);
- return false;
- }
-
- unlink($tmpPath);
-
- //new bitmap image object
- $image = new \OC_Image($bp);
- //check if image object is valid
- return $image->valid() ? $image : false;
- }
-
- }
-
- if(count($checkImagick->queryFormats('PDF')) === 1) {
-
- //.pdf
- class PDF extends Bitmap {
-
- public function getMimeType() {
- return '/application\/pdf/';
- }
-
- }
-
- \OC\Preview::registerProvider('OC\Preview\PDF');
- }
-
- if(count($checkImagick->queryFormats('TIFF')) === 1) {
-
- //.tiff
- class TIFF extends Bitmap {
-
- public function getMimeType() {
- return '/image\/tiff/';
- }
-
- }
-
- \OC\Preview::registerProvider('OC\Preview\TIFF');
- }
-
- if(count($checkImagick->queryFormats('AI')) === 1) {
-
- //.ai
- class Illustrator extends Bitmap {
-
- public function getMimeType() {
- return '/application\/illustrator/';
- }
-
- }
-
- \OC\Preview::registerProvider('OC\Preview\Illustrator');
- }
-
- // Requires adding 'eps' => array('application/postscript', null), to lib/private/mimetypes.list.php
- if(count($checkImagick->queryFormats('EPS')) === 1) {
-
- //.eps
- class Postscript extends Bitmap {
-
- public function getMimeType() {
- return '/application\/postscript/';
- }
+namespace OC\Preview;
+abstract class Bitmap extends Provider {
+ /**
+ * {@inheritDoc}
+ */
+ public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
+ $tmpPath = $fileview->toTmpFile($path);
+
+ //create imagick object from bitmap or vector file
+ try {
+ // Layer 0 contains either the bitmap or
+ // a flat representation of all vector layers
+ $bp = new \Imagick($tmpPath . '[0]');
+
+ $bp->setImageFormat('png');
+ } catch (\Exception $e) {
+ \OC_Log::write('core', $e->getmessage(), \OC_Log::ERROR);
+ return false;
}
- \OC\Preview::registerProvider('OC\Preview\Postscript');
- }
-
- if(count($checkImagick->queryFormats('PSD')) === 1) {
-
- //.psd
- class Photoshop extends Bitmap {
-
- public function getMimeType() {
- return '/application\/x-photoshop/';
- }
+ unlink($tmpPath);
- }
-
- \OC\Preview::registerProvider('OC\Preview\Photoshop');
+ //new bitmap image object
+ $image = new \OC_Image($bp);
+ //check if image object is valid
+ return $image->valid() ? $image : false;
}
}
diff --git a/lib/private/preview/illustrator.php b/lib/private/preview/illustrator.php
new file mode 100644
index 00000000000..e88c305f708
--- /dev/null
+++ b/lib/private/preview/illustrator.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Copyright (c) 2013-2014 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Preview;
+
+//.ai
+class Illustrator extends Bitmap {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/application\/illustrator/';
+ }
+}
diff --git a/lib/private/preview/image.php b/lib/private/preview/image.php
index 7bcbddc649e..986a44b48fd 100644
--- a/lib/private/preview/image.php
+++ b/lib/private/preview/image.php
@@ -9,11 +9,16 @@
namespace OC\Preview;
class Image extends Provider {
-
+ /**
+ * {@inheritDoc}
+ */
public function getMimeType() {
return '/image\/(?!tiff$)(?!svg.*).*/';
}
+ /**
+ * {@inheritDoc}
+ */
public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
//get fileinfo
$fileInfo = $fileview->getFileInfo($path);
@@ -35,5 +40,3 @@ class Image extends Provider {
}
}
-
-\OC\Preview::registerProvider('OC\Preview\Image');
diff --git a/lib/private/preview/markdown.php b/lib/private/preview/markdown.php
new file mode 100644
index 00000000000..1be01fcdd4c
--- /dev/null
+++ b/lib/private/preview/markdown.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Preview;
+
+class MarkDown extends TXT {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/text\/(x-)?markdown/';
+ }
+
+}
diff --git a/lib/private/preview/movie.php b/lib/private/preview/movie.php
index d69266ceb33..06353ddebb7 100644
--- a/lib/private/preview/movie.php
+++ b/lib/private/preview/movie.php
@@ -8,99 +8,87 @@
*/
namespace OC\Preview;
-// movie preview is currently not supported on Windows
-if (!\OC_Util::runningOnWindows()) {
- $avconvBinary = \OC_Helper::findBinaryPath('avconv');
- $ffmpegBinary = ($avconvBinary) ? null : \OC_Helper::findBinaryPath('ffmpeg');
-
- if ($avconvBinary || $ffmpegBinary) {
-
- class Movie extends Provider {
- public static $avconvBinary;
- public static $ffmpegBinary;
-
- public function getMimeType() {
- return '/video\/.*/';
- }
-
- public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
- // TODO: use proc_open() and stream the source file ?
-
- $fileInfo = $fileview->getFileInfo($path);
- $useFileDirectly = (!$fileInfo->isEncrypted() && !$fileInfo->isMounted());
+class Movie extends Provider {
+ public static $avconvBinary;
+ public static $ffmpegBinary;
+
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/video\/.*/';
+ }
- if ($useFileDirectly) {
- $absPath = $fileview->getLocalFile($path);
- } else {
- $absPath = \OC_Helper::tmpFile();
+ /**
+ * {@inheritDoc}
+ */
+ public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
+ // TODO: use proc_open() and stream the source file ?
- $handle = $fileview->fopen($path, 'rb');
+ $fileInfo = $fileview->getFileInfo($path);
+ $useFileDirectly = (!$fileInfo->isEncrypted() && !$fileInfo->isMounted());
- // we better use 5MB (1024 * 1024 * 5 = 5242880) instead of 1MB.
- // in some cases 1MB was no enough to generate thumbnail
- $firstmb = stream_get_contents($handle, 5242880);
- file_put_contents($absPath, $firstmb);
- }
+ if ($useFileDirectly) {
+ $absPath = $fileview->getLocalFile($path);
+ } else {
+ $absPath = \OC_Helper::tmpFile();
- $result = $this->generateThumbNail($maxX, $maxY, $absPath, 5);
- if ($result === false) {
- $result = $this->generateThumbNail($maxX, $maxY, $absPath, 1);
- if ($result === false) {
- $result = $this->generateThumbNail($maxX, $maxY, $absPath, 0);
- }
- }
+ $handle = $fileview->fopen($path, 'rb');
- if (!$useFileDirectly) {
- unlink($absPath);
- }
+ // we better use 5MB (1024 * 1024 * 5 = 5242880) instead of 1MB.
+ // in some cases 1MB was no enough to generate thumbnail
+ $firstmb = stream_get_contents($handle, 5242880);
+ file_put_contents($absPath, $firstmb);
+ }
- return $result;
+ $result = $this->generateThumbNail($maxX, $maxY, $absPath, 5);
+ if ($result === false) {
+ $result = $this->generateThumbNail($maxX, $maxY, $absPath, 1);
+ if ($result === false) {
+ $result = $this->generateThumbNail($maxX, $maxY, $absPath, 0);
}
+ }
- /**
- * @param int $maxX
- * @param int $maxY
- * @param string $absPath
- * @param string $tmpPath
- * @param int $second
- * @return bool|\OC_Image
- */
- private function generateThumbNail($maxX, $maxY, $absPath, $second)
- {
- $tmpPath = \OC_Helper::tmpFile();
-
- if (self::$avconvBinary) {
- $cmd = self::$avconvBinary . ' -an -y -ss ' . escapeshellarg($second) .
- ' -i ' . escapeshellarg($absPath) .
- ' -f mjpeg -vframes 1 -vsync 1 ' . escapeshellarg($tmpPath) .
- ' > /dev/null 2>&1';
- } else {
- $cmd = self::$ffmpegBinary . ' -y -ss ' . escapeshellarg($second) .
- ' -i ' . escapeshellarg($absPath) .
- ' -f mjpeg -vframes 1' .
- ' -s ' . escapeshellarg($maxX) . 'x' . escapeshellarg($maxY) .
- ' ' . escapeshellarg($tmpPath) .
- ' > /dev/null 2>&1';
- }
+ if (!$useFileDirectly) {
+ unlink($absPath);
+ }
- exec($cmd, $output, $returnCode);
+ return $result;
+ }
- if ($returnCode === 0) {
- $image = new \OC_Image();
- $image->loadFromFile($tmpPath);
- unlink($tmpPath);
- return $image->valid() ? $image : false;
- }
- unlink($tmpPath);
- return false;
- }
+ /**
+ * @param int $maxX
+ * @param int $maxY
+ * @param string $absPath
+ * @param int $second
+ * @return bool|\OC_Image
+ */
+ private function generateThumbNail($maxX, $maxY, $absPath, $second) {
+ $tmpPath = \OC_Helper::tmpFile();
+
+ if (self::$avconvBinary) {
+ $cmd = self::$avconvBinary . ' -an -y -ss ' . escapeshellarg($second) .
+ ' -i ' . escapeshellarg($absPath) .
+ ' -f mjpeg -vframes 1 -vsync 1 ' . escapeshellarg($tmpPath) .
+ ' > /dev/null 2>&1';
+ } else {
+ $cmd = self::$ffmpegBinary . ' -y -ss ' . escapeshellarg($second) .
+ ' -i ' . escapeshellarg($absPath) .
+ ' -f mjpeg -vframes 1' .
+ ' -s ' . escapeshellarg($maxX) . 'x' . escapeshellarg($maxY) .
+ ' ' . escapeshellarg($tmpPath) .
+ ' > /dev/null 2>&1';
}
- // a bit hacky but didn't want to use subclasses
- Movie::$avconvBinary = $avconvBinary;
- Movie::$ffmpegBinary = $ffmpegBinary;
+ exec($cmd, $output, $returnCode);
- \OC\Preview::registerProvider('OC\Preview\Movie');
+ if ($returnCode === 0) {
+ $image = new \OC_Image();
+ $image->loadFromFile($tmpPath);
+ unlink($tmpPath);
+ return $image->valid() ? $image : false;
+ }
+ unlink($tmpPath);
+ return false;
}
}
-
diff --git a/lib/private/preview/mp3.php b/lib/private/preview/mp3.php
index bb4d3dfce86..f1a50d99e13 100644
--- a/lib/private/preview/mp3.php
+++ b/lib/private/preview/mp3.php
@@ -8,11 +8,16 @@
namespace OC\Preview;
class MP3 extends Provider {
-
+ /**
+ * {@inheritDoc}
+ */
public function getMimeType() {
return '/audio\/mpeg/';
}
+ /**
+ * {@inheritDoc}
+ */
public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
$getID3 = new \getID3();
@@ -31,6 +36,12 @@ class MP3 extends Provider {
return $this->getNoCoverThumbnail();
}
+ /**
+ * Generates a default image when the file has no cover
+ *
+ * @return false|\OC_Image False if the default image is missing or invalid,
+ * otherwise the image is returned as \OC_Image
+ */
private function getNoCoverThumbnail() {
$icon = \OC::$SERVERROOT . '/core/img/filetypes/audio.png';
@@ -44,5 +55,3 @@ class MP3 extends Provider {
}
}
-
-\OC\Preview::registerProvider('OC\Preview\MP3');
diff --git a/lib/private/preview/msoffice2003.php b/lib/private/preview/msoffice2003.php
new file mode 100644
index 00000000000..55fbe708435
--- /dev/null
+++ b/lib/private/preview/msoffice2003.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Preview;
+
+//.docm, .dotm, .xls(m), .xlt(m), .xla(m), .ppt(m), .pot(m), .pps(m), .ppa(m)
+class MSOffice2003 extends Office {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/application\/vnd.ms-.*/';
+ }
+}
diff --git a/lib/private/preview/msoffice2007.php b/lib/private/preview/msoffice2007.php
new file mode 100644
index 00000000000..ace246eb6d9
--- /dev/null
+++ b/lib/private/preview/msoffice2007.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Preview;
+
+//.docx, .dotx, .xlsx, .xltx, .pptx, .potx, .ppsx
+class MSOffice2007 extends Office {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/application\/vnd.openxmlformats-officedocument.*/';
+ }
+}
diff --git a/lib/private/preview/msofficedoc.php b/lib/private/preview/msofficedoc.php
new file mode 100644
index 00000000000..42507af2233
--- /dev/null
+++ b/lib/private/preview/msofficedoc.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Preview;
+
+//.doc, .dot
+class MSOfficeDoc extends Office {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/application\/msword/';
+ }
+}
diff --git a/lib/private/preview/office-cl.php b/lib/private/preview/office-cl.php
deleted file mode 100644
index f5c791e37f2..00000000000
--- a/lib/private/preview/office-cl.php
+++ /dev/null
@@ -1,138 +0,0 @@
-<?php
-/**
- * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-namespace OC\Preview;
-
-// office preview is currently not supported on Windows
-if (!\OC_Util::runningOnWindows()) {
-
- //we need imagick to convert
- class Office extends Provider {
-
- private $cmd;
-
- public function getMimeType() {
- return null;
- }
-
- public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
- $this->initCmd();
- if(is_null($this->cmd)) {
- return false;
- }
-
- $absPath = $fileview->toTmpFile($path);
-
- $tmpDir = get_temp_dir();
-
- $defaultParameters = ' -env:UserInstallation=file://' . escapeshellarg($tmpDir . '/owncloud-' . \OC_Util::getInstanceId().'/') . ' --headless --nologo --nofirststartwizard --invisible --norestore --convert-to pdf --outdir ';
- $clParameters = \OCP\Config::getSystemValue('preview_office_cl_parameters', $defaultParameters);
-
- $exec = $this->cmd . $clParameters . escapeshellarg($tmpDir) . ' ' . escapeshellarg($absPath);
-
- shell_exec($exec);
-
- //create imagick object from pdf
- try{
- $pdf = new \imagick($absPath . '.pdf' . '[0]');
- $pdf->setImageFormat('jpg');
- } catch (\Exception $e) {
- unlink($absPath);
- unlink($absPath . '.pdf');
- \OC_Log::write('core', $e->getmessage(), \OC_Log::ERROR);
- return false;
- }
-
- $image = new \OC_Image();
- $image->loadFromData($pdf);
-
- unlink($absPath);
- unlink($absPath . '.pdf');
-
- return $image->valid() ? $image : false;
- }
-
- private function initCmd() {
- $cmd = '';
-
- if(is_string(\OC_Config::getValue('preview_libreoffice_path', null))) {
- $cmd = \OC_Config::getValue('preview_libreoffice_path', null);
- }
-
- $whichLibreOffice = shell_exec('command -v libreoffice');
- if($cmd === '' && !empty($whichLibreOffice)) {
- $cmd = 'libreoffice';
- }
-
- $whichOpenOffice = shell_exec('command -v openoffice');
- if($cmd === '' && !empty($whichOpenOffice)) {
- $cmd = 'openoffice';
- }
-
- if($cmd === '') {
- $cmd = null;
- }
-
- $this->cmd = $cmd;
- }
- }
-
- //.doc, .dot
- class MSOfficeDoc extends Office {
-
- public function getMimeType() {
- return '/application\/msword/';
- }
-
- }
-
- \OC\Preview::registerProvider('OC\Preview\MSOfficeDoc');
-
- //.docm, .dotm, .xls(m), .xlt(m), .xla(m), .ppt(m), .pot(m), .pps(m), .ppa(m)
- class MSOffice2003 extends Office {
-
- public function getMimeType() {
- return '/application\/vnd.ms-.*/';
- }
-
- }
-
- \OC\Preview::registerProvider('OC\Preview\MSOffice2003');
-
- //.docx, .dotx, .xlsx, .xltx, .pptx, .potx, .ppsx
- class MSOffice2007 extends Office {
-
- public function getMimeType() {
- return '/application\/vnd.openxmlformats-officedocument.*/';
- }
-
- }
-
- \OC\Preview::registerProvider('OC\Preview\MSOffice2007');
-
- //.odt, .ott, .oth, .odm, .odg, .otg, .odp, .otp, .ods, .ots, .odc, .odf, .odb, .odi, .oxt
- class OpenDocument extends Office {
-
- public function getMimeType() {
- return '/application\/vnd.oasis.opendocument.*/';
- }
-
- }
-
- \OC\Preview::registerProvider('OC\Preview\OpenDocument');
-
- //.sxw, .stw, .sxc, .stc, .sxd, .std, .sxi, .sti, .sxg, .sxm
- class StarOffice extends Office {
-
- public function getMimeType() {
- return '/application\/vnd.sun.xml.*/';
- }
-
- }
-
- \OC\Preview::registerProvider('OC\Preview\StarOffice');
-}
diff --git a/lib/private/preview/office.php b/lib/private/preview/office.php
index b47cbc6e08f..5bd61bde3be 100644
--- a/lib/private/preview/office.php
+++ b/lib/private/preview/office.php
@@ -5,24 +5,72 @@
* later.
* See the COPYING-README file.
*/
-//both, libreoffice backend and php fallback, need imagick
-if (extension_loaded('imagick')) {
-
- $checkImagick = new Imagick();
-
- if(count($checkImagick->queryFormats('PDF')) === 1) {
- $isShellExecEnabled = \OC_Helper::is_function_enabled('shell_exec');
-
- // LibreOffice preview is currently not supported on Windows
- if (!\OC_Util::runningOnWindows()) {
- $whichLibreOffice = ($isShellExecEnabled ? shell_exec('command -v libreoffice') : '');
- $isLibreOfficeAvailable = !empty($whichLibreOffice);
- $whichOpenOffice = ($isShellExecEnabled ? shell_exec('command -v openoffice') : '');
- $isOpenOfficeAvailable = !empty($whichOpenOffice);
- //let's see if there is libreoffice or openoffice on this machine
- if($isShellExecEnabled && ($isLibreOfficeAvailable || $isOpenOfficeAvailable || is_string(\OC_Config::getValue('preview_libreoffice_path', null)))) {
- require_once('office-cl.php');
- }
+namespace OC\Preview;
+
+abstract class Office extends Provider {
+ private $cmd;
+
+ /**
+ * {@inheritDoc}
+ */
+ public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
+ $this->initCmd();
+ if(is_null($this->cmd)) {
+ return false;
+ }
+
+ $absPath = $fileview->toTmpFile($path);
+
+ $tmpDir = get_temp_dir();
+
+ $defaultParameters = ' -env:UserInstallation=file://' . escapeshellarg($tmpDir . '/owncloud-' . \OC_Util::getInstanceId().'/') . ' --headless --nologo --nofirststartwizard --invisible --norestore --convert-to pdf --outdir ';
+ $clParameters = \OCP\Config::getSystemValue('preview_office_cl_parameters', $defaultParameters);
+
+ $exec = $this->cmd . $clParameters . escapeshellarg($tmpDir) . ' ' . escapeshellarg($absPath);
+
+ shell_exec($exec);
+
+ //create imagick object from pdf
+ try{
+ $pdf = new \imagick($absPath . '.pdf' . '[0]');
+ $pdf->setImageFormat('jpg');
+ } catch (\Exception $e) {
+ unlink($absPath);
+ unlink($absPath . '.pdf');
+ \OC_Log::write('core', $e->getmessage(), \OC_Log::ERROR);
+ return false;
}
+
+ $image = new \OC_Image();
+ $image->loadFromData($pdf);
+
+ unlink($absPath);
+ unlink($absPath . '.pdf');
+
+ return $image->valid() ? $image : false;
+ }
+
+ private function initCmd() {
+ $cmd = '';
+
+ if(is_string(\OC_Config::getValue('preview_libreoffice_path', null))) {
+ $cmd = \OC_Config::getValue('preview_libreoffice_path', null);
+ }
+
+ $whichLibreOffice = shell_exec('command -v libreoffice');
+ if($cmd === '' && !empty($whichLibreOffice)) {
+ $cmd = 'libreoffice';
+ }
+
+ $whichOpenOffice = shell_exec('command -v openoffice');
+ if($cmd === '' && !empty($whichOpenOffice)) {
+ $cmd = 'openoffice';
+ }
+
+ if($cmd === '') {
+ $cmd = null;
+ }
+
+ $this->cmd = $cmd;
}
}
diff --git a/lib/private/preview/opendocument.php b/lib/private/preview/opendocument.php
new file mode 100644
index 00000000000..fe1468ee941
--- /dev/null
+++ b/lib/private/preview/opendocument.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Preview;
+
+//.odt, .ott, .oth, .odm, .odg, .otg, .odp, .otp, .ods, .ots, .odc, .odf, .odb, .odi, .oxt
+class OpenDocument extends Office {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/application\/vnd.oasis.opendocument.*/';
+ }
+}
diff --git a/lib/private/preview/pdf.php b/lib/private/preview/pdf.php
new file mode 100644
index 00000000000..cb13074ff60
--- /dev/null
+++ b/lib/private/preview/pdf.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Copyright (c) 2013-2014 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Preview;
+
+//.pdf
+class PDF extends Bitmap {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/application\/pdf/';
+ }
+}
diff --git a/lib/private/preview/photoshop.php b/lib/private/preview/photoshop.php
new file mode 100644
index 00000000000..f5f60ce4de8
--- /dev/null
+++ b/lib/private/preview/photoshop.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Copyright (c) 2013-2014 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Preview;
+
+//.psd
+class Photoshop extends Bitmap {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/application\/x-photoshop/';
+ }
+}
diff --git a/lib/private/preview/postscript.php b/lib/private/preview/postscript.php
new file mode 100644
index 00000000000..7c8b089d92e
--- /dev/null
+++ b/lib/private/preview/postscript.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Copyright (c) 2013-2014 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Preview;
+
+//.eps
+class Postscript extends Bitmap {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/application\/postscript/';
+ }
+}
diff --git a/lib/private/preview/provider.php b/lib/private/preview/provider.php
index f544c2c4b13..ead67eaeef7 100644
--- a/lib/private/preview/provider.php
+++ b/lib/private/preview/provider.php
@@ -5,18 +5,21 @@ abstract class Provider {
private $options;
public function __construct($options) {
- $this->options=$options;
+ $this->options = $options;
}
+ /**
+ * @return string Regex with the mimetypes that are supported by this provider
+ */
abstract public function getMimeType();
/**
* Check if a preview can be generated for $path
*
- * @param string $path
+ * @param \OC\Files\FileInfo $file
* @return bool
*/
- public function isAvailable($path) {
+ public function isAvailable($file) {
return true;
}
@@ -26,11 +29,10 @@ abstract class Provider {
* @param int $maxX The maximum X size of the thumbnail. It can be smaller depending on the shape of the image
* @param int $maxY The maximum Y size of the thumbnail. It can be smaller depending on the shape of the image
* @param bool $scalingup Disable/Enable upscaling of previews
- * @param object $fileview fileview object of user folder
+ * @param \OC\Files\View $fileview fileview object of user folder
* @return mixed
* false if no preview was generated
* OC_Image object of the preview
*/
abstract public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview);
-
}
diff --git a/lib/private/preview/staroffice.php b/lib/private/preview/staroffice.php
new file mode 100644
index 00000000000..73ad368b341
--- /dev/null
+++ b/lib/private/preview/staroffice.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Preview;
+
+//.sxw, .stw, .sxc, .stc, .sxd, .std, .sxi, .sti, .sxg, .sxm
+class StarOffice extends Office {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/application\/vnd.sun.xml.*/';
+ }
+}
diff --git a/lib/private/preview/svg.php b/lib/private/preview/svg.php
index 0b5dbc9716f..561e87a6500 100644
--- a/lib/private/preview/svg.php
+++ b/lib/private/preview/svg.php
@@ -7,52 +7,43 @@
*/
namespace OC\Preview;
-use Imagick;
-
-if (extension_loaded('imagick')) {
-
- $checkImagick = new Imagick();
-
- if(count($checkImagick->queryFormats('SVG')) === 1) {
-
- class SVG extends Provider {
+class SVG extends Provider {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/image\/svg\+xml/';
+ }
- public function getMimeType() {
- return '/image\/svg\+xml/';
+ /**
+ * {@inheritDoc}
+ */
+ public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
+ try{
+ $svg = new \Imagick();
+ $svg->setBackgroundColor(new \ImagickPixel('transparent'));
+
+ $content = stream_get_contents($fileview->fopen($path, 'r'));
+ if(substr($content, 0, 5) !== '<?xml') {
+ $content = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>' . $content;
}
- public function getThumbnail($path,$maxX,$maxY,$scalingup,$fileview) {
- try{
- $svg = new Imagick();
- $svg->setBackgroundColor(new \ImagickPixel('transparent'));
-
- $content = stream_get_contents($fileview->fopen($path, 'r'));
- if(substr($content, 0, 5) !== '<?xml') {
- $content = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>' . $content;
- }
-
- // Do not parse SVG files with references
- if(stripos($content, 'xlink:href') !== false) {
- return false;
- }
-
- $svg->readImageBlob($content);
- $svg->setImageFormat('png32');
- } catch (\Exception $e) {
- \OC_Log::write('core', $e->getmessage(), \OC_Log::ERROR);
- return false;
- }
-
-
- //new image object
- $image = new \OC_Image();
- $image->loadFromData($svg);
- //check if image object is valid
- return $image->valid() ? $image : false;
+ // Do not parse SVG files with references
+ if(stripos($content, 'xlink:href') !== false) {
+ return false;
}
+ $svg->readImageBlob($content);
+ $svg->setImageFormat('png32');
+ } catch (\Exception $e) {
+ \OC_Log::write('core', $e->getmessage(), \OC_Log::ERROR);
+ return false;
}
- \OC\Preview::registerProvider('OC\Preview\SVG');
+ //new image object
+ $image = new \OC_Image();
+ $image->loadFromData($svg);
+ //check if image object is valid
+ return $image->valid() ? $image : false;
}
}
diff --git a/lib/private/preview/tiff.php b/lib/private/preview/tiff.php
new file mode 100644
index 00000000000..0a1e8e8ecec
--- /dev/null
+++ b/lib/private/preview/tiff.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Copyright (c) 2013-2014 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Preview;
+
+//.tiff
+class TIFF extends Bitmap {
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/image\/tiff/';
+ }
+}
diff --git a/lib/private/preview/txt.php b/lib/private/preview/txt.php
index 7f01b980c0e..8b414dc5726 100644
--- a/lib/private/preview/txt.php
+++ b/lib/private/preview/txt.php
@@ -8,31 +8,24 @@
namespace OC\Preview;
class TXT extends Provider {
-
+ /**
+ * {@inheritDoc}
+ */
public function getMimeType() {
return '/text\/plain/';
}
/**
- * Check if a preview can be generated for $path
- *
- * @param \OC\Files\FileInfo $file
- * @return bool
+ * {@inheritDoc}
*/
public function isAvailable($file) {
return $file->getSize() > 5;
}
/**
- * @param string $path
- * @param int $maxX
- * @param int $maxY
- * @param boolean $scalingup
- * @param \OC\Files\View $fileview
- * @return bool|\OC_Image
+ * {@inheritDoc}
*/
public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
-
$content = $fileview->fopen($path, 'r');
$content = stream_get_contents($content,3000);
@@ -79,15 +72,3 @@ class TXT extends Provider {
return $image->valid() ? $image : false;
}
}
-
-\OC\Preview::registerProvider('OC\Preview\TXT');
-
-class MarkDown extends TXT {
-
- public function getMimeType() {
- return '/text\/(x-)?markdown/';
- }
-
-}
-
-\OC\Preview::registerProvider('OC\Preview\MarkDown');
diff --git a/lib/private/request.php b/lib/private/request.php
index d079dc110d1..3c33dfc340a 100644
--- a/lib/private/request.php
+++ b/lib/private/request.php
@@ -66,23 +66,33 @@ class OC_Request {
}
/**
+ * Strips a potential port from a domain (in format domain:port)
+ * @param $host
+ * @return string $host without appended port
+ */
+ public static function getDomainWithoutPort($host) {
+ $pos = strrpos($host, ':');
+ if ($pos !== false) {
+ $port = substr($host, $pos + 1);
+ if (is_numeric($port)) {
+ $host = substr($host, 0, $pos);
+ }
+ }
+ return $host;
+ }
+
+ /**
* Checks whether a domain is considered as trusted from the list
* of trusted domains. If no trusted domains have been configured, returns
* true.
* This is used to prevent Host Header Poisoning.
- * @param string $domain
+ * @param string $domainWithPort
* @return bool true if the given domain is trusted or if no trusted domains
* have been configured
*/
- public static function isTrustedDomain($domain) {
+ public static function isTrustedDomain($domainWithPort) {
// Extract port from domain if needed
- $pos = strrpos($domain, ':');
- if ($pos !== false) {
- $port = substr($domain, $pos + 1);
- if (is_numeric($port)) {
- $domain = substr($domain, 0, $pos);
- }
- }
+ $domain = self::getDomainWithoutPort($domainWithPort);
// FIXME: Empty config array defaults to true for now. - Deprecate this behaviour with ownCloud 8.
$trustedList = \OC::$server->getConfig()->getSystemValue('trusted_domains', array());
@@ -90,6 +100,11 @@ class OC_Request {
return true;
}
+ // FIXME: Workaround for older instances still with port applied. Remove for ownCloud 9.
+ if(in_array($domainWithPort, $trustedList)) {
+ return true;
+ }
+
// Always allow access from localhost
if (preg_match(self::REGEX_LOCALHOST, $domain) === 1) {
return true;
diff --git a/lib/private/security/crypto.php b/lib/private/security/crypto.php
index 498e15d6bc3..6fdff8d92a2 100644
--- a/lib/private/security/crypto.php
+++ b/lib/private/security/crypto.php
@@ -43,22 +43,6 @@ class Crypto implements ICrypto {
}
/**
- * Custom implementation of hex2bin since the function is only available starting
- * with PHP 5.4
- *
- * @TODO Remove this once 5.3 support for ownCloud is dropped
- * @param $message
- * @return string
- */
- protected static function hexToBin($message) {
- if (function_exists('hex2bin')) {
- return hex2bin($message);
- }
-
- return pack("H*", $message);
- }
-
- /**
* @param string $message The message to authenticate
* @param string $password Password to use (defaults to `secret` in config.php)
* @return string Calculated HMAC
@@ -115,9 +99,9 @@ class Crypto implements ICrypto {
throw new \Exception('Authenticated ciphertext could not be decoded.');
}
- $ciphertext = self::hexToBin($parts[0]);
+ $ciphertext = hex2bin($parts[0]);
$iv = $parts[1];
- $hmac = self::hexToBin($parts[2]);
+ $hmac = hex2bin($parts[2]);
$this->cipher->setIV($iv);
diff --git a/lib/private/server.php b/lib/private/server.php
index cd57d41ce58..7bd7f8ca45d 100644
--- a/lib/private/server.php
+++ b/lib/private/server.php
@@ -29,19 +29,27 @@ use OC\Tagging\TagMapper;
* TODO: hookup all manager classes
*/
class Server extends SimpleContainer implements IServerContainer {
- function __construct() {
+ /** @var string */
+ private $webRoot;
+
+ /**
+ * @param string $webRoot
+ */
+ function __construct($webRoot) {
+ $this->webRoot = $webRoot;
+
$this->registerService('ContactsManager', function ($c) {
return new ContactsManager();
});
- $this->registerService('Request', function ($c) {
+ $this->registerService('Request', function (Server $c) {
if (isset($c['urlParams'])) {
$urlParams = $c['urlParams'];
} else {
$urlParams = array();
}
- if (\OC::$server->getSession()->exists('requesttoken')) {
- $requestToken = \OC::$server->getSession()->get('requesttoken');
+ if ($c->getSession()->exists('requesttoken')) {
+ $requestToken = $c->getSession()->get('requesttoken');
} else {
$requestToken = false;
}
@@ -233,8 +241,7 @@ class Server extends SimpleContainer implements IServerContainer {
return new NullQueryLogger();
}
});
- $this->registerService('TempManager', function ($c) {
- /** @var Server $c */
+ $this->registerService('TempManager', function (Server $c) {
return new TempManager(get_temp_dir(), $c->getLogger());
});
$this->registerService('AppManager', function(Server $c) {
@@ -631,4 +638,13 @@ class Server extends SimpleContainer implements IServerContainer {
function getAppManager() {
return $this->query('AppManager');
}
+
+ /**
+ * Get the webroot
+ *
+ * @return string
+ */
+ function getWebRoot() {
+ return $this->webRoot;
+ }
}
diff --git a/lib/private/setup.php b/lib/private/setup.php
index 45c97bbd225..e5eb2bac194 100644
--- a/lib/private/setup.php
+++ b/lib/private/setup.php
@@ -88,7 +88,7 @@ class OC_Setup {
)
);
$configuredDatabases = $this->config->getSystemValue('supportedDatabases',
- array('sqlite', 'mysql', 'pgsql', 'oci', 'mssql'));
+ array('sqlite', 'mysql', 'pgsql'));
if(!is_array($configuredDatabases)) {
throw new Exception('Supported databases are not properly configured.');
}
@@ -162,7 +162,7 @@ class OC_Setup {
&& is_array($options['trusted_domains'])) {
$trustedDomains = $options['trusted_domains'];
} else {
- $trustedDomains = array(OC_Request::serverHost());
+ $trustedDomains = array(\OC_Request::getDomainWithoutPort(\OC_Request::serverHost()));
}
if (OC_Util::runningOnWindows()) {
diff --git a/lib/private/user/backend.php b/lib/private/user/backend.php
index 1f0a524117d..5e0eef4771a 100644
--- a/lib/private/user/backend.php
+++ b/lib/private/user/backend.php
@@ -25,19 +25,28 @@
/**
* error code for functions not provided by the user backend
+ * @deprecated Use \OC_User_Backend::NOT_IMPLEMENTED instead
*/
define('OC_USER_BACKEND_NOT_IMPLEMENTED', -501);
/**
* actions that user backends can define
*/
+/** @deprecated Use \OC_User_Backend::CREATE_USER instead */
define('OC_USER_BACKEND_CREATE_USER', 1 << 0);
+/** @deprecated Use \OC_User_Backend::SET_PASSWORD instead */
define('OC_USER_BACKEND_SET_PASSWORD', 1 << 4);
+/** @deprecated Use \OC_User_Backend::CHECK_PASSWORD instead */
define('OC_USER_BACKEND_CHECK_PASSWORD', 1 << 8);
+/** @deprecated Use \OC_User_Backend::GET_HOME instead */
define('OC_USER_BACKEND_GET_HOME', 1 << 12);
+/** @deprecated Use \OC_User_Backend::GET_DISPLAYNAME instead */
define('OC_USER_BACKEND_GET_DISPLAYNAME', 1 << 16);
+/** @deprecated Use \OC_User_Backend::SET_DISPLAYNAME instead */
define('OC_USER_BACKEND_SET_DISPLAYNAME', 1 << 20);
+/** @deprecated Use \OC_User_Backend::PROVIDE_AVATAR instead */
define('OC_USER_BACKEND_PROVIDE_AVATAR', 1 << 24);
+/** @deprecated Use \OC_User_Backend::COUNT_USERS instead */
define('OC_USER_BACKEND_COUNT_USERS', 1 << 28);
/**
@@ -47,16 +56,32 @@ define('OC_USER_BACKEND_COUNT_USERS', 1 << 28);
* Subclass this for your own backends, and see OC_User_Example for descriptions
*/
abstract class OC_User_Backend implements OC_User_Interface {
+ /**
+ * error code for functions not provided by the user backend
+ */
+ const NOT_IMPLEMENTED = -501;
+
+ /**
+ * actions that user backends can define
+ */
+ const CREATE_USER = 1; // 1 << 0
+ const SET_PASSWORD = 16; // 1 << 4
+ const CHECK_PASSWORD = 256; // 1 << 8
+ const GET_HOME = 4096; // 1 << 12
+ const GET_DISPLAYNAME = 65536; // 1 << 16
+ const SET_DISPLAYNAME = 1048576; // 1 << 20
+ const PROVIDE_AVATAR = 16777216; // 1 << 24
+ const COUNT_USERS = 268435456; // 1 << 28
protected $possibleActions = array(
- OC_USER_BACKEND_CREATE_USER => 'createUser',
- OC_USER_BACKEND_SET_PASSWORD => 'setPassword',
- OC_USER_BACKEND_CHECK_PASSWORD => 'checkPassword',
- OC_USER_BACKEND_GET_HOME => 'getHome',
- OC_USER_BACKEND_GET_DISPLAYNAME => 'getDisplayName',
- OC_USER_BACKEND_SET_DISPLAYNAME => 'setDisplayName',
- OC_USER_BACKEND_PROVIDE_AVATAR => 'canChangeAvatar',
- OC_USER_BACKEND_COUNT_USERS => 'countUsers',
+ self::CREATE_USER => 'createUser',
+ self::SET_PASSWORD => 'setPassword',
+ self::CHECK_PASSWORD => 'checkPassword',
+ self::GET_HOME => 'getHome',
+ self::GET_DISPLAYNAME => 'getDisplayName',
+ self::SET_DISPLAYNAME => 'setDisplayName',
+ self::PROVIDE_AVATAR => 'canChangeAvatar',
+ self::COUNT_USERS => 'countUsers',
);
/**
@@ -64,7 +89,7 @@ abstract class OC_User_Backend implements OC_User_Interface {
* @return int bitwise-or'ed actions
*
* Returns the supported actions as int to be
- * compared with OC_USER_BACKEND_CREATE_USER etc.
+ * compared with self::CREATE_USER etc.
*/
public function getSupportedActions() {
$actions = 0;
@@ -83,7 +108,7 @@ abstract class OC_User_Backend implements OC_User_Interface {
* @return boolean
*
* Returns the supported actions as int to be
- * compared with OC_USER_BACKEND_CREATE_USER etc.
+ * compared with self::CREATE_USER etc.
*/
public function implementsActions($actions) {
return (bool)($this->getSupportedActions() & $actions);
diff --git a/lib/private/user/interface.php b/lib/private/user/interface.php
index 4cdc47479a3..624d36e6fe5 100644
--- a/lib/private/user/interface.php
+++ b/lib/private/user/interface.php
@@ -25,11 +25,11 @@ interface OC_User_Interface {
/**
* Check if backend implements actions
- * @param $actions bitwise-or'ed actions
+ * @param int $actions bitwise-or'ed actions
* @return boolean
*
* Returns the supported actions as int to be
- * compared with OC_USER_BACKEND_CREATE_USER etc.
+ * compared with \OC_User_Backend::CREATE_USER etc.
*/
public function implementsActions($actions);
diff --git a/lib/private/user/manager.php b/lib/private/user/manager.php
index 4d1612a35ce..0c01f957bd3 100644
--- a/lib/private/user/manager.php
+++ b/lib/private/user/manager.php
@@ -143,7 +143,7 @@ class Manager extends PublicEmitter implements IUserManager {
*/
public function checkPassword($loginname, $password) {
foreach ($this->backends as $backend) {
- if ($backend->implementsActions(\OC_USER_BACKEND_CHECK_PASSWORD)) {
+ if ($backend->implementsActions(\OC_User_Backend::CHECK_PASSWORD)) {
$uid = $backend->checkPassword($loginname, $password);
if ($uid !== false) {
return $this->getUserObject($uid, $backend);
@@ -246,7 +246,7 @@ class Manager extends PublicEmitter implements IUserManager {
$this->emit('\OC\User', 'preCreateUser', array($uid, $password));
foreach ($this->backends as $backend) {
- if ($backend->implementsActions(\OC_USER_BACKEND_CREATE_USER)) {
+ if ($backend->implementsActions(\OC_User_Backend::CREATE_USER)) {
$backend->createUser($uid, $password);
$user = $this->getUserObject($uid, $backend);
$this->emit('\OC\User', 'postCreateUser', array($user, $password));
@@ -264,7 +264,7 @@ class Manager extends PublicEmitter implements IUserManager {
public function countUsers() {
$userCountStatistics = array();
foreach ($this->backends as $backend) {
- if ($backend->implementsActions(\OC_USER_BACKEND_COUNT_USERS)) {
+ if ($backend->implementsActions(\OC_User_Backend::COUNT_USERS)) {
$backendusers = $backend->countUsers();
if($backendusers !== false) {
if(isset($userCountStatistics[get_class($backend)])) {
diff --git a/lib/private/user/user.php b/lib/private/user/user.php
index 729abdc6227..9ad2f5f0d3a 100644
--- a/lib/private/user/user.php
+++ b/lib/private/user/user.php
@@ -90,7 +90,7 @@ class User implements IUser {
public function getDisplayName() {
if (!isset($this->displayName)) {
$displayName = '';
- if ($this->backend and $this->backend->implementsActions(OC_USER_BACKEND_GET_DISPLAYNAME)) {
+ if ($this->backend and $this->backend->implementsActions(\OC_User_Backend::GET_DISPLAYNAME)) {
// get display name and strip whitespace from the beginning and end of it
$backendDisplayName = $this->backend->getDisplayName($this->uid);
if (is_string($backendDisplayName)) {
@@ -115,7 +115,7 @@ class User implements IUser {
*/
public function setDisplayName($displayName) {
$displayName = trim($displayName);
- if ($this->backend->implementsActions(\OC_USER_BACKEND_SET_DISPLAYNAME) && !empty($displayName)) {
+ if ($this->backend->implementsActions(\OC_User_Backend::SET_DISPLAYNAME) && !empty($displayName)) {
$this->displayName = $displayName;
$result = $this->backend->setDisplayName($this->uid, $displayName);
return $result !== false;
@@ -170,7 +170,7 @@ class User implements IUser {
if ($this->emitter) {
$this->emitter->emit('\OC\User', 'preSetPassword', array($this, $password, $recoveryPassword));
}
- if ($this->backend->implementsActions(\OC_USER_BACKEND_SET_PASSWORD)) {
+ if ($this->backend->implementsActions(\OC_User_Backend::SET_PASSWORD)) {
$result = $this->backend->setPassword($this->uid, $password);
if ($this->emitter) {
$this->emitter->emit('\OC\User', 'postSetPassword', array($this, $password, $recoveryPassword));
@@ -188,7 +188,7 @@ class User implements IUser {
*/
public function getHome() {
if (!$this->home) {
- if ($this->backend->implementsActions(\OC_USER_BACKEND_GET_HOME) and $home = $this->backend->getHome($this->uid)) {
+ if ($this->backend->implementsActions(\OC_User_Backend::GET_HOME) and $home = $this->backend->getHome($this->uid)) {
$this->home = $home;
} elseif ($this->config) {
$this->home = $this->config->getSystemValue('datadirectory') . '/' . $this->uid;
@@ -205,7 +205,7 @@ class User implements IUser {
* @return bool
*/
public function canChangeAvatar() {
- if ($this->backend->implementsActions(\OC_USER_BACKEND_PROVIDE_AVATAR)) {
+ if ($this->backend->implementsActions(\OC_User_Backend::PROVIDE_AVATAR)) {
return $this->backend->canChangeAvatar($this->uid);
}
return true;
@@ -217,7 +217,7 @@ class User implements IUser {
* @return bool
*/
public function canChangePassword() {
- return $this->backend->implementsActions(\OC_USER_BACKEND_SET_PASSWORD);
+ return $this->backend->implementsActions(\OC_User_Backend::SET_PASSWORD);
}
/**
@@ -229,7 +229,7 @@ class User implements IUser {
if ($this->config and $this->config->getSystemValue('allow_user_to_change_display_name') === false) {
return false;
} else {
- return $this->backend->implementsActions(\OC_USER_BACKEND_SET_DISPLAYNAME);
+ return $this->backend->implementsActions(\OC_User_Backend::SET_DISPLAYNAME);
}
}
diff --git a/lib/private/util.php b/lib/private/util.php
index a18a4e44232..38db431e895 100644
--- a/lib/private/util.php
+++ b/lib/private/util.php
@@ -605,9 +605,9 @@ class OC_Util {
$webServerRestart = true;
}
- if (version_compare(phpversion(), '5.3.3', '<')) {
+ if (version_compare(phpversion(), '5.4.0', '<')) {
$errors[] = array(
- 'error' => $l->t('PHP %s or higher is required.', '5.3.3'),
+ 'error' => $l->t('PHP %s or higher is required.', '5.4.0'),
'hint' => $l->t('Please ask your server administrator to update PHP to the latest version.'
. ' Your PHP version is no longer supported by ownCloud and the PHP community.')
);
@@ -1114,15 +1114,6 @@ class OC_Util {
}
/**
- * Check if a PHP version older then 5.3.8 is installed.
- *
- * @return bool
- */
- public static function isPHPoutdated() {
- return version_compare(phpversion(), '5.3.8', '<');
- }
-
- /**
* Check if the ownCloud server can connect to the internet
*
* @return bool
diff --git a/lib/public/activity/iextension.php b/lib/public/activity/iextension.php
index 6bb403a8896..e78ae0043a6 100644
--- a/lib/public/activity/iextension.php
+++ b/lib/public/activity/iextension.php
@@ -30,6 +30,13 @@
namespace OCP\Activity;
interface IExtension {
+
+ const PRIORITY_VERYLOW = 10;
+ const PRIORITY_LOW = 20;
+ const PRIORITY_MEDIUM = 30;
+ const PRIORITY_HIGH = 40;
+ const PRIORITY_VERYHIGH = 50;
+
/**
* The extension can return an array of additional notification types.
* If no additional types are to be added false is to be returned
diff --git a/lib/public/appframework/controller.php b/lib/public/appframework/controller.php
index 398304e6feb..00981df05ba 100644
--- a/lib/public/appframework/controller.php
+++ b/lib/public/appframework/controller.php
@@ -70,7 +70,7 @@ abstract class Controller {
$data->getData(),
$data->getStatus()
);
- $response->setHeaders($data->getHeaders());
+ $response->setHeaders(array_merge($data->getHeaders(), $response->getHeaders()));
return $response;
} else {
return new JSONResponse($data);
diff --git a/lib/public/appframework/http/response.php b/lib/public/appframework/http/response.php
index 354911fee21..67e72cff6d9 100644
--- a/lib/public/appframework/http/response.php
+++ b/lib/public/appframework/http/response.php
@@ -46,8 +46,15 @@ class Response {
/**
+ * Cookies that will be need to be constructed as header
+ * @var array
+ */
+ private $cookies = array();
+
+
+ /**
* HTTP status code - defaults to STATUS OK
- * @var string
+ * @var int
*/
private $status = Http::STATUS_OK;
@@ -70,6 +77,7 @@ class Response {
* Caches the response
* @param int $cacheSeconds the amount of seconds that should be cached
* if 0 then caching will be disabled
+ * @return $this
*/
public function cacheFor($cacheSeconds) {
@@ -83,13 +91,68 @@ class Response {
return $this;
}
+ /**
+ * Adds a new cookie to the response
+ * @param string $name The name of the cookie
+ * @param string $value The value of the cookie
+ * @param \DateTime|null $expireDate Date on that the cookie should expire, if set
+ * to null cookie will be considered as session
+ * cookie.
+ * @return $this
+ */
+ public function addCookie($name, $value, \DateTime $expireDate = null) {
+ $this->cookies[$name] = array('value' => $value, 'expireDate' => $expireDate);
+ return $this;
+ }
+
+
+ /**
+ * Set the specified cookies
+ * @param array $cookies array('foo' => array('value' => 'bar', 'expire' => null))
+ * @return $this
+ */
+ public function setCookies(array $cookies) {
+ $this->cookies = $cookies;
+ return $this;
+ }
+
+
+ /**
+ * Invalidates the specified cookie
+ * @param string $name
+ * @return $this
+ */
+ public function invalidateCookie($name) {
+ $this->addCookie($name, 'expired', new \DateTime('1971-01-01 00:00'));
+ return $this;
+ }
+
+ /**
+ * Invalidates the specified cookies
+ * @param array $cookieNames array('foo', 'bar')
+ * @return $this
+ */
+ public function invalidateCookies(array $cookieNames) {
+ foreach($cookieNames as $cookieName) {
+ $this->invalidateCookie($cookieName);
+ }
+ return $this;
+ }
+
+ /**
+ * Returns the cookies
+ * @return array
+ */
+ public function getCookies() {
+ return $this->cookies;
+ }
/**
* Adds a new header to the response that will be called before the render
* function
* @param string $name The name of the HTTP header
* @param string $value The value, null will delete it
- * @return Response Reference to this object
+ * @return $this
*/
public function addHeader($name, $value) {
$name = trim($name); // always remove leading and trailing whitespace
@@ -108,10 +171,10 @@ class Response {
/**
* Set the headers
- * @param array key value header pairs
- * @return Response Reference to this object
+ * @param array $headers value header pairs
+ * @return $this
*/
- public function setHeaders($headers) {
+ public function setHeaders(array $headers) {
$this->headers = $headers;
return $this;
diff --git a/lib/public/defaults.php b/lib/public/defaults.php
index 662071a29a9..315cf547385 100644
--- a/lib/public/defaults.php
+++ b/lib/public/defaults.php
@@ -144,4 +144,12 @@ class Defaults {
public function getLongFooter() {
return $this->defaults->getLongFooter();
}
+
+ /**
+ * Returns the AppId for the App Store for the iOS Client
+ * @return string AppId
+ */
+ public function getiTunesAppId() {
+ return $this->defaults->getiTunesAppId();
+ }
}
diff --git a/lib/public/files/ihomestorage.php b/lib/public/files/ihomestorage.php
new file mode 100644
index 00000000000..717ef946750
--- /dev/null
+++ b/lib/public/files/ihomestorage.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Robin Appelman
+ * @copyright 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.
+ */
+
+/**
+ * Public interface of ownCloud for apps to use.
+ * Files/Storage interface
+ */
+
+// use OCP namespace for all classes that are considered public.
+// This means that they should be used by apps instead of the internal ownCloud classes
+namespace OCP\Files;
+
+interface IHomeStorage {
+
+}
diff --git a/lib/public/files/storage.php b/lib/public/files/storage.php
index 8f8d7852ee4..323d20db564 100644
--- a/lib/public/files/storage.php
+++ b/lib/public/files/storage.php
@@ -336,7 +336,3 @@ interface Storage {
*/
public function instanceOfStorage($class);
}
-
-interface IHomeStorage {
-
-}
diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index b734d1b4161..301f47c68fa 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -298,4 +298,11 @@ interface IServerContainer {
* @return \OCP\App\IAppManager
*/
function getAppManager();
+
+ /**
+ * Get the webroot
+ *
+ * @return string
+ */
+ function getWebRoot();
}
diff --git a/lib/public/share.php b/lib/public/share.php
index 333e0a26970..b3ece8fab94 100644
--- a/lib/public/share.php
+++ b/lib/public/share.php
@@ -342,86 +342,3 @@ class Share extends \OC\Share\Constants {
return \OC\Share\Share::isResharingAllowed();
}
}
-
-/**
- * Interface that apps must implement to share content.
- */
-interface Share_Backend {
-
- /**
- * Check if this $itemSource exist for the user
- * @param string $itemSource
- * @param string $uidOwner Owner of the item
- * @return boolean|null Source
- *
- * Return false if the item does not exist for the user
- */
- public function isValidSource($itemSource, $uidOwner);
-
- /**
- * Get a unique name of the item for the specified user
- * @param string $itemSource
- * @param string|false $shareWith User the item is being shared with
- * @param array|null $exclude List of similar item names already existing as shared items @deprecated since version OC7
- * @return string Target name
- *
- * This function needs to verify that the user does not already have an item with this name.
- * If it does generate a new name e.g. name_#
- */
- public function generateTarget($itemSource, $shareWith, $exclude = null);
-
- /**
- * Converts the shared item sources back into the item in the specified format
- * @param array $items Shared items
- * @param int $format
- * @return TODO
- *
- * 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
- *
- * 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.
- */
- public function formatItems($items, $format, $parameters = null);
-
-}
-
-/**
- * Interface for share backends that share content that is dependent on files.
- * Extends the Share_Backend interface.
- */
-interface Share_Backend_File_Dependent extends Share_Backend {
-
- /**
- * Get the file path of the item
- * @param string $itemSource
- * @param string $uidOwner User that is the owner of shared item
- * @return string|false
- */
- public function getFilePath($itemSource, $uidOwner);
-
-}
-
-/**
- * Interface for collections of of items implemented by another share backend.
- * Extends the Share_Backend interface.
- */
-interface Share_Backend_Collection extends Share_Backend {
-
- /**
- * Get the sources of the children of the item
- * @param string $itemSource
- * @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/share_backend.php b/lib/public/share_backend.php
new file mode 100644
index 00000000000..6ab234aecf0
--- /dev/null
+++ b/lib/public/share_backend.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Bjoern Schiessle, Michael Gapczynski
+ * @copyright 2012 Michael Gapczynski <mtgap@owncloud.com>
+ * 2014 Bjoern Schiessle <schiessle@owncloud.com>
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+// use OCP namespace for all classes that are considered public.
+// This means that they should be used by apps instead of the internal ownCloud classes
+namespace OCP;
+
+/**
+ * Interface that apps must implement to share content.
+ */
+interface Share_Backend {
+
+ /**
+ * Check if this $itemSource exist for the user
+ * @param string $itemSource
+ * @param string $uidOwner Owner of the item
+ * @return boolean|null Source
+ *
+ * Return false if the item does not exist for the user
+ */
+ public function isValidSource($itemSource, $uidOwner);
+
+ /**
+ * Get a unique name of the item for the specified user
+ * @param string $itemSource
+ * @param string|false $shareWith User the item is being shared with
+ * @param array|null $exclude List of similar item names already existing as shared items @deprecated since version OC7
+ * @return string Target name
+ *
+ * This function needs to verify that the user does not already have an item with this name.
+ * If it does generate a new name e.g. name_#
+ */
+ public function generateTarget($itemSource, $shareWith, $exclude = null);
+
+ /**
+ * Converts the shared item sources back into the item in the specified format
+ * @param array $items Shared items
+ * @param int $format
+ * @return TODO
+ *
+ * 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
+ *
+ * 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.
+ */
+ public function formatItems($items, $format, $parameters = null);
+
+}
diff --git a/lib/public/share_backend_collection.php b/lib/public/share_backend_collection.php
new file mode 100644
index 00000000000..0292222c74f
--- /dev/null
+++ b/lib/public/share_backend_collection.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Bjoern Schiessle, Michael Gapczynski
+ * @copyright 2012 Michael Gapczynski <mtgap@owncloud.com>
+ * 2014 Bjoern Schiessle <schiessle@owncloud.com>
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+// use OCP namespace for all classes that are considered public.
+// This means that they should be used by apps instead of the internal ownCloud classes
+namespace OCP;
+
+/**
+ * Interface for collections of of items implemented by another share backend.
+ * Extends the Share_Backend interface.
+ */
+interface Share_Backend_Collection extends Share_Backend {
+ /**
+ * Get the sources of the children of the item
+ * @param string $itemSource
+ * @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/share_backend_file_dependent.php b/lib/public/share_backend_file_dependent.php
new file mode 100644
index 00000000000..b666e504008
--- /dev/null
+++ b/lib/public/share_backend_file_dependent.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Bjoern Schiessle, Michael Gapczynski
+ * @copyright 2012 Michael Gapczynski <mtgap@owncloud.com>
+ * 2014 Bjoern Schiessle <schiessle@owncloud.com>
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+// use OCP namespace for all classes that are considered public.
+// This means that they should be used by apps instead of the internal ownCloud classes
+namespace OCP;
+
+/**
+ * Interface for share backends that share content that is dependent on files.
+ * Extends the Share_Backend interface.
+ */
+interface Share_Backend_File_Dependent extends Share_Backend {
+ /**
+ * Get the file path of the item
+ * @param string $itemSource
+ * @param string $uidOwner User that is the owner of shared item
+ * @return string|false
+ */
+ public function getFilePath($itemSource, $uidOwner);
+
+}
diff --git a/lib/public/template.php b/lib/public/template.php
index a1b650649ff..93af794ba62 100644
--- a/lib/public/template.php
+++ b/lib/public/template.php
@@ -38,6 +38,7 @@ namespace OCP;
* @return string to the image
*
* @see OC_Helper::imagePath
+ * @deprecated Use \OCP\Template::image_path() instead
*/
function image_path( $app, $image ) {
return(\image_path( $app, $image ));
@@ -48,6 +49,7 @@ function image_path( $app, $image ) {
* Make OC_Helper::mimetypeIcon available as a simple function
* @param string $mimetype
* @return string to the image of this file type.
+ * @deprecated Use \OCP\Template::mimetype_icon() instead
*/
function mimetype_icon( $mimetype ) {
return(\mimetype_icon( $mimetype ));
@@ -57,6 +59,7 @@ function mimetype_icon( $mimetype ) {
* Make preview_icon available as a simple function
* @param string $path path to file
* @return string to the preview of the image
+ * @deprecated Use \OCP\Template::preview_icon() instead
*/
function preview_icon( $path ) {
return(\preview_icon( $path ));
@@ -68,6 +71,7 @@ function preview_icon( $path ) {
* @param string $path of file
* @param string $token
* @return string link to the preview
+ * @deprecated Use \OCP\Template::publicPreview_icon() instead
*/
function publicPreview_icon ( $path, $token ) {
return(\publicPreview_icon( $path, $token ));
@@ -76,8 +80,9 @@ function publicPreview_icon ( $path, $token ) {
/**
* Make OC_Helper::humanFileSize available as a simple function
* Example: 2048 to 2 kB.
- * @param int $size in bytes
+ * @param int $bytes in bytes
* @return string size as string
+ * @deprecated Use \OCP\Template::human_file_size() instead
*/
function human_file_size( $bytes ) {
return(\human_file_size( $bytes ));
@@ -89,6 +94,7 @@ function human_file_size( $bytes ) {
* @param int $timestamp unix timestamp
* @param boolean $dateOnly
* @return \OC_L10N_String human readable interpretation of the timestamp
+ * @deprecated Use \OCP\Template::relative_modified_date() instead
*/
function relative_modified_date( $timestamp, $dateOnly = false ) {
return(\relative_modified_date($timestamp, null, $dateOnly));
@@ -97,9 +103,9 @@ function relative_modified_date( $timestamp, $dateOnly = false ) {
/**
* Return a human readable outout for a file size.
- * @deprecated use human_file_size() instead
* @param integer $bytes size of a file in byte
* @return string human readable interpretation of a file size
+ * @deprecated Use \OCP\Template::human_file_size() instead
*/
function simple_file_size($bytes) {
return(\human_file_size($bytes));
@@ -112,6 +118,7 @@ function simple_file_size($bytes) {
* @param mixed $selected which one is selected?
* @param array $params the parameters
* @return string html options
+ * @deprecated Use \OCP\Template::html_select_options() instead
*/
function html_select_options($options, $selected, $params=array()) {
return(\html_select_options($options, $selected, $params));
@@ -123,5 +130,83 @@ function html_select_options($options, $selected, $params=array()) {
* specific templates, add data and generate the html code
*/
class Template extends \OC_Template {
-
+ /**
+ * Make OC_Helper::imagePath available as a simple function
+ *
+ * @see OC_Helper::imagePath
+ *
+ * @param string $app
+ * @param string $image
+ * @return string to the image
+ */
+ public static function image_path($app, $image) {
+ return \image_path($app, $image);
+ }
+
+
+ /**
+ * Make OC_Helper::mimetypeIcon available as a simple function
+ *
+ * @param string $mimetype
+ * @return string to the image of this file type.
+ */
+ public static function mimetype_icon($mimetype) {
+ return \mimetype_icon($mimetype);
+ }
+
+ /**
+ * Make preview_icon available as a simple function
+ *
+ * @param string $path path to file
+ * @return string to the preview of the image
+ */
+ public static function preview_icon($path) {
+ return \preview_icon($path);
+ }
+
+ /**
+ * Make publicpreview_icon available as a simple function
+ * Returns the path to the preview of the image.
+ *
+ * @param string $path of file
+ * @param string $token
+ * @return string link to the preview
+ */
+ public static function publicPreview_icon($path, $token) {
+ return \publicPreview_icon($path, $token);
+ }
+
+ /**
+ * Make OC_Helper::humanFileSize available as a simple function
+ * Example: 2048 to 2 kB.
+ *
+ * @param int $bytes in bytes
+ * @return string size as string
+ */
+ public static function human_file_size($bytes) {
+ return \human_file_size($bytes);
+ }
+
+ /**
+ * Return the relative date in relation to today. Returns something like "last hour" or "two month ago"
+ *
+ * @param int $timestamp unix timestamp
+ * @param boolean $dateOnly
+ * @return \OC_L10N_String human readable interpretation of the timestamp
+ */
+ public static function relative_modified_date($timestamp, $dateOnly = false) {
+ return \relative_modified_date($timestamp, null, $dateOnly);
+ }
+
+ /**
+ * Generate html code for an options block.
+ *
+ * @param array $options the options
+ * @param mixed $selected which one is selected?
+ * @param array $params the parameters
+ * @return string html options
+ */
+ public static function html_select_options($options, $selected, $params=array()) {
+ return \html_select_options($options, $selected, $params);
+ }
}
diff --git a/settings/admin.php b/settings/admin.php
index a669974891c..a5f07037911 100644
--- a/settings/admin.php
+++ b/settings/admin.php
@@ -33,11 +33,11 @@ $template->assign('mail_smtppassword', $config->getSystemValue("mail_smtppasswor
$template->assign('entries', $entries);
$template->assign('entriesremain', $entriesRemaining);
$template->assign('htaccessworking', $htAccessWorking);
+$template->assign('readOnlyConfigEnabled', OC_Helper::isReadOnlyConfigEnabled());
$template->assign('isLocaleWorking', OC_Util::isSetLocaleWorking());
$template->assign('isPhpCharSetUtf8', OC_Util::isPhpCharSetUtf8());
$template->assign('isAnnotationsWorking', OC_Util::isAnnotationsWorking());
$template->assign('has_fileinfo', OC_Util::fileInfoLoaded());
-$template->assign('old_php', OC_Util::isPHPoutdated());
$template->assign('backgroundjobs_mode', $appConfig->getValue('core', 'backgroundjobs_mode', 'ajax'));
$template->assign('cron_log', $config->getSystemValue('cron_log', true));
$template->assign('lastcron', $appConfig->getValue('core', 'lastcron', false));
@@ -80,7 +80,7 @@ $l = OC_L10N::get('settings');
$formsAndMore = array();
if (OC_Request::serverProtocol() !== 'https' || !$htAccessWorking || !OC_Util::isAnnotationsWorking() ||
$suggestedOverwriteWebRoot || !OC_Util::isSetLocaleWorking() || !OC_Util::isPhpCharSetUtf8() ||
- OC_Util::isPHPoutdated() || !OC_Util::fileInfoLoaded() || $databaseOverload
+ !OC_Util::fileInfoLoaded() || $databaseOverload
) {
$formsAndMore[] = array('anchor' => 'security-warning', 'section-name' => $l->t('Security & Setup Warnings'));
}
diff --git a/settings/controller/appsettingscontroller.php b/settings/controller/appsettingscontroller.php
index 27205400aff..3ad52bd2187 100644
--- a/settings/controller/appsettingscontroller.php
+++ b/settings/controller/appsettingscontroller.php
@@ -11,6 +11,8 @@
namespace OC\Settings\Controller;
+use OC\App\DependencyAnalyzer;
+use OC\App\Platform;
use \OCP\AppFramework\Controller;
use OCP\IRequest;
use OCP\IL10N;
@@ -123,10 +125,16 @@ class AppSettingsController extends Controller {
}
$app['groups'] = $groups;
$app['canUnInstall'] = !$app['active'] && $app['removable'];
+
+ // analyse dependencies
+ $dependencyAnalyzer = new DependencyAnalyzer($app, new Platform($this->config), $this->l10n);
+ $missing = $dependencyAnalyzer->analyze();
+
+ $app['canInstall'] = empty($missing);
+ $app['missingDependencies'] = $missing;
return $app;
}, $apps);
return array('apps' => $apps, 'status' => 'success');
}
-
}
diff --git a/settings/css/settings.css b/settings/css/settings.css
index c18d5913b6f..4594a22c6d0 100644
--- a/settings/css/settings.css
+++ b/settings/css/settings.css
@@ -200,6 +200,12 @@ span.version { margin-left:1em; margin-right:1em; color:#555; }
border-bottom: 1px solid #e8e8e8;
}
+.missing-dependencies {
+ list-style: initial;
+ list-style-type: initial;
+ list-style-position: inside;
+}
+
/* Transition to complete width! */
.app:hover, .app:active { max-width: inherit; }
diff --git a/settings/l10n/ar.js b/settings/l10n/ar.js
index 7f3695a1df6..f3e4d498cbd 100644
--- a/settings/l10n/ar.js
+++ b/settings/l10n/ar.js
@@ -76,8 +76,6 @@ OC.L10N.register(
"Setup Warning" : "تحذير في التنصيب",
"Module 'fileinfo' missing" : "الموديل 'fileinfo' مفقود",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "موديل 'fileinfo' الخاص بالـPHP مفقود . نوصي بتفعيل هذا الموديل للحصول على أفضل النتائج مع خاصية التحقق ",
- "Your PHP version is outdated" : "اصدار PHP الخاص بك قديم",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "اصدار PHP الخاص بك قديم. نحن نقترح لك باصرار ان يتم ترقية الاصدار الى 5.3.8 او احدث بسبب ان الاصدارات القديمة معروفة انها مهمشة. من الممكن ان التنزيل قد لا يتم بصورة صحيحة.",
"Locale not working" : "اللغه لا تعمل",
"System locale can not be set to a one which supports UTF-8." : "لا يمكن تعيين لغة النظام الى احد اللغات التي تدعم UTF-8.",
"This means that there might be problems with certain characters in file names." : "هذا يعني انه من الممكن ان يكون هناك مشكلة في بعض الاحرف في اسم الملف.",
diff --git a/settings/l10n/ar.json b/settings/l10n/ar.json
index 5e2fc16b24e..bd5171b4350 100644
--- a/settings/l10n/ar.json
+++ b/settings/l10n/ar.json
@@ -74,8 +74,6 @@
"Setup Warning" : "تحذير في التنصيب",
"Module 'fileinfo' missing" : "الموديل 'fileinfo' مفقود",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "موديل 'fileinfo' الخاص بالـPHP مفقود . نوصي بتفعيل هذا الموديل للحصول على أفضل النتائج مع خاصية التحقق ",
- "Your PHP version is outdated" : "اصدار PHP الخاص بك قديم",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "اصدار PHP الخاص بك قديم. نحن نقترح لك باصرار ان يتم ترقية الاصدار الى 5.3.8 او احدث بسبب ان الاصدارات القديمة معروفة انها مهمشة. من الممكن ان التنزيل قد لا يتم بصورة صحيحة.",
"Locale not working" : "اللغه لا تعمل",
"System locale can not be set to a one which supports UTF-8." : "لا يمكن تعيين لغة النظام الى احد اللغات التي تدعم UTF-8.",
"This means that there might be problems with certain characters in file names." : "هذا يعني انه من الممكن ان يكون هناك مشكلة في بعض الاحرف في اسم الملف.",
diff --git a/settings/l10n/ast.js b/settings/l10n/ast.js
index 12482c4ddb5..3c0e0cbd58a 100644
--- a/settings/l10n/ast.js
+++ b/settings/l10n/ast.js
@@ -109,8 +109,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Ta usándose SQLite como base de datos. Pa instalaciones más grandes, recomendamos cambiar esto. Pa migrar a otra base de datos, usa la ferramienta de llinia de comandos: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Nun s'atopó'l módulu \"fileinfo\"",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Nun s'atopó'l módulu PHP 'fileinfo'. Encamentámoste qu'habilites esti módulu pa obtener meyores resultaos cola deteición de tribes MIME.",
- "Your PHP version is outdated" : "La versión de PHP nun ta anovada",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "La versión de PHP caducó. Suxerímose que l'anueves a 5.3.8 o a una más nueva porque davezu, les versiones vieyes nun funcionen bien. Puede ser qu'esta instalación nun tea funcionando bien.",
"PHP charset is not set to UTF-8" : "El xuegu de caracteres de PHP nun ta afitáu pa UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "El xuegu de caracteres de PHP nun ta afitáu pa UTF-8. Esto pue causar problemes graves con nomes d'archivos que nun contengan caracteres ASCII. Encamentamos camudar el valor de 'default_charset' a 'UTF-8'.",
"Locale not working" : "La configuración rexonal nun ta funcionando",
diff --git a/settings/l10n/ast.json b/settings/l10n/ast.json
index 8ab5e2e448a..2d1a48006c7 100644
--- a/settings/l10n/ast.json
+++ b/settings/l10n/ast.json
@@ -107,8 +107,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Ta usándose SQLite como base de datos. Pa instalaciones más grandes, recomendamos cambiar esto. Pa migrar a otra base de datos, usa la ferramienta de llinia de comandos: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Nun s'atopó'l módulu \"fileinfo\"",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Nun s'atopó'l módulu PHP 'fileinfo'. Encamentámoste qu'habilites esti módulu pa obtener meyores resultaos cola deteición de tribes MIME.",
- "Your PHP version is outdated" : "La versión de PHP nun ta anovada",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "La versión de PHP caducó. Suxerímose que l'anueves a 5.3.8 o a una más nueva porque davezu, les versiones vieyes nun funcionen bien. Puede ser qu'esta instalación nun tea funcionando bien.",
"PHP charset is not set to UTF-8" : "El xuegu de caracteres de PHP nun ta afitáu pa UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "El xuegu de caracteres de PHP nun ta afitáu pa UTF-8. Esto pue causar problemes graves con nomes d'archivos que nun contengan caracteres ASCII. Encamentamos camudar el valor de 'default_charset' a 'UTF-8'.",
"Locale not working" : "La configuración rexonal nun ta funcionando",
diff --git a/settings/l10n/az.js b/settings/l10n/az.js
index 1150aecda59..a1843da2ca2 100644
--- a/settings/l10n/az.js
+++ b/settings/l10n/az.js
@@ -89,7 +89,6 @@ OC.L10N.register(
"Setup Warning" : "Quruluş xəbərdarlığı",
"Database Performance Info" : "Verilənlər bazasının davamiyyəti məlumatı",
"Module 'fileinfo' missing" : "'fileinfo' modulu çatışmır",
- "Your PHP version is outdated" : "Sizin PHP versiyası köhnəlib",
"PHP charset is not set to UTF-8" : "PHP simvol tipi UTF-8 deyil",
"Send mode" : "Göndərmə rejimi",
"Authentication method" : "Qeydiyyat metodikası",
diff --git a/settings/l10n/az.json b/settings/l10n/az.json
index 6325a20b196..37e8fe44761 100644
--- a/settings/l10n/az.json
+++ b/settings/l10n/az.json
@@ -87,7 +87,6 @@
"Setup Warning" : "Quruluş xəbərdarlığı",
"Database Performance Info" : "Verilənlər bazasının davamiyyəti məlumatı",
"Module 'fileinfo' missing" : "'fileinfo' modulu çatışmır",
- "Your PHP version is outdated" : "Sizin PHP versiyası köhnəlib",
"PHP charset is not set to UTF-8" : "PHP simvol tipi UTF-8 deyil",
"Send mode" : "Göndərmə rejimi",
"Authentication method" : "Qeydiyyat metodikası",
diff --git a/settings/l10n/bg_BG.js b/settings/l10n/bg_BG.js
index e072dd080f8..506f44c4407 100644
--- a/settings/l10n/bg_BG.js
+++ b/settings/l10n/bg_BG.js
@@ -110,8 +110,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Настоящата база данни е SQLite. За по-големи инсталации препоръчваме да я смениш. За да преминеш към друга база данни използвай следната команда от командния ред: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Модулът 'fileinfo' липсва",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP модулът 'fileinfo' липсва. Силно препоръчваме този модъл да бъде добавен, за да бъдат постигнати най-добри резултати при mime-type откриването.",
- "Your PHP version is outdated" : "PHP версията е остаряла.",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "PHP версията е остаряла. Силно препоръчваме да я обновиш на 5.3.8 или по-нова, защото по-старите версии създават проблеми. Възможно е тази инсталация да не работи правилно.",
"PHP charset is not set to UTF-8" : "PHP таблицата от символи не е настроена за UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP таблицата от символи не е настроена за UTF-8. Това може да предизвика големи проблеми с не ASCII символи в имена на файлове. Силно перпоръчваме да промените стойноста на 'defaul_charset' в php.ini до 'UTF-8'.",
"Locale not working" : "Местоположението не работи",
diff --git a/settings/l10n/bg_BG.json b/settings/l10n/bg_BG.json
index a4eee134950..2c000622209 100644
--- a/settings/l10n/bg_BG.json
+++ b/settings/l10n/bg_BG.json
@@ -108,8 +108,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Настоящата база данни е SQLite. За по-големи инсталации препоръчваме да я смениш. За да преминеш към друга база данни използвай следната команда от командния ред: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Модулът 'fileinfo' липсва",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP модулът 'fileinfo' липсва. Силно препоръчваме този модъл да бъде добавен, за да бъдат постигнати най-добри резултати при mime-type откриването.",
- "Your PHP version is outdated" : "PHP версията е остаряла.",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "PHP версията е остаряла. Силно препоръчваме да я обновиш на 5.3.8 или по-нова, защото по-старите версии създават проблеми. Възможно е тази инсталация да не работи правилно.",
"PHP charset is not set to UTF-8" : "PHP таблицата от символи не е настроена за UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP таблицата от символи не е настроена за UTF-8. Това може да предизвика големи проблеми с не ASCII символи в имена на файлове. Силно перпоръчваме да промените стойноста на 'defaul_charset' в php.ini до 'UTF-8'.",
"Locale not working" : "Местоположението не работи",
diff --git a/settings/l10n/ca.js b/settings/l10n/ca.js
index 7a3e95c7cbd..a37af93933d 100644
--- a/settings/l10n/ca.js
+++ b/settings/l10n/ca.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"settings",
{
+ "Security & Setup Warnings" : "Avisos de seguretat i configuració",
"Cron" : "Cron",
"Sharing" : "Compartir",
"Security" : "Seguretat",
@@ -36,11 +37,16 @@ OC.L10N.register(
"Back-end doesn't support password change, but the users encryption key was successfully updated." : "El dorsal no permet canviar la contrasenya, però la clau d'encripació d'usuaris s'ha actualitzat correctament.",
"Unable to change password" : "No es pot canviar la contrasenya",
"Enabled" : "Activat",
+ "Not enabled" : "Desactivat",
+ "Recommended" : "Recomanat",
"Saved" : "Desat",
"test email settings" : "prova l'arranjament del correu",
"If you received this email, the settings seem to be correct." : "Si rebeu aquest correu sembla que l'arranjament del correu és correcte.",
+ "A problem occurred while sending the email. Please revise your settings." : "Hi ha hagut un problema enviant el correu. Reviseu la configuració.",
"Email sent" : "El correu electrónic s'ha enviat",
"You need to set your user email before being able to send test emails." : "Heu d'establir un nom d'usuari abans de poder enviar correus de prova.",
+ "Are you really sure you want add \"{domain}\" as trusted domain?" : "Esteu seguir que voleu afegir \"{domain}\" com a un domini de confiança?",
+ "Add trusted domain" : "Afegir domini de confiança",
"Sending..." : "Enviant...",
"All" : "Tots",
"Please wait...." : "Espereu...",
@@ -60,6 +66,7 @@ OC.L10N.register(
"So-so password" : "Contrasenya passable",
"Good password" : "Contrasenya bona",
"Strong password" : "Contrasenya forta",
+ "Valid until {date}" : "Vàlid fins {date}",
"Delete" : "Esborra",
"Decrypting files... Please wait, this can take some time." : "Desencriptant fitxers... Espereu, això pot trigar una estona.",
"Delete encryption keys permanently." : "Esborra les claus d'encriptació permanentment.",
@@ -70,6 +77,7 @@ OC.L10N.register(
"A valid group name must be provided" : "Heu de facilitar un nom de grup vàlid",
"deleted {groupName}" : "eliminat {groupName}",
"undo" : "desfés",
+ "no group" : "sense grup",
"never" : "mai",
"deleted {userName}" : "eliminat {userName}",
"add group" : "afegeix grup",
@@ -78,6 +86,7 @@ OC.L10N.register(
"A valid password must be provided" : "Heu de facilitar una contrasenya vàlida",
"Warning: Home directory for user \"{user}\" already exists" : "Avís: la carpeta Home per l'usuari \"{user}\" ja existeix",
"__language_name__" : "Català",
+ "Personal Info" : "Informació personal",
"SSL root certificates" : "Certificats SSL root",
"Encryption" : "Xifrat",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tot (problemes fatals, errors, avisos, informació, depuració)",
@@ -92,7 +101,7 @@ OC.L10N.register(
"SSL" : "SSL",
"TLS" : "TLS",
"Security Warning" : "Avís de seguretat",
- "You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Esteu accedint %s a través de HTTP. Us recomanem fermament que configureu el servidor perquè requereixi HTTPS.",
+ "You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Esteu accedint a %s a través de HTTP. Us recomanem fermament que configureu el servidor perquè requereixi HTTPS.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "La carpeta de dades i els vostres fitxersprobablement són accessibles des d'Internet. La fitxer .htaccess no funciona. Us recomanem que configureu el servidor web de tal manera que la carpeta de dades no sigui accessible o que moveu la carpeta de dades fora de l'arrel de documents del servidor web.",
"Setup Warning" : "Avís de configuració",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Aparentment PHP està configurat per mostrar blocs en línia de documentació. Això farà que algunes aplicacions core siguin inaccessibles.",
@@ -101,17 +110,22 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "S'utilitza SQLite com a base de dades. Per instal·lacions grans recomanem que la canvieu. Per migrar a una altra base de dades useu l'eina d'intèrpret d'ordres 'occ db:convert-type'",
"Module 'fileinfo' missing" : "No s'ha trobat el mòdul 'fileinfo'",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "El mòdul de PHP 'fileinfo' no s'ha trobat. Us recomanem que habiliteu aquest mòdul per obtenir millors resultats amb la detecció mime-type.",
- "Your PHP version is outdated" : "La versió de PHP és obsoleta",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "La versió de PHP és obsoleta. Us recomanem fermament que actualitzeu a la versió 5.3.8 o superior perquè les versions anteriors no funcionen. La instal·lació podria no funcionar correctament.",
+ "PHP charset is not set to UTF-8" : "El codi de caràcters del php no és UTF-8",
+ "PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "El codi de caràcters del php no és UTF-8. Això pot provocar greus problemes amb caràcter no-ASCII. Recomanem fermament canviar el valor del 'default_charset' del php.ini a 'UTF-8'",
"Locale not working" : "Locale no funciona",
"System locale can not be set to a one which supports UTF-8." : "No s'ha pogut establir cap localització del sistema amb suport per UTF-8.",
"This means that there might be problems with certain characters in file names." : "Això podria comportar problemes amb alguns caràcters en els noms dels fitxer.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Recomanem fermament que instal·leu els paquets requerits en el vostre sistema per suportar un dels següents idiomes: %s",
+ "URL generation in notification emails" : "Generar URL en els correus de notificació",
+ "Connectivity Checks" : "Verificacions de connectivitat",
+ "No problems found" : "No hem trovat problemes",
"Please double check the <a href='%s'>installation guides</a>." : "Comproveu les <a href='%s'>guies d'instal·lació</a>.",
"Last cron was executed at %s." : "L'últim cron s'ha executat el %s",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "L'últim cron es va executar a %s. Fa més d'una hora, alguna cosa sembla que va malament.",
"Cron was not executed yet!" : "El cron encara no s'ha executat!",
"Execute one task with each page loaded" : "Executa una tasca per cada paquet carregat",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php està registrat en un servei webcron que fa una crida a cron.php cada 15 minuts a través de http.",
+ "Use system's cron service to call the cron.php file every 15 minutes." : "Fer servir el cron del sistema per cridar el cron.php cada 15 minuts.",
"Allow apps to use the Share API" : "Permet que les aplicacions utilitzin l'API de compartir",
"Allow users to share via link" : "Permet als usuaris compartir a través d'enllaços",
"Enforce password protection" : "Reforça la protecció amb contrasenya",
@@ -127,6 +141,8 @@ OC.L10N.register(
"These groups will still be able to receive shares, but not to initiate them." : "Aquests fitxers encara podran rebre compartits, però no podran iniciar-los.",
"Enforce HTTPS" : "Força HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Força la connexió dels clients a %s a través d'una connexió encriptada.",
+ "Enforce HTTPS for subdomains" : "Forçar HTTPS per subdominis",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Força els clients a connectar-se a %s i els subdominis amb una connexió xifrada.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Connecteu a %s a través de HTTPS per habilitar o inhabilitar l'accés SSL.",
"This is used for sending out notifications." : "S'usa per enviar notificacions.",
"Send mode" : "Mode d'enviament",
@@ -139,6 +155,7 @@ OC.L10N.register(
"Credentials" : "Credencials",
"SMTP Username" : "Nom d'usuari SMTP",
"SMTP Password" : "Contrasenya SMTP",
+ "Store credentials" : "Emmagatzemar credencials",
"Test email settings" : "Prova l'arranjament del correu",
"Send email" : "Envia correu",
"Log level" : "Nivell de registre",
@@ -147,10 +164,13 @@ OC.L10N.register(
"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>.",
"More apps" : "Més aplicacions",
+ "Add your app" : "Afegiu la vostra app",
"by" : "per",
+ "licensed" : "llicenciat/da",
"Documentation:" : "Documentació:",
"User Documentation" : "Documentació d'usuari",
"Admin Documentation" : "Documentació d'administrador",
+ "Update to %s" : "Actualitzar a %s",
"Enable only for specific groups" : "Activa només per grups específics",
"Uninstall App" : "Desinstal·la l'aplicació",
"Administrator Documentation" : "Documentació d'administrador",
@@ -182,6 +202,10 @@ OC.L10N.register(
"Choose as profile image" : "Selecciona com a imatge de perfil",
"Language" : "Idioma",
"Help translate" : "Ajudeu-nos amb la traducció",
+ "Common Name" : "Nom comú",
+ "Valid until" : "Valid fins",
+ "Issued By" : "Emès Per",
+ "Valid until %s" : "Vàlid fins %s",
"Import Root Certificate" : "Importa certificat root",
"The encryption app is no longer enabled, please decrypt all your files" : "L'aplicació d'encriptació ja no està activada, desencripteu tots els vostres fitxers",
"Log-in password" : "Contrasenya d'accés",
@@ -189,10 +213,13 @@ OC.L10N.register(
"Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "Les claus d'encriptació s'han mogut a una còpia de seguretat. Si alguna cosa va malament les podreu restablir. Esborreu-les permanentment només si esteu segur que tots els fitxers es desencripten correctament.",
"Restore Encryption Keys" : "Restableix les claus d'encriptació",
"Delete Encryption Keys" : "Esborra les claus d'encriptació",
+ "Show storage location" : "Mostra la ubicació del magatzem",
+ "Show last log in" : "Mostrar l'últim accés",
"Username" : "Nom d'usuari",
"Create" : "Crea",
"Admin Recovery Password" : "Recuperació de contrasenya d'administrador",
"Enter the recovery password in order to recover the users files during password change" : "Escriviu la contrasenya de recuperació per a poder recuperar els fitxers dels usuaris en canviar la contrasenya",
+ "Search Users" : "Buscar usuaris",
"Add Group" : "Afegeix grup",
"Group" : "Grup",
"Everyone" : "Tothom",
@@ -201,6 +228,7 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Escriviu la quota d'emmagatzemament (per ex.: \"512 MB\" o \"12 GB\")",
"Unlimited" : "Il·limitat",
"Other" : "Un altre",
+ "Group Admin for" : "Grup Admin per",
"Quota" : "Quota",
"Storage Location" : "Ubicació de l'emmagatzemament",
"Last Login" : "Últim accés",
diff --git a/settings/l10n/ca.json b/settings/l10n/ca.json
index 9298c84ae75..c8145ed03e2 100644
--- a/settings/l10n/ca.json
+++ b/settings/l10n/ca.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "Security & Setup Warnings" : "Avisos de seguretat i configuració",
"Cron" : "Cron",
"Sharing" : "Compartir",
"Security" : "Seguretat",
@@ -34,11 +35,16 @@
"Back-end doesn't support password change, but the users encryption key was successfully updated." : "El dorsal no permet canviar la contrasenya, però la clau d'encripació d'usuaris s'ha actualitzat correctament.",
"Unable to change password" : "No es pot canviar la contrasenya",
"Enabled" : "Activat",
+ "Not enabled" : "Desactivat",
+ "Recommended" : "Recomanat",
"Saved" : "Desat",
"test email settings" : "prova l'arranjament del correu",
"If you received this email, the settings seem to be correct." : "Si rebeu aquest correu sembla que l'arranjament del correu és correcte.",
+ "A problem occurred while sending the email. Please revise your settings." : "Hi ha hagut un problema enviant el correu. Reviseu la configuració.",
"Email sent" : "El correu electrónic s'ha enviat",
"You need to set your user email before being able to send test emails." : "Heu d'establir un nom d'usuari abans de poder enviar correus de prova.",
+ "Are you really sure you want add \"{domain}\" as trusted domain?" : "Esteu seguir que voleu afegir \"{domain}\" com a un domini de confiança?",
+ "Add trusted domain" : "Afegir domini de confiança",
"Sending..." : "Enviant...",
"All" : "Tots",
"Please wait...." : "Espereu...",
@@ -58,6 +64,7 @@
"So-so password" : "Contrasenya passable",
"Good password" : "Contrasenya bona",
"Strong password" : "Contrasenya forta",
+ "Valid until {date}" : "Vàlid fins {date}",
"Delete" : "Esborra",
"Decrypting files... Please wait, this can take some time." : "Desencriptant fitxers... Espereu, això pot trigar una estona.",
"Delete encryption keys permanently." : "Esborra les claus d'encriptació permanentment.",
@@ -68,6 +75,7 @@
"A valid group name must be provided" : "Heu de facilitar un nom de grup vàlid",
"deleted {groupName}" : "eliminat {groupName}",
"undo" : "desfés",
+ "no group" : "sense grup",
"never" : "mai",
"deleted {userName}" : "eliminat {userName}",
"add group" : "afegeix grup",
@@ -76,6 +84,7 @@
"A valid password must be provided" : "Heu de facilitar una contrasenya vàlida",
"Warning: Home directory for user \"{user}\" already exists" : "Avís: la carpeta Home per l'usuari \"{user}\" ja existeix",
"__language_name__" : "Català",
+ "Personal Info" : "Informació personal",
"SSL root certificates" : "Certificats SSL root",
"Encryption" : "Xifrat",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tot (problemes fatals, errors, avisos, informació, depuració)",
@@ -90,7 +99,7 @@
"SSL" : "SSL",
"TLS" : "TLS",
"Security Warning" : "Avís de seguretat",
- "You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Esteu accedint %s a través de HTTP. Us recomanem fermament que configureu el servidor perquè requereixi HTTPS.",
+ "You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Esteu accedint a %s a través de HTTP. Us recomanem fermament que configureu el servidor perquè requereixi HTTPS.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "La carpeta de dades i els vostres fitxersprobablement són accessibles des d'Internet. La fitxer .htaccess no funciona. Us recomanem que configureu el servidor web de tal manera que la carpeta de dades no sigui accessible o que moveu la carpeta de dades fora de l'arrel de documents del servidor web.",
"Setup Warning" : "Avís de configuració",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Aparentment PHP està configurat per mostrar blocs en línia de documentació. Això farà que algunes aplicacions core siguin inaccessibles.",
@@ -99,17 +108,22 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "S'utilitza SQLite com a base de dades. Per instal·lacions grans recomanem que la canvieu. Per migrar a una altra base de dades useu l'eina d'intèrpret d'ordres 'occ db:convert-type'",
"Module 'fileinfo' missing" : "No s'ha trobat el mòdul 'fileinfo'",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "El mòdul de PHP 'fileinfo' no s'ha trobat. Us recomanem que habiliteu aquest mòdul per obtenir millors resultats amb la detecció mime-type.",
- "Your PHP version is outdated" : "La versió de PHP és obsoleta",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "La versió de PHP és obsoleta. Us recomanem fermament que actualitzeu a la versió 5.3.8 o superior perquè les versions anteriors no funcionen. La instal·lació podria no funcionar correctament.",
+ "PHP charset is not set to UTF-8" : "El codi de caràcters del php no és UTF-8",
+ "PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "El codi de caràcters del php no és UTF-8. Això pot provocar greus problemes amb caràcter no-ASCII. Recomanem fermament canviar el valor del 'default_charset' del php.ini a 'UTF-8'",
"Locale not working" : "Locale no funciona",
"System locale can not be set to a one which supports UTF-8." : "No s'ha pogut establir cap localització del sistema amb suport per UTF-8.",
"This means that there might be problems with certain characters in file names." : "Això podria comportar problemes amb alguns caràcters en els noms dels fitxer.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Recomanem fermament que instal·leu els paquets requerits en el vostre sistema per suportar un dels següents idiomes: %s",
+ "URL generation in notification emails" : "Generar URL en els correus de notificació",
+ "Connectivity Checks" : "Verificacions de connectivitat",
+ "No problems found" : "No hem trovat problemes",
"Please double check the <a href='%s'>installation guides</a>." : "Comproveu les <a href='%s'>guies d'instal·lació</a>.",
"Last cron was executed at %s." : "L'últim cron s'ha executat el %s",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "L'últim cron es va executar a %s. Fa més d'una hora, alguna cosa sembla que va malament.",
"Cron was not executed yet!" : "El cron encara no s'ha executat!",
"Execute one task with each page loaded" : "Executa una tasca per cada paquet carregat",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php està registrat en un servei webcron que fa una crida a cron.php cada 15 minuts a través de http.",
+ "Use system's cron service to call the cron.php file every 15 minutes." : "Fer servir el cron del sistema per cridar el cron.php cada 15 minuts.",
"Allow apps to use the Share API" : "Permet que les aplicacions utilitzin l'API de compartir",
"Allow users to share via link" : "Permet als usuaris compartir a través d'enllaços",
"Enforce password protection" : "Reforça la protecció amb contrasenya",
@@ -125,6 +139,8 @@
"These groups will still be able to receive shares, but not to initiate them." : "Aquests fitxers encara podran rebre compartits, però no podran iniciar-los.",
"Enforce HTTPS" : "Força HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Força la connexió dels clients a %s a través d'una connexió encriptada.",
+ "Enforce HTTPS for subdomains" : "Forçar HTTPS per subdominis",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Força els clients a connectar-se a %s i els subdominis amb una connexió xifrada.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Connecteu a %s a través de HTTPS per habilitar o inhabilitar l'accés SSL.",
"This is used for sending out notifications." : "S'usa per enviar notificacions.",
"Send mode" : "Mode d'enviament",
@@ -137,6 +153,7 @@
"Credentials" : "Credencials",
"SMTP Username" : "Nom d'usuari SMTP",
"SMTP Password" : "Contrasenya SMTP",
+ "Store credentials" : "Emmagatzemar credencials",
"Test email settings" : "Prova l'arranjament del correu",
"Send email" : "Envia correu",
"Log level" : "Nivell de registre",
@@ -145,10 +162,13 @@
"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>.",
"More apps" : "Més aplicacions",
+ "Add your app" : "Afegiu la vostra app",
"by" : "per",
+ "licensed" : "llicenciat/da",
"Documentation:" : "Documentació:",
"User Documentation" : "Documentació d'usuari",
"Admin Documentation" : "Documentació d'administrador",
+ "Update to %s" : "Actualitzar a %s",
"Enable only for specific groups" : "Activa només per grups específics",
"Uninstall App" : "Desinstal·la l'aplicació",
"Administrator Documentation" : "Documentació d'administrador",
@@ -180,6 +200,10 @@
"Choose as profile image" : "Selecciona com a imatge de perfil",
"Language" : "Idioma",
"Help translate" : "Ajudeu-nos amb la traducció",
+ "Common Name" : "Nom comú",
+ "Valid until" : "Valid fins",
+ "Issued By" : "Emès Per",
+ "Valid until %s" : "Vàlid fins %s",
"Import Root Certificate" : "Importa certificat root",
"The encryption app is no longer enabled, please decrypt all your files" : "L'aplicació d'encriptació ja no està activada, desencripteu tots els vostres fitxers",
"Log-in password" : "Contrasenya d'accés",
@@ -187,10 +211,13 @@
"Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." : "Les claus d'encriptació s'han mogut a una còpia de seguretat. Si alguna cosa va malament les podreu restablir. Esborreu-les permanentment només si esteu segur que tots els fitxers es desencripten correctament.",
"Restore Encryption Keys" : "Restableix les claus d'encriptació",
"Delete Encryption Keys" : "Esborra les claus d'encriptació",
+ "Show storage location" : "Mostra la ubicació del magatzem",
+ "Show last log in" : "Mostrar l'últim accés",
"Username" : "Nom d'usuari",
"Create" : "Crea",
"Admin Recovery Password" : "Recuperació de contrasenya d'administrador",
"Enter the recovery password in order to recover the users files during password change" : "Escriviu la contrasenya de recuperació per a poder recuperar els fitxers dels usuaris en canviar la contrasenya",
+ "Search Users" : "Buscar usuaris",
"Add Group" : "Afegeix grup",
"Group" : "Grup",
"Everyone" : "Tothom",
@@ -199,6 +226,7 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Escriviu la quota d'emmagatzemament (per ex.: \"512 MB\" o \"12 GB\")",
"Unlimited" : "Il·limitat",
"Other" : "Un altre",
+ "Group Admin for" : "Grup Admin per",
"Quota" : "Quota",
"Storage Location" : "Ubicació de l'emmagatzemament",
"Last Login" : "Últim accés",
diff --git a/settings/l10n/cs_CZ.js b/settings/l10n/cs_CZ.js
index d4871378c04..24a7d8dc31a 100644
--- a/settings/l10n/cs_CZ.js
+++ b/settings/l10n/cs_CZ.js
@@ -103,6 +103,8 @@ OC.L10N.register(
"Security Warning" : "Bezpečnostní upozornění",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Přistupujete na %s protokolem HTTP. Důrazně doporučujeme nakonfigurovat server pro použití HTTPS.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Váš datový adresář i vaše soubory jsou pravděpodobně přístupné z internetu. Soubor .htaccess nefunguje. Důrazně doporučujeme nakonfigurovat webový server tak, aby datový adresář nebyl nadále přístupný, nebo přesunout datový adresář mimo prostor zpřístupňovaný webovým serverem.",
+ "Read-Only config enabled" : "Konfigurační soubor pouze pro čtení",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Konfigurační soubor je pouze pro čtení. Toto omezuje možnost nastavení přes webové rozhraní. Dále musí být pro každou změnu povolen zápis do souboru ručně.",
"Setup Warning" : "Upozornění nastavení",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je patrně nastaveno tak, aby odstraňovalo bloky komentářů. Toto bude mít za následek nedostupnost množství hlavních aplikací.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Toto je pravděpodobně způsobeno aplikacemi pro urychlení načítání jako jsou Zend OPcache nebo eAccelerator.",
@@ -110,8 +112,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Je použita databáze SQLite. Pro větší instalace doporučujeme toto změnit. Pro migraci na jiný typ databáze lze použít nástroj pro příkazový řádek: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Schází modul 'fileinfo'",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Schází PHP modul 'fileinfo'. Doporučujeme jej povolit pro nejlepší výsledky detekce typů MIME.",
- "Your PHP version is outdated" : "Vaše verze PHP je zastaralá",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Vámi používaná verze PHP je zastaralá. Důrazně doporučujeme aktualizovat na verzi 5.3.8 nebo novější, protože starší verze obsahují chyby. Je možné, že tato instalace nebude fungovat správně.",
"PHP charset is not set to UTF-8" : "Znaková sada PHP není nastavena na UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Znaková sada PHP není nastavena na UTF-8. To může způsobit závažné problémy se jmény souborů se znaky neobsaženými v ASCII. Důrazně doporučujeme změnit hodnotu 'default_charset' v php.ini na 'UTF-8'.",
"Locale not working" : "Lokalizace nefunguje",
diff --git a/settings/l10n/cs_CZ.json b/settings/l10n/cs_CZ.json
index 572dd26dfe3..a20d98b1b77 100644
--- a/settings/l10n/cs_CZ.json
+++ b/settings/l10n/cs_CZ.json
@@ -101,6 +101,8 @@
"Security Warning" : "Bezpečnostní upozornění",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Přistupujete na %s protokolem HTTP. Důrazně doporučujeme nakonfigurovat server pro použití HTTPS.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Váš datový adresář i vaše soubory jsou pravděpodobně přístupné z internetu. Soubor .htaccess nefunguje. Důrazně doporučujeme nakonfigurovat webový server tak, aby datový adresář nebyl nadále přístupný, nebo přesunout datový adresář mimo prostor zpřístupňovaný webovým serverem.",
+ "Read-Only config enabled" : "Konfigurační soubor pouze pro čtení",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Konfigurační soubor je pouze pro čtení. Toto omezuje možnost nastavení přes webové rozhraní. Dále musí být pro každou změnu povolen zápis do souboru ručně.",
"Setup Warning" : "Upozornění nastavení",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je patrně nastaveno tak, aby odstraňovalo bloky komentářů. Toto bude mít za následek nedostupnost množství hlavních aplikací.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Toto je pravděpodobně způsobeno aplikacemi pro urychlení načítání jako jsou Zend OPcache nebo eAccelerator.",
@@ -108,8 +110,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Je použita databáze SQLite. Pro větší instalace doporučujeme toto změnit. Pro migraci na jiný typ databáze lze použít nástroj pro příkazový řádek: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Schází modul 'fileinfo'",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Schází PHP modul 'fileinfo'. Doporučujeme jej povolit pro nejlepší výsledky detekce typů MIME.",
- "Your PHP version is outdated" : "Vaše verze PHP je zastaralá",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Vámi používaná verze PHP je zastaralá. Důrazně doporučujeme aktualizovat na verzi 5.3.8 nebo novější, protože starší verze obsahují chyby. Je možné, že tato instalace nebude fungovat správně.",
"PHP charset is not set to UTF-8" : "Znaková sada PHP není nastavena na UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Znaková sada PHP není nastavena na UTF-8. To může způsobit závažné problémy se jmény souborů se znaky neobsaženými v ASCII. Důrazně doporučujeme změnit hodnotu 'default_charset' v php.ini na 'UTF-8'.",
"Locale not working" : "Lokalizace nefunguje",
diff --git a/settings/l10n/da.js b/settings/l10n/da.js
index 67022dd176e..98482027750 100644
--- a/settings/l10n/da.js
+++ b/settings/l10n/da.js
@@ -103,6 +103,8 @@ OC.L10N.register(
"Security Warning" : "Sikkerhedsadvarsel",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Du tilgår %s via HTTP. Vi anbefaler at du konfigurerer din server til i stedet at kræve HTTPS.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Din data mappe og dine filer er muligvis tilgængelige fra internettet. .htaccess filen virker ikke. Vi anbefaler på det kraftigste at du konfigurerer din webserver så data mappen ikke længere er tilgængelig, eller at du flytter data mappen uden for webserverens dokument rod. ",
+ "Read-Only config enabled" : "Skrivebeskyttet konfig. slået til",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Den skrivebeskyttede konfiguration er blevet slået til. Dette forhindrer indstillinger af nogle konfigurationer via webgrænsefladen. I tillæg skal filen gøres skrivbar manuelt for hver opdatering.",
"Setup Warning" : "Opsætnings Advarsel",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP opsætning blokere \"inline doc blocks\". dette gør at flere grundlæggende apps utilgængelige",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette er sansynligvis forårsaget af et accelerator eller cache som Zend OPcache eller eAccelerator",
@@ -110,8 +112,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite er benyttet som database. Ved store installationer anbefaler vi at ændre dette. For at migrere til en anden database benyt 'occ db:convert-type' værktøjet i et kommandovindue.",
"Module 'fileinfo' missing" : "Module 'fileinfo' mangler",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modulet 'fileinfo' mangler. Vi anbefaler stærkt at aktivere dette modul til at få de bedste resultater med mime-type detektion.",
- "Your PHP version is outdated" : "Din PHP-version er forældet",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Din PHP-version er forældet. Vi anbefaler at du opgraderer til 5.3.8 eller nyere, fordi ældre versioner har kendte fejl. Det er derfor muligt at installationen ikke fungerer korrekt.",
"PHP charset is not set to UTF-8" : "PHP-tegnsættet er ikke angivet til UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP-tegnsættet er ikke angivet til UTF-8. Denne kan føre til store problemer med tegn som ikke er af typen ASCII i filnavne. Vi anbefaler kraftigt at ændre værdien for 'default_charset' i php.ini til 'UTF-8'.",
"Locale not working" : "Landestandard fungerer ikke",
diff --git a/settings/l10n/da.json b/settings/l10n/da.json
index 48ee293e1ec..1700339c849 100644
--- a/settings/l10n/da.json
+++ b/settings/l10n/da.json
@@ -101,6 +101,8 @@
"Security Warning" : "Sikkerhedsadvarsel",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Du tilgår %s via HTTP. Vi anbefaler at du konfigurerer din server til i stedet at kræve HTTPS.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Din data mappe og dine filer er muligvis tilgængelige fra internettet. .htaccess filen virker ikke. Vi anbefaler på det kraftigste at du konfigurerer din webserver så data mappen ikke længere er tilgængelig, eller at du flytter data mappen uden for webserverens dokument rod. ",
+ "Read-Only config enabled" : "Skrivebeskyttet konfig. slået til",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Den skrivebeskyttede konfiguration er blevet slået til. Dette forhindrer indstillinger af nogle konfigurationer via webgrænsefladen. I tillæg skal filen gøres skrivbar manuelt for hver opdatering.",
"Setup Warning" : "Opsætnings Advarsel",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP opsætning blokere \"inline doc blocks\". dette gør at flere grundlæggende apps utilgængelige",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette er sansynligvis forårsaget af et accelerator eller cache som Zend OPcache eller eAccelerator",
@@ -108,8 +110,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite er benyttet som database. Ved store installationer anbefaler vi at ændre dette. For at migrere til en anden database benyt 'occ db:convert-type' værktøjet i et kommandovindue.",
"Module 'fileinfo' missing" : "Module 'fileinfo' mangler",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modulet 'fileinfo' mangler. Vi anbefaler stærkt at aktivere dette modul til at få de bedste resultater med mime-type detektion.",
- "Your PHP version is outdated" : "Din PHP-version er forældet",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Din PHP-version er forældet. Vi anbefaler at du opgraderer til 5.3.8 eller nyere, fordi ældre versioner har kendte fejl. Det er derfor muligt at installationen ikke fungerer korrekt.",
"PHP charset is not set to UTF-8" : "PHP-tegnsættet er ikke angivet til UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP-tegnsættet er ikke angivet til UTF-8. Denne kan føre til store problemer med tegn som ikke er af typen ASCII i filnavne. Vi anbefaler kraftigt at ændre værdien for 'default_charset' i php.ini til 'UTF-8'.",
"Locale not working" : "Landestandard fungerer ikke",
diff --git a/settings/l10n/de.js b/settings/l10n/de.js
index e11aa7c23d7..ec118a742cd 100644
--- a/settings/l10n/de.js
+++ b/settings/l10n/de.js
@@ -103,6 +103,8 @@ OC.L10N.register(
"Security Warning" : "Sicherheitswarnung",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Du greifst auf %s via HTTP zu. Wir empfehlen Dir dringend, Deinen Server so konfigurieren, dass stattdessen HTTPS verlangt wird.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Dein Datenverzeichnis und deine Dateien sind möglicherweise aus dem Internet erreichbar. Die .htaccess-Datei funktioniert nicht. Wir raten dir dringend, dass du deinen Webserver dahingehend konfigurierst, dass dein Datenverzeichnis nicht länger aus dem Internet erreichbar ist, oder du verschiebst das Datenverzeichnis ausserhalb des Wurzelverzeichnisses des Webservers.",
+ "Read-Only config enabled" : "Schreibgeschützte Konfiguration aktiviert",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies schützt die Änderung einiger Konfigurationen über die Web-Schnittstelle. Weiterhin muss für die Datei der Schreibzugriff bei jedem Update händisch aktiviert werden.",
"Setup Warning" : "Einrichtungswarnung",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ist offenbar so konfiguriert, dass PHPDoc-Blöcke in der Anweisung entfernt werden. Dadurch sind mehrere Kern-Apps nicht erreichbar.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dies wird wahrscheinlich durch Zwischenspeicher/Beschleuniger wie z.B. OPcache oder eAccelerator verursacht.",
@@ -110,8 +112,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite wird als Datenbank verwendet. Für größere Installationen muss dies geändert werden. Zur Migration in eine andere Datenbank muss der Komandozeilenbefehl: 'occ db:convert-type' verwendet werden.",
"Module 'fileinfo' missing" : "Modul 'fileinfo' fehlt ",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Das PHP-Modul 'fileinfo' fehlt. Wir empfehlen dieses Modul zu aktivieren um die besten Resultate bei der Erkennung der Dateitypen zu erreichen.",
- "Your PHP version is outdated" : "Deine PHP-Version ist veraltet",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Deine PHP-Version ist veraltet. Wir empfehlen dringend auf die Version 5.3.8 oder neuer zu aktualisieren, da ältere Versionen kompromittiert werden können. Es ist möglich, dass diese Installation nicht richtig funktioniert.",
"PHP charset is not set to UTF-8" : "PHP-Zeichensatz ist nicht auf UTF-8 gesetzt",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP-Zeichensatz ist nicht auf UTF-8 gesetzt. Dies kann Fehler mit Nicht-ASCII Zeichen in Dateinamen verursachen. Wir empfehlen daher den Wert von 'default_charset' in der php.ini auf 'UTF-8' zu ändern.",
"Locale not working" : "Ländereinstellung funktioniert nicht",
diff --git a/settings/l10n/de.json b/settings/l10n/de.json
index 74c3f7cf970..1a9342458bc 100644
--- a/settings/l10n/de.json
+++ b/settings/l10n/de.json
@@ -101,6 +101,8 @@
"Security Warning" : "Sicherheitswarnung",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Du greifst auf %s via HTTP zu. Wir empfehlen Dir dringend, Deinen Server so konfigurieren, dass stattdessen HTTPS verlangt wird.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Dein Datenverzeichnis und deine Dateien sind möglicherweise aus dem Internet erreichbar. Die .htaccess-Datei funktioniert nicht. Wir raten dir dringend, dass du deinen Webserver dahingehend konfigurierst, dass dein Datenverzeichnis nicht länger aus dem Internet erreichbar ist, oder du verschiebst das Datenverzeichnis ausserhalb des Wurzelverzeichnisses des Webservers.",
+ "Read-Only config enabled" : "Schreibgeschützte Konfiguration aktiviert",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies schützt die Änderung einiger Konfigurationen über die Web-Schnittstelle. Weiterhin muss für die Datei der Schreibzugriff bei jedem Update händisch aktiviert werden.",
"Setup Warning" : "Einrichtungswarnung",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ist offenbar so konfiguriert, dass PHPDoc-Blöcke in der Anweisung entfernt werden. Dadurch sind mehrere Kern-Apps nicht erreichbar.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dies wird wahrscheinlich durch Zwischenspeicher/Beschleuniger wie z.B. OPcache oder eAccelerator verursacht.",
@@ -108,8 +110,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite wird als Datenbank verwendet. Für größere Installationen muss dies geändert werden. Zur Migration in eine andere Datenbank muss der Komandozeilenbefehl: 'occ db:convert-type' verwendet werden.",
"Module 'fileinfo' missing" : "Modul 'fileinfo' fehlt ",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Das PHP-Modul 'fileinfo' fehlt. Wir empfehlen dieses Modul zu aktivieren um die besten Resultate bei der Erkennung der Dateitypen zu erreichen.",
- "Your PHP version is outdated" : "Deine PHP-Version ist veraltet",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Deine PHP-Version ist veraltet. Wir empfehlen dringend auf die Version 5.3.8 oder neuer zu aktualisieren, da ältere Versionen kompromittiert werden können. Es ist möglich, dass diese Installation nicht richtig funktioniert.",
"PHP charset is not set to UTF-8" : "PHP-Zeichensatz ist nicht auf UTF-8 gesetzt",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP-Zeichensatz ist nicht auf UTF-8 gesetzt. Dies kann Fehler mit Nicht-ASCII Zeichen in Dateinamen verursachen. Wir empfehlen daher den Wert von 'default_charset' in der php.ini auf 'UTF-8' zu ändern.",
"Locale not working" : "Ländereinstellung funktioniert nicht",
diff --git a/settings/l10n/de_DE.js b/settings/l10n/de_DE.js
index a802c80f719..756e8a0d8dd 100644
--- a/settings/l10n/de_DE.js
+++ b/settings/l10n/de_DE.js
@@ -103,6 +103,8 @@ OC.L10N.register(
"Security Warning" : "Sicherheitshinweis",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Sie greifen auf %s via HTTP zu. Wir empfehlen Ihnen dringend, Ihren Server so konfigurieren, dass stattdessen HTTPS verlangt wird.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Ihr Datenverzeichnis und Ihre Dateien sind möglicherweise aus dem Internet erreichbar. Die .htaccess-Datei funktioniert nicht. Wir raten Ihnen dringend, dass Sie Ihren Webserver dahingehend konfigurieren, dass Ihr Datenverzeichnis nicht länger aus dem Internet erreichbar ist, oder Sie verschieben das Datenverzeichnis außerhalb des Wurzelverzeichnisses des Webservers.",
+ "Read-Only config enabled" : "Schreibgeschützte Konfiguration aktiviert",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies schützt die Änderung einiger Konfigurationen über die Web-Schnittstelle. Weiterhin muss für die Datei der Schreibzugriff bei jedem Update händisch aktiviert werden.",
"Setup Warning" : "Einrichtungswarnung",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ist offenbar so konfiguriert, dass PHPDoc-Blöcke in der Anweisung entfernt werden. Dadurch sind mehrere Kern-Apps nicht erreichbar.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dies wird wahrscheinlich durch Zwischenspeicher/Beschleuniger wie z.B. OPcache oder eAccelerator verursacht.",
@@ -110,8 +112,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite wird als Datenbank verwendet. Für größere Installationen muss das geändert werden. Zur Migration in eine andere Datenbank muss in der Befehlszeile »occ db:convert-type« verwendet werden.",
"Module 'fileinfo' missing" : "Das Modul 'fileinfo' fehlt",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Das PHP-Modul 'fileinfo' fehlt. Wir empfehlen Ihnen dieses Modul zu aktivieren, um die besten Resultate bei der Bestimmung der Dateitypen zu erzielen.",
- "Your PHP version is outdated" : "Ihre PHP-Version ist veraltet",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Ihre PHP-Version ist veraltet. Wir empfehlen dringend auf die Version 5.3.8 oder neuer zu aktualisieren, da ältere Versionen kompromittiert werden können. Es ist möglich, dass diese Installation nicht richtig funktioniert.",
"PHP charset is not set to UTF-8" : "PHP-Zeichensatz ist nicht auf UTF-8 eingestellt",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP-Zeichensatz ist nicht auf UTF-8 eingestellt. Das kann Fehler mit Nicht-ASCII-Zeichen in Dateinamen verursachen. Wir empfehlen daher den Wert von »default_charset« in der php.ini auf »UTF-8« zu ändern.",
"Locale not working" : "Die Lokalisierung funktioniert nicht",
diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json
index 0f1e8d07932..f28a3bafd21 100644
--- a/settings/l10n/de_DE.json
+++ b/settings/l10n/de_DE.json
@@ -101,6 +101,8 @@
"Security Warning" : "Sicherheitshinweis",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Sie greifen auf %s via HTTP zu. Wir empfehlen Ihnen dringend, Ihren Server so konfigurieren, dass stattdessen HTTPS verlangt wird.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Ihr Datenverzeichnis und Ihre Dateien sind möglicherweise aus dem Internet erreichbar. Die .htaccess-Datei funktioniert nicht. Wir raten Ihnen dringend, dass Sie Ihren Webserver dahingehend konfigurieren, dass Ihr Datenverzeichnis nicht länger aus dem Internet erreichbar ist, oder Sie verschieben das Datenverzeichnis außerhalb des Wurzelverzeichnisses des Webservers.",
+ "Read-Only config enabled" : "Schreibgeschützte Konfiguration aktiviert",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies schützt die Änderung einiger Konfigurationen über die Web-Schnittstelle. Weiterhin muss für die Datei der Schreibzugriff bei jedem Update händisch aktiviert werden.",
"Setup Warning" : "Einrichtungswarnung",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ist offenbar so konfiguriert, dass PHPDoc-Blöcke in der Anweisung entfernt werden. Dadurch sind mehrere Kern-Apps nicht erreichbar.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dies wird wahrscheinlich durch Zwischenspeicher/Beschleuniger wie z.B. OPcache oder eAccelerator verursacht.",
@@ -108,8 +110,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite wird als Datenbank verwendet. Für größere Installationen muss das geändert werden. Zur Migration in eine andere Datenbank muss in der Befehlszeile »occ db:convert-type« verwendet werden.",
"Module 'fileinfo' missing" : "Das Modul 'fileinfo' fehlt",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Das PHP-Modul 'fileinfo' fehlt. Wir empfehlen Ihnen dieses Modul zu aktivieren, um die besten Resultate bei der Bestimmung der Dateitypen zu erzielen.",
- "Your PHP version is outdated" : "Ihre PHP-Version ist veraltet",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Ihre PHP-Version ist veraltet. Wir empfehlen dringend auf die Version 5.3.8 oder neuer zu aktualisieren, da ältere Versionen kompromittiert werden können. Es ist möglich, dass diese Installation nicht richtig funktioniert.",
"PHP charset is not set to UTF-8" : "PHP-Zeichensatz ist nicht auf UTF-8 eingestellt",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP-Zeichensatz ist nicht auf UTF-8 eingestellt. Das kann Fehler mit Nicht-ASCII-Zeichen in Dateinamen verursachen. Wir empfehlen daher den Wert von »default_charset« in der php.ini auf »UTF-8« zu ändern.",
"Locale not working" : "Die Lokalisierung funktioniert nicht",
diff --git a/settings/l10n/el.js b/settings/l10n/el.js
index 149d7ffef0b..545b39b7687 100644
--- a/settings/l10n/el.js
+++ b/settings/l10n/el.js
@@ -110,8 +110,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Ως βάση δεδομένων χρησιμοποιείται η SQLite. Για μεγαλύτερες εγκαταστάσεις συνιστούμε να την αλλάξετε. Για να μετακινηθείτε σε μια άλλη βάση δεδομένων χρησιμοποιείστε το εργαλείο γραμμής εντολών: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Η ενοτητα 'fileinfo' λειπει",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Η PHP ενοτητα 'fileinfo' λειπει. Σας συνιστούμε να ενεργοποιήσετε αυτή την ενότητα για να έχετε καλύτερα αποτελέσματα με τον εντοπισμό τύπου MIME. ",
- "Your PHP version is outdated" : "Η έκδοση PHP είναι απαρχαιωμένη",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Η έκδοση PHP είναι απαρχαιωμένη. Συνιστούμε ανεπιφύλακτα να ενημερώσετε στην 5.3.8 ή νεώτερη καθώς παλαιότερες εκδόσεις είναι γνωστό πως περιέχουν σφάλματα. Είναι πιθανόν ότι αυτή η εγκατάσταση δεν λειτουργεί σωστά.",
"PHP charset is not set to UTF-8" : "Το σύνολο χαρακτήρων PHP δεν έχει οριστεί στο UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Το σύνολο χαρακτήρων PHP δεν έχει οριστεί στο UTF-8. Αυτό μπορεί να προκαλέσει τεράστια ζητήματα με χωρίς-ASCII χαρακτήρες στα ονόματα των αρχείων. Συνιστούμε ανεπιφύλακτα να αλλάξετε την αξία του 'default_charset' php.ini στο 'UTF-8'.",
"Locale not working" : "Η μετάφραση δεν δουλεύει",
diff --git a/settings/l10n/el.json b/settings/l10n/el.json
index 258846d9be3..7ac46e926d0 100644
--- a/settings/l10n/el.json
+++ b/settings/l10n/el.json
@@ -108,8 +108,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Ως βάση δεδομένων χρησιμοποιείται η SQLite. Για μεγαλύτερες εγκαταστάσεις συνιστούμε να την αλλάξετε. Για να μετακινηθείτε σε μια άλλη βάση δεδομένων χρησιμοποιείστε το εργαλείο γραμμής εντολών: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Η ενοτητα 'fileinfo' λειπει",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Η PHP ενοτητα 'fileinfo' λειπει. Σας συνιστούμε να ενεργοποιήσετε αυτή την ενότητα για να έχετε καλύτερα αποτελέσματα με τον εντοπισμό τύπου MIME. ",
- "Your PHP version is outdated" : "Η έκδοση PHP είναι απαρχαιωμένη",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Η έκδοση PHP είναι απαρχαιωμένη. Συνιστούμε ανεπιφύλακτα να ενημερώσετε στην 5.3.8 ή νεώτερη καθώς παλαιότερες εκδόσεις είναι γνωστό πως περιέχουν σφάλματα. Είναι πιθανόν ότι αυτή η εγκατάσταση δεν λειτουργεί σωστά.",
"PHP charset is not set to UTF-8" : "Το σύνολο χαρακτήρων PHP δεν έχει οριστεί στο UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Το σύνολο χαρακτήρων PHP δεν έχει οριστεί στο UTF-8. Αυτό μπορεί να προκαλέσει τεράστια ζητήματα με χωρίς-ASCII χαρακτήρες στα ονόματα των αρχείων. Συνιστούμε ανεπιφύλακτα να αλλάξετε την αξία του 'default_charset' php.ini στο 'UTF-8'.",
"Locale not working" : "Η μετάφραση δεν δουλεύει",
diff --git a/settings/l10n/en_GB.js b/settings/l10n/en_GB.js
index f33ccbcfdce..321d42c58c6 100644
--- a/settings/l10n/en_GB.js
+++ b/settings/l10n/en_GB.js
@@ -103,6 +103,8 @@ OC.L10N.register(
"Security Warning" : "Security Warning",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root.",
+ "Read-Only config enabled" : "Read-Only config enabled",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update.",
"Setup Warning" : "Setup Warning",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator.",
@@ -110,8 +112,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite is used as database. For larger installations we recommend changing this. To migrate to another database use the command line tool: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Module 'fileinfo' missing",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "The PHP module 'fileinfo' is missing. We strongly recommend enabling this module to get best results with mime-type detection.",
- "Your PHP version is outdated" : "Your PHP version is outdated",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly.",
"PHP charset is not set to UTF-8" : "PHP charset is not set to UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'.",
"Locale not working" : "Locale not working",
diff --git a/settings/l10n/en_GB.json b/settings/l10n/en_GB.json
index 5ad52ed5b56..ded988671e0 100644
--- a/settings/l10n/en_GB.json
+++ b/settings/l10n/en_GB.json
@@ -101,6 +101,8 @@
"Security Warning" : "Security Warning",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root.",
+ "Read-Only config enabled" : "Read-Only config enabled",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update.",
"Setup Warning" : "Setup Warning",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator.",
@@ -108,8 +110,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite is used as database. For larger installations we recommend changing this. To migrate to another database use the command line tool: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Module 'fileinfo' missing",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "The PHP module 'fileinfo' is missing. We strongly recommend enabling this module to get best results with mime-type detection.",
- "Your PHP version is outdated" : "Your PHP version is outdated",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly.",
"PHP charset is not set to UTF-8" : "PHP charset is not set to UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'.",
"Locale not working" : "Locale not working",
diff --git a/settings/l10n/es.js b/settings/l10n/es.js
index d49f8116bb7..10f19a54063 100644
--- a/settings/l10n/es.js
+++ b/settings/l10n/es.js
@@ -103,6 +103,8 @@ OC.L10N.register(
"Security Warning" : "Advertencia de seguridad",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está ingresando a %s vía HTTP. Le recomendamos encarecidamente que configure su servidor para que requiera HTTPS.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Su directorio de datos y archivos es probablemente accesible desde Internet pues el archivo .htaccess no está funcionando. Le sugerimos encarecidamente que configure su servidor web de modo que el directorio de datos no sea accesible o que mueva dicho directorio fuera de la raíz de documentos del servidor web.",
+ "Read-Only config enabled" : "Configuración de solo lectura activada",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Se ha habilitado la configuración de sólo lectura. Esto evita que ajustar algunas configuraciones a través de la interfaz web. Además, el archivo debe hacerse modificable manualmente para cada actualización.",
"Setup Warning" : "Advertencia de configuración",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP está aparentemente configurado para eliminar bloques de documentos en línea. Esto hará que varias aplicaciones del principales no estén accesibles.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Probablemente esto sea causado por un cache o acelerador, como por ejemplo Zend OPcache o eAccelerator.",
@@ -110,8 +112,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Se está usando SQLite como base de datos. Para instalaciones más grandes, recomendamos cambiar esto. Para migrar a otra base de datos, use la herramienta de línea de comandos: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "No se ha encontrado el módulo \"fileinfo\"",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "No se ha encontrado el modulo PHP 'fileinfo'. Le recomendamos encarecidamente que habilite este módulo para obtener mejores resultados con la detección de tipos MIME.",
- "Your PHP version is outdated" : "Su versión de PHP no está actualizada",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Su versión de PHP ha caducado. Le sugerimos encarecidamente que la actualize a 5.3.8 o a una más nueva porque normalmente las versiones antiguas no funcionan bien. Puede ser que esta instalación no esté funcionando bien por ello.",
"PHP charset is not set to UTF-8" : "El conjunto de caracteres de PHP no está establecido en UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "El set de caracteres usado por PHP no es UTF-8. Esto puede causar grandes problemas con nombres de archivos que contengan caracteres que no sean ASCII. Recomendamos encarecidamente cambiar el valor de 'default_charset' en php.ini a 'UTF-8'.",
"Locale not working" : "La configuración regional no está funcionando",
diff --git a/settings/l10n/es.json b/settings/l10n/es.json
index 256e9fa7beb..988401fb82d 100644
--- a/settings/l10n/es.json
+++ b/settings/l10n/es.json
@@ -101,6 +101,8 @@
"Security Warning" : "Advertencia de seguridad",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está ingresando a %s vía HTTP. Le recomendamos encarecidamente que configure su servidor para que requiera HTTPS.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Su directorio de datos y archivos es probablemente accesible desde Internet pues el archivo .htaccess no está funcionando. Le sugerimos encarecidamente que configure su servidor web de modo que el directorio de datos no sea accesible o que mueva dicho directorio fuera de la raíz de documentos del servidor web.",
+ "Read-Only config enabled" : "Configuración de solo lectura activada",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Se ha habilitado la configuración de sólo lectura. Esto evita que ajustar algunas configuraciones a través de la interfaz web. Además, el archivo debe hacerse modificable manualmente para cada actualización.",
"Setup Warning" : "Advertencia de configuración",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP está aparentemente configurado para eliminar bloques de documentos en línea. Esto hará que varias aplicaciones del principales no estén accesibles.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Probablemente esto sea causado por un cache o acelerador, como por ejemplo Zend OPcache o eAccelerator.",
@@ -108,8 +110,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Se está usando SQLite como base de datos. Para instalaciones más grandes, recomendamos cambiar esto. Para migrar a otra base de datos, use la herramienta de línea de comandos: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "No se ha encontrado el módulo \"fileinfo\"",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "No se ha encontrado el modulo PHP 'fileinfo'. Le recomendamos encarecidamente que habilite este módulo para obtener mejores resultados con la detección de tipos MIME.",
- "Your PHP version is outdated" : "Su versión de PHP no está actualizada",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Su versión de PHP ha caducado. Le sugerimos encarecidamente que la actualize a 5.3.8 o a una más nueva porque normalmente las versiones antiguas no funcionan bien. Puede ser que esta instalación no esté funcionando bien por ello.",
"PHP charset is not set to UTF-8" : "El conjunto de caracteres de PHP no está establecido en UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "El set de caracteres usado por PHP no es UTF-8. Esto puede causar grandes problemas con nombres de archivos que contengan caracteres que no sean ASCII. Recomendamos encarecidamente cambiar el valor de 'default_charset' en php.ini a 'UTF-8'.",
"Locale not working" : "La configuración regional no está funcionando",
diff --git a/settings/l10n/es_AR.js b/settings/l10n/es_AR.js
index 058acf4e9ad..b681fa8d077 100644
--- a/settings/l10n/es_AR.js
+++ b/settings/l10n/es_AR.js
@@ -80,8 +80,6 @@ OC.L10N.register(
"Setup Warning" : "Alerta de Configuración",
"Module 'fileinfo' missing" : "El módulo 'fileinfo' no existe",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "El módulo PHP 'fileinfo' no existe. Es recomendable que actives este módulo para obtener mejores resultados con la detección mime-type",
- "Your PHP version is outdated" : "Su versión de PHP está fuera de término",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Su versión de PHP está fuera de término. Recomendamos fuertemente actualizar a 5.3.8 o a una más nueva porque se sabe que versiones anteriores están falladas. Es posible que esta instalación no funcione adecuadamente.",
"Locale not working" : "\"Locale\" no está funcionando",
"System locale can not be set to a one which supports UTF-8." : "La localización del sistema no puede cambiarse a una que soporta UTF-8",
"This means that there might be problems with certain characters in file names." : "Esto significa que puede haber problemas con ciertos caracteres en los nombres de archivos.",
diff --git a/settings/l10n/es_AR.json b/settings/l10n/es_AR.json
index 3ac7316db00..14ce77fbb88 100644
--- a/settings/l10n/es_AR.json
+++ b/settings/l10n/es_AR.json
@@ -78,8 +78,6 @@
"Setup Warning" : "Alerta de Configuración",
"Module 'fileinfo' missing" : "El módulo 'fileinfo' no existe",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "El módulo PHP 'fileinfo' no existe. Es recomendable que actives este módulo para obtener mejores resultados con la detección mime-type",
- "Your PHP version is outdated" : "Su versión de PHP está fuera de término",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Su versión de PHP está fuera de término. Recomendamos fuertemente actualizar a 5.3.8 o a una más nueva porque se sabe que versiones anteriores están falladas. Es posible que esta instalación no funcione adecuadamente.",
"Locale not working" : "\"Locale\" no está funcionando",
"System locale can not be set to a one which supports UTF-8." : "La localización del sistema no puede cambiarse a una que soporta UTF-8",
"This means that there might be problems with certain characters in file names." : "Esto significa que puede haber problemas con ciertos caracteres en los nombres de archivos.",
diff --git a/settings/l10n/es_MX.js b/settings/l10n/es_MX.js
index c91d1cf742e..ff7bc009b82 100644
--- a/settings/l10n/es_MX.js
+++ b/settings/l10n/es_MX.js
@@ -63,8 +63,6 @@ OC.L10N.register(
"Setup Warning" : "Advertencia de configuración",
"Module 'fileinfo' missing" : "No se ha encontrado el módulo \"fileinfo\"",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "No se ha encontrado el modulo PHP 'fileinfo'. Le recomendamos encarecidamente que habilite este módulo para obtener mejores resultados con la detección de tipos MIME.",
- "Your PHP version is outdated" : "Su versión de PHP ha caducado",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Su versión de PHP ha caducado. Le sugerimos encarecidamente que la actualize a 5.3.8 o a una más nueva porque normalmente las versiones antiguas no funcionan bien. Puede ser que esta instalación no esté funcionando bien por ello.",
"Locale not working" : "La configuración regional no está funcionando",
"System locale can not be set to a one which supports UTF-8." : "No se puede escoger una configuración regional que soporte UTF-8.",
"This means that there might be problems with certain characters in file names." : "Esto significa que puede haber problemas con ciertos caracteres en los nombres de los archivos.",
diff --git a/settings/l10n/es_MX.json b/settings/l10n/es_MX.json
index 0d7969e3a5a..8e6456ec85b 100644
--- a/settings/l10n/es_MX.json
+++ b/settings/l10n/es_MX.json
@@ -61,8 +61,6 @@
"Setup Warning" : "Advertencia de configuración",
"Module 'fileinfo' missing" : "No se ha encontrado el módulo \"fileinfo\"",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "No se ha encontrado el modulo PHP 'fileinfo'. Le recomendamos encarecidamente que habilite este módulo para obtener mejores resultados con la detección de tipos MIME.",
- "Your PHP version is outdated" : "Su versión de PHP ha caducado",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Su versión de PHP ha caducado. Le sugerimos encarecidamente que la actualize a 5.3.8 o a una más nueva porque normalmente las versiones antiguas no funcionan bien. Puede ser que esta instalación no esté funcionando bien por ello.",
"Locale not working" : "La configuración regional no está funcionando",
"System locale can not be set to a one which supports UTF-8." : "No se puede escoger una configuración regional que soporte UTF-8.",
"This means that there might be problems with certain characters in file names." : "Esto significa que puede haber problemas con ciertos caracteres en los nombres de los archivos.",
diff --git a/settings/l10n/et_EE.js b/settings/l10n/et_EE.js
index a294c7c5ab5..18d7cff60f9 100644
--- a/settings/l10n/et_EE.js
+++ b/settings/l10n/et_EE.js
@@ -110,8 +110,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Andmebaasina kasutatakse SQLite-t. Suuremate paigalduste puhul me soovitame seda muuta. Migreerimaks teisele andmebaasile kasuta seda käsurea vahendit: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Moodul 'fileinfo' puudub",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP moodul 'fileinfo' puudub. Soovitame tungivalt see lisada saavutamaks parimaid tulemusi failitüüpide tuvastamisel.",
- "Your PHP version is outdated" : "PHP versioon on aegunud",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Sinu PHP versioon on aegunud. Soovitame tungivalt uuenda versioonile 5.3.8 või uuemale, kuna varasemad versioonid on teadaolevalt vigased. On võimalik, et see käesolev paigaldus ei toimi korrektselt.",
"PHP charset is not set to UTF-8" : "PHP märgistik pole UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP märgistikuks pole määratud UTF-8. See võib tekitada failinimedes mitte-ASCII märkidega suuri probleeme. Me soovitame tungivalt panna failis php.ini sätte 'default_charset' väärtuseks 'UTF-8'.",
"Locale not working" : "Lokalisatsioon ei toimi",
diff --git a/settings/l10n/et_EE.json b/settings/l10n/et_EE.json
index 8582084d420..0b2c35b5f1f 100644
--- a/settings/l10n/et_EE.json
+++ b/settings/l10n/et_EE.json
@@ -108,8 +108,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Andmebaasina kasutatakse SQLite-t. Suuremate paigalduste puhul me soovitame seda muuta. Migreerimaks teisele andmebaasile kasuta seda käsurea vahendit: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Moodul 'fileinfo' puudub",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP moodul 'fileinfo' puudub. Soovitame tungivalt see lisada saavutamaks parimaid tulemusi failitüüpide tuvastamisel.",
- "Your PHP version is outdated" : "PHP versioon on aegunud",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Sinu PHP versioon on aegunud. Soovitame tungivalt uuenda versioonile 5.3.8 või uuemale, kuna varasemad versioonid on teadaolevalt vigased. On võimalik, et see käesolev paigaldus ei toimi korrektselt.",
"PHP charset is not set to UTF-8" : "PHP märgistik pole UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP märgistikuks pole määratud UTF-8. See võib tekitada failinimedes mitte-ASCII märkidega suuri probleeme. Me soovitame tungivalt panna failis php.ini sätte 'default_charset' väärtuseks 'UTF-8'.",
"Locale not working" : "Lokalisatsioon ei toimi",
diff --git a/settings/l10n/eu.js b/settings/l10n/eu.js
index b56cdeaef72..eeff2dd7dbd 100644
--- a/settings/l10n/eu.js
+++ b/settings/l10n/eu.js
@@ -108,8 +108,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite erabili da datu-base gisa. Instalazio handiagoetarako gomendatzen dugu aldatzea. Beste datu base batera migratzeko erabili komando-lerro tresna hau: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "'fileinfo' modulua falta da",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP 'fileinfo' modulua falta da. Modulu hau gaitzea aholkatzen dizugu mime-type ezberdinak hobe detektatzeko.",
- "Your PHP version is outdated" : "Zure PHP bertsioa zaharkituta dago",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Zure PHP bertsioa zaharkituta dago. Gure aholkua 5.3.8 edo bertsio berriago batera eguneratzea da, bertsio zaharragoak arazoak ematen baitituzte. Posible da instalazio honek ez funtzionatzea ongi.",
"PHP charset is not set to UTF-8" : "PHP charset ez da UTF-8 gisa ezartzen",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP charset ez da UTF-8 gisa ezartzen. Honek arazo larriak sor ditzake fitxategien izenetan ascii ez diren karaktereekin. Gomendatzen dizugu php.ini-ko 'default_charset'-en ordez 'UTF-8' ezartzea.",
"Locale not working" : "Lokala ez dabil",
diff --git a/settings/l10n/eu.json b/settings/l10n/eu.json
index 8d27d47188b..3405967c4a9 100644
--- a/settings/l10n/eu.json
+++ b/settings/l10n/eu.json
@@ -106,8 +106,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite erabili da datu-base gisa. Instalazio handiagoetarako gomendatzen dugu aldatzea. Beste datu base batera migratzeko erabili komando-lerro tresna hau: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "'fileinfo' modulua falta da",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP 'fileinfo' modulua falta da. Modulu hau gaitzea aholkatzen dizugu mime-type ezberdinak hobe detektatzeko.",
- "Your PHP version is outdated" : "Zure PHP bertsioa zaharkituta dago",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Zure PHP bertsioa zaharkituta dago. Gure aholkua 5.3.8 edo bertsio berriago batera eguneratzea da, bertsio zaharragoak arazoak ematen baitituzte. Posible da instalazio honek ez funtzionatzea ongi.",
"PHP charset is not set to UTF-8" : "PHP charset ez da UTF-8 gisa ezartzen",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP charset ez da UTF-8 gisa ezartzen. Honek arazo larriak sor ditzake fitxategien izenetan ascii ez diren karaktereekin. Gomendatzen dizugu php.ini-ko 'default_charset'-en ordez 'UTF-8' ezartzea.",
"Locale not working" : "Lokala ez dabil",
diff --git a/settings/l10n/fa.js b/settings/l10n/fa.js
index 624c124888b..c3ba168338d 100644
--- a/settings/l10n/fa.js
+++ b/settings/l10n/fa.js
@@ -91,7 +91,6 @@ OC.L10N.register(
"Database Performance Info" : "اطلاعات کارایی پایگاه داده",
"Module 'fileinfo' missing" : "ماژول 'fileinfo' از کار افتاده",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "ماژول 'fileinfo' PHP از کار افتاده است.ما اکیدا توصیه می کنیم که این ماژول را فعال کنید تا نتایج بهتری به وسیله ی mime-type detection دریافت کنید.",
- "Your PHP version is outdated" : "نسخه PHP شما قدیمی است",
"Locale not working" : "زبان محلی کار نمی کند.",
"Please double check the <a href='%s'>installation guides</a>." : "لطفاً دوباره <a href='%s'>راهنمای نصب</a>را بررسی کنید.",
"Last cron was executed at %s." : "کران قبلی در %s اجرا شد.",
diff --git a/settings/l10n/fa.json b/settings/l10n/fa.json
index 793551cfe56..766ffa4381e 100644
--- a/settings/l10n/fa.json
+++ b/settings/l10n/fa.json
@@ -89,7 +89,6 @@
"Database Performance Info" : "اطلاعات کارایی پایگاه داده",
"Module 'fileinfo' missing" : "ماژول 'fileinfo' از کار افتاده",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "ماژول 'fileinfo' PHP از کار افتاده است.ما اکیدا توصیه می کنیم که این ماژول را فعال کنید تا نتایج بهتری به وسیله ی mime-type detection دریافت کنید.",
- "Your PHP version is outdated" : "نسخه PHP شما قدیمی است",
"Locale not working" : "زبان محلی کار نمی کند.",
"Please double check the <a href='%s'>installation guides</a>." : "لطفاً دوباره <a href='%s'>راهنمای نصب</a>را بررسی کنید.",
"Last cron was executed at %s." : "کران قبلی در %s اجرا شد.",
diff --git a/settings/l10n/fi_FI.js b/settings/l10n/fi_FI.js
index 3965f7e9159..5d23d380e62 100644
--- a/settings/l10n/fi_FI.js
+++ b/settings/l10n/fi_FI.js
@@ -102,13 +102,12 @@ OC.L10N.register(
"Security Warning" : "Turvallisuusvaroitus",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Käytät %sia HTTP-yhteydellä. Suosittelemme määrittämään palvelimen vaatimaan salattua HTTPS-yhteyttä.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Datahakemistosi ja kaikki tiedostosi ovat luultavasti käytettävissä suoraan internetistä. .htaccess-tiedosto ei toimi tällä hetkellä. Määritä verkkopalvelimen asetukset siten, ettei datahakemistosi ole suoraan käytettävissä tai siirrä kyseinen hakemisto pois verkkopalvelimen dokumenttijuuresta.",
+ "Read-Only config enabled" : "Vain luku -määritykset otettu käyttöön",
"Setup Warning" : "Asetusvaroitus",
"Database Performance Info" : "Tietokannan suorituskyvyn tiedot",
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLitea käytetään tietokantana. Laajoja asennuksia varten tämä asetus kannattaa muuttaa. Käytä komentorivityökalua 'occ db:convert-type' siirtyäksesi toiseen tietokantaan.",
"Module 'fileinfo' missing" : "Moduuli 'fileinfo' puuttuu",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-moduuli \"fileinfo\" puuttuu. Sen käyttö on erittäin suositeltavaa, jotta MIME-tyypin havaitseminen onnistuu parhaalla mahdollisella tavalla.",
- "Your PHP version is outdated" : "Käytössä oleva PHP-versio on vanhentunut",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Käytössä oleva PHP on vanhentunut. Päivitä versioon 5.3.8 tai uudempaan, koska aiemmat versiot eivät ole toimivia. On mahdollista, että tämä ownCloud-asennus ei toimi kunnolla.",
"PHP charset is not set to UTF-8" : "PHP:n merkistöä ei ole asetettu UTF-8:ksi",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP:n merkistöä ei ole asetettu UTF-8:ksi. Tämä saattaa aiheuttaa suuria ongelmia sellaisten tiedostojen kanssa, joiden nimi koostuu muista kuin ASCII-merkeistä. Suosittelemme asettamaan php.ini-tiedoston kohdan 'default_charset' arvoon 'UTF-8'.",
"Locale not working" : "Maa-asetus ei toimi",
diff --git a/settings/l10n/fi_FI.json b/settings/l10n/fi_FI.json
index 4fc99b5fdf3..856e2117bf7 100644
--- a/settings/l10n/fi_FI.json
+++ b/settings/l10n/fi_FI.json
@@ -100,13 +100,12 @@
"Security Warning" : "Turvallisuusvaroitus",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Käytät %sia HTTP-yhteydellä. Suosittelemme määrittämään palvelimen vaatimaan salattua HTTPS-yhteyttä.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Datahakemistosi ja kaikki tiedostosi ovat luultavasti käytettävissä suoraan internetistä. .htaccess-tiedosto ei toimi tällä hetkellä. Määritä verkkopalvelimen asetukset siten, ettei datahakemistosi ole suoraan käytettävissä tai siirrä kyseinen hakemisto pois verkkopalvelimen dokumenttijuuresta.",
+ "Read-Only config enabled" : "Vain luku -määritykset otettu käyttöön",
"Setup Warning" : "Asetusvaroitus",
"Database Performance Info" : "Tietokannan suorituskyvyn tiedot",
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLitea käytetään tietokantana. Laajoja asennuksia varten tämä asetus kannattaa muuttaa. Käytä komentorivityökalua 'occ db:convert-type' siirtyäksesi toiseen tietokantaan.",
"Module 'fileinfo' missing" : "Moduuli 'fileinfo' puuttuu",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-moduuli \"fileinfo\" puuttuu. Sen käyttö on erittäin suositeltavaa, jotta MIME-tyypin havaitseminen onnistuu parhaalla mahdollisella tavalla.",
- "Your PHP version is outdated" : "Käytössä oleva PHP-versio on vanhentunut",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Käytössä oleva PHP on vanhentunut. Päivitä versioon 5.3.8 tai uudempaan, koska aiemmat versiot eivät ole toimivia. On mahdollista, että tämä ownCloud-asennus ei toimi kunnolla.",
"PHP charset is not set to UTF-8" : "PHP:n merkistöä ei ole asetettu UTF-8:ksi",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP:n merkistöä ei ole asetettu UTF-8:ksi. Tämä saattaa aiheuttaa suuria ongelmia sellaisten tiedostojen kanssa, joiden nimi koostuu muista kuin ASCII-merkeistä. Suosittelemme asettamaan php.ini-tiedoston kohdan 'default_charset' arvoon 'UTF-8'.",
"Locale not working" : "Maa-asetus ei toimi",
diff --git a/settings/l10n/fr.js b/settings/l10n/fr.js
index 816b9e88565..651f6608207 100644
--- a/settings/l10n/fr.js
+++ b/settings/l10n/fr.js
@@ -110,8 +110,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite est utilisée comme base de donnée. Pour des installations plus volumineuse, nous vous conseillons de changer ce réglage. Pour migrer vers une autre base de donnée, utilisez la commande : \"occ db:convert-type\"",
"Module 'fileinfo' missing" : "Module 'fileinfo' manquant",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Le module PHP 'fileinfo' est manquant. Il est vivement recommandé de l'activer afin d'obtenir de meilleurs résultats pour la détection des types de fichiers.",
- "Your PHP version is outdated" : "Votre version de PHP est trop ancienne",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Votre version de PHP est trop ancienne. Nous vous recommandons fortement de migrer vers une version 5.3.8 ou plus récente encore, car les versions antérieures sont réputées problématiques. Il est possible que cette installation ne fonctionne pas correctement.",
"PHP charset is not set to UTF-8" : "Le jeu de caractères PHP n'est pas réglé sur UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Le jeu de caractères PHP n'est pas réglé sur UTF-8. Ceci peut entraîner des problèmes majeurs avec les noms de fichiers contenant des caractère non-ASCII. Nous recommandons fortement de changer la valeur de 'default_charset' dans php.ini par 'UTF-8'.",
"Locale not working" : "Localisation non fonctionnelle",
diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json
index 1bc80fc4d01..450b5542985 100644
--- a/settings/l10n/fr.json
+++ b/settings/l10n/fr.json
@@ -108,8 +108,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite est utilisée comme base de donnée. Pour des installations plus volumineuse, nous vous conseillons de changer ce réglage. Pour migrer vers une autre base de donnée, utilisez la commande : \"occ db:convert-type\"",
"Module 'fileinfo' missing" : "Module 'fileinfo' manquant",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Le module PHP 'fileinfo' est manquant. Il est vivement recommandé de l'activer afin d'obtenir de meilleurs résultats pour la détection des types de fichiers.",
- "Your PHP version is outdated" : "Votre version de PHP est trop ancienne",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Votre version de PHP est trop ancienne. Nous vous recommandons fortement de migrer vers une version 5.3.8 ou plus récente encore, car les versions antérieures sont réputées problématiques. Il est possible que cette installation ne fonctionne pas correctement.",
"PHP charset is not set to UTF-8" : "Le jeu de caractères PHP n'est pas réglé sur UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Le jeu de caractères PHP n'est pas réglé sur UTF-8. Ceci peut entraîner des problèmes majeurs avec les noms de fichiers contenant des caractère non-ASCII. Nous recommandons fortement de changer la valeur de 'default_charset' dans php.ini par 'UTF-8'.",
"Locale not working" : "Localisation non fonctionnelle",
diff --git a/settings/l10n/gl.js b/settings/l10n/gl.js
index 9aa4d527e77..64e73cf0d0e 100644
--- a/settings/l10n/gl.js
+++ b/settings/l10n/gl.js
@@ -103,6 +103,8 @@ OC.L10N.register(
"Security Warning" : "Aviso de seguranza",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está accedendo a %s a través de HTTP. Suxerímoslle que configure o seu servidor para requirir, no seu canto, o uso de HTTPS.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "O seu cartafol de datos e os seus ficheiros probabelmente sexan accesíbeis a través de internet. O ficheiro .htaccess non está a traballar. Suxerímoslle que configure o seu servidor web de tal maneira que o cartafol de datos non estea accesíbel ou que mova o o directorio de datos fóra da raíz de documentos do servidor web.",
+ "Read-Only config enabled" : "Activada a restrición da configuración a só lectura",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Foi activada a restrición da configuración a só lectura. Isto impide o estabelecemento dalgunhas configuracións a través da interface web. Ademais, ten que facer escribíbel manualmente o ficheiro para cada actualización.",
"Setup Warning" : "Configurar os avisos",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Parece que PHP foi configuración para substituír bloques de documentos en liña. Isto fará que varias aplicacións sexan inaccesíbeis.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isto probabelmente se debe unha caché/acelerador como Zend OPcache ou eAccelerator.",
@@ -110,13 +112,12 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Empregarase SQLite como base de datos. Para instalacións máis grandes recomendámoslle que cambie isto. Para migrar a outra base de datos use a ferramenta en liña de ordes: «occ db:convert-type»",
"Module 'fileinfo' missing" : "Non se atopou o módulo «fileinfo»",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Non se atopou o módulo de PHP «fileinfo». É recomendábel activar este módulo para obter os mellores resultados coa detección do tipo MIME.",
- "Your PHP version is outdated" : "A versión de PHP está desactualizada",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "A versión de PHP está desactualizada. Recomendámoslle que a actualice á versión 5.3.8 ou posterior xa que as versións anteriores son coñecidas por estragarse. É probábel que esta instalación no estea a funcionar correctamente.",
"PHP charset is not set to UTF-8" : "O xogo de caracteres de PHP non está estabelecido a UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "O xogo de caracteres de PHP non está estabelecido a UTF-8. Isto pode causar problemas importantes con caracteres non-ASCII nos nomes de ficheiro. Recomendámoslle que cambie o valor de php.ini «default_charset» a «UTF-8».",
"Locale not working" : "A configuración rexional non funciona",
"System locale can not be set to a one which supports UTF-8." : "Non é posíbel estabelecer a configuración rexional do sistema a unha que admita UTF-8.",
"This means that there might be problems with certain characters in file names." : "Isto significa que pode haber problemas con certos caracteres en nomes de ficheiro.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Recomendámoslle que instale no sistema os paquetes necesarios para admitir unha das seguintes configuracións rexionais: %s.",
"URL generation in notification emails" : "Xeración dos URL nos correos de notificación",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se a instalación non foi feita na raíz do dominio e usa o sistema de cron, poden xurdir problemas coa xeración dos URL. Para evitar estes problemas, axuste a opción «overwritewebroot» no ficheiro config.php ás ruta de webroot da súa instalación (suxírese: «%s»)",
"Connectivity Checks" : "Comprobacións de conectividade",
@@ -143,6 +144,8 @@ OC.L10N.register(
"These groups will still be able to receive shares, but not to initiate them." : "Estes grupos poderán recibir comparticións, mais non inicialas.",
"Enforce HTTPS" : "Forzar HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Forzar que os clientes se conecten a %s empregando unha conexión cifrada.",
+ "Enforce HTTPS for subdomains" : "Forzar HTTPS para os subdominios",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Forzar que os clientes se conecten a %s e aos subdominios empregando unha conexión cifrada.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Conéctese a %s empregando HTTPS para activar ou desactivar o forzado de SSL.",
"This is used for sending out notifications." : "Isto utilizase para o envío de notificacións.",
"Send mode" : "Modo de envío",
@@ -219,6 +222,7 @@ OC.L10N.register(
"Create" : "Crear",
"Admin Recovery Password" : "Contrasinal de recuperación do administrador",
"Enter the recovery password in order to recover the users files during password change" : "Introduza o contrasinal de recuperación para recuperar os ficheiros dos usuarios durante o cambio de contrasinal",
+ "Search Users" : "Busca de usuarios",
"Add Group" : "Engadir un grupo",
"Group" : "Grupo",
"Everyone" : "Todos",
diff --git a/settings/l10n/gl.json b/settings/l10n/gl.json
index d1d3265b170..f72ae5d272f 100644
--- a/settings/l10n/gl.json
+++ b/settings/l10n/gl.json
@@ -101,6 +101,8 @@
"Security Warning" : "Aviso de seguranza",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está accedendo a %s a través de HTTP. Suxerímoslle que configure o seu servidor para requirir, no seu canto, o uso de HTTPS.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "O seu cartafol de datos e os seus ficheiros probabelmente sexan accesíbeis a través de internet. O ficheiro .htaccess non está a traballar. Suxerímoslle que configure o seu servidor web de tal maneira que o cartafol de datos non estea accesíbel ou que mova o o directorio de datos fóra da raíz de documentos do servidor web.",
+ "Read-Only config enabled" : "Activada a restrición da configuración a só lectura",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Foi activada a restrición da configuración a só lectura. Isto impide o estabelecemento dalgunhas configuracións a través da interface web. Ademais, ten que facer escribíbel manualmente o ficheiro para cada actualización.",
"Setup Warning" : "Configurar os avisos",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Parece que PHP foi configuración para substituír bloques de documentos en liña. Isto fará que varias aplicacións sexan inaccesíbeis.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isto probabelmente se debe unha caché/acelerador como Zend OPcache ou eAccelerator.",
@@ -108,13 +110,12 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Empregarase SQLite como base de datos. Para instalacións máis grandes recomendámoslle que cambie isto. Para migrar a outra base de datos use a ferramenta en liña de ordes: «occ db:convert-type»",
"Module 'fileinfo' missing" : "Non se atopou o módulo «fileinfo»",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Non se atopou o módulo de PHP «fileinfo». É recomendábel activar este módulo para obter os mellores resultados coa detección do tipo MIME.",
- "Your PHP version is outdated" : "A versión de PHP está desactualizada",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "A versión de PHP está desactualizada. Recomendámoslle que a actualice á versión 5.3.8 ou posterior xa que as versións anteriores son coñecidas por estragarse. É probábel que esta instalación no estea a funcionar correctamente.",
"PHP charset is not set to UTF-8" : "O xogo de caracteres de PHP non está estabelecido a UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "O xogo de caracteres de PHP non está estabelecido a UTF-8. Isto pode causar problemas importantes con caracteres non-ASCII nos nomes de ficheiro. Recomendámoslle que cambie o valor de php.ini «default_charset» a «UTF-8».",
"Locale not working" : "A configuración rexional non funciona",
"System locale can not be set to a one which supports UTF-8." : "Non é posíbel estabelecer a configuración rexional do sistema a unha que admita UTF-8.",
"This means that there might be problems with certain characters in file names." : "Isto significa que pode haber problemas con certos caracteres en nomes de ficheiro.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Recomendámoslle que instale no sistema os paquetes necesarios para admitir unha das seguintes configuracións rexionais: %s.",
"URL generation in notification emails" : "Xeración dos URL nos correos de notificación",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se a instalación non foi feita na raíz do dominio e usa o sistema de cron, poden xurdir problemas coa xeración dos URL. Para evitar estes problemas, axuste a opción «overwritewebroot» no ficheiro config.php ás ruta de webroot da súa instalación (suxírese: «%s»)",
"Connectivity Checks" : "Comprobacións de conectividade",
@@ -141,6 +142,8 @@
"These groups will still be able to receive shares, but not to initiate them." : "Estes grupos poderán recibir comparticións, mais non inicialas.",
"Enforce HTTPS" : "Forzar HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Forzar que os clientes se conecten a %s empregando unha conexión cifrada.",
+ "Enforce HTTPS for subdomains" : "Forzar HTTPS para os subdominios",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Forzar que os clientes se conecten a %s e aos subdominios empregando unha conexión cifrada.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Conéctese a %s empregando HTTPS para activar ou desactivar o forzado de SSL.",
"This is used for sending out notifications." : "Isto utilizase para o envío de notificacións.",
"Send mode" : "Modo de envío",
@@ -217,6 +220,7 @@
"Create" : "Crear",
"Admin Recovery Password" : "Contrasinal de recuperación do administrador",
"Enter the recovery password in order to recover the users files during password change" : "Introduza o contrasinal de recuperación para recuperar os ficheiros dos usuarios durante o cambio de contrasinal",
+ "Search Users" : "Busca de usuarios",
"Add Group" : "Engadir un grupo",
"Group" : "Grupo",
"Everyone" : "Todos",
diff --git a/settings/l10n/hr.js b/settings/l10n/hr.js
index e0f07974723..ff690b743e3 100644
--- a/settings/l10n/hr.js
+++ b/settings/l10n/hr.js
@@ -104,8 +104,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite se koristi kao baza podataka. Za veće instalacije preporučujemo da se to promijeni.Za migraciju na neku drugu bazu podataka koristite naredbeni redak: 'occ db: convert-type'",
"Module 'fileinfo' missing" : "Nedostaje modul 'fileinfo'",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modul 'fileinfo' nedostaje. Tolo vam preporučjemo da taj modul omogućitekako biste dobili najbolje rezultate u detekciji mime vrste.",
- "Your PHP version is outdated" : "Vaša verzija PHP je zastarjela",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Vaša verzija PHP je zastarjela. Tolo vam preporučujemo da je ažurirate na 5.3.8.ili još novije jer je poznato da su starije verzije neispravne. Moguće je da ovainstalacija ne radi ispravno.",
"PHP charset is not set to UTF-8" : "PHP Charset nije postavljen na UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP charset nije postavljen na UTF-8. To može prouzročiti ozbiljne probleme s non-ASCII znakovimau nazivima datoteka. Toplo vam preporučujemo da vrijednost 'default_charset' php.ini promijeniteu 'UTF-8'.",
"Locale not working" : "Regionalna shema ne radi",
diff --git a/settings/l10n/hr.json b/settings/l10n/hr.json
index 78af9502520..4f28ba64adc 100644
--- a/settings/l10n/hr.json
+++ b/settings/l10n/hr.json
@@ -102,8 +102,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite se koristi kao baza podataka. Za veće instalacije preporučujemo da se to promijeni.Za migraciju na neku drugu bazu podataka koristite naredbeni redak: 'occ db: convert-type'",
"Module 'fileinfo' missing" : "Nedostaje modul 'fileinfo'",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modul 'fileinfo' nedostaje. Tolo vam preporučjemo da taj modul omogućitekako biste dobili najbolje rezultate u detekciji mime vrste.",
- "Your PHP version is outdated" : "Vaša verzija PHP je zastarjela",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Vaša verzija PHP je zastarjela. Tolo vam preporučujemo da je ažurirate na 5.3.8.ili još novije jer je poznato da su starije verzije neispravne. Moguće je da ovainstalacija ne radi ispravno.",
"PHP charset is not set to UTF-8" : "PHP Charset nije postavljen na UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP charset nije postavljen na UTF-8. To može prouzročiti ozbiljne probleme s non-ASCII znakovimau nazivima datoteka. Toplo vam preporučujemo da vrijednost 'default_charset' php.ini promijeniteu 'UTF-8'.",
"Locale not working" : "Regionalna shema ne radi",
diff --git a/settings/l10n/hu_HU.js b/settings/l10n/hu_HU.js
index e7cd62bf80f..4a83a78a977 100644
--- a/settings/l10n/hu_HU.js
+++ b/settings/l10n/hu_HU.js
@@ -104,8 +104,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "A kiválasztott adatbázis az SQLite. Nagyobb telepítések esetén ezt érdemes megváltoztatni. Másik adatbázisra való áttéréshez használja a következő parancssori eszközt: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "A 'fileinfo' modul hiányzik",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "A 'fileinfo' PHP modul hiányzik. Erősen javasolt ennek a modulnak a telepítése, mert ezzel lényegesen jobb a MIME-típusok felismerése.",
- "Your PHP version is outdated" : "A PHP verzió túl régi",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "A PHP verzió túl régi. Nagyon ajánlott legalább az 5.3.8-as vagy újabb verzióra frissíteni, mert a régebbi verziónál léteznek ismert hibák. Ezért lehetséges, hogy ez a telepítés majd nem működik megfelelően.",
"PHP charset is not set to UTF-8" : "A PHP-karakterkészlet nem UTF-8-ra van állítva",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "A PHP-karakterkészlet nem UTF-8-ra van állítva. Ez komoly problémákat okozhat, ha valaki olyan fájlnevet használ, amiben nem csupán ASCII karakterek fordulnak elő. Feltétlenül javasoljuk, hogy a php.ini-ben a 'default_charset' paramétert állítsa 'UTF-8'-ra!",
"Locale not working" : "A nyelvi lokalizáció nem működik",
diff --git a/settings/l10n/hu_HU.json b/settings/l10n/hu_HU.json
index 6e209dc8f81..01895bb8b9f 100644
--- a/settings/l10n/hu_HU.json
+++ b/settings/l10n/hu_HU.json
@@ -102,8 +102,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "A kiválasztott adatbázis az SQLite. Nagyobb telepítések esetén ezt érdemes megváltoztatni. Másik adatbázisra való áttéréshez használja a következő parancssori eszközt: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "A 'fileinfo' modul hiányzik",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "A 'fileinfo' PHP modul hiányzik. Erősen javasolt ennek a modulnak a telepítése, mert ezzel lényegesen jobb a MIME-típusok felismerése.",
- "Your PHP version is outdated" : "A PHP verzió túl régi",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "A PHP verzió túl régi. Nagyon ajánlott legalább az 5.3.8-as vagy újabb verzióra frissíteni, mert a régebbi verziónál léteznek ismert hibák. Ezért lehetséges, hogy ez a telepítés majd nem működik megfelelően.",
"PHP charset is not set to UTF-8" : "A PHP-karakterkészlet nem UTF-8-ra van állítva",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "A PHP-karakterkészlet nem UTF-8-ra van állítva. Ez komoly problémákat okozhat, ha valaki olyan fájlnevet használ, amiben nem csupán ASCII karakterek fordulnak elő. Feltétlenül javasoljuk, hogy a php.ini-ben a 'default_charset' paramétert állítsa 'UTF-8'-ra!",
"Locale not working" : "A nyelvi lokalizáció nem működik",
diff --git a/settings/l10n/id.js b/settings/l10n/id.js
index 3240c893669..c772bc8127c 100644
--- a/settings/l10n/id.js
+++ b/settings/l10n/id.js
@@ -109,8 +109,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite akan digunakan sebagai basis data. Untuk instalasi besar, kami merekomendasikan untuk mengubahnya. Untuk berpindah ke basis data lainnya, gunakan alat baris perintah: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Modul 'fileinfo' tidak ada",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Module 'fileinfo' pada PHP tidak ada. Kami sangat menyarankan untuk mengaktifkan modul ini untuk mendapatkan hasil terbaik pada proses pendeteksian mime-type.",
- "Your PHP version is outdated" : "Versi PHP telah usang",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Versi PHP telah usang. Kami sangat menyarankan untuk diperbarui ke versi 5.3.8 atau yang lebih baru karena versi lama diketahui rusak. Ada kemungkinan bahwa instalasi ini tidak bekerja dengan benar.",
"PHP charset is not set to UTF-8" : "Charset PHP tidak disetel ke UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Charset PHP tidak disetel ke UTF-8. Hal ini dapat menyebabkan masalah besar dengan karakter non-ASCII di nama berkas. Kami sangat merekomendasikan untuk mengubah nilai 'default_charset' php.ini ke 'UTF-8'.",
"Locale not working" : "Kode pelokalan tidak berfungsi",
diff --git a/settings/l10n/id.json b/settings/l10n/id.json
index eadfcf6c2db..5a507822b59 100644
--- a/settings/l10n/id.json
+++ b/settings/l10n/id.json
@@ -107,8 +107,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite akan digunakan sebagai basis data. Untuk instalasi besar, kami merekomendasikan untuk mengubahnya. Untuk berpindah ke basis data lainnya, gunakan alat baris perintah: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Modul 'fileinfo' tidak ada",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Module 'fileinfo' pada PHP tidak ada. Kami sangat menyarankan untuk mengaktifkan modul ini untuk mendapatkan hasil terbaik pada proses pendeteksian mime-type.",
- "Your PHP version is outdated" : "Versi PHP telah usang",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Versi PHP telah usang. Kami sangat menyarankan untuk diperbarui ke versi 5.3.8 atau yang lebih baru karena versi lama diketahui rusak. Ada kemungkinan bahwa instalasi ini tidak bekerja dengan benar.",
"PHP charset is not set to UTF-8" : "Charset PHP tidak disetel ke UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Charset PHP tidak disetel ke UTF-8. Hal ini dapat menyebabkan masalah besar dengan karakter non-ASCII di nama berkas. Kami sangat merekomendasikan untuk mengubah nilai 'default_charset' php.ini ke 'UTF-8'.",
"Locale not working" : "Kode pelokalan tidak berfungsi",
diff --git a/settings/l10n/it.js b/settings/l10n/it.js
index 2748c43298d..14ed39b3711 100644
--- a/settings/l10n/it.js
+++ b/settings/l10n/it.js
@@ -103,6 +103,7 @@ OC.L10N.register(
"Security Warning" : "Avviso di sicurezza",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Sei connesso a %s tramite HTTP. Ti suggeriamo vivamente di configurare il tuo server per richiedere l'utilizzo del protocollo HTTPS al posto di HTTP.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "La cartella dei dati e i tuoi file sono probabilmente accessibili da Internet.\nIl file .htaccess non funziona. Ti consigliamo vivamente di configurare il server web in modo che la cartella dei dati non sia più accessibile o spostare la cartella fuori dalla radice del server web.",
+ "Read-Only config enabled" : "Config di sola lettura abilitata",
"Setup Warning" : "Avviso di configurazione",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Sembra che PHP sia configurato per rimuovere i blocchi di documentazione in linea. Ciò renderà inaccessibili diverse applicazioni principali.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ciò è causato probabilmente da una cache/acceleratore come Zend OPcache o eAccelerator.",
@@ -110,8 +111,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite è utilizzato come database. Per installazioni grandi, consigliamo di cambiarlo. Per migrare a un altro database, utilizzare lo strumento da riga di comando: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Modulo 'fileinfo' mancante",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Il modulo PHP 'fileinfo' non è presente. Consigliamo vivamente di abilitare questo modulo per ottenere risultati migliori con il rilevamento dei tipi MIME.",
- "Your PHP version is outdated" : "La tua versione di PHP è obsoleta",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "La tua versione di PHP è obsoleta. Ti consigliamo vivamente di aggiornare alla versione 5.3.8 o successiva poiché sono noti problemi con le vecchie versioni. L'installazione attuale potrebbe non funzionare correttamente.",
"PHP charset is not set to UTF-8" : "Il set di caratteri di PHP non è impostato a UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Il set di caratteri di PHP non è impostato a UTF-8. Ciò può essere causa di problemi con i caratteri non ASCII nei nomi dei file. Consigliamo vivamente di cambiare il valore di 'default_charset' nel file php.ini a 'UTF-8'.",
"Locale not working" : "Locale non funzionante",
diff --git a/settings/l10n/it.json b/settings/l10n/it.json
index f8e94b7288e..15429d9fec3 100644
--- a/settings/l10n/it.json
+++ b/settings/l10n/it.json
@@ -101,6 +101,7 @@
"Security Warning" : "Avviso di sicurezza",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Sei connesso a %s tramite HTTP. Ti suggeriamo vivamente di configurare il tuo server per richiedere l'utilizzo del protocollo HTTPS al posto di HTTP.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "La cartella dei dati e i tuoi file sono probabilmente accessibili da Internet.\nIl file .htaccess non funziona. Ti consigliamo vivamente di configurare il server web in modo che la cartella dei dati non sia più accessibile o spostare la cartella fuori dalla radice del server web.",
+ "Read-Only config enabled" : "Config di sola lettura abilitata",
"Setup Warning" : "Avviso di configurazione",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Sembra che PHP sia configurato per rimuovere i blocchi di documentazione in linea. Ciò renderà inaccessibili diverse applicazioni principali.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ciò è causato probabilmente da una cache/acceleratore come Zend OPcache o eAccelerator.",
@@ -108,8 +109,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite è utilizzato come database. Per installazioni grandi, consigliamo di cambiarlo. Per migrare a un altro database, utilizzare lo strumento da riga di comando: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Modulo 'fileinfo' mancante",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Il modulo PHP 'fileinfo' non è presente. Consigliamo vivamente di abilitare questo modulo per ottenere risultati migliori con il rilevamento dei tipi MIME.",
- "Your PHP version is outdated" : "La tua versione di PHP è obsoleta",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "La tua versione di PHP è obsoleta. Ti consigliamo vivamente di aggiornare alla versione 5.3.8 o successiva poiché sono noti problemi con le vecchie versioni. L'installazione attuale potrebbe non funzionare correttamente.",
"PHP charset is not set to UTF-8" : "Il set di caratteri di PHP non è impostato a UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Il set di caratteri di PHP non è impostato a UTF-8. Ciò può essere causa di problemi con i caratteri non ASCII nei nomi dei file. Consigliamo vivamente di cambiare il valore di 'default_charset' nel file php.ini a 'UTF-8'.",
"Locale not working" : "Locale non funzionante",
diff --git a/settings/l10n/ja.js b/settings/l10n/ja.js
index a6328f23586..572ae5511c8 100644
--- a/settings/l10n/ja.js
+++ b/settings/l10n/ja.js
@@ -110,8 +110,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite をデータベースとして利用しています。大規模な運用では、利用しないことをお勧めします。別のデータベースへ移行する場合は、コマンドラインツール: 'occ db:convert-type'を使ってください。",
"Module 'fileinfo' missing" : "モジュール 'fileinfo' が見つかりません",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP のモジュール 'fileinfo' が見つかりません。mimeタイプの検出を精度良く行うために、このモジュールを有効にすることを強くお勧めします。",
- "Your PHP version is outdated" : "PHPバーションが古くなっています。",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "PHPバーションが古くなっています。古いバージョンには既知の問題があるため、5.3.8以降のバージョンにアップデートすることを強く推奨します。このインストール状態では正常に動作しない可能性があります。",
"PHP charset is not set to UTF-8" : "PHP の文字コードは UTF-8 に設定されていません",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP の文字コードは UTF-8 に設定されていません。ファイル名に非アスキー文字が含まれる場合は、大きな問題となる可能性があります。php.ini の 'default_charset' の値を 'UTF-8' に変更することを強くお勧めします。",
"Locale not working" : "ロケールが動作していません",
diff --git a/settings/l10n/ja.json b/settings/l10n/ja.json
index c628fdc6ff4..37048e345ac 100644
--- a/settings/l10n/ja.json
+++ b/settings/l10n/ja.json
@@ -108,8 +108,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite をデータベースとして利用しています。大規模な運用では、利用しないことをお勧めします。別のデータベースへ移行する場合は、コマンドラインツール: 'occ db:convert-type'を使ってください。",
"Module 'fileinfo' missing" : "モジュール 'fileinfo' が見つかりません",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP のモジュール 'fileinfo' が見つかりません。mimeタイプの検出を精度良く行うために、このモジュールを有効にすることを強くお勧めします。",
- "Your PHP version is outdated" : "PHPバーションが古くなっています。",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "PHPバーションが古くなっています。古いバージョンには既知の問題があるため、5.3.8以降のバージョンにアップデートすることを強く推奨します。このインストール状態では正常に動作しない可能性があります。",
"PHP charset is not set to UTF-8" : "PHP の文字コードは UTF-8 に設定されていません",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP の文字コードは UTF-8 に設定されていません。ファイル名に非アスキー文字が含まれる場合は、大きな問題となる可能性があります。php.ini の 'default_charset' の値を 'UTF-8' に変更することを強くお勧めします。",
"Locale not working" : "ロケールが動作していません",
diff --git a/settings/l10n/ko.js b/settings/l10n/ko.js
index 6d828ee47ec..e55c4c75dab 100644
--- a/settings/l10n/ko.js
+++ b/settings/l10n/ko.js
@@ -84,8 +84,6 @@ OC.L10N.register(
"Database Performance Info" : "데이터베이스 성능 정보",
"Module 'fileinfo' missing" : "모듈 'fileinfo'가 없음",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP 모듈 'fileinfo'가 존재하지 않습니다. MIME 형식 감지 결과를 향상시키기 위하여 이 모듈을 활성화하는 것을 추천합니다.",
- "Your PHP version is outdated" : "PHP 버전이 오래됨",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "PHP 버전이 오래되었습니다. 오래된 버전은 작동하지 않을 수도 있기 때문에 PHP 5.3.8 이상을 사용하는 것을 추천합니다.",
"Locale not working" : "로캘이 작동하지 않음",
"System locale can not be set to a one which supports UTF-8." : "UTF-8을 지원하는 시스템 로캘을 사용할 수 없습니다.",
"This means that there might be problems with certain characters in file names." : "파일 이름의 일부 문자에 문제가 생길 수도 있습니다.",
diff --git a/settings/l10n/ko.json b/settings/l10n/ko.json
index 121627253e2..2415c30316d 100644
--- a/settings/l10n/ko.json
+++ b/settings/l10n/ko.json
@@ -82,8 +82,6 @@
"Database Performance Info" : "데이터베이스 성능 정보",
"Module 'fileinfo' missing" : "모듈 'fileinfo'가 없음",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP 모듈 'fileinfo'가 존재하지 않습니다. MIME 형식 감지 결과를 향상시키기 위하여 이 모듈을 활성화하는 것을 추천합니다.",
- "Your PHP version is outdated" : "PHP 버전이 오래됨",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "PHP 버전이 오래되었습니다. 오래된 버전은 작동하지 않을 수도 있기 때문에 PHP 5.3.8 이상을 사용하는 것을 추천합니다.",
"Locale not working" : "로캘이 작동하지 않음",
"System locale can not be set to a one which supports UTF-8." : "UTF-8을 지원하는 시스템 로캘을 사용할 수 없습니다.",
"This means that there might be problems with certain characters in file names." : "파일 이름의 일부 문자에 문제가 생길 수도 있습니다.",
diff --git a/settings/l10n/mk.js b/settings/l10n/mk.js
index 57245605ae0..2f857a61b33 100644
--- a/settings/l10n/mk.js
+++ b/settings/l10n/mk.js
@@ -75,7 +75,6 @@ OC.L10N.register(
"Security Warning" : "Безбедносно предупредување",
"Setup Warning" : "Предупредување при подесување",
"Database Performance Info" : "Информација за перформансите на базата на податоци",
- "Your PHP version is outdated" : "Вашаа верзија на PHP е застарена",
"Locale not working" : "Локалето не функционира",
"Execute one task with each page loaded" : "Изврши по една задача со секоја вчитана страница",
"Allow apps to use the Share API" : "Дозволете апликациите да го користат API-то за споделување",
diff --git a/settings/l10n/mk.json b/settings/l10n/mk.json
index 4445c65d6ec..44cfb40a7b4 100644
--- a/settings/l10n/mk.json
+++ b/settings/l10n/mk.json
@@ -73,7 +73,6 @@
"Security Warning" : "Безбедносно предупредување",
"Setup Warning" : "Предупредување при подесување",
"Database Performance Info" : "Информација за перформансите на базата на податоци",
- "Your PHP version is outdated" : "Вашаа верзија на PHP е застарена",
"Locale not working" : "Локалето не функционира",
"Execute one task with each page loaded" : "Изврши по една задача со секоја вчитана страница",
"Allow apps to use the Share API" : "Дозволете апликациите да го користат API-то за споделување",
diff --git a/settings/l10n/nb_NO.js b/settings/l10n/nb_NO.js
index 1f27d37d7f9..cf73debd87d 100644
--- a/settings/l10n/nb_NO.js
+++ b/settings/l10n/nb_NO.js
@@ -104,8 +104,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite brukes som database. For større installasjoner anbefaler vi å endre dette. For å migrere til en annen database, bruk kommandolinjeverktøyet: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Modulen 'fileinfo' mangler",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modulen 'fileinfo' mangler. Vi anbefaler at du aktiverer denne modulen for å kunne detektere mime-typen korrekt.",
- "Your PHP version is outdated" : "Din PHP-versjon er udatert",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "PHP-versjonen din er utdatert. Vi anbefaler på det sterkeste at du oppdaterer til 5.3.8 eller nyere fordi eldre versjoner ikke vil virke. Det er mulig at denne installasjoner ikke fungerer korrekt.",
"PHP charset is not set to UTF-8" : "PHP-tegnsett er ikke satt til UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP-tegnsett er ikke satt til UTF-8. Dette kan forårsake store problemer med tegn som ikke er ASCII i filnavn. Vi anbefaler på det sterkeste å endre verdien av 'default_charset' i php.ini til 'UTF-8'.",
"Locale not working" : "Nasjonale innstillinger virker ikke",
diff --git a/settings/l10n/nb_NO.json b/settings/l10n/nb_NO.json
index bd43183da4a..0c4614c1cfa 100644
--- a/settings/l10n/nb_NO.json
+++ b/settings/l10n/nb_NO.json
@@ -102,8 +102,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite brukes som database. For større installasjoner anbefaler vi å endre dette. For å migrere til en annen database, bruk kommandolinjeverktøyet: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Modulen 'fileinfo' mangler",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modulen 'fileinfo' mangler. Vi anbefaler at du aktiverer denne modulen for å kunne detektere mime-typen korrekt.",
- "Your PHP version is outdated" : "Din PHP-versjon er udatert",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "PHP-versjonen din er utdatert. Vi anbefaler på det sterkeste at du oppdaterer til 5.3.8 eller nyere fordi eldre versjoner ikke vil virke. Det er mulig at denne installasjoner ikke fungerer korrekt.",
"PHP charset is not set to UTF-8" : "PHP-tegnsett er ikke satt til UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP-tegnsett er ikke satt til UTF-8. Dette kan forårsake store problemer med tegn som ikke er ASCII i filnavn. Vi anbefaler på det sterkeste å endre verdien av 'default_charset' i php.ini til 'UTF-8'.",
"Locale not working" : "Nasjonale innstillinger virker ikke",
diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js
index 8e38125bb43..ae5c35a3ee4 100644
--- a/settings/l10n/nl.js
+++ b/settings/l10n/nl.js
@@ -103,6 +103,8 @@ OC.L10N.register(
"Security Warning" : "Beveiligingswaarschuwing",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "U bent met %s verbonden over HTTP. We adviseren met klem uw server zo te configureren dat alleen HTTPS kan worden gebruikt.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Uw data folder en uw bestanden zijn waarschijnlijk vanaf het internet bereikbaar. Het .htaccess-bestand werkt niet. We raden ten zeerste aan aan om uw webserver zodanig te configureren, dat de datamap niet bereikbaar is vanaf het internet of om uw datamap te verplaatsen naar een locatie buiten de document root van de webserver.",
+ "Read-Only config enabled" : "Alleen-lezen config geactiveerd",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "De Alleen-lezen config is geactiveerd. Dit voorkomt het via de webinterface wijzigen van verschillende instellingen. Bovendien moet het bestand voor elke aanpassing handmatig op beschrijfbaar worden ingesteld.",
"Setup Warning" : "Instellingswaarschuwing",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is blijkbaar zo ingesteld dat inline doc blokken worden gestript. Hierdoor worden verschillende kernmodules onbruikbaar.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dit wordt vermoedelijk veroorzaakt door een cache/accelerator, zoals Zend OPcache of eAccelerator.",
@@ -110,8 +112,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite wordt gebruikt als database. Voor grotere installaties adviseren we dit aan te passen. Om te migreren naar een andere database moet u deze commandoregel tool gebruiken: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Module 'fileinfo' ontbreekt",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "De PHP module 'fileinfo' ontbreekt. We adviseren met klem om deze module te activeren om de beste resultaten te bereiken voor mime-type detectie.",
- "Your PHP version is outdated" : "Uw PHP versie is verouderd",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Uw PHP versie is verouderd. We adviseren met klem om bij te werken naar versie 5.3.8 of later, omdat oudere versies corrupt kunnen zijn. Het is mogelijk dat deze installatie niet goed werkt.",
"PHP charset is not set to UTF-8" : "PHP characterset is niet ingesteld op UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP characterset is niet ingesteld op UTF-8. Dit kan flinke problemen opleveren met niet-ASCII tekens in bestandsnamen. We adviseren om de waarde van 'default_charset' in php.ini te wijzigen in 'UTF-8'.",
"Locale not working" : "Taalbestand werkt niet",
diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json
index 8d5ef3d25e3..0be78a7c4d4 100644
--- a/settings/l10n/nl.json
+++ b/settings/l10n/nl.json
@@ -101,6 +101,8 @@
"Security Warning" : "Beveiligingswaarschuwing",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "U bent met %s verbonden over HTTP. We adviseren met klem uw server zo te configureren dat alleen HTTPS kan worden gebruikt.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Uw data folder en uw bestanden zijn waarschijnlijk vanaf het internet bereikbaar. Het .htaccess-bestand werkt niet. We raden ten zeerste aan aan om uw webserver zodanig te configureren, dat de datamap niet bereikbaar is vanaf het internet of om uw datamap te verplaatsen naar een locatie buiten de document root van de webserver.",
+ "Read-Only config enabled" : "Alleen-lezen config geactiveerd",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "De Alleen-lezen config is geactiveerd. Dit voorkomt het via de webinterface wijzigen van verschillende instellingen. Bovendien moet het bestand voor elke aanpassing handmatig op beschrijfbaar worden ingesteld.",
"Setup Warning" : "Instellingswaarschuwing",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is blijkbaar zo ingesteld dat inline doc blokken worden gestript. Hierdoor worden verschillende kernmodules onbruikbaar.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dit wordt vermoedelijk veroorzaakt door een cache/accelerator, zoals Zend OPcache of eAccelerator.",
@@ -108,8 +110,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite wordt gebruikt als database. Voor grotere installaties adviseren we dit aan te passen. Om te migreren naar een andere database moet u deze commandoregel tool gebruiken: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Module 'fileinfo' ontbreekt",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "De PHP module 'fileinfo' ontbreekt. We adviseren met klem om deze module te activeren om de beste resultaten te bereiken voor mime-type detectie.",
- "Your PHP version is outdated" : "Uw PHP versie is verouderd",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Uw PHP versie is verouderd. We adviseren met klem om bij te werken naar versie 5.3.8 of later, omdat oudere versies corrupt kunnen zijn. Het is mogelijk dat deze installatie niet goed werkt.",
"PHP charset is not set to UTF-8" : "PHP characterset is niet ingesteld op UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP characterset is niet ingesteld op UTF-8. Dit kan flinke problemen opleveren met niet-ASCII tekens in bestandsnamen. We adviseren om de waarde van 'default_charset' in php.ini te wijzigen in 'UTF-8'.",
"Locale not working" : "Taalbestand werkt niet",
diff --git a/settings/l10n/pl.js b/settings/l10n/pl.js
index 4206c0eb587..b1f268c1373 100644
--- a/settings/l10n/pl.js
+++ b/settings/l10n/pl.js
@@ -109,8 +109,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Jako baza danych został użyty SQLite. Dla większych instalacji doradzamy zmianę na inną. Aby zmigrować do innej bazy danych, użyj narzędzia linii poleceń: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Brak modułu „fileinfo”",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Brak modułu PHP „fileinfo”. Zalecamy włączenie tego modułu, aby uzyskać najlepsze wyniki podczas wykrywania typów MIME.",
- "Your PHP version is outdated" : "Twoja wersja PHP jest za stara",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Twoja wersja PHP jest za stara. Rekomendujemy przynajmniej wersje 5.3.8. Jeśli masz starsza wersję ownCloud może nie działać poprawnie.",
"PHP charset is not set to UTF-8" : "Kodowanie PHP nie jest ustawione na UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Zestaw znaków PHP nie jest ustawiony na UTF-8. Może to spowodować poważne problemy ze znakami non-ASCII w nazwach plików. Gorąco doradzamy zmianę wartości 'default_charset' w php.ini na 'UTF-8'.",
"Locale not working" : "Lokalizacja nie działa",
diff --git a/settings/l10n/pl.json b/settings/l10n/pl.json
index e4761e4ba47..3e2c17d3140 100644
--- a/settings/l10n/pl.json
+++ b/settings/l10n/pl.json
@@ -107,8 +107,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Jako baza danych został użyty SQLite. Dla większych instalacji doradzamy zmianę na inną. Aby zmigrować do innej bazy danych, użyj narzędzia linii poleceń: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Brak modułu „fileinfo”",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Brak modułu PHP „fileinfo”. Zalecamy włączenie tego modułu, aby uzyskać najlepsze wyniki podczas wykrywania typów MIME.",
- "Your PHP version is outdated" : "Twoja wersja PHP jest za stara",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Twoja wersja PHP jest za stara. Rekomendujemy przynajmniej wersje 5.3.8. Jeśli masz starsza wersję ownCloud może nie działać poprawnie.",
"PHP charset is not set to UTF-8" : "Kodowanie PHP nie jest ustawione na UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Zestaw znaków PHP nie jest ustawiony na UTF-8. Może to spowodować poważne problemy ze znakami non-ASCII w nazwach plików. Gorąco doradzamy zmianę wartości 'default_charset' w php.ini na 'UTF-8'.",
"Locale not working" : "Lokalizacja nie działa",
diff --git a/settings/l10n/pt_BR.js b/settings/l10n/pt_BR.js
index 1d280fa1439..021626539e0 100644
--- a/settings/l10n/pt_BR.js
+++ b/settings/l10n/pt_BR.js
@@ -103,6 +103,8 @@ OC.L10N.register(
"Security Warning" : "Aviso de Segurança",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Você está acessando %s via HTTP. Sugerimos você configurar o servidor para exigir o uso de HTTPS em seu lugar.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Seu diretório de dados e seus arquivos são, provavelmente, acessíveis a partir da internet. O arquivo htaccess. não está funcionando. Nós sugerimos fortemente que você configure o seu servidor web de uma forma que o diretório de dados não esteja mais acessível ou mova o diretório de dados para fora do raiz do servidor.",
+ "Read-Only config enabled" : "Somente-Leitura configuração ativada",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "A configuração Somente-Leitura foi habilitada. Isso impede que algumas configurações sejam definidas via a interface web. Além disso, o arquivo precisa ter permissão de escrita manual para cada atualização.",
"Setup Warning" : "Aviso de Configuração",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP é, aparentemente, a configuração para retirar blocos doc inline. Isso fará com que vários aplicativos do núcleo fiquem inacessíveis.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isso provavelmente é causado por uma cache/acelerador, como Zend OPcache ou eAccelerator.",
@@ -110,8 +112,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite é usada como base de dados. Para grandes instalações recomendamos mudar isso. Para migrar para outro banco de dados usar a ferramenta de linha de comando: 'occ db: converter-type'",
"Module 'fileinfo' missing" : "Módulo 'fileinfo' faltando",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "O módulo PHP 'fileinfo' está faltando. Recomendamos que ative este módulo para obter uma melhor detecção do tipo de mídia (mime-type).",
- "Your PHP version is outdated" : "Sua versão de PHP está desatualizada",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "A sua versão do PHP está desatualizada. Recomendamos a atualização para 5.3.8 ou mais recente, pois as versões mais antigas são conhecidas por serem quebradas. É possível que esta instalação não esteja funcionando corretamente.",
"PHP charset is not set to UTF-8" : "A configuração de caracteres no PHP não está definida para UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "A configuração de caracteres para o PHP não está definida para UTF-8. Isto pode causar problemas com caracteres não-ASCII em nomes de arquivos. Nós fortemente recomendamos a troca da definição de caracteres de 'default_charset' no arquivo de configuração php.ini para 'UTF-8'.",
"Locale not working" : "Localização não funcionando",
diff --git a/settings/l10n/pt_BR.json b/settings/l10n/pt_BR.json
index 3746bb162dc..22721edab05 100644
--- a/settings/l10n/pt_BR.json
+++ b/settings/l10n/pt_BR.json
@@ -101,6 +101,8 @@
"Security Warning" : "Aviso de Segurança",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Você está acessando %s via HTTP. Sugerimos você configurar o servidor para exigir o uso de HTTPS em seu lugar.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Seu diretório de dados e seus arquivos são, provavelmente, acessíveis a partir da internet. O arquivo htaccess. não está funcionando. Nós sugerimos fortemente que você configure o seu servidor web de uma forma que o diretório de dados não esteja mais acessível ou mova o diretório de dados para fora do raiz do servidor.",
+ "Read-Only config enabled" : "Somente-Leitura configuração ativada",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "A configuração Somente-Leitura foi habilitada. Isso impede que algumas configurações sejam definidas via a interface web. Além disso, o arquivo precisa ter permissão de escrita manual para cada atualização.",
"Setup Warning" : "Aviso de Configuração",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP é, aparentemente, a configuração para retirar blocos doc inline. Isso fará com que vários aplicativos do núcleo fiquem inacessíveis.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isso provavelmente é causado por uma cache/acelerador, como Zend OPcache ou eAccelerator.",
@@ -108,8 +110,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite é usada como base de dados. Para grandes instalações recomendamos mudar isso. Para migrar para outro banco de dados usar a ferramenta de linha de comando: 'occ db: converter-type'",
"Module 'fileinfo' missing" : "Módulo 'fileinfo' faltando",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "O módulo PHP 'fileinfo' está faltando. Recomendamos que ative este módulo para obter uma melhor detecção do tipo de mídia (mime-type).",
- "Your PHP version is outdated" : "Sua versão de PHP está desatualizada",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "A sua versão do PHP está desatualizada. Recomendamos a atualização para 5.3.8 ou mais recente, pois as versões mais antigas são conhecidas por serem quebradas. É possível que esta instalação não esteja funcionando corretamente.",
"PHP charset is not set to UTF-8" : "A configuração de caracteres no PHP não está definida para UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "A configuração de caracteres para o PHP não está definida para UTF-8. Isto pode causar problemas com caracteres não-ASCII em nomes de arquivos. Nós fortemente recomendamos a troca da definição de caracteres de 'default_charset' no arquivo de configuração php.ini para 'UTF-8'.",
"Locale not working" : "Localização não funcionando",
diff --git a/settings/l10n/pt_PT.js b/settings/l10n/pt_PT.js
index cf82312e466..93fad6a87be 100644
--- a/settings/l10n/pt_PT.js
+++ b/settings/l10n/pt_PT.js
@@ -15,79 +15,79 @@ OC.L10N.register(
"Files decrypted successfully" : "Ficheiros desencriptados com sucesso",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Não foi possível descodificar os seus ficheiros. Por favor, verifique a sua owncloud.log ou pergunte ao seu administrador",
"Couldn't decrypt your files, check your password and try again" : "Não foi possível descodificar os seus ficheiros. Por favor, verifique a sua palavra-passe e tente novamente",
- "Encryption keys deleted permanently" : "A chave de encriptação foi eliminada permanentemente",
- "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Não foi possível excluir permanentemente a sua chave de encriptação. Verifique a sua owncloud.log ou pergunte ao seu administrador",
+ "Encryption keys deleted permanently" : "As chaves de encriptação foram eliminadas para sempre",
+ "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Não foi possível apagar as suas chaves de encriptação. Por favor, verifique a sua owncloud.log ou pergunte ao seu administrador",
"Couldn't remove app." : "Não foi possível remover a aplicação.",
"Email saved" : "E-mail guardado",
"Invalid email" : "e-mail inválido",
"Unable to delete group" : "Não é possível apagar o grupo",
"Unable to delete user" : "Não é possível apagar o utilizador",
- "Backups restored successfully" : "Cópias de segurança foram restauradas com sucesso",
- "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nao foi possivel restaurar as suas chaves de encriptacao. Verifique a sua owncloud.log ou pergunte ao seu administrador",
+ "Backups restored successfully" : "Cópias de segurança restauradas com sucesso",
+ "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Não foi possivel restaurar as suas chaves de encriptacao. Por favor, verifique a sua owncloud.log ou pergunte ao seu administrador",
"Language changed" : "Idioma alterado",
"Invalid request" : "Pedido Inválido",
"Admins can't remove themself from the admin group" : "Os administradores não se podem remover a eles próprios do grupo 'admin'.",
- "Unable to add user to group %s" : "Impossível acrescentar utilizador ao grupo %s",
- "Unable to remove user from group %s" : "Impossível apagar utilizador do grupo %s",
- "Couldn't update app." : "Não foi possível actualizar a aplicação.",
+ "Unable to add user to group %s" : "Não é possível adicionar o utilizador ao grupo %s",
+ "Unable to remove user from group %s" : "Não é possível remover o utilizador do grupo %s",
+ "Couldn't update app." : "Não foi possível atualizar a app.",
"Wrong password" : "Palavra-passe errada",
- "No user supplied" : "Nenhum utilizador especificado.",
+ "No user supplied" : "Nenhum utilizador especificado",
"Please provide an admin recovery password, otherwise all user data will be lost" : "Por favor, forneça uma palavra-passe de recuperação de administrador, caso contrário seráo perdidos todos os dados",
"Wrong admin recovery password. Please check the password and try again." : "Palavra-passe de recuperação de administrador errada. Por favor, verifique a palavra-passe e tente novamente.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." : "Não foi possível alterar a sua palavra-passe, mas a chave de codificação foi atualizada com sucesso.",
"Unable to change password" : "Não foi possível alterar a sua palavra-passe ",
"Enabled" : "Ativada",
- "Not enabled" : "Desactivado",
+ "Not enabled" : "Desativada",
"Recommended" : "Recomendado",
"Saved" : "Guardado",
"test email settings" : "testar as definições de e-mail",
- "If you received this email, the settings seem to be correct." : "Se você recebeu este e-mail as configurações parecem estar correctas",
- "A problem occurred while sending the email. Please revise your settings." : "Um problema ocorreu ao enviar o email. Por favor verifique as suas definições.",
- "Email sent" : "E-mail enviado",
+ "If you received this email, the settings seem to be correct." : "Se recebeu este e-mail, as configurações parecem estar corretas",
+ "A problem occurred while sending the email. Please revise your settings." : "Ocorreu um problema durante o envio do e-mail. Por favor, verifique as suas configurações..",
+ "Email sent" : "Mensagem enviada",
"You need to set your user email before being able to send test emails." : "Você precisa de configurar o seu e-mail de usuário antes de ser capaz de enviar e-mails de teste",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Você tem certeza que quer adicionar \"{domain}\" como domínio confiável?",
"Add trusted domain" : "Adicionar domínio confiável ",
- "Sending..." : "A enviar ...",
+ "Sending..." : "A enviar...",
"All" : "Todos",
- "Please wait...." : "Por favor aguarde...",
- "Error while disabling app" : "Ocorreu um erro enquanto desativava a aplicação",
+ "Please wait...." : "Por favor, aguarde...",
+ "Error while disabling app" : "Ocorreu um erro enquanto desativava a app",
"Disable" : "Desativar",
"Enable" : "Ativar",
- "Error while enabling app" : "Ocorreu um erro enquanto ativava a aplicação",
- "Updating...." : "A Actualizar...",
- "Error while updating app" : "Ocorreu um erro enquanto atualizava a aplicação",
- "Updated" : "Actualizado",
- "Uninstalling ...." : "A desinstalar ....",
- "Error while uninstalling app" : "Erro durante a desinstalação da aplicação",
+ "Error while enabling app" : "Ocorreu um erro enquanto ativava a app",
+ "Updating...." : "A atualizar...",
+ "Error while updating app" : "Ocorreu um erro enquanto atualizava a app",
+ "Updated" : "Atualizada",
+ "Uninstalling ...." : "A desinstalar....",
+ "Error while uninstalling app" : "Ocorreu um erro durante a desinstalação da app",
"Uninstall" : "Desinstalar",
- "Select a profile picture" : "Seleccione uma fotografia de perfil",
+ "Select a profile picture" : "Selecione uma fotografia de perfil",
"Very weak password" : "Palavra-passe muito fraca",
"Weak password" : "Palavra-passe fraca",
"So-so password" : "Palavra-passe aceitável",
"Good password" : "Palavra-passe boa",
"Strong password" : "Palavra-passe forte",
- "Valid until {date}" : "Válido até {date}",
+ "Valid until {date}" : "Válida até {date}",
"Delete" : "Apagar",
- "Decrypting files... Please wait, this can take some time." : "A desencriptar os ficheiros... Por favor aguarde, esta operação pode demorar algum tempo.",
- "Delete encryption keys permanently." : "Excluir as chaves encriptadas de forma permanente.",
- "Restore encryption keys." : "Restaurar chaves encriptadas.",
+ "Decrypting files... Please wait, this can take some time." : "A descodificar os ficheiros... Por favor, aguarde, esta operação pode demorar algum tempo.",
+ "Delete encryption keys permanently." : "Apagar as chaves encriptadas para sempre.",
+ "Restore encryption keys." : "Restaurar as chaves encriptadas.",
"Groups" : "Grupos",
- "Unable to delete {objName}" : "Impossível apagar {objNome}",
- "Error creating group" : "Erro ao criar grupo",
- "A valid group name must be provided" : "Um nome válido do grupo tem de ser fornecido",
+ "Unable to delete {objName}" : "Não é possível apagar {objNome}",
+ "Error creating group" : "Ocorreu um erro ao criar o grupo",
+ "A valid group name must be provided" : "Deve ser indicado um nome de grupo válido",
"deleted {groupName}" : "{groupName} apagado",
"undo" : "Anular",
"no group" : "sem grupo",
"never" : "nunca",
"deleted {userName}" : "{userName} apagado",
"add group" : "Adicionar grupo",
- "A valid username must be provided" : "Um nome de utilizador válido deve ser fornecido",
- "Error creating user" : "Erro a criar utilizador",
- "A valid password must be provided" : "Deve ser fornecida uma palavra-passe válida",
- "Warning: Home directory for user \"{user}\" already exists" : "Atenção: a pasta pessoal do utilizador \"{user}\" já existe",
+ "A valid username must be provided" : "Deve ser indicado um nome de utilizador válido",
+ "Error creating user" : "Ocorreu um erro ao criar o utilizador",
+ "A valid password must be provided" : "Deve ser indicada uma palavra-passe válida",
+ "Warning: Home directory for user \"{user}\" already exists" : "Atenção: A pasta pessoal do utilizador \"{user}\" já existe",
"__language_name__" : "__language_name__",
"Personal Info" : "Informação Pessoal",
- "SSL root certificates" : "Certificados SSL de raiz",
+ "SSL root certificates" : "Certificados de raiz SSL",
"Encryption" : "Encriptação",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (problemas fatais, erros, avisos, informação, depuração)",
"Info, warnings, errors and fatal issues" : "Informação, avisos, erros e problemas fatais",
@@ -101,22 +101,23 @@ OC.L10N.register(
"SSL" : "SSL",
"TLS" : "TLS",
"Security Warning" : "Aviso de Segurança",
- "You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está a aceder %s via HTTP. Recomendamos vivamente que configure o servidor para forçar o uso de HTTPS.",
- "Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "A sua pasta com os dados e os seus ficheiros estão provavelmente acessíveis a partir das internet. O seu ficheiro .htaccess não está a funcionar corretamente. Sugerimos veementemente que configure o seu servidor web de maneira a que a pasta com os dados deixe de ficar acessível, ou mova a pasta com os dados para fora da raiz de documentos do servidor web.",
- "Setup Warning" : "Aviso de setup",
+ "You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está a aceder a %s via HTTP. Nós recomendamos vivamente que configure o seu servidor para requerer a utilização de HTTPS.",
+ "Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "A sua pasta dos dados e os seus ficheiros estão provavelmente acessíveis a partir da Internet. O ficheiro .htaccess não está a funcionar corretamente. Nós sugerimos fortemente que configure o seu servidor da Web de maneira a que a pasta dos dados deixe de ficar acessível, ou mova-a para fora da diretoria raiz dos documentos do servidor da Web.",
+ "Read-Only config enabled" : "Configuração Só-de-Leitura ativada",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "A configuração Só-de-Leitura foi ativada. Isto evita definir algumas configurações através da interface da Web. Além disso, o ficheiro precisa de ser definido gravável manualmente para cada atualização.",
+ "Setup Warning" : "Aviso de Configuração",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP está aparentemente configurado a remover blocos doc em linha. Isto vai fazer algumas aplicações basicas inacessíveis.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isto é provavelmente causado por uma cache/acelerador como o Zend OPcache or eAcelerador.",
- "Database Performance Info" : "Informação sobre desempenho da Base de Dados",
+ "Database Performance Info" : "Informação do Desempenho da Base de Dados",
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite é usado como base de dados. Para grandes instalações nós recomendamos a alterar isso. Para mudar para outra base de dados use o comando de linha: 'occ db:convert-type'",
- "Module 'fileinfo' missing" : "Falta o módulo 'fileinfo'",
+ "Module 'fileinfo' missing" : "Módulo 'fileinfo' em falta",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "O Módulo PHP 'fileinfo' não se encontra instalado/activado. É fortemente recomendado que active este módulo para obter os melhores resultado com a detecção dos tipos de mime.",
- "Your PHP version is outdated" : "A sua versão do PHP está ultrapassada",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "A sua versão do PHP está ultrapassada. Recomendamos que actualize para a versão 5.3.8 ou mais recente, devido às versões anteriores conterem problemas. É também possível que esta instalação não esteja a funcionar correctamente.",
- "PHP charset is not set to UTF-8" : "PHP charset não está definido para UTF-8",
+ "PHP charset is not set to UTF-8" : "O conjunto de carateres PHP não está definido para UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP charset não está definido como UTF-8. Isso pode causar grandes problemas com caracteres não-ASCII em nomes de arquivo. Recomendamos para alterar o valor de php.ini 'default_charset' para 'UTF-8'.",
- "Locale not working" : "Internacionalização não está a funcionar",
- "System locale can not be set to a one which supports UTF-8." : "Não é possível pôr as definições de sistema compatíveis com UTF-8.",
+ "Locale not working" : "A internacionalização não está a funcionar",
+ "System locale can not be set to a one which supports UTF-8." : "Não é possível definir a internacionalização do sistema para um que suporte o UTF-8.",
"This means that there might be problems with certain characters in file names." : "Isto significa que podem haver problemas com alguns caracteres nos nomes dos ficheiros.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Nós recomendamos fortemente que instale no seu sistema os pacotes necessários para suportar uma das seguintes locallidades: %s.",
"URL generation in notification emails" : "Geração URL em e-mails de notificação",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se a sua instalação não está instalada na raiz do domínio e usa o sistema cron, pode haver problemas com a geração de URL. Para evitar esses problemas, por favor, defina a opção \"overwritewebroot\" no ficheiro config.php para o caminho webroot da sua instalação (sugestão: \"%s\")",
"Connectivity Checks" : "Verificações de Conetividade",
diff --git a/settings/l10n/pt_PT.json b/settings/l10n/pt_PT.json
index b0b3984a956..d46aabb68b0 100644
--- a/settings/l10n/pt_PT.json
+++ b/settings/l10n/pt_PT.json
@@ -13,79 +13,79 @@
"Files decrypted successfully" : "Ficheiros desencriptados com sucesso",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Não foi possível descodificar os seus ficheiros. Por favor, verifique a sua owncloud.log ou pergunte ao seu administrador",
"Couldn't decrypt your files, check your password and try again" : "Não foi possível descodificar os seus ficheiros. Por favor, verifique a sua palavra-passe e tente novamente",
- "Encryption keys deleted permanently" : "A chave de encriptação foi eliminada permanentemente",
- "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Não foi possível excluir permanentemente a sua chave de encriptação. Verifique a sua owncloud.log ou pergunte ao seu administrador",
+ "Encryption keys deleted permanently" : "As chaves de encriptação foram eliminadas para sempre",
+ "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Não foi possível apagar as suas chaves de encriptação. Por favor, verifique a sua owncloud.log ou pergunte ao seu administrador",
"Couldn't remove app." : "Não foi possível remover a aplicação.",
"Email saved" : "E-mail guardado",
"Invalid email" : "e-mail inválido",
"Unable to delete group" : "Não é possível apagar o grupo",
"Unable to delete user" : "Não é possível apagar o utilizador",
- "Backups restored successfully" : "Cópias de segurança foram restauradas com sucesso",
- "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nao foi possivel restaurar as suas chaves de encriptacao. Verifique a sua owncloud.log ou pergunte ao seu administrador",
+ "Backups restored successfully" : "Cópias de segurança restauradas com sucesso",
+ "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Não foi possivel restaurar as suas chaves de encriptacao. Por favor, verifique a sua owncloud.log ou pergunte ao seu administrador",
"Language changed" : "Idioma alterado",
"Invalid request" : "Pedido Inválido",
"Admins can't remove themself from the admin group" : "Os administradores não se podem remover a eles próprios do grupo 'admin'.",
- "Unable to add user to group %s" : "Impossível acrescentar utilizador ao grupo %s",
- "Unable to remove user from group %s" : "Impossível apagar utilizador do grupo %s",
- "Couldn't update app." : "Não foi possível actualizar a aplicação.",
+ "Unable to add user to group %s" : "Não é possível adicionar o utilizador ao grupo %s",
+ "Unable to remove user from group %s" : "Não é possível remover o utilizador do grupo %s",
+ "Couldn't update app." : "Não foi possível atualizar a app.",
"Wrong password" : "Palavra-passe errada",
- "No user supplied" : "Nenhum utilizador especificado.",
+ "No user supplied" : "Nenhum utilizador especificado",
"Please provide an admin recovery password, otherwise all user data will be lost" : "Por favor, forneça uma palavra-passe de recuperação de administrador, caso contrário seráo perdidos todos os dados",
"Wrong admin recovery password. Please check the password and try again." : "Palavra-passe de recuperação de administrador errada. Por favor, verifique a palavra-passe e tente novamente.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." : "Não foi possível alterar a sua palavra-passe, mas a chave de codificação foi atualizada com sucesso.",
"Unable to change password" : "Não foi possível alterar a sua palavra-passe ",
"Enabled" : "Ativada",
- "Not enabled" : "Desactivado",
+ "Not enabled" : "Desativada",
"Recommended" : "Recomendado",
"Saved" : "Guardado",
"test email settings" : "testar as definições de e-mail",
- "If you received this email, the settings seem to be correct." : "Se você recebeu este e-mail as configurações parecem estar correctas",
- "A problem occurred while sending the email. Please revise your settings." : "Um problema ocorreu ao enviar o email. Por favor verifique as suas definições.",
- "Email sent" : "E-mail enviado",
+ "If you received this email, the settings seem to be correct." : "Se recebeu este e-mail, as configurações parecem estar corretas",
+ "A problem occurred while sending the email. Please revise your settings." : "Ocorreu um problema durante o envio do e-mail. Por favor, verifique as suas configurações..",
+ "Email sent" : "Mensagem enviada",
"You need to set your user email before being able to send test emails." : "Você precisa de configurar o seu e-mail de usuário antes de ser capaz de enviar e-mails de teste",
"Are you really sure you want add \"{domain}\" as trusted domain?" : "Você tem certeza que quer adicionar \"{domain}\" como domínio confiável?",
"Add trusted domain" : "Adicionar domínio confiável ",
- "Sending..." : "A enviar ...",
+ "Sending..." : "A enviar...",
"All" : "Todos",
- "Please wait...." : "Por favor aguarde...",
- "Error while disabling app" : "Ocorreu um erro enquanto desativava a aplicação",
+ "Please wait...." : "Por favor, aguarde...",
+ "Error while disabling app" : "Ocorreu um erro enquanto desativava a app",
"Disable" : "Desativar",
"Enable" : "Ativar",
- "Error while enabling app" : "Ocorreu um erro enquanto ativava a aplicação",
- "Updating...." : "A Actualizar...",
- "Error while updating app" : "Ocorreu um erro enquanto atualizava a aplicação",
- "Updated" : "Actualizado",
- "Uninstalling ...." : "A desinstalar ....",
- "Error while uninstalling app" : "Erro durante a desinstalação da aplicação",
+ "Error while enabling app" : "Ocorreu um erro enquanto ativava a app",
+ "Updating...." : "A atualizar...",
+ "Error while updating app" : "Ocorreu um erro enquanto atualizava a app",
+ "Updated" : "Atualizada",
+ "Uninstalling ...." : "A desinstalar....",
+ "Error while uninstalling app" : "Ocorreu um erro durante a desinstalação da app",
"Uninstall" : "Desinstalar",
- "Select a profile picture" : "Seleccione uma fotografia de perfil",
+ "Select a profile picture" : "Selecione uma fotografia de perfil",
"Very weak password" : "Palavra-passe muito fraca",
"Weak password" : "Palavra-passe fraca",
"So-so password" : "Palavra-passe aceitável",
"Good password" : "Palavra-passe boa",
"Strong password" : "Palavra-passe forte",
- "Valid until {date}" : "Válido até {date}",
+ "Valid until {date}" : "Válida até {date}",
"Delete" : "Apagar",
- "Decrypting files... Please wait, this can take some time." : "A desencriptar os ficheiros... Por favor aguarde, esta operação pode demorar algum tempo.",
- "Delete encryption keys permanently." : "Excluir as chaves encriptadas de forma permanente.",
- "Restore encryption keys." : "Restaurar chaves encriptadas.",
+ "Decrypting files... Please wait, this can take some time." : "A descodificar os ficheiros... Por favor, aguarde, esta operação pode demorar algum tempo.",
+ "Delete encryption keys permanently." : "Apagar as chaves encriptadas para sempre.",
+ "Restore encryption keys." : "Restaurar as chaves encriptadas.",
"Groups" : "Grupos",
- "Unable to delete {objName}" : "Impossível apagar {objNome}",
- "Error creating group" : "Erro ao criar grupo",
- "A valid group name must be provided" : "Um nome válido do grupo tem de ser fornecido",
+ "Unable to delete {objName}" : "Não é possível apagar {objNome}",
+ "Error creating group" : "Ocorreu um erro ao criar o grupo",
+ "A valid group name must be provided" : "Deve ser indicado um nome de grupo válido",
"deleted {groupName}" : "{groupName} apagado",
"undo" : "Anular",
"no group" : "sem grupo",
"never" : "nunca",
"deleted {userName}" : "{userName} apagado",
"add group" : "Adicionar grupo",
- "A valid username must be provided" : "Um nome de utilizador válido deve ser fornecido",
- "Error creating user" : "Erro a criar utilizador",
- "A valid password must be provided" : "Deve ser fornecida uma palavra-passe válida",
- "Warning: Home directory for user \"{user}\" already exists" : "Atenção: a pasta pessoal do utilizador \"{user}\" já existe",
+ "A valid username must be provided" : "Deve ser indicado um nome de utilizador válido",
+ "Error creating user" : "Ocorreu um erro ao criar o utilizador",
+ "A valid password must be provided" : "Deve ser indicada uma palavra-passe válida",
+ "Warning: Home directory for user \"{user}\" already exists" : "Atenção: A pasta pessoal do utilizador \"{user}\" já existe",
"__language_name__" : "__language_name__",
"Personal Info" : "Informação Pessoal",
- "SSL root certificates" : "Certificados SSL de raiz",
+ "SSL root certificates" : "Certificados de raiz SSL",
"Encryption" : "Encriptação",
"Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (problemas fatais, erros, avisos, informação, depuração)",
"Info, warnings, errors and fatal issues" : "Informação, avisos, erros e problemas fatais",
@@ -99,22 +99,23 @@
"SSL" : "SSL",
"TLS" : "TLS",
"Security Warning" : "Aviso de Segurança",
- "You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está a aceder %s via HTTP. Recomendamos vivamente que configure o servidor para forçar o uso de HTTPS.",
- "Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "A sua pasta com os dados e os seus ficheiros estão provavelmente acessíveis a partir das internet. O seu ficheiro .htaccess não está a funcionar corretamente. Sugerimos veementemente que configure o seu servidor web de maneira a que a pasta com os dados deixe de ficar acessível, ou mova a pasta com os dados para fora da raiz de documentos do servidor web.",
- "Setup Warning" : "Aviso de setup",
+ "You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está a aceder a %s via HTTP. Nós recomendamos vivamente que configure o seu servidor para requerer a utilização de HTTPS.",
+ "Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "A sua pasta dos dados e os seus ficheiros estão provavelmente acessíveis a partir da Internet. O ficheiro .htaccess não está a funcionar corretamente. Nós sugerimos fortemente que configure o seu servidor da Web de maneira a que a pasta dos dados deixe de ficar acessível, ou mova-a para fora da diretoria raiz dos documentos do servidor da Web.",
+ "Read-Only config enabled" : "Configuração Só-de-Leitura ativada",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "A configuração Só-de-Leitura foi ativada. Isto evita definir algumas configurações através da interface da Web. Além disso, o ficheiro precisa de ser definido gravável manualmente para cada atualização.",
+ "Setup Warning" : "Aviso de Configuração",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP está aparentemente configurado a remover blocos doc em linha. Isto vai fazer algumas aplicações basicas inacessíveis.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isto é provavelmente causado por uma cache/acelerador como o Zend OPcache or eAcelerador.",
- "Database Performance Info" : "Informação sobre desempenho da Base de Dados",
+ "Database Performance Info" : "Informação do Desempenho da Base de Dados",
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite é usado como base de dados. Para grandes instalações nós recomendamos a alterar isso. Para mudar para outra base de dados use o comando de linha: 'occ db:convert-type'",
- "Module 'fileinfo' missing" : "Falta o módulo 'fileinfo'",
+ "Module 'fileinfo' missing" : "Módulo 'fileinfo' em falta",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "O Módulo PHP 'fileinfo' não se encontra instalado/activado. É fortemente recomendado que active este módulo para obter os melhores resultado com a detecção dos tipos de mime.",
- "Your PHP version is outdated" : "A sua versão do PHP está ultrapassada",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "A sua versão do PHP está ultrapassada. Recomendamos que actualize para a versão 5.3.8 ou mais recente, devido às versões anteriores conterem problemas. É também possível que esta instalação não esteja a funcionar correctamente.",
- "PHP charset is not set to UTF-8" : "PHP charset não está definido para UTF-8",
+ "PHP charset is not set to UTF-8" : "O conjunto de carateres PHP não está definido para UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP charset não está definido como UTF-8. Isso pode causar grandes problemas com caracteres não-ASCII em nomes de arquivo. Recomendamos para alterar o valor de php.ini 'default_charset' para 'UTF-8'.",
- "Locale not working" : "Internacionalização não está a funcionar",
- "System locale can not be set to a one which supports UTF-8." : "Não é possível pôr as definições de sistema compatíveis com UTF-8.",
+ "Locale not working" : "A internacionalização não está a funcionar",
+ "System locale can not be set to a one which supports UTF-8." : "Não é possível definir a internacionalização do sistema para um que suporte o UTF-8.",
"This means that there might be problems with certain characters in file names." : "Isto significa que podem haver problemas com alguns caracteres nos nomes dos ficheiros.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Nós recomendamos fortemente que instale no seu sistema os pacotes necessários para suportar uma das seguintes locallidades: %s.",
"URL generation in notification emails" : "Geração URL em e-mails de notificação",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se a sua instalação não está instalada na raiz do domínio e usa o sistema cron, pode haver problemas com a geração de URL. Para evitar esses problemas, por favor, defina a opção \"overwritewebroot\" no ficheiro config.php para o caminho webroot da sua instalação (sugestão: \"%s\")",
"Connectivity Checks" : "Verificações de Conetividade",
diff --git a/settings/l10n/ro.js b/settings/l10n/ro.js
index 122c53f2737..84b1e8d202e 100644
--- a/settings/l10n/ro.js
+++ b/settings/l10n/ro.js
@@ -68,7 +68,6 @@ OC.L10N.register(
"Setup Warning" : "Atenţie la implementare",
"Module 'fileinfo' missing" : "Modulul \"Fileinfo\" lipsește",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Modulul PHP \"Fileinfo\" lipsește. Va recomandam sa activaţi acest modul pentru a obține cele mai bune rezultate cu detectarea mime-type.",
- "Your PHP version is outdated" : "Versiunea PHP folosită este învechită",
"Locale not working" : "Localizarea nu funcționează",
"Please double check the <a href='%s'>installation guides</a>." : "Vă rugăm să verificați <a href='%s'>ghiduri de instalare</a>.",
"Execute one task with each page loaded" : "Execută o sarcină la fiecare pagină încărcată",
diff --git a/settings/l10n/ro.json b/settings/l10n/ro.json
index 68c3b2335fc..090b6dada69 100644
--- a/settings/l10n/ro.json
+++ b/settings/l10n/ro.json
@@ -66,7 +66,6 @@
"Setup Warning" : "Atenţie la implementare",
"Module 'fileinfo' missing" : "Modulul \"Fileinfo\" lipsește",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Modulul PHP \"Fileinfo\" lipsește. Va recomandam sa activaţi acest modul pentru a obține cele mai bune rezultate cu detectarea mime-type.",
- "Your PHP version is outdated" : "Versiunea PHP folosită este învechită",
"Locale not working" : "Localizarea nu funcționează",
"Please double check the <a href='%s'>installation guides</a>." : "Vă rugăm să verificați <a href='%s'>ghiduri de instalare</a>.",
"Execute one task with each page loaded" : "Execută o sarcină la fiecare pagină încărcată",
diff --git a/settings/l10n/ru.js b/settings/l10n/ru.js
index 1ad8c854126..863e74ba137 100644
--- a/settings/l10n/ru.js
+++ b/settings/l10n/ru.js
@@ -110,8 +110,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "В качестве Базы Данных используется SQLite. Для больших установок рекомендуется использовать другие типы Баз Данных. Чтобы переехать на другую Базу Данных используйте инструмент командной строки: 'ooc: db:conver-type'",
"Module 'fileinfo' missing" : "Модуль 'fileinfo' отсутствует",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-модуль 'fileinfo' отсутствует. Мы настоятельно рекомендуем включить этот модуль для улучшения определения типов (mime-type) файлов.",
- "Your PHP version is outdated" : "Ваша версия PHP устарела",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Ваша версия PHP устарела. Мы настоятельно рекомендуем обновиться до 5.3.8 или новее, так как старые версии работают не корректно. Вполне возможно, что эта установка не работает должным образом.",
"PHP charset is not set to UTF-8" : "Кодировка PHP не совпадает с UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Кодировка PHP не совпадает с UTF-8. Это может вызвать трудности с именами файлов, содержащими нелатинские символы. Мы настоятельно рекомендуем сменить значение переменной default_charset в файле php.ini на UTF-8.",
"Locale not working" : "Локализация не работает",
diff --git a/settings/l10n/ru.json b/settings/l10n/ru.json
index c1703281413..052861fd163 100644
--- a/settings/l10n/ru.json
+++ b/settings/l10n/ru.json
@@ -108,8 +108,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "В качестве Базы Данных используется SQLite. Для больших установок рекомендуется использовать другие типы Баз Данных. Чтобы переехать на другую Базу Данных используйте инструмент командной строки: 'ooc: db:conver-type'",
"Module 'fileinfo' missing" : "Модуль 'fileinfo' отсутствует",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-модуль 'fileinfo' отсутствует. Мы настоятельно рекомендуем включить этот модуль для улучшения определения типов (mime-type) файлов.",
- "Your PHP version is outdated" : "Ваша версия PHP устарела",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Ваша версия PHP устарела. Мы настоятельно рекомендуем обновиться до 5.3.8 или новее, так как старые версии работают не корректно. Вполне возможно, что эта установка не работает должным образом.",
"PHP charset is not set to UTF-8" : "Кодировка PHP не совпадает с UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Кодировка PHP не совпадает с UTF-8. Это может вызвать трудности с именами файлов, содержащими нелатинские символы. Мы настоятельно рекомендуем сменить значение переменной default_charset в файле php.ini на UTF-8.",
"Locale not working" : "Локализация не работает",
diff --git a/settings/l10n/sk_SK.js b/settings/l10n/sk_SK.js
index 755ecd8f8ed..3d9fe53c946 100644
--- a/settings/l10n/sk_SK.js
+++ b/settings/l10n/sk_SK.js
@@ -110,8 +110,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Ako databáza je použitá SQLite. Pre väčšie inštalácie vám to odporúčame zmeniť. Na prenos do inej databázy použite nástroj príkazového riadka: \"occ db:convert-typ\"",
"Module 'fileinfo' missing" : "Chýba modul 'fileinfo'",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Chýba modul 'fileinfo'. Dôrazne doporučujeme ho povoliť pre dosiahnutie najlepších výsledkov zisťovania mime-typu.",
- "Your PHP version is outdated" : "Vaša PHP verzia je zastaraná",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Táto verzia PHP je zastaraná. Dôrazne vám odporúčame aktualizovať na verziu 5.3.8 alebo novšiu, lebo staršie verzie sú chybné. Je možné, že táto inštalácia nebude fungovať správne.",
"PHP charset is not set to UTF-8" : "Znaková sada PHP nie je nastavená na UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Predvolená znaková sada PHP nie je nastavená na UTF-8. To môže spôsobiť veľké problémy v prípade ne-ASCII znakov v názvoch súborov. Dôrazne odporúčame zmeniť hodnotu \"default_charset\" v php.ini na \"UTF-8\".",
"Locale not working" : "Lokalizácia nefunguje",
diff --git a/settings/l10n/sk_SK.json b/settings/l10n/sk_SK.json
index 35c54da58b0..95c4c76b74b 100644
--- a/settings/l10n/sk_SK.json
+++ b/settings/l10n/sk_SK.json
@@ -108,8 +108,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Ako databáza je použitá SQLite. Pre väčšie inštalácie vám to odporúčame zmeniť. Na prenos do inej databázy použite nástroj príkazového riadka: \"occ db:convert-typ\"",
"Module 'fileinfo' missing" : "Chýba modul 'fileinfo'",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Chýba modul 'fileinfo'. Dôrazne doporučujeme ho povoliť pre dosiahnutie najlepších výsledkov zisťovania mime-typu.",
- "Your PHP version is outdated" : "Vaša PHP verzia je zastaraná",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Táto verzia PHP je zastaraná. Dôrazne vám odporúčame aktualizovať na verziu 5.3.8 alebo novšiu, lebo staršie verzie sú chybné. Je možné, že táto inštalácia nebude fungovať správne.",
"PHP charset is not set to UTF-8" : "Znaková sada PHP nie je nastavená na UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Predvolená znaková sada PHP nie je nastavená na UTF-8. To môže spôsobiť veľké problémy v prípade ne-ASCII znakov v názvoch súborov. Dôrazne odporúčame zmeniť hodnotu \"default_charset\" v php.ini na \"UTF-8\".",
"Locale not working" : "Lokalizácia nefunguje",
diff --git a/settings/l10n/sl.js b/settings/l10n/sl.js
index 4e1ebd512ed..cd8a932499d 100644
--- a/settings/l10n/sl.js
+++ b/settings/l10n/sl.js
@@ -107,8 +107,6 @@ OC.L10N.register(
"Database Performance Info" : "Podrobnosti delovanja podatkovne zbirke",
"Module 'fileinfo' missing" : "Manjka modul 'fileinfo'.",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Manjka modul PHP 'fileinfo'. Priporočljivo je omogočiti ta modul za popolno zaznavanje vrst MIME.",
- "Your PHP version is outdated" : "Nameščena različica PHP je zastarela",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Nameščena različica PHP je zastarela. Priporočljivo je posodobiti namestitev na različico 5.3.8 ali novejše, saj starejše različice ne podpirajo vseh zmožnosti. Mogoče je, da namestitev ne deluje pravilno.",
"PHP charset is not set to UTF-8" : "Jezikovni znakovni nabor PHP ni določen kot UTF-8",
"Locale not working" : "Jezikovne prilagoditve ne delujejo.",
"System locale can not be set to a one which supports UTF-8." : "Sistemskih jezikovnih nastavitev ni mogoče nastaviti na možnost, ki podpira nabor UTF-8.",
diff --git a/settings/l10n/sl.json b/settings/l10n/sl.json
index 417ef5f6a1f..831ca55d515 100644
--- a/settings/l10n/sl.json
+++ b/settings/l10n/sl.json
@@ -105,8 +105,6 @@
"Database Performance Info" : "Podrobnosti delovanja podatkovne zbirke",
"Module 'fileinfo' missing" : "Manjka modul 'fileinfo'.",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Manjka modul PHP 'fileinfo'. Priporočljivo je omogočiti ta modul za popolno zaznavanje vrst MIME.",
- "Your PHP version is outdated" : "Nameščena različica PHP je zastarela",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Nameščena različica PHP je zastarela. Priporočljivo je posodobiti namestitev na različico 5.3.8 ali novejše, saj starejše različice ne podpirajo vseh zmožnosti. Mogoče je, da namestitev ne deluje pravilno.",
"PHP charset is not set to UTF-8" : "Jezikovni znakovni nabor PHP ni določen kot UTF-8",
"Locale not working" : "Jezikovne prilagoditve ne delujejo.",
"System locale can not be set to a one which supports UTF-8." : "Sistemskih jezikovnih nastavitev ni mogoče nastaviti na možnost, ki podpira nabor UTF-8.",
diff --git a/settings/l10n/sv.js b/settings/l10n/sv.js
index afd8122c7f3..ca4fac8cdd1 100644
--- a/settings/l10n/sv.js
+++ b/settings/l10n/sv.js
@@ -104,8 +104,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite används som databas. För större installationer rekommenderar vi att ändra på detta. För att migrera till en annan databas, använd kommandoverktyget: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Modulen \"fileinfo\" saknas",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-modulen 'fileinfo' saknas. Vi rekommenderar starkt att aktivera den här modulen för att kunna upptäcka korrekt mime-typ.",
- "Your PHP version is outdated" : "Din PHP version är föråldrad",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Din PHP version är föråldrad. Vi rekommenderar starkt att uppdatera till 5.3.8 eller nyare eftersom äldre versioner är obrukbara. Det är möjligt att denna installation inte fungerar korrekt.",
"Locale not working" : "Locale fungerar inte",
"System locale can not be set to a one which supports UTF-8." : "Systemspråk kan inte ställas in till ett som stödjer UTF-8.",
"This means that there might be problems with certain characters in file names." : "Detta betyder att där kan komma att uppstå problem med vissa tecken i filnamn.",
diff --git a/settings/l10n/sv.json b/settings/l10n/sv.json
index 0a0ba0bcf72..d3e685a8432 100644
--- a/settings/l10n/sv.json
+++ b/settings/l10n/sv.json
@@ -102,8 +102,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite används som databas. För större installationer rekommenderar vi att ändra på detta. För att migrera till en annan databas, använd kommandoverktyget: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Modulen \"fileinfo\" saknas",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-modulen 'fileinfo' saknas. Vi rekommenderar starkt att aktivera den här modulen för att kunna upptäcka korrekt mime-typ.",
- "Your PHP version is outdated" : "Din PHP version är föråldrad",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Din PHP version är föråldrad. Vi rekommenderar starkt att uppdatera till 5.3.8 eller nyare eftersom äldre versioner är obrukbara. Det är möjligt att denna installation inte fungerar korrekt.",
"Locale not working" : "Locale fungerar inte",
"System locale can not be set to a one which supports UTF-8." : "Systemspråk kan inte ställas in till ett som stödjer UTF-8.",
"This means that there might be problems with certain characters in file names." : "Detta betyder att där kan komma att uppstå problem med vissa tecken i filnamn.",
diff --git a/settings/l10n/tr.js b/settings/l10n/tr.js
index e97674bf0fc..441f1377b96 100644
--- a/settings/l10n/tr.js
+++ b/settings/l10n/tr.js
@@ -103,6 +103,8 @@ OC.L10N.register(
"Security Warning" : "Güvenlik Uyarısı",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "%s erişiminiz HTTP aracılığıyla yapılıyor. Sunucunuzu, HTTPS kullanımını zorlamak üzere yapılandırmanızı şiddetle öneririz.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Veri dizininiz ve dosyalarınız muhtemelen İnternet üzerinden erişilebilir. .htaccess dosyası çalışmıyor. Web sunucunuzu yapılandırarak veri dizinine erişimi kapatmanızı veya veri dizinini web sunucu belge kök dizini dışına almanızı şiddetle tavsiye ederiz.",
+ "Read-Only config enabled" : "Salt Okunur yapılandırma etkin",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Salt Okunur yapılandırma etkinleştirilmiş. Bu, bazı ayarların web arayüzü ile yapılandırılmasını önler. Ayrıca, bu dosya her güncelleme sırasında el ile yazılabilir yapılmalıdır.",
"Setup Warning" : "Kurulum Uyarısı",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP satırıçi doc bloklarını ayıklamak üzere yapılandırılmış gibi görünüyor. Bu, bazı çekirdek (core) uygulamalarını erişilemez yapacak.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Bu, muhtemelen Zend OPcache veya eAccelerator gibi bir önbellek/hızlandırıcı nedeniyle gerçekleşir.",
@@ -110,8 +112,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Veritabanı olarak SQLite kullanılıyor. Daha büyük kurulumlar için bunu değiştirmenizi öneririz. Farklı bir veritabanına geçiş yapmak için komut satırı aracını kullanın: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Modül 'fileinfo' kayıp",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modülü 'fileinfo' kayıp. MIME türü tanıma ile en iyi sonuçları elde etmek için bu modülü etkinleştirmenizi öneririz.",
- "Your PHP version is outdated" : "PHP sürümünüz eski",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "PHP sürümünüz eski. Eski sürümlerde sorun olduğundan 5.3.8 veya daha yeni bir sürüme güncellemenizi şiddetle tavsiye ederiz. Bu kurulumun da doğru çalışmaması da olasıdır.",
"PHP charset is not set to UTF-8" : "PHP karakter kümesi UTF-8 olarak ayarlı değil",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP karakter kümesi UTF-8 olarak ayarlı değil. Bu, dosya isimlerindeki ASCII olmayan karakterler için büyük sorunlara yol açabilir. php.ini içerisindeki 'default_charset' ayarını 'UTF-8' olarak ayarlamanızı şiddetle tavsiye ediyoruz.",
"Locale not working" : "Yerel çalışmıyor",
@@ -166,7 +166,7 @@ OC.L10N.register(
"Less" : "Daha az",
"Version" : "Sürüm",
"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 topluluğu</a> tarafından geliştirilmiş olup, <a href=\"https://github.com/owncloud\" target=\"_blank\">kaynak kodu</a>, <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> altında lisanslanmıştır.",
- "More apps" : "Daha fazla Uygulama",
+ "More apps" : "Daha fazla uygulama",
"Add your app" : "Uygulamanızı ekleyin",
"by" : "oluşturan",
"licensed" : "lisanslı",
diff --git a/settings/l10n/tr.json b/settings/l10n/tr.json
index f1c869101a9..188a93e0c85 100644
--- a/settings/l10n/tr.json
+++ b/settings/l10n/tr.json
@@ -101,6 +101,8 @@
"Security Warning" : "Güvenlik Uyarısı",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "%s erişiminiz HTTP aracılığıyla yapılıyor. Sunucunuzu, HTTPS kullanımını zorlamak üzere yapılandırmanızı şiddetle öneririz.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "Veri dizininiz ve dosyalarınız muhtemelen İnternet üzerinden erişilebilir. .htaccess dosyası çalışmıyor. Web sunucunuzu yapılandırarak veri dizinine erişimi kapatmanızı veya veri dizinini web sunucu belge kök dizini dışına almanızı şiddetle tavsiye ederiz.",
+ "Read-Only config enabled" : "Salt Okunur yapılandırma etkin",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Salt Okunur yapılandırma etkinleştirilmiş. Bu, bazı ayarların web arayüzü ile yapılandırılmasını önler. Ayrıca, bu dosya her güncelleme sırasında el ile yazılabilir yapılmalıdır.",
"Setup Warning" : "Kurulum Uyarısı",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP satırıçi doc bloklarını ayıklamak üzere yapılandırılmış gibi görünüyor. Bu, bazı çekirdek (core) uygulamalarını erişilemez yapacak.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Bu, muhtemelen Zend OPcache veya eAccelerator gibi bir önbellek/hızlandırıcı nedeniyle gerçekleşir.",
@@ -108,8 +110,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "Veritabanı olarak SQLite kullanılıyor. Daha büyük kurulumlar için bunu değiştirmenizi öneririz. Farklı bir veritabanına geçiş yapmak için komut satırı aracını kullanın: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Modül 'fileinfo' kayıp",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modülü 'fileinfo' kayıp. MIME türü tanıma ile en iyi sonuçları elde etmek için bu modülü etkinleştirmenizi öneririz.",
- "Your PHP version is outdated" : "PHP sürümünüz eski",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "PHP sürümünüz eski. Eski sürümlerde sorun olduğundan 5.3.8 veya daha yeni bir sürüme güncellemenizi şiddetle tavsiye ederiz. Bu kurulumun da doğru çalışmaması da olasıdır.",
"PHP charset is not set to UTF-8" : "PHP karakter kümesi UTF-8 olarak ayarlı değil",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP karakter kümesi UTF-8 olarak ayarlı değil. Bu, dosya isimlerindeki ASCII olmayan karakterler için büyük sorunlara yol açabilir. php.ini içerisindeki 'default_charset' ayarını 'UTF-8' olarak ayarlamanızı şiddetle tavsiye ediyoruz.",
"Locale not working" : "Yerel çalışmıyor",
@@ -164,7 +164,7 @@
"Less" : "Daha az",
"Version" : "Sürüm",
"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 topluluğu</a> tarafından geliştirilmiş olup, <a href=\"https://github.com/owncloud\" target=\"_blank\">kaynak kodu</a>, <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> altında lisanslanmıştır.",
- "More apps" : "Daha fazla Uygulama",
+ "More apps" : "Daha fazla uygulama",
"Add your app" : "Uygulamanızı ekleyin",
"by" : "oluşturan",
"licensed" : "lisanslı",
diff --git a/settings/l10n/uk.js b/settings/l10n/uk.js
index 6cdef63b2ec..e46e32c1a2e 100644
--- a/settings/l10n/uk.js
+++ b/settings/l10n/uk.js
@@ -110,13 +110,12 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "В якості бази даних використовується SQLite. Для більш навантажених серверів, ми рекомендуємо користуватися іншими типами баз даних. Для зміни типу бази даних використовуйте інструмент командного рядка: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Модуль 'fileinfo' відсутній",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP модуль 'fileinfo' відсутній. Ми наполегливо рекомендуємо увімкнути цей модуль, щоб отримати кращі результати при виявленні MIME-типів.",
- "Your PHP version is outdated" : "Ваш версія PHP застаріла",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Ваш версія PHP застаріла. Ми наполегливо рекомендуємо оновитися до версії 5.3.8 або новішої, оскільки старі версії працюють не правильно. ",
"PHP charset is not set to UTF-8" : "Кодування PHP не співпадає з UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Кодування PHP не співпадає з UTF-8. Це може викликати проблеми іменами файлів, які містять нелатинські символи. Ми наполегливо рекомендуємо змінити значення перемінної default_charset у файлі php.ini на UTF-8.",
"Locale not working" : "Локалізація не працює",
"System locale can not be set to a one which supports UTF-8." : "Неможливо встановити системну локаль, яка б підтримувала UTF-8.",
"This means that there might be problems with certain characters in file names." : "Це означає, що можуть виникати проблеми з деякими символами в іменах файлів.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Пропонуємо встановити необхідні пакети для вашої системи для підтримки однієї з наступних мов %s.",
"URL generation in notification emails" : "Генерування URL для повідомлень в електроних листах",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Якщо ваша копія ownCloud встановлена не в корені домену та використовує систему планування CRON, можливі проблеми з генерацією правильних URL. Щоб уникнути цього, встановіть опцію overwritewebroot файла config.php відповідно до теки розташування установки (Ймовірніше за все, це \"%s\")",
"Connectivity Checks" : "Перевірка З'єднання",
@@ -143,6 +142,8 @@ OC.L10N.register(
"These groups will still be able to receive shares, but not to initiate them." : "Ці групи зможуть отримувати спільні файли, але не зможуть відправляти їх.",
"Enforce HTTPS" : "Примусове застосування HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Зобов'язати клієнтів під'єднуватись до %s через шифроване з'єднання.",
+ "Enforce HTTPS for subdomains" : "Примусове застосувати HTTPS для піддоменів",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Змушувати клієнтів під'єднуватися до %s та піддоменів за допомогою зашифрованого з'єднання.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Будь ласка, під'єднайтесь до цього %s за допомогою HTTPS, щоб увімкнути або вимкнути використання SSL.",
"This is used for sending out notifications." : "Використовується для відсилання повідомлень.",
"Send mode" : "Надіслати повідомлення",
@@ -219,6 +220,7 @@ OC.L10N.register(
"Create" : "Створити",
"Admin Recovery Password" : "Пароль адміністратора для відновлення",
"Enter the recovery password in order to recover the users files during password change" : "Введіть пароль для того, щоб відновити файли користувачів при зміні паролю",
+ "Search Users" : "Шукати користувачів",
"Add Group" : "Додати групу",
"Group" : "Група",
"Everyone" : "Всі",
diff --git a/settings/l10n/uk.json b/settings/l10n/uk.json
index b05f4e95e32..03455e50155 100644
--- a/settings/l10n/uk.json
+++ b/settings/l10n/uk.json
@@ -108,13 +108,12 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "В якості бази даних використовується SQLite. Для більш навантажених серверів, ми рекомендуємо користуватися іншими типами баз даних. Для зміни типу бази даних використовуйте інструмент командного рядка: 'occ db:convert-type'",
"Module 'fileinfo' missing" : "Модуль 'fileinfo' відсутній",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP модуль 'fileinfo' відсутній. Ми наполегливо рекомендуємо увімкнути цей модуль, щоб отримати кращі результати при виявленні MIME-типів.",
- "Your PHP version is outdated" : "Ваш версія PHP застаріла",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "Ваш версія PHP застаріла. Ми наполегливо рекомендуємо оновитися до версії 5.3.8 або новішої, оскільки старі версії працюють не правильно. ",
"PHP charset is not set to UTF-8" : "Кодування PHP не співпадає з UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Кодування PHP не співпадає з UTF-8. Це може викликати проблеми іменами файлів, які містять нелатинські символи. Ми наполегливо рекомендуємо змінити значення перемінної default_charset у файлі php.ini на UTF-8.",
"Locale not working" : "Локалізація не працює",
"System locale can not be set to a one which supports UTF-8." : "Неможливо встановити системну локаль, яка б підтримувала UTF-8.",
"This means that there might be problems with certain characters in file names." : "Це означає, що можуть виникати проблеми з деякими символами в іменах файлів.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Пропонуємо встановити необхідні пакети для вашої системи для підтримки однієї з наступних мов %s.",
"URL generation in notification emails" : "Генерування URL для повідомлень в електроних листах",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Якщо ваша копія ownCloud встановлена не в корені домену та використовує систему планування CRON, можливі проблеми з генерацією правильних URL. Щоб уникнути цього, встановіть опцію overwritewebroot файла config.php відповідно до теки розташування установки (Ймовірніше за все, це \"%s\")",
"Connectivity Checks" : "Перевірка З'єднання",
@@ -141,6 +140,8 @@
"These groups will still be able to receive shares, but not to initiate them." : "Ці групи зможуть отримувати спільні файли, але не зможуть відправляти їх.",
"Enforce HTTPS" : "Примусове застосування HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Зобов'язати клієнтів під'єднуватись до %s через шифроване з'єднання.",
+ "Enforce HTTPS for subdomains" : "Примусове застосувати HTTPS для піддоменів",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Змушувати клієнтів під'єднуватися до %s та піддоменів за допомогою зашифрованого з'єднання.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Будь ласка, під'єднайтесь до цього %s за допомогою HTTPS, щоб увімкнути або вимкнути використання SSL.",
"This is used for sending out notifications." : "Використовується для відсилання повідомлень.",
"Send mode" : "Надіслати повідомлення",
@@ -217,6 +218,7 @@
"Create" : "Створити",
"Admin Recovery Password" : "Пароль адміністратора для відновлення",
"Enter the recovery password in order to recover the users files during password change" : "Введіть пароль для того, щоб відновити файли користувачів при зміні паролю",
+ "Search Users" : "Шукати користувачів",
"Add Group" : "Додати групу",
"Group" : "Група",
"Everyone" : "Всі",
diff --git a/settings/l10n/zh_CN.js b/settings/l10n/zh_CN.js
index f68a3366103..15ff53307d3 100644
--- a/settings/l10n/zh_CN.js
+++ b/settings/l10n/zh_CN.js
@@ -104,8 +104,6 @@ OC.L10N.register(
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite 正在使用。我们建议大型网站切换到其他数据库。请使用命令行工具:“occ db:convert-type”迁移数据库",
"Module 'fileinfo' missing" : "模块'文件信息'丢失",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP模块'文件信息'丢失. 我们强烈建议启用此模块以便mime类型检测取得最佳结果.",
- "Your PHP version is outdated" : "您的 PHP 版本不是最新版",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "您的 PHP 版本已过期。强烈建议更新至 5.3.8 或者更新版本因为老版本存在已知问题。本次安装可能并未正常工作。",
"PHP charset is not set to UTF-8" : "PHP字符集没有设置为UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP字符集没有设置为UTF-8。这会导致非ASC||字符的文件名出现乱码。我们强烈建议修改php.ini文件中的'default_charset' 的值为 'UTF-8'",
"Locale not working" : "本地化无法工作",
diff --git a/settings/l10n/zh_CN.json b/settings/l10n/zh_CN.json
index 1b81ca42119..776ca101012 100644
--- a/settings/l10n/zh_CN.json
+++ b/settings/l10n/zh_CN.json
@@ -102,8 +102,6 @@
"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" : "SQLite 正在使用。我们建议大型网站切换到其他数据库。请使用命令行工具:“occ db:convert-type”迁移数据库",
"Module 'fileinfo' missing" : "模块'文件信息'丢失",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP模块'文件信息'丢失. 我们强烈建议启用此模块以便mime类型检测取得最佳结果.",
- "Your PHP version is outdated" : "您的 PHP 版本不是最新版",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "您的 PHP 版本已过期。强烈建议更新至 5.3.8 或者更新版本因为老版本存在已知问题。本次安装可能并未正常工作。",
"PHP charset is not set to UTF-8" : "PHP字符集没有设置为UTF-8",
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "PHP字符集没有设置为UTF-8。这会导致非ASC||字符的文件名出现乱码。我们强烈建议修改php.ini文件中的'default_charset' 的值为 'UTF-8'",
"Locale not working" : "本地化无法工作",
diff --git a/settings/l10n/zh_TW.js b/settings/l10n/zh_TW.js
index cc668b41086..1a2b20e3f1d 100644
--- a/settings/l10n/zh_TW.js
+++ b/settings/l10n/zh_TW.js
@@ -83,8 +83,6 @@ OC.L10N.register(
"Setup Warning" : "設定警告",
"Module 'fileinfo' missing" : "遺失 'fileinfo' 模組",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "未偵測到 PHP 模組 'fileinfo'。我們強烈建議啟用這個模組以取得最好的 mime-type 支援。",
- "Your PHP version is outdated" : "您的 PHP 版本已過期",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "您的 PHP 版本已過期。我們強烈建議更新到 5.3.8 或更新的版本,因為舊的版本已知會毀損。這個可能會在安裝後無法使用。",
"Locale not working" : "語系無法運作",
"System locale can not be set to a one which supports UTF-8." : "系統語系無法設定只支援 UTF-8",
"This means that there might be problems with certain characters in file names." : "這個意思是指在檔名中使用一些字元可能會有問題",
diff --git a/settings/l10n/zh_TW.json b/settings/l10n/zh_TW.json
index 0a5baf7639f..030d0f30720 100644
--- a/settings/l10n/zh_TW.json
+++ b/settings/l10n/zh_TW.json
@@ -81,8 +81,6 @@
"Setup Warning" : "設定警告",
"Module 'fileinfo' missing" : "遺失 'fileinfo' 模組",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "未偵測到 PHP 模組 'fileinfo'。我們強烈建議啟用這個模組以取得最好的 mime-type 支援。",
- "Your PHP version is outdated" : "您的 PHP 版本已過期",
- "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." : "您的 PHP 版本已過期。我們強烈建議更新到 5.3.8 或更新的版本,因為舊的版本已知會毀損。這個可能會在安裝後無法使用。",
"Locale not working" : "語系無法運作",
"System locale can not be set to a one which supports UTF-8." : "系統語系無法設定只支援 UTF-8",
"This means that there might be problems with certain characters in file names." : "這個意思是指在檔名中使用一些字元可能會有問題",
diff --git a/settings/templates/admin.php b/settings/templates/admin.php
index 166e36a3605..83dc92a060a 100644
--- a/settings/templates/admin.php
+++ b/settings/templates/admin.php
@@ -86,14 +86,28 @@ if (!$_['isConnectedViaHTTPS']) {
// is htaccess working ?
if (!$_['htaccessworking']) {
?>
-<div class="section">
- <h2><?php p($l->t('Security Warning'));?></h2>
+ <div class="section">
+ <h2><?php p($l->t('Security Warning')); ?></h2>
<span class="securitywarning">
<?php p($l->t('Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root.')); ?>
</span>
-</div>
+ </div>
+<?php
+}
+
+// is read only config enabled
+if ($_['readOnlyConfigEnabled']) {
+?>
+<div class="section">
+ <h2><?php p($l->t('Read-Only config enabled'));?></h2>
+
+ <span class="securitywarning">
+ <?php p($l->t('The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update.')); ?>
+ </span>
+
+ </div>
<?php
}
// Are doc blocks accessible?
@@ -139,20 +153,6 @@ if (!$_['has_fileinfo']) {
<?php
}
-// is PHP at least at 5.3.8?
-if ($_['old_php']) {
- ?>
- <div class="section">
- <h2><?php p($l->t('Your PHP version is outdated'));?></h2>
-
- <span class="connectionwarning">
- <?php p($l->t('Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly.')); ?>
- </span>
-
- </div>
-<?php
-}
-
// is PHP charset set to UTF8?
if (!$_['isPhpCharSetUtf8']) {
?>
@@ -412,7 +412,7 @@ if ($_['suggestedOverwriteWebroot']) {
<p>
<label for="mail_from_address"><?php p($l->t( 'From address' )); ?></label>
<input type="text" name='mail_from_address' id="mail_from_address" placeholder="<?php p($l->t('mail'))?>"
- value='<?php p($_['mail_from_address']) ?>' />
+ value='<?php p($_['mail_from_address']) ?>' />@
<input type="text" name='mail_domain' id="mail_domain" placeholder="example.com"
value='<?php p($_['mail_domain']) ?>' />
</p>
diff --git a/settings/templates/apps.php b/settings/templates/apps.php
index 1ad37000f39..3bb0d45f582 100644
--- a/settings/templates/apps.php
+++ b/settings/templates/apps.php
@@ -51,6 +51,15 @@
{{/if}}
</p>
{{/if}}
+ {{#unless canInstall}}
+ <div><?php p($l->t('This app cannot be installed because the following dependencies are not fulfilled:')); ?></div>
+ <ul class="missing-dependencies">
+ {{#each missingDependencies}}
+ <li>{{this}}</li>
+ {{/each}}
+ </ul>
+ {{/unless}}
+
{{#if update}}
<input class="update" type="submit" value="<?php p($l->t('Update to %s', array('{{update}}'))); ?>" data-appid="{{id}}" />
{{/if}}
@@ -61,8 +70,10 @@
<br />
<input type="hidden" id="group_select" title="<?php p($l->t('All')); ?>" style="width: 200px">
{{else}}
+ {{#if canInstall}}
<input class="enable" type="submit" data-appid="{{id}}" data-active="false" value="<?php p($l->t("Enable"));?>"/>
{{/if}}
+ {{/if}}
{{#if canUnInstall}}
<input class="uninstall" type="submit" value="<?php p($l->t('Uninstall App')); ?>" data-appid="{{id}}" />
{{/if}}
diff --git a/tests/core/lostpassword/controller/lostcontrollertest.php b/tests/core/lostpassword/controller/lostcontrollertest.php
index 5da9e5ce48d..2ed7692a32f 100644
--- a/tests/core/lostpassword/controller/lostcontrollertest.php
+++ b/tests/core/lostpassword/controller/lostcontrollertest.php
@@ -102,6 +102,14 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase {
}
public function testEmailSuccessful() {
+ /**
+ * FIXME: Disable test for systems where no sendmail is available since code is static.
+ * @link https://github.com/owncloud/core/pull/12085
+ */
+ if (is_null(\OC_Helper::findBinaryPath('sendmail'))) {
+ $this->markTestSkipped('sendmail is not available');
+ }
+
$randomToken = $this->container['SecureRandom'];
$this->container['SecureRandom']
->expects($this->once())
diff --git a/tests/data/app/expected-info.json b/tests/data/app/expected-info.json
index c67d6d657d2..fc0ab224977 100644
--- a/tests/data/app/expected-info.json
+++ b/tests/data/app/expected-info.json
@@ -15,5 +15,35 @@
},
"rememberlogin": "false",
"types": ["filesystem"],
- "ocsid": "166047"
+ "ocsid": "166047",
+ "dependencies": {
+ "php": {
+ "@attributes" : {
+ "min-version": "5.4",
+ "max-version": "5.5"
+ }
+ },
+ "database": [
+ {
+ "@attributes" : {
+ "min-version": "3.0"
+ },
+ "@value": "sqlite"},
+ "mysql"
+ ],
+ "command": [
+ {
+ "@attributes" : {
+ "os": "linux"
+ },
+ "@value": "grep"
+ },
+ {
+ "@attributes" : {
+ "os": "windows"
+ },
+ "@value": "notepad.exe"
+ }
+ ]
+ }
}
diff --git a/tests/data/app/valid-info.xml b/tests/data/app/valid-info.xml
index 6fcef693bed..f01f5fd55ea 100644
--- a/tests/data/app/valid-info.xml
+++ b/tests/data/app/valid-info.xml
@@ -19,4 +19,11 @@
<filesystem/>
</types>
<ocsid>166047</ocsid>
+ <dependencies>
+ <php min-version="5.4" max-version="5.5"/>
+ <database min-version="3.0">sqlite</database>
+ <database>mysql</database>
+ <command os="linux">grep</command>
+ <command os="windows">notepad.exe</command>
+ </dependencies>
</info>
diff --git a/tests/enable_all.php b/tests/enable_all.php
index 2368a194944..d6c3184edd6 100644
--- a/tests/enable_all.php
+++ b/tests/enable_all.php
@@ -19,7 +19,6 @@ function enableApp($app) {
enableApp('files_sharing');
enableApp('files_trashbin');
enableApp('files_encryption');
-enableApp('files_external');
enableApp('user_ldap');
enableApp('files_versions');
diff --git a/tests/lib/activitymanager.php b/tests/lib/activitymanager.php
index 85f8320de09..0683eb68193 100644
--- a/tests/lib/activitymanager.php
+++ b/tests/lib/activitymanager.php
@@ -87,11 +87,14 @@ class Test_ActivityManager extends \Test\TestCase {
}
public function testQueryForFilter() {
+ $this->activityManager->registerExtension(function() {
+ return new SimpleExtension();
+ });
$result = $this->activityManager->getQueryForFilter('filter1');
$this->assertEquals(
array(
- '`app` = ? and `message` like ?',
- array('mail', 'ownCloud%')
+ ' and ((`app` = ? and `message` like ?) or (`app` = ? and `message` like ?))',
+ array('mail', 'ownCloud%', 'mail', 'ownCloud%')
), $result
);
diff --git a/tests/lib/api.php b/tests/lib/api.php
index bf9748a6040..3b925a63960 100644
--- a/tests/lib/api.php
+++ b/tests/lib/api.php
@@ -17,7 +17,7 @@ class Test_API extends \Test\TestCase {
return array(
'shipped' => $shipped,
'response' => new OC_OCS_Result($data, $code, $message),
- 'app' => uniqid('testapp_', true),
+ 'app' => $this->getUniqueID('testapp_'),
);
}
diff --git a/tests/lib/app/dependencyanalyzer.php b/tests/lib/app/dependencyanalyzer.php
new file mode 100644
index 00000000000..7d06842e8ad
--- /dev/null
+++ b/tests/lib/app/dependencyanalyzer.php
@@ -0,0 +1,109 @@
+<?php
+
+/**
+ * @author Thomas Müller
+ * @copyright 2014 Thomas Müller deepdiver@owncloud.com
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\App;
+
+use OC;
+use OC\App\Platform;
+use OCP\IL10N;
+
+class DependencyAnalyzer extends \PHPUnit_Framework_TestCase {
+
+ /**
+ * @var Platform
+ */
+ private $platformMock;
+
+ /**
+ * @var IL10N
+ */
+ private $l10nMock;
+
+ public function setUp() {
+ $this->platformMock = $this->getMockBuilder('\OC\App\Platform')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $this->platformMock->expects($this->any())
+ ->method('getPhpVersion')
+ ->will( $this->returnValue('5.4.3'));
+ $this->platformMock->expects($this->any())
+ ->method('getDatabase')
+ ->will( $this->returnValue('mysql'));
+ $this->l10nMock = $this->getMockBuilder('\OCP\IL10N')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $this->l10nMock->expects($this->any())
+ ->method('t')
+ ->will($this->returnCallback(function($text, $parameters = array()) {
+ return vsprintf($text, $parameters);
+ }));
+ }
+
+ /**
+ * @dataProvider providesPhpVersion
+ */
+ public function testPhpVersion($expectedMissing, $minVersion, $maxVersion) {
+ $app = array(
+ 'dependencies' => array(
+ 'php' => array()
+ )
+ );
+ if (!is_null($minVersion)) {
+ $app['dependencies']['php']['@attributes']['min-version'] = $minVersion;
+ }
+ if (!is_null($maxVersion)) {
+ $app['dependencies']['php']['@attributes']['max-version'] = $maxVersion;
+ }
+ $analyser = new \OC\App\DependencyAnalyzer($app, $this->platformMock, $this->l10nMock);
+ $missing = $analyser->analyze();
+
+ $this->assertTrue(is_array($missing));
+ $this->assertEquals(count($expectedMissing), count($missing));
+ $this->assertEquals($expectedMissing, $missing);
+ }
+
+ /**
+ * @dataProvider providesDatabases
+ */
+ public function testDatabases($expectedMissing, $databases) {
+ $app = array(
+ 'dependencies' => array(
+ )
+ );
+ if (!is_null($databases)) {
+ $app['dependencies']['database'] = $databases;
+ }
+ $analyser = new \OC\App\DependencyAnalyzer($app, $this->platformMock, $this->l10nMock);
+ $missing = $analyser->analyze();
+
+ $this->assertTrue(is_array($missing));
+ $this->assertEquals(count($expectedMissing), count($missing));
+ $this->assertEquals($expectedMissing, $missing);
+ }
+
+ function providesDatabases() {
+ return array(
+ // non BC - in case on databases are defined -> all are supported
+ array(array(), null),
+ array(array(), array()),
+ array(array('Following databases are supported: sqlite, postgres'), array('sqlite', array('@value' => 'postgres'))),
+ );
+ }
+
+ function providesPhpVersion() {
+ return array(
+ array(array(), null, null),
+ array(array(), '5.4', null),
+ array(array(), null, '5.5'),
+ array(array(), '5.4', '5.5'),
+ array(array('PHP 5.4.4 or higher is required.'), '5.4.4', null),
+ array(array('PHP with a version less then 5.4.2 is required.'), null, '5.4.2'),
+ );
+ }
+}
diff --git a/tests/lib/app/infoparser.php b/tests/lib/app/infoparser.php
index 277e1582e45..13c0b51e117 100644
--- a/tests/lib/app/infoparser.php
+++ b/tests/lib/app/infoparser.php
@@ -39,15 +39,23 @@ class InfoParser extends \PHPUnit_Framework_TestCase {
$this->parser = new \OC\App\InfoParser($httpHelper, $urlGenerator);
}
- public function testParsingValidXml() {
- $expectedData = json_decode(file_get_contents(OC::$SERVERROOT.'/tests/data/app/expected-info.json'), true);
- $data = $this->parser->parse(OC::$SERVERROOT.'/tests/data/app/valid-info.xml');
+ /**
+ * @dataProvider providesInfoXml
+ */
+ public function testParsingValidXml($expectedJson, $xmlFile) {
+ $expectedData = null;
+ if (!is_null($expectedJson)) {
+ $expectedData = json_decode(file_get_contents(OC::$SERVERROOT . "/tests/data/app/$expectedJson"), true);
+ }
+ $data = $this->parser->parse(OC::$SERVERROOT. "/tests/data/app/$xmlFile");
$this->assertEquals($expectedData, $data);
}
- public function testParsingInvalidXml() {
- $data = $this->parser->parse(OC::$SERVERROOT.'/tests/data/app/invalid-info.xml');
- $this->assertNull($data);
+ function providesInfoXml() {
+ return array(
+ array('expected-info.json', 'valid-info.xml'),
+ array(null, 'invalid-info.xml'),
+ );
}
}
diff --git a/tests/lib/appframework/AppTest.php b/tests/lib/appframework/AppTest.php
index bd565e9765e..86128db118f 100644
--- a/tests/lib/appframework/AppTest.php
+++ b/tests/lib/appframework/AppTest.php
@@ -63,7 +63,7 @@ class AppTest extends \Test\TestCase {
public function testControllerNameAndMethodAreBeingPassed(){
- $return = array(null, array(), null);
+ $return = array(null, array(), array(), null);
$this->dispatcher->expects($this->once())
->method('dispatch')
->with($this->equalTo($this->controller),
diff --git a/tests/lib/appframework/controller/ControllerTest.php b/tests/lib/appframework/controller/ControllerTest.php
index d186651dc23..18d47d00f6b 100644
--- a/tests/lib/appframework/controller/ControllerTest.php
+++ b/tests/lib/appframework/controller/ControllerTest.php
@@ -173,7 +173,8 @@ class ControllerTest extends \Test\TestCase {
public function testFormatDataResponseJSON() {
$expectedHeaders = array(
'test' => 'something',
- 'Cache-Control' => 'no-cache, must-revalidate'
+ 'Cache-Control' => 'no-cache, must-revalidate',
+ 'Content-Type' => 'application/json; charset=utf-8'
);
$response = $this->controller->customDataResponse(array('hi'));
diff --git a/tests/lib/appframework/http/DispatcherTest.php b/tests/lib/appframework/http/DispatcherTest.php
index f92e7161e6b..3933e00804b 100644
--- a/tests/lib/appframework/http/DispatcherTest.php
+++ b/tests/lib/appframework/http/DispatcherTest.php
@@ -227,15 +227,11 @@ class DispatcherTest extends \Test\TestCase {
$this->assertEquals($httpHeaders, $response[0]);
$this->assertEquals($responseHeaders, $response[1]);
- $this->assertEquals($out, $response[2]);
+ $this->assertEquals($out, $response[3]);
}
public function testExceptionCallsAfterException() {
- // TODO fails on PHP 5.3
- if (version_compare(PHP_VERSION, '5.4.0', '<')) {
- $this->markTestSkipped('Fails on PHP 5.3');
- }
$out = 'yo';
$httpHeaders = 'Http';
$responseHeaders = array('hell' => 'yeah');
@@ -246,15 +242,11 @@ class DispatcherTest extends \Test\TestCase {
$this->assertEquals($httpHeaders, $response[0]);
$this->assertEquals($responseHeaders, $response[1]);
- $this->assertEquals($out, $response[2]);
+ $this->assertEquals($out, $response[3]);
}
public function testExceptionThrowsIfCanNotBeHandledByAfterException() {
- // TODO fails on PHP 5.3 and crashed travis (10 minute timeout)
- if (version_compare(PHP_VERSION, '5.4.0', '<')) {
- $this->markTestSkipped('Fails on PHP 5.3 and causes infinite loop - travis fails after 10 minute timeout');
- }
$out = 'yo';
$httpHeaders = 'Http';
$responseHeaders = array('hell' => 'yeah');
@@ -301,7 +293,7 @@ class DispatcherTest extends \Test\TestCase {
$this->dispatcherPassthrough();
$response = $this->dispatcher->dispatch($controller, 'exec');
- $this->assertEquals('[3,true,4,1]', $response[2]);
+ $this->assertEquals('[3,true,4,1]', $response[3]);
}
@@ -324,7 +316,7 @@ class DispatcherTest extends \Test\TestCase {
$this->dispatcherPassthrough();
$response = $this->dispatcher->dispatch($controller, 'exec');
- $this->assertEquals('[3,true,4,7]', $response[2]);
+ $this->assertEquals('[3,true,4,7]', $response[3]);
}
@@ -350,7 +342,7 @@ class DispatcherTest extends \Test\TestCase {
$this->dispatcherPassthrough();
$response = $this->dispatcher->dispatch($controller, 'exec');
- $this->assertEquals('{"text":[3,false,4,1]}', $response[2]);
+ $this->assertEquals('{"text":[3,false,4,1]}', $response[3]);
}
@@ -375,7 +367,7 @@ class DispatcherTest extends \Test\TestCase {
$this->dispatcherPassthrough();
$response = $this->dispatcher->dispatch($controller, 'execDataResponse');
- $this->assertEquals('{"text":[3,false,4,1]}', $response[2]);
+ $this->assertEquals('{"text":[3,false,4,1]}', $response[3]);
}
@@ -401,7 +393,7 @@ class DispatcherTest extends \Test\TestCase {
$this->dispatcherPassthrough();
$response = $this->dispatcher->dispatch($controller, 'exec');
- $this->assertEquals('{"text":[3,false,4,1]}', $response[2]);
+ $this->assertEquals('{"text":[3,false,4,1]}', $response[3]);
}
@@ -429,7 +421,7 @@ class DispatcherTest extends \Test\TestCase {
$this->dispatcherPassthrough();
$response = $this->dispatcher->dispatch($controller, 'exec');
- $this->assertEquals('{"text":[3,true,4,1]}', $response[2]);
+ $this->assertEquals('{"text":[3,true,4,1]}', $response[3]);
}
diff --git a/tests/lib/appframework/http/ResponseTest.php b/tests/lib/appframework/http/ResponseTest.php
index 04e19fdaf71..b4352348bae 100644
--- a/tests/lib/appframework/http/ResponseTest.php
+++ b/tests/lib/appframework/http/ResponseTest.php
@@ -76,6 +76,92 @@ class ResponseTest extends \Test\TestCase {
}
+ public function testAddCookie() {
+ $this->childResponse->addCookie('foo', 'bar');
+ $this->childResponse->addCookie('bar', 'foo', new \DateTime('1970-01-01'));
+
+ $expectedResponse = array(
+ 'foo' => array(
+ 'value' => 'bar',
+ 'expireDate' => null,
+ ),
+ 'bar' => array(
+ 'value' => 'foo',
+ 'expireDate' => new \DateTime('1970-01-01')
+ )
+ );
+ $this->assertEquals($expectedResponse, $this->childResponse->getCookies());
+ }
+
+
+ function testSetCookies() {
+ $expected = array(
+ 'foo' => array(
+ 'value' => 'bar',
+ 'expireDate' => null,
+ ),
+ 'bar' => array(
+ 'value' => 'foo',
+ 'expireDate' => new \DateTime('1970-01-01')
+ )
+ );
+
+ $this->childResponse->setCookies($expected);
+ $cookies = $this->childResponse->getCookies();
+
+ $this->assertEquals($expected, $cookies);
+ }
+
+
+ function testInvalidateCookie() {
+ $this->childResponse->addCookie('foo', 'bar');
+ $this->childResponse->invalidateCookie('foo');
+ $expected = array(
+ 'foo' => array(
+ 'value' => 'expired',
+ 'expireDate' => new \DateTime('1971-01-01')
+ )
+ );
+
+ $cookies = $this->childResponse->getCookies();
+
+ $this->assertEquals($expected, $cookies);
+ }
+
+
+ function testInvalidateCookies() {
+ $this->childResponse->addCookie('foo', 'bar');
+ $this->childResponse->addCookie('bar', 'foo');
+ $expected = array(
+ 'foo' => array(
+ 'value' => 'bar',
+ 'expireDate' => null
+ ),
+ 'bar' => array(
+ 'value' => 'foo',
+ 'expireDate' => null
+ )
+ );
+ $cookies = $this->childResponse->getCookies();
+ $this->assertEquals($expected, $cookies);
+
+ $this->childResponse->invalidateCookies(array('foo', 'bar'));
+ $expected = array(
+ 'foo' => array(
+ 'value' => 'expired',
+ 'expireDate' => new \DateTime('1971-01-01')
+ ),
+ 'bar' => array(
+ 'value' => 'expired',
+ 'expireDate' => new \DateTime('1971-01-01')
+ )
+ );
+
+ $cookies = $this->childResponse->getCookies();
+ $this->assertEquals($expected, $cookies);
+ }
+
+
public function testRenderReturnNullByDefault(){
$this->assertEquals(null, $this->childResponse->render());
}
diff --git a/tests/lib/db.php b/tests/lib/db.php
index a401aded62a..aefbb3624ed 100644
--- a/tests/lib/db.php
+++ b/tests/lib/db.php
@@ -265,7 +265,7 @@ class Test_DB extends \Test\TestCase {
protected function insertCardData($fullname, $uri) {
$query = OC_DB::prepare("INSERT INTO `*PREFIX*{$this->table2}` (`fullname`, `uri`, `carddata`) VALUES (?, ?, ?)");
- $this->assertSame(1, $query->execute(array($fullname, $uri, uniqid())));
+ $this->assertSame(1, $query->execute(array($fullname, $uri, $this->getUniqueID())));
}
protected function updateCardData($fullname, $uri) {
diff --git a/tests/lib/db/migrator.php b/tests/lib/db/migrator.php
index 7acd3382fe2..1a1d530f1d2 100644
--- a/tests/lib/db/migrator.php
+++ b/tests/lib/db/migrator.php
@@ -39,7 +39,7 @@ class Migrator extends \Test\TestCase {
$this->markTestSkipped('DB migration tests are not supported on MSSQL');
}
$this->manager = new \OC\DB\MDB2SchemaManager($this->connection);
- $this->tableName = 'test_' . uniqid();
+ $this->tableName = strtolower($this->getUniqueID('test_'));
}
protected function tearDown() {
diff --git a/tests/lib/db/mysqlmigration.php b/tests/lib/db/mysqlmigration.php
index 70199147760..6c283e6c59c 100644
--- a/tests/lib/db/mysqlmigration.php
+++ b/tests/lib/db/mysqlmigration.php
@@ -23,7 +23,7 @@ class TestMySqlMigration extends \Test\TestCase {
}
$dbPrefix = \OC::$server->getConfig()->getSystemValue("dbtableprefix");
- $this->tableName = uniqid($dbPrefix . "_enum_bit_test");
+ $this->tableName = $this->getUniqueID($dbPrefix . '_enum_bit_test');
$this->connection->exec("CREATE TABLE $this->tableName(b BIT, e ENUM('1','2','3','4'))");
}
diff --git a/tests/lib/db/sqlitemigration.php b/tests/lib/db/sqlitemigration.php
index e3d0e386ab5..9206381ff71 100644
--- a/tests/lib/db/sqlitemigration.php
+++ b/tests/lib/db/sqlitemigration.php
@@ -23,7 +23,7 @@ class TestSqliteMigration extends \Test\TestCase {
}
$dbPrefix = \OC::$server->getConfig()->getSystemValue("dbtableprefix");
- $this->tableName = uniqid($dbPrefix . "_enum_bit_test");
+ $this->tableName = $this->getUniqueID($dbPrefix . '_enum_bit_test');
$this->connection->exec("CREATE TABLE $this->tableName(t0 tinyint unsigned, t1 tinyint)");
}
diff --git a/tests/lib/files/cache/cache.php b/tests/lib/files/cache/cache.php
index 02c45a16571..7360e9885c1 100644
--- a/tests/lib/files/cache/cache.php
+++ b/tests/lib/files/cache/cache.php
@@ -20,20 +20,20 @@ class Cache extends \Test\TestCase {
/**
* @var \OC\Files\Storage\Temporary $storage ;
*/
- private $storage;
+ protected $storage;
/**
* @var \OC\Files\Storage\Temporary $storage2 ;
*/
- private $storage2;
+ protected $storage2;
/**
* @var \OC\Files\Cache\Cache $cache
*/
- private $cache;
+ protected $cache;
/**
* @var \OC\Files\Cache\Cache $cache2
*/
- private $cache2;
+ protected $cache2;
public function testSimple() {
$file1 = 'foo';
diff --git a/tests/lib/files/cache/updaterlegacy.php b/tests/lib/files/cache/updaterlegacy.php
index 7c05800cd6b..7cf4dc6df5f 100644
--- a/tests/lib/files/cache/updaterlegacy.php
+++ b/tests/lib/files/cache/updaterlegacy.php
@@ -58,7 +58,7 @@ class UpdaterLegacy extends \Test\TestCase {
$this->originalStorage = Filesystem::getStorage('/');
Filesystem::tearDown();
if (!self::$user) {
- self::$user = uniqid();
+ self::$user = $this->getUniqueID();
}
\OC_User::createUser(self::$user, 'password');
diff --git a/tests/lib/files/cache/wrapper/cachejail.php b/tests/lib/files/cache/wrapper/cachejail.php
new file mode 100644
index 00000000000..13f3dc8858e
--- /dev/null
+++ b/tests/lib/files/cache/wrapper/cachejail.php
@@ -0,0 +1,67 @@
+<?php
+/**
+ * Copyright (c) 2014 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\Wrapper;
+
+use Test\Files\Cache\Cache;
+
+class CacheJail extends Cache {
+ /**
+ * @var \OC\Files\Cache\Cache $sourceCache
+ */
+ protected $sourceCache;
+
+ public function setUp() {
+ parent::setUp();
+ $this->storage->mkdir('foo');
+ $this->sourceCache = $this->cache;
+ $this->cache = new \OC\Files\Cache\Wrapper\CacheJail($this->sourceCache, 'foo');
+ }
+
+ function testSearchOutsideJail() {
+ $file1 = 'foo/foobar';
+ $file2 = 'folder/foobar';
+ $data1 = array('size' => 100, 'mtime' => 50, 'mimetype' => 'foo/folder');
+
+ $this->sourceCache->put($file1, $data1);
+ $this->sourceCache->put($file2, $data1);
+
+ $this->assertCount(2, $this->sourceCache->search('%foobar'));
+
+ $result = $this->cache->search('%foobar%');
+ $this->assertCount(1, $result);
+ $this->assertEquals('foobar', $result[0]['path']);
+ }
+
+ function testClearKeepEntriesOutsideJail() {
+ $file1 = 'foo/foobar';
+ $file2 = 'foo/foobar/asd';
+ $file3 = 'folder/foobar';
+ $data1 = array('size' => 100, 'mtime' => 50, 'mimetype' => 'httpd/unix-directory');
+
+ $this->sourceCache->put('foo', $data1);
+ $this->sourceCache->put($file1, $data1);
+ $this->sourceCache->put($file2, $data1);
+ $this->sourceCache->put($file3, $data1);
+
+ $this->cache->clear();
+
+ $this->assertFalse($this->cache->inCache('foobar'));
+ $this->assertTrue($this->sourceCache->inCache('folder/foobar'));
+ }
+
+ function testGetById() {
+ //not supported
+ $this->assertTrue(true);
+ }
+
+ function testGetIncomplete() {
+ //not supported
+ $this->assertTrue(true);
+ }
+}
diff --git a/tests/lib/files/cache/wrapper/cachepermissionsmask.php b/tests/lib/files/cache/wrapper/cachepermissionsmask.php
new file mode 100644
index 00000000000..72fd22741d3
--- /dev/null
+++ b/tests/lib/files/cache/wrapper/cachepermissionsmask.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * Copyright (c) 2014 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\Wrapper;
+
+use OCP\Constants;
+use Test\Files\Cache\Cache;
+
+class CachePermissionsMask extends Cache {
+ /**
+ * @var \OC\Files\Cache\Cache $sourceCache
+ */
+ protected $sourceCache;
+
+ public function setUp() {
+ parent::setUp();
+ $this->storage->mkdir('foo');
+ $this->sourceCache = $this->cache;
+ $this->cache = $this->getMaskedCached(Constants::PERMISSION_ALL);
+ }
+
+ protected function getMaskedCached($mask) {
+ return new \OC\Files\Cache\Wrapper\CachePermissionsMask($this->sourceCache, $mask);
+ }
+
+ public function maskProvider() {
+ return array(
+ array(Constants::PERMISSION_ALL),
+ array(Constants::PERMISSION_ALL - Constants::PERMISSION_SHARE),
+ array(Constants::PERMISSION_ALL - Constants::PERMISSION_UPDATE),
+ array(Constants::PERMISSION_READ)
+ );
+ }
+
+ /**
+ * @dataProvider maskProvider
+ * @param int $mask
+ */
+ public function testGetMasked($mask) {
+ $cache = $this->getMaskedCached($mask);
+ $data = array('size' => 100, 'mtime' => 50, 'mimetype' => 'text/plain', 'permissions' => Constants::PERMISSION_ALL);
+ $this->sourceCache->put('foo', $data);
+ $result = $cache->get('foo');
+ $this->assertEquals($mask, $result['permissions']);
+
+ $data = array('size' => 100, 'mtime' => 50, 'mimetype' => 'text/plain', 'permissions' => Constants::PERMISSION_ALL - Constants::PERMISSION_DELETE);
+ $this->sourceCache->put('bar', $data);
+ $result = $cache->get('bar');
+ $this->assertEquals($mask & ~Constants::PERMISSION_DELETE, $result['permissions']);
+ }
+
+ /**
+ * @dataProvider maskProvider
+ * @param int $mask
+ */
+ public function testGetFolderContentMasked($mask) {
+ $this->storage->mkdir('foo');
+ $this->storage->file_put_contents('foo/bar', 'asd');
+ $this->storage->file_put_contents('foo/asd', 'bar');
+ $this->storage->getScanner()->scan('');
+
+ $cache = $this->getMaskedCached($mask);
+ $files = $cache->getFolderContents('foo');
+ $this->assertCount(2, $files);
+
+ foreach ($files as $file) {
+ $this->assertEquals($mask & ~Constants::PERMISSION_CREATE, $file['permissions']);
+ }
+ }
+
+ /**
+ * @dataProvider maskProvider
+ * @param int $mask
+ */
+ public function testSearchMasked($mask) {
+ $this->storage->mkdir('foo');
+ $this->storage->file_put_contents('foo/bar', 'asd');
+ $this->storage->file_put_contents('foo/foobar', 'bar');
+ $this->storage->getScanner()->scan('');
+
+ $cache = $this->getMaskedCached($mask);
+ $files = $cache->search('%bar');
+ $this->assertCount(2, $files);
+
+ foreach ($files as $file) {
+ $this->assertEquals($mask & ~Constants::PERMISSION_CREATE, $file['permissions']);
+ }
+ }
+}
diff --git a/tests/lib/files/filesystem.php b/tests/lib/files/filesystem.php
index 746600c7d15..1b84db0fc0d 100644
--- a/tests/lib/files/filesystem.php
+++ b/tests/lib/files/filesystem.php
@@ -189,7 +189,7 @@ class Filesystem extends \Test\TestCase {
if (\OC\Files\Filesystem::getView()) {
$user = \OC_User::getUser();
} else {
- $user = uniqid();
+ $user = $this->getUniqueID();
\OC\Files\Filesystem::init($user, '/' . $user . '/files');
}
\OC_Hook::clear('OC_Filesystem');
@@ -217,7 +217,7 @@ class Filesystem extends \Test\TestCase {
*/
public function testLocalMountWhenUserDoesNotExist() {
$datadir = \OC_Config::getValue("datadirectory", \OC::$SERVERROOT . "/data");
- $userId = uniqid('user_');
+ $userId = $this->getUniqueID('user_');
\OC\Files\Filesystem::initMountPoints($userId);
@@ -231,7 +231,7 @@ class Filesystem extends \Test\TestCase {
* Tests that the home storage is used for the user's mount point
*/
public function testHomeMount() {
- $userId = uniqid('user_');
+ $userId = $this->getUniqueID('user_');
\OC_User::createUser($userId, $userId);
@@ -251,7 +251,7 @@ class Filesystem extends \Test\TestCase {
*/
public function testLegacyHomeMount() {
$datadir = \OC_Config::getValue("datadirectory", \OC::$SERVERROOT . "/data");
- $userId = uniqid('user_');
+ $userId = $this->getUniqueID('user_');
// insert storage into DB by constructing it
// to make initMountsPoint find its existence
@@ -281,7 +281,7 @@ class Filesystem extends \Test\TestCase {
* Test that the default cache dir is part of the user's home
*/
public function testMountDefaultCacheDir() {
- $userId = uniqid('user_');
+ $userId = $this->getUniqueID('user_');
$oldCachePath = \OC_Config::getValue('cache_path', '');
// no cache path configured
\OC_Config::setValue('cache_path', '');
@@ -306,7 +306,7 @@ class Filesystem extends \Test\TestCase {
* the user's home
*/
public function testMountExternalCacheDir() {
- $userId = uniqid('user_');
+ $userId = $this->getUniqueID('user_');
$oldCachePath = \OC_Config::getValue('cache_path', '');
// set cache path to temp dir
diff --git a/tests/lib/files/node/file.php b/tests/lib/files/node/file.php
index 1ae312ab5a8..a1d2266edf7 100644
--- a/tests/lib/files/node/file.php
+++ b/tests/lib/files/node/file.php
@@ -8,6 +8,7 @@
namespace Test\Files\Node;
+use OC\Files\FileInfo;
use OCP\Files\NotFoundException;
use OCP\Files\NotPermittedException;
use OC\Files\View;
@@ -20,6 +21,10 @@ class File extends \Test\TestCase {
$this->user = new \OC\User\User('', new \OC_User_Dummy);
}
+ protected function getFileInfo($data) {
+ return new FileInfo('', null, '', $data);
+ }
+
public function testDelete() {
$manager = $this->getMock('\OC\Files\Mount\Manager');
@@ -39,7 +44,7 @@ class File extends \Test\TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
$view->expects($this->once())
->method('unlink')
@@ -89,7 +94,7 @@ class File extends \Test\TestCase {
$view->expects($this->any())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1))));
$view->expects($this->once())
->method('unlink')
@@ -124,7 +129,7 @@ class File extends \Test\TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_READ)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$node->delete();
@@ -156,7 +161,7 @@ class File extends \Test\TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_READ)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$this->assertEquals('bar', $node->getContent());
@@ -180,7 +185,7 @@ class File extends \Test\TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => 0)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => 0))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$node->getContent();
@@ -201,7 +206,7 @@ class File extends \Test\TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
$view->expects($this->once())
->method('file_put_contents')
@@ -226,7 +231,7 @@ class File extends \Test\TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_READ)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$node->putContent('bar');
@@ -241,9 +246,9 @@ class File extends \Test\TestCase {
$root = $this->getMock('\OC\Files\Node\Root', array(), array($manager, $view, $this->user));
$view->expects($this->once())
- ->method('getMimeType')
+ ->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue('text/plain'));
+ ->will($this->returnValue($this->getFileInfo(array('mimetype' => 'text/plain'))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$this->assertEquals('text/plain', $node->getMimeType());
@@ -279,7 +284,7 @@ class File extends \Test\TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$fh = $node->fopen('r');
@@ -316,7 +321,7 @@ class File extends \Test\TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$fh = $node->fopen('w');
@@ -348,7 +353,7 @@ class File extends \Test\TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => 0)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => 0))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$node->fopen('r');
@@ -375,7 +380,7 @@ class File extends \Test\TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_UPDATE)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_UPDATE))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$node->fopen('w');
@@ -402,7 +407,7 @@ class File extends \Test\TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_READ)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$node->fopen('w');
@@ -425,7 +430,7 @@ class File extends \Test\TestCase {
$view->expects($this->any())
->method('getFileInfo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 3)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 3))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$parentNode = new \OC\Files\Node\Folder($root, $view, '/bar');
@@ -469,7 +474,7 @@ class File extends \Test\TestCase {
$view->expects($this->any())
->method('getFileInfo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_READ, 'fileid' => 3)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ, 'fileid' => 3))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$parentNode = new \OC\Files\Node\Folder($root, $view, '/bar');
@@ -556,7 +561,7 @@ class File extends \Test\TestCase {
$view->expects($this->any())
->method('getFileInfo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1))));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$parentNode = new \OC\Files\Node\Folder($root, $view, '/bar');
@@ -587,7 +592,7 @@ class File extends \Test\TestCase {
$view->expects($this->any())
->method('getFileInfo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_READ)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
$view->expects($this->never())
->method('rename');
diff --git a/tests/lib/files/node/folder.php b/tests/lib/files/node/folder.php
index 91aa3b82db2..4aa57aa9373 100644
--- a/tests/lib/files/node/folder.php
+++ b/tests/lib/files/node/folder.php
@@ -9,6 +9,7 @@
namespace Test\Files\Node;
use OC\Files\Cache\Cache;
+use OC\Files\FileInfo;
use OC\Files\Mount\Mount;
use OC\Files\Node\Node;
use OCP\Files\NotFoundException;
@@ -23,6 +24,10 @@ class Folder extends \Test\TestCase {
$this->user = new \OC\User\User('', new \OC_User_Dummy);
}
+ protected function getFileInfo($data) {
+ return new FileInfo('', null, '', $data);
+ }
+
public function testDelete() {
$manager = $this->getMock('\OC\Files\Mount\Manager');
/**
@@ -39,7 +44,7 @@ class Folder extends \Test\TestCase {
$view->expects($this->any())
->method('getFileInfo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
$view->expects($this->once())
->method('rmdir')
@@ -87,7 +92,7 @@ class Folder extends \Test\TestCase {
$view->expects($this->any())
->method('getFileInfo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1))));
$view->expects($this->once())
->method('rmdir')
@@ -121,7 +126,7 @@ class Folder extends \Test\TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_READ)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
$node = new \OC\Files\Node\Folder($root, $view, '/bar/foo');
$node->delete();
@@ -255,7 +260,7 @@ class Folder extends \Test\TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
$view->expects($this->once())
->method('mkdir')
@@ -285,7 +290,7 @@ class Folder extends \Test\TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_READ)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
$node = new \OC\Files\Node\Folder($root, $view, '/bar/foo');
$node->newFolder('asd');
@@ -305,7 +310,7 @@ class Folder extends \Test\TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
$view->expects($this->once())
->method('touch')
@@ -335,7 +340,7 @@ class Folder extends \Test\TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_READ)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
$node = new \OC\Files\Node\Folder($root, $view, '/bar/foo');
$node->newFile('asd');
diff --git a/tests/lib/files/node/integration.php b/tests/lib/files/node/integration.php
index fd777460ec6..d8c180cc844 100644
--- a/tests/lib/files/node/integration.php
+++ b/tests/lib/files/node/integration.php
@@ -48,7 +48,7 @@ class IntegrationTests extends \Test\TestCase {
\OC_Hook::connect('OC_Filesystem', 'post_rename', '\OC\Files\Cache\Updater', 'renameHook');
\OC_Hook::connect('OC_Filesystem', 'post_touch', '\OC\Files\Cache\Updater', 'touchHook');
- $user = new User(uniqid('user'), new \OC_User_Dummy);
+ $user = new User($this->getUniqueID('user'), new \OC_User_Dummy);
\OC_User::setUserId($user->getUID());
$this->view = new View();
$this->root = new Root($manager, $this->view, $user);
diff --git a/tests/lib/files/node/node.php b/tests/lib/files/node/node.php
index 8820be5b0b2..4697479ba95 100644
--- a/tests/lib/files/node/node.php
+++ b/tests/lib/files/node/node.php
@@ -8,6 +8,8 @@
namespace Test\Files\Node;
+use OC\Files\FileInfo;
+
class Node extends \Test\TestCase {
private $user;
@@ -16,6 +18,10 @@ class Node extends \Test\TestCase {
$this->user = new \OC\User\User('', new \OC_User_Dummy);
}
+ protected function getFileInfo($data) {
+ return new FileInfo('', null, '', $data);
+ }
+
public function testStat() {
$manager = $this->getMock('\OC\Files\Mount\Manager');
/**
@@ -55,12 +61,12 @@ class Node extends \Test\TestCase {
->method('getUser')
->will($this->returnValue($this->user));
- $stat = array(
+ $stat = $this->getFileInfo(array(
'fileid' => 1,
'size' => 100,
'etag' => 'qwerty',
'mtime' => 50
- );
+ ));
$view->expects($this->once())
->method('getFileInfo')
@@ -82,10 +88,18 @@ class Node extends \Test\TestCase {
->method('getUser')
->will($this->returnValue($this->user));
+
+ $stat = $this->getFileInfo(array(
+ 'fileid' => 1,
+ 'size' => 100,
+ 'etag' => 'qwerty',
+ 'mtime' => 50
+ ));
+
$view->expects($this->once())
- ->method('filesize')
+ ->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(100));
+ ->will($this->returnValue($stat));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$this->assertEquals(100, $node->getSize());
@@ -102,12 +116,12 @@ class Node extends \Test\TestCase {
->method('getUser')
->will($this->returnValue($this->user));
- $stat = array(
+ $stat = $this->getFileInfo(array(
'fileid' => 1,
'size' => 100,
'etag' => 'qwerty',
'mtime' => 50
- );
+ ));
$view->expects($this->once())
->method('getFileInfo')
@@ -128,15 +142,18 @@ class Node extends \Test\TestCase {
$root->expects($this->any())
->method('getUser')
->will($this->returnValue($this->user));
- /**
- * @var \OC\Files\Storage\Storage | \PHPUnit_Framework_MockObject_MockObject $storage
- */
- $storage = $this->getMock('\OC\Files\Storage\Storage');
+
+ $stat = $this->getFileInfo(array(
+ 'fileid' => 1,
+ 'size' => 100,
+ 'etag' => 'qwerty',
+ 'mtime' => 50
+ ));
$view->expects($this->once())
- ->method('filemtime')
+ ->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(50));
+ ->will($this->returnValue($stat));
$node = new \OC\Files\Node\File($root, $view, '/bar/foo');
$this->assertEquals(50, $node->getMTime());
@@ -239,14 +256,9 @@ class Node extends \Test\TestCase {
->will($this->returnValue(true));
$view->expects($this->once())
- ->method('filemtime')
- ->with('/bar/foo')
- ->will($this->returnValue(100));
-
- $view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
$node = new \OC\Files\Node\Node($root, $view, '/bar/foo');
$node->touch(100);
@@ -299,7 +311,7 @@ class Node extends \Test\TestCase {
$view->expects($this->any())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
$node = new \OC\Files\Node\Node($root, $view, '/bar/foo');
$node->touch(100);
@@ -323,7 +335,7 @@ class Node extends \Test\TestCase {
$view->expects($this->any())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_READ)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ))));
$node = new \OC\Files\Node\Node($root, $view, '/bar/foo');
$node->touch(100);
diff --git a/tests/lib/files/node/root.php b/tests/lib/files/node/root.php
index fcce7070f5d..35bd462157e 100644
--- a/tests/lib/files/node/root.php
+++ b/tests/lib/files/node/root.php
@@ -8,6 +8,7 @@
namespace Test\Files\Node;
+use OC\Files\FileInfo;
use OCP\Files\NotPermittedException;
use OC\Files\Mount\Manager;
@@ -19,6 +20,10 @@ class Root extends \Test\TestCase {
$this->user = new \OC\User\User('', new \OC_User_Dummy);
}
+ protected function getFileInfo($data) {
+ return new FileInfo('', null, '', $data);
+ }
+
public function testGet() {
$manager = new Manager();
/**
@@ -34,7 +39,7 @@ class Root extends \Test\TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('fileid' => 10, 'path' => 'bar/foo', 'name', 'mimetype' => 'text/plain')));
+ ->will($this->returnValue($this->getFileInfo(array('fileid' => 10, 'path' => 'bar/foo', 'name', 'mimetype' => 'text/plain'))));
$view->expects($this->once())
->method('is_dir')
diff --git a/tests/lib/files/objectstore/swift.php b/tests/lib/files/objectstore/swift.php
index f2c4a983cf2..30c60598277 100644
--- a/tests/lib/files/objectstore/swift.php
+++ b/tests/lib/files/objectstore/swift.php
@@ -34,7 +34,7 @@ class Swift extends \Test\Files\Storage\Storage {
parent::setUp();
if (!getenv('RUN_OBJECTSTORE_TESTS')) {
- $this->markTestSkipped('objectstore tests are unreliable on travis');
+ $this->markTestSkipped('objectstore tests are unreliable in some environments');
}
\OC_App::disable('files_sharing');
@@ -87,10 +87,6 @@ class Swift extends \Test\Files\Storage\Storage {
}
public function testStat() {
- // TODO travis
- if (getenv('TRAVIS')) {
- $this->markTestSkipped('Fails on travis - connection times out sometimes');
- }
$textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
$ctimeStart = time();
diff --git a/tests/lib/files/storage/wrapper/jail.php b/tests/lib/files/storage/wrapper/jail.php
new file mode 100644
index 00000000000..270ce750ecf
--- /dev/null
+++ b/tests/lib/files/storage/wrapper/jail.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Files\Storage\Wrapper;
+
+class Jail extends \Test\Files\Storage\Storage {
+ /**
+ * @var string tmpDir
+ */
+ private $tmpDir;
+
+ /**
+ * @var \OC\Files\Storage\Temporary
+ */
+ private $sourceStorage;
+
+ public function setUp() {
+ parent::setUp();
+ $this->sourceStorage = new \OC\Files\Storage\Temporary(array());
+ $this->sourceStorage->mkdir('foo');
+ $this->instance = new \OC\Files\Storage\Wrapper\Jail(array(
+ 'storage' => $this->sourceStorage,
+ 'root' => 'foo'
+ ));
+ }
+
+ public function tearDown() {
+ // test that nothing outside our jail is touched
+ $contents = array();
+ $dh = $this->sourceStorage->opendir('');
+ while ($file = readdir($dh)) {
+ if ($file !== '.' and $file !== '..') {
+ $contents[] = $file;
+ }
+ }
+ $this->assertEquals(array('foo'), $contents);
+ $this->sourceStorage->cleanUp();
+ parent::tearDown();
+ }
+
+ public function testMkDirRooted() {
+ $this->instance->mkdir('bar');
+ $this->assertTrue($this->sourceStorage->is_dir('foo/bar'));
+ }
+
+ public function testFilePutContentsRooted() {
+ $this->instance->file_put_contents('bar', 'asd');
+ $this->assertEquals('asd', $this->sourceStorage->file_get_contents('foo/bar'));
+ }
+}
diff --git a/tests/lib/files/storage/wrapper/permissionsmask.php b/tests/lib/files/storage/wrapper/permissionsmask.php
new file mode 100644
index 00000000000..7e8c387677c
--- /dev/null
+++ b/tests/lib/files/storage/wrapper/permissionsmask.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Files\Storage\Wrapper;
+
+use OCP\Constants;
+
+class PermissionsMask extends \Test\Files\Storage\Storage {
+
+ /**
+ * @var \OC\Files\Storage\Temporary
+ */
+ private $sourceStorage;
+
+ public function setUp() {
+ parent::setUp();
+ $this->sourceStorage = new \OC\Files\Storage\Temporary(array());
+ $this->instance = $this->getMaskedStorage(Constants::PERMISSION_ALL);
+ }
+
+ public function tearDown() {
+ $this->sourceStorage->cleanUp();
+ parent::tearDown();
+ }
+
+ protected function getMaskedStorage($mask) {
+ return new \OC\Files\Storage\Wrapper\PermissionsMask(array(
+ 'storage' => $this->sourceStorage,
+ 'mask' => $mask
+ ));
+ }
+
+ public function testMkdirNoCreate() {
+ $storage = $this->getMaskedStorage(Constants::PERMISSION_ALL - Constants::PERMISSION_CREATE);
+ $this->assertFalse($storage->mkdir('foo'));
+ $this->assertFalse($storage->file_exists('foo'));
+ }
+
+ public function testRmdirNoDelete() {
+ $storage = $this->getMaskedStorage(Constants::PERMISSION_ALL - Constants::PERMISSION_DELETE);
+ $this->assertTrue($storage->mkdir('foo'));
+ $this->assertTrue($storage->file_exists('foo'));
+ $this->assertFalse($storage->rmdir('foo'));
+ $this->assertTrue($storage->file_exists('foo'));
+ }
+
+ public function testTouchNewFileNoCreate() {
+ $storage = $this->getMaskedStorage(Constants::PERMISSION_ALL - Constants::PERMISSION_CREATE);
+ $this->assertFalse($storage->touch('foo'));
+ $this->assertFalse($storage->file_exists('foo'));
+ }
+
+ public function testTouchNewFileNoUpdate() {
+ $storage = $this->getMaskedStorage(Constants::PERMISSION_ALL - Constants::PERMISSION_UPDATE);
+ $this->assertTrue($storage->touch('foo'));
+ $this->assertTrue($storage->file_exists('foo'));
+ }
+
+ public function testTouchExistingFileNoUpdate() {
+ $this->sourceStorage->touch('foo');
+ $storage = $this->getMaskedStorage(Constants::PERMISSION_ALL - Constants::PERMISSION_UPDATE);
+ $this->assertFalse($storage->touch('foo'));
+ }
+
+ public function testUnlinkNoDelete() {
+ $storage = $this->getMaskedStorage(Constants::PERMISSION_ALL - Constants::PERMISSION_DELETE);
+ $this->assertTrue($storage->touch('foo'));
+ $this->assertTrue($storage->file_exists('foo'));
+ $this->assertFalse($storage->unlink('foo'));
+ $this->assertTrue($storage->file_exists('foo'));
+ }
+
+ public function testPutContentsNewFileNoUpdate() {
+ $storage = $this->getMaskedStorage(Constants::PERMISSION_ALL - Constants::PERMISSION_UPDATE);
+ $this->assertTrue($storage->file_put_contents('foo', 'bar'));
+ $this->assertEquals('bar', $storage->file_get_contents('foo'));
+ }
+
+ public function testPutContentsNewFileNoCreate() {
+ $storage = $this->getMaskedStorage(Constants::PERMISSION_ALL - Constants::PERMISSION_CREATE);
+ $this->assertFalse($storage->file_put_contents('foo', 'bar'));
+ }
+
+ public function testPutContentsExistingFileNoUpdate() {
+ $this->sourceStorage->touch('foo');
+ $storage = $this->getMaskedStorage(Constants::PERMISSION_ALL - Constants::PERMISSION_UPDATE);
+ $this->assertFalse($storage->file_put_contents('foo', 'bar'));
+ }
+
+ public function testFopenExistingFileNoUpdate() {
+ $this->sourceStorage->touch('foo');
+ $storage = $this->getMaskedStorage(Constants::PERMISSION_ALL - Constants::PERMISSION_UPDATE);
+ $this->assertFalse($storage->fopen('foo', 'w'));
+ }
+
+ public function testFopenNewFileNoCreate() {
+ $storage = $this->getMaskedStorage(Constants::PERMISSION_ALL - Constants::PERMISSION_CREATE);
+ $this->assertFalse($storage->fopen('foo', 'w'));
+ }
+}
diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php
index d6dd176bba9..8bb4e0ac2cc 100644
--- a/tests/lib/files/view.php
+++ b/tests/lib/files/view.php
@@ -71,7 +71,7 @@ class View extends \Test\TestCase {
$storage1 = $this->getTestStorage();
$storage2 = $this->getTestStorage();
$storage3 = $this->getTestStorage();
- $root = '/' . uniqid();
+ $root = $this->getUniqueID('/');
\OC\Files\Filesystem::mount($storage1, array(), $root . '/');
\OC\Files\Filesystem::mount($storage2, array(), $root . '/substorage');
\OC\Files\Filesystem::mount($storage3, array(), $root . '/folder/anotherstorage');
diff --git a/tests/lib/memcache/apc.php b/tests/lib/memcache/apc.php
index 550d5068dc1..fdb785b9dc5 100644
--- a/tests/lib/memcache/apc.php
+++ b/tests/lib/memcache/apc.php
@@ -21,6 +21,6 @@ class APC extends Cache {
$this->markTestSkipped('The apc extension is emulated by ACPu.');
return;
}
- $this->instance=new \OC\Memcache\APC(uniqid());
+ $this->instance=new \OC\Memcache\APC($this->getUniqueID());
}
}
diff --git a/tests/lib/memcache/apcu.php b/tests/lib/memcache/apcu.php
index 1b849e1c54d..afcaa99bfbe 100644
--- a/tests/lib/memcache/apcu.php
+++ b/tests/lib/memcache/apcu.php
@@ -17,6 +17,6 @@ class APCu extends Cache {
$this->markTestSkipped('The APCu extension is not available.');
return;
}
- $this->instance=new \OC\Memcache\APCu(uniqid());
+ $this->instance=new \OC\Memcache\APCu($this->getUniqueID());
}
}
diff --git a/tests/lib/memcache/memcached.php b/tests/lib/memcache/memcached.php
index a94b809a7b5..51a78996dd4 100644
--- a/tests/lib/memcache/memcached.php
+++ b/tests/lib/memcache/memcached.php
@@ -16,14 +16,14 @@ class Memcached extends Cache {
if (!\OC\Memcache\Memcached::isAvailable()) {
self::markTestSkipped('The memcached extension is not available.');
}
- $instance = new \OC\Memcache\Memcached(uniqid());
- if ($instance->set(uniqid(), uniqid()) === false) {
+ $instance = new \OC\Memcache\Memcached(self::getUniqueID());
+ if ($instance->set(self::getUniqueID(), self::getUniqueID()) === false) {
self::markTestSkipped('memcached server seems to be down.');
}
}
protected function setUp() {
parent::setUp();
- $this->instance = new \OC\Memcache\Memcached(uniqid());
+ $this->instance = new \OC\Memcache\Memcached($this->getUniqueID());
}
}
diff --git a/tests/lib/memcache/xcache.php b/tests/lib/memcache/xcache.php
index b97d5545c6e..36efe0b220a 100644
--- a/tests/lib/memcache/xcache.php
+++ b/tests/lib/memcache/xcache.php
@@ -17,6 +17,6 @@ class XCache extends Cache {
$this->markTestSkipped('The xcache extension is not available.');
return;
}
- $this->instance = new \OC\Memcache\XCache(uniqid());
+ $this->instance = new \OC\Memcache\XCache($this->getUniqueID());
}
}
diff --git a/tests/lib/ocs/privatedata.php b/tests/lib/ocs/privatedata.php
index 20f1dd38362..a9300f5beac 100644
--- a/tests/lib/ocs/privatedata.php
+++ b/tests/lib/ocs/privatedata.php
@@ -26,7 +26,7 @@ class Test_OC_OCS_Privatedata extends \Test\TestCase {
protected function setUp() {
parent::setUp();
\OC::$server->getSession()->set('user_id', 'user1');
- $this->appKey = uniqid('app');
+ $this->appKey = $this->getUniqueID('app');
}
public function testGetEmptyOne() {
diff --git a/tests/lib/repair/repaircollation.php b/tests/lib/repair/repaircollation.php
index e711fcd9d83..29dad190008 100644
--- a/tests/lib/repair/repaircollation.php
+++ b/tests/lib/repair/repaircollation.php
@@ -53,7 +53,7 @@ class TestRepairCollation extends \Test\TestCase {
}
$dbPrefix = $this->config->getSystemValue("dbtableprefix");
- $this->tableName = uniqid($dbPrefix . "_collation_test");
+ $this->tableName = $this->getUniqueID($dbPrefix . "_collation_test");
$this->connection->exec("CREATE TABLE $this->tableName(text VARCHAR(16)) COLLATE utf8_unicode_ci");
$this->repair = new TestCollationRepair($this->config, $this->connection);
diff --git a/tests/lib/repair/repairinnodb.php b/tests/lib/repair/repairinnodb.php
index 21d7d978821..d4039472a6b 100644
--- a/tests/lib/repair/repairinnodb.php
+++ b/tests/lib/repair/repairinnodb.php
@@ -31,7 +31,7 @@ class TestRepairInnoDB extends \Test\TestCase {
}
$dbPrefix = \OC::$server->getConfig()->getSystemValue("dbtableprefix");
- $this->tableName = uniqid($dbPrefix . "_innodb_test");
+ $this->tableName = $this->getUniqueID($dbPrefix . "_innodb_test");
$this->connection->exec("CREATE TABLE $this->tableName(id INT) ENGINE MyISAM");
$this->repair = new \OC\Repair\InnoDB();
diff --git a/tests/lib/repair/repairlegacystorage.php b/tests/lib/repair/repairlegacystorage.php
index ac845657cd9..f08393300e1 100644
--- a/tests/lib/repair/repairlegacystorage.php
+++ b/tests/lib/repair/repairlegacystorage.php
@@ -13,6 +13,8 @@
*/
class TestRepairLegacyStorages extends \Test\TestCase {
+ private $connection;
+ private $config;
private $user;
private $repair;
@@ -247,12 +249,12 @@ class TestRepairLegacyStorages extends \Test\TestCase {
// regular data dir
array(
'/tmp/oc-autotest/datadir/',
- uniqid('user_'),
+ $this->getUniqueID('user_'),
),
// long datadir / short user
array(
'/tmp/oc-autotest/datadir01234567890123456789012345678901234567890123456789END/',
- uniqid('user_'),
+ $this->getUniqueID('user_'),
),
// short datadir / long user
array(
@@ -271,7 +273,7 @@ class TestRepairLegacyStorages extends \Test\TestCase {
$output[] = 'info: ' . $description;
});
- $this->prepareSettings('/tmp/oc-autotest/datadir', uniqid('user_'));
+ $this->prepareSettings('/tmp/oc-autotest/datadir', $this->getUniqueID('user_'));
$this->assertNotEquals('yes', $this->config->getAppValue('core', 'repairlegacystoragesdone'));
$this->repair->run();
$this->assertEquals(1, count($output));
diff --git a/tests/lib/request.php b/tests/lib/request.php
index 254048723e7..ea3722b90a6 100644
--- a/tests/lib/request.php
+++ b/tests/lib/request.php
@@ -228,6 +228,23 @@ class Test_Request extends \Test\TestCase {
OC_Config::deleteKey('overwritehost');
}
+ public function hostWithPortProvider() {
+ return array(
+ array('localhost:500', 'localhost'),
+ array('foo.com', 'foo.com'),
+ array('[1fff:0:a88:85a3::ac1f]:801', '[1fff:0:a88:85a3::ac1f]'),
+ array('[1fff:0:a88:85a3::ac1f]', '[1fff:0:a88:85a3::ac1f]')
+ );
+ }
+
+ /**
+ * @dataProvider hostWithPortProvider
+ */
+ public function testGetDomainWithoutPort($hostWithPort, $host) {
+ $this->assertEquals($host, OC_Request::getDomainWithoutPort($hostWithPort));
+
+ }
+
/**
* @dataProvider trustedDomainDataProvider
*/
diff --git a/tests/lib/session/memory.php b/tests/lib/session/memory.php
index 84dee548a1e..1ca4956c6ea 100644
--- a/tests/lib/session/memory.php
+++ b/tests/lib/session/memory.php
@@ -12,6 +12,6 @@ namespace Test\Session;
class Memory extends Session {
protected function setUp() {
parent::setUp();
- $this->instance = new \OC\Session\Memory(uniqid());
+ $this->instance = new \OC\Session\Memory($this->getUniqueID());
}
}
diff --git a/tests/lib/share/backend.php b/tests/lib/share/backend.php
index 61b8f262a42..07958266947 100644
--- a/tests/lib/share/backend.php
+++ b/tests/lib/share/backend.php
@@ -19,8 +19,6 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
-OC::$CLASSPATH['OCP\Share_Backend']='lib/public/share.php';
-
class Test_Share_Backend implements OCP\Share_Backend {
const FORMAT_SOURCE = 0;
diff --git a/tests/lib/tags.php b/tests/lib/tags.php
index 3f0c52d19ea..533e6a19add 100644
--- a/tests/lib/tags.php
+++ b/tests/lib/tags.php
@@ -25,14 +25,18 @@ class Test_Tags extends \Test\TestCase {
protected $objectType;
protected $user;
protected $backupGlobals = FALSE;
+ /** @var \OC\Tagging\TagMapper */
+ protected $tagMapper;
+ /** @var \OC\TagManager */
+ protected $tagMgr;
protected function setUp() {
parent::setUp();
OC_User::clearBackends();
OC_User::useBackend('dummy');
- $this->user = uniqid('user_');
- $this->objectType = uniqid('type_');
+ $this->user = $this->getUniqueID('user_');
+ $this->objectType = $this->getUniqueID('type_');
OC_User::createUser($this->user, 'pass');
OC_User::setUserId($this->user);
$this->tagMapper = new OC\Tagging\TagMapper(\OC::$server->getDb());
@@ -205,7 +209,7 @@ class Test_Tags extends \Test\TestCase {
$tagger = $this->tagMgr->load('test');
$tagger->tagAs(1, $test_tag);
- $other_user = uniqid('user2_');
+ $other_user = $this->getUniqueID('user2_');
OC_User::createUser($other_user, 'pass');
OC_User::setUserId($other_user);
diff --git a/tests/lib/testcase.php b/tests/lib/testcase.php
index 934bc5fa8f3..27c28329535 100644
--- a/tests/lib/testcase.php
+++ b/tests/lib/testcase.php
@@ -22,6 +22,8 @@
namespace Test;
+use OCP\Security\ISecureRandom;
+
abstract class TestCase extends \PHPUnit_Framework_TestCase {
/**
* Returns a unique identifier as uniqid() is not reliable sometimes
@@ -30,11 +32,11 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
* @param int $length
* @return string
*/
- protected function getUniqueID($prefix = '', $length = 13) {
+ protected static function getUniqueID($prefix = '', $length = 13) {
return $prefix . \OC::$server->getSecureRandom()->getLowStrengthGenerator()->generate(
$length,
// Do not use dots and slashes as we use the value for file names
- '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
+ ISecureRandom::CHAR_DIGITS . ISecureRandom::CHAR_LOWER . ISecureRandom::CHAR_UPPER
);
}
diff --git a/tests/lib/util.php b/tests/lib/util.php
index 6de599b070e..1ddbd2aba2b 100644
--- a/tests/lib/util.php
+++ b/tests/lib/util.php
@@ -150,7 +150,7 @@ class Test_Util extends \Test\TestCase {
* Tests that the home storage is not wrapped when no quota exists.
*/
function testHomeStorageWrapperWithoutQuota() {
- $user1 = uniqid();
+ $user1 = $this->getUniqueID();
\OC_User::createUser($user1, 'test');
OC_Preferences::setValue($user1, 'files', 'quota', 'none');
\OC_User::setUserId($user1);
@@ -172,7 +172,7 @@ class Test_Util extends \Test\TestCase {
* Tests that the home storage is not wrapped when no quota exists.
*/
function testHomeStorageWrapperWithQuota() {
- $user1 = uniqid();
+ $user1 = $this->getUniqueID();
\OC_User::createUser($user1, 'test');
OC_Preferences::setValue($user1, 'files', 'quota', '1024');
\OC_User::setUserId($user1);
@@ -331,7 +331,7 @@ class Test_Util extends \Test\TestCase {
Dummy_OC_App::setEnabledApps($enabledApps);
// need to set a user id to make sure enabled apps are read from cache
- \OC_User::setUserId(uniqid());
+ \OC_User::setUserId($this->getUniqueID());
\OCP\Config::setSystemValue('defaultapp', $defaultAppConfig);
$this->assertEquals('http://localhost/' . $expectedPath, \OC_Util::getDefaultPageUrl());
diff --git a/tests/phpunit-autotest.xml b/tests/phpunit-autotest.xml
index 9fba824bc7d..15e0e3dd408 100644
--- a/tests/phpunit-autotest.xml
+++ b/tests/phpunit-autotest.xml
@@ -20,8 +20,7 @@
<exclude>
<directory suffix=".php">../3rdparty</directory>
<directory suffix=".php">../apps/files/l10n</directory>
- <directory suffix=".php">../apps/files_external/l10n</directory>
- <directory suffix=".php">../apps/files_external/3rdparty</directory>
+ <directory suffix=".php">../apps/files_external</directory>
<directory suffix=".php">../apps/files_versions/l10n</directory>
<directory suffix=".php">../apps/files_encryption/l10n</directory>
<directory suffix=".php">../apps/files_encryption/3rdparty</directory>