summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore6
-rw-r--r--.htaccess2
m---------3rdparty0
-rw-r--r--apps/files/ajax/delete.php4
-rw-r--r--apps/files/ajax/upload.php14
-rw-r--r--apps/files/appinfo/remote.php2
-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/ca.js1
-rw-r--r--apps/files/l10n/ca.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/l10n/it.js8
-rw-r--r--apps/files/l10n/it.json8
-rw-r--r--apps/files/lib/capabilities.php1
-rw-r--r--apps/files/lib/helper.php2
-rw-r--r--apps/files/tests/ajax_rename.php15
-rw-r--r--apps/files/tests/helper.php8
-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.php9
-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.php239
-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.js9
-rw-r--r--apps/files_encryption/l10n/pl.json9
-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.js18
-rw-r--r--apps/files_encryption/l10n/ru.json18
-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/sq.js3
-rw-r--r--apps/files_encryption/l10n/sq.json3
-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.php99
-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.php12
-rw-r--r--apps/files_encryption/lib/session.php67
-rw-r--r--apps/files_encryption/lib/stream.php1
-rw-r--r--apps/files_encryption/lib/util.php159
-rwxr-xr-xapps/files_encryption/tests/crypt.php127
-rw-r--r--apps/files_encryption/tests/helper.php85
-rw-r--r--apps/files_encryption/tests/hooks.php184
-rw-r--r--apps/files_encryption/tests/keymanager.php307
-rw-r--r--apps/files_encryption/tests/migration.php259
-rw-r--r--apps/files_encryption/tests/proxy.php34
-rwxr-xr-xapps/files_encryption/tests/share.php371
-rw-r--r--apps/files_encryption/tests/stream.php56
-rw-r--r--apps/files_encryption/tests/testcase.php84
-rwxr-xr-xapps/files_encryption/tests/trashbin.php174
-rwxr-xr-xapps/files_encryption/tests/util.php207
-rwxr-xr-xapps/files_encryption/tests/webdav.php48
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/NOTICE4
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/README40
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/README.md77
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/Abstract.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Auth.php)25
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/AssertionCredentials.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/auth/Google_AssertionCredentials.php)52
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/Exception.php22
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/LoginTicket.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/auth/Google_LoginTicket.php)20
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/OAuth2.php620
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/Simple.php62
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Abstract.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/cache/Google_Cache.php)16
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Apc.php73
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Exception.php21
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/File.php145
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Memcache.php137
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Client.php665
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Collection.php96
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Config.php371
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Exception.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/service/Google_Service.php)8
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Http/Batch.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/service/Google_BatchRequest.php)79
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Http/CacheParser.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/io/Google_CacheParser.php)37
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Http/MediaFileUpload.php301
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Http/REST.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/io/Google_REST.php)75
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Http/Request.php476
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Abstract.php332
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Curl.php137
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Exception.php22
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Stream.php211
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/IO/cacerts.pem (renamed from apps/files_external/3rdparty/google-api-php-client/src/io/cacerts.pem)24
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Model.php265
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Service.php39
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Drive.php6136
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Exception.php53
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Resource.php210
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Signer/Abstract.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Signer.php)5
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Signer/P12.php91
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Utils.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/service/Google_Utils.php)56
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Utils/URITemplate.php333
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Verifier/Abstract.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Verifier.php)5
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google/Verifier/Pem.php (renamed from apps/files_external/3rdparty/google-api-php-client/src/auth/Google_PemVerifier.php)26
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google_Client.php462
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/auth/Google_AuthNone.php48
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/auth/Google_OAuth2.php445
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/auth/Google_P12Signer.php70
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/cache/Google_ApcCache.php98
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/cache/Google_FileCache.php137
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/cache/Google_MemcacheCache.php130
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/config.php81
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/contrib/Google_DriveService.php3143
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/external/URITemplateParser.php209
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/io/Google_CurlIO.php278
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/io/Google_HttpRequest.php304
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/io/Google_IO.php49
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/service/Google_MediaFileUpload.php262
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/service/Google_Model.php115
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/service/Google_ServiceResource.php205
-rw-r--r--apps/files_external/ajax/google.php3
-rw-r--r--apps/files_external/l10n/fr.js2
-rw-r--r--apps/files_external/l10n/fr.json2
-rw-r--r--apps/files_external/l10n/gl.js2
-rw-r--r--apps/files_external/l10n/gl.json2
-rw-r--r--apps/files_external/l10n/sk.php8
-rw-r--r--apps/files_external/lib/amazons3.php5
-rw-r--r--apps/files_external/lib/api.php4
-rw-r--r--apps/files_external/lib/config.php8
-rw-r--r--apps/files_external/lib/google.php56
-rw-r--r--apps/files_external/lib/smb.php9
-rw-r--r--apps/files_external/lib/smb_oc.php31
-rw-r--r--apps/files_external/tests/amazons3.php8
-rw-r--r--apps/files_external/tests/amazons3migration.php21
-rw-r--r--apps/files_external/tests/dropbox.php20
-rw-r--r--apps/files_external/tests/dynamicmountconfig.php4
-rw-r--r--apps/files_external/tests/etagpropagator.php4
-rw-r--r--apps/files_external/tests/ftp.php10
-rw-r--r--apps/files_external/tests/google.php4
-rw-r--r--apps/files_external/tests/mountconfig.php50
-rw-r--r--apps/files_external/tests/owncloud.php10
-rw-r--r--apps/files_external/tests/owncloudfunctions.php2
-rw-r--r--apps/files_external/tests/sftp.php10
-rw-r--r--apps/files_external/tests/smb.php10
-rw-r--r--apps/files_external/tests/smbfunctions.php10
-rw-r--r--apps/files_external/tests/swift.php8
-rw-r--r--apps/files_external/tests/webdav.php10
-rw-r--r--apps/files_sharing/ajax/list.php4
-rw-r--r--apps/files_sharing/ajax/shareinfo.php2
-rw-r--r--apps/files_sharing/appinfo/routes.php1
-rw-r--r--apps/files_sharing/appinfo/update.php120
-rw-r--r--apps/files_sharing/application.php73
-rw-r--r--apps/files_sharing/js/public.js15
-rw-r--r--apps/files_sharing/js/sharedfilelist.js12
-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_sharing/l10n/pt_PT.js4
-rw-r--r--apps/files_sharing/l10n/pt_PT.json4
-rw-r--r--apps/files_sharing/l10n/ru.js5
-rw-r--r--apps/files_sharing/l10n/ru.json5
-rw-r--r--apps/files_sharing/l10n/sk.php6
-rw-r--r--apps/files_sharing/l10n/uk.js5
-rw-r--r--apps/files_sharing/l10n/uk.json5
-rw-r--r--apps/files_sharing/lib/connector/publicauth.php24
-rw-r--r--apps/files_sharing/lib/controllers/sharecontroller.php270
-rw-r--r--apps/files_sharing/lib/helper.php29
-rw-r--r--apps/files_sharing/lib/middleware/sharingcheckmiddleware.php84
-rw-r--r--apps/files_sharing/lib/readonlycache.php4
-rw-r--r--apps/files_sharing/lib/readonlywrapper.php2
-rw-r--r--apps/files_sharing/lib/share/folder.php5
-rw-r--r--apps/files_sharing/lib/sharedstorage.php14
-rw-r--r--apps/files_sharing/public.php220
-rw-r--r--apps/files_sharing/publicwebdav.php2
-rw-r--r--apps/files_sharing/templates/authenticate.php8
-rw-r--r--apps/files_sharing/templates/public.php28
-rw-r--r--apps/files_sharing/tests/api.php10
-rw-r--r--apps/files_sharing/tests/backend.php4
-rw-r--r--apps/files_sharing/tests/cache.php26
-rw-r--r--apps/files_sharing/tests/controller/sharecontroller.php171
-rw-r--r--apps/files_sharing/tests/externalstorage.php2
-rw-r--r--apps/files_sharing/tests/js/sharedfilelistSpec.js30
-rw-r--r--apps/files_sharing/tests/middleware/sharingcheckmiddleware.php76
-rw-r--r--apps/files_sharing/tests/permissions.php4
-rw-r--r--apps/files_sharing/tests/proxy.php4
-rw-r--r--apps/files_sharing/tests/share.php32
-rw-r--r--apps/files_sharing/tests/sharedmount.php4
-rw-r--r--apps/files_sharing/tests/sharedstorage.php4
-rw-r--r--apps/files_sharing/tests/testcase.php18
-rw-r--r--apps/files_sharing/tests/update.php252
-rw-r--r--apps/files_sharing/tests/updater.php5
-rw-r--r--apps/files_sharing/tests/watcher.php4
-rw-r--r--apps/files_trashbin/appinfo/app.php2
-rw-r--r--apps/files_trashbin/appinfo/routes.php4
-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/l10n/pt_PT.js4
-rw-r--r--apps/files_trashbin/l10n/pt_PT.json4
-rw-r--r--apps/files_trashbin/l10n/sk.php5
-rw-r--r--apps/files_trashbin/l10n/ur.php5
-rw-r--r--apps/files_trashbin/lib/capabilities.php32
-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/helper.php2
-rw-r--r--apps/files_trashbin/lib/trashbin.php181
-rw-r--r--apps/files_trashbin/tests/trashbin.php14
-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.php28
-rw-r--r--apps/user_ldap/ajax/wizard.php2
-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/js/ldapFilter.js63
-rw-r--r--apps/user_ldap/js/settings.js117
-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/cs_CZ.js3
-rw-r--r--apps/user_ldap/l10n/cs_CZ.json3
-rw-r--r--apps/user_ldap/l10n/da.js1
-rw-r--r--apps/user_ldap/l10n/da.json1
-rw-r--r--apps/user_ldap/l10n/de.js1
-rw-r--r--apps/user_ldap/l10n/de.json1
-rw-r--r--apps/user_ldap/l10n/de_DE.js1
-rw-r--r--apps/user_ldap/l10n/de_DE.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.js7
-rw-r--r--apps/user_ldap/l10n/fr.json7
-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/hi_IN.php6
-rw-r--r--apps/user_ldap/l10n/it.js3
-rw-r--r--apps/user_ldap/l10n/it.json3
-rw-r--r--apps/user_ldap/l10n/nl.js1
-rw-r--r--apps/user_ldap/l10n/nl.json1
-rw-r--r--apps/user_ldap/l10n/pt_BR.js1
-rw-r--r--apps/user_ldap/l10n/pt_BR.json1
-rw-r--r--apps/user_ldap/l10n/sk.php8
-rw-r--r--apps/user_ldap/l10n/sq.js1
-rw-r--r--apps/user_ldap/l10n/sq.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/l10n/ur.php7
-rw-r--r--apps/user_ldap/lib/access.php84
-rw-r--r--apps/user_ldap/lib/wizard.php57
-rw-r--r--apps/user_ldap/tests/access.php2
-rw-r--r--apps/user_ldap/tests/connection.php2
-rw-r--r--apps/user_ldap/tests/group_ldap.php4
-rw-r--r--apps/user_ldap/tests/helper.php2
-rw-r--r--apps/user_ldap/tests/user/manager.php2
-rw-r--r--apps/user_ldap/tests/user/user.php2
-rw-r--r--apps/user_ldap/tests/user_ldap.php38
-rw-r--r--apps/user_ldap/tests/wizard.php5
-rw-r--r--apps/user_ldap/user_ldap.php8
-rw-r--r--apps/user_webdavauth/l10n/sk.php5
-rw-r--r--autotest.cmd55
-rw-r--r--bower.json11
-rw-r--r--config/config.sample.php49
-rw-r--r--core/application.php64
-rw-r--r--core/command/db/converttype.php28
-rw-r--r--core/command/maintenance/mode.php11
-rw-r--r--core/command/maintenance/repair.php12
-rw-r--r--core/css/header.css4
-rw-r--r--core/css/styles.css6
-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/js.js24
-rw-r--r--core/js/jstz.js358
-rw-r--r--core/js/l10n.js32
-rw-r--r--core/js/lostpassword.js29
-rw-r--r--core/js/oc-requesttoken.js3
-rw-r--r--core/js/share.js2
-rw-r--r--core/js/tests/specs/l10nSpec.js52
-rw-r--r--core/l10n/af_ZA.js6
-rw-r--r--core/l10n/af_ZA.json6
-rw-r--r--core/l10n/ar.js6
-rw-r--r--core/l10n/ar.json6
-rw-r--r--core/l10n/ast.js8
-rw-r--r--core/l10n/ast.json8
-rw-r--r--core/l10n/az.js3
-rw-r--r--core/l10n/az.json3
-rw-r--r--core/l10n/bg_BG.js8
-rw-r--r--core/l10n/bg_BG.json8
-rw-r--r--core/l10n/bn_BD.js6
-rw-r--r--core/l10n/bn_BD.json6
-rw-r--r--core/l10n/bn_IN.js3
-rw-r--r--core/l10n/bn_IN.json3
-rw-r--r--core/l10n/ca.js10
-rw-r--r--core/l10n/ca.json10
-rw-r--r--core/l10n/cs_CZ.js28
-rw-r--r--core/l10n/cs_CZ.json28
-rw-r--r--core/l10n/cy_GB.js5
-rw-r--r--core/l10n/cy_GB.json5
-rw-r--r--core/l10n/da.js22
-rw-r--r--core/l10n/da.json22
-rw-r--r--core/l10n/de.js8
-rw-r--r--core/l10n/de.json8
-rw-r--r--core/l10n/de_DE.js8
-rw-r--r--core/l10n/de_DE.json8
-rw-r--r--core/l10n/el.js8
-rw-r--r--core/l10n/el.json8
-rw-r--r--core/l10n/en_GB.js8
-rw-r--r--core/l10n/en_GB.json8
-rw-r--r--core/l10n/eo.js6
-rw-r--r--core/l10n/eo.json6
-rw-r--r--core/l10n/es.js8
-rw-r--r--core/l10n/es.json8
-rw-r--r--core/l10n/es_AR.js8
-rw-r--r--core/l10n/es_AR.json8
-rw-r--r--core/l10n/es_CL.js2
-rw-r--r--core/l10n/es_CL.json2
-rw-r--r--core/l10n/es_MX.js8
-rw-r--r--core/l10n/es_MX.json8
-rw-r--r--core/l10n/et_EE.js8
-rw-r--r--core/l10n/et_EE.json8
-rw-r--r--core/l10n/eu.js8
-rw-r--r--core/l10n/eu.json8
-rw-r--r--core/l10n/fa.js8
-rw-r--r--core/l10n/fa.json8
-rw-r--r--core/l10n/fi_FI.js8
-rw-r--r--core/l10n/fi_FI.json8
-rw-r--r--core/l10n/fr.js12
-rw-r--r--core/l10n/fr.json12
-rw-r--r--core/l10n/gl.js8
-rw-r--r--core/l10n/gl.json8
-rw-r--r--core/l10n/he.js6
-rw-r--r--core/l10n/he.json6
-rw-r--r--core/l10n/hi.js3
-rw-r--r--core/l10n/hi.json3
-rw-r--r--core/l10n/hi_IN.php5
-rw-r--r--core/l10n/hr.js8
-rw-r--r--core/l10n/hr.json8
-rw-r--r--core/l10n/hu_HU.js8
-rw-r--r--core/l10n/hu_HU.json8
-rw-r--r--core/l10n/ia.js7
-rw-r--r--core/l10n/ia.json7
-rw-r--r--core/l10n/id.js8
-rw-r--r--core/l10n/id.json8
-rw-r--r--core/l10n/is.js5
-rw-r--r--core/l10n/is.json5
-rw-r--r--core/l10n/it.js8
-rw-r--r--core/l10n/it.json8
-rw-r--r--core/l10n/ja.js8
-rw-r--r--core/l10n/ja.json8
-rw-r--r--core/l10n/ka_GE.js5
-rw-r--r--core/l10n/ka_GE.json5
-rw-r--r--core/l10n/km.js4
-rw-r--r--core/l10n/km.json4
-rw-r--r--core/l10n/ko.js8
-rw-r--r--core/l10n/ko.json8
-rw-r--r--core/l10n/ku_IQ.js4
-rw-r--r--core/l10n/ku_IQ.json4
-rw-r--r--core/l10n/lb.js8
-rw-r--r--core/l10n/lb.json8
-rw-r--r--core/l10n/lt_LT.js8
-rw-r--r--core/l10n/lt_LT.json8
-rw-r--r--core/l10n/lv.js7
-rw-r--r--core/l10n/lv.json7
-rw-r--r--core/l10n/mk.js7
-rw-r--r--core/l10n/mk.json7
-rw-r--r--core/l10n/ms_MY.js5
-rw-r--r--core/l10n/ms_MY.json5
-rw-r--r--core/l10n/my_MM.js3
-rw-r--r--core/l10n/my_MM.json3
-rw-r--r--core/l10n/nb_NO.js8
-rw-r--r--core/l10n/nb_NO.json8
-rw-r--r--core/l10n/nl.js8
-rw-r--r--core/l10n/nl.json8
-rw-r--r--core/l10n/nn_NO.js7
-rw-r--r--core/l10n/nn_NO.json7
-rw-r--r--core/l10n/oc.js5
-rw-r--r--core/l10n/oc.json5
-rw-r--r--core/l10n/pa.js2
-rw-r--r--core/l10n/pa.json2
-rw-r--r--core/l10n/pl.js8
-rw-r--r--core/l10n/pl.json8
-rw-r--r--core/l10n/pt_BR.js10
-rw-r--r--core/l10n/pt_BR.json10
-rw-r--r--core/l10n/pt_PT.js92
-rw-r--r--core/l10n/pt_PT.json92
-rw-r--r--core/l10n/ro.js8
-rw-r--r--core/l10n/ro.json8
-rw-r--r--core/l10n/ru.js10
-rw-r--r--core/l10n/ru.json10
-rw-r--r--core/l10n/si_LK.js5
-rw-r--r--core/l10n/si_LK.json5
-rw-r--r--core/l10n/sk.php30
-rw-r--r--core/l10n/sk_SK.js9
-rw-r--r--core/l10n/sk_SK.json9
-rw-r--r--core/l10n/sl.js8
-rw-r--r--core/l10n/sl.json8
-rw-r--r--core/l10n/sq.js121
-rw-r--r--core/l10n/sq.json121
-rw-r--r--core/l10n/sr.js5
-rw-r--r--core/l10n/sr.json5
-rw-r--r--core/l10n/sr@latin.js5
-rw-r--r--core/l10n/sr@latin.json5
-rw-r--r--core/l10n/sv.js8
-rw-r--r--core/l10n/sv.json8
-rw-r--r--core/l10n/ta_LK.js5
-rw-r--r--core/l10n/ta_LK.json5
-rw-r--r--core/l10n/te.js2
-rw-r--r--core/l10n/te.json2
-rw-r--r--core/l10n/th_TH.js5
-rw-r--r--core/l10n/th_TH.json5
-rw-r--r--core/l10n/tr.js8
-rw-r--r--core/l10n/tr.json8
-rw-r--r--core/l10n/ug.js2
-rw-r--r--core/l10n/ug.json2
-rw-r--r--core/l10n/uk.js8
-rw-r--r--core/l10n/uk.json8
-rw-r--r--core/l10n/ur.php6
-rw-r--r--core/l10n/ur_PK.js7
-rw-r--r--core/l10n/ur_PK.json7
-rw-r--r--core/l10n/vi.js8
-rw-r--r--core/l10n/vi.json8
-rw-r--r--core/l10n/zh_CN.js8
-rw-r--r--core/l10n/zh_CN.json8
-rw-r--r--core/l10n/zh_HK.js6
-rw-r--r--core/l10n/zh_HK.json6
-rw-r--r--core/l10n/zh_TW.js8
-rw-r--r--core/l10n/zh_TW.json8
-rw-r--r--core/lostpassword/controller/lostcontroller.php169
-rw-r--r--core/lostpassword/css/resetpassword.css4
-rw-r--r--core/lostpassword/encrypteddataexception.php14
-rw-r--r--core/lostpassword/templates/lostpassword.php20
-rw-r--r--core/lostpassword/templates/resetpassword.php12
-rw-r--r--core/register_command.php6
-rw-r--r--core/routes.php19
-rw-r--r--core/setup/controller.php21
-rw-r--r--core/share/controller.php23
-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.php83
-rw-r--r--lib/l10n/af_ZA.js1
-rw-r--r--lib/l10n/af_ZA.json1
-rw-r--r--lib/l10n/ast.js2
-rw-r--r--lib/l10n/ast.json2
-rw-r--r--lib/l10n/bg_BG.js4
-rw-r--r--lib/l10n/bg_BG.json4
-rw-r--r--lib/l10n/ca.js3
-rw-r--r--lib/l10n/ca.json3
-rw-r--r--lib/l10n/cs_CZ.js16
-rw-r--r--lib/l10n/cs_CZ.json16
-rw-r--r--lib/l10n/da.js6
-rw-r--r--lib/l10n/da.json6
-rw-r--r--lib/l10n/de.js4
-rw-r--r--lib/l10n/de.json4
-rw-r--r--lib/l10n/de_DE.js4
-rw-r--r--lib/l10n/de_DE.json4
-rw-r--r--lib/l10n/el.js2
-rw-r--r--lib/l10n/el.json2
-rw-r--r--lib/l10n/en_GB.js4
-rw-r--r--lib/l10n/en_GB.json4
-rw-r--r--lib/l10n/eo.js2
-rw-r--r--lib/l10n/eo.json2
-rw-r--r--lib/l10n/es.js4
-rw-r--r--lib/l10n/es.json4
-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.js4
-rw-r--r--lib/l10n/fi_FI.json4
-rw-r--r--lib/l10n/fr.js6
-rw-r--r--lib/l10n/fr.json6
-rw-r--r--lib/l10n/gl.js7
-rw-r--r--lib/l10n/gl.json7
-rw-r--r--lib/l10n/hi_IN.php8
-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.js4
-rw-r--r--lib/l10n/it.json4
-rw-r--r--lib/l10n/ja.js4
-rw-r--r--lib/l10n/ja.json4
-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.js6
-rw-r--r--lib/l10n/nl.json6
-rw-r--r--lib/l10n/pl.js2
-rw-r--r--lib/l10n/pl.json2
-rw-r--r--lib/l10n/pt_BR.js4
-rw-r--r--lib/l10n/pt_BR.json4
-rw-r--r--lib/l10n/pt_PT.js4
-rw-r--r--lib/l10n/pt_PT.json4
-rw-r--r--lib/l10n/ro.js2
-rw-r--r--lib/l10n/ro.json2
-rw-r--r--lib/l10n/ru.js4
-rw-r--r--lib/l10n/ru.json4
-rw-r--r--lib/l10n/sk.php10
-rw-r--r--lib/l10n/sk_SK.js4
-rw-r--r--lib/l10n/sk_SK.json4
-rw-r--r--lib/l10n/sl.js4
-rw-r--r--lib/l10n/sl.json4
-rw-r--r--lib/l10n/sq.js3
-rw-r--r--lib/l10n/sq.json3
-rw-r--r--lib/l10n/sv.js2
-rw-r--r--lib/l10n/sv.json2
-rw-r--r--lib/l10n/tr.js4
-rw-r--r--lib/l10n/tr.json4
-rw-r--r--lib/l10n/uk.js4
-rw-r--r--lib/l10n/uk.json4
-rw-r--r--lib/l10n/ur.php8
-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/api.php38
-rw-r--r--lib/private/app.php63
-rw-r--r--lib/private/app/appmanager.php138
-rw-r--r--lib/private/app/dependencyanalyzer.php87
-rw-r--r--lib/private/app/infoparser.php148
-rw-r--r--lib/private/app/platform.php33
-rw-r--r--lib/private/appframework/app.php10
-rw-r--r--lib/private/appframework/core/api.php3
-rw-r--r--lib/private/appframework/http/dispatcher.php8
-rw-r--r--lib/private/appframework/middleware/security/securitymiddleware.php14
-rw-r--r--lib/private/appframework/routing/routeconfig.php8
-rw-r--r--lib/private/arrayparser.php5
-rw-r--r--lib/private/connector/sabre/appenabledplugin.php75
-rw-r--r--lib/private/contacts/localaddressbook.php2
-rw-r--r--lib/private/contactsmanager.php4
-rw-r--r--lib/private/databaseexception.php23
-rw-r--r--lib/private/databasesetupexception.php12
-rw-r--r--lib/private/db.php36
-rw-r--r--lib/private/db/adapter.php10
-rw-r--r--lib/private/db/adaptersqlite.php18
-rw-r--r--lib/private/db/connectionfactory.php4
-rw-r--r--lib/private/db/mdb2schemamanager.php6
-rw-r--r--lib/private/db/mdb2schemareader.php11
-rw-r--r--lib/private/db/oracleconnection.php10
-rw-r--r--lib/private/db/sqlitesessioninit.php10
-rw-r--r--lib/private/db/statementwrapper.php16
-rw-r--r--lib/private/files.php21
-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/fileinfo.php12
-rw-r--r--lib/private/files/filesystem.php13
-rw-r--r--lib/private/files/node/file.php20
-rw-r--r--lib/private/files/node/folder.php13
-rw-r--r--lib/private/files/node/node.php73
-rw-r--r--lib/private/files/node/root.php2
-rw-r--r--lib/private/files/objectstore/objectstorestorage.php6
-rw-r--r--lib/private/files/storage/common.php10
-rw-r--r--lib/private/files/storage/dav.php24
-rw-r--r--lib/private/files/storage/local.php78
-rw-r--r--lib/private/files/storage/mappedlocal.php90
-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/files/view.php10
-rw-r--r--lib/private/group/backend.php32
-rw-r--r--lib/private/group/database.php2
-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.php35
-rw-r--r--lib/private/image.php523
-rw-r--r--lib/private/installer.php6
-rw-r--r--lib/private/l10n.php48
-rw-r--r--lib/private/legacy/config.php8
-rw-r--r--lib/private/log/errorlog.php48
-rw-r--r--lib/private/migrate.php626
-rw-r--r--lib/private/migration/content.php246
-rw-r--r--lib/private/migration/provider.php52
-rw-r--r--lib/private/naturalsort.php11
-rw-r--r--lib/private/naturalsort_defaultcollator.php19
-rw-r--r--lib/private/preview.php202
-rw-r--r--lib/private/preview/bitmap.php126
-rw-r--r--lib/private/preview/illustrator.php19
-rw-r--r--lib/private/preview/image.php11
-rw-r--r--lib/private/preview/markdown.php18
-rw-r--r--lib/private/preview/movie.php94
-rw-r--r--lib/private/preview/movies.php122
-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/repair.php5
-rw-r--r--lib/private/request.php37
-rw-r--r--lib/private/route/router.php1
-rw-r--r--lib/private/security/certificatemanager.php1
-rw-r--r--lib/private/security/crypto.php20
-rw-r--r--lib/private/server.php45
-rw-r--r--lib/private/setup.php9
-rw-r--r--lib/private/setup/mssql.php2
-rw-r--r--lib/private/setup/mysql.php6
-rw-r--r--lib/private/setup/oci.php6
-rw-r--r--lib/private/setup/postgresql.php4
-rw-r--r--lib/private/share/helper.php9
-rw-r--r--lib/private/share/share.php58
-rw-r--r--lib/private/urlgenerator.php12
-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/session.php17
-rw-r--r--lib/private/user/user.php14
-rw-r--r--lib/private/util.php16
-rw-r--r--lib/public/activity/iextension.php7
-rw-r--r--lib/public/app/iappmanager.php51
-rw-r--r--lib/public/appframework/controller.php2
-rw-r--r--lib/public/appframework/http/response.php73
-rw-r--r--lib/public/appframework/iapi.php1
-rw-r--r--lib/public/constants.php28
-rw-r--r--lib/public/defaults.php8
-rw-r--r--lib/public/files/fileinfo.php12
-rw-r--r--lib/public/files/ihomestorage.php24
-rw-r--r--lib/public/files/node.php10
-rw-r--r--lib/public/files/storage.php4
-rw-r--r--lib/public/iavatar.php6
-rw-r--r--lib/public/iservercontainer.php14
-rw-r--r--lib/public/iurlgenerator.php8
-rw-r--r--lib/public/share.php90
-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.php93
-rw-r--r--lib/public/user.php3
-rw-r--r--lib/public/util.php4
-rw-r--r--lib/repair/repairconfig.php29
-rwxr-xr-xocc2
-rw-r--r--public.php4
-rw-r--r--remote.php4
-rw-r--r--settings/admin.php22
-rw-r--r--settings/controller/appsettingscontroller.php10
-rw-r--r--settings/css/settings.css6
-rw-r--r--settings/l10n/ar.js3
-rw-r--r--settings/l10n/ar.json3
-rw-r--r--settings/l10n/ast.js4
-rw-r--r--settings/l10n/ast.json4
-rw-r--r--settings/l10n/az.js1
-rw-r--r--settings/l10n/az.json1
-rw-r--r--settings/l10n/bg_BG.js6
-rw-r--r--settings/l10n/bg_BG.json6
-rw-r--r--settings/l10n/ca.js36
-rw-r--r--settings/l10n/ca.json36
-rw-r--r--settings/l10n/cs_CZ.js20
-rw-r--r--settings/l10n/cs_CZ.json20
-rw-r--r--settings/l10n/da.js8
-rw-r--r--settings/l10n/da.json8
-rw-r--r--settings/l10n/de.js8
-rw-r--r--settings/l10n/de.json8
-rw-r--r--settings/l10n/de_DE.js8
-rw-r--r--settings/l10n/de_DE.json8
-rw-r--r--settings/l10n/el.js4
-rw-r--r--settings/l10n/el.json4
-rw-r--r--settings/l10n/en_GB.js8
-rw-r--r--settings/l10n/en_GB.json8
-rw-r--r--settings/l10n/eo.js1
-rw-r--r--settings/l10n/eo.json1
-rw-r--r--settings/l10n/es.js10
-rw-r--r--settings/l10n/es.json10
-rw-r--r--settings/l10n/es_AR.js3
-rw-r--r--settings/l10n/es_AR.json3
-rw-r--r--settings/l10n/es_MX.js3
-rw-r--r--settings/l10n/es_MX.json3
-rw-r--r--settings/l10n/et_EE.js4
-rw-r--r--settings/l10n/et_EE.json4
-rw-r--r--settings/l10n/eu.js4
-rw-r--r--settings/l10n/eu.json4
-rw-r--r--settings/l10n/fa.js2
-rw-r--r--settings/l10n/fa.json2
-rw-r--r--settings/l10n/fi_FI.js7
-rw-r--r--settings/l10n/fi_FI.json7
-rw-r--r--settings/l10n/fr.js10
-rw-r--r--settings/l10n/fr.json10
-rw-r--r--settings/l10n/gl.js10
-rw-r--r--settings/l10n/gl.json10
-rw-r--r--settings/l10n/hr.js4
-rw-r--r--settings/l10n/hr.json4
-rw-r--r--settings/l10n/hu_HU.js4
-rw-r--r--settings/l10n/hu_HU.json4
-rw-r--r--settings/l10n/id.js4
-rw-r--r--settings/l10n/id.json4
-rw-r--r--settings/l10n/it.js9
-rw-r--r--settings/l10n/it.json9
-rw-r--r--settings/l10n/ja.js4
-rw-r--r--settings/l10n/ja.json4
-rw-r--r--settings/l10n/ko.js4
-rw-r--r--settings/l10n/ko.json4
-rw-r--r--settings/l10n/mk.js2
-rw-r--r--settings/l10n/mk.json2
-rw-r--r--settings/l10n/nb_NO.js4
-rw-r--r--settings/l10n/nb_NO.json4
-rw-r--r--settings/l10n/nl.js8
-rw-r--r--settings/l10n/nl.json8
-rw-r--r--settings/l10n/pl.js4
-rw-r--r--settings/l10n/pl.json4
-rw-r--r--settings/l10n/pt_BR.js8
-rw-r--r--settings/l10n/pt_BR.json8
-rw-r--r--settings/l10n/pt_PT.js138
-rw-r--r--settings/l10n/pt_PT.json138
-rw-r--r--settings/l10n/ro.js1
-rw-r--r--settings/l10n/ro.json1
-rw-r--r--settings/l10n/ru.js16
-rw-r--r--settings/l10n/ru.json16
-rw-r--r--settings/l10n/sk_SK.js5
-rw-r--r--settings/l10n/sk_SK.json5
-rw-r--r--settings/l10n/sl.js8
-rw-r--r--settings/l10n/sl.json8
-rw-r--r--settings/l10n/sq.js26
-rw-r--r--settings/l10n/sq.json26
-rw-r--r--settings/l10n/sv.js4
-rw-r--r--settings/l10n/sv.json4
-rw-r--r--settings/l10n/tr.js14
-rw-r--r--settings/l10n/tr.json14
-rw-r--r--settings/l10n/uk.js8
-rw-r--r--settings/l10n/uk.json8
-rw-r--r--settings/l10n/zh_CN.js4
-rw-r--r--settings/l10n/zh_CN.json4
-rw-r--r--settings/l10n/zh_TW.js3
-rw-r--r--settings/l10n/zh_TW.json3
-rw-r--r--settings/templates/admin.php38
-rw-r--r--settings/templates/apps.php11
-rw-r--r--settings/templates/users/part.createuser.php2
-rw-r--r--tests/core/lostpassword/controller/lostcontrollertest.php203
-rw-r--r--tests/data/app/expected-info.json49
-rw-r--r--tests/data/app/invalid-info.xml22
-rw-r--r--tests/data/app/valid-info.xml29
-rw-r--r--tests/enable_all.php1
-rw-r--r--tests/lib/activitymanager.php13
-rw-r--r--tests/lib/api.php4
-rw-r--r--tests/lib/app.php5
-rw-r--r--tests/lib/app/dependencyanalyzer.php109
-rw-r--r--tests/lib/app/infoparser.php61
-rw-r--r--tests/lib/app/manager.php195
-rw-r--r--tests/lib/appconfig.php6
-rw-r--r--tests/lib/appframework/AppTest.php6
-rw-r--r--tests/lib/appframework/controller/ApiControllerTest.php2
-rw-r--r--tests/lib/appframework/controller/ControllerTest.php7
-rw-r--r--tests/lib/appframework/db/EntityTest.php3
-rw-r--r--tests/lib/appframework/db/mappertest.php2
-rw-r--r--tests/lib/appframework/db/mappertestutility.php6
-rw-r--r--tests/lib/appframework/dependencyinjection/DIContainerTest.php3
-rw-r--r--tests/lib/appframework/http/DataResponseTest.php3
-rw-r--r--tests/lib/appframework/http/DispatcherTest.php29
-rw-r--r--tests/lib/appframework/http/DownloadResponseTest.php3
-rw-r--r--tests/lib/appframework/http/HttpTest.php4
-rw-r--r--tests/lib/appframework/http/JSONResponseTest.php3
-rw-r--r--tests/lib/appframework/http/RedirectResponseTest.php3
-rw-r--r--tests/lib/appframework/http/RequestTest.php9
-rw-r--r--tests/lib/appframework/http/ResponseTest.php89
-rw-r--r--tests/lib/appframework/http/TemplateResponseTest.php4
-rw-r--r--tests/lib/appframework/middleware/MiddlewareDispatcherTest.php5
-rw-r--r--tests/lib/appframework/middleware/MiddlewareTest.php4
-rw-r--r--tests/lib/appframework/middleware/security/CORSMiddlewareTest.php3
-rw-r--r--tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php10
-rw-r--r--tests/lib/appframework/middleware/sessionmiddlewaretest.php4
-rw-r--r--tests/lib/appframework/routing/RoutingTest.php17
-rw-r--r--tests/lib/appframework/utility/ControllerMethodReflectorTest.php2
-rw-r--r--tests/lib/archive.php2
-rw-r--r--tests/lib/archive/tar.php7
-rw-r--r--tests/lib/archive/zip.php10
-rw-r--r--tests/lib/autoloader.php5
-rw-r--r--tests/lib/avatar.php8
-rw-r--r--tests/lib/backgroundjob/job.php5
-rw-r--r--tests/lib/backgroundjob/joblist.php6
-rw-r--r--tests/lib/backgroundjob/queuedjob.php6
-rw-r--r--tests/lib/backgroundjob/timedjob.php6
-rw-r--r--tests/lib/cache.php6
-rw-r--r--tests/lib/cache/file.php19
-rw-r--r--tests/lib/cache/usercache.php18
-rw-r--r--tests/lib/config.php9
-rw-r--r--tests/lib/connector/sabre/directory.php6
-rw-r--r--tests/lib/connector/sabre/file.php16
-rw-r--r--tests/lib/connector/sabre/node.php20
-rw-r--r--tests/lib/connector/sabre/objecttree.php4
-rw-r--r--tests/lib/connector/sabre/quotaplugin.php2
-rw-r--r--tests/lib/contacts/localadressbook.php2
-rw-r--r--tests/lib/db.php12
-rw-r--r--tests/lib/db/mdb2schemamanager.php6
-rw-r--r--tests/lib/db/mdb2schemareader.php6
-rw-r--r--tests/lib/db/migrator.php11
-rw-r--r--tests/lib/db/mysqlmigration.php11
-rw-r--r--tests/lib/db/sqlitemigration.php11
-rw-r--r--tests/lib/dbschema.php10
-rw-r--r--tests/lib/errorHandler.php2
-rw-r--r--tests/lib/files/cache/cache.php18
-rw-r--r--tests/lib/files/cache/changepropagator.php8
-rw-r--r--tests/lib/files/cache/homecache.php6
-rw-r--r--tests/lib/files/cache/scanner.php10
-rw-r--r--tests/lib/files/cache/updater.php18
-rw-r--r--tests/lib/files/cache/updaterlegacy.php20
-rw-r--r--tests/lib/files/cache/watcher.php17
-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/etagtest.php17
-rw-r--r--tests/lib/files/filesystem.php196
-rw-r--r--tests/lib/files/mapper.php5
-rw-r--r--tests/lib/files/mount/manager.php5
-rw-r--r--tests/lib/files/mount/mount.php2
-rw-r--r--tests/lib/files/node/file.php46
-rw-r--r--tests/lib/files/node/folder.php24
-rw-r--r--tests/lib/files/node/integration.php17
-rw-r--r--tests/lib/files/node/node.php57
-rw-r--r--tests/lib/files/node/root.php12
-rw-r--r--tests/lib/files/objectstore/swift.php14
-rw-r--r--tests/lib/files/storage/commontest.php7
-rw-r--r--tests/lib/files/storage/home.php16
-rw-r--r--tests/lib/files/storage/local.php11
-rw-r--r--tests/lib/files/storage/mappedlocal.php7
-rw-r--r--tests/lib/files/storage/mappedlocalwithdotteddatadir.php7
-rw-r--r--tests/lib/files/storage/storage.php2
-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/storage/wrapper/quota.php7
-rw-r--r--tests/lib/files/storage/wrapper/wrapper.php7
-rw-r--r--tests/lib/files/stream/quota.php5
-rw-r--r--tests/lib/files/stream/staticstream.php8
-rw-r--r--tests/lib/files/utils/scanner.php17
-rw-r--r--tests/lib/files/view.php22
-rw-r--r--tests/lib/geo.php2
-rw-r--r--tests/lib/group.php58
-rw-r--r--tests/lib/group/backend.php8
-rw-r--r--tests/lib/group/database.php23
-rw-r--r--tests/lib/group/dummy.php3
-rw-r--r--tests/lib/group/group.php2
-rw-r--r--tests/lib/group/manager.php2
-rw-r--r--tests/lib/group/metadata.php2
-rw-r--r--tests/lib/helper.php6
-rw-r--r--tests/lib/helperstorage.php19
-rw-r--r--tests/lib/hooks/basicemitter.php5
-rw-r--r--tests/lib/hooks/legacyemitter.php4
-rw-r--r--tests/lib/httphelper.php10
-rw-r--r--tests/lib/image.php14
-rw-r--r--tests/lib/installer.php10
-rw-r--r--tests/lib/l10n.php2
-rw-r--r--tests/lib/largefilehelper.php4
-rw-r--r--tests/lib/largefilehelpergetfilesize.php59
-rw-r--r--tests/lib/logger.php6
-rw-r--r--tests/lib/mail.php4
-rw-r--r--tests/lib/memcache/apc.php6
-rw-r--r--tests/lib/memcache/apcu.php6
-rw-r--r--tests/lib/memcache/cache.php4
-rw-r--r--tests/lib/memcache/memcached.php11
-rw-r--r--tests/lib/memcache/xcache.php6
-rw-r--r--tests/lib/migrate.php90
-rw-r--r--tests/lib/naturalsort.php4
-rw-r--r--tests/lib/ocs/privatedata.php12
-rw-r--r--tests/lib/preferences-singleton.php6
-rw-r--r--tests/lib/preferences.php2
-rw-r--r--tests/lib/preview.php38
-rw-r--r--tests/lib/public/contacts.php11
-rw-r--r--tests/lib/public/ocpconfig.php5
-rw-r--r--tests/lib/repair.php2
-rw-r--r--tests/lib/repair/repaircollation.php11
-rw-r--r--tests/lib/repair/repairinnodb.php11
-rw-r--r--tests/lib/repair/repairlegacystorage.php18
-rw-r--r--tests/lib/repair/repairmimetypes.php9
-rw-r--r--tests/lib/request.php35
-rw-r--r--tests/lib/security/certificate.php6
-rw-r--r--tests/lib/security/certificatemanager.php13
-rw-r--r--tests/lib/security/crypto.php3
-rw-r--r--tests/lib/security/securerandom.php3
-rw-r--r--tests/lib/security/stringutils.php2
-rw-r--r--tests/lib/session/memory.php5
-rw-r--r--tests/lib/session/session.php5
-rw-r--r--tests/lib/setup.php6
-rw-r--r--tests/lib/share/backend.php2
-rw-r--r--tests/lib/share/helper.php8
-rw-r--r--tests/lib/share/searchresultsorter.php2
-rw-r--r--tests/lib/share/share.php245
-rw-r--r--tests/lib/streamwrappers.php7
-rw-r--r--tests/lib/tags.php21
-rw-r--r--tests/lib/template.php6
-rw-r--r--tests/lib/template/resourcelocator.php2
-rw-r--r--tests/lib/templatelayout.php12
-rw-r--r--tests/lib/tempmanager.php21
-rw-r--r--tests/lib/testcase.php151
-rw-r--r--tests/lib/updater.php6
-rw-r--r--tests/lib/urlgenerator.php2
-rw-r--r--tests/lib/user.php4
-rw-r--r--tests/lib/user/backend.php21
-rw-r--r--tests/lib/user/database.php13
-rw-r--r--tests/lib/user/dummy.php3
-rw-r--r--tests/lib/user/manager.php2
-rw-r--r--tests/lib/user/session.php2
-rw-r--r--tests/lib/user/user.php2
-rw-r--r--tests/lib/util.php8
-rw-r--r--tests/lib/utilcheckserver.php13
-rw-r--r--tests/lib/vobject.php6
-rw-r--r--tests/phpunit-autotest.xml9
-rw-r--r--tests/phpunit.xml.dist2
-rw-r--r--tests/preseed-config.php33
-rw-r--r--tests/settings/controller/mailsettingscontrollertest.php10
-rw-r--r--tests/testcleanuplistener.php176
982 files changed, 23117 insertions, 14708 deletions
diff --git a/.gitignore b/.gitignore
index c0d44301d57..93bacf9b07e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -92,6 +92,12 @@ nbproject
/build/jsdocs/
/npm-debug.log
+# puphpet
+puphpet
+
+# vagrant
+.vagrant
+Vagrantfile
# Tests - auto-generated files
/data-autotest
diff --git a/.htaccess b/.htaccess
index e45810d0a05..10adb902ff5 100644
--- a/.htaccess
+++ b/.htaccess
@@ -25,6 +25,8 @@ RewriteRule ^\.well-known/caldav /remote.php/caldav/ [R]
RewriteRule ^apps/calendar/caldav\.php remote.php/caldav/ [QSA,L]
RewriteRule ^apps/contacts/carddav\.php remote.php/carddav/ [QSA,L]
RewriteRule ^remote/(.*) remote.php [QSA,L]
+RewriteRule ^(build|tests|config|lib|3rdparty|templates)/.* - [R=404,L]
+RewriteRule ^(\.|autotest|occ|issue|indie|db_|console).* - [R=404,L]
</IfModule>
<IfModule mod_mime.c>
AddType image/svg+xml svg svgz
diff --git a/3rdparty b/3rdparty
-Subproject 912a45c3458685a1105fba38a39a3a71c7348ed
+Subproject dd0e7b6dcec142c790a6325b74a7c4fd3c6d723
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/ajax/upload.php b/apps/files/ajax/upload.php
index b960e02ced7..eb99d0644f7 100644
--- a/apps/files/ajax/upload.php
+++ b/apps/files/ajax/upload.php
@@ -1,5 +1,7 @@
<?php
+\OC::$server->getSession()->close();
+
// Firefox and Konqueror tries to download application/json for me. --Arthur
OCP\JSON::setContentTypeHeader('text/plain');
@@ -7,7 +9,7 @@ OCP\JSON::setContentTypeHeader('text/plain');
// If not, check the login.
// If no token is sent along, rely on login only
-$allowedPermissions = OCP\PERMISSION_ALL;
+$allowedPermissions = \OCP\Constants::PERMISSION_ALL;
$errorCode = null;
$l = \OC::$server->getL10N('files');
@@ -27,7 +29,7 @@ if (empty($_POST['dirToken'])) {
\OC_User::setIncognitoMode(true);
// return only read permissions for public upload
- $allowedPermissions = OCP\PERMISSION_READ;
+ $allowedPermissions = \OCP\Constants::PERMISSION_READ;
$publicDirectory = !empty($_POST['subdir']) ? $_POST['subdir'] : '/';
$linkItem = OCP\Share::getShareByToken($_POST['dirToken']);
@@ -36,7 +38,7 @@ if (empty($_POST['dirToken'])) {
die();
}
- if (!($linkItem['permissions'] & OCP\PERMISSION_CREATE)) {
+ if (!($linkItem['permissions'] & \OCP\Constants::PERMISSION_CREATE)) {
OCP\JSON::checkLoggedIn();
} else {
// resolve reshares
@@ -64,13 +66,7 @@ if (empty($_POST['dirToken'])) {
}
}
-
OCP\JSON::callCheck();
-if (!\OCP\App::isEnabled('files_encryption')) {
- // encryption app need to create keys later, so can't close too early
- \OC::$server->getSession()->close();
-}
-
// get array with current storage stats (e.g. max file size)
$storageStats = \OCA\Files\Helper::buildFileStorageStatistics($dir);
diff --git a/apps/files/appinfo/remote.php b/apps/files/appinfo/remote.php
index 3ba25085bad..26bef966f79 100644
--- a/apps/files/appinfo/remote.php
+++ b/apps/files/appinfo/remote.php
@@ -38,7 +38,7 @@ $server->setBaseUri($baseuri);
$defaults = new OC_Defaults();
$server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend, $defaults->getName()));
$server->addPlugin(new \Sabre\DAV\Locks\Plugin($lockBackend));
-$server->addPlugin(new \Sabre\DAV\Browser\Plugin(false)); // Show something in the Browser, but no upload
+$server->addPlugin(new \Sabre\DAV\Browser\Plugin(false, false)); // Show something in the Browser, but no upload
$server->addPlugin(new OC_Connector_Sabre_FilesPlugin());
$server->addPlugin(new OC_Connector_Sabre_MaintenancePlugin());
$server->addPlugin(new OC_Connector_Sabre_ExceptionLoggerPlugin('webdav'));
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/ca.js b/apps/files/l10n/ca.js
index 8a4b5c42d24..0885794ea43 100644
--- a/apps/files/l10n/ca.js
+++ b/apps/files/l10n/ca.js
@@ -6,6 +6,7 @@ OC.L10N.register(
"Unknown error" : "Error desconegut",
"Could not move %s - File with this name already exists" : "No s'ha pogut moure %s - Ja hi ha un fitxer amb aquest nom",
"Could not move %s" : " No s'ha pogut moure %s",
+ "Permission denied" : "Permís denegat",
"File name cannot be empty." : "El nom del fitxer no pot ser buit.",
"\"%s\" is an invalid file name." : "\"%s\" no es un fitxer vàlid.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "El nóm no és vàlid, '\\', '/', '<', '>', ':', '\"', '|', '?' i '*' no estan permesos.",
diff --git a/apps/files/l10n/ca.json b/apps/files/l10n/ca.json
index 91e96f5742d..2b767a9aaed 100644
--- a/apps/files/l10n/ca.json
+++ b/apps/files/l10n/ca.json
@@ -4,6 +4,7 @@
"Unknown error" : "Error desconegut",
"Could not move %s - File with this name already exists" : "No s'ha pogut moure %s - Ja hi ha un fitxer amb aquest nom",
"Could not move %s" : " No s'ha pogut moure %s",
+ "Permission denied" : "Permís denegat",
"File name cannot be empty." : "El nom del fitxer no pot ser buit.",
"\"%s\" is an invalid file name." : "\"%s\" no es un fitxer vàlid.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "El nóm no és vàlid, '\\', '/', '<', '>', ':', '\"', '|', '?' i '*' no estan permesos.",
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/l10n/it.js b/apps/files/l10n/it.js
index 939f5e55dac..693888bb7c8 100644
--- a/apps/files/l10n/it.js
+++ b/apps/files/l10n/it.js
@@ -21,10 +21,10 @@ OC.L10N.register(
"Error when creating the folder" : "Errore durante la creazione della cartella",
"Unable to set upload directory." : "Impossibile impostare una cartella di caricamento.",
"Invalid Token" : "Token non valido",
- "No file was uploaded. Unknown error" : "Nessun file è stato inviato. Errore sconosciuto",
+ "No file was uploaded. Unknown error" : "Nessun file è stato caricato. Errore sconosciuto",
"There is no error, the file uploaded with success" : "Non ci sono errori, il file è stato caricato correttamente",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Il file caricato supera la direttiva upload_max_filesize in php.ini:",
- "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Il file inviato supera la direttiva MAX_FILE_SIZE specificata nel modulo HTML",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Il file caricato supera la direttiva MAX_FILE_SIZE specificata nel modulo HTML",
"The uploaded file was only partially uploaded" : "Il file è stato caricato solo parzialmente",
"No file was uploaded" : "Nessun file è stato caricato",
"Missing a temporary folder" : "Manca una cartella temporanea",
@@ -38,7 +38,7 @@ OC.L10N.register(
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Impossibile caricare {filename} poiché è una cartella oppure ha una dimensione di 0 byte.",
"Total file size {size1} exceeds upload limit {size2}" : "La dimensione totale del file {size1} supera il limite di caricamento {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Spazio insufficiente, stai caricando {size1}, ma è rimasto solo {size2}",
- "Upload cancelled." : "Invio annullato",
+ "Upload cancelled." : "Caricamento annullato.",
"Could not get result from server." : "Impossibile ottenere il risultato dal server.",
"File upload is in progress. Leaving the page now will cancel the upload." : "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento.",
"URL cannot be empty" : "L'URL non può essere vuoto.",
@@ -76,7 +76,7 @@ OC.L10N.register(
"%s could not be renamed" : "%s non può essere rinominato",
"Upload (max. %s)" : "Carica (massimo %s)",
"File handling" : "Gestione file",
- "Maximum upload size" : "Dimensione massima upload",
+ "Maximum upload size" : "Dimensione massima caricamento",
"max. possible: " : "numero mass.: ",
"Save" : "Salva",
"WebDAV" : "WebDAV",
diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json
index 8686051f461..4efbf6f64b4 100644
--- a/apps/files/l10n/it.json
+++ b/apps/files/l10n/it.json
@@ -19,10 +19,10 @@
"Error when creating the folder" : "Errore durante la creazione della cartella",
"Unable to set upload directory." : "Impossibile impostare una cartella di caricamento.",
"Invalid Token" : "Token non valido",
- "No file was uploaded. Unknown error" : "Nessun file è stato inviato. Errore sconosciuto",
+ "No file was uploaded. Unknown error" : "Nessun file è stato caricato. Errore sconosciuto",
"There is no error, the file uploaded with success" : "Non ci sono errori, il file è stato caricato correttamente",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Il file caricato supera la direttiva upload_max_filesize in php.ini:",
- "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Il file inviato supera la direttiva MAX_FILE_SIZE specificata nel modulo HTML",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Il file caricato supera la direttiva MAX_FILE_SIZE specificata nel modulo HTML",
"The uploaded file was only partially uploaded" : "Il file è stato caricato solo parzialmente",
"No file was uploaded" : "Nessun file è stato caricato",
"Missing a temporary folder" : "Manca una cartella temporanea",
@@ -36,7 +36,7 @@
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Impossibile caricare {filename} poiché è una cartella oppure ha una dimensione di 0 byte.",
"Total file size {size1} exceeds upload limit {size2}" : "La dimensione totale del file {size1} supera il limite di caricamento {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Spazio insufficiente, stai caricando {size1}, ma è rimasto solo {size2}",
- "Upload cancelled." : "Invio annullato",
+ "Upload cancelled." : "Caricamento annullato.",
"Could not get result from server." : "Impossibile ottenere il risultato dal server.",
"File upload is in progress. Leaving the page now will cancel the upload." : "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento.",
"URL cannot be empty" : "L'URL non può essere vuoto.",
@@ -74,7 +74,7 @@
"%s could not be renamed" : "%s non può essere rinominato",
"Upload (max. %s)" : "Carica (massimo %s)",
"File handling" : "Gestione file",
- "Maximum upload size" : "Dimensione massima upload",
+ "Maximum upload size" : "Dimensione massima caricamento",
"max. possible: " : "numero mass.: ",
"Save" : "Salva",
"WebDAV" : "WebDAV",
diff --git a/apps/files/lib/capabilities.php b/apps/files/lib/capabilities.php
index d4820e931ba..690cc314ccd 100644
--- a/apps/files/lib/capabilities.php
+++ b/apps/files/lib/capabilities.php
@@ -15,7 +15,6 @@ class Capabilities {
'capabilities' => array(
'files' => array(
'bigfilechunking' => true,
- 'undelete' => true,
),
),
));
diff --git a/apps/files/lib/helper.php b/apps/files/lib/helper.php
index aa5a2f8c68a..97b9d8e7044 100644
--- a/apps/files/lib/helper.php
+++ b/apps/files/lib/helper.php
@@ -82,7 +82,7 @@ class Helper
public static function compareTimestamp(FileInfo $a, FileInfo $b) {
$aTime = $a->getMTime();
$bTime = $b->getMTime();
- return $aTime - $bTime;
+ return ($aTime < $bTime) ? -1 : 1;
}
/**
diff --git a/apps/files/tests/ajax_rename.php b/apps/files/tests/ajax_rename.php
index 5ed8b1931f4..48aed05823b 100644
--- a/apps/files/tests/ajax_rename.php
+++ b/apps/files/tests/ajax_rename.php
@@ -21,7 +21,7 @@
*
*/
-class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase {
+class Test_OC_Files_App_Rename extends \Test\TestCase {
private static $user;
/**
@@ -34,7 +34,13 @@ class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase {
*/
private $files;
- function setUp() {
+ private $originalStorage;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->originalStorage = \OC\Files\Filesystem::getStorage('/');
+
// mock OC_L10n
if (!self::$user) {
self::$user = uniqid();
@@ -59,10 +65,13 @@ class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase {
$this->files = new \OCA\Files\App($viewMock, $l10nMock);
}
- function tearDown() {
+ protected function tearDown() {
$result = \OC_User::deleteUser(self::$user);
$this->assertTrue($result);
\OC\Files\Filesystem::tearDown();
+ \OC\Files\Filesystem::mount($this->originalStorage, array(), '/');
+
+ parent::tearDown();
}
/**
diff --git a/apps/files/tests/helper.php b/apps/files/tests/helper.php
index 17be1770c33..1b7c8eef43a 100644
--- a/apps/files/tests/helper.php
+++ b/apps/files/tests/helper.php
@@ -11,7 +11,7 @@ use OCA\Files;
/**
* Class Test_Files_Helper
*/
-class Test_Files_Helper extends \PHPUnit_Framework_TestCase {
+class Test_Files_Helper extends \Test\TestCase {
private function makeFileInfo($name, $size, $mtime, $isDir = false) {
return new \OC\Files\FileInfo(
@@ -33,10 +33,10 @@ class Test_Files_Helper extends \PHPUnit_Framework_TestCase {
*/
private function getTestFileList() {
return array(
- self::makeFileInfo('a.txt', 4, 1000),
+ self::makeFileInfo('a.txt', 4, 2.3 * pow(10, 9)),
self::makeFileInfo('q.txt', 5, 150),
self::makeFileInfo('subdir2', 87, 128, true),
- self::makeFileInfo('b.txt', 166, 800),
+ self::makeFileInfo('b.txt', 2.2 * pow(10, 9), 800),
self::makeFileInfo('o.txt', 12, 100),
self::makeFileInfo('subdir', 88, 125, true),
);
@@ -90,7 +90,7 @@ class Test_Files_Helper extends \PHPUnit_Framework_TestCase {
$this->assertEquals(
$expectedOrder,
$fileNames
- );
+ );
}
}
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 0f182e93831..97da3811a0f 100644
--- a/apps/files_encryption/ajax/updatePrivateKeyPassword.php
+++ b/apps/files_encryption/ajax/updatePrivateKeyPassword.php
@@ -26,19 +26,18 @@ $newPassword = $_POST['newPassword'];
$view = new \OC\Files\View('/');
$session = new \OCA\Encryption\Session($view);
$user = \OCP\User::getUser();
+$loginName = \OC::$server->getUserSession()->getLoginName();
// check new password
-$passwordCorrect = \OCP\User::checkPassword($user, $newPassword);
+$passwordCorrect = \OCP\User::checkPassword($loginName, $newPassword);
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 3a0a37c0a59..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());
@@ -263,6 +254,19 @@ class Hooks {
}
}
+ /**
+ * after password reset we create a new key pair for the user
+ *
+ * @param array $params
+ */
+ public static function postPasswordReset($params) {
+ $uid = $params['uid'];
+ $password = $params['password'];
+
+ $util = new Util(new \OC\Files\View(), $uid);
+ $util->replaceUserKeys($password);
+ }
+
/*
* check if files can be encrypted to every user.
*/
@@ -277,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:
@@ -290,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;
}
}
@@ -315,7 +319,7 @@ class Hooks {
$path = \OC\Files\Filesystem::getPath($params['fileSource']);
- self::updateKeyfiles($path, $params['itemType']);
+ self::updateKeyfiles($path);
}
}
@@ -323,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);
@@ -337,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);
@@ -394,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);
}
}
@@ -424,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,
);
-
}
}
@@ -469,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;
+ $newKeysPath = 'files_encryption/keys/' . $pathNew;
} else {
- $newKeyfilePath = $ownerNew . '/files_encryption/keyfiles/' . $pathNew;
- $newShareKeyPath = $ownerNew . '/files_encryption/share-keys/' . $pathNew;
+ $newKeysPath = $ownerNew . '/files_encryption/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);
- }
-
- } else {
- // handle share-keys folders
- $view->$operation($oldShareKeyPath, $newShareKeyPath);
- }
-
- // 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']);
}
/**
@@ -579,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;
}
/**
@@ -618,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
@@ -626,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 e4532cb0604..26f3cff7397 100644
--- a/apps/files_encryption/l10n/pl.js
+++ b/apps/files_encryption/l10n/pl.js
@@ -2,12 +2,20 @@ OC.L10N.register(
"files_encryption",
{
"Unknown error" : "Nieznany błąd",
+ "Missing recovery key password" : "Brakujące hasło klucza odzyskiwania",
"Please repeat the recovery key password" : "Proszę powtórz nowe hasło klucza odzyskiwania",
+ "Repeated recovery key password does not match the provided recovery key password" : "Hasła klucza odzyskiwania nie zgadzają się",
"Recovery key successfully enabled" : "Klucz odzyskiwania włączony",
"Could not disable recovery key. Please check your recovery key password!" : "Nie można wyłączyć klucza odzyskiwania. Proszę sprawdzić swoje hasło odzyskiwania!",
"Recovery key successfully disabled" : "Klucz odzyskiwania wyłączony",
+ "Please provide the old recovery password" : "Podaj stare hasło odzyskiwania",
+ "Please provide a new recovery password" : "Podaj nowe hasło odzyskiwania",
+ "Please repeat the new recovery password" : "Proszę powtórz nowe hasło odzyskiwania",
"Password successfully changed." : "Zmiana hasła udana.",
"Could not change the password. Maybe the old password was not correct." : "Nie można zmienić hasła. Może stare hasło nie było poprawne.",
+ "Could not update the private key password." : "Nie można zmienić hasła klucza prywatnego.",
+ "The old password was not correct, please try again." : "Stare hasło nie było poprawne. Spróbuj jeszcze raz.",
+ "The current log-in password was not correct, please try again." : "Obecne hasło logowania nie było poprawne. Spróbuj ponownie.",
"Private key password successfully updated." : "Pomyślnie zaktualizowano hasło klucza prywatnego.",
"File recovery settings updated" : "Ustawienia odzyskiwania plików zmienione",
"Could not update file recovery" : "Nie można zmienić pliku odzyskiwania",
@@ -16,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 8ef5297d191..ae2b3f06218 100644
--- a/apps/files_encryption/l10n/pl.json
+++ b/apps/files_encryption/l10n/pl.json
@@ -1,11 +1,19 @@
{ "translations": {
"Unknown error" : "Nieznany błąd",
+ "Missing recovery key password" : "Brakujące hasło klucza odzyskiwania",
"Please repeat the recovery key password" : "Proszę powtórz nowe hasło klucza odzyskiwania",
+ "Repeated recovery key password does not match the provided recovery key password" : "Hasła klucza odzyskiwania nie zgadzają się",
"Recovery key successfully enabled" : "Klucz odzyskiwania włączony",
"Could not disable recovery key. Please check your recovery key password!" : "Nie można wyłączyć klucza odzyskiwania. Proszę sprawdzić swoje hasło odzyskiwania!",
"Recovery key successfully disabled" : "Klucz odzyskiwania wyłączony",
+ "Please provide the old recovery password" : "Podaj stare hasło odzyskiwania",
+ "Please provide a new recovery password" : "Podaj nowe hasło odzyskiwania",
+ "Please repeat the new recovery password" : "Proszę powtórz nowe hasło odzyskiwania",
"Password successfully changed." : "Zmiana hasła udana.",
"Could not change the password. Maybe the old password was not correct." : "Nie można zmienić hasła. Może stare hasło nie było poprawne.",
+ "Could not update the private key password." : "Nie można zmienić hasła klucza prywatnego.",
+ "The old password was not correct, please try again." : "Stare hasło nie było poprawne. Spróbuj jeszcze raz.",
+ "The current log-in password was not correct, please try again." : "Obecne hasło logowania nie było poprawne. Spróbuj ponownie.",
"Private key password successfully updated." : "Pomyślnie zaktualizowano hasło klucza prywatnego.",
"File recovery settings updated" : "Ustawienia odzyskiwania plików zmienione",
"Could not update file recovery" : "Nie można zmienić pliku odzyskiwania",
@@ -14,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 6d4cfe371e3..e43a6430f27 100644
--- a/apps/files_encryption/l10n/ru.js
+++ b/apps/files_encryption/l10n/ru.js
@@ -13,15 +13,17 @@ OC.L10N.register(
"Please repeat the new recovery password" : "Пожалуйста, повторите новый пароль для восстановления",
"Password successfully changed." : "Пароль изменен удачно.",
"Could not change the password. Maybe the old password was not correct." : "Невозможно изменить пароль. Возможно старый пароль не был верен.",
- "Private key password successfully updated." : "Пароль секретного ключа успешно обновлён.",
+ "Could not update the private key password." : "Невозможно обновить пароль для закрытого ключа.",
+ "The old password was not correct, please try again." : "Старый пароль введён неверно. Пожалуйста повторите попытку.",
+ "The current log-in password was not correct, please try again." : "Текущий пароль для учётной записи введён неверно, пожалуйста повторите попытку.",
+ "Private key password successfully updated." : "Пароль закрытого ключа успешно обновлён.",
"File recovery settings updated" : "Настройки файла восстановления обновлены",
"Could not update file recovery" : "Невозможно обновить файл восстановления",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Приложение шифрации не инициализированно! Возможно приложение шифрации было реактивировано во время вашей сессии. Пожалуйста, попробуйте выйти и войти снова чтобы проинициализировать приложение шифрации.",
- "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 (например, корпоративный каталог). Вы можете обновить секретный ключ в личных настройках на странице восстановления доступа к зашифрованным файлам. ",
+ "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." : "Не могу расшифровать файл, возможно это опубликованный файл. Пожалуйста, попросите владельца файла поделиться им с вами еще раз.",
"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." : "Работает первоначальное шифрование... Пожалуйста, повторите попытку позже.",
@@ -38,12 +40,12 @@ OC.L10N.register(
"New Recovery key password" : "Новый пароль для ключа восстановления",
"Repeat New Recovery key password" : "Повторите новый пароль восстановления ключа",
"Change Password" : "Изменить пароль",
- "Your private key password no longer matches your log-in password." : "Пароль от Вашего закрытого ключа больше не соответствует паролю от вашей учетной записи.",
- "Set your old private key password to your current log-in password:" : "Замените старый пароль от закрытого ключа на новый пароль входа.",
+ "Your private key password no longer matches your log-in password." : "Пароль для Вашего закрытого ключа больше не соответствует паролю вашей учетной записи.",
+ "Set your old private key password to your current log-in password:" : "Замените старый пароль для закрытого ключа на текущий пароль учётной записи.",
" If you don't remember your old password you can ask your administrator to recover your files." : "Если вы не помните свой старый пароль, вы можете попросить своего администратора восстановить ваши файлы",
- "Old log-in password" : "Старый пароль для входа",
- "Current log-in password" : "Текущйи пароль для входа",
- "Update Private Key Password" : "Обновить пароль от секретного ключа",
+ "Old log-in password" : "Старый пароль для учётной записи",
+ "Current log-in password" : "Текущий пароль для учётной записи",
+ "Update Private Key Password" : "Обновить пароль для закрытого ключа",
"Enable password recovery:" : "Включить восстановление пароля:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Включение этой опции позволит вам получить доступ к своим зашифрованным файлам в случае утери пароля"
},
diff --git a/apps/files_encryption/l10n/ru.json b/apps/files_encryption/l10n/ru.json
index 8de97d847cd..93584da0cc4 100644
--- a/apps/files_encryption/l10n/ru.json
+++ b/apps/files_encryption/l10n/ru.json
@@ -11,15 +11,17 @@
"Please repeat the new recovery password" : "Пожалуйста, повторите новый пароль для восстановления",
"Password successfully changed." : "Пароль изменен удачно.",
"Could not change the password. Maybe the old password was not correct." : "Невозможно изменить пароль. Возможно старый пароль не был верен.",
- "Private key password successfully updated." : "Пароль секретного ключа успешно обновлён.",
+ "Could not update the private key password." : "Невозможно обновить пароль для закрытого ключа.",
+ "The old password was not correct, please try again." : "Старый пароль введён неверно. Пожалуйста повторите попытку.",
+ "The current log-in password was not correct, please try again." : "Текущий пароль для учётной записи введён неверно, пожалуйста повторите попытку.",
+ "Private key password successfully updated." : "Пароль закрытого ключа успешно обновлён.",
"File recovery settings updated" : "Настройки файла восстановления обновлены",
"Could not update file recovery" : "Невозможно обновить файл восстановления",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Приложение шифрации не инициализированно! Возможно приложение шифрации было реактивировано во время вашей сессии. Пожалуйста, попробуйте выйти и войти снова чтобы проинициализировать приложение шифрации.",
- "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 (например, корпоративный каталог). Вы можете обновить секретный ключ в личных настройках на странице восстановления доступа к зашифрованным файлам. ",
+ "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." : "Не могу расшифровать файл, возможно это опубликованный файл. Пожалуйста, попросите владельца файла поделиться им с вами еще раз.",
"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." : "Работает первоначальное шифрование... Пожалуйста, повторите попытку позже.",
@@ -36,12 +38,12 @@
"New Recovery key password" : "Новый пароль для ключа восстановления",
"Repeat New Recovery key password" : "Повторите новый пароль восстановления ключа",
"Change Password" : "Изменить пароль",
- "Your private key password no longer matches your log-in password." : "Пароль от Вашего закрытого ключа больше не соответствует паролю от вашей учетной записи.",
- "Set your old private key password to your current log-in password:" : "Замените старый пароль от закрытого ключа на новый пароль входа.",
+ "Your private key password no longer matches your log-in password." : "Пароль для Вашего закрытого ключа больше не соответствует паролю вашей учетной записи.",
+ "Set your old private key password to your current log-in password:" : "Замените старый пароль для закрытого ключа на текущий пароль учётной записи.",
" If you don't remember your old password you can ask your administrator to recover your files." : "Если вы не помните свой старый пароль, вы можете попросить своего администратора восстановить ваши файлы",
- "Old log-in password" : "Старый пароль для входа",
- "Current log-in password" : "Текущйи пароль для входа",
- "Update Private Key Password" : "Обновить пароль от секретного ключа",
+ "Old log-in password" : "Старый пароль для учётной записи",
+ "Current log-in password" : "Текущий пароль для учётной записи",
+ "Update Private Key Password" : "Обновить пароль для закрытого ключа",
"Enable password recovery:" : "Включить восстановление пароля:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Включение этой опции позволит вам получить доступ к своим зашифрованным файлам в случае утери пароля"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
diff --git a/apps/files_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/sq.js b/apps/files_encryption/l10n/sq.js
index f3c5d10cf0a..ffab720cfda 100644
--- a/apps/files_encryption/l10n/sq.js
+++ b/apps/files_encryption/l10n/sq.js
@@ -2,6 +2,7 @@ OC.L10N.register(
"files_encryption",
{
"Unknown error" : "Gabim panjohur",
- "Encryption" : "Kodifikimi"
+ "Encryption" : "Kodifikimi",
+ "Enabled" : "Aktivizuar"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_encryption/l10n/sq.json b/apps/files_encryption/l10n/sq.json
index b4fe571e7e0..dee4c42e547 100644
--- a/apps/files_encryption/l10n/sq.json
+++ b/apps/files_encryption/l10n/sq.json
@@ -1,5 +1,6 @@
{ "translations": {
"Unknown error" : "Gabim panjohur",
- "Encryption" : "Kodifikimi"
+ "Encryption" : "Kodifikimi",
+ "Enabled" : "Aktivizuar"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
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 53c380ab2b3..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,8 +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');
}
/**
@@ -105,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
@@ -123,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);
@@ -386,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;
}
/**
@@ -432,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 55f2df783c4..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
@@ -91,7 +92,6 @@ class Proxy extends \OC_FileProxy {
private function shouldEncrypt($path, $mode = 'w') {
$userId = Helper::getUser($path);
- $session = new Session(new \OC\Files\View());
// don't call the crypt stream wrapper, if...
if (
@@ -205,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 7bd4fd02421..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
@@ -29,6 +31,7 @@ namespace OCA\Encryption;
class Session {
private $view;
+ private static $publicShareKey = false;
const NOT_INITIALIZED = '0';
const INIT_EXECUTED = '1';
@@ -45,64 +48,48 @@ 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()) {
+ if (\OCA\Encryption\Helper::isPublicAccess() && !self::getPublicSharePrivateKey()) {
// Disable encryption proxy to prevent recursive calls
$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, '');
- $this->setPublicSharePrivateKey($privateKey);
-
- $this->setInitialized(\OCA\Encryption\Session::INIT_SUCCESSFUL);
+ self::setPublicSharePrivateKey($privateKey);
\OC_FileProxy::$enabled = $proxyStatus;
}
@@ -127,8 +114,8 @@ class Session {
* remove keys from session
*/
public function removeKeys() {
- \OC::$session->remove('publicSharePrivateKey');
- \OC::$session->remove('privateKey');
+ \OC::$server->getSession()->remove('publicSharePrivateKey');
+ \OC::$server->getSession()->remove('privateKey');
}
/**
@@ -164,6 +151,8 @@ class Session {
public function getInitialized() {
if (!is_null(\OC::$server->getSession()->get('encryptionInitialized'))) {
return \OC::$server->getSession()->get('encryptionInitialized');
+ } else if (\OCA\Encryption\Helper::isPublicAccess() && self::getPublicSharePrivateKey()) {
+ return self::INIT_SUCCESSFUL;
} else {
return self::NOT_INITIALIZED;
}
@@ -177,7 +166,7 @@ class Session {
public function getPrivateKey() {
// return the public share private key if this is a public access
if (\OCA\Encryption\Helper::isPublicAccess()) {
- return $this->getPublicSharePrivateKey();
+ return self::getPublicSharePrivateKey();
} else {
if (!is_null(\OC::$server->getSession()->get('privateKey'))) {
return \OC::$server->getSession()->get('privateKey');
@@ -192,12 +181,9 @@ class Session {
* @param string $privateKey
* @return bool
*/
- public function setPublicSharePrivateKey($privateKey) {
-
- \OC::$server->getSession()->set('publicSharePrivateKey', $privateKey);
-
+ private static function setPublicSharePrivateKey($privateKey) {
+ self::$publicShareKey = $privateKey;
return true;
-
}
/**
@@ -205,13 +191,8 @@ class Session {
* @return string $privateKey
*
*/
- public function getPublicSharePrivateKey() {
-
- if (!is_null(\OC::$server->getSession()->get('publicSharePrivateKey'))) {
- return \OC::$server->getSession()->get('publicSharePrivateKey');
- } else {
- return false;
- }
+ private static function getPublicSharePrivateKey() {
+ return self::$publicShareKey;
}
}
diff --git a/apps/files_encryption/lib/stream.php b/apps/files_encryption/lib/stream.php
index 672a5878a24..4038e641343 100644
--- a/apps/files_encryption/lib/stream.php
+++ b/apps/files_encryption/lib/stream.php
@@ -580,6 +580,7 @@ class Stream {
\OC_FileProxy::$enabled = false;
if ($this->rootView->file_exists($this->rawPath) && $this->size === 0) {
+ fclose($this->handle);
$this->rootView->unlink($this->rawPath);
}
diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php
index c8697ae7c80..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)
) {
@@ -125,6 +124,18 @@ class Util {
}
/**
+ * create a new public/private key pair for the user
+ *
+ * @param string $password password for the private key
+ */
+ public function replaceUserKeys($password) {
+ $this->backupAllKeys('password_reset');
+ $this->view->unlink($this->publicKeyPath);
+ $this->view->unlink($this->privateKeyPath);
+ $this->setupServerSide($password);
+ }
+
+ /**
* Sets up user folders and keys for serverside encryption
*
* @param string $passphrase to encrypt server-stored private key with
@@ -137,8 +148,7 @@ class Util {
$this->userDir,
$this->publicKeyDir,
$this->encryptionDir,
- $this->keyfilesPath,
- $this->shareKeysPath
+ $this->keysPath
);
// Check / create all necessary dirs
@@ -715,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;
@@ -833,9 +843,9 @@ class Util {
break;
- case 'keyfilesPath':
+ case 'keysPath':
- return $this->keyfilesPath;
+ return $this->keysPath;
break;
@@ -857,6 +867,25 @@ class Util {
}
/**
+ * Returns whether the given user is ready for encryption.
+ * Also returns true if the given user is the public user
+ * or the recovery key user.
+ *
+ * @param string $user user to check
+ *
+ * @return boolean true if the user is ready, false otherwise
+ */
+ private function isUserReady($user) {
+ if ($user === $this->publicShareKeyId
+ || $user === $this->recoveryKeyId
+ ) {
+ return true;
+ }
+ $util = new Util($this->view, $user);
+ return $util->ready();
+ }
+
+ /**
* Filter an array of UIDs to return only ones ready for sharing
* @param array $unfilteredUsers users to be checked for sharing readiness
* @return array as multi-dimensional array. keys: ready, unready
@@ -868,16 +897,9 @@ class Util {
// Loop through users and create array of UIDs that need new keyfiles
foreach ($unfilteredUsers as $user) {
-
- $util = new Util($this->view, $user);
-
// Check that the user is encryption capable, or is the
- // public system user 'ownCloud' (for public shares)
- if (
- $user === $this->publicShareKeyId
- or $user === $this->recoveryKeyId
- or $util->ready()
- ) {
+ // public system user (for public shares)
+ if ($this->isUserReady($user)) {
// Construct array of ready UIDs for Keymanager{}
$readyIds[] = $user;
@@ -1341,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;
}
@@ -1371,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);
}
}
}
@@ -1392,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');
}
}
}
@@ -1431,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;
}
/**
@@ -1460,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);
}
}
}
@@ -1480,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);
}
@@ -1503,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');
}
/**
@@ -1566,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 1b8291fea28..ab2ce066cdb 100755
--- a/apps/files_encryption/tests/crypt.php
+++ b/apps/files_encryption/tests/crypt.php
@@ -12,7 +12,7 @@ use OCA\Encryption;
/**
* Class Test_Encryption_Crypt
*/
-class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
+class Test_Encryption_Crypt extends \OCA\Files_Encryption\Tests\TestCase {
const TEST_ENCRYPTION_CRYPT_USER1 = "test-crypt-user1";
@@ -31,27 +31,17 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
public $genPublicKey;
public static function 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());
+ parent::setUpBeforeClass();
// create test user
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1, true);
+ self::loginHelper(\Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1, true);
}
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
// set user id
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1);
+ self::loginHelper(\Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1);
$this->userId = \Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1;
$this->pass = \Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1;
@@ -77,7 +67,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
\OC_App::disable('files_trashbin');
}
- function tearDown() {
+ protected function tearDown() {
// reset app files_trashbin
if ($this->stateFilesTrashbin) {
OC_App::enable('files_trashbin');
@@ -87,25 +77,21 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$this->assertTrue(\OC_FileProxy::$enabled);
\OCP\Config::deleteSystemValue('cipher');
+
+ parent::tearDown();
}
public static function tearDownAfterClass() {
// 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();
}
/**
* @medium
*/
- function testGenerateKey() {
+ public function testGenerateKey() {
# TODO: use more accurate (larger) string length for test confirmation
@@ -115,7 +101,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
}
- function testDecryptPrivateKey() {
+ public function testDecryptPrivateKey() {
// test successful decrypt
$crypted = Encryption\Crypt::symmetricEncryptFileContent($this->genPrivateKey, 'hat');
@@ -137,7 +123,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @medium
*/
- function testSymmetricEncryptFileContent() {
+ public function testSymmetricEncryptFileContent() {
# TODO: search in keyfile for actual content as IV will ensure this test always passes
@@ -155,7 +141,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @medium
*/
- function testSymmetricEncryptFileContentAes128() {
+ public function testSymmetricEncryptFileContentAes128() {
# TODO: search in keyfile for actual content as IV will ensure this test always passes
@@ -173,9 +159,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @medium
*/
- function testSymmetricStreamEncryptShortFileContent() {
+ public function testSymmetricStreamEncryptShortFileContent() {
- $filename = 'tmp-' . uniqid() . '.test';
+ $filename = 'tmp-' . $this->getUniqueID() . '.test';
$cryptedFile = file_put_contents('crypt:///' . $this->userId . '/files/'. $filename, $this->dataShort);
@@ -203,16 +189,14 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
// Teardown
$this->view->unlink($this->userId . '/files/' . $filename);
-
- Encryption\Keymanager::deleteFileKey($this->view, $filename);
}
/**
* @medium
*/
- function testSymmetricStreamEncryptShortFileContentAes128() {
+ public function testSymmetricStreamEncryptShortFileContentAes128() {
- $filename = 'tmp-' . uniqid() . '.test';
+ $filename = 'tmp-' . $this->getUniqueID() . '.test';
\OCP\Config::setSystemValue('cipher', 'AES-128-CFB');
@@ -244,8 +228,6 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
// Teardown
$this->view->unlink($this->userId . '/files/' . $filename);
-
- Encryption\Keymanager::deleteFileKey($this->view, $filename);
}
/**
@@ -255,10 +237,10 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
* @note If this test fails with truncate content, check that enough array slices are being rejoined to form $e, as the crypt.php file may have gotten longer and broken the manual
* reassembly of its data
*/
- function testSymmetricStreamEncryptLongFileContent() {
+ public function testSymmetricStreamEncryptLongFileContent() {
// Generate a a random filename
- $filename = 'tmp-' . uniqid() . '.test';
+ $filename = 'tmp-' . $this->getUniqueID() . '.test';
// Save long data as encrypted file using stream wrapper
$cryptedFile = file_put_contents('crypt:///' . $this->userId . '/files/' . $filename, $this->dataLong . $this->dataLong);
@@ -285,11 +267,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->dataLong . $this->dataLong, $decrypted);
// Teardown
-
$this->view->unlink($this->userId . '/files/' . $filename);
-
- Encryption\Keymanager::deleteFileKey($this->view, $filename);
-
}
/**
@@ -299,10 +277,10 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
* @note If this test fails with truncate content, check that enough array slices are being rejoined to form $e, as the crypt.php file may have gotten longer and broken the manual
* reassembly of its data
*/
- function testSymmetricStreamEncryptLongFileContentAes128() {
+ public function testSymmetricStreamEncryptLongFileContentAes128() {
// Generate a a random filename
- $filename = 'tmp-' . uniqid() . '.test';
+ $filename = 'tmp-' . $this->getUniqueID() . '.test';
\OCP\Config::setSystemValue('cipher', 'AES-128-CFB');
@@ -333,11 +311,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->dataLong . $this->dataLong, $decrypted);
// Teardown
-
$this->view->unlink($this->userId . '/files/' . $filename);
-
- Encryption\Keymanager::deleteFileKey($this->view, $filename);
-
}
/**
@@ -347,10 +321,10 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
* @note If this test fails with truncate content, check that enough array slices are being rejoined to form $e, as the crypt.php file may have gotten longer and broken the manual
* reassembly of its data
*/
- function testStreamDecryptLongFileContentWithoutHeader() {
+ public function testStreamDecryptLongFileContentWithoutHeader() {
// Generate a a random filename
- $filename = 'tmp-' . uniqid() . '.test';
+ $filename = 'tmp-' . $this->getUniqueID() . '.test';
\OCP\Config::setSystemValue('cipher', 'AES-128-CFB');
@@ -385,17 +359,13 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->dataLong . $this->dataLong, $decrypted);
// Teardown
-
$this->view->unlink($this->userId . '/files/' . $filename);
-
- Encryption\Keymanager::deleteFileKey($this->view, $filename);
-
}
/**
* @medium
*/
- function testIsEncryptedContent() {
+ public function testIsEncryptedContent() {
$this->assertFalse(Encryption\Crypt::isCatfileContent($this->dataUrl));
@@ -410,7 +380,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @large
*/
- function testMultiKeyEncrypt() {
+ public function testMultiKeyEncrypt() {
# TODO: search in keyfile for actual content as IV will ensure this test always passes
@@ -437,9 +407,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @medium
*/
- function testRenameFile() {
+ public function testRenameFile() {
- $filename = 'tmp-' . uniqid();
+ $filename = 'tmp-' . $this->getUniqueID();
// Save long data as encrypted file using stream wrapper
$cryptedFile = file_put_contents('crypt:///' . $this->userId . '/files/' . $filename, $this->dataLong);
@@ -452,7 +422,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->dataLong, $decrypt);
- $newFilename = 'tmp-new-' . uniqid();
+ $newFilename = 'tmp-new-' . $this->getUniqueID();
$view = new \OC\Files\View('/' . $this->userId . '/files');
$view->rename($filename, $newFilename);
@@ -468,9 +438,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @medium
*/
- function testMoveFileIntoFolder() {
+ public function testMoveFileIntoFolder() {
- $filename = 'tmp-' . uniqid();
+ $filename = 'tmp-' . $this->getUniqueID();
// Save long data as encrypted file using stream wrapper
$cryptedFile = file_put_contents('crypt:///' . $this->userId . '/files/' . $filename, $this->dataLong);
@@ -483,8 +453,8 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->dataLong, $decrypt);
- $newFolder = '/newfolder' . uniqid();
- $newFilename = 'tmp-new-' . uniqid();
+ $newFolder = '/newfolder' . $this->getUniqueID();
+ $newFilename = 'tmp-new-' . $this->getUniqueID();
$view = new \OC\Files\View('/' . $this->userId . '/files');
$view->mkdir($newFolder);
$view->rename($filename, $newFolder . '/' . $newFilename);
@@ -501,12 +471,12 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @medium
*/
- function testMoveFolder() {
+ public function testMoveFolder() {
$view = new \OC\Files\View('/' . $this->userId . '/files');
- $filename = '/tmp-' . uniqid();
- $folder = '/folder' . uniqid();
+ $filename = '/tmp-' . $this->getUniqueID();
+ $folder = '/folder' . $this->getUniqueID();
$view->mkdir($folder);
@@ -521,7 +491,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->dataLong, $decrypt);
- $newFolder = '/newfolder/subfolder' . uniqid();
+ $newFolder = '/newfolder/subfolder' . $this->getUniqueID();
$view->mkdir('/newfolder');
$view->rename($folder, $newFolder);
@@ -539,8 +509,8 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @medium
*/
- function testChangePassphrase() {
- $filename = 'tmp-' . uniqid();
+ public function testChangePassphrase() {
+ $filename = 'tmp-' . $this->getUniqueID();
// Save long data as encrypted file using stream wrapper
$cryptedFile = file_put_contents('crypt:///' . $this->userId . '/files/' . $filename, $this->dataLong);
@@ -576,9 +546,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @medium
*/
- function testViewFilePutAndGetContents() {
+ public function testViewFilePutAndGetContents() {
- $filename = '/tmp-' . uniqid();
+ $filename = '/tmp-' . $this->getUniqueID();
$view = new \OC\Files\View('/' . $this->userId . '/files');
// Save short data as encrypted file using stream wrapper
@@ -610,8 +580,8 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @large
*/
- function testTouchExistingFile() {
- $filename = '/tmp-' . uniqid();
+ public function testTouchExistingFile() {
+ $filename = '/tmp-' . $this->getUniqueID();
$view = new \OC\Files\View('/' . $this->userId . '/files');
// Save short data as encrypted file using stream wrapper
@@ -634,8 +604,8 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @medium
*/
- function testTouchFile() {
- $filename = '/tmp-' . uniqid();
+ public function testTouchFile() {
+ $filename = '/tmp-' . $this->getUniqueID();
$view = new \OC\Files\View('/' . $this->userId . '/files');
$view->touch($filename);
@@ -658,8 +628,8 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
/**
* @medium
*/
- function testFopenFile() {
- $filename = '/tmp-' . uniqid();
+ public function testFopenFile() {
+ $filename = '/tmp-' . $this->getUniqueID();
$view = new \OC\Files\View('/' . $this->userId . '/files');
// Save short data as encrypted file using stream wrapper
@@ -676,6 +646,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->dataShort, $decrypt);
// tear down
+ fclose($handle);
$view->unlink($filename);
}
diff --git a/apps/files_encryption/tests/helper.php b/apps/files_encryption/tests/helper.php
index ed543bf89f6..88ba9f20d53 100644
--- a/apps/files_encryption/tests/helper.php
+++ b/apps/files_encryption/tests/helper.php
@@ -6,39 +6,39 @@
* See the COPYING-README file.
*/
-require_once __DIR__ . '/util.php';
-
use OCA\Encryption;
/**
* Class Test_Encryption_Helper
*/
-class Test_Encryption_Helper extends \PHPUnit_Framework_TestCase {
+class Test_Encryption_Helper extends \OCA\Files_Encryption\Tests\TestCase {
const TEST_ENCRYPTION_HELPER_USER1 = "test-helper-user1";
const TEST_ENCRYPTION_HELPER_USER2 = "test-helper-user2";
- public function setUp() {
+ protected function setUpUsers() {
// create test user
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER2, true);
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER1, true);
+ self::loginHelper(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER2, true);
+ self::loginHelper(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER1, true);
}
- public function tearDown() {
+ protected function cleanUpUsers() {
// cleanup test user
\OC_User::deleteUser(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER1);
\OC_User::deleteUser(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER2);
}
- public static function tearDownAfterClass() {
+ public static function setupHooks() {
+ // Filesystem related hooks
+ \OCA\Encryption\Helper::registerFilesystemHooks();
- \OC_Hook::clear();
+ // clear and register hooks
\OC_FileProxy::clearProxies();
+ \OC_FileProxy::register(new OCA\Encryption\Proxy());
+ }
- // Delete keys in /data/
- $view = new \OC\Files\View('/');
- $view->rmdir('public-keys');
- $view->rmdir('owncloud_private_key');
+ public static function tearDownAfterClass() {
+ parent::tearDownAfterClass();
}
/**
@@ -90,19 +90,20 @@ class Test_Encryption_Helper extends \PHPUnit_Framework_TestCase {
}
function testGetUser() {
+ self::setUpUsers();
$path1 = "/" . self::TEST_ENCRYPTION_HELPER_USER1 . "/files/foo/bar.txt";
$path2 = "/" . self::TEST_ENCRYPTION_HELPER_USER1 . "/cache/foo/bar.txt";
$path3 = "/" . self::TEST_ENCRYPTION_HELPER_USER2 . "/thumbnails/foo";
$path4 ="/" . "/" . self::TEST_ENCRYPTION_HELPER_USER1;
- \Test_Encryption_Util::loginHelper(self::TEST_ENCRYPTION_HELPER_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_HELPER_USER1);
// if we are logged-in every path should return the currently logged-in user
$this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, Encryption\Helper::getUser($path3));
// now log out
- \Test_Encryption_Util::logoutHelper();
+ self::logoutHelper();
// now we should only get the user from /user/files and user/cache paths
$this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, Encryption\Helper::getUser($path1));
@@ -112,58 +113,8 @@ class Test_Encryption_Helper extends \PHPUnit_Framework_TestCase {
$this->assertFalse(Encryption\Helper::getUser($path4));
// Log-in again
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER1);
- }
-
- function userNamesProvider() {
- return array(
- array('testuser' . uniqid()),
- array('user.name.with.dots'),
- );
- }
-
- /**
- * Tests whether share keys can be found
- *
- * @dataProvider userNamesProvider
- */
- function testFindShareKeys($userName) {
- // 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
- \Test_Encryption_Util::setupHooks();
- \Test_Encryption_Util::loginHelper($userName, true);
- $testDir = 'testFindShareKeys' . uniqid() . '/';
- $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::loginHelper(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER1);
+ self::cleanUpUsers();
}
}
diff --git a/apps/files_encryption/tests/hooks.php b/apps/files_encryption/tests/hooks.php
index c2434c0f5f6..d5a30f5074a 100644
--- a/apps/files_encryption/tests/hooks.php
+++ b/apps/files_encryption/tests/hooks.php
@@ -20,24 +20,22 @@
*
*/
-require_once __DIR__ . '/util.php';
-
use OCA\Encryption;
/**
* Class Test_Encryption_Hooks
* this class provide basic hook app tests
*/
-class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
+class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
const TEST_ENCRYPTION_HOOKS_USER1 = "test-encryption-hooks-user1.dot";
const TEST_ENCRYPTION_HOOKS_USER2 = "test-encryption-hooks-user2.dot";
- /**
- * @var \OC\Files\View
- */
+ /** @var \OC\Files\View */
public $user1View; // view on /data/user1/files
+ /** @var \OC\Files\View */
public $user2View; // view on /data/user2/files
+ /** @var \OC\Files\View */
public $rootView; // view on /data/user
public $data;
public $filename;
@@ -46,6 +44,8 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
private static $testFiles;
public static function setUpBeforeClass() {
+ parent::setUpBeforeClass();
+
// note: not using a data provider because these
// files all need to coexist to make sure the
// share keys are found properly (pattern matching)
@@ -63,36 +63,16 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_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
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1, true);
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2, true);
+ self::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1, true);
+ self::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2, true);
}
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
// set user id
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
+ self::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
\OC_User::setUserId(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
// init filesystem view
@@ -102,8 +82,8 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
// init short data
$this->data = 'hats';
- $this->filename = 'enc_hooks_tests-' . uniqid() . '.txt';
- $this->folder = 'enc_hooks_tests_folder-' . uniqid();
+ $this->filename = 'enc_hooks_tests-' . $this->getUniqueID() . '.txt';
+ $this->folder = 'enc_hooks_tests_folder-' . $this->getUniqueID();
}
@@ -112,13 +92,7 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_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();
}
function testDisableHook() {
@@ -140,7 +114,7 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
// relogin user to initialize the encryption again
$user = \OCP\User::getUser();
- \Test_Encryption_Util::loginHelper($user);
+ self::loginHelper($user);
}
@@ -159,14 +133,14 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_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'));
- \Test_Encryption_Util::logoutHelper();
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2);
+ self::logoutHelper();
+ self::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2);
\OC_User::setUserId(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2);
@@ -174,10 +148,10 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_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
@@ -189,10 +163,10 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_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
@@ -201,17 +175,17 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_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');
@@ -223,8 +197,8 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
function testDeleteHooksForSharedFiles() {
- \Test_Encryption_Util::logoutHelper();
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
+ self::logoutHelper();
+ self::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
\OC_User::setUserId(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
// remember files_trashbin state
@@ -240,10 +214,10 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_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);
@@ -252,15 +226,15 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
$this->assertTrue($fileInfo instanceof \OC\Files\FileInfo);
// share the file with user2
- \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_ENCRYPTION_HOOKS_USER2, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_ENCRYPTION_HOOKS_USER2, \OCP\Constants::PERMISSION_ALL);
// 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'));
- \Test_Encryption_Util::logoutHelper();
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2);
+ self::logoutHelper();
+ self::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2);
\OC_User::setUserId(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2);
// user2 update the shared file
@@ -268,10 +242,10 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_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);
@@ -280,18 +254,18 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_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
- \Test_Encryption_Util::logoutHelper();
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
+ self::logoutHelper();
+ self::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
\OC_User::setUserId(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
if ($stateFilesTrashbin) {
@@ -323,12 +297,12 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_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);
@@ -347,18 +321,18 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_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);
@@ -385,12 +359,12 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_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);
@@ -406,18 +380,18 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_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);
@@ -435,8 +409,8 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_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 e2486ee93eb..21f03839430 100644
--- a/apps/files_encryption/tests/keymanager.php
+++ b/apps/files_encryption/tests/keymanager.php
@@ -6,14 +6,12 @@
* See the COPYING-README file.
*/
-require_once __DIR__ . '/util.php';
-
use OCA\Encryption;
/**
* Class Test_Encryption_Keymanager
*/
-class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
+class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {
const TEST_USER = "test-keymanager-user.dot";
@@ -28,16 +26,7 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
public $dataShort;
public static function 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());
+ parent::setUpBeforeClass();
// disable file proxy by default
\OC_FileProxy::$enabled = false;
@@ -50,10 +39,11 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
// create test user
\OC_User::deleteUser(\Test_Encryption_Keymanager::TEST_USER);
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Keymanager::TEST_USER, true);
+ parent::loginHelper(\Test_Encryption_Keymanager::TEST_USER, true);
}
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
// set content for encrypting / decrypting in tests
$this->dataLong = file_get_contents(__DIR__ . '/../lib/crypt.php');
$this->dataShort = 'hats';
@@ -68,7 +58,7 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
$this->view = new \OC\Files\View('/');
- \Test_Encryption_Util::loginHelper(Test_Encryption_Keymanager::TEST_USER);
+ self::loginHelper(Test_Encryption_Keymanager::TEST_USER);
$this->userId = \Test_Encryption_Keymanager::TEST_USER;
$this->pass = \Test_Encryption_Keymanager::TEST_USER;
@@ -77,8 +67,8 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_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();
}
public static function tearDownAfterClass() {
@@ -91,13 +81,7 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_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();
}
/**
@@ -135,27 +119,6 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_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
*/
@@ -163,7 +126,7 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
$key = $this->randomKey;
- $file = 'unittest-' . uniqid() . '.txt';
+ $file = 'unittest-' . $this->getUniqueID() . '.txt';
$util = new Encryption\Util($this->view, $this->userId);
@@ -175,7 +138,7 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_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);
@@ -193,7 +156,7 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_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');
@@ -205,14 +168,19 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_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');
}
@@ -251,70 +219,78 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_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');
@@ -339,7 +315,12 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_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(
@@ -357,147 +338,16 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_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');
@@ -511,18 +361,11 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_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 80f30d4e793..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,33 +24,50 @@
use OCA\Encryption;
use OCA\Files_Encryption\Migration;
-class Test_Migration extends PHPUnit_Framework_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();
+ }
- public function tearDown() {
+ protected function tearDown() {
if (OC_DB::tableExists('encryption_test')) {
OC_DB::dropTable('encryption_test');
}
$this->assertTableNotExist('encryption_test');
+
+ parent::tearDown();
}
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`,'
@@ -87,89 +105,160 @@ class Test_Migration extends PHPUnit_Framework_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 d3e568f8914..72a9a9a5551 100644
--- a/apps/files_encryption/tests/proxy.php
+++ b/apps/files_encryption/tests/proxy.php
@@ -20,15 +20,13 @@
*
*/
-require_once __DIR__ . '/util.php';
-
use OCA\Encryption;
/**
* Class Test_Encryption_Proxy
* this class provide basic proxy app tests
*/
-class Test_Encryption_Proxy extends \PHPUnit_Framework_TestCase {
+class Test_Encryption_Proxy extends \OCA\Files_Encryption\Tests\TestCase {
const TEST_ENCRYPTION_PROXY_USER1 = "test-proxy-user1";
@@ -44,25 +42,15 @@ class Test_Encryption_Proxy extends \PHPUnit_Framework_TestCase {
public $filename;
public static function 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());
+ parent::setUpBeforeClass();
// create test user
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1, true);
+ self::loginHelper(\Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1, true);
}
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
// set user id
\OC_User::setUserId(\Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1);
$this->userId = \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1;
@@ -75,7 +63,7 @@ class Test_Encryption_Proxy extends \PHPUnit_Framework_TestCase {
// init short data
$this->data = 'hats';
$this->dataLong = file_get_contents(__DIR__ . '/../lib/crypt.php');
- $this->filename = 'enc_proxy_tests-' . uniqid() . '.txt';
+ $this->filename = 'enc_proxy_tests-' . $this->getUniqueID() . '.txt';
}
@@ -83,13 +71,7 @@ class Test_Encryption_Proxy extends \PHPUnit_Framework_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 d7efe21a8fd..f827017569f 100755
--- a/apps/files_encryption/tests/share.php
+++ b/apps/files_encryption/tests/share.php
@@ -20,14 +20,12 @@
*
*/
-require_once __DIR__ . '/util.php';
-
use OCA\Encryption;
/**
* Class Test_Encryption_Share
*/
-class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
+class Test_Encryption_Share extends \OCA\Files_Encryption\Tests\TestCase {
const TEST_ENCRYPTION_SHARE_USER1 = "test-share-user1";
const TEST_ENCRYPTION_SHARE_USER2 = "test-share-user2";
@@ -47,36 +45,23 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
public $subsubfolder;
public static function setUpBeforeClass() {
- // reset backend
- \OC_User::clearBackends();
- \OC_User::useBackend('database');
+ parent::setUpBeforeClass();
// 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
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1, true);
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, true);
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3, true);
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4, true);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1, true);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, true);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3, true);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4, true);
// create group and assign users
\OC_Group::createGroup(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1);
@@ -84,7 +69,9 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
\OC_Group::addToGroup(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1);
}
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->dataShort = 'hats';
$this->view = new \OC\Files\View('/');
@@ -101,16 +88,18 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
\OC_App::disable('files_trashbin');
// login as first user
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
}
- function tearDown() {
+ protected function tearDown() {
// reset app files_trashbin
if ($this->stateFilesTrashbin) {
OC_App::enable('files_trashbin');
} else {
OC_App::disable('files_trashbin');
}
+
+ parent::tearDown();
}
public static function tearDownAfterClass() {
@@ -123,13 +112,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_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();
}
@@ -139,7 +122,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
*/
function testShareFile($withTeardown = true) {
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// save file with content
$cryptedFile = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename, $this->dataShort);
@@ -165,18 +148,18 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
\OC_FileProxy::$enabled = $proxyStatus;
// share the file
- \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, \OCP\Constants::PERMISSION_ALL);
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// 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
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
// get file contents
$retrievedCryptedFile = $this->view->file_get_contents(
@@ -189,15 +172,15 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
if ($withTeardown) {
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// unshare the file
\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/');
@@ -206,8 +189,8 @@ class Test_Encryption_Share extends \PHPUnit_Framework_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'));
}
}
@@ -219,25 +202,25 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$this->testShareFile(false);
// login as user2
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
// get the file info
$fileInfo = $this->view->getFileInfo(
'/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->filename);
// share the file with user3
- \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3, \OCP\Constants::PERMISSION_ALL);
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// 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
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
// get file contents
$retrievedCryptedFile = $this->view->file_get_contents(
@@ -250,26 +233,26 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
if ($withTeardown) {
// login as user1
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
// unshare the file with user2
\OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// 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/');
@@ -278,8 +261,8 @@ class Test_Encryption_Share extends \PHPUnit_Framework_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'));
}
}
@@ -290,7 +273,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
*/
function testShareFolder($withTeardown = true) {
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// create folder structure
$this->view->mkdir('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1);
@@ -322,19 +305,19 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
\OC_FileProxy::$enabled = $proxyStatus;
// share the folder with user1
- \OCP\Share::shareItem('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, \OCP\Constants::PERMISSION_ALL);
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// 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
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
// get file contents
$retrievedCryptedFile = $this->view->file_get_contents(
@@ -348,16 +331,16 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
if ($withTeardown) {
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// unshare the folder with user1
\OCP\Share::unshare('folder', $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'
+ '/' . \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');
@@ -366,9 +349,9 @@ class Test_Encryption_Share extends \PHPUnit_Framework_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;
@@ -382,7 +365,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$fileInfoFolder1 = $this->testShareFolder(false);
// login as user2
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
// disable encryption proxy to prevent recursive calls
$proxyStatus = \OC_FileProxy::$enabled;
@@ -400,19 +383,19 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
\OC_FileProxy::$enabled = $proxyStatus;
// share the file with user3
- \OCP\Share::shareItem('folder', $fileInfoSubFolder['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('folder', $fileInfoSubFolder['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3, \OCP\Constants::PERMISSION_ALL);
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// 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
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
// get file contents
$retrievedCryptedFile = $this->view->file_get_contents(
@@ -431,19 +414,19 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$this->assertTrue($fileInfo instanceof \OC\Files\FileInfo);
// share the file with user3
- \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4, \OCP\Constants::PERMISSION_ALL);
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// 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
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4);
// get file contents
$retrievedCryptedFile = $this->view->file_get_contents(
@@ -456,40 +439,40 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
if ($withTeardown) {
// login as user2
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
// unshare the file with user3
\OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4);
// 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
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
// unshare the folder with user2
\OCP\Share::unshare('folder', $fileInfoSubFolder['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
// 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
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// unshare the folder1 with user1
\OCP\Share::unshare('folder', $fileInfoFolder1['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'
+ '/' . \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');
@@ -498,16 +481,16 @@ class Test_Encryption_Share extends \PHPUnit_Framework_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'));
}
}
function testPublicShareFile() {
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// save file with content
$cryptedFile = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename, $this->dataShort);
@@ -533,22 +516,22 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
\OC_FileProxy::$enabled = $proxyStatus;
// share the file
- \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_LINK, false, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_LINK, false, \OCP\Constants::PERMISSION_ALL);
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
$publicShareKeyId = \OC::$server->getAppConfig()->getValue('files_encryption', 'publicShareKeyId');
// 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';
//$GLOBALS['fileOwner'] = \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1;
- \Test_Encryption_Util::logoutHelper();
+ self::logoutHelper();
// get file contents
$retrievedCryptedFile = file_get_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
@@ -559,15 +542,15 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
// tear down
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// unshare the file
\OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_LINK, null);
// 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/');
@@ -576,8 +559,8 @@ class Test_Encryption_Share extends \PHPUnit_Framework_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'));
}
/**
@@ -585,7 +568,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
*/
function testShareFileWithGroup() {
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// save file with content
$cryptedFile = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename, $this->dataShort);
@@ -611,21 +594,21 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
\OC_FileProxy::$enabled = $proxyStatus;
// share the file
- \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1, \OCP\Constants::PERMISSION_ALL);
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// 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
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
// get file contents
$retrievedCryptedFile = $this->view->file_get_contents(
@@ -635,18 +618,18 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->dataShort, $retrievedCryptedFile);
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// unshare the file
\OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1);
// 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/');
@@ -655,8 +638,8 @@ class Test_Encryption_Share extends \PHPUnit_Framework_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'));
}
@@ -666,13 +649,13 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
function testRecoveryFile() {
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
\OCA\Encryption\Helper::adminEnableRecovery(null, 'test123');
$recoveryKeyId = \OC::$server->getAppConfig()->getValue('files_encryption', 'recoveryKeyId');
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
$util = new \OCA\Encryption\Util(new \OC\Files\View('/'), \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
@@ -702,19 +685,19 @@ class Test_Encryption_Share extends \PHPUnit_Framework_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));
@@ -724,12 +707,12 @@ class Test_Encryption_Share extends \PHPUnit_Framework_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));
@@ -739,12 +722,12 @@ class Test_Encryption_Share extends \PHPUnit_Framework_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/');
@@ -754,12 +737,12 @@ class Test_Encryption_Share extends \PHPUnit_Framework_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'));
@@ -772,7 +755,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
function testRecoveryForUser() {
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
$result = \OCA\Encryption\Helper::adminEnableRecovery(null, 'test123');
$this->assertTrue($result);
@@ -780,7 +763,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$recoveryKeyId = \OC::$server->getAppConfig()->getValue('files_encryption', 'recoveryKeyId');
// login as user2
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
$util = new \OCA\Encryption\Util(new \OC\Files\View('/'), \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
@@ -809,22 +792,22 @@ class Test_Encryption_Share extends \PHPUnit_Framework_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
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// change password
\OC_User::setPassword(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, 'test', 'test123');
@@ -834,7 +817,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
\OCA\Encryption\Hooks::setPassphrase($params);
// login as user2
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, false, 'test');
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, false, 'test');
// get file contents
$retrievedCryptedFile1 = file_get_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->filename);
@@ -853,19 +836,19 @@ class Test_Encryption_Share extends \PHPUnit_Framework_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));
@@ -886,7 +869,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
*/
function testFailShareFile() {
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// save file with content
$cryptedFile = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename, $this->dataShort);
@@ -909,27 +892,27 @@ class Test_Encryption_Share extends \PHPUnit_Framework_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;
// share the file
try {
- \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1, \OCP\Constants::PERMISSION_ALL);
} catch (Exception $e) {
$this->assertEquals(0, strpos($e->getMessage(), "Following users are not set up for encryption"));
}
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// 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;
@@ -937,12 +920,12 @@ class Test_Encryption_Share extends \PHPUnit_Framework_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
@@ -953,8 +936,8 @@ class Test_Encryption_Share extends \PHPUnit_Framework_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/');
@@ -969,7 +952,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
function testRename() {
// login as admin
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// save file with content
$cryptedFile = file_put_contents('crypt:///' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename, $this->dataShort);
@@ -985,16 +968,16 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$this->assertTrue($fileInfo instanceof \OC\Files\FileInfo);
// share the file
- \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, \OCP\Constants::PERMISSION_ALL);
// 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
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
$this->assertTrue($this->view->file_exists('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->filename));
@@ -1017,7 +1000,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->dataShort, $retrievedRenamedFile);
// cleanup
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
$this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
}
@@ -1029,8 +1012,8 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$view = new \OC\Files\View('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
- $filename = '/tmp-' . uniqid();
- $folder = '/folder' . uniqid();
+ $filename = '/tmp-' . $this->getUniqueID();
+ $folder = '/folder' . $this->getUniqueID();
\OC\Files\Filesystem::mkdir($folder);
@@ -1045,7 +1028,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->dataShort, $decrypt);
- $newFolder = '/newfolder/subfolder' . uniqid();
+ $newFolder = '/newfolder/subfolder' . $this->getUniqueID();
\OC\Files\Filesystem::mkdir('/newfolder');
// get the file info from previous created file
@@ -1053,7 +1036,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$this->assertTrue($fileInfo instanceof \OC\Files\FileInfo);
// share the folder
- \OCP\Share::shareItem('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, \OCP\Constants::PERMISSION_ALL);
\OC\Files\Filesystem::rename($folder, $newFolder);
@@ -1062,10 +1045,10 @@ class Test_Encryption_Share extends \PHPUnit_Framework_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);
@@ -1087,8 +1070,8 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
function testMoveFileToFolder($userId) {
$view = new \OC\Files\View('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
- $filename = '/tmp-' . uniqid();
- $folder = '/folder' . uniqid();
+ $filename = '/tmp-' . $this->getUniqueID();
+ $folder = '/folder' . $this->getUniqueID();
\OC\Files\Filesystem::mkdir($folder);
@@ -1103,7 +1086,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->dataShort, $decrypt);
- $subFolder = $folder . '/subfolder' . uniqid();
+ $subFolder = $folder . '/subfolder' . $this->getUniqueID();
\OC\Files\Filesystem::mkdir($subFolder);
// get the file info from previous created file
@@ -1111,28 +1094,28 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
$this->assertTrue($fileInfo instanceof \OC\Files\FileInfo);
// share the folder
- \OCP\Share::shareItem('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, OCP\PERMISSION_ALL);
+ \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
- \Test_Encryption_Util::loginHelper($userId);
+ self::loginHelper($userId);
\OC\Files\Filesystem::rename($folder . $filename, $subFolder . $filename);
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+ self::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
// Get file decrypted contents
$newDecrypt = \OC\Files\Filesystem::file_get_contents($subFolder . $filename);
$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 2b57f11c680..f4824935ca0 100644
--- a/apps/files_encryption/tests/stream.php
+++ b/apps/files_encryption/tests/stream.php
@@ -20,15 +20,13 @@
*
*/
-require_once __DIR__ . '/util.php';
-
use OCA\Encryption;
/**
* Class Test_Encryption_Stream
* this class provide basic stream tests
*/
-class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
+class Test_Encryption_Stream extends \OCA\Files_Encryption\Tests\TestCase {
const TEST_ENCRYPTION_STREAM_USER1 = "test-stream-user1";
@@ -42,22 +40,15 @@ class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
public $stateFilesTrashbin;
public static function 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());
+ parent::setUpBeforeClass();
// create test user
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1, true);
+ self::loginHelper(\Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1, true);
}
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
// set user id
\OC_User::setUserId(\Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1);
$this->userId = \Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1;
@@ -76,7 +67,7 @@ class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
\OC_App::disable('files_trashbin');
}
- function tearDown() {
+ protected function tearDown() {
// reset app files_trashbin
if ($this->stateFilesTrashbin) {
OC_App::enable('files_trashbin');
@@ -84,23 +75,19 @@ class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
else {
OC_App::disable('files_trashbin');
}
+
+ parent::tearDown();
}
public static function tearDownAfterClass() {
// 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();
}
function testStreamOptions() {
- $filename = '/tmp-' . uniqid();
+ $filename = '/tmp-' . $this->getUniqueID();
$view = new \OC\Files\View('/' . $this->userId . '/files');
// Save short data as encrypted file using stream wrapper
@@ -118,12 +105,14 @@ class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
$this->assertTrue(flock($handle, LOCK_SH));
$this->assertTrue(flock($handle, LOCK_UN));
+ fclose($handle);
+
// tear down
$view->unlink($filename);
}
function testStreamSetBlocking() {
- $filename = '/tmp-' . uniqid();
+ $filename = '/tmp-' . $this->getUniqueID();
$view = new \OC\Files\View('/' . $this->userId . '/files');
// Save short data as encrypted file using stream wrapper
@@ -134,6 +123,13 @@ class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
$handle = $view->fopen($filename, 'r');
+
+ if (\OC_Util::runningOnWindows()) {
+ fclose($handle);
+ $view->unlink($filename);
+ $this->markTestSkipped('[Windows] stream_set_blocking() does not work as expected on Windows.');
+ }
+
// set stream options
$this->assertTrue(stream_set_blocking($handle, 1));
@@ -147,7 +143,7 @@ class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
* @medium
*/
function testStreamSetTimeout() {
- $filename = '/tmp-' . uniqid();
+ $filename = '/tmp-' . $this->getUniqueID();
$view = new \OC\Files\View('/' . $this->userId . '/files');
// Save short data as encrypted file using stream wrapper
@@ -168,7 +164,7 @@ class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
}
function testStreamSetWriteBuffer() {
- $filename = '/tmp-' . uniqid();
+ $filename = '/tmp-' . $this->getUniqueID();
$view = new \OC\Files\View('/' . $this->userId . '/files');
// Save short data as encrypted file using stream wrapper
@@ -194,9 +190,9 @@ class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
*/
function testStreamFromLocalFile() {
- $filename = '/' . $this->userId . '/files/' . 'tmp-' . uniqid().'.txt';
+ $filename = '/' . $this->userId . '/files/' . 'tmp-' . $this->getUniqueID().'.txt';
- $tmpFilename = "/tmp/" . uniqid() . ".txt";
+ $tmpFilename = "/tmp/" . $this->getUniqueID() . ".txt";
// write an encrypted file
$cryptedFile = $this->view->file_put_contents($filename, $this->dataShort);
@@ -221,6 +217,8 @@ class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
// check if it was successful
$this->assertEquals($this->dataShort, $contentFromTmpFile);
+ fclose($handle);
+
// clean up
unlink($tmpFilename);
$this->view->unlink($filename);
diff --git a/apps/files_encryption/tests/testcase.php b/apps/files_encryption/tests/testcase.php
new file mode 100644
index 00000000000..743a876ab45
--- /dev/null
+++ b/apps/files_encryption/tests/testcase.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * Copyright (c) 2012 Sam Tuke <samtuke@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files_Encryption\Tests;
+
+use OCA\Encryption;
+
+/**
+ * Class Test_Encryption_TestCase
+ */
+abstract class TestCase extends \Test\TestCase {
+
+ /**
+ * @param string $user
+ * @param bool $create
+ * @param bool $password
+ */
+ public static function loginHelper($user, $create = false, $password = false, $loadEncryption = true) {
+ if ($create) {
+ try {
+ \OC_User::createUser($user, $user);
+ } catch (\Exception $e) {
+ // catch username is already being used from previous aborted runs
+ }
+ }
+
+ if ($password === false) {
+ $password = $user;
+ }
+
+ \OC_Util::tearDownFS();
+ \OC_User::setUserId('');
+ \OC\Files\Filesystem::tearDown();
+ \OC_User::setUserId($user);
+ \OC_Util::setupFS($user);
+
+ if ($loadEncryption) {
+ $params['uid'] = $user;
+ $params['password'] = $password;
+ \OCA\Encryption\Hooks::login($params);
+ }
+ }
+
+ public static function logoutHelper() {
+ \OC_Util::tearDownFS();
+ \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 d795240399c..de5b8bd6edb 100755
--- a/apps/files_encryption/tests/trashbin.php
+++ b/apps/files_encryption/tests/trashbin.php
@@ -20,15 +20,13 @@
*
*/
-require_once __DIR__ . '/util.php';
-
use OCA\Encryption;
/**
* Class Test_Encryption_Trashbin
* this class provide basic trashbin app tests
*/
-class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
+class Test_Encryption_Trashbin extends \OCA\Files_Encryption\Tests\TestCase {
const TEST_ENCRYPTION_TRASHBIN_USER1 = "test-trashbin-user1";
@@ -45,32 +43,22 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
public $subsubfolder;
public static function setUpBeforeClass() {
- // reset backend
- \OC_User::clearBackends();
- \OC_User::useBackend('database');
-
- \OC_Hook::clear('OC_Filesystem');
- \OC_Hook::clear('OC_User');
+ parent::setUpBeforeClass();
// 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
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1, true);
+ self::loginHelper(self::TEST_ENCRYPTION_TRASHBIN_USER1, true);
}
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
// set user id
- \OC_User::setUserId(\Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1);
- $this->userId = \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1;
- $this->pass = \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1;
+ \OC_User::setUserId(self::TEST_ENCRYPTION_TRASHBIN_USER1);
+ $this->userId = self::TEST_ENCRYPTION_TRASHBIN_USER1;
+ $this->pass = self::TEST_ENCRYPTION_TRASHBIN_USER1;
// init filesystem view
$this->view = new \OC\Files\View('/');
@@ -89,7 +77,7 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
\OC_App::enable('files_trashbin');
}
- function tearDown() {
+ protected function tearDown() {
// reset app files_trashbin
if ($this->stateFilesTrashbin) {
OC_App::enable('files_trashbin');
@@ -97,19 +85,15 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
else {
OC_App::disable('files_trashbin');
}
+
+ parent::tearDown();
}
public static function tearDownAfterClass() {
// cleanup test user
- \OC_User::deleteUser(\Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1);
+ \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();
}
/**
@@ -119,12 +103,12 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
function testDeleteFile() {
// generate filename
- $filename = 'tmp-' . uniqid() . '.txt';
+ $filename = 'tmp-' . $this->getUniqueID() . '.txt';
$filename2 = $filename . '.backup'; // a second file with similar name
// save file with content
- $cryptedFile = file_put_contents('crypt:///' .\Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1. '/files/'. $filename, $this->dataShort);
- $cryptedFile2 = file_put_contents('crypt:///' .\Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1. '/files/'. $filename2, $this->dataShort);
+ $cryptedFile = file_put_contents('crypt:///' .self::TEST_ENCRYPTION_TRASHBIN_USER1. '/files/'. $filename, $this->dataShort);
+ $cryptedFile2 = file_put_contents('crypt:///' .self::TEST_ENCRYPTION_TRASHBIN_USER1. '/files/'. $filename2, $this->dataShort);
// test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
@@ -132,59 +116,55 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
// check if key for admin exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::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(
- '/' . \Test_Encryption_Trashbin::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(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename . '.' . \Test_Encryption_Trashbin::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(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename2 . '.' . \Test_Encryption_Trashbin::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(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename));
// check if key for admin not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::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(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename . '.' . \Test_Encryption_Trashbin::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(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename2));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename2));
// check that key for second file still exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::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(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename2 . '.' . \Test_Encryption_Trashbin::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(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/files/');
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/files/');
$trashFileSuffix = null;
// find created file with timestamp
foreach ($trashFiles as $file) {
- if (strncmp($file['path'], $filename, strlen($filename))) {
+ if (strpos($file['path'], $filename . '.d') !== false) {
$path_parts = pathinfo($file['name']);
$trashFileSuffix = $path_parts['extension'];
}
@@ -193,15 +173,16 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_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(
- '/' . \Test_Encryption_Trashbin::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(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/share-keys/' . $filename
- . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey.' . $trashFileSuffix));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keys/' . $filename
+ . '.' . $trashFileSuffix . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
}
/**
@@ -210,67 +191,67 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
*/
function testRestoreFile() {
// generate filename
- $filename = 'tmp-' . uniqid() . '.txt';
+ $filename = 'tmp-' . $this->getUniqueID() . '.txt';
$filename2 = $filename . '.backup'; // a second file with similar name
// save file with content
- $cryptedFile = file_put_contents('crypt:///' .\Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1. '/files/'. $filename, $this->dataShort);
- $cryptedFile2 = file_put_contents('crypt:///' .\Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1. '/files/'. $filename2, $this->dataShort);
+ $cryptedFile = file_put_contents('crypt:///' . self::TEST_ENCRYPTION_TRASHBIN_USER1. '/files/'. $filename, $this->dataShort);
+ $cryptedFile2 = file_put_contents('crypt:///' . self::TEST_ENCRYPTION_TRASHBIN_USER1. '/files/'. $filename2, $this->dataShort);
// delete both files
\OC\Files\Filesystem::unlink($filename);
\OC\Files\Filesystem::unlink($filename2);
- $trashFiles = $this->view->getDirectoryContent(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/files/');
+ $trashFiles = $this->view->getDirectoryContent('/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/files/');
$trashFileSuffix = null;
$trashFileSuffix2 = null;
// find created file with timestamp
foreach ($trashFiles as $file) {
- if (strncmp($file['path'], $filename, strlen($filename))) {
+ if (strpos($file['path'], $filename . '.d') !== false) {
$path_parts = pathinfo($file['name']);
$trashFileSuffix = $path_parts['extension'];
}
- if (strncmp($file['path'], $filename2, strlen($filename2))) {
- $path_parts = pathinfo($file['name']);
- $trashFileSuffix2 = $path_parts['extension'];
- }
}
// 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));
// check if file exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename));
// check if key for admin exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::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(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename . '.' . \Test_Encryption_Trashbin::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(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename2));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename2));
// check if key for admin exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::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(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename2 . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/'
+ . $filename2 . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
}
/**
@@ -280,7 +261,7 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
function testPermanentDeleteFile() {
// generate filename
- $filename = 'tmp-' . uniqid() . '.txt';
+ $filename = 'tmp-' . $this->getUniqueID() . '.txt';
// save file with content
$cryptedFile = file_put_contents('crypt:///' .$this->userId. '/files/' . $filename, $this->dataShort);
@@ -290,30 +271,29 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
// check if key for admin exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::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(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename . '.' . \Test_Encryption_Trashbin::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);
// check if file not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename));
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename));
// check if key for admin not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::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(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/'
- . $filename . '.' . \Test_Encryption_Trashbin::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`'
@@ -327,13 +307,13 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
// check if key for admin exists
$this->assertTrue($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::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(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/share-keys/' . $filename
- . '.' . \Test_Encryption_Trashbin::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);
@@ -343,18 +323,18 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
// check if key for admin not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/files/' . $filename . '.'
+ '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/files/' . $filename . '.'
. $trashFileSuffix));
// check if key for admin not exists
$this->assertFalse($this->view->file_exists(
- '/' . \Test_Encryption_Trashbin::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(
- '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/share-keys/' . $filename
- . '.' . \Test_Encryption_Trashbin::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 210ffcc5410..8d9aba423cd 100755
--- a/apps/files_encryption/tests/util.php
+++ b/apps/files_encryption/tests/util.php
@@ -11,7 +11,7 @@ use OCA\Encryption;
/**
* Class Test_Encryption_Util
*/
-class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
+class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
const TEST_ENCRYPTION_UTIL_USER1 = "test-util-user1";
const TEST_ENCRYPTION_UTIL_USER2 = "test-util-user2";
@@ -41,16 +41,12 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
public $stateFilesTrashbin;
public static function setUpBeforeClass() {
- // reset backend
- \OC_User::clearBackends();
- \OC_User::useBackend('database');
-
- self::setupHooks();
+ parent::setUpBeforeClass();
// create test user
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1, true);
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER2, true);
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER, true);
+ self::loginHelper(self::TEST_ENCRYPTION_UTIL_USER1, true);
+ self::loginHelper(self::TEST_ENCRYPTION_UTIL_USER2, true);
+ self::loginHelper(self::TEST_ENCRYPTION_UTIL_LEGACY_USER, true);
// create groups
\OC_Group::createGroup(self::TEST_ENCRYPTION_UTIL_GROUP1);
@@ -60,13 +56,14 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
\OC_Group::addToGroup(self::TEST_ENCRYPTION_UTIL_USER1, self::TEST_ENCRYPTION_UTIL_GROUP1);
}
+ protected function setUp() {
+ parent::setUp();
- function setUp() {
// login user
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1);
- \OC_User::setUserId(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1);
- $this->userId = \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1;
- $this->pass = \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1;
+ self::loginHelper(self::TEST_ENCRYPTION_UTIL_USER1);
+ \OC_User::setUserId(self::TEST_ENCRYPTION_UTIL_USER1);
+ $this->userId = self::TEST_ENCRYPTION_UTIL_USER1;
+ $this->pass = self::TEST_ENCRYPTION_UTIL_USER1;
// set content for encrypting / decrypting in tests
$this->dataUrl = __DIR__ . '/../lib/crypt.php';
@@ -82,13 +79,13 @@ class Test_Encryption_Util extends \PHPUnit_Framework_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('/');
@@ -101,7 +98,7 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
\OC_App::disable('files_trashbin');
}
- function tearDown() {
+ protected function tearDown() {
// reset app files_trashbin
if ($this->stateFilesTrashbin) {
OC_App::enable('files_trashbin');
@@ -109,34 +106,21 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
else {
OC_App::disable('files_trashbin');
}
+
+ parent::tearDown();
}
public static function tearDownAfterClass() {
// cleanup test user
- \OC_User::deleteUser(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1);
- \OC_User::deleteUser(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER2);
- \OC_User::deleteUser(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER);
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_UTIL_USER1);
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_UTIL_USER2);
+ \OC_User::deleteUser(self::TEST_ENCRYPTION_UTIL_LEGACY_USER);
//cleanup groups
\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');
- }
-
- 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());
+ parent::tearDownAfterClass();
}
/**
@@ -148,7 +132,7 @@ class Test_Encryption_Util extends \PHPUnit_Framework_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'));
@@ -164,8 +148,8 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
self::loginHelper($this->userId);
- $unencryptedFile = '/tmpUnencrypted-' . uniqid() . '.txt';
- $encryptedFile = '/tmpEncrypted-' . uniqid() . '.txt';
+ $unencryptedFile = '/tmpUnencrypted-' . $this->getUniqueID() . '.txt';
+ $encryptedFile = '/tmpEncrypted-' . $this->getUniqueID() . '.txt';
// Disable encryption proxy to write a unencrypted file
$proxyStatus = \OC_FileProxy::$enabled;
@@ -244,9 +228,9 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
*/
function testGetUidAndFilename() {
- \OC_User::setUserId(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1);
+ \OC_User::setUserId(self::TEST_ENCRYPTION_UTIL_USER1);
- $filename = '/tmp-' . uniqid() . '.test';
+ $filename = '/tmp-' . $this->getUniqueID() . '.test';
// Disable encryption proxy to prevent recursive calls
$proxyStatus = \OC_FileProxy::$enabled;
@@ -261,7 +245,7 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
list($fileOwnerUid, $file) = $util->getUidAndFilename($filename);
- $this->assertEquals(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1, $fileOwnerUid);
+ $this->assertEquals(self::TEST_ENCRYPTION_UTIL_USER1, $fileOwnerUid);
$this->assertEquals($file, $filename);
@@ -272,9 +256,9 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
* Test that data that is read by the crypto stream wrapper
*/
function testGetFileSize() {
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1);
+ self::loginHelper(self::TEST_ENCRYPTION_UTIL_USER1);
- $filename = 'tmp-' . uniqid();
+ $filename = 'tmp-' . $this->getUniqueID();
$externalFilename = '/' . $this->userId . '/files/' . $filename;
// Test for 0 byte files
@@ -298,7 +282,7 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
function testEncryptAll() {
- $filename = "/encryptAll" . uniqid() . ".txt";
+ $filename = "/encryptAll" . $this->getUniqueID() . ".txt";
$util = new Encryption\Util($this->view, $this->userId);
// disable encryption to upload a unencrypted file
@@ -329,7 +313,7 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
function testDecryptAll() {
- $filename = "/decryptAll" . uniqid() . ".txt";
+ $filename = "/decryptAll" . $this->getUniqueID() . ".txt";
$datadir = \OC_Config::getValue('datadirectory', \OC::$SERVERROOT . '/data/');
$userdir = $datadir . '/' . $this->userId . '/files/';
@@ -389,16 +373,18 @@ class Test_Encryption_Util extends \PHPUnit_Framework_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');
}
@@ -411,45 +397,35 @@ class Test_Encryption_Util extends \PHPUnit_Framework_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');
}
function testDescryptAllWithBrokenFiles() {
- $file1 = "/decryptAll1" . uniqid() . ".txt";
- $file2 = "/decryptAll2" . uniqid() . ".txt";
+ $file1 = "/decryptAll1" . $this->getUniqueID() . ".txt";
+ $file2 = "/decryptAll2" . $this->getUniqueID() . ".txt";
$util = new Encryption\Util($this->view, $this->userId);
@@ -466,8 +442,8 @@ class Test_Encryption_Util extends \PHPUnit_Framework_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();
@@ -485,12 +461,13 @@ class Test_Encryption_Util extends \PHPUnit_Framework_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();
@@ -508,17 +485,32 @@ class Test_Encryption_Util extends \PHPUnit_Framework_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;
+ }
+
/**
* @dataProvider dataProviderFortestIsMountPointApplicableToUser
*/
@@ -543,6 +535,43 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
}
/**
+ * Tests that filterShareReadyUsers() returns the correct list of
+ * users that are ready or not ready for encryption
+ */
+ public function testFilterShareReadyUsers() {
+ $appConfig = \OC::$server->getAppConfig();
+
+ $publicShareKeyId = $appConfig->getValue('files_encryption', 'publicShareKeyId');
+ $recoveryKeyId = $appConfig->getValue('files_encryption', 'recoveryKeyId');
+
+ $usersToTest = array(
+ 'readyUser',
+ 'notReadyUser',
+ 'nonExistingUser',
+ $publicShareKeyId,
+ $recoveryKeyId,
+ );
+ \Test_Encryption_Util::loginHelper('readyUser', true);
+ \Test_Encryption_Util::loginHelper('notReadyUser', true);
+ // delete encryption dir to make it not ready
+ $this->view->unlink('notReadyUser/files_encryption/');
+
+ // login as user1
+ \Test_Encryption_Util::loginHelper(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1);
+
+ $result = $this->util->filterShareReadyUsers($usersToTest);
+ $this->assertEquals(
+ array('readyUser', $publicShareKeyId, $recoveryKeyId),
+ $result['ready']
+ );
+ $this->assertEquals(
+ array('notReadyUser', 'nonExistingUser'),
+ $result['unready']
+ );
+ \OC_User::deleteUser('readyUser');
+ }
+
+ /**
* @param string $user
* @param bool $create
* @param bool $password
diff --git a/apps/files_encryption/tests/webdav.php b/apps/files_encryption/tests/webdav.php
index c838ddd29d1..a04a7621291 100755
--- a/apps/files_encryption/tests/webdav.php
+++ b/apps/files_encryption/tests/webdav.php
@@ -20,8 +20,6 @@
*
*/
-require_once __DIR__ . '/util.php';
-
use OCA\Encryption;
/**
@@ -29,7 +27,7 @@ use OCA\Encryption;
*
* this class provide basic webdav tests for PUT,GET and DELETE
*/
-class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase {
+class Test_Encryption_Webdav extends \OCA\Files_Encryption\Tests\TestCase {
const TEST_ENCRYPTION_WEBDAV_USER1 = "test-webdav-user1";
@@ -45,26 +43,16 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase {
private $storage;
public static function 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());
+ parent::setUpBeforeClass();
// create test user
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Webdav::TEST_ENCRYPTION_WEBDAV_USER1, true);
+ self::loginHelper(\Test_Encryption_Webdav::TEST_ENCRYPTION_WEBDAV_USER1, true);
}
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
// reset backend
\OC_User::useBackend('database');
@@ -86,29 +74,25 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase {
\OC_App::disable('files_trashbin');
// create test user
- \Test_Encryption_Util::loginHelper(\Test_Encryption_Webdav::TEST_ENCRYPTION_WEBDAV_USER1);
+ self::loginHelper(\Test_Encryption_Webdav::TEST_ENCRYPTION_WEBDAV_USER1);
}
- function tearDown() {
+ protected function tearDown() {
// reset app files_trashbin
if ($this->stateFilesTrashbin) {
OC_App::enable('files_trashbin');
} else {
OC_App::disable('files_trashbin');
}
+
+ parent::tearDown();
}
public static function tearDownAfterClass() {
// 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();
}
/**
@@ -117,7 +101,7 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase {
function testWebdavPUT() {
// generate filename
- $filename = '/tmp-' . uniqid() . '.txt';
+ $filename = '/tmp-' . $this->getUniqueID() . '.txt';
// set server vars
$_SERVER['REQUEST_METHOD'] = 'OPTIONS';
@@ -137,11 +121,11 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_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;
@@ -211,11 +195,11 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_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/3rdparty/google-api-php-client/NOTICE b/apps/files_external/3rdparty/google-api-php-client/NOTICE
deleted file mode 100644
index 22d7cb59867..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/NOTICE
+++ /dev/null
@@ -1,4 +0,0 @@
-This product contains the following libraries:
-
-XRDS-Simple library from http://code.google.com/p/diso/
-Apache License 2.0
diff --git a/apps/files_external/3rdparty/google-api-php-client/README b/apps/files_external/3rdparty/google-api-php-client/README
deleted file mode 100644
index 42c42c0d5c7..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/README
+++ /dev/null
@@ -1,40 +0,0 @@
-Google APIs Client Library for PHP
-=====================================
-
-== Description
-The Google API Client Library enables you to work with Google APIs such as Google+, Drive, Tasks, or Latitude on your server.
-
-Requirements:
- PHP 5.2.x or higher [http://www.php.net/]
- PHP Curl extension [http://www.php.net/manual/en/intro.curl.php]
- PHP JSON extension [http://php.net/manual/en/book.json.php]
-
-Project page:
- http://code.google.com/p/google-api-php-client
-
-OAuth 2 instructions:
- http://code.google.com/p/google-api-php-client/wiki/OAuth2
-
-Report a defect or feature request here:
- http://code.google.com/p/google-api-php-client/issues/entry
-
-Subscribe to project updates in your feed reader:
- http://code.google.com/feeds/p/google-api-php-client/updates/basic
-
-Supported sample applications:
- http://code.google.com/p/google-api-php-client/wiki/Samples
-
-== Basic Example
- <?php
- require_once 'path/to/src/Google_Client.php';
- require_once 'path/to/src/contrib/apiBooksService.php';
-
- $client = new Google_Client();
- $service = new Google_BooksService($client);
-
- $optParams = array('filter' => 'free-ebooks');
- $results = $service->volumes->listVolumes('Henry David Thoreau', $optParams);
-
- foreach ($results['items'] as $item) {
- print($item['volumeInfo']['title'] . '<br>');
- }
diff --git a/apps/files_external/3rdparty/google-api-php-client/README.md b/apps/files_external/3rdparty/google-api-php-client/README.md
new file mode 100644
index 00000000000..e799f6725da
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/README.md
@@ -0,0 +1,77 @@
+[![Build Status](https://travis-ci.org/google/google-api-php-client.svg)](https://travis-ci.org/google/google-api-php-client)
+
+# Google APIs Client Library for PHP #
+
+## Description ##
+The Google API Client Library enables you to work with Google APIs such as Google+, Drive, or YouTube on your server.
+
+## Beta ##
+This library is in Beta. We're comfortable enough with the stability and features of the library that we want you to build real production applications on it. We will make an effort to support the public and protected surface of the library and maintain backwards compatibility in the future. While we are still in Beta, we reserve the right to make incompatible changes. If we do remove some functionality (typically because better functionality exists or if the feature proved infeasible), our intention is to deprecate and provide ample time for developers to update their code.
+
+## Requirements ##
+* [PHP 5.2.1 or higher](http://www.php.net/)
+* [PHP JSON extension](http://php.net/manual/en/book.json.php)
+
+*Note*: some features (service accounts and id token verification) require PHP 5.3.0 and above due to cryptographic algorithm requirements.
+
+## Developer Documentation ##
+http://developers.google.com/api-client-library/php
+
+## Installation ##
+
+For the latest installation and setup instructions, see [the documentation](https://developers.google.com/api-client-library/php/start/installation).
+
+## Basic Example ##
+See the examples/ directory for examples of the key client features.
+```PHP
+<?php
+ require_once 'google-api-php-client/autoload.php'; // or wherever autoload.php is located
+ $client = new Google_Client();
+ $client->setApplicationName("Client_Library_Examples");
+ $client->setDeveloperKey("YOUR_APP_KEY");
+ $service = new Google_Service_Books($client);
+ $optParams = array('filter' => 'free-ebooks');
+ $results = $service->volumes->listVolumes('Henry David Thoreau', $optParams);
+
+ foreach ($results as $item) {
+ echo $item['volumeInfo']['title'], "<br /> \n";
+ }
+```
+
+## Frequently Asked Questions ##
+
+### What do I do if something isn't working? ###
+
+For support with the library the best place to ask is via the google-api-php-client tag on StackOverflow: http://stackoverflow.com/questions/tagged/google-api-php-client
+
+If there is a specific bug with the library, please file a issue in the Github issues tracker, including a (minimal) example of the failing code and any specific errors retrieved. Feature requests can also be filed, as long as they are core library requests, and not-API specific: for those, refer to the documentation for the individual APIs for the best place to file requests. Please try to provide a clear statement of the problem that the feature would address.
+
+### How do I contribute? ###
+
+We accept contributions via Github Pull Requests, but all contributors need to be covered by the standard Google Contributor License Agreement. You can find links, and more instructions, in the documentation: https://developers.google.com/api-client-library/php/contribute
+
+### Why do you still support 5.2? ###
+
+When we started working on the 1.0.0 branch we knew there were several fundamental issues to fix with the 0.6 releases of the library. At that time we looked at the usage of the library, and other related projects, and determined that there was still a large and active base of PHP 5.2 installs. You can see this in statistics such as the PHP versions chart in the WordPress stats: http://wordpress.org/about/stats/. We will keep looking at the types of usage we see, and try to take advantage of newer PHP features where possible.
+
+### Why does Google_..._Service have weird names? ###
+
+The _Service classes are generally automatically generated from the API discovery documents: https://developers.google.com/discovery/. Sometimes new features are added to APIs with unusual names, which can cause some unexpected or non-standard style naming in the PHP classes.
+
+### How do I deal with non-JSON response types? ###
+
+Some services return XML or similar by default, rather than JSON, which is what the library supports. You can request a JSON response by adding an 'alt' argument to optional params that is normally the last argument to a method call:
+
+```
+$opt_params = array(
+ 'alt' => "json"
+);
+```
+
+## Code Quality ##
+
+Copy the ruleset.xml in style/ into a new directory named GAPI/ in your
+/usr/share/php/PHP/CodeSniffer/Standards (or appropriate equivalent directory),
+and run code sniffs with:
+
+ phpcs --standard=GAPI src/
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Auth.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/Abstract.php
index 010782d4a60..0832df3a408 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Auth.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/Abstract.php
@@ -14,23 +14,22 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-require_once "Google_AuthNone.php";
-require_once "Google_OAuth2.php";
+require_once "Google/Http/Request.php";
/**
* Abstract class for the Authentication in the API client
* @author Chris Chabot <chabotc@google.com>
*
*/
-abstract class Google_Auth {
- abstract public function authenticate($service);
- abstract public function sign(Google_HttpRequest $request);
- abstract public function createAuthUrl($scope);
-
- abstract public function getAccessToken();
- abstract public function setAccessToken($accessToken);
- abstract public function setDeveloperKey($developerKey);
- abstract public function refreshToken($refreshToken);
- abstract public function revokeToken();
+abstract class Google_Auth_Abstract
+{
+ /**
+ * An utility function that first calls $this->auth->sign($request) and then
+ * executes makeRequest() on that signed request. Used for when a request
+ * should be authenticated
+ * @param Google_Http_Request $request
+ * @return Google_Http_Request $request
+ */
+ abstract public function authenticatedRequest(Google_Http_Request $request);
+ abstract public function sign(Google_Http_Request $request);
}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_AssertionCredentials.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/AssertionCredentials.php
index d9b4394ba38..3db0a779df3 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_AssertionCredentials.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/AssertionCredentials.php
@@ -15,12 +15,17 @@
* limitations under the License.
*/
+require_once "Google/Auth/OAuth2.php";
+require_once "Google/Signer/P12.php";
+require_once "Google/Utils.php";
+
/**
* Credentials object used for OAuth 2.0 Signed JWT assertion grants.
*
* @author Chirag Shah <chirags@google.com>
*/
-class Google_AssertionCredentials {
+class Google_Auth_AssertionCredentials
+{
const MAX_TOKEN_LIFETIME_SECS = 3600;
public $serviceAccountName;
@@ -34,6 +39,7 @@ class Google_AssertionCredentials {
* @link http://tools.ietf.org/html/draft-ietf-oauth-json-web-token-06
*/
public $prn;
+ private $useCache;
/**
* @param $serviceAccountName
@@ -42,8 +48,9 @@ class Google_AssertionCredentials {
* @param string $privateKeyPassword
* @param string $assertionType
* @param bool|string $sub The email address of the user for which the
- * application is requesting delegated access.
- *
+ * application is requesting delegated access.
+ * @param bool useCache Whether to generate a cache key and allow
+ * automatic caching of the generated token.
*/
public function __construct(
$serviceAccountName,
@@ -51,7 +58,9 @@ class Google_AssertionCredentials {
$privateKey,
$privateKeyPassword = 'notasecret',
$assertionType = 'http://oauth.net/grant_type/jwt/1.0/bearer',
- $sub = false) {
+ $sub = false,
+ $useCache = true
+ ) {
$this->serviceAccountName = $serviceAccountName;
$this->scopes = is_string($scopes) ? $scopes : implode(' ', $scopes);
$this->privateKey = $privateKey;
@@ -59,13 +68,32 @@ class Google_AssertionCredentials {
$this->assertionType = $assertionType;
$this->sub = $sub;
$this->prn = $sub;
+ $this->useCache = $useCache;
+ }
+
+ /**
+ * Generate a unique key to represent this credential.
+ * @return string
+ */
+ public function getCacheKey()
+ {
+ if (!$this->useCache) {
+ return false;
+ }
+ $h = $this->sub;
+ $h .= $this->assertionType;
+ $h .= $this->privateKey;
+ $h .= $this->scopes;
+ $h .= $this->serviceAccountName;
+ return md5($h);
}
- public function generateAssertion() {
+ public function generateAssertion()
+ {
$now = time();
$jwtParams = array(
- 'aud' => Google_OAuth2::OAUTH2_TOKEN_URI,
+ 'aud' => Google_Auth_OAuth2::OAUTH2_TOKEN_URI,
'scope' => $this->scopes,
'iat' => $now,
'exp' => $now + self::MAX_TOKEN_LIFETIME_SECS,
@@ -86,16 +114,22 @@ class Google_AssertionCredentials {
* @param array $payload
* @return string The signed JWT.
*/
- private function makeSignedJwt($payload) {
+ private function makeSignedJwt($payload)
+ {
$header = array('typ' => 'JWT', 'alg' => 'RS256');
+ $payload = json_encode($payload);
+ // Handle some overzealous escaping in PHP json that seemed to cause some errors
+ // with claimsets.
+ $payload = str_replace('\/', '/', $payload);
+
$segments = array(
Google_Utils::urlSafeB64Encode(json_encode($header)),
- Google_Utils::urlSafeB64Encode(json_encode($payload))
+ Google_Utils::urlSafeB64Encode($payload)
);
$signingInput = implode('.', $segments);
- $signer = new Google_P12Signer($this->privateKey, $this->privateKeyPassword);
+ $signer = new Google_Signer_P12($this->privateKey, $this->privateKeyPassword);
$signature = $signer->sign($signingInput);
$segments[] = Google_Utils::urlSafeB64Encode($signature);
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/Exception.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/Exception.php
new file mode 100644
index 00000000000..65067ee4436
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/Exception.php
@@ -0,0 +1,22 @@
+<?php
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once "Google/Exception.php";
+
+class Google_Auth_Exception extends Google_Exception
+{
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_LoginTicket.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/LoginTicket.php
index c0ce614232b..bcf798ae5ff 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_LoginTicket.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/LoginTicket.php
@@ -15,13 +15,16 @@
* limitations under the License.
*/
+require_once "Google/Auth/Exception.php";
+
/**
* Class to hold information about an authenticated login.
*
* @author Brian Eaton <beaton@google.com>
*/
-class Google_LoginTicket {
- const USER_ATTR = "id";
+class Google_Auth_LoginTicket
+{
+ const USER_ATTR = "sub";
// Information from id token envelope.
private $envelope;
@@ -35,21 +38,23 @@ class Google_LoginTicket {
* @param string $envelope Header from a verified authentication token.
* @param string $payload Information from a verified authentication token.
*/
- public function __construct($envelope, $payload) {
+ public function __construct($envelope, $payload)
+ {
$this->envelope = $envelope;
$this->payload = $payload;
}
/**
* Returns the numeric identifier for the user.
- * @throws Google_AuthException
+ * @throws Google_Auth_Exception
* @return
*/
- public function getUserId() {
+ public function getUserId()
+ {
if (array_key_exists(self::USER_ATTR, $this->payload)) {
return $this->payload[self::USER_ATTR];
}
- throw new Google_AuthException("No user_id in token");
+ throw new Google_Auth_Exception("No user_id in token");
}
/**
@@ -57,7 +62,8 @@ class Google_LoginTicket {
* various information about the user session.
* @return array
*/
- public function getAttributes() {
+ public function getAttributes()
+ {
return array("envelope" => $this->envelope, "payload" => $this->payload);
}
}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/OAuth2.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/OAuth2.php
new file mode 100644
index 00000000000..5630d755e04
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/OAuth2.php
@@ -0,0 +1,620 @@
+<?php
+/*
+ * Copyright 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once "Google/Auth/Abstract.php";
+require_once "Google/Auth/AssertionCredentials.php";
+require_once "Google/Auth/Exception.php";
+require_once "Google/Auth/LoginTicket.php";
+require_once "Google/Client.php";
+require_once "Google/Http/Request.php";
+require_once "Google/Utils.php";
+require_once "Google/Verifier/Pem.php";
+
+/**
+ * Authentication class that deals with the OAuth 2 web-server authentication flow
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ * @author Chirag Shah <chirags@google.com>
+ *
+ */
+class Google_Auth_OAuth2 extends Google_Auth_Abstract
+{
+ const OAUTH2_REVOKE_URI = 'https://accounts.google.com/o/oauth2/revoke';
+ const OAUTH2_TOKEN_URI = 'https://accounts.google.com/o/oauth2/token';
+ const OAUTH2_AUTH_URL = 'https://accounts.google.com/o/oauth2/auth';
+ const CLOCK_SKEW_SECS = 300; // five minutes in seconds
+ const AUTH_TOKEN_LIFETIME_SECS = 300; // five minutes in seconds
+ const MAX_TOKEN_LIFETIME_SECS = 86400; // one day in seconds
+ const OAUTH2_ISSUER = 'accounts.google.com';
+
+ /** @var Google_Auth_AssertionCredentials $assertionCredentials */
+ private $assertionCredentials;
+
+ /**
+ * @var string The state parameters for CSRF and other forgery protection.
+ */
+ private $state;
+
+ /**
+ * @var array The token bundle.
+ */
+ private $token = array();
+
+ /**
+ * @var Google_Client the base client
+ */
+ private $client;
+
+ /**
+ * Instantiates the class, but does not initiate the login flow, leaving it
+ * to the discretion of the caller.
+ */
+ public function __construct(Google_Client $client)
+ {
+ $this->client = $client;
+ }
+
+ /**
+ * Perform an authenticated / signed apiHttpRequest.
+ * This function takes the apiHttpRequest, calls apiAuth->sign on it
+ * (which can modify the request in what ever way fits the auth mechanism)
+ * and then calls apiCurlIO::makeRequest on the signed request
+ *
+ * @param Google_Http_Request $request
+ * @return Google_Http_Request The resulting HTTP response including the
+ * responseHttpCode, responseHeaders and responseBody.
+ */
+ public function authenticatedRequest(Google_Http_Request $request)
+ {
+ $request = $this->sign($request);
+ return $this->client->getIo()->makeRequest($request);
+ }
+
+ /**
+ * @param string $code
+ * @throws Google_Auth_Exception
+ * @return string
+ */
+ public function authenticate($code)
+ {
+ if (strlen($code) == 0) {
+ throw new Google_Auth_Exception("Invalid code");
+ }
+
+ // We got here from the redirect from a successful authorization grant,
+ // fetch the access token
+ $request = new Google_Http_Request(
+ self::OAUTH2_TOKEN_URI,
+ 'POST',
+ array(),
+ array(
+ 'code' => $code,
+ 'grant_type' => 'authorization_code',
+ 'redirect_uri' => $this->client->getClassConfig($this, 'redirect_uri'),
+ 'client_id' => $this->client->getClassConfig($this, 'client_id'),
+ 'client_secret' => $this->client->getClassConfig($this, 'client_secret')
+ )
+ );
+ $request->disableGzip();
+ $response = $this->client->getIo()->makeRequest($request);
+
+ if ($response->getResponseHttpCode() == 200) {
+ $this->setAccessToken($response->getResponseBody());
+ $this->token['created'] = time();
+ return $this->getAccessToken();
+ } else {
+ $decodedResponse = json_decode($response->getResponseBody(), true);
+ if ($decodedResponse != null && $decodedResponse['error']) {
+ $decodedResponse = $decodedResponse['error'];
+ if (isset($decodedResponse['error_description'])) {
+ $decodedResponse .= ": " . $decodedResponse['error_description'];
+ }
+ }
+ throw new Google_Auth_Exception(
+ sprintf(
+ "Error fetching OAuth2 access token, message: '%s'",
+ $decodedResponse
+ ),
+ $response->getResponseHttpCode()
+ );
+ }
+ }
+
+ /**
+ * Create a URL to obtain user authorization.
+ * The authorization endpoint allows the user to first
+ * authenticate, and then grant/deny the access request.
+ * @param string $scope The scope is expressed as a list of space-delimited strings.
+ * @return string
+ */
+ public function createAuthUrl($scope)
+ {
+ $params = array(
+ 'response_type' => 'code',
+ 'redirect_uri' => $this->client->getClassConfig($this, 'redirect_uri'),
+ 'client_id' => $this->client->getClassConfig($this, 'client_id'),
+ 'scope' => $scope,
+ 'access_type' => $this->client->getClassConfig($this, 'access_type'),
+ );
+
+ $params = $this->maybeAddParam($params, 'approval_prompt');
+ $params = $this->maybeAddParam($params, 'login_hint');
+ $params = $this->maybeAddParam($params, 'hd');
+ $params = $this->maybeAddParam($params, 'openid.realm');
+ $params = $this->maybeAddParam($params, 'prompt');
+ $params = $this->maybeAddParam($params, 'include_granted_scopes');
+
+ // If the list of scopes contains plus.login, add request_visible_actions
+ // to auth URL.
+ $rva = $this->client->getClassConfig($this, 'request_visible_actions');
+ if (strpos($scope, 'plus.login') && strlen($rva) > 0) {
+ $params['request_visible_actions'] = $rva;
+ }
+
+ if (isset($this->state)) {
+ $params['state'] = $this->state;
+ }
+
+ return self::OAUTH2_AUTH_URL . "?" . http_build_query($params, '', '&');
+ }
+
+ /**
+ * @param string $token
+ * @throws Google_Auth_Exception
+ */
+ public function setAccessToken($token)
+ {
+ $token = json_decode($token, true);
+ if ($token == null) {
+ throw new Google_Auth_Exception('Could not json decode the token');
+ }
+ if (! isset($token['access_token'])) {
+ throw new Google_Auth_Exception("Invalid token format");
+ }
+ $this->token = $token;
+ }
+
+ public function getAccessToken()
+ {
+ return json_encode($this->token);
+ }
+
+ public function getRefreshToken()
+ {
+ if (array_key_exists('refresh_token', $this->token)) {
+ return $this->token['refresh_token'];
+ } else {
+ return null;
+ }
+ }
+
+ public function setState($state)
+ {
+ $this->state = $state;
+ }
+
+ public function setAssertionCredentials(Google_Auth_AssertionCredentials $creds)
+ {
+ $this->assertionCredentials = $creds;
+ }
+
+ /**
+ * Include an accessToken in a given apiHttpRequest.
+ * @param Google_Http_Request $request
+ * @return Google_Http_Request
+ * @throws Google_Auth_Exception
+ */
+ public function sign(Google_Http_Request $request)
+ {
+ // add the developer key to the request before signing it
+ if ($this->client->getClassConfig($this, 'developer_key')) {
+ $request->setQueryParam('key', $this->client->getClassConfig($this, 'developer_key'));
+ }
+
+ // Cannot sign the request without an OAuth access token.
+ if (null == $this->token && null == $this->assertionCredentials) {
+ return $request;
+ }
+
+ // Check if the token is set to expire in the next 30 seconds
+ // (or has already expired).
+ if ($this->isAccessTokenExpired()) {
+ if ($this->assertionCredentials) {
+ $this->refreshTokenWithAssertion();
+ } else {
+ if (! array_key_exists('refresh_token', $this->token)) {
+ throw new Google_Auth_Exception(
+ "The OAuth 2.0 access token has expired,"
+ ." and a refresh token is not available. Refresh tokens"
+ ." are not returned for responses that were auto-approved."
+ );
+ }
+ $this->refreshToken($this->token['refresh_token']);
+ }
+ }
+
+ // Add the OAuth2 header to the request
+ $request->setRequestHeaders(
+ array('Authorization' => 'Bearer ' . $this->token['access_token'])
+ );
+
+ return $request;
+ }
+
+ /**
+ * Fetches a fresh access token with the given refresh token.
+ * @param string $refreshToken
+ * @return void
+ */
+ public function refreshToken($refreshToken)
+ {
+ $this->refreshTokenRequest(
+ array(
+ 'client_id' => $this->client->getClassConfig($this, 'client_id'),
+ 'client_secret' => $this->client->getClassConfig($this, 'client_secret'),
+ 'refresh_token' => $refreshToken,
+ 'grant_type' => 'refresh_token'
+ )
+ );
+ }
+
+ /**
+ * Fetches a fresh access token with a given assertion token.
+ * @param Google_Auth_AssertionCredentials $assertionCredentials optional.
+ * @return void
+ */
+ public function refreshTokenWithAssertion($assertionCredentials = null)
+ {
+ if (!$assertionCredentials) {
+ $assertionCredentials = $this->assertionCredentials;
+ }
+
+ $cacheKey = $assertionCredentials->getCacheKey();
+
+ if ($cacheKey) {
+ // We can check whether we have a token available in the
+ // cache. If it is expired, we can retrieve a new one from
+ // the assertion.
+ $token = $this->client->getCache()->get($cacheKey);
+ if ($token) {
+ $this->setAccessToken($token);
+ }
+ if (!$this->isAccessTokenExpired()) {
+ return;
+ }
+ }
+
+ $this->refreshTokenRequest(
+ array(
+ 'grant_type' => 'assertion',
+ 'assertion_type' => $assertionCredentials->assertionType,
+ 'assertion' => $assertionCredentials->generateAssertion(),
+ )
+ );
+
+ if ($cacheKey) {
+ // Attempt to cache the token.
+ $this->client->getCache()->set(
+ $cacheKey,
+ $this->getAccessToken()
+ );
+ }
+ }
+
+ private function refreshTokenRequest($params)
+ {
+ $http = new Google_Http_Request(
+ self::OAUTH2_TOKEN_URI,
+ 'POST',
+ array(),
+ $params
+ );
+ $http->disableGzip();
+ $request = $this->client->getIo()->makeRequest($http);
+
+ $code = $request->getResponseHttpCode();
+ $body = $request->getResponseBody();
+ if (200 == $code) {
+ $token = json_decode($body, true);
+ if ($token == null) {
+ throw new Google_Auth_Exception("Could not json decode the access token");
+ }
+
+ if (! isset($token['access_token']) || ! isset($token['expires_in'])) {
+ throw new Google_Auth_Exception("Invalid token format");
+ }
+
+ if (isset($token['id_token'])) {
+ $this->token['id_token'] = $token['id_token'];
+ }
+ $this->token['access_token'] = $token['access_token'];
+ $this->token['expires_in'] = $token['expires_in'];
+ $this->token['created'] = time();
+ } else {
+ throw new Google_Auth_Exception("Error refreshing the OAuth2 token, message: '$body'", $code);
+ }
+ }
+
+ /**
+ * Revoke an OAuth2 access token or refresh token. This method will revoke the current access
+ * token, if a token isn't provided.
+ * @throws Google_Auth_Exception
+ * @param string|null $token The token (access token or a refresh token) that should be revoked.
+ * @return boolean Returns True if the revocation was successful, otherwise False.
+ */
+ public function revokeToken($token = null)
+ {
+ if (!$token) {
+ if (!$this->token) {
+ // Not initialized, no token to actually revoke
+ return false;
+ } elseif (array_key_exists('refresh_token', $this->token)) {
+ $token = $this->token['refresh_token'];
+ } else {
+ $token = $this->token['access_token'];
+ }
+ }
+ $request = new Google_Http_Request(
+ self::OAUTH2_REVOKE_URI,
+ 'POST',
+ array(),
+ "token=$token"
+ );
+ $request->disableGzip();
+ $response = $this->client->getIo()->makeRequest($request);
+ $code = $response->getResponseHttpCode();
+ if ($code == 200) {
+ $this->token = null;
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns if the access_token is expired.
+ * @return bool Returns True if the access_token is expired.
+ */
+ public function isAccessTokenExpired()
+ {
+ if (!$this->token || !isset($this->token['created'])) {
+ return true;
+ }
+
+ // If the token is set to expire in the next 30 seconds.
+ $expired = ($this->token['created']
+ + ($this->token['expires_in'] - 30)) < time();
+
+ return $expired;
+ }
+
+ // Gets federated sign-on certificates to use for verifying identity tokens.
+ // Returns certs as array structure, where keys are key ids, and values
+ // are PEM encoded certificates.
+ private function getFederatedSignOnCerts()
+ {
+ return $this->retrieveCertsFromLocation(
+ $this->client->getClassConfig($this, 'federated_signon_certs_url')
+ );
+ }
+
+ /**
+ * Retrieve and cache a certificates file.
+ * @param $url location
+ * @return array certificates
+ */
+ public function retrieveCertsFromLocation($url)
+ {
+ // If we're retrieving a local file, just grab it.
+ if ("http" != substr($url, 0, 4)) {
+ $file = file_get_contents($url);
+ if ($file) {
+ return json_decode($file, true);
+ } else {
+ throw new Google_Auth_Exception(
+ "Failed to retrieve verification certificates: '" .
+ $url . "'."
+ );
+ }
+ }
+
+ // This relies on makeRequest caching certificate responses.
+ $request = $this->client->getIo()->makeRequest(
+ new Google_Http_Request(
+ $url
+ )
+ );
+ if ($request->getResponseHttpCode() == 200) {
+ $certs = json_decode($request->getResponseBody(), true);
+ if ($certs) {
+ return $certs;
+ }
+ }
+ throw new Google_Auth_Exception(
+ "Failed to retrieve verification certificates: '" .
+ $request->getResponseBody() . "'.",
+ $request->getResponseHttpCode()
+ );
+ }
+
+ /**
+ * Verifies an id token and returns the authenticated apiLoginTicket.
+ * Throws an exception if the id token is not valid.
+ * The audience parameter can be used to control which id tokens are
+ * accepted. By default, the id token must have been issued to this OAuth2 client.
+ *
+ * @param $id_token
+ * @param $audience
+ * @return Google_Auth_LoginTicket
+ */
+ public function verifyIdToken($id_token = null, $audience = null)
+ {
+ if (!$id_token) {
+ $id_token = $this->token['id_token'];
+ }
+ $certs = $this->getFederatedSignonCerts();
+ if (!$audience) {
+ $audience = $this->client->getClassConfig($this, 'client_id');
+ }
+
+ return $this->verifySignedJwtWithCerts($id_token, $certs, $audience, self::OAUTH2_ISSUER);
+ }
+
+ /**
+ * Verifies the id token, returns the verified token contents.
+ *
+ * @param $jwt the token
+ * @param $certs array of certificates
+ * @param $required_audience the expected consumer of the token
+ * @param [$issuer] the expected issues, defaults to Google
+ * @param [$max_expiry] the max lifetime of a token, defaults to MAX_TOKEN_LIFETIME_SECS
+ * @return token information if valid, false if not
+ */
+ public function verifySignedJwtWithCerts(
+ $jwt,
+ $certs,
+ $required_audience,
+ $issuer = null,
+ $max_expiry = null
+ ) {
+ if (!$max_expiry) {
+ // Set the maximum time we will accept a token for.
+ $max_expiry = self::MAX_TOKEN_LIFETIME_SECS;
+ }
+
+ $segments = explode(".", $jwt);
+ if (count($segments) != 3) {
+ throw new Google_Auth_Exception("Wrong number of segments in token: $jwt");
+ }
+ $signed = $segments[0] . "." . $segments[1];
+ $signature = Google_Utils::urlSafeB64Decode($segments[2]);
+
+ // Parse envelope.
+ $envelope = json_decode(Google_Utils::urlSafeB64Decode($segments[0]), true);
+ if (!$envelope) {
+ throw new Google_Auth_Exception("Can't parse token envelope: " . $segments[0]);
+ }
+
+ // Parse token
+ $json_body = Google_Utils::urlSafeB64Decode($segments[1]);
+ $payload = json_decode($json_body, true);
+ if (!$payload) {
+ throw new Google_Auth_Exception("Can't parse token payload: " . $segments[1]);
+ }
+
+ // Check signature
+ $verified = false;
+ foreach ($certs as $keyName => $pem) {
+ $public_key = new Google_Verifier_Pem($pem);
+ if ($public_key->verify($signed, $signature)) {
+ $verified = true;
+ break;
+ }
+ }
+
+ if (!$verified) {
+ throw new Google_Auth_Exception("Invalid token signature: $jwt");
+ }
+
+ // Check issued-at timestamp
+ $iat = 0;
+ if (array_key_exists("iat", $payload)) {
+ $iat = $payload["iat"];
+ }
+ if (!$iat) {
+ throw new Google_Auth_Exception("No issue time in token: $json_body");
+ }
+ $earliest = $iat - self::CLOCK_SKEW_SECS;
+
+ // Check expiration timestamp
+ $now = time();
+ $exp = 0;
+ if (array_key_exists("exp", $payload)) {
+ $exp = $payload["exp"];
+ }
+ if (!$exp) {
+ throw new Google_Auth_Exception("No expiration time in token: $json_body");
+ }
+ if ($exp >= $now + $max_expiry) {
+ throw new Google_Auth_Exception(
+ sprintf("Expiration time too far in future: %s", $json_body)
+ );
+ }
+
+ $latest = $exp + self::CLOCK_SKEW_SECS;
+ if ($now < $earliest) {
+ throw new Google_Auth_Exception(
+ sprintf(
+ "Token used too early, %s < %s: %s",
+ $now,
+ $earliest,
+ $json_body
+ )
+ );
+ }
+ if ($now > $latest) {
+ throw new Google_Auth_Exception(
+ sprintf(
+ "Token used too late, %s > %s: %s",
+ $now,
+ $latest,
+ $json_body
+ )
+ );
+ }
+
+ $iss = $payload['iss'];
+ if ($issuer && $iss != $issuer) {
+ throw new Google_Auth_Exception(
+ sprintf(
+ "Invalid issuer, %s != %s: %s",
+ $iss,
+ $issuer,
+ $json_body
+ )
+ );
+ }
+
+ // Check audience
+ $aud = $payload["aud"];
+ if ($aud != $required_audience) {
+ throw new Google_Auth_Exception(
+ sprintf(
+ "Wrong recipient, %s != %s:",
+ $aud,
+ $required_audience,
+ $json_body
+ )
+ );
+ }
+
+ // All good.
+ return new Google_Auth_LoginTicket($envelope, $payload);
+ }
+
+ /**
+ * Add a parameter to the auth params if not empty string.
+ */
+ private function maybeAddParam($params, $name)
+ {
+ $param = $this->client->getClassConfig($this, $name);
+ if ($param != '') {
+ $params[$name] = $param;
+ }
+ return $params;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/Simple.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/Simple.php
new file mode 100644
index 00000000000..e83900fc26f
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Auth/Simple.php
@@ -0,0 +1,62 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once "Google/Auth/Abstract.php";
+require_once "Google/Http/Request.php";
+
+/**
+ * Simple API access implementation. Can either be used to make requests
+ * completely unauthenticated, or by using a Simple API Access developer
+ * key.
+ * @author Chris Chabot <chabotc@google.com>
+ * @author Chirag Shah <chirags@google.com>
+ */
+class Google_Auth_Simple extends Google_Auth_Abstract
+{
+ private $key = null;
+ private $client;
+
+ public function __construct(Google_Client $client, $config = null)
+ {
+ $this->client = $client;
+ }
+
+ /**
+ * Perform an authenticated / signed apiHttpRequest.
+ * This function takes the apiHttpRequest, calls apiAuth->sign on it
+ * (which can modify the request in what ever way fits the auth mechanism)
+ * and then calls apiCurlIO::makeRequest on the signed request
+ *
+ * @param Google_Http_Request $request
+ * @return Google_Http_Request The resulting HTTP response including the
+ * responseHttpCode, responseHeaders and responseBody.
+ */
+ public function authenticatedRequest(Google_Http_Request $request)
+ {
+ $request = $this->sign($request);
+ return $this->io->makeRequest($request);
+ }
+
+ public function sign(Google_Http_Request $request)
+ {
+ $key = $this->client->getClassConfig($this, 'developer_key');
+ if ($key) {
+ $request->setQueryParam('key', $key);
+ }
+ return $request;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_Cache.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Abstract.php
index 809c55e2b15..ff19f36ac46 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_Cache.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Abstract.php
@@ -15,15 +15,15 @@
* limitations under the License.
*/
-require_once "Google_FileCache.php";
-require_once "Google_MemcacheCache.php";
-
/**
* Abstract storage class
*
* @author Chris Chabot <chabotc@google.com>
*/
-abstract class Google_Cache {
+abstract class Google_Cache_Abstract
+{
+
+ abstract public function __construct(Google_Client $client);
/**
* Retrieves the data for the given key, or false if they
@@ -33,7 +33,7 @@ abstract class Google_Cache {
* @param boolean|int $expiration Expiration time in seconds
*
*/
- abstract function get($key, $expiration = false);
+ abstract public function get($key, $expiration = false);
/**
* Store the key => $value set. The $value is serialized
@@ -42,14 +42,12 @@ abstract class Google_Cache {
* @param string $key Key of the data
* @param string $value data
*/
- abstract function set($key, $value);
+ abstract public function set($key, $value);
/**
* Removes the key/data pair for the given $key
*
* @param String $key
*/
- abstract function delete($key);
+ abstract public function delete($key);
}
-
-
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Apc.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Apc.php
new file mode 100644
index 00000000000..051b537a4e1
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Apc.php
@@ -0,0 +1,73 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once "Google/Cache/Abstract.php";
+require_once "Google/Cache/Exception.php";
+
+/**
+ * A persistent storage class based on the APC cache, which is not
+ * really very persistent, as soon as you restart your web server
+ * the storage will be wiped, however for debugging and/or speed
+ * it can be useful, and cache is a lot cheaper then storage.
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ */
+class Google_Cache_Apc extends Google_Cache_Abstract
+{
+ public function __construct(Google_Client $client)
+ {
+ if (! function_exists('apc_add') ) {
+ throw new Google_Cache_Exception("Apc functions not available");
+ }
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function get($key, $expiration = false)
+ {
+ $ret = apc_fetch($key);
+ if ($ret === false) {
+ return false;
+ }
+ if (is_numeric($expiration) && (time() - $ret['time'] > $expiration)) {
+ $this->delete($key);
+ return false;
+ }
+ return $ret['data'];
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function set($key, $value)
+ {
+ $rc = apc_store($key, array('time' => time(), 'data' => $value));
+ if ($rc == false) {
+ throw new Google_Cache_Exception("Couldn't store data");
+ }
+ }
+
+ /**
+ * @inheritDoc
+ * @param String $key
+ */
+ public function delete($key)
+ {
+ apc_delete($key);
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Exception.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Exception.php
new file mode 100644
index 00000000000..23b624608e8
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Exception.php
@@ -0,0 +1,21 @@
+<?php
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+require_once "Google/Exception.php";
+
+class Google_Cache_Exception extends Google_Exception
+{
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/File.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/File.php
new file mode 100644
index 00000000000..8d0d62fe88c
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/File.php
@@ -0,0 +1,145 @@
+<?php
+/*
+ * Copyright 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once "Google/Cache/Abstract.php";
+require_once "Google/Cache/Exception.php";
+
+/*
+ * This class implements a basic on disk storage. While that does
+ * work quite well it's not the most elegant and scalable solution.
+ * It will also get you into a heap of trouble when you try to run
+ * this in a clustered environment.
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ */
+class Google_Cache_File extends Google_Cache_Abstract
+{
+ const MAX_LOCK_RETRIES = 10;
+ private $path;
+ private $fh;
+
+ public function __construct(Google_Client $client)
+ {
+ $this->path = $client->getClassConfig($this, 'directory');
+ }
+
+ public function get($key, $expiration = false)
+ {
+ $storageFile = $this->getCacheFile($key);
+ $data = false;
+
+ if (!file_exists($storageFile)) {
+ return false;
+ }
+
+ if ($expiration) {
+ $mtime = filemtime($storageFile);
+ if ((time() - $mtime) >= $expiration) {
+ $this->delete($key);
+ return false;
+ }
+ }
+
+ if ($this->acquireReadLock($storageFile)) {
+ $data = fread($this->fh, filesize($storageFile));
+ $data = unserialize($data);
+ $this->unlock($storageFile);
+ }
+
+ return $data;
+ }
+
+ public function set($key, $value)
+ {
+ $storageFile = $this->getWriteableCacheFile($key);
+ if ($this->acquireWriteLock($storageFile)) {
+ // We serialize the whole request object, since we don't only want the
+ // responseContent but also the postBody used, headers, size, etc.
+ $data = serialize($value);
+ $result = fwrite($this->fh, $data);
+ $this->unlock($storageFile);
+ }
+ }
+
+ public function delete($key)
+ {
+ $file = $this->getCacheFile($key);
+ if (file_exists($file) && !unlink($file)) {
+ throw new Google_Cache_Exception("Cache file could not be deleted");
+ }
+ }
+
+ private function getWriteableCacheFile($file)
+ {
+ return $this->getCacheFile($file, true);
+ }
+
+ private function getCacheFile($file, $forWrite = false)
+ {
+ return $this->getCacheDir($file, $forWrite) . '/' . md5($file);
+ }
+
+ private function getCacheDir($file, $forWrite)
+ {
+ // use the first 2 characters of the hash as a directory prefix
+ // this should prevent slowdowns due to huge directory listings
+ // and thus give some basic amount of scalability
+ $storageDir = $this->path . '/' . substr(md5($file), 0, 2);
+ if ($forWrite && ! is_dir($storageDir)) {
+ if (! mkdir($storageDir, 0755, true)) {
+ throw new Google_Cache_Exception("Could not create storage directory: $storageDir");
+ }
+ }
+ return $storageDir;
+ }
+
+ private function acquireReadLock($storageFile)
+ {
+ return $this->acquireLock(LOCK_SH, $storageFile);
+ }
+
+ private function acquireWriteLock($storageFile)
+ {
+ $rc = $this->acquireLock(LOCK_EX, $storageFile);
+ if (!$rc) {
+ $this->delete($storageFile);
+ }
+ return $rc;
+ }
+
+ private function acquireLock($type, $storageFile)
+ {
+ $mode = $type == LOCK_EX ? "w" : "r";
+ $this->fh = fopen($storageFile, $mode);
+ $count = 0;
+ while (!flock($this->fh, $type | LOCK_NB)) {
+ // Sleep for 10ms.
+ usleep(10000);
+ if (++$count < self::MAX_LOCK_RETRIES) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public function unlock($storageFile)
+ {
+ if ($this->fh) {
+ flock($this->fh, LOCK_UN);
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Memcache.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Memcache.php
new file mode 100644
index 00000000000..1104afb8aeb
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Cache/Memcache.php
@@ -0,0 +1,137 @@
+<?php
+/*
+ * Copyright 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once "Google/Cache/Abstract.php";
+require_once "Google/Cache/Exception.php";
+
+/**
+ * A persistent storage class based on the memcache, which is not
+ * really very persistent, as soon as you restart your memcache daemon
+ * the storage will be wiped.
+ *
+ * Will use either the memcache or memcached extensions, preferring
+ * memcached.
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ */
+class Google_Cache_Memcache extends Google_Cache_Abstract
+{
+ private $connection = false;
+ private $mc = false;
+ private $host;
+ private $port;
+
+ public function __construct(Google_Client $client)
+ {
+ if (!function_exists('memcache_connect') && !class_exists("Memcached")) {
+ throw new Google_Cache_Exception("Memcache functions not available");
+ }
+ if ($client->isAppEngine()) {
+ // No credentials needed for GAE.
+ $this->mc = new Memcached();
+ $this->connection = true;
+ } else {
+ $this->host = $client->getClassConfig($this, 'host');
+ $this->port = $client->getClassConfig($this, 'port');
+ if (empty($this->host) || (empty($this->port) && (string) $this->port != "0")) {
+ throw new Google_Cache_Exception("You need to supply a valid memcache host and port");
+ }
+ }
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function get($key, $expiration = false)
+ {
+ $this->connect();
+ $ret = false;
+ if ($this->mc) {
+ $ret = $this->mc->get($key);
+ } else {
+ $ret = memcache_get($this->connection, $key);
+ }
+ if ($ret === false) {
+ return false;
+ }
+ if (is_numeric($expiration) && (time() - $ret['time'] > $expiration)) {
+ $this->delete($key);
+ return false;
+ }
+ return $ret['data'];
+ }
+
+ /**
+ * @inheritDoc
+ * @param string $key
+ * @param string $value
+ * @throws Google_Cache_Exception
+ */
+ public function set($key, $value)
+ {
+ $this->connect();
+ // we store it with the cache_time default expiration so objects will at
+ // least get cleaned eventually.
+ $data = array('time' => time(), 'data' => $value);
+ $rc = false;
+ if ($this->mc) {
+ $rc = $this->mc->set($key, $data);
+ } else {
+ $rc = memcache_set($this->connection, $key, $data, false);
+ }
+ if ($rc == false) {
+ throw new Google_Cache_Exception("Couldn't store data in cache");
+ }
+ }
+
+ /**
+ * @inheritDoc
+ * @param String $key
+ */
+ public function delete($key)
+ {
+ $this->connect();
+ if ($this->mc) {
+ $this->mc->delete($key, 0);
+ } else {
+ memcache_delete($this->connection, $key, 0);
+ }
+ }
+
+ /**
+ * Lazy initialiser for memcache connection. Uses pconnect for to take
+ * advantage of the persistence pool where possible.
+ */
+ private function connect()
+ {
+ if ($this->connection) {
+ return;
+ }
+
+ if (class_exists("Memcached")) {
+ $this->mc = new Memcached();
+ $this->mc->addServer($this->host, $this->port);
+ $this->connection = true;
+ } else {
+ $this->connection = memcache_pconnect($this->host, $this->port);
+ }
+
+ if (! $this->connection) {
+ throw new Google_Cache_Exception("Couldn't connect to memcache server");
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Client.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Client.php
new file mode 100644
index 00000000000..e15b4f4ea3c
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Client.php
@@ -0,0 +1,665 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once 'Google/Auth/AssertionCredentials.php';
+require_once 'Google/Cache/File.php';
+require_once 'Google/Cache/Memcache.php';
+require_once 'Google/Config.php';
+require_once 'Google/Collection.php';
+require_once 'Google/Exception.php';
+require_once 'Google/IO/Curl.php';
+require_once 'Google/IO/Stream.php';
+require_once 'Google/Model.php';
+require_once 'Google/Service.php';
+require_once 'Google/Service/Resource.php';
+
+/**
+ * The Google API Client
+ * http://code.google.com/p/google-api-php-client/
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ * @author Chirag Shah <chirags@google.com>
+ */
+class Google_Client
+{
+ const LIBVER = "1.0.6-beta";
+ const USER_AGENT_SUFFIX = "google-api-php-client/";
+ /**
+ * @var Google_Auth_Abstract $auth
+ */
+ private $auth;
+
+ /**
+ * @var Google_IO_Abstract $io
+ */
+ private $io;
+
+ /**
+ * @var Google_Cache_Abstract $cache
+ */
+ private $cache;
+
+ /**
+ * @var Google_Config $config
+ */
+ private $config;
+
+ /**
+ * @var boolean $deferExecution
+ */
+ private $deferExecution = false;
+
+ /** @var array $scopes */
+ // Scopes requested by the client
+ protected $requestedScopes = array();
+
+ // definitions of services that are discovered.
+ protected $services = array();
+
+ // Used to track authenticated state, can't discover services after doing authenticate()
+ private $authenticated = false;
+
+ /**
+ * Construct the Google Client.
+ *
+ * @param $config Google_Config or string for the ini file to load
+ */
+ public function __construct($config = null)
+ {
+ if (is_string($config) && strlen($config)) {
+ $config = new Google_Config($config);
+ } else if ( !($config instanceof Google_Config)) {
+ $config = new Google_Config();
+
+ if ($this->isAppEngine()) {
+ // Automatically use Memcache if we're in AppEngine.
+ $config->setCacheClass('Google_Cache_Memcache');
+ }
+
+ if (version_compare(phpversion(), "5.3.4", "<=") || $this->isAppEngine()) {
+ // Automatically disable compress.zlib, as currently unsupported.
+ $config->setClassConfig('Google_Http_Request', 'disable_gzip', true);
+ }
+ }
+
+ if ($config->getIoClass() == Google_Config::USE_AUTO_IO_SELECTION) {
+ if (function_exists('curl_version') && function_exists('curl_exec')) {
+ $config->setIoClass("Google_IO_Curl");
+ } else {
+ $config->setIoClass("Google_IO_Stream");
+ }
+ }
+
+ $this->config = $config;
+ }
+
+ /**
+ * Get a string containing the version of the library.
+ *
+ * @return string
+ */
+ public function getLibraryVersion()
+ {
+ return self::LIBVER;
+ }
+
+ /**
+ * Attempt to exchange a code for an valid authentication token.
+ * Helper wrapped around the OAuth 2.0 implementation.
+ *
+ * @param $code string code from accounts.google.com
+ * @return string token
+ */
+ public function authenticate($code)
+ {
+ $this->authenticated = true;
+ return $this->getAuth()->authenticate($code);
+ }
+
+ /**
+ * Set the auth config from the JSON string provided.
+ * This structure should match the file downloaded from
+ * the "Download JSON" button on in the Google Developer
+ * Console.
+ * @param string $json the configuration json
+ */
+ public function setAuthConfig($json)
+ {
+ $data = json_decode($json);
+ $key = isset($data->installed) ? 'installed' : 'web';
+ if (!isset($data->$key)) {
+ throw new Google_Exception("Invalid client secret JSON file.");
+ }
+ $this->setClientId($data->$key->client_id);
+ $this->setClientSecret($data->$key->client_secret);
+ if (isset($data->$key->redirect_uris)) {
+ $this->setRedirectUri($data->$key->redirect_uris[0]);
+ }
+ }
+
+ /**
+ * Set the auth config from the JSON file in the path
+ * provided. This should match the file downloaded from
+ * the "Download JSON" button on in the Google Developer
+ * Console.
+ * @param string $file the file location of the client json
+ */
+ public function setAuthConfigFile($file)
+ {
+ $this->setAuthConfig(file_get_contents($file));
+ }
+
+ /**
+ * @return array
+ * @visible For Testing
+ */
+ public function prepareScopes()
+ {
+ if (empty($this->requestedScopes)) {
+ throw new Google_Auth_Exception("No scopes specified");
+ }
+ $scopes = implode(' ', $this->requestedScopes);
+ return $scopes;
+ }
+
+ /**
+ * Set the OAuth 2.0 access token using the string that resulted from calling createAuthUrl()
+ * or Google_Client#getAccessToken().
+ * @param string $accessToken JSON encoded string containing in the following format:
+ * {"access_token":"TOKEN", "refresh_token":"TOKEN", "token_type":"Bearer",
+ * "expires_in":3600, "id_token":"TOKEN", "created":1320790426}
+ */
+ public function setAccessToken($accessToken)
+ {
+ if ($accessToken == 'null') {
+ $accessToken = null;
+ }
+ $this->getAuth()->setAccessToken($accessToken);
+ }
+
+
+
+ /**
+ * Set the authenticator object
+ * @param Google_Auth_Abstract $auth
+ */
+ public function setAuth(Google_Auth_Abstract $auth)
+ {
+ $this->config->setAuthClass(get_class($auth));
+ $this->auth = $auth;
+ }
+
+ /**
+ * Set the IO object
+ * @param Google_Io_Abstract $auth
+ */
+ public function setIo(Google_Io_Abstract $io)
+ {
+ $this->config->setIoClass(get_class($io));
+ $this->io = $io;
+ }
+
+ /**
+ * Set the Cache object
+ * @param Google_Cache_Abstract $auth
+ */
+ public function setCache(Google_Cache_Abstract $cache)
+ {
+ $this->config->setCacheClass(get_class($cache));
+ $this->cache = $cache;
+ }
+
+ /**
+ * Construct the OAuth 2.0 authorization request URI.
+ * @return string
+ */
+ public function createAuthUrl()
+ {
+ $scopes = $this->prepareScopes();
+ return $this->getAuth()->createAuthUrl($scopes);
+ }
+
+ /**
+ * Get the OAuth 2.0 access token.
+ * @return string $accessToken JSON encoded string in the following format:
+ * {"access_token":"TOKEN", "refresh_token":"TOKEN", "token_type":"Bearer",
+ * "expires_in":3600,"id_token":"TOKEN", "created":1320790426}
+ */
+ public function getAccessToken()
+ {
+ $token = $this->getAuth()->getAccessToken();
+ // The response is json encoded, so could be the string null.
+ // It is arguable whether this check should be here or lower
+ // in the library.
+ return (null == $token || 'null' == $token || '[]' == $token) ? null : $token;
+ }
+
+ /**
+ * Get the OAuth 2.0 refresh token.
+ * @return string $refreshToken refresh token or null if not available
+ */
+ public function getRefreshToken()
+ {
+ return $this->getAuth()->getRefreshToken();
+ }
+
+ /**
+ * Returns if the access_token is expired.
+ * @return bool Returns True if the access_token is expired.
+ */
+ public function isAccessTokenExpired()
+ {
+ return $this->getAuth()->isAccessTokenExpired();
+ }
+
+ /**
+ * Set OAuth 2.0 "state" parameter to achieve per-request customization.
+ * @see http://tools.ietf.org/html/draft-ietf-oauth-v2-22#section-3.1.2.2
+ * @param string $state
+ */
+ public function setState($state)
+ {
+ $this->getAuth()->setState($state);
+ }
+
+ /**
+ * @param string $accessType Possible values for access_type include:
+ * {@code "offline"} to request offline access from the user.
+ * {@code "online"} to request online access from the user.
+ */
+ public function setAccessType($accessType)
+ {
+ $this->config->setAccessType($accessType);
+ }
+
+ /**
+ * @param string $approvalPrompt Possible values for approval_prompt include:
+ * {@code "force"} to force the approval UI to appear. (This is the default value)
+ * {@code "auto"} to request auto-approval when possible.
+ */
+ public function setApprovalPrompt($approvalPrompt)
+ {
+ $this->config->setApprovalPrompt($approvalPrompt);
+ }
+
+ /**
+ * Set the login hint, email address or sub id.
+ * @param string $loginHint
+ */
+ public function setLoginHint($loginHint)
+ {
+ $this->config->setLoginHint($loginHint);
+ }
+
+ /**
+ * Set the application name, this is included in the User-Agent HTTP header.
+ * @param string $applicationName
+ */
+ public function setApplicationName($applicationName)
+ {
+ $this->config->setApplicationName($applicationName);
+ }
+
+ /**
+ * Set the OAuth 2.0 Client ID.
+ * @param string $clientId
+ */
+ public function setClientId($clientId)
+ {
+ $this->config->setClientId($clientId);
+ }
+
+ /**
+ * Set the OAuth 2.0 Client Secret.
+ * @param string $clientSecret
+ */
+ public function setClientSecret($clientSecret)
+ {
+ $this->config->setClientSecret($clientSecret);
+ }
+
+ /**
+ * Set the OAuth 2.0 Redirect URI.
+ * @param string $redirectUri
+ */
+ public function setRedirectUri($redirectUri)
+ {
+ $this->config->setRedirectUri($redirectUri);
+ }
+
+ /**
+ * If 'plus.login' is included in the list of requested scopes, you can use
+ * this method to define types of app activities that your app will write.
+ * You can find a list of available types here:
+ * @link https://developers.google.com/+/api/moment-types
+ *
+ * @param array $requestVisibleActions Array of app activity types
+ */
+ public function setRequestVisibleActions($requestVisibleActions)
+ {
+ if (is_array($requestVisibleActions)) {
+ $requestVisibleActions = join(" ", $requestVisibleActions);
+ }
+ $this->config->setRequestVisibleActions($requestVisibleActions);
+ }
+
+ /**
+ * Set the developer key to use, these are obtained through the API Console.
+ * @see http://code.google.com/apis/console-help/#generatingdevkeys
+ * @param string $developerKey
+ */
+ public function setDeveloperKey($developerKey)
+ {
+ $this->config->setDeveloperKey($developerKey);
+ }
+
+ /**
+ * Set the hd (hosted domain) parameter streamlines the login process for
+ * Google Apps hosted accounts. By including the domain of the user, you
+ * restrict sign-in to accounts at that domain.
+ * @param $hd string - the domain to use.
+ */
+ public function setHostedDomain($hd)
+ {
+ $this->config->setHostedDomain($hd);
+ }
+
+ /**
+ * Set the prompt hint. Valid values are none, consent and select_account.
+ * If no value is specified and the user has not previously authorized
+ * access, then the user is shown a consent screen.
+ * @param $prompt string
+ */
+ public function setPrompt($prompt)
+ {
+ $this->config->setPrompt($prompt);
+ }
+
+ /**
+ * openid.realm is a parameter from the OpenID 2.0 protocol, not from OAuth
+ * 2.0. It is used in OpenID 2.0 requests to signify the URL-space for which
+ * an authentication request is valid.
+ * @param $realm string - the URL-space to use.
+ */
+ public function setOpenidRealm($realm)
+ {
+ $this->config->setOpenidRealm($realm);
+ }
+
+ /**
+ * If this is provided with the value true, and the authorization request is
+ * granted, the authorization will include any previous authorizations
+ * granted to this user/application combination for other scopes.
+ * @param $include boolean - the URL-space to use.
+ */
+ public function setIncludeGrantedScopes($include)
+ {
+ $this->config->setIncludeGrantedScopes($include);
+ }
+
+ /**
+ * Fetches a fresh OAuth 2.0 access token with the given refresh token.
+ * @param string $refreshToken
+ * @return void
+ */
+ public function refreshToken($refreshToken)
+ {
+ return $this->getAuth()->refreshToken($refreshToken);
+ }
+
+ /**
+ * Revoke an OAuth2 access token or refresh token. This method will revoke the current access
+ * token, if a token isn't provided.
+ * @throws Google_Auth_Exception
+ * @param string|null $token The token (access token or a refresh token) that should be revoked.
+ * @return boolean Returns True if the revocation was successful, otherwise False.
+ */
+ public function revokeToken($token = null)
+ {
+ return $this->getAuth()->revokeToken($token);
+ }
+
+ /**
+ * Verify an id_token. This method will verify the current id_token, if one
+ * isn't provided.
+ * @throws Google_Auth_Exception
+ * @param string|null $token The token (id_token) that should be verified.
+ * @return Google_Auth_LoginTicket Returns an apiLoginTicket if the verification was
+ * successful.
+ */
+ public function verifyIdToken($token = null)
+ {
+ return $this->getAuth()->verifyIdToken($token);
+ }
+
+ /**
+ * Verify a JWT that was signed with your own certificates.
+ *
+ * @param $jwt the token
+ * @param $certs array of certificates
+ * @param $required_audience the expected consumer of the token
+ * @param [$issuer] the expected issues, defaults to Google
+ * @param [$max_expiry] the max lifetime of a token, defaults to MAX_TOKEN_LIFETIME_SECS
+ * @return token information if valid, false if not
+ */
+ public function verifySignedJwt($id_token, $cert_location, $audience, $issuer, $max_expiry = null)
+ {
+ $auth = new Google_Auth_OAuth2($this);
+ $certs = $auth->retrieveCertsFromLocation($cert_location);
+ return $auth->verifySignedJwtWithCerts($id_token, $certs, $audience, $issuer, $max_expiry);
+ }
+
+ /**
+ * @param Google_Auth_AssertionCredentials $creds
+ * @return void
+ */
+ public function setAssertionCredentials(Google_Auth_AssertionCredentials $creds)
+ {
+ $this->getAuth()->setAssertionCredentials($creds);
+ }
+
+ /**
+ * Set the scopes to be requested. Must be called before createAuthUrl().
+ * Will remove any previously configured scopes.
+ * @param array $scopes, ie: array('https://www.googleapis.com/auth/plus.login',
+ * 'https://www.googleapis.com/auth/moderator')
+ */
+ public function setScopes($scopes)
+ {
+ $this->requestedScopes = array();
+ $this->addScope($scopes);
+ }
+
+ /**
+ * This functions adds a scope to be requested as part of the OAuth2.0 flow.
+ * Will append any scopes not previously requested to the scope parameter.
+ * A single string will be treated as a scope to request. An array of strings
+ * will each be appended.
+ * @param $scope_or_scopes string|array e.g. "profile"
+ */
+ public function addScope($scope_or_scopes)
+ {
+ if (is_string($scope_or_scopes) && !in_array($scope_or_scopes, $this->requestedScopes)) {
+ $this->requestedScopes[] = $scope_or_scopes;
+ } else if (is_array($scope_or_scopes)) {
+ foreach ($scope_or_scopes as $scope) {
+ $this->addScope($scope);
+ }
+ }
+ }
+
+ /**
+ * Returns the list of scopes requested by the client
+ * @return array the list of scopes
+ *
+ */
+ public function getScopes()
+ {
+ return $this->requestedScopes;
+ }
+
+ /**
+ * Declare whether batch calls should be used. This may increase throughput
+ * by making multiple requests in one connection.
+ *
+ * @param boolean $useBatch True if the batch support should
+ * be enabled. Defaults to False.
+ */
+ public function setUseBatch($useBatch)
+ {
+ // This is actually an alias for setDefer.
+ $this->setDefer($useBatch);
+ }
+
+ /**
+ * Declare whether making API calls should make the call immediately, or
+ * return a request which can be called with ->execute();
+ *
+ * @param boolean $defer True if calls should not be executed right away.
+ */
+ public function setDefer($defer)
+ {
+ $this->deferExecution = $defer;
+ }
+
+ /**
+ * Helper method to execute deferred HTTP requests.
+ *
+ * @return object of the type of the expected class or array.
+ */
+ public function execute($request)
+ {
+ if ($request instanceof Google_Http_Request) {
+ $request->setUserAgent(
+ $this->getApplicationName()
+ . " " . self::USER_AGENT_SUFFIX
+ . $this->getLibraryVersion()
+ );
+ if (!$this->getClassConfig("Google_Http_Request", "disable_gzip")) {
+ $request->enableGzip();
+ }
+ $request->maybeMoveParametersToBody();
+ return Google_Http_REST::execute($this, $request);
+ } else if ($request instanceof Google_Http_Batch) {
+ return $request->execute();
+ } else {
+ throw new Google_Exception("Do not know how to execute this type of object.");
+ }
+ }
+
+ /**
+ * Whether or not to return raw requests
+ * @return boolean
+ */
+ public function shouldDefer()
+ {
+ return $this->deferExecution;
+ }
+
+ /**
+ * @return Google_Auth_Abstract Authentication implementation
+ */
+ public function getAuth()
+ {
+ if (!isset($this->auth)) {
+ $class = $this->config->getAuthClass();
+ $this->auth = new $class($this);
+ }
+ return $this->auth;
+ }
+
+ /**
+ * @return Google_IO_Abstract IO implementation
+ */
+ public function getIo()
+ {
+ if (!isset($this->io)) {
+ $class = $this->config->getIoClass();
+ $this->io = new $class($this);
+ }
+ return $this->io;
+ }
+
+ /**
+ * @return Google_Cache_Abstract Cache implementation
+ */
+ public function getCache()
+ {
+ if (!isset($this->cache)) {
+ $class = $this->config->getCacheClass();
+ $this->cache = new $class($this);
+ }
+ return $this->cache;
+ }
+
+ /**
+ * Retrieve custom configuration for a specific class.
+ * @param $class string|object - class or instance of class to retrieve
+ * @param $key string optional - key to retrieve
+ */
+ public function getClassConfig($class, $key = null)
+ {
+ if (!is_string($class)) {
+ $class = get_class($class);
+ }
+ return $this->config->getClassConfig($class, $key);
+ }
+
+ /**
+ * Set configuration specific to a given class.
+ * $config->setClassConfig('Google_Cache_File',
+ * array('directory' => '/tmp/cache'));
+ * @param $class The class name for the configuration
+ * @param $config string key or an array of configuration values
+ * @param $value optional - if $config is a key, the value
+ *
+ */
+ public function setClassConfig($class, $config, $value = null)
+ {
+ if (!is_string($class)) {
+ $class = get_class($class);
+ }
+ return $this->config->setClassConfig($class, $config, $value);
+
+ }
+
+ /**
+ * @return string the base URL to use for calls to the APIs
+ */
+ public function getBasePath()
+ {
+ return $this->config->getBasePath();
+ }
+
+ /**
+ * @return string the name of the application
+ */
+ public function getApplicationName()
+ {
+ return $this->config->getApplicationName();
+ }
+
+ /**
+ * Are we running in Google AppEngine?
+ * return bool
+ */
+ public function isAppEngine()
+ {
+ return (isset($_SERVER['SERVER_SOFTWARE']) &&
+ strpos($_SERVER['SERVER_SOFTWARE'], 'Google App Engine') !== false);
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Collection.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Collection.php
new file mode 100644
index 00000000000..6e7bf9b0f1e
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Collection.php
@@ -0,0 +1,96 @@
+<?php
+
+require_once "Google/Model.php";
+
+/**
+ * Extension to the regular Google_Model that automatically
+ * exposes the items array for iteration, so you can just
+ * iterate over the object rather than a reference inside.
+ */
+class Google_Collection extends Google_Model implements Iterator, Countable
+{
+ protected $collection_key = 'items';
+
+ public function rewind()
+ {
+ if (isset($this->modelData[$this->collection_key])
+ && is_array($this->modelData[$this->collection_key])) {
+ reset($this->modelData[$this->collection_key]);
+ }
+ }
+
+ public function current()
+ {
+ $this->coerceType($this->key());
+ if (is_array($this->modelData[$this->collection_key])) {
+ return current($this->modelData[$this->collection_key]);
+ }
+ }
+
+ public function key()
+ {
+ if (isset($this->modelData[$this->collection_key])
+ && is_array($this->modelData[$this->collection_key])) {
+ return key($this->modelData[$this->collection_key]);
+ }
+ }
+
+ public function next()
+ {
+ return next($this->modelData[$this->collection_key]);
+ }
+
+ public function valid()
+ {
+ $key = $this->key();
+ return $key !== null && $key !== false;
+ }
+
+ public function count()
+ {
+ return count($this->modelData[$this->collection_key]);
+ }
+
+ public function offsetExists ($offset)
+ {
+ if (!is_numeric($offset)) {
+ return parent::offsetExists($offset);
+ }
+ return isset($this->modelData[$this->collection_key][$offset]);
+ }
+
+ public function offsetGet($offset)
+ {
+ if (!is_numeric($offset)) {
+ return parent::offsetGet($offset);
+ }
+ $this->coerceType($offset);
+ return $this->modelData[$this->collection_key][$offset];
+ }
+
+ public function offsetSet($offset, $value)
+ {
+ if (!is_numeric($offset)) {
+ return parent::offsetSet($offset, $value);
+ }
+ $this->modelData[$this->collection_key][$offset] = $value;
+ }
+
+ public function offsetUnset($offset)
+ {
+ if (!is_numeric($offset)) {
+ return parent::offsetUnset($offset);
+ }
+ unset($this->modelData[$this->collection_key][$offset]);
+ }
+
+ private function coerceType($offset)
+ {
+ $typeKey = $this->keyType($this->collection_key);
+ if (isset($this->$typeKey) && !is_object($this->modelData[$this->collection_key][$offset])) {
+ $type = $this->$typeKey;
+ $this->modelData[$this->collection_key][$offset] =
+ new $type($this->modelData[$this->collection_key][$offset]);
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Config.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Config.php
new file mode 100644
index 00000000000..84083058fe5
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Config.php
@@ -0,0 +1,371 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * A class to contain the library configuration for the Google API client.
+ */
+class Google_Config
+{
+ const GZIP_DISABLED = true;
+ const GZIP_ENABLED = false;
+ const GZIP_UPLOADS_ENABLED = true;
+ const GZIP_UPLOADS_DISABLED = false;
+ const USE_AUTO_IO_SELECTION = "auto";
+ protected $configuration;
+
+ /**
+ * Create a new Google_Config. Can accept an ini file location with the
+ * local configuration. For example:
+ * application_name="My App"
+ *
+ * @param [$ini_file_location] - optional - The location of the ini file to load
+ */
+ public function __construct($ini_file_location = null)
+ {
+ $this->configuration = array(
+ // The application_name is included in the User-Agent HTTP header.
+ 'application_name' => '',
+
+ // Which Authentication, Storage and HTTP IO classes to use.
+ 'auth_class' => 'Google_Auth_OAuth2',
+ 'io_class' => self::USE_AUTO_IO_SELECTION,
+ 'cache_class' => 'Google_Cache_File',
+
+ // Don't change these unless you're working against a special development
+ // or testing environment.
+ 'base_path' => 'https://www.googleapis.com',
+
+ // Definition of class specific values, like file paths and so on.
+ 'classes' => array(
+ 'Google_IO_Abstract' => array(
+ 'request_timeout_seconds' => 100,
+ ),
+ 'Google_Http_Request' => array(
+ // Disable the use of gzip on calls if set to true. Defaults to false.
+ 'disable_gzip' => self::GZIP_ENABLED,
+
+ // We default gzip to disabled on uploads even if gzip is otherwise
+ // enabled, due to some issues seen with small packet sizes for uploads.
+ // Please test with this option before enabling gzip for uploads in
+ // a production environment.
+ 'enable_gzip_for_uploads' => self::GZIP_UPLOADS_DISABLED,
+ ),
+ // If you want to pass in OAuth 2.0 settings, they will need to be
+ // structured like this.
+ 'Google_Auth_OAuth2' => array(
+ // Keys for OAuth 2.0 access, see the API console at
+ // https://developers.google.com/console
+ 'client_id' => '',
+ 'client_secret' => '',
+ 'redirect_uri' => '',
+
+ // Simple API access key, also from the API console. Ensure you get
+ // a Server key, and not a Browser key.
+ 'developer_key' => '',
+
+ // Other parameters.
+ 'hd' => '',
+ 'prompt' => '',
+ 'openid.realm' => '',
+ 'include_granted_scopes' => '',
+ 'login_hint' => '',
+ 'request_visible_actions' => '',
+ 'access_type' => 'online',
+ 'approval_prompt' => 'auto',
+ 'federated_signon_certs_url' =>
+ 'https://www.googleapis.com/oauth2/v1/certs',
+ ),
+ // Set a default directory for the file cache.
+ 'Google_Cache_File' => array(
+ 'directory' => sys_get_temp_dir() . '/Google_Client'
+ )
+ ),
+ );
+ if ($ini_file_location) {
+ $ini = parse_ini_file($ini_file_location, true);
+ if (is_array($ini) && count($ini)) {
+ $this->configuration = array_merge($this->configuration, $ini);
+ }
+ }
+ }
+
+ /**
+ * Set configuration specific to a given class.
+ * $config->setClassConfig('Google_Cache_File',
+ * array('directory' => '/tmp/cache'));
+ * @param $class The class name for the configuration
+ * @param $config string key or an array of configuration values
+ * @param $value optional - if $config is a key, the value
+ */
+ public function setClassConfig($class, $config, $value = null)
+ {
+ if (!is_array($config)) {
+ if (!isset($this->configuration['classes'][$class])) {
+ $this->configuration['classes'][$class] = array();
+ }
+ $this->configuration['classes'][$class][$config] = $value;
+ } else {
+ $this->configuration['classes'][$class] = $config;
+ }
+ }
+
+ public function getClassConfig($class, $key = null)
+ {
+ if (!isset($this->configuration['classes'][$class])) {
+ return null;
+ }
+ if ($key === null) {
+ return $this->configuration['classes'][$class];
+ } else {
+ return $this->configuration['classes'][$class][$key];
+ }
+ }
+
+ /**
+ * Return the configured cache class.
+ * @return string
+ */
+ public function getCacheClass()
+ {
+ return $this->configuration['cache_class'];
+ }
+
+ /**
+ * Return the configured Auth class.
+ * @return string
+ */
+ public function getAuthClass()
+ {
+ return $this->configuration['auth_class'];
+ }
+
+ /**
+ * Set the auth class.
+ *
+ * @param $class the class name to set
+ */
+ public function setAuthClass($class)
+ {
+ $prev = $this->configuration['auth_class'];
+ if (!isset($this->configuration['classes'][$class]) &&
+ isset($this->configuration['classes'][$prev])) {
+ $this->configuration['classes'][$class] =
+ $this->configuration['classes'][$prev];
+ }
+ $this->configuration['auth_class'] = $class;
+ }
+
+ /**
+ * Set the IO class.
+ *
+ * @param $class the class name to set
+ */
+ public function setIoClass($class)
+ {
+ $prev = $this->configuration['io_class'];
+ if (!isset($this->configuration['classes'][$class]) &&
+ isset($this->configuration['classes'][$prev])) {
+ $this->configuration['classes'][$class] =
+ $this->configuration['classes'][$prev];
+ }
+ $this->configuration['io_class'] = $class;
+ }
+
+ /**
+ * Set the cache class.
+ *
+ * @param $class the class name to set
+ */
+ public function setCacheClass($class)
+ {
+ $prev = $this->configuration['cache_class'];
+ if (!isset($this->configuration['classes'][$class]) &&
+ isset($this->configuration['classes'][$prev])) {
+ $this->configuration['classes'][$class] =
+ $this->configuration['classes'][$prev];
+ }
+ $this->configuration['cache_class'] = $class;
+ }
+
+ /**
+ * Return the configured IO class.
+ * @return string
+ */
+ public function getIoClass()
+ {
+ return $this->configuration['io_class'];
+ }
+
+ /**
+ * Set the application name, this is included in the User-Agent HTTP header.
+ * @param string $name
+ */
+ public function setApplicationName($name)
+ {
+ $this->configuration['application_name'] = $name;
+ }
+
+ /**
+ * @return string the name of the application
+ */
+ public function getApplicationName()
+ {
+ return $this->configuration['application_name'];
+ }
+
+ /**
+ * Set the client ID for the auth class.
+ * @param $key string - the API console client ID
+ */
+ public function setClientId($clientId)
+ {
+ $this->setAuthConfig('client_id', $clientId);
+ }
+
+ /**
+ * Set the client secret for the auth class.
+ * @param $key string - the API console client secret
+ */
+ public function setClientSecret($secret)
+ {
+ $this->setAuthConfig('client_secret', $secret);
+ }
+
+ /**
+ * Set the redirect uri for the auth class. Note that if using the
+ * Javascript based sign in flow, this should be the string 'postmessage'.
+ * @param $key string - the URI that users should be redirected to
+ */
+ public function setRedirectUri($uri)
+ {
+ $this->setAuthConfig('redirect_uri', $uri);
+ }
+
+ /**
+ * Set the app activities for the auth class.
+ * @param $rva string a space separated list of app activity types
+ */
+ public function setRequestVisibleActions($rva)
+ {
+ $this->setAuthConfig('request_visible_actions', $rva);
+ }
+
+ /**
+ * Set the the access type requested (offline or online.)
+ * @param $access string - the access type
+ */
+ public function setAccessType($access)
+ {
+ $this->setAuthConfig('access_type', $access);
+ }
+
+ /**
+ * Set when to show the approval prompt (auto or force)
+ * @param $approval string - the approval request
+ */
+ public function setApprovalPrompt($approval)
+ {
+ $this->setAuthConfig('approval_prompt', $approval);
+ }
+
+ /**
+ * Set the login hint (email address or sub identifier)
+ * @param $hint string
+ */
+ public function setLoginHint($hint)
+ {
+ $this->setAuthConfig('login_hint', $hint);
+ }
+
+ /**
+ * Set the developer key for the auth class. Note that this is separate value
+ * from the client ID - if it looks like a URL, its a client ID!
+ * @param $key string - the API console developer key
+ */
+ public function setDeveloperKey($key)
+ {
+ $this->setAuthConfig('developer_key', $key);
+ }
+
+ /**
+ * Set the hd (hosted domain) parameter streamlines the login process for
+ * Google Apps hosted accounts. By including the domain of the user, you
+ * restrict sign-in to accounts at that domain.
+ * @param $hd string - the domain to use.
+ */
+ public function setHostedDomain($hd)
+ {
+ $this->setAuthConfig('hd', $hd);
+ }
+
+ /**
+ * Set the prompt hint. Valid values are none, consent and select_account.
+ * If no value is specified and the user has not previously authorized
+ * access, then the user is shown a consent screen.
+ * @param $prompt string
+ */
+ public function setPrompt($prompt)
+ {
+ $this->setAuthConfig('prompt', $prompt);
+ }
+
+ /**
+ * openid.realm is a parameter from the OpenID 2.0 protocol, not from OAuth
+ * 2.0. It is used in OpenID 2.0 requests to signify the URL-space for which
+ * an authentication request is valid.
+ * @param $realm string - the URL-space to use.
+ */
+ public function setOpenidRealm($realm)
+ {
+ $this->setAuthConfig('openid.realm', $realm);
+ }
+
+ /**
+ * If this is provided with the value true, and the authorization request is
+ * granted, the authorization will include any previous authorizations
+ * granted to this user/application combination for other scopes.
+ * @param $include boolean - the URL-space to use.
+ */
+ public function setIncludeGrantedScopes($include)
+ {
+ $this->setAuthConfig(
+ 'include_granted_scopes',
+ $include ? "true" : "false"
+ );
+ }
+
+ /**
+ * @return string the base URL to use for API calls
+ */
+ public function getBasePath()
+ {
+ return $this->configuration['base_path'];
+ }
+
+ /**
+ * Set the auth configuration for the current auth class.
+ * @param $key - the key to set
+ * @param $value - the parameter value
+ */
+ private function setAuthConfig($key, $value)
+ {
+ if (!isset($this->configuration['classes'][$this->getAuthClass()])) {
+ $this->configuration['classes'][$this->getAuthClass()] = array();
+ }
+ $this->configuration['classes'][$this->getAuthClass()][$key] = $value;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_Service.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Exception.php
index 1f4731fb2f4..af80269718a 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_Service.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Exception.php
@@ -1,6 +1,6 @@
<?php
/*
- * Copyright 2010 Google Inc.
+ * Copyright 2013 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,8 +15,6 @@
* limitations under the License.
*/
-class Google_Service {
- public $version;
- public $servicePath;
- public $resource;
+class Google_Exception extends Exception
+{
}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_BatchRequest.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/Batch.php
index 3916b223a7e..d851da50499 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_BatchRequest.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/Batch.php
@@ -15,22 +15,39 @@
* limitations under the License.
*/
+require_once 'Google/Client.php';
+require_once 'Google/Http/Request.php';
+require_once 'Google/Http/REST.php';
+
/**
* @author Chirag Shah <chirags@google.com>
*/
-class Google_BatchRequest {
+class Google_Http_Batch
+{
/** @var string Multipart Boundary. */
private $boundary;
/** @var array service requests to be executed. */
private $requests = array();
- public function __construct($boundary = false) {
+ /** @var Google_Client */
+ private $client;
+
+ private $expected_classes = array();
+
+ private $base_path;
+
+ public function __construct(Google_Client $client, $boundary = false)
+ {
+ $this->client = $client;
+ $this->base_path = $this->client->getBasePath();
+ $this->expected_classes = array();
$boundary = (false == $boundary) ? mt_rand() : $boundary;
$this->boundary = str_replace('"', '', $boundary);
}
- public function add(Google_HttpRequest $request, $key = false) {
+ public function add(Google_Http_Request $request, $key = false)
+ {
if (false == $key) {
$key = mt_rand();
}
@@ -38,36 +55,38 @@ class Google_BatchRequest {
$this->requests[$key] = $request;
}
- public function execute() {
+ public function execute()
+ {
$body = '';
- /** @var Google_HttpRequest $req */
- foreach($this->requests as $key => $req) {
+ /** @var Google_Http_Request $req */
+ foreach ($this->requests as $key => $req) {
$body .= "--{$this->boundary}\n";
$body .= $req->toBatchString($key) . "\n";
+ $this->expected_classes["response-" . $key] = $req->getExpectedClass();
}
$body = rtrim($body);
$body .= "\n--{$this->boundary}--";
- global $apiConfig;
- $url = $apiConfig['basePath'] . '/batch';
- $httpRequest = new Google_HttpRequest($url, 'POST');
- $httpRequest->setRequestHeaders(array(
- 'Content-Type' => 'multipart/mixed; boundary=' . $this->boundary));
+ $url = $this->base_path . '/batch';
+ $httpRequest = new Google_Http_Request($url, 'POST');
+ $httpRequest->setRequestHeaders(
+ array('Content-Type' => 'multipart/mixed; boundary=' . $this->boundary)
+ );
$httpRequest->setPostBody($body);
- $response = Google_Client::$io->makeRequest($httpRequest);
+ $response = $this->client->getIo()->makeRequest($httpRequest);
- $response = $this->parseResponse($response);
- return $response;
+ return $this->parseResponse($response);
}
- public function parseResponse(Google_HttpRequest $response) {
+ public function parseResponse(Google_Http_Request $response)
+ {
$contentType = $response->getResponseHeader('content-type');
$contentType = explode(';', $contentType);
$boundary = false;
- foreach($contentType as $part) {
+ foreach ($contentType as $part) {
$part = (explode('=', $part, 2));
if (isset($part[0]) && 'boundary' == trim($part[0])) {
$boundary = $part[1];
@@ -80,25 +99,39 @@ class Google_BatchRequest {
$parts = explode("--$boundary", $body);
$responses = array();
- foreach($parts as $part) {
+ foreach ($parts as $part) {
$part = trim($part);
if (!empty($part)) {
list($metaHeaders, $part) = explode("\r\n\r\n", $part, 2);
- $metaHeaders = Google_CurlIO::parseResponseHeaders($metaHeaders);
+ $metaHeaders = $this->client->getIo()->getHttpResponseHeaders($metaHeaders);
$status = substr($part, 0, strpos($part, "\n"));
$status = explode(" ", $status);
$status = $status[1];
- list($partHeaders, $partBody) = Google_CurlIO::parseHttpResponse($part, false);
- $response = new Google_HttpRequest("");
+ list($partHeaders, $partBody) = $this->client->getIo()->ParseHttpResponse($part, false);
+ $response = new Google_Http_Request("");
$response->setResponseHttpCode($status);
$response->setResponseHeaders($partHeaders);
$response->setResponseBody($partBody);
- $response = Google_REST::decodeHttpResponse($response);
// Need content id.
- $responses[$metaHeaders['content-id']] = $response;
+ $key = $metaHeaders['content-id'];
+
+ if (isset($this->expected_classes[$key]) &&
+ strlen($this->expected_classes[$key]) > 0) {
+ $class = $this->expected_classes[$key];
+ $response->setExpectedClass($class);
+ }
+
+ try {
+ $response = Google_Http_REST::decodeHttpResponse($response);
+ $responses[$key] = $response;
+ } catch (Google_Service_Exception $e) {
+ // Store the exception as the response, so succesful responses
+ // can be processed.
+ $responses[$key] = $e;
+ }
}
}
@@ -107,4 +140,4 @@ class Google_BatchRequest {
return null;
}
-} \ No newline at end of file
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_CacheParser.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/CacheParser.php
index 7f5accfefe9..83f1c8d2f42 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_CacheParser.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/CacheParser.php
@@ -14,26 +14,29 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
+require_once 'Google/Http/Request.php';
+
/**
* Implement the caching directives specified in rfc2616. This
* implementation is guided by the guidance offered in rfc2616-sec13.
* @author Chirag Shah <chirags@google.com>
*/
-class Google_CacheParser {
+class Google_Http_CacheParser
+{
public static $CACHEABLE_HTTP_METHODS = array('GET', 'HEAD');
public static $CACHEABLE_STATUS_CODES = array('200', '203', '300', '301');
- private function __construct() {}
-
/**
* Check if an HTTP request can be cached by a private local cache.
*
* @static
- * @param Google_HttpRequest $resp
+ * @param Google_Http_Request $resp
* @return bool True if the request is cacheable.
* False if the request is uncacheable.
*/
- public static function isRequestCacheable (Google_HttpRequest $resp) {
+ public static function isRequestCacheable(Google_Http_Request $resp)
+ {
$method = $resp->getRequestMethod();
if (! in_array($method, self::$CACHEABLE_HTTP_METHODS)) {
return false;
@@ -54,11 +57,12 @@ class Google_CacheParser {
* Check if an HTTP response can be cached by a private local cache.
*
* @static
- * @param Google_HttpRequest $resp
+ * @param Google_Http_Request $resp
* @return bool True if the response is cacheable.
* False if the response is un-cacheable.
*/
- public static function isResponseCacheable (Google_HttpRequest $resp) {
+ public static function isResponseCacheable(Google_Http_Request $resp)
+ {
// First, check if the HTTP request was cacheable before inspecting the
// HTTP response.
if (false == self::isRequestCacheable($resp)) {
@@ -105,15 +109,17 @@ class Google_CacheParser {
/**
* @static
- * @param Google_HttpRequest $resp
+ * @param Google_Http_Request $resp
* @return bool True if the HTTP response is considered to be expired.
* False if it is considered to be fresh.
*/
- public static function isExpired(Google_HttpRequest $resp) {
+ public static function isExpired(Google_Http_Request $resp)
+ {
// HTTP/1.1 clients and caches MUST treat other invalid date formats,
// especially including the value “0”, as in the past.
$parsedExpires = false;
$responseHeaders = $resp->getResponseHeaders();
+
if (isset($responseHeaders['expires'])) {
$rawExpires = $responseHeaders['expires'];
// Check for a malformed expires header first.
@@ -139,8 +145,12 @@ class Google_CacheParser {
$parsedDate = strtotime($rawDate);
if (empty($rawDate) || false == $parsedDate) {
- $parsedDate = time();
+ // We can't default this to now, as that means future cache reads
+ // will always pass with the logic below, so we will require a
+ // date be injected if not supplied.
+ throw new Google_Exception("All cacheable requests must have creation dates.");
}
+
if (false == $freshnessLifetime && isset($responseHeaders['expires'])) {
$freshnessLifetime = $parsedExpires - $parsedDate;
}
@@ -161,13 +171,14 @@ class Google_CacheParser {
/**
* Determine if a cache entry should be revalidated with by the origin.
*
- * @param Google_HttpRequest $response
+ * @param Google_Http_Request $response
* @return bool True if the entry is expired, else return false.
*/
- public static function mustRevalidate(Google_HttpRequest $response) {
+ public static function mustRevalidate(Google_Http_Request $response)
+ {
// [13.3] When a cache has a stale entry that it would like to use as a
// response to a client's request, it first has to check with the origin
// server to see if its cached entry is still usable.
return self::isExpired($response);
}
-} \ No newline at end of file
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/MediaFileUpload.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/MediaFileUpload.php
new file mode 100644
index 00000000000..8005db4bb48
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/MediaFileUpload.php
@@ -0,0 +1,301 @@
+<?php
+/**
+ * Copyright 2012 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once 'Google/Client.php';
+require_once 'Google/Exception.php';
+require_once 'Google/Http/Request.php';
+require_once 'Google/Http/REST.php';
+require_once 'Google/Utils.php';
+
+/**
+ * @author Chirag Shah <chirags@google.com>
+ *
+ */
+class Google_Http_MediaFileUpload
+{
+ const UPLOAD_MEDIA_TYPE = 'media';
+ const UPLOAD_MULTIPART_TYPE = 'multipart';
+ const UPLOAD_RESUMABLE_TYPE = 'resumable';
+
+ /** @var string $mimeType */
+ private $mimeType;
+
+ /** @var string $data */
+ private $data;
+
+ /** @var bool $resumable */
+ private $resumable;
+
+ /** @var int $chunkSize */
+ private $chunkSize;
+
+ /** @var int $size */
+ private $size;
+
+ /** @var string $resumeUri */
+ private $resumeUri;
+
+ /** @var int $progress */
+ private $progress;
+
+ /** @var Google_Client */
+ private $client;
+
+ /** @var Google_Http_Request */
+ private $request;
+
+ /** @var string */
+ private $boundary;
+
+ /**
+ * Result code from last HTTP call
+ * @var int
+ */
+ private $httpResultCode;
+
+ /**
+ * @param $mimeType string
+ * @param $data string The bytes you want to upload.
+ * @param $resumable bool
+ * @param bool $chunkSize File will be uploaded in chunks of this many bytes.
+ * only used if resumable=True
+ */
+ public function __construct(
+ Google_Client $client,
+ Google_Http_Request $request,
+ $mimeType,
+ $data,
+ $resumable = false,
+ $chunkSize = false,
+ $boundary = false
+ ) {
+ $this->client = $client;
+ $this->request = $request;
+ $this->mimeType = $mimeType;
+ $this->data = $data;
+ $this->size = strlen($this->data);
+ $this->resumable = $resumable;
+ if (!$chunkSize) {
+ $chunkSize = 256 * 1024;
+ }
+ $this->chunkSize = $chunkSize;
+ $this->progress = 0;
+ $this->boundary = $boundary;
+
+ // Process Media Request
+ $this->process();
+ }
+
+ /**
+ * Set the size of the file that is being uploaded.
+ * @param $size - int file size in bytes
+ */
+ public function setFileSize($size)
+ {
+ $this->size = $size;
+ }
+
+ /**
+ * Return the progress on the upload
+ * @return int progress in bytes uploaded.
+ */
+ public function getProgress()
+ {
+ return $this->progress;
+ }
+
+ /**
+ * Return the HTTP result code from the last call made.
+ * @return int code
+ */
+ public function getHttpResultCode()
+ {
+ return $this->httpResultCode;
+ }
+
+ /**
+ * Send the next part of the file to upload.
+ * @param [$chunk] the next set of bytes to send. If false will used $data passed
+ * at construct time.
+ */
+ public function nextChunk($chunk = false)
+ {
+ if (false == $this->resumeUri) {
+ $this->resumeUri = $this->getResumeUri();
+ }
+
+ if (false == $chunk) {
+ $chunk = substr($this->data, $this->progress, $this->chunkSize);
+ }
+
+ $lastBytePos = $this->progress + strlen($chunk) - 1;
+ $headers = array(
+ 'content-range' => "bytes $this->progress-$lastBytePos/$this->size",
+ 'content-type' => $this->request->getRequestHeader('content-type'),
+ 'content-length' => $this->chunkSize,
+ 'expect' => '',
+ );
+
+ $httpRequest = new Google_Http_Request(
+ $this->resumeUri,
+ 'PUT',
+ $headers,
+ $chunk
+ );
+
+ if ($this->client->getClassConfig("Google_Http_Request", "enable_gzip_for_uploads")) {
+ $httpRequest->enableGzip();
+ } else {
+ $httpRequest->disableGzip();
+ }
+
+ $response = $this->client->getIo()->makeRequest($httpRequest);
+ $response->setExpectedClass($this->request->getExpectedClass());
+ $code = $response->getResponseHttpCode();
+ $this->httpResultCode = $code;
+
+ if (308 == $code) {
+ // Track the amount uploaded.
+ $range = explode('-', $response->getResponseHeader('range'));
+ $this->progress = $range[1] + 1;
+
+ // Allow for changing upload URLs.
+ $location = $response->getResponseHeader('location');
+ if ($location) {
+ $this->resumeUri = $location;
+ }
+
+ // No problems, but upload not complete.
+ return false;
+ } else {
+ return Google_Http_REST::decodeHttpResponse($response);
+ }
+ }
+
+ /**
+ * @param $meta
+ * @param $params
+ * @return array|bool
+ * @visible for testing
+ */
+ private function process()
+ {
+ $postBody = false;
+ $contentType = false;
+
+ $meta = $this->request->getPostBody();
+ $meta = is_string($meta) ? json_decode($meta, true) : $meta;
+
+ $uploadType = $this->getUploadType($meta);
+ $this->request->setQueryParam('uploadType', $uploadType);
+ $this->transformToUploadUrl();
+ $mimeType = $this->mimeType ?
+ $this->mimeType :
+ $this->request->getRequestHeader('content-type');
+
+ if (self::UPLOAD_RESUMABLE_TYPE == $uploadType) {
+ $contentType = $mimeType;
+ $postBody = is_string($meta) ? $meta : json_encode($meta);
+ } else if (self::UPLOAD_MEDIA_TYPE == $uploadType) {
+ $contentType = $mimeType;
+ $postBody = $this->data;
+ } else if (self::UPLOAD_MULTIPART_TYPE == $uploadType) {
+ // This is a multipart/related upload.
+ $boundary = $this->boundary ? $this->boundary : mt_rand();
+ $boundary = str_replace('"', '', $boundary);
+ $contentType = 'multipart/related; boundary=' . $boundary;
+ $related = "--$boundary\r\n";
+ $related .= "Content-Type: application/json; charset=UTF-8\r\n";
+ $related .= "\r\n" . json_encode($meta) . "\r\n";
+ $related .= "--$boundary\r\n";
+ $related .= "Content-Type: $mimeType\r\n";
+ $related .= "Content-Transfer-Encoding: base64\r\n";
+ $related .= "\r\n" . base64_encode($this->data) . "\r\n";
+ $related .= "--$boundary--";
+ $postBody = $related;
+ }
+
+ $this->request->setPostBody($postBody);
+
+ if (isset($contentType) && $contentType) {
+ $contentTypeHeader['content-type'] = $contentType;
+ $this->request->setRequestHeaders($contentTypeHeader);
+ }
+ }
+
+ private function transformToUploadUrl()
+ {
+ $base = $this->request->getBaseComponent();
+ $this->request->setBaseComponent($base . '/upload');
+ }
+
+ /**
+ * Valid upload types:
+ * - resumable (UPLOAD_RESUMABLE_TYPE)
+ * - media (UPLOAD_MEDIA_TYPE)
+ * - multipart (UPLOAD_MULTIPART_TYPE)
+ * @param $meta
+ * @return string
+ * @visible for testing
+ */
+ public function getUploadType($meta)
+ {
+ if ($this->resumable) {
+ return self::UPLOAD_RESUMABLE_TYPE;
+ }
+
+ if (false == $meta && $this->data) {
+ return self::UPLOAD_MEDIA_TYPE;
+ }
+
+ return self::UPLOAD_MULTIPART_TYPE;
+ }
+
+ private function getResumeUri()
+ {
+ $result = null;
+ $body = $this->request->getPostBody();
+ if ($body) {
+ $headers = array(
+ 'content-type' => 'application/json; charset=UTF-8',
+ 'content-length' => Google_Utils::getStrLen($body),
+ 'x-upload-content-type' => $this->mimeType,
+ 'x-upload-content-length' => $this->size,
+ 'expect' => '',
+ );
+ $this->request->setRequestHeaders($headers);
+ }
+
+ $response = $this->client->getIo()->makeRequest($this->request);
+ $location = $response->getResponseHeader('location');
+ $code = $response->getResponseHttpCode();
+
+ if (200 == $code && true == $location) {
+ return $location;
+ }
+ $message = $code;
+ $body = @json_decode($response->getResponseBody());
+ if (!empty( $body->error->errors ) ) {
+ $message .= ': ';
+ foreach ($body->error->errors as $error) {
+ $message .= "{$error->domain}, {$error->message};";
+ }
+ $message = rtrim($message, ';');
+ }
+ throw new Google_Exception("Failed to start the resumable upload (HTTP {$message})");
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_REST.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/REST.php
index d0f3b3d564c..3c318e44ceb 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_REST.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/REST.php
@@ -15,47 +15,54 @@
* limitations under the License.
*/
+require_once 'Google/Client.php';
+require_once 'Google/Http/Request.php';
+require_once 'Google/Service/Exception.php';
+require_once 'Google/Utils/URITemplate.php';
+
/**
* This class implements the RESTful transport of apiServiceRequest()'s
*
* @author Chris Chabot <chabotc@google.com>
* @author Chirag Shah <chirags@google.com>
*/
-class Google_REST {
+class Google_Http_REST
+{
/**
- * Executes a apiServiceRequest using a RESTful call by transforming it into
- * an apiHttpRequest, and executed via apiIO::authenticatedRequest().
+ * Executes a Google_Http_Request
*
- * @param Google_HttpRequest $req
+ * @param Google_Client $client
+ * @param Google_Http_Request $req
* @return array decoded result
- * @throws Google_ServiceException on server side error (ie: not authenticated,
+ * @throws Google_Service_Exception on server side error (ie: not authenticated,
* invalid or malformed post body, invalid url)
*/
- static public function execute(Google_HttpRequest $req) {
- $httpRequest = Google_Client::$io->makeRequest($req);
- $decodedResponse = self::decodeHttpResponse($httpRequest);
- $ret = isset($decodedResponse['data'])
- ? $decodedResponse['data'] : $decodedResponse;
- return $ret;
+ public static function execute(Google_Client $client, Google_Http_Request $req)
+ {
+ $httpRequest = $client->getIo()->makeRequest($req);
+ $httpRequest->setExpectedClass($req->getExpectedClass());
+ return self::decodeHttpResponse($httpRequest);
}
-
/**
* Decode an HTTP Response.
* @static
- * @throws Google_ServiceException
- * @param Google_HttpRequest $response The http response to be decoded.
+ * @throws Google_Service_Exception
+ * @param Google_Http_Request $response The http response to be decoded.
* @return mixed|null
*/
- public static function decodeHttpResponse($response) {
+ public static function decodeHttpResponse($response)
+ {
$code = $response->getResponseHttpCode();
$body = $response->getResponseBody();
$decoded = null;
-
+
if ((intVal($code)) >= 300) {
$decoded = json_decode($body, true);
$err = 'Error calling ' . $response->getRequestMethod() . ' ' . $response->getUrl();
- if ($decoded != null && isset($decoded['error']['message']) && isset($decoded['error']['code'])) {
+ if (isset($decoded['error']) &&
+ isset($decoded['error']['message']) &&
+ isset($decoded['error']['code'])) {
// if we're getting a json encoded error definition, use that instead of the raw response
// body for improved readability
$err .= ": ({$decoded['error']['code']}) {$decoded['error']['message']}";
@@ -63,14 +70,25 @@ class Google_REST {
$err .= ": ($code) $body";
}
- throw new Google_ServiceException($err, $code, null, $decoded['error']['errors']);
+ $errors = null;
+ // Specific check for APIs which don't return error details, such as Blogger.
+ if (isset($decoded['error']) && isset($decoded['error']['errors'])) {
+ $errors = $decoded['error']['errors'];
+ }
+
+ throw new Google_Service_Exception($err, $code, null, $errors);
}
-
+
// Only attempt to decode the response, if the response code wasn't (204) 'no content'
if ($code != '204') {
$decoded = json_decode($body, true);
if ($decoded === null || $decoded === "") {
- throw new Google_ServiceException("Invalid json in service response: $body");
+ throw new Google_Service_Exception("Invalid json in service response: $body");
+ }
+
+ if ($response->getExpectedClass()) {
+ $class = $response->getExpectedClass();
+ $decoded = new $class($decoded);
}
}
return $decoded;
@@ -85,22 +103,18 @@ class Google_REST {
* @param array $params
* @return string $requestUrl
*/
- static function createRequestUri($servicePath, $restPath, $params) {
+ public static function createRequestUri($servicePath, $restPath, $params)
+ {
$requestUrl = $servicePath . $restPath;
$uriTemplateVars = array();
$queryVars = array();
foreach ($params as $paramName => $paramSpec) {
- // Discovery v1.0 puts the canonical location under the 'location' field.
- if (! isset($paramSpec['location'])) {
- $paramSpec['location'] = $paramSpec['restParameterType'];
- }
-
if ($paramSpec['type'] == 'boolean') {
$paramSpec['value'] = ($paramSpec['value']) ? 'true' : 'false';
}
if ($paramSpec['location'] == 'path') {
$uriTemplateVars[$paramName] = $paramSpec['value'];
- } else {
+ } else if ($paramSpec['location'] == 'query') {
if (isset($paramSpec['repeated']) && is_array($paramSpec['value'])) {
foreach ($paramSpec['value'] as $value) {
$queryVars[] = $paramName . '=' . rawurlencode($value);
@@ -112,12 +126,9 @@ class Google_REST {
}
if (count($uriTemplateVars)) {
- $uriTemplateParser = new URI_Template_Parser($requestUrl);
- $requestUrl = $uriTemplateParser->expand($uriTemplateVars);
+ $uriTemplateParser = new Google_Utils_URITemplate();
+ $requestUrl = $uriTemplateParser->parse($requestUrl, $uriTemplateVars);
}
- //FIXME work around for the the uri template lib which url encodes
- // the @'s & confuses our servers.
- $requestUrl = str_replace('%40', '@', $requestUrl);
if (count($queryVars)) {
$requestUrl .= '?' . implode($queryVars, '&');
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/Request.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/Request.php
new file mode 100644
index 00000000000..8643694da89
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Http/Request.php
@@ -0,0 +1,476 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once 'Google/Utils.php';
+
+/**
+ * HTTP Request to be executed by IO classes. Upon execution, the
+ * responseHttpCode, responseHeaders and responseBody will be filled in.
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ * @author Chirag Shah <chirags@google.com>
+ *
+ */
+class Google_Http_Request
+{
+ const GZIP_UA = " (gzip)";
+
+ private $batchHeaders = array(
+ 'Content-Type' => 'application/http',
+ 'Content-Transfer-Encoding' => 'binary',
+ 'MIME-Version' => '1.0',
+ );
+
+ protected $queryParams;
+ protected $requestMethod;
+ protected $requestHeaders;
+ protected $baseComponent = null;
+ protected $path;
+ protected $postBody;
+ protected $userAgent;
+ protected $canGzip = null;
+
+ protected $responseHttpCode;
+ protected $responseHeaders;
+ protected $responseBody;
+
+ protected $expectedClass;
+
+ public $accessKey;
+
+ public function __construct(
+ $url,
+ $method = 'GET',
+ $headers = array(),
+ $postBody = null
+ ) {
+ $this->setUrl($url);
+ $this->setRequestMethod($method);
+ $this->setRequestHeaders($headers);
+ $this->setPostBody($postBody);
+ }
+
+ /**
+ * Misc function that returns the base url component of the $url
+ * used by the OAuth signing class to calculate the base string
+ * @return string The base url component of the $url.
+ */
+ public function getBaseComponent()
+ {
+ return $this->baseComponent;
+ }
+
+ /**
+ * Set the base URL that path and query parameters will be added to.
+ * @param $baseComponent string
+ */
+ public function setBaseComponent($baseComponent)
+ {
+ $this->baseComponent = $baseComponent;
+ }
+
+ /**
+ * Enable support for gzipped responses with this request.
+ */
+ public function enableGzip()
+ {
+ $this->setRequestHeaders(array("Accept-Encoding" => "gzip"));
+ $this->canGzip = true;
+ $this->setUserAgent($this->userAgent);
+ }
+
+ /**
+ * Disable support for gzip responses with this request.
+ */
+ public function disableGzip()
+ {
+ if (
+ isset($this->requestHeaders['accept-encoding']) &&
+ $this->requestHeaders['accept-encoding'] == "gzip"
+ ) {
+ unset($this->requestHeaders['accept-encoding']);
+ }
+ $this->canGzip = false;
+ $this->userAgent = str_replace(self::GZIP_UA, "", $this->userAgent);
+ }
+
+ /**
+ * Can this request accept a gzip response?
+ * @return bool
+ */
+ public function canGzip()
+ {
+ return $this->canGzip;
+ }
+
+ /**
+ * Misc function that returns an array of the query parameters of the current
+ * url used by the OAuth signing class to calculate the signature
+ * @return array Query parameters in the query string.
+ */
+ public function getQueryParams()
+ {
+ return $this->queryParams;
+ }
+
+ /**
+ * Set a new query parameter.
+ * @param $key - string to set, does not need to be URL encoded
+ * @param $value - string to set, does not need to be URL encoded
+ */
+ public function setQueryParam($key, $value)
+ {
+ $this->queryParams[$key] = $value;
+ }
+
+ /**
+ * @return string HTTP Response Code.
+ */
+ public function getResponseHttpCode()
+ {
+ return (int) $this->responseHttpCode;
+ }
+
+ /**
+ * @param int $responseHttpCode HTTP Response Code.
+ */
+ public function setResponseHttpCode($responseHttpCode)
+ {
+ $this->responseHttpCode = $responseHttpCode;
+ }
+
+ /**
+ * @return $responseHeaders (array) HTTP Response Headers.
+ */
+ public function getResponseHeaders()
+ {
+ return $this->responseHeaders;
+ }
+
+ /**
+ * @return string HTTP Response Body
+ */
+ public function getResponseBody()
+ {
+ return $this->responseBody;
+ }
+
+ /**
+ * Set the class the response to this request should expect.
+ *
+ * @param $class string the class name
+ */
+ public function setExpectedClass($class)
+ {
+ $this->expectedClass = $class;
+ }
+
+ /**
+ * Retrieve the expected class the response should expect.
+ * @return string class name
+ */
+ public function getExpectedClass()
+ {
+ return $this->expectedClass;
+ }
+
+ /**
+ * @param array $headers The HTTP response headers
+ * to be normalized.
+ */
+ public function setResponseHeaders($headers)
+ {
+ $headers = Google_Utils::normalize($headers);
+ if ($this->responseHeaders) {
+ $headers = array_merge($this->responseHeaders, $headers);
+ }
+
+ $this->responseHeaders = $headers;
+ }
+
+ /**
+ * @param string $key
+ * @return array|boolean Returns the requested HTTP header or
+ * false if unavailable.
+ */
+ public function getResponseHeader($key)
+ {
+ return isset($this->responseHeaders[$key])
+ ? $this->responseHeaders[$key]
+ : false;
+ }
+
+ /**
+ * @param string $responseBody The HTTP response body.
+ */
+ public function setResponseBody($responseBody)
+ {
+ $this->responseBody = $responseBody;
+ }
+
+ /**
+ * @return string $url The request URL.
+ */
+ public function getUrl()
+ {
+ return $this->baseComponent . $this->path .
+ (count($this->queryParams) ?
+ "?" . $this->buildQuery($this->queryParams) :
+ '');
+ }
+
+ /**
+ * @return string $method HTTP Request Method.
+ */
+ public function getRequestMethod()
+ {
+ return $this->requestMethod;
+ }
+
+ /**
+ * @return array $headers HTTP Request Headers.
+ */
+ public function getRequestHeaders()
+ {
+ return $this->requestHeaders;
+ }
+
+ /**
+ * @param string $key
+ * @return array|boolean Returns the requested HTTP header or
+ * false if unavailable.
+ */
+ public function getRequestHeader($key)
+ {
+ return isset($this->requestHeaders[$key])
+ ? $this->requestHeaders[$key]
+ : false;
+ }
+
+ /**
+ * @return string $postBody HTTP Request Body.
+ */
+ public function getPostBody()
+ {
+ return $this->postBody;
+ }
+
+ /**
+ * @param string $url the url to set
+ */
+ public function setUrl($url)
+ {
+ if (substr($url, 0, 4) != 'http') {
+ // Force the path become relative.
+ if (substr($url, 0, 1) !== '/') {
+ $url = '/' . $url;
+ }
+ }
+ $parts = parse_url($url);
+ if (isset($parts['host'])) {
+ $this->baseComponent = sprintf(
+ "%s%s%s",
+ isset($parts['scheme']) ? $parts['scheme'] . "://" : '',
+ isset($parts['host']) ? $parts['host'] : '',
+ isset($parts['port']) ? ":" . $parts['port'] : ''
+ );
+ }
+ $this->path = isset($parts['path']) ? $parts['path'] : '';
+ $this->queryParams = array();
+ if (isset($parts['query'])) {
+ $this->queryParams = $this->parseQuery($parts['query']);
+ }
+ }
+
+ /**
+ * @param string $method Set he HTTP Method and normalize
+ * it to upper-case, as required by HTTP.
+ *
+ */
+ public function setRequestMethod($method)
+ {
+ $this->requestMethod = strtoupper($method);
+ }
+
+ /**
+ * @param array $headers The HTTP request headers
+ * to be set and normalized.
+ */
+ public function setRequestHeaders($headers)
+ {
+ $headers = Google_Utils::normalize($headers);
+ if ($this->requestHeaders) {
+ $headers = array_merge($this->requestHeaders, $headers);
+ }
+ $this->requestHeaders = $headers;
+ }
+
+ /**
+ * @param string $postBody the postBody to set
+ */
+ public function setPostBody($postBody)
+ {
+ $this->postBody = $postBody;
+ }
+
+ /**
+ * Set the User-Agent Header.
+ * @param string $userAgent The User-Agent.
+ */
+ public function setUserAgent($userAgent)
+ {
+ $this->userAgent = $userAgent;
+ if ($this->canGzip) {
+ $this->userAgent = $userAgent . self::GZIP_UA;
+ }
+ }
+
+ /**
+ * @return string The User-Agent.
+ */
+ public function getUserAgent()
+ {
+ return $this->userAgent;
+ }
+
+ /**
+ * Returns a cache key depending on if this was an OAuth signed request
+ * in which case it will use the non-signed url and access key to make this
+ * cache key unique per authenticated user, else use the plain request url
+ * @return string The md5 hash of the request cache key.
+ */
+ public function getCacheKey()
+ {
+ $key = $this->getUrl();
+
+ if (isset($this->accessKey)) {
+ $key .= $this->accessKey;
+ }
+
+ if (isset($this->requestHeaders['authorization'])) {
+ $key .= $this->requestHeaders['authorization'];
+ }
+
+ return md5($key);
+ }
+
+ public function getParsedCacheControl()
+ {
+ $parsed = array();
+ $rawCacheControl = $this->getResponseHeader('cache-control');
+ if ($rawCacheControl) {
+ $rawCacheControl = str_replace(', ', '&', $rawCacheControl);
+ parse_str($rawCacheControl, $parsed);
+ }
+
+ return $parsed;
+ }
+
+ /**
+ * @param string $id
+ * @return string A string representation of the HTTP Request.
+ */
+ public function toBatchString($id)
+ {
+ $str = '';
+ $path = parse_url($this->getUrl(), PHP_URL_PATH) . "?" .
+ http_build_query($this->queryParams);
+ $str .= $this->getRequestMethod() . ' ' . $path . " HTTP/1.1\n";
+
+ foreach ($this->getRequestHeaders() as $key => $val) {
+ $str .= $key . ': ' . $val . "\n";
+ }
+
+ if ($this->getPostBody()) {
+ $str .= "\n";
+ $str .= $this->getPostBody();
+ }
+
+ $headers = '';
+ foreach ($this->batchHeaders as $key => $val) {
+ $headers .= $key . ': ' . $val . "\n";
+ }
+
+ $headers .= "Content-ID: $id\n";
+ $str = $headers . "\n" . $str;
+
+ return $str;
+ }
+
+ /**
+ * Our own version of parse_str that allows for multiple variables
+ * with the same name.
+ * @param $string - the query string to parse
+ */
+ private function parseQuery($string)
+ {
+ $return = array();
+ $parts = explode("&", $string);
+ foreach ($parts as $part) {
+ list($key, $value) = explode('=', $part, 2);
+ $value = urldecode($value);
+ if (isset($return[$key])) {
+ if (!is_array($return[$key])) {
+ $return[$key] = array($return[$key]);
+ }
+ $return[$key][] = $value;
+ } else {
+ $return[$key] = $value;
+ }
+ }
+ return $return;
+ }
+
+ /**
+ * A version of build query that allows for multiple
+ * duplicate keys.
+ * @param $parts array of key value pairs
+ */
+ private function buildQuery($parts)
+ {
+ $return = array();
+ foreach ($parts as $key => $value) {
+ if (is_array($value)) {
+ foreach ($value as $v) {
+ $return[] = urlencode($key) . "=" . urlencode($v);
+ }
+ } else {
+ $return[] = urlencode($key) . "=" . urlencode($value);
+ }
+ }
+ return implode('&', $return);
+ }
+
+ /**
+ * If we're POSTing and have no body to send, we can send the query
+ * parameters in there, which avoids length issues with longer query
+ * params.
+ */
+ public function maybeMoveParametersToBody()
+ {
+ if ($this->getRequestMethod() == "POST" && empty($this->postBody)) {
+ $this->setRequestHeaders(
+ array(
+ "content-type" =>
+ "application/x-www-form-urlencoded; charset=UTF-8"
+ )
+ );
+ $this->setPostBody($this->buildQuery($this->queryParams));
+ $this->queryParams = array();
+ }
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Abstract.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Abstract.php
new file mode 100644
index 00000000000..a4025e874ad
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Abstract.php
@@ -0,0 +1,332 @@
+<?php
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Abstract IO base class
+ */
+
+require_once 'Google/Client.php';
+require_once 'Google/IO/Exception.php';
+require_once 'Google/Http/CacheParser.php';
+require_once 'Google/Http/Request.php';
+
+abstract class Google_IO_Abstract
+{
+ const UNKNOWN_CODE = 0;
+ const FORM_URLENCODED = 'application/x-www-form-urlencoded';
+ private static $CONNECTION_ESTABLISHED_HEADERS = array(
+ "HTTP/1.0 200 Connection established\r\n\r\n",
+ "HTTP/1.1 200 Connection established\r\n\r\n",
+ );
+ private static $ENTITY_HTTP_METHODS = array("POST" => null, "PUT" => null);
+
+ /** @var Google_Client */
+ protected $client;
+
+ public function __construct(Google_Client $client)
+ {
+ $this->client = $client;
+ $timeout = $client->getClassConfig('Google_IO_Abstract', 'request_timeout_seconds');
+ if ($timeout > 0) {
+ $this->setTimeout($timeout);
+ }
+ }
+
+ /**
+ * Executes a Google_Http_Request and returns the resulting populated Google_Http_Request
+ * @param Google_Http_Request $request
+ * @return Google_Http_Request $request
+ */
+ abstract public function executeRequest(Google_Http_Request $request);
+
+ /**
+ * Set options that update the transport implementation's behavior.
+ * @param $options
+ */
+ abstract public function setOptions($options);
+
+ /**
+ * Set the maximum request time in seconds.
+ * @param $timeout in seconds
+ */
+ abstract public function setTimeout($timeout);
+
+ /**
+ * Get the maximum request time in seconds.
+ * @return timeout in seconds
+ */
+ abstract public function getTimeout();
+
+ /**
+ * Test for the presence of a cURL header processing bug
+ *
+ * The cURL bug was present in versions prior to 7.30.0 and caused the header
+ * length to be miscalculated when a "Connection established" header added by
+ * some proxies was present.
+ *
+ * @return boolean
+ */
+ abstract protected function needsQuirk();
+
+ /**
+ * @visible for testing.
+ * Cache the response to an HTTP request if it is cacheable.
+ * @param Google_Http_Request $request
+ * @return bool Returns true if the insertion was successful.
+ * Otherwise, return false.
+ */
+ public function setCachedRequest(Google_Http_Request $request)
+ {
+ // Determine if the request is cacheable.
+ if (Google_Http_CacheParser::isResponseCacheable($request)) {
+ $this->client->getCache()->set($request->getCacheKey(), $request);
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Execute an HTTP Request
+ *
+ * @param Google_HttpRequest $request the http request to be executed
+ * @return Google_HttpRequest http request with the response http code,
+ * response headers and response body filled in
+ * @throws Google_IO_Exception on curl or IO error
+ */
+ public function makeRequest(Google_Http_Request $request)
+ {
+ // First, check to see if we have a valid cached version.
+ $cached = $this->getCachedRequest($request);
+ if ($cached !== false && $cached instanceof Google_Http_Request) {
+ if (!$this->checkMustRevalidateCachedRequest($cached, $request)) {
+ return $cached;
+ }
+ }
+
+ if (array_key_exists($request->getRequestMethod(), self::$ENTITY_HTTP_METHODS)) {
+ $request = $this->processEntityRequest($request);
+ }
+
+ list($responseData, $responseHeaders, $respHttpCode) = $this->executeRequest($request);
+
+ if ($respHttpCode == 304 && $cached) {
+ // If the server responded NOT_MODIFIED, return the cached request.
+ $this->updateCachedRequest($cached, $responseHeaders);
+ return $cached;
+ }
+
+ if (!isset($responseHeaders['Date']) && !isset($responseHeaders['date'])) {
+ $responseHeaders['Date'] = date("r");
+ }
+
+ $request->setResponseHttpCode($respHttpCode);
+ $request->setResponseHeaders($responseHeaders);
+ $request->setResponseBody($responseData);
+ // Store the request in cache (the function checks to see if the request
+ // can actually be cached)
+ $this->setCachedRequest($request);
+ return $request;
+ }
+
+ /**
+ * @visible for testing.
+ * @param Google_Http_Request $request
+ * @return Google_Http_Request|bool Returns the cached object or
+ * false if the operation was unsuccessful.
+ */
+ public function getCachedRequest(Google_Http_Request $request)
+ {
+ if (false === Google_Http_CacheParser::isRequestCacheable($request)) {
+ return false;
+ }
+
+ return $this->client->getCache()->get($request->getCacheKey());
+ }
+
+ /**
+ * @visible for testing
+ * Process an http request that contains an enclosed entity.
+ * @param Google_Http_Request $request
+ * @return Google_Http_Request Processed request with the enclosed entity.
+ */
+ public function processEntityRequest(Google_Http_Request $request)
+ {
+ $postBody = $request->getPostBody();
+ $contentType = $request->getRequestHeader("content-type");
+
+ // Set the default content-type as application/x-www-form-urlencoded.
+ if (false == $contentType) {
+ $contentType = self::FORM_URLENCODED;
+ $request->setRequestHeaders(array('content-type' => $contentType));
+ }
+
+ // Force the payload to match the content-type asserted in the header.
+ if ($contentType == self::FORM_URLENCODED && is_array($postBody)) {
+ $postBody = http_build_query($postBody, '', '&');
+ $request->setPostBody($postBody);
+ }
+
+ // Make sure the content-length header is set.
+ if (!$postBody || is_string($postBody)) {
+ $postsLength = strlen($postBody);
+ $request->setRequestHeaders(array('content-length' => $postsLength));
+ }
+
+ return $request;
+ }
+
+ /**
+ * Check if an already cached request must be revalidated, and if so update
+ * the request with the correct ETag headers.
+ * @param Google_Http_Request $cached A previously cached response.
+ * @param Google_Http_Request $request The outbound request.
+ * return bool If the cached object needs to be revalidated, false if it is
+ * still current and can be re-used.
+ */
+ protected function checkMustRevalidateCachedRequest($cached, $request)
+ {
+ if (Google_Http_CacheParser::mustRevalidate($cached)) {
+ $addHeaders = array();
+ if ($cached->getResponseHeader('etag')) {
+ // [13.3.4] If an entity tag has been provided by the origin server,
+ // we must use that entity tag in any cache-conditional request.
+ $addHeaders['If-None-Match'] = $cached->getResponseHeader('etag');
+ } elseif ($cached->getResponseHeader('date')) {
+ $addHeaders['If-Modified-Since'] = $cached->getResponseHeader('date');
+ }
+
+ $request->setRequestHeaders($addHeaders);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Update a cached request, using the headers from the last response.
+ * @param Google_HttpRequest $cached A previously cached response.
+ * @param mixed Associative array of response headers from the last request.
+ */
+ protected function updateCachedRequest($cached, $responseHeaders)
+ {
+ if (isset($responseHeaders['connection'])) {
+ $hopByHop = array_merge(
+ self::$HOP_BY_HOP,
+ explode(
+ ',',
+ $responseHeaders['connection']
+ )
+ );
+
+ $endToEnd = array();
+ foreach ($hopByHop as $key) {
+ if (isset($responseHeaders[$key])) {
+ $endToEnd[$key] = $responseHeaders[$key];
+ }
+ }
+ $cached->setResponseHeaders($endToEnd);
+ }
+ }
+
+ /**
+ * Used by the IO lib and also the batch processing.
+ *
+ * @param $respData
+ * @param $headerSize
+ * @return array
+ */
+ public function parseHttpResponse($respData, $headerSize)
+ {
+ // check proxy header
+ foreach (self::$CONNECTION_ESTABLISHED_HEADERS as $established_header) {
+ if (stripos($respData, $established_header) !== false) {
+ // existed, remove it
+ $respData = str_ireplace($established_header, '', $respData);
+ // Subtract the proxy header size unless the cURL bug prior to 7.30.0
+ // is present which prevented the proxy header size from being taken into
+ // account.
+ if (!$this->needsQuirk()) {
+ $headerSize -= strlen($established_header);
+ }
+ break;
+ }
+ }
+
+ if ($headerSize) {
+ $responseBody = substr($respData, $headerSize);
+ $responseHeaders = substr($respData, 0, $headerSize);
+ } else {
+ $responseSegments = explode("\r\n\r\n", $respData, 2);
+ $responseHeaders = $responseSegments[0];
+ $responseBody = isset($responseSegments[1]) ? $responseSegments[1] :
+ null;
+ }
+
+ $responseHeaders = $this->getHttpResponseHeaders($responseHeaders);
+ return array($responseHeaders, $responseBody);
+ }
+
+ /**
+ * Parse out headers from raw headers
+ * @param rawHeaders array or string
+ * @return array
+ */
+ public function getHttpResponseHeaders($rawHeaders)
+ {
+ if (is_array($rawHeaders)) {
+ return $this->parseArrayHeaders($rawHeaders);
+ } else {
+ return $this->parseStringHeaders($rawHeaders);
+ }
+ }
+
+ private function parseStringHeaders($rawHeaders)
+ {
+ $headers = array();
+ $responseHeaderLines = explode("\r\n", $rawHeaders);
+ foreach ($responseHeaderLines as $headerLine) {
+ if ($headerLine && strpos($headerLine, ':') !== false) {
+ list($header, $value) = explode(': ', $headerLine, 2);
+ $header = strtolower($header);
+ if (isset($headers[$header])) {
+ $headers[$header] .= "\n" . $value;
+ } else {
+ $headers[$header] = $value;
+ }
+ }
+ }
+ return $headers;
+ }
+
+ private function parseArrayHeaders($rawHeaders)
+ {
+ $header_count = count($rawHeaders);
+ $headers = array();
+
+ for ($i = 0; $i < $header_count; $i++) {
+ $header = $rawHeaders[$i];
+ // Times will have colons in - so we just want the first match.
+ $header_parts = explode(': ', $header, 2);
+ if (count($header_parts) == 2) {
+ $headers[$header_parts[0]] = $header_parts[1];
+ }
+ }
+
+ return $headers;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Curl.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Curl.php
new file mode 100644
index 00000000000..57a057114cc
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Curl.php
@@ -0,0 +1,137 @@
+<?php
+/*
+ * Copyright 2014 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Curl based implementation of Google_IO.
+ *
+ * @author Stuart Langley <slangley@google.com>
+ */
+
+require_once 'Google/IO/Abstract.php';
+
+class Google_IO_Curl extends Google_IO_Abstract
+{
+ // cURL hex representation of version 7.30.0
+ const NO_QUIRK_VERSION = 0x071E00;
+
+ private $options = array();
+ /**
+ * Execute an HTTP Request
+ *
+ * @param Google_HttpRequest $request the http request to be executed
+ * @return Google_HttpRequest http request with the response http code,
+ * response headers and response body filled in
+ * @throws Google_IO_Exception on curl or IO error
+ */
+ public function executeRequest(Google_Http_Request $request)
+ {
+ $curl = curl_init();
+
+ if ($request->getPostBody()) {
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $request->getPostBody());
+ }
+
+ $requestHeaders = $request->getRequestHeaders();
+ if ($requestHeaders && is_array($requestHeaders)) {
+ $curlHeaders = array();
+ foreach ($requestHeaders as $k => $v) {
+ $curlHeaders[] = "$k: $v";
+ }
+ curl_setopt($curl, CURLOPT_HTTPHEADER, $curlHeaders);
+ }
+
+ curl_setopt($curl, CURLOPT_URL, $request->getUrl());
+
+ curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $request->getRequestMethod());
+ curl_setopt($curl, CURLOPT_USERAGENT, $request->getUserAgent());
+
+ curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
+ curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($curl, CURLOPT_HEADER, true);
+
+ if ($request->canGzip()) {
+ curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
+ }
+
+ foreach ($this->options as $key => $var) {
+ curl_setopt($curl, $key, $var);
+ }
+
+ if (!isset($this->options[CURLOPT_CAINFO])) {
+ curl_setopt($curl, CURLOPT_CAINFO, dirname(__FILE__) . '/cacerts.pem');
+ }
+
+ $response = curl_exec($curl);
+ if ($response === false) {
+ throw new Google_IO_Exception(curl_error($curl));
+ }
+ $headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
+
+ list($responseHeaders, $responseBody) = $this->parseHttpResponse($response, $headerSize);
+
+ $responseCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
+
+ return array($responseBody, $responseHeaders, $responseCode);
+ }
+
+ /**
+ * Set options that update the transport implementation's behavior.
+ * @param $options
+ */
+ public function setOptions($options)
+ {
+ $this->options = $options + $this->options;
+ }
+
+ /**
+ * Set the maximum request time in seconds.
+ * @param $timeout in seconds
+ */
+ public function setTimeout($timeout)
+ {
+ // Since this timeout is really for putting a bound on the time
+ // we'll set them both to the same. If you need to specify a longer
+ // CURLOPT_TIMEOUT, or a tigher CONNECTTIMEOUT, the best thing to
+ // do is use the setOptions method for the values individually.
+ $this->options[CURLOPT_CONNECTTIMEOUT] = $timeout;
+ $this->options[CURLOPT_TIMEOUT] = $timeout;
+ }
+
+ /**
+ * Get the maximum request time in seconds.
+ * @return timeout in seconds
+ */
+ public function getTimeout()
+ {
+ return $this->options[CURLOPT_TIMEOUT];
+ }
+
+ /**
+ * Test for the presence of a cURL header processing bug
+ *
+ * {@inheritDoc}
+ *
+ * @return boolean
+ */
+ protected function needsQuirk()
+ {
+ $ver = curl_version();
+ $versionNum = $ver['version_number'];
+ return $versionNum < Google_IO_Curl::NO_QUIRK_VERSION;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Exception.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Exception.php
new file mode 100644
index 00000000000..28c2d8ce645
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Exception.php
@@ -0,0 +1,22 @@
+<?php
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once 'Google/Exception.php';
+
+class Google_IO_Exception extends Google_Exception
+{
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Stream.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Stream.php
new file mode 100644
index 00000000000..917578d87a0
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/Stream.php
@@ -0,0 +1,211 @@
+<?php
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Http Streams based implementation of Google_IO.
+ *
+ * @author Stuart Langley <slangley@google.com>
+ */
+
+require_once 'Google/IO/Abstract.php';
+
+class Google_IO_Stream extends Google_IO_Abstract
+{
+ const TIMEOUT = "timeout";
+ const ZLIB = "compress.zlib://";
+ private $options = array();
+ private $trappedErrorNumber;
+ private $trappedErrorString;
+
+ private static $DEFAULT_HTTP_CONTEXT = array(
+ "follow_location" => 0,
+ "ignore_errors" => 1,
+ );
+
+ private static $DEFAULT_SSL_CONTEXT = array(
+ "verify_peer" => true,
+ );
+
+ /**
+ * Execute an HTTP Request
+ *
+ * @param Google_HttpRequest $request the http request to be executed
+ * @return Google_HttpRequest http request with the response http code,
+ * response headers and response body filled in
+ * @throws Google_IO_Exception on curl or IO error
+ */
+ public function executeRequest(Google_Http_Request $request)
+ {
+ $default_options = stream_context_get_options(stream_context_get_default());
+
+ $requestHttpContext = array_key_exists('http', $default_options) ?
+ $default_options['http'] : array();
+
+ if ($request->getPostBody()) {
+ $requestHttpContext["content"] = $request->getPostBody();
+ }
+
+ $requestHeaders = $request->getRequestHeaders();
+ if ($requestHeaders && is_array($requestHeaders)) {
+ $headers = "";
+ foreach ($requestHeaders as $k => $v) {
+ $headers .= "$k: $v\r\n";
+ }
+ $requestHttpContext["header"] = $headers;
+ }
+
+ $requestHttpContext["method"] = $request->getRequestMethod();
+ $requestHttpContext["user_agent"] = $request->getUserAgent();
+
+ $requestSslContext = array_key_exists('ssl', $default_options) ?
+ $default_options['ssl'] : array();
+
+ if (!array_key_exists("cafile", $requestSslContext)) {
+ $requestSslContext["cafile"] = dirname(__FILE__) . '/cacerts.pem';
+ }
+
+ $options = array(
+ "http" => array_merge(
+ self::$DEFAULT_HTTP_CONTEXT,
+ $requestHttpContext
+ ),
+ "ssl" => array_merge(
+ self::$DEFAULT_SSL_CONTEXT,
+ $requestSslContext
+ )
+ );
+
+ $context = stream_context_create($options);
+
+ $url = $request->getUrl();
+
+ if ($request->canGzip()) {
+ $url = self::ZLIB . $url;
+ }
+
+ // We are trapping any thrown errors in this method only and
+ // throwing an exception.
+ $this->trappedErrorNumber = null;
+ $this->trappedErrorString = null;
+
+ // START - error trap.
+ set_error_handler(array($this, 'trapError'));
+ $fh = fopen($url, 'r', false, $context);
+ restore_error_handler();
+ // END - error trap.
+
+ if ($this->trappedErrorNumber) {
+ throw new Google_IO_Exception(
+ sprintf(
+ "HTTP Error: Unable to connect: '%s'",
+ $this->trappedErrorString
+ ),
+ $this->trappedErrorNumber
+ );
+ }
+
+ $response_data = false;
+ $respHttpCode = self::UNKNOWN_CODE;
+ if ($fh) {
+ if (isset($this->options[self::TIMEOUT])) {
+ stream_set_timeout($fh, $this->options[self::TIMEOUT]);
+ }
+
+ $response_data = stream_get_contents($fh);
+ fclose($fh);
+
+ $respHttpCode = $this->getHttpResponseCode($http_response_header);
+ }
+
+ if (false === $response_data) {
+ throw new Google_IO_Exception(
+ sprintf(
+ "HTTP Error: Unable to connect: '%s'",
+ $respHttpCode
+ ),
+ $respHttpCode
+ );
+ }
+
+ $responseHeaders = $this->getHttpResponseHeaders($http_response_header);
+
+ return array($response_data, $responseHeaders, $respHttpCode);
+ }
+
+ /**
+ * Set options that update the transport implementation's behavior.
+ * @param $options
+ */
+ public function setOptions($options)
+ {
+ $this->options = $options + $this->options;
+ }
+
+ /**
+ * Method to handle errors, used for error handling around
+ * stream connection methods.
+ */
+ public function trapError($errno, $errstr)
+ {
+ $this->trappedErrorNumber = $errno;
+ $this->trappedErrorString = $errstr;
+ }
+
+ /**
+ * Set the maximum request time in seconds.
+ * @param $timeout in seconds
+ */
+ public function setTimeout($timeout)
+ {
+ $this->options[self::TIMEOUT] = $timeout;
+ }
+
+ /**
+ * Get the maximum request time in seconds.
+ * @return timeout in seconds
+ */
+ public function getTimeout()
+ {
+ return $this->options[self::TIMEOUT];
+ }
+
+ /**
+ * Test for the presence of a cURL header processing bug
+ *
+ * {@inheritDoc}
+ *
+ * @return boolean
+ */
+ protected function needsQuirk()
+ {
+ return false;
+ }
+
+ protected function getHttpResponseCode($response_headers)
+ {
+ $header_count = count($response_headers);
+
+ for ($i = 0; $i < $header_count; $i++) {
+ $header = $response_headers[$i];
+ if (strncasecmp("HTTP", $header, strlen("HTTP")) == 0) {
+ $response = explode(' ', $header);
+ return $response[1];
+ }
+ }
+ return self::UNKNOWN_CODE;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/io/cacerts.pem b/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/cacerts.pem
index da36ed1ba6d..79a49289cbe 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/io/cacerts.pem
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/IO/cacerts.pem
@@ -712,3 +712,27 @@ IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
-----END CERTIFICATE-----
+GeoTrust Global CA
+==================
+
+-----BEGIN CERTIFICATE-----
+MIIDfTCCAuagAwIBAgIDErvmMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT
+MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0
+aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDIwNTIxMDQwMDAwWhcNMTgwODIxMDQwMDAw
+WjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UE
+AxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9m
+OSm9BXiLnTjoBbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIu
+T8rxh0PBFpVXLVDviS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6c
+JmTM386DGXHKTubU1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmR
+Cw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5asz
+PeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo4HwMIHtMB8GA1UdIwQYMBaAFEjm
+aPkr0rKV10fYIyAQTzOYkJ/UMB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrM
+TjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjA6BgNVHR8EMzAxMC+g
+LaArhilodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL3NlY3VyZWNhLmNybDBO
+BgNVHSAERzBFMEMGBFUdIAAwOzA5BggrBgEFBQcCARYtaHR0cHM6Ly93d3cuZ2Vv
+dHJ1c3QuY29tL3Jlc291cmNlcy9yZXBvc2l0b3J5MA0GCSqGSIb3DQEBBQUAA4GB
+AHbhEm5OSxYShjAGsoEIz/AIx8dxfmbuwu3UOx//8PDITtZDOLC5MH0Y0FWDomrL
+NhGc6Ehmo21/uBPUR/6LWlxz/K7ZGzIZOKuXNBSqltLroxwUCEm2u+WR74M26x1W
+b8ravHNjkOR/ez4iyz0H7V84dJzjA1BOoa+Y7mHyhD8S
+-----END CERTIFICATE-----
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Model.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Model.php
new file mode 100644
index 00000000000..2bb9a333d66
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Model.php
@@ -0,0 +1,265 @@
+<?php
+/*
+ * Copyright 2011 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * This class defines attributes, valid values, and usage which is generated
+ * from a given json schema.
+ * http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5
+ *
+ * @author Chirag Shah <chirags@google.com>
+ *
+ */
+class Google_Model implements ArrayAccess
+{
+ protected $internal_gapi_mappings = array();
+ protected $modelData = array();
+ protected $processed = array();
+
+ /**
+ * Polymorphic - accepts a variable number of arguments dependent
+ * on the type of the model subclass.
+ */
+ public function __construct()
+ {
+ if (func_num_args() == 1 && is_array(func_get_arg(0))) {
+ // Initialize the model with the array's contents.
+ $array = func_get_arg(0);
+ $this->mapTypes($array);
+ }
+ }
+
+ public function __get($key)
+ {
+ $keyTypeName = $this->keyType($key);
+ $keyDataType = $this->dataType($key);
+ if (isset($this->$keyTypeName) && !isset($this->processed[$key])) {
+ if (isset($this->modelData[$key])) {
+ $val = $this->modelData[$key];
+ } else if (isset($this->$keyDataType) &&
+ ($this->$keyDataType == 'array' || $this->$keyDataType == 'map')) {
+ $val = array();
+ } else {
+ $val = null;
+ }
+
+ if ($this->isAssociativeArray($val)) {
+ if (isset($this->$keyDataType) && 'map' == $this->$keyDataType) {
+ foreach ($val as $arrayKey => $arrayItem) {
+ $this->modelData[$key][$arrayKey] =
+ $this->createObjectFromName($keyTypeName, $arrayItem);
+ }
+ } else {
+ $this->modelData[$key] = $this->createObjectFromName($keyTypeName, $val);
+ }
+ } else if (is_array($val)) {
+ $arrayObject = array();
+ foreach ($val as $arrayIndex => $arrayItem) {
+ $arrayObject[$arrayIndex] =
+ $this->createObjectFromName($keyTypeName, $arrayItem);
+ }
+ $this->modelData[$key] = $arrayObject;
+ }
+ $this->processed[$key] = true;
+ }
+
+ return isset($this->modelData[$key]) ? $this->modelData[$key] : null;
+ }
+
+ /**
+ * Initialize this object's properties from an array.
+ *
+ * @param array $array Used to seed this object's properties.
+ * @return void
+ */
+ protected function mapTypes($array)
+ {
+ // Hard initilise simple types, lazy load more complex ones.
+ foreach ($array as $key => $val) {
+ if ( !property_exists($this, $this->keyType($key)) &&
+ property_exists($this, $key)) {
+ $this->$key = $val;
+ unset($array[$key]);
+ } elseif (property_exists($this, $camelKey = Google_Utils::camelCase($key))) {
+ // This checks if property exists as camelCase, leaving it in array as snake_case
+ // in case of backwards compatibility issues.
+ $this->$camelKey = $val;
+ }
+ }
+ $this->modelData = $array;
+ }
+
+ /**
+ * Create a simplified object suitable for straightforward
+ * conversion to JSON. This is relatively expensive
+ * due to the usage of reflection, but shouldn't be called
+ * a whole lot, and is the most straightforward way to filter.
+ */
+ public function toSimpleObject()
+ {
+ $object = new stdClass();
+
+ // Process all other data.
+ foreach ($this->modelData as $key => $val) {
+ $result = $this->getSimpleValue($val);
+ if ($result !== null) {
+ $object->$key = $result;
+ }
+ }
+
+ // Process all public properties.
+ $reflect = new ReflectionObject($this);
+ $props = $reflect->getProperties(ReflectionProperty::IS_PUBLIC);
+ foreach ($props as $member) {
+ $name = $member->getName();
+ $result = $this->getSimpleValue($this->$name);
+ if ($result !== null) {
+ $name = $this->getMappedName($name);
+ $object->$name = $result;
+ }
+ }
+
+ return $object;
+ }
+
+ /**
+ * Handle different types of values, primarily
+ * other objects and map and array data types.
+ */
+ private function getSimpleValue($value)
+ {
+ if ($value instanceof Google_Model) {
+ return $value->toSimpleObject();
+ } else if (is_array($value)) {
+ $return = array();
+ foreach ($value as $key => $a_value) {
+ $a_value = $this->getSimpleValue($a_value);
+ if ($a_value !== null) {
+ $key = $this->getMappedName($key);
+ $return[$key] = $a_value;
+ }
+ }
+ return $return;
+ }
+ return $value;
+ }
+
+ /**
+ * If there is an internal name mapping, use that.
+ */
+ private function getMappedName($key)
+ {
+ if (isset($this->internal_gapi_mappings) &&
+ isset($this->internal_gapi_mappings[$key])) {
+ $key = $this->internal_gapi_mappings[$key];
+ }
+ return $key;
+ }
+
+ /**
+ * Returns true only if the array is associative.
+ * @param array $array
+ * @return bool True if the array is associative.
+ */
+ protected function isAssociativeArray($array)
+ {
+ if (!is_array($array)) {
+ return false;
+ }
+ $keys = array_keys($array);
+ foreach ($keys as $key) {
+ if (is_string($key)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Given a variable name, discover its type.
+ *
+ * @param $name
+ * @param $item
+ * @return object The object from the item.
+ */
+ private function createObjectFromName($name, $item)
+ {
+ $type = $this->$name;
+ return new $type($item);
+ }
+
+ /**
+ * Verify if $obj is an array.
+ * @throws Google_Exception Thrown if $obj isn't an array.
+ * @param array $obj Items that should be validated.
+ * @param string $method Method expecting an array as an argument.
+ */
+ public function assertIsArray($obj, $method)
+ {
+ if ($obj && !is_array($obj)) {
+ throw new Google_Exception(
+ "Incorrect parameter type passed to $method(). Expected an array."
+ );
+ }
+ }
+
+ public function offsetExists($offset)
+ {
+ return isset($this->$offset) || isset($this->modelData[$offset]);
+ }
+
+ public function offsetGet($offset)
+ {
+ return isset($this->$offset) ?
+ $this->$offset :
+ $this->__get($offset);
+ }
+
+ public function offsetSet($offset, $value)
+ {
+ if (property_exists($this, $offset)) {
+ $this->$offset = $value;
+ } else {
+ $this->modelData[$offset] = $value;
+ $this->processed[$offset] = true;
+ }
+ }
+
+ public function offsetUnset($offset)
+ {
+ unset($this->modelData[$offset]);
+ }
+
+ protected function keyType($key)
+ {
+ return $key . "Type";
+ }
+
+ protected function dataType($key)
+ {
+ return $key . "DataType";
+ }
+
+ public function __isset($key)
+ {
+ return isset($this->modelData[$key]);
+ }
+
+ public function __unset($key)
+ {
+ unset($this->modelData[$key]);
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Service.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Service.php
new file mode 100644
index 00000000000..2e0b6c52282
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Service.php
@@ -0,0 +1,39 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class Google_Service
+{
+ public $version;
+ public $servicePath;
+ public $availableScopes;
+ public $resource;
+ private $client;
+
+ public function __construct(Google_Client $client)
+ {
+ $this->client = $client;
+ }
+
+ /**
+ * Return the associated Google_Client class.
+ * @return Google_Client
+ */
+ public function getClient()
+ {
+ return $this->client;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Drive.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Drive.php
new file mode 100644
index 00000000000..291a6091232
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Drive.php
@@ -0,0 +1,6136 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+/**
+ * Service definition for Drive (v2).
+ *
+ * <p>
+ * The API to interact with Drive.
+ * </p>
+ *
+ * <p>
+ * For more information about this service, see the API
+ * <a href="https://developers.google.com/drive/" target="_blank">Documentation</a>
+ * </p>
+ *
+ * @author Google, Inc.
+ */
+class Google_Service_Drive extends Google_Service
+{
+ /** View and manage the files and documents in your Google Drive. */
+ const DRIVE = "https://www.googleapis.com/auth/drive";
+ /** View and manage its own configuration data in your Google Drive. */
+ const DRIVE_APPDATA = "https://www.googleapis.com/auth/drive.appdata";
+ /** View your Google Drive apps. */
+ const DRIVE_APPS_READONLY = "https://www.googleapis.com/auth/drive.apps.readonly";
+ /** View and manage Google Drive files that you have opened or created with this app. */
+ const DRIVE_FILE = "https://www.googleapis.com/auth/drive.file";
+ /** View metadata for files and documents in your Google Drive. */
+ const DRIVE_METADATA_READONLY = "https://www.googleapis.com/auth/drive.metadata.readonly";
+ /** View the files and documents in your Google Drive. */
+ const DRIVE_READONLY = "https://www.googleapis.com/auth/drive.readonly";
+ /** Modify your Google Apps Script scripts' behavior. */
+ const DRIVE_SCRIPTS = "https://www.googleapis.com/auth/drive.scripts";
+
+ public $about;
+ public $apps;
+ public $changes;
+ public $channels;
+ public $children;
+ public $comments;
+ public $files;
+ public $parents;
+ public $permissions;
+ public $properties;
+ public $realtime;
+ public $replies;
+ public $revisions;
+
+
+ /**
+ * Constructs the internal representation of the Drive service.
+ *
+ * @param Google_Client $client
+ */
+ public function __construct(Google_Client $client)
+ {
+ parent::__construct($client);
+ $this->servicePath = 'drive/v2/';
+ $this->version = 'v2';
+ $this->serviceName = 'drive';
+
+ $this->about = new Google_Service_Drive_About_Resource(
+ $this,
+ $this->serviceName,
+ 'about',
+ array(
+ 'methods' => array(
+ 'get' => array(
+ 'path' => 'about',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'includeSubscribed' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'maxChangeIdCount' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'startChangeId' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->apps = new Google_Service_Drive_Apps_Resource(
+ $this,
+ $this->serviceName,
+ 'apps',
+ array(
+ 'methods' => array(
+ 'get' => array(
+ 'path' => 'apps/{appId}',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'appId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'list' => array(
+ 'path' => 'apps',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'languageCode' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'appFilterExtensions' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'appFilterMimeTypes' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->changes = new Google_Service_Drive_Changes_Resource(
+ $this,
+ $this->serviceName,
+ 'changes',
+ array(
+ 'methods' => array(
+ 'get' => array(
+ 'path' => 'changes/{changeId}',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'changeId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'list' => array(
+ 'path' => 'changes',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'includeSubscribed' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'startChangeId' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'includeDeleted' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'maxResults' => array(
+ 'location' => 'query',
+ 'type' => 'integer',
+ ),
+ 'pageToken' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),'watch' => array(
+ 'path' => 'changes/watch',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'includeSubscribed' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'startChangeId' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'includeDeleted' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'maxResults' => array(
+ 'location' => 'query',
+ 'type' => 'integer',
+ ),
+ 'pageToken' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->channels = new Google_Service_Drive_Channels_Resource(
+ $this,
+ $this->serviceName,
+ 'channels',
+ array(
+ 'methods' => array(
+ 'stop' => array(
+ 'path' => 'channels/stop',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(),
+ ),
+ )
+ )
+ );
+ $this->children = new Google_Service_Drive_Children_Resource(
+ $this,
+ $this->serviceName,
+ 'children',
+ array(
+ 'methods' => array(
+ 'delete' => array(
+ 'path' => 'files/{folderId}/children/{childId}',
+ 'httpMethod' => 'DELETE',
+ 'parameters' => array(
+ 'folderId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'childId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'get' => array(
+ 'path' => 'files/{folderId}/children/{childId}',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'folderId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'childId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'insert' => array(
+ 'path' => 'files/{folderId}/children',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'folderId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'list' => array(
+ 'path' => 'files/{folderId}/children',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'folderId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'q' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'pageToken' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'maxResults' => array(
+ 'location' => 'query',
+ 'type' => 'integer',
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->comments = new Google_Service_Drive_Comments_Resource(
+ $this,
+ $this->serviceName,
+ 'comments',
+ array(
+ 'methods' => array(
+ 'delete' => array(
+ 'path' => 'files/{fileId}/comments/{commentId}',
+ 'httpMethod' => 'DELETE',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'commentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'get' => array(
+ 'path' => 'files/{fileId}/comments/{commentId}',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'commentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'includeDeleted' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ ),
+ ),'insert' => array(
+ 'path' => 'files/{fileId}/comments',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'list' => array(
+ 'path' => 'files/{fileId}/comments',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'pageToken' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'updatedMin' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'includeDeleted' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'maxResults' => array(
+ 'location' => 'query',
+ 'type' => 'integer',
+ ),
+ ),
+ ),'patch' => array(
+ 'path' => 'files/{fileId}/comments/{commentId}',
+ 'httpMethod' => 'PATCH',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'commentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'update' => array(
+ 'path' => 'files/{fileId}/comments/{commentId}',
+ 'httpMethod' => 'PUT',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'commentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->files = new Google_Service_Drive_Files_Resource(
+ $this,
+ $this->serviceName,
+ 'files',
+ array(
+ 'methods' => array(
+ 'copy' => array(
+ 'path' => 'files/{fileId}/copy',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'convert' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'ocrLanguage' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'visibility' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'pinned' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'ocr' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'timedTextTrackName' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'timedTextLanguage' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),'delete' => array(
+ 'path' => 'files/{fileId}',
+ 'httpMethod' => 'DELETE',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'emptyTrash' => array(
+ 'path' => 'files/trash',
+ 'httpMethod' => 'DELETE',
+ 'parameters' => array(),
+ ),'get' => array(
+ 'path' => 'files/{fileId}',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'updateViewedDate' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'projection' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),'insert' => array(
+ 'path' => 'files',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'convert' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'useContentAsIndexableText' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'ocrLanguage' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'visibility' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'pinned' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'ocr' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'timedTextTrackName' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'timedTextLanguage' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),'list' => array(
+ 'path' => 'files',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'q' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'pageToken' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'corpus' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'projection' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'maxResults' => array(
+ 'location' => 'query',
+ 'type' => 'integer',
+ ),
+ ),
+ ),'patch' => array(
+ 'path' => 'files/{fileId}',
+ 'httpMethod' => 'PATCH',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'addParents' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'updateViewedDate' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'removeParents' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'setModifiedDate' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'convert' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'useContentAsIndexableText' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'ocrLanguage' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'pinned' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'newRevision' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'ocr' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'timedTextLanguage' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'timedTextTrackName' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),'touch' => array(
+ 'path' => 'files/{fileId}/touch',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'trash' => array(
+ 'path' => 'files/{fileId}/trash',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'untrash' => array(
+ 'path' => 'files/{fileId}/untrash',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'update' => array(
+ 'path' => 'files/{fileId}',
+ 'httpMethod' => 'PUT',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'addParents' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'updateViewedDate' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'removeParents' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'setModifiedDate' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'convert' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'useContentAsIndexableText' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'ocrLanguage' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'pinned' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'newRevision' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'ocr' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'timedTextLanguage' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'timedTextTrackName' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),'watch' => array(
+ 'path' => 'files/{fileId}/watch',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'updateViewedDate' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'projection' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->parents = new Google_Service_Drive_Parents_Resource(
+ $this,
+ $this->serviceName,
+ 'parents',
+ array(
+ 'methods' => array(
+ 'delete' => array(
+ 'path' => 'files/{fileId}/parents/{parentId}',
+ 'httpMethod' => 'DELETE',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'parentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'get' => array(
+ 'path' => 'files/{fileId}/parents/{parentId}',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'parentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'insert' => array(
+ 'path' => 'files/{fileId}/parents',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'list' => array(
+ 'path' => 'files/{fileId}/parents',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->permissions = new Google_Service_Drive_Permissions_Resource(
+ $this,
+ $this->serviceName,
+ 'permissions',
+ array(
+ 'methods' => array(
+ 'delete' => array(
+ 'path' => 'files/{fileId}/permissions/{permissionId}',
+ 'httpMethod' => 'DELETE',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'permissionId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'get' => array(
+ 'path' => 'files/{fileId}/permissions/{permissionId}',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'permissionId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'getIdForEmail' => array(
+ 'path' => 'permissionIds/{email}',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'email' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'insert' => array(
+ 'path' => 'files/{fileId}/permissions',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'emailMessage' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'sendNotificationEmails' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ ),
+ ),'list' => array(
+ 'path' => 'files/{fileId}/permissions',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'patch' => array(
+ 'path' => 'files/{fileId}/permissions/{permissionId}',
+ 'httpMethod' => 'PATCH',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'permissionId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'transferOwnership' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ ),
+ ),'update' => array(
+ 'path' => 'files/{fileId}/permissions/{permissionId}',
+ 'httpMethod' => 'PUT',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'permissionId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'transferOwnership' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->properties = new Google_Service_Drive_Properties_Resource(
+ $this,
+ $this->serviceName,
+ 'properties',
+ array(
+ 'methods' => array(
+ 'delete' => array(
+ 'path' => 'files/{fileId}/properties/{propertyKey}',
+ 'httpMethod' => 'DELETE',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'propertyKey' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'visibility' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),'get' => array(
+ 'path' => 'files/{fileId}/properties/{propertyKey}',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'propertyKey' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'visibility' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),'insert' => array(
+ 'path' => 'files/{fileId}/properties',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'list' => array(
+ 'path' => 'files/{fileId}/properties',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'patch' => array(
+ 'path' => 'files/{fileId}/properties/{propertyKey}',
+ 'httpMethod' => 'PATCH',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'propertyKey' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'visibility' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),'update' => array(
+ 'path' => 'files/{fileId}/properties/{propertyKey}',
+ 'httpMethod' => 'PUT',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'propertyKey' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'visibility' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->realtime = new Google_Service_Drive_Realtime_Resource(
+ $this,
+ $this->serviceName,
+ 'realtime',
+ array(
+ 'methods' => array(
+ 'get' => array(
+ 'path' => 'files/{fileId}/realtime',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'revision' => array(
+ 'location' => 'query',
+ 'type' => 'integer',
+ ),
+ ),
+ ),'update' => array(
+ 'path' => 'files/{fileId}/realtime',
+ 'httpMethod' => 'PUT',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'baseRevision' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->replies = new Google_Service_Drive_Replies_Resource(
+ $this,
+ $this->serviceName,
+ 'replies',
+ array(
+ 'methods' => array(
+ 'delete' => array(
+ 'path' => 'files/{fileId}/comments/{commentId}/replies/{replyId}',
+ 'httpMethod' => 'DELETE',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'commentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'replyId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'get' => array(
+ 'path' => 'files/{fileId}/comments/{commentId}/replies/{replyId}',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'commentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'replyId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'includeDeleted' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ ),
+ ),'insert' => array(
+ 'path' => 'files/{fileId}/comments/{commentId}/replies',
+ 'httpMethod' => 'POST',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'commentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'list' => array(
+ 'path' => 'files/{fileId}/comments/{commentId}/replies',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'commentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'pageToken' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'includeDeleted' => array(
+ 'location' => 'query',
+ 'type' => 'boolean',
+ ),
+ 'maxResults' => array(
+ 'location' => 'query',
+ 'type' => 'integer',
+ ),
+ ),
+ ),'patch' => array(
+ 'path' => 'files/{fileId}/comments/{commentId}/replies/{replyId}',
+ 'httpMethod' => 'PATCH',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'commentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'replyId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'update' => array(
+ 'path' => 'files/{fileId}/comments/{commentId}/replies/{replyId}',
+ 'httpMethod' => 'PUT',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'commentId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'replyId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->revisions = new Google_Service_Drive_Revisions_Resource(
+ $this,
+ $this->serviceName,
+ 'revisions',
+ array(
+ 'methods' => array(
+ 'delete' => array(
+ 'path' => 'files/{fileId}/revisions/{revisionId}',
+ 'httpMethod' => 'DELETE',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'revisionId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'get' => array(
+ 'path' => 'files/{fileId}/revisions/{revisionId}',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'revisionId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'list' => array(
+ 'path' => 'files/{fileId}/revisions',
+ 'httpMethod' => 'GET',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'patch' => array(
+ 'path' => 'files/{fileId}/revisions/{revisionId}',
+ 'httpMethod' => 'PATCH',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'revisionId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),'update' => array(
+ 'path' => 'files/{fileId}/revisions/{revisionId}',
+ 'httpMethod' => 'PUT',
+ 'parameters' => array(
+ 'fileId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'revisionId' => array(
+ 'location' => 'path',
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ }
+}
+
+
+/**
+ * The "about" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $about = $driveService->about;
+ * </code>
+ */
+class Google_Service_Drive_About_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Gets the information about the current user along with Drive API settings
+ * (about.get)
+ *
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param bool includeSubscribed
+ * When calculating the number of remaining change IDs, whether to include public files the user
+ * has opened and shared files. When set to false, this counts only change IDs for owned files and
+ * any shared or public files that the user has explicitly added to a folder they own.
+ * @opt_param string maxChangeIdCount
+ * Maximum number of remaining change IDs to count
+ * @opt_param string startChangeId
+ * Change ID to start counting from when calculating number of remaining change IDs
+ * @return Google_Service_Drive_About
+ */
+ public function get($optParams = array())
+ {
+ $params = array();
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params), "Google_Service_Drive_About");
+ }
+}
+
+/**
+ * The "apps" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $apps = $driveService->apps;
+ * </code>
+ */
+class Google_Service_Drive_Apps_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Gets a specific app. (apps.get)
+ *
+ * @param string $appId
+ * The ID of the app.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_App
+ */
+ public function get($appId, $optParams = array())
+ {
+ $params = array('appId' => $appId);
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params), "Google_Service_Drive_App");
+ }
+ /**
+ * Lists a user's installed apps. (apps.listApps)
+ *
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string languageCode
+ * A language or locale code, as defined by BCP 47, with some extensions from Unicode's LDML format
+ * (http://www.unicode.org/reports/tr35/).
+ * @opt_param string appFilterExtensions
+ * A comma-separated list of file extensions for open with filtering. All apps within the given app
+ * query scope which can open any of the given file extensions will be included in the response. If
+ * appFilterMimeTypes are provided as well, the result is a union of the two resulting app lists.
+ * @opt_param string appFilterMimeTypes
+ * A comma-separated list of MIME types for open with filtering. All apps within the given app
+ * query scope which can open any of the given MIME types will be included in the response. If
+ * appFilterExtensions are provided as well, the result is a union of the two resulting app lists.
+ * @return Google_Service_Drive_AppList
+ */
+ public function listApps($optParams = array())
+ {
+ $params = array();
+ $params = array_merge($params, $optParams);
+ return $this->call('list', array($params), "Google_Service_Drive_AppList");
+ }
+}
+
+/**
+ * The "changes" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $changes = $driveService->changes;
+ * </code>
+ */
+class Google_Service_Drive_Changes_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Gets a specific change. (changes.get)
+ *
+ * @param string $changeId
+ * The ID of the change.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_Change
+ */
+ public function get($changeId, $optParams = array())
+ {
+ $params = array('changeId' => $changeId);
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params), "Google_Service_Drive_Change");
+ }
+ /**
+ * Lists the changes for a user. (changes.listChanges)
+ *
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param bool includeSubscribed
+ * Whether to include public files the user has opened and shared files. When set to false, the
+ * list only includes owned files plus any shared or public files the user has explicitly added to
+ * a folder they own.
+ * @opt_param string startChangeId
+ * Change ID to start listing changes from.
+ * @opt_param bool includeDeleted
+ * Whether to include deleted items.
+ * @opt_param int maxResults
+ * Maximum number of changes to return.
+ * @opt_param string pageToken
+ * Page token for changes.
+ * @return Google_Service_Drive_ChangeList
+ */
+ public function listChanges($optParams = array())
+ {
+ $params = array();
+ $params = array_merge($params, $optParams);
+ return $this->call('list', array($params), "Google_Service_Drive_ChangeList");
+ }
+ /**
+ * Subscribe to changes for a user. (changes.watch)
+ *
+ * @param Google_Channel $postBody
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param bool includeSubscribed
+ * Whether to include public files the user has opened and shared files. When set to false, the
+ * list only includes owned files plus any shared or public files the user has explicitly added to
+ * a folder they own.
+ * @opt_param string startChangeId
+ * Change ID to start listing changes from.
+ * @opt_param bool includeDeleted
+ * Whether to include deleted items.
+ * @opt_param int maxResults
+ * Maximum number of changes to return.
+ * @opt_param string pageToken
+ * Page token for changes.
+ * @return Google_Service_Drive_Channel
+ */
+ public function watch(Google_Service_Drive_Channel $postBody, $optParams = array())
+ {
+ $params = array('postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('watch', array($params), "Google_Service_Drive_Channel");
+ }
+}
+
+/**
+ * The "channels" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $channels = $driveService->channels;
+ * </code>
+ */
+class Google_Service_Drive_Channels_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Stop watching resources through this channel (channels.stop)
+ *
+ * @param Google_Channel $postBody
+ * @param array $optParams Optional parameters.
+ */
+ public function stop(Google_Service_Drive_Channel $postBody, $optParams = array())
+ {
+ $params = array('postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('stop', array($params));
+ }
+}
+
+/**
+ * The "children" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $children = $driveService->children;
+ * </code>
+ */
+class Google_Service_Drive_Children_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Removes a child from a folder. (children.delete)
+ *
+ * @param string $folderId
+ * The ID of the folder.
+ * @param string $childId
+ * The ID of the child.
+ * @param array $optParams Optional parameters.
+ */
+ public function delete($folderId, $childId, $optParams = array())
+ {
+ $params = array('folderId' => $folderId, 'childId' => $childId);
+ $params = array_merge($params, $optParams);
+ return $this->call('delete', array($params));
+ }
+ /**
+ * Gets a specific child reference. (children.get)
+ *
+ * @param string $folderId
+ * The ID of the folder.
+ * @param string $childId
+ * The ID of the child.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_ChildReference
+ */
+ public function get($folderId, $childId, $optParams = array())
+ {
+ $params = array('folderId' => $folderId, 'childId' => $childId);
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params), "Google_Service_Drive_ChildReference");
+ }
+ /**
+ * Inserts a file into a folder. (children.insert)
+ *
+ * @param string $folderId
+ * The ID of the folder.
+ * @param Google_ChildReference $postBody
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_ChildReference
+ */
+ public function insert($folderId, Google_Service_Drive_ChildReference $postBody, $optParams = array())
+ {
+ $params = array('folderId' => $folderId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('insert', array($params), "Google_Service_Drive_ChildReference");
+ }
+ /**
+ * Lists a folder's children. (children.listChildren)
+ *
+ * @param string $folderId
+ * The ID of the folder.
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string q
+ * Query string for searching children.
+ * @opt_param string pageToken
+ * Page token for children.
+ * @opt_param int maxResults
+ * Maximum number of children to return.
+ * @return Google_Service_Drive_ChildList
+ */
+ public function listChildren($folderId, $optParams = array())
+ {
+ $params = array('folderId' => $folderId);
+ $params = array_merge($params, $optParams);
+ return $this->call('list', array($params), "Google_Service_Drive_ChildList");
+ }
+}
+
+/**
+ * The "comments" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $comments = $driveService->comments;
+ * </code>
+ */
+class Google_Service_Drive_Comments_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Deletes a comment. (comments.delete)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $commentId
+ * The ID of the comment.
+ * @param array $optParams Optional parameters.
+ */
+ public function delete($fileId, $commentId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'commentId' => $commentId);
+ $params = array_merge($params, $optParams);
+ return $this->call('delete', array($params));
+ }
+ /**
+ * Gets a comment by ID. (comments.get)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $commentId
+ * The ID of the comment.
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param bool includeDeleted
+ * If set, this will succeed when retrieving a deleted comment, and will include any deleted
+ * replies.
+ * @return Google_Service_Drive_Comment
+ */
+ public function get($fileId, $commentId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'commentId' => $commentId);
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params), "Google_Service_Drive_Comment");
+ }
+ /**
+ * Creates a new comment on the given file. (comments.insert)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param Google_Comment $postBody
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_Comment
+ */
+ public function insert($fileId, Google_Service_Drive_Comment $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('insert', array($params), "Google_Service_Drive_Comment");
+ }
+ /**
+ * Lists a file's comments. (comments.listComments)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string pageToken
+ * The continuation token, used to page through large result sets. To get the next page of results,
+ * set this parameter to the value of "nextPageToken" from the previous response.
+ * @opt_param string updatedMin
+ * Only discussions that were updated after this timestamp will be returned. Formatted as an RFC
+ * 3339 timestamp.
+ * @opt_param bool includeDeleted
+ * If set, all comments and replies, including deleted comments and replies (with content stripped)
+ * will be returned.
+ * @opt_param int maxResults
+ * The maximum number of discussions to include in the response, used for paging.
+ * @return Google_Service_Drive_CommentList
+ */
+ public function listComments($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('list', array($params), "Google_Service_Drive_CommentList");
+ }
+ /**
+ * Updates an existing comment. This method supports patch semantics.
+ * (comments.patch)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $commentId
+ * The ID of the comment.
+ * @param Google_Comment $postBody
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_Comment
+ */
+ public function patch($fileId, $commentId, Google_Service_Drive_Comment $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'commentId' => $commentId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('patch', array($params), "Google_Service_Drive_Comment");
+ }
+ /**
+ * Updates an existing comment. (comments.update)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $commentId
+ * The ID of the comment.
+ * @param Google_Comment $postBody
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_Comment
+ */
+ public function update($fileId, $commentId, Google_Service_Drive_Comment $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'commentId' => $commentId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('update', array($params), "Google_Service_Drive_Comment");
+ }
+}
+
+/**
+ * The "files" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $files = $driveService->files;
+ * </code>
+ */
+class Google_Service_Drive_Files_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Creates a copy of the specified file. (files.copy)
+ *
+ * @param string $fileId
+ * The ID of the file to copy.
+ * @param Google_DriveFile $postBody
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param bool convert
+ * Whether to convert this file to the corresponding Google Docs format.
+ * @opt_param string ocrLanguage
+ * If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
+ * @opt_param string visibility
+ * The visibility of the new file. This parameter is only relevant when the source is not a native
+ * Google Doc and convert=false.
+ * @opt_param bool pinned
+ * Whether to pin the head revision of the new copy. A file can have a maximum of 200 pinned
+ * revisions.
+ * @opt_param bool ocr
+ * Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
+ * @opt_param string timedTextTrackName
+ * The timed text track name.
+ * @opt_param string timedTextLanguage
+ * The language of the timed text.
+ * @return Google_Service_Drive_DriveFile
+ */
+ public function copy($fileId, Google_Service_Drive_DriveFile $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('copy', array($params), "Google_Service_Drive_DriveFile");
+ }
+ /**
+ * Permanently deletes a file by ID. Skips the trash. (files.delete)
+ *
+ * @param string $fileId
+ * The ID of the file to delete.
+ * @param array $optParams Optional parameters.
+ */
+ public function delete($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('delete', array($params));
+ }
+ /**
+ * Permanently deletes all of the user's trashed files. (files.emptyTrash)
+ *
+ * @param array $optParams Optional parameters.
+ */
+ public function emptyTrash($optParams = array())
+ {
+ $params = array();
+ $params = array_merge($params, $optParams);
+ return $this->call('emptyTrash', array($params));
+ }
+ /**
+ * Gets a file's metadata by ID. (files.get)
+ *
+ * @param string $fileId
+ * The ID for the file in question.
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param bool updateViewedDate
+ * Whether to update the view date after successfully retrieving the file.
+ * @opt_param string projection
+ * This parameter is deprecated and has no function.
+ * @return Google_Service_Drive_DriveFile
+ */
+ public function get($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params), "Google_Service_Drive_DriveFile");
+ }
+ /**
+ * Insert a new file. (files.insert)
+ *
+ * @param Google_DriveFile $postBody
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param bool convert
+ * Whether to convert this file to the corresponding Google Docs format.
+ * @opt_param bool useContentAsIndexableText
+ * Whether to use the content as indexable text.
+ * @opt_param string ocrLanguage
+ * If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
+ * @opt_param string visibility
+ * The visibility of the new file. This parameter is only relevant when convert=false.
+ * @opt_param bool pinned
+ * Whether to pin the head revision of the uploaded file. A file can have a maximum of 200 pinned
+ * revisions.
+ * @opt_param bool ocr
+ * Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
+ * @opt_param string timedTextTrackName
+ * The timed text track name.
+ * @opt_param string timedTextLanguage
+ * The language of the timed text.
+ * @return Google_Service_Drive_DriveFile
+ */
+ public function insert(Google_Service_Drive_DriveFile $postBody, $optParams = array())
+ {
+ $params = array('postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('insert', array($params), "Google_Service_Drive_DriveFile");
+ }
+ /**
+ * Lists the user's files. (files.listFiles)
+ *
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string q
+ * Query string for searching files.
+ * @opt_param string pageToken
+ * Page token for files.
+ * @opt_param string corpus
+ * The body of items (files/documents) to which the query applies.
+ * @opt_param string projection
+ * This parameter is deprecated and has no function.
+ * @opt_param int maxResults
+ * Maximum number of files to return.
+ * @return Google_Service_Drive_FileList
+ */
+ public function listFiles($optParams = array())
+ {
+ $params = array();
+ $params = array_merge($params, $optParams);
+ return $this->call('list', array($params), "Google_Service_Drive_FileList");
+ }
+ /**
+ * Updates file metadata and/or content. This method supports patch semantics.
+ * (files.patch)
+ *
+ * @param string $fileId
+ * The ID of the file to update.
+ * @param Google_DriveFile $postBody
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string addParents
+ * Comma-separated list of parent IDs to add.
+ * @opt_param bool updateViewedDate
+ * Whether to update the view date after successfully updating the file.
+ * @opt_param string removeParents
+ * Comma-separated list of parent IDs to remove.
+ * @opt_param bool setModifiedDate
+ * Whether to set the modified date with the supplied modified date.
+ * @opt_param bool convert
+ * Whether to convert this file to the corresponding Google Docs format.
+ * @opt_param bool useContentAsIndexableText
+ * Whether to use the content as indexable text.
+ * @opt_param string ocrLanguage
+ * If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
+ * @opt_param bool pinned
+ * Whether to pin the new revision. A file can have a maximum of 200 pinned revisions.
+ * @opt_param bool newRevision
+ * Whether a blob upload should create a new revision. If false, the blob data in the current head
+ * revision is replaced. If true or not set, a new blob is created as head revision, and previous
+ * revisions are preserved (causing increased use of the user's data storage quota).
+ * @opt_param bool ocr
+ * Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
+ * @opt_param string timedTextLanguage
+ * The language of the timed text.
+ * @opt_param string timedTextTrackName
+ * The timed text track name.
+ * @return Google_Service_Drive_DriveFile
+ */
+ public function patch($fileId, Google_Service_Drive_DriveFile $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('patch', array($params), "Google_Service_Drive_DriveFile");
+ }
+ /**
+ * Set the file's updated time to the current server time. (files.touch)
+ *
+ * @param string $fileId
+ * The ID of the file to update.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_DriveFile
+ */
+ public function touch($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('touch', array($params), "Google_Service_Drive_DriveFile");
+ }
+ /**
+ * Moves a file to the trash. (files.trash)
+ *
+ * @param string $fileId
+ * The ID of the file to trash.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_DriveFile
+ */
+ public function trash($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('trash', array($params), "Google_Service_Drive_DriveFile");
+ }
+ /**
+ * Restores a file from the trash. (files.untrash)
+ *
+ * @param string $fileId
+ * The ID of the file to untrash.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_DriveFile
+ */
+ public function untrash($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('untrash', array($params), "Google_Service_Drive_DriveFile");
+ }
+ /**
+ * Updates file metadata and/or content. (files.update)
+ *
+ * @param string $fileId
+ * The ID of the file to update.
+ * @param Google_DriveFile $postBody
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string addParents
+ * Comma-separated list of parent IDs to add.
+ * @opt_param bool updateViewedDate
+ * Whether to update the view date after successfully updating the file.
+ * @opt_param string removeParents
+ * Comma-separated list of parent IDs to remove.
+ * @opt_param bool setModifiedDate
+ * Whether to set the modified date with the supplied modified date.
+ * @opt_param bool convert
+ * Whether to convert this file to the corresponding Google Docs format.
+ * @opt_param bool useContentAsIndexableText
+ * Whether to use the content as indexable text.
+ * @opt_param string ocrLanguage
+ * If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
+ * @opt_param bool pinned
+ * Whether to pin the new revision. A file can have a maximum of 200 pinned revisions.
+ * @opt_param bool newRevision
+ * Whether a blob upload should create a new revision. If false, the blob data in the current head
+ * revision is replaced. If true or not set, a new blob is created as head revision, and previous
+ * revisions are preserved (causing increased use of the user's data storage quota).
+ * @opt_param bool ocr
+ * Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
+ * @opt_param string timedTextLanguage
+ * The language of the timed text.
+ * @opt_param string timedTextTrackName
+ * The timed text track name.
+ * @return Google_Service_Drive_DriveFile
+ */
+ public function update($fileId, Google_Service_Drive_DriveFile $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('update', array($params), "Google_Service_Drive_DriveFile");
+ }
+ /**
+ * Subscribe to changes on a file (files.watch)
+ *
+ * @param string $fileId
+ * The ID for the file in question.
+ * @param Google_Channel $postBody
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param bool updateViewedDate
+ * Whether to update the view date after successfully retrieving the file.
+ * @opt_param string projection
+ * This parameter is deprecated and has no function.
+ * @return Google_Service_Drive_Channel
+ */
+ public function watch($fileId, Google_Service_Drive_Channel $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('watch', array($params), "Google_Service_Drive_Channel");
+ }
+}
+
+/**
+ * The "parents" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $parents = $driveService->parents;
+ * </code>
+ */
+class Google_Service_Drive_Parents_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Removes a parent from a file. (parents.delete)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $parentId
+ * The ID of the parent.
+ * @param array $optParams Optional parameters.
+ */
+ public function delete($fileId, $parentId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'parentId' => $parentId);
+ $params = array_merge($params, $optParams);
+ return $this->call('delete', array($params));
+ }
+ /**
+ * Gets a specific parent reference. (parents.get)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $parentId
+ * The ID of the parent.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_ParentReference
+ */
+ public function get($fileId, $parentId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'parentId' => $parentId);
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params), "Google_Service_Drive_ParentReference");
+ }
+ /**
+ * Adds a parent folder for a file. (parents.insert)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param Google_ParentReference $postBody
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_ParentReference
+ */
+ public function insert($fileId, Google_Service_Drive_ParentReference $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('insert', array($params), "Google_Service_Drive_ParentReference");
+ }
+ /**
+ * Lists a file's parents. (parents.listParents)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_ParentList
+ */
+ public function listParents($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('list', array($params), "Google_Service_Drive_ParentList");
+ }
+}
+
+/**
+ * The "permissions" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $permissions = $driveService->permissions;
+ * </code>
+ */
+class Google_Service_Drive_Permissions_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Deletes a permission from a file. (permissions.delete)
+ *
+ * @param string $fileId
+ * The ID for the file.
+ * @param string $permissionId
+ * The ID for the permission.
+ * @param array $optParams Optional parameters.
+ */
+ public function delete($fileId, $permissionId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'permissionId' => $permissionId);
+ $params = array_merge($params, $optParams);
+ return $this->call('delete', array($params));
+ }
+ /**
+ * Gets a permission by ID. (permissions.get)
+ *
+ * @param string $fileId
+ * The ID for the file.
+ * @param string $permissionId
+ * The ID for the permission.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_Permission
+ */
+ public function get($fileId, $permissionId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'permissionId' => $permissionId);
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params), "Google_Service_Drive_Permission");
+ }
+ /**
+ * Returns the permission ID for an email address. (permissions.getIdForEmail)
+ *
+ * @param string $email
+ * The email address for which to return a permission ID
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_PermissionId
+ */
+ public function getIdForEmail($email, $optParams = array())
+ {
+ $params = array('email' => $email);
+ $params = array_merge($params, $optParams);
+ return $this->call('getIdForEmail', array($params), "Google_Service_Drive_PermissionId");
+ }
+ /**
+ * Inserts a permission for a file. (permissions.insert)
+ *
+ * @param string $fileId
+ * The ID for the file.
+ * @param Google_Permission $postBody
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string emailMessage
+ * A custom message to include in notification emails.
+ * @opt_param bool sendNotificationEmails
+ * Whether to send notification emails when sharing to users or groups. This parameter is ignored
+ * and an email is sent if the role is owner.
+ * @return Google_Service_Drive_Permission
+ */
+ public function insert($fileId, Google_Service_Drive_Permission $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('insert', array($params), "Google_Service_Drive_Permission");
+ }
+ /**
+ * Lists a file's permissions. (permissions.listPermissions)
+ *
+ * @param string $fileId
+ * The ID for the file.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_PermissionList
+ */
+ public function listPermissions($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('list', array($params), "Google_Service_Drive_PermissionList");
+ }
+ /**
+ * Updates a permission. This method supports patch semantics.
+ * (permissions.patch)
+ *
+ * @param string $fileId
+ * The ID for the file.
+ * @param string $permissionId
+ * The ID for the permission.
+ * @param Google_Permission $postBody
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param bool transferOwnership
+ * Whether changing a role to 'owner' should also downgrade the current owners to writers.
+ * @return Google_Service_Drive_Permission
+ */
+ public function patch($fileId, $permissionId, Google_Service_Drive_Permission $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'permissionId' => $permissionId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('patch', array($params), "Google_Service_Drive_Permission");
+ }
+ /**
+ * Updates a permission. (permissions.update)
+ *
+ * @param string $fileId
+ * The ID for the file.
+ * @param string $permissionId
+ * The ID for the permission.
+ * @param Google_Permission $postBody
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param bool transferOwnership
+ * Whether changing a role to 'owner' should also downgrade the current owners to writers.
+ * @return Google_Service_Drive_Permission
+ */
+ public function update($fileId, $permissionId, Google_Service_Drive_Permission $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'permissionId' => $permissionId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('update', array($params), "Google_Service_Drive_Permission");
+ }
+}
+
+/**
+ * The "properties" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $properties = $driveService->properties;
+ * </code>
+ */
+class Google_Service_Drive_Properties_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Deletes a property. (properties.delete)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $propertyKey
+ * The key of the property.
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string visibility
+ * The visibility of the property.
+ */
+ public function delete($fileId, $propertyKey, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'propertyKey' => $propertyKey);
+ $params = array_merge($params, $optParams);
+ return $this->call('delete', array($params));
+ }
+ /**
+ * Gets a property by its key. (properties.get)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $propertyKey
+ * The key of the property.
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string visibility
+ * The visibility of the property.
+ * @return Google_Service_Drive_Property
+ */
+ public function get($fileId, $propertyKey, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'propertyKey' => $propertyKey);
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params), "Google_Service_Drive_Property");
+ }
+ /**
+ * Adds a property to a file. (properties.insert)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param Google_Property $postBody
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_Property
+ */
+ public function insert($fileId, Google_Service_Drive_Property $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('insert', array($params), "Google_Service_Drive_Property");
+ }
+ /**
+ * Lists a file's properties. (properties.listProperties)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_PropertyList
+ */
+ public function listProperties($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('list', array($params), "Google_Service_Drive_PropertyList");
+ }
+ /**
+ * Updates a property. This method supports patch semantics. (properties.patch)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $propertyKey
+ * The key of the property.
+ * @param Google_Property $postBody
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string visibility
+ * The visibility of the property.
+ * @return Google_Service_Drive_Property
+ */
+ public function patch($fileId, $propertyKey, Google_Service_Drive_Property $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'propertyKey' => $propertyKey, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('patch', array($params), "Google_Service_Drive_Property");
+ }
+ /**
+ * Updates a property. (properties.update)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $propertyKey
+ * The key of the property.
+ * @param Google_Property $postBody
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string visibility
+ * The visibility of the property.
+ * @return Google_Service_Drive_Property
+ */
+ public function update($fileId, $propertyKey, Google_Service_Drive_Property $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'propertyKey' => $propertyKey, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('update', array($params), "Google_Service_Drive_Property");
+ }
+}
+
+/**
+ * The "realtime" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $realtime = $driveService->realtime;
+ * </code>
+ */
+class Google_Service_Drive_Realtime_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Exports the contents of the Realtime API data model associated with this file
+ * as JSON. (realtime.get)
+ *
+ * @param string $fileId
+ * The ID of the file that the Realtime API data model is associated with.
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param int revision
+ * The revision of the Realtime API data model to export. Revisions start at 1 (the initial empty
+ * data model) and are incremented with each change. If this parameter is excluded, the most recent
+ * data model will be returned.
+ */
+ public function get($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params));
+ }
+ /**
+ * Overwrites the Realtime API data model associated with this file with the
+ * provided JSON data model. (realtime.update)
+ *
+ * @param string $fileId
+ * The ID of the file that the Realtime API data model is associated with.
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string baseRevision
+ * The revision of the model to diff the uploaded model against. If set, the uploaded model is
+ * diffed against the provided revision and those differences are merged with any changes made to
+ * the model after the provided revision. If not set, the uploaded model replaces the current model
+ * on the server.
+ */
+ public function update($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('update', array($params));
+ }
+}
+
+/**
+ * The "replies" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $replies = $driveService->replies;
+ * </code>
+ */
+class Google_Service_Drive_Replies_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Deletes a reply. (replies.delete)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $commentId
+ * The ID of the comment.
+ * @param string $replyId
+ * The ID of the reply.
+ * @param array $optParams Optional parameters.
+ */
+ public function delete($fileId, $commentId, $replyId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId);
+ $params = array_merge($params, $optParams);
+ return $this->call('delete', array($params));
+ }
+ /**
+ * Gets a reply. (replies.get)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $commentId
+ * The ID of the comment.
+ * @param string $replyId
+ * The ID of the reply.
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param bool includeDeleted
+ * If set, this will succeed when retrieving a deleted reply.
+ * @return Google_Service_Drive_CommentReply
+ */
+ public function get($fileId, $commentId, $replyId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId);
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params), "Google_Service_Drive_CommentReply");
+ }
+ /**
+ * Creates a new reply to the given comment. (replies.insert)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $commentId
+ * The ID of the comment.
+ * @param Google_CommentReply $postBody
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_CommentReply
+ */
+ public function insert($fileId, $commentId, Google_Service_Drive_CommentReply $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'commentId' => $commentId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('insert', array($params), "Google_Service_Drive_CommentReply");
+ }
+ /**
+ * Lists all of the replies to a comment. (replies.listReplies)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $commentId
+ * The ID of the comment.
+ * @param array $optParams Optional parameters.
+ *
+ * @opt_param string pageToken
+ * The continuation token, used to page through large result sets. To get the next page of results,
+ * set this parameter to the value of "nextPageToken" from the previous response.
+ * @opt_param bool includeDeleted
+ * If set, all replies, including deleted replies (with content stripped) will be returned.
+ * @opt_param int maxResults
+ * The maximum number of replies to include in the response, used for paging.
+ * @return Google_Service_Drive_CommentReplyList
+ */
+ public function listReplies($fileId, $commentId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'commentId' => $commentId);
+ $params = array_merge($params, $optParams);
+ return $this->call('list', array($params), "Google_Service_Drive_CommentReplyList");
+ }
+ /**
+ * Updates an existing reply. This method supports patch semantics.
+ * (replies.patch)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $commentId
+ * The ID of the comment.
+ * @param string $replyId
+ * The ID of the reply.
+ * @param Google_CommentReply $postBody
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_CommentReply
+ */
+ public function patch($fileId, $commentId, $replyId, Google_Service_Drive_CommentReply $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('patch', array($params), "Google_Service_Drive_CommentReply");
+ }
+ /**
+ * Updates an existing reply. (replies.update)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $commentId
+ * The ID of the comment.
+ * @param string $replyId
+ * The ID of the reply.
+ * @param Google_CommentReply $postBody
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_CommentReply
+ */
+ public function update($fileId, $commentId, $replyId, Google_Service_Drive_CommentReply $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('update', array($params), "Google_Service_Drive_CommentReply");
+ }
+}
+
+/**
+ * The "revisions" collection of methods.
+ * Typical usage is:
+ * <code>
+ * $driveService = new Google_Service_Drive(...);
+ * $revisions = $driveService->revisions;
+ * </code>
+ */
+class Google_Service_Drive_Revisions_Resource extends Google_Service_Resource
+{
+
+ /**
+ * Removes a revision. (revisions.delete)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $revisionId
+ * The ID of the revision.
+ * @param array $optParams Optional parameters.
+ */
+ public function delete($fileId, $revisionId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'revisionId' => $revisionId);
+ $params = array_merge($params, $optParams);
+ return $this->call('delete', array($params));
+ }
+ /**
+ * Gets a specific revision. (revisions.get)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param string $revisionId
+ * The ID of the revision.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_Revision
+ */
+ public function get($fileId, $revisionId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'revisionId' => $revisionId);
+ $params = array_merge($params, $optParams);
+ return $this->call('get', array($params), "Google_Service_Drive_Revision");
+ }
+ /**
+ * Lists a file's revisions. (revisions.listRevisions)
+ *
+ * @param string $fileId
+ * The ID of the file.
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_RevisionList
+ */
+ public function listRevisions($fileId, $optParams = array())
+ {
+ $params = array('fileId' => $fileId);
+ $params = array_merge($params, $optParams);
+ return $this->call('list', array($params), "Google_Service_Drive_RevisionList");
+ }
+ /**
+ * Updates a revision. This method supports patch semantics. (revisions.patch)
+ *
+ * @param string $fileId
+ * The ID for the file.
+ * @param string $revisionId
+ * The ID for the revision.
+ * @param Google_Revision $postBody
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_Revision
+ */
+ public function patch($fileId, $revisionId, Google_Service_Drive_Revision $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'revisionId' => $revisionId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('patch', array($params), "Google_Service_Drive_Revision");
+ }
+ /**
+ * Updates a revision. (revisions.update)
+ *
+ * @param string $fileId
+ * The ID for the file.
+ * @param string $revisionId
+ * The ID for the revision.
+ * @param Google_Revision $postBody
+ * @param array $optParams Optional parameters.
+ * @return Google_Service_Drive_Revision
+ */
+ public function update($fileId, $revisionId, Google_Service_Drive_Revision $postBody, $optParams = array())
+ {
+ $params = array('fileId' => $fileId, 'revisionId' => $revisionId, 'postBody' => $postBody);
+ $params = array_merge($params, $optParams);
+ return $this->call('update', array($params), "Google_Service_Drive_Revision");
+ }
+}
+
+
+
+
+class Google_Service_Drive_About extends Google_Collection
+{
+ protected $collection_key = 'quotaBytesByService';
+ protected $internal_gapi_mappings = array(
+ );
+ protected $additionalRoleInfoType = 'Google_Service_Drive_AboutAdditionalRoleInfo';
+ protected $additionalRoleInfoDataType = 'array';
+ public $domainSharingPolicy;
+ public $etag;
+ protected $exportFormatsType = 'Google_Service_Drive_AboutExportFormats';
+ protected $exportFormatsDataType = 'array';
+ protected $featuresType = 'Google_Service_Drive_AboutFeatures';
+ protected $featuresDataType = 'array';
+ protected $importFormatsType = 'Google_Service_Drive_AboutImportFormats';
+ protected $importFormatsDataType = 'array';
+ public $isCurrentAppInstalled;
+ public $kind;
+ public $languageCode;
+ public $largestChangeId;
+ protected $maxUploadSizesType = 'Google_Service_Drive_AboutMaxUploadSizes';
+ protected $maxUploadSizesDataType = 'array';
+ public $name;
+ public $permissionId;
+ protected $quotaBytesByServiceType = 'Google_Service_Drive_AboutQuotaBytesByService';
+ protected $quotaBytesByServiceDataType = 'array';
+ public $quotaBytesTotal;
+ public $quotaBytesUsed;
+ public $quotaBytesUsedAggregate;
+ public $quotaBytesUsedInTrash;
+ public $quotaType;
+ public $remainingChangeIds;
+ public $rootFolderId;
+ public $selfLink;
+ protected $userType = 'Google_Service_Drive_User';
+ protected $userDataType = '';
+
+ public function setAdditionalRoleInfo($additionalRoleInfo)
+ {
+ $this->additionalRoleInfo = $additionalRoleInfo;
+ }
+
+ public function getAdditionalRoleInfo()
+ {
+ return $this->additionalRoleInfo;
+ }
+
+ public function setDomainSharingPolicy($domainSharingPolicy)
+ {
+ $this->domainSharingPolicy = $domainSharingPolicy;
+ }
+
+ public function getDomainSharingPolicy()
+ {
+ return $this->domainSharingPolicy;
+ }
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setExportFormats($exportFormats)
+ {
+ $this->exportFormats = $exportFormats;
+ }
+
+ public function getExportFormats()
+ {
+ return $this->exportFormats;
+ }
+
+ public function setFeatures($features)
+ {
+ $this->features = $features;
+ }
+
+ public function getFeatures()
+ {
+ return $this->features;
+ }
+
+ public function setImportFormats($importFormats)
+ {
+ $this->importFormats = $importFormats;
+ }
+
+ public function getImportFormats()
+ {
+ return $this->importFormats;
+ }
+
+ public function setIsCurrentAppInstalled($isCurrentAppInstalled)
+ {
+ $this->isCurrentAppInstalled = $isCurrentAppInstalled;
+ }
+
+ public function getIsCurrentAppInstalled()
+ {
+ return $this->isCurrentAppInstalled;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setLanguageCode($languageCode)
+ {
+ $this->languageCode = $languageCode;
+ }
+
+ public function getLanguageCode()
+ {
+ return $this->languageCode;
+ }
+
+ public function setLargestChangeId($largestChangeId)
+ {
+ $this->largestChangeId = $largestChangeId;
+ }
+
+ public function getLargestChangeId()
+ {
+ return $this->largestChangeId;
+ }
+
+ public function setMaxUploadSizes($maxUploadSizes)
+ {
+ $this->maxUploadSizes = $maxUploadSizes;
+ }
+
+ public function getMaxUploadSizes()
+ {
+ return $this->maxUploadSizes;
+ }
+
+ public function setName($name)
+ {
+ $this->name = $name;
+ }
+
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ public function setPermissionId($permissionId)
+ {
+ $this->permissionId = $permissionId;
+ }
+
+ public function getPermissionId()
+ {
+ return $this->permissionId;
+ }
+
+ public function setQuotaBytesByService($quotaBytesByService)
+ {
+ $this->quotaBytesByService = $quotaBytesByService;
+ }
+
+ public function getQuotaBytesByService()
+ {
+ return $this->quotaBytesByService;
+ }
+
+ public function setQuotaBytesTotal($quotaBytesTotal)
+ {
+ $this->quotaBytesTotal = $quotaBytesTotal;
+ }
+
+ public function getQuotaBytesTotal()
+ {
+ return $this->quotaBytesTotal;
+ }
+
+ public function setQuotaBytesUsed($quotaBytesUsed)
+ {
+ $this->quotaBytesUsed = $quotaBytesUsed;
+ }
+
+ public function getQuotaBytesUsed()
+ {
+ return $this->quotaBytesUsed;
+ }
+
+ public function setQuotaBytesUsedAggregate($quotaBytesUsedAggregate)
+ {
+ $this->quotaBytesUsedAggregate = $quotaBytesUsedAggregate;
+ }
+
+ public function getQuotaBytesUsedAggregate()
+ {
+ return $this->quotaBytesUsedAggregate;
+ }
+
+ public function setQuotaBytesUsedInTrash($quotaBytesUsedInTrash)
+ {
+ $this->quotaBytesUsedInTrash = $quotaBytesUsedInTrash;
+ }
+
+ public function getQuotaBytesUsedInTrash()
+ {
+ return $this->quotaBytesUsedInTrash;
+ }
+
+ public function setQuotaType($quotaType)
+ {
+ $this->quotaType = $quotaType;
+ }
+
+ public function getQuotaType()
+ {
+ return $this->quotaType;
+ }
+
+ public function setRemainingChangeIds($remainingChangeIds)
+ {
+ $this->remainingChangeIds = $remainingChangeIds;
+ }
+
+ public function getRemainingChangeIds()
+ {
+ return $this->remainingChangeIds;
+ }
+
+ public function setRootFolderId($rootFolderId)
+ {
+ $this->rootFolderId = $rootFolderId;
+ }
+
+ public function getRootFolderId()
+ {
+ return $this->rootFolderId;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+
+ public function setUser(Google_Service_Drive_User $user)
+ {
+ $this->user = $user;
+ }
+
+ public function getUser()
+ {
+ return $this->user;
+ }
+}
+
+class Google_Service_Drive_AboutAdditionalRoleInfo extends Google_Collection
+{
+ protected $collection_key = 'roleSets';
+ protected $internal_gapi_mappings = array(
+ );
+ protected $roleSetsType = 'Google_Service_Drive_AboutAdditionalRoleInfoRoleSets';
+ protected $roleSetsDataType = 'array';
+ public $type;
+
+ public function setRoleSets($roleSets)
+ {
+ $this->roleSets = $roleSets;
+ }
+
+ public function getRoleSets()
+ {
+ return $this->roleSets;
+ }
+
+ public function setType($type)
+ {
+ $this->type = $type;
+ }
+
+ public function getType()
+ {
+ return $this->type;
+ }
+}
+
+class Google_Service_Drive_AboutAdditionalRoleInfoRoleSets extends Google_Collection
+{
+ protected $collection_key = 'additionalRoles';
+ protected $internal_gapi_mappings = array(
+ );
+ public $additionalRoles;
+ public $primaryRole;
+
+ public function setAdditionalRoles($additionalRoles)
+ {
+ $this->additionalRoles = $additionalRoles;
+ }
+
+ public function getAdditionalRoles()
+ {
+ return $this->additionalRoles;
+ }
+
+ public function setPrimaryRole($primaryRole)
+ {
+ $this->primaryRole = $primaryRole;
+ }
+
+ public function getPrimaryRole()
+ {
+ return $this->primaryRole;
+ }
+}
+
+class Google_Service_Drive_AboutExportFormats extends Google_Collection
+{
+ protected $collection_key = 'targets';
+ protected $internal_gapi_mappings = array(
+ );
+ public $source;
+ public $targets;
+
+ public function setSource($source)
+ {
+ $this->source = $source;
+ }
+
+ public function getSource()
+ {
+ return $this->source;
+ }
+
+ public function setTargets($targets)
+ {
+ $this->targets = $targets;
+ }
+
+ public function getTargets()
+ {
+ return $this->targets;
+ }
+}
+
+class Google_Service_Drive_AboutFeatures extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $featureName;
+ public $featureRate;
+
+ public function setFeatureName($featureName)
+ {
+ $this->featureName = $featureName;
+ }
+
+ public function getFeatureName()
+ {
+ return $this->featureName;
+ }
+
+ public function setFeatureRate($featureRate)
+ {
+ $this->featureRate = $featureRate;
+ }
+
+ public function getFeatureRate()
+ {
+ return $this->featureRate;
+ }
+}
+
+class Google_Service_Drive_AboutImportFormats extends Google_Collection
+{
+ protected $collection_key = 'targets';
+ protected $internal_gapi_mappings = array(
+ );
+ public $source;
+ public $targets;
+
+ public function setSource($source)
+ {
+ $this->source = $source;
+ }
+
+ public function getSource()
+ {
+ return $this->source;
+ }
+
+ public function setTargets($targets)
+ {
+ $this->targets = $targets;
+ }
+
+ public function getTargets()
+ {
+ return $this->targets;
+ }
+}
+
+class Google_Service_Drive_AboutMaxUploadSizes extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $size;
+ public $type;
+
+ public function setSize($size)
+ {
+ $this->size = $size;
+ }
+
+ public function getSize()
+ {
+ return $this->size;
+ }
+
+ public function setType($type)
+ {
+ $this->type = $type;
+ }
+
+ public function getType()
+ {
+ return $this->type;
+ }
+}
+
+class Google_Service_Drive_AboutQuotaBytesByService extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $bytesUsed;
+ public $serviceName;
+
+ public function setBytesUsed($bytesUsed)
+ {
+ $this->bytesUsed = $bytesUsed;
+ }
+
+ public function getBytesUsed()
+ {
+ return $this->bytesUsed;
+ }
+
+ public function setServiceName($serviceName)
+ {
+ $this->serviceName = $serviceName;
+ }
+
+ public function getServiceName()
+ {
+ return $this->serviceName;
+ }
+}
+
+class Google_Service_Drive_App extends Google_Collection
+{
+ protected $collection_key = 'secondaryMimeTypes';
+ protected $internal_gapi_mappings = array(
+ );
+ public $authorized;
+ public $createInFolderTemplate;
+ public $createUrl;
+ public $hasDriveWideScope;
+ protected $iconsType = 'Google_Service_Drive_AppIcons';
+ protected $iconsDataType = 'array';
+ public $id;
+ public $installed;
+ public $kind;
+ public $longDescription;
+ public $name;
+ public $objectType;
+ public $openUrlTemplate;
+ public $primaryFileExtensions;
+ public $primaryMimeTypes;
+ public $productId;
+ public $productUrl;
+ public $secondaryFileExtensions;
+ public $secondaryMimeTypes;
+ public $shortDescription;
+ public $supportsCreate;
+ public $supportsImport;
+ public $supportsMultiOpen;
+ public $supportsOfflineCreate;
+ public $useByDefault;
+
+ public function setAuthorized($authorized)
+ {
+ $this->authorized = $authorized;
+ }
+
+ public function getAuthorized()
+ {
+ return $this->authorized;
+ }
+
+ public function setCreateInFolderTemplate($createInFolderTemplate)
+ {
+ $this->createInFolderTemplate = $createInFolderTemplate;
+ }
+
+ public function getCreateInFolderTemplate()
+ {
+ return $this->createInFolderTemplate;
+ }
+
+ public function setCreateUrl($createUrl)
+ {
+ $this->createUrl = $createUrl;
+ }
+
+ public function getCreateUrl()
+ {
+ return $this->createUrl;
+ }
+
+ public function setHasDriveWideScope($hasDriveWideScope)
+ {
+ $this->hasDriveWideScope = $hasDriveWideScope;
+ }
+
+ public function getHasDriveWideScope()
+ {
+ return $this->hasDriveWideScope;
+ }
+
+ public function setIcons($icons)
+ {
+ $this->icons = $icons;
+ }
+
+ public function getIcons()
+ {
+ return $this->icons;
+ }
+
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ public function setInstalled($installed)
+ {
+ $this->installed = $installed;
+ }
+
+ public function getInstalled()
+ {
+ return $this->installed;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setLongDescription($longDescription)
+ {
+ $this->longDescription = $longDescription;
+ }
+
+ public function getLongDescription()
+ {
+ return $this->longDescription;
+ }
+
+ public function setName($name)
+ {
+ $this->name = $name;
+ }
+
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ public function setObjectType($objectType)
+ {
+ $this->objectType = $objectType;
+ }
+
+ public function getObjectType()
+ {
+ return $this->objectType;
+ }
+
+ public function setOpenUrlTemplate($openUrlTemplate)
+ {
+ $this->openUrlTemplate = $openUrlTemplate;
+ }
+
+ public function getOpenUrlTemplate()
+ {
+ return $this->openUrlTemplate;
+ }
+
+ public function setPrimaryFileExtensions($primaryFileExtensions)
+ {
+ $this->primaryFileExtensions = $primaryFileExtensions;
+ }
+
+ public function getPrimaryFileExtensions()
+ {
+ return $this->primaryFileExtensions;
+ }
+
+ public function setPrimaryMimeTypes($primaryMimeTypes)
+ {
+ $this->primaryMimeTypes = $primaryMimeTypes;
+ }
+
+ public function getPrimaryMimeTypes()
+ {
+ return $this->primaryMimeTypes;
+ }
+
+ public function setProductId($productId)
+ {
+ $this->productId = $productId;
+ }
+
+ public function getProductId()
+ {
+ return $this->productId;
+ }
+
+ public function setProductUrl($productUrl)
+ {
+ $this->productUrl = $productUrl;
+ }
+
+ public function getProductUrl()
+ {
+ return $this->productUrl;
+ }
+
+ public function setSecondaryFileExtensions($secondaryFileExtensions)
+ {
+ $this->secondaryFileExtensions = $secondaryFileExtensions;
+ }
+
+ public function getSecondaryFileExtensions()
+ {
+ return $this->secondaryFileExtensions;
+ }
+
+ public function setSecondaryMimeTypes($secondaryMimeTypes)
+ {
+ $this->secondaryMimeTypes = $secondaryMimeTypes;
+ }
+
+ public function getSecondaryMimeTypes()
+ {
+ return $this->secondaryMimeTypes;
+ }
+
+ public function setShortDescription($shortDescription)
+ {
+ $this->shortDescription = $shortDescription;
+ }
+
+ public function getShortDescription()
+ {
+ return $this->shortDescription;
+ }
+
+ public function setSupportsCreate($supportsCreate)
+ {
+ $this->supportsCreate = $supportsCreate;
+ }
+
+ public function getSupportsCreate()
+ {
+ return $this->supportsCreate;
+ }
+
+ public function setSupportsImport($supportsImport)
+ {
+ $this->supportsImport = $supportsImport;
+ }
+
+ public function getSupportsImport()
+ {
+ return $this->supportsImport;
+ }
+
+ public function setSupportsMultiOpen($supportsMultiOpen)
+ {
+ $this->supportsMultiOpen = $supportsMultiOpen;
+ }
+
+ public function getSupportsMultiOpen()
+ {
+ return $this->supportsMultiOpen;
+ }
+
+ public function setSupportsOfflineCreate($supportsOfflineCreate)
+ {
+ $this->supportsOfflineCreate = $supportsOfflineCreate;
+ }
+
+ public function getSupportsOfflineCreate()
+ {
+ return $this->supportsOfflineCreate;
+ }
+
+ public function setUseByDefault($useByDefault)
+ {
+ $this->useByDefault = $useByDefault;
+ }
+
+ public function getUseByDefault()
+ {
+ return $this->useByDefault;
+ }
+}
+
+class Google_Service_Drive_AppIcons extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $category;
+ public $iconUrl;
+ public $size;
+
+ public function setCategory($category)
+ {
+ $this->category = $category;
+ }
+
+ public function getCategory()
+ {
+ return $this->category;
+ }
+
+ public function setIconUrl($iconUrl)
+ {
+ $this->iconUrl = $iconUrl;
+ }
+
+ public function getIconUrl()
+ {
+ return $this->iconUrl;
+ }
+
+ public function setSize($size)
+ {
+ $this->size = $size;
+ }
+
+ public function getSize()
+ {
+ return $this->size;
+ }
+}
+
+class Google_Service_Drive_AppList extends Google_Collection
+{
+ protected $collection_key = 'items';
+ protected $internal_gapi_mappings = array(
+ );
+ public $defaultAppIds;
+ public $etag;
+ protected $itemsType = 'Google_Service_Drive_App';
+ protected $itemsDataType = 'array';
+ public $kind;
+ public $selfLink;
+
+ public function setDefaultAppIds($defaultAppIds)
+ {
+ $this->defaultAppIds = $defaultAppIds;
+ }
+
+ public function getDefaultAppIds()
+ {
+ return $this->defaultAppIds;
+ }
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setItems($items)
+ {
+ $this->items = $items;
+ }
+
+ public function getItems()
+ {
+ return $this->items;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_Change extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $deleted;
+ protected $fileType = 'Google_Service_Drive_DriveFile';
+ protected $fileDataType = '';
+ public $fileId;
+ public $id;
+ public $kind;
+ public $modificationDate;
+ public $selfLink;
+
+ public function setDeleted($deleted)
+ {
+ $this->deleted = $deleted;
+ }
+
+ public function getDeleted()
+ {
+ return $this->deleted;
+ }
+
+ public function setFile(Google_Service_Drive_DriveFile $file)
+ {
+ $this->file = $file;
+ }
+
+ public function getFile()
+ {
+ return $this->file;
+ }
+
+ public function setFileId($fileId)
+ {
+ $this->fileId = $fileId;
+ }
+
+ public function getFileId()
+ {
+ return $this->fileId;
+ }
+
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setModificationDate($modificationDate)
+ {
+ $this->modificationDate = $modificationDate;
+ }
+
+ public function getModificationDate()
+ {
+ return $this->modificationDate;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_ChangeList extends Google_Collection
+{
+ protected $collection_key = 'items';
+ protected $internal_gapi_mappings = array(
+ );
+ public $etag;
+ protected $itemsType = 'Google_Service_Drive_Change';
+ protected $itemsDataType = 'array';
+ public $kind;
+ public $largestChangeId;
+ public $nextLink;
+ public $nextPageToken;
+ public $selfLink;
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setItems($items)
+ {
+ $this->items = $items;
+ }
+
+ public function getItems()
+ {
+ return $this->items;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setLargestChangeId($largestChangeId)
+ {
+ $this->largestChangeId = $largestChangeId;
+ }
+
+ public function getLargestChangeId()
+ {
+ return $this->largestChangeId;
+ }
+
+ public function setNextLink($nextLink)
+ {
+ $this->nextLink = $nextLink;
+ }
+
+ public function getNextLink()
+ {
+ return $this->nextLink;
+ }
+
+ public function setNextPageToken($nextPageToken)
+ {
+ $this->nextPageToken = $nextPageToken;
+ }
+
+ public function getNextPageToken()
+ {
+ return $this->nextPageToken;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_Channel extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $address;
+ public $expiration;
+ public $id;
+ public $kind;
+ public $params;
+ public $payload;
+ public $resourceId;
+ public $resourceUri;
+ public $token;
+ public $type;
+
+ public function setAddress($address)
+ {
+ $this->address = $address;
+ }
+
+ public function getAddress()
+ {
+ return $this->address;
+ }
+
+ public function setExpiration($expiration)
+ {
+ $this->expiration = $expiration;
+ }
+
+ public function getExpiration()
+ {
+ return $this->expiration;
+ }
+
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setParams($params)
+ {
+ $this->params = $params;
+ }
+
+ public function getParams()
+ {
+ return $this->params;
+ }
+
+ public function setPayload($payload)
+ {
+ $this->payload = $payload;
+ }
+
+ public function getPayload()
+ {
+ return $this->payload;
+ }
+
+ public function setResourceId($resourceId)
+ {
+ $this->resourceId = $resourceId;
+ }
+
+ public function getResourceId()
+ {
+ return $this->resourceId;
+ }
+
+ public function setResourceUri($resourceUri)
+ {
+ $this->resourceUri = $resourceUri;
+ }
+
+ public function getResourceUri()
+ {
+ return $this->resourceUri;
+ }
+
+ public function setToken($token)
+ {
+ $this->token = $token;
+ }
+
+ public function getToken()
+ {
+ return $this->token;
+ }
+
+ public function setType($type)
+ {
+ $this->type = $type;
+ }
+
+ public function getType()
+ {
+ return $this->type;
+ }
+}
+
+class Google_Service_Drive_ChannelParams extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+}
+
+class Google_Service_Drive_ChildList extends Google_Collection
+{
+ protected $collection_key = 'items';
+ protected $internal_gapi_mappings = array(
+ );
+ public $etag;
+ protected $itemsType = 'Google_Service_Drive_ChildReference';
+ protected $itemsDataType = 'array';
+ public $kind;
+ public $nextLink;
+ public $nextPageToken;
+ public $selfLink;
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setItems($items)
+ {
+ $this->items = $items;
+ }
+
+ public function getItems()
+ {
+ return $this->items;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setNextLink($nextLink)
+ {
+ $this->nextLink = $nextLink;
+ }
+
+ public function getNextLink()
+ {
+ return $this->nextLink;
+ }
+
+ public function setNextPageToken($nextPageToken)
+ {
+ $this->nextPageToken = $nextPageToken;
+ }
+
+ public function getNextPageToken()
+ {
+ return $this->nextPageToken;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_ChildReference extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $childLink;
+ public $id;
+ public $kind;
+ public $selfLink;
+
+ public function setChildLink($childLink)
+ {
+ $this->childLink = $childLink;
+ }
+
+ public function getChildLink()
+ {
+ return $this->childLink;
+ }
+
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_Comment extends Google_Collection
+{
+ protected $collection_key = 'replies';
+ protected $internal_gapi_mappings = array(
+ );
+ public $anchor;
+ protected $authorType = 'Google_Service_Drive_User';
+ protected $authorDataType = '';
+ public $commentId;
+ public $content;
+ protected $contextType = 'Google_Service_Drive_CommentContext';
+ protected $contextDataType = '';
+ public $createdDate;
+ public $deleted;
+ public $fileId;
+ public $fileTitle;
+ public $htmlContent;
+ public $kind;
+ public $modifiedDate;
+ protected $repliesType = 'Google_Service_Drive_CommentReply';
+ protected $repliesDataType = 'array';
+ public $selfLink;
+ public $status;
+
+ public function setAnchor($anchor)
+ {
+ $this->anchor = $anchor;
+ }
+
+ public function getAnchor()
+ {
+ return $this->anchor;
+ }
+
+ public function setAuthor(Google_Service_Drive_User $author)
+ {
+ $this->author = $author;
+ }
+
+ public function getAuthor()
+ {
+ return $this->author;
+ }
+
+ public function setCommentId($commentId)
+ {
+ $this->commentId = $commentId;
+ }
+
+ public function getCommentId()
+ {
+ return $this->commentId;
+ }
+
+ public function setContent($content)
+ {
+ $this->content = $content;
+ }
+
+ public function getContent()
+ {
+ return $this->content;
+ }
+
+ public function setContext(Google_Service_Drive_CommentContext $context)
+ {
+ $this->context = $context;
+ }
+
+ public function getContext()
+ {
+ return $this->context;
+ }
+
+ public function setCreatedDate($createdDate)
+ {
+ $this->createdDate = $createdDate;
+ }
+
+ public function getCreatedDate()
+ {
+ return $this->createdDate;
+ }
+
+ public function setDeleted($deleted)
+ {
+ $this->deleted = $deleted;
+ }
+
+ public function getDeleted()
+ {
+ return $this->deleted;
+ }
+
+ public function setFileId($fileId)
+ {
+ $this->fileId = $fileId;
+ }
+
+ public function getFileId()
+ {
+ return $this->fileId;
+ }
+
+ public function setFileTitle($fileTitle)
+ {
+ $this->fileTitle = $fileTitle;
+ }
+
+ public function getFileTitle()
+ {
+ return $this->fileTitle;
+ }
+
+ public function setHtmlContent($htmlContent)
+ {
+ $this->htmlContent = $htmlContent;
+ }
+
+ public function getHtmlContent()
+ {
+ return $this->htmlContent;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setModifiedDate($modifiedDate)
+ {
+ $this->modifiedDate = $modifiedDate;
+ }
+
+ public function getModifiedDate()
+ {
+ return $this->modifiedDate;
+ }
+
+ public function setReplies($replies)
+ {
+ $this->replies = $replies;
+ }
+
+ public function getReplies()
+ {
+ return $this->replies;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+
+ public function setStatus($status)
+ {
+ $this->status = $status;
+ }
+
+ public function getStatus()
+ {
+ return $this->status;
+ }
+}
+
+class Google_Service_Drive_CommentContext extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $type;
+ public $value;
+
+ public function setType($type)
+ {
+ $this->type = $type;
+ }
+
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ public function setValue($value)
+ {
+ $this->value = $value;
+ }
+
+ public function getValue()
+ {
+ return $this->value;
+ }
+}
+
+class Google_Service_Drive_CommentList extends Google_Collection
+{
+ protected $collection_key = 'items';
+ protected $internal_gapi_mappings = array(
+ );
+ protected $itemsType = 'Google_Service_Drive_Comment';
+ protected $itemsDataType = 'array';
+ public $kind;
+ public $nextLink;
+ public $nextPageToken;
+ public $selfLink;
+
+ public function setItems($items)
+ {
+ $this->items = $items;
+ }
+
+ public function getItems()
+ {
+ return $this->items;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setNextLink($nextLink)
+ {
+ $this->nextLink = $nextLink;
+ }
+
+ public function getNextLink()
+ {
+ return $this->nextLink;
+ }
+
+ public function setNextPageToken($nextPageToken)
+ {
+ $this->nextPageToken = $nextPageToken;
+ }
+
+ public function getNextPageToken()
+ {
+ return $this->nextPageToken;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_CommentReply extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ protected $authorType = 'Google_Service_Drive_User';
+ protected $authorDataType = '';
+ public $content;
+ public $createdDate;
+ public $deleted;
+ public $htmlContent;
+ public $kind;
+ public $modifiedDate;
+ public $replyId;
+ public $verb;
+
+ public function setAuthor(Google_Service_Drive_User $author)
+ {
+ $this->author = $author;
+ }
+
+ public function getAuthor()
+ {
+ return $this->author;
+ }
+
+ public function setContent($content)
+ {
+ $this->content = $content;
+ }
+
+ public function getContent()
+ {
+ return $this->content;
+ }
+
+ public function setCreatedDate($createdDate)
+ {
+ $this->createdDate = $createdDate;
+ }
+
+ public function getCreatedDate()
+ {
+ return $this->createdDate;
+ }
+
+ public function setDeleted($deleted)
+ {
+ $this->deleted = $deleted;
+ }
+
+ public function getDeleted()
+ {
+ return $this->deleted;
+ }
+
+ public function setHtmlContent($htmlContent)
+ {
+ $this->htmlContent = $htmlContent;
+ }
+
+ public function getHtmlContent()
+ {
+ return $this->htmlContent;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setModifiedDate($modifiedDate)
+ {
+ $this->modifiedDate = $modifiedDate;
+ }
+
+ public function getModifiedDate()
+ {
+ return $this->modifiedDate;
+ }
+
+ public function setReplyId($replyId)
+ {
+ $this->replyId = $replyId;
+ }
+
+ public function getReplyId()
+ {
+ return $this->replyId;
+ }
+
+ public function setVerb($verb)
+ {
+ $this->verb = $verb;
+ }
+
+ public function getVerb()
+ {
+ return $this->verb;
+ }
+}
+
+class Google_Service_Drive_CommentReplyList extends Google_Collection
+{
+ protected $collection_key = 'items';
+ protected $internal_gapi_mappings = array(
+ );
+ protected $itemsType = 'Google_Service_Drive_CommentReply';
+ protected $itemsDataType = 'array';
+ public $kind;
+ public $nextLink;
+ public $nextPageToken;
+ public $selfLink;
+
+ public function setItems($items)
+ {
+ $this->items = $items;
+ }
+
+ public function getItems()
+ {
+ return $this->items;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setNextLink($nextLink)
+ {
+ $this->nextLink = $nextLink;
+ }
+
+ public function getNextLink()
+ {
+ return $this->nextLink;
+ }
+
+ public function setNextPageToken($nextPageToken)
+ {
+ $this->nextPageToken = $nextPageToken;
+ }
+
+ public function getNextPageToken()
+ {
+ return $this->nextPageToken;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_DriveFile extends Google_Collection
+{
+ protected $collection_key = 'properties';
+ protected $internal_gapi_mappings = array(
+ );
+ public $alternateLink;
+ public $appDataContents;
+ public $copyable;
+ public $createdDate;
+ public $defaultOpenWithLink;
+ public $description;
+ public $downloadUrl;
+ public $editable;
+ public $embedLink;
+ public $etag;
+ public $explicitlyTrashed;
+ public $exportLinks;
+ public $fileExtension;
+ public $fileSize;
+ public $headRevisionId;
+ public $iconLink;
+ public $id;
+ protected $imageMediaMetadataType = 'Google_Service_Drive_DriveFileImageMediaMetadata';
+ protected $imageMediaMetadataDataType = '';
+ protected $indexableTextType = 'Google_Service_Drive_DriveFileIndexableText';
+ protected $indexableTextDataType = '';
+ public $kind;
+ protected $labelsType = 'Google_Service_Drive_DriveFileLabels';
+ protected $labelsDataType = '';
+ protected $lastModifyingUserType = 'Google_Service_Drive_User';
+ protected $lastModifyingUserDataType = '';
+ public $lastModifyingUserName;
+ public $lastViewedByMeDate;
+ public $markedViewedByMeDate;
+ public $md5Checksum;
+ public $mimeType;
+ public $modifiedByMeDate;
+ public $modifiedDate;
+ public $openWithLinks;
+ public $originalFilename;
+ public $ownerNames;
+ protected $ownersType = 'Google_Service_Drive_User';
+ protected $ownersDataType = 'array';
+ protected $parentsType = 'Google_Service_Drive_ParentReference';
+ protected $parentsDataType = 'array';
+ protected $permissionsType = 'Google_Service_Drive_Permission';
+ protected $permissionsDataType = 'array';
+ protected $propertiesType = 'Google_Service_Drive_Property';
+ protected $propertiesDataType = 'array';
+ public $quotaBytesUsed;
+ public $selfLink;
+ public $shared;
+ public $sharedWithMeDate;
+ protected $sharingUserType = 'Google_Service_Drive_User';
+ protected $sharingUserDataType = '';
+ protected $thumbnailType = 'Google_Service_Drive_DriveFileThumbnail';
+ protected $thumbnailDataType = '';
+ public $thumbnailLink;
+ public $title;
+ protected $userPermissionType = 'Google_Service_Drive_Permission';
+ protected $userPermissionDataType = '';
+ public $version;
+ protected $videoMediaMetadataType = 'Google_Service_Drive_DriveFileVideoMediaMetadata';
+ protected $videoMediaMetadataDataType = '';
+ public $webContentLink;
+ public $webViewLink;
+ public $writersCanShare;
+
+ public function setAlternateLink($alternateLink)
+ {
+ $this->alternateLink = $alternateLink;
+ }
+
+ public function getAlternateLink()
+ {
+ return $this->alternateLink;
+ }
+
+ public function setAppDataContents($appDataContents)
+ {
+ $this->appDataContents = $appDataContents;
+ }
+
+ public function getAppDataContents()
+ {
+ return $this->appDataContents;
+ }
+
+ public function setCopyable($copyable)
+ {
+ $this->copyable = $copyable;
+ }
+
+ public function getCopyable()
+ {
+ return $this->copyable;
+ }
+
+ public function setCreatedDate($createdDate)
+ {
+ $this->createdDate = $createdDate;
+ }
+
+ public function getCreatedDate()
+ {
+ return $this->createdDate;
+ }
+
+ public function setDefaultOpenWithLink($defaultOpenWithLink)
+ {
+ $this->defaultOpenWithLink = $defaultOpenWithLink;
+ }
+
+ public function getDefaultOpenWithLink()
+ {
+ return $this->defaultOpenWithLink;
+ }
+
+ public function setDescription($description)
+ {
+ $this->description = $description;
+ }
+
+ public function getDescription()
+ {
+ return $this->description;
+ }
+
+ public function setDownloadUrl($downloadUrl)
+ {
+ $this->downloadUrl = $downloadUrl;
+ }
+
+ public function getDownloadUrl()
+ {
+ return $this->downloadUrl;
+ }
+
+ public function setEditable($editable)
+ {
+ $this->editable = $editable;
+ }
+
+ public function getEditable()
+ {
+ return $this->editable;
+ }
+
+ public function setEmbedLink($embedLink)
+ {
+ $this->embedLink = $embedLink;
+ }
+
+ public function getEmbedLink()
+ {
+ return $this->embedLink;
+ }
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setExplicitlyTrashed($explicitlyTrashed)
+ {
+ $this->explicitlyTrashed = $explicitlyTrashed;
+ }
+
+ public function getExplicitlyTrashed()
+ {
+ return $this->explicitlyTrashed;
+ }
+
+ public function setExportLinks($exportLinks)
+ {
+ $this->exportLinks = $exportLinks;
+ }
+
+ public function getExportLinks()
+ {
+ return $this->exportLinks;
+ }
+
+ public function setFileExtension($fileExtension)
+ {
+ $this->fileExtension = $fileExtension;
+ }
+
+ public function getFileExtension()
+ {
+ return $this->fileExtension;
+ }
+
+ public function setFileSize($fileSize)
+ {
+ $this->fileSize = $fileSize;
+ }
+
+ public function getFileSize()
+ {
+ return $this->fileSize;
+ }
+
+ public function setHeadRevisionId($headRevisionId)
+ {
+ $this->headRevisionId = $headRevisionId;
+ }
+
+ public function getHeadRevisionId()
+ {
+ return $this->headRevisionId;
+ }
+
+ public function setIconLink($iconLink)
+ {
+ $this->iconLink = $iconLink;
+ }
+
+ public function getIconLink()
+ {
+ return $this->iconLink;
+ }
+
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ public function setImageMediaMetadata(Google_Service_Drive_DriveFileImageMediaMetadata $imageMediaMetadata)
+ {
+ $this->imageMediaMetadata = $imageMediaMetadata;
+ }
+
+ public function getImageMediaMetadata()
+ {
+ return $this->imageMediaMetadata;
+ }
+
+ public function setIndexableText(Google_Service_Drive_DriveFileIndexableText $indexableText)
+ {
+ $this->indexableText = $indexableText;
+ }
+
+ public function getIndexableText()
+ {
+ return $this->indexableText;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setLabels(Google_Service_Drive_DriveFileLabels $labels)
+ {
+ $this->labels = $labels;
+ }
+
+ public function getLabels()
+ {
+ return $this->labels;
+ }
+
+ public function setLastModifyingUser(Google_Service_Drive_User $lastModifyingUser)
+ {
+ $this->lastModifyingUser = $lastModifyingUser;
+ }
+
+ public function getLastModifyingUser()
+ {
+ return $this->lastModifyingUser;
+ }
+
+ public function setLastModifyingUserName($lastModifyingUserName)
+ {
+ $this->lastModifyingUserName = $lastModifyingUserName;
+ }
+
+ public function getLastModifyingUserName()
+ {
+ return $this->lastModifyingUserName;
+ }
+
+ public function setLastViewedByMeDate($lastViewedByMeDate)
+ {
+ $this->lastViewedByMeDate = $lastViewedByMeDate;
+ }
+
+ public function getLastViewedByMeDate()
+ {
+ return $this->lastViewedByMeDate;
+ }
+
+ public function setMarkedViewedByMeDate($markedViewedByMeDate)
+ {
+ $this->markedViewedByMeDate = $markedViewedByMeDate;
+ }
+
+ public function getMarkedViewedByMeDate()
+ {
+ return $this->markedViewedByMeDate;
+ }
+
+ public function setMd5Checksum($md5Checksum)
+ {
+ $this->md5Checksum = $md5Checksum;
+ }
+
+ public function getMd5Checksum()
+ {
+ return $this->md5Checksum;
+ }
+
+ public function setMimeType($mimeType)
+ {
+ $this->mimeType = $mimeType;
+ }
+
+ public function getMimeType()
+ {
+ return $this->mimeType;
+ }
+
+ public function setModifiedByMeDate($modifiedByMeDate)
+ {
+ $this->modifiedByMeDate = $modifiedByMeDate;
+ }
+
+ public function getModifiedByMeDate()
+ {
+ return $this->modifiedByMeDate;
+ }
+
+ public function setModifiedDate($modifiedDate)
+ {
+ $this->modifiedDate = $modifiedDate;
+ }
+
+ public function getModifiedDate()
+ {
+ return $this->modifiedDate;
+ }
+
+ public function setOpenWithLinks($openWithLinks)
+ {
+ $this->openWithLinks = $openWithLinks;
+ }
+
+ public function getOpenWithLinks()
+ {
+ return $this->openWithLinks;
+ }
+
+ public function setOriginalFilename($originalFilename)
+ {
+ $this->originalFilename = $originalFilename;
+ }
+
+ public function getOriginalFilename()
+ {
+ return $this->originalFilename;
+ }
+
+ public function setOwnerNames($ownerNames)
+ {
+ $this->ownerNames = $ownerNames;
+ }
+
+ public function getOwnerNames()
+ {
+ return $this->ownerNames;
+ }
+
+ public function setOwners($owners)
+ {
+ $this->owners = $owners;
+ }
+
+ public function getOwners()
+ {
+ return $this->owners;
+ }
+
+ public function setParents($parents)
+ {
+ $this->parents = $parents;
+ }
+
+ public function getParents()
+ {
+ return $this->parents;
+ }
+
+ public function setPermissions($permissions)
+ {
+ $this->permissions = $permissions;
+ }
+
+ public function getPermissions()
+ {
+ return $this->permissions;
+ }
+
+ public function setProperties($properties)
+ {
+ $this->properties = $properties;
+ }
+
+ public function getProperties()
+ {
+ return $this->properties;
+ }
+
+ public function setQuotaBytesUsed($quotaBytesUsed)
+ {
+ $this->quotaBytesUsed = $quotaBytesUsed;
+ }
+
+ public function getQuotaBytesUsed()
+ {
+ return $this->quotaBytesUsed;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+
+ public function setShared($shared)
+ {
+ $this->shared = $shared;
+ }
+
+ public function getShared()
+ {
+ return $this->shared;
+ }
+
+ public function setSharedWithMeDate($sharedWithMeDate)
+ {
+ $this->sharedWithMeDate = $sharedWithMeDate;
+ }
+
+ public function getSharedWithMeDate()
+ {
+ return $this->sharedWithMeDate;
+ }
+
+ public function setSharingUser(Google_Service_Drive_User $sharingUser)
+ {
+ $this->sharingUser = $sharingUser;
+ }
+
+ public function getSharingUser()
+ {
+ return $this->sharingUser;
+ }
+
+ public function setThumbnail(Google_Service_Drive_DriveFileThumbnail $thumbnail)
+ {
+ $this->thumbnail = $thumbnail;
+ }
+
+ public function getThumbnail()
+ {
+ return $this->thumbnail;
+ }
+
+ public function setThumbnailLink($thumbnailLink)
+ {
+ $this->thumbnailLink = $thumbnailLink;
+ }
+
+ public function getThumbnailLink()
+ {
+ return $this->thumbnailLink;
+ }
+
+ public function setTitle($title)
+ {
+ $this->title = $title;
+ }
+
+ public function getTitle()
+ {
+ return $this->title;
+ }
+
+ public function setUserPermission(Google_Service_Drive_Permission $userPermission)
+ {
+ $this->userPermission = $userPermission;
+ }
+
+ public function getUserPermission()
+ {
+ return $this->userPermission;
+ }
+
+ public function setVersion($version)
+ {
+ $this->version = $version;
+ }
+
+ public function getVersion()
+ {
+ return $this->version;
+ }
+
+ public function setVideoMediaMetadata(Google_Service_Drive_DriveFileVideoMediaMetadata $videoMediaMetadata)
+ {
+ $this->videoMediaMetadata = $videoMediaMetadata;
+ }
+
+ public function getVideoMediaMetadata()
+ {
+ return $this->videoMediaMetadata;
+ }
+
+ public function setWebContentLink($webContentLink)
+ {
+ $this->webContentLink = $webContentLink;
+ }
+
+ public function getWebContentLink()
+ {
+ return $this->webContentLink;
+ }
+
+ public function setWebViewLink($webViewLink)
+ {
+ $this->webViewLink = $webViewLink;
+ }
+
+ public function getWebViewLink()
+ {
+ return $this->webViewLink;
+ }
+
+ public function setWritersCanShare($writersCanShare)
+ {
+ $this->writersCanShare = $writersCanShare;
+ }
+
+ public function getWritersCanShare()
+ {
+ return $this->writersCanShare;
+ }
+}
+
+class Google_Service_Drive_DriveFileExportLinks extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+}
+
+class Google_Service_Drive_DriveFileImageMediaMetadata extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $aperture;
+ public $cameraMake;
+ public $cameraModel;
+ public $colorSpace;
+ public $date;
+ public $exposureBias;
+ public $exposureMode;
+ public $exposureTime;
+ public $flashUsed;
+ public $focalLength;
+ public $height;
+ public $isoSpeed;
+ public $lens;
+ protected $locationType = 'Google_Service_Drive_DriveFileImageMediaMetadataLocation';
+ protected $locationDataType = '';
+ public $maxApertureValue;
+ public $meteringMode;
+ public $rotation;
+ public $sensor;
+ public $subjectDistance;
+ public $whiteBalance;
+ public $width;
+
+ public function setAperture($aperture)
+ {
+ $this->aperture = $aperture;
+ }
+
+ public function getAperture()
+ {
+ return $this->aperture;
+ }
+
+ public function setCameraMake($cameraMake)
+ {
+ $this->cameraMake = $cameraMake;
+ }
+
+ public function getCameraMake()
+ {
+ return $this->cameraMake;
+ }
+
+ public function setCameraModel($cameraModel)
+ {
+ $this->cameraModel = $cameraModel;
+ }
+
+ public function getCameraModel()
+ {
+ return $this->cameraModel;
+ }
+
+ public function setColorSpace($colorSpace)
+ {
+ $this->colorSpace = $colorSpace;
+ }
+
+ public function getColorSpace()
+ {
+ return $this->colorSpace;
+ }
+
+ public function setDate($date)
+ {
+ $this->date = $date;
+ }
+
+ public function getDate()
+ {
+ return $this->date;
+ }
+
+ public function setExposureBias($exposureBias)
+ {
+ $this->exposureBias = $exposureBias;
+ }
+
+ public function getExposureBias()
+ {
+ return $this->exposureBias;
+ }
+
+ public function setExposureMode($exposureMode)
+ {
+ $this->exposureMode = $exposureMode;
+ }
+
+ public function getExposureMode()
+ {
+ return $this->exposureMode;
+ }
+
+ public function setExposureTime($exposureTime)
+ {
+ $this->exposureTime = $exposureTime;
+ }
+
+ public function getExposureTime()
+ {
+ return $this->exposureTime;
+ }
+
+ public function setFlashUsed($flashUsed)
+ {
+ $this->flashUsed = $flashUsed;
+ }
+
+ public function getFlashUsed()
+ {
+ return $this->flashUsed;
+ }
+
+ public function setFocalLength($focalLength)
+ {
+ $this->focalLength = $focalLength;
+ }
+
+ public function getFocalLength()
+ {
+ return $this->focalLength;
+ }
+
+ public function setHeight($height)
+ {
+ $this->height = $height;
+ }
+
+ public function getHeight()
+ {
+ return $this->height;
+ }
+
+ public function setIsoSpeed($isoSpeed)
+ {
+ $this->isoSpeed = $isoSpeed;
+ }
+
+ public function getIsoSpeed()
+ {
+ return $this->isoSpeed;
+ }
+
+ public function setLens($lens)
+ {
+ $this->lens = $lens;
+ }
+
+ public function getLens()
+ {
+ return $this->lens;
+ }
+
+ public function setLocation(Google_Service_Drive_DriveFileImageMediaMetadataLocation $location)
+ {
+ $this->location = $location;
+ }
+
+ public function getLocation()
+ {
+ return $this->location;
+ }
+
+ public function setMaxApertureValue($maxApertureValue)
+ {
+ $this->maxApertureValue = $maxApertureValue;
+ }
+
+ public function getMaxApertureValue()
+ {
+ return $this->maxApertureValue;
+ }
+
+ public function setMeteringMode($meteringMode)
+ {
+ $this->meteringMode = $meteringMode;
+ }
+
+ public function getMeteringMode()
+ {
+ return $this->meteringMode;
+ }
+
+ public function setRotation($rotation)
+ {
+ $this->rotation = $rotation;
+ }
+
+ public function getRotation()
+ {
+ return $this->rotation;
+ }
+
+ public function setSensor($sensor)
+ {
+ $this->sensor = $sensor;
+ }
+
+ public function getSensor()
+ {
+ return $this->sensor;
+ }
+
+ public function setSubjectDistance($subjectDistance)
+ {
+ $this->subjectDistance = $subjectDistance;
+ }
+
+ public function getSubjectDistance()
+ {
+ return $this->subjectDistance;
+ }
+
+ public function setWhiteBalance($whiteBalance)
+ {
+ $this->whiteBalance = $whiteBalance;
+ }
+
+ public function getWhiteBalance()
+ {
+ return $this->whiteBalance;
+ }
+
+ public function setWidth($width)
+ {
+ $this->width = $width;
+ }
+
+ public function getWidth()
+ {
+ return $this->width;
+ }
+}
+
+class Google_Service_Drive_DriveFileImageMediaMetadataLocation extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $altitude;
+ public $latitude;
+ public $longitude;
+
+ public function setAltitude($altitude)
+ {
+ $this->altitude = $altitude;
+ }
+
+ public function getAltitude()
+ {
+ return $this->altitude;
+ }
+
+ public function setLatitude($latitude)
+ {
+ $this->latitude = $latitude;
+ }
+
+ public function getLatitude()
+ {
+ return $this->latitude;
+ }
+
+ public function setLongitude($longitude)
+ {
+ $this->longitude = $longitude;
+ }
+
+ public function getLongitude()
+ {
+ return $this->longitude;
+ }
+}
+
+class Google_Service_Drive_DriveFileIndexableText extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $text;
+
+ public function setText($text)
+ {
+ $this->text = $text;
+ }
+
+ public function getText()
+ {
+ return $this->text;
+ }
+}
+
+class Google_Service_Drive_DriveFileLabels extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $hidden;
+ public $restricted;
+ public $starred;
+ public $trashed;
+ public $viewed;
+
+ public function setHidden($hidden)
+ {
+ $this->hidden = $hidden;
+ }
+
+ public function getHidden()
+ {
+ return $this->hidden;
+ }
+
+ public function setRestricted($restricted)
+ {
+ $this->restricted = $restricted;
+ }
+
+ public function getRestricted()
+ {
+ return $this->restricted;
+ }
+
+ public function setStarred($starred)
+ {
+ $this->starred = $starred;
+ }
+
+ public function getStarred()
+ {
+ return $this->starred;
+ }
+
+ public function setTrashed($trashed)
+ {
+ $this->trashed = $trashed;
+ }
+
+ public function getTrashed()
+ {
+ return $this->trashed;
+ }
+
+ public function setViewed($viewed)
+ {
+ $this->viewed = $viewed;
+ }
+
+ public function getViewed()
+ {
+ return $this->viewed;
+ }
+}
+
+class Google_Service_Drive_DriveFileOpenWithLinks extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+}
+
+class Google_Service_Drive_DriveFileThumbnail extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $image;
+ public $mimeType;
+
+ public function setImage($image)
+ {
+ $this->image = $image;
+ }
+
+ public function getImage()
+ {
+ return $this->image;
+ }
+
+ public function setMimeType($mimeType)
+ {
+ $this->mimeType = $mimeType;
+ }
+
+ public function getMimeType()
+ {
+ return $this->mimeType;
+ }
+}
+
+class Google_Service_Drive_DriveFileVideoMediaMetadata extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $durationMillis;
+ public $height;
+ public $width;
+
+ public function setDurationMillis($durationMillis)
+ {
+ $this->durationMillis = $durationMillis;
+ }
+
+ public function getDurationMillis()
+ {
+ return $this->durationMillis;
+ }
+
+ public function setHeight($height)
+ {
+ $this->height = $height;
+ }
+
+ public function getHeight()
+ {
+ return $this->height;
+ }
+
+ public function setWidth($width)
+ {
+ $this->width = $width;
+ }
+
+ public function getWidth()
+ {
+ return $this->width;
+ }
+}
+
+class Google_Service_Drive_FileList extends Google_Collection
+{
+ protected $collection_key = 'items';
+ protected $internal_gapi_mappings = array(
+ );
+ public $etag;
+ protected $itemsType = 'Google_Service_Drive_DriveFile';
+ protected $itemsDataType = 'array';
+ public $kind;
+ public $nextLink;
+ public $nextPageToken;
+ public $selfLink;
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setItems($items)
+ {
+ $this->items = $items;
+ }
+
+ public function getItems()
+ {
+ return $this->items;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setNextLink($nextLink)
+ {
+ $this->nextLink = $nextLink;
+ }
+
+ public function getNextLink()
+ {
+ return $this->nextLink;
+ }
+
+ public function setNextPageToken($nextPageToken)
+ {
+ $this->nextPageToken = $nextPageToken;
+ }
+
+ public function getNextPageToken()
+ {
+ return $this->nextPageToken;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_ParentList extends Google_Collection
+{
+ protected $collection_key = 'items';
+ protected $internal_gapi_mappings = array(
+ );
+ public $etag;
+ protected $itemsType = 'Google_Service_Drive_ParentReference';
+ protected $itemsDataType = 'array';
+ public $kind;
+ public $selfLink;
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setItems($items)
+ {
+ $this->items = $items;
+ }
+
+ public function getItems()
+ {
+ return $this->items;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_ParentReference extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $id;
+ public $isRoot;
+ public $kind;
+ public $parentLink;
+ public $selfLink;
+
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ public function setIsRoot($isRoot)
+ {
+ $this->isRoot = $isRoot;
+ }
+
+ public function getIsRoot()
+ {
+ return $this->isRoot;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setParentLink($parentLink)
+ {
+ $this->parentLink = $parentLink;
+ }
+
+ public function getParentLink()
+ {
+ return $this->parentLink;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_Permission extends Google_Collection
+{
+ protected $collection_key = 'additionalRoles';
+ protected $internal_gapi_mappings = array(
+ );
+ public $additionalRoles;
+ public $authKey;
+ public $domain;
+ public $emailAddress;
+ public $etag;
+ public $id;
+ public $kind;
+ public $name;
+ public $photoLink;
+ public $role;
+ public $selfLink;
+ public $type;
+ public $value;
+ public $withLink;
+
+ public function setAdditionalRoles($additionalRoles)
+ {
+ $this->additionalRoles = $additionalRoles;
+ }
+
+ public function getAdditionalRoles()
+ {
+ return $this->additionalRoles;
+ }
+
+ public function setAuthKey($authKey)
+ {
+ $this->authKey = $authKey;
+ }
+
+ public function getAuthKey()
+ {
+ return $this->authKey;
+ }
+
+ public function setDomain($domain)
+ {
+ $this->domain = $domain;
+ }
+
+ public function getDomain()
+ {
+ return $this->domain;
+ }
+
+ public function setEmailAddress($emailAddress)
+ {
+ $this->emailAddress = $emailAddress;
+ }
+
+ public function getEmailAddress()
+ {
+ return $this->emailAddress;
+ }
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setName($name)
+ {
+ $this->name = $name;
+ }
+
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ public function setPhotoLink($photoLink)
+ {
+ $this->photoLink = $photoLink;
+ }
+
+ public function getPhotoLink()
+ {
+ return $this->photoLink;
+ }
+
+ public function setRole($role)
+ {
+ $this->role = $role;
+ }
+
+ public function getRole()
+ {
+ return $this->role;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+
+ public function setType($type)
+ {
+ $this->type = $type;
+ }
+
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ public function setValue($value)
+ {
+ $this->value = $value;
+ }
+
+ public function getValue()
+ {
+ return $this->value;
+ }
+
+ public function setWithLink($withLink)
+ {
+ $this->withLink = $withLink;
+ }
+
+ public function getWithLink()
+ {
+ return $this->withLink;
+ }
+}
+
+class Google_Service_Drive_PermissionId extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $id;
+ public $kind;
+
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+}
+
+class Google_Service_Drive_PermissionList extends Google_Collection
+{
+ protected $collection_key = 'items';
+ protected $internal_gapi_mappings = array(
+ );
+ public $etag;
+ protected $itemsType = 'Google_Service_Drive_Permission';
+ protected $itemsDataType = 'array';
+ public $kind;
+ public $selfLink;
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setItems($items)
+ {
+ $this->items = $items;
+ }
+
+ public function getItems()
+ {
+ return $this->items;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_Property extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $etag;
+ public $key;
+ public $kind;
+ public $selfLink;
+ public $value;
+ public $visibility;
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setKey($key)
+ {
+ $this->key = $key;
+ }
+
+ public function getKey()
+ {
+ return $this->key;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+
+ public function setValue($value)
+ {
+ $this->value = $value;
+ }
+
+ public function getValue()
+ {
+ return $this->value;
+ }
+
+ public function setVisibility($visibility)
+ {
+ $this->visibility = $visibility;
+ }
+
+ public function getVisibility()
+ {
+ return $this->visibility;
+ }
+}
+
+class Google_Service_Drive_PropertyList extends Google_Collection
+{
+ protected $collection_key = 'items';
+ protected $internal_gapi_mappings = array(
+ );
+ public $etag;
+ protected $itemsType = 'Google_Service_Drive_Property';
+ protected $itemsDataType = 'array';
+ public $kind;
+ public $selfLink;
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setItems($items)
+ {
+ $this->items = $items;
+ }
+
+ public function getItems()
+ {
+ return $this->items;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_Revision extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $downloadUrl;
+ public $etag;
+ public $exportLinks;
+ public $fileSize;
+ public $id;
+ public $kind;
+ protected $lastModifyingUserType = 'Google_Service_Drive_User';
+ protected $lastModifyingUserDataType = '';
+ public $lastModifyingUserName;
+ public $md5Checksum;
+ public $mimeType;
+ public $modifiedDate;
+ public $originalFilename;
+ public $pinned;
+ public $publishAuto;
+ public $published;
+ public $publishedLink;
+ public $publishedOutsideDomain;
+ public $selfLink;
+
+ public function setDownloadUrl($downloadUrl)
+ {
+ $this->downloadUrl = $downloadUrl;
+ }
+
+ public function getDownloadUrl()
+ {
+ return $this->downloadUrl;
+ }
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setExportLinks($exportLinks)
+ {
+ $this->exportLinks = $exportLinks;
+ }
+
+ public function getExportLinks()
+ {
+ return $this->exportLinks;
+ }
+
+ public function setFileSize($fileSize)
+ {
+ $this->fileSize = $fileSize;
+ }
+
+ public function getFileSize()
+ {
+ return $this->fileSize;
+ }
+
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setLastModifyingUser(Google_Service_Drive_User $lastModifyingUser)
+ {
+ $this->lastModifyingUser = $lastModifyingUser;
+ }
+
+ public function getLastModifyingUser()
+ {
+ return $this->lastModifyingUser;
+ }
+
+ public function setLastModifyingUserName($lastModifyingUserName)
+ {
+ $this->lastModifyingUserName = $lastModifyingUserName;
+ }
+
+ public function getLastModifyingUserName()
+ {
+ return $this->lastModifyingUserName;
+ }
+
+ public function setMd5Checksum($md5Checksum)
+ {
+ $this->md5Checksum = $md5Checksum;
+ }
+
+ public function getMd5Checksum()
+ {
+ return $this->md5Checksum;
+ }
+
+ public function setMimeType($mimeType)
+ {
+ $this->mimeType = $mimeType;
+ }
+
+ public function getMimeType()
+ {
+ return $this->mimeType;
+ }
+
+ public function setModifiedDate($modifiedDate)
+ {
+ $this->modifiedDate = $modifiedDate;
+ }
+
+ public function getModifiedDate()
+ {
+ return $this->modifiedDate;
+ }
+
+ public function setOriginalFilename($originalFilename)
+ {
+ $this->originalFilename = $originalFilename;
+ }
+
+ public function getOriginalFilename()
+ {
+ return $this->originalFilename;
+ }
+
+ public function setPinned($pinned)
+ {
+ $this->pinned = $pinned;
+ }
+
+ public function getPinned()
+ {
+ return $this->pinned;
+ }
+
+ public function setPublishAuto($publishAuto)
+ {
+ $this->publishAuto = $publishAuto;
+ }
+
+ public function getPublishAuto()
+ {
+ return $this->publishAuto;
+ }
+
+ public function setPublished($published)
+ {
+ $this->published = $published;
+ }
+
+ public function getPublished()
+ {
+ return $this->published;
+ }
+
+ public function setPublishedLink($publishedLink)
+ {
+ $this->publishedLink = $publishedLink;
+ }
+
+ public function getPublishedLink()
+ {
+ return $this->publishedLink;
+ }
+
+ public function setPublishedOutsideDomain($publishedOutsideDomain)
+ {
+ $this->publishedOutsideDomain = $publishedOutsideDomain;
+ }
+
+ public function getPublishedOutsideDomain()
+ {
+ return $this->publishedOutsideDomain;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_RevisionExportLinks extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+}
+
+class Google_Service_Drive_RevisionList extends Google_Collection
+{
+ protected $collection_key = 'items';
+ protected $internal_gapi_mappings = array(
+ );
+ public $etag;
+ protected $itemsType = 'Google_Service_Drive_Revision';
+ protected $itemsDataType = 'array';
+ public $kind;
+ public $selfLink;
+
+ public function setEtag($etag)
+ {
+ $this->etag = $etag;
+ }
+
+ public function getEtag()
+ {
+ return $this->etag;
+ }
+
+ public function setItems($items)
+ {
+ $this->items = $items;
+ }
+
+ public function getItems()
+ {
+ return $this->items;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setSelfLink($selfLink)
+ {
+ $this->selfLink = $selfLink;
+ }
+
+ public function getSelfLink()
+ {
+ return $this->selfLink;
+ }
+}
+
+class Google_Service_Drive_User extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $displayName;
+ public $emailAddress;
+ public $isAuthenticatedUser;
+ public $kind;
+ public $permissionId;
+ protected $pictureType = 'Google_Service_Drive_UserPicture';
+ protected $pictureDataType = '';
+
+ public function setDisplayName($displayName)
+ {
+ $this->displayName = $displayName;
+ }
+
+ public function getDisplayName()
+ {
+ return $this->displayName;
+ }
+
+ public function setEmailAddress($emailAddress)
+ {
+ $this->emailAddress = $emailAddress;
+ }
+
+ public function getEmailAddress()
+ {
+ return $this->emailAddress;
+ }
+
+ public function setIsAuthenticatedUser($isAuthenticatedUser)
+ {
+ $this->isAuthenticatedUser = $isAuthenticatedUser;
+ }
+
+ public function getIsAuthenticatedUser()
+ {
+ return $this->isAuthenticatedUser;
+ }
+
+ public function setKind($kind)
+ {
+ $this->kind = $kind;
+ }
+
+ public function getKind()
+ {
+ return $this->kind;
+ }
+
+ public function setPermissionId($permissionId)
+ {
+ $this->permissionId = $permissionId;
+ }
+
+ public function getPermissionId()
+ {
+ return $this->permissionId;
+ }
+
+ public function setPicture(Google_Service_Drive_UserPicture $picture)
+ {
+ $this->picture = $picture;
+ }
+
+ public function getPicture()
+ {
+ return $this->picture;
+ }
+}
+
+class Google_Service_Drive_UserPicture extends Google_Model
+{
+ protected $internal_gapi_mappings = array(
+ );
+ public $url;
+
+ public function setUrl($url)
+ {
+ $this->url = $url;
+ }
+
+ public function getUrl()
+ {
+ return $this->url;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Exception.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Exception.php
new file mode 100644
index 00000000000..a780ff7b47c
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Exception.php
@@ -0,0 +1,53 @@
+<?php
+
+require_once 'Google/Exception.php';
+
+class Google_Service_Exception extends Google_Exception
+{
+ /**
+ * Optional list of errors returned in a JSON body of an HTTP error response.
+ */
+ protected $errors = array();
+
+ /**
+ * Override default constructor to add ability to set $errors.
+ *
+ * @param string $message
+ * @param int $code
+ * @param Exception|null $previous
+ * @param [{string, string}] errors List of errors returned in an HTTP
+ * response. Defaults to [].
+ */
+ public function __construct(
+ $message,
+ $code = 0,
+ Exception $previous = null,
+ $errors = array()
+ ) {
+ if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
+ parent::__construct($message, $code, $previous);
+ } else {
+ parent::__construct($message, $code);
+ }
+
+ $this->errors = $errors;
+ }
+
+ /**
+ * An example of the possible errors returned.
+ *
+ * {
+ * "domain": "global",
+ * "reason": "authError",
+ * "message": "Invalid Credentials",
+ * "locationType": "header",
+ * "location": "Authorization",
+ * }
+ *
+ * @return [{string, string}] List of errors return in an HTTP response or [].
+ */
+ public function getErrors()
+ {
+ return $this->errors;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Resource.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Resource.php
new file mode 100644
index 00000000000..d396907e1d0
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Service/Resource.php
@@ -0,0 +1,210 @@
+<?php
+/**
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once 'Google/Client.php';
+require_once 'Google/Exception.php';
+require_once 'Google/Utils.php';
+require_once 'Google/Http/Request.php';
+require_once 'Google/Http/MediaFileUpload.php';
+require_once 'Google/Http/REST.php';
+
+/**
+ * Implements the actual methods/resources of the discovered Google API using magic function
+ * calling overloading (__call()), which on call will see if the method name (plus.activities.list)
+ * is available in this service, and if so construct an apiHttpRequest representing it.
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ * @author Chirag Shah <chirags@google.com>
+ *
+ */
+class Google_Service_Resource
+{
+ // Valid query parameters that work, but don't appear in discovery.
+ private $stackParameters = array(
+ 'alt' => array('type' => 'string', 'location' => 'query'),
+ 'fields' => array('type' => 'string', 'location' => 'query'),
+ 'trace' => array('type' => 'string', 'location' => 'query'),
+ 'userIp' => array('type' => 'string', 'location' => 'query'),
+ 'userip' => array('type' => 'string', 'location' => 'query'),
+ 'quotaUser' => array('type' => 'string', 'location' => 'query'),
+ 'data' => array('type' => 'string', 'location' => 'body'),
+ 'mimeType' => array('type' => 'string', 'location' => 'header'),
+ 'uploadType' => array('type' => 'string', 'location' => 'query'),
+ 'mediaUpload' => array('type' => 'complex', 'location' => 'query'),
+ );
+
+ /** @var Google_Service $service */
+ private $service;
+
+ /** @var Google_Client $client */
+ private $client;
+
+ /** @var string $serviceName */
+ private $serviceName;
+
+ /** @var string $resourceName */
+ private $resourceName;
+
+ /** @var array $methods */
+ private $methods;
+
+ public function __construct($service, $serviceName, $resourceName, $resource)
+ {
+ $this->service = $service;
+ $this->client = $service->getClient();
+ $this->serviceName = $serviceName;
+ $this->resourceName = $resourceName;
+ $this->methods = isset($resource['methods']) ?
+ $resource['methods'] :
+ array($resourceName => $resource);
+ }
+
+ /**
+ * TODO(ianbarber): This function needs simplifying.
+ * @param $name
+ * @param $arguments
+ * @param $expected_class - optional, the expected class name
+ * @return Google_Http_Request|expected_class
+ * @throws Google_Exception
+ */
+ public function call($name, $arguments, $expected_class = null)
+ {
+ if (! isset($this->methods[$name])) {
+ throw new Google_Exception(
+ "Unknown function: " .
+ "{$this->serviceName}->{$this->resourceName}->{$name}()"
+ );
+ }
+ $method = $this->methods[$name];
+ $parameters = $arguments[0];
+
+ // postBody is a special case since it's not defined in the discovery
+ // document as parameter, but we abuse the param entry for storing it.
+ $postBody = null;
+ if (isset($parameters['postBody'])) {
+ if ($parameters['postBody'] instanceof Google_Model) {
+ // In the cases the post body is an existing object, we want
+ // to use the smart method to create a simple object for
+ // for JSONification.
+ $parameters['postBody'] = $parameters['postBody']->toSimpleObject();
+ } else if (is_object($parameters['postBody'])) {
+ // If the post body is another kind of object, we will try and
+ // wrangle it into a sensible format.
+ $parameters['postBody'] =
+ $this->convertToArrayAndStripNulls($parameters['postBody']);
+ }
+ $postBody = json_encode($parameters['postBody']);
+ unset($parameters['postBody']);
+ }
+
+ // TODO(ianbarber): optParams here probably should have been
+ // handled already - this may well be redundant code.
+ if (isset($parameters['optParams'])) {
+ $optParams = $parameters['optParams'];
+ unset($parameters['optParams']);
+ $parameters = array_merge($parameters, $optParams);
+ }
+
+ if (!isset($method['parameters'])) {
+ $method['parameters'] = array();
+ }
+
+ $method['parameters'] = array_merge(
+ $method['parameters'],
+ $this->stackParameters
+ );
+ foreach ($parameters as $key => $val) {
+ if ($key != 'postBody' && ! isset($method['parameters'][$key])) {
+ throw new Google_Exception("($name) unknown parameter: '$key'");
+ }
+ }
+
+ foreach ($method['parameters'] as $paramName => $paramSpec) {
+ if (isset($paramSpec['required']) &&
+ $paramSpec['required'] &&
+ ! isset($parameters[$paramName])
+ ) {
+ throw new Google_Exception("($name) missing required param: '$paramName'");
+ }
+ if (isset($parameters[$paramName])) {
+ $value = $parameters[$paramName];
+ $parameters[$paramName] = $paramSpec;
+ $parameters[$paramName]['value'] = $value;
+ unset($parameters[$paramName]['required']);
+ } else {
+ // Ensure we don't pass nulls.
+ unset($parameters[$paramName]);
+ }
+ }
+
+ $servicePath = $this->service->servicePath;
+
+ $url = Google_Http_REST::createRequestUri(
+ $servicePath,
+ $method['path'],
+ $parameters
+ );
+ $httpRequest = new Google_Http_Request(
+ $url,
+ $method['httpMethod'],
+ null,
+ $postBody
+ );
+ $httpRequest->setBaseComponent($this->client->getBasePath());
+
+ if ($postBody) {
+ $contentTypeHeader = array();
+ $contentTypeHeader['content-type'] = 'application/json; charset=UTF-8';
+ $httpRequest->setRequestHeaders($contentTypeHeader);
+ $httpRequest->setPostBody($postBody);
+ }
+
+ $httpRequest = $this->client->getAuth()->sign($httpRequest);
+ $httpRequest->setExpectedClass($expected_class);
+
+ if (isset($parameters['data']) &&
+ ($parameters['uploadType']['value'] == 'media' || $parameters['uploadType']['value'] == 'multipart')) {
+ // If we are doing a simple media upload, trigger that as a convenience.
+ $mfu = new Google_Http_MediaFileUpload(
+ $this->client,
+ $httpRequest,
+ isset($parameters['mimeType']) ? $parameters['mimeType']['value'] : 'application/octet-stream',
+ $parameters['data']['value']
+ );
+ }
+
+ if ($this->client->shouldDefer()) {
+ // If we are in batch or upload mode, return the raw request.
+ return $httpRequest;
+ }
+
+ return $this->client->execute($httpRequest);
+ }
+
+ protected function convertToArrayAndStripNulls($o)
+ {
+ $o = (array) $o;
+ foreach ($o as $k => $v) {
+ if ($v === null) {
+ unset($o[$k]);
+ } elseif (is_object($v) || is_array($v)) {
+ $o[$k] = $this->convertToArrayAndStripNulls($o[$k]);
+ }
+ }
+ return $o;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Signer.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Signer/Abstract.php
index 7892baac8df..250180920db 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Signer.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Signer/Abstract.php
@@ -15,14 +15,13 @@
* limitations under the License.
*/
-require_once "Google_P12Signer.php";
-
/**
* Signs data.
*
* @author Brian Eaton <beaton@google.com>
*/
-abstract class Google_Signer {
+abstract class Google_Signer_Abstract
+{
/**
* Signs data, returns the signature as binary data.
*/
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Signer/P12.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Signer/P12.php
new file mode 100644
index 00000000000..7cc6098bb63
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Signer/P12.php
@@ -0,0 +1,91 @@
+<?php
+/*
+ * Copyright 2011 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once 'Google/Auth/Exception.php';
+require_once 'Google/Signer/Abstract.php';
+
+/**
+ * Signs data.
+ *
+ * Only used for testing.
+ *
+ * @author Brian Eaton <beaton@google.com>
+ */
+class Google_Signer_P12 extends Google_Signer_Abstract
+{
+ // OpenSSL private key resource
+ private $privateKey;
+
+ // Creates a new signer from a .p12 file.
+ public function __construct($p12, $password)
+ {
+ if (!function_exists('openssl_x509_read')) {
+ throw new Google_Exception(
+ 'The Google PHP API library needs the openssl PHP extension'
+ );
+ }
+
+ // If the private key is provided directly, then this isn't in the p12
+ // format. Different versions of openssl support different p12 formats
+ // and the key from google wasn't being accepted by the version available
+ // at the time.
+ if (!$password && strpos($p12, "-----BEGIN RSA PRIVATE KEY-----") !== false) {
+ $this->privateKey = openssl_pkey_get_private($p12);
+ } else {
+ // This throws on error
+ $certs = array();
+ if (!openssl_pkcs12_read($p12, $certs, $password)) {
+ throw new Google_Auth_Exception(
+ "Unable to parse the p12 file. " .
+ "Is this a .p12 file? Is the password correct? OpenSSL error: " .
+ openssl_error_string()
+ );
+ }
+ // TODO(beaton): is this part of the contract for the openssl_pkcs12_read
+ // method? What happens if there are multiple private keys? Do we care?
+ if (!array_key_exists("pkey", $certs) || !$certs["pkey"]) {
+ throw new Google_Auth_Exception("No private key found in p12 file.");
+ }
+ $this->privateKey = openssl_pkey_get_private($certs['pkey']);
+ }
+
+ if (!$this->privateKey) {
+ throw new Google_Auth_Exception("Unable to load private key");
+ }
+ }
+
+ public function __destruct()
+ {
+ if ($this->privateKey) {
+ openssl_pkey_free($this->privateKey);
+ }
+ }
+
+ public function sign($data)
+ {
+ if (version_compare(PHP_VERSION, '5.3.0') < 0) {
+ throw new Google_Auth_Exception(
+ "PHP 5.3.0 or higher is required to use service accounts."
+ );
+ }
+ $hash = defined("OPENSSL_ALGO_SHA256") ? OPENSSL_ALGO_SHA256 : "sha256";
+ if (!openssl_sign($data, $signature, $this->privateKey, $hash)) {
+ throw new Google_Auth_Exception("Unable to sign data");
+ }
+ return $signature;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_Utils.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Utils.php
index be94902c2ed..f5ef32cd4d6 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_Utils.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Utils.php
@@ -21,25 +21,33 @@
*
* @author Chirag Shah <chirags@google.com>
*/
-class Google_Utils {
- public static function urlSafeB64Encode($data) {
+class Google_Utils
+{
+ public static function urlSafeB64Encode($data)
+ {
$b64 = base64_encode($data);
- $b64 = str_replace(array('+', '/', '\r', '\n', '='),
- array('-', '_'),
- $b64);
+ $b64 = str_replace(
+ array('+', '/', '\r', '\n', '='),
+ array('-', '_'),
+ $b64
+ );
return $b64;
}
- public static function urlSafeB64Decode($b64) {
- $b64 = str_replace(array('-', '_'),
- array('+', '/'),
- $b64);
+ public static function urlSafeB64Decode($b64)
+ {
+ $b64 = str_replace(
+ array('-', '_'),
+ array('+', '/'),
+ $b64
+ );
return base64_decode($b64);
}
/**
- * Misc function used to count the number of bytes in a post body, in the world of multi-byte chars
- * and the unpredictability of strlen/mb_strlen/sizeof, this is the only way to do that in a sane
+ * Misc function used to count the number of bytes in a post body, in the
+ * world of multi-byte chars and the unpredictability of
+ * strlen/mb_strlen/sizeof, this is the only way to do that in a sane
* manner at the moment.
*
* This algorithm was originally developed for the
@@ -51,7 +59,8 @@ class Google_Utils {
* @param string $str
* @return int The number of bytes in a string.
*/
- static public function getStrLen($str) {
+ public static function getStrLen($str)
+ {
$strlenVar = strlen($str);
$d = $ret = 0;
for ($count = 0; $count < $strlenVar; ++ $count) {
@@ -61,31 +70,26 @@ class Google_Utils {
// characters U-00000000 - U-0000007F (same as ASCII)
$ret ++;
break;
-
case (($ordinalValue & 0xE0) == 0xC0):
// characters U-00000080 - U-000007FF, mask 110XXXXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$ret += 2;
break;
-
case (($ordinalValue & 0xF0) == 0xE0):
// characters U-00000800 - U-0000FFFF, mask 1110XXXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$ret += 3;
break;
-
case (($ordinalValue & 0xF8) == 0xF0):
// characters U-00010000 - U-001FFFFF, mask 11110XXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$ret += 4;
break;
-
case (($ordinalValue & 0xFC) == 0xF8):
// characters U-00200000 - U-03FFFFFF, mask 111110XX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$ret += 5;
break;
-
case (($ordinalValue & 0xFE) == 0xFC):
// characters U-04000000 - U-7FFFFFFF, mask 1111110X
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
@@ -103,7 +107,8 @@ class Google_Utils {
* @param array $arr
* @return array Normalized array.
*/
- public static function normalize($arr) {
+ public static function normalize($arr)
+ {
if (!is_array($arr)) {
return array();
}
@@ -114,4 +119,17 @@ class Google_Utils {
}
return $normalized;
}
-} \ No newline at end of file
+
+ /**
+ * Convert a string to camelCase
+ * @param string $value
+ * @return string
+ */
+ public static function camelCase($value)
+ {
+ $value = ucwords(str_replace(array('-', '_'), ' ', $value));
+ $value = str_replace(' ', '', $value);
+ $value[0] = strtolower($value[0]);
+ return $value;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google/Utils/URITemplate.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Utils/URITemplate.php
new file mode 100644
index 00000000000..f5ee38bb333
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Utils/URITemplate.php
@@ -0,0 +1,333 @@
+<?php
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Implementation of levels 1-3 of the URI Template spec.
+ * @see http://tools.ietf.org/html/rfc6570
+ */
+class Google_Utils_URITemplate
+{
+ const TYPE_MAP = "1";
+ const TYPE_LIST = "2";
+ const TYPE_SCALAR = "4";
+
+ /**
+ * @var $operators array
+ * These are valid at the start of a template block to
+ * modify the way in which the variables inside are
+ * processed.
+ */
+ private $operators = array(
+ "+" => "reserved",
+ "/" => "segments",
+ "." => "dotprefix",
+ "#" => "fragment",
+ ";" => "semicolon",
+ "?" => "form",
+ "&" => "continuation"
+ );
+
+ /**
+ * @var reserved array
+ * These are the characters which should not be URL encoded in reserved
+ * strings.
+ */
+ private $reserved = array(
+ "=", ",", "!", "@", "|", ":", "/", "?", "#",
+ "[", "]",'$', "&", "'", "(", ")", "*", "+", ";"
+ );
+ private $reservedEncoded = array(
+ "%3D", "%2C", "%21", "%40", "%7C", "%3A", "%2F", "%3F",
+ "%23", "%5B", "%5D", "%24", "%26", "%27", "%28", "%29",
+ "%2A", "%2B", "%3B"
+ );
+
+ public function parse($string, array $parameters)
+ {
+ return $this->resolveNextSection($string, $parameters);
+ }
+
+ /**
+ * This function finds the first matching {...} block and
+ * executes the replacement. It then calls itself to find
+ * subsequent blocks, if any.
+ */
+ private function resolveNextSection($string, $parameters)
+ {
+ $start = strpos($string, "{");
+ if ($start === false) {
+ return $string;
+ }
+ $end = strpos($string, "}");
+ if ($end === false) {
+ return $string;
+ }
+ $string = $this->replace($string, $start, $end, $parameters);
+ return $this->resolveNextSection($string, $parameters);
+ }
+
+ private function replace($string, $start, $end, $parameters)
+ {
+ // We know a data block will have {} round it, so we can strip that.
+ $data = substr($string, $start + 1, $end - $start - 1);
+
+ // If the first character is one of the reserved operators, it effects
+ // the processing of the stream.
+ if (isset($this->operators[$data[0]])) {
+ $op = $this->operators[$data[0]];
+ $data = substr($data, 1);
+ $prefix = "";
+ $prefix_on_missing = false;
+
+ switch ($op) {
+ case "reserved":
+ // Reserved means certain characters should not be URL encoded
+ $data = $this->replaceVars($data, $parameters, ",", null, true);
+ break;
+ case "fragment":
+ // Comma separated with fragment prefix. Bare values only.
+ $prefix = "#";
+ $prefix_on_missing = true;
+ $data = $this->replaceVars($data, $parameters, ",", null, true);
+ break;
+ case "segments":
+ // Slash separated data. Bare values only.
+ $prefix = "/";
+ $data =$this->replaceVars($data, $parameters, "/");
+ break;
+ case "dotprefix":
+ // Dot separated data. Bare values only.
+ $prefix = ".";
+ $prefix_on_missing = true;
+ $data = $this->replaceVars($data, $parameters, ".");
+ break;
+ case "semicolon":
+ // Semicolon prefixed and separated. Uses the key name
+ $prefix = ";";
+ $data = $this->replaceVars($data, $parameters, ";", "=", false, true, false);
+ break;
+ case "form":
+ // Standard URL format. Uses the key name
+ $prefix = "?";
+ $data = $this->replaceVars($data, $parameters, "&", "=");
+ break;
+ case "continuation":
+ // Standard URL, but with leading ampersand. Uses key name.
+ $prefix = "&";
+ $data = $this->replaceVars($data, $parameters, "&", "=");
+ break;
+ }
+
+ // Add the initial prefix character if data is valid.
+ if ($data || ($data !== false && $prefix_on_missing)) {
+ $data = $prefix . $data;
+ }
+
+ } else {
+ // If no operator we replace with the defaults.
+ $data = $this->replaceVars($data, $parameters);
+ }
+ // This is chops out the {...} and replaces with the new section.
+ return substr($string, 0, $start) . $data . substr($string, $end + 1);
+ }
+
+ private function replaceVars(
+ $section,
+ $parameters,
+ $sep = ",",
+ $combine = null,
+ $reserved = false,
+ $tag_empty = false,
+ $combine_on_empty = true
+ ) {
+ if (strpos($section, ",") === false) {
+ // If we only have a single value, we can immediately process.
+ return $this->combine(
+ $section,
+ $parameters,
+ $sep,
+ $combine,
+ $reserved,
+ $tag_empty,
+ $combine_on_empty
+ );
+ } else {
+ // If we have multiple values, we need to split and loop over them.
+ // Each is treated individually, then glued together with the
+ // separator character.
+ $vars = explode(",", $section);
+ return $this->combineList(
+ $vars,
+ $sep,
+ $parameters,
+ $combine,
+ $reserved,
+ false, // Never emit empty strings in multi-param replacements
+ $combine_on_empty
+ );
+ }
+ }
+
+ public function combine(
+ $key,
+ $parameters,
+ $sep,
+ $combine,
+ $reserved,
+ $tag_empty,
+ $combine_on_empty
+ ) {
+ $length = false;
+ $explode = false;
+ $skip_final_combine = false;
+ $value = false;
+
+ // Check for length restriction.
+ if (strpos($key, ":") !== false) {
+ list($key, $length) = explode(":", $key);
+ }
+
+ // Check for explode parameter.
+ if ($key[strlen($key) - 1] == "*") {
+ $explode = true;
+ $key = substr($key, 0, -1);
+ $skip_final_combine = true;
+ }
+
+ // Define the list separator.
+ $list_sep = $explode ? $sep : ",";
+
+ if (isset($parameters[$key])) {
+ $data_type = $this->getDataType($parameters[$key]);
+ switch($data_type) {
+ case self::TYPE_SCALAR:
+ $value = $this->getValue($parameters[$key], $length);
+ break;
+ case self::TYPE_LIST:
+ $values = array();
+ foreach ($parameters[$key] as $pkey => $pvalue) {
+ $pvalue = $this->getValue($pvalue, $length);
+ if ($combine && $explode) {
+ $values[$pkey] = $key . $combine . $pvalue;
+ } else {
+ $values[$pkey] = $pvalue;
+ }
+ }
+ $value = implode($list_sep, $values);
+ if ($value == '') {
+ return '';
+ }
+ break;
+ case self::TYPE_MAP:
+ $values = array();
+ foreach ($parameters[$key] as $pkey => $pvalue) {
+ $pvalue = $this->getValue($pvalue, $length);
+ if ($explode) {
+ $pkey = $this->getValue($pkey, $length);
+ $values[] = $pkey . "=" . $pvalue; // Explode triggers = combine.
+ } else {
+ $values[] = $pkey;
+ $values[] = $pvalue;
+ }
+ }
+ $value = implode($list_sep, $values);
+ if ($value == '') {
+ return false;
+ }
+ break;
+ }
+ } else if ($tag_empty) {
+ // If we are just indicating empty values with their key name, return that.
+ return $key;
+ } else {
+ // Otherwise we can skip this variable due to not being defined.
+ return false;
+ }
+
+ if ($reserved) {
+ $value = str_replace($this->reservedEncoded, $this->reserved, $value);
+ }
+
+ // If we do not need to include the key name, we just return the raw
+ // value.
+ if (!$combine || $skip_final_combine) {
+ return $value;
+ }
+
+ // Else we combine the key name: foo=bar, if value is not the empty string.
+ return $key . ($value != '' || $combine_on_empty ? $combine . $value : '');
+ }
+
+ /**
+ * Return the type of a passed in value
+ */
+ private function getDataType($data)
+ {
+ if (is_array($data)) {
+ reset($data);
+ if (key($data) !== 0) {
+ return self::TYPE_MAP;
+ }
+ return self::TYPE_LIST;
+ }
+ return self::TYPE_SCALAR;
+ }
+
+ /**
+ * Utility function that merges multiple combine calls
+ * for multi-key templates.
+ */
+ private function combineList(
+ $vars,
+ $sep,
+ $parameters,
+ $combine,
+ $reserved,
+ $tag_empty,
+ $combine_on_empty
+ ) {
+ $ret = array();
+ foreach ($vars as $var) {
+ $response = $this->combine(
+ $var,
+ $parameters,
+ $sep,
+ $combine,
+ $reserved,
+ $tag_empty,
+ $combine_on_empty
+ );
+ if ($response === false) {
+ continue;
+ }
+ $ret[] = $response;
+ }
+ return implode($sep, $ret);
+ }
+
+ /**
+ * Utility function to encode and trim values
+ */
+ private function getValue($value, $length)
+ {
+ if ($length) {
+ $value = substr($value, 0, $length);
+ }
+ $value = rawurlencode($value);
+ return $value;
+ }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Verifier.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Verifier/Abstract.php
index 2839a371df1..e6c9eeb03cc 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Verifier.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Verifier/Abstract.php
@@ -15,14 +15,13 @@
* limitations under the License.
*/
-require_once "Google_PemVerifier.php";
-
/**
* Verifies signatures.
*
* @author Brian Eaton <beaton@google.com>
*/
-abstract class Google_Verifier {
+abstract class Google_Verifier_Abstract
+{
/**
* Checks a signature, returns true if the signature is correct,
* false otherwise.
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_PemVerifier.php b/apps/files_external/3rdparty/google-api-php-client/src/Google/Verifier/Pem.php
index 6c1c85fa20e..f281575e172 100644
--- a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_PemVerifier.php
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google/Verifier/Pem.php
@@ -14,13 +14,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
+require_once 'Google/Auth/Exception.php';
+require_once 'Google/Verifier/Abstract.php';
/**
* Verifies signatures using PEM encoded certificates.
*
* @author Brian Eaton <beaton@google.com>
*/
-class Google_PemVerifier extends Google_Verifier {
+class Google_Verifier_Pem extends Google_Verifier_Abstract
+{
private $publicKey;
/**
@@ -28,20 +32,22 @@ class Google_PemVerifier extends Google_Verifier {
*
* $pem: a PEM encoded certificate (not a file).
* @param $pem
- * @throws Google_AuthException
+ * @throws Google_Auth_Exception
* @throws Google_Exception
*/
- function __construct($pem) {
+ public function __construct($pem)
+ {
if (!function_exists('openssl_x509_read')) {
throw new Google_Exception('Google API PHP client needs the openssl PHP extension');
}
$this->publicKey = openssl_x509_read($pem);
if (!$this->publicKey) {
- throw new Google_AuthException("Unable to parse PEM: $pem");
+ throw new Google_Auth_Exception("Unable to parse PEM: $pem");
}
}
- function __destruct() {
+ public function __destruct()
+ {
if ($this->publicKey) {
openssl_x509_free($this->publicKey);
}
@@ -53,13 +59,15 @@ class Google_PemVerifier extends Google_Verifier {
* Returns true if the signature is valid, false otherwise.
* @param $data
* @param $signature
- * @throws Google_AuthException
+ * @throws Google_Auth_Exception
* @return bool
*/
- function verify($data, $signature) {
- $status = openssl_verify($data, $signature, $this->publicKey, "sha256");
+ public function verify($data, $signature)
+ {
+ $hash = defined("OPENSSL_ALGO_SHA256") ? OPENSSL_ALGO_SHA256 : "sha256";
+ $status = openssl_verify($data, $signature, $this->publicKey, $hash);
if ($status === -1) {
- throw new Google_AuthException('Signature verification error: ' . openssl_error_string());
+ throw new Google_Auth_Exception('Signature verification error: ' . openssl_error_string());
}
return $status === 1;
}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google_Client.php b/apps/files_external/3rdparty/google-api-php-client/src/Google_Client.php
deleted file mode 100644
index 498d3a8e9dd..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/Google_Client.php
+++ /dev/null
@@ -1,462 +0,0 @@
-<?php
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Check for the required json and curl extensions, the Google APIs PHP Client
-// won't function without them.
-if (! function_exists('curl_init')) {
- throw new Exception('Google PHP API Client requires the CURL PHP extension');
-}
-
-if (! function_exists('json_decode')) {
- throw new Exception('Google PHP API Client requires the JSON PHP extension');
-}
-
-if (! function_exists('http_build_query')) {
- throw new Exception('Google PHP API Client requires http_build_query()');
-}
-
-if (! ini_get('date.timezone') && function_exists('date_default_timezone_set')) {
- date_default_timezone_set('UTC');
-}
-
-// hack around with the include paths a bit so the library 'just works'
-set_include_path(dirname(__FILE__) . PATH_SEPARATOR . get_include_path());
-
-require_once "config.php";
-// If a local configuration file is found, merge it's values with the default configuration
-if (file_exists(dirname(__FILE__) . '/local_config.php')) {
- $defaultConfig = $apiConfig;
- require_once (dirname(__FILE__) . '/local_config.php');
- $apiConfig = array_merge($defaultConfig, $apiConfig);
-}
-
-// Include the top level classes, they each include their own dependencies
-require_once 'service/Google_Model.php';
-require_once 'service/Google_Service.php';
-require_once 'service/Google_ServiceResource.php';
-require_once 'auth/Google_AssertionCredentials.php';
-require_once 'auth/Google_Signer.php';
-require_once 'auth/Google_P12Signer.php';
-require_once 'service/Google_BatchRequest.php';
-require_once 'external/URITemplateParser.php';
-require_once 'auth/Google_Auth.php';
-require_once 'cache/Google_Cache.php';
-require_once 'io/Google_IO.php';
-require_once('service/Google_MediaFileUpload.php');
-
-/**
- * The Google API Client
- * http://code.google.com/p/google-api-php-client/
- *
- * @author Chris Chabot <chabotc@google.com>
- * @author Chirag Shah <chirags@google.com>
- */
-class Google_Client {
- /**
- * @static
- * @var Google_Auth $auth
- */
- static $auth;
-
- /**
- * @static
- * @var Google_IO $io
- */
- static $io;
-
- /**
- * @static
- * @var Google_Cache $cache
- */
- static $cache;
-
- /**
- * @static
- * @var boolean $useBatch
- */
- static $useBatch = false;
-
- /** @var array $scopes */
- protected $scopes = array();
-
- /** @var bool $useObjects */
- protected $useObjects = false;
-
- // definitions of services that are discovered.
- protected $services = array();
-
- // Used to track authenticated state, can't discover services after doing authenticate()
- private $authenticated = false;
-
- public function __construct($config = array()) {
- global $apiConfig;
- $apiConfig = array_merge($apiConfig, $config);
- self::$cache = new $apiConfig['cacheClass']();
- self::$auth = new $apiConfig['authClass']();
- self::$io = new $apiConfig['ioClass']();
- }
-
- /**
- * Add a service
- */
- public function addService($service, $version = false) {
- global $apiConfig;
- if ($this->authenticated) {
- throw new Google_Exception('Cant add services after having authenticated');
- }
- $this->services[$service] = array();
- if (isset($apiConfig['services'][$service])) {
- // Merge the service descriptor with the default values
- $this->services[$service] = array_merge($this->services[$service], $apiConfig['services'][$service]);
- }
- }
-
- public function authenticate($code = null) {
- $service = $this->prepareService();
- $this->authenticated = true;
- return self::$auth->authenticate($service, $code);
- }
-
- /**
- * @return array
- * @visible For Testing
- */
- public function prepareService() {
- $service = array();
- $scopes = array();
- if ($this->scopes) {
- $scopes = $this->scopes;
- } else {
- foreach ($this->services as $key => $val) {
- if (isset($val['scope'])) {
- if (is_array($val['scope'])) {
- $scopes = array_merge($val['scope'], $scopes);
- } else {
- $scopes[] = $val['scope'];
- }
- } else {
- $scopes[] = 'https://www.googleapis.com/auth/' . $key;
- }
- unset($val['discoveryURI']);
- unset($val['scope']);
- $service = array_merge($service, $val);
- }
- }
- $service['scope'] = implode(' ', $scopes);
- return $service;
- }
-
- /**
- * Set the OAuth 2.0 access token using the string that resulted from calling authenticate()
- * or Google_Client#getAccessToken().
- * @param string $accessToken JSON encoded string containing in the following format:
- * {"access_token":"TOKEN", "refresh_token":"TOKEN", "token_type":"Bearer",
- * "expires_in":3600, "id_token":"TOKEN", "created":1320790426}
- */
- public function setAccessToken($accessToken) {
- if ($accessToken == null || 'null' == $accessToken) {
- $accessToken = null;
- }
- self::$auth->setAccessToken($accessToken);
- }
-
- /**
- * Set the type of Auth class the client should use.
- * @param string $authClassName
- */
- public function setAuthClass($authClassName) {
- self::$auth = new $authClassName();
- }
-
- /**
- * Construct the OAuth 2.0 authorization request URI.
- * @return string
- */
- public function createAuthUrl() {
- $service = $this->prepareService();
- return self::$auth->createAuthUrl($service['scope']);
- }
-
- /**
- * Get the OAuth 2.0 access token.
- * @return string $accessToken JSON encoded string in the following format:
- * {"access_token":"TOKEN", "refresh_token":"TOKEN", "token_type":"Bearer",
- * "expires_in":3600,"id_token":"TOKEN", "created":1320790426}
- */
- public function getAccessToken() {
- $token = self::$auth->getAccessToken();
- return (null == $token || 'null' == $token) ? null : $token;
- }
-
- /**
- * Returns if the access_token is expired.
- * @return bool Returns True if the access_token is expired.
- */
- public function isAccessTokenExpired() {
- return self::$auth->isAccessTokenExpired();
- }
-
- /**
- * Set the developer key to use, these are obtained through the API Console.
- * @see http://code.google.com/apis/console-help/#generatingdevkeys
- * @param string $developerKey
- */
- public function setDeveloperKey($developerKey) {
- self::$auth->setDeveloperKey($developerKey);
- }
-
- /**
- * Set OAuth 2.0 "state" parameter to achieve per-request customization.
- * @see http://tools.ietf.org/html/draft-ietf-oauth-v2-22#section-3.1.2.2
- * @param string $state
- */
- public function setState($state) {
- self::$auth->setState($state);
- }
-
- /**
- * @param string $accessType Possible values for access_type include:
- * {@code "offline"} to request offline access from the user. (This is the default value)
- * {@code "online"} to request online access from the user.
- */
- public function setAccessType($accessType) {
- self::$auth->setAccessType($accessType);
- }
-
- /**
- * @param string $approvalPrompt Possible values for approval_prompt include:
- * {@code "force"} to force the approval UI to appear. (This is the default value)
- * {@code "auto"} to request auto-approval when possible.
- */
- public function setApprovalPrompt($approvalPrompt) {
- self::$auth->setApprovalPrompt($approvalPrompt);
- }
-
- /**
- * Set the application name, this is included in the User-Agent HTTP header.
- * @param string $applicationName
- */
- public function setApplicationName($applicationName) {
- global $apiConfig;
- $apiConfig['application_name'] = $applicationName;
- }
-
- /**
- * Set the OAuth 2.0 Client ID.
- * @param string $clientId
- */
- public function setClientId($clientId) {
- global $apiConfig;
- $apiConfig['oauth2_client_id'] = $clientId;
- self::$auth->clientId = $clientId;
- }
-
- /**
- * Get the OAuth 2.0 Client ID.
- */
- public function getClientId() {
- return self::$auth->clientId;
- }
-
- /**
- * Set the OAuth 2.0 Client Secret.
- * @param string $clientSecret
- */
- public function setClientSecret($clientSecret) {
- global $apiConfig;
- $apiConfig['oauth2_client_secret'] = $clientSecret;
- self::$auth->clientSecret = $clientSecret;
- }
-
- /**
- * Get the OAuth 2.0 Client Secret.
- */
- public function getClientSecret() {
- return self::$auth->clientSecret;
- }
-
- /**
- * Set the OAuth 2.0 Redirect URI.
- * @param string $redirectUri
- */
- public function setRedirectUri($redirectUri) {
- global $apiConfig;
- $apiConfig['oauth2_redirect_uri'] = $redirectUri;
- self::$auth->redirectUri = $redirectUri;
- }
-
- /**
- * Get the OAuth 2.0 Redirect URI.
- */
- public function getRedirectUri() {
- return self::$auth->redirectUri;
- }
-
- /**
- * Fetches a fresh OAuth 2.0 access token with the given refresh token.
- * @param string $refreshToken
- * @return void
- */
- public function refreshToken($refreshToken) {
- self::$auth->refreshToken($refreshToken);
- }
-
- /**
- * Revoke an OAuth2 access token or refresh token. This method will revoke the current access
- * token, if a token isn't provided.
- * @throws Google_AuthException
- * @param string|null $token The token (access token or a refresh token) that should be revoked.
- * @return boolean Returns True if the revocation was successful, otherwise False.
- */
- public function revokeToken($token = null) {
- self::$auth->revokeToken($token);
- }
-
- /**
- * Verify an id_token. This method will verify the current id_token, if one
- * isn't provided.
- * @throws Google_AuthException
- * @param string|null $token The token (id_token) that should be verified.
- * @return Google_LoginTicket Returns an apiLoginTicket if the verification was
- * successful.
- */
- public function verifyIdToken($token = null) {
- return self::$auth->verifyIdToken($token);
- }
-
- /**
- * @param Google_AssertionCredentials $creds
- * @return void
- */
- public function setAssertionCredentials(Google_AssertionCredentials $creds) {
- self::$auth->setAssertionCredentials($creds);
- }
-
- /**
- * This function allows you to overrule the automatically generated scopes,
- * so that you can ask for more or less permission in the auth flow
- * Set this before you call authenticate() though!
- * @param array $scopes, ie: array('https://www.googleapis.com/auth/plus.me', 'https://www.googleapis.com/auth/moderator')
- */
- public function setScopes($scopes) {
- $this->scopes = is_string($scopes) ? explode(" ", $scopes) : $scopes;
- }
-
- /**
- * Returns the list of scopes set on the client
- * @return array the list of scopes
- *
- */
- public function getScopes() {
- return $this->scopes;
- }
-
- /**
- * Declare if objects should be returned by the api service classes.
- *
- * @param boolean $useObjects True if objects should be returned by the service classes.
- * False if associative arrays should be returned (default behavior).
- * @experimental
- */
- public function setUseObjects($useObjects) {
- global $apiConfig;
- $apiConfig['use_objects'] = $useObjects;
- }
-
- /**
- * Declare if objects should be returned by the api service classes.
- *
- * @param boolean $useBatch True if the experimental batch support should
- * be enabled. Defaults to False.
- * @experimental
- */
- public function setUseBatch($useBatch) {
- self::$useBatch = $useBatch;
- }
-
- /**
- * @static
- * @return Google_Auth the implementation of apiAuth.
- */
- public static function getAuth() {
- return Google_Client::$auth;
- }
-
- /**
- * @static
- * @return Google_IO the implementation of apiIo.
- */
- public static function getIo() {
- return Google_Client::$io;
- }
-
- /**
- * @return Google_Cache the implementation of apiCache.
- */
- public function getCache() {
- return Google_Client::$cache;
- }
-}
-
-// Exceptions that the Google PHP API Library can throw
-class Google_Exception extends Exception {}
-class Google_AuthException extends Google_Exception {}
-class Google_CacheException extends Google_Exception {}
-class Google_IOException extends Google_Exception {}
-class Google_ServiceException extends Google_Exception {
- /**
- * Optional list of errors returned in a JSON body of an HTTP error response.
- */
- protected $errors = array();
-
- /**
- * Override default constructor to add ability to set $errors.
- *
- * @param string $message
- * @param int $code
- * @param Exception|null $previous
- * @param [{string, string}] errors List of errors returned in an HTTP
- * response. Defaults to [].
- */
- public function __construct($message, $code = 0, Exception $previous = null,
- $errors = array()) {
- if(version_compare(PHP_VERSION, '5.3.0') >= 0) {
- parent::__construct($message, $code, $previous);
- } else {
- parent::__construct($message, $code);
- }
-
- $this->errors = $errors;
- }
-
- /**
- * An example of the possible errors returned.
- *
- * {
- * "domain": "global",
- * "reason": "authError",
- * "message": "Invalid Credentials",
- * "locationType": "header",
- * "location": "Authorization",
- * }
- *
- * @return [{string, string}] List of errors return in an HTTP response or [].
- */
- public function getErrors() {
- return $this->errors;
- }
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_AuthNone.php b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_AuthNone.php
deleted file mode 100644
index 6ca6bc2b0db..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_AuthNone.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Do-nothing authentication implementation, use this if you want to make un-authenticated calls
- * @author Chris Chabot <chabotc@google.com>
- * @author Chirag Shah <chirags@google.com>
- */
-class Google_AuthNone extends Google_Auth {
- public $key = null;
-
- public function __construct() {
- global $apiConfig;
- if (!empty($apiConfig['developer_key'])) {
- $this->setDeveloperKey($apiConfig['developer_key']);
- }
- }
-
- public function setDeveloperKey($key) {$this->key = $key;}
- public function authenticate($service) {/*noop*/}
- public function setAccessToken($accessToken) {/* noop*/}
- public function getAccessToken() {return null;}
- public function createAuthUrl($scope) {return null;}
- public function refreshToken($refreshToken) {/* noop*/}
- public function revokeToken() {/* noop*/}
-
- public function sign(Google_HttpRequest $request) {
- if ($this->key) {
- $request->setUrl($request->getUrl() . ((strpos($request->getUrl(), '?') === false) ? '?' : '&')
- . 'key='.urlencode($this->key));
- }
- return $request;
- }
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_OAuth2.php b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_OAuth2.php
deleted file mode 100644
index a07d4365a7a..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_OAuth2.php
+++ /dev/null
@@ -1,445 +0,0 @@
-<?php
-/*
- * Copyright 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-require_once "Google_Verifier.php";
-require_once "Google_LoginTicket.php";
-require_once "service/Google_Utils.php";
-
-/**
- * Authentication class that deals with the OAuth 2 web-server authentication flow
- *
- * @author Chris Chabot <chabotc@google.com>
- * @author Chirag Shah <chirags@google.com>
- *
- */
-class Google_OAuth2 extends Google_Auth {
- public $clientId;
- public $clientSecret;
- public $developerKey;
- public $token;
- public $redirectUri;
- public $state;
- public $accessType = 'offline';
- public $approvalPrompt = 'force';
-
- /** @var Google_AssertionCredentials $assertionCredentials */
- public $assertionCredentials;
-
- const OAUTH2_REVOKE_URI = 'https://accounts.google.com/o/oauth2/revoke';
- const OAUTH2_TOKEN_URI = 'https://accounts.google.com/o/oauth2/token';
- const OAUTH2_AUTH_URL = 'https://accounts.google.com/o/oauth2/auth';
- const OAUTH2_FEDERATED_SIGNON_CERTS_URL = 'https://www.googleapis.com/oauth2/v1/certs';
- const CLOCK_SKEW_SECS = 300; // five minutes in seconds
- const AUTH_TOKEN_LIFETIME_SECS = 300; // five minutes in seconds
- const MAX_TOKEN_LIFETIME_SECS = 86400; // one day in seconds
-
- /**
- * Instantiates the class, but does not initiate the login flow, leaving it
- * to the discretion of the caller (which is done by calling authenticate()).
- */
- public function __construct() {
- global $apiConfig;
-
- if (! empty($apiConfig['developer_key'])) {
- $this->developerKey = $apiConfig['developer_key'];
- }
-
- if (! empty($apiConfig['oauth2_client_id'])) {
- $this->clientId = $apiConfig['oauth2_client_id'];
- }
-
- if (! empty($apiConfig['oauth2_client_secret'])) {
- $this->clientSecret = $apiConfig['oauth2_client_secret'];
- }
-
- if (! empty($apiConfig['oauth2_redirect_uri'])) {
- $this->redirectUri = $apiConfig['oauth2_redirect_uri'];
- }
-
- if (! empty($apiConfig['oauth2_access_type'])) {
- $this->accessType = $apiConfig['oauth2_access_type'];
- }
-
- if (! empty($apiConfig['oauth2_approval_prompt'])) {
- $this->approvalPrompt = $apiConfig['oauth2_approval_prompt'];
- }
-
- }
-
- /**
- * @param $service
- * @param string|null $code
- * @throws Google_AuthException
- * @return string
- */
- public function authenticate($service, $code = null) {
- if (!$code && isset($_GET['code'])) {
- $code = $_GET['code'];
- }
-
- if ($code) {
- // We got here from the redirect from a successful authorization grant, fetch the access token
- $request = Google_Client::$io->makeRequest(new Google_HttpRequest(self::OAUTH2_TOKEN_URI, 'POST', array(), array(
- 'code' => $code,
- 'grant_type' => 'authorization_code',
- 'redirect_uri' => $this->redirectUri,
- 'client_id' => $this->clientId,
- 'client_secret' => $this->clientSecret
- )));
-
- if ($request->getResponseHttpCode() == 200) {
- $this->setAccessToken($request->getResponseBody());
- $this->token['created'] = time();
- return $this->getAccessToken();
- } else {
- $response = $request->getResponseBody();
- $decodedResponse = json_decode($response, true);
- if ($decodedResponse != null && $decodedResponse['error']) {
- $response = $decodedResponse['error'];
- }
- throw new Google_AuthException("Error fetching OAuth2 access token, message: '$response'", $request->getResponseHttpCode());
- }
- }
-
- $authUrl = $this->createAuthUrl($service['scope']);
- header('Location: ' . $authUrl);
- return true;
- }
-
- /**
- * Create a URL to obtain user authorization.
- * The authorization endpoint allows the user to first
- * authenticate, and then grant/deny the access request.
- * @param string $scope The scope is expressed as a list of space-delimited strings.
- * @return string
- */
- public function createAuthUrl($scope) {
- $params = array(
- 'response_type=code',
- 'redirect_uri=' . urlencode($this->redirectUri),
- 'client_id=' . urlencode($this->clientId),
- 'scope=' . urlencode($scope),
- 'access_type=' . urlencode($this->accessType),
- 'approval_prompt=' . urlencode($this->approvalPrompt),
- );
-
- if (isset($this->state)) {
- $params[] = 'state=' . urlencode($this->state);
- }
- $params = implode('&', $params);
- return self::OAUTH2_AUTH_URL . "?$params";
- }
-
- /**
- * @param string $token
- * @throws Google_AuthException
- */
- public function setAccessToken($token) {
- $token = json_decode($token, true);
- if ($token == null) {
- throw new Google_AuthException('Could not json decode the token');
- }
- if (! isset($token['access_token'])) {
- throw new Google_AuthException("Invalid token format");
- }
- $this->token = $token;
- }
-
- public function getAccessToken() {
- return json_encode($this->token);
- }
-
- public function setDeveloperKey($developerKey) {
- $this->developerKey = $developerKey;
- }
-
- public function setState($state) {
- $this->state = $state;
- }
-
- public function setAccessType($accessType) {
- $this->accessType = $accessType;
- }
-
- public function setApprovalPrompt($approvalPrompt) {
- $this->approvalPrompt = $approvalPrompt;
- }
-
- public function setAssertionCredentials(Google_AssertionCredentials $creds) {
- $this->assertionCredentials = $creds;
- }
-
- /**
- * Include an accessToken in a given apiHttpRequest.
- * @param Google_HttpRequest $request
- * @return Google_HttpRequest
- * @throws Google_AuthException
- */
- public function sign(Google_HttpRequest $request) {
- // add the developer key to the request before signing it
- if ($this->developerKey) {
- $requestUrl = $request->getUrl();
- $requestUrl .= (strpos($request->getUrl(), '?') === false) ? '?' : '&';
- $requestUrl .= 'key=' . urlencode($this->developerKey);
- $request->setUrl($requestUrl);
- }
-
- // Cannot sign the request without an OAuth access token.
- if (null == $this->token && null == $this->assertionCredentials) {
- return $request;
- }
-
- // Check if the token is set to expire in the next 30 seconds
- // (or has already expired).
- if ($this->isAccessTokenExpired()) {
- if ($this->assertionCredentials) {
- $this->refreshTokenWithAssertion();
- } else {
- if (! array_key_exists('refresh_token', $this->token)) {
- throw new Google_AuthException("The OAuth 2.0 access token has expired, "
- . "and a refresh token is not available. Refresh tokens are not "
- . "returned for responses that were auto-approved.");
- }
- $this->refreshToken($this->token['refresh_token']);
- }
- }
-
- // Add the OAuth2 header to the request
- $request->setRequestHeaders(
- array('Authorization' => 'Bearer ' . $this->token['access_token'])
- );
-
- return $request;
- }
-
- /**
- * Fetches a fresh access token with the given refresh token.
- * @param string $refreshToken
- * @return void
- */
- public function refreshToken($refreshToken) {
- $this->refreshTokenRequest(array(
- 'client_id' => $this->clientId,
- 'client_secret' => $this->clientSecret,
- 'refresh_token' => $refreshToken,
- 'grant_type' => 'refresh_token'
- ));
- }
-
- /**
- * Fetches a fresh access token with a given assertion token.
- * @param Google_AssertionCredentials $assertionCredentials optional.
- * @return void
- */
- public function refreshTokenWithAssertion($assertionCredentials = null) {
- if (!$assertionCredentials) {
- $assertionCredentials = $this->assertionCredentials;
- }
-
- $this->refreshTokenRequest(array(
- 'grant_type' => 'assertion',
- 'assertion_type' => $assertionCredentials->assertionType,
- 'assertion' => $assertionCredentials->generateAssertion(),
- ));
- }
-
- private function refreshTokenRequest($params) {
- $http = new Google_HttpRequest(self::OAUTH2_TOKEN_URI, 'POST', array(), $params);
- $request = Google_Client::$io->makeRequest($http);
-
- $code = $request->getResponseHttpCode();
- $body = $request->getResponseBody();
- if (200 == $code) {
- $token = json_decode($body, true);
- if ($token == null) {
- throw new Google_AuthException("Could not json decode the access token");
- }
-
- if (! isset($token['access_token']) || ! isset($token['expires_in'])) {
- throw new Google_AuthException("Invalid token format");
- }
-
- $this->token['access_token'] = $token['access_token'];
- $this->token['expires_in'] = $token['expires_in'];
- $this->token['created'] = time();
- } else {
- throw new Google_AuthException("Error refreshing the OAuth2 token, message: '$body'", $code);
- }
- }
-
- /**
- * Revoke an OAuth2 access token or refresh token. This method will revoke the current access
- * token, if a token isn't provided.
- * @throws Google_AuthException
- * @param string|null $token The token (access token or a refresh token) that should be revoked.
- * @return boolean Returns True if the revocation was successful, otherwise False.
- */
- public function revokeToken($token = null) {
- if (!$token) {
- $token = $this->token['access_token'];
- }
- $request = new Google_HttpRequest(self::OAUTH2_REVOKE_URI, 'POST', array(), "token=$token");
- $response = Google_Client::$io->makeRequest($request);
- $code = $response->getResponseHttpCode();
- if ($code == 200) {
- $this->token = null;
- return true;
- }
-
- return false;
- }
-
- /**
- * Returns if the access_token is expired.
- * @return bool Returns True if the access_token is expired.
- */
- public function isAccessTokenExpired() {
- if (null == $this->token) {
- return true;
- }
-
- // If the token is set to expire in the next 30 seconds.
- $expired = ($this->token['created']
- + ($this->token['expires_in'] - 30)) < time();
-
- return $expired;
- }
-
- // Gets federated sign-on certificates to use for verifying identity tokens.
- // Returns certs as array structure, where keys are key ids, and values
- // are PEM encoded certificates.
- private function getFederatedSignOnCerts() {
- // This relies on makeRequest caching certificate responses.
- $request = Google_Client::$io->makeRequest(new Google_HttpRequest(
- self::OAUTH2_FEDERATED_SIGNON_CERTS_URL));
- if ($request->getResponseHttpCode() == 200) {
- $certs = json_decode($request->getResponseBody(), true);
- if ($certs) {
- return $certs;
- }
- }
- throw new Google_AuthException(
- "Failed to retrieve verification certificates: '" .
- $request->getResponseBody() . "'.",
- $request->getResponseHttpCode());
- }
-
- /**
- * Verifies an id token and returns the authenticated apiLoginTicket.
- * Throws an exception if the id token is not valid.
- * The audience parameter can be used to control which id tokens are
- * accepted. By default, the id token must have been issued to this OAuth2 client.
- *
- * @param $id_token
- * @param $audience
- * @return Google_LoginTicket
- */
- public function verifyIdToken($id_token = null, $audience = null) {
- if (!$id_token) {
- $id_token = $this->token['id_token'];
- }
-
- $certs = $this->getFederatedSignonCerts();
- if (!$audience) {
- $audience = $this->clientId;
- }
- return $this->verifySignedJwtWithCerts($id_token, $certs, $audience);
- }
-
- // Verifies the id token, returns the verified token contents.
- // Visible for testing.
- function verifySignedJwtWithCerts($jwt, $certs, $required_audience) {
- $segments = explode(".", $jwt);
- if (count($segments) != 3) {
- throw new Google_AuthException("Wrong number of segments in token: $jwt");
- }
- $signed = $segments[0] . "." . $segments[1];
- $signature = Google_Utils::urlSafeB64Decode($segments[2]);
-
- // Parse envelope.
- $envelope = json_decode(Google_Utils::urlSafeB64Decode($segments[0]), true);
- if (!$envelope) {
- throw new Google_AuthException("Can't parse token envelope: " . $segments[0]);
- }
-
- // Parse token
- $json_body = Google_Utils::urlSafeB64Decode($segments[1]);
- $payload = json_decode($json_body, true);
- if (!$payload) {
- throw new Google_AuthException("Can't parse token payload: " . $segments[1]);
- }
-
- // Check signature
- $verified = false;
- foreach ($certs as $keyName => $pem) {
- $public_key = new Google_PemVerifier($pem);
- if ($public_key->verify($signed, $signature)) {
- $verified = true;
- break;
- }
- }
-
- if (!$verified) {
- throw new Google_AuthException("Invalid token signature: $jwt");
- }
-
- // Check issued-at timestamp
- $iat = 0;
- if (array_key_exists("iat", $payload)) {
- $iat = $payload["iat"];
- }
- if (!$iat) {
- throw new Google_AuthException("No issue time in token: $json_body");
- }
- $earliest = $iat - self::CLOCK_SKEW_SECS;
-
- // Check expiration timestamp
- $now = time();
- $exp = 0;
- if (array_key_exists("exp", $payload)) {
- $exp = $payload["exp"];
- }
- if (!$exp) {
- throw new Google_AuthException("No expiration time in token: $json_body");
- }
- if ($exp >= $now + self::MAX_TOKEN_LIFETIME_SECS) {
- throw new Google_AuthException(
- "Expiration time too far in future: $json_body");
- }
-
- $latest = $exp + self::CLOCK_SKEW_SECS;
- if ($now < $earliest) {
- throw new Google_AuthException(
- "Token used too early, $now < $earliest: $json_body");
- }
- if ($now > $latest) {
- throw new Google_AuthException(
- "Token used too late, $now > $latest: $json_body");
- }
-
- // TODO(beaton): check issuer field?
-
- // Check audience
- $aud = $payload["aud"];
- if ($aud != $required_audience) {
- throw new Google_AuthException("Wrong recipient, $aud != $required_audience: $json_body");
- }
-
- // All good.
- return new Google_LoginTicket($envelope, $payload);
- }
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_P12Signer.php b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_P12Signer.php
deleted file mode 100644
index 1bed5909913..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_P12Signer.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-/*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Signs data.
- *
- * Only used for testing.
- *
- * @author Brian Eaton <beaton@google.com>
- */
-class Google_P12Signer extends Google_Signer {
- // OpenSSL private key resource
- private $privateKey;
-
- // Creates a new signer from a .p12 file.
- function __construct($p12, $password) {
- if (!function_exists('openssl_x509_read')) {
- throw new Exception(
- 'The Google PHP API library needs the openssl PHP extension');
- }
-
- // This throws on error
- $certs = array();
- if (!openssl_pkcs12_read($p12, $certs, $password)) {
- throw new Google_AuthException("Unable to parse the p12 file. " .
- "Is this a .p12 file? Is the password correct? OpenSSL error: " .
- openssl_error_string());
- }
- // TODO(beaton): is this part of the contract for the openssl_pkcs12_read
- // method? What happens if there are multiple private keys? Do we care?
- if (!array_key_exists("pkey", $certs) || !$certs["pkey"]) {
- throw new Google_AuthException("No private key found in p12 file.");
- }
- $this->privateKey = openssl_pkey_get_private($certs["pkey"]);
- if (!$this->privateKey) {
- throw new Google_AuthException("Unable to load private key in ");
- }
- }
-
- function __destruct() {
- if ($this->privateKey) {
- openssl_pkey_free($this->privateKey);
- }
- }
-
- function sign($data) {
- if(version_compare(PHP_VERSION, '5.3.0') < 0) {
- throw new Google_AuthException(
- "PHP 5.3.0 or higher is required to use service accounts.");
- }
- if (!openssl_sign($data, $signature, $this->privateKey, "sha256")) {
- throw new Google_AuthException("Unable to sign data");
- }
- return $signature;
- }
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_ApcCache.php b/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_ApcCache.php
deleted file mode 100644
index 3523c98dcca..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_ApcCache.php
+++ /dev/null
@@ -1,98 +0,0 @@
-<?php
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * A persistent storage class based on the APC cache, which is not
- * really very persistent, as soon as you restart your web server
- * the storage will be wiped, however for debugging and/or speed
- * it can be useful, kinda, and cache is a lot cheaper then storage.
- *
- * @author Chris Chabot <chabotc@google.com>
- */
-class googleApcCache extends Google_Cache {
-
- public function __construct() {
- if (! function_exists('apc_add')) {
- throw new Google_CacheException("Apc functions not available");
- }
- }
-
- private function isLocked($key) {
- if ((@apc_fetch($key . '.lock')) === false) {
- return false;
- }
- return true;
- }
-
- private function createLock($key) {
- // the interesting thing is that this could fail if the lock was created in the meantime..
- // but we'll ignore that out of convenience
- @apc_add($key . '.lock', '', 5);
- }
-
- private function removeLock($key) {
- // suppress all warnings, if some other process removed it that's ok too
- @apc_delete($key . '.lock');
- }
-
- private function waitForLock($key) {
- // 20 x 250 = 5 seconds
- $tries = 20;
- $cnt = 0;
- do {
- // 250 ms is a long time to sleep, but it does stop the server from burning all resources on polling locks..
- usleep(250);
- $cnt ++;
- } while ($cnt <= $tries && $this->isLocked($key));
- if ($this->isLocked($key)) {
- // 5 seconds passed, assume the owning process died off and remove it
- $this->removeLock($key);
- }
- }
-
- /**
- * @inheritDoc
- */
- public function get($key, $expiration = false) {
-
- if (($ret = @apc_fetch($key)) === false) {
- return false;
- }
- if (!$expiration || (time() - $ret['time'] > $expiration)) {
- $this->delete($key);
- return false;
- }
- return unserialize($ret['data']);
- }
-
- /**
- * @inheritDoc
- */
- public function set($key, $value) {
- if (@apc_store($key, array('time' => time(), 'data' => serialize($value))) == false) {
- throw new Google_CacheException("Couldn't store data");
- }
- }
-
- /**
- * @inheritDoc
- * @param String $key
- */
- public function delete($key) {
- @apc_delete($key);
- }
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_FileCache.php b/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_FileCache.php
deleted file mode 100644
index 1e32859a48b..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_FileCache.php
+++ /dev/null
@@ -1,137 +0,0 @@
-<?php
-/*
- * Copyright 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * This class implements a basic on disk storage. While that does
- * work quite well it's not the most elegant and scalable solution.
- * It will also get you into a heap of trouble when you try to run
- * this in a clustered environment. In those cases please use the
- * MySql back-end
- *
- * @author Chris Chabot <chabotc@google.com>
- */
-class Google_FileCache extends Google_Cache {
- private $path;
-
- public function __construct() {
- global $apiConfig;
- $this->path = $apiConfig['ioFileCache_directory'];
- }
-
- private function isLocked($storageFile) {
- // our lock file convention is simple: /the/file/path.lock
- return file_exists($storageFile . '.lock');
- }
-
- private function createLock($storageFile) {
- $storageDir = dirname($storageFile);
- if (! is_dir($storageDir)) {
- // @codeCoverageIgnoreStart
- if (! @mkdir($storageDir, 0755, true)) {
- // make sure the failure isn't because of a concurrency issue
- if (! is_dir($storageDir)) {
- throw new Google_CacheException("Could not create storage directory: $storageDir");
- }
- }
- // @codeCoverageIgnoreEnd
- }
- @touch($storageFile . '.lock');
- }
-
- private function removeLock($storageFile) {
- // suppress all warnings, if some other process removed it that's ok too
- @unlink($storageFile . '.lock');
- }
-
- private function waitForLock($storageFile) {
- // 20 x 250 = 5 seconds
- $tries = 20;
- $cnt = 0;
- do {
- // make sure PHP picks up on file changes. This is an expensive action but really can't be avoided
- clearstatcache();
- // 250 ms is a long time to sleep, but it does stop the server from burning all resources on polling locks..
- usleep(250);
- $cnt ++;
- } while ($cnt <= $tries && $this->isLocked($storageFile));
- if ($this->isLocked($storageFile)) {
- // 5 seconds passed, assume the owning process died off and remove it
- $this->removeLock($storageFile);
- }
- }
-
- private function getCacheDir($hash) {
- // use the first 2 characters of the hash as a directory prefix
- // this should prevent slowdowns due to huge directory listings
- // and thus give some basic amount of scalability
- return $this->path . '/' . substr($hash, 0, 2);
- }
-
- private function getCacheFile($hash) {
- return $this->getCacheDir($hash) . '/' . $hash;
- }
-
- public function get($key, $expiration = false) {
- $storageFile = $this->getCacheFile(md5($key));
- // See if this storage file is locked, if so we wait up to 5 seconds for the lock owning process to
- // complete it's work. If the lock is not released within that time frame, it's cleaned up.
- // This should give us a fair amount of 'Cache Stampeding' protection
- if ($this->isLocked($storageFile)) {
- $this->waitForLock($storageFile);
- }
- if (file_exists($storageFile) && is_readable($storageFile)) {
- $now = time();
- if (! $expiration || (($mtime = @filemtime($storageFile)) !== false && ($now - $mtime) < $expiration)) {
- if (($data = @file_get_contents($storageFile)) !== false) {
- $data = unserialize($data);
- return $data;
- }
- }
- }
- return false;
- }
-
- public function set($key, $value) {
- $storageDir = $this->getCacheDir(md5($key));
- $storageFile = $this->getCacheFile(md5($key));
- if ($this->isLocked($storageFile)) {
- // some other process is writing to this file too, wait until it's done to prevent hiccups
- $this->waitForLock($storageFile);
- }
- if (! is_dir($storageDir)) {
- if (! @mkdir($storageDir, 0755, true)) {
- throw new Google_CacheException("Could not create storage directory: $storageDir");
- }
- }
- // we serialize the whole request object, since we don't only want the
- // responseContent but also the postBody used, headers, size, etc
- $data = serialize($value);
- $this->createLock($storageFile);
- if (! @file_put_contents($storageFile, $data)) {
- $this->removeLock($storageFile);
- throw new Google_CacheException("Could not store data in the file");
- }
- $this->removeLock($storageFile);
- }
-
- public function delete($key) {
- $file = $this->getCacheFile(md5($key));
- if (! @unlink($file)) {
- throw new Google_CacheException("Cache file could not be deleted");
- }
- }
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_MemcacheCache.php b/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_MemcacheCache.php
deleted file mode 100644
index 22493f8b1ec..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_MemcacheCache.php
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php
-/*
- * Copyright 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * A persistent storage class based on the memcache, which is not
- * really very persistent, as soon as you restart your memcache daemon
- * the storage will be wiped, however for debugging and/or speed
- * it can be useful, kinda, and cache is a lot cheaper then storage.
- *
- * @author Chris Chabot <chabotc@google.com>
- */
-class Google_MemcacheCache extends Google_Cache {
- private $connection = false;
-
- public function __construct() {
- global $apiConfig;
- if (! function_exists('memcache_connect')) {
- throw new Google_CacheException("Memcache functions not available");
- }
- $this->host = $apiConfig['ioMemCacheCache_host'];
- $this->port = $apiConfig['ioMemCacheCache_port'];
- if (empty($this->host) || empty($this->port)) {
- throw new Google_CacheException("You need to supply a valid memcache host and port");
- }
- }
-
- private function isLocked($key) {
- $this->check();
- if ((@memcache_get($this->connection, $key . '.lock')) === false) {
- return false;
- }
- return true;
- }
-
- private function createLock($key) {
- $this->check();
- // the interesting thing is that this could fail if the lock was created in the meantime..
- // but we'll ignore that out of convenience
- @memcache_add($this->connection, $key . '.lock', '', 0, 5);
- }
-
- private function removeLock($key) {
- $this->check();
- // suppress all warnings, if some other process removed it that's ok too
- @memcache_delete($this->connection, $key . '.lock');
- }
-
- private function waitForLock($key) {
- $this->check();
- // 20 x 250 = 5 seconds
- $tries = 20;
- $cnt = 0;
- do {
- // 250 ms is a long time to sleep, but it does stop the server from burning all resources on polling locks..
- usleep(250);
- $cnt ++;
- } while ($cnt <= $tries && $this->isLocked($key));
- if ($this->isLocked($key)) {
- // 5 seconds passed, assume the owning process died off and remove it
- $this->removeLock($key);
- }
- }
-
- // I prefer lazy initialization since the cache isn't used every request
- // so this potentially saves a lot of overhead
- private function connect() {
- if (! $this->connection = @memcache_pconnect($this->host, $this->port)) {
- throw new Google_CacheException("Couldn't connect to memcache server");
- }
- }
-
- private function check() {
- if (! $this->connection) {
- $this->connect();
- }
- }
-
- /**
- * @inheritDoc
- */
- public function get($key, $expiration = false) {
- $this->check();
- if (($ret = @memcache_get($this->connection, $key)) === false) {
- return false;
- }
- if (! $expiration || (time() - $ret['time'] > $expiration)) {
- $this->delete($key);
- return false;
- }
- return $ret['data'];
- }
-
- /**
- * @inheritDoc
- * @param string $key
- * @param string $value
- * @throws Google_CacheException
- */
- public function set($key, $value) {
- $this->check();
- // we store it with the cache_time default expiration so objects will at least get cleaned eventually.
- if (@memcache_set($this->connection, $key, array('time' => time(),
- 'data' => $value), false) == false) {
- throw new Google_CacheException("Couldn't store data in cache");
- }
- }
-
- /**
- * @inheritDoc
- * @param String $key
- */
- public function delete($key) {
- $this->check();
- @memcache_delete($this->connection, $key);
- }
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/config.php b/apps/files_external/3rdparty/google-api-php-client/src/config.php
deleted file mode 100644
index e3a57138d05..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/config.php
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-global $apiConfig;
-$apiConfig = array(
- // True if objects should be returned by the service classes.
- // False if associative arrays should be returned (default behavior).
- 'use_objects' => false,
-
- // The application_name is included in the User-Agent HTTP header.
- 'application_name' => '',
-
- // OAuth2 Settings, you can get these keys at https://code.google.com/apis/console
- 'oauth2_client_id' => '',
- 'oauth2_client_secret' => '',
- 'oauth2_redirect_uri' => '',
-
- // The developer key, you get this at https://code.google.com/apis/console
- 'developer_key' => '',
-
- // Site name to show in the Google's OAuth 1 authentication screen.
- 'site_name' => 'www.example.org',
-
- // Which Authentication, Storage and HTTP IO classes to use.
- 'authClass' => 'Google_OAuth2',
- 'ioClass' => 'Google_CurlIO',
- 'cacheClass' => 'Google_FileCache',
-
- // Don't change these unless you're working against a special development or testing environment.
- 'basePath' => 'https://www.googleapis.com',
-
- // IO Class dependent configuration, you only have to configure the values
- // for the class that was configured as the ioClass above
- 'ioFileCache_directory' =>
- (function_exists('sys_get_temp_dir') ?
- sys_get_temp_dir() . '/Google_Client' :
- '/tmp/Google_Client'),
-
- // Definition of service specific values like scopes, oauth token URLs, etc
- 'services' => array(
- 'analytics' => array('scope' => 'https://www.googleapis.com/auth/analytics.readonly'),
- 'calendar' => array(
- 'scope' => array(
- "https://www.googleapis.com/auth/calendar",
- "https://www.googleapis.com/auth/calendar.readonly",
- )
- ),
- 'books' => array('scope' => 'https://www.googleapis.com/auth/books'),
- 'latitude' => array(
- 'scope' => array(
- 'https://www.googleapis.com/auth/latitude.all.best',
- 'https://www.googleapis.com/auth/latitude.all.city',
- )
- ),
- 'moderator' => array('scope' => 'https://www.googleapis.com/auth/moderator'),
- 'oauth2' => array(
- 'scope' => array(
- 'https://www.googleapis.com/auth/userinfo.profile',
- 'https://www.googleapis.com/auth/userinfo.email',
- )
- ),
- 'plus' => array('scope' => 'https://www.googleapis.com/auth/plus.login'),
- 'siteVerification' => array('scope' => 'https://www.googleapis.com/auth/siteverification'),
- 'tasks' => array('scope' => 'https://www.googleapis.com/auth/tasks'),
- 'urlshortener' => array('scope' => 'https://www.googleapis.com/auth/urlshortener')
- )
-);
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/contrib/Google_DriveService.php b/apps/files_external/3rdparty/google-api-php-client/src/contrib/Google_DriveService.php
deleted file mode 100644
index 896e8b93826..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/contrib/Google_DriveService.php
+++ /dev/null
@@ -1,3143 +0,0 @@
-<?php
-/*
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-
- /**
- * The "about" collection of methods.
- * Typical usage is:
- * <code>
- * $driveService = new Google_DriveService(...);
- * $about = $driveService->about;
- * </code>
- */
- class Google_AboutServiceResource extends Google_ServiceResource {
-
-
- /**
- * Gets the information about the current user along with Drive API settings (about.get)
- *
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool includeSubscribed When calculating the number of remaining change IDs, whether to include shared files and public files the user has opened. When set to false, this counts only change IDs for owned files and any shared or public files that the user has explictly added to a folder in Drive.
- * @opt_param string maxChangeIdCount Maximum number of remaining change IDs to count
- * @opt_param string startChangeId Change ID to start counting from when calculating number of remaining change IDs
- * @return Google_About
- */
- public function get($optParams = array()) {
- $params = array();
- $params = array_merge($params, $optParams);
- $data = $this->__call('get', array($params));
- if ($this->useObjects()) {
- return new Google_About($data);
- } else {
- return $data;
- }
- }
- }
-
- /**
- * The "apps" collection of methods.
- * Typical usage is:
- * <code>
- * $driveService = new Google_DriveService(...);
- * $apps = $driveService->apps;
- * </code>
- */
- class Google_AppsServiceResource extends Google_ServiceResource {
-
-
- /**
- * Gets a specific app. (apps.get)
- *
- * @param string $appId The ID of the app.
- * @param array $optParams Optional parameters.
- * @return Google_App
- */
- public function get($appId, $optParams = array()) {
- $params = array('appId' => $appId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('get', array($params));
- if ($this->useObjects()) {
- return new Google_App($data);
- } else {
- return $data;
- }
- }
- /**
- * Lists a user's installed apps. (apps.list)
- *
- * @param array $optParams Optional parameters.
- * @return Google_AppList
- */
- public function listApps($optParams = array()) {
- $params = array();
- $params = array_merge($params, $optParams);
- $data = $this->__call('list', array($params));
- if ($this->useObjects()) {
- return new Google_AppList($data);
- } else {
- return $data;
- }
- }
- }
-
- /**
- * The "changes" collection of methods.
- * Typical usage is:
- * <code>
- * $driveService = new Google_DriveService(...);
- * $changes = $driveService->changes;
- * </code>
- */
- class Google_ChangesServiceResource extends Google_ServiceResource {
-
-
- /**
- * Gets a specific change. (changes.get)
- *
- * @param string $changeId The ID of the change.
- * @param array $optParams Optional parameters.
- * @return Google_Change
- */
- public function get($changeId, $optParams = array()) {
- $params = array('changeId' => $changeId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('get', array($params));
- if ($this->useObjects()) {
- return new Google_Change($data);
- } else {
- return $data;
- }
- }
- /**
- * Lists the changes for a user. (changes.list)
- *
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool includeDeleted Whether to include deleted items.
- * @opt_param bool includeSubscribed Whether to include shared files and public files the user has opened. When set to false, the list will include owned files plus any shared or public files the user has explictly added to a folder in Drive.
- * @opt_param int maxResults Maximum number of changes to return.
- * @opt_param string pageToken Page token for changes.
- * @opt_param string startChangeId Change ID to start listing changes from.
- * @return Google_ChangeList
- */
- public function listChanges($optParams = array()) {
- $params = array();
- $params = array_merge($params, $optParams);
- $data = $this->__call('list', array($params));
- if ($this->useObjects()) {
- return new Google_ChangeList($data);
- } else {
- return $data;
- }
- }
- }
-
- /**
- * The "children" collection of methods.
- * Typical usage is:
- * <code>
- * $driveService = new Google_DriveService(...);
- * $children = $driveService->children;
- * </code>
- */
- class Google_ChildrenServiceResource extends Google_ServiceResource {
-
-
- /**
- * Removes a child from a folder. (children.delete)
- *
- * @param string $folderId The ID of the folder.
- * @param string $childId The ID of the child.
- * @param array $optParams Optional parameters.
- */
- public function delete($folderId, $childId, $optParams = array()) {
- $params = array('folderId' => $folderId, 'childId' => $childId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('delete', array($params));
- return $data;
- }
- /**
- * Gets a specific child reference. (children.get)
- *
- * @param string $folderId The ID of the folder.
- * @param string $childId The ID of the child.
- * @param array $optParams Optional parameters.
- * @return Google_ChildReference
- */
- public function get($folderId, $childId, $optParams = array()) {
- $params = array('folderId' => $folderId, 'childId' => $childId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('get', array($params));
- if ($this->useObjects()) {
- return new Google_ChildReference($data);
- } else {
- return $data;
- }
- }
- /**
- * Inserts a file into a folder. (children.insert)
- *
- * @param string $folderId The ID of the folder.
- * @param Google_ChildReference $postBody
- * @param array $optParams Optional parameters.
- * @return Google_ChildReference
- */
- public function insert($folderId, Google_ChildReference $postBody, $optParams = array()) {
- $params = array('folderId' => $folderId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('insert', array($params));
- if ($this->useObjects()) {
- return new Google_ChildReference($data);
- } else {
- return $data;
- }
- }
- /**
- * Lists a folder's children. (children.list)
- *
- * @param string $folderId The ID of the folder.
- * @param array $optParams Optional parameters.
- *
- * @opt_param int maxResults Maximum number of children to return.
- * @opt_param string pageToken Page token for children.
- * @opt_param string q Query string for searching children.
- * @return Google_ChildList
- */
- public function listChildren($folderId, $optParams = array()) {
- $params = array('folderId' => $folderId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('list', array($params));
- if ($this->useObjects()) {
- return new Google_ChildList($data);
- } else {
- return $data;
- }
- }
- }
-
- /**
- * The "comments" collection of methods.
- * Typical usage is:
- * <code>
- * $driveService = new Google_DriveService(...);
- * $comments = $driveService->comments;
- * </code>
- */
- class Google_CommentsServiceResource extends Google_ServiceResource {
-
-
- /**
- * Deletes a comment. (comments.delete)
- *
- * @param string $fileId The ID of the file.
- * @param string $commentId The ID of the comment.
- * @param array $optParams Optional parameters.
- */
- public function delete($fileId, $commentId, $optParams = array()) {
- $params = array('fileId' => $fileId, 'commentId' => $commentId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('delete', array($params));
- return $data;
- }
- /**
- * Gets a comment by ID. (comments.get)
- *
- * @param string $fileId The ID of the file.
- * @param string $commentId The ID of the comment.
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool includeDeleted If set, this will succeed when retrieving a deleted comment, and will include any deleted replies.
- * @return Google_Comment
- */
- public function get($fileId, $commentId, $optParams = array()) {
- $params = array('fileId' => $fileId, 'commentId' => $commentId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('get', array($params));
- if ($this->useObjects()) {
- return new Google_Comment($data);
- } else {
- return $data;
- }
- }
- /**
- * Creates a new comment on the given file. (comments.insert)
- *
- * @param string $fileId The ID of the file.
- * @param Google_Comment $postBody
- * @param array $optParams Optional parameters.
- * @return Google_Comment
- */
- public function insert($fileId, Google_Comment $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('insert', array($params));
- if ($this->useObjects()) {
- return new Google_Comment($data);
- } else {
- return $data;
- }
- }
- /**
- * Lists a file's comments. (comments.list)
- *
- * @param string $fileId The ID of the file.
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool includeDeleted If set, all comments and replies, including deleted comments and replies (with content stripped) will be returned.
- * @opt_param int maxResults The maximum number of discussions to include in the response, used for paging.
- * @opt_param string pageToken The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of "nextPageToken" from the previous response.
- * @opt_param string updatedMin Only discussions that were updated after this timestamp will be returned. Formatted as an RFC 3339 timestamp.
- * @return Google_CommentList
- */
- public function listComments($fileId, $optParams = array()) {
- $params = array('fileId' => $fileId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('list', array($params));
- if ($this->useObjects()) {
- return new Google_CommentList($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates an existing comment. This method supports patch semantics. (comments.patch)
- *
- * @param string $fileId The ID of the file.
- * @param string $commentId The ID of the comment.
- * @param Google_Comment $postBody
- * @param array $optParams Optional parameters.
- * @return Google_Comment
- */
- public function patch($fileId, $commentId, Google_Comment $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'commentId' => $commentId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('patch', array($params));
- if ($this->useObjects()) {
- return new Google_Comment($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates an existing comment. (comments.update)
- *
- * @param string $fileId The ID of the file.
- * @param string $commentId The ID of the comment.
- * @param Google_Comment $postBody
- * @param array $optParams Optional parameters.
- * @return Google_Comment
- */
- public function update($fileId, $commentId, Google_Comment $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'commentId' => $commentId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('update', array($params));
- if ($this->useObjects()) {
- return new Google_Comment($data);
- } else {
- return $data;
- }
- }
- }
-
- /**
- * The "files" collection of methods.
- * Typical usage is:
- * <code>
- * $driveService = new Google_DriveService(...);
- * $files = $driveService->files;
- * </code>
- */
- class Google_FilesServiceResource extends Google_ServiceResource {
-
-
- /**
- * Creates a copy of the specified file. (files.copy)
- *
- * @param string $fileId The ID of the file to copy.
- * @param Google_DriveFile $postBody
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool convert Whether to convert this file to the corresponding Google Docs format.
- * @opt_param bool ocr Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
- * @opt_param string ocrLanguage If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
- * @opt_param bool pinned Whether to pin the head revision of the new copy.
- * @opt_param string timedTextLanguage The language of the timed text.
- * @opt_param string timedTextTrackName The timed text track name.
- * @return Google_DriveFile
- */
- public function copy($fileId, Google_DriveFile $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('copy', array($params));
- if ($this->useObjects()) {
- return new Google_DriveFile($data);
- } else {
- return $data;
- }
- }
- /**
- * Permanently deletes a file by ID. Skips the trash. (files.delete)
- *
- * @param string $fileId The ID of the file to delete.
- * @param array $optParams Optional parameters.
- */
- public function delete($fileId, $optParams = array()) {
- $params = array('fileId' => $fileId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('delete', array($params));
- return $data;
- }
- /**
- * Gets a file's metadata by ID. (files.get)
- *
- * @param string $fileId The ID for the file in question.
- * @param array $optParams Optional parameters.
- *
- * @opt_param string projection This parameter is deprecated and has no function.
- * @opt_param bool updateViewedDate Whether to update the view date after successfully retrieving the file.
- * @return Google_DriveFile
- */
- public function get($fileId, $optParams = array()) {
- $params = array('fileId' => $fileId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('get', array($params));
- if ($this->useObjects()) {
- return new Google_DriveFile($data);
- } else {
- return $data;
- }
- }
- /**
- * Insert a new file. (files.insert)
- *
- * @param Google_DriveFile $postBody
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool convert Whether to convert this file to the corresponding Google Docs format.
- * @opt_param bool ocr Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
- * @opt_param string ocrLanguage If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
- * @opt_param bool pinned Whether to pin the head revision of the uploaded file.
- * @opt_param string timedTextLanguage The language of the timed text.
- * @opt_param string timedTextTrackName The timed text track name.
- * @opt_param bool useContentAsIndexableText Whether to use the content as indexable text.
- * @return Google_DriveFile
- */
- public function insert(Google_DriveFile $postBody, $optParams = array()) {
- $params = array('postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('insert', array($params));
- if ($this->useObjects()) {
- return new Google_DriveFile($data);
- } else {
- return $data;
- }
- }
- /**
- * Lists the user's files. (files.list)
- *
- * @param array $optParams Optional parameters.
- *
- * @opt_param int maxResults Maximum number of files to return.
- * @opt_param string pageToken Page token for files.
- * @opt_param string projection This parameter is deprecated and has no function.
- * @opt_param string q Query string for searching files.
- * @return Google_FileList
- */
- public function listFiles($optParams = array()) {
- $params = array();
- $params = array_merge($params, $optParams);
- $data = $this->__call('list', array($params));
- if ($this->useObjects()) {
- return new Google_FileList($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates file metadata and/or content. This method supports patch semantics. (files.patch)
- *
- * @param string $fileId The ID of the file to update.
- * @param Google_DriveFile $postBody
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool convert Whether to convert this file to the corresponding Google Docs format.
- * @opt_param bool newRevision Whether a blob upload should create a new revision. If not set or false, the blob data in the current head revision is replaced. If true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).
- * @opt_param bool ocr Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
- * @opt_param string ocrLanguage If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
- * @opt_param bool pinned Whether to pin the new revision.
- * @opt_param bool setModifiedDate Whether to set the modified date with the supplied modified date.
- * @opt_param string timedTextLanguage The language of the timed text.
- * @opt_param string timedTextTrackName The timed text track name.
- * @opt_param bool updateViewedDate Whether to update the view date after successfully updating the file.
- * @opt_param bool useContentAsIndexableText Whether to use the content as indexable text.
- * @return Google_DriveFile
- */
- public function patch($fileId, Google_DriveFile $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('patch', array($params));
- if ($this->useObjects()) {
- return new Google_DriveFile($data);
- } else {
- return $data;
- }
- }
- /**
- * Set the file's updated time to the current server time. (files.touch)
- *
- * @param string $fileId The ID of the file to update.
- * @param array $optParams Optional parameters.
- * @return Google_DriveFile
- */
- public function touch($fileId, $optParams = array()) {
- $params = array('fileId' => $fileId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('touch', array($params));
- if ($this->useObjects()) {
- return new Google_DriveFile($data);
- } else {
- return $data;
- }
- }
- /**
- * Moves a file to the trash. (files.trash)
- *
- * @param string $fileId The ID of the file to trash.
- * @param array $optParams Optional parameters.
- * @return Google_DriveFile
- */
- public function trash($fileId, $optParams = array()) {
- $params = array('fileId' => $fileId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('trash', array($params));
- if ($this->useObjects()) {
- return new Google_DriveFile($data);
- } else {
- return $data;
- }
- }
- /**
- * Restores a file from the trash. (files.untrash)
- *
- * @param string $fileId The ID of the file to untrash.
- * @param array $optParams Optional parameters.
- * @return Google_DriveFile
- */
- public function untrash($fileId, $optParams = array()) {
- $params = array('fileId' => $fileId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('untrash', array($params));
- if ($this->useObjects()) {
- return new Google_DriveFile($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates file metadata and/or content. (files.update)
- *
- * @param string $fileId The ID of the file to update.
- * @param Google_DriveFile $postBody
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool convert Whether to convert this file to the corresponding Google Docs format.
- * @opt_param bool newRevision Whether a blob upload should create a new revision. If not set or false, the blob data in the current head revision is replaced. If true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).
- * @opt_param bool ocr Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
- * @opt_param string ocrLanguage If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
- * @opt_param bool pinned Whether to pin the new revision.
- * @opt_param bool setModifiedDate Whether to set the modified date with the supplied modified date.
- * @opt_param string timedTextLanguage The language of the timed text.
- * @opt_param string timedTextTrackName The timed text track name.
- * @opt_param bool updateViewedDate Whether to update the view date after successfully updating the file.
- * @opt_param bool useContentAsIndexableText Whether to use the content as indexable text.
- * @return Google_DriveFile
- */
- public function update($fileId, Google_DriveFile $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('update', array($params));
- if ($this->useObjects()) {
- return new Google_DriveFile($data);
- } else {
- return $data;
- }
- }
- }
-
- /**
- * The "parents" collection of methods.
- * Typical usage is:
- * <code>
- * $driveService = new Google_DriveService(...);
- * $parents = $driveService->parents;
- * </code>
- */
- class Google_ParentsServiceResource extends Google_ServiceResource {
-
-
- /**
- * Removes a parent from a file. (parents.delete)
- *
- * @param string $fileId The ID of the file.
- * @param string $parentId The ID of the parent.
- * @param array $optParams Optional parameters.
- */
- public function delete($fileId, $parentId, $optParams = array()) {
- $params = array('fileId' => $fileId, 'parentId' => $parentId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('delete', array($params));
- return $data;
- }
- /**
- * Gets a specific parent reference. (parents.get)
- *
- * @param string $fileId The ID of the file.
- * @param string $parentId The ID of the parent.
- * @param array $optParams Optional parameters.
- * @return Google_ParentReference
- */
- public function get($fileId, $parentId, $optParams = array()) {
- $params = array('fileId' => $fileId, 'parentId' => $parentId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('get', array($params));
- if ($this->useObjects()) {
- return new Google_ParentReference($data);
- } else {
- return $data;
- }
- }
- /**
- * Adds a parent folder for a file. (parents.insert)
- *
- * @param string $fileId The ID of the file.
- * @param Google_ParentReference $postBody
- * @param array $optParams Optional parameters.
- * @return Google_ParentReference
- */
- public function insert($fileId, Google_ParentReference $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('insert', array($params));
- if ($this->useObjects()) {
- return new Google_ParentReference($data);
- } else {
- return $data;
- }
- }
- /**
- * Lists a file's parents. (parents.list)
- *
- * @param string $fileId The ID of the file.
- * @param array $optParams Optional parameters.
- * @return Google_ParentList
- */
- public function listParents($fileId, $optParams = array()) {
- $params = array('fileId' => $fileId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('list', array($params));
- if ($this->useObjects()) {
- return new Google_ParentList($data);
- } else {
- return $data;
- }
- }
- }
-
- /**
- * The "permissions" collection of methods.
- * Typical usage is:
- * <code>
- * $driveService = new Google_DriveService(...);
- * $permissions = $driveService->permissions;
- * </code>
- */
- class Google_PermissionsServiceResource extends Google_ServiceResource {
-
-
- /**
- * Deletes a permission from a file. (permissions.delete)
- *
- * @param string $fileId The ID for the file.
- * @param string $permissionId The ID for the permission.
- * @param array $optParams Optional parameters.
- */
- public function delete($fileId, $permissionId, $optParams = array()) {
- $params = array('fileId' => $fileId, 'permissionId' => $permissionId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('delete', array($params));
- return $data;
- }
- /**
- * Gets a permission by ID. (permissions.get)
- *
- * @param string $fileId The ID for the file.
- * @param string $permissionId The ID for the permission.
- * @param array $optParams Optional parameters.
- * @return Google_Permission
- */
- public function get($fileId, $permissionId, $optParams = array()) {
- $params = array('fileId' => $fileId, 'permissionId' => $permissionId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('get', array($params));
- if ($this->useObjects()) {
- return new Google_Permission($data);
- } else {
- return $data;
- }
- }
- /**
- * Inserts a permission for a file. (permissions.insert)
- *
- * @param string $fileId The ID for the file.
- * @param Google_Permission $postBody
- * @param array $optParams Optional parameters.
- *
- * @opt_param string emailMessage A custom message to include in notification emails.
- * @opt_param bool sendNotificationEmails Whether to send notification emails when sharing to users or groups.
- * @return Google_Permission
- */
- public function insert($fileId, Google_Permission $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('insert', array($params));
- if ($this->useObjects()) {
- return new Google_Permission($data);
- } else {
- return $data;
- }
- }
- /**
- * Lists a file's permissions. (permissions.list)
- *
- * @param string $fileId The ID for the file.
- * @param array $optParams Optional parameters.
- * @return Google_PermissionList
- */
- public function listPermissions($fileId, $optParams = array()) {
- $params = array('fileId' => $fileId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('list', array($params));
- if ($this->useObjects()) {
- return new Google_PermissionList($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates a permission. This method supports patch semantics. (permissions.patch)
- *
- * @param string $fileId The ID for the file.
- * @param string $permissionId The ID for the permission.
- * @param Google_Permission $postBody
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool transferOwnership Whether changing a role to 'owner' should also downgrade the current owners to writers.
- * @return Google_Permission
- */
- public function patch($fileId, $permissionId, Google_Permission $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'permissionId' => $permissionId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('patch', array($params));
- if ($this->useObjects()) {
- return new Google_Permission($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates a permission. (permissions.update)
- *
- * @param string $fileId The ID for the file.
- * @param string $permissionId The ID for the permission.
- * @param Google_Permission $postBody
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool transferOwnership Whether changing a role to 'owner' should also downgrade the current owners to writers.
- * @return Google_Permission
- */
- public function update($fileId, $permissionId, Google_Permission $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'permissionId' => $permissionId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('update', array($params));
- if ($this->useObjects()) {
- return new Google_Permission($data);
- } else {
- return $data;
- }
- }
- }
-
- /**
- * The "properties" collection of methods.
- * Typical usage is:
- * <code>
- * $driveService = new Google_DriveService(...);
- * $properties = $driveService->properties;
- * </code>
- */
- class Google_PropertiesServiceResource extends Google_ServiceResource {
-
-
- /**
- * Deletes a property. (properties.delete)
- *
- * @param string $fileId The ID of the file.
- * @param string $propertyKey The key of the property.
- * @param array $optParams Optional parameters.
- *
- * @opt_param string visibility The visibility of the property.
- */
- public function delete($fileId, $propertyKey, $optParams = array()) {
- $params = array('fileId' => $fileId, 'propertyKey' => $propertyKey);
- $params = array_merge($params, $optParams);
- $data = $this->__call('delete', array($params));
- return $data;
- }
- /**
- * Gets a property by its key. (properties.get)
- *
- * @param string $fileId The ID of the file.
- * @param string $propertyKey The key of the property.
- * @param array $optParams Optional parameters.
- *
- * @opt_param string visibility The visibility of the property.
- * @return Google_Property
- */
- public function get($fileId, $propertyKey, $optParams = array()) {
- $params = array('fileId' => $fileId, 'propertyKey' => $propertyKey);
- $params = array_merge($params, $optParams);
- $data = $this->__call('get', array($params));
- if ($this->useObjects()) {
- return new Google_Property($data);
- } else {
- return $data;
- }
- }
- /**
- * Adds a property to a file. (properties.insert)
- *
- * @param string $fileId The ID of the file.
- * @param Google_Property $postBody
- * @param array $optParams Optional parameters.
- * @return Google_Property
- */
- public function insert($fileId, Google_Property $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('insert', array($params));
- if ($this->useObjects()) {
- return new Google_Property($data);
- } else {
- return $data;
- }
- }
- /**
- * Lists a file's properties. (properties.list)
- *
- * @param string $fileId The ID of the file.
- * @param array $optParams Optional parameters.
- * @return Google_PropertyList
- */
- public function listProperties($fileId, $optParams = array()) {
- $params = array('fileId' => $fileId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('list', array($params));
- if ($this->useObjects()) {
- return new Google_PropertyList($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates a property. This method supports patch semantics. (properties.patch)
- *
- * @param string $fileId The ID of the file.
- * @param string $propertyKey The key of the property.
- * @param Google_Property $postBody
- * @param array $optParams Optional parameters.
- *
- * @opt_param string visibility The visibility of the property.
- * @return Google_Property
- */
- public function patch($fileId, $propertyKey, Google_Property $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'propertyKey' => $propertyKey, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('patch', array($params));
- if ($this->useObjects()) {
- return new Google_Property($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates a property. (properties.update)
- *
- * @param string $fileId The ID of the file.
- * @param string $propertyKey The key of the property.
- * @param Google_Property $postBody
- * @param array $optParams Optional parameters.
- *
- * @opt_param string visibility The visibility of the property.
- * @return Google_Property
- */
- public function update($fileId, $propertyKey, Google_Property $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'propertyKey' => $propertyKey, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('update', array($params));
- if ($this->useObjects()) {
- return new Google_Property($data);
- } else {
- return $data;
- }
- }
- }
-
- /**
- * The "replies" collection of methods.
- * Typical usage is:
- * <code>
- * $driveService = new Google_DriveService(...);
- * $replies = $driveService->replies;
- * </code>
- */
- class Google_RepliesServiceResource extends Google_ServiceResource {
-
-
- /**
- * Deletes a reply. (replies.delete)
- *
- * @param string $fileId The ID of the file.
- * @param string $commentId The ID of the comment.
- * @param string $replyId The ID of the reply.
- * @param array $optParams Optional parameters.
- */
- public function delete($fileId, $commentId, $replyId, $optParams = array()) {
- $params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('delete', array($params));
- return $data;
- }
- /**
- * Gets a reply. (replies.get)
- *
- * @param string $fileId The ID of the file.
- * @param string $commentId The ID of the comment.
- * @param string $replyId The ID of the reply.
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool includeDeleted If set, this will succeed when retrieving a deleted reply.
- * @return Google_CommentReply
- */
- public function get($fileId, $commentId, $replyId, $optParams = array()) {
- $params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('get', array($params));
- if ($this->useObjects()) {
- return new Google_CommentReply($data);
- } else {
- return $data;
- }
- }
- /**
- * Creates a new reply to the given comment. (replies.insert)
- *
- * @param string $fileId The ID of the file.
- * @param string $commentId The ID of the comment.
- * @param Google_CommentReply $postBody
- * @param array $optParams Optional parameters.
- * @return Google_CommentReply
- */
- public function insert($fileId, $commentId, Google_CommentReply $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'commentId' => $commentId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('insert', array($params));
- if ($this->useObjects()) {
- return new Google_CommentReply($data);
- } else {
- return $data;
- }
- }
- /**
- * Lists all of the replies to a comment. (replies.list)
- *
- * @param string $fileId The ID of the file.
- * @param string $commentId The ID of the comment.
- * @param array $optParams Optional parameters.
- *
- * @opt_param bool includeDeleted If set, all replies, including deleted replies (with content stripped) will be returned.
- * @opt_param int maxResults The maximum number of replies to include in the response, used for paging.
- * @opt_param string pageToken The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of "nextPageToken" from the previous response.
- * @return Google_CommentReplyList
- */
- public function listReplies($fileId, $commentId, $optParams = array()) {
- $params = array('fileId' => $fileId, 'commentId' => $commentId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('list', array($params));
- if ($this->useObjects()) {
- return new Google_CommentReplyList($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates an existing reply. This method supports patch semantics. (replies.patch)
- *
- * @param string $fileId The ID of the file.
- * @param string $commentId The ID of the comment.
- * @param string $replyId The ID of the reply.
- * @param Google_CommentReply $postBody
- * @param array $optParams Optional parameters.
- * @return Google_CommentReply
- */
- public function patch($fileId, $commentId, $replyId, Google_CommentReply $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('patch', array($params));
- if ($this->useObjects()) {
- return new Google_CommentReply($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates an existing reply. (replies.update)
- *
- * @param string $fileId The ID of the file.
- * @param string $commentId The ID of the comment.
- * @param string $replyId The ID of the reply.
- * @param Google_CommentReply $postBody
- * @param array $optParams Optional parameters.
- * @return Google_CommentReply
- */
- public function update($fileId, $commentId, $replyId, Google_CommentReply $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('update', array($params));
- if ($this->useObjects()) {
- return new Google_CommentReply($data);
- } else {
- return $data;
- }
- }
- }
-
- /**
- * The "revisions" collection of methods.
- * Typical usage is:
- * <code>
- * $driveService = new Google_DriveService(...);
- * $revisions = $driveService->revisions;
- * </code>
- */
- class Google_RevisionsServiceResource extends Google_ServiceResource {
-
-
- /**
- * Removes a revision. (revisions.delete)
- *
- * @param string $fileId The ID of the file.
- * @param string $revisionId The ID of the revision.
- * @param array $optParams Optional parameters.
- */
- public function delete($fileId, $revisionId, $optParams = array()) {
- $params = array('fileId' => $fileId, 'revisionId' => $revisionId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('delete', array($params));
- return $data;
- }
- /**
- * Gets a specific revision. (revisions.get)
- *
- * @param string $fileId The ID of the file.
- * @param string $revisionId The ID of the revision.
- * @param array $optParams Optional parameters.
- * @return Google_Revision
- */
- public function get($fileId, $revisionId, $optParams = array()) {
- $params = array('fileId' => $fileId, 'revisionId' => $revisionId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('get', array($params));
- if ($this->useObjects()) {
- return new Google_Revision($data);
- } else {
- return $data;
- }
- }
- /**
- * Lists a file's revisions. (revisions.list)
- *
- * @param string $fileId The ID of the file.
- * @param array $optParams Optional parameters.
- * @return Google_RevisionList
- */
- public function listRevisions($fileId, $optParams = array()) {
- $params = array('fileId' => $fileId);
- $params = array_merge($params, $optParams);
- $data = $this->__call('list', array($params));
- if ($this->useObjects()) {
- return new Google_RevisionList($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates a revision. This method supports patch semantics. (revisions.patch)
- *
- * @param string $fileId The ID for the file.
- * @param string $revisionId The ID for the revision.
- * @param Google_Revision $postBody
- * @param array $optParams Optional parameters.
- * @return Google_Revision
- */
- public function patch($fileId, $revisionId, Google_Revision $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'revisionId' => $revisionId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('patch', array($params));
- if ($this->useObjects()) {
- return new Google_Revision($data);
- } else {
- return $data;
- }
- }
- /**
- * Updates a revision. (revisions.update)
- *
- * @param string $fileId The ID for the file.
- * @param string $revisionId The ID for the revision.
- * @param Google_Revision $postBody
- * @param array $optParams Optional parameters.
- * @return Google_Revision
- */
- public function update($fileId, $revisionId, Google_Revision $postBody, $optParams = array()) {
- $params = array('fileId' => $fileId, 'revisionId' => $revisionId, 'postBody' => $postBody);
- $params = array_merge($params, $optParams);
- $data = $this->__call('update', array($params));
- if ($this->useObjects()) {
- return new Google_Revision($data);
- } else {
- return $data;
- }
- }
- }
-
-/**
- * Service definition for Google_Drive (v2).
- *
- * <p>
- * The API to interact with Drive.
- * </p>
- *
- * <p>
- * For more information about this service, see the
- * <a href="https://developers.google.com/drive/" target="_blank">API Documentation</a>
- * </p>
- *
- * @author Google, Inc.
- */
-class Google_DriveService extends Google_Service {
- public $about;
- public $apps;
- public $changes;
- public $children;
- public $comments;
- public $files;
- public $parents;
- public $permissions;
- public $properties;
- public $replies;
- public $revisions;
- /**
- * Constructs the internal representation of the Drive service.
- *
- * @param Google_Client $client
- */
- public function __construct(Google_Client $client) {
- $this->servicePath = 'drive/v2/';
- $this->version = 'v2';
- $this->serviceName = 'drive';
-
- $client->addService($this->serviceName, $this->version);
- $this->about = new Google_AboutServiceResource($this, $this->serviceName, 'about', json_decode('{"methods": {"get": {"id": "drive.about.get", "path": "about", "httpMethod": "GET", "parameters": {"includeSubscribed": {"type": "boolean", "default": "true", "location": "query"}, "maxChangeIdCount": {"type": "string", "default": "1", "format": "int64", "location": "query"}, "startChangeId": {"type": "string", "format": "int64", "location": "query"}}, "response": {"$ref": "About"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}}}', true));
- $this->apps = new Google_AppsServiceResource($this, $this->serviceName, 'apps', json_decode('{"methods": {"get": {"id": "drive.apps.get", "path": "apps/{appId}", "httpMethod": "GET", "parameters": {"appId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "App"}, "scopes": ["https://www.googleapis.com/auth/drive.apps.readonly"]}, "list": {"id": "drive.apps.list", "path": "apps", "httpMethod": "GET", "response": {"$ref": "AppList"}, "scopes": ["https://www.googleapis.com/auth/drive.apps.readonly"]}}}', true));
- $this->changes = new Google_ChangesServiceResource($this, $this->serviceName, 'changes', json_decode('{"methods": {"get": {"id": "drive.changes.get", "path": "changes/{changeId}", "httpMethod": "GET", "parameters": {"changeId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "Change"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "list": {"id": "drive.changes.list", "path": "changes", "httpMethod": "GET", "parameters": {"includeDeleted": {"type": "boolean", "default": "true", "location": "query"}, "includeSubscribed": {"type": "boolean", "default": "true", "location": "query"}, "maxResults": {"type": "integer", "default": "100", "format": "int32", "minimum": "0", "location": "query"}, "pageToken": {"type": "string", "location": "query"}, "startChangeId": {"type": "string", "format": "int64", "location": "query"}}, "response": {"$ref": "ChangeList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"], "supportsSubscription": true}}}', true));
- $this->children = new Google_ChildrenServiceResource($this, $this->serviceName, 'children', json_decode('{"methods": {"delete": {"id": "drive.children.delete", "path": "files/{folderId}/children/{childId}", "httpMethod": "DELETE", "parameters": {"childId": {"type": "string", "required": true, "location": "path"}, "folderId": {"type": "string", "required": true, "location": "path"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "get": {"id": "drive.children.get", "path": "files/{folderId}/children/{childId}", "httpMethod": "GET", "parameters": {"childId": {"type": "string", "required": true, "location": "path"}, "folderId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "ChildReference"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "insert": {"id": "drive.children.insert", "path": "files/{folderId}/children", "httpMethod": "POST", "parameters": {"folderId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "ChildReference"}, "response": {"$ref": "ChildReference"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "list": {"id": "drive.children.list", "path": "files/{folderId}/children", "httpMethod": "GET", "parameters": {"folderId": {"type": "string", "required": true, "location": "path"}, "maxResults": {"type": "integer", "default": "100", "format": "int32", "minimum": "0", "location": "query"}, "pageToken": {"type": "string", "location": "query"}, "q": {"type": "string", "location": "query"}}, "response": {"$ref": "ChildList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}}}', true));
- $this->comments = new Google_CommentsServiceResource($this, $this->serviceName, 'comments', json_decode('{"methods": {"delete": {"id": "drive.comments.delete", "path": "files/{fileId}/comments/{commentId}", "httpMethod": "DELETE", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.readonly"]}, "get": {"id": "drive.comments.get", "path": "files/{fileId}/comments/{commentId}", "httpMethod": "GET", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}, "includeDeleted": {"type": "boolean", "default": "false", "location": "query"}}, "response": {"$ref": "Comment"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.readonly"]}, "insert": {"id": "drive.comments.insert", "path": "files/{fileId}/comments", "httpMethod": "POST", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "Comment"}, "response": {"$ref": "Comment"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.readonly"]}, "list": {"id": "drive.comments.list", "path": "files/{fileId}/comments", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "includeDeleted": {"type": "boolean", "default": "false", "location": "query"}, "maxResults": {"type": "integer", "default": "20", "format": "int32", "minimum": "0", "maximum": "100", "location": "query"}, "pageToken": {"type": "string", "location": "query"}, "updatedMin": {"type": "string", "location": "query"}}, "response": {"$ref": "CommentList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.readonly"]}, "patch": {"id": "drive.comments.patch", "path": "files/{fileId}/comments/{commentId}", "httpMethod": "PATCH", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "Comment"}, "response": {"$ref": "Comment"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "update": {"id": "drive.comments.update", "path": "files/{fileId}/comments/{commentId}", "httpMethod": "PUT", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "Comment"}, "response": {"$ref": "Comment"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}}}', true));
- $this->files = new Google_FilesServiceResource($this, $this->serviceName, 'files', json_decode('{"methods": {"copy": {"id": "drive.files.copy", "path": "files/{fileId}/copy", "httpMethod": "POST", "parameters": {"convert": {"type": "boolean", "default": "false", "location": "query"}, "fileId": {"type": "string", "required": true, "location": "path"}, "ocr": {"type": "boolean", "default": "false", "location": "query"}, "ocrLanguage": {"type": "string", "location": "query"}, "pinned": {"type": "boolean", "default": "false", "location": "query"}, "timedTextLanguage": {"type": "string", "location": "query"}, "timedTextTrackName": {"type": "string", "location": "query"}}, "request": {"$ref": "File"}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "delete": {"id": "drive.files.delete", "path": "files/{fileId}", "httpMethod": "DELETE", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "get": {"id": "drive.files.get", "path": "files/{fileId}", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "projection": {"type": "string", "enum": ["BASIC", "FULL"], "location": "query"}, "updateViewedDate": {"type": "boolean", "default": "false", "location": "query"}}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"], "supportsSubscription": true}, "insert": {"id": "drive.files.insert", "path": "files", "httpMethod": "POST", "parameters": {"convert": {"type": "boolean", "default": "false", "location": "query"}, "ocr": {"type": "boolean", "default": "false", "location": "query"}, "ocrLanguage": {"type": "string", "location": "query"}, "pinned": {"type": "boolean", "default": "false", "location": "query"}, "timedTextLanguage": {"type": "string", "location": "query"}, "timedTextTrackName": {"type": "string", "location": "query"}, "useContentAsIndexableText": {"type": "boolean", "default": "false", "location": "query"}}, "request": {"$ref": "File"}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"], "supportsMediaUpload": true, "mediaUpload": {"accept": ["*/*"], "maxSize": "10GB", "protocols": {"simple": {"multipart": true, "path": "/upload/drive/v2/files"}, "resumable": {"multipart": true, "path": "/resumable/upload/drive/v2/files"}}}, "supportsSubscription": true}, "list": {"id": "drive.files.list", "path": "files", "httpMethod": "GET", "parameters": {"maxResults": {"type": "integer", "default": "100", "format": "int32", "minimum": "0", "location": "query"}, "pageToken": {"type": "string", "location": "query"}, "projection": {"type": "string", "enum": ["BASIC", "FULL"], "location": "query"}, "q": {"type": "string", "location": "query"}}, "response": {"$ref": "FileList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "patch": {"id": "drive.files.patch", "path": "files/{fileId}", "httpMethod": "PATCH", "parameters": {"convert": {"type": "boolean", "default": "false", "location": "query"}, "fileId": {"type": "string", "required": true, "location": "path"}, "newRevision": {"type": "boolean", "default": "true", "location": "query"}, "ocr": {"type": "boolean", "default": "false", "location": "query"}, "ocrLanguage": {"type": "string", "location": "query"}, "pinned": {"type": "boolean", "default": "false", "location": "query"}, "setModifiedDate": {"type": "boolean", "default": "false", "location": "query"}, "timedTextLanguage": {"type": "string", "location": "query"}, "timedTextTrackName": {"type": "string", "location": "query"}, "updateViewedDate": {"type": "boolean", "default": "true", "location": "query"}, "useContentAsIndexableText": {"type": "boolean", "default": "false", "location": "query"}}, "request": {"$ref": "File"}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.scripts"]}, "touch": {"id": "drive.files.touch", "path": "files/{fileId}/touch", "httpMethod": "POST", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "trash": {"id": "drive.files.trash", "path": "files/{fileId}/trash", "httpMethod": "POST", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "untrash": {"id": "drive.files.untrash", "path": "files/{fileId}/untrash", "httpMethod": "POST", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "update": {"id": "drive.files.update", "path": "files/{fileId}", "httpMethod": "PUT", "parameters": {"convert": {"type": "boolean", "default": "false", "location": "query"}, "fileId": {"type": "string", "required": true, "location": "path"}, "newRevision": {"type": "boolean", "default": "true", "location": "query"}, "ocr": {"type": "boolean", "default": "false", "location": "query"}, "ocrLanguage": {"type": "string", "location": "query"}, "pinned": {"type": "boolean", "default": "false", "location": "query"}, "setModifiedDate": {"type": "boolean", "default": "false", "location": "query"}, "timedTextLanguage": {"type": "string", "location": "query"}, "timedTextTrackName": {"type": "string", "location": "query"}, "updateViewedDate": {"type": "boolean", "default": "true", "location": "query"}, "useContentAsIndexableText": {"type": "boolean", "default": "false", "location": "query"}}, "request": {"$ref": "File"}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.scripts"], "supportsMediaUpload": true, "mediaUpload": {"accept": ["*/*"], "maxSize": "10GB", "protocols": {"simple": {"multipart": true, "path": "/upload/drive/v2/files/{fileId}"}, "resumable": {"multipart": true, "path": "/resumable/upload/drive/v2/files/{fileId}"}}}}}}', true));
- $this->parents = new Google_ParentsServiceResource($this, $this->serviceName, 'parents', json_decode('{"methods": {"delete": {"id": "drive.parents.delete", "path": "files/{fileId}/parents/{parentId}", "httpMethod": "DELETE", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "parentId": {"type": "string", "required": true, "location": "path"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "get": {"id": "drive.parents.get", "path": "files/{fileId}/parents/{parentId}", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "parentId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "ParentReference"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "insert": {"id": "drive.parents.insert", "path": "files/{fileId}/parents", "httpMethod": "POST", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "ParentReference"}, "response": {"$ref": "ParentReference"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "list": {"id": "drive.parents.list", "path": "files/{fileId}/parents", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "ParentList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}}}', true));
- $this->permissions = new Google_PermissionsServiceResource($this, $this->serviceName, 'permissions', json_decode('{"methods": {"delete": {"id": "drive.permissions.delete", "path": "files/{fileId}/permissions/{permissionId}", "httpMethod": "DELETE", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "permissionId": {"type": "string", "required": true, "location": "path"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "get": {"id": "drive.permissions.get", "path": "files/{fileId}/permissions/{permissionId}", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "permissionId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "Permission"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "insert": {"id": "drive.permissions.insert", "path": "files/{fileId}/permissions", "httpMethod": "POST", "parameters": {"emailMessage": {"type": "string", "location": "query"}, "fileId": {"type": "string", "required": true, "location": "path"}, "sendNotificationEmails": {"type": "boolean", "default": "true", "location": "query"}}, "request": {"$ref": "Permission"}, "response": {"$ref": "Permission"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "list": {"id": "drive.permissions.list", "path": "files/{fileId}/permissions", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "PermissionList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "patch": {"id": "drive.permissions.patch", "path": "files/{fileId}/permissions/{permissionId}", "httpMethod": "PATCH", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "permissionId": {"type": "string", "required": true, "location": "path"}, "transferOwnership": {"type": "boolean", "default": "false", "location": "query"}}, "request": {"$ref": "Permission"}, "response": {"$ref": "Permission"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "update": {"id": "drive.permissions.update", "path": "files/{fileId}/permissions/{permissionId}", "httpMethod": "PUT", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "permissionId": {"type": "string", "required": true, "location": "path"}, "transferOwnership": {"type": "boolean", "default": "false", "location": "query"}}, "request": {"$ref": "Permission"}, "response": {"$ref": "Permission"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}}}', true));
- $this->properties = new Google_PropertiesServiceResource($this, $this->serviceName, 'properties', json_decode('{"methods": {"delete": {"id": "drive.properties.delete", "path": "files/{fileId}/properties/{propertyKey}", "httpMethod": "DELETE", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "propertyKey": {"type": "string", "required": true, "location": "path"}, "visibility": {"type": "string", "default": "private", "location": "query"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "get": {"id": "drive.properties.get", "path": "files/{fileId}/properties/{propertyKey}", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "propertyKey": {"type": "string", "required": true, "location": "path"}, "visibility": {"type": "string", "default": "private", "location": "query"}}, "response": {"$ref": "Property"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "insert": {"id": "drive.properties.insert", "path": "files/{fileId}/properties", "httpMethod": "POST", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "Property"}, "response": {"$ref": "Property"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "list": {"id": "drive.properties.list", "path": "files/{fileId}/properties", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "PropertyList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "patch": {"id": "drive.properties.patch", "path": "files/{fileId}/properties/{propertyKey}", "httpMethod": "PATCH", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "propertyKey": {"type": "string", "required": true, "location": "path"}, "visibility": {"type": "string", "default": "private", "location": "query"}}, "request": {"$ref": "Property"}, "response": {"$ref": "Property"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "update": {"id": "drive.properties.update", "path": "files/{fileId}/properties/{propertyKey}", "httpMethod": "PUT", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "propertyKey": {"type": "string", "required": true, "location": "path"}, "visibility": {"type": "string", "default": "private", "location": "query"}}, "request": {"$ref": "Property"}, "response": {"$ref": "Property"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}}}', true));
- $this->replies = new Google_RepliesServiceResource($this, $this->serviceName, 'replies', json_decode('{"methods": {"delete": {"id": "drive.replies.delete", "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", "httpMethod": "DELETE", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}, "replyId": {"type": "string", "required": true, "location": "path"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "get": {"id": "drive.replies.get", "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", "httpMethod": "GET", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}, "includeDeleted": {"type": "boolean", "default": "false", "location": "query"}, "replyId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "CommentReply"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.readonly"]}, "insert": {"id": "drive.replies.insert", "path": "files/{fileId}/comments/{commentId}/replies", "httpMethod": "POST", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "CommentReply"}, "response": {"$ref": "CommentReply"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "list": {"id": "drive.replies.list", "path": "files/{fileId}/comments/{commentId}/replies", "httpMethod": "GET", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}, "includeDeleted": {"type": "boolean", "default": "false", "location": "query"}, "maxResults": {"type": "integer", "default": "20", "format": "int32", "minimum": "0", "maximum": "100", "location": "query"}, "pageToken": {"type": "string", "location": "query"}}, "response": {"$ref": "CommentReplyList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.readonly"]}, "patch": {"id": "drive.replies.patch", "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", "httpMethod": "PATCH", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}, "replyId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "CommentReply"}, "response": {"$ref": "CommentReply"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "update": {"id": "drive.replies.update", "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", "httpMethod": "PUT", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}, "replyId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "CommentReply"}, "response": {"$ref": "CommentReply"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}}}', true));
- $this->revisions = new Google_RevisionsServiceResource($this, $this->serviceName, 'revisions', json_decode('{"methods": {"delete": {"id": "drive.revisions.delete", "path": "files/{fileId}/revisions/{revisionId}", "httpMethod": "DELETE", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "revisionId": {"type": "string", "required": true, "location": "path"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "get": {"id": "drive.revisions.get", "path": "files/{fileId}/revisions/{revisionId}", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "revisionId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "Revision"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "list": {"id": "drive.revisions.list", "path": "files/{fileId}/revisions", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "RevisionList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "patch": {"id": "drive.revisions.patch", "path": "files/{fileId}/revisions/{revisionId}", "httpMethod": "PATCH", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "revisionId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "Revision"}, "response": {"$ref": "Revision"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "update": {"id": "drive.revisions.update", "path": "files/{fileId}/revisions/{revisionId}", "httpMethod": "PUT", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "revisionId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "Revision"}, "response": {"$ref": "Revision"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}}}', true));
-
- }
-}
-
-
-
-class Google_About extends Google_Model {
- protected $__additionalRoleInfoType = 'Google_AboutAdditionalRoleInfo';
- protected $__additionalRoleInfoDataType = 'array';
- public $additionalRoleInfo;
- public $domainSharingPolicy;
- public $etag;
- protected $__exportFormatsType = 'Google_AboutExportFormats';
- protected $__exportFormatsDataType = 'array';
- public $exportFormats;
- protected $__featuresType = 'Google_AboutFeatures';
- protected $__featuresDataType = 'array';
- public $features;
- protected $__importFormatsType = 'Google_AboutImportFormats';
- protected $__importFormatsDataType = 'array';
- public $importFormats;
- public $isCurrentAppInstalled;
- public $kind;
- public $largestChangeId;
- protected $__maxUploadSizesType = 'Google_AboutMaxUploadSizes';
- protected $__maxUploadSizesDataType = 'array';
- public $maxUploadSizes;
- public $name;
- public $permissionId;
- public $quotaBytesTotal;
- public $quotaBytesUsed;
- public $quotaBytesUsedAggregate;
- public $quotaBytesUsedInTrash;
- public $remainingChangeIds;
- public $rootFolderId;
- public $selfLink;
- protected $__userType = 'Google_User';
- protected $__userDataType = '';
- public $user;
- public function setAdditionalRoleInfo(/* array(Google_AboutAdditionalRoleInfo) */ $additionalRoleInfo) {
- $this->assertIsArray($additionalRoleInfo, 'Google_AboutAdditionalRoleInfo', __METHOD__);
- $this->additionalRoleInfo = $additionalRoleInfo;
- }
- public function getAdditionalRoleInfo() {
- return $this->additionalRoleInfo;
- }
- public function setDomainSharingPolicy($domainSharingPolicy) {
- $this->domainSharingPolicy = $domainSharingPolicy;
- }
- public function getDomainSharingPolicy() {
- return $this->domainSharingPolicy;
- }
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setExportFormats(/* array(Google_AboutExportFormats) */ $exportFormats) {
- $this->assertIsArray($exportFormats, 'Google_AboutExportFormats', __METHOD__);
- $this->exportFormats = $exportFormats;
- }
- public function getExportFormats() {
- return $this->exportFormats;
- }
- public function setFeatures(/* array(Google_AboutFeatures) */ $features) {
- $this->assertIsArray($features, 'Google_AboutFeatures', __METHOD__);
- $this->features = $features;
- }
- public function getFeatures() {
- return $this->features;
- }
- public function setImportFormats(/* array(Google_AboutImportFormats) */ $importFormats) {
- $this->assertIsArray($importFormats, 'Google_AboutImportFormats', __METHOD__);
- $this->importFormats = $importFormats;
- }
- public function getImportFormats() {
- return $this->importFormats;
- }
- public function setIsCurrentAppInstalled($isCurrentAppInstalled) {
- $this->isCurrentAppInstalled = $isCurrentAppInstalled;
- }
- public function getIsCurrentAppInstalled() {
- return $this->isCurrentAppInstalled;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setLargestChangeId($largestChangeId) {
- $this->largestChangeId = $largestChangeId;
- }
- public function getLargestChangeId() {
- return $this->largestChangeId;
- }
- public function setMaxUploadSizes(/* array(Google_AboutMaxUploadSizes) */ $maxUploadSizes) {
- $this->assertIsArray($maxUploadSizes, 'Google_AboutMaxUploadSizes', __METHOD__);
- $this->maxUploadSizes = $maxUploadSizes;
- }
- public function getMaxUploadSizes() {
- return $this->maxUploadSizes;
- }
- public function setName($name) {
- $this->name = $name;
- }
- public function getName() {
- return $this->name;
- }
- public function setPermissionId($permissionId) {
- $this->permissionId = $permissionId;
- }
- public function getPermissionId() {
- return $this->permissionId;
- }
- public function setQuotaBytesTotal($quotaBytesTotal) {
- $this->quotaBytesTotal = $quotaBytesTotal;
- }
- public function getQuotaBytesTotal() {
- return $this->quotaBytesTotal;
- }
- public function setQuotaBytesUsed($quotaBytesUsed) {
- $this->quotaBytesUsed = $quotaBytesUsed;
- }
- public function getQuotaBytesUsed() {
- return $this->quotaBytesUsed;
- }
- public function setQuotaBytesUsedAggregate($quotaBytesUsedAggregate) {
- $this->quotaBytesUsedAggregate = $quotaBytesUsedAggregate;
- }
- public function getQuotaBytesUsedAggregate() {
- return $this->quotaBytesUsedAggregate;
- }
- public function setQuotaBytesUsedInTrash($quotaBytesUsedInTrash) {
- $this->quotaBytesUsedInTrash = $quotaBytesUsedInTrash;
- }
- public function getQuotaBytesUsedInTrash() {
- return $this->quotaBytesUsedInTrash;
- }
- public function setRemainingChangeIds($remainingChangeIds) {
- $this->remainingChangeIds = $remainingChangeIds;
- }
- public function getRemainingChangeIds() {
- return $this->remainingChangeIds;
- }
- public function setRootFolderId($rootFolderId) {
- $this->rootFolderId = $rootFolderId;
- }
- public function getRootFolderId() {
- return $this->rootFolderId;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
- public function setUser(Google_User $user) {
- $this->user = $user;
- }
- public function getUser() {
- return $this->user;
- }
-}
-
-class Google_AboutAdditionalRoleInfo extends Google_Model {
- protected $__roleSetsType = 'Google_AboutAdditionalRoleInfoRoleSets';
- protected $__roleSetsDataType = 'array';
- public $roleSets;
- public $type;
- public function setRoleSets(/* array(Google_AboutAdditionalRoleInfoRoleSets) */ $roleSets) {
- $this->assertIsArray($roleSets, 'Google_AboutAdditionalRoleInfoRoleSets', __METHOD__);
- $this->roleSets = $roleSets;
- }
- public function getRoleSets() {
- return $this->roleSets;
- }
- public function setType($type) {
- $this->type = $type;
- }
- public function getType() {
- return $this->type;
- }
-}
-
-class Google_AboutAdditionalRoleInfoRoleSets extends Google_Model {
- public $additionalRoles;
- public $primaryRole;
- public function setAdditionalRoles(/* array(Google_string) */ $additionalRoles) {
- $this->assertIsArray($additionalRoles, 'Google_string', __METHOD__);
- $this->additionalRoles = $additionalRoles;
- }
- public function getAdditionalRoles() {
- return $this->additionalRoles;
- }
- public function setPrimaryRole($primaryRole) {
- $this->primaryRole = $primaryRole;
- }
- public function getPrimaryRole() {
- return $this->primaryRole;
- }
-}
-
-class Google_AboutExportFormats extends Google_Model {
- public $source;
- public $targets;
- public function setSource($source) {
- $this->source = $source;
- }
- public function getSource() {
- return $this->source;
- }
- public function setTargets(/* array(Google_string) */ $targets) {
- $this->assertIsArray($targets, 'Google_string', __METHOD__);
- $this->targets = $targets;
- }
- public function getTargets() {
- return $this->targets;
- }
-}
-
-class Google_AboutFeatures extends Google_Model {
- public $featureName;
- public $featureRate;
- public function setFeatureName($featureName) {
- $this->featureName = $featureName;
- }
- public function getFeatureName() {
- return $this->featureName;
- }
- public function setFeatureRate($featureRate) {
- $this->featureRate = $featureRate;
- }
- public function getFeatureRate() {
- return $this->featureRate;
- }
-}
-
-class Google_AboutImportFormats extends Google_Model {
- public $source;
- public $targets;
- public function setSource($source) {
- $this->source = $source;
- }
- public function getSource() {
- return $this->source;
- }
- public function setTargets(/* array(Google_string) */ $targets) {
- $this->assertIsArray($targets, 'Google_string', __METHOD__);
- $this->targets = $targets;
- }
- public function getTargets() {
- return $this->targets;
- }
-}
-
-class Google_AboutMaxUploadSizes extends Google_Model {
- public $size;
- public $type;
- public function setSize($size) {
- $this->size = $size;
- }
- public function getSize() {
- return $this->size;
- }
- public function setType($type) {
- $this->type = $type;
- }
- public function getType() {
- return $this->type;
- }
-}
-
-class Google_App extends Google_Model {
- public $authorized;
- protected $__iconsType = 'Google_AppIcons';
- protected $__iconsDataType = 'array';
- public $icons;
- public $id;
- public $installed;
- public $kind;
- public $name;
- public $objectType;
- public $primaryFileExtensions;
- public $primaryMimeTypes;
- public $productUrl;
- public $secondaryFileExtensions;
- public $secondaryMimeTypes;
- public $supportsCreate;
- public $supportsImport;
- public $useByDefault;
- public function setAuthorized($authorized) {
- $this->authorized = $authorized;
- }
- public function getAuthorized() {
- return $this->authorized;
- }
- public function setIcons(/* array(Google_AppIcons) */ $icons) {
- $this->assertIsArray($icons, 'Google_AppIcons', __METHOD__);
- $this->icons = $icons;
- }
- public function getIcons() {
- return $this->icons;
- }
- public function setId($id) {
- $this->id = $id;
- }
- public function getId() {
- return $this->id;
- }
- public function setInstalled($installed) {
- $this->installed = $installed;
- }
- public function getInstalled() {
- return $this->installed;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setName($name) {
- $this->name = $name;
- }
- public function getName() {
- return $this->name;
- }
- public function setObjectType($objectType) {
- $this->objectType = $objectType;
- }
- public function getObjectType() {
- return $this->objectType;
- }
- public function setPrimaryFileExtensions(/* array(Google_string) */ $primaryFileExtensions) {
- $this->assertIsArray($primaryFileExtensions, 'Google_string', __METHOD__);
- $this->primaryFileExtensions = $primaryFileExtensions;
- }
- public function getPrimaryFileExtensions() {
- return $this->primaryFileExtensions;
- }
- public function setPrimaryMimeTypes(/* array(Google_string) */ $primaryMimeTypes) {
- $this->assertIsArray($primaryMimeTypes, 'Google_string', __METHOD__);
- $this->primaryMimeTypes = $primaryMimeTypes;
- }
- public function getPrimaryMimeTypes() {
- return $this->primaryMimeTypes;
- }
- public function setProductUrl($productUrl) {
- $this->productUrl = $productUrl;
- }
- public function getProductUrl() {
- return $this->productUrl;
- }
- public function setSecondaryFileExtensions(/* array(Google_string) */ $secondaryFileExtensions) {
- $this->assertIsArray($secondaryFileExtensions, 'Google_string', __METHOD__);
- $this->secondaryFileExtensions = $secondaryFileExtensions;
- }
- public function getSecondaryFileExtensions() {
- return $this->secondaryFileExtensions;
- }
- public function setSecondaryMimeTypes(/* array(Google_string) */ $secondaryMimeTypes) {
- $this->assertIsArray($secondaryMimeTypes, 'Google_string', __METHOD__);
- $this->secondaryMimeTypes = $secondaryMimeTypes;
- }
- public function getSecondaryMimeTypes() {
- return $this->secondaryMimeTypes;
- }
- public function setSupportsCreate($supportsCreate) {
- $this->supportsCreate = $supportsCreate;
- }
- public function getSupportsCreate() {
- return $this->supportsCreate;
- }
- public function setSupportsImport($supportsImport) {
- $this->supportsImport = $supportsImport;
- }
- public function getSupportsImport() {
- return $this->supportsImport;
- }
- public function setUseByDefault($useByDefault) {
- $this->useByDefault = $useByDefault;
- }
- public function getUseByDefault() {
- return $this->useByDefault;
- }
-}
-
-class Google_AppIcons extends Google_Model {
- public $category;
- public $iconUrl;
- public $size;
- public function setCategory($category) {
- $this->category = $category;
- }
- public function getCategory() {
- return $this->category;
- }
- public function setIconUrl($iconUrl) {
- $this->iconUrl = $iconUrl;
- }
- public function getIconUrl() {
- return $this->iconUrl;
- }
- public function setSize($size) {
- $this->size = $size;
- }
- public function getSize() {
- return $this->size;
- }
-}
-
-class Google_AppList extends Google_Model {
- public $etag;
- protected $__itemsType = 'Google_App';
- protected $__itemsDataType = 'array';
- public $items;
- public $kind;
- public $selfLink;
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setItems(/* array(Google_App) */ $items) {
- $this->assertIsArray($items, 'Google_App', __METHOD__);
- $this->items = $items;
- }
- public function getItems() {
- return $this->items;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_Change extends Google_Model {
- public $deleted;
- protected $__fileType = 'Google_DriveFile';
- protected $__fileDataType = '';
- public $file;
- public $fileId;
- public $id;
- public $kind;
- public $selfLink;
- public function setDeleted($deleted) {
- $this->deleted = $deleted;
- }
- public function getDeleted() {
- return $this->deleted;
- }
- public function setFile(Google_DriveFile $file) {
- $this->file = $file;
- }
- public function getFile() {
- return $this->file;
- }
- public function setFileId($fileId) {
- $this->fileId = $fileId;
- }
- public function getFileId() {
- return $this->fileId;
- }
- public function setId($id) {
- $this->id = $id;
- }
- public function getId() {
- return $this->id;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_ChangeList extends Google_Model {
- public $etag;
- protected $__itemsType = 'Google_Change';
- protected $__itemsDataType = 'array';
- public $items;
- public $kind;
- public $largestChangeId;
- public $nextLink;
- public $nextPageToken;
- public $selfLink;
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setItems(/* array(Google_Change) */ $items) {
- $this->assertIsArray($items, 'Google_Change', __METHOD__);
- $this->items = $items;
- }
- public function getItems() {
- return $this->items;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setLargestChangeId($largestChangeId) {
- $this->largestChangeId = $largestChangeId;
- }
- public function getLargestChangeId() {
- return $this->largestChangeId;
- }
- public function setNextLink($nextLink) {
- $this->nextLink = $nextLink;
- }
- public function getNextLink() {
- return $this->nextLink;
- }
- public function setNextPageToken($nextPageToken) {
- $this->nextPageToken = $nextPageToken;
- }
- public function getNextPageToken() {
- return $this->nextPageToken;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_ChildList extends Google_Model {
- public $etag;
- protected $__itemsType = 'Google_ChildReference';
- protected $__itemsDataType = 'array';
- public $items;
- public $kind;
- public $nextLink;
- public $nextPageToken;
- public $selfLink;
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setItems(/* array(Google_ChildReference) */ $items) {
- $this->assertIsArray($items, 'Google_ChildReference', __METHOD__);
- $this->items = $items;
- }
- public function getItems() {
- return $this->items;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setNextLink($nextLink) {
- $this->nextLink = $nextLink;
- }
- public function getNextLink() {
- return $this->nextLink;
- }
- public function setNextPageToken($nextPageToken) {
- $this->nextPageToken = $nextPageToken;
- }
- public function getNextPageToken() {
- return $this->nextPageToken;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_ChildReference extends Google_Model {
- public $childLink;
- public $id;
- public $kind;
- public $selfLink;
- public function setChildLink($childLink) {
- $this->childLink = $childLink;
- }
- public function getChildLink() {
- return $this->childLink;
- }
- public function setId($id) {
- $this->id = $id;
- }
- public function getId() {
- return $this->id;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_Comment extends Google_Model {
- public $anchor;
- protected $__authorType = 'Google_User';
- protected $__authorDataType = '';
- public $author;
- public $commentId;
- public $content;
- protected $__contextType = 'Google_CommentContext';
- protected $__contextDataType = '';
- public $context;
- public $createdDate;
- public $deleted;
- public $fileId;
- public $fileTitle;
- public $htmlContent;
- public $kind;
- public $modifiedDate;
- protected $__repliesType = 'Google_CommentReply';
- protected $__repliesDataType = 'array';
- public $replies;
- public $selfLink;
- public $status;
- public function setAnchor($anchor) {
- $this->anchor = $anchor;
- }
- public function getAnchor() {
- return $this->anchor;
- }
- public function setAuthor(Google_User $author) {
- $this->author = $author;
- }
- public function getAuthor() {
- return $this->author;
- }
- public function setCommentId($commentId) {
- $this->commentId = $commentId;
- }
- public function getCommentId() {
- return $this->commentId;
- }
- public function setContent($content) {
- $this->content = $content;
- }
- public function getContent() {
- return $this->content;
- }
- public function setContext(Google_CommentContext $context) {
- $this->context = $context;
- }
- public function getContext() {
- return $this->context;
- }
- public function setCreatedDate($createdDate) {
- $this->createdDate = $createdDate;
- }
- public function getCreatedDate() {
- return $this->createdDate;
- }
- public function setDeleted($deleted) {
- $this->deleted = $deleted;
- }
- public function getDeleted() {
- return $this->deleted;
- }
- public function setFileId($fileId) {
- $this->fileId = $fileId;
- }
- public function getFileId() {
- return $this->fileId;
- }
- public function setFileTitle($fileTitle) {
- $this->fileTitle = $fileTitle;
- }
- public function getFileTitle() {
- return $this->fileTitle;
- }
- public function setHtmlContent($htmlContent) {
- $this->htmlContent = $htmlContent;
- }
- public function getHtmlContent() {
- return $this->htmlContent;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setModifiedDate($modifiedDate) {
- $this->modifiedDate = $modifiedDate;
- }
- public function getModifiedDate() {
- return $this->modifiedDate;
- }
- public function setReplies(/* array(Google_CommentReply) */ $replies) {
- $this->assertIsArray($replies, 'Google_CommentReply', __METHOD__);
- $this->replies = $replies;
- }
- public function getReplies() {
- return $this->replies;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
- public function setStatus($status) {
- $this->status = $status;
- }
- public function getStatus() {
- return $this->status;
- }
-}
-
-class Google_CommentContext extends Google_Model {
- public $type;
- public $value;
- public function setType($type) {
- $this->type = $type;
- }
- public function getType() {
- return $this->type;
- }
- public function setValue($value) {
- $this->value = $value;
- }
- public function getValue() {
- return $this->value;
- }
-}
-
-class Google_CommentList extends Google_Model {
- protected $__itemsType = 'Google_Comment';
- protected $__itemsDataType = 'array';
- public $items;
- public $kind;
- public $nextPageToken;
- public function setItems(/* array(Google_Comment) */ $items) {
- $this->assertIsArray($items, 'Google_Comment', __METHOD__);
- $this->items = $items;
- }
- public function getItems() {
- return $this->items;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setNextPageToken($nextPageToken) {
- $this->nextPageToken = $nextPageToken;
- }
- public function getNextPageToken() {
- return $this->nextPageToken;
- }
-}
-
-class Google_CommentReply extends Google_Model {
- protected $__authorType = 'Google_User';
- protected $__authorDataType = '';
- public $author;
- public $content;
- public $createdDate;
- public $deleted;
- public $htmlContent;
- public $kind;
- public $modifiedDate;
- public $replyId;
- public $verb;
- public function setAuthor(Google_User $author) {
- $this->author = $author;
- }
- public function getAuthor() {
- return $this->author;
- }
- public function setContent($content) {
- $this->content = $content;
- }
- public function getContent() {
- return $this->content;
- }
- public function setCreatedDate($createdDate) {
- $this->createdDate = $createdDate;
- }
- public function getCreatedDate() {
- return $this->createdDate;
- }
- public function setDeleted($deleted) {
- $this->deleted = $deleted;
- }
- public function getDeleted() {
- return $this->deleted;
- }
- public function setHtmlContent($htmlContent) {
- $this->htmlContent = $htmlContent;
- }
- public function getHtmlContent() {
- return $this->htmlContent;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setModifiedDate($modifiedDate) {
- $this->modifiedDate = $modifiedDate;
- }
- public function getModifiedDate() {
- return $this->modifiedDate;
- }
- public function setReplyId($replyId) {
- $this->replyId = $replyId;
- }
- public function getReplyId() {
- return $this->replyId;
- }
- public function setVerb($verb) {
- $this->verb = $verb;
- }
- public function getVerb() {
- return $this->verb;
- }
-}
-
-class Google_CommentReplyList extends Google_Model {
- protected $__itemsType = 'Google_CommentReply';
- protected $__itemsDataType = 'array';
- public $items;
- public $kind;
- public $nextPageToken;
- public function setItems(/* array(Google_CommentReply) */ $items) {
- $this->assertIsArray($items, 'Google_CommentReply', __METHOD__);
- $this->items = $items;
- }
- public function getItems() {
- return $this->items;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setNextPageToken($nextPageToken) {
- $this->nextPageToken = $nextPageToken;
- }
- public function getNextPageToken() {
- return $this->nextPageToken;
- }
-}
-
-class Google_DriveFile extends Google_Model {
- public $alternateLink;
- public $appDataContents;
- public $createdDate;
- public $description;
- public $downloadUrl;
- public $editable;
- public $embedLink;
- public $etag;
- public $explicitlyTrashed;
- public $exportLinks;
- public $fileExtension;
- public $fileSize;
- public $iconLink;
- public $id;
- protected $__imageMediaMetadataType = 'Google_DriveFileImageMediaMetadata';
- protected $__imageMediaMetadataDataType = '';
- public $imageMediaMetadata;
- protected $__indexableTextType = 'Google_DriveFileIndexableText';
- protected $__indexableTextDataType = '';
- public $indexableText;
- public $kind;
- protected $__labelsType = 'Google_DriveFileLabels';
- protected $__labelsDataType = '';
- public $labels;
- protected $__lastModifyingUserType = 'Google_User';
- protected $__lastModifyingUserDataType = '';
- public $lastModifyingUser;
- public $lastModifyingUserName;
- public $lastViewedByMeDate;
- public $md5Checksum;
- public $mimeType;
- public $modifiedByMeDate;
- public $modifiedDate;
- public $originalFilename;
- public $ownerNames;
- protected $__ownersType = 'Google_User';
- protected $__ownersDataType = 'array';
- public $owners;
- protected $__parentsType = 'Google_ParentReference';
- protected $__parentsDataType = 'array';
- public $parents;
- public $quotaBytesUsed;
- public $selfLink;
- public $shared;
- public $sharedWithMeDate;
- protected $__thumbnailType = 'Google_DriveFileThumbnail';
- protected $__thumbnailDataType = '';
- public $thumbnail;
- public $thumbnailLink;
- public $title;
- protected $__userPermissionType = 'Google_Permission';
- protected $__userPermissionDataType = '';
- public $userPermission;
- public $webContentLink;
- public $webViewLink;
- public $writersCanShare;
- public function setAlternateLink($alternateLink) {
- $this->alternateLink = $alternateLink;
- }
- public function getAlternateLink() {
- return $this->alternateLink;
- }
- public function setAppDataContents($appDataContents) {
- $this->appDataContents = $appDataContents;
- }
- public function getAppDataContents() {
- return $this->appDataContents;
- }
- public function setCreatedDate($createdDate) {
- $this->createdDate = $createdDate;
- }
- public function getCreatedDate() {
- return $this->createdDate;
- }
- public function setDescription($description) {
- $this->description = $description;
- }
- public function getDescription() {
- return $this->description;
- }
- public function setDownloadUrl($downloadUrl) {
- $this->downloadUrl = $downloadUrl;
- }
- public function getDownloadUrl() {
- return $this->downloadUrl;
- }
- public function setEditable($editable) {
- $this->editable = $editable;
- }
- public function getEditable() {
- return $this->editable;
- }
- public function setEmbedLink($embedLink) {
- $this->embedLink = $embedLink;
- }
- public function getEmbedLink() {
- return $this->embedLink;
- }
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setExplicitlyTrashed($explicitlyTrashed) {
- $this->explicitlyTrashed = $explicitlyTrashed;
- }
- public function getExplicitlyTrashed() {
- return $this->explicitlyTrashed;
- }
- public function setExportLinks($exportLinks) {
- $this->exportLinks = $exportLinks;
- }
- public function getExportLinks() {
- return $this->exportLinks;
- }
- public function setFileExtension($fileExtension) {
- $this->fileExtension = $fileExtension;
- }
- public function getFileExtension() {
- return $this->fileExtension;
- }
- public function setFileSize($fileSize) {
- $this->fileSize = $fileSize;
- }
- public function getFileSize() {
- return $this->fileSize;
- }
- public function setIconLink($iconLink) {
- $this->iconLink = $iconLink;
- }
- public function getIconLink() {
- return $this->iconLink;
- }
- public function setId($id) {
- $this->id = $id;
- }
- public function getId() {
- return $this->id;
- }
- public function setImageMediaMetadata(Google_DriveFileImageMediaMetadata $imageMediaMetadata) {
- $this->imageMediaMetadata = $imageMediaMetadata;
- }
- public function getImageMediaMetadata() {
- return $this->imageMediaMetadata;
- }
- public function setIndexableText(Google_DriveFileIndexableText $indexableText) {
- $this->indexableText = $indexableText;
- }
- public function getIndexableText() {
- return $this->indexableText;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setLabels(Google_DriveFileLabels $labels) {
- $this->labels = $labels;
- }
- public function getLabels() {
- return $this->labels;
- }
- public function setLastModifyingUser(Google_User $lastModifyingUser) {
- $this->lastModifyingUser = $lastModifyingUser;
- }
- public function getLastModifyingUser() {
- return $this->lastModifyingUser;
- }
- public function setLastModifyingUserName($lastModifyingUserName) {
- $this->lastModifyingUserName = $lastModifyingUserName;
- }
- public function getLastModifyingUserName() {
- return $this->lastModifyingUserName;
- }
- public function setLastViewedByMeDate($lastViewedByMeDate) {
- $this->lastViewedByMeDate = $lastViewedByMeDate;
- }
- public function getLastViewedByMeDate() {
- return $this->lastViewedByMeDate;
- }
- public function setMd5Checksum($md5Checksum) {
- $this->md5Checksum = $md5Checksum;
- }
- public function getMd5Checksum() {
- return $this->md5Checksum;
- }
- public function setMimeType($mimeType) {
- $this->mimeType = $mimeType;
- }
- public function getMimeType() {
- return $this->mimeType;
- }
- public function setModifiedByMeDate($modifiedByMeDate) {
- $this->modifiedByMeDate = $modifiedByMeDate;
- }
- public function getModifiedByMeDate() {
- return $this->modifiedByMeDate;
- }
- public function setModifiedDate($modifiedDate) {
- $this->modifiedDate = $modifiedDate;
- }
- public function getModifiedDate() {
- return $this->modifiedDate;
- }
- public function setOriginalFilename($originalFilename) {
- $this->originalFilename = $originalFilename;
- }
- public function getOriginalFilename() {
- return $this->originalFilename;
- }
- public function setOwnerNames(/* array(Google_string) */ $ownerNames) {
- $this->assertIsArray($ownerNames, 'Google_string', __METHOD__);
- $this->ownerNames = $ownerNames;
- }
- public function getOwnerNames() {
- return $this->ownerNames;
- }
- public function setOwners(/* array(Google_User) */ $owners) {
- $this->assertIsArray($owners, 'Google_User', __METHOD__);
- $this->owners = $owners;
- }
- public function getOwners() {
- return $this->owners;
- }
- public function setParents(/* array(Google_ParentReference) */ $parents) {
- $this->assertIsArray($parents, 'Google_ParentReference', __METHOD__);
- $this->parents = $parents;
- }
- public function getParents() {
- return $this->parents;
- }
- public function setQuotaBytesUsed($quotaBytesUsed) {
- $this->quotaBytesUsed = $quotaBytesUsed;
- }
- public function getQuotaBytesUsed() {
- return $this->quotaBytesUsed;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
- public function setShared($shared) {
- $this->shared = $shared;
- }
- public function getShared() {
- return $this->shared;
- }
- public function setSharedWithMeDate($sharedWithMeDate) {
- $this->sharedWithMeDate = $sharedWithMeDate;
- }
- public function getSharedWithMeDate() {
- return $this->sharedWithMeDate;
- }
- public function setThumbnail(Google_DriveFileThumbnail $thumbnail) {
- $this->thumbnail = $thumbnail;
- }
- public function getThumbnail() {
- return $this->thumbnail;
- }
- public function setThumbnailLink($thumbnailLink) {
- $this->thumbnailLink = $thumbnailLink;
- }
- public function getThumbnailLink() {
- return $this->thumbnailLink;
- }
- public function setTitle($title) {
- $this->title = $title;
- }
- public function getTitle() {
- return $this->title;
- }
- public function setUserPermission(Google_Permission $userPermission) {
- $this->userPermission = $userPermission;
- }
- public function getUserPermission() {
- return $this->userPermission;
- }
- public function setWebContentLink($webContentLink) {
- $this->webContentLink = $webContentLink;
- }
- public function getWebContentLink() {
- return $this->webContentLink;
- }
- public function setWebViewLink($webViewLink) {
- $this->webViewLink = $webViewLink;
- }
- public function getWebViewLink() {
- return $this->webViewLink;
- }
- public function setWritersCanShare($writersCanShare) {
- $this->writersCanShare = $writersCanShare;
- }
- public function getWritersCanShare() {
- return $this->writersCanShare;
- }
-}
-
-class Google_DriveFileImageMediaMetadata extends Google_Model {
- public $aperture;
- public $cameraMake;
- public $cameraModel;
- public $colorSpace;
- public $date;
- public $exposureBias;
- public $exposureMode;
- public $exposureTime;
- public $flashUsed;
- public $focalLength;
- public $height;
- public $isoSpeed;
- public $lens;
- protected $__locationType = 'Google_DriveFileImageMediaMetadataLocation';
- protected $__locationDataType = '';
- public $location;
- public $maxApertureValue;
- public $meteringMode;
- public $rotation;
- public $sensor;
- public $subjectDistance;
- public $whiteBalance;
- public $width;
- public function setAperture($aperture) {
- $this->aperture = $aperture;
- }
- public function getAperture() {
- return $this->aperture;
- }
- public function setCameraMake($cameraMake) {
- $this->cameraMake = $cameraMake;
- }
- public function getCameraMake() {
- return $this->cameraMake;
- }
- public function setCameraModel($cameraModel) {
- $this->cameraModel = $cameraModel;
- }
- public function getCameraModel() {
- return $this->cameraModel;
- }
- public function setColorSpace($colorSpace) {
- $this->colorSpace = $colorSpace;
- }
- public function getColorSpace() {
- return $this->colorSpace;
- }
- public function setDate($date) {
- $this->date = $date;
- }
- public function getDate() {
- return $this->date;
- }
- public function setExposureBias($exposureBias) {
- $this->exposureBias = $exposureBias;
- }
- public function getExposureBias() {
- return $this->exposureBias;
- }
- public function setExposureMode($exposureMode) {
- $this->exposureMode = $exposureMode;
- }
- public function getExposureMode() {
- return $this->exposureMode;
- }
- public function setExposureTime($exposureTime) {
- $this->exposureTime = $exposureTime;
- }
- public function getExposureTime() {
- return $this->exposureTime;
- }
- public function setFlashUsed($flashUsed) {
- $this->flashUsed = $flashUsed;
- }
- public function getFlashUsed() {
- return $this->flashUsed;
- }
- public function setFocalLength($focalLength) {
- $this->focalLength = $focalLength;
- }
- public function getFocalLength() {
- return $this->focalLength;
- }
- public function setHeight($height) {
- $this->height = $height;
- }
- public function getHeight() {
- return $this->height;
- }
- public function setIsoSpeed($isoSpeed) {
- $this->isoSpeed = $isoSpeed;
- }
- public function getIsoSpeed() {
- return $this->isoSpeed;
- }
- public function setLens($lens) {
- $this->lens = $lens;
- }
- public function getLens() {
- return $this->lens;
- }
- public function setLocation(Google_DriveFileImageMediaMetadataLocation $location) {
- $this->location = $location;
- }
- public function getLocation() {
- return $this->location;
- }
- public function setMaxApertureValue($maxApertureValue) {
- $this->maxApertureValue = $maxApertureValue;
- }
- public function getMaxApertureValue() {
- return $this->maxApertureValue;
- }
- public function setMeteringMode($meteringMode) {
- $this->meteringMode = $meteringMode;
- }
- public function getMeteringMode() {
- return $this->meteringMode;
- }
- public function setRotation($rotation) {
- $this->rotation = $rotation;
- }
- public function getRotation() {
- return $this->rotation;
- }
- public function setSensor($sensor) {
- $this->sensor = $sensor;
- }
- public function getSensor() {
- return $this->sensor;
- }
- public function setSubjectDistance($subjectDistance) {
- $this->subjectDistance = $subjectDistance;
- }
- public function getSubjectDistance() {
- return $this->subjectDistance;
- }
- public function setWhiteBalance($whiteBalance) {
- $this->whiteBalance = $whiteBalance;
- }
- public function getWhiteBalance() {
- return $this->whiteBalance;
- }
- public function setWidth($width) {
- $this->width = $width;
- }
- public function getWidth() {
- return $this->width;
- }
-}
-
-class Google_DriveFileImageMediaMetadataLocation extends Google_Model {
- public $altitude;
- public $latitude;
- public $longitude;
- public function setAltitude($altitude) {
- $this->altitude = $altitude;
- }
- public function getAltitude() {
- return $this->altitude;
- }
- public function setLatitude($latitude) {
- $this->latitude = $latitude;
- }
- public function getLatitude() {
- return $this->latitude;
- }
- public function setLongitude($longitude) {
- $this->longitude = $longitude;
- }
- public function getLongitude() {
- return $this->longitude;
- }
-}
-
-class Google_DriveFileIndexableText extends Google_Model {
- public $text;
- public function setText($text) {
- $this->text = $text;
- }
- public function getText() {
- return $this->text;
- }
-}
-
-class Google_DriveFileLabels extends Google_Model {
- public $hidden;
- public $restricted;
- public $starred;
- public $trashed;
- public $viewed;
- public function setHidden($hidden) {
- $this->hidden = $hidden;
- }
- public function getHidden() {
- return $this->hidden;
- }
- public function setRestricted($restricted) {
- $this->restricted = $restricted;
- }
- public function getRestricted() {
- return $this->restricted;
- }
- public function setStarred($starred) {
- $this->starred = $starred;
- }
- public function getStarred() {
- return $this->starred;
- }
- public function setTrashed($trashed) {
- $this->trashed = $trashed;
- }
- public function getTrashed() {
- return $this->trashed;
- }
- public function setViewed($viewed) {
- $this->viewed = $viewed;
- }
- public function getViewed() {
- return $this->viewed;
- }
-}
-
-class Google_DriveFileThumbnail extends Google_Model {
- public $image;
- public $mimeType;
- public function setImage($image) {
- $this->image = $image;
- }
- public function getImage() {
- return $this->image;
- }
- public function setMimeType($mimeType) {
- $this->mimeType = $mimeType;
- }
- public function getMimeType() {
- return $this->mimeType;
- }
-}
-
-class Google_FileList extends Google_Model {
- public $etag;
- protected $__itemsType = 'Google_DriveFile';
- protected $__itemsDataType = 'array';
- public $items;
- public $kind;
- public $nextLink;
- public $nextPageToken;
- public $selfLink;
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setItems(/* array(Google_DriveFile) */ $items) {
- $this->assertIsArray($items, 'Google_DriveFile', __METHOD__);
- $this->items = $items;
- }
- public function getItems() {
- return $this->items;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setNextLink($nextLink) {
- $this->nextLink = $nextLink;
- }
- public function getNextLink() {
- return $this->nextLink;
- }
- public function setNextPageToken($nextPageToken) {
- $this->nextPageToken = $nextPageToken;
- }
- public function getNextPageToken() {
- return $this->nextPageToken;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_ParentList extends Google_Model {
- public $etag;
- protected $__itemsType = 'Google_ParentReference';
- protected $__itemsDataType = 'array';
- public $items;
- public $kind;
- public $selfLink;
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setItems(/* array(Google_ParentReference) */ $items) {
- $this->assertIsArray($items, 'Google_ParentReference', __METHOD__);
- $this->items = $items;
- }
- public function getItems() {
- return $this->items;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_ParentReference extends Google_Model {
- public $id;
- public $isRoot;
- public $kind;
- public $parentLink;
- public $selfLink;
- public function setId($id) {
- $this->id = $id;
- }
- public function getId() {
- return $this->id;
- }
- public function setIsRoot($isRoot) {
- $this->isRoot = $isRoot;
- }
- public function getIsRoot() {
- return $this->isRoot;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setParentLink($parentLink) {
- $this->parentLink = $parentLink;
- }
- public function getParentLink() {
- return $this->parentLink;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_Permission extends Google_Model {
- public $additionalRoles;
- public $authKey;
- public $etag;
- public $id;
- public $kind;
- public $name;
- public $photoLink;
- public $role;
- public $selfLink;
- public $type;
- public $value;
- public $withLink;
- public function setAdditionalRoles(/* array(Google_string) */ $additionalRoles) {
- $this->assertIsArray($additionalRoles, 'Google_string', __METHOD__);
- $this->additionalRoles = $additionalRoles;
- }
- public function getAdditionalRoles() {
- return $this->additionalRoles;
- }
- public function setAuthKey($authKey) {
- $this->authKey = $authKey;
- }
- public function getAuthKey() {
- return $this->authKey;
- }
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setId($id) {
- $this->id = $id;
- }
- public function getId() {
- return $this->id;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setName($name) {
- $this->name = $name;
- }
- public function getName() {
- return $this->name;
- }
- public function setPhotoLink($photoLink) {
- $this->photoLink = $photoLink;
- }
- public function getPhotoLink() {
- return $this->photoLink;
- }
- public function setRole($role) {
- $this->role = $role;
- }
- public function getRole() {
- return $this->role;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
- public function setType($type) {
- $this->type = $type;
- }
- public function getType() {
- return $this->type;
- }
- public function setValue($value) {
- $this->value = $value;
- }
- public function getValue() {
- return $this->value;
- }
- public function setWithLink($withLink) {
- $this->withLink = $withLink;
- }
- public function getWithLink() {
- return $this->withLink;
- }
-}
-
-class Google_PermissionList extends Google_Model {
- public $etag;
- protected $__itemsType = 'Google_Permission';
- protected $__itemsDataType = 'array';
- public $items;
- public $kind;
- public $selfLink;
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setItems(/* array(Google_Permission) */ $items) {
- $this->assertIsArray($items, 'Google_Permission', __METHOD__);
- $this->items = $items;
- }
- public function getItems() {
- return $this->items;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_Property extends Google_Model {
- public $etag;
- public $key;
- public $kind;
- public $selfLink;
- public $value;
- public $visibility;
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setKey($key) {
- $this->key = $key;
- }
- public function getKey() {
- return $this->key;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
- public function setValue($value) {
- $this->value = $value;
- }
- public function getValue() {
- return $this->value;
- }
- public function setVisibility($visibility) {
- $this->visibility = $visibility;
- }
- public function getVisibility() {
- return $this->visibility;
- }
-}
-
-class Google_PropertyList extends Google_Model {
- public $etag;
- protected $__itemsType = 'Google_Property';
- protected $__itemsDataType = 'array';
- public $items;
- public $kind;
- public $selfLink;
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setItems(/* array(Google_Property) */ $items) {
- $this->assertIsArray($items, 'Google_Property', __METHOD__);
- $this->items = $items;
- }
- public function getItems() {
- return $this->items;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_Revision extends Google_Model {
- public $downloadUrl;
- public $etag;
- public $exportLinks;
- public $fileSize;
- public $id;
- public $kind;
- protected $__lastModifyingUserType = 'Google_User';
- protected $__lastModifyingUserDataType = '';
- public $lastModifyingUser;
- public $lastModifyingUserName;
- public $md5Checksum;
- public $mimeType;
- public $modifiedDate;
- public $originalFilename;
- public $pinned;
- public $publishAuto;
- public $published;
- public $publishedLink;
- public $publishedOutsideDomain;
- public $selfLink;
- public function setDownloadUrl($downloadUrl) {
- $this->downloadUrl = $downloadUrl;
- }
- public function getDownloadUrl() {
- return $this->downloadUrl;
- }
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setExportLinks($exportLinks) {
- $this->exportLinks = $exportLinks;
- }
- public function getExportLinks() {
- return $this->exportLinks;
- }
- public function setFileSize($fileSize) {
- $this->fileSize = $fileSize;
- }
- public function getFileSize() {
- return $this->fileSize;
- }
- public function setId($id) {
- $this->id = $id;
- }
- public function getId() {
- return $this->id;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setLastModifyingUser(Google_User $lastModifyingUser) {
- $this->lastModifyingUser = $lastModifyingUser;
- }
- public function getLastModifyingUser() {
- return $this->lastModifyingUser;
- }
- public function setLastModifyingUserName($lastModifyingUserName) {
- $this->lastModifyingUserName = $lastModifyingUserName;
- }
- public function getLastModifyingUserName() {
- return $this->lastModifyingUserName;
- }
- public function setMd5Checksum($md5Checksum) {
- $this->md5Checksum = $md5Checksum;
- }
- public function getMd5Checksum() {
- return $this->md5Checksum;
- }
- public function setMimeType($mimeType) {
- $this->mimeType = $mimeType;
- }
- public function getMimeType() {
- return $this->mimeType;
- }
- public function setModifiedDate($modifiedDate) {
- $this->modifiedDate = $modifiedDate;
- }
- public function getModifiedDate() {
- return $this->modifiedDate;
- }
- public function setOriginalFilename($originalFilename) {
- $this->originalFilename = $originalFilename;
- }
- public function getOriginalFilename() {
- return $this->originalFilename;
- }
- public function setPinned($pinned) {
- $this->pinned = $pinned;
- }
- public function getPinned() {
- return $this->pinned;
- }
- public function setPublishAuto($publishAuto) {
- $this->publishAuto = $publishAuto;
- }
- public function getPublishAuto() {
- return $this->publishAuto;
- }
- public function setPublished($published) {
- $this->published = $published;
- }
- public function getPublished() {
- return $this->published;
- }
- public function setPublishedLink($publishedLink) {
- $this->publishedLink = $publishedLink;
- }
- public function getPublishedLink() {
- return $this->publishedLink;
- }
- public function setPublishedOutsideDomain($publishedOutsideDomain) {
- $this->publishedOutsideDomain = $publishedOutsideDomain;
- }
- public function getPublishedOutsideDomain() {
- return $this->publishedOutsideDomain;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_RevisionList extends Google_Model {
- public $etag;
- protected $__itemsType = 'Google_Revision';
- protected $__itemsDataType = 'array';
- public $items;
- public $kind;
- public $selfLink;
- public function setEtag($etag) {
- $this->etag = $etag;
- }
- public function getEtag() {
- return $this->etag;
- }
- public function setItems(/* array(Google_Revision) */ $items) {
- $this->assertIsArray($items, 'Google_Revision', __METHOD__);
- $this->items = $items;
- }
- public function getItems() {
- return $this->items;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setSelfLink($selfLink) {
- $this->selfLink = $selfLink;
- }
- public function getSelfLink() {
- return $this->selfLink;
- }
-}
-
-class Google_User extends Google_Model {
- public $displayName;
- public $isAuthenticatedUser;
- public $kind;
- public $permissionId;
- protected $__pictureType = 'Google_UserPicture';
- protected $__pictureDataType = '';
- public $picture;
- public function setDisplayName($displayName) {
- $this->displayName = $displayName;
- }
- public function getDisplayName() {
- return $this->displayName;
- }
- public function setIsAuthenticatedUser($isAuthenticatedUser) {
- $this->isAuthenticatedUser = $isAuthenticatedUser;
- }
- public function getIsAuthenticatedUser() {
- return $this->isAuthenticatedUser;
- }
- public function setKind($kind) {
- $this->kind = $kind;
- }
- public function getKind() {
- return $this->kind;
- }
- public function setPermissionId($permissionId) {
- $this->permissionId = $permissionId;
- }
- public function getPermissionId() {
- return $this->permissionId;
- }
- public function setPicture(Google_UserPicture $picture) {
- $this->picture = $picture;
- }
- public function getPicture() {
- return $this->picture;
- }
-}
-
-class Google_UserPicture extends Google_Model {
- public $url;
- public function setUrl($url) {
- $this->url = $url;
- }
- public function getUrl() {
- return $this->url;
- }
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/external/URITemplateParser.php b/apps/files_external/3rdparty/google-api-php-client/src/external/URITemplateParser.php
deleted file mode 100644
index 594adbb15e2..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/external/URITemplateParser.php
+++ /dev/null
@@ -1,209 +0,0 @@
-<?php
-/*
-Copyright (c) 2010 Kevin M Burns Jr, http://kevburnsjr.com/
-
-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.
-*/
-
-/**
- * A URI Template Parser which is used by the apiREST class to resolve the REST requests
- * Blogpost: http://lab.kevburnsjr.com/php-uri-template-parser
- * Source: http://github.com/KevBurnsJr/php-uri-template-parser
- */
-class URI_Template_Parser {
-
- public static $operators = array('+', ';', '?', '/', '.');
- public static $reserved_operators = array('|', '!', '@');
- public static $explode_modifiers = array('+', '*');
- public static $partial_modifiers = array(':', '^');
-
- public static $gen_delims = array(':', '/', '?', '#', '[', ']', '@');
- public static $gen_delims_pct = array('%3A', '%2F', '%3F', '%23', '%5B', '%5D', '%40');
- public static $sub_delims = array('!', '$', '&', '\'', '(', ')', '*', '+', ',', ';', '=');
- public static $sub_delims_pct = array('%21', '%24', '%26', '%27', '%28', '%29', '%2A', '%2B', '%2C', '%3B', '%3D');
- public static $reserved;
- public static $reserved_pct;
-
- public function __construct($template) {
- self::$reserved = array_merge(self::$gen_delims, self::$sub_delims);
- self::$reserved_pct = array_merge(self::$gen_delims_pct, self::$sub_delims_pct);
- $this->template = $template;
- }
-
- public function expand($data) {
- // Modification to make this a bit more performant (since gettype is very slow)
- if (! is_array($data)) {
- $data = (array)$data;
- }
- /*
- // Original code, which uses a slow gettype() statement, kept in place for if the assumption that is_array always works here is incorrect
- switch (gettype($data)) {
- case "boolean":
- case "integer":
- case "double":
- case "string":
- case "object":
- $data = (array)$data;
- break;
- }
-*/
-
- // Resolve template vars
- preg_match_all('/\{([^\}]*)\}/', $this->template, $em);
-
- foreach ($em[1] as $i => $bare_expression) {
- preg_match('/^([\+\;\?\/\.]{1})?(.*)$/', $bare_expression, $lm);
- $exp = new StdClass();
- $exp->expression = $em[0][$i];
- $exp->operator = $lm[1];
- $exp->variable_list = $lm[2];
- $exp->varspecs = explode(',', $exp->variable_list);
- $exp->vars = array();
- foreach ($exp->varspecs as $varspec) {
- preg_match('/^([a-zA-Z0-9_]+)([\*\+]{1})?([\:\^][0-9-]+)?(\=[^,]+)?$/', $varspec, $vm);
- $var = new StdClass();
- $var->name = $vm[1];
- $var->modifier = isset($vm[2]) && $vm[2] ? $vm[2] : null;
- $var->modifier = isset($vm[3]) && $vm[3] ? $vm[3] : $var->modifier;
- $var->default = isset($vm[4]) ? substr($vm[4], 1) : null;
- $exp->vars[] = $var;
- }
-
- // Add processing flags
- $exp->reserved = false;
- $exp->prefix = '';
- $exp->delimiter = ',';
- switch ($exp->operator) {
- case '+':
- $exp->reserved = 'true';
- break;
- case ';':
- $exp->prefix = ';';
- $exp->delimiter = ';';
- break;
- case '?':
- $exp->prefix = '?';
- $exp->delimiter = '&';
- break;
- case '/':
- $exp->prefix = '/';
- $exp->delimiter = '/';
- break;
- case '.':
- $exp->prefix = '.';
- $exp->delimiter = '.';
- break;
- }
- $expressions[] = $exp;
- }
-
- // Expansion
- $this->expansion = $this->template;
-
- foreach ($expressions as $exp) {
- $part = $exp->prefix;
- $exp->one_var_defined = false;
- foreach ($exp->vars as $var) {
- $val = '';
- if ($exp->one_var_defined && isset($data[$var->name])) {
- $part .= $exp->delimiter;
- }
- // Variable present
- if (isset($data[$var->name])) {
- $exp->one_var_defined = true;
- $var->data = $data[$var->name];
-
- $val = self::val_from_var($var, $exp);
-
- // Variable missing
- } else {
- if ($var->default) {
- $exp->one_var_defined = true;
- $val = $var->default;
- }
- }
- $part .= $val;
- }
- if (! $exp->one_var_defined) $part = '';
- $this->expansion = str_replace($exp->expression, $part, $this->expansion);
- }
-
- return $this->expansion;
- }
-
- private function val_from_var($var, $exp) {
- $val = '';
- if (is_array($var->data)) {
- $i = 0;
- if ($exp->operator == '?' && ! $var->modifier) {
- $val .= $var->name . '=';
- }
- foreach ($var->data as $k => $v) {
- $del = $var->modifier ? $exp->delimiter : ',';
- $ek = rawurlencode($k);
- $ev = rawurlencode($v);
-
- // Array
- if ($k !== $i) {
- if ($var->modifier == '+') {
- $val .= $var->name . '.';
- }
- if ($exp->operator == '?' && $var->modifier || $exp->operator == ';' && $var->modifier == '*' || $exp->operator == ';' && $var->modifier == '+') {
- $val .= $ek . '=';
- } else {
- $val .= $ek . $del;
- }
-
- // List
- } else {
- if ($var->modifier == '+') {
- if ($exp->operator == ';' && $var->modifier == '*' || $exp->operator == ';' && $var->modifier == '+' || $exp->operator == '?' && $var->modifier == '+') {
- $val .= $var->name . '=';
- } else {
- $val .= $var->name . '.';
- }
- }
- }
- $val .= $ev . $del;
- $i ++;
- }
- $val = trim($val, $del);
-
- // Strings, numbers, etc.
- } else {
- if ($exp->operator == '?') {
- $val = $var->name . (isset($var->data) ? '=' : '');
- } else if ($exp->operator == ';') {
- $val = $var->name . ($var->data ? '=' : '');
- }
- $val .= rawurlencode($var->data);
- if ($exp->operator == '+') {
- $val = str_replace(self::$reserved_pct, self::$reserved, $val);
- }
- }
- return $val;
- }
-
- public function match($uri) {}
-
- public function __toString() {
- return $this->template;
- }
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_CurlIO.php b/apps/files_external/3rdparty/google-api-php-client/src/io/Google_CurlIO.php
deleted file mode 100644
index 65352f29882..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_CurlIO.php
+++ /dev/null
@@ -1,278 +0,0 @@
-<?php
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Curl based implementation of apiIO.
- *
- * @author Chris Chabot <chabotc@google.com>
- * @author Chirag Shah <chirags@google.com>
- */
-
-require_once 'Google_CacheParser.php';
-
-class Google_CurlIO implements Google_IO {
- const CONNECTION_ESTABLISHED = "HTTP/1.0 200 Connection established\r\n\r\n";
- const FORM_URLENCODED = 'application/x-www-form-urlencoded';
-
- private static $ENTITY_HTTP_METHODS = array("POST" => null, "PUT" => null);
- private static $HOP_BY_HOP = array(
- 'connection', 'keep-alive', 'proxy-authenticate', 'proxy-authorization',
- 'te', 'trailers', 'transfer-encoding', 'upgrade');
-
- private $curlParams = array (
- CURLOPT_RETURNTRANSFER => true,
- CURLOPT_FOLLOWLOCATION => 0,
- CURLOPT_FAILONERROR => false,
- CURLOPT_SSL_VERIFYPEER => true,
- CURLOPT_HEADER => true,
- CURLOPT_VERBOSE => false,
- );
-
- /**
- * Perform an authenticated / signed apiHttpRequest.
- * This function takes the apiHttpRequest, calls apiAuth->sign on it
- * (which can modify the request in what ever way fits the auth mechanism)
- * and then calls apiCurlIO::makeRequest on the signed request
- *
- * @param Google_HttpRequest $request
- * @return Google_HttpRequest The resulting HTTP response including the
- * responseHttpCode, responseHeaders and responseBody.
- */
- public function authenticatedRequest(Google_HttpRequest $request) {
- $request = Google_Client::$auth->sign($request);
- return $this->makeRequest($request);
- }
-
- /**
- * Execute a apiHttpRequest
- *
- * @param Google_HttpRequest $request the http request to be executed
- * @return Google_HttpRequest http request with the response http code, response
- * headers and response body filled in
- * @throws Google_IOException on curl or IO error
- */
- public function makeRequest(Google_HttpRequest $request) {
- // First, check to see if we have a valid cached version.
- $cached = $this->getCachedRequest($request);
- if ($cached !== false) {
- if (Google_CacheParser::mustRevalidate($cached)) {
- $addHeaders = array();
- if ($cached->getResponseHeader('etag')) {
- // [13.3.4] If an entity tag has been provided by the origin server,
- // we must use that entity tag in any cache-conditional request.
- $addHeaders['If-None-Match'] = $cached->getResponseHeader('etag');
- } elseif ($cached->getResponseHeader('date')) {
- $addHeaders['If-Modified-Since'] = $cached->getResponseHeader('date');
- }
-
- $request->setRequestHeaders($addHeaders);
- } else {
- // No need to revalidate the request, return it directly
- return $cached;
- }
- }
-
- if (array_key_exists($request->getRequestMethod(),
- self::$ENTITY_HTTP_METHODS)) {
- $request = $this->processEntityRequest($request);
- }
-
- $ch = curl_init();
- curl_setopt_array($ch, $this->curlParams);
- curl_setopt($ch, CURLOPT_URL, $request->getUrl());
- if ($request->getPostBody()) {
- curl_setopt($ch, CURLOPT_POSTFIELDS, $request->getPostBody());
- }
-
- $requestHeaders = $request->getRequestHeaders();
- if ($requestHeaders && is_array($requestHeaders)) {
- $parsed = array();
- foreach ($requestHeaders as $k => $v) {
- $parsed[] = "$k: $v";
- }
- curl_setopt($ch, CURLOPT_HTTPHEADER, $parsed);
- }
-
- curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $request->getRequestMethod());
- curl_setopt($ch, CURLOPT_USERAGENT, $request->getUserAgent());
- $respData = curl_exec($ch);
-
- // Retry if certificates are missing.
- if (curl_errno($ch) == CURLE_SSL_CACERT) {
- error_log('SSL certificate problem, verify that the CA cert is OK.'
- . ' Retrying with the CA cert bundle from google-api-php-client.');
- curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacerts.pem');
- $respData = curl_exec($ch);
- }
-
- $respHeaderSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
- $respHttpCode = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
- $curlErrorNum = curl_errno($ch);
- $curlError = curl_error($ch);
- curl_close($ch);
- if ($curlErrorNum != CURLE_OK) {
- throw new Google_IOException("HTTP Error: ($respHttpCode) $curlError");
- }
-
- // Parse out the raw response into usable bits
- list($responseHeaders, $responseBody) =
- self::parseHttpResponse($respData, $respHeaderSize);
-
- if ($respHttpCode == 304 && $cached) {
- // If the server responded NOT_MODIFIED, return the cached request.
- if (isset($responseHeaders['connection'])) {
- $hopByHop = array_merge(
- self::$HOP_BY_HOP,
- explode(',', $responseHeaders['connection'])
- );
-
- $endToEnd = array();
- foreach($hopByHop as $key) {
- if (isset($responseHeaders[$key])) {
- $endToEnd[$key] = $responseHeaders[$key];
- }
- }
- $cached->setResponseHeaders($endToEnd);
- }
- return $cached;
- }
-
- // Fill in the apiHttpRequest with the response values
- $request->setResponseHttpCode($respHttpCode);
- $request->setResponseHeaders($responseHeaders);
- $request->setResponseBody($responseBody);
- // Store the request in cache (the function checks to see if the request
- // can actually be cached)
- $this->setCachedRequest($request);
- // And finally return it
- return $request;
- }
-
- /**
- * @visible for testing.
- * Cache the response to an HTTP request if it is cacheable.
- * @param Google_HttpRequest $request
- * @return bool Returns true if the insertion was successful.
- * Otherwise, return false.
- */
- public function setCachedRequest(Google_HttpRequest $request) {
- // Determine if the request is cacheable.
- if (Google_CacheParser::isResponseCacheable($request)) {
- Google_Client::$cache->set($request->getCacheKey(), $request);
- return true;
- }
-
- return false;
- }
-
- /**
- * @visible for testing.
- * @param Google_HttpRequest $request
- * @return Google_HttpRequest|bool Returns the cached object or
- * false if the operation was unsuccessful.
- */
- public function getCachedRequest(Google_HttpRequest $request) {
- if (false == Google_CacheParser::isRequestCacheable($request)) {
- false;
- }
-
- return Google_Client::$cache->get($request->getCacheKey());
- }
-
- /**
- * @param $respData
- * @param $headerSize
- * @return array
- */
- public static function parseHttpResponse($respData, $headerSize) {
- if (stripos($respData, self::CONNECTION_ESTABLISHED) !== false) {
- $respData = str_ireplace(self::CONNECTION_ESTABLISHED, '', $respData);
- }
-
- if ($headerSize) {
- $responseBody = substr($respData, $headerSize);
- $responseHeaders = substr($respData, 0, $headerSize);
- } else {
- list($responseHeaders, $responseBody) = explode("\r\n\r\n", $respData, 2);
- }
-
- $responseHeaders = self::parseResponseHeaders($responseHeaders);
- return array($responseHeaders, $responseBody);
- }
-
- public static function parseResponseHeaders($rawHeaders) {
- $responseHeaders = array();
-
- $responseHeaderLines = explode("\r\n", $rawHeaders);
- foreach ($responseHeaderLines as $headerLine) {
- if ($headerLine && strpos($headerLine, ':') !== false) {
- list($header, $value) = explode(': ', $headerLine, 2);
- $header = strtolower($header);
- if (isset($responseHeaders[$header])) {
- $responseHeaders[$header] .= "\n" . $value;
- } else {
- $responseHeaders[$header] = $value;
- }
- }
- }
- return $responseHeaders;
- }
-
- /**
- * @visible for testing
- * Process an http request that contains an enclosed entity.
- * @param Google_HttpRequest $request
- * @return Google_HttpRequest Processed request with the enclosed entity.
- */
- public function processEntityRequest(Google_HttpRequest $request) {
- $postBody = $request->getPostBody();
- $contentType = $request->getRequestHeader("content-type");
-
- // Set the default content-type as application/x-www-form-urlencoded.
- if (false == $contentType) {
- $contentType = self::FORM_URLENCODED;
- $request->setRequestHeaders(array('content-type' => $contentType));
- }
-
- // Force the payload to match the content-type asserted in the header.
- if ($contentType == self::FORM_URLENCODED && is_array($postBody)) {
- $postBody = http_build_query($postBody, '', '&');
- $request->setPostBody($postBody);
- }
-
- // Make sure the content-length header is set.
- if (!$postBody || is_string($postBody)) {
- $postsLength = strlen($postBody);
- $request->setRequestHeaders(array('content-length' => $postsLength));
- }
-
- return $request;
- }
-
- /**
- * Set options that update cURL's default behavior.
- * The list of accepted options are:
- * {@link http://php.net/manual/en/function.curl-setopt.php]
- *
- * @param array $optCurlParams Multiple options used by a cURL session.
- */
- public function setOptions($optCurlParams) {
- foreach ($optCurlParams as $key => $val) {
- $this->curlParams[$key] = $val;
- }
- }
-} \ No newline at end of file
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_HttpRequest.php b/apps/files_external/3rdparty/google-api-php-client/src/io/Google_HttpRequest.php
deleted file mode 100644
index b98eae54008..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_HttpRequest.php
+++ /dev/null
@@ -1,304 +0,0 @@
-<?php
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * HTTP Request to be executed by apiIO classes. Upon execution, the
- * responseHttpCode, responseHeaders and responseBody will be filled in.
- *
- * @author Chris Chabot <chabotc@google.com>
- * @author Chirag Shah <chirags@google.com>
- *
- */
-class Google_HttpRequest {
- const USER_AGENT_SUFFIX = "google-api-php-client/0.6.0";
- private $batchHeaders = array(
- 'Content-Type' => 'application/http',
- 'Content-Transfer-Encoding' => 'binary',
- 'MIME-Version' => '1.0',
- 'Content-Length' => ''
- );
-
- protected $url;
- protected $requestMethod;
- protected $requestHeaders;
- protected $postBody;
- protected $userAgent;
-
- protected $responseHttpCode;
- protected $responseHeaders;
- protected $responseBody;
-
- public $accessKey;
-
- public function __construct($url, $method = 'GET', $headers = array(), $postBody = null) {
- $this->setUrl($url);
- $this->setRequestMethod($method);
- $this->setRequestHeaders($headers);
- $this->setPostBody($postBody);
-
- global $apiConfig;
- if (empty($apiConfig['application_name'])) {
- $this->userAgent = self::USER_AGENT_SUFFIX;
- } else {
- $this->userAgent = $apiConfig['application_name'] . " " . self::USER_AGENT_SUFFIX;
- }
- }
-
- /**
- * Misc function that returns the base url component of the $url
- * used by the OAuth signing class to calculate the base string
- * @return string The base url component of the $url.
- * @see http://oauth.net/core/1.0a/#anchor13
- */
- public function getBaseUrl() {
- if ($pos = strpos($this->url, '?')) {
- return substr($this->url, 0, $pos);
- }
- return $this->url;
- }
-
- /**
- * Misc function that returns an array of the query parameters of the current
- * url used by the OAuth signing class to calculate the signature
- * @return array Query parameters in the query string.
- */
- public function getQueryParams() {
- if ($pos = strpos($this->url, '?')) {
- $queryStr = substr($this->url, $pos + 1);
- $params = array();
- parse_str($queryStr, $params);
- return $params;
- }
- return array();
- }
-
- /**
- * @return string HTTP Response Code.
- */
- public function getResponseHttpCode() {
- return (int) $this->responseHttpCode;
- }
-
- /**
- * @param int $responseHttpCode HTTP Response Code.
- */
- public function setResponseHttpCode($responseHttpCode) {
- $this->responseHttpCode = $responseHttpCode;
- }
-
- /**
- * @return $responseHeaders (array) HTTP Response Headers.
- */
- public function getResponseHeaders() {
- return $this->responseHeaders;
- }
-
- /**
- * @return string HTTP Response Body
- */
- public function getResponseBody() {
- return $this->responseBody;
- }
-
- /**
- * @param array $headers The HTTP response headers
- * to be normalized.
- */
- public function setResponseHeaders($headers) {
- $headers = Google_Utils::normalize($headers);
- if ($this->responseHeaders) {
- $headers = array_merge($this->responseHeaders, $headers);
- }
-
- $this->responseHeaders = $headers;
- }
-
- /**
- * @param string $key
- * @return array|boolean Returns the requested HTTP header or
- * false if unavailable.
- */
- public function getResponseHeader($key) {
- return isset($this->responseHeaders[$key])
- ? $this->responseHeaders[$key]
- : false;
- }
-
- /**
- * @param string $responseBody The HTTP response body.
- */
- public function setResponseBody($responseBody) {
- $this->responseBody = $responseBody;
- }
-
- /**
- * @return string $url The request URL.
- */
-
- public function getUrl() {
- return $this->url;
- }
-
- /**
- * @return string $method HTTP Request Method.
- */
- public function getRequestMethod() {
- return $this->requestMethod;
- }
-
- /**
- * @return array $headers HTTP Request Headers.
- */
- public function getRequestHeaders() {
- return $this->requestHeaders;
- }
-
- /**
- * @param string $key
- * @return array|boolean Returns the requested HTTP header or
- * false if unavailable.
- */
- public function getRequestHeader($key) {
- return isset($this->requestHeaders[$key])
- ? $this->requestHeaders[$key]
- : false;
- }
-
- /**
- * @return string $postBody HTTP Request Body.
- */
- public function getPostBody() {
- return $this->postBody;
- }
-
- /**
- * @param string $url the url to set
- */
- public function setUrl($url) {
- if (substr($url, 0, 4) == 'http') {
- $this->url = $url;
- } else {
- // Force the path become relative.
- if (substr($url, 0, 1) !== '/') {
- $url = '/' . $url;
- }
- global $apiConfig;
- $this->url = $apiConfig['basePath'] . $url;
- }
- }
-
- /**
- * @param string $method Set he HTTP Method and normalize
- * it to upper-case, as required by HTTP.
- *
- */
- public function setRequestMethod($method) {
- $this->requestMethod = strtoupper($method);
- }
-
- /**
- * @param array $headers The HTTP request headers
- * to be set and normalized.
- */
- public function setRequestHeaders($headers) {
- $headers = Google_Utils::normalize($headers);
- if ($this->requestHeaders) {
- $headers = array_merge($this->requestHeaders, $headers);
- }
- $this->requestHeaders = $headers;
- }
-
- /**
- * @param string $postBody the postBody to set
- */
- public function setPostBody($postBody) {
- $this->postBody = $postBody;
- }
-
- /**
- * Set the User-Agent Header.
- * @param string $userAgent The User-Agent.
- */
- public function setUserAgent($userAgent) {
- $this->userAgent = $userAgent;
- }
-
- /**
- * @return string The User-Agent.
- */
- public function getUserAgent() {
- return $this->userAgent;
- }
-
- /**
- * Returns a cache key depending on if this was an OAuth signed request
- * in which case it will use the non-signed url and access key to make this
- * cache key unique per authenticated user, else use the plain request url
- * @return string The md5 hash of the request cache key.
- */
- public function getCacheKey() {
- $key = $this->getUrl();
-
- if (isset($this->accessKey)) {
- $key .= $this->accessKey;
- }
-
- if (isset($this->requestHeaders['authorization'])) {
- $key .= $this->requestHeaders['authorization'];
- }
-
- return md5($key);
- }
-
- public function getParsedCacheControl() {
- $parsed = array();
- $rawCacheControl = $this->getResponseHeader('cache-control');
- if ($rawCacheControl) {
- $rawCacheControl = str_replace(', ', '&', $rawCacheControl);
- parse_str($rawCacheControl, $parsed);
- }
-
- return $parsed;
- }
-
- /**
- * @param string $id
- * @return string A string representation of the HTTP Request.
- */
- public function toBatchString($id) {
- $str = '';
- foreach($this->batchHeaders as $key => $val) {
- $str .= $key . ': ' . $val . "\n";
- }
-
- $str .= "Content-ID: $id\n";
- $str .= "\n";
-
- $path = parse_url($this->getUrl(), PHP_URL_PATH);
- $str .= $this->getRequestMethod() . ' ' . $path . " HTTP/1.1\n";
- foreach($this->getRequestHeaders() as $key => $val) {
- $str .= $key . ': ' . $val . "\n";
- }
-
- if ($this->getPostBody()) {
- $str .= "\n";
- $str .= $this->getPostBody();
- }
-
- return $str;
- }
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_IO.php b/apps/files_external/3rdparty/google-api-php-client/src/io/Google_IO.php
deleted file mode 100644
index 5445e699038..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_IO.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-/**
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-require_once 'io/Google_HttpRequest.php';
-require_once 'io/Google_CurlIO.php';
-require_once 'io/Google_REST.php';
-
-/**
- * Abstract IO class
- *
- * @author Chris Chabot <chabotc@google.com>
- */
-interface Google_IO {
- /**
- * An utility function that first calls $this->auth->sign($request) and then executes makeRequest()
- * on that signed request. Used for when a request should be authenticated
- * @param Google_HttpRequest $request
- * @return Google_HttpRequest $request
- */
- public function authenticatedRequest(Google_HttpRequest $request);
-
- /**
- * Executes a apIHttpRequest and returns the resulting populated httpRequest
- * @param Google_HttpRequest $request
- * @return Google_HttpRequest $request
- */
- public function makeRequest(Google_HttpRequest $request);
-
- /**
- * Set options that update the transport implementation's behavior.
- * @param $options
- */
- public function setOptions($options);
-
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_MediaFileUpload.php b/apps/files_external/3rdparty/google-api-php-client/src/service/Google_MediaFileUpload.php
deleted file mode 100644
index c64e18851df..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_MediaFileUpload.php
+++ /dev/null
@@ -1,262 +0,0 @@
-<?php
-/**
- * Copyright 2012 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * @author Chirag Shah <chirags@google.com>
- *
- */
-class Google_MediaFileUpload {
- const UPLOAD_MEDIA_TYPE = 'media';
- const UPLOAD_MULTIPART_TYPE = 'multipart';
- const UPLOAD_RESUMABLE_TYPE = 'resumable';
-
- /** @var string $mimeType */
- public $mimeType;
-
- /** @var string $data */
- public $data;
-
- /** @var bool $resumable */
- public $resumable;
-
- /** @var int $chunkSize */
- public $chunkSize;
-
- /** @var int $size */
- public $size;
-
- /** @var string $resumeUri */
- public $resumeUri;
-
- /** @var int $progress */
- public $progress;
-
- /**
- * @param $mimeType string
- * @param $data string The bytes you want to upload.
- * @param $resumable bool
- * @param bool $chunkSize File will be uploaded in chunks of this many bytes.
- * only used if resumable=True
- */
- public function __construct($mimeType, $data, $resumable=false, $chunkSize=false) {
- $this->mimeType = $mimeType;
- $this->data = $data;
- $this->size = strlen($this->data);
- $this->resumable = $resumable;
- if(!$chunkSize) {
- $chunkSize = 256 * 1024;
- }
- $this->chunkSize = $chunkSize;
- $this->progress = 0;
- }
-
- public function setFileSize($size) {
- $this->size = $size;
- }
-
- /**
- * @static
- * @param $meta
- * @param $params
- * @return array|bool
- */
- public static function process($meta, &$params) {
- $payload = array();
- $meta = is_string($meta) ? json_decode($meta, true) : $meta;
- $uploadType = self::getUploadType($meta, $payload, $params);
- if (!$uploadType) {
- // Process as a normal API request.
- return false;
- }
-
- // Process as a media upload request.
- $params['uploadType'] = array(
- 'type' => 'string',
- 'location' => 'query',
- 'value' => $uploadType,
- );
-
- $mimeType = isset($params['mimeType'])
- ? $params['mimeType']['value']
- : false;
- unset($params['mimeType']);
-
- if (!$mimeType) {
- $mimeType = $payload['content-type'];
- }
-
- if (isset($params['file'])) {
- // This is a standard file upload with curl.
- $file = $params['file']['value'];
- unset($params['file']);
- return self::processFileUpload($file, $mimeType);
- }
-
- $data = isset($params['data'])
- ? $params['data']['value']
- : false;
- unset($params['data']);
-
- if (self::UPLOAD_RESUMABLE_TYPE == $uploadType) {
- $payload['content-type'] = $mimeType;
- $payload['postBody'] = is_string($meta) ? $meta : json_encode($meta);
-
- } elseif (self::UPLOAD_MEDIA_TYPE == $uploadType) {
- // This is a simple media upload.
- $payload['content-type'] = $mimeType;
- $payload['postBody'] = $data;
- }
-
- elseif (self::UPLOAD_MULTIPART_TYPE == $uploadType) {
- // This is a multipart/related upload.
- $boundary = isset($params['boundary']['value']) ? $params['boundary']['value'] : mt_rand();
- $boundary = str_replace('"', '', $boundary);
- $payload['content-type'] = 'multipart/related; boundary=' . $boundary;
- $related = "--$boundary\r\n";
- $related .= "Content-Type: application/json; charset=UTF-8\r\n";
- $related .= "\r\n" . json_encode($meta) . "\r\n";
- $related .= "--$boundary\r\n";
- $related .= "Content-Type: $mimeType\r\n";
- $related .= "Content-Transfer-Encoding: base64\r\n";
- $related .= "\r\n" . base64_encode($data) . "\r\n";
- $related .= "--$boundary--";
- $payload['postBody'] = $related;
- }
-
- return $payload;
- }
-
- /**
- * Prepares a standard file upload via cURL.
- * @param $file
- * @param $mime
- * @return array Includes the processed file name.
- * @visible For testing.
- */
- public static function processFileUpload($file, $mime) {
- if (!$file) return array();
- if (substr($file, 0, 1) != '@') {
- $file = '@' . $file;
- }
-
- // This is a standard file upload with curl.
- $params = array('postBody' => array('file' => $file));
- if ($mime) {
- $params['content-type'] = $mime;
- }
-
- return $params;
- }
-
- /**
- * Valid upload types:
- * - resumable (UPLOAD_RESUMABLE_TYPE)
- * - media (UPLOAD_MEDIA_TYPE)
- * - multipart (UPLOAD_MULTIPART_TYPE)
- * - none (false)
- * @param $meta
- * @param $payload
- * @param $params
- * @return bool|string
- */
- public static function getUploadType($meta, &$payload, &$params) {
- if (isset($params['mediaUpload'])
- && get_class($params['mediaUpload']['value']) == 'Google_MediaFileUpload') {
- $upload = $params['mediaUpload']['value'];
- unset($params['mediaUpload']);
- $payload['content-type'] = $upload->mimeType;
- if (isset($upload->resumable) && $upload->resumable) {
- return self::UPLOAD_RESUMABLE_TYPE;
- }
- }
-
- // Allow the developer to override the upload type.
- if (isset($params['uploadType'])) {
- return $params['uploadType']['value'];
- }
-
- $data = isset($params['data']['value'])
- ? $params['data']['value'] : false;
-
- if (false == $data && false == isset($params['file'])) {
- // No upload data available.
- return false;
- }
-
- if (isset($params['file'])) {
- return self::UPLOAD_MEDIA_TYPE;
- }
-
- if (false == $meta) {
- return self::UPLOAD_MEDIA_TYPE;
- }
-
- return self::UPLOAD_MULTIPART_TYPE;
- }
-
-
- public function nextChunk(Google_HttpRequest $req, $chunk=false) {
- if (false == $this->resumeUri) {
- $this->resumeUri = $this->getResumeUri($req);
- }
-
- if (false == $chunk) {
- $chunk = substr($this->data, $this->progress, $this->chunkSize);
- }
-
- $lastBytePos = $this->progress + strlen($chunk) - 1;
- $headers = array(
- 'content-range' => "bytes $this->progress-$lastBytePos/$this->size",
- 'content-type' => $req->getRequestHeader('content-type'),
- 'content-length' => $this->chunkSize,
- 'expect' => '',
- );
-
- $httpRequest = new Google_HttpRequest($this->resumeUri, 'PUT', $headers, $chunk);
- $response = Google_Client::$io->authenticatedRequest($httpRequest);
- $code = $response->getResponseHttpCode();
- if (308 == $code) {
- $range = explode('-', $response->getResponseHeader('range'));
- $this->progress = $range[1] + 1;
- return false;
- } else {
- return Google_REST::decodeHttpResponse($response);
- }
- }
-
- private function getResumeUri(Google_HttpRequest $httpRequest) {
- $result = null;
- $body = $httpRequest->getPostBody();
- if ($body) {
- $httpRequest->setRequestHeaders(array(
- 'content-type' => 'application/json; charset=UTF-8',
- 'content-length' => Google_Utils::getStrLen($body),
- 'x-upload-content-type' => $this->mimeType,
- 'x-upload-content-length' => $this->size,
- 'expect' => '',
- ));
- }
-
- $response = Google_Client::$io->makeRequest($httpRequest);
- $location = $response->getResponseHeader('location');
- $code = $response->getResponseHttpCode();
- if (200 == $code && true == $location) {
- return $location;
- }
- throw new Google_Exception("Failed to start the resumable upload");
- }
-} \ No newline at end of file
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_Model.php b/apps/files_external/3rdparty/google-api-php-client/src/service/Google_Model.php
deleted file mode 100644
index cb44cb25748..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_Model.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-/*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * This class defines attributes, valid values, and usage which is generated from
- * a given json schema. http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5
- *
- * @author Chirag Shah <chirags@google.com>
- *
- */
-class Google_Model {
- public function __construct( /* polymorphic */ ) {
- if (func_num_args() == 1 && is_array(func_get_arg(0))) {
- // Initialize the model with the array's contents.
- $array = func_get_arg(0);
- $this->mapTypes($array);
- }
- }
-
- /**
- * Initialize this object's properties from an array.
- *
- * @param array $array Used to seed this object's properties.
- * @return void
- */
- protected function mapTypes($array) {
- foreach ($array as $key => $val) {
- $this->$key = $val;
-
- $keyTypeName = "__$key" . 'Type';
- $keyDataType = "__$key" . 'DataType';
- if ($this->useObjects() && property_exists($this, $keyTypeName)) {
- if ($this->isAssociativeArray($val)) {
- if (isset($this->$keyDataType) && 'map' == $this->$keyDataType) {
- foreach($val as $arrayKey => $arrayItem) {
- $val[$arrayKey] = $this->createObjectFromName($keyTypeName, $arrayItem);
- }
- $this->$key = $val;
- } else {
- $this->$key = $this->createObjectFromName($keyTypeName, $val);
- }
- } else if (is_array($val)) {
- $arrayObject = array();
- foreach ($val as $arrayIndex => $arrayItem) {
- $arrayObject[$arrayIndex] = $this->createObjectFromName($keyTypeName, $arrayItem);
- }
- $this->$key = $arrayObject;
- }
- }
- }
- }
-
- /**
- * Returns true only if the array is associative.
- * @param array $array
- * @return bool True if the array is associative.
- */
- protected function isAssociativeArray($array) {
- if (!is_array($array)) {
- return false;
- }
- $keys = array_keys($array);
- foreach($keys as $key) {
- if (is_string($key)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Given a variable name, discover its type.
- *
- * @param $name
- * @param $item
- * @return object The object from the item.
- */
- private function createObjectFromName($name, $item) {
- $type = $this->$name;
- return new $type($item);
- }
-
- protected function useObjects() {
- global $apiConfig;
- return (isset($apiConfig['use_objects']) && $apiConfig['use_objects']);
- }
-
- /**
- * Verify if $obj is an array.
- * @throws Google_Exception Thrown if $obj isn't an array.
- * @param array $obj Items that should be validated.
- * @param string $type Array items should be of this type.
- * @param string $method Method expecting an array as an argument.
- */
- public function assertIsArray($obj, $type, $method) {
- if ($obj && !is_array($obj)) {
- throw new Google_Exception("Incorrect parameter type passed to $method(), expected an"
- . " array containing items of type $type.");
- }
- }
-}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_ServiceResource.php b/apps/files_external/3rdparty/google-api-php-client/src/service/Google_ServiceResource.php
deleted file mode 100644
index bb3af4db809..00000000000
--- a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_ServiceResource.php
+++ /dev/null
@@ -1,205 +0,0 @@
-<?php
-/**
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Implements the actual methods/resources of the discovered Google API using magic function
- * calling overloading (__call()), which on call will see if the method name (plus.activities.list)
- * is available in this service, and if so construct an apiHttpRequest representing it.
- *
- * @author Chris Chabot <chabotc@google.com>
- * @author Chirag Shah <chirags@google.com>
- *
- */
-class Google_ServiceResource {
- // Valid query parameters that work, but don't appear in discovery.
- private $stackParameters = array(
- 'alt' => array('type' => 'string', 'location' => 'query'),
- 'boundary' => array('type' => 'string', 'location' => 'query'),
- 'fields' => array('type' => 'string', 'location' => 'query'),
- 'trace' => array('type' => 'string', 'location' => 'query'),
- 'userIp' => array('type' => 'string', 'location' => 'query'),
- 'userip' => array('type' => 'string', 'location' => 'query'),
- 'quotaUser' => array('type' => 'string', 'location' => 'query'),
- 'file' => array('type' => 'complex', 'location' => 'body'),
- 'data' => array('type' => 'string', 'location' => 'body'),
- 'mimeType' => array('type' => 'string', 'location' => 'header'),
- 'uploadType' => array('type' => 'string', 'location' => 'query'),
- 'mediaUpload' => array('type' => 'complex', 'location' => 'query'),
- );
-
- /** @var Google_Service $service */
- private $service;
-
- /** @var string $serviceName */
- private $serviceName;
-
- /** @var string $resourceName */
- private $resourceName;
-
- /** @var array $methods */
- private $methods;
-
- public function __construct($service, $serviceName, $resourceName, $resource) {
- $this->service = $service;
- $this->serviceName = $serviceName;
- $this->resourceName = $resourceName;
- $this->methods = isset($resource['methods']) ? $resource['methods'] : array($resourceName => $resource);
- }
-
- /**
- * @param $name
- * @param $arguments
- * @return Google_HttpRequest|array
- * @throws Google_Exception
- */
- public function __call($name, $arguments) {
- if (! isset($this->methods[$name])) {
- throw new Google_Exception("Unknown function: {$this->serviceName}->{$this->resourceName}->{$name}()");
- }
- $method = $this->methods[$name];
- $parameters = $arguments[0];
-
- // postBody is a special case since it's not defined in the discovery document as parameter, but we abuse the param entry for storing it
- $postBody = null;
- if (isset($parameters['postBody'])) {
- if (is_object($parameters['postBody'])) {
- $this->stripNull($parameters['postBody']);
- }
-
- // Some APIs require the postBody to be set under the data key.
- if (is_array($parameters['postBody']) && 'latitude' == $this->serviceName) {
- if (!isset($parameters['postBody']['data'])) {
- $rawBody = $parameters['postBody'];
- unset($parameters['postBody']);
- $parameters['postBody']['data'] = $rawBody;
- }
- }
-
- $postBody = is_array($parameters['postBody']) || is_object($parameters['postBody'])
- ? json_encode($parameters['postBody'])
- : $parameters['postBody'];
- unset($parameters['postBody']);
-
- if (isset($parameters['optParams'])) {
- $optParams = $parameters['optParams'];
- unset($parameters['optParams']);
- $parameters = array_merge($parameters, $optParams);
- }
- }
-
- if (!isset($method['parameters'])) {
- $method['parameters'] = array();
- }
-
- $method['parameters'] = array_merge($method['parameters'], $this->stackParameters);
- foreach ($parameters as $key => $val) {
- if ($key != 'postBody' && ! isset($method['parameters'][$key])) {
- throw new Google_Exception("($name) unknown parameter: '$key'");
- }
- }
- if (isset($method['parameters'])) {
- foreach ($method['parameters'] as $paramName => $paramSpec) {
- if (isset($paramSpec['required']) && $paramSpec['required'] && ! isset($parameters[$paramName])) {
- throw new Google_Exception("($name) missing required param: '$paramName'");
- }
- if (isset($parameters[$paramName])) {
- $value = $parameters[$paramName];
- $parameters[$paramName] = $paramSpec;
- $parameters[$paramName]['value'] = $value;
- unset($parameters[$paramName]['required']);
- } else {
- unset($parameters[$paramName]);
- }
- }
- }
-
- // Discovery v1.0 puts the canonical method id under the 'id' field.
- if (! isset($method['id'])) {
- $method['id'] = $method['rpcMethod'];
- }
-
- // Discovery v1.0 puts the canonical path under the 'path' field.
- if (! isset($method['path'])) {
- $method['path'] = $method['restPath'];
- }
-
- $servicePath = $this->service->servicePath;
-
- // Process Media Request
- $contentType = false;
- if (isset($method['mediaUpload'])) {
- $media = Google_MediaFileUpload::process($postBody, $parameters);
- if ($media) {
- $contentType = isset($media['content-type']) ? $media['content-type']: null;
- $postBody = isset($media['postBody']) ? $media['postBody'] : null;
- $servicePath = $method['mediaUpload']['protocols']['simple']['path'];
- $method['path'] = '';
- }
- }
-
- $url = Google_REST::createRequestUri($servicePath, $method['path'], $parameters);
- $httpRequest = new Google_HttpRequest($url, $method['httpMethod'], null, $postBody);
- if ($postBody) {
- $contentTypeHeader = array();
- if (isset($contentType) && $contentType) {
- $contentTypeHeader['content-type'] = $contentType;
- } else {
- $contentTypeHeader['content-type'] = 'application/json; charset=UTF-8';
- $contentTypeHeader['content-length'] = Google_Utils::getStrLen($postBody);
- }
- $httpRequest->setRequestHeaders($contentTypeHeader);
- }
-
- $httpRequest = Google_Client::$auth->sign($httpRequest);
- if (Google_Client::$useBatch) {
- return $httpRequest;
- }
-
- // Terminate immediately if this is a resumable request.
- if (isset($parameters['uploadType']['value'])
- && Google_MediaFileUpload::UPLOAD_RESUMABLE_TYPE == $parameters['uploadType']['value']) {
- $contentTypeHeader = array();
- if (isset($contentType) && $contentType) {
- $contentTypeHeader['content-type'] = $contentType;
- }
- $httpRequest->setRequestHeaders($contentTypeHeader);
- if ($postBody) {
- $httpRequest->setPostBody($postBody);
- }
- return $httpRequest;
- }
-
- return Google_REST::execute($httpRequest);
- }
-
- public function useObjects() {
- global $apiConfig;
- return (isset($apiConfig['use_objects']) && $apiConfig['use_objects']);
- }
-
- protected function stripNull(&$o) {
- $o = (array) $o;
- foreach ($o as $k => $v) {
- if ($v === null || strstr($k, "\0*\0__")) {
- unset($o[$k]);
- }
- elseif (is_object($v) || is_array($v)) {
- $this->stripNull($o[$k]);
- }
- }
- }
-}
diff --git a/apps/files_external/ajax/google.php b/apps/files_external/ajax/google.php
index 40c10aa5d07..b80f24bbd2c 100644
--- a/apps/files_external/ajax/google.php
+++ b/apps/files_external/ajax/google.php
@@ -1,7 +1,7 @@
<?php
set_include_path(get_include_path().PATH_SEPARATOR.
\OC_App::getAppPath('files_external').'/3rdparty/google-api-php-client/src');
-require_once 'Google_Client.php';
+require_once 'Google/Client.php';
OCP\JSON::checkAppEnabled('files_external');
OCP\JSON::checkLoggedIn();
@@ -14,6 +14,7 @@ if (isset($_POST['client_id']) && isset($_POST['client_secret']) && isset($_POST
$client->setClientSecret($_POST['client_secret']);
$client->setRedirectUri($_POST['redirect']);
$client->setScopes(array('https://www.googleapis.com/auth/drive'));
+ $client->setAccessType('offline');
if (isset($_POST['step'])) {
$step = $_POST['step'];
if ($step == 1) {
diff --git a/apps/files_external/l10n/fr.js b/apps/files_external/l10n/fr.js
index 7f827ec6fd4..5885af24199 100644
--- a/apps/files_external/l10n/fr.js
+++ b/apps/files_external/l10n/fr.js
@@ -50,7 +50,7 @@ OC.L10N.register(
"Error configuring Google Drive storage" : "Erreur lors de la configuration du support de stockage Google Drive",
"Personal" : "Personnel",
"System" : "Système",
- "All users. Type to select user or group." : "Tous les utilisateurs. Commencez à saisir pour sélectionner un utilisateur ou un groupe.",
+ "All users. Type to select user or group." : "Tous les utilisateurs. Cliquez ici pour restreindre.",
"(group)" : "(groupe)",
"Saved" : "Sauvegarder",
"<b>Note:</b> " : "<b>Attention :</b>",
diff --git a/apps/files_external/l10n/fr.json b/apps/files_external/l10n/fr.json
index e8a9e299c24..e1e2b2eccc4 100644
--- a/apps/files_external/l10n/fr.json
+++ b/apps/files_external/l10n/fr.json
@@ -48,7 +48,7 @@
"Error configuring Google Drive storage" : "Erreur lors de la configuration du support de stockage Google Drive",
"Personal" : "Personnel",
"System" : "Système",
- "All users. Type to select user or group." : "Tous les utilisateurs. Commencez à saisir pour sélectionner un utilisateur ou un groupe.",
+ "All users. Type to select user or group." : "Tous les utilisateurs. Cliquez ici pour restreindre.",
"(group)" : "(groupe)",
"Saved" : "Sauvegarder",
"<b>Note:</b> " : "<b>Attention :</b>",
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/l10n/sk.php b/apps/files_external/l10n/sk.php
deleted file mode 100644
index 9418c949228..00000000000
--- a/apps/files_external/l10n/sk.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Location" => "Poloha",
-"Share" => "Zdieľať",
-"Personal" => "Osobné",
-"Delete" => "Odstrániť"
-);
-$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/apps/files_external/lib/amazons3.php b/apps/files_external/lib/amazons3.php
index 53adb929e29..4d94e3561f8 100644
--- a/apps/files_external/lib/amazons3.php
+++ b/apps/files_external/lib/amazons3.php
@@ -267,10 +267,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
$file = basename(
isset($object['Key']) ? $object['Key'] : $object['Prefix']
);
-
- if ($file != basename($path)) {
- $files[] = $file;
- }
+ $files[] = $file;
}
\OC\Files\Stream\Dir::register('amazons3' . $path, $files);
diff --git a/apps/files_external/lib/api.php b/apps/files_external/lib/api.php
index 81ebd4e886a..3b5e0e1759a 100644
--- a/apps/files_external/lib/api.php
+++ b/apps/files_external/lib/api.php
@@ -45,10 +45,10 @@ class Api {
$isSystemMount = !$mountConfig['personal'];
- $permissions = \OCP\PERMISSION_READ;
+ $permissions = \OCP\Constants::PERMISSION_READ;
// personal mounts can be deleted
if (!$isSystemMount) {
- $permissions |= \OCP\PERMISSION_DELETE;
+ $permissions |= \OCP\Constants::PERMISSION_DELETE;
}
$entry = array(
diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php
index fa44e446d96..9400bbdedc0 100644
--- a/apps/files_external/lib/config.php
+++ b/apps/files_external/lib/config.php
@@ -121,6 +121,14 @@ class OC_Mount_Config {
if ($data['user']) {
$user = \OC::$server->getUserManager()->get($data['user']);
+ if (!$user) {
+ \OC_Log::write(
+ 'files_external',
+ 'Cannot init external mount points for non-existant user "' . $data['user'] . '".',
+ \OC_Log::WARN
+ );
+ return;
+ }
$userView = new \OC\Files\View('/' . $user->getUID() . '/files');
$changePropagator = new \OC\Files\Cache\ChangePropagator($userView);
$etagPropagator = new \OCA\Files_External\EtagPropagator($user, $changePropagator, \OC::$server->getConfig());
diff --git a/apps/files_external/lib/google.php b/apps/files_external/lib/google.php
index a4337bc937b..c414e34fad4 100644
--- a/apps/files_external/lib/google.php
+++ b/apps/files_external/lib/google.php
@@ -23,11 +23,12 @@ namespace OC\Files\Storage;
set_include_path(get_include_path().PATH_SEPARATOR.
\OC_App::getAppPath('files_external').'/3rdparty/google-api-php-client/src');
-require_once 'Google_Client.php';
-require_once 'contrib/Google_DriveService.php';
+require_once 'Google/Client.php';
+require_once 'Google/Service/Drive.php';
class Google extends \OC\Files\Storage\Common {
+ private $client;
private $id;
private $service;
private $driveFiles;
@@ -46,14 +47,19 @@ class Google extends \OC\Files\Storage\Common {
&& isset($params['client_id']) && isset($params['client_secret'])
&& isset($params['token'])
) {
- $client = new \Google_Client();
- $client->setClientId($params['client_id']);
- $client->setClientSecret($params['client_secret']);
- $client->setScopes(array('https://www.googleapis.com/auth/drive'));
- $client->setUseObjects(true);
- $client->setAccessToken($params['token']);
+ $this->client = new \Google_Client();
+ $this->client->setClientId($params['client_id']);
+ $this->client->setClientSecret($params['client_secret']);
+ $this->client->setScopes(array('https://www.googleapis.com/auth/drive'));
+ $this->client->setAccessToken($params['token']);
+ // if curl isn't available we're likely to run into
+ // https://github.com/google/google-api-php-client/issues/59
+ // - disable gzip to avoid it.
+ if (!function_exists('curl_version') || !function_exists('curl_exec')) {
+ $this->client->setClassConfig("Google_Http_Request", "disable_gzip", true);
+ }
// note: API connection is lazy
- $this->service = new \Google_DriveService($client);
+ $this->service = new \Google_Service_Drive($this->client);
$token = json_decode($params['token'], true);
$this->id = 'google::'.substr($params['client_id'], 0, 30).$token['created'];
} else {
@@ -66,9 +72,10 @@ class Google extends \OC\Files\Storage\Common {
}
/**
- * Get the Google_DriveFile object for the specified path
+ * Get the Google_Service_Drive_DriveFile object for the specified path.
+ * Returns false on failure.
* @param string $path
- * @return string
+ * @return \Google_Service_Drive_DriveFile|false
*/
private function getDriveFile($path) {
// Remove leading and trailing slashes
@@ -115,7 +122,7 @@ class Google extends \OC\Files\Storage\Common {
$pathWithoutExt = substr($path, 0, $pos);
$file = $this->getDriveFile($pathWithoutExt);
if ($file) {
- // Switch cached Google_DriveFile to the correct index
+ // Switch cached Google_Service_Drive_DriveFile to the correct index
unset($this->driveFiles[$pathWithoutExt]);
$this->driveFiles[$path] = $file;
$parentId = $file->getId();
@@ -133,9 +140,9 @@ class Google extends \OC\Files\Storage\Common {
}
/**
- * Set the Google_DriveFile object in the cache
+ * Set the Google_Service_Drive_DriveFile object in the cache
* @param string $path
- * @param Google_DriveFile|false $file
+ * @param Google_Service_Drive_DriveFile|false $file
*/
private function setDriveFile($path, $file) {
$path = trim($path, '/');
@@ -188,10 +195,10 @@ class Google extends \OC\Files\Storage\Common {
if (!$this->is_dir($path)) {
$parentFolder = $this->getDriveFile(dirname($path));
if ($parentFolder) {
- $folder = new \Google_DriveFile();
+ $folder = new \Google_Service_Drive_DriveFile();
$folder->setTitle(basename($path));
$folder->setMimeType(self::FOLDER);
- $parent = new \Google_ParentReference();
+ $parent = new \Google_Service_Drive_ParentReference();
$parent->setId($parentFolder->getId());
$folder->setParents(array($parent));
$result = $this->service->files->insert($folder);
@@ -266,7 +273,7 @@ class Google extends \OC\Files\Storage\Common {
$this->onDuplicateFileDetected($filepath);
}
} else {
- // Cache the Google_DriveFile for future use
+ // Cache the Google_Service_Drive_DriveFile for future use
$this->setDriveFile($filepath, $child);
$files[] = $name;
}
@@ -356,7 +363,7 @@ class Google extends \OC\Files\Storage\Common {
// Change file parent
$parentFolder2 = $this->getDriveFile(dirname($path2));
if ($parentFolder2) {
- $parent = new \Google_ParentReference();
+ $parent = new \Google_Service_Drive_ParentReference();
$parent->setId($parentFolder2->getId());
$file->setParents(array($parent));
} else {
@@ -395,8 +402,8 @@ class Google extends \OC\Files\Storage\Common {
$downloadUrl = $file->getDownloadUrl();
}
if (isset($downloadUrl)) {
- $request = new \Google_HttpRequest($downloadUrl, 'GET', null, null);
- $httpRequest = \Google_Client::$io->authenticatedRequest($request);
+ $request = new \Google_Http_Request($downloadUrl, 'GET', null, null);
+ $httpRequest = $this->client->getAuth()->authenticatedRequest($request);
if ($httpRequest->getResponseHttpCode() == 200) {
$tmpFile = \OC_Helper::tmpFile($ext);
$data = $httpRequest->getResponseBody();
@@ -440,16 +447,17 @@ class Google extends \OC\Files\Storage\Common {
$params = array(
'data' => $data,
'mimeType' => $mimetype,
+ 'uploadType' => 'media'
);
$result = false;
if ($this->file_exists($path)) {
$file = $this->getDriveFile($path);
$result = $this->service->files->update($file->getId(), $file, $params);
} else {
- $file = new \Google_DriveFile();
+ $file = new \Google_Service_Drive_DriveFile();
$file->setTitle(basename($path));
$file->setMimeType($mimetype);
- $parent = new \Google_ParentReference();
+ $parent = new \Google_Service_Drive_ParentReference();
$parent->setId($parentFolder->getId());
$file->setParents(array($parent));
$result = $this->service->files->insert($file, $params);
@@ -509,9 +517,9 @@ class Google extends \OC\Files\Storage\Common {
} else {
$parentFolder = $this->getDriveFile(dirname($path));
if ($parentFolder) {
- $file = new \Google_DriveFile();
+ $file = new \Google_Service_Drive_DriveFile();
$file->setTitle(basename($path));
- $parent = new \Google_ParentReference();
+ $parent = new \Google_Service_Drive_ParentReference();
$parent->setId($parentFolder->getId());
$file->setParents(array($parent));
$result = $this->service->files->insert($file);
diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php
index 6e53c4a9931..3f0b0f45bfb 100644
--- a/apps/files_external/lib/smb.php
+++ b/apps/files_external/lib/smb.php
@@ -139,13 +139,8 @@ class SMB extends \OC\Files\Storage\StreamWrapper{
* check if smbclient is installed
*/
public static function checkDependencies() {
- if (function_exists('shell_exec')) {
- $output=shell_exec('command -v smbclient 2> /dev/null');
- if (!empty($output)) {
- return true;
- }
- }
- return array('smbclient');
+ $smbClientExists = (bool) \OC_Helper::findBinaryPath('smbclient');
+ return $smbClientExists ? true : array('smbclient');
}
}
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/amazons3.php b/apps/files_external/tests/amazons3.php
index 8eaece6dad9..fbb8744bd8d 100644
--- a/apps/files_external/tests/amazons3.php
+++ b/apps/files_external/tests/amazons3.php
@@ -28,7 +28,9 @@ class AmazonS3 extends Storage {
private $config;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->config = include('files_external/tests/config.php');
if ( ! is_array($this->config) or ! isset($this->config['amazons3']) or ! $this->config['amazons3']['run']) {
$this->markTestSkipped('AmazonS3 backend not configured');
@@ -36,10 +38,12 @@ class AmazonS3 extends Storage {
$this->instance = new \OC\Files\Storage\AmazonS3($this->config['amazons3']);
}
- public function tearDown() {
+ protected function tearDown() {
if ($this->instance) {
$this->instance->rmdir('');
}
+
+ parent::tearDown();
}
public function testStat() {
diff --git a/apps/files_external/tests/amazons3migration.php b/apps/files_external/tests/amazons3migration.php
index 629cf5cfa3c..145213f5293 100644
--- a/apps/files_external/tests/amazons3migration.php
+++ b/apps/files_external/tests/amazons3migration.php
@@ -23,15 +23,26 @@
namespace Test\Files\Storage;
-class AmazonS3Migration extends \PHPUnit_Framework_TestCase {
+class AmazonS3Migration extends \Test\TestCase {
/**
* @var \OC\Files\Storage\Storage instance
*/
protected $instance;
- public function setUp () {
- $uuid = uniqid();
+ /** @var array */
+ protected $params;
+
+ /** @var string */
+ protected $oldId;
+
+ /** @var string */
+ protected $newId;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $uuid = $this->getUniqueID();
$this->params['key'] = 'key'.$uuid;
$this->params['secret'] = 'secret'.$uuid;
@@ -41,9 +52,11 @@ class AmazonS3Migration extends \PHPUnit_Framework_TestCase {
$this->newId = 'amazon::' . $this->params['bucket'];
}
- public function tearDown () {
+ protected function tearDown() {
$this->deleteStorage($this->oldId);
$this->deleteStorage($this->newId);
+
+ parent::tearDown();
}
public function testUpdateLegacyOnlyId () {
diff --git a/apps/files_external/tests/dropbox.php b/apps/files_external/tests/dropbox.php
index 4b052282019..3f25d5a31e8 100644
--- a/apps/files_external/tests/dropbox.php
+++ b/apps/files_external/tests/dropbox.php
@@ -11,8 +11,10 @@ namespace Test\Files\Storage;
class Dropbox extends Storage {
private $config;
- public function setUp() {
- $id = uniqid();
+ protected function setUp() {
+ parent::setUp();
+
+ $id = $this->getUniqueID();
$this->config = include('files_external/tests/config.php');
if ( ! is_array($this->config) or ! isset($this->config['dropbox']) or ! $this->config['dropbox']['run']) {
$this->markTestSkipped('Dropbox backend not configured');
@@ -21,6 +23,14 @@ class Dropbox extends Storage {
$this->instance = new \OC\Files\Storage\Dropbox($this->config['dropbox']);
}
+ protected function tearDown() {
+ if ($this->instance) {
+ $this->instance->unlink('/');
+ }
+
+ parent::tearDown();
+ }
+
public function directoryProvider() {
// doesn't support leading/trailing spaces
return array(array('folder'));
@@ -36,10 +46,4 @@ class Dropbox extends Storage {
// false because not supported
$this->assertFalse($this->instance->touch('foo'));
}
-
- public function tearDown() {
- if ($this->instance) {
- $this->instance->unlink('/');
- }
- }
}
diff --git a/apps/files_external/tests/dynamicmountconfig.php b/apps/files_external/tests/dynamicmountconfig.php
index 650299075e6..eef2a896b3a 100644
--- a/apps/files_external/tests/dynamicmountconfig.php
+++ b/apps/files_external/tests/dynamicmountconfig.php
@@ -36,7 +36,7 @@ class Test_Mount_Config_Dummy_Backend {
/**
* Class Test_Dynamic_Mount_Config
*/
-class Test_Dynamic_Mount_Config extends \PHPUnit_Framework_TestCase {
+class Test_Dynamic_Mount_Config extends \Test\TestCase {
private $backup;
@@ -82,6 +82,7 @@ class Test_Dynamic_Mount_Config extends \PHPUnit_Framework_TestCase {
}
protected function setUp() {
+ parent::setUp();
$this->backup = OC_Mount_Config::setUp();
@@ -97,5 +98,6 @@ class Test_Dynamic_Mount_Config extends \PHPUnit_Framework_TestCase {
protected function tearDown()
{
OC_Mount_Config::setUp($this->backup);
+ parent::tearDown();
}
}
diff --git a/apps/files_external/tests/etagpropagator.php b/apps/files_external/tests/etagpropagator.php
index 7fa1863f962..84b687d18e4 100644
--- a/apps/files_external/tests/etagpropagator.php
+++ b/apps/files_external/tests/etagpropagator.php
@@ -11,9 +11,9 @@ namespace Tests\Files_External;
use OC\Files\Filesystem;
use OC\User\User;
-class EtagPropagator extends \PHPUnit_Framework_TestCase {
+class EtagPropagator extends \Test\TestCase {
protected function getUser() {
- return new User(uniqid(), null);
+ return new User($this->getUniqueID(), null);
}
/**
diff --git a/apps/files_external/tests/ftp.php b/apps/files_external/tests/ftp.php
index 3037793120a..842b7f43fa8 100644
--- a/apps/files_external/tests/ftp.php
+++ b/apps/files_external/tests/ftp.php
@@ -11,8 +11,10 @@ namespace Test\Files\Storage;
class FTP extends Storage {
private $config;
- public function setUp() {
- $id = uniqid();
+ protected function setUp() {
+ parent::setUp();
+
+ $id = $this->getUniqueID();
$this->config = include('files_external/tests/config.php');
if ( ! is_array($this->config) or ! isset($this->config['ftp']) or ! $this->config['ftp']['run']) {
$this->markTestSkipped('FTP backend not configured');
@@ -22,10 +24,12 @@ class FTP extends Storage {
$this->instance->mkdir('/');
}
- public function tearDown() {
+ protected function tearDown() {
if ($this->instance) {
\OCP\Files::rmdirr($this->instance->constructUrl(''));
}
+
+ parent::tearDown();
}
public function testConstructUrl(){
diff --git a/apps/files_external/tests/google.php b/apps/files_external/tests/google.php
index d5495d49c5e..79023fac9e1 100644
--- a/apps/files_external/tests/google.php
+++ b/apps/files_external/tests/google.php
@@ -28,6 +28,8 @@ class Google extends Storage {
private $config;
protected function setUp() {
+ parent::setUp();
+
$this->config = include('files_external/tests/config.php');
if (!is_array($this->config) || !isset($this->config['google'])
|| !$this->config['google']['run']
@@ -41,5 +43,7 @@ class Google extends Storage {
if ($this->instance) {
$this->instance->rmdir('/');
}
+
+ parent::tearDown();
}
}
diff --git a/apps/files_external/tests/mountconfig.php b/apps/files_external/tests/mountconfig.php
index c11e48b82f3..342f020d3a9 100644
--- a/apps/files_external/tests/mountconfig.php
+++ b/apps/files_external/tests/mountconfig.php
@@ -65,7 +65,7 @@ class Test_Mount_Config_Hook_Test {
/**
* Class Test_Mount_Config
*/
-class Test_Mount_Config extends \PHPUnit_Framework_TestCase {
+class Test_Mount_Config extends \Test\TestCase {
private $dataDir;
private $userHome;
@@ -79,7 +79,9 @@ class Test_Mount_Config extends \PHPUnit_Framework_TestCase {
const TEST_GROUP2 = 'group2';
const TEST_GROUP2B = 'group2b';
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
\OC_User::createUser(self::TEST_USER1, self::TEST_USER1);
\OC_User::createUser(self::TEST_USER2, self::TEST_USER2);
@@ -116,7 +118,7 @@ class Test_Mount_Config extends \PHPUnit_Framework_TestCase {
Test_Mount_Config_Hook_Test::setupHooks();
}
- public function tearDown() {
+ protected function tearDown() {
Test_Mount_Config_Hook_Test::clear();
OC_Mount_Config::$skipTest = false;
@@ -134,6 +136,8 @@ class Test_Mount_Config extends \PHPUnit_Framework_TestCase {
'user_mounting_backends',
$this->oldAllowedBackends
);
+
+ parent::tearDown();
}
/**
@@ -292,10 +296,6 @@ class Test_Mount_Config extends \PHPUnit_Framework_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;
@@ -336,10 +336,6 @@ class Test_Mount_Config extends \PHPUnit_Framework_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;
@@ -475,10 +471,6 @@ class Test_Mount_Config extends \PHPUnit_Framework_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;
@@ -520,10 +512,6 @@ class Test_Mount_Config extends \PHPUnit_Framework_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;
@@ -636,10 +624,6 @@ class Test_Mount_Config extends \PHPUnit_Framework_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',
@@ -680,10 +664,6 @@ class Test_Mount_Config extends \PHPUnit_Framework_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;
@@ -755,10 +735,6 @@ class Test_Mount_Config extends \PHPUnit_Framework_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;
@@ -891,10 +867,6 @@ class Test_Mount_Config extends \PHPUnit_Framework_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',
@@ -929,10 +901,6 @@ class Test_Mount_Config extends \PHPUnit_Framework_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;
@@ -982,10 +950,6 @@ class Test_Mount_Config extends \PHPUnit_Framework_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_external/tests/owncloud.php b/apps/files_external/tests/owncloud.php
index 408a55864f2..ab9101cfe5f 100644
--- a/apps/files_external/tests/owncloud.php
+++ b/apps/files_external/tests/owncloud.php
@@ -12,8 +12,10 @@ class OwnCloud extends Storage {
private $config;
- public function setUp() {
- $id = uniqid();
+ protected function setUp() {
+ parent::setUp();
+
+ $id = $this->getUniqueID();
$this->config = include('files_external/tests/config.php');
if ( ! is_array($this->config) or ! isset($this->config['owncloud']) or ! $this->config['owncloud']['run']) {
$this->markTestSkipped('ownCloud backend not configured');
@@ -23,9 +25,11 @@ class OwnCloud extends Storage {
$this->instance->mkdir('/');
}
- public function tearDown() {
+ protected function tearDown() {
if ($this->instance) {
$this->instance->rmdir('/');
}
+
+ parent::tearDown();
}
}
diff --git a/apps/files_external/tests/owncloudfunctions.php b/apps/files_external/tests/owncloudfunctions.php
index 57608fff0cf..8232f30a5e2 100644
--- a/apps/files_external/tests/owncloudfunctions.php
+++ b/apps/files_external/tests/owncloudfunctions.php
@@ -8,7 +8,7 @@
namespace Test\Files\Storage;
-class OwnCloudFunctions extends \PHPUnit_Framework_TestCase {
+class OwnCloudFunctions extends \Test\TestCase {
function configUrlProvider() {
return array(
diff --git a/apps/files_external/tests/sftp.php b/apps/files_external/tests/sftp.php
index efea7f075ff..703b37d93f1 100644
--- a/apps/files_external/tests/sftp.php
+++ b/apps/files_external/tests/sftp.php
@@ -25,8 +25,10 @@ namespace Test\Files\Storage;
class SFTP extends Storage {
private $config;
- public function setUp() {
- $id = uniqid();
+ protected function setUp() {
+ parent::setUp();
+
+ $id = $this->getUniqueID();
$this->config = include('files_external/tests/config.php');
if ( ! is_array($this->config) or ! isset($this->config['sftp']) or ! $this->config['sftp']['run']) {
$this->markTestSkipped('SFTP backend not configured');
@@ -36,9 +38,11 @@ class SFTP extends Storage {
$this->instance->mkdir('/');
}
- public function tearDown() {
+ protected function tearDown() {
if ($this->instance) {
$this->instance->rmdir('/');
}
+
+ parent::tearDown();
}
}
diff --git a/apps/files_external/tests/smb.php b/apps/files_external/tests/smb.php
index 199e35af676..9e5ab2b331f 100644
--- a/apps/files_external/tests/smb.php
+++ b/apps/files_external/tests/smb.php
@@ -12,8 +12,10 @@ class SMB extends Storage {
private $config;
- public function setUp() {
- $id = uniqid();
+ protected function setUp() {
+ parent::setUp();
+
+ $id = $this->getUniqueID();
$this->config = include('files_external/tests/config.php');
if (!is_array($this->config) or !isset($this->config['smb']) or !$this->config['smb']['run']) {
$this->markTestSkipped('Samba backend not configured');
@@ -23,10 +25,12 @@ class SMB extends Storage {
$this->instance->mkdir('/');
}
- public function tearDown() {
+ protected function tearDown() {
if ($this->instance) {
\OCP\Files::rmdirr($this->instance->constructUrl(''));
}
+
+ parent::tearDown();
}
public function directoryProvider() {
diff --git a/apps/files_external/tests/smbfunctions.php b/apps/files_external/tests/smbfunctions.php
index 749906d0136..cf9f7cb20fe 100644
--- a/apps/files_external/tests/smbfunctions.php
+++ b/apps/files_external/tests/smbfunctions.php
@@ -8,10 +8,11 @@
namespace Test\Files\Storage;
-class SMBFunctions extends \PHPUnit_Framework_TestCase {
+class SMBFunctions extends \Test\TestCase {
+
+ protected function setUp() {
+ parent::setUp();
- public function setUp() {
- $id = uniqid();
// dummy config
$this->config = array(
'run'=>false,
@@ -25,9 +26,6 @@ class SMBFunctions extends \PHPUnit_Framework_TestCase {
$this->instance = new \OC\Files\Storage\SMB($this->config);
}
- public function tearDown() {
- }
-
public function testGetId() {
$this->assertEquals('smb::test@smbhost//sharename//rootdir/', $this->instance->getId());
}
diff --git a/apps/files_external/tests/swift.php b/apps/files_external/tests/swift.php
index 3918497ebfa..d2c884a8b4c 100644
--- a/apps/files_external/tests/swift.php
+++ b/apps/files_external/tests/swift.php
@@ -26,7 +26,9 @@ class Swift extends Storage {
private $config;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->config = include('files_external/tests/config.php');
if (!is_array($this->config) or !isset($this->config['swift'])
or !$this->config['swift']['run']) {
@@ -35,7 +37,7 @@ class Swift extends Storage {
$this->instance = new \OC\Files\Storage\Swift($this->config['swift']);
}
- public function tearDown() {
+ protected function tearDown() {
if ($this->instance) {
$connection = $this->instance->getConnection();
$container = $connection->getContainer($this->config['swift']['bucket']);
@@ -48,5 +50,7 @@ class Swift extends Storage {
$container->delete();
}
+
+ parent::tearDown();
}
}
diff --git a/apps/files_external/tests/webdav.php b/apps/files_external/tests/webdav.php
index 74e905ccc89..5f53568b91a 100644
--- a/apps/files_external/tests/webdav.php
+++ b/apps/files_external/tests/webdav.php
@@ -12,8 +12,10 @@ class DAV extends Storage {
private $config;
- public function setUp() {
- $id = uniqid();
+ protected function setUp() {
+ parent::setUp();
+
+ $id = $this->getUniqueID();
$this->config = include('files_external/tests/config.php');
if ( ! is_array($this->config) or ! isset($this->config['webdav']) or ! $this->config['webdav']['run']) {
$this->markTestSkipped('WebDAV backend not configured');
@@ -26,9 +28,11 @@ class DAV extends Storage {
$this->instance->mkdir('/');
}
- public function tearDown() {
+ protected function tearDown() {
if ($this->instance) {
$this->instance->rmdir('/');
}
+
+ parent::tearDown();
}
}
diff --git a/apps/files_sharing/ajax/list.php b/apps/files_sharing/ajax/list.php
index 7e2e54a1bd9..073c86365be 100644
--- a/apps/files_sharing/ajax/list.php
+++ b/apps/files_sharing/ajax/list.php
@@ -65,7 +65,7 @@ $formattedFiles = array();
foreach ($files as $file) {
$entry = \OCA\Files\Helper::formatFileInfo($file);
unset($entry['directory']); // for now
- $entry['permissions'] = \OCP\PERMISSION_READ;
+ $entry['permissions'] = \OCP\Constants::PERMISSION_READ;
$formattedFiles[] = $entry;
}
@@ -78,7 +78,7 @@ $permissions = $linkItem['permissions'];
// if globally disabled
if (\OC::$server->getAppConfig()->getValue('core', 'shareapi_allow_public_upload', 'yes') === 'no') {
// only allow reading
- $permissions = \OCP\PERMISSION_READ;
+ $permissions = \OCP\Constants::PERMISSION_READ;
}
$data['permissions'] = $permissions;
diff --git a/apps/files_sharing/ajax/shareinfo.php b/apps/files_sharing/ajax/shareinfo.php
index e87b0779e8d..f196a67a9dd 100644
--- a/apps/files_sharing/ajax/shareinfo.php
+++ b/apps/files_sharing/ajax/shareinfo.php
@@ -31,7 +31,7 @@ $linkItem = $data['linkItem'];
// Load the files
$path = $data['realPath'];
-$isWritable = $linkItem['permissions'] & (\OCP\PERMISSION_UPDATE | \OCP\PERMISSION_CREATE);
+$isWritable = $linkItem['permissions'] & (\OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_CREATE);
if (!$isWritable) {
\OC\Files\Filesystem::addStorageWrapper('readonly', function ($mountPoint, $storage) {
return new \OCA\Files_Sharing\ReadOnlyWrapper(array('storage' => $storage));
diff --git a/apps/files_sharing/appinfo/routes.php b/apps/files_sharing/appinfo/routes.php
index d58a97e2956..68f33d94995 100644
--- a/apps/files_sharing/appinfo/routes.php
+++ b/apps/files_sharing/appinfo/routes.php
@@ -1,4 +1,5 @@
<?php
+
/** @var $this \OCP\Route\IRouter */
$this->create('core_ajax_public_preview', '/publicpreview')->action(
function() {
diff --git a/apps/files_sharing/appinfo/update.php b/apps/files_sharing/appinfo/update.php
deleted file mode 100644
index e393b1575af..00000000000
--- a/apps/files_sharing/appinfo/update.php
+++ /dev/null
@@ -1,120 +0,0 @@
-<?php
-
-$installedVersion = OCP\Config::getAppValue('files_sharing', 'installed_version');
-
-if (version_compare($installedVersion, '0.5', '<')) {
- updateFilePermissions();
-}
-
-if (version_compare($installedVersion, '0.4', '<')) {
- removeSharedFolder();
-}
-
-// clean up oc_share table from files which are no longer exists
-if (version_compare($installedVersion, '0.3.5.6', '<')) {
- \OC\Files\Cache\Shared_Updater::fixBrokenSharesOnAppUpdate();
-}
-
-
-/**
- * it is no longer possible to share single files with delete permissions. User
- * should only be able to unshare single files but never to delete them.
- */
-function updateFilePermissions($chunkSize = 99) {
- $query = OCP\DB::prepare('SELECT * FROM `*PREFIX*share` WHERE `item_type` = ?');
- $result = $query->execute(array('file'));
-
- $updatedRows = array();
-
- while ($row = $result->fetchRow()) {
- if ($row['permissions'] & \OCP\PERMISSION_DELETE) {
- $updatedRows[$row['id']] = (int)$row['permissions'] & ~\OCP\PERMISSION_DELETE;
- }
- }
-
- $connection = \OC_DB::getConnection();
- $chunkedPermissionList = array_chunk($updatedRows, $chunkSize, true);
-
- foreach ($chunkedPermissionList as $subList) {
- $statement = "UPDATE `*PREFIX*share` SET `permissions` = CASE `id` ";
- //update share table
- $ids = implode(',', array_keys($subList));
- foreach ($subList as $id => $permission) {
- $statement .= "WHEN " . $connection->quote($id, \PDO::PARAM_INT) . " THEN " . $permission . " ";
- }
- $statement .= ' END WHERE `id` IN (' . $ids . ')';
-
- $query = OCP\DB::prepare($statement);
- $query->execute();
- }
-
-}
-
-/**
- * update script for the removal of the logical "Shared" folder, we create physical "Shared" folder and
- * update the users file_target so that it doesn't make any difference for the user
- * @note parameters are just for testing, please ignore them
- */
-function removeSharedFolder($mkdirs = true, $chunkSize = 99) {
- $query = OCP\DB::prepare('SELECT * FROM `*PREFIX*share`');
- $result = $query->execute();
- $view = new \OC\Files\View('/');
- $users = array();
- $shares = array();
- //we need to set up user backends
- OC_User::useBackend(new OC_User_Database());
- OC_Group::useBackend(new OC_Group_Database());
- OC_App::loadApps(array('authentication'));
- //we need to set up user backends, otherwise creating the shares will fail with "because user does not exist"
- while ($row = $result->fetchRow()) {
- //collect all user shares
- if ((int)$row['share_type'] === 0 && ($row['item_type'] === 'file' || $row['item_type'] === 'folder')) {
- $users[] = $row['share_with'];
- $shares[$row['id']] = $row['file_target'];
- } else if ((int)$row['share_type'] === 1 && ($row['item_type'] === 'file' || $row['item_type'] === 'folder')) {
- //collect all group shares
- $users = array_merge($users, \OC_group::usersInGroup($row['share_with']));
- $shares[$row['id']] = $row['file_target'];
- } else if ((int)$row['share_type'] === 2) {
- $shares[$row['id']] = $row['file_target'];
- }
- }
-
- $unique_users = array_unique($users);
-
- if (!empty($unique_users) && !empty($shares)) {
-
- // create folder Shared for each user
-
- if ($mkdirs) {
- foreach ($unique_users as $user) {
- \OC\Files\Filesystem::initMountPoints($user);
- if (!$view->file_exists('/' . $user . '/files/Shared')) {
- $view->mkdir('/' . $user . '/files/Shared');
- }
- }
- }
-
- $chunkedShareList = array_chunk($shares, $chunkSize, true);
- $connection = \OC_DB::getConnection();
-
- foreach ($chunkedShareList as $subList) {
-
- $statement = "UPDATE `*PREFIX*share` SET `file_target` = CASE `id` ";
- //update share table
- $ids = implode(',', array_keys($subList));
- foreach ($subList as $id => $target) {
- $statement .= "WHEN " . $connection->quote($id, \PDO::PARAM_INT) . " THEN " . $connection->quote('/Shared' . $target, \PDO::PARAM_STR);
- }
- $statement .= ' END WHERE `id` IN (' . $ids . ')';
-
- $query = OCP\DB::prepare($statement);
-
- $query->execute(array());
- }
-
- // set config to keep the Shared folder as the default location for new shares
- \OCA\Files_Sharing\Helper::setShareFolder('/Shared');
-
- }
-}
diff --git a/apps/files_sharing/application.php b/apps/files_sharing/application.php
new file mode 100644
index 00000000000..089ed6afbda
--- /dev/null
+++ b/apps/files_sharing/application.php
@@ -0,0 +1,73 @@
+<?php
+/**
+ * @author Lukas Reschke
+ * @copyright 2014 Lukas Reschke lukas@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files_Sharing;
+
+use OC\AppFramework\Utility\SimpleContainer;
+use OCA\Files_Sharing\Controllers\ShareController;
+use OCA\Files_Sharing\Middleware\SharingCheckMiddleware;
+use \OCP\AppFramework\App;
+
+/**
+ * @package OCA\Files_Sharing
+ */
+class Application extends App {
+
+
+ /**
+ * @param array $urlParams
+ */
+ public function __construct(array $urlParams=array()){
+ parent::__construct('files_sharing', $urlParams);
+
+ $container = $this->getContainer();
+
+ /**
+ * Controllers
+ */
+ $container->registerService('ShareController', function(SimpleContainer $c) {
+ return new ShareController(
+ $c->query('AppName'),
+ $c->query('Request'),
+ $c->query('UserSession'),
+ $c->query('ServerContainer')->getAppConfig(),
+ $c->query('ServerContainer')->getConfig(),
+ $c->query('URLGenerator'),
+ $c->query('ServerContainer')->getUserManager(),
+ $c->query('ServerContainer')->getLogger()
+ );
+ });
+
+ /**
+ * Core class wrappers
+ */
+ $container->registerService('UserSession', function(SimpleContainer $c) {
+ return $c->query('ServerContainer')->getUserSession();
+ });
+ $container->registerService('URLGenerator', function(SimpleContainer $c) {
+ return $c->query('ServerContainer')->getUrlGenerator();
+ });
+
+ /**
+ * Middleware
+ */
+ $container->registerService('SharingCheckMiddleware', function(SimpleContainer $c){
+ return new SharingCheckMiddleware(
+ $c->query('AppName'),
+ $c->query('ServerContainer')->getAppConfig(),
+ $c->getCoreApi()
+ );
+ });
+
+ // Execute middlewares
+ $container->registerMiddleware('SharingCheckMiddleware');
+ }
+
+}
diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js
index 52679a7158d..0627ed6ab54 100644
--- a/apps/files_sharing/js/public.js
+++ b/apps/files_sharing/js/public.js
@@ -109,14 +109,12 @@ OCA.Sharing.PublicApp = {
filename = JSON.stringify(filename);
}
var path = dir || FileList.getCurrentDirectory();
+ var token = $('#sharingToken').val();
var params = {
- service: 'files',
- t: $('#sharingToken').val(),
path: path,
- files: filename,
- download: null
+ files: filename
};
- return OC.filePath('', '', 'public.php') + '?' + OC.buildQueryString(params);
+ return OC.generateUrl('/s/'+token+'/download') + '?' + OC.buildQueryString(params);
};
this.fileList.getAjaxUrl = function (action, params) {
@@ -126,12 +124,11 @@ OCA.Sharing.PublicApp = {
};
this.fileList.linkTo = function (dir) {
+ var token = $('#sharingToken').val();
var params = {
- service: 'files',
- t: $('#sharingToken').val(),
dir: dir
};
- return OC.filePath('', '', 'public.php') + '?' + OC.buildQueryString(params);
+ return OC.generateUrl('/s/'+token+'') + '?' + OC.buildQueryString(params);
};
this.fileList.generatePreviewUrl = function (urlSpec) {
@@ -193,8 +190,6 @@ OCA.Sharing.PublicApp = {
_onDirectoryChanged: function (e) {
OC.Util.History.pushState({
- service: 'files',
- t: $('#sharingToken').val(),
// arghhhh, why is this not called "dir" !?
path: e.dir
});
diff --git a/apps/files_sharing/js/sharedfilelist.js b/apps/files_sharing/js/sharedfilelist.js
index 5869d7f77f7..7a7c24993c0 100644
--- a/apps/files_sharing/js/sharedfilelist.js
+++ b/apps/files_sharing/js/sharedfilelist.js
@@ -103,7 +103,11 @@
},
getDirectoryPermissions: function() {
- return OC.PERMISSION_READ | OC.PERMISSION_DELETE;
+ var perms = OC.PERMISSION_READ;
+ if (this._sharedWithUser) {
+ perms |= OC.PERMISSION_DELETE;
+ }
+ return perms;
},
updateStorageStatistics: function() {
@@ -203,7 +207,11 @@
}
file.name = OC.basename(share.path);
file.path = OC.dirname(share.path);
- file.permissions = OC.PERMISSION_ALL;
+ if (this._sharedWithUser) {
+ file.permissions = OC.PERMISSION_ALL;
+ } else {
+ file.permissions = OC.PERMISSION_ALL - OC.PERMISSION_DELETE;
+ }
if (file.path) {
file.extraData = share.path;
}
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_sharing/l10n/pt_PT.js b/apps/files_sharing/l10n/pt_PT.js
index 5f287489876..9df977ef41d 100644
--- a/apps/files_sharing/l10n/pt_PT.js
+++ b/apps/files_sharing/l10n/pt_PT.js
@@ -8,9 +8,9 @@ OC.L10N.register(
"Shared with you" : "Partilhado consigo ",
"Shared with others" : "Partilhado com outros",
"Shared by link" : "Partilhado pela hiperligação",
- "No files have been shared with you yet." : "Ainda não partilhados quaisquer ficheuiros consigo.",
+ "No files have been shared with you yet." : "Ainda não foram partilhados quaisquer ficheiros consigo.",
"You haven't shared any files yet." : "Ainda não partilhou quaisquer ficheiros.",
- "You haven't shared any files by link yet." : "Ainda não partilhou quaisquer ficheiros por hiperligação.",
+ "You haven't shared any files by link yet." : "Ainda não partilhou quaisquer ficheiros através de hiperligação.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Deseja adicionar a partilha remota {nome} de {proprietário}@{remoto}?",
"Remote share" : "Partilha remota",
"Remote share password" : "Senha da partilha remota",
diff --git a/apps/files_sharing/l10n/pt_PT.json b/apps/files_sharing/l10n/pt_PT.json
index 5a14b7a3a1b..a1500f4d827 100644
--- a/apps/files_sharing/l10n/pt_PT.json
+++ b/apps/files_sharing/l10n/pt_PT.json
@@ -6,9 +6,9 @@
"Shared with you" : "Partilhado consigo ",
"Shared with others" : "Partilhado com outros",
"Shared by link" : "Partilhado pela hiperligação",
- "No files have been shared with you yet." : "Ainda não partilhados quaisquer ficheuiros consigo.",
+ "No files have been shared with you yet." : "Ainda não foram partilhados quaisquer ficheiros consigo.",
"You haven't shared any files yet." : "Ainda não partilhou quaisquer ficheiros.",
- "You haven't shared any files by link yet." : "Ainda não partilhou quaisquer ficheiros por hiperligação.",
+ "You haven't shared any files by link yet." : "Ainda não partilhou quaisquer ficheiros através de hiperligação.",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Deseja adicionar a partilha remota {nome} de {proprietário}@{remoto}?",
"Remote share" : "Partilha remota",
"Remote share password" : "Senha da partilha remota",
diff --git a/apps/files_sharing/l10n/ru.js b/apps/files_sharing/l10n/ru.js
index f6a24253590..f8a73755cd1 100644
--- a/apps/files_sharing/l10n/ru.js
+++ b/apps/files_sharing/l10n/ru.js
@@ -33,6 +33,9 @@ OC.L10N.register(
"Add to your ownCloud" : "Добавить в свой ownCloud",
"Download" : "Скачать",
"Download %s" : "Скачать %s",
- "Direct link" : "Прямая ссылка"
+ "Direct link" : "Прямая ссылка",
+ "Server-to-Server Sharing" : "Общий доступ Сервер-Сервер",
+ "Allow users on this server to send shares to other servers" : "Разрешить пользователям на этом сервере отправлять файлы на другие сервера",
+ "Allow users on this server to receive shares from other servers" : "Разрешить пользователям на том сервере получать файлы с других серверов"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json
index 9eaf51586d4..ab20e0c3e92 100644
--- a/apps/files_sharing/l10n/ru.json
+++ b/apps/files_sharing/l10n/ru.json
@@ -31,6 +31,9 @@
"Add to your ownCloud" : "Добавить в свой ownCloud",
"Download" : "Скачать",
"Download %s" : "Скачать %s",
- "Direct link" : "Прямая ссылка"
+ "Direct link" : "Прямая ссылка",
+ "Server-to-Server Sharing" : "Общий доступ Сервер-Сервер",
+ "Allow users on this server to send shares to other servers" : "Разрешить пользователям на этом сервере отправлять файлы на другие сервера",
+ "Allow users on this server to receive shares from other servers" : "Разрешить пользователям на том сервере получать файлы с других серверов"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/sk.php b/apps/files_sharing/l10n/sk.php
deleted file mode 100644
index bc251c7fd59..00000000000
--- a/apps/files_sharing/l10n/sk.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Cancel" => "Zrušiť",
-"Download" => "Stiahnuť"
-);
-$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/apps/files_sharing/l10n/uk.js b/apps/files_sharing/l10n/uk.js
index a41afdceb71..e4506d34c62 100644
--- a/apps/files_sharing/l10n/uk.js
+++ b/apps/files_sharing/l10n/uk.js
@@ -33,6 +33,9 @@ OC.L10N.register(
"Add to your ownCloud" : "Додати до вашого ownCloud",
"Download" : "Завантажити",
"Download %s" : "Завантажити %s",
- "Direct link" : "Пряме посилання"
+ "Direct link" : "Пряме посилання",
+ "Server-to-Server Sharing" : "Публікація між серверами",
+ "Allow users on this server to send shares to other servers" : "Дозволити користувачам цього сервера публікувати на інших серверах",
+ "Allow users on this server to receive shares from other servers" : "Дозволити користувачам на цьому сервері отримувати публікації з інших серверів"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files_sharing/l10n/uk.json b/apps/files_sharing/l10n/uk.json
index a8d66aae2e9..4e85a0a459c 100644
--- a/apps/files_sharing/l10n/uk.json
+++ b/apps/files_sharing/l10n/uk.json
@@ -31,6 +31,9 @@
"Add to your ownCloud" : "Додати до вашого ownCloud",
"Download" : "Завантажити",
"Download %s" : "Завантажити %s",
- "Direct link" : "Пряме посилання"
+ "Direct link" : "Пряме посилання",
+ "Server-to-Server Sharing" : "Публікація між серверами",
+ "Allow users on this server to send shares to other servers" : "Дозволити користувачам цього сервера публікувати на інших серверах",
+ "Allow users on this server to receive shares from other servers" : "Дозволити користувачам на цьому сервері отримувати публікації з інших серверів"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files_sharing/lib/connector/publicauth.php b/apps/files_sharing/lib/connector/publicauth.php
index c9d545180b3..4144dafa379 100644
--- a/apps/files_sharing/lib/connector/publicauth.php
+++ b/apps/files_sharing/lib/connector/publicauth.php
@@ -48,12 +48,26 @@ class PublicAuth extends \Sabre\DAV\Auth\Backend\AbstractBasic {
if (isset($linkItem['share_with'])) {
if ($linkItem['share_type'] == \OCP\Share::SHARE_TYPE_LINK) {
// Check Password
- $forcePortable = (CRYPT_BLOWFISH != 1);
- $hasher = new \PasswordHash(8, $forcePortable);
- if (!$hasher->CheckPassword($password . $this->config->getSystemValue('passwordsalt', ''), $linkItem['share_with'])) {
- return false;
- } else {
+ $newHash = '';
+ if(\OC::$server->getHasher()->verify($password, $linkItem['share_with'], $newHash)) {
+ /**
+ * FIXME: Migrate old hashes to new hash format
+ * Due to the fact that there is no reasonable functionality to update the password
+ * of an existing share no migration is yet performed there.
+ * The only possibility is to update the existing share which will result in a new
+ * share ID and is a major hack.
+ *
+ * In the future the migration should be performed once there is a proper method
+ * to update the share's password. (for example `$share->updatePassword($password)`
+ *
+ * @link https://github.com/owncloud/core/issues/10671
+ */
+ if(!empty($newHash)) {
+
+ }
return true;
+ } else {
+ return false;
}
} else {
return false;
diff --git a/apps/files_sharing/lib/controllers/sharecontroller.php b/apps/files_sharing/lib/controllers/sharecontroller.php
new file mode 100644
index 00000000000..0a0594ed8ff
--- /dev/null
+++ b/apps/files_sharing/lib/controllers/sharecontroller.php
@@ -0,0 +1,270 @@
+<?php
+/**
+ * @author Clark Tomlinson <clark@owncloud.com>
+ * @author Lukas Reschke <lukas@owncloud.com>
+ * @copyright 2014 Clark Tomlinson & Lukas Reschke
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files_Sharing\Controllers;
+
+use OC;
+use OC\Files\Filesystem;
+use OC_Files;
+use OC_Util;
+use OCP;
+use OCP\Template;
+use OCP\JSON;
+use OCP\Share;
+use OCP\AppFramework\Controller;
+use OCP\IRequest;
+use OCP\AppFramework\Http\TemplateResponse;
+use OCP\AppFramework\Http\RedirectResponse;
+use OC\URLGenerator;
+use OC\AppConfig;
+use OCP\ILogger;
+use OCA\Files_Sharing\Helper;
+use OCP\User;
+use OCP\Util;
+
+/**
+ * Class ShareController
+ *
+ * @package OCA\Files_Sharing\Controllers
+ */
+class ShareController extends Controller {
+
+ /** @var \OC\User\Session */
+ protected $userSession;
+ /** @var \OC\AppConfig */
+ protected $appConfig;
+ /** @var \OCP\IConfig */
+ protected $config;
+ /** @var \OC\URLGenerator */
+ protected $urlGenerator;
+ /** @var \OC\User\Manager */
+ protected $userManager;
+ /** @var \OCP\ILogger */
+ protected $logger;
+
+ /**
+ * @param string $appName
+ * @param IRequest $request
+ * @param OC\User\Session $userSession
+ * @param AppConfig $appConfig
+ * @param OCP\IConfig $config
+ * @param URLGenerator $urlGenerator
+ * @param OC\User\Manager $userManager
+ * @param ILogger $logger
+ */
+ public function __construct($appName,
+ IRequest $request,
+ OC\User\Session $userSession,
+ AppConfig $appConfig,
+ OCP\IConfig $config,
+ URLGenerator $urlGenerator,
+ OC\User\Manager $userManager,
+ ILogger $logger) {
+ parent::__construct($appName, $request);
+
+ $this->userSession = $userSession;
+ $this->appConfig = $appConfig;
+ $this->config = $config;
+ $this->urlGenerator = $urlGenerator;
+ $this->userManager = $userManager;
+ $this->logger = $logger;
+ }
+
+ /**
+ * @PublicPage
+ * @NoCSRFRequired
+ *
+ * @param string $token
+ * @return TemplateResponse|RedirectResponse
+ */
+ public function showAuthenticate($token) {
+ $linkItem = Share::getShareByToken($token, false);
+
+ if(Helper::authenticate($linkItem)) {
+ return new RedirectResponse($this->urlGenerator->linkToRoute('files_sharing.sharecontroller.showShare', array('token' => $token)));
+ }
+
+ return new TemplateResponse($this->appName, 'authenticate', array(), 'guest');
+ }
+
+ /**
+ * @PublicPage
+ * @UseSession
+ *
+ * Authenticates against password-protected shares
+ * @param $token
+ * @param string $password
+ * @return RedirectResponse|TemplateResponse
+ */
+ public function authenticate($token, $password = '') {
+ $linkItem = Share::getShareByToken($token, false);
+ if($linkItem === false) {
+ return new TemplateResponse('core', '404', array(), 'guest');
+ }
+
+ $authenticate = Helper::authenticate($linkItem, $password);
+
+ if($authenticate === true) {
+ return new RedirectResponse($this->urlGenerator->linkToRoute('files_sharing.sharecontroller.showShare', array('token' => $token)));
+ }
+
+ return new TemplateResponse($this->appName, 'authenticate', array('wrongpw' => true), 'guest');
+ }
+
+ /**
+ * @PublicPage
+ * @NoCSRFRequired
+ *
+ * @param string $token
+ * @param string $path
+ * @return TemplateResponse
+ */
+ public function showShare($token, $path = '') {
+ \OC_User::setIncognitoMode(true);
+
+ // Check whether share exists
+ $linkItem = Share::getShareByToken($token, false);
+ if($linkItem === false) {
+ return new TemplateResponse('core', '404', array(), 'guest');
+ }
+
+ $linkItem = OCP\Share::getShareByToken($token, false);
+ $shareOwner = $linkItem['uid_owner'];
+ $originalSharePath = null;
+ $rootLinkItem = OCP\Share::resolveReShare($linkItem);
+ if (isset($rootLinkItem['uid_owner'])) {
+ OCP\JSON::checkUserExists($rootLinkItem['uid_owner']);
+ OC_Util::tearDownFS();
+ OC_Util::setupFS($rootLinkItem['uid_owner']);
+ $originalSharePath = Filesystem::getPath($linkItem['file_source']);
+ }
+
+ // Share is password protected - check whether the user is permitted to access the share
+ if (isset($linkItem['share_with']) && !Helper::authenticate($linkItem)) {
+ return new RedirectResponse($this->urlGenerator->linkToRoute('files_sharing.sharecontroller.authenticate',
+ array('token' => $token)));
+ }
+
+ if (Filesystem::isReadable($originalSharePath . $path)) {
+ $getPath = Filesystem::normalizePath($path);
+ $originalSharePath .= $path;
+ }
+
+ $file = basename($originalSharePath);
+
+ $shareTmpl = array();
+ $shareTmpl['displayName'] = User::getDisplayName($shareOwner);
+ $shareTmpl['filename'] = $file;
+ $shareTmpl['directory_path'] = $linkItem['file_target'];
+ $shareTmpl['mimetype'] = Filesystem::getMimeType($originalSharePath);
+ $shareTmpl['dirToken'] = $linkItem['token'];
+ $shareTmpl['sharingToken'] = $token;
+ $shareTmpl['server2serversharing'] = Helper::isOutgoingServer2serverShareEnabled();
+ $shareTmpl['protected'] = isset($linkItem['share_with']) ? 'true' : 'false';
+ $shareTmpl['dir'] = '';
+ $shareTmpl['fileSize'] = \OCP\Util::humanFileSize(\OC\Files\Filesystem::filesize($originalSharePath));
+
+ // Show file list
+ if (Filesystem::is_dir($originalSharePath)) {
+ $shareTmpl['dir'] = $getPath;
+ $files = array();
+ $maxUploadFilesize = Util::maxUploadFilesize($originalSharePath);
+ $freeSpace = Util::freeSpace($originalSharePath);
+ $uploadLimit = Util::uploadLimit();
+ $folder = new Template('files', 'list', '');
+ $folder->assign('dir', $getPath);
+ $folder->assign('dirToken', $linkItem['token']);
+ $folder->assign('permissions', \OCP\Constants::PERMISSION_READ);
+ $folder->assign('isPublic', true);
+ $folder->assign('publicUploadEnabled', 'no');
+ $folder->assign('files', $files);
+ $folder->assign('uploadMaxFilesize', $maxUploadFilesize);
+ $folder->assign('uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize));
+ $folder->assign('freeSpace', $freeSpace);
+ $folder->assign('uploadLimit', $uploadLimit); // PHP upload limit
+ $folder->assign('usedSpacePercent', 0);
+ $folder->assign('trash', false);
+ $shareTmpl['folder'] = $folder->fetchPage();
+ }
+
+ $shareTmpl['downloadURL'] = $this->urlGenerator->linkToRouteAbsolute('files_sharing.sharecontroller.downloadShare', array('token' => $token));
+
+ return new TemplateResponse($this->appName, 'public', $shareTmpl, 'base');
+ }
+
+ /**
+ * @PublicPage
+ * @NoCSRFRequired
+ *
+ * @param string $token
+ * @param string $files
+ * @param string $path
+ * @return void|RedirectResponse
+ */
+ public function downloadShare($token, $files = null, $path = '') {
+ \OC_User::setIncognitoMode(true);
+
+ $linkItem = OCP\Share::getShareByToken($token, false);
+
+ // Share is password protected - check whether the user is permitted to access the share
+ if (isset($linkItem['share_with'])) {
+ if(!Helper::authenticate($linkItem)) {
+ return new RedirectResponse($this->urlGenerator->linkToRoute('files_sharing.sharecontroller.authenticate',
+ array('token' => $token)));
+ }
+ }
+
+ $originalSharePath = self::getPath($token);
+
+ if (isset($originalSharePath) && Filesystem::isReadable($originalSharePath . $path)) {
+ $getPath = Filesystem::normalizePath($path);
+ $originalSharePath .= $getPath;
+ }
+
+ if (!is_null($files)) { // download selected files
+ $files_list = json_decode($files);
+ // in case we get only a single file
+ if ($files_list === NULL ) {
+ $files_list = array($files);
+ }
+
+ // FIXME: The exit is required here because otherwise the AppFramework is trying to add headers as well
+ // after dispatching the request which results in a "Cannot modify header information" notice.
+ OC_Files::get($originalSharePath, $files_list, $_SERVER['REQUEST_METHOD'] == 'HEAD');
+ exit();
+ } else {
+ // FIXME: The exit is required here because otherwise the AppFramework is trying to add headers as well
+ // after dispatching the request which results in a "Cannot modify header information" notice.
+ OC_Files::get(dirname($originalSharePath), basename($originalSharePath), $_SERVER['REQUEST_METHOD'] == 'HEAD');
+ exit();
+ }
+ }
+
+ /**
+ * @param $token
+ * @return null|string
+ */
+ private function getPath($token) {
+ $linkItem = Share::getShareByToken($token, false);
+ $path = null;
+ if (is_array($linkItem) && isset($linkItem['uid_owner'])) {
+ // seems to be a valid share
+ $rootLinkItem = Share::resolveReShare($linkItem);
+ if (isset($rootLinkItem['uid_owner'])) {
+ JSON::checkUserExists($rootLinkItem['uid_owner']);
+ OC_Util::tearDownFS();
+ OC_Util::setupFS($rootLinkItem['uid_owner']);
+ $path = Filesystem::getPath($linkItem['file_source']);
+ }
+ }
+ return $path;
+ }
+}
diff --git a/apps/files_sharing/lib/helper.php b/apps/files_sharing/lib/helper.php
index e7ca4fcccd4..f7204a8db8f 100644
--- a/apps/files_sharing/lib/helper.php
+++ b/apps/files_sharing/lib/helper.php
@@ -3,7 +3,6 @@
namespace OCA\Files_Sharing;
use OC_Config;
-use PasswordHash;
class Helper {
@@ -95,18 +94,32 @@ class Helper {
*
* @return boolean true if authorized, false otherwise
*/
- public static function authenticate($linkItem, $password) {
+ public static function authenticate($linkItem, $password = null) {
if ($password !== null) {
if ($linkItem['share_type'] == \OCP\Share::SHARE_TYPE_LINK) {
// Check Password
- $forcePortable = (CRYPT_BLOWFISH != 1);
- $hasher = new PasswordHash(8, $forcePortable);
- if (!($hasher->CheckPassword($password.OC_Config::getValue('passwordsalt', ''),
- $linkItem['share_with']))) {
- return false;
- } else {
+ $newHash = '';
+ if(\OC::$server->getHasher()->verify($password, $linkItem['share_with'], $newHash)) {
// Save item id in session for future requests
\OC::$server->getSession()->set('public_link_authenticated', $linkItem['id']);
+
+ /**
+ * FIXME: Migrate old hashes to new hash format
+ * Due to the fact that there is no reasonable functionality to update the password
+ * of an existing share no migration is yet performed there.
+ * The only possibility is to update the existing share which will result in a new
+ * share ID and is a major hack.
+ *
+ * In the future the migration should be performed once there is a proper method
+ * to update the share's password. (for example `$share->updatePassword($password)`
+ *
+ * @link https://github.com/owncloud/core/issues/10671
+ */
+ if(!empty($newHash)) {
+
+ }
+ } else {
+ return false;
}
} else {
\OCP\Util::writeLog('share', 'Unknown share type '.$linkItem['share_type']
diff --git a/apps/files_sharing/lib/middleware/sharingcheckmiddleware.php b/apps/files_sharing/lib/middleware/sharingcheckmiddleware.php
new file mode 100644
index 00000000000..af79cd9e94a
--- /dev/null
+++ b/apps/files_sharing/lib/middleware/sharingcheckmiddleware.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * @author Lukas Reschke
+ * @copyright 2014 Lukas Reschke lukas@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files_Sharing\Middleware;
+
+use OCP\AppFramework\IApi;
+use \OCP\AppFramework\Middleware;
+use OCP\AppFramework\Http\TemplateResponse;
+use OCP\IAppConfig;
+
+/**
+ * Checks whether the "sharing check" is enabled
+ *
+ * @package OCA\Files_Sharing\Middleware
+ */
+class SharingCheckMiddleware extends Middleware {
+
+ /** @var string */
+ protected $appName;
+ /** @var IAppConfig */
+ protected $appConfig;
+ /** @var IApi */
+ protected $api;
+
+ /***
+ * @param string $appName
+ * @param IAppConfig $appConfig
+ * @param IApi $api
+ */
+ public function __construct($appName,
+ IAppConfig $appConfig,
+ IApi $api) {
+ $this->appName = $appName;
+ $this->appConfig = $appConfig;
+ $this->api = $api;
+ }
+
+ /**
+ * Check if sharing is enabled before the controllers is executed
+ */
+ public function beforeController($controller, $methodName) {
+ if(!$this->isSharingEnabled()) {
+ throw new \Exception('Sharing is disabled.');
+ }
+ }
+
+ /**
+ * Return 404 page in case of an exception
+ * @param \OCP\AppFramework\Controller $controller
+ * @param string $methodName
+ * @param \Exception $exception
+ * @return TemplateResponse
+ */
+ public function afterException($controller, $methodName, \Exception $exception){
+ return new TemplateResponse('core', '404', array(), 'guest');
+ }
+
+ /**
+ * Check whether sharing is enabled
+ * @return bool
+ */
+ private function isSharingEnabled() {
+ // FIXME: This check is done here since the route is globally defined and not inside the files_sharing app
+ // Check whether the sharing application is enabled
+ if(!$this->api->isAppEnabled($this->appName)) {
+ return false;
+ }
+
+ // Check whether public sharing is enabled
+ if($this->appConfig->getValue('core', 'shareapi_allow_links', 'yes') !== 'yes') {
+ return false;
+ }
+
+ return true;
+ }
+
+}
diff --git a/apps/files_sharing/lib/readonlycache.php b/apps/files_sharing/lib/readonlycache.php
index f129ca49433..6dd3b9cf61d 100644
--- a/apps/files_sharing/lib/readonlycache.php
+++ b/apps/files_sharing/lib/readonlycache.php
@@ -13,14 +13,14 @@ use OC\Files\Cache\Cache;
class ReadOnlyCache extends Cache {
public function get($path) {
$data = parent::get($path);
- $data['permissions'] &= (\OCP\PERMISSION_READ | \OCP\PERMISSION_SHARE);
+ $data['permissions'] &= (\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE);
return $data;
}
public function getFolderContents($path) {
$content = parent::getFolderContents($path);
foreach ($content as &$data) {
- $data['permissions'] &= (\OCP\PERMISSION_READ | \OCP\PERMISSION_SHARE);
+ $data['permissions'] &= (\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE);
}
return $content;
}
diff --git a/apps/files_sharing/lib/readonlywrapper.php b/apps/files_sharing/lib/readonlywrapper.php
index 45ed3fd68bb..58a5695aff8 100644
--- a/apps/files_sharing/lib/readonlywrapper.php
+++ b/apps/files_sharing/lib/readonlywrapper.php
@@ -24,7 +24,7 @@ class ReadOnlyWrapper extends Wrapper {
}
public function getPermissions($path) {
- return $this->storage->getPermissions($path) & (\OCP\PERMISSION_READ | \OCP\PERMISSION_SHARE);
+ return $this->storage->getPermissions($path) & (\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE);
}
public function rename($path1, $path2) {
diff --git a/apps/files_sharing/lib/share/folder.php b/apps/files_sharing/lib/share/folder.php
index 2671f5738b7..f86e9624432 100644
--- a/apps/files_sharing/lib/share/folder.php
+++ b/apps/files_sharing/lib/share/folder.php
@@ -26,13 +26,14 @@ class OC_Share_Backend_Folder extends OC_Share_Backend_File implements OCP\Share
*
* @param int $itemSource item source ID
* @param string $shareWith with whom should the item be shared
+ * @param string $owner owner of the item
* @return array with shares
*/
- public function getParents($itemSource, $shareWith = null) {
+ public function getParents($itemSource, $shareWith = null, $owner = null) {
$result = array();
$parent = $this->getParentId($itemSource);
while ($parent) {
- $shares = \OCP\Share::getItemSharedWithUser('folder', $parent, $shareWith);
+ $shares = \OCP\Share::getItemSharedWithUser('folder', $parent, $shareWith, $owner);
if ($shares) {
foreach ($shares as $share) {
$name = substr($share['path'], strrpos($share['path'], '/') + 1);
diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php
index 19ee6085e47..1ac57053e25 100644
--- a/apps/files_sharing/lib/sharedstorage.php
+++ b/apps/files_sharing/lib/sharedstorage.php
@@ -67,7 +67,7 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
if ($source) {
$source['path'] .= '.part';
// All partial files have delete permission
- $source['permissions'] |= \OCP\PERMISSION_DELETE;
+ $source['permissions'] |= \OCP\Constants::PERMISSION_DELETE;
}
} else {
$source = \OC_Share_Backend_File::getSource($target, $this->getMountPoint(), $this->getItemType());
@@ -109,11 +109,11 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
$permissions = $this->share['permissions'];
// part files and the mount point always have delete permissions
if ($target === '' || pathinfo($target, PATHINFO_EXTENSION) === 'part') {
- $permissions |= \OCP\PERMISSION_DELETE;
+ $permissions |= \OCP\Constants::PERMISSION_DELETE;
}
if (\OC_Util::isSharingDisabledForUser()) {
- $permissions &= ~\OCP\PERMISSION_SHARE;
+ $permissions &= ~\OCP\Constants::PERMISSION_SHARE;
}
return $permissions;
@@ -197,7 +197,7 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
}
public function isCreatable($path) {
- return ($this->getPermissions($path) & \OCP\PERMISSION_CREATE);
+ return ($this->getPermissions($path) & \OCP\Constants::PERMISSION_CREATE);
}
public function isReadable($path) {
@@ -205,18 +205,18 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
}
public function isUpdatable($path) {
- return ($this->getPermissions($path) & \OCP\PERMISSION_UPDATE);
+ return ($this->getPermissions($path) & \OCP\Constants::PERMISSION_UPDATE);
}
public function isDeletable($path) {
- return ($this->getPermissions($path) & \OCP\PERMISSION_DELETE);
+ return ($this->getPermissions($path) & \OCP\Constants::PERMISSION_DELETE);
}
public function isSharable($path) {
if (\OCP\Util::isSharingDisabledForUser()) {
return false;
}
- return ($this->getPermissions($path) & \OCP\PERMISSION_SHARE);
+ return ($this->getPermissions($path) & \OCP\Constants::PERMISSION_SHARE);
}
public function file_exists($path) {
diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php
index 4320c105103..d9d14f67c33 100644
--- a/apps/files_sharing/public.php
+++ b/apps/files_sharing/public.php
@@ -1,205 +1,17 @@
<?php
-// Load other apps for file previews
-use OCA\Files_Sharing\Helper;
-
-OC_App::loadApps();
-
-$appConfig = \OC::$server->getAppConfig();
-
-if ($appConfig->getValue('core', 'shareapi_allow_links', 'yes') !== 'yes') {
- header('HTTP/1.0 404 Not Found');
- $tmpl = new OCP\Template('', '404', 'guest');
- $tmpl->printPage();
- exit();
-}
-
-// Legacy sharing links via public.php have the token in $GET['t']
-if (isset($_GET['t'])) {
- $token = $_GET['t'];
-}
-
-if (isset($token)) {
- $linkItem = OCP\Share::getShareByToken($token, false);
- if (is_array($linkItem) && isset($linkItem['uid_owner'])) {
- // seems to be a valid share
- $type = $linkItem['item_type'];
- $fileSource = $linkItem['file_source'];
- $shareOwner = $linkItem['uid_owner'];
- $path = null;
- $rootLinkItem = OCP\Share::resolveReShare($linkItem);
- if (isset($rootLinkItem['uid_owner'])) {
- OCP\JSON::checkUserExists($rootLinkItem['uid_owner']);
- OC_Util::tearDownFS();
- OC_Util::setupFS($rootLinkItem['uid_owner']);
- $path = \OC\Files\Filesystem::getPath($linkItem['file_source']);
- }
- }
-}
-if (isset($path)) {
- if (!isset($linkItem['item_type'])) {
- OCP\Util::writeLog('share', 'No item type set for share id: ' . $linkItem['id'], \OCP\Util::ERROR);
- header('HTTP/1.0 404 Not Found');
- $tmpl = new OCP\Template('', '404', 'guest');
- $tmpl->printPage();
- exit();
- }
- if (isset($linkItem['share_with'])) {
- // Authenticate share_with
- $url = OCP\Util::linkToPublic('files') . '&t=' . $token;
- if (isset($_GET['file'])) {
- $url .= '&file=' . urlencode($_GET['file']);
- } else {
- if (isset($_GET['dir'])) {
- $url .= '&dir=' . urlencode($_GET['dir']);
- }
- }
- if (isset($_POST['password'])) {
- $password = $_POST['password'];
- if ($linkItem['share_type'] == OCP\Share::SHARE_TYPE_LINK) {
- // Check Password
- $forcePortable = (CRYPT_BLOWFISH != 1);
- $hasher = new PasswordHash(8, $forcePortable);
- if (!($hasher->CheckPassword($password.OC_Config::getValue('passwordsalt', ''),
- $linkItem['share_with']))) {
- OCP\Util::addStyle('files_sharing', 'authenticate');
- $tmpl = new OCP\Template('files_sharing', 'authenticate', 'guest');
- $tmpl->assign('URL', $url);
- $tmpl->assign('wrongpw', true);
- $tmpl->printPage();
- exit();
- } else {
- // Save item id in session for future requests
- \OC::$server->getSession()->set('public_link_authenticated', $linkItem['id']);
- }
- } else {
- OCP\Util::writeLog('share', 'Unknown share type '.$linkItem['share_type']
- .' for share id '.$linkItem['id'], \OCP\Util::ERROR);
- header('HTTP/1.0 404 Not Found');
- $tmpl = new OCP\Template('', '404', 'guest');
- $tmpl->printPage();
- exit();
- }
-
- } else {
- // Check if item id is set in session
- if ( ! \OC::$server->getSession()->exists('public_link_authenticated')
- || \OC::$server->getSession()->get('public_link_authenticated') !== $linkItem['id']
- ) {
- // Prompt for password
- OCP\Util::addStyle('files_sharing', 'authenticate');
- $tmpl = new OCP\Template('files_sharing', 'authenticate', 'guest');
- $tmpl->assign('URL', $url);
- $tmpl->printPage();
- exit();
- }
- }
- }
- $basePath = $path;
- $rootName = \OC_Util::basename($path);
- if (isset($_GET['path']) && \OC\Files\Filesystem::isReadable($basePath . $_GET['path'])) {
- $getPath = \OC\Files\Filesystem::normalizePath($_GET['path']);
- $path .= $getPath;
- } else {
- $getPath = '';
- }
- $dir = dirname($path);
- $file = basename($path);
- // Download the file
- if (isset($_GET['download'])) {
- if (!\OCP\App::isEnabled('files_encryption')) {
- // encryption app requires the session to store the keys in
- \OC::$server->getSession()->close();
- }
- if (isset($_GET['files'])) { // download selected files
- $files = $_GET['files'];
- $files_list = json_decode($files);
- // in case we get only a single file
- if (!is_array($files_list)) {
- $files_list = array($files);
- }
- OC_Files::get($path, $files_list, $_SERVER['REQUEST_METHOD'] == 'HEAD');
- } else {
- OC_Files::get($dir, $file, $_SERVER['REQUEST_METHOD'] == 'HEAD');
- }
- exit();
- } else {
- OCP\Util::addScript('files', 'file-upload');
- OCP\Util::addStyle('files_sharing', 'public');
- OCP\Util::addStyle('files_sharing', 'mobile');
- OCP\Util::addScript('files_sharing', 'public');
- OCP\Util::addScript('files', 'fileactions');
- OCP\Util::addScript('files', 'jquery.iframe-transport');
- OCP\Util::addScript('files', 'jquery.fileupload');
- $maxUploadFilesize=OCP\Util::maxUploadFilesize($path);
- $tmpl = new OCP\Template('files_sharing', 'public', 'base');
- $tmpl->assign('displayName', \OCP\User::getDisplayName($shareOwner));
- $tmpl->assign('filename', $file);
- $tmpl->assign('directory_path', $linkItem['file_target']);
- $tmpl->assign('mimetype', \OC\Files\Filesystem::getMimeType($path));
- $tmpl->assign('dirToken', $linkItem['token']);
- $tmpl->assign('sharingToken', $token);
- $tmpl->assign('server2serversharing', Helper::isOutgoingServer2serverShareEnabled());
- $tmpl->assign('protected', isset($linkItem['share_with']) ? 'true' : 'false');
-
- $urlLinkIdentifiers= (isset($token)?'&t='.$token:'')
- .(isset($_GET['dir'])?'&dir='.$_GET['dir']:'')
- .(isset($_GET['file'])?'&file='.$_GET['file']:'');
- // Show file list
- if (\OC\Files\Filesystem::is_dir($path)) {
- $tmpl->assign('dir', $getPath);
-
- OCP\Util::addStyle('files', 'files');
- OCP\Util::addStyle('files', 'upload');
- OCP\Util::addScript('files', 'filesummary');
- OCP\Util::addScript('files', 'breadcrumb');
- OCP\Util::addScript('files', 'files');
- OCP\Util::addScript('files', 'filelist');
- OCP\Util::addscript('files', 'keyboardshortcuts');
- $files = array();
- $rootLength = strlen($basePath) + 1;
- $maxUploadFilesize=OCP\Util::maxUploadFilesize($path);
-
- $freeSpace=OCP\Util::freeSpace($path);
- $uploadLimit=OCP\Util::uploadLimit();
- $folder = new OCP\Template('files', 'list', '');
- $folder->assign('dir', $getPath);
- $folder->assign('dirToken', $linkItem['token']);
- $folder->assign('permissions', OCP\PERMISSION_READ);
- $folder->assign('isPublic', true);
- $folder->assign('publicUploadEnabled', 'no');
- $folder->assign('files', $files);
- $folder->assign('uploadMaxFilesize', $maxUploadFilesize);
- $folder->assign('uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize));
- $folder->assign('freeSpace', $freeSpace);
- $folder->assign('uploadLimit', $uploadLimit); // PHP upload limit
- $folder->assign('usedSpacePercent', 0);
- $folder->assign('trash', false);
- $tmpl->assign('folder', $folder->fetchPage());
- $tmpl->assign('downloadURL',
- OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download&path=' . urlencode($getPath));
- } else {
- $tmpl->assign('dir', $dir);
-
- // Show file preview if viewer is available
- if ($type == 'file') {
- $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download');
- } else {
- $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files')
- .$urlLinkIdentifiers.'&download&path='.urlencode($getPath));
- }
- }
- $tmpl->printPage();
- }
- exit();
-} else {
- OCP\Util::writeLog('share', 'could not resolve linkItem', \OCP\Util::DEBUG);
-}
-
-$errorTemplate = new OCP\Template('files_sharing', 'part.404', '');
-$errorContent = $errorTemplate->fetchPage();
-
-header('HTTP/1.0 404 Not Found');
-OCP\Util::addStyle('files_sharing', '404');
-$tmpl = new OCP\Template('', '404', 'guest');
-$tmpl->assign('content', $errorContent);
-$tmpl->printPage();
+/**
+ * @author Lukas Reschke
+ * @copyright 2014 Lukas Reschke lukas@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+// This file is just used to redirect the legacy sharing URLs (< ownCloud 8) to the new ones
+
+$urlGenerator = new \OC\URLGenerator(\OC::$server->getConfig());
+$token = isset($_GET['t']) ? $_GET['t'] : '';
+$route = isset($_GET['download']) ? 'files_sharing.sharecontroller.downloadShare' : 'files_sharing.sharecontroller.showShare';
+
+OC_Response::redirect($urlGenerator->linkToRoute($route, array('token' => $token)));
diff --git a/apps/files_sharing/publicwebdav.php b/apps/files_sharing/publicwebdav.php
index 03e43967a40..2c7ccf8d92c 100644
--- a/apps/files_sharing/publicwebdav.php
+++ b/apps/files_sharing/publicwebdav.php
@@ -41,7 +41,7 @@ $server->addPlugin(new OC_Connector_Sabre_ExceptionLoggerPlugin('webdav'));
$server->subscribeEvent('beforeMethod', function () use ($server, $objectTree, $authBackend) {
$share = $authBackend->getShare();
$owner = $share['uid_owner'];
- $isWritable = $share['permissions'] & (\OCP\PERMISSION_UPDATE | \OCP\PERMISSION_CREATE);
+ $isWritable = $share['permissions'] & (\OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_CREATE);
$fileId = $share['file_source'];
if (!$isWritable) {
diff --git a/apps/files_sharing/templates/authenticate.php b/apps/files_sharing/templates/authenticate.php
index 0c4ac6ca445..e3aa62b9ece 100644
--- a/apps/files_sharing/templates/authenticate.php
+++ b/apps/files_sharing/templates/authenticate.php
@@ -1,4 +1,9 @@
-<form action="<?php p($_['URL']); ?>" method="post">
+<?php
+ /** @var $_ array */
+ /** @var $l OC_L10N */
+ style('files_sharing', 'authenticate');
+?>
+<form method="post">
<fieldset>
<?php if (!isset($_['wrongpw'])): ?>
<div class="warning-info"><?php p($l->t('This share is password-protected')); ?></div>
@@ -8,6 +13,7 @@
<?php endif; ?>
<p>
<label for="password" class="infield"><?php p($l->t('Password')); ?></label>
+ <input type="hidden" name="requesttoken" value="<?php p($_['requesttoken']) ?>" />
<input type="password" name="password" id="password"
placeholder="<?php p($l->t('Password')); ?>" value=""
autocomplete="off" autocapitalize="off" autocorrect="off"
diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php
index 46bf90b1b41..57c8707e962 100644
--- a/apps/files_sharing/templates/public.php
+++ b/apps/files_sharing/templates/public.php
@@ -1,8 +1,28 @@
-<?php /** @var $l OC_L10N */ ?>
<?php
+/** @var $l OC_L10N */
+/** @var $_ array */
+
+OCP\Util::addScript('files', 'file-upload');
+OCP\Util::addStyle('files_sharing', 'public');
+OCP\Util::addStyle('files_sharing', 'mobile');
+OCP\Util::addScript('files_sharing', 'public');
+OCP\Util::addScript('files', 'fileactions');
+OCP\Util::addScript('files', 'jquery.iframe-transport');
+OCP\Util::addScript('files', 'jquery.fileupload');
+
+// JS required for folders
+OCP\Util::addStyle('files', 'files');
+OCP\Util::addStyle('files', 'upload');
+OCP\Util::addScript('files', 'filesummary');
+OCP\Util::addScript('files', 'breadcrumb');
+OCP\Util::addScript('files', 'files');
+OCP\Util::addScript('files', 'filelist');
+OCP\Util::addscript('files', 'keyboardshortcuts');
+
$thumbSize=1024;
$previewSupported = OC\Preview::isMimeSupported($_['mimetype']) ? 'true' : 'false';
?>
+
<?php if ( \OC\Preview::isMimeSupported($_['mimetype'])): /* This enables preview images for links (e.g. on Facebook, Google+, ...)*/?>
<link rel="image_src" href="<?php p(OCP\Util::linkToRoute( 'core_ajax_public_preview', array('x' => $thumbSize, 'y' => $thumbSize, 'file' => $_['directory_path'], 't' => $_['dirToken']))); ?>" />
<?php endif; ?>
@@ -24,7 +44,7 @@ $previewSupported = OC\Preview::isMimeSupported($_['mimetype']) ? 'true' : 'fals
<header><div id="header" class="<?php p((isset($_['folder']) ? 'share-folder' : 'share-file')) ?>">
<a href="<?php print_unescaped(link_to('', 'index.php')); ?>"
- title="" id="owncloud">
+ title="" id="owncloud">
<div class="logo-wide svg"></div>
</a>
<div id="logo-claim" style="display:none;"><?php p($theme->getLogoClaim()); ?></div>
@@ -48,7 +68,7 @@ $previewSupported = OC\Preview::isMimeSupported($_['mimetype']) ? 'true' : 'fals
</a>
</span>
</div>
-</div></header>
+ </div></header>
<div id="content">
<div id="preview">
<?php if (isset($_['folder'])): ?>
@@ -67,7 +87,7 @@ $previewSupported = OC\Preview::isMimeSupported($_['mimetype']) ? 'true' : 'fals
<div class="directDownload">
<a href="<?php p($_['downloadURL']); ?>" id="download" class="button">
<img class="svg" alt="" src="<?php print_unescaped(OCP\image_path("core", "actions/download.svg")); ?>"/>
- <?php p($l->t('Download %s', array($_['filename'])))?>
+ <?php p($l->t('Download %s', array($_['filename'])))?> (<?php p($_['fileSize']) ?>)
</a>
</div>
<div class="directLink">
diff --git a/apps/files_sharing/tests/api.php b/apps/files_sharing/tests/api.php
index 453133fee31..1259197423b 100644
--- a/apps/files_sharing/tests/api.php
+++ b/apps/files_sharing/tests/api.php
@@ -32,7 +32,7 @@ class Test_Files_Sharing_Api extends TestCase {
private static $tempStorage;
- function setUp() {
+ protected function setUp() {
parent::setUp();
\OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups', 'no');
@@ -53,7 +53,7 @@ class Test_Files_Sharing_Api extends TestCase {
$this->view->file_put_contents($this->folder . $this->subfolder . $this->filename, $this->data);
}
- function tearDown() {
+ protected function tearDown() {
if($this->view instanceof \OC\Files\View) {
$this->view->unlink($this->filename);
$this->view->deleteAll($this->folder);
@@ -788,7 +788,7 @@ class Test_Files_Sharing_Api extends TestCase {
$fileInfo = $this->view->getFileInfo($this->filename);
$result = \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER,
- \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2, \OCP\PERMISSION_ALL);
+ \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2, \OCP\Constants::PERMISSION_ALL);
// share was successful?
$this->assertTrue($result);
@@ -822,7 +822,7 @@ class Test_Files_Sharing_Api extends TestCase {
// check if share have expected permissions, single shared files never have
// delete permissions
- $this->assertEquals(\OCP\PERMISSION_ALL & ~\OCP\PERMISSION_DELETE, $userShare['permissions']);
+ $this->assertEquals(\OCP\Constants::PERMISSION_ALL & ~\OCP\Constants::PERMISSION_DELETE, $userShare['permissions']);
// update permissions
@@ -1228,7 +1228,7 @@ class Test_Files_Sharing_Api extends TestCase {
$info = OC\Files\Filesystem::getFileInfo($this->filename);
$this->assertTrue($info instanceof \OC\Files\FileInfo);
- $result = \OCP\Share::shareItem('file', $info->getId(), \OCP\Share::SHARE_TYPE_LINK, null, \OCP\PERMISSION_READ);
+ $result = \OCP\Share::shareItem('file', $info->getId(), \OCP\Share::SHARE_TYPE_LINK, null, \OCP\Constants::PERMISSION_READ);
$this->assertTrue(is_string($result));
$result = \OCP\Share::shareItem('file', $info->getId(), \OCP\Share::SHARE_TYPE_USER, \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2, 31);
diff --git a/apps/files_sharing/tests/backend.php b/apps/files_sharing/tests/backend.php
index e113c940678..5cf2a22c792 100644
--- a/apps/files_sharing/tests/backend.php
+++ b/apps/files_sharing/tests/backend.php
@@ -34,7 +34,7 @@ class Test_Files_Sharing_Backend extends TestCase {
public $subfolder;
public $subsubfolder;
- function setUp() {
+ protected function setUp() {
parent::setUp();
$this->folder = self::TEST_FOLDER_NAME;
@@ -53,7 +53,7 @@ class Test_Files_Sharing_Backend extends TestCase {
$this->view->file_put_contents($this->folder . $this->subfolder . $this->subsubfolder . $this->filename, $this->data);
}
- function tearDown() {
+ protected function tearDown() {
$this->view->unlink($this->filename);
$this->view->deleteAll($this->folder);
diff --git a/apps/files_sharing/tests/cache.php b/apps/files_sharing/tests/cache.php
index 2c9790ce66d..aec1983bad3 100644
--- a/apps/files_sharing/tests/cache.php
+++ b/apps/files_sharing/tests/cache.php
@@ -30,7 +30,19 @@ class Test_Files_Sharing_Cache extends TestCase {
*/
public $user2View;
- function setUp() {
+ /** @var \OC\Files\Cache\Cache */
+ protected $ownerCache;
+
+ /** @var \OC\Files\Cache\Cache */
+ protected $sharedCache;
+
+ /** @var \OC\Files\Storage\Storage */
+ protected $ownerStorage;
+
+ /** @var \OC\Files\Storage\Storage */
+ protected $sharedStorage;
+
+ protected function setUp() {
parent::setUp();
\OC_User::setDisplayName(self::TEST_FILES_SHARING_API_USER1, 'User One');
@@ -54,7 +66,7 @@ class Test_Files_Sharing_Cache extends TestCase {
$this->view->file_put_contents('container/shareddir/subdir/another too.txt', $textData);
$this->view->file_put_contents('container/shareddir/subdir/not a text file.xml', '<xml></xml>');
- list($this->ownerStorage, $internalPath) = $this->view->resolvePath('');
+ list($this->ownerStorage,) = $this->view->resolvePath('');
$this->ownerCache = $this->ownerStorage->getCache();
$this->ownerStorage->getScanner()->scan('');
@@ -72,11 +84,11 @@ class Test_Files_Sharing_Cache extends TestCase {
// retrieve the shared storage
$secondView = new \OC\Files\View('/' . self::TEST_FILES_SHARING_API_USER2);
- list($this->sharedStorage, $internalPath) = $secondView->resolvePath('files/shareddir');
+ list($this->sharedStorage,) = $secondView->resolvePath('files/shareddir');
$this->sharedCache = $this->sharedStorage->getCache();
}
- function tearDown() {
+ protected function tearDown() {
$this->sharedCache->clear();
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
@@ -336,7 +348,7 @@ class Test_Files_Sharing_Cache extends TestCase {
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
\OC\Files\Filesystem::file_put_contents('test.txt', 'foo');
$info = \OC\Files\Filesystem::getFileInfo('test.txt');
- \OCP\Share::shareItem('file', $info->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, \OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $info->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, \OCP\Constants::PERMISSION_ALL);
\OC_Util::tearDownFS();
self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
@@ -354,10 +366,10 @@ class Test_Files_Sharing_Cache extends TestCase {
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
\OC\Files\Filesystem::mkdir('foo');
\OC\Files\Filesystem::mkdir('foo/bar');
- \OC\Files\Filesystem::touch('foo/bar/test.txt', 'bar');
+ \OC\Files\Filesystem::touch('foo/bar/test.txt');
$folderInfo = \OC\Files\Filesystem::getFileInfo('foo');
$fileInfo = \OC\Files\Filesystem::getFileInfo('foo/bar/test.txt');
- \OCP\Share::shareItem('folder', $folderInfo->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, \OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('folder', $folderInfo->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, \OCP\Constants::PERMISSION_ALL);
\OC_Util::tearDownFS();
self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
diff --git a/apps/files_sharing/tests/controller/sharecontroller.php b/apps/files_sharing/tests/controller/sharecontroller.php
new file mode 100644
index 00000000000..f13e5b2e497
--- /dev/null
+++ b/apps/files_sharing/tests/controller/sharecontroller.php
@@ -0,0 +1,171 @@
+<?php
+/**
+ * @author Lukas Reschke <lukas@owncloud.com>
+ * @copyright 2014 Lukas Reschke
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files_Sharing\Controllers;
+
+use OC\Files\Filesystem;
+use OCA\Files_Sharing\Application;
+use OCP\AppFramework\IAppContainer;
+use OCP\Files;
+use OCP\AppFramework\Http\RedirectResponse;
+use OCP\AppFramework\Http\TemplateResponse;
+use OCP\Security\ISecureRandom;
+use OC\Files\View;
+use OCP\Share;
+use OC\URLGenerator;
+
+/**
+ * @package OCA\Files_Sharing\Controllers
+ */
+class ShareControllerTest extends \PHPUnit_Framework_TestCase {
+
+ /** @var IAppContainer */
+ private $container;
+ /** @var string */
+ private $user;
+ /** @var string */
+ private $token;
+ /** @var string */
+ private $oldUser;
+ /** @var ShareController */
+ private $shareController;
+ /** @var URLGenerator */
+ private $urlGenerator;
+
+ protected function setUp() {
+ $app = new Application();
+ $this->container = $app->getContainer();
+ $this->container['Config'] = $this->getMockBuilder('\OCP\IConfig')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['AppName'] = 'files_sharing';
+ $this->container['UserSession'] = $this->getMockBuilder('\OC\User\Session')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['URLGenerator'] = $this->getMockBuilder('\OC\URLGenerator')
+ ->disableOriginalConstructor()->getMock();
+ $this->urlGenerator = $this->container['URLGenerator'];
+ $this->shareController = $this->container['ShareController'];
+
+ // Store current user
+ $this->oldUser = \OC_User::getUser();
+
+ // Create a dummy user
+ $this->user = \OC::$server->getSecureRandom()->getLowStrengthGenerator()->generate(12, ISecureRandom::CHAR_LOWER);
+
+ \OC_User::createUser($this->user, $this->user);
+ \OC_Util::tearDownFS();
+ \OC_User::setUserId('');
+ Filesystem::tearDown();
+ \OC_User::setUserId($this->user);
+ \OC_Util::setupFS($this->user);
+
+ // Create a dummy shared file
+ $view = new View('/'. $this->user . '/files');
+ $view->file_put_contents('file1.txt', 'I am such an awesome shared file!');
+ $this->token = \OCP\Share::shareItem(
+ Filesystem::getFileInfo('file1.txt')->getType(),
+ Filesystem::getFileInfo('file1.txt')->getId(),
+ \OCP\Share::SHARE_TYPE_LINK,
+ 'IAmPasswordProtected!',
+ 1
+ );
+ }
+
+ protected function tearDown() {
+ \OC_Util::tearDownFS();
+ \OC_User::setUserId('');
+ Filesystem::tearDown();
+ \OC_User::deleteUser($this->user);
+ \OC_User::setIncognitoMode(false);
+
+ \OC::$server->getSession()->set('public_link_authenticated', '');
+
+ // Set old user
+ \OC_User::setUserId($this->oldUser);
+ \OC_Util::setupFS($this->oldUser);
+ }
+
+ public function testShowAuthenticate() {
+ $linkItem = \OCP\Share::getShareByToken($this->token, false);
+
+ // Test without being authenticated
+ $response = $this->shareController->showAuthenticate($this->token);
+ $expectedResponse = new TemplateResponse($this->container['AppName'], 'authenticate', array(), 'guest');
+ $this->assertEquals($expectedResponse, $response);
+
+ // Test with being authenticated for another file
+ \OC::$server->getSession()->set('public_link_authenticated', $linkItem['id']-1);
+ $response = $this->shareController->showAuthenticate($this->token);
+ $expectedResponse = new TemplateResponse($this->container['AppName'], 'authenticate', array(), 'guest');
+ $this->assertEquals($expectedResponse, $response);
+
+ // Test with being authenticated for the correct file
+ \OC::$server->getSession()->set('public_link_authenticated', $linkItem['id']);
+ $response = $this->shareController->showAuthenticate($this->token);
+ $expectedResponse = new RedirectResponse($this->urlGenerator->linkToRoute('files_sharing.sharecontroller.showShare', array('token' => $this->token)));
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testAuthenticate() {
+ // Test without a not existing token
+ $response = $this->shareController->authenticate('ThisTokenShouldHopefullyNeverExistSoThatTheUnitTestWillAlwaysPass :)');
+ $expectedResponse = new TemplateResponse('core', '404', array(), 'guest');
+ $this->assertEquals($expectedResponse, $response);
+
+ // Test with a valid password
+ $response = $this->shareController->authenticate($this->token, 'IAmPasswordProtected!');
+ $expectedResponse = new RedirectResponse($this->urlGenerator->linkToRoute('files_sharing.sharecontroller.showShare', array('token' => $this->token)));
+ $this->assertEquals($expectedResponse, $response);
+
+ // Test with a invalid password
+ $response = $this->shareController->authenticate($this->token, 'WrongPw!');
+ $expectedResponse = new TemplateResponse($this->container['AppName'], 'authenticate', array('wrongpw' => true), 'guest');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testShowShare() {
+ // Test without a not existing token
+ $response = $this->shareController->showShare('ThisTokenShouldHopefullyNeverExistSoThatTheUnitTestWillAlwaysPass :)');
+ $expectedResponse = new TemplateResponse('core', '404', array(), 'guest');
+ $this->assertEquals($expectedResponse, $response);
+
+ // Test with a password protected share and no authentication
+ $response = $this->shareController->showShare($this->token);
+ $expectedResponse = new RedirectResponse($this->urlGenerator->linkToRoute('files_sharing.sharecontroller.authenticate', array('token' => $this->token)));
+ $this->assertEquals($expectedResponse, $response);
+
+ // Test with password protected share and authentication
+ $linkItem = Share::getShareByToken($this->token, false);
+ \OC::$server->getSession()->set('public_link_authenticated', $linkItem['id']);
+ $response = $this->shareController->showShare($this->token);
+ $sharedTmplParams = array(
+ 'displayName' => $this->user,
+ 'filename' => 'file1.txt',
+ 'directory_path' => '/file1.txt',
+ 'mimetype' => 'text/plain',
+ 'dirToken' => $this->token,
+ 'sharingToken' => $this->token,
+ 'server2serversharing' => true,
+ 'protected' => 'true',
+ 'dir' => '',
+ 'downloadURL' => null,
+ 'fileSize' => '33 B'
+ );
+ $expectedResponse = new TemplateResponse($this->container['AppName'], 'public', $sharedTmplParams, 'base');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testDownloadShare() {
+ // Test with a password protected share and no authentication
+ $response = $this->shareController->downloadShare($this->token);
+ $expectedResponse = new RedirectResponse($this->urlGenerator->linkToRoute('files_sharing.sharecontroller.authenticate',
+ array('token' => $this->token)));
+ $this->assertEquals($expectedResponse, $response);
+ }
+}
diff --git a/apps/files_sharing/tests/externalstorage.php b/apps/files_sharing/tests/externalstorage.php
index 0c741bb8199..cf82fcfc555 100644
--- a/apps/files_sharing/tests/externalstorage.php
+++ b/apps/files_sharing/tests/externalstorage.php
@@ -23,7 +23,7 @@
/**
* Tests for the external Storage class for remote shares.
*/
-class Test_Files_Sharing_External_Storage extends \PHPUnit_Framework_TestCase {
+class Test_Files_Sharing_External_Storage extends \Test\TestCase {
function optionsProvider() {
return array(
diff --git a/apps/files_sharing/tests/js/sharedfilelistSpec.js b/apps/files_sharing/tests/js/sharedfilelistSpec.js
index 812f30d75db..dc6931af6e8 100644
--- a/apps/files_sharing/tests/js/sharedfilelistSpec.js
+++ b/apps/files_sharing/tests/js/sharedfilelistSpec.js
@@ -91,7 +91,7 @@ describe('OCA.Sharing.FileList tests', function() {
file_source: 49,
file_target: '/local path/local name.txt',
path: 'files/something shared.txt',
- permissions: 31,
+ permissions: OC.PERMISSION_ALL,
stime: 11111,
share_type: OC.Share.SHARE_TYPE_USER,
share_with: 'user1',
@@ -127,7 +127,8 @@ describe('OCA.Sharing.FileList tests', function() {
expect($tr.attr('data-file')).toEqual('local name.txt');
expect($tr.attr('data-path')).toEqual('/local path');
expect($tr.attr('data-size')).not.toBeDefined();
- expect($tr.attr('data-permissions')).toEqual('31'); // read and delete
+ expect(parseInt($tr.attr('data-permissions'), 10))
+ .toEqual(OC.PERMISSION_ALL); // read and delete
expect($tr.attr('data-mime')).toEqual('text/plain');
expect($tr.attr('data-mtime')).toEqual('11111000');
expect($tr.attr('data-share-owner')).toEqual('User Two');
@@ -169,7 +170,8 @@ describe('OCA.Sharing.FileList tests', function() {
expect($tr.attr('data-file')).toEqual('local name');
expect($tr.attr('data-path')).toEqual('/local path');
expect($tr.attr('data-size')).not.toBeDefined();
- expect($tr.attr('data-permissions')).toEqual('31'); // read and delete
+ expect(parseInt($tr.attr('data-permissions'), 10))
+ .toEqual(OC.PERMISSION_ALL); // read and delete
expect($tr.attr('data-mime')).toEqual('httpd/unix-directory');
expect($tr.attr('data-mtime')).toEqual('11111000');
expect($tr.attr('data-share-owner')).toEqual('User Two');
@@ -244,7 +246,8 @@ describe('OCA.Sharing.FileList tests', function() {
expect($tr.attr('data-file')).toEqual('local name.txt');
expect($tr.attr('data-path')).toEqual('/local path');
expect($tr.attr('data-size')).not.toBeDefined();
- expect($tr.attr('data-permissions')).toEqual('31'); // read and delete
+ expect(parseInt($tr.attr('data-permissions'), 10))
+ .toEqual(OC.PERMISSION_ALL - OC.PERMISSION_DELETE); // read
expect($tr.attr('data-mime')).toEqual('text/plain');
expect($tr.attr('data-mtime')).toEqual('11111000');
expect($tr.attr('data-share-owner')).not.toBeDefined();
@@ -285,7 +288,8 @@ describe('OCA.Sharing.FileList tests', function() {
expect($tr.attr('data-file')).toEqual('local name');
expect($tr.attr('data-path')).toEqual('/local path');
expect($tr.attr('data-size')).not.toBeDefined();
- expect($tr.attr('data-permissions')).toEqual('31'); // read and delete
+ expect(parseInt($tr.attr('data-permissions'), 10))
+ .toEqual(OC.PERMISSION_ALL - OC.PERMISSION_DELETE); // read
expect($tr.attr('data-mime')).toEqual('httpd/unix-directory');
expect($tr.attr('data-mtime')).toEqual('11111000');
expect($tr.attr('data-share-owner')).not.toBeDefined();
@@ -336,7 +340,8 @@ describe('OCA.Sharing.FileList tests', function() {
expect($tr.attr('data-file')).toEqual('local name.txt');
expect($tr.attr('data-path')).toEqual('/local path');
expect($tr.attr('data-size')).not.toBeDefined();
- expect($tr.attr('data-permissions')).toEqual('31'); // read and delete
+ expect(parseInt($tr.attr('data-permissions'), 10))
+ .toEqual(OC.PERMISSION_ALL - OC.PERMISSION_DELETE); // read
expect($tr.attr('data-mime')).toEqual('text/plain');
expect($tr.attr('data-mtime')).toEqual('11111000');
expect($tr.attr('data-share-owner')).not.toBeDefined();
@@ -404,7 +409,8 @@ describe('OCA.Sharing.FileList tests', function() {
expect($tr.attr('data-file')).toEqual('local name.txt');
expect($tr.attr('data-path')).toEqual('/local path');
expect($tr.attr('data-size')).not.toBeDefined();
- expect($tr.attr('data-permissions')).toEqual('31'); // read and delete
+ expect(parseInt($tr.attr('data-permissions'), 10))
+ .toEqual(OC.PERMISSION_ALL - OC.PERMISSION_DELETE); // read
expect($tr.attr('data-mime')).toEqual('text/plain');
// always use the most recent stime
expect($tr.attr('data-mtime')).toEqual('22222000');
@@ -430,6 +436,7 @@ describe('OCA.Sharing.FileList tests', function() {
fileList.reload();
+ /* jshint camelcase: false */
ocsResponse = {
ocs: {
meta: {
@@ -496,7 +503,8 @@ describe('OCA.Sharing.FileList tests', function() {
expect($tr.attr('data-file')).toEqual('local name.txt');
expect($tr.attr('data-path')).toEqual('/local path');
expect($tr.attr('data-size')).not.toBeDefined();
- expect($tr.attr('data-permissions')).toEqual('31'); // read and delete
+ expect(parseInt($tr.attr('data-permissions'), 10))
+ .toEqual(OC.PERMISSION_ALL - OC.PERMISSION_DELETE); // read
expect($tr.attr('data-mime')).toEqual('text/plain');
expect($tr.attr('data-mtime')).toEqual('11111000');
expect($tr.attr('data-share-recipients')).not.toBeDefined();
@@ -537,7 +545,8 @@ describe('OCA.Sharing.FileList tests', function() {
expect($tr.attr('data-file')).toEqual('local name.txt');
expect($tr.attr('data-path')).toEqual('/local path');
expect($tr.attr('data-size')).not.toBeDefined();
- expect($tr.attr('data-permissions')).toEqual('31'); // read and delete
+ expect(parseInt($tr.attr('data-permissions'), 10))
+ .toEqual(OC.PERMISSION_ALL - OC.PERMISSION_DELETE); // read
expect($tr.attr('data-mime')).toEqual('text/plain');
expect($tr.attr('data-mtime')).toEqual('11111000');
expect($tr.attr('data-share-recipients')).not.toBeDefined();
@@ -633,7 +642,8 @@ describe('OCA.Sharing.FileList tests', function() {
}]);
$tr = fileList.$el.find('tr:first');
- expect(parseInt($tr.attr('data-share-permissions'), 10)).toEqual(OC.PERMISSION_ALL - OC.PERMISSION_SHARE - OC.PERMISSION_DELETE);
+ expect(parseInt($tr.attr('data-share-permissions'), 10))
+ .toEqual(OC.PERMISSION_ALL - OC.PERMISSION_SHARE - OC.PERMISSION_DELETE);
});
});
});
diff --git a/apps/files_sharing/tests/middleware/sharingcheckmiddleware.php b/apps/files_sharing/tests/middleware/sharingcheckmiddleware.php
new file mode 100644
index 00000000000..90c9a7bba10
--- /dev/null
+++ b/apps/files_sharing/tests/middleware/sharingcheckmiddleware.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * @author Lukas Reschke <lukas@owncloud.com>
+ * @copyright 2014 Lukas Reschke
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files_Sharing\Middleware;
+
+
+/**
+ * @package OCA\Files_Sharing\Middleware\SharingCheckMiddleware
+ */
+class SharingCheckMiddlewareTest extends \PHPUnit_Framework_TestCase {
+
+ /** @var \OCP\IAppConfig */
+ private $appConfig;
+ /** @var \OCP\AppFramework\IApi */
+ private $api;
+ /** @var SharingCheckMiddleware */
+ private $sharingCheckMiddleware;
+
+ protected function setUp() {
+ $this->appConfig = $this->getMockBuilder('\OCP\IAppConfig')
+ ->disableOriginalConstructor()->getMock();
+ $this->api = $this->getMockBuilder('\OCP\AppFramework\IApi')
+ ->disableOriginalConstructor()->getMock();
+
+ $this->sharingCheckMiddleware = new SharingCheckMiddleware('files_sharing', $this->appConfig, $this->api);
+ }
+
+ public function testIsSharingEnabledWithEverythingEnabled() {
+ $this->api
+ ->expects($this->once())
+ ->method('isAppEnabled')
+ ->with('files_sharing')
+ ->will($this->returnValue(true));
+
+ $this->appConfig
+ ->expects($this->once())
+ ->method('getValue')
+ ->with('core', 'shareapi_allow_links', 'yes')
+ ->will($this->returnValue('yes'));
+
+ $this->assertTrue(\Test_Helper::invokePrivate($this->sharingCheckMiddleware, 'isSharingEnabled'));
+ }
+
+ public function testIsSharingEnabledWithAppDisabled() {
+ $this->api
+ ->expects($this->once())
+ ->method('isAppEnabled')
+ ->with('files_sharing')
+ ->will($this->returnValue(false));
+
+ $this->assertFalse(\Test_Helper::invokePrivate($this->sharingCheckMiddleware, 'isSharingEnabled'));
+ }
+
+ public function testIsSharingEnabledWithSharingDisabled() {
+ $this->api
+ ->expects($this->once())
+ ->method('isAppEnabled')
+ ->with('files_sharing')
+ ->will($this->returnValue(true));
+
+ $this->appConfig
+ ->expects($this->once())
+ ->method('getValue')
+ ->with('core', 'shareapi_allow_links', 'yes')
+ ->will($this->returnValue('no'));
+
+ $this->assertFalse(\Test_Helper::invokePrivate($this->sharingCheckMiddleware, 'isSharingEnabled'));
+ }
+}
diff --git a/apps/files_sharing/tests/permissions.php b/apps/files_sharing/tests/permissions.php
index 639ebfb5936..f72d724c6fe 100644
--- a/apps/files_sharing/tests/permissions.php
+++ b/apps/files_sharing/tests/permissions.php
@@ -61,7 +61,7 @@ class Test_Files_Sharing_Permissions extends OCA\Files_sharing\Tests\TestCase {
*/
private $ownerCache;
- function setUp() {
+ protected function setUp() {
parent::setUp();
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
@@ -99,7 +99,7 @@ class Test_Files_Sharing_Permissions extends OCA\Files_sharing\Tests\TestCase {
$this->sharedCacheRestrictedShare = $this->sharedStorageRestrictedShare->getCache();
}
- function tearDown() {
+ protected function tearDown() {
$this->sharedCache->clear();
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
diff --git a/apps/files_sharing/tests/proxy.php b/apps/files_sharing/tests/proxy.php
index 68cd81f963a..31acf9b27de 100644
--- a/apps/files_sharing/tests/proxy.php
+++ b/apps/files_sharing/tests/proxy.php
@@ -32,7 +32,7 @@ class Test_Files_Sharing_Proxy extends OCA\Files_sharing\Tests\TestCase {
private static $tempStorage;
- function setUp() {
+ protected function setUp() {
parent::setUp();
// load proxies
@@ -53,7 +53,7 @@ class Test_Files_Sharing_Proxy extends OCA\Files_sharing\Tests\TestCase {
$this->view->file_put_contents($this->folder . $this->subfolder . $this->filename, $this->data);
}
- function tearDown() {
+ protected function tearDown() {
$this->view->deleteAll($this->folder);
self::$tempStorage = null;
diff --git a/apps/files_sharing/tests/share.php b/apps/files_sharing/tests/share.php
index 2b5978f8e57..f76f92734d0 100644
--- a/apps/files_sharing/tests/share.php
+++ b/apps/files_sharing/tests/share.php
@@ -31,7 +31,7 @@ class Test_Files_Sharing extends OCA\Files_sharing\Tests\TestCase {
private static $tempStorage;
- function setUp() {
+ protected function setUp() {
parent::setUp();
$this->folder = self::TEST_FOLDER_NAME;
@@ -49,7 +49,7 @@ class Test_Files_Sharing extends OCA\Files_sharing\Tests\TestCase {
$this->view->file_put_contents($this->folder . $this->subfolder . $this->filename, $this->data);
}
- function tearDown() {
+ protected function tearDown() {
$this->view->unlink($this->filename);
$this->view->deleteAll($this->folder);
@@ -105,12 +105,12 @@ class Test_Files_Sharing extends OCA\Files_sharing\Tests\TestCase {
$fileinfo = $this->view->getFileInfo($this->filename);
$result = \OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP,
- \Test_Files_Sharing::TEST_FILES_SHARING_API_GROUP1, \OCP\PERMISSION_READ);
+ \Test_Files_Sharing::TEST_FILES_SHARING_API_GROUP1, \OCP\Constants::PERMISSION_READ);
$this->assertTrue($result);
$result = \OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER,
- \Test_Files_Sharing::TEST_FILES_SHARING_API_USER2, \OCP\PERMISSION_UPDATE);
+ \Test_Files_Sharing::TEST_FILES_SHARING_API_USER2, \OCP\Constants::PERMISSION_UPDATE);
$this->assertTrue($result);
@@ -124,7 +124,7 @@ class Test_Files_Sharing extends OCA\Files_sharing\Tests\TestCase {
$this->assertSame(1, count($result));
$share = reset($result);
- $this->assertSame(\OCP\PERMISSION_READ | \OCP\PERMISSION_UPDATE, $share['permissions']);
+ $this->assertSame(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE, $share['permissions']);
\OC\Files\Filesystem::rename($this->filename, $this->filename . '-renamed');
@@ -136,7 +136,7 @@ class Test_Files_Sharing extends OCA\Files_sharing\Tests\TestCase {
$this->assertSame(1, count($result));
$share = reset($result);
- $this->assertSame(\OCP\PERMISSION_READ | \OCP\PERMISSION_UPDATE, $share['permissions']);
+ $this->assertSame(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE, $share['permissions']);
$this->assertSame($this->filename . '-renamed', $share['file_target']);
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
@@ -157,7 +157,7 @@ class Test_Files_Sharing extends OCA\Files_sharing\Tests\TestCase {
$share = reset($result);
// only the group share permissions should be available now
- $this->assertSame(\OCP\PERMISSION_READ, $share['permissions']);
+ $this->assertSame(\OCP\Constants::PERMISSION_READ, $share['permissions']);
$this->assertSame($this->filename . '-renamed', $share['file_target']);
}
@@ -172,8 +172,8 @@ class Test_Files_Sharing extends OCA\Files_sharing\Tests\TestCase {
$fileinfo = $this->view->getFileInfo($this->filename);
// share the file to group1 (user2 is a member of this group) and explicitely to user2
- \OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, self::TEST_FILES_SHARING_API_GROUP1, \OCP\PERMISSION_ALL);
- \OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, \OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, self::TEST_FILES_SHARING_API_GROUP1, \OCP\Constants::PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, \OCP\Constants::PERMISSION_ALL);
// user1 should have to shared files
$shares = \OCP\Share::getItemsShared('file');
@@ -203,7 +203,7 @@ class Test_Files_Sharing extends OCA\Files_sharing\Tests\TestCase {
$this->assertSame(1, count($shares));
// user1 shares a gain the file directly to user2
- \OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, \OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, \OCP\Constants::PERMISSION_ALL);
// user2 should see again welcome.txt and the shared file
\Test_Files_Sharing::loginHelper(self::TEST_FILES_SHARING_API_USER2);
@@ -271,14 +271,14 @@ class Test_Files_Sharing extends OCA\Files_sharing\Tests\TestCase {
}
function DataProviderTestFileSharePermissions() {
- $permission1 = \OCP\PERMISSION_ALL;
- $permission3 = \OCP\PERMISSION_READ;
- $permission4 = \OCP\PERMISSION_READ | \OCP\PERMISSION_UPDATE;
- $permission5 = \OCP\PERMISSION_READ | \OCP\PERMISSION_DELETE;
- $permission6 = \OCP\PERMISSION_READ | \OCP\PERMISSION_UPDATE | \OCP\PERMISSION_DELETE;
+ $permission1 = \OCP\Constants::PERMISSION_ALL;
+ $permission3 = \OCP\Constants::PERMISSION_READ;
+ $permission4 = \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE;
+ $permission5 = \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_DELETE;
+ $permission6 = \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE;
return array(
- array($permission1, \OCP\PERMISSION_ALL & ~\OCP\PERMISSION_DELETE),
+ array($permission1, \OCP\Constants::PERMISSION_ALL & ~\OCP\Constants::PERMISSION_DELETE),
array($permission3, $permission3),
array($permission4, $permission4),
array($permission5, $permission3),
diff --git a/apps/files_sharing/tests/sharedmount.php b/apps/files_sharing/tests/sharedmount.php
index 6d155f174ba..dd66ca05d38 100644
--- a/apps/files_sharing/tests/sharedmount.php
+++ b/apps/files_sharing/tests/sharedmount.php
@@ -25,7 +25,7 @@
*/
class Test_Files_Sharing_Mount extends OCA\Files_sharing\Tests\TestCase {
- function setUp() {
+ protected function setUp() {
parent::setUp();
$this->folder = '/folder_share_storage_test';
@@ -40,7 +40,7 @@ class Test_Files_Sharing_Mount extends OCA\Files_sharing\Tests\TestCase {
$this->view->file_put_contents($this->folder . $this->filename, "file in subfolder");
}
- function tearDown() {
+ protected function tearDown() {
$this->view->unlink($this->folder);
$this->view->unlink($this->filename);
diff --git a/apps/files_sharing/tests/sharedstorage.php b/apps/files_sharing/tests/sharedstorage.php
index ab15e8fe3ba..75373244508 100644
--- a/apps/files_sharing/tests/sharedstorage.php
+++ b/apps/files_sharing/tests/sharedstorage.php
@@ -27,7 +27,7 @@ use OCA\Files\Share;
*/
class Test_Files_Sharing_Storage extends OCA\Files_sharing\Tests\TestCase {
- function setUp() {
+ protected function setUp() {
parent::setUp();
$this->folder = '/folder_share_storage_test';
@@ -42,7 +42,7 @@ class Test_Files_Sharing_Storage extends OCA\Files_sharing\Tests\TestCase {
$this->view->file_put_contents($this->folder . $this->filename, "file in subfolder");
}
- function tearDown() {
+ protected function tearDown() {
$this->view->unlink($this->folder);
$this->view->unlink($this->filename);
diff --git a/apps/files_sharing/tests/testcase.php b/apps/files_sharing/tests/testcase.php
index 78277dc907f..65fbfac7d1d 100644
--- a/apps/files_sharing/tests/testcase.php
+++ b/apps/files_sharing/tests/testcase.php
@@ -22,6 +22,7 @@
namespace OCA\Files_Sharing\Tests;
+use OC\Files\Filesystem;
use OCA\Files\Share;
/**
@@ -29,7 +30,7 @@ use OCA\Files\Share;
*
* Base class for sharing tests.
*/
-abstract class TestCase extends \PHPUnit_Framework_TestCase {
+abstract class TestCase extends \Test\TestCase {
const TEST_FILES_SHARING_API_USER1 = "test-share-user1";
const TEST_FILES_SHARING_API_USER2 = "test-share-user2";
@@ -48,6 +49,7 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
public $subfolder;
public static function setUpBeforeClass() {
+ parent::setUpBeforeClass();
// remember files_encryption state
self::$stateFilesEncryption = \OC_App::isEnabled('files_encryption');
@@ -83,7 +85,8 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
}
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
$this->assertFalse(\OC_App::isEnabled('files_encryption'));
@@ -94,13 +97,14 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
$this->view = new \OC\Files\View('/' . self::TEST_FILES_SHARING_API_USER1 . '/files');
}
- function tearDown() {
+ protected function tearDown() {
$query = \OCP\DB::prepare('DELETE FROM `*PREFIX*share`');
$query->execute();
+
+ parent::tearDown();
}
public static function tearDownAfterClass() {
-
// cleanup users
\OC_User::deleteUser(self::TEST_FILES_SHARING_API_USER1);
\OC_User::deleteUser(self::TEST_FILES_SHARING_API_USER2);
@@ -115,6 +119,12 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
} else {
\OC_App::disable('files_encryption');
}
+
+ \OC_Util::tearDownFS();
+ \OC_User::setUserId('');
+ Filesystem::tearDown();
+
+ parent::tearDownAfterClass();
}
/**
diff --git a/apps/files_sharing/tests/update.php b/apps/files_sharing/tests/update.php
deleted file mode 100644
index 583f607d9cb..00000000000
--- a/apps/files_sharing/tests/update.php
+++ /dev/null
@@ -1,252 +0,0 @@
-<?php
-/**
- * ownCloud
- *
- * @author Morris Jobke, Bjoern Schiessle
- * @copyright 2014 Morris Jobke <morris.jobke@gmail.com>
- * 2014 Bjoern Schiessle <schiessle@ownlcoud.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-require_once __DIR__ . '/../appinfo/update.php';
-
-/**
- * Class Test_Files_Sharing_Update
- */
-class Test_Files_Sharing_Update_Routine extends OCA\Files_Sharing\Tests\TestCase {
-
- const TEST_FOLDER_NAME = '/folder_share_api_test';
-
- function setUp() {
- parent::setUp();
-
- $this->folder = self::TEST_FOLDER_NAME;
-
- $this->filename = '/share-api-test.txt';
-
- // save file with content
- $this->view->file_put_contents($this->filename, $this->data);
- $this->view->mkdir($this->folder);
- $this->view->file_put_contents($this->folder . '/' . $this->filename, $this->data);
- }
-
- function tearDown() {
- $this->view->unlink($this->filename);
- $this->view->deleteAll($this->folder);
-
- $removeShares = \OC_DB::prepare('DELETE FROM `*PREFIX*share`');
- $removeShares->execute();
- $removeItems = \OC_DB::prepare('DELETE FROM `*PREFIX*filecache`');
- $removeItems->execute();
-
- parent::tearDown();
- }
-
- /**
- * test update of file permission. The update should remove from all shared
- * files the delete permission
- */
- function testUpdateFilePermissions() {
-
- self::prepareDBUpdateFilePermissions();
- // run the update routine to update the share permission
- updateFilePermissions(2);
-
- // verify results
- $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*share`');
- $result = $query->execute(array());
-
- while ($row = $result->fetchRow()) {
- if ($row['item_type'] === 'file') {
- // for all files the delete permission should be removed
- $this->assertSame(0, (int)$row['permissions'] & \OCP\PERMISSION_DELETE);
- } else {
- // for all other the permission shouldn't change
- $this->assertSame(31, (int)$row['permissions'] & \OCP\PERMISSION_ALL);
- }
- }
-
- // cleanup
- $this->cleanupSharedTable();
- }
-
- /**
- * @medium
- */
- function testRemoveBrokenFileShares() {
-
- $this->prepareFileCache();
-
- // check if there are just 4 shares (see setUp - precondition: empty table)
- $countAllShares = \OC_DB::prepare('SELECT COUNT(`id`) FROM `*PREFIX*share`');
- $result = $countAllShares->execute()->fetchOne();
- $this->assertEquals(4, $result);
-
- // check if there are just 3 file shares (see setUp - precondition: empty table)
- $countFileShares = \OC_DB::prepare('SELECT COUNT(`id`) FROM `*PREFIX*share` WHERE `item_type` IN (\'file\', \'folder\')');
- $result = $countFileShares->execute()->fetchOne();
- $this->assertEquals(3, $result);
-
- // check if there are just 2 items (see setUp - precondition: empty table)
- $countItems = \OC_DB::prepare('SELECT COUNT(`fileid`) FROM `*PREFIX*filecache`');
- $result = $countItems->execute()->fetchOne();
- $this->assertEquals(2, $result);
-
- // execute actual code which should be tested
- \OC\Files\Cache\Shared_Updater::fixBrokenSharesOnAppUpdate();
-
- // check if there are just 2 shares (one gets killed by the code as there is no filecache entry for this)
- $result = $countFileShares->execute()->fetchOne();
- $this->assertEquals(2, $result);
-
- // check if the share of file '200' is removed as there is no entry for this in filecache table
- $countFileShares = \OC_DB::prepare('SELECT COUNT(`id`) FROM `*PREFIX*share` WHERE `file_source` = 200');
- $result = $countFileShares->execute()->fetchOne();
- $this->assertEquals(0, $result);
-
- // check if there are just 2 items
- $countItems = \OC_DB::prepare('SELECT COUNT(`fileid`) FROM `*PREFIX*filecache`');
- $result = $countItems->execute()->fetchOne();
- $this->assertEquals(2, $result);
-
- // the calendar share survived
- $countOtherShares = \OC_DB::prepare('SELECT COUNT(`id`) FROM `*PREFIX*share` WHERE `item_source` = \'999\'');
- $result = $countOtherShares->execute()->fetchOne();
- $this->assertEquals(1, $result);
- }
-
- /**
- * test update for the removal of the logical "Shared" folder. It should update
- * the file_target for every share and create a physical "Shared" folder for each user
- */
- function testRemoveSharedFolder() {
- self::prepareDB();
- // run the update routine to remove the shared folder and replace it with a real folder
- removeSharedFolder(false, 2);
-
- // verify results
- $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*share`');
- $result = $query->execute(array());
-
- $newDBContent = $result->fetchAll();
-
- foreach ($newDBContent as $row) {
- if ((int)$row['share_type'] === \OCP\Share::SHARE_TYPE_USER) {
- $this->assertSame('/Shared', substr($row['file_target'], 0, strlen('/Shared')));
- } else {
- $this->assertSame('/ShouldNotChange', $row['file_target']);
- }
- }
-
- $shareFolder = \OCP\Config::getSystemValue('share_folder', '/');
-
- $this->assertSame('/Shared', $shareFolder);
-
- // cleanup
- $this->cleanupSharedTable();
- \OCP\Config::deleteSystemValue('share_folder');
-
- }
-
- private function cleanupSharedTable() {
- $query = \OC_DB::prepare('DELETE FROM `*PREFIX*share`');
- $query->execute();
- }
-
- /**
- * prepare sharing table for testRemoveSharedFolder()
- */
- private function prepareDB() {
- $this->cleanupSharedTable();
- // add items except one - because this is the test case for the broken share table
- $addItems = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`share_type`, `item_type`, ' .
- '`share_with`, `uid_owner` , `file_target`) ' .
- 'VALUES (?, ?, ?, ?, ?)');
- $items = array(
- array(\OCP\Share::SHARE_TYPE_USER, 'file', 'user1', 'admin' , '/foo'),
- array(\OCP\Share::SHARE_TYPE_USER, 'folder', 'user2', 'admin', '/foo2'),
- array(\OCP\Share::SHARE_TYPE_USER, 'file', 'user3', 'admin', '/foo3'),
- array(\OCP\Share::SHARE_TYPE_USER, 'folder', 'user4', 'admin', '/foo4'),
- array(\OCP\Share::SHARE_TYPE_USER, 'folder', 'user4', 'admin', "/foo'4"),
- array(\OCP\Share::SHARE_TYPE_LINK, 'file', 'user1', 'admin', '/ShouldNotChange'),
- array(\OCP\Share::SHARE_TYPE_CONTACT, 'contact', 'admin', 'user1', '/ShouldNotChange'),
-
- );
- foreach($items as $item) {
- // the number is used as path_hash
- $addItems->execute($item);
- }
- }
-
- /**
- * prepare sharing table for testUpdateFilePermissions()
- */
- private function prepareDBUpdateFilePermissions() {
- $this->cleanupSharedTable();
- // add items except one - because this is the test case for the broken share table
- $addItems = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`share_type`, `item_type`, ' .
- '`share_with`, `uid_owner` , `file_target`, `permissions`) ' .
- 'VALUES (?, ?, ?, ?, ?, ?)');
- $items = array(
- array(\OCP\Share::SHARE_TYPE_LINK, 'file', 'user1', 'admin', '/foo', \OCP\PERMISSION_ALL),
- array(\OCP\Share::SHARE_TYPE_CONTACT, 'contact', 'admin', 'user1', '/foo', \OCP\PERMISSION_ALL),
- array(\OCP\Share::SHARE_TYPE_USER, 'folder', 'user4', 'admin', '/foo', \OCP\PERMISSION_ALL),
- array(\OCP\Share::SHARE_TYPE_USER, 'file', 'user3', 'admin', '/foo3', \OCP\PERMISSION_ALL),
- array(\OCP\Share::SHARE_TYPE_USER, 'file', 'user1', 'admin' , '/foo', \OCP\PERMISSION_DELETE),
- array(\OCP\Share::SHARE_TYPE_USER, 'file', 'user1', 'admin' , '/foo', \OCP\PERMISSION_READ & \OCP\PERMISSION_DELETE),
- array(\OCP\Share::SHARE_TYPE_USER, 'file', 'user1', 'admin' , '/foo', \OCP\PERMISSION_SHARE & \OCP\PERMISSION_UPDATE),
- array(\OCP\Share::SHARE_TYPE_USER, 'file', 'user1', 'admin' , '/foo', \OCP\PERMISSION_ALL),
- array(\OCP\Share::SHARE_TYPE_USER, 'file', 'user1', 'admin' , '/foo', \OCP\PERMISSION_SHARE & \OCP\PERMISSION_READ & \OCP\PERMISSION_DELETE),
- );
- foreach($items as $item) {
- // the number is used as path_hash
- $addItems->execute($item);
- }
- }
-
- /**
- * prepare file cache for testRemoveBrokenShares()
- */
- private function prepareFileCache() {
- // some previous tests didn't clean up and therefore this has to be done here
- // FIXME: DIRTY HACK - TODO: find tests, that don't clean up and fix it there
- $this->tearDown();
-
- // add items except one - because this is the test case for the broken share table
- $addItems = \OC_DB::prepare('INSERT INTO `*PREFIX*filecache` (`storage`, `path_hash`, ' .
- '`parent`, `mimetype`, `mimepart`, `size`, `mtime`, `storage_mtime`) ' .
- 'VALUES (1, ?, 1, 1, 1, 1, 1, 1)');
- $items = array(1, 3);
- $fileIds = array();
- foreach($items as $item) {
- // the number is used as path_hash
- $addItems->execute(array($item));
- $fileIds[] = \OC_DB::insertId('*PREFIX*filecache');
- }
-
- $addShares = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`file_source`, `item_type`, `uid_owner`) VALUES (?, \'file\', 1)');
- // the number is used as item_source
- $addShares->execute(array($fileIds[0]));
- $addShares->execute(array(200)); // id of "deleted" file
- $addShares->execute(array($fileIds[1]));
-
- // add a few unrelated shares, calendar share that must be left untouched
- $addShares = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_source`, `item_type`, `uid_owner`) VALUES (?, \'calendar\', 1)');
- // the number is used as item_source
- $addShares->execute(array(999));
- }
-
-}
diff --git a/apps/files_sharing/tests/updater.php b/apps/files_sharing/tests/updater.php
index 07349c1334d..bc8deaf19b0 100644
--- a/apps/files_sharing/tests/updater.php
+++ b/apps/files_sharing/tests/updater.php
@@ -20,7 +20,6 @@
*
*/
-require_once __DIR__ . '/../appinfo/update.php';
/**
* Class Test_Files_Sharing_Updater
@@ -34,7 +33,7 @@ class Test_Files_Sharing_Updater extends OCA\Files_sharing\Tests\TestCase {
\OCA\Files_Sharing\Helper::registerHooks();
}
- function setUp() {
+ protected function setUp() {
parent::setUp();
$this->folder = self::TEST_FOLDER_NAME;
@@ -47,7 +46,7 @@ class Test_Files_Sharing_Updater extends OCA\Files_sharing\Tests\TestCase {
$this->view->file_put_contents($this->folder . '/' . $this->filename, $this->data);
}
- function tearDown() {
+ protected function tearDown() {
$this->view->unlink($this->filename);
$this->view->deleteAll($this->folder);
diff --git a/apps/files_sharing/tests/watcher.php b/apps/files_sharing/tests/watcher.php
index 67f55394ae8..254b30c6470 100644
--- a/apps/files_sharing/tests/watcher.php
+++ b/apps/files_sharing/tests/watcher.php
@@ -42,7 +42,7 @@ class Test_Files_Sharing_Watcher extends OCA\Files_sharing\Tests\TestCase {
*/
private $sharedCache;
- function setUp() {
+ protected function setUp() {
parent::setUp();
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
@@ -71,7 +71,7 @@ class Test_Files_Sharing_Watcher extends OCA\Files_sharing\Tests\TestCase {
$this->sharedCache = $this->sharedStorage->getCache();
}
- function tearDown() {
+ protected function tearDown() {
$this->sharedCache->clear();
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
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/appinfo/routes.php b/apps/files_trashbin/appinfo/routes.php
index da268f4fdfd..56dbf382735 100644
--- a/apps/files_trashbin/appinfo/routes.php
+++ b/apps/files_trashbin/appinfo/routes.php
@@ -13,3 +13,7 @@ $this->create('files_trashbin_ajax_list', 'ajax/list.php')
->actionInclude('files_trashbin/ajax/list.php');
$this->create('files_trashbin_ajax_undelete', 'ajax/undelete.php')
->actionInclude('files_trashbin/ajax/undelete.php');
+
+
+// Register with the capabilities API
+\OC_API::register('get', '/cloud/capabilities', array('OCA\Files_Trashbin\Capabilities', 'getCapabilities'), 'files_trashbin', \OC_API::USER_AUTH);
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/l10n/pt_PT.js b/apps/files_trashbin/l10n/pt_PT.js
index 5d22e3bca21..303c8ad8c37 100644
--- a/apps/files_trashbin/l10n/pt_PT.js
+++ b/apps/files_trashbin/l10n/pt_PT.js
@@ -7,9 +7,9 @@ OC.L10N.register(
"Restore" : "Restaurar",
"Error" : "Erro",
"restored" : "Restaurado",
- "Nothing in here. Your trash bin is empty!" : "Não hà ficheiros. O lixo está vazio!",
+ "Nothing in here. Your trash bin is empty!" : "Não existe nada aqui. O seu caixote de lixo está vazio!",
"Name" : "Nome",
- "Deleted" : "Apagado",
+ "Deleted" : "Eliminado",
"Delete" : "Eliminar"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_trashbin/l10n/pt_PT.json b/apps/files_trashbin/l10n/pt_PT.json
index 4feb75abd9a..431c381074a 100644
--- a/apps/files_trashbin/l10n/pt_PT.json
+++ b/apps/files_trashbin/l10n/pt_PT.json
@@ -5,9 +5,9 @@
"Restore" : "Restaurar",
"Error" : "Erro",
"restored" : "Restaurado",
- "Nothing in here. Your trash bin is empty!" : "Não hà ficheiros. O lixo está vazio!",
+ "Nothing in here. Your trash bin is empty!" : "Não existe nada aqui. O seu caixote de lixo está vazio!",
"Name" : "Nome",
- "Deleted" : "Apagado",
+ "Deleted" : "Eliminado",
"Delete" : "Eliminar"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_trashbin/l10n/sk.php b/apps/files_trashbin/l10n/sk.php
deleted file mode 100644
index 3129cf5c411..00000000000
--- a/apps/files_trashbin/l10n/sk.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Delete" => "Odstrániť"
-);
-$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/apps/files_trashbin/l10n/ur.php b/apps/files_trashbin/l10n/ur.php
deleted file mode 100644
index 1b41db1d679..00000000000
--- a/apps/files_trashbin/l10n/ur.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Error" => "خرابی"
-);
-$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_trashbin/lib/capabilities.php b/apps/files_trashbin/lib/capabilities.php
new file mode 100644
index 00000000000..3f137d22b6f
--- /dev/null
+++ b/apps/files_trashbin/lib/capabilities.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Copyright (c) Lukas Reschke <lukas@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files_Trashbin;
+
+
+/**
+ * Class Capabilities
+ *
+ * @package OCA\Files_Trashbin
+ */
+class Capabilities {
+
+ /**
+ * @return \OC_OCS_Result
+ */
+ public static function getCapabilities() {
+ return new \OC_OCS_Result(array(
+ 'capabilities' => array(
+ 'files' => array(
+ 'undelete' => true,
+ ),
+ ),
+ ));
+ }
+
+}
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/helper.php b/apps/files_trashbin/lib/helper.php
index c2b81e3dbc8..c99662480df 100644
--- a/apps/files_trashbin/lib/helper.php
+++ b/apps/files_trashbin/lib/helper.php
@@ -88,7 +88,7 @@ class Helper
$entry = \OCA\Files\Helper::formatFileInfo($i);
$entry['id'] = $id++;
$entry['etag'] = $entry['mtime']; // add fake etag, it is only needed to identify the preview image
- $entry['permissions'] = \OCP\PERMISSION_READ;
+ $entry['permissions'] = \OCP\Constants::PERMISSION_READ;
if (\OCP\App::isEnabled('files_encryption')) {
$entry['isPreviewAvailable'] = false;
}
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_trashbin/tests/trashbin.php b/apps/files_trashbin/tests/trashbin.php
index 6fdb53f7271..f572e22623e 100644
--- a/apps/files_trashbin/tests/trashbin.php
+++ b/apps/files_trashbin/tests/trashbin.php
@@ -25,7 +25,7 @@ use OCA\Files_Trashbin;
/**
* Class Test_Encryption_Crypt
*/
-class Test_Trashbin extends \PHPUnit_Framework_TestCase {
+class Test_Trashbin extends \Test\TestCase {
const TEST_TRASHBIN_USER1 = "test-trashbin-user1";
const TEST_TRASHBIN_USER2 = "test-trashbin-user2";
@@ -43,6 +43,8 @@ class Test_Trashbin extends \PHPUnit_Framework_TestCase {
private $rootView;
public static function setUpBeforeClass() {
+ parent::setUpBeforeClass();
+
// reset backend
\OC_User::clearBackends();
\OC_User::useBackend('database');
@@ -85,18 +87,24 @@ class Test_Trashbin extends \PHPUnit_Framework_TestCase {
\OC_Config::setValue('trashbin_auto_expire', self::$rememberAutoExpire);
\OC_Hook::clear();
+
+ parent::tearDownAfterClass();
}
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->trashRoot1 = '/' . self::TEST_TRASHBIN_USER1 . '/files_trashbin';
$this->trashRoot2 = '/' . self::TEST_TRASHBIN_USER2 . '/files_trashbin';
$this->rootView = new \OC\Files\View();
self::loginHelper(self::TEST_TRASHBIN_USER1);
}
- public function tearDown() {
+ protected function tearDown() {
$this->rootView->deleteAll($this->trashRoot1);
$this->rootView->deleteAll($this->trashRoot2);
+
+ parent::tearDown();
}
/**
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 a3b8595a34b..cf0ffb320e2 100644
--- a/apps/files_versions/tests/versions.php
+++ b/apps/files_versions/tests/versions.php
@@ -21,13 +21,12 @@
*/
require_once __DIR__ . '/../appinfo/app.php';
-require_once __DIR__ . '/../lib/versions.php';
/**
* Class Test_Files_versions
* this class provide basic files versions test
*/
-class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
+class Test_Files_Versioning extends \Test\TestCase {
const TEST_VERSIONS_USER = 'test-versions-user';
const TEST_VERSIONS_USER2 = 'test-versions-user2';
@@ -39,6 +38,7 @@ class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
private $rootView;
public static function setUpBeforeClass() {
+ parent::setUpBeforeClass();
// clear share hooks
\OC_Hook::clear('OCP\\Share');
@@ -55,9 +55,13 @@ class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
// cleanup test user
\OC_User::deleteUser(self::TEST_VERSIONS_USER);
\OC_User::deleteUser(self::TEST_VERSIONS_USER2);
+
+ parent::tearDownAfterClass();
}
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
self::loginHelper(self::TEST_VERSIONS_USER);
$this->rootView = new \OC\Files\View();
if (!$this->rootView->file_exists(self::USERS_VERSIONS_ROOT)) {
@@ -65,8 +69,10 @@ class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
}
}
- function tearDown() {
+ protected function tearDown() {
$this->rootView->deleteAll(self::USERS_VERSIONS_ROOT);
+
+ parent::tearDown();
}
/**
@@ -74,7 +80,7 @@ class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
* test expire logic
* @dataProvider versionsProvider
*/
- function testGetExpireList($versions, $sizeOfAllDeletedFiles) {
+ public function testGetExpireList($versions, $sizeOfAllDeletedFiles) {
// last interval end at 2592000
$startTime = 5000000;
@@ -216,7 +222,7 @@ class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
);
}
- function testRename() {
+ public function testRename() {
\OC\Files\Filesystem::file_put_contents("test.txt", "test file");
@@ -247,7 +253,7 @@ class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
\OC\Files\Filesystem::unlink('test2.txt');
}
- function testRenameInSharedFolder() {
+ public function testRenameInSharedFolder() {
\OC\Files\Filesystem::mkdir('folder1');
\OC\Files\Filesystem::mkdir('folder1/folder2');
@@ -270,7 +276,7 @@ class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
$this->rootView->file_put_contents($v1, 'version1');
$this->rootView->file_put_contents($v2, 'version2');
- \OCP\Share::shareItem('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_VERSIONS_USER2, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_VERSIONS_USER2, \OCP\Constants::PERMISSION_ALL);
self::loginHelper(self::TEST_VERSIONS_USER2);
@@ -291,7 +297,7 @@ class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
\OC\Files\Filesystem::unlink('/folder1/folder2/test.txt');
}
- function testRenameSharedFile() {
+ public function testRenameSharedFile() {
\OC\Files\Filesystem::file_put_contents("test.txt", "test file");
@@ -313,7 +319,7 @@ class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
$this->rootView->file_put_contents($v1, 'version1');
$this->rootView->file_put_contents($v2, 'version2');
- \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_VERSIONS_USER2, OCP\PERMISSION_ALL);
+ \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_VERSIONS_USER2, \OCP\Constants::PERMISSION_ALL);
self::loginHelper(self::TEST_VERSIONS_USER2);
@@ -334,7 +340,7 @@ class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
\OC\Files\Filesystem::unlink('/test.txt');
}
- function testCopy() {
+ public function testCopy() {
\OC\Files\Filesystem::file_put_contents("test.txt", "test file");
diff --git a/apps/user_ldap/ajax/wizard.php b/apps/user_ldap/ajax/wizard.php
index ef1241b9147..6d7d70c8c5a 100644
--- a/apps/user_ldap/ajax/wizard.php
+++ b/apps/user_ldap/ajax/wizard.php
@@ -62,6 +62,7 @@ switch($action) {
case 'guessPortAndTLS':
case 'guessBaseDN':
case 'detectEmailAttribute':
+ case 'detectUserDisplayNameAttribute':
case 'determineGroupMemberAssoc':
case 'determineUserObjectClasses':
case 'determineGroupObjectClasses':
@@ -115,4 +116,3 @@ switch($action) {
//TODO: return 4xx error
break;
}
-
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/js/ldapFilter.js b/apps/user_ldap/js/ldapFilter.js
index bb66c1df2ee..0f7d240adac 100644
--- a/apps/user_ldap/js/ldapFilter.js
+++ b/apps/user_ldap/js/ldapFilter.js
@@ -8,6 +8,7 @@ function LdapFilter(target, determineModeCallback) {
this.determineModeCallback = determineModeCallback;
this.foundFeatures = false;
this.activated = false;
+ this.countPending = false;
if( target === 'User' ||
target === 'Login' ||
@@ -25,9 +26,13 @@ LdapFilter.prototype.activate = function() {
this.determineMode();
};
-LdapFilter.prototype.compose = function(callback) {
+LdapFilter.prototype.compose = function(updateCount) {
var action;
+ if(updateCount === true) {
+ this.countPending = updateCount;
+ }
+
if(this.locked) {
this.lazyRunCompose = true;
return false;
@@ -54,22 +59,36 @@ LdapFilter.prototype.compose = function(callback) {
LdapWizard.ajax(param,
function(result) {
- LdapWizard.applyChanges(result);
- filter.updateCount();
- if(filter.target === 'Group') {
- LdapWizard.detectGroupMemberAssoc();
- }
- if(typeof callback !== 'undefined') {
- callback();
- }
+ filter.afterComposeSuccess(result);
},
function () {
+ filter.countPending = false;
console.log('LDAP Wizard: could not compose filter. '+
'Please check owncloud.log');
}
);
};
+/**
+ * this function is triggered after attribute detectors have completed in
+ * LdapWizard
+ */
+LdapFilter.prototype.afterDetectorsRan = function() {
+ this.updateCount();
+};
+
+/**
+ * this function is triggered after LDAP filters have been composed successfully
+ * @param {object} result returned by the ajax call
+ */
+LdapFilter.prototype.afterComposeSuccess = function(result) {
+ LdapWizard.applyChanges(result);
+ if(this.countPending) {
+ this.countPending = false;
+ this.updateCount();
+ }
+};
+
LdapFilter.prototype.determineMode = function() {
var param = 'action=get'+encodeURIComponent(this.target)+'FilterMode'+
'&ldap_serverconfig_chooser='+
@@ -145,10 +164,26 @@ LdapFilter.prototype.findFeatures = function() {
}
};
+/**
+ * this function is triggered before user and group counts are executed
+ * resolving the passed status variable will fire up counting
+ * @param {object} status an instance of $.Deferred
+ */
+LdapFilter.prototype.beforeUpdateCount = function() {
+ var status = $.Deferred();
+ LdapWizard.runDetectors(this.target, function() {
+ status.resolve();
+ });
+ return status;
+};
+
LdapFilter.prototype.updateCount = function(doneCallback) {
- if(this.target === 'User') {
- LdapWizard.countUsers(doneCallback);
- } else if (this.target === 'Group') {
- LdapWizard.countGroups(doneCallback);
- }
+ var filter = this;
+ $.when(this.beforeUpdateCount()).done(function() {
+ if(filter.target === 'User') {
+ LdapWizard.countUsers(doneCallback);
+ } else if (filter.target === 'Group') {
+ LdapWizard.countGroups(doneCallback);
+ }
+ });
};
diff --git a/apps/user_ldap/js/settings.js b/apps/user_ldap/js/settings.js
index fa40aba73b4..6db210fe435 100644
--- a/apps/user_ldap/js/settings.js
+++ b/apps/user_ldap/js/settings.js
@@ -151,8 +151,10 @@ var LdapWizard = {
ajaxRequests: {},
ajax: function(param, fnOnSuccess, fnOnError, reqID) {
- if(reqID !== undefined) {
+ if(!_.isUndefined(reqID)) {
if(LdapWizard.ajaxRequests.hasOwnProperty(reqID)) {
+ console.log('aborting ' + reqID);
+ console.log(param);
LdapWizard.ajaxRequests[reqID].abort();
}
}
@@ -167,9 +169,10 @@ var LdapWizard = {
}
}
);
- if(reqID !== undefined) {
+ if(!_.isUndefined(reqID)) {
LdapWizard.ajaxRequests[reqID] = request;
}
+ return request;
},
applyChanges: function (result) {
@@ -342,7 +345,7 @@ var LdapWizard = {
},
_countThings: function(method, spinnerID, doneCallback) {
- param = 'action='+method+
+ var param = 'action='+method+
'&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val());
@@ -351,14 +354,14 @@ var LdapWizard = {
function(result) {
LdapWizard.applyChanges(result);
LdapWizard.hideSpinner(spinnerID);
- if(doneCallback !== undefined) {
+ if(!_.isUndefined(doneCallback)) {
doneCallback(method);
}
},
function (result) {
OC.Notification.show('Counting the entries failed with, ' + result.message);
LdapWizard.hideSpinner(spinnerID);
- if(doneCallback !== undefined) {
+ if(!_.isUndefined(doneCallback)) {
doneCallback(method);
}
},
@@ -374,12 +377,54 @@ var LdapWizard = {
LdapWizard._countThings('countUsers', '#ldap_user_count', doneCallback);
},
+ /**
+ * called after detectors have run
+ * @callback runDetectorsCallback
+ */
+
+ /**
+ * runs detectors to determine appropriate attributes, e.g. displayName
+ * @param {string} type either "User" or "Group"
+ * @param {runDetectorsCallback} triggered after all detectors have completed
+ */
+ runDetectors: function(type, callback) {
+ if(type === 'Group') {
+ $.when(LdapWizard.detectGroupMemberAssoc())
+ .then(callback, callback);
+ if( LdapWizard.admin.isExperienced
+ && !(LdapWizard.detectorsRunInXPMode & LdapWizard.groupDetectors)) {
+ LdapWizard.detectorsRunInXPMode += LdapWizard.groupDetectors;
+ }
+ } else if(type === 'User') {
+ var req1 = LdapWizard.detectUserDisplayNameAttribute();
+ var req2 = LdapWizard.detectEmailAttribute();
+ $.when(req1, req2)
+ .then(callback, callback);
+ if( LdapWizard.admin.isExperienced
+ && !(LdapWizard.detectorsRunInXPMode & LdapWizard.userDetectors)) {
+ LdapWizard.detectorsRunInXPMode += LdapWizard.userDetectors;
+ }
+ }
+ },
+
+ /**
+ * runs detector to find out a fitting user display name attribute
+ */
+ detectUserDisplayNameAttribute: function() {
+ var param = 'action=detectUserDisplayNameAttribute' +
+ '&ldap_serverconfig_chooser='+
+ encodeURIComponent($('#ldap_serverconfig_chooser').val());
+
+ //runs in the background, no callbacks necessary
+ return LdapWizard.ajax(param, LdapWizard.applyChanges, function(){}, 'detectUserDisplayNameAttribute');
+ },
+
detectEmailAttribute: function() {
- param = 'action=detectEmailAttribute'+
+ var param = 'action=detectEmailAttribute'+
'&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val());
//runs in the background, no callbacks necessary
- LdapWizard.ajax(param, LdapWizard.applyChanges, function(){}, 'detectEmailAttribute');
+ return LdapWizard.ajax(param, LdapWizard.applyChanges, function(){}, 'detectEmailAttribute');
},
detectGroupMemberAssoc: function() {
@@ -387,7 +432,7 @@ var LdapWizard = {
'&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val());
- LdapWizard.ajax(param,
+ return LdapWizard.ajax(param,
function(result) {
//pure background story
},
@@ -409,7 +454,7 @@ var LdapWizard = {
$('#ldap_loginfilter_attributes').find('option').remove();
for (var i in result.options['ldap_loginfilter_attributes']) {
//FIXME: move HTML into template
- attr = result.options['ldap_loginfilter_attributes'][i];
+ var attr = result.options['ldap_loginfilter_attributes'][i];
$('#ldap_loginfilter_attributes').append(
"<option value='"+attr+"'>"+attr+"</option>");
}
@@ -566,8 +611,12 @@ var LdapWizard = {
},
isConfigurationActiveControlLocked: true,
+ detectorsRunInXPMode: 0,
+ userDetectors: 1,
+ groupDetectors: 2,
init: function() {
+ LdapWizard.detectorsRunInXPMode = 0;
LdapWizard.instantiateFilters();
LdapWizard.admin.setExperienced($('#ldap_experienced_admin').is(':checked'));
LdapWizard.basicStatusCheck();
@@ -620,8 +669,9 @@ var LdapWizard = {
instantiateFilters: function() {
delete LdapWizard.userFilter;
LdapWizard.userFilter = new LdapFilter('User', function(mode) {
- if(mode === LdapWizard.filterModeAssisted) {
- LdapWizard.groupFilter.updateCount();
+ if( !LdapWizard.admin.isExperienced()
+ || mode === LdapWizard.filterModeAssisted) {
+ LdapWizard.userFilter.updateCount();
}
LdapWizard.userFilter.findFeatures();
});
@@ -630,7 +680,6 @@ var LdapWizard = {
$('#ldap_user_count').text('');
LdapWizard.showSpinner('#rawUserFilterContainer .ldapGetEntryCount');
LdapWizard.userFilter.updateCount(LdapWizard.hideTestSpinner);
- LdapWizard.detectEmailAttribute();
$('#ldap_user_count').removeClass('hidden');
});
@@ -641,7 +690,8 @@ var LdapWizard = {
delete LdapWizard.groupFilter;
LdapWizard.groupFilter = new LdapFilter('Group', function(mode) {
- if(mode === LdapWizard.filterModeAssisted) {
+ if( !LdapWizard.admin.isExperienced()
+ || mode === LdapWizard.filterModeAssisted) {
LdapWizard.groupFilter.updateCount();
}
LdapWizard.groupFilter.findFeatures();
@@ -651,7 +701,6 @@ var LdapWizard = {
$('#ldap_group_count').text('');
LdapWizard.showSpinner('#rawGroupFilterContainer .ldapGetEntryCount');
LdapWizard.groupFilter.updateCount(LdapWizard.hideTestSpinner);
- LdapWizard.detectGroupMemberAssoc();
$('#ldap_group_count').removeClass('hidden');
});
},
@@ -668,7 +717,7 @@ var LdapWizard = {
postInitUserFilter: function() {
if(LdapWizard.userFilterObjectClassesHasRun &&
LdapWizard.userFilterAvailableGroupsHasRun) {
- LdapWizard.userFilter.compose(LdapWizard.detectEmailAttribute);
+ LdapWizard.userFilter.compose();
}
},
@@ -679,7 +728,7 @@ var LdapWizard = {
//do not allow to switch tabs as long as a save process is active
return false;
}
- newTabIndex = 0;
+ var newTabIndex = 0;
if(ui.newTab[0].id === '#ldapWizard2') {
LdapWizard.initUserFilter();
newTabIndex = 1;
@@ -691,9 +740,23 @@ var LdapWizard = {
newTabIndex = 3;
}
- curTabIndex = $('#ldapSettings').tabs('option', 'active');
+ var curTabIndex = $('#ldapSettings').tabs('option', 'active');
if(curTabIndex >= 0 && curTabIndex <= 3) {
LdapWizard.controlUpdate(newTabIndex);
+ //run detectors in XP mode, when "Test Filter" button has not been
+ //clicked in order to make sure that email, displayname, member-
+ //group association attributes are properly set.
+ if( curTabIndex === 1
+ && LdapWizard.admin.isExperienced
+ && !(LdapWizard.detecorsRunInXPMode & LdapWizard.userDetectors)
+ ) {
+ LdapWizard.runDetectors('User', function(){});
+ } else if( curTabIndex === 3
+ && LdapWizard.admin.isExperienced
+ && !(LdapWizard.detecorsRunInXPMode & LdapWizard.groupDetectors)
+ ) {
+ LdapWizard.runDetectors('Group', function(){});
+ }
}
},
@@ -711,15 +774,15 @@ var LdapWizard = {
}
}
- if(triggerObj.id === 'ldap_userlist_filter' && !LdapWizard.admin.isExperienced()) {
- LdapWizard.detectEmailAttribute();
- } else if(triggerObj.id === 'ldap_group_filter' && !LdapWizard.admin.isExperienced()) {
- LdapWizard.detectGroupMemberAssoc();
- }
-
if(triggerObj.id === 'ldap_loginfilter_username'
|| triggerObj.id === 'ldap_loginfilter_email') {
LdapWizard.loginFilter.compose();
+ } else if (!LdapWizard.admin.isExperienced()) {
+ if(triggerObj.id === 'ldap_userlist_filter') {
+ LdapWizard.userFilter.updateCount();
+ } else if (triggerObj.id === 'ldap_group_filter') {
+ LdapWizard.groupFilter.updateCount();
+ }
}
if($('#ldapSettings').tabs('option', 'active') == 0) {
@@ -749,7 +812,7 @@ var LdapWizard = {
LdapWizard._save($('#'+originalObj)[0], $.trim(values));
if(originalObj === 'ldap_userfilter_objectclass'
|| originalObj === 'ldap_userfilter_groups') {
- LdapWizard.userFilter.compose(LdapWizard.detectEmailAttribute);
+ LdapWizard.userFilter.compose(true);
//when user filter is changed afterwards, login filter needs to
//be adjusted, too
if(!LdapWizard.loginFilter) {
@@ -760,7 +823,7 @@ var LdapWizard = {
LdapWizard.loginFilter.compose();
} else if(originalObj === 'ldap_groupfilter_objectclass'
|| originalObj === 'ldap_groupfilter_groups') {
- LdapWizard.groupFilter.compose();
+ LdapWizard.groupFilter.compose(true);
}
},
@@ -830,10 +893,10 @@ var LdapWizard = {
LdapWizard._save({ id: modeKey }, LdapWizard.filterModeAssisted);
if(isUser) {
LdapWizard.blacklistRemove('ldap_userlist_filter');
- LdapWizard.userFilter.compose(LdapWizard.detectEmailAttribute);
+ LdapWizard.userFilter.compose(true);
} else {
LdapWizard.blacklistRemove('ldap_group_filter');
- LdapWizard.groupFilter.compose();
+ LdapWizard.groupFilter.compose(true);
}
}
},
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/cs_CZ.js b/apps/user_ldap/l10n/cs_CZ.js
index 017b4f37e39..f4782d57d66 100644
--- a/apps/user_ldap/l10n/cs_CZ.js
+++ b/apps/user_ldap/l10n/cs_CZ.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Potvrdit smazání",
"_%s group found_::_%s groups found_" : ["nalezena %s skupina","nalezeny %s skupiny","nalezeno %s skupin"],
"_%s user found_::_%s users found_" : ["nalezen %s uživatel","nalezeni %s uživatelé","nalezeno %s uživatelů"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nelze detekovat atribut pro zobrazení jména uživatele. Upřesněte ho prosím sami v rozšířeném nastavení LDAP.",
"Could not find the desired feature" : "Nelze nalézt požadovanou vlastnost",
"Invalid Host" : "Neplatný hostitel",
"Server" : "Server",
@@ -79,7 +80,7 @@ OC.L10N.register(
"LDAP" : "LDAP",
"Expert" : "Expertní",
"Advanced" : "Pokročilé",
- "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Varování:</b> Aplikace user_ldap a user_webdavauth jsou vzájemně nekompatibilní. Můžete zaznamenat neočekávané chování. Požádejte prosím vašeho systémového administrátora o zakázání jednoho z nich.",
+ "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Varování:</b> Aplikace user_ldap a user_webdavauth jsou vzájemně nekompatibilní. Můžete zaznamenat neočekávané chování. Požádejte prosím svého správce systému o zakázání jedné z nich.",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Varování:</b> není nainstalován LDAP modul pro PHP, podpůrná vrstva nebude fungovat. Požádejte, prosím, správce systému, aby jej nainstaloval.",
"Connection Settings" : "Nastavení spojení",
"Configuration Active" : "Nastavení aktivní",
diff --git a/apps/user_ldap/l10n/cs_CZ.json b/apps/user_ldap/l10n/cs_CZ.json
index b63a3fb11ff..e3e51560987 100644
--- a/apps/user_ldap/l10n/cs_CZ.json
+++ b/apps/user_ldap/l10n/cs_CZ.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Potvrdit smazání",
"_%s group found_::_%s groups found_" : ["nalezena %s skupina","nalezeny %s skupiny","nalezeno %s skupin"],
"_%s user found_::_%s users found_" : ["nalezen %s uživatel","nalezeni %s uživatelé","nalezeno %s uživatelů"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nelze detekovat atribut pro zobrazení jména uživatele. Upřesněte ho prosím sami v rozšířeném nastavení LDAP.",
"Could not find the desired feature" : "Nelze nalézt požadovanou vlastnost",
"Invalid Host" : "Neplatný hostitel",
"Server" : "Server",
@@ -77,7 +78,7 @@
"LDAP" : "LDAP",
"Expert" : "Expertní",
"Advanced" : "Pokročilé",
- "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Varování:</b> Aplikace user_ldap a user_webdavauth jsou vzájemně nekompatibilní. Můžete zaznamenat neočekávané chování. Požádejte prosím vašeho systémového administrátora o zakázání jednoho z nich.",
+ "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Varování:</b> Aplikace user_ldap a user_webdavauth jsou vzájemně nekompatibilní. Můžete zaznamenat neočekávané chování. Požádejte prosím svého správce systému o zakázání jedné z nich.",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Varování:</b> není nainstalován LDAP modul pro PHP, podpůrná vrstva nebude fungovat. Požádejte, prosím, správce systému, aby jej nainstaloval.",
"Connection Settings" : "Nastavení spojení",
"Configuration Active" : "Nastavení aktivní",
diff --git a/apps/user_ldap/l10n/da.js b/apps/user_ldap/l10n/da.js
index 91bce8c777e..fb6feccc4b6 100644
--- a/apps/user_ldap/l10n/da.js
+++ b/apps/user_ldap/l10n/da.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Bekræft Sletning",
"_%s group found_::_%s groups found_" : ["Der blev fundet %s gruppe","Der blev fundet %s grupper"],
"_%s user found_::_%s users found_" : ["Der blev fundet %s bruger","Der blev fundet %s brugere"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunne ikke registrere navneattributten for visning af bruger. Angiv den venligst selv i de avancerede ldap-indstillinger.",
"Could not find the desired feature" : "Fandt ikke den ønskede funktion",
"Invalid Host" : "Ugyldig vært",
"Server" : "Server",
diff --git a/apps/user_ldap/l10n/da.json b/apps/user_ldap/l10n/da.json
index 97d0c0ca403..0332afc101d 100644
--- a/apps/user_ldap/l10n/da.json
+++ b/apps/user_ldap/l10n/da.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Bekræft Sletning",
"_%s group found_::_%s groups found_" : ["Der blev fundet %s gruppe","Der blev fundet %s grupper"],
"_%s user found_::_%s users found_" : ["Der blev fundet %s bruger","Der blev fundet %s brugere"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunne ikke registrere navneattributten for visning af bruger. Angiv den venligst selv i de avancerede ldap-indstillinger.",
"Could not find the desired feature" : "Fandt ikke den ønskede funktion",
"Invalid Host" : "Ugyldig vært",
"Server" : "Server",
diff --git a/apps/user_ldap/l10n/de.js b/apps/user_ldap/l10n/de.js
index 94f388b0df4..545fb9c194f 100644
--- a/apps/user_ldap/l10n/de.js
+++ b/apps/user_ldap/l10n/de.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Löschung bestätigen",
"_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"],
"_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Das Benutzeranzeigename-Attribut konnte nicht gefunden werden. Bitte gib es selber in den erweiterten LDAP-Einstellungen an.",
"Could not find the desired feature" : "Konnte die gewünschte Funktion nicht finden",
"Invalid Host" : "Ungültiger Host",
"Server" : "Server",
diff --git a/apps/user_ldap/l10n/de.json b/apps/user_ldap/l10n/de.json
index f3524664fc1..df0f777536a 100644
--- a/apps/user_ldap/l10n/de.json
+++ b/apps/user_ldap/l10n/de.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Löschung bestätigen",
"_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"],
"_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Das Benutzeranzeigename-Attribut konnte nicht gefunden werden. Bitte gib es selber in den erweiterten LDAP-Einstellungen an.",
"Could not find the desired feature" : "Konnte die gewünschte Funktion nicht finden",
"Invalid Host" : "Ungültiger Host",
"Server" : "Server",
diff --git a/apps/user_ldap/l10n/de_DE.js b/apps/user_ldap/l10n/de_DE.js
index 3cefc2ec625..c89d7793a4a 100644
--- a/apps/user_ldap/l10n/de_DE.js
+++ b/apps/user_ldap/l10n/de_DE.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Löschung bestätigen",
"_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"],
"_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Das Benutzeranzeigename-Attribut konnte nicht gefunden werden. Bitte geben Sie es selber in den erweiterten LDAP-Einstellungen an.",
"Could not find the desired feature" : "Konnte die gewünschte Funktion nicht finden",
"Invalid Host" : "Ungültiger Host",
"Server" : "Server",
diff --git a/apps/user_ldap/l10n/de_DE.json b/apps/user_ldap/l10n/de_DE.json
index cf823ca29d4..7b047cbcd2f 100644
--- a/apps/user_ldap/l10n/de_DE.json
+++ b/apps/user_ldap/l10n/de_DE.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Löschung bestätigen",
"_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"],
"_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Das Benutzeranzeigename-Attribut konnte nicht gefunden werden. Bitte geben Sie es selber in den erweiterten LDAP-Einstellungen an.",
"Could not find the desired feature" : "Konnte die gewünschte Funktion nicht finden",
"Invalid Host" : "Ungültiger Host",
"Server" : "Server",
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 3736ade73ce..3aeaaf0bb5c 100644
--- a/apps/user_ldap/l10n/fr.js
+++ b/apps/user_ldap/l10n/fr.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Confirmer la suppression",
"_%s group found_::_%s groups found_" : ["%s groupe trouvé","%s groupes trouvés"],
"_%s user found_::_%s users found_" : ["%s utilisateur trouvé","%s utilisateurs trouvés"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Impossible de détecter l'attribut contenant le nom d'affichage des utilisateurs. Veuillez l'indiquer vous-même dans les paramètres ldap avancés.",
"Could not find the desired feature" : "Impossible de trouver la fonction souhaitée",
"Invalid Host" : "Hôte invalide",
"Server" : "Serveur",
@@ -96,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",
@@ -119,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 58ac6f3d248..31d56f28b40 100644
--- a/apps/user_ldap/l10n/fr.json
+++ b/apps/user_ldap/l10n/fr.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Confirmer la suppression",
"_%s group found_::_%s groups found_" : ["%s groupe trouvé","%s groupes trouvés"],
"_%s user found_::_%s users found_" : ["%s utilisateur trouvé","%s utilisateurs trouvés"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Impossible de détecter l'attribut contenant le nom d'affichage des utilisateurs. Veuillez l'indiquer vous-même dans les paramètres ldap avancés.",
"Could not find the desired feature" : "Impossible de trouver la fonction souhaitée",
"Invalid Host" : "Hôte invalide",
"Server" : "Serveur",
@@ -94,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",
@@ -117,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/hi_IN.php b/apps/user_ldap/l10n/hi_IN.php
deleted file mode 100644
index 3a1e002311c..00000000000
--- a/apps/user_ldap/l10n/hi_IN.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"_%s group found_::_%s groups found_" => array("",""),
-"_%s user found_::_%s users found_" => array("","")
-);
-$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/user_ldap/l10n/it.js b/apps/user_ldap/l10n/it.js
index 92bab544984..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",
@@ -63,7 +64,7 @@ OC.L10N.register(
"You can omit the protocol, except you require SSL. Then start with ldaps://" : "È possibile omettere il protocollo, ad eccezione se è necessario SSL. Quindi inizia con ldaps://",
"Port" : "Porta",
"User DN" : "DN utente",
- "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "Il DN per il client dell'utente con cui deve essere associato, ad esempio uid=agent,dc=example,dc=com. Per l'accesso anonimo, lasciare vuoti i campi DN e Password",
+ "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "Il DN per il client dell'utente con cui deve essere associato, ad esempio uid=agente,dc=esempio,dc=com. Per l'accesso anonimo, lasciare vuoti i campi DN e Password",
"Password" : "Password",
"For anonymous access, leave DN and Password empty." : "Per l'accesso anonimo, lasciare vuoti i campi DN e Password",
"One Base DN per line" : "Un DN base per riga",
diff --git a/apps/user_ldap/l10n/it.json b/apps/user_ldap/l10n/it.json
index 31a694a4b1c..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",
@@ -61,7 +62,7 @@
"You can omit the protocol, except you require SSL. Then start with ldaps://" : "È possibile omettere il protocollo, ad eccezione se è necessario SSL. Quindi inizia con ldaps://",
"Port" : "Porta",
"User DN" : "DN utente",
- "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "Il DN per il client dell'utente con cui deve essere associato, ad esempio uid=agent,dc=example,dc=com. Per l'accesso anonimo, lasciare vuoti i campi DN e Password",
+ "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "Il DN per il client dell'utente con cui deve essere associato, ad esempio uid=agente,dc=esempio,dc=com. Per l'accesso anonimo, lasciare vuoti i campi DN e Password",
"Password" : "Password",
"For anonymous access, leave DN and Password empty." : "Per l'accesso anonimo, lasciare vuoti i campi DN e Password",
"One Base DN per line" : "Un DN base per riga",
diff --git a/apps/user_ldap/l10n/nl.js b/apps/user_ldap/l10n/nl.js
index e448b161f00..ae280e1a05e 100644
--- a/apps/user_ldap/l10n/nl.js
+++ b/apps/user_ldap/l10n/nl.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Bevestig verwijderen",
"_%s group found_::_%s groups found_" : ["%s groep gevonden","%s groepen gevonden"],
"_%s user found_::_%s users found_" : ["%s gebruiker gevonden","%s gebruikers gevonden"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kon het weergavenaam attribuut van de gebruiker niet vinden. Geef het zelf op in de geavanceerde ldap instellingen.",
"Could not find the desired feature" : "Kon de gewenste functie niet vinden",
"Invalid Host" : "Ongeldige server",
"Server" : "Server",
diff --git a/apps/user_ldap/l10n/nl.json b/apps/user_ldap/l10n/nl.json
index eb1eecf8201..ed0ce08501a 100644
--- a/apps/user_ldap/l10n/nl.json
+++ b/apps/user_ldap/l10n/nl.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Bevestig verwijderen",
"_%s group found_::_%s groups found_" : ["%s groep gevonden","%s groepen gevonden"],
"_%s user found_::_%s users found_" : ["%s gebruiker gevonden","%s gebruikers gevonden"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kon het weergavenaam attribuut van de gebruiker niet vinden. Geef het zelf op in de geavanceerde ldap instellingen.",
"Could not find the desired feature" : "Kon de gewenste functie niet vinden",
"Invalid Host" : "Ongeldige server",
"Server" : "Server",
diff --git a/apps/user_ldap/l10n/pt_BR.js b/apps/user_ldap/l10n/pt_BR.js
index 32b7697df3e..a4a481524ba 100644
--- a/apps/user_ldap/l10n/pt_BR.js
+++ b/apps/user_ldap/l10n/pt_BR.js
@@ -33,6 +33,7 @@ OC.L10N.register(
"Confirm Deletion" : "Confirmar Exclusão",
"_%s group found_::_%s groups found_" : ["grupo% s encontrado","grupos% s encontrado"],
"_%s user found_::_%s users found_" : ["usuário %s encontrado","usuários %s encontrados"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Não foi possível detectar o nome de exibição do atributo do usuário. Por favor, indique-o você mesmo em configurações avançadas do LDAP.",
"Could not find the desired feature" : "Não foi possível encontrar a função desejada",
"Invalid Host" : "Host Inválido",
"Server" : "Servidor",
diff --git a/apps/user_ldap/l10n/pt_BR.json b/apps/user_ldap/l10n/pt_BR.json
index ea59ed7b4d8..4dd9088b727 100644
--- a/apps/user_ldap/l10n/pt_BR.json
+++ b/apps/user_ldap/l10n/pt_BR.json
@@ -31,6 +31,7 @@
"Confirm Deletion" : "Confirmar Exclusão",
"_%s group found_::_%s groups found_" : ["grupo% s encontrado","grupos% s encontrado"],
"_%s user found_::_%s users found_" : ["usuário %s encontrado","usuários %s encontrados"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Não foi possível detectar o nome de exibição do atributo do usuário. Por favor, indique-o você mesmo em configurações avançadas do LDAP.",
"Could not find the desired feature" : "Não foi possível encontrar a função desejada",
"Invalid Host" : "Host Inválido",
"Server" : "Servidor",
diff --git a/apps/user_ldap/l10n/sk.php b/apps/user_ldap/l10n/sk.php
deleted file mode 100644
index e258ffac223..00000000000
--- a/apps/user_ldap/l10n/sk.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"_%s group found_::_%s groups found_" => array("","",""),
-"_%s user found_::_%s users found_" => array("","",""),
-"Save" => "Uložiť",
-"Advanced" => "Pokročilé"
-);
-$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/apps/user_ldap/l10n/sq.js b/apps/user_ldap/l10n/sq.js
index 056458c24b6..b436bef7bf2 100644
--- a/apps/user_ldap/l10n/sq.js
+++ b/apps/user_ldap/l10n/sq.js
@@ -32,6 +32,7 @@ OC.L10N.register(
"For anonymous access, leave DN and Password empty." : "Për tu lidhur në mënyre anonime, lini bosh hapsirat e DN dhe fjalëkalim",
"One Base DN per line" : "Një baze DN për rrjesht",
"You can specify Base DN for users and groups in the Advanced tab" : "Ju mund të specifikoni Bazen DN për përdorues dhe grupe në butonin 'Të Përparuara'",
+ "Continue" : "Vazhdo",
"Advanced" : "E përparuar",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Njoftim:</b> moduli PHP LDAP nuk është instaluar, motori nuk do të funksionojë.Kontaktoni me administratorin e sistemit.",
"Connection Settings" : "Të dhënat e lidhjes",
diff --git a/apps/user_ldap/l10n/sq.json b/apps/user_ldap/l10n/sq.json
index a3e87869355..5b81af7100d 100644
--- a/apps/user_ldap/l10n/sq.json
+++ b/apps/user_ldap/l10n/sq.json
@@ -30,6 +30,7 @@
"For anonymous access, leave DN and Password empty." : "Për tu lidhur në mënyre anonime, lini bosh hapsirat e DN dhe fjalëkalim",
"One Base DN per line" : "Një baze DN për rrjesht",
"You can specify Base DN for users and groups in the Advanced tab" : "Ju mund të specifikoni Bazen DN për përdorues dhe grupe në butonin 'Të Përparuara'",
+ "Continue" : "Vazhdo",
"Advanced" : "E përparuar",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Njoftim:</b> moduli PHP LDAP nuk është instaluar, motori nuk do të funksionojë.Kontaktoni me administratorin e sistemit.",
"Connection Settings" : "Të dhënat e lidhjes",
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/l10n/ur.php b/apps/user_ldap/l10n/ur.php
deleted file mode 100644
index c29e4dba209..00000000000
--- a/apps/user_ldap/l10n/ur.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Error" => "خرابی",
-"_%s group found_::_%s groups found_" => array("",""),
-"_%s user found_::_%s users found_" => array("","")
-);
-$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php
index d89029abf17..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
@@ -813,7 +824,7 @@ class Access extends LDAPUtility implements user\IUserTools {
}
//check whether paged search should be attempted
- $pagedSearchOK = $this->initPagedSearch($filter, $base, $attr, $limit, $offset);
+ $pagedSearchOK = $this->initPagedSearch($filter, $base, $attr, intval($limit), $offset);
$linkResources = array_pad(array(), count($base), $cr);
$sr = $this->ldap->search($linkResources, $base, $filter, $attr);
@@ -887,8 +898,9 @@ class Access extends LDAPUtility implements user\IUserTools {
private function count($filter, $base, $attr = null, $limit = null, $offset = null, $skipHandling = false) {
\OCP\Util::writeLog('user_ldap', 'Count filter: '.print_r($filter, true), \OCP\Util::DEBUG);
- if(is_null($limit) || $limit <= 0) {
- $limit = intval($this->connection->ldapPagingSize);
+ $limitPerPage = intval($this->connection->ldapPagingSize);
+ if(!is_null($limit) && $limit < $limitPerPage && $limit > 0) {
+ $limitPerPage = $limit;
}
$counter = 0;
@@ -898,19 +910,19 @@ class Access extends LDAPUtility implements user\IUserTools {
do {
$continue = false;
$search = $this->executeSearch($filter, $base, $attr,
- $limit, $offset);
+ $limitPerPage, $offset);
if($search === false) {
return $counter > 0 ? $counter : false;
}
list($sr, $pagedSearchOK) = $search;
- $count = $this->countEntriesInSearchResults($sr, $limit, $continue);
+ $count = $this->countEntriesInSearchResults($sr, $limitPerPage, $continue);
$counter += $count;
- $this->processPagedSearchStatus($sr, $filter, $base, $count, $limit,
+ $this->processPagedSearchStatus($sr, $filter, $base, $count, $limitPerPage,
$offset, $pagedSearchOK, $skipHandling);
- $offset += $limit;
- } while($continue);
+ $offset += $limitPerPage;
+ } while($continue && (is_null($limit) || $limit <= 0 || $limit > $counter));
return $counter;
}
@@ -1141,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
@@ -1150,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 '';
@@ -1168,6 +1219,19 @@ class Access extends LDAPUtility implements user\IUserTools {
}
/**
+ * returns the filter used for counting users
+ * @return string
+ */
+ public function getFilterForUserCount() {
+ $filter = $this->combineFilterWithAnd(array(
+ $this->connection->ldapUserFilter,
+ $this->connection->ldapUserDisplayName . '=*'
+ ));
+
+ return $filter;
+ }
+
+ /**
* @param string $name
* @param string $password
* @return bool
@@ -1457,7 +1521,7 @@ class Access extends LDAPUtility implements user\IUserTools {
*/
private function initPagedSearch($filter, $bases, $attr, $limit, $offset) {
$pagedSearchOK = false;
- if($this->connection->hasPagedResultSupport && !is_null($limit)) {
+ if($this->connection->hasPagedResultSupport && ($limit !== 0)) {
$offset = intval($offset); //can be null
\OCP\Util::writeLog('user_ldap',
'initializing paged search for Filter '.$filter.' base '.print_r($bases, true)
diff --git a/apps/user_ldap/lib/wizard.php b/apps/user_ldap/lib/wizard.php
index 1d7701440e9..578a920f00e 100644
--- a/apps/user_ldap/lib/wizard.php
+++ b/apps/user_ldap/lib/wizard.php
@@ -56,7 +56,7 @@ class Wizard extends LDAPUtility {
Wizard::$l = \OC::$server->getL10N('user_ldap');
}
$this->access = $access;
- $this->result = new WizardResult;
+ $this->result = new WizardResult();
}
public function __destruct() {
@@ -120,7 +120,7 @@ class Wizard extends LDAPUtility {
* @throws \Exception
*/
public function countUsers() {
- $filter = $this->configuration->ldapUserFilter;
+ $filter = $this->access->getFilterForUserCount();
$usersTotal = $this->countEntries($filter, 'users');
$usersTotal = ($usersTotal !== false) ? $usersTotal : 0;
@@ -132,9 +132,10 @@ class Wizard extends LDAPUtility {
/**
* counts users with a specified attribute
* @param string $attr
+ * @param bool $existsCheck
* @return int|bool
*/
- public function countUsersWithAttribute($attr) {
+ public function countUsersWithAttribute($attr, $existsCheck = false) {
if(!$this->checkRequirements(array('ldapHost',
'ldapPort',
'ldapBase',
@@ -148,7 +149,51 @@ class Wizard extends LDAPUtility {
$attr . '=*'
));
- return $this->access->countUsers($filter);
+ $limit = ($existsCheck === false) ? null : 1;
+
+ return $this->access->countUsers($filter, array('dn'), $limit);
+ }
+
+ /**
+ * detects the display name attribute. If a setting is already present that
+ * returns at least one hit, the detection will be canceled.
+ * @return WizardResult|bool
+ * @throws \Exception
+ */
+ public function detectUserDisplayNameAttribute() {
+ if(!$this->checkRequirements(array('ldapHost',
+ 'ldapPort',
+ 'ldapBase',
+ 'ldapUserFilter',
+ ))) {
+ return false;
+ }
+
+ $attr = $this->configuration->ldapUserDisplayName;
+ if($attr !== 'displayName' && !empty($attr)) {
+ // most likely not the default value with upper case N,
+ // verify it still produces a result
+ $count = intval($this->countUsersWithAttribute($attr, true));
+ if($count > 0) {
+ //no change, but we sent it back to make sure the user interface
+ //is still correct, even if the ajax call was cancelled inbetween
+ $this->result->addChange('ldap_display_name', $attr);
+ return $this->result;
+ }
+ }
+
+ // first attribute that has at least one result wins
+ $displayNameAttrs = array('displayname', 'cn');
+ foreach ($displayNameAttrs as $attr) {
+ $count = intval($this->countUsersWithAttribute($attr, true));
+
+ if($count > 0) {
+ $this->applyFind('ldap_display_name', $attr);
+ return $this->result;
+ }
+ };
+
+ throw new \Exception(self::$l->t('Could not detect user display name attribute. Please specify it yourself in advanced ldap settings.'));
}
/**
@@ -168,7 +213,7 @@ class Wizard extends LDAPUtility {
$attr = $this->configuration->ldapEmailAttribute;
if(!empty($attr)) {
- $count = intval($this->countUsersWithAttribute($attr));
+ $count = intval($this->countUsersWithAttribute($attr, true));
if($count > 0) {
return false;
}
@@ -189,7 +234,7 @@ class Wizard extends LDAPUtility {
}
if($winner !== '') {
- $this->result->addChange('ldap_email_attr', $winner);
+ $this->applyFind('ldap_email_attr', $winner);
if($writeLog) {
\OCP\Util::writeLog('user_ldap', 'The mail attribute has ' .
'automatically been reset, because the original value ' .
diff --git a/apps/user_ldap/tests/access.php b/apps/user_ldap/tests/access.php
index 8ff39800808..85849229152 100644
--- a/apps/user_ldap/tests/access.php
+++ b/apps/user_ldap/tests/access.php
@@ -26,7 +26,7 @@ use \OCA\user_ldap\lib\Access;
use \OCA\user_ldap\lib\Connection;
use \OCA\user_ldap\lib\ILDAPWrapper;
-class Test_Access extends \PHPUnit_Framework_TestCase {
+class Test_Access extends \Test\TestCase {
private function getConnecterAndLdapMock() {
static $conMethods;
static $accMethods;
diff --git a/apps/user_ldap/tests/connection.php b/apps/user_ldap/tests/connection.php
index f51b0c83017..e3f29cec982 100644
--- a/apps/user_ldap/tests/connection.php
+++ b/apps/user_ldap/tests/connection.php
@@ -22,7 +22,7 @@
namespace OCA\user_ldap\tests;
-class Test_Connection extends \PHPUnit_Framework_TestCase {
+class Test_Connection extends \Test\TestCase {
public function testOriginalAgentUnchangedOnClone() {
//background: upon login a bind is done with the user credentials
diff --git a/apps/user_ldap/tests/group_ldap.php b/apps/user_ldap/tests/group_ldap.php
index d1262e4f5b8..0e01eb3ba6f 100644
--- a/apps/user_ldap/tests/group_ldap.php
+++ b/apps/user_ldap/tests/group_ldap.php
@@ -22,14 +22,12 @@
namespace OCA\user_ldap\tests;
-namespace OCA\user_ldap\tests;
-
use \OCA\user_ldap\GROUP_LDAP as GroupLDAP;
use \OCA\user_ldap\lib\Access;
use \OCA\user_ldap\lib\Connection;
use \OCA\user_ldap\lib\ILDAPWrapper;
-class Test_Group_Ldap extends \PHPUnit_Framework_TestCase {
+class Test_Group_Ldap extends \Test\TestCase {
private function getAccessMock() {
static $conMethods;
static $accMethods;
diff --git a/apps/user_ldap/tests/helper.php b/apps/user_ldap/tests/helper.php
index 07c24d64499..a70a57051c8 100644
--- a/apps/user_ldap/tests/helper.php
+++ b/apps/user_ldap/tests/helper.php
@@ -11,7 +11,7 @@ namespace OCA\user_ldap\tests;
use OCA\user_ldap\lib\Helper;
-class Test_Helper extends \PHPUnit_Framework_TestCase {
+class Test_Helper extends \Test\TestCase {
public function testTableTruncate() {
diff --git a/apps/user_ldap/tests/user/manager.php b/apps/user_ldap/tests/user/manager.php
index 7d687867213..b3e52084dba 100644
--- a/apps/user_ldap/tests/user/manager.php
+++ b/apps/user_ldap/tests/user/manager.php
@@ -24,7 +24,7 @@ namespace OCA\user_ldap\tests;
use OCA\user_ldap\lib\user\Manager;
-class Test_User_Manager extends \PHPUnit_Framework_TestCase {
+class Test_User_Manager extends \Test\TestCase {
private function getTestInstances() {
$access = $this->getMock('\OCA\user_ldap\lib\user\IUserTools');
diff --git a/apps/user_ldap/tests/user/user.php b/apps/user_ldap/tests/user/user.php
index b66a9237266..e110921d2d3 100644
--- a/apps/user_ldap/tests/user/user.php
+++ b/apps/user_ldap/tests/user/user.php
@@ -24,7 +24,7 @@ namespace OCA\user_ldap\tests;
use OCA\user_ldap\lib\user\User;
-class Test_User_User extends \PHPUnit_Framework_TestCase {
+class Test_User_User extends \Test\TestCase {
private function getTestInstances() {
$access = $this->getMock('\OCA\user_ldap\lib\user\IUserTools');
diff --git a/apps/user_ldap/tests/user_ldap.php b/apps/user_ldap/tests/user_ldap.php
index c89edc33fa9..33cec0247b6 100644
--- a/apps/user_ldap/tests/user_ldap.php
+++ b/apps/user_ldap/tests/user_ldap.php
@@ -27,11 +27,13 @@ use \OCA\user_ldap\lib\Access;
use \OCA\user_ldap\lib\Connection;
use \OCA\user_ldap\lib\ILDAPWrapper;
-class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
+class Test_User_Ldap_Direct extends \Test\TestCase {
protected $backend;
protected $access;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
\OC_User::clearBackends();
\OC_Group::clearBackends();
}
@@ -550,23 +552,9 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
public function testCountUsers() {
$access = $this->getAccessMock();
- $access->connection->expects($this->once())
- ->method('__get')
- ->will($this->returnCallback(function($name) {
- if($name === 'ldapLoginFilter') {
- return 'uid=%uid';
- }
- return null;
- }));
-
$access->expects($this->once())
->method('countUsers')
- ->will($this->returnCallback(function($filter, $a, $b, $c) {
- if($filter !== 'uid=*') {
- return false;
- }
- return 5;
- }));
+ ->will($this->returnValue(5));
$backend = new UserLDAP($access);
@@ -577,23 +565,9 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
public function testCountUsersFailing() {
$access = $this->getAccessMock();
- $access->connection->expects($this->once())
- ->method('__get')
- ->will($this->returnCallback(function($name) {
- if($name === 'ldapLoginFilter') {
- return 'invalidFilter';
- }
- return null;
- }));
-
$access->expects($this->once())
->method('countUsers')
- ->will($this->returnCallback(function($filter, $a, $b, $c) {
- if($filter !== 'uid=*') {
- return false;
- }
- return 5;
- }));
+ ->will($this->returnValue(false));
$backend = new UserLDAP($access);
diff --git a/apps/user_ldap/tests/wizard.php b/apps/user_ldap/tests/wizard.php
index 1f420f9ee8a..7284e466536 100644
--- a/apps/user_ldap/tests/wizard.php
+++ b/apps/user_ldap/tests/wizard.php
@@ -29,8 +29,9 @@ use \OCA\user_ldap\lib\Wizard;
// use \OCA\user_ldap\lib\Configuration;
// use \OCA\user_ldap\lib\ILDAPWrapper;
-class Test_Wizard extends \PHPUnit_Framework_TestCase {
- public function setUp() {
+class Test_Wizard extends \Test\TestCase {
+ protected function setUp() {
+ parent::setUp();
//we need to make sure the consts are defined, otherwise tests will fail
//on systems without php5_ldap
$ldapConsts = array('LDAP_OPT_PROTOCOL_VERSION',
diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php
index 6e244311d4a..38c32cbda4a 100644
--- a/apps/user_ldap/user_ldap.php
+++ b/apps/user_ldap/user_ldap.php
@@ -290,9 +290,13 @@ class USER_LDAP extends BackendUtility implements \OCP\UserInterface {
* @return int|bool
*/
public function countUsers() {
- $filter = \OCP\Util::mb_str_replace(
- '%uid', '*', $this->access->connection->ldapLoginFilter, 'UTF-8');
+ $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/apps/user_webdavauth/l10n/sk.php b/apps/user_webdavauth/l10n/sk.php
deleted file mode 100644
index 9efe9fe6549..00000000000
--- a/apps/user_webdavauth/l10n/sk.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Save" => "Uložiť"
-);
-$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
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 daca5aed362..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' => '',
@@ -71,13 +74,14 @@ $CONFIG = array(
'trusted_domains' =>
array (
'demo.example.org',
- 'otherdomain.example.org:8080',
+ 'otherdomain.example.org',
),
/**
* 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',
@@ -134,6 +145,12 @@ $CONFIG = array(
),
/**
+ * sqlite3 journal mode can be specified using this config parameter - can be 'WAL' or 'DELETE'
+ * see for more details https://www.sqlite.org/wal.html
+ */
+'sqlite.journal_mode' => 'DELETE',
+
+/**
* Indicates whether the ownCloud instance was installed successfully; ``true``
* indicates a successful installation, and ``false`` indicates an unsuccessful
* installation.
@@ -434,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
@@ -441,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',
@@ -527,6 +555,7 @@ $CONFIG = array(
/**
* When enabled, admins may install apps from the ownCloud app store.
+ * The app store is disabled by default for ownCloud Enterprise Edition
*/
'appstoreenabled' => true,
@@ -617,7 +646,7 @@ $CONFIG = array(
* concerns:
*
* - OC\Preview\Illustrator
- * - OC\Preview\Movies
+ * - OC\Preview\Movie
* - OC\Preview\MSOffice2003
* - OC\Preview\MSOffice2007
* - OC\Preview\MSOfficeDoc
@@ -825,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/application.php b/core/application.php
index 33801847758..c36ab559c27 100644
--- a/core/application.php
+++ b/core/application.php
@@ -10,13 +10,22 @@
namespace OC\Core;
+use OC\AppFramework\Utility\SimpleContainer;
use \OCP\AppFramework\App;
use OC\Core\LostPassword\Controller\LostController;
use OC\Core\User\UserController;
+use \OCP\Util;
+/**
+ * Class Application
+ *
+ * @package OC\Core
+ */
class Application extends App {
-
+ /**
+ * @param array $urlParams
+ */
public function __construct(array $urlParams=array()){
parent::__construct('core', $urlParams);
@@ -25,29 +34,56 @@ class Application extends App {
/**
* Controllers
*/
- $container->registerService('LostController', function($c) {
+ $container->registerService('LostController', function(SimpleContainer $c) {
return new LostController(
$c->query('AppName'),
$c->query('Request'),
- $c->query('ServerContainer')->getURLGenerator(),
- $c->query('ServerContainer')->getUserManager(),
- new \OC_Defaults(),
- $c->query('ServerContainer')->getL10N('core'),
- $c->query('ServerContainer')->getConfig(),
- $c->query('ServerContainer')->getUserSession(),
- \OCP\Util::getDefaultEmailAddress('lostpassword-noreply'),
- \OC_App::isEnabled('files_encryption')
+ $c->query('URLGenerator'),
+ $c->query('UserManager'),
+ $c->query('Defaults'),
+ $c->query('L10N'),
+ $c->query('Config'),
+ $c->query('SecureRandom'),
+ $c->query('DefaultEmailAddress'),
+ $c->query('IsEncryptionEnabled')
);
});
- $container->registerService('UserController', function($c) {
+ $container->registerService('UserController', function(SimpleContainer $c) {
return new UserController(
$c->query('AppName'),
$c->query('Request'),
- $c->query('ServerContainer')->getUserManager(),
- new \OC_Defaults()
+ $c->query('UserManager'),
+ $c->query('Defaults')
);
});
- }
+ /**
+ * Core class wrappers
+ */
+ $container->registerService('IsEncryptionEnabled', function() {
+ return \OC_App::isEnabled('files_encryption');
+ });
+ $container->registerService('URLGenerator', function(SimpleContainer $c) {
+ return $c->query('ServerContainer')->getURLGenerator();
+ });
+ $container->registerService('UserManager', function(SimpleContainer $c) {
+ return $c->query('ServerContainer')->getUserManager();
+ });
+ $container->registerService('Config', function(SimpleContainer $c) {
+ return $c->query('ServerContainer')->getConfig();
+ });
+ $container->registerService('L10N', function(SimpleContainer $c) {
+ return $c->query('ServerContainer')->getL10N('core');
+ });
+ $container->registerService('SecureRandom', function(SimpleContainer $c) {
+ return $c->query('ServerContainer')->getSecureRandom();
+ });
+ $container->registerService('Defaults', function() {
+ return new \OC_Defaults;
+ });
+ $container->registerService('DefaultEmailAddress', function() {
+ return Util::getDefaultEmailAddress('lostpassword-noreply');
+ });
+ }
}
diff --git a/core/command/db/converttype.php b/core/command/db/converttype.php
index 2188b1135bb..617910b3a90 100644
--- a/core/command/db/converttype.php
+++ b/core/command/db/converttype.php
@@ -10,7 +10,7 @@
namespace OC\Core\Command\Db;
-use OC\Config;
+use \OCP\IConfig;
use OC\DB\Connection;
use OC\DB\ConnectionFactory;
@@ -22,7 +22,7 @@ use Symfony\Component\Console\Output\OutputInterface;
class ConvertType extends Command {
/**
- * @var \OC\Config
+ * @var \OCP\IConfig
*/
protected $config;
@@ -32,10 +32,10 @@ class ConvertType extends Command {
protected $connectionFactory;
/**
- * @param \OC\Config $config
+ * @param \OCP\IConfig $config
* @param \OC\DB\ConnectionFactory $connectionFactory
*/
- public function __construct(Config $config, ConnectionFactory $connectionFactory) {
+ public function __construct(IConfig $config, ConnectionFactory $connectionFactory) {
$this->config = $config;
$this->connectionFactory = $connectionFactory;
parent::__construct();
@@ -104,7 +104,7 @@ class ConvertType extends Command {
'Converting to Microsoft SQL Server (mssql) is currently not supported.'
);
}
- if ($type === $this->config->getValue('dbtype', '')) {
+ if ($type === $this->config->getSystemValue('dbtype', '')) {
throw new \InvalidArgumentException(sprintf(
'Can not convert from %1$s to %1$s.',
$type
@@ -209,7 +209,7 @@ class ConvertType extends Command {
'user' => $input->getArgument('username'),
'password' => $input->getOption('password'),
'dbname' => $input->getArgument('database'),
- 'tablePrefix' => $this->config->getValue('dbtableprefix', 'oc_'),
+ 'tablePrefix' => $this->config->getSystemValue('dbtableprefix', 'oc_'),
);
if ($input->getOption('port')) {
$connectionParams['port'] = $input->getOption('port');
@@ -256,7 +256,7 @@ class ConvertType extends Command {
}
protected function convertDB(Connection $fromDB, Connection $toDB, array $tables, InputInterface $input, OutputInterface $output) {
- $this->config->setValue('maintenance', true);
+ $this->config->setSystemValue('maintenance', true);
try {
// copy table rows
foreach($tables as $table) {
@@ -270,10 +270,10 @@ class ConvertType extends Command {
// save new database config
$this->saveDBInfo($input);
} catch(\Exception $e) {
- $this->config->setValue('maintenance', false);
+ $this->config->setSystemValue('maintenance', false);
throw $e;
}
- $this->config->setValue('maintenance', false);
+ $this->config->setSystemValue('maintenance', false);
}
protected function saveDBInfo(InputInterface $input) {
@@ -286,10 +286,10 @@ class ConvertType extends Command {
$dbhost .= ':'.$input->getOption('port');
}
- $this->config->setValue('dbtype', $type);
- $this->config->setValue('dbname', $dbname);
- $this->config->setValue('dbhost', $dbhost);
- $this->config->setValue('dbuser', $username);
- $this->config->setValue('dbpassword', $password);
+ $this->config->setSystemValue('dbtype', $type);
+ $this->config->setSystemValue('dbname', $dbname);
+ $this->config->setSystemValue('dbhost', $dbhost);
+ $this->config->setSystemValue('dbuser', $username);
+ $this->config->setSystemValue('dbpassword', $password);
}
}
diff --git a/core/command/maintenance/mode.php b/core/command/maintenance/mode.php
index f26a11384a8..f48a9d012c4 100644
--- a/core/command/maintenance/mode.php
+++ b/core/command/maintenance/mode.php
@@ -9,7 +9,7 @@
namespace OC\Core\Command\Maintenance;
-use OC\Config;
+use \OCP\IConfig;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
@@ -18,9 +18,10 @@ use Symfony\Component\Console\Output\OutputInterface;
class Mode extends Command {
+ /** @var IConfig */
protected $config;
- public function __construct(Config $config) {
+ public function __construct(IConfig $config) {
$this->config = $config;
parent::__construct();
}
@@ -45,13 +46,13 @@ class Mode extends Command {
protected function execute(InputInterface $input, OutputInterface $output) {
if ($input->getOption('on')) {
- $this->config->setValue('maintenance', true);
+ $this->config->setSystemValue('maintenance', true);
$output->writeln('Maintenance mode enabled');
} elseif ($input->getOption('off')) {
- $this->config->setValue('maintenance', false);
+ $this->config->setSystemValue('maintenance', false);
$output->writeln('Maintenance mode disabled');
} else {
- if ($this->config->getValue('maintenance', false)) {
+ if ($this->config->getSystemValue('maintenance', false)) {
$output->writeln('Maintenance mode is currently enabled');
} else {
$output->writeln('Maintenance mode is currently disabled');
diff --git a/core/command/maintenance/repair.php b/core/command/maintenance/repair.php
index 7c0cf71d3b6..bf94b2647ce 100644
--- a/core/command/maintenance/repair.php
+++ b/core/command/maintenance/repair.php
@@ -17,12 +17,14 @@ class Repair extends Command {
* @var \OC\Repair $repair
*/
protected $repair;
+ /** @var \OCP\IConfig */
+ protected $config;
/**
* @param \OC\Repair $repair
- * @param \OC\Config $config
+ * @param \OCP\IConfig $config
*/
- public function __construct(\OC\Repair $repair, \OC\Config $config) {
+ public function __construct(\OC\Repair $repair, \OCP\IConfig $config) {
$this->repair = $repair;
$this->config = $config;
parent::__construct();
@@ -35,8 +37,8 @@ class Repair extends Command {
}
protected function execute(InputInterface $input, OutputInterface $output) {
- $maintenanceMode = $this->config->getValue('maintenance', false);
- $this->config->setValue('maintenance', true);
+ $maintenanceMode = $this->config->getSystemValue('maintenance', false);
+ $this->config->setSystemValue('maintenance', true);
$this->repair->listen('\OC\Repair', 'step', function ($description) use ($output) {
$output->writeln(' - ' . $description);
@@ -50,6 +52,6 @@ class Repair extends Command {
$this->repair->run();
- $this->config->setValue('maintenance', $maintenanceMode);
+ $this->config->setSystemValue('maintenance', $maintenanceMode);
}
}
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/css/styles.css b/core/css/styles.css
index c45588cece6..2859399b59e 100644
--- a/core/css/styles.css
+++ b/core/css/styles.css
@@ -353,6 +353,12 @@ input[type="submit"].enabled {
filter: alpha(opacity=60);
opacity: .6;
}
+/* overrides another !important statement that sets this to unreadable black */
+#body-login form .warning input[type="checkbox"]:hover+label,
+#body-login form .warning input[type="checkbox"]:focus+label,
+#body-login form .warning input[type="checkbox"]+label {
+ color: #fff !important;
+}
#body-login .update h2 {
font-size: 20px;
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/js.js b/core/js/js.js
index 39e382b544b..eb2f10b51f0 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -253,6 +253,17 @@ var OC={
},
/**
+ * Loads translations for the given app asynchronously.
+ *
+ * @param {String} app app name
+ * @param {Function} callback callback to call after loading
+ * @return {Promise}
+ */
+ addTranslations: function(app, callback) {
+ return OC.L10N.load(app, callback);
+ },
+
+ /**
* Returns the base name of the given path.
* For example for "/abc/somefile.txt" it will return "somefile.txt"
*
@@ -475,6 +486,15 @@ var OC={
return window.matchMedia(media);
}
return false;
+ },
+
+ /**
+ * Returns the user's locale
+ *
+ * @return {String} locale string
+ */
+ getLocale: function() {
+ return $('html').prop('lang');
}
};
@@ -869,9 +889,9 @@ function object(o) {
function initCore() {
/**
- * Set users local to moment.js as soon as possible
+ * Set users locale to moment.js as soon as possible
*/
- moment.locale($('html').prop('lang'));
+ moment.locale(OC.getLocale());
/**
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/l10n.js b/core/js/l10n.js
index e375b7eca80..0c660584322 100644
--- a/core/js/l10n.js
+++ b/core/js/l10n.js
@@ -27,6 +27,38 @@ OC.L10N = {
_pluralFunctions: {},
/**
+ * Load an app's translation bundle if not loaded already.
+ *
+ * @param {String} appName name of the app
+ * @param {Function} callback callback to be called when
+ * the translations are loaded
+ * @return {Promise} promise
+ */
+ load: function(appName, callback) {
+ // already available ?
+ if (this._bundles[appName] || OC.getLocale() === 'en') {
+ var deferred = $.Deferred();
+ var promise = deferred.promise();
+ promise.then(callback);
+ deferred.resolve();
+ return promise;
+ }
+
+ var self = this;
+ var url = OC.filePath(appName, 'l10n', OC.getLocale() + '.json');
+
+ // load JSON translation bundle per AJAX
+ return $.get(url)
+ .then(
+ function(result) {
+ if (result.translations) {
+ self.register(appName, result.translations, result.pluralForm);
+ }
+ })
+ .then(callback);
+ },
+
+ /**
* Register an app's translation bundle.
*
* @param {String} appName name of the app
diff --git a/core/js/lostpassword.js b/core/js/lostpassword.js
index ad221cb30fc..294a9d8c1cf 100644
--- a/core/js/lostpassword.js
+++ b/core/js/lostpassword.js
@@ -8,19 +8,12 @@ OC.Lostpassword = {
+ ('<br /><input type="checkbox" id="encrypted-continue" value="Yes" />')
+ '<label for="encrypted-continue">'
+ t('core', 'I know what I\'m doing')
- + '</label><br />'
- + '<a id="lost-password-encryption" href>'
- + t('core', 'Reset password')
- + '</a>',
+ + '</label><br />',
resetErrorMsg : t('core', 'Password can not be changed. Please contact your administrator.'),
init : function() {
- if ($('#lost-password-encryption').length){
- $('#lost-password-encryption').click(OC.Lostpassword.sendLink);
- } else {
- $('#lost-password').click(OC.Lostpassword.sendLink);
- }
+ $('#lost-password').click(OC.Lostpassword.sendLink);
$('#reset-password #submit').click(OC.Lostpassword.resetPassword);
},
@@ -32,8 +25,7 @@ OC.Lostpassword = {
$.post(
OC.generateUrl('/lostpassword/email'),
{
- user : $('#user').val(),
- proceed: $('#encrypted-continue').attr('checked') ? 'Yes' : 'No'
+ user : $('#user').val()
},
OC.Lostpassword.sendLinkDone
);
@@ -84,11 +76,16 @@ OC.Lostpassword = {
$.post(
$('#password').parents('form').attr('action'),
{
- password : $('#password').val()
+ password : $('#password').val(),
+ proceed: $('#encrypted-continue').attr('checked') ? 'true' : 'false'
},
OC.Lostpassword.resetDone
);
}
+ if($('#encrypted-continue').attr('checked')) {
+ $('#reset-password #submit').hide();
+ $('#reset-password #float-spinner').removeClass('hidden');
+ }
},
resetDone : function(result){
@@ -115,7 +112,11 @@ OC.Lostpassword = {
},
redirect : function(msg){
- window.location = OC.webroot;
+ if(OC.webroot !== '') {
+ window.location = OC.webroot;
+ } else {
+ window.location = '/';
+ }
},
resetError : function(msg){
@@ -126,7 +127,7 @@ OC.Lostpassword = {
getResetStatusNode : function (){
if (!$('#lost-password').length){
- $('<p id="lost-password"></p>').insertAfter($('#submit'));
+ $('<p id="lost-password"></p>').insertBefore($('#reset-password fieldset'));
} else {
$('#lost-password').replaceWith($('<p id="lost-password"></p>'));
}
diff --git a/core/js/oc-requesttoken.js b/core/js/oc-requesttoken.js
index 02175a3d674..2f7548ecb77 100644
--- a/core/js/oc-requesttoken.js
+++ b/core/js/oc-requesttoken.js
@@ -1,3 +1,4 @@
$(document).on('ajaxSend',function(elm, xhr) {
xhr.setRequestHeader('requesttoken', oc_requesttoken);
-}); \ No newline at end of file
+ xhr.setRequestHeader('OCS-APIREQUEST', 'true');
+});
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/js/tests/specs/l10nSpec.js b/core/js/tests/specs/l10nSpec.js
index d5b0363ea38..cf7c8b11b1c 100644
--- a/core/js/tests/specs/l10nSpec.js
+++ b/core/js/tests/specs/l10nSpec.js
@@ -11,8 +11,12 @@
describe('OC.L10N tests', function() {
var TEST_APP = 'jsunittestapp';
+ beforeEach(function() {
+ OC.appswebroots[TEST_APP] = OC.webroot + '/apps3/jsunittestapp';
+ });
afterEach(function() {
delete OC.L10N._bundles[TEST_APP];
+ delete OC.appswebroots[TEST_APP];
});
describe('text translation', function() {
@@ -98,4 +102,52 @@ describe('OC.L10N tests', function() {
checkPlurals();
});
});
+ describe('async loading of translations', function() {
+ it('loads bundle for given app and calls callback', function() {
+ var localeStub = sinon.stub(OC, 'getLocale').returns('zh_CN');
+ var callbackStub = sinon.stub();
+ var promiseStub = sinon.stub();
+ OC.L10N.load(TEST_APP, callbackStub).then(promiseStub);
+ expect(callbackStub.notCalled).toEqual(true);
+ expect(promiseStub.notCalled).toEqual(true);
+ expect(fakeServer.requests.length).toEqual(1);
+ var req = fakeServer.requests[0];
+ expect(req.url).toEqual(
+ OC.webroot + '/apps3/' + TEST_APP + '/l10n/zh_CN.json'
+ );
+ req.respond(
+ 200,
+ { 'Content-Type': 'application/json' },
+ JSON.stringify({
+ translations: {'Hello world!': '你好世界!'},
+ pluralForm: 'nplurals=2; plural=(n != 1);'
+ })
+ );
+
+ expect(callbackStub.calledOnce).toEqual(true);
+ expect(promiseStub.calledOnce).toEqual(true);
+ expect(t(TEST_APP, 'Hello world!')).toEqual('你好世界!');
+ localeStub.restore();
+ });
+ it('calls callback if translation already available', function() {
+ var promiseStub = sinon.stub();
+ var callbackStub = sinon.stub();
+ OC.L10N.register(TEST_APP, {
+ 'Hello world!': 'Hallo Welt!'
+ });
+ OC.L10N.load(TEST_APP, callbackStub).then(promiseStub);
+ expect(callbackStub.calledOnce).toEqual(true);
+ expect(promiseStub.calledOnce).toEqual(true);
+ expect(fakeServer.requests.length).toEqual(0);
+ });
+ it('calls callback if locale is en', function() {
+ var localeStub = sinon.stub(OC, 'getLocale').returns('en');
+ var promiseStub = sinon.stub();
+ var callbackStub = sinon.stub();
+ OC.L10N.load(TEST_APP, callbackStub).then(promiseStub);
+ expect(callbackStub.calledOnce).toEqual(true);
+ expect(promiseStub.calledOnce).toEqual(true);
+ expect(fakeServer.requests.length).toEqual(0);
+ });
+ });
});
diff --git a/core/l10n/af_ZA.js b/core/l10n/af_ZA.js
index bb9b876ae73..8250b9c9d7f 100644
--- a/core/l10n/af_ZA.js
+++ b/core/l10n/af_ZA.js
@@ -38,7 +38,6 @@ OC.L10N.register(
"Couldn't send reset email. Please contact your administrator." : "Die herstel epos kon nie gestuur word nie. Kontak asseblief die stelsel administrateur.",
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Die \"link\" vir die herstel van jou wagwoord is na jou epos gestuur. As jy dit nie binne 'n redelike tyd ontvang nie, soek deur jou \"spam/junk\" omslagte.<br>As dit nie daar is nie vra jou administrateur vir hulp.",
"I know what I'm doing" : "Ek weet wat ek doen",
- "Reset password" : "Herstel wagwoord",
"Password can not be changed. Please contact your administrator." : "Wagwoord kan nie verander word nie. Kontak asseblief jou stelsel administrateur.",
"No" : "Nee",
"Yes" : "Ja",
@@ -90,10 +89,8 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "Die opdatering was suksesvol. Jy word nou aan ownCloud terug gelei.",
"%s password reset" : "%s wagwoord herstel",
"Use the following link to reset your password: {link}" : "Gebruik die volgende skakel om jou wagwoord te herstel: {link}",
- "You will receive a link to reset your password via Email." : "Jy sal `n skakel via e-pos ontvang om jou wagwoord te herstel.",
- "Username" : "Gebruikersnaam",
- "Yes, I really want to reset my password now" : "Ja, Ek wil regtig my wagwoord herstel",
"New password" : "Nuwe wagwoord",
+ "Reset password" : "Herstel wagwoord",
"For the best results, please consider using a GNU/Linux server instead." : "Oorweeg die gebruik van 'n GNU/Linux bediener vir die beste resultate.",
"Personal" : "Persoonlik",
"Users" : "Gebruikers",
@@ -107,6 +104,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Jou data gids en lêers is moontlik toeganklik vanaf die internet omdat die .htaccess lêer nie werk nie.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Vir inligting oor hoe om jou bediener behoorlik op te stel, sien asseblief die<a href=\"%s\" target=\"_blank\">dokumentasie</a>.",
"Create an <strong>admin account</strong>" : "Skep `n <strong>admin-rekening</strong>",
+ "Username" : "Gebruikersnaam",
"Password" : "Wagwoord",
"Data folder" : "Data omslag",
"Configure the database" : "Stel databasis op",
diff --git a/core/l10n/af_ZA.json b/core/l10n/af_ZA.json
index 373d3dff8b4..f95495870e8 100644
--- a/core/l10n/af_ZA.json
+++ b/core/l10n/af_ZA.json
@@ -36,7 +36,6 @@
"Couldn't send reset email. Please contact your administrator." : "Die herstel epos kon nie gestuur word nie. Kontak asseblief die stelsel administrateur.",
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Die \"link\" vir die herstel van jou wagwoord is na jou epos gestuur. As jy dit nie binne 'n redelike tyd ontvang nie, soek deur jou \"spam/junk\" omslagte.<br>As dit nie daar is nie vra jou administrateur vir hulp.",
"I know what I'm doing" : "Ek weet wat ek doen",
- "Reset password" : "Herstel wagwoord",
"Password can not be changed. Please contact your administrator." : "Wagwoord kan nie verander word nie. Kontak asseblief jou stelsel administrateur.",
"No" : "Nee",
"Yes" : "Ja",
@@ -88,10 +87,8 @@
"The update was successful. Redirecting you to ownCloud now." : "Die opdatering was suksesvol. Jy word nou aan ownCloud terug gelei.",
"%s password reset" : "%s wagwoord herstel",
"Use the following link to reset your password: {link}" : "Gebruik die volgende skakel om jou wagwoord te herstel: {link}",
- "You will receive a link to reset your password via Email." : "Jy sal `n skakel via e-pos ontvang om jou wagwoord te herstel.",
- "Username" : "Gebruikersnaam",
- "Yes, I really want to reset my password now" : "Ja, Ek wil regtig my wagwoord herstel",
"New password" : "Nuwe wagwoord",
+ "Reset password" : "Herstel wagwoord",
"For the best results, please consider using a GNU/Linux server instead." : "Oorweeg die gebruik van 'n GNU/Linux bediener vir die beste resultate.",
"Personal" : "Persoonlik",
"Users" : "Gebruikers",
@@ -105,6 +102,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Jou data gids en lêers is moontlik toeganklik vanaf die internet omdat die .htaccess lêer nie werk nie.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Vir inligting oor hoe om jou bediener behoorlik op te stel, sien asseblief die<a href=\"%s\" target=\"_blank\">dokumentasie</a>.",
"Create an <strong>admin account</strong>" : "Skep `n <strong>admin-rekening</strong>",
+ "Username" : "Gebruikersnaam",
"Password" : "Wagwoord",
"Data folder" : "Data omslag",
"Configure the database" : "Stel databasis op",
diff --git a/core/l10n/ar.js b/core/l10n/ar.js
index 2d7bcda9398..c48414bfdfe 100644
--- a/core/l10n/ar.js
+++ b/core/l10n/ar.js
@@ -25,7 +25,6 @@ OC.L10N.register(
"December" : "كانون الاول",
"Settings" : "إعدادات",
"Saving..." : "جاري الحفظ...",
- "Reset password" : "تعديل كلمة السر",
"No" : "لا",
"Yes" : "نعم",
"Choose" : "اختيار",
@@ -76,10 +75,8 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "تم التحديث بنجاح , يتم اعادة توجيهك الان الى Owncloud",
"%s password reset" : "تمت إعادة ضبط كلمة مرور %s",
"Use the following link to reset your password: {link}" : "استخدم هذه الوصلة لاسترجاع كلمة السر: {link}",
- "You will receive a link to reset your password via Email." : "سوف نرسل لك بريد يحتوي على وصلة لتجديد كلمة السر.",
- "Username" : "إسم المستخدم",
- "Yes, I really want to reset my password now" : "نعم، أريد إعادة ضبظ كلمة مروري",
"New password" : "كلمات سر جديدة",
+ "Reset password" : "تعديل كلمة السر",
"Personal" : "شخصي",
"Users" : "المستخدمين",
"Apps" : "التطبيقات",
@@ -92,6 +89,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "مجلدات البيانات والملفات الخاصة قد تكون قابلة للوصول اليها عن طريق شبكة الانترنت وذلك بسبب ان ملف .htaccess لا يعمل بشكل صحيح.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "لمزيد من المعلومات عن كيفية إعداد خادمك، يرجى الاطلاع على <a href=\"%s\" target=\"_blank\">صفحة المساعدة</a>.",
"Create an <strong>admin account</strong>" : "أضف </strong>مستخدم رئيسي <strong>",
+ "Username" : "إسم المستخدم",
"Password" : "كلمة المرور",
"Data folder" : "مجلد المعلومات",
"Configure the database" : "أسس قاعدة البيانات",
diff --git a/core/l10n/ar.json b/core/l10n/ar.json
index fd5c1275e41..439a60aec2a 100644
--- a/core/l10n/ar.json
+++ b/core/l10n/ar.json
@@ -23,7 +23,6 @@
"December" : "كانون الاول",
"Settings" : "إعدادات",
"Saving..." : "جاري الحفظ...",
- "Reset password" : "تعديل كلمة السر",
"No" : "لا",
"Yes" : "نعم",
"Choose" : "اختيار",
@@ -74,10 +73,8 @@
"The update was successful. Redirecting you to ownCloud now." : "تم التحديث بنجاح , يتم اعادة توجيهك الان الى Owncloud",
"%s password reset" : "تمت إعادة ضبط كلمة مرور %s",
"Use the following link to reset your password: {link}" : "استخدم هذه الوصلة لاسترجاع كلمة السر: {link}",
- "You will receive a link to reset your password via Email." : "سوف نرسل لك بريد يحتوي على وصلة لتجديد كلمة السر.",
- "Username" : "إسم المستخدم",
- "Yes, I really want to reset my password now" : "نعم، أريد إعادة ضبظ كلمة مروري",
"New password" : "كلمات سر جديدة",
+ "Reset password" : "تعديل كلمة السر",
"Personal" : "شخصي",
"Users" : "المستخدمين",
"Apps" : "التطبيقات",
@@ -90,6 +87,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "مجلدات البيانات والملفات الخاصة قد تكون قابلة للوصول اليها عن طريق شبكة الانترنت وذلك بسبب ان ملف .htaccess لا يعمل بشكل صحيح.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "لمزيد من المعلومات عن كيفية إعداد خادمك، يرجى الاطلاع على <a href=\"%s\" target=\"_blank\">صفحة المساعدة</a>.",
"Create an <strong>admin account</strong>" : "أضف </strong>مستخدم رئيسي <strong>",
+ "Username" : "إسم المستخدم",
"Password" : "كلمة المرور",
"Data folder" : "مجلد المعلومات",
"Configure the database" : "أسس قاعدة البيانات",
diff --git a/core/l10n/ast.js b/core/l10n/ast.js
index be95fb45e5c..9bf258b0f60 100644
--- a/core/l10n/ast.js
+++ b/core/l10n/ast.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Unviósete al corréu l'enllaz pa reaniciar la to contraseña. Si nun lu recibes nuna cantidá razonable de tiempu, comprueba les tos carpetes de corréu puxarra. <br>Si nun ta ehí, entruga al to alministrador llocal",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Los tos ficheros tán crifraos. Si nun habilitesti la clave de recuperación, nun habrá forma de recuperar los tos datos dempués de que se reanicie la to contraseña.<br />Si nun tas seguru de qué facer, por favor contauta col to alministrador enantes que sigas. <br />¿De xuru quies siguir?",
"I know what I'm doing" : "Sé lo que toi faciendo",
- "Reset password" : "Restablecer contraseña",
"Password can not be changed. Please contact your administrator." : "Nun pue camudase la contraseña. Por favor, contauta col alministrador.",
"No" : "Non",
"Yes" : "Sí",
@@ -118,13 +117,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Nun pudo unviase'l corréu porque nun hai direición de corréu pa esti nome d'usuariu. Por favor, contauta col alministrador",
"%s password reset" : "%s restablecer contraseña",
"Use the following link to reset your password: {link}" : "Usa'l siguiente enllaz pa restablecer la to contraseña: {link}",
- "You will receive a link to reset your password via Email." : "Vas recibir un enllaz vía Corréu-e pa restablecer la to contraseña",
- "Username" : "Nome d'usuariu",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Los ficheros tán cifraos. Si nun habilitesti la clave de recuperación, nun habrá forma de recuperar los tos datos dempués de que la contraseña se reanicie. Si nun tas seguru de qué facer, por favor contauta col alministrador enantes de siguir. ¿De xuru quies continuar?",
- "Yes, I really want to reset my password now" : "Sí, quiero reaniciar daveres la mio contraseña agora",
- "Reset" : "Reaniciar",
"New password" : "Contraseña nueva",
"New Password" : "Contraseña nueva",
+ "Reset password" : "Restablecer contraseña",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nun ta sofitáu y %s nun furrulará afayadizamente nesta plataforma. ¡Úsalu baxo'l to riesgu!",
"For the best results, please consider using a GNU/Linux server instead." : "Pa los meyores resultaos, por favor considera l'usu d'un sirvidor GNU/Linux nel so llugar.",
"Personal" : "Personal",
@@ -149,6 +144,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "El to direutoriu de datos y ficheros seique ye accesible dende internet por mor qu'el ficheru .htaccess nun furrula.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pa informase de cómo configurar el so sirvidor, por favor güeya la <a href=\"%s\" target=\"_blank\">documentación</a>.",
"Create an <strong>admin account</strong>" : "Crea una <strong>cuenta d'alministrador</strong>",
+ "Username" : "Nome d'usuariu",
"Password" : "Contraseña",
"Storage & database" : "Almacenamientu y Base de datos",
"Data folder" : "Carpeta de datos",
diff --git a/core/l10n/ast.json b/core/l10n/ast.json
index 42558bd76ef..8422c2948ee 100644
--- a/core/l10n/ast.json
+++ b/core/l10n/ast.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Unviósete al corréu l'enllaz pa reaniciar la to contraseña. Si nun lu recibes nuna cantidá razonable de tiempu, comprueba les tos carpetes de corréu puxarra. <br>Si nun ta ehí, entruga al to alministrador llocal",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Los tos ficheros tán crifraos. Si nun habilitesti la clave de recuperación, nun habrá forma de recuperar los tos datos dempués de que se reanicie la to contraseña.<br />Si nun tas seguru de qué facer, por favor contauta col to alministrador enantes que sigas. <br />¿De xuru quies siguir?",
"I know what I'm doing" : "Sé lo que toi faciendo",
- "Reset password" : "Restablecer contraseña",
"Password can not be changed. Please contact your administrator." : "Nun pue camudase la contraseña. Por favor, contauta col alministrador.",
"No" : "Non",
"Yes" : "Sí",
@@ -116,13 +115,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Nun pudo unviase'l corréu porque nun hai direición de corréu pa esti nome d'usuariu. Por favor, contauta col alministrador",
"%s password reset" : "%s restablecer contraseña",
"Use the following link to reset your password: {link}" : "Usa'l siguiente enllaz pa restablecer la to contraseña: {link}",
- "You will receive a link to reset your password via Email." : "Vas recibir un enllaz vía Corréu-e pa restablecer la to contraseña",
- "Username" : "Nome d'usuariu",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Los ficheros tán cifraos. Si nun habilitesti la clave de recuperación, nun habrá forma de recuperar los tos datos dempués de que la contraseña se reanicie. Si nun tas seguru de qué facer, por favor contauta col alministrador enantes de siguir. ¿De xuru quies continuar?",
- "Yes, I really want to reset my password now" : "Sí, quiero reaniciar daveres la mio contraseña agora",
- "Reset" : "Reaniciar",
"New password" : "Contraseña nueva",
"New Password" : "Contraseña nueva",
+ "Reset password" : "Restablecer contraseña",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nun ta sofitáu y %s nun furrulará afayadizamente nesta plataforma. ¡Úsalu baxo'l to riesgu!",
"For the best results, please consider using a GNU/Linux server instead." : "Pa los meyores resultaos, por favor considera l'usu d'un sirvidor GNU/Linux nel so llugar.",
"Personal" : "Personal",
@@ -147,6 +142,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "El to direutoriu de datos y ficheros seique ye accesible dende internet por mor qu'el ficheru .htaccess nun furrula.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pa informase de cómo configurar el so sirvidor, por favor güeya la <a href=\"%s\" target=\"_blank\">documentación</a>.",
"Create an <strong>admin account</strong>" : "Crea una <strong>cuenta d'alministrador</strong>",
+ "Username" : "Nome d'usuariu",
"Password" : "Contraseña",
"Storage & database" : "Almacenamientu y Base de datos",
"Data folder" : "Carpeta de datos",
diff --git a/core/l10n/az.js b/core/l10n/az.js
index f3a5b138641..10316b67f2a 100644
--- a/core/l10n/az.js
+++ b/core/l10n/az.js
@@ -35,13 +35,12 @@ OC.L10N.register(
"Delete" : "Sil",
"Add" : "Əlavə etmək",
"_download %n file_::_download %n files_" : ["",""],
- "Username" : "İstifadəçi adı",
- "Reset" : "Sıfırla",
"Personal" : "Şəxsi",
"Users" : "İstifadəçilər",
"Admin" : "İnzibatçı",
"Help" : "Kömək",
"Security Warning" : "Təhlükəsizlik xəbərdarlığı",
+ "Username" : "İstifadəçi adı",
"Password" : "Şifrə",
"You are accessing the server from an untrusted domain." : "Siz serverə inamsız domain-dən girməyə çalışırsız.",
"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." : "Xahiş olunur inzibatçı ilə əlaqə saxlayasınız. Eger siz bu xidmətin inzibatçısısınizsa, \"trusted_domain\" configini config/config.php faylinda düzgün qeyd edin. Config nüsxəsi config/config.sample.php faylında qeyd edilmişdir."
diff --git a/core/l10n/az.json b/core/l10n/az.json
index 7f4f7d8bb95..7a0c92543f3 100644
--- a/core/l10n/az.json
+++ b/core/l10n/az.json
@@ -33,13 +33,12 @@
"Delete" : "Sil",
"Add" : "Əlavə etmək",
"_download %n file_::_download %n files_" : ["",""],
- "Username" : "İstifadəçi adı",
- "Reset" : "Sıfırla",
"Personal" : "Şəxsi",
"Users" : "İstifadəçilər",
"Admin" : "İnzibatçı",
"Help" : "Kömək",
"Security Warning" : "Təhlükəsizlik xəbərdarlığı",
+ "Username" : "İstifadəçi adı",
"Password" : "Şifrə",
"You are accessing the server from an untrusted domain." : "Siz serverə inamsız domain-dən girməyə çalışırsız.",
"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." : "Xahiş olunur inzibatçı ilə əlaqə saxlayasınız. Eger siz bu xidmətin inzibatçısısınizsa, \"trusted_domain\" configini config/config.php faylinda düzgün qeyd edin. Config nüsxəsi config/config.sample.php faylında qeyd edilmişdir."
diff --git a/core/l10n/bg_BG.js b/core/l10n/bg_BG.js
index b69319c2911..cf7369129ba 100644
--- a/core/l10n/bg_BG.js
+++ b/core/l10n/bg_BG.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Връзката за възстановяване на паролата е изпратена на твоя имейл. Ако не я получиш в разумен период от време, провери папката си за спам.<br>Ако не е там се свържи с администратора.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Файловете ти са криптирани. Ако не си насторил ключ за възстановяване, няма да има възможност да възстановиш информацията си след като промениш паролата.<br /> Ако не си сигурен какво да направиш, моля свържи се с администратора преди да продължиш.<br/>Наистина ли си сигурен, че искаш да продължиш?",
"I know what I'm doing" : "Знам какво правя!",
- "Reset password" : "Възстановяване на парола",
"Password can not be changed. Please contact your administrator." : "Паролата не може да бъде промена. Моля, свържи се с администратора.",
"No" : "Не",
"Yes" : "Да",
@@ -124,13 +123,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Неуспешно изпращане на имейл за възстановяване на паролата, защото липсва имейл свързан с това потребителско име. Моля свържи се с админстратора.",
"%s password reset" : "Паролата на %s е променена.",
"Use the following link to reset your password: {link}" : "Използвай следната връзка, за да възстановиш паролата си: {link}",
- "You will receive a link to reset your password via Email." : "Ще получиш връзка за възстановяване на паролата посредством емейл.",
- "Username" : "Потребител",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Файловете ти са криптирани. Ако не си насторил ключ за възстановяване, няма да има възможност да възстановиш информацията си след като промениш паролата. Ако не си сигурен какво да направиш, моля свържи се с администратора преди да продължиш. Наистина ли си сигурен, че искаш да продължиш?",
- "Yes, I really want to reset my password now" : "Да, наистина желая да възстановя паролата си сега.",
- "Reset" : "Възстанови",
"New password" : "Нова парола",
"New Password" : "Нова Парола",
+ "Reset password" : "Възстановяване на парола",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X не се подържа и %s няма да работи правилно на тази платформа. Използвай го на свой риск!",
"For the best results, please consider using a GNU/Linux server instead." : "За най-добри резултати, моля помисли дали не би желал да използваш GNU/Linux сървър.",
"Personal" : "Лични",
@@ -170,6 +165,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Твоята директория за данни и файлове вероятно са достъпни от интернет поради това, че .htaccess файла не функционира.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "За информация как правилно да настроиш сървъра си, моля прегледай <a href=\"%s\" target=\"_blank\">документацията</a>.",
"Create an <strong>admin account</strong>" : "Създаване на <strong>админ профил</strong>.",
+ "Username" : "Потребител",
"Password" : "Парола",
"Storage & database" : "Дисково пространство и база данни",
"Data folder" : "Директория за данни",
diff --git a/core/l10n/bg_BG.json b/core/l10n/bg_BG.json
index 51b2ba5fc76..8b6b7e057d2 100644
--- a/core/l10n/bg_BG.json
+++ b/core/l10n/bg_BG.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Връзката за възстановяване на паролата е изпратена на твоя имейл. Ако не я получиш в разумен период от време, провери папката си за спам.<br>Ако не е там се свържи с администратора.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Файловете ти са криптирани. Ако не си насторил ключ за възстановяване, няма да има възможност да възстановиш информацията си след като промениш паролата.<br /> Ако не си сигурен какво да направиш, моля свържи се с администратора преди да продължиш.<br/>Наистина ли си сигурен, че искаш да продължиш?",
"I know what I'm doing" : "Знам какво правя!",
- "Reset password" : "Възстановяване на парола",
"Password can not be changed. Please contact your administrator." : "Паролата не може да бъде промена. Моля, свържи се с администратора.",
"No" : "Не",
"Yes" : "Да",
@@ -122,13 +121,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Неуспешно изпращане на имейл за възстановяване на паролата, защото липсва имейл свързан с това потребителско име. Моля свържи се с админстратора.",
"%s password reset" : "Паролата на %s е променена.",
"Use the following link to reset your password: {link}" : "Използвай следната връзка, за да възстановиш паролата си: {link}",
- "You will receive a link to reset your password via Email." : "Ще получиш връзка за възстановяване на паролата посредством емейл.",
- "Username" : "Потребител",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Файловете ти са криптирани. Ако не си насторил ключ за възстановяване, няма да има възможност да възстановиш информацията си след като промениш паролата. Ако не си сигурен какво да направиш, моля свържи се с администратора преди да продължиш. Наистина ли си сигурен, че искаш да продължиш?",
- "Yes, I really want to reset my password now" : "Да, наистина желая да възстановя паролата си сега.",
- "Reset" : "Възстанови",
"New password" : "Нова парола",
"New Password" : "Нова Парола",
+ "Reset password" : "Възстановяване на парола",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X не се подържа и %s няма да работи правилно на тази платформа. Използвай го на свой риск!",
"For the best results, please consider using a GNU/Linux server instead." : "За най-добри резултати, моля помисли дали не би желал да използваш GNU/Linux сървър.",
"Personal" : "Лични",
@@ -168,6 +163,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Твоята директория за данни и файлове вероятно са достъпни от интернет поради това, че .htaccess файла не функционира.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "За информация как правилно да настроиш сървъра си, моля прегледай <a href=\"%s\" target=\"_blank\">документацията</a>.",
"Create an <strong>admin account</strong>" : "Създаване на <strong>админ профил</strong>.",
+ "Username" : "Потребител",
"Password" : "Парола",
"Storage & database" : "Дисково пространство и база данни",
"Data folder" : "Директория за данни",
diff --git a/core/l10n/bn_BD.js b/core/l10n/bn_BD.js
index ac4ba299468..422175f9e81 100644
--- a/core/l10n/bn_BD.js
+++ b/core/l10n/bn_BD.js
@@ -29,7 +29,6 @@ OC.L10N.register(
"December" : "ডিসেম্বর",
"Settings" : "নিয়ামকসমূহ",
"Saving..." : "সংরক্ষণ করা হচ্ছে..",
- "Reset password" : "কূটশব্দ পূনঃনির্ধারণ কর",
"No" : "না",
"Yes" : "হ্যাঁ",
"Choose" : "বেছে নিন",
@@ -80,11 +79,9 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : ["",""],
"Please reload the page." : "দয়া করে পৃষ্ঠাটি পূনরায় লোড করুন।",
"Use the following link to reset your password: {link}" : "আপনার কূটশব্দটি পূনঃনির্ধারণ করার জন্য নিম্নোক্ত লিংকটি ব্যবহার করুনঃ {link}",
- "You will receive a link to reset your password via Email." : "কূটশব্দ পূনঃনির্ধারণের জন্য একটি টূনঃনির্ধারণ লিংকটি আপনাকে ই-মেইলে পাঠানো হয়েছে ।",
- "Username" : "ব্যবহারকারী",
- "Reset" : "পূণঃনির্ধানণ",
"New password" : "নতুন কূটশব্দ",
"New Password" : "নতুন কূটশব্দ",
+ "Reset password" : "কূটশব্দ পূনঃনির্ধারণ কর",
"Personal" : "ব্যক্তিগত",
"Users" : "ব্যবহারকারী",
"Apps" : "অ্যাপ",
@@ -99,6 +96,7 @@ OC.L10N.register(
"Cheers!" : "শুভেচ্ছা!",
"Security Warning" : "নিরাপত্তাজনিত সতর্কতা",
"Create an <strong>admin account</strong>" : "<strong>প্রশাসক একাউন্ট</strong> তৈরী করুন",
+ "Username" : "ব্যবহারকারী",
"Password" : "কূটশব্দ",
"Data folder" : "ডাটা ফোল্ডার ",
"Configure the database" : "ডাটাবেচ কনফিগার করুন",
diff --git a/core/l10n/bn_BD.json b/core/l10n/bn_BD.json
index 9eee32ba3c2..811c1087002 100644
--- a/core/l10n/bn_BD.json
+++ b/core/l10n/bn_BD.json
@@ -27,7 +27,6 @@
"December" : "ডিসেম্বর",
"Settings" : "নিয়ামকসমূহ",
"Saving..." : "সংরক্ষণ করা হচ্ছে..",
- "Reset password" : "কূটশব্দ পূনঃনির্ধারণ কর",
"No" : "না",
"Yes" : "হ্যাঁ",
"Choose" : "বেছে নিন",
@@ -78,11 +77,9 @@
"_download %n file_::_download %n files_" : ["",""],
"Please reload the page." : "দয়া করে পৃষ্ঠাটি পূনরায় লোড করুন।",
"Use the following link to reset your password: {link}" : "আপনার কূটশব্দটি পূনঃনির্ধারণ করার জন্য নিম্নোক্ত লিংকটি ব্যবহার করুনঃ {link}",
- "You will receive a link to reset your password via Email." : "কূটশব্দ পূনঃনির্ধারণের জন্য একটি টূনঃনির্ধারণ লিংকটি আপনাকে ই-মেইলে পাঠানো হয়েছে ।",
- "Username" : "ব্যবহারকারী",
- "Reset" : "পূণঃনির্ধানণ",
"New password" : "নতুন কূটশব্দ",
"New Password" : "নতুন কূটশব্দ",
+ "Reset password" : "কূটশব্দ পূনঃনির্ধারণ কর",
"Personal" : "ব্যক্তিগত",
"Users" : "ব্যবহারকারী",
"Apps" : "অ্যাপ",
@@ -97,6 +94,7 @@
"Cheers!" : "শুভেচ্ছা!",
"Security Warning" : "নিরাপত্তাজনিত সতর্কতা",
"Create an <strong>admin account</strong>" : "<strong>প্রশাসক একাউন্ট</strong> তৈরী করুন",
+ "Username" : "ব্যবহারকারী",
"Password" : "কূটশব্দ",
"Data folder" : "ডাটা ফোল্ডার ",
"Configure the database" : "ডাটাবেচ কনফিগার করুন",
diff --git a/core/l10n/bn_IN.js b/core/l10n/bn_IN.js
index a72a91078ae..0cd405630cb 100644
--- a/core/l10n/bn_IN.js
+++ b/core/l10n/bn_IN.js
@@ -11,7 +11,6 @@ OC.L10N.register(
"Delete" : "মুছে ফেলা",
"Add" : "যোগ করা",
"_download %n file_::_download %n files_" : ["",""],
- "Username" : "ইউজারনেম",
- "Reset" : "রিসেট করুন"
+ "Username" : "ইউজারনেম"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/bn_IN.json b/core/l10n/bn_IN.json
index 4e29d0774f6..5c7ce4ef0d7 100644
--- a/core/l10n/bn_IN.json
+++ b/core/l10n/bn_IN.json
@@ -9,7 +9,6 @@
"Delete" : "মুছে ফেলা",
"Add" : "যোগ করা",
"_download %n file_::_download %n files_" : ["",""],
- "Username" : "ইউজারনেম",
- "Reset" : "রিসেট করুন"
+ "Username" : "ইউজারনেম"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/ca.js b/core/l10n/ca.js
index afa434d3570..edec2f989f6 100644
--- a/core/l10n/ca.js
+++ b/core/l10n/ca.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "L'enllaç per reiniciar la vostra contrasenya s'ha enviat al vostre correu. Si no el rebeu en un temps raonable comproveu les carpetes de spam. <br>Si no és allà, pregunteu a l'administrador local.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Els vostres fitxers estan encriptats. Si no heu habilitat la clau de recuperació no hi haurà manera de recuperar les dades després que reestabliu la contrasenya. <br />Si sabeu què fer, contacteu amb l'administrador abans de continuar.<br />Voleu continuar?",
"I know what I'm doing" : "Sé el que faig",
- "Reset password" : "Reinicialitza la contrasenya",
"Password can not be changed. Please contact your administrator." : "La contrasenya no es pot canviar. Contacteu amb l'administrador.",
"No" : "No",
"Yes" : "Sí",
@@ -120,13 +119,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "No s'ha pogut enviar el correu de restabliment perquè no hi ha cap correu electrònic per aquest usuari. Contacteu amb l'administrador.",
"%s password reset" : "restableix la contrasenya %s",
"Use the following link to reset your password: {link}" : "Useu l'enllaç següent per restablir la contrasenya: {link}",
- "You will receive a link to reset your password via Email." : "Rebreu un enllaç al correu electrònic per reiniciar la contrasenya.",
- "Username" : "Nom d'usuari",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Els vostres fitxers estan encriptats. Si no heu habilitat la clau de recuperació no hi haurà manera de recuperar les dades després que reestabliu la contrasenya. Si sabeu què fer, contacteu amb l'administrador abans de continuar. Voleu continuar?",
- "Yes, I really want to reset my password now" : "Sí, vull restablir ara la contrasenya",
- "Reset" : "Estableix de nou",
"New password" : "Contrasenya nova",
"New Password" : "Contrasenya nova",
+ "Reset password" : "Reinicialitza la contrasenya",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X no té suport i %s no funcionarà correctament en aquesta plataforma. Useu-ho al vostre risc!",
"For the best results, please consider using a GNU/Linux server instead." : "Per millors resultats, millor considereu utilitzar un servidor GNU/Linux.",
"Personal" : "Personal",
@@ -161,6 +156,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "La carpeta de dades i els seus fitxers probablement són accessibles des d'internet perquè el fitxer .htaccess no funciona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Per informació de com configurar el servidor, comproveu la <a href=\"%s\" target=\"_blank\">documentació</a>.",
"Create an <strong>admin account</strong>" : "Crea un <strong>compte d'administrador</strong>",
+ "Username" : "Nom d'usuari",
"Password" : "Contrasenya",
"Storage & database" : "Emmagatzematge i base de dades",
"Data folder" : "Carpeta de dades",
@@ -188,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 c1ea86b4223..fea3cdefec2 100644
--- a/core/l10n/ca.json
+++ b/core/l10n/ca.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "L'enllaç per reiniciar la vostra contrasenya s'ha enviat al vostre correu. Si no el rebeu en un temps raonable comproveu les carpetes de spam. <br>Si no és allà, pregunteu a l'administrador local.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Els vostres fitxers estan encriptats. Si no heu habilitat la clau de recuperació no hi haurà manera de recuperar les dades després que reestabliu la contrasenya. <br />Si sabeu què fer, contacteu amb l'administrador abans de continuar.<br />Voleu continuar?",
"I know what I'm doing" : "Sé el que faig",
- "Reset password" : "Reinicialitza la contrasenya",
"Password can not be changed. Please contact your administrator." : "La contrasenya no es pot canviar. Contacteu amb l'administrador.",
"No" : "No",
"Yes" : "Sí",
@@ -118,13 +117,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "No s'ha pogut enviar el correu de restabliment perquè no hi ha cap correu electrònic per aquest usuari. Contacteu amb l'administrador.",
"%s password reset" : "restableix la contrasenya %s",
"Use the following link to reset your password: {link}" : "Useu l'enllaç següent per restablir la contrasenya: {link}",
- "You will receive a link to reset your password via Email." : "Rebreu un enllaç al correu electrònic per reiniciar la contrasenya.",
- "Username" : "Nom d'usuari",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Els vostres fitxers estan encriptats. Si no heu habilitat la clau de recuperació no hi haurà manera de recuperar les dades després que reestabliu la contrasenya. Si sabeu què fer, contacteu amb l'administrador abans de continuar. Voleu continuar?",
- "Yes, I really want to reset my password now" : "Sí, vull restablir ara la contrasenya",
- "Reset" : "Estableix de nou",
"New password" : "Contrasenya nova",
"New Password" : "Contrasenya nova",
+ "Reset password" : "Reinicialitza la contrasenya",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X no té suport i %s no funcionarà correctament en aquesta plataforma. Useu-ho al vostre risc!",
"For the best results, please consider using a GNU/Linux server instead." : "Per millors resultats, millor considereu utilitzar un servidor GNU/Linux.",
"Personal" : "Personal",
@@ -159,6 +154,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "La carpeta de dades i els seus fitxers probablement són accessibles des d'internet perquè el fitxer .htaccess no funciona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Per informació de com configurar el servidor, comproveu la <a href=\"%s\" target=\"_blank\">documentació</a>.",
"Create an <strong>admin account</strong>" : "Crea un <strong>compte d'administrador</strong>",
+ "Username" : "Nom d'usuari",
"Password" : "Contrasenya",
"Storage & database" : "Emmagatzematge i base de dades",
"Data folder" : "Carpeta de dades",
@@ -186,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/cs_CZ.js b/core/l10n/cs_CZ.js
index c9aed4a7c45..787b0b10e4a 100644
--- a/core/l10n/cs_CZ.js
+++ b/core/l10n/cs_CZ.js
@@ -35,12 +35,11 @@ OC.L10N.register(
"December" : "Prosinec",
"Settings" : "Nastavení",
"Saving..." : "Ukládám...",
- "Couldn't send reset email. Please contact your administrator." : "Nepodařilo se odeslat email pro změnu hesla. Kontaktujte vašeho administrátora.",
- "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Odkaz na obnovení hesla byl odeslán na vaši e-mailovou adresu. Pokud jej v krátké době neobdržíte, zkontrolujte složku nevyžádané pošty a koš.<br>Pokud jej nenaleznete, kontaktujte svého administrátora.",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vaše soubory jsou šifrovány. Pokud jste nepovolili klíč pro obnovení, neexistuje způsob jak získat po změně hesla vaše data.<br />Pokud si nejste jisti co dělat, kontaktujte nejprve svého administrátora než budete pokračovat. <br />Opravdu si přejete pokračovat?",
+ "Couldn't send reset email. Please contact your administrator." : "Nepodařilo se odeslat email pro změnu hesla. Kontaktujte svého správce systému.",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Odkaz na obnovení hesla byl odeslán na vaši e-mailovou adresu. Pokud jej v krátké době neobdržíte, zkontrolujte složku nevyžádané pošty a koš.<br>Pokud jej nenaleznete, kontaktujte svého správce systému.",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vaše soubory jsou šifrovány. Pokud jste nepovolili klíč pro obnovení, neexistuje způsob jak získat po změně hesla vaše data zpět.<br />Pokud si nejste jisti co dělat, kontaktujte nejprve svého správce systému, než budete pokračovat. <br />Opravdu si přejete pokračovat?",
"I know what I'm doing" : "Vím co dělám",
- "Reset password" : "Obnovit heslo",
- "Password can not be changed. Please contact your administrator." : "Heslo nelze změnit. Kontaktujte prosím svého administrátora.",
+ "Password can not be changed. Please contact your administrator." : "Heslo nelze změnit. Kontaktujte prosím svého správce systému.",
"No" : "Ne",
"Yes" : "Ano",
"Choose" : "Vybrat",
@@ -121,16 +120,12 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "Aktualizace byla úspěšná. Přesměrovávám na ownCloud.",
"Couldn't reset password because the token is invalid" : "Heslo nebylo změněno kvůli neplatnému tokenu",
"Couldn't send reset email. Please make sure your username is correct." : "Nelze odeslat email pro změnu hesla. Ujistěte se prosím, že zadáváte správné uživatelské jméno.",
- "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Nelze odeslat email pro změnu hesla, protože u tohoto uživatelského jména není uvedena e-mailová adresa. Kontaktujte prosím svého administrátora.",
+ "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Nelze odeslat email pro změnu hesla, protože u tohoto uživatelského jména není uvedena e-mailová adresa. Kontaktujte prosím svého správce systému.",
"%s password reset" : "reset hesla %s",
"Use the following link to reset your password: {link}" : "Heslo obnovíte použitím následujícího odkazu: {link}",
- "You will receive a link to reset your password via Email." : "E-mailem Vám bude zaslán odkaz pro obnovu hesla.",
- "Username" : "Uživatelské jméno",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Vaše soubory jsou šifrovány. Pokud nemáte povolen klíč pro obnovu, neexistuje způsob jak získat, po změně hesla, vaše data. Pokud si nejste jisti co dělat, kontaktujte nejprve svého správce. Opravdu si přejete pokračovat?",
- "Yes, I really want to reset my password now" : "Ano, opravdu si nyní přeji obnovit mé heslo",
- "Reset" : "Restartovat složku",
"New password" : "Nové heslo",
"New Password" : "Nové heslo",
+ "Reset password" : "Obnovit heslo",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X není podporován a %s nebude na této platformě správně fungovat. Používejte pouze na vlastní nebezpečí!",
"For the best results, please consider using a GNU/Linux server instead." : "Místo toho zvažte pro nejlepší funkčnost použití GNU/Linux serveru.",
"Personal" : "Osobní",
@@ -154,7 +149,7 @@ OC.L10N.register(
"Cheers!" : "Ať slouží!",
"Internal Server Error" : "Vnitřní chyba serveru",
"The server encountered an internal error and was unable to complete your request." : "Server zaznamenal interní chybu a nebyl schopen dokončit váš požadavek.",
- "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Kontaktujte prosím administrátora serveru, pokud se bude tato chyba opakovat. Připojte do svého hlášení níže zobrazené technické detaily.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Kontaktujte prosím správce serveru, pokud se bude tato chyba opakovat. Připojte do svého hlášení níže zobrazené technické detaily.",
"More details can be found in the server log." : "Více podrobností k nalezení v serverovém logu.",
"Technical details" : "Technické detaily",
"Remote Address: %s" : "Vzdálená adresa: %s",
@@ -170,6 +165,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Váš adresář s daty a soubory jsou dostupné z internetu, protože soubor .htaccess nefunguje.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pro informace, jak správně nastavit váš server, se podívejte do <a href=\"%s\" target=\"_blank\">dokumentace</a>.",
"Create an <strong>admin account</strong>" : "Vytvořit <strong>účet správce</strong>",
+ "Username" : "Uživatelské jméno",
"Password" : "Heslo",
"Storage & database" : "Úložiště & databáze",
"Data folder" : "Složka s daty",
@@ -195,11 +191,11 @@ OC.L10N.register(
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hej ty,<br><br>jen ti dávám vědět, že %s sdílí <strong>%s</strong> s tebou.<br><a href=\"%s\">Zobrazit!</a><br><br>",
"This ownCloud instance is currently in single user mode." : "Tato instalace ownCloudu je momentálně v jednouživatelském módu.",
"This means only administrators can use the instance." : "To znamená, že pouze správci systému mohou aplikaci používat.",
- "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktujte, prosím, správce systému, pokud se tato zpráva objevuje opakovaně nebo nečekaně.",
- "Thank you for your patience." : "Děkuji za trpělivost.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktujte prosím správce systému, pokud se tato zpráva objevuje opakovaně nebo nečekaně.",
+ "Thank you for your patience." : "Děkujeme za vaši trpělivost.",
"You are accessing the server from an untrusted domain." : "Přistupujete na server z nedůvěryhodné domény.",
"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." : "Kontaktujte prosím správce. Pokud jste správce této instalace, nastavte \"trusted_domain\" v souboru config/config.php. Příklad konfigurace najdete v souboru config/config.sample.php.",
- "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "V závislosti na vaší konfiguraci vám může být, jako administrátorovi, umožněno použití tlačítka níže k označení této domény jako důvěryhodné.",
+ "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "V závislosti na vaší konfiguraci vám může být, jako správci, umožněno použití tlačítka níže k označení této domény jako důvěryhodné.",
"Add \"%s\" as trusted domain" : "Přidat \"%s\" jako důvěryhodnou doménu",
"%s will be updated to version %s." : "%s bude aktualizován na verzi %s.",
"The following apps will be disabled:" : "Následující aplikace budou zakázány:",
@@ -207,7 +203,7 @@ OC.L10N.register(
"Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Před provedením dalšího kroku se prosím ujistěte, že databáze a konfigurační a datový adresář byly zazálohovány. ",
"Start update" : "Spustit aktualizaci",
"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Abyste zabránili vypršení časového limitu u větších instalací, můžete namísto toho spustit následující příkaz v hlavním adresáři:",
- "This %s instance is currently being updated, which may take a while." : "Tato instalace %s je právě aktualizována a to může chvíli trvat.",
+ "This %s instance is currently being updated, which may take a while." : "Tato instalace %s je právě aktualizována. Mějte chvíli strpení.",
"This page will refresh itself when the %s instance is available again." : "Tato stránka se automaticky načte poté, co bude opět dostupná instance %s."
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/core/l10n/cs_CZ.json b/core/l10n/cs_CZ.json
index 67250ae52e7..8de2fd338c1 100644
--- a/core/l10n/cs_CZ.json
+++ b/core/l10n/cs_CZ.json
@@ -33,12 +33,11 @@
"December" : "Prosinec",
"Settings" : "Nastavení",
"Saving..." : "Ukládám...",
- "Couldn't send reset email. Please contact your administrator." : "Nepodařilo se odeslat email pro změnu hesla. Kontaktujte vašeho administrátora.",
- "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Odkaz na obnovení hesla byl odeslán na vaši e-mailovou adresu. Pokud jej v krátké době neobdržíte, zkontrolujte složku nevyžádané pošty a koš.<br>Pokud jej nenaleznete, kontaktujte svého administrátora.",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vaše soubory jsou šifrovány. Pokud jste nepovolili klíč pro obnovení, neexistuje způsob jak získat po změně hesla vaše data.<br />Pokud si nejste jisti co dělat, kontaktujte nejprve svého administrátora než budete pokračovat. <br />Opravdu si přejete pokračovat?",
+ "Couldn't send reset email. Please contact your administrator." : "Nepodařilo se odeslat email pro změnu hesla. Kontaktujte svého správce systému.",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Odkaz na obnovení hesla byl odeslán na vaši e-mailovou adresu. Pokud jej v krátké době neobdržíte, zkontrolujte složku nevyžádané pošty a koš.<br>Pokud jej nenaleznete, kontaktujte svého správce systému.",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vaše soubory jsou šifrovány. Pokud jste nepovolili klíč pro obnovení, neexistuje způsob jak získat po změně hesla vaše data zpět.<br />Pokud si nejste jisti co dělat, kontaktujte nejprve svého správce systému, než budete pokračovat. <br />Opravdu si přejete pokračovat?",
"I know what I'm doing" : "Vím co dělám",
- "Reset password" : "Obnovit heslo",
- "Password can not be changed. Please contact your administrator." : "Heslo nelze změnit. Kontaktujte prosím svého administrátora.",
+ "Password can not be changed. Please contact your administrator." : "Heslo nelze změnit. Kontaktujte prosím svého správce systému.",
"No" : "Ne",
"Yes" : "Ano",
"Choose" : "Vybrat",
@@ -119,16 +118,12 @@
"The update was successful. Redirecting you to ownCloud now." : "Aktualizace byla úspěšná. Přesměrovávám na ownCloud.",
"Couldn't reset password because the token is invalid" : "Heslo nebylo změněno kvůli neplatnému tokenu",
"Couldn't send reset email. Please make sure your username is correct." : "Nelze odeslat email pro změnu hesla. Ujistěte se prosím, že zadáváte správné uživatelské jméno.",
- "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Nelze odeslat email pro změnu hesla, protože u tohoto uživatelského jména není uvedena e-mailová adresa. Kontaktujte prosím svého administrátora.",
+ "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Nelze odeslat email pro změnu hesla, protože u tohoto uživatelského jména není uvedena e-mailová adresa. Kontaktujte prosím svého správce systému.",
"%s password reset" : "reset hesla %s",
"Use the following link to reset your password: {link}" : "Heslo obnovíte použitím následujícího odkazu: {link}",
- "You will receive a link to reset your password via Email." : "E-mailem Vám bude zaslán odkaz pro obnovu hesla.",
- "Username" : "Uživatelské jméno",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Vaše soubory jsou šifrovány. Pokud nemáte povolen klíč pro obnovu, neexistuje způsob jak získat, po změně hesla, vaše data. Pokud si nejste jisti co dělat, kontaktujte nejprve svého správce. Opravdu si přejete pokračovat?",
- "Yes, I really want to reset my password now" : "Ano, opravdu si nyní přeji obnovit mé heslo",
- "Reset" : "Restartovat složku",
"New password" : "Nové heslo",
"New Password" : "Nové heslo",
+ "Reset password" : "Obnovit heslo",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X není podporován a %s nebude na této platformě správně fungovat. Používejte pouze na vlastní nebezpečí!",
"For the best results, please consider using a GNU/Linux server instead." : "Místo toho zvažte pro nejlepší funkčnost použití GNU/Linux serveru.",
"Personal" : "Osobní",
@@ -152,7 +147,7 @@
"Cheers!" : "Ať slouží!",
"Internal Server Error" : "Vnitřní chyba serveru",
"The server encountered an internal error and was unable to complete your request." : "Server zaznamenal interní chybu a nebyl schopen dokončit váš požadavek.",
- "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Kontaktujte prosím administrátora serveru, pokud se bude tato chyba opakovat. Připojte do svého hlášení níže zobrazené technické detaily.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Kontaktujte prosím správce serveru, pokud se bude tato chyba opakovat. Připojte do svého hlášení níže zobrazené technické detaily.",
"More details can be found in the server log." : "Více podrobností k nalezení v serverovém logu.",
"Technical details" : "Technické detaily",
"Remote Address: %s" : "Vzdálená adresa: %s",
@@ -168,6 +163,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Váš adresář s daty a soubory jsou dostupné z internetu, protože soubor .htaccess nefunguje.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pro informace, jak správně nastavit váš server, se podívejte do <a href=\"%s\" target=\"_blank\">dokumentace</a>.",
"Create an <strong>admin account</strong>" : "Vytvořit <strong>účet správce</strong>",
+ "Username" : "Uživatelské jméno",
"Password" : "Heslo",
"Storage & database" : "Úložiště & databáze",
"Data folder" : "Složka s daty",
@@ -193,11 +189,11 @@
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hej ty,<br><br>jen ti dávám vědět, že %s sdílí <strong>%s</strong> s tebou.<br><a href=\"%s\">Zobrazit!</a><br><br>",
"This ownCloud instance is currently in single user mode." : "Tato instalace ownCloudu je momentálně v jednouživatelském módu.",
"This means only administrators can use the instance." : "To znamená, že pouze správci systému mohou aplikaci používat.",
- "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktujte, prosím, správce systému, pokud se tato zpráva objevuje opakovaně nebo nečekaně.",
- "Thank you for your patience." : "Děkuji za trpělivost.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktujte prosím správce systému, pokud se tato zpráva objevuje opakovaně nebo nečekaně.",
+ "Thank you for your patience." : "Děkujeme za vaši trpělivost.",
"You are accessing the server from an untrusted domain." : "Přistupujete na server z nedůvěryhodné domény.",
"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." : "Kontaktujte prosím správce. Pokud jste správce této instalace, nastavte \"trusted_domain\" v souboru config/config.php. Příklad konfigurace najdete v souboru config/config.sample.php.",
- "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "V závislosti na vaší konfiguraci vám může být, jako administrátorovi, umožněno použití tlačítka níže k označení této domény jako důvěryhodné.",
+ "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "V závislosti na vaší konfiguraci vám může být, jako správci, umožněno použití tlačítka níže k označení této domény jako důvěryhodné.",
"Add \"%s\" as trusted domain" : "Přidat \"%s\" jako důvěryhodnou doménu",
"%s will be updated to version %s." : "%s bude aktualizován na verzi %s.",
"The following apps will be disabled:" : "Následující aplikace budou zakázány:",
@@ -205,7 +201,7 @@
"Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Před provedením dalšího kroku se prosím ujistěte, že databáze a konfigurační a datový adresář byly zazálohovány. ",
"Start update" : "Spustit aktualizaci",
"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Abyste zabránili vypršení časového limitu u větších instalací, můžete namísto toho spustit následující příkaz v hlavním adresáři:",
- "This %s instance is currently being updated, which may take a while." : "Tato instalace %s je právě aktualizována a to může chvíli trvat.",
+ "This %s instance is currently being updated, which may take a while." : "Tato instalace %s je právě aktualizována. Mějte chvíli strpení.",
"This page will refresh itself when the %s instance is available again." : "Tato stránka se automaticky načte poté, co bude opět dostupná instance %s."
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/core/l10n/cy_GB.js b/core/l10n/cy_GB.js
index b5fbab1efb6..06d8b6a1817 100644
--- a/core/l10n/cy_GB.js
+++ b/core/l10n/cy_GB.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"December" : "Rhagfyr",
"Settings" : "Gosodiadau",
"Saving..." : "Yn cadw...",
- "Reset password" : "Ailosod cyfrinair",
"No" : "Na",
"Yes" : "Ie",
"Choose" : "Dewisiwch",
@@ -64,9 +63,8 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : ["","","",""],
"The update was successful. Redirecting you to ownCloud now." : "Roedd y diweddariad yn llwyddiannus. Cewch eich ailgyfeirio i ownCloud nawr.",
"Use the following link to reset your password: {link}" : "Defnyddiwch y ddolen hon i ailosod eich cyfrinair: {link}",
- "You will receive a link to reset your password via Email." : "Byddwch yn derbyn dolen drwy e-bost i ailosod eich cyfrinair.",
- "Username" : "Enw defnyddiwr",
"New password" : "Cyfrinair newydd",
+ "Reset password" : "Ailosod cyfrinair",
"Personal" : "Personol",
"Users" : "Defnyddwyr",
"Apps" : "Pecynnau",
@@ -77,6 +75,7 @@ OC.L10N.register(
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Mae eich fersiwn PHP yn agored i ymosodiad NULL Byte (CVE-2006-7243)",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Mwy na thebyg fod modd cyrraedd eich cyfeiriadur data a ffeilau o'r rhyngrwyd oherwydd nid yw'r ffeil .htaccess yn gweithio. ",
"Create an <strong>admin account</strong>" : "Crewch <strong>gyfrif gweinyddol</strong>",
+ "Username" : "Enw defnyddiwr",
"Password" : "Cyfrinair",
"Data folder" : "Plygell data",
"Configure the database" : "Cyflunio'r gronfa ddata",
diff --git a/core/l10n/cy_GB.json b/core/l10n/cy_GB.json
index c3749e52468..a2df02a5e75 100644
--- a/core/l10n/cy_GB.json
+++ b/core/l10n/cy_GB.json
@@ -20,7 +20,6 @@
"December" : "Rhagfyr",
"Settings" : "Gosodiadau",
"Saving..." : "Yn cadw...",
- "Reset password" : "Ailosod cyfrinair",
"No" : "Na",
"Yes" : "Ie",
"Choose" : "Dewisiwch",
@@ -62,9 +61,8 @@
"_download %n file_::_download %n files_" : ["","","",""],
"The update was successful. Redirecting you to ownCloud now." : "Roedd y diweddariad yn llwyddiannus. Cewch eich ailgyfeirio i ownCloud nawr.",
"Use the following link to reset your password: {link}" : "Defnyddiwch y ddolen hon i ailosod eich cyfrinair: {link}",
- "You will receive a link to reset your password via Email." : "Byddwch yn derbyn dolen drwy e-bost i ailosod eich cyfrinair.",
- "Username" : "Enw defnyddiwr",
"New password" : "Cyfrinair newydd",
+ "Reset password" : "Ailosod cyfrinair",
"Personal" : "Personol",
"Users" : "Defnyddwyr",
"Apps" : "Pecynnau",
@@ -75,6 +73,7 @@
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Mae eich fersiwn PHP yn agored i ymosodiad NULL Byte (CVE-2006-7243)",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Mwy na thebyg fod modd cyrraedd eich cyfeiriadur data a ffeilau o'r rhyngrwyd oherwydd nid yw'r ffeil .htaccess yn gweithio. ",
"Create an <strong>admin account</strong>" : "Crewch <strong>gyfrif gweinyddol</strong>",
+ "Username" : "Enw defnyddiwr",
"Password" : "Cyfrinair",
"Data folder" : "Plygell data",
"Configure the database" : "Cyflunio'r gronfa ddata",
diff --git a/core/l10n/da.js b/core/l10n/da.js
index 64bd64582a7..ea228ee8b81 100644
--- a/core/l10n/da.js
+++ b/core/l10n/da.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Linket til at nulstille dit kodeord er blevet sendt til din e-post: hvis du ikke modtager den inden for en rimelig tid, så tjek dine spam/junk-mapper.<br> Hvis det ikke er der, så spørg din lokale administrator.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dine filer er krypterede. Hvis du ikke har aktiveret gendannelsesnøglen kan du ikke få dine data tilbage efter at du har ændret adgangskode.<br />Hvis du ikke er sikker på, hvad du skal gøre så kontakt din administrator før du fortsætter.<br />Vil du fortsætte?",
"I know what I'm doing" : "Jeg ved, hvad jeg har gang i",
- "Reset password" : "Nulstil kodeord",
"Password can not be changed. Please contact your administrator." : "Adgangskoden kunne ikke ændres. Kontakt venligst din administrator.",
"No" : "Nej",
"Yes" : "Ja",
@@ -107,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",
@@ -124,13 +123,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Der opstod et problem under afsendelse af nulstillings-e-mailen. Der ikke er nogen email adresse tilknyttet denne bruger konto. Kontakt venligst systemadministratoren",
"%s password reset" : "%s adgangskode nulstillet",
"Use the following link to reset your password: {link}" : "Anvend følgende link til at nulstille din adgangskode: {link}",
- "You will receive a link to reset your password via Email." : "Du vil modtage et link til at nulstille dit kodeord via e-mail.",
- "Username" : "Brugernavn",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Dine filer er krypterede. Hvis du ikke har aktiveret gendannelsesnøglen kan du ikke få dine data tilbage efter at du har ændret adgangskode. HVis du ikke er sikker på, hvad du skal gøre så kontakt din administrator før du fortsætter. Vil du fortsætte?",
- "Yes, I really want to reset my password now" : "Ja, Jeg ønsker virkelig at nulstille mit kodeord",
- "Reset" : "Nulstil",
"New password" : "Nyt kodeord",
"New Password" : "Ny adgangskode",
+ "Reset password" : "Nulstil kodeord",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X understøttes ikke og %s vil ikke virke optimalt på denne platform. Anvend på eget ansvar!",
"For the best results, please consider using a GNU/Linux server instead." : "For de bedste resultater, overvej venligst at bruge en GNU/Linux-server i stedet.",
"Personal" : "Personligt",
@@ -138,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",
@@ -170,6 +165,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Dine data mappe og filer er sandsynligvis tilgængelige fra internettet fordi .htaccess filen ikke virker.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For information om, hvordan du konfigurerer din server korrekt se <a href=\"%s\" target=\"_blank\">dokumentationen</a>.",
"Create an <strong>admin account</strong>" : "Opret en <strong>administratorkonto</strong>",
+ "Username" : "Brugernavn",
"Password" : "Adgangskode",
"Storage & database" : "Lager & database",
"Data folder" : "Datamappe",
diff --git a/core/l10n/da.json b/core/l10n/da.json
index ed40172a698..021d43e8c7b 100644
--- a/core/l10n/da.json
+++ b/core/l10n/da.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Linket til at nulstille dit kodeord er blevet sendt til din e-post: hvis du ikke modtager den inden for en rimelig tid, så tjek dine spam/junk-mapper.<br> Hvis det ikke er der, så spørg din lokale administrator.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dine filer er krypterede. Hvis du ikke har aktiveret gendannelsesnøglen kan du ikke få dine data tilbage efter at du har ændret adgangskode.<br />Hvis du ikke er sikker på, hvad du skal gøre så kontakt din administrator før du fortsætter.<br />Vil du fortsætte?",
"I know what I'm doing" : "Jeg ved, hvad jeg har gang i",
- "Reset password" : "Nulstil kodeord",
"Password can not be changed. Please contact your administrator." : "Adgangskoden kunne ikke ændres. Kontakt venligst din administrator.",
"No" : "Nej",
"Yes" : "Ja",
@@ -105,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",
@@ -122,13 +121,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Der opstod et problem under afsendelse af nulstillings-e-mailen. Der ikke er nogen email adresse tilknyttet denne bruger konto. Kontakt venligst systemadministratoren",
"%s password reset" : "%s adgangskode nulstillet",
"Use the following link to reset your password: {link}" : "Anvend følgende link til at nulstille din adgangskode: {link}",
- "You will receive a link to reset your password via Email." : "Du vil modtage et link til at nulstille dit kodeord via e-mail.",
- "Username" : "Brugernavn",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Dine filer er krypterede. Hvis du ikke har aktiveret gendannelsesnøglen kan du ikke få dine data tilbage efter at du har ændret adgangskode. HVis du ikke er sikker på, hvad du skal gøre så kontakt din administrator før du fortsætter. Vil du fortsætte?",
- "Yes, I really want to reset my password now" : "Ja, Jeg ønsker virkelig at nulstille mit kodeord",
- "Reset" : "Nulstil",
"New password" : "Nyt kodeord",
"New Password" : "Ny adgangskode",
+ "Reset password" : "Nulstil kodeord",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X understøttes ikke og %s vil ikke virke optimalt på denne platform. Anvend på eget ansvar!",
"For the best results, please consider using a GNU/Linux server instead." : "For de bedste resultater, overvej venligst at bruge en GNU/Linux-server i stedet.",
"Personal" : "Personligt",
@@ -136,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",
@@ -168,6 +163,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Dine data mappe og filer er sandsynligvis tilgængelige fra internettet fordi .htaccess filen ikke virker.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For information om, hvordan du konfigurerer din server korrekt se <a href=\"%s\" target=\"_blank\">dokumentationen</a>.",
"Create an <strong>admin account</strong>" : "Opret en <strong>administratorkonto</strong>",
+ "Username" : "Brugernavn",
"Password" : "Adgangskode",
"Storage & database" : "Lager & database",
"Data folder" : "Datamappe",
diff --git a/core/l10n/de.js b/core/l10n/de.js
index 1258cf40251..6b603f3b68a 100644
--- a/core/l10n/de.js
+++ b/core/l10n/de.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Der Link zum Rücksetzen Deines Passwort ist an Deine E-Mail-Adresse geschickt worden. Wenn Du ihn nicht innerhalb einer vernünftigen Zeit empfängst, prüfe Deine Spam-Verzeichnisse.<br>Wenn er nicht dort ist, frage Deinen lokalen Administrator.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ihre Dateien sind verschlüsselt. Sollten Sie keinen Wiederherstellungschlüssel aktiviert haben, gibt es keine Möglichkeit an Ihre Daten zu kommen, wenn das Passwort zurückgesetzt wird.<br />Falls Sie sich nicht sicher sind, was Sie tun sollen, kontaktieren Sie bitte Ihren Administrator, bevor Sie fortfahren.<br />Wollen Sie wirklich fortfahren?",
"I know what I'm doing" : "Ich weiß, was ich mache",
- "Reset password" : "Passwort zurücksetzen",
"Password can not be changed. Please contact your administrator." : "Passwort kann nicht geändert werden. Bitte kontaktiere Deinen Administrator.",
"No" : "Nein",
"Yes" : "Ja",
@@ -124,13 +123,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "E-Mail zum Zurücksetzen kann Aufgrund einer nicht vorhandenen E-Mail Adresse für diesen Nutzernamen nicht versendet werden. Bitte kontaktiere Deinen Administrator.",
"%s password reset" : "%s-Passwort zurücksetzen",
"Use the following link to reset your password: {link}" : "Nutze den nachfolgenden Link, um Dein Passwort zurückzusetzen: {link}",
- "You will receive a link to reset your password via Email." : "Du erhältst einen Link per E-Mail, um Dein Passwort zurückzusetzen.",
- "Username" : "Benutzername",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Deine Dateien sind verschlüsselt. Solltest Du keinen Wiederherstellungschlüssel aktiviert haben, gibt es keine Möglichkeit an Deine Daten zu kommen, wenn das Passwort zurückgesetzt wird. Falls Du Dir nicht sicher bist, was Du tun sollst, kontaktiere bitte Deinen Administrator, bevor Du fortfährst. Willst Du wirklich fortfahren?",
- "Yes, I really want to reset my password now" : "Ja, ich will mein Passwort jetzt zurücksetzen",
- "Reset" : "Zurücksetzen",
"New password" : "Neues Passwort",
"New Password" : "Neues Passwort",
+ "Reset password" : "Passwort zurücksetzen",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OSX wird nicht unterstützt und %s wird auf dieser Platform nicht korrekt funktionieren. Benutzung auf eigenes Risiko!",
"For the best results, please consider using a GNU/Linux server instead." : "Für die besten Resultate sollte stattdessen ein GNU/Linux Server verwendet werden.",
"Personal" : "Persönlich",
@@ -170,6 +165,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Dein Datenverzeichnis und Deine Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Für Informationen, wie Du Deinen Server richtig konfigurierst, lies bitte die <a href=\"%s\" target=\"_blank\">Dokumentation</a>.",
"Create an <strong>admin account</strong>" : "<strong>Administrator-Konto</strong> anlegen",
+ "Username" : "Benutzername",
"Password" : "Passwort",
"Storage & database" : "Speicher & Datenbank",
"Data folder" : "Datenverzeichnis",
diff --git a/core/l10n/de.json b/core/l10n/de.json
index 09a77d2ee9a..c1260e70618 100644
--- a/core/l10n/de.json
+++ b/core/l10n/de.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Der Link zum Rücksetzen Deines Passwort ist an Deine E-Mail-Adresse geschickt worden. Wenn Du ihn nicht innerhalb einer vernünftigen Zeit empfängst, prüfe Deine Spam-Verzeichnisse.<br>Wenn er nicht dort ist, frage Deinen lokalen Administrator.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ihre Dateien sind verschlüsselt. Sollten Sie keinen Wiederherstellungschlüssel aktiviert haben, gibt es keine Möglichkeit an Ihre Daten zu kommen, wenn das Passwort zurückgesetzt wird.<br />Falls Sie sich nicht sicher sind, was Sie tun sollen, kontaktieren Sie bitte Ihren Administrator, bevor Sie fortfahren.<br />Wollen Sie wirklich fortfahren?",
"I know what I'm doing" : "Ich weiß, was ich mache",
- "Reset password" : "Passwort zurücksetzen",
"Password can not be changed. Please contact your administrator." : "Passwort kann nicht geändert werden. Bitte kontaktiere Deinen Administrator.",
"No" : "Nein",
"Yes" : "Ja",
@@ -122,13 +121,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "E-Mail zum Zurücksetzen kann Aufgrund einer nicht vorhandenen E-Mail Adresse für diesen Nutzernamen nicht versendet werden. Bitte kontaktiere Deinen Administrator.",
"%s password reset" : "%s-Passwort zurücksetzen",
"Use the following link to reset your password: {link}" : "Nutze den nachfolgenden Link, um Dein Passwort zurückzusetzen: {link}",
- "You will receive a link to reset your password via Email." : "Du erhältst einen Link per E-Mail, um Dein Passwort zurückzusetzen.",
- "Username" : "Benutzername",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Deine Dateien sind verschlüsselt. Solltest Du keinen Wiederherstellungschlüssel aktiviert haben, gibt es keine Möglichkeit an Deine Daten zu kommen, wenn das Passwort zurückgesetzt wird. Falls Du Dir nicht sicher bist, was Du tun sollst, kontaktiere bitte Deinen Administrator, bevor Du fortfährst. Willst Du wirklich fortfahren?",
- "Yes, I really want to reset my password now" : "Ja, ich will mein Passwort jetzt zurücksetzen",
- "Reset" : "Zurücksetzen",
"New password" : "Neues Passwort",
"New Password" : "Neues Passwort",
+ "Reset password" : "Passwort zurücksetzen",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OSX wird nicht unterstützt und %s wird auf dieser Platform nicht korrekt funktionieren. Benutzung auf eigenes Risiko!",
"For the best results, please consider using a GNU/Linux server instead." : "Für die besten Resultate sollte stattdessen ein GNU/Linux Server verwendet werden.",
"Personal" : "Persönlich",
@@ -168,6 +163,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Dein Datenverzeichnis und Deine Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Für Informationen, wie Du Deinen Server richtig konfigurierst, lies bitte die <a href=\"%s\" target=\"_blank\">Dokumentation</a>.",
"Create an <strong>admin account</strong>" : "<strong>Administrator-Konto</strong> anlegen",
+ "Username" : "Benutzername",
"Password" : "Passwort",
"Storage & database" : "Speicher & Datenbank",
"Data folder" : "Datenverzeichnis",
diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js
index 017ecd1c4fa..aaf21aaf95e 100644
--- a/core/l10n/de_DE.js
+++ b/core/l10n/de_DE.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Der Link, zum Zurücksetzen Ihres Passwortes, ist an Ihre E-Mail-Adresse geschickt worden. Wenn Sie ihn nicht innerhalb einer vernünftigen Zeit empfangen, überprüfen Sie bitte Ihre Spam-Ordner.<br>Wenn sie nicht dort ist, fragen Sie bitte Ihren lokalen Administrator.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ihre Dateien sind verschlüsselt. Wenn Sie den Wiederherstellungsschlüssel nicht aktiviert haben, wird es keine Möglichkeit geben, um Ihre Daten wieder zu erhalten, nachdem Ihr Passwort zurückgesetzt wurde.<br />Wenn Sie sich nicht sicher sind, was Sie tun sollen, wenden Sie sich bitte an Ihren Administrator, bevor Sie fortfahren.<br />Wollen Sie wirklich fortfahren?",
"I know what I'm doing" : "Ich weiß, was ich mache",
- "Reset password" : "Passwort zurücksetzen",
"Password can not be changed. Please contact your administrator." : "Passwort kann nicht geändert werden. Bitte kontaktieren Sie Ihren Administrator.",
"No" : "Nein",
"Yes" : "Ja",
@@ -124,13 +123,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Die E-Mail, zum Zurücksetzen, kann Aufgrund einer nicht vorhandenen E-Mail-Adresse, für diesen Benutzernamen, nicht versendet werden. Bitte kontaktieren Sie Ihren Administrator.",
"%s password reset" : "%s-Passwort zurücksetzen",
"Use the following link to reset your password: {link}" : "Nutzen Sie den nachfolgenden Link, um Ihr Passwort zurückzusetzen: {link}",
- "You will receive a link to reset your password via Email." : "Sie erhalten einen Link per E-Mail, um Ihr Passwort zurückzusetzen.",
- "Username" : "Benutzername",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Ihre Dateien sind verschlüsselt. Wenn Sie den Wiederherstellungsschlüssel nicht aktiviert haben, wird es keine Möglichkeit geben, um Ihre Daten wiederzubekommen, nachdem Ihr Passwort zurückgesetzt wurde. Wenn Sie sich nicht sicher sind, was Sie tun sollen, wenden Sie sich bitte an Ihren Administrator, bevor Sie fortfahren. Wollen Sie wirklich fortfahren?",
- "Yes, I really want to reset my password now" : "Ja, ich möchte jetzt mein Passwort wirklich zurücksetzen.",
- "Reset" : "Zurücksetzen",
"New password" : "Neues Passwort",
"New Password" : "Neues Passwort",
+ "Reset password" : "Passwort zurücksetzen",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OSX wird nicht unterstützt und %s wird auf dieser Platform nicht richtig funktionieren. Benutzung auf eigenes Risiko!",
"For the best results, please consider using a GNU/Linux server instead." : "Für die besten Resultate sollte stattdessen ein GNU/Linux Server verwendet werden.",
"Personal" : "Persönlich",
@@ -170,6 +165,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Bitte lesen Sie die <a href=\"%s\" target=\"_blank\">Dokumentation</a>, um zu erfahren, wie Sie Ihren Server richtig konfigurieren können.",
"Create an <strong>admin account</strong>" : "<strong>Administrator-Konto</strong> anlegen",
+ "Username" : "Benutzername",
"Password" : "Passwort",
"Storage & database" : "Speicher & Datenbank",
"Data folder" : "Datenverzeichnis",
diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json
index d6d0c73a777..39e3fd53719 100644
--- a/core/l10n/de_DE.json
+++ b/core/l10n/de_DE.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Der Link, zum Zurücksetzen Ihres Passwortes, ist an Ihre E-Mail-Adresse geschickt worden. Wenn Sie ihn nicht innerhalb einer vernünftigen Zeit empfangen, überprüfen Sie bitte Ihre Spam-Ordner.<br>Wenn sie nicht dort ist, fragen Sie bitte Ihren lokalen Administrator.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ihre Dateien sind verschlüsselt. Wenn Sie den Wiederherstellungsschlüssel nicht aktiviert haben, wird es keine Möglichkeit geben, um Ihre Daten wieder zu erhalten, nachdem Ihr Passwort zurückgesetzt wurde.<br />Wenn Sie sich nicht sicher sind, was Sie tun sollen, wenden Sie sich bitte an Ihren Administrator, bevor Sie fortfahren.<br />Wollen Sie wirklich fortfahren?",
"I know what I'm doing" : "Ich weiß, was ich mache",
- "Reset password" : "Passwort zurücksetzen",
"Password can not be changed. Please contact your administrator." : "Passwort kann nicht geändert werden. Bitte kontaktieren Sie Ihren Administrator.",
"No" : "Nein",
"Yes" : "Ja",
@@ -122,13 +121,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Die E-Mail, zum Zurücksetzen, kann Aufgrund einer nicht vorhandenen E-Mail-Adresse, für diesen Benutzernamen, nicht versendet werden. Bitte kontaktieren Sie Ihren Administrator.",
"%s password reset" : "%s-Passwort zurücksetzen",
"Use the following link to reset your password: {link}" : "Nutzen Sie den nachfolgenden Link, um Ihr Passwort zurückzusetzen: {link}",
- "You will receive a link to reset your password via Email." : "Sie erhalten einen Link per E-Mail, um Ihr Passwort zurückzusetzen.",
- "Username" : "Benutzername",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Ihre Dateien sind verschlüsselt. Wenn Sie den Wiederherstellungsschlüssel nicht aktiviert haben, wird es keine Möglichkeit geben, um Ihre Daten wiederzubekommen, nachdem Ihr Passwort zurückgesetzt wurde. Wenn Sie sich nicht sicher sind, was Sie tun sollen, wenden Sie sich bitte an Ihren Administrator, bevor Sie fortfahren. Wollen Sie wirklich fortfahren?",
- "Yes, I really want to reset my password now" : "Ja, ich möchte jetzt mein Passwort wirklich zurücksetzen.",
- "Reset" : "Zurücksetzen",
"New password" : "Neues Passwort",
"New Password" : "Neues Passwort",
+ "Reset password" : "Passwort zurücksetzen",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OSX wird nicht unterstützt und %s wird auf dieser Platform nicht richtig funktionieren. Benutzung auf eigenes Risiko!",
"For the best results, please consider using a GNU/Linux server instead." : "Für die besten Resultate sollte stattdessen ein GNU/Linux Server verwendet werden.",
"Personal" : "Persönlich",
@@ -168,6 +163,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Bitte lesen Sie die <a href=\"%s\" target=\"_blank\">Dokumentation</a>, um zu erfahren, wie Sie Ihren Server richtig konfigurieren können.",
"Create an <strong>admin account</strong>" : "<strong>Administrator-Konto</strong> anlegen",
+ "Username" : "Benutzername",
"Password" : "Passwort",
"Storage & database" : "Speicher & Datenbank",
"Data folder" : "Datenverzeichnis",
diff --git a/core/l10n/el.js b/core/l10n/el.js
index a73750695a3..c41928116ba 100644
--- a/core/l10n/el.js
+++ b/core/l10n/el.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Ο σύνδεσμος για την επαναφορά του κωδικού πρόσβασής σας απεστάλη στο ηλ. ταχυδρομείο σας. Εάν δεν το παραλάβετε μέσα σε ένα εύλογο χρονικό διάστημα, ελέγξτε το φάκελο ανεπιθύμητων μηνυμάτων σας. <br>Εάν δεν βρίσκεται εκεί ρωτήστε τον τοπικό διαχειριστή σας.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Τα αρχεία σας είναι κρυπτογραφημένα. Εάν δεν έχετε ενεργοποιήσει το κλειδί επαναφοράς, δεν θα υπάρχει τρόπος να ανακτήσετε τα δεδομένα σας μετά την επαναφορά του κωδικού πρόσβασής σας.<br />Εάν δεν είστε σίγουροι για το τι θα θέλατε να κάνετε, παρακαλώ επικοινωνήστε με το διαχειριστή σας πριν συνεχίσετε. <br />Θέλετε στ' αλήθεια να συνεχίσετε;",
"I know what I'm doing" : "Γνωρίζω τι κάνω",
- "Reset password" : "Επαναφορά συνθηματικού",
"Password can not be changed. Please contact your administrator." : "Ο κωδικός πρόσβασης δεν μπορεί να αλλάξει. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.",
"No" : "Όχι",
"Yes" : "Ναι",
@@ -121,13 +120,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς καθώς δεν αντιστοιχεί καμμία διεύθυνση ηλ. ταχυδρομείου σε αυτό το όνομα χρήστη. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.",
"%s password reset" : "%s επαναφορά κωδικού πρόσβασης",
"Use the following link to reset your password: {link}" : "Χρησιμοποιήστε τον ακόλουθο σύνδεσμο για να επανεκδόσετε τον κωδικό: {link}",
- "You will receive a link to reset your password via Email." : "Θα λάβετε ένα σύνδεσμο για να επαναφέρετε τον κωδικό πρόσβασής σας μέσω ηλεκτρονικού ταχυδρομείου.",
- "Username" : "Όνομα χρήστη",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Τα αρχεία σας είναι κρυπτογραφημένα. Εάν δεν έχετε ενεργοποιήσει το κλειδί ανάκτησης, δεν υπάρχει περίπτωση να έχετε πρόσβαση στα δεδομένα σας μετά την επαναφορά του συνθηματικού. Εάν δεν είστε σίγουροι τι να κάνετε, παρακαλώ επικοινωνήστε με τον διαχειριστή πριν συνεχίσετε. Θέλετε να συνεχίσετε;",
- "Yes, I really want to reset my password now" : "Ναι, θέλω να επαναφέρω το συνθηματικό μου τώρα.",
- "Reset" : "Επαναφορά",
"New password" : "Νέο συνθηματικό",
"New Password" : "Νέος Κωδικός",
+ "Reset password" : "Επαναφορά συνθηματικού",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Το Mac OS X δεν υποστηρίζεται και το %s δεν θα λειτουργήσει σωστά σε αυτή την πλατφόρμα. Χρησιμοποιείτε με δική σας ευθύνη!",
"For the best results, please consider using a GNU/Linux server instead." : "Για καλύτερα αποτελέσματα, παρακαλούμε εξετάστε την μετατροπή σε έναν διακομιστή GNU/Linux.",
"Personal" : "Προσωπικά",
@@ -167,6 +162,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανό προσβάσιμα από το internet γιατί δεν δουλεύει το αρχείο .htaccess.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Για πληροφορίες πως να ρυθμίσετε ορθά τον διακομιστή σας, παρακαλώ δείτε την <a href=\"%s\" target=\"_blank\">τεκμηρίωση</a>.",
"Create an <strong>admin account</strong>" : "Δημιουργήστε έναν <strong>λογαριασμό διαχειριστή</strong>",
+ "Username" : "Όνομα χρήστη",
"Password" : "Συνθηματικό",
"Storage & database" : "Αποθήκευση & βάση δεδομένων",
"Data folder" : "Φάκελος δεδομένων",
diff --git a/core/l10n/el.json b/core/l10n/el.json
index 010d43cc2c8..6b08b8262c8 100644
--- a/core/l10n/el.json
+++ b/core/l10n/el.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Ο σύνδεσμος για την επαναφορά του κωδικού πρόσβασής σας απεστάλη στο ηλ. ταχυδρομείο σας. Εάν δεν το παραλάβετε μέσα σε ένα εύλογο χρονικό διάστημα, ελέγξτε το φάκελο ανεπιθύμητων μηνυμάτων σας. <br>Εάν δεν βρίσκεται εκεί ρωτήστε τον τοπικό διαχειριστή σας.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Τα αρχεία σας είναι κρυπτογραφημένα. Εάν δεν έχετε ενεργοποιήσει το κλειδί επαναφοράς, δεν θα υπάρχει τρόπος να ανακτήσετε τα δεδομένα σας μετά την επαναφορά του κωδικού πρόσβασής σας.<br />Εάν δεν είστε σίγουροι για το τι θα θέλατε να κάνετε, παρακαλώ επικοινωνήστε με το διαχειριστή σας πριν συνεχίσετε. <br />Θέλετε στ' αλήθεια να συνεχίσετε;",
"I know what I'm doing" : "Γνωρίζω τι κάνω",
- "Reset password" : "Επαναφορά συνθηματικού",
"Password can not be changed. Please contact your administrator." : "Ο κωδικός πρόσβασης δεν μπορεί να αλλάξει. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.",
"No" : "Όχι",
"Yes" : "Ναι",
@@ -119,13 +118,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς καθώς δεν αντιστοιχεί καμμία διεύθυνση ηλ. ταχυδρομείου σε αυτό το όνομα χρήστη. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.",
"%s password reset" : "%s επαναφορά κωδικού πρόσβασης",
"Use the following link to reset your password: {link}" : "Χρησιμοποιήστε τον ακόλουθο σύνδεσμο για να επανεκδόσετε τον κωδικό: {link}",
- "You will receive a link to reset your password via Email." : "Θα λάβετε ένα σύνδεσμο για να επαναφέρετε τον κωδικό πρόσβασής σας μέσω ηλεκτρονικού ταχυδρομείου.",
- "Username" : "Όνομα χρήστη",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Τα αρχεία σας είναι κρυπτογραφημένα. Εάν δεν έχετε ενεργοποιήσει το κλειδί ανάκτησης, δεν υπάρχει περίπτωση να έχετε πρόσβαση στα δεδομένα σας μετά την επαναφορά του συνθηματικού. Εάν δεν είστε σίγουροι τι να κάνετε, παρακαλώ επικοινωνήστε με τον διαχειριστή πριν συνεχίσετε. Θέλετε να συνεχίσετε;",
- "Yes, I really want to reset my password now" : "Ναι, θέλω να επαναφέρω το συνθηματικό μου τώρα.",
- "Reset" : "Επαναφορά",
"New password" : "Νέο συνθηματικό",
"New Password" : "Νέος Κωδικός",
+ "Reset password" : "Επαναφορά συνθηματικού",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Το Mac OS X δεν υποστηρίζεται και το %s δεν θα λειτουργήσει σωστά σε αυτή την πλατφόρμα. Χρησιμοποιείτε με δική σας ευθύνη!",
"For the best results, please consider using a GNU/Linux server instead." : "Για καλύτερα αποτελέσματα, παρακαλούμε εξετάστε την μετατροπή σε έναν διακομιστή GNU/Linux.",
"Personal" : "Προσωπικά",
@@ -165,6 +160,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανό προσβάσιμα από το internet γιατί δεν δουλεύει το αρχείο .htaccess.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Για πληροφορίες πως να ρυθμίσετε ορθά τον διακομιστή σας, παρακαλώ δείτε την <a href=\"%s\" target=\"_blank\">τεκμηρίωση</a>.",
"Create an <strong>admin account</strong>" : "Δημιουργήστε έναν <strong>λογαριασμό διαχειριστή</strong>",
+ "Username" : "Όνομα χρήστη",
"Password" : "Συνθηματικό",
"Storage & database" : "Αποθήκευση & βάση δεδομένων",
"Data folder" : "Φάκελος δεδομένων",
diff --git a/core/l10n/en_GB.js b/core/l10n/en_GB.js
index 0c80072e67d..27f28c84908 100644
--- a/core/l10n/en_GB.js
+++ b/core/l10n/en_GB.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?",
"I know what I'm doing" : "I know what I'm doing",
- "Reset password" : "Reset password",
"Password can not be changed. Please contact your administrator." : "Password can not be changed. Please contact your administrator.",
"No" : "No",
"Yes" : "Yes",
@@ -124,13 +123,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Couldn't send reset email because there is no email address for this username. Please contact your administrator.",
"%s password reset" : "%s password reset",
"Use the following link to reset your password: {link}" : "Use the following link to reset your password: {link}",
- "You will receive a link to reset your password via Email." : "You will receive a link to reset your password via email.",
- "Username" : "Username",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?",
- "Yes, I really want to reset my password now" : "Yes, I really want to reset my password now",
- "Reset" : "Reset",
"New password" : "New password",
"New Password" : "New Password",
+ "Reset password" : "Reset password",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! ",
"For the best results, please consider using a GNU/Linux server instead." : "For the best results, please consider using a GNU/Linux server instead.",
"Personal" : "Personal",
@@ -170,6 +165,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Your data directory and files are probably accessible from the internet because the .htaccess file does not work.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>.",
"Create an <strong>admin account</strong>" : "Create an <strong>admin account</strong>",
+ "Username" : "Username",
"Password" : "Password",
"Storage & database" : "Storage & database",
"Data folder" : "Data folder",
diff --git a/core/l10n/en_GB.json b/core/l10n/en_GB.json
index 4a20f00dd6a..c4daf4bbb97 100644
--- a/core/l10n/en_GB.json
+++ b/core/l10n/en_GB.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?",
"I know what I'm doing" : "I know what I'm doing",
- "Reset password" : "Reset password",
"Password can not be changed. Please contact your administrator." : "Password can not be changed. Please contact your administrator.",
"No" : "No",
"Yes" : "Yes",
@@ -122,13 +121,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Couldn't send reset email because there is no email address for this username. Please contact your administrator.",
"%s password reset" : "%s password reset",
"Use the following link to reset your password: {link}" : "Use the following link to reset your password: {link}",
- "You will receive a link to reset your password via Email." : "You will receive a link to reset your password via email.",
- "Username" : "Username",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?",
- "Yes, I really want to reset my password now" : "Yes, I really want to reset my password now",
- "Reset" : "Reset",
"New password" : "New password",
"New Password" : "New Password",
+ "Reset password" : "Reset password",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! ",
"For the best results, please consider using a GNU/Linux server instead." : "For the best results, please consider using a GNU/Linux server instead.",
"Personal" : "Personal",
@@ -168,6 +163,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Your data directory and files are probably accessible from the internet because the .htaccess file does not work.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>.",
"Create an <strong>admin account</strong>" : "Create an <strong>admin account</strong>",
+ "Username" : "Username",
"Password" : "Password",
"Storage & database" : "Storage & database",
"Data folder" : "Data folder",
diff --git a/core/l10n/eo.js b/core/l10n/eo.js
index cc814c41e35..813d872a640 100644
--- a/core/l10n/eo.js
+++ b/core/l10n/eo.js
@@ -25,7 +25,6 @@ OC.L10N.register(
"December" : "Decembro",
"Settings" : "Agordo",
"Saving..." : "Konservante...",
- "Reset password" : "Rekomenci la pasvorton",
"No" : "Ne",
"Yes" : "Jes",
"Choose" : "Elekti",
@@ -86,10 +85,8 @@ OC.L10N.register(
"Please reload the page." : "Bonvolu reŝargi la paĝon.",
"The update was successful. Redirecting you to ownCloud now." : "La ĝisdatigo estis sukcesa. Alidirektante nun al ownCloud.",
"Use the following link to reset your password: {link}" : "Uzu la jenan ligilon por restarigi vian pasvorton: {link}",
- "You will receive a link to reset your password via Email." : "Vi ricevos ligilon retpoŝte por rekomencigi vian pasvorton.",
- "Username" : "Uzantonomo",
- "Yes, I really want to reset my password now" : "Jes, mi vere volas restarigi mian pasvorton nun",
"New password" : "Nova pasvorto",
+ "Reset password" : "Rekomenci la pasvorton",
"Personal" : "Persona",
"Users" : "Uzantoj",
"Apps" : "Aplikaĵoj",
@@ -105,6 +102,7 @@ OC.L10N.register(
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Via PHP versio estas sendefenda je la NULL bajto atako (CVE-2006-7243)",
"Please update your PHP installation to use %s securely." : "Bonvolu ĝisdatigi vian PHP-instalon por uzi %s sekure.",
"Create an <strong>admin account</strong>" : "Krei <strong>administran konton</strong>",
+ "Username" : "Uzantonomo",
"Password" : "Pasvorto",
"Data folder" : "Datuma dosierujo",
"Configure the database" : "Agordi la datumbazon",
diff --git a/core/l10n/eo.json b/core/l10n/eo.json
index dc4d9d6eefc..64e2da42ecb 100644
--- a/core/l10n/eo.json
+++ b/core/l10n/eo.json
@@ -23,7 +23,6 @@
"December" : "Decembro",
"Settings" : "Agordo",
"Saving..." : "Konservante...",
- "Reset password" : "Rekomenci la pasvorton",
"No" : "Ne",
"Yes" : "Jes",
"Choose" : "Elekti",
@@ -84,10 +83,8 @@
"Please reload the page." : "Bonvolu reŝargi la paĝon.",
"The update was successful. Redirecting you to ownCloud now." : "La ĝisdatigo estis sukcesa. Alidirektante nun al ownCloud.",
"Use the following link to reset your password: {link}" : "Uzu la jenan ligilon por restarigi vian pasvorton: {link}",
- "You will receive a link to reset your password via Email." : "Vi ricevos ligilon retpoŝte por rekomencigi vian pasvorton.",
- "Username" : "Uzantonomo",
- "Yes, I really want to reset my password now" : "Jes, mi vere volas restarigi mian pasvorton nun",
"New password" : "Nova pasvorto",
+ "Reset password" : "Rekomenci la pasvorton",
"Personal" : "Persona",
"Users" : "Uzantoj",
"Apps" : "Aplikaĵoj",
@@ -103,6 +100,7 @@
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Via PHP versio estas sendefenda je la NULL bajto atako (CVE-2006-7243)",
"Please update your PHP installation to use %s securely." : "Bonvolu ĝisdatigi vian PHP-instalon por uzi %s sekure.",
"Create an <strong>admin account</strong>" : "Krei <strong>administran konton</strong>",
+ "Username" : "Uzantonomo",
"Password" : "Pasvorto",
"Data folder" : "Datuma dosierujo",
"Configure the database" : "Agordi la datumbazon",
diff --git a/core/l10n/es.js b/core/l10n/es.js
index b963b9d3f01..be1bb9ffe72 100644
--- a/core/l10n/es.js
+++ b/core/l10n/es.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Un enlace para reiniciar su contraseña ha sido enviado a su correo electrónico. Si usted no lo recibe en un tiempo razonable, revise su carpeta para spam/chatarra.<br>Si no lo encuentra, pregunte a su administrador local.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sus archivos están cifrados. Si no has activado la clave de recuperación, no habrá manera de recuperar los datos despues de que tu contraseña seá restablecida.<br /> Si no está seguro de lo que debe hacer, por favor contacte a su administrador antes de continuar.<br />¿Realmente desea continuar?",
"I know what I'm doing" : "Yo se lo que estoy haciendo",
- "Reset password" : "Restablecer contraseña",
"Password can not be changed. Please contact your administrator." : "La contraseña no se puede cambiar. Por favor, contacte a su administrador.",
"No" : "No",
"Yes" : "Sí",
@@ -124,13 +123,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "No se pudo enviar la reiniciación del correo electrónico, porque no hay una dirección de correo electrónico asociada con este nombre de usuario. Por favor, contacte a su administrador.",
"%s password reset" : "%s restablecer contraseña",
"Use the following link to reset your password: {link}" : "Utilice el siguiente enlace para restablecer su contraseña: {link}",
- "You will receive a link to reset your password via Email." : "Recibirá un enlace por correo electrónico para restablecer su contraseña",
- "Username" : "Nombre de usuario",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Sus archivos están cifrados. Si no ha habilitado la clave de recurperación, no habrá forma de recuperar sus datos luego de que la contraseña sea reseteada. Si no está seguro de qué hacer, contacte a su administrador antes de continuar. ¿Realmente desea continuar?",
- "Yes, I really want to reset my password now" : "Sí. Realmente deseo resetear mi contraseña ahora",
- "Reset" : "Reiniciar",
"New password" : "Nueva contraseña",
"New Password" : "Nueva contraseña",
+ "Reset password" : "Restablecer contraseña",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X no está soportado y %s no funcionará bien en esta plataforma. ¡Úsela a su propio riesgo! ",
"For the best results, please consider using a GNU/Linux server instead." : "Para óptimos resultados, considere utilizar un servidor GNU/Linux.",
"Personal" : "Personal",
@@ -170,6 +165,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Su directorio de datos y sus archivos probablemente sean accesibles a través de internet ya que el archivo .htaccess no funciona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para información de cómo configurar apropiadamente su servidor, por favor vea la <a href=\"%s\" target=\"_blank\">documentación</a>.",
"Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>",
+ "Username" : "Nombre de usuario",
"Password" : "Contraseña",
"Storage & database" : "Almacenamiento y base de datos",
"Data folder" : "Directorio de datos",
diff --git a/core/l10n/es.json b/core/l10n/es.json
index 008891d5c98..742703e87c9 100644
--- a/core/l10n/es.json
+++ b/core/l10n/es.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Un enlace para reiniciar su contraseña ha sido enviado a su correo electrónico. Si usted no lo recibe en un tiempo razonable, revise su carpeta para spam/chatarra.<br>Si no lo encuentra, pregunte a su administrador local.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sus archivos están cifrados. Si no has activado la clave de recuperación, no habrá manera de recuperar los datos despues de que tu contraseña seá restablecida.<br /> Si no está seguro de lo que debe hacer, por favor contacte a su administrador antes de continuar.<br />¿Realmente desea continuar?",
"I know what I'm doing" : "Yo se lo que estoy haciendo",
- "Reset password" : "Restablecer contraseña",
"Password can not be changed. Please contact your administrator." : "La contraseña no se puede cambiar. Por favor, contacte a su administrador.",
"No" : "No",
"Yes" : "Sí",
@@ -122,13 +121,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "No se pudo enviar la reiniciación del correo electrónico, porque no hay una dirección de correo electrónico asociada con este nombre de usuario. Por favor, contacte a su administrador.",
"%s password reset" : "%s restablecer contraseña",
"Use the following link to reset your password: {link}" : "Utilice el siguiente enlace para restablecer su contraseña: {link}",
- "You will receive a link to reset your password via Email." : "Recibirá un enlace por correo electrónico para restablecer su contraseña",
- "Username" : "Nombre de usuario",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Sus archivos están cifrados. Si no ha habilitado la clave de recurperación, no habrá forma de recuperar sus datos luego de que la contraseña sea reseteada. Si no está seguro de qué hacer, contacte a su administrador antes de continuar. ¿Realmente desea continuar?",
- "Yes, I really want to reset my password now" : "Sí. Realmente deseo resetear mi contraseña ahora",
- "Reset" : "Reiniciar",
"New password" : "Nueva contraseña",
"New Password" : "Nueva contraseña",
+ "Reset password" : "Restablecer contraseña",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X no está soportado y %s no funcionará bien en esta plataforma. ¡Úsela a su propio riesgo! ",
"For the best results, please consider using a GNU/Linux server instead." : "Para óptimos resultados, considere utilizar un servidor GNU/Linux.",
"Personal" : "Personal",
@@ -168,6 +163,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Su directorio de datos y sus archivos probablemente sean accesibles a través de internet ya que el archivo .htaccess no funciona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para información de cómo configurar apropiadamente su servidor, por favor vea la <a href=\"%s\" target=\"_blank\">documentación</a>.",
"Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>",
+ "Username" : "Nombre de usuario",
"Password" : "Contraseña",
"Storage & database" : "Almacenamiento y base de datos",
"Data folder" : "Directorio de datos",
diff --git a/core/l10n/es_AR.js b/core/l10n/es_AR.js
index f37377f465c..fae6284acf7 100644
--- a/core/l10n/es_AR.js
+++ b/core/l10n/es_AR.js
@@ -31,7 +31,6 @@ OC.L10N.register(
"December" : "diciembre",
"Settings" : "Configuración",
"Saving..." : "Guardando...",
- "Reset password" : "Restablecer contraseña",
"No" : "No",
"Yes" : "Sí",
"Choose" : "Elegir",
@@ -100,12 +99,8 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "La actualización fue exitosa. Estás siendo redirigido a ownCloud.",
"%s password reset" : "%s restablecer contraseña",
"Use the following link to reset your password: {link}" : "Usá este enlace para restablecer tu contraseña: {link}",
- "You will receive a link to reset your password via Email." : "Vas a recibir un enlace por e-mail para restablecer tu contraseña.",
- "Username" : "Nombre de usuario",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Tus archivos están encriptados. Si no habilitaste la clave de recuperación, no vas a tener manera de obtener nuevamente tus datos después que se restablezca tu contraseña. Si no estás seguro sobre qué hacer, ponete en contacto con el administrador antes de seguir. ¿Estás seguro/a que querés continuar?",
- "Yes, I really want to reset my password now" : "Sí, definitivamente quiero restablecer mi contraseña ahora",
- "Reset" : "Resetear",
"New password" : "Nueva contraseña:",
+ "Reset password" : "Restablecer contraseña",
"Personal" : "Personal",
"Users" : "Usuarios",
"Apps" : "Apps",
@@ -128,6 +123,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Tu directorio de datos y tus archivos probablemente son accesibles a través de internet, ya que el archivo .htaccess no está funcionando.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para información sobre cómo configurar apropiadamente tu servidor, por favor mirá la <a href=\"%s\" target=\"_blank\">documentación</a>.",
"Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>",
+ "Username" : "Nombre de usuario",
"Password" : "Contraseña",
"Data folder" : "Directorio de almacenamiento",
"Configure the database" : "Configurar la base de datos",
diff --git a/core/l10n/es_AR.json b/core/l10n/es_AR.json
index 219139245a3..c5649a1630a 100644
--- a/core/l10n/es_AR.json
+++ b/core/l10n/es_AR.json
@@ -29,7 +29,6 @@
"December" : "diciembre",
"Settings" : "Configuración",
"Saving..." : "Guardando...",
- "Reset password" : "Restablecer contraseña",
"No" : "No",
"Yes" : "Sí",
"Choose" : "Elegir",
@@ -98,12 +97,8 @@
"The update was successful. Redirecting you to ownCloud now." : "La actualización fue exitosa. Estás siendo redirigido a ownCloud.",
"%s password reset" : "%s restablecer contraseña",
"Use the following link to reset your password: {link}" : "Usá este enlace para restablecer tu contraseña: {link}",
- "You will receive a link to reset your password via Email." : "Vas a recibir un enlace por e-mail para restablecer tu contraseña.",
- "Username" : "Nombre de usuario",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Tus archivos están encriptados. Si no habilitaste la clave de recuperación, no vas a tener manera de obtener nuevamente tus datos después que se restablezca tu contraseña. Si no estás seguro sobre qué hacer, ponete en contacto con el administrador antes de seguir. ¿Estás seguro/a que querés continuar?",
- "Yes, I really want to reset my password now" : "Sí, definitivamente quiero restablecer mi contraseña ahora",
- "Reset" : "Resetear",
"New password" : "Nueva contraseña:",
+ "Reset password" : "Restablecer contraseña",
"Personal" : "Personal",
"Users" : "Usuarios",
"Apps" : "Apps",
@@ -126,6 +121,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Tu directorio de datos y tus archivos probablemente son accesibles a través de internet, ya que el archivo .htaccess no está funcionando.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para información sobre cómo configurar apropiadamente tu servidor, por favor mirá la <a href=\"%s\" target=\"_blank\">documentación</a>.",
"Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>",
+ "Username" : "Nombre de usuario",
"Password" : "Contraseña",
"Data folder" : "Directorio de almacenamiento",
"Configure the database" : "Configurar la base de datos",
diff --git a/core/l10n/es_CL.js b/core/l10n/es_CL.js
index 3808c2cb7c4..98115643cd7 100644
--- a/core/l10n/es_CL.js
+++ b/core/l10n/es_CL.js
@@ -37,11 +37,11 @@ OC.L10N.register(
"Error while changing permissions" : "Ocurrió un error mientras se cambiaban los permisos",
"The object type is not specified." : "El tipo de objeto no está especificado.",
"_download %n file_::_download %n files_" : ["",""],
- "Username" : "Usuario",
"Personal" : "Personal",
"Users" : "Usuarios",
"Admin" : "Administración",
"Help" : "Ayuda",
+ "Username" : "Usuario",
"Password" : "Clave",
"You are accessing the server from an untrusted domain." : "Usted está accediendo al servidor desde un dominio no confiable.",
"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." : "Por favor contacte con su administrador. Si usted es el administrador de esta instancia, configure la opción \"trusted_domain\" en \"config/config.php\". Un ejemplo de la configuración está disponible en config/config.sample.php"
diff --git a/core/l10n/es_CL.json b/core/l10n/es_CL.json
index 1760e39c6c6..e54689d44b2 100644
--- a/core/l10n/es_CL.json
+++ b/core/l10n/es_CL.json
@@ -35,11 +35,11 @@
"Error while changing permissions" : "Ocurrió un error mientras se cambiaban los permisos",
"The object type is not specified." : "El tipo de objeto no está especificado.",
"_download %n file_::_download %n files_" : ["",""],
- "Username" : "Usuario",
"Personal" : "Personal",
"Users" : "Usuarios",
"Admin" : "Administración",
"Help" : "Ayuda",
+ "Username" : "Usuario",
"Password" : "Clave",
"You are accessing the server from an untrusted domain." : "Usted está accediendo al servidor desde un dominio no confiable.",
"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." : "Por favor contacte con su administrador. Si usted es el administrador de esta instancia, configure la opción \"trusted_domain\" en \"config/config.php\". Un ejemplo de la configuración está disponible en config/config.sample.php"
diff --git a/core/l10n/es_MX.js b/core/l10n/es_MX.js
index d830538bed3..66fc3efb9a6 100644
--- a/core/l10n/es_MX.js
+++ b/core/l10n/es_MX.js
@@ -31,7 +31,6 @@ OC.L10N.register(
"December" : "Diciembre",
"Settings" : "Ajustes",
"Saving..." : "Guardando...",
- "Reset password" : "Restablecer contraseña",
"No" : "No",
"Yes" : "Sí",
"Choose" : "Seleccionar",
@@ -94,12 +93,8 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "La actualización se ha realizado con éxito. Redireccionando a ownCloud ahora.",
"%s password reset" : "%s restablecer contraseña",
"Use the following link to reset your password: {link}" : "Utilice el siguiente enlace para restablecer su contraseña: {link}",
- "You will receive a link to reset your password via Email." : "Recibirá un enlace por correo electrónico para restablecer su contraseña",
- "Username" : "Nombre de usuario",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Sus archivos están cifrados. Si no ha habilitado la clave de recurperación, no habrá forma de recuperar sus datos luego de que la contraseña sea reseteada. Si no está seguro de qué hacer, contacte a su administrador antes de continuar. ¿Realmente desea continuar?",
- "Yes, I really want to reset my password now" : "Sí. Realmente deseo resetear mi contraseña ahora",
- "Reset" : "Reiniciar",
"New password" : "Nueva contraseña",
+ "Reset password" : "Restablecer contraseña",
"Personal" : "Personal",
"Users" : "Usuarios",
"Apps" : "Aplicaciones",
@@ -122,6 +117,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Su directorio de datos y sus archivos probablemente sean accesibles a través de internet ya que el archivo .htaccess no funciona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para información de cómo configurar apropiadamente su servidor, por favor vea la <a href=\"%s\" target=\"_blank\">documentación</a>.",
"Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>",
+ "Username" : "Nombre de usuario",
"Password" : "Contraseña",
"Data folder" : "Directorio de datos",
"Configure the database" : "Configurar la base de datos",
diff --git a/core/l10n/es_MX.json b/core/l10n/es_MX.json
index 99da53b91fe..df3f3aa655a 100644
--- a/core/l10n/es_MX.json
+++ b/core/l10n/es_MX.json
@@ -29,7 +29,6 @@
"December" : "Diciembre",
"Settings" : "Ajustes",
"Saving..." : "Guardando...",
- "Reset password" : "Restablecer contraseña",
"No" : "No",
"Yes" : "Sí",
"Choose" : "Seleccionar",
@@ -92,12 +91,8 @@
"The update was successful. Redirecting you to ownCloud now." : "La actualización se ha realizado con éxito. Redireccionando a ownCloud ahora.",
"%s password reset" : "%s restablecer contraseña",
"Use the following link to reset your password: {link}" : "Utilice el siguiente enlace para restablecer su contraseña: {link}",
- "You will receive a link to reset your password via Email." : "Recibirá un enlace por correo electrónico para restablecer su contraseña",
- "Username" : "Nombre de usuario",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Sus archivos están cifrados. Si no ha habilitado la clave de recurperación, no habrá forma de recuperar sus datos luego de que la contraseña sea reseteada. Si no está seguro de qué hacer, contacte a su administrador antes de continuar. ¿Realmente desea continuar?",
- "Yes, I really want to reset my password now" : "Sí. Realmente deseo resetear mi contraseña ahora",
- "Reset" : "Reiniciar",
"New password" : "Nueva contraseña",
+ "Reset password" : "Restablecer contraseña",
"Personal" : "Personal",
"Users" : "Usuarios",
"Apps" : "Aplicaciones",
@@ -120,6 +115,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Su directorio de datos y sus archivos probablemente sean accesibles a través de internet ya que el archivo .htaccess no funciona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para información de cómo configurar apropiadamente su servidor, por favor vea la <a href=\"%s\" target=\"_blank\">documentación</a>.",
"Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>",
+ "Username" : "Nombre de usuario",
"Password" : "Contraseña",
"Data folder" : "Directorio de datos",
"Configure the database" : "Configurar la base de datos",
diff --git a/core/l10n/et_EE.js b/core/l10n/et_EE.js
index 7325c6478d8..25681f3486b 100644
--- a/core/l10n/et_EE.js
+++ b/core/l10n/et_EE.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Link parooli vahetuseks on saadetud Sinu e-posti aadressil.<br>Kui kiri pole saabunud mõistliku aja jooksul, siis kontrolli oma spam-/rämpskirjade katalooge<br>.Kui kirja pole ka seal, siis küsi abi süsteemihaldurilt.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sinu failid on krüpteeritud. Kui sa pole taastamise võtit veel määranud, siis pole präast parooli taastamist mingit võimalust sinu andmeid tagasi saada. <br />Kui sa pole kindel, mida teha, siis palun väta enne jätkamist ühendust oma administaatoriga. <br />Oled sa kindel, et sa soovid jätkata?",
"I know what I'm doing" : "Ma tean mida teen",
- "Reset password" : "Nulli parool",
"Password can not be changed. Please contact your administrator." : "Parooli ei saa muuta. Palun kontakteeru oma süsteemihalduriga.",
"No" : "Ei",
"Yes" : "Jah",
@@ -124,13 +123,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Ei suutnud lähtestada e-maili, kuna sellel kasutajal pole e-posti määratud. Palun kontakteeru süsteemihalduriga.",
"%s password reset" : "%s parooli lähtestus",
"Use the following link to reset your password: {link}" : "Kasuta järgnevat linki oma parooli taastamiseks: {link}",
- "You will receive a link to reset your password via Email." : "Sinu parooli taastamise link saadetakse sulle e-postile.",
- "Username" : "Kasutajanimi",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Sinu failid on krüpteeritud. Kui sa pole taastamise võtit veel määranud, siis pole präast parooli taastamist mingit võimalust sinu andmeid tagasi saada. Kui sa pole kindel, mida teha, siis palun väta enne jätkamist ühendust oma administaatoriga. Oled sa kindel, et sa soovid jätkata?",
- "Yes, I really want to reset my password now" : "Jah, ma tõesti soovin oma parooli praegu taastada",
- "Reset" : "Algseaded",
"New password" : "Uus parool",
"New Password" : "Uus parool",
+ "Reset password" : "Nulli parool",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X ei ole toetatud ja %s ei pruugi korralikult toimida sellel platvormil. Kasuta seda omal vastutusel!",
"For the best results, please consider using a GNU/Linux server instead." : "Parema tulemuse saavitamiseks palun kaalu serveris GNU/Linux kasutamist.",
"Personal" : "Isiklik",
@@ -170,6 +165,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Su andmete kataloog ja failid on tõenäoliselt internetist vabalt saadaval kuna .htaccess fail ei toimi.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Serveri korrektseks seadistuseks palun tutvu <a href=\"%s\" target=\"_blank\">dokumentatsiooniga</a>.",
"Create an <strong>admin account</strong>" : "Loo <strong>admini konto</strong>",
+ "Username" : "Kasutajanimi",
"Password" : "Parool",
"Storage & database" : "Andmehoidla ja andmebaas",
"Data folder" : "Andmete kaust",
diff --git a/core/l10n/et_EE.json b/core/l10n/et_EE.json
index 56ede97196a..eeb51ed5f85 100644
--- a/core/l10n/et_EE.json
+++ b/core/l10n/et_EE.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Link parooli vahetuseks on saadetud Sinu e-posti aadressil.<br>Kui kiri pole saabunud mõistliku aja jooksul, siis kontrolli oma spam-/rämpskirjade katalooge<br>.Kui kirja pole ka seal, siis küsi abi süsteemihaldurilt.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sinu failid on krüpteeritud. Kui sa pole taastamise võtit veel määranud, siis pole präast parooli taastamist mingit võimalust sinu andmeid tagasi saada. <br />Kui sa pole kindel, mida teha, siis palun väta enne jätkamist ühendust oma administaatoriga. <br />Oled sa kindel, et sa soovid jätkata?",
"I know what I'm doing" : "Ma tean mida teen",
- "Reset password" : "Nulli parool",
"Password can not be changed. Please contact your administrator." : "Parooli ei saa muuta. Palun kontakteeru oma süsteemihalduriga.",
"No" : "Ei",
"Yes" : "Jah",
@@ -122,13 +121,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Ei suutnud lähtestada e-maili, kuna sellel kasutajal pole e-posti määratud. Palun kontakteeru süsteemihalduriga.",
"%s password reset" : "%s parooli lähtestus",
"Use the following link to reset your password: {link}" : "Kasuta järgnevat linki oma parooli taastamiseks: {link}",
- "You will receive a link to reset your password via Email." : "Sinu parooli taastamise link saadetakse sulle e-postile.",
- "Username" : "Kasutajanimi",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Sinu failid on krüpteeritud. Kui sa pole taastamise võtit veel määranud, siis pole präast parooli taastamist mingit võimalust sinu andmeid tagasi saada. Kui sa pole kindel, mida teha, siis palun väta enne jätkamist ühendust oma administaatoriga. Oled sa kindel, et sa soovid jätkata?",
- "Yes, I really want to reset my password now" : "Jah, ma tõesti soovin oma parooli praegu taastada",
- "Reset" : "Algseaded",
"New password" : "Uus parool",
"New Password" : "Uus parool",
+ "Reset password" : "Nulli parool",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X ei ole toetatud ja %s ei pruugi korralikult toimida sellel platvormil. Kasuta seda omal vastutusel!",
"For the best results, please consider using a GNU/Linux server instead." : "Parema tulemuse saavitamiseks palun kaalu serveris GNU/Linux kasutamist.",
"Personal" : "Isiklik",
@@ -168,6 +163,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Su andmete kataloog ja failid on tõenäoliselt internetist vabalt saadaval kuna .htaccess fail ei toimi.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Serveri korrektseks seadistuseks palun tutvu <a href=\"%s\" target=\"_blank\">dokumentatsiooniga</a>.",
"Create an <strong>admin account</strong>" : "Loo <strong>admini konto</strong>",
+ "Username" : "Kasutajanimi",
"Password" : "Parool",
"Storage & database" : "Andmehoidla ja andmebaas",
"Data folder" : "Andmete kaust",
diff --git a/core/l10n/eu.js b/core/l10n/eu.js
index e90e458a193..7186216bf15 100644
--- a/core/l10n/eu.js
+++ b/core/l10n/eu.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Zure pasahitza berrezartzeko lotura zure postara bidalia izan da.<br>Ez baduzu arrazoizko denbora epe batean jasotzen begiratu zure zabor-posta karpetan.<br>Hor ere ez badago kudeatzailearekin harremanetan jarri.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Zure fitxategiak enkriptaturik daude. Ez baduzu berreskuratze gakoa gaitzen pasahitza berrabiaraztean ez da zure fitxategiak berreskuratzeko modurik egongo. <br />Zer egin ziur ez bazaude kudeatzailearekin harremanetan ipini jarraitu aurretik.<br /> Ziur zaude aurrera jarraitu nahi duzula?",
"I know what I'm doing" : "Badakit zer ari naizen egiten",
- "Reset password" : "Berrezarri pasahitza",
"Password can not be changed. Please contact your administrator." : "Ezin da pasahitza aldatu. Mesedez jarri harremetan zure administradorearekin.",
"No" : "Ez",
"Yes" : "Bai",
@@ -120,13 +119,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Ezin izan da berrezartzeko eposta bidali erabiltzaile izen honetarako eposta helbiderik ez dagoelako. Mesedez harremanetan jarri kudeatzailearekin.",
"%s password reset" : "%s pasahitza berrezarri",
"Use the following link to reset your password: {link}" : "Eribili hurrengo lotura zure pasahitza berrezartzeko: {link}",
- "You will receive a link to reset your password via Email." : "Zure pashitza berrezartzeko lotura bat jasoko duzu Epostaren bidez.",
- "Username" : "Erabiltzaile izena",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Zure fitxategiak enkriptaturik daude. Ez baduzu berreskuratze gakoa gaitzen pasahitza berrabiaraztean ez da zure fitxategiak berreskuratzeko modurik egongo. Zer egin ziur ez bazaude kudeatzailearekin harremanetan ipini jarraitu aurretik. Ziur zaude aurrera jarraitu nahi duzula?",
- "Yes, I really want to reset my password now" : "Bai, nire pasahitza orain berrabiarazi nahi dut",
- "Reset" : "Berrezarri",
"New password" : "Pasahitz berria",
"New Password" : "Pasahitz Berria",
+ "Reset password" : "Berrezarri pasahitza",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X-ek ez du sostengurik eta %s gaizki ibili daiteke plataforma honetan. Erabiltzekotan, zure ardurapean.",
"For the best results, please consider using a GNU/Linux server instead." : "Emaitza hobeak izateko, mesedez gogoan hartu GNU/Linux zerbitzari bat erabiltzea.",
"Personal" : "Pertsonala",
@@ -166,6 +161,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Zure data karpeta eta fitxategiak interneten bidez eskuragarri egon daitezke .htaccess fitxategia ez delako funtzionatzen ari.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Zure zerbitrzaria ongi konfiguratzeko, mezedez <a href=\"%s\" target=\"_blank\">dokumentazioa</a> ikusi.",
"Create an <strong>admin account</strong>" : "Sortu <strong>kudeatzaile kontu<strong> bat",
+ "Username" : "Erabiltzaile izena",
"Password" : "Pasahitza",
"Storage & database" : "Biltegia & datubasea",
"Data folder" : "Datuen karpeta",
diff --git a/core/l10n/eu.json b/core/l10n/eu.json
index d851c6e942d..0579dd2dbad 100644
--- a/core/l10n/eu.json
+++ b/core/l10n/eu.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Zure pasahitza berrezartzeko lotura zure postara bidalia izan da.<br>Ez baduzu arrazoizko denbora epe batean jasotzen begiratu zure zabor-posta karpetan.<br>Hor ere ez badago kudeatzailearekin harremanetan jarri.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Zure fitxategiak enkriptaturik daude. Ez baduzu berreskuratze gakoa gaitzen pasahitza berrabiaraztean ez da zure fitxategiak berreskuratzeko modurik egongo. <br />Zer egin ziur ez bazaude kudeatzailearekin harremanetan ipini jarraitu aurretik.<br /> Ziur zaude aurrera jarraitu nahi duzula?",
"I know what I'm doing" : "Badakit zer ari naizen egiten",
- "Reset password" : "Berrezarri pasahitza",
"Password can not be changed. Please contact your administrator." : "Ezin da pasahitza aldatu. Mesedez jarri harremetan zure administradorearekin.",
"No" : "Ez",
"Yes" : "Bai",
@@ -118,13 +117,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Ezin izan da berrezartzeko eposta bidali erabiltzaile izen honetarako eposta helbiderik ez dagoelako. Mesedez harremanetan jarri kudeatzailearekin.",
"%s password reset" : "%s pasahitza berrezarri",
"Use the following link to reset your password: {link}" : "Eribili hurrengo lotura zure pasahitza berrezartzeko: {link}",
- "You will receive a link to reset your password via Email." : "Zure pashitza berrezartzeko lotura bat jasoko duzu Epostaren bidez.",
- "Username" : "Erabiltzaile izena",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Zure fitxategiak enkriptaturik daude. Ez baduzu berreskuratze gakoa gaitzen pasahitza berrabiaraztean ez da zure fitxategiak berreskuratzeko modurik egongo. Zer egin ziur ez bazaude kudeatzailearekin harremanetan ipini jarraitu aurretik. Ziur zaude aurrera jarraitu nahi duzula?",
- "Yes, I really want to reset my password now" : "Bai, nire pasahitza orain berrabiarazi nahi dut",
- "Reset" : "Berrezarri",
"New password" : "Pasahitz berria",
"New Password" : "Pasahitz Berria",
+ "Reset password" : "Berrezarri pasahitza",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X-ek ez du sostengurik eta %s gaizki ibili daiteke plataforma honetan. Erabiltzekotan, zure ardurapean.",
"For the best results, please consider using a GNU/Linux server instead." : "Emaitza hobeak izateko, mesedez gogoan hartu GNU/Linux zerbitzari bat erabiltzea.",
"Personal" : "Pertsonala",
@@ -164,6 +159,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Zure data karpeta eta fitxategiak interneten bidez eskuragarri egon daitezke .htaccess fitxategia ez delako funtzionatzen ari.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Zure zerbitrzaria ongi konfiguratzeko, mezedez <a href=\"%s\" target=\"_blank\">dokumentazioa</a> ikusi.",
"Create an <strong>admin account</strong>" : "Sortu <strong>kudeatzaile kontu<strong> bat",
+ "Username" : "Erabiltzaile izena",
"Password" : "Pasahitza",
"Storage & database" : "Biltegia & datubasea",
"Data folder" : "Datuen karpeta",
diff --git a/core/l10n/fa.js b/core/l10n/fa.js
index e280bae0f58..9b93ede5f05 100644
--- a/core/l10n/fa.js
+++ b/core/l10n/fa.js
@@ -35,7 +35,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "لینک تنظیم مجدد رمز عبور به ایمیل شما ارسال شده است.<br>اگر آن رادر یک زمان مشخصی دریافت نکرده اید، لطفا هرزنامه/ پوشه های ناخواسته را بررسی کنید.<br>در صورت نبودن از مدیر خود بپرسید.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "فایل های شما رمزگذاری شده اند. اگر شما کلید بازیابی را فعال نکرده اید، پس از راه اندازی مجدد رمزعبور هیچ راهی برای بازگشت اطلاعاتتان وجود نخواهد داشت.در صورت عدم اطمینان به انجام کار، لطفا ابتدا با مدیر خود تماس بگیرید. آیا واقعا میخواهید ادامه دهید ؟",
"I know what I'm doing" : "اطلاع از انجام این کار دارم",
- "Reset password" : "تنظیم مجدد رمز عبور",
"Password can not be changed. Please contact your administrator." : "رمز عبور نمی تواند تغییر بکند . لطفا با مدیر سیستم تماس بگیرید .",
"No" : "نه",
"Yes" : "بله",
@@ -102,12 +101,8 @@ OC.L10N.register(
"The update was unsuccessful." : "بروزرسانی موفقیت آمیز نبود.",
"The update was successful. Redirecting you to ownCloud now." : "به روزرسانی موفقیت آمیز بود. در حال انتقال شما به OwnCloud.",
"Use the following link to reset your password: {link}" : "از لینک زیر جهت دوباره سازی پسورد استفاده کنید :\n{link}",
- "You will receive a link to reset your password via Email." : "شما یک نامه الکترونیکی حاوی یک لینک جهت بازسازی گذرواژه دریافت خواهید کرد.",
- "Username" : "نام کاربری",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "فایل های شما رمزگذاری شده اند. اگر شما کلید بازیابی را فعال نکرده اید، پس از راه اندازی مجدد رمزعبور هیچ راهی برای بازگشت اطلاعاتتان وجود نخواهد داشت.در صورت عدم اطمینان به انجام کار، لطفا ابتدا با مدیر خود تماس بگیرید. آیا واقعا میخواهید ادامه دهید ؟",
- "Yes, I really want to reset my password now" : "بله، من اکنون میخواهم رمز عبور خود را مجددا راه اندازی کنم.",
- "Reset" : "تنظیم مجدد",
"New password" : "گذرواژه جدید",
+ "Reset password" : "تنظیم مجدد رمز عبور",
"Personal" : "شخصی",
"Users" : "کاربران",
"Apps" : " برنامه ها",
@@ -126,6 +121,7 @@ OC.L10N.register(
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "نسخه ی PHP شما در برابر حملات NULL Byte آسیب پذیر است.(CVE-2006-7243)",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "فایلها و فهرست های داده های شما قابل از اینترنت قابل دسترسی هستند، چونکه فایل htacces. کار نمی کند.",
"Create an <strong>admin account</strong>" : "لطفا یک <strong> شناسه برای مدیر</strong> بسازید",
+ "Username" : "نام کاربری",
"Password" : "گذرواژه",
"Storage & database" : "انبارش و پایگاه داده",
"Data folder" : "پوشه اطلاعاتی",
diff --git a/core/l10n/fa.json b/core/l10n/fa.json
index e7687a02b4c..7914b15ce20 100644
--- a/core/l10n/fa.json
+++ b/core/l10n/fa.json
@@ -33,7 +33,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "لینک تنظیم مجدد رمز عبور به ایمیل شما ارسال شده است.<br>اگر آن رادر یک زمان مشخصی دریافت نکرده اید، لطفا هرزنامه/ پوشه های ناخواسته را بررسی کنید.<br>در صورت نبودن از مدیر خود بپرسید.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "فایل های شما رمزگذاری شده اند. اگر شما کلید بازیابی را فعال نکرده اید، پس از راه اندازی مجدد رمزعبور هیچ راهی برای بازگشت اطلاعاتتان وجود نخواهد داشت.در صورت عدم اطمینان به انجام کار، لطفا ابتدا با مدیر خود تماس بگیرید. آیا واقعا میخواهید ادامه دهید ؟",
"I know what I'm doing" : "اطلاع از انجام این کار دارم",
- "Reset password" : "تنظیم مجدد رمز عبور",
"Password can not be changed. Please contact your administrator." : "رمز عبور نمی تواند تغییر بکند . لطفا با مدیر سیستم تماس بگیرید .",
"No" : "نه",
"Yes" : "بله",
@@ -100,12 +99,8 @@
"The update was unsuccessful." : "بروزرسانی موفقیت آمیز نبود.",
"The update was successful. Redirecting you to ownCloud now." : "به روزرسانی موفقیت آمیز بود. در حال انتقال شما به OwnCloud.",
"Use the following link to reset your password: {link}" : "از لینک زیر جهت دوباره سازی پسورد استفاده کنید :\n{link}",
- "You will receive a link to reset your password via Email." : "شما یک نامه الکترونیکی حاوی یک لینک جهت بازسازی گذرواژه دریافت خواهید کرد.",
- "Username" : "نام کاربری",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "فایل های شما رمزگذاری شده اند. اگر شما کلید بازیابی را فعال نکرده اید، پس از راه اندازی مجدد رمزعبور هیچ راهی برای بازگشت اطلاعاتتان وجود نخواهد داشت.در صورت عدم اطمینان به انجام کار، لطفا ابتدا با مدیر خود تماس بگیرید. آیا واقعا میخواهید ادامه دهید ؟",
- "Yes, I really want to reset my password now" : "بله، من اکنون میخواهم رمز عبور خود را مجددا راه اندازی کنم.",
- "Reset" : "تنظیم مجدد",
"New password" : "گذرواژه جدید",
+ "Reset password" : "تنظیم مجدد رمز عبور",
"Personal" : "شخصی",
"Users" : "کاربران",
"Apps" : " برنامه ها",
@@ -124,6 +119,7 @@
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "نسخه ی PHP شما در برابر حملات NULL Byte آسیب پذیر است.(CVE-2006-7243)",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "فایلها و فهرست های داده های شما قابل از اینترنت قابل دسترسی هستند، چونکه فایل htacces. کار نمی کند.",
"Create an <strong>admin account</strong>" : "لطفا یک <strong> شناسه برای مدیر</strong> بسازید",
+ "Username" : "نام کاربری",
"Password" : "گذرواژه",
"Storage & database" : "انبارش و پایگاه داده",
"Data folder" : "پوشه اطلاعاتی",
diff --git a/core/l10n/fi_FI.js b/core/l10n/fi_FI.js
index cc9fad66f8b..3d635a8b866 100644
--- a/core/l10n/fi_FI.js
+++ b/core/l10n/fi_FI.js
@@ -38,7 +38,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Linkki salasanan palauttamista varten on lähetetty sähköpostitse. Jos et saa sähköpostiviestiä kohtuullisessa ajassa, tarkista roskapostikansiot.<br>Jos et saa sähköpostiviestiä, ota yhteys paikalliseen ylläpitäjään.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Tiedostosi on salattu. Jos et ole ottanut käyttöön palautusavainta, tietojasi ei ole mahdollista palauttaa salasanan nollaamisen jälkeen.<br />Jos et ole varma mitä tehdä, ota yhteys ylläpitäjään.<br />Haluatko varmasti jatkaa?",
"I know what I'm doing" : "Tiedän mitä teen",
- "Reset password" : "Palauta salasana",
"Password can not be changed. Please contact your administrator." : "Salasanan vaihtaminen ei onnistunut. Ota yhteys ylläpitäjään.",
"No" : "Ei",
"Yes" : "Kyllä",
@@ -123,13 +122,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Palautussähköpostin lähettäminen ei onnistunut, koska tälle käyttäjätunnukselle ei ole määritelty sähköpostiosoitetta. Ota yhteys ylläpitäjään.",
"%s password reset" : "%s salasanan palautus",
"Use the following link to reset your password: {link}" : "Voit palauttaa salasanasi seuraavassa osoitteessa: {link}",
- "You will receive a link to reset your password via Email." : "Saat sähköpostitse linkin palauttaaksesi salasanan.",
- "Username" : "Käyttäjätunnus",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Tiedostosi on salattu. Jos et ole ottanut palautusavainta käyttöön, et voi käyttää tiedostojasi enää salasanan nollauksen jälkeen. Jos et ole varma mitä tehdä, ota yhteys ylläpitoon ennen kuin jatkat. Haluatko varmasti jatkaa?",
- "Yes, I really want to reset my password now" : "Kyllä, haluan palauttaa salasanani nyt",
- "Reset" : "Palauta salasana",
"New password" : "Uusi salasana",
"New Password" : "Uusi salasana",
+ "Reset password" : "Palauta salasana",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X ei ole tuettu, joten %s ei toimi kunnolla tällä alustalla. Käytä omalla vastuulla!",
"For the best results, please consider using a GNU/Linux server instead." : "Käytä parhaan lopputuloksen saamiseksi GNU/Linux-palvelinta.",
"Personal" : "Henkilökohtainen",
@@ -169,6 +164,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datakansiosi ja tiedostosi ovat mitä luultavimmin muiden saavutettavissa internetistä, koska .htaccess-tiedosto ei toimi.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Lisätietoja palvelimen asetuksien määrittämisestä on saatavilla <a href=\"%s\" target=\"_blank\">dokumentaatiosta</a>.",
"Create an <strong>admin account</strong>" : "Luo <strong>ylläpitäjän tunnus</strong>",
+ "Username" : "Käyttäjätunnus",
"Password" : "Salasana",
"Storage & database" : "Tallennus ja tietokanta",
"Data folder" : "Datakansio",
diff --git a/core/l10n/fi_FI.json b/core/l10n/fi_FI.json
index 32ad46587e2..d1554c2a356 100644
--- a/core/l10n/fi_FI.json
+++ b/core/l10n/fi_FI.json
@@ -36,7 +36,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Linkki salasanan palauttamista varten on lähetetty sähköpostitse. Jos et saa sähköpostiviestiä kohtuullisessa ajassa, tarkista roskapostikansiot.<br>Jos et saa sähköpostiviestiä, ota yhteys paikalliseen ylläpitäjään.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Tiedostosi on salattu. Jos et ole ottanut käyttöön palautusavainta, tietojasi ei ole mahdollista palauttaa salasanan nollaamisen jälkeen.<br />Jos et ole varma mitä tehdä, ota yhteys ylläpitäjään.<br />Haluatko varmasti jatkaa?",
"I know what I'm doing" : "Tiedän mitä teen",
- "Reset password" : "Palauta salasana",
"Password can not be changed. Please contact your administrator." : "Salasanan vaihtaminen ei onnistunut. Ota yhteys ylläpitäjään.",
"No" : "Ei",
"Yes" : "Kyllä",
@@ -121,13 +120,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Palautussähköpostin lähettäminen ei onnistunut, koska tälle käyttäjätunnukselle ei ole määritelty sähköpostiosoitetta. Ota yhteys ylläpitäjään.",
"%s password reset" : "%s salasanan palautus",
"Use the following link to reset your password: {link}" : "Voit palauttaa salasanasi seuraavassa osoitteessa: {link}",
- "You will receive a link to reset your password via Email." : "Saat sähköpostitse linkin palauttaaksesi salasanan.",
- "Username" : "Käyttäjätunnus",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Tiedostosi on salattu. Jos et ole ottanut palautusavainta käyttöön, et voi käyttää tiedostojasi enää salasanan nollauksen jälkeen. Jos et ole varma mitä tehdä, ota yhteys ylläpitoon ennen kuin jatkat. Haluatko varmasti jatkaa?",
- "Yes, I really want to reset my password now" : "Kyllä, haluan palauttaa salasanani nyt",
- "Reset" : "Palauta salasana",
"New password" : "Uusi salasana",
"New Password" : "Uusi salasana",
+ "Reset password" : "Palauta salasana",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X ei ole tuettu, joten %s ei toimi kunnolla tällä alustalla. Käytä omalla vastuulla!",
"For the best results, please consider using a GNU/Linux server instead." : "Käytä parhaan lopputuloksen saamiseksi GNU/Linux-palvelinta.",
"Personal" : "Henkilökohtainen",
@@ -167,6 +162,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datakansiosi ja tiedostosi ovat mitä luultavimmin muiden saavutettavissa internetistä, koska .htaccess-tiedosto ei toimi.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Lisätietoja palvelimen asetuksien määrittämisestä on saatavilla <a href=\"%s\" target=\"_blank\">dokumentaatiosta</a>.",
"Create an <strong>admin account</strong>" : "Luo <strong>ylläpitäjän tunnus</strong>",
+ "Username" : "Käyttäjätunnus",
"Password" : "Salasana",
"Storage & database" : "Tallennus ja tietokanta",
"Data folder" : "Datakansio",
diff --git a/core/l10n/fr.js b/core/l10n/fr.js
index 7be2663e412..0155b0c90c4 100644
--- a/core/l10n/fr.js
+++ b/core/l10n/fr.js
@@ -6,7 +6,7 @@ OC.L10N.register(
"Turned off maintenance mode" : "Mode de maintenance désactivé",
"Updated database" : "Base de données mise à jour",
"Checked database schema update" : "Mise à jour du schéma de la base de données vérifiée",
- "Checked database schema update for apps" : "La mise à jour du schéma de la base de données pour les applications a été vérifiée",
+ "Checked database schema update for apps" : "Mise à jour du schéma de la base de données pour les applications vérifiée",
"Updated \"%s\" to %s" : "Mise à jour de « %s » vers %s",
"Disabled incompatible apps: %s" : "Applications incompatibles désactivées : %s",
"No image or file provided" : "Aucun fichier fourni",
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Le lien permettant de réinitialiser votre mot de passe vient d'être envoyé à votre adresse de courriel.<br>Si vous ne le recevez pas dans un délai raisonnable, vérifiez votre dossier de pourriels/spams.<br>Si besoin, contactez votre administrateur.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vos fichiers sont chiffrés. Si vous n'avez pas activé la clef de récupération, il n'y aura aucun moyen de récupérer vos données une fois le mot de passe réinitialisé.<br />Si vous n'êtes pas sûr(e) de ce que vous faites, veuillez contacter votre administrateur avant de continuer. <br />Voulez-vous vraiment continuer ?",
"I know what I'm doing" : "Je sais ce que je fais",
- "Reset password" : "Réinitialiser le mot de passe",
"Password can not be changed. Please contact your administrator." : "Le mot de passe ne peut être modifié. Veuillez contacter votre administrateur.",
"No" : "Non",
"Yes" : "Oui",
@@ -63,7 +62,7 @@ OC.L10N.register(
"So-so password" : "Mot de passe tout juste acceptable",
"Good password" : "Mot de passe de sécurité suffisante",
"Strong password" : "Mot de passe fort",
- "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Votre serveur web n'est pas correctement configuré pour permettre la synchronisation des fichiers, car l'interface WebDav semble ne pas fonctionner.",
+ "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Votre serveur web n'est pas correctement configuré pour permettre la synchronisation des fichiers car l'interface WebDav semble ne pas fonctionner.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Ce serveur ne peut se connecter à internet. Cela signifie que certaines fonctionnalités, telles que le montage de supports de stockage distants, les notifications de mises à jour ou l'installation d'applications tierces ne fonctionneront pas. L'accès aux fichiers à distance, ainsi que les notifications par courriel ne fonctionneront pas non plus. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.",
"Error occurred while checking server setup" : "Une erreur s'est produite lors de la vérification de la configuration du serveur",
"Shared" : "Partagé",
@@ -124,13 +123,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Impossible d'envoyer le courriel de réinitialisation car il n'y a aucune adresse de courriel pour cet utilisateur. Veuillez contacter votre administrateur.",
"%s password reset" : "Réinitialisation de votre mot de passe %s",
"Use the following link to reset your password: {link}" : "Utilisez le lien suivant pour réinitialiser votre mot de passe : {link}",
- "You will receive a link to reset your password via Email." : "Vous allez recevoir un courriel contenant un lien pour réinitialiser votre mot de passe.",
- "Username" : "Nom d'utilisateur",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Vos fichiers sont chiffrés. Si vous n'avez pas activé la clef de récupération, il n'y aura aucun moyen de récupérer vos données une fois le mot de passe réinitialisé. Si vous n'êtes pas sûr(e) de ce que vous faites, veuillez contacter votre administrateur avant de poursuivre. Voulez-vous vraiment continuer ?",
- "Yes, I really want to reset my password now" : "Oui, je veux vraiment réinitialiser mon mot de passe maintenant",
- "Reset" : "Réinitialiser",
"New password" : "Nouveau mot de passe",
"New Password" : "Nouveau mot de passe",
+ "Reset password" : "Réinitialiser le mot de passe",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X n'est pas pris en charge et %s ne fonctionnera pas correctement sur cette plate-forme. Son utilisation est à vos risques et périls !",
"For the best results, please consider using a GNU/Linux server instead." : "Pour obtenir les meilleurs résultats, vous devriez utiliser un serveur GNU/Linux.",
"Personal" : "Personnel",
@@ -170,6 +165,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Votre répertoire de données est certainement accessible depuis l'internet car le fichier .htaccess ne fonctionne pas.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pour les informations de configuration de votre serveur, veuillez lire la <a href=\"%s\" target=\"_blank\">documentation</a>.",
"Create an <strong>admin account</strong>" : "Créer un <strong>compte administrateur</strong>",
+ "Username" : "Nom d'utilisateur",
"Password" : "Mot de passe",
"Storage & database" : "Stockage & base de données",
"Data folder" : "Répertoire des données",
diff --git a/core/l10n/fr.json b/core/l10n/fr.json
index 591eabdcecb..2ddd7d91a39 100644
--- a/core/l10n/fr.json
+++ b/core/l10n/fr.json
@@ -4,7 +4,7 @@
"Turned off maintenance mode" : "Mode de maintenance désactivé",
"Updated database" : "Base de données mise à jour",
"Checked database schema update" : "Mise à jour du schéma de la base de données vérifiée",
- "Checked database schema update for apps" : "La mise à jour du schéma de la base de données pour les applications a été vérifiée",
+ "Checked database schema update for apps" : "Mise à jour du schéma de la base de données pour les applications vérifiée",
"Updated \"%s\" to %s" : "Mise à jour de « %s » vers %s",
"Disabled incompatible apps: %s" : "Applications incompatibles désactivées : %s",
"No image or file provided" : "Aucun fichier fourni",
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Le lien permettant de réinitialiser votre mot de passe vient d'être envoyé à votre adresse de courriel.<br>Si vous ne le recevez pas dans un délai raisonnable, vérifiez votre dossier de pourriels/spams.<br>Si besoin, contactez votre administrateur.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vos fichiers sont chiffrés. Si vous n'avez pas activé la clef de récupération, il n'y aura aucun moyen de récupérer vos données une fois le mot de passe réinitialisé.<br />Si vous n'êtes pas sûr(e) de ce que vous faites, veuillez contacter votre administrateur avant de continuer. <br />Voulez-vous vraiment continuer ?",
"I know what I'm doing" : "Je sais ce que je fais",
- "Reset password" : "Réinitialiser le mot de passe",
"Password can not be changed. Please contact your administrator." : "Le mot de passe ne peut être modifié. Veuillez contacter votre administrateur.",
"No" : "Non",
"Yes" : "Oui",
@@ -61,7 +60,7 @@
"So-so password" : "Mot de passe tout juste acceptable",
"Good password" : "Mot de passe de sécurité suffisante",
"Strong password" : "Mot de passe fort",
- "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Votre serveur web n'est pas correctement configuré pour permettre la synchronisation des fichiers, car l'interface WebDav semble ne pas fonctionner.",
+ "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Votre serveur web n'est pas correctement configuré pour permettre la synchronisation des fichiers car l'interface WebDav semble ne pas fonctionner.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Ce serveur ne peut se connecter à internet. Cela signifie que certaines fonctionnalités, telles que le montage de supports de stockage distants, les notifications de mises à jour ou l'installation d'applications tierces ne fonctionneront pas. L'accès aux fichiers à distance, ainsi que les notifications par courriel ne fonctionneront pas non plus. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.",
"Error occurred while checking server setup" : "Une erreur s'est produite lors de la vérification de la configuration du serveur",
"Shared" : "Partagé",
@@ -122,13 +121,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Impossible d'envoyer le courriel de réinitialisation car il n'y a aucune adresse de courriel pour cet utilisateur. Veuillez contacter votre administrateur.",
"%s password reset" : "Réinitialisation de votre mot de passe %s",
"Use the following link to reset your password: {link}" : "Utilisez le lien suivant pour réinitialiser votre mot de passe : {link}",
- "You will receive a link to reset your password via Email." : "Vous allez recevoir un courriel contenant un lien pour réinitialiser votre mot de passe.",
- "Username" : "Nom d'utilisateur",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Vos fichiers sont chiffrés. Si vous n'avez pas activé la clef de récupération, il n'y aura aucun moyen de récupérer vos données une fois le mot de passe réinitialisé. Si vous n'êtes pas sûr(e) de ce que vous faites, veuillez contacter votre administrateur avant de poursuivre. Voulez-vous vraiment continuer ?",
- "Yes, I really want to reset my password now" : "Oui, je veux vraiment réinitialiser mon mot de passe maintenant",
- "Reset" : "Réinitialiser",
"New password" : "Nouveau mot de passe",
"New Password" : "Nouveau mot de passe",
+ "Reset password" : "Réinitialiser le mot de passe",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X n'est pas pris en charge et %s ne fonctionnera pas correctement sur cette plate-forme. Son utilisation est à vos risques et périls !",
"For the best results, please consider using a GNU/Linux server instead." : "Pour obtenir les meilleurs résultats, vous devriez utiliser un serveur GNU/Linux.",
"Personal" : "Personnel",
@@ -168,6 +163,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Votre répertoire de données est certainement accessible depuis l'internet car le fichier .htaccess ne fonctionne pas.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pour les informations de configuration de votre serveur, veuillez lire la <a href=\"%s\" target=\"_blank\">documentation</a>.",
"Create an <strong>admin account</strong>" : "Créer un <strong>compte administrateur</strong>",
+ "Username" : "Nom d'utilisateur",
"Password" : "Mot de passe",
"Storage & database" : "Stockage & base de données",
"Data folder" : "Répertoire des données",
diff --git a/core/l10n/gl.js b/core/l10n/gl.js
index 724775644dc..b7a43addec9 100644
--- a/core/l10n/gl.js
+++ b/core/l10n/gl.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "A ligazón para restabelecer o seu contrasinal foi enviada ao seu correo. Se non a recibe nun prazo razoábel de tempo, vexa o seu cartafol de correo lixo. <br> Se non está ali pregúntelle ao administrador local.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Os seus ficheiros están cifrados. Se non activou a chave de recuperación, non haberá maneira de recuperar os datos após o restabelecemento do contrasinal. <br />Se non está seguro de que facer, póñase en contacto co administrador antes de continuar. <br /> Confirma que quere?",
"I know what I'm doing" : "Sei o estou a facer",
- "Reset password" : "Restabelecer o contrasinal",
"Password can not be changed. Please contact your administrator." : "Non é posíbel cambiar o contrasinal. Póñase en contacto co administrador.",
"No" : "Non",
"Yes" : "Si",
@@ -124,13 +123,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Non foi posíbel enviar o coreo do restablecemento. Semella que este correo non corresponde con este nome de usuario. Póñase en contacto co administrador.",
"%s password reset" : "Restabelecer o contrasinal %s",
"Use the following link to reset your password: {link}" : "Usa a seguinte ligazón para restabelecer o contrasinal: {link}",
- "You will receive a link to reset your password via Email." : "Recibirá unha ligazón por correo para restabelecer o contrasinal",
- "Username" : "Nome de usuario",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Os ficheiros están cifrados. Se aínda non activou a chave de recuperación non haberá xeito de recuperar os datos unha vez que se teña restabelecido o contrasinal. Se non ten certeza do que ten que facer, póñase en contacto co administrador antes de continuar. Confirma que quere continuar?",
- "Yes, I really want to reset my password now" : "Si, confirmo que quero restabelecer agora o meu contrasinal",
- "Reset" : "Restabelecer",
"New password" : "Novo contrasinal",
"New Password" : "Novo contrasinal",
+ "Reset password" : "Restabelecer o contrasinal",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X non é compatíbel e %s non funcionará correctamente nesta plataforma. Úseo baixo o seu risco!",
"For the best results, please consider using a GNU/Linux server instead." : "Para obter mellores resultados, considere o emprego dun servidor GNU/Linux no seu canto.",
"Personal" : "Persoal",
@@ -170,6 +165,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "O seu directorio de datos e os ficheiros probabelmente sexan accesíbeis desde a Internet xa que o ficheiro .htaccess non está a traballar.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para obter información sobre como como configurar axeitadamente o seu servidor, vexa a <a href=\"%s\" target=\"_blank\">documentación</a>.",
"Create an <strong>admin account</strong>" : "Crear unha <strong>contra de administrador</strong>",
+ "Username" : "Nome de usuario",
"Password" : "Contrasinal",
"Storage & database" : "Almacenamento e base de datos",
"Data folder" : "Cartafol de datos",
diff --git a/core/l10n/gl.json b/core/l10n/gl.json
index 7715f3bebbf..82157285cd3 100644
--- a/core/l10n/gl.json
+++ b/core/l10n/gl.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "A ligazón para restabelecer o seu contrasinal foi enviada ao seu correo. Se non a recibe nun prazo razoábel de tempo, vexa o seu cartafol de correo lixo. <br> Se non está ali pregúntelle ao administrador local.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Os seus ficheiros están cifrados. Se non activou a chave de recuperación, non haberá maneira de recuperar os datos após o restabelecemento do contrasinal. <br />Se non está seguro de que facer, póñase en contacto co administrador antes de continuar. <br /> Confirma que quere?",
"I know what I'm doing" : "Sei o estou a facer",
- "Reset password" : "Restabelecer o contrasinal",
"Password can not be changed. Please contact your administrator." : "Non é posíbel cambiar o contrasinal. Póñase en contacto co administrador.",
"No" : "Non",
"Yes" : "Si",
@@ -122,13 +121,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Non foi posíbel enviar o coreo do restablecemento. Semella que este correo non corresponde con este nome de usuario. Póñase en contacto co administrador.",
"%s password reset" : "Restabelecer o contrasinal %s",
"Use the following link to reset your password: {link}" : "Usa a seguinte ligazón para restabelecer o contrasinal: {link}",
- "You will receive a link to reset your password via Email." : "Recibirá unha ligazón por correo para restabelecer o contrasinal",
- "Username" : "Nome de usuario",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Os ficheiros están cifrados. Se aínda non activou a chave de recuperación non haberá xeito de recuperar os datos unha vez que se teña restabelecido o contrasinal. Se non ten certeza do que ten que facer, póñase en contacto co administrador antes de continuar. Confirma que quere continuar?",
- "Yes, I really want to reset my password now" : "Si, confirmo que quero restabelecer agora o meu contrasinal",
- "Reset" : "Restabelecer",
"New password" : "Novo contrasinal",
"New Password" : "Novo contrasinal",
+ "Reset password" : "Restabelecer o contrasinal",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X non é compatíbel e %s non funcionará correctamente nesta plataforma. Úseo baixo o seu risco!",
"For the best results, please consider using a GNU/Linux server instead." : "Para obter mellores resultados, considere o emprego dun servidor GNU/Linux no seu canto.",
"Personal" : "Persoal",
@@ -168,6 +163,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "O seu directorio de datos e os ficheiros probabelmente sexan accesíbeis desde a Internet xa que o ficheiro .htaccess non está a traballar.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para obter información sobre como como configurar axeitadamente o seu servidor, vexa a <a href=\"%s\" target=\"_blank\">documentación</a>.",
"Create an <strong>admin account</strong>" : "Crear unha <strong>contra de administrador</strong>",
+ "Username" : "Nome de usuario",
"Password" : "Contrasinal",
"Storage & database" : "Almacenamento e base de datos",
"Data folder" : "Cartafol de datos",
diff --git a/core/l10n/he.js b/core/l10n/he.js
index 206e0c0de01..015f5843ac9 100644
--- a/core/l10n/he.js
+++ b/core/l10n/he.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"December" : "דצמבר",
"Settings" : "הגדרות",
"Saving..." : "שמירה…",
- "Reset password" : "איפוס ססמה",
"No" : "לא",
"Yes" : "כן",
"Choose" : "בחירה",
@@ -67,10 +66,8 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : ["",""],
"The update was successful. Redirecting you to ownCloud now." : "תהליך העדכון הסתיים בהצלחה. עכשיו מנתב אותך אל ownCloud.",
"Use the following link to reset your password: {link}" : "יש להשתמש בקישור הבא כדי לאפס את הססמה שלך: {link}",
- "You will receive a link to reset your password via Email." : "יישלח לתיבת הדוא״ל שלך קישור לאיפוס הססמה.",
- "Username" : "שם משתמש",
- "Yes, I really want to reset my password now" : "כן, אני רוצה לאפס את הסיסמה שלי עכשיו.",
"New password" : "ססמה חדשה",
+ "Reset password" : "איפוס ססמה",
"Personal" : "אישי",
"Users" : "משתמשים",
"Apps" : "יישומים",
@@ -82,6 +79,7 @@ OC.L10N.register(
"Please update your PHP installation to use %s securely." : "נא לעדכן את התקנת ה-PHP שלך כדי להשתמש ב-%s בצורה מאובטחת.",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "תיקיית וקבצי המידע שלך כנראה נגישים מהאינטרנט מכיוון שקובץ ה.htaccess לא עובד.",
"Create an <strong>admin account</strong>" : "יצירת <strong>חשבון מנהל</strong>",
+ "Username" : "שם משתמש",
"Password" : "סיסמא",
"Data folder" : "תיקיית נתונים",
"Configure the database" : "הגדרת מסד הנתונים",
diff --git a/core/l10n/he.json b/core/l10n/he.json
index 437098c104f..47d5d82ad99 100644
--- a/core/l10n/he.json
+++ b/core/l10n/he.json
@@ -20,7 +20,6 @@
"December" : "דצמבר",
"Settings" : "הגדרות",
"Saving..." : "שמירה…",
- "Reset password" : "איפוס ססמה",
"No" : "לא",
"Yes" : "כן",
"Choose" : "בחירה",
@@ -65,10 +64,8 @@
"_download %n file_::_download %n files_" : ["",""],
"The update was successful. Redirecting you to ownCloud now." : "תהליך העדכון הסתיים בהצלחה. עכשיו מנתב אותך אל ownCloud.",
"Use the following link to reset your password: {link}" : "יש להשתמש בקישור הבא כדי לאפס את הססמה שלך: {link}",
- "You will receive a link to reset your password via Email." : "יישלח לתיבת הדוא״ל שלך קישור לאיפוס הססמה.",
- "Username" : "שם משתמש",
- "Yes, I really want to reset my password now" : "כן, אני רוצה לאפס את הסיסמה שלי עכשיו.",
"New password" : "ססמה חדשה",
+ "Reset password" : "איפוס ססמה",
"Personal" : "אישי",
"Users" : "משתמשים",
"Apps" : "יישומים",
@@ -80,6 +77,7 @@
"Please update your PHP installation to use %s securely." : "נא לעדכן את התקנת ה-PHP שלך כדי להשתמש ב-%s בצורה מאובטחת.",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "תיקיית וקבצי המידע שלך כנראה נגישים מהאינטרנט מכיוון שקובץ ה.htaccess לא עובד.",
"Create an <strong>admin account</strong>" : "יצירת <strong>חשבון מנהל</strong>",
+ "Username" : "שם משתמש",
"Password" : "סיסמא",
"Data folder" : "תיקיית נתונים",
"Configure the database" : "הגדרת מסד הנתונים",
diff --git a/core/l10n/hi.js b/core/l10n/hi.js
index bd74076a739..787b2031f4e 100644
--- a/core/l10n/hi.js
+++ b/core/l10n/hi.js
@@ -32,8 +32,6 @@ OC.L10N.register(
"Add" : "डाले",
"_download %n file_::_download %n files_" : ["",""],
"Use the following link to reset your password: {link}" : "आगे दिये गये लिंक का उपयोग पासवर्ड बदलने के लिये किजीये: {link}",
- "You will receive a link to reset your password via Email." : "पासवर्ड बदलने कि लिंक आपको ई-मेल द्वारा भेजी जायेगी|",
- "Username" : "प्रयोक्ता का नाम",
"New password" : "नया पासवर्ड",
"Personal" : "यक्तिगत",
"Users" : "उपयोगकर्ता",
@@ -41,6 +39,7 @@ OC.L10N.register(
"Help" : "सहयोग",
"Security Warning" : "सुरक्षा चेतावनी ",
"Create an <strong>admin account</strong>" : "व्यवस्थापक खाता बनाएँ",
+ "Username" : "प्रयोक्ता का नाम",
"Password" : "पासवर्ड",
"Data folder" : "डाटा फोल्डर",
"Configure the database" : "डेटाबेस कॉन्फ़िगर करें ",
diff --git a/core/l10n/hi.json b/core/l10n/hi.json
index 82f27644e93..d2b5fefbf4e 100644
--- a/core/l10n/hi.json
+++ b/core/l10n/hi.json
@@ -30,8 +30,6 @@
"Add" : "डाले",
"_download %n file_::_download %n files_" : ["",""],
"Use the following link to reset your password: {link}" : "आगे दिये गये लिंक का उपयोग पासवर्ड बदलने के लिये किजीये: {link}",
- "You will receive a link to reset your password via Email." : "पासवर्ड बदलने कि लिंक आपको ई-मेल द्वारा भेजी जायेगी|",
- "Username" : "प्रयोक्ता का नाम",
"New password" : "नया पासवर्ड",
"Personal" : "यक्तिगत",
"Users" : "उपयोगकर्ता",
@@ -39,6 +37,7 @@
"Help" : "सहयोग",
"Security Warning" : "सुरक्षा चेतावनी ",
"Create an <strong>admin account</strong>" : "व्यवस्थापक खाता बनाएँ",
+ "Username" : "प्रयोक्ता का नाम",
"Password" : "पासवर्ड",
"Data folder" : "डाटा फोल्डर",
"Configure the database" : "डेटाबेस कॉन्फ़िगर करें ",
diff --git a/core/l10n/hi_IN.php b/core/l10n/hi_IN.php
deleted file mode 100644
index aff098dff1f..00000000000
--- a/core/l10n/hi_IN.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"_{count} file conflict_::_{count} file conflicts_" => array("","")
-);
-$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/core/l10n/hr.js b/core/l10n/hr.js
index 38de4e13cd3..449c9b248a8 100644
--- a/core/l10n/hr.js
+++ b/core/l10n/hr.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Veza za resetiranje vaše lozinke poslana je na vašu adresu e-pošte. Ako je ne primite unekom razumnom vremenskom roku, provjerite svoje spam/junk mape. <br> Ako nije tamo, kontaktirajtesvoga lokalnog administratora.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vaše datoteke su šifrirane. Ako niste aktivirali ključ oporavka,svoje podatke nećete moći dohvatitinakon što vaša lozinka bude resetirana.<br />Ako ne znate što učiniti, prije nego linastavite, molimo kontaktirajte svog administratora. <br />Želite li doista nastaviti?",
"I know what I'm doing" : "Znam što radim",
- "Reset password" : "Resetirajte lozinku",
"Password can not be changed. Please contact your administrator." : "Lozinku nije moguće promijeniti. Molimo kontaktirajte svog administratora.",
"No" : "Ne",
"Yes" : "Da",
@@ -118,13 +117,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Resetiranu e-poštu nije moguće poslati jer za ovo korisničko ime ne postoji adresa.Molimo, kontaktirajte svog administratora.",
"%s password reset" : "%s lozinka resetirana",
"Use the following link to reset your password: {link}" : "Za resetiranje svoje lozinke koristite sljedeću vezu: {link}",
- "You will receive a link to reset your password via Email." : "Vezu za resetiranje svoje lozinke primit ćete e-poštom.",
- "Username" : "Korisničko ime",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Vaše datoteke su šifrirane. Ako niste aktivirali ključ oporavka, svoje podatke nećetemoći dohvatiti nakon što vaša lozinka bude resetirana. Ako niste sigurni što učiniti, molimokontaktirajte svog administratora prije nego li nastavite. Želite li doista nastaviti?",
- "Yes, I really want to reset my password now" : "Da, ja doista želim sada resetirati svojju lozinku.",
- "Reset" : "Resetirajte",
"New password" : "Nova lozinka",
"New Password" : "Nova lozinka",
+ "Reset password" : "Resetirajte lozinku",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nije podržan i %s na ovoj platformi neće raditi kako treba.",
"For the best results, please consider using a GNU/Linux server instead." : "Za najbolje rezultate, molimo razmotrite mogućnost korištenje poslužitelja GNU/Linux.",
"Personal" : "Osobno",
@@ -149,6 +144,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Vašem podatkovnom direktoriju i datotekama vjerojatno se može pristupiti s interneta jer .htaccess datoteka ne radi.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Za informaciju kako ispravno konfigurirati vaš poslužitelj, molimo vidite <a href=\"%s\" target=\"_blank\">dokumentaciju</a>.",
"Create an <strong>admin account</strong>" : "Kreirajte <strong>admin račun</strong>",
+ "Username" : "Korisničko ime",
"Password" : "Lozinka",
"Storage & database" : "Pohrana & baza podataka",
"Data folder" : "Mapa za podatke",
diff --git a/core/l10n/hr.json b/core/l10n/hr.json
index fbcc57054e3..21141abc30e 100644
--- a/core/l10n/hr.json
+++ b/core/l10n/hr.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Veza za resetiranje vaše lozinke poslana je na vašu adresu e-pošte. Ako je ne primite unekom razumnom vremenskom roku, provjerite svoje spam/junk mape. <br> Ako nije tamo, kontaktirajtesvoga lokalnog administratora.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vaše datoteke su šifrirane. Ako niste aktivirali ključ oporavka,svoje podatke nećete moći dohvatitinakon što vaša lozinka bude resetirana.<br />Ako ne znate što učiniti, prije nego linastavite, molimo kontaktirajte svog administratora. <br />Želite li doista nastaviti?",
"I know what I'm doing" : "Znam što radim",
- "Reset password" : "Resetirajte lozinku",
"Password can not be changed. Please contact your administrator." : "Lozinku nije moguće promijeniti. Molimo kontaktirajte svog administratora.",
"No" : "Ne",
"Yes" : "Da",
@@ -116,13 +115,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Resetiranu e-poštu nije moguće poslati jer za ovo korisničko ime ne postoji adresa.Molimo, kontaktirajte svog administratora.",
"%s password reset" : "%s lozinka resetirana",
"Use the following link to reset your password: {link}" : "Za resetiranje svoje lozinke koristite sljedeću vezu: {link}",
- "You will receive a link to reset your password via Email." : "Vezu za resetiranje svoje lozinke primit ćete e-poštom.",
- "Username" : "Korisničko ime",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Vaše datoteke su šifrirane. Ako niste aktivirali ključ oporavka, svoje podatke nećetemoći dohvatiti nakon što vaša lozinka bude resetirana. Ako niste sigurni što učiniti, molimokontaktirajte svog administratora prije nego li nastavite. Želite li doista nastaviti?",
- "Yes, I really want to reset my password now" : "Da, ja doista želim sada resetirati svojju lozinku.",
- "Reset" : "Resetirajte",
"New password" : "Nova lozinka",
"New Password" : "Nova lozinka",
+ "Reset password" : "Resetirajte lozinku",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nije podržan i %s na ovoj platformi neće raditi kako treba.",
"For the best results, please consider using a GNU/Linux server instead." : "Za najbolje rezultate, molimo razmotrite mogućnost korištenje poslužitelja GNU/Linux.",
"Personal" : "Osobno",
@@ -147,6 +142,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Vašem podatkovnom direktoriju i datotekama vjerojatno se može pristupiti s interneta jer .htaccess datoteka ne radi.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Za informaciju kako ispravno konfigurirati vaš poslužitelj, molimo vidite <a href=\"%s\" target=\"_blank\">dokumentaciju</a>.",
"Create an <strong>admin account</strong>" : "Kreirajte <strong>admin račun</strong>",
+ "Username" : "Korisničko ime",
"Password" : "Lozinka",
"Storage & database" : "Pohrana & baza podataka",
"Data folder" : "Mapa za podatke",
diff --git a/core/l10n/hu_HU.js b/core/l10n/hu_HU.js
index 867d47cda68..c19ecc457df 100644
--- a/core/l10n/hu_HU.js
+++ b/core/l10n/hu_HU.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "A jelszó felülírásához a linket e-mailben elküldtük. Ha a levél elfogadható időn belül nem érkezik meg, ellenőrizze a spam/levélszemét mappát.<br>Ha nincs ott, kérdezze meg a helyi rendszergazdát.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Az Ön állományai titkosítva vannak. Ha nem engedélyezte korábban az adatok visszanyeréséhez szükséges kulcs használatát, akkor a jelszó megváltoztatását követően nem fog hozzáférni az adataihoz. Ha nem biztos abban, hogy mit kellene tennie, akkor kérdezze meg a rendszergazdát, mielőtt továbbmenne. Biztos, hogy folytatni kívánja?",
"I know what I'm doing" : "Tudom mit csinálok.",
- "Reset password" : "Jelszó-visszaállítás",
"Password can not be changed. Please contact your administrator." : "A jelszót nem lehet visszaállítani. Kérjük, lépjen kapcsolatba a redszergazdával.",
"No" : "Nem",
"Yes" : "Igen",
@@ -120,13 +119,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Visszaállítási e-mail nem küldhető, mert nem tartozik e-mail cím ehhez a felhasználóhoz. Kérjük, lépjen kapcsolatba a rendszergazdával.",
"%s password reset" : "%s jelszó visszaállítás",
"Use the following link to reset your password: {link}" : "Használja ezt a linket a jelszó ismételt beállításához: {link}",
- "You will receive a link to reset your password via Email." : "Egy e-mailben fog értesítést kapni a jelszóbeállítás módjáról.",
- "Username" : "Felhasználónév",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Az Ön állományai titkosítva vannak. Ha nem engedélyezte korábban az adatok visszanyeréséhez szükséges kulcs használatát, akkor a jelszó megváltoztatását követően nem fog hozzáférni az adataihoz. Ha nem biztos abban, hogy mit kellene tennie, akkor kérdezze meg a rendszergazdát, mielőtt továbbmenne. Biztos, hogy folytatni kívánja?",
- "Yes, I really want to reset my password now" : "Igen, tényleg meg akarom változtatni a jelszavam",
- "Reset" : "Visszaállítás",
"New password" : "Az új jelszó",
"New Password" : "Új jelszó",
+ "Reset password" : "Jelszó-visszaállítás",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "A Mac OS X nem támogatott és %s nem lesz teljesen működőképes. Csak saját felelősségre használja!",
"For the best results, please consider using a GNU/Linux server instead." : "A legjobb eredmény érdekében érdemes GNU/Linux-alapú kiszolgálót használni.",
"Personal" : "Személyes",
@@ -162,6 +157,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Az adatkönyvtár és a benne levő állományok valószínűleg közvetlenül is elérhetők az internetről, mert a .htaccess állomány nem érvényesül.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "A kiszolgáló megfelelő beállításához kérjük olvassa el a <a href=\"%sl\" target=\"_blank\">dokumentációt</a>.",
"Create an <strong>admin account</strong>" : "<strong>Rendszergazdai belépés</strong> létrehozása",
+ "Username" : "Felhasználónév",
"Password" : "Jelszó",
"Storage & database" : "Tárolás és adatbázis",
"Data folder" : "Adatkönyvtár",
diff --git a/core/l10n/hu_HU.json b/core/l10n/hu_HU.json
index 3ab7d5d2e97..fd4a2e66680 100644
--- a/core/l10n/hu_HU.json
+++ b/core/l10n/hu_HU.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "A jelszó felülírásához a linket e-mailben elküldtük. Ha a levél elfogadható időn belül nem érkezik meg, ellenőrizze a spam/levélszemét mappát.<br>Ha nincs ott, kérdezze meg a helyi rendszergazdát.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Az Ön állományai titkosítva vannak. Ha nem engedélyezte korábban az adatok visszanyeréséhez szükséges kulcs használatát, akkor a jelszó megváltoztatását követően nem fog hozzáférni az adataihoz. Ha nem biztos abban, hogy mit kellene tennie, akkor kérdezze meg a rendszergazdát, mielőtt továbbmenne. Biztos, hogy folytatni kívánja?",
"I know what I'm doing" : "Tudom mit csinálok.",
- "Reset password" : "Jelszó-visszaállítás",
"Password can not be changed. Please contact your administrator." : "A jelszót nem lehet visszaállítani. Kérjük, lépjen kapcsolatba a redszergazdával.",
"No" : "Nem",
"Yes" : "Igen",
@@ -118,13 +117,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Visszaállítási e-mail nem küldhető, mert nem tartozik e-mail cím ehhez a felhasználóhoz. Kérjük, lépjen kapcsolatba a rendszergazdával.",
"%s password reset" : "%s jelszó visszaállítás",
"Use the following link to reset your password: {link}" : "Használja ezt a linket a jelszó ismételt beállításához: {link}",
- "You will receive a link to reset your password via Email." : "Egy e-mailben fog értesítést kapni a jelszóbeállítás módjáról.",
- "Username" : "Felhasználónév",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Az Ön állományai titkosítva vannak. Ha nem engedélyezte korábban az adatok visszanyeréséhez szükséges kulcs használatát, akkor a jelszó megváltoztatását követően nem fog hozzáférni az adataihoz. Ha nem biztos abban, hogy mit kellene tennie, akkor kérdezze meg a rendszergazdát, mielőtt továbbmenne. Biztos, hogy folytatni kívánja?",
- "Yes, I really want to reset my password now" : "Igen, tényleg meg akarom változtatni a jelszavam",
- "Reset" : "Visszaállítás",
"New password" : "Az új jelszó",
"New Password" : "Új jelszó",
+ "Reset password" : "Jelszó-visszaállítás",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "A Mac OS X nem támogatott és %s nem lesz teljesen működőképes. Csak saját felelősségre használja!",
"For the best results, please consider using a GNU/Linux server instead." : "A legjobb eredmény érdekében érdemes GNU/Linux-alapú kiszolgálót használni.",
"Personal" : "Személyes",
@@ -160,6 +155,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Az adatkönyvtár és a benne levő állományok valószínűleg közvetlenül is elérhetők az internetről, mert a .htaccess állomány nem érvényesül.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "A kiszolgáló megfelelő beállításához kérjük olvassa el a <a href=\"%sl\" target=\"_blank\">dokumentációt</a>.",
"Create an <strong>admin account</strong>" : "<strong>Rendszergazdai belépés</strong> létrehozása",
+ "Username" : "Felhasználónév",
"Password" : "Jelszó",
"Storage & database" : "Tárolás és adatbázis",
"Data folder" : "Adatkönyvtár",
diff --git a/core/l10n/ia.js b/core/l10n/ia.js
index 8bac55ebfab..791e6910b37 100644
--- a/core/l10n/ia.js
+++ b/core/l10n/ia.js
@@ -36,7 +36,6 @@ OC.L10N.register(
"Saving..." : "Salveguardante...",
"Couldn't send reset email. Please contact your administrator." : "On non pote inviar message de configurar ex novo. Pro favor continge tu administrator.",
"I know what I'm doing" : "Io sape lo que io es facente",
- "Reset password" : "Reinitialisar contrasigno",
"Password can not be changed. Please contact your administrator." : "Contrasigno non pote esser modificate. Pro favor continge tu administrator.",
"No" : "No",
"Yes" : "Si",
@@ -103,12 +102,9 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "Le actualisation terminava con successo. On redirige nunc a tu ownCloud.",
"%s password reset" : "%s contrasigno re-fixate",
"Use the following link to reset your password: {link}" : "Usa le ligamine sequente pro re-fixar tu contrasigno: {link}",
- "You will receive a link to reset your password via Email." : "Tu recipera un ligamine pro re-configurar tu contrasigno via e-posta.",
- "Username" : "Nomine de usator",
- "Yes, I really want to reset my password now" : "Si, io vermente vole re-configurar mi contrasigno nunc",
- "Reset" : "Re-fixar",
"New password" : "Nove contrasigno",
"New Password" : "Nove contrasigno",
+ "Reset password" : "Reinitialisar contrasigno",
"For the best results, please consider using a GNU/Linux server instead." : "Pro le exitos melior, pro favor tu considera usar in loco un servitor GNU/Linux.",
"Personal" : "Personal",
"Users" : "Usatores",
@@ -133,6 +129,7 @@ OC.L10N.register(
"Security Warning" : "Aviso de securitate",
"Please update your PHP installation to use %s securely." : "Pro favor actualisa tu installation de PHP pro usar %s con securitate.",
"Create an <strong>admin account</strong>" : "Crear un <strong>conto de administration</strong>",
+ "Username" : "Nomine de usator",
"Password" : "Contrasigno",
"Storage & database" : "Immagazinage & base de datos",
"Data folder" : "Dossier de datos",
diff --git a/core/l10n/ia.json b/core/l10n/ia.json
index 60ece2f9425..80a9b47c0ea 100644
--- a/core/l10n/ia.json
+++ b/core/l10n/ia.json
@@ -34,7 +34,6 @@
"Saving..." : "Salveguardante...",
"Couldn't send reset email. Please contact your administrator." : "On non pote inviar message de configurar ex novo. Pro favor continge tu administrator.",
"I know what I'm doing" : "Io sape lo que io es facente",
- "Reset password" : "Reinitialisar contrasigno",
"Password can not be changed. Please contact your administrator." : "Contrasigno non pote esser modificate. Pro favor continge tu administrator.",
"No" : "No",
"Yes" : "Si",
@@ -101,12 +100,9 @@
"The update was successful. Redirecting you to ownCloud now." : "Le actualisation terminava con successo. On redirige nunc a tu ownCloud.",
"%s password reset" : "%s contrasigno re-fixate",
"Use the following link to reset your password: {link}" : "Usa le ligamine sequente pro re-fixar tu contrasigno: {link}",
- "You will receive a link to reset your password via Email." : "Tu recipera un ligamine pro re-configurar tu contrasigno via e-posta.",
- "Username" : "Nomine de usator",
- "Yes, I really want to reset my password now" : "Si, io vermente vole re-configurar mi contrasigno nunc",
- "Reset" : "Re-fixar",
"New password" : "Nove contrasigno",
"New Password" : "Nove contrasigno",
+ "Reset password" : "Reinitialisar contrasigno",
"For the best results, please consider using a GNU/Linux server instead." : "Pro le exitos melior, pro favor tu considera usar in loco un servitor GNU/Linux.",
"Personal" : "Personal",
"Users" : "Usatores",
@@ -131,6 +127,7 @@
"Security Warning" : "Aviso de securitate",
"Please update your PHP installation to use %s securely." : "Pro favor actualisa tu installation de PHP pro usar %s con securitate.",
"Create an <strong>admin account</strong>" : "Crear un <strong>conto de administration</strong>",
+ "Username" : "Nomine de usator",
"Password" : "Contrasigno",
"Storage & database" : "Immagazinage & base de datos",
"Data folder" : "Dossier de datos",
diff --git a/core/l10n/id.js b/core/l10n/id.js
index 7182162297e..47566bb627b 100644
--- a/core/l10n/id.js
+++ b/core/l10n/id.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Sebuah tautan untuk setel ulang sandi Anda telah dikirim ke email Anda. Jika Anda tidak menerima dalam jangka waktu yang wajar, periksa folder spam/sampah Anda.<br>Jika tidak ada, tanyakan pada administrator Anda.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Berkas-berkas Anda terenkripsi. Jika Anda tidak mengaktifkan kunci pemulihan, tidak ada cara lain untuk mendapatkan data Anda kembali setelah sandi di setel ulang.<br />Jika Anda tidak yakin dengan apa yang akan Anda dilakukan, mohon hubungi administrator Anda sebelum melanjutkan. <br />Apakah Anda yakin ingin melanjutkan?",
"I know what I'm doing" : "Saya tahu apa yang saya lakukan",
- "Reset password" : "Setel ulang sandi",
"Password can not be changed. Please contact your administrator." : "Sandi tidak dapat diubah. Silakan hubungi administrator Anda",
"No" : "Tidak",
"Yes" : "Ya",
@@ -120,13 +119,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Tidak dapat menyetel ulang email karena tidak ada alamat email untuk nama pengguna ini. Silakan hubungi Administrator Anda.",
"%s password reset" : "%s sandi disetel ulang",
"Use the following link to reset your password: {link}" : "Gunakan tautan berikut untuk menyetel ulang sandi Anda: {link}",
- "You will receive a link to reset your password via Email." : "Anda akan menerima tautan penyetelan ulang sandi lewat Email.",
- "Username" : "Nama pengguna",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Berkas anda terenkripsi. Jika sebelumnya anda belum mengaktifkan kunci pemulihan, tidak akan ada cara lagi untuk mendapatkan data anda kembali setelah sandi anda diatur ulang. Jika anda tidak yakin dengan apa yang harus dilakukan, silakan hubungi administrator anda sebelum melanjutkan. Apakah anda benar-benar ingin melanjutkan?",
- "Yes, I really want to reset my password now" : "Ya, Saya sungguh ingin mengatur ulang sandi saya sekarang",
- "Reset" : "Atur Ulang",
"New password" : "Sandi baru",
"New Password" : "Sandi Baru",
+ "Reset password" : "Setel ulang sandi",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X tidak didukung dan %s tidak akan bekerja dengan baik pada platform ini. Gunakan dengan resiko Anda sendiri!",
"For the best results, please consider using a GNU/Linux server instead." : "Untuk hasil terbaik, pertimbangkan untuk menggunakan server GNU/Linux sebagai gantinya. ",
"Personal" : "Pribadi",
@@ -166,6 +161,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Kemungkinan direktori data dan berkas anda dapat diakses dari internet karena berkas .htaccess tidak berfungsi.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Untuk informasi cara mengkonfigurasi server anda dengan benar, silakan lihat <a href=\"%s\" target=\"_blank\">dokumentasi</a>.",
"Create an <strong>admin account</strong>" : "Buat sebuah <strong>akun admin</strong>",
+ "Username" : "Nama pengguna",
"Password" : "Sandi",
"Storage & database" : "Penyimpanan & Basis data",
"Data folder" : "Folder data",
diff --git a/core/l10n/id.json b/core/l10n/id.json
index 79e90900d0f..d3327460f31 100644
--- a/core/l10n/id.json
+++ b/core/l10n/id.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Sebuah tautan untuk setel ulang sandi Anda telah dikirim ke email Anda. Jika Anda tidak menerima dalam jangka waktu yang wajar, periksa folder spam/sampah Anda.<br>Jika tidak ada, tanyakan pada administrator Anda.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Berkas-berkas Anda terenkripsi. Jika Anda tidak mengaktifkan kunci pemulihan, tidak ada cara lain untuk mendapatkan data Anda kembali setelah sandi di setel ulang.<br />Jika Anda tidak yakin dengan apa yang akan Anda dilakukan, mohon hubungi administrator Anda sebelum melanjutkan. <br />Apakah Anda yakin ingin melanjutkan?",
"I know what I'm doing" : "Saya tahu apa yang saya lakukan",
- "Reset password" : "Setel ulang sandi",
"Password can not be changed. Please contact your administrator." : "Sandi tidak dapat diubah. Silakan hubungi administrator Anda",
"No" : "Tidak",
"Yes" : "Ya",
@@ -118,13 +117,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Tidak dapat menyetel ulang email karena tidak ada alamat email untuk nama pengguna ini. Silakan hubungi Administrator Anda.",
"%s password reset" : "%s sandi disetel ulang",
"Use the following link to reset your password: {link}" : "Gunakan tautan berikut untuk menyetel ulang sandi Anda: {link}",
- "You will receive a link to reset your password via Email." : "Anda akan menerima tautan penyetelan ulang sandi lewat Email.",
- "Username" : "Nama pengguna",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Berkas anda terenkripsi. Jika sebelumnya anda belum mengaktifkan kunci pemulihan, tidak akan ada cara lagi untuk mendapatkan data anda kembali setelah sandi anda diatur ulang. Jika anda tidak yakin dengan apa yang harus dilakukan, silakan hubungi administrator anda sebelum melanjutkan. Apakah anda benar-benar ingin melanjutkan?",
- "Yes, I really want to reset my password now" : "Ya, Saya sungguh ingin mengatur ulang sandi saya sekarang",
- "Reset" : "Atur Ulang",
"New password" : "Sandi baru",
"New Password" : "Sandi Baru",
+ "Reset password" : "Setel ulang sandi",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X tidak didukung dan %s tidak akan bekerja dengan baik pada platform ini. Gunakan dengan resiko Anda sendiri!",
"For the best results, please consider using a GNU/Linux server instead." : "Untuk hasil terbaik, pertimbangkan untuk menggunakan server GNU/Linux sebagai gantinya. ",
"Personal" : "Pribadi",
@@ -164,6 +159,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Kemungkinan direktori data dan berkas anda dapat diakses dari internet karena berkas .htaccess tidak berfungsi.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Untuk informasi cara mengkonfigurasi server anda dengan benar, silakan lihat <a href=\"%s\" target=\"_blank\">dokumentasi</a>.",
"Create an <strong>admin account</strong>" : "Buat sebuah <strong>akun admin</strong>",
+ "Username" : "Nama pengguna",
"Password" : "Sandi",
"Storage & database" : "Penyimpanan & Basis data",
"Data folder" : "Folder data",
diff --git a/core/l10n/is.js b/core/l10n/is.js
index 8f1f7d09eec..0ac56e51181 100644
--- a/core/l10n/is.js
+++ b/core/l10n/is.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"December" : "Desember",
"Settings" : "Stillingar",
"Saving..." : "Er að vista ...",
- "Reset password" : "Endursetja lykilorð",
"No" : "Nei",
"Yes" : "Já",
"Choose" : "Veldu",
@@ -62,9 +61,8 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : ["",""],
"The update was successful. Redirecting you to ownCloud now." : "Uppfærslan heppnaðist. Beini þér til ownCloud nú.",
"Use the following link to reset your password: {link}" : "Notað eftirfarandi veftengil til að endursetja lykilorðið þitt: {link}",
- "You will receive a link to reset your password via Email." : "Þú munt fá veftengil í tölvupósti til að endursetja lykilorðið.",
- "Username" : "Notendanafn",
"New password" : "Nýtt lykilorð",
+ "Reset password" : "Endursetja lykilorð",
"Personal" : "Um mig",
"Users" : "Notendur",
"Apps" : "Forrit",
@@ -73,6 +71,7 @@ OC.L10N.register(
"Access forbidden" : "Aðgangur bannaður",
"Security Warning" : "Öryggis aðvörun",
"Create an <strong>admin account</strong>" : "Útbúa <strong>vefstjóra aðgang</strong>",
+ "Username" : "Notendanafn",
"Password" : "Lykilorð",
"Data folder" : "Gagnamappa",
"Configure the database" : "Stilla gagnagrunn",
diff --git a/core/l10n/is.json b/core/l10n/is.json
index ff69c133fa6..d56e4bbd3d7 100644
--- a/core/l10n/is.json
+++ b/core/l10n/is.json
@@ -20,7 +20,6 @@
"December" : "Desember",
"Settings" : "Stillingar",
"Saving..." : "Er að vista ...",
- "Reset password" : "Endursetja lykilorð",
"No" : "Nei",
"Yes" : "Já",
"Choose" : "Veldu",
@@ -60,9 +59,8 @@
"_download %n file_::_download %n files_" : ["",""],
"The update was successful. Redirecting you to ownCloud now." : "Uppfærslan heppnaðist. Beini þér til ownCloud nú.",
"Use the following link to reset your password: {link}" : "Notað eftirfarandi veftengil til að endursetja lykilorðið þitt: {link}",
- "You will receive a link to reset your password via Email." : "Þú munt fá veftengil í tölvupósti til að endursetja lykilorðið.",
- "Username" : "Notendanafn",
"New password" : "Nýtt lykilorð",
+ "Reset password" : "Endursetja lykilorð",
"Personal" : "Um mig",
"Users" : "Notendur",
"Apps" : "Forrit",
@@ -71,6 +69,7 @@
"Access forbidden" : "Aðgangur bannaður",
"Security Warning" : "Öryggis aðvörun",
"Create an <strong>admin account</strong>" : "Útbúa <strong>vefstjóra aðgang</strong>",
+ "Username" : "Notendanafn",
"Password" : "Lykilorð",
"Data folder" : "Gagnamappa",
"Configure the database" : "Stilla gagnagrunn",
diff --git a/core/l10n/it.js b/core/l10n/it.js
index dcc221bf885..ed23ad7df28 100644
--- a/core/l10n/it.js
+++ b/core/l10n/it.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Il collegamento per reimpostare la password è stato inviato al tuo indirizzo di posta. Se non lo ricevi in tempi ragionevoli, controlla le cartelle della posta indesiderata.<br>Se non dovesse essere nemmeno lì, contatta il tuo amministratore locale.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "I tuoi file sono cifrati. Se non hai precedentemente abilitato la chiave di recupero, non sarà più possibile ritrovare i tuoi dati una volta che la password sarà reimpostata.<br />Se non sei sicuro, per favore contatta l'amministratore prima di proseguire.<br />Vuoi davvero continuare?",
"I know what I'm doing" : "So cosa sto facendo",
- "Reset password" : "Ripristina la password",
"Password can not be changed. Please contact your administrator." : "La password non può essere cambiata. Contatta il tuo amministratore.",
"No" : "No",
"Yes" : "Sì",
@@ -124,13 +123,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Impossibile inviare l'email di reimpostazione poiché non è presente un indirizzo email per questo nome utente. Contatta il tuo amministratore.",
"%s password reset" : "Ripristino password di %s",
"Use the following link to reset your password: {link}" : "Usa il collegamento seguente per ripristinare la password: {link}",
- "You will receive a link to reset your password via Email." : "Riceverai un collegamento per ripristinare la tua password via email",
- "Username" : "Nome utente",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "I file sono cifrati. Se non hai precedentemente abilitato la chiave di recupero, non sarà più possibile ritrovare i tuoi dati una volta che la password sarà ripristinata. Se non sei sicuro, per favore contatta l'amministratore prima di proseguire. Vuoi davvero continuare?",
- "Yes, I really want to reset my password now" : "Sì, voglio davvero ripristinare la mia password adesso",
- "Reset" : "Ripristina",
"New password" : "Nuova password",
"New Password" : "Nuova password",
+ "Reset password" : "Ripristina la password",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X non è supportato e %s non funzionerà correttamente su questa piattaforma. Usalo a tuo rischio!",
"For the best results, please consider using a GNU/Linux server instead." : "Per avere il risultato migliore, prendi in considerazione l'utilizzo di un server GNU/Linux.",
"Personal" : "Personale",
@@ -170,6 +165,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "La cartella dei dati e i file sono probabilmente accessibili da Internet poiché il file .htaccess non funziona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Per informazioni su come configurare correttamente il tuo server, vedi la <a href=\"%s\" target=\"_blank\">documentazione</a>.",
"Create an <strong>admin account</strong>" : "Crea un <strong>account amministratore</strong>",
+ "Username" : "Nome utente",
"Password" : "Password",
"Storage & database" : "Archiviazione e database",
"Data folder" : "Cartella dati",
diff --git a/core/l10n/it.json b/core/l10n/it.json
index 599c613828b..59073aafaf2 100644
--- a/core/l10n/it.json
+++ b/core/l10n/it.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Il collegamento per reimpostare la password è stato inviato al tuo indirizzo di posta. Se non lo ricevi in tempi ragionevoli, controlla le cartelle della posta indesiderata.<br>Se non dovesse essere nemmeno lì, contatta il tuo amministratore locale.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "I tuoi file sono cifrati. Se non hai precedentemente abilitato la chiave di recupero, non sarà più possibile ritrovare i tuoi dati una volta che la password sarà reimpostata.<br />Se non sei sicuro, per favore contatta l'amministratore prima di proseguire.<br />Vuoi davvero continuare?",
"I know what I'm doing" : "So cosa sto facendo",
- "Reset password" : "Ripristina la password",
"Password can not be changed. Please contact your administrator." : "La password non può essere cambiata. Contatta il tuo amministratore.",
"No" : "No",
"Yes" : "Sì",
@@ -122,13 +121,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Impossibile inviare l'email di reimpostazione poiché non è presente un indirizzo email per questo nome utente. Contatta il tuo amministratore.",
"%s password reset" : "Ripristino password di %s",
"Use the following link to reset your password: {link}" : "Usa il collegamento seguente per ripristinare la password: {link}",
- "You will receive a link to reset your password via Email." : "Riceverai un collegamento per ripristinare la tua password via email",
- "Username" : "Nome utente",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "I file sono cifrati. Se non hai precedentemente abilitato la chiave di recupero, non sarà più possibile ritrovare i tuoi dati una volta che la password sarà ripristinata. Se non sei sicuro, per favore contatta l'amministratore prima di proseguire. Vuoi davvero continuare?",
- "Yes, I really want to reset my password now" : "Sì, voglio davvero ripristinare la mia password adesso",
- "Reset" : "Ripristina",
"New password" : "Nuova password",
"New Password" : "Nuova password",
+ "Reset password" : "Ripristina la password",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X non è supportato e %s non funzionerà correttamente su questa piattaforma. Usalo a tuo rischio!",
"For the best results, please consider using a GNU/Linux server instead." : "Per avere il risultato migliore, prendi in considerazione l'utilizzo di un server GNU/Linux.",
"Personal" : "Personale",
@@ -168,6 +163,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "La cartella dei dati e i file sono probabilmente accessibili da Internet poiché il file .htaccess non funziona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Per informazioni su come configurare correttamente il tuo server, vedi la <a href=\"%s\" target=\"_blank\">documentazione</a>.",
"Create an <strong>admin account</strong>" : "Crea un <strong>account amministratore</strong>",
+ "Username" : "Nome utente",
"Password" : "Password",
"Storage & database" : "Archiviazione e database",
"Data folder" : "Cartella dati",
diff --git a/core/l10n/ja.js b/core/l10n/ja.js
index bba306dafc6..f6a7aa1f846 100644
--- a/core/l10n/ja.js
+++ b/core/l10n/ja.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "パスワードをリセットする、このリンクをクリックするとメールを送信します。しばらく経ってもメールが届かなかった場合は、スパム/ジャンクフォルダを確認してください。<br>それでも見つからなかった場合は、管理者に問合せてください。",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ファイルが暗号化されています。リカバリーキーが有効でない場合は、パスワードをリセットした後にあなたのデータを元に戻す方法はありません。<br />どういうことか分からない場合は、操作を継続する前に管理者に連絡してください。<br />続けてよろしいでしょうか?",
"I know what I'm doing" : "どういう操作をしているか理解しています",
- "Reset password" : "パスワードをリセット",
"Password can not be changed. Please contact your administrator." : "パスワードは変更できません。管理者に問い合わせてください。",
"No" : "いいえ",
"Yes" : "はい",
@@ -124,13 +123,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "このユーザー名に紐付けられたメールアドレスがないため、リセットメールを送信できませんでした。管理者に問い合わせてください。",
"%s password reset" : "%s パスワードリセット",
"Use the following link to reset your password: {link}" : "パスワードをリセットするには次のリンクをクリックしてください: {link}",
- "You will receive a link to reset your password via Email." : "メールでパスワードをリセットするリンクが届きます。",
- "Username" : "ユーザー名",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "ファイルが暗号化されています。リカバリキーを有効にしていなかった場合、パスワードをリセットしてからデータを復旧する方法はありません。何をすべきかよくわからないなら、続ける前にまず管理者に連絡しましょう。本当に続けますか?",
- "Yes, I really want to reset my password now" : "はい、今すぐパスワードをリセットします。",
- "Reset" : "リセット",
"New password" : "新しいパスワードを入力",
"New Password" : "新しいパスワード",
+ "Reset password" : "パスワードをリセット",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X では、サポートされていません。このOSでは、%sは正常に動作しないかもしれません。ご自身の責任においてご利用ください。",
"For the best results, please consider using a GNU/Linux server instead." : "最も良い方法としては、代わりにGNU/Linuxサーバーを利用することをご検討ください。",
"Personal" : "個人",
@@ -170,6 +165,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : ".htaccessファイルが動作していないため、おそらくあなたのデータディレクトリまたはファイルはインターネットからアクセス可能になっています。",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "サーバーを適正に設定する情報は、こちらの<a href=\"%s\" target=\"_blank\">ドキュメント</a>を参照してください。",
"Create an <strong>admin account</strong>" : "<strong>管理者アカウント</strong>を作成してください",
+ "Username" : "ユーザー名",
"Password" : "パスワード",
"Storage & database" : "ストレージとデータベース",
"Data folder" : "データフォルダー",
diff --git a/core/l10n/ja.json b/core/l10n/ja.json
index 706d6bcfc29..c5f1ba49368 100644
--- a/core/l10n/ja.json
+++ b/core/l10n/ja.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "パスワードをリセットする、このリンクをクリックするとメールを送信します。しばらく経ってもメールが届かなかった場合は、スパム/ジャンクフォルダを確認してください。<br>それでも見つからなかった場合は、管理者に問合せてください。",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ファイルが暗号化されています。リカバリーキーが有効でない場合は、パスワードをリセットした後にあなたのデータを元に戻す方法はありません。<br />どういうことか分からない場合は、操作を継続する前に管理者に連絡してください。<br />続けてよろしいでしょうか?",
"I know what I'm doing" : "どういう操作をしているか理解しています",
- "Reset password" : "パスワードをリセット",
"Password can not be changed. Please contact your administrator." : "パスワードは変更できません。管理者に問い合わせてください。",
"No" : "いいえ",
"Yes" : "はい",
@@ -122,13 +121,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "このユーザー名に紐付けられたメールアドレスがないため、リセットメールを送信できませんでした。管理者に問い合わせてください。",
"%s password reset" : "%s パスワードリセット",
"Use the following link to reset your password: {link}" : "パスワードをリセットするには次のリンクをクリックしてください: {link}",
- "You will receive a link to reset your password via Email." : "メールでパスワードをリセットするリンクが届きます。",
- "Username" : "ユーザー名",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "ファイルが暗号化されています。リカバリキーを有効にしていなかった場合、パスワードをリセットしてからデータを復旧する方法はありません。何をすべきかよくわからないなら、続ける前にまず管理者に連絡しましょう。本当に続けますか?",
- "Yes, I really want to reset my password now" : "はい、今すぐパスワードをリセットします。",
- "Reset" : "リセット",
"New password" : "新しいパスワードを入力",
"New Password" : "新しいパスワード",
+ "Reset password" : "パスワードをリセット",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X では、サポートされていません。このOSでは、%sは正常に動作しないかもしれません。ご自身の責任においてご利用ください。",
"For the best results, please consider using a GNU/Linux server instead." : "最も良い方法としては、代わりにGNU/Linuxサーバーを利用することをご検討ください。",
"Personal" : "個人",
@@ -168,6 +163,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : ".htaccessファイルが動作していないため、おそらくあなたのデータディレクトリまたはファイルはインターネットからアクセス可能になっています。",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "サーバーを適正に設定する情報は、こちらの<a href=\"%s\" target=\"_blank\">ドキュメント</a>を参照してください。",
"Create an <strong>admin account</strong>" : "<strong>管理者アカウント</strong>を作成してください",
+ "Username" : "ユーザー名",
"Password" : "パスワード",
"Storage & database" : "ストレージとデータベース",
"Data folder" : "データフォルダー",
diff --git a/core/l10n/ka_GE.js b/core/l10n/ka_GE.js
index 699065f6c50..782cd54cf33 100644
--- a/core/l10n/ka_GE.js
+++ b/core/l10n/ka_GE.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"December" : "დეკემბერი",
"Settings" : "პარამეტრები",
"Saving..." : "შენახვა...",
- "Reset password" : "პაროლის შეცვლა",
"No" : "არა",
"Yes" : "კი",
"Choose" : "არჩევა",
@@ -65,9 +64,8 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : [""],
"The update was successful. Redirecting you to ownCloud now." : "განახლება ვერ განხორციელდა. გადამისამართება თქვენს ownCloud–ზე.",
"Use the following link to reset your password: {link}" : "გამოიყენე შემდეგი ლინკი პაროლის შესაცვლელად: {link}",
- "You will receive a link to reset your password via Email." : "თქვენ მოგივათ პაროლის შესაცვლელი ლინკი მეილზე",
- "Username" : "მომხმარებლის სახელი",
"New password" : "ახალი პაროლი",
+ "Reset password" : "პაროლის შეცვლა",
"Personal" : "პირადი",
"Users" : "მომხმარებელი",
"Apps" : "აპლიკაციები",
@@ -78,6 +76,7 @@ OC.L10N.register(
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "თქვენი PHP ვერსია შეიცავს საფრთხეს NULL Byte შეტევებისთვის (CVE-2006-7243)",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "თქვენი data დირექტორია და ფაილები დაშვებადია ინტერნეტში რადგან .htaccess ფაილი არ მუშაობს.",
"Create an <strong>admin account</strong>" : "შექმენი <strong>ადმინ ექაუნტი</strong>",
+ "Username" : "მომხმარებლის სახელი",
"Password" : "პაროლი",
"Data folder" : "მონაცემთა საქაღალდე",
"Configure the database" : "მონაცემთა ბაზის კონფიგურირება",
diff --git a/core/l10n/ka_GE.json b/core/l10n/ka_GE.json
index c7d8d774620..648f71af987 100644
--- a/core/l10n/ka_GE.json
+++ b/core/l10n/ka_GE.json
@@ -20,7 +20,6 @@
"December" : "დეკემბერი",
"Settings" : "პარამეტრები",
"Saving..." : "შენახვა...",
- "Reset password" : "პაროლის შეცვლა",
"No" : "არა",
"Yes" : "კი",
"Choose" : "არჩევა",
@@ -63,9 +62,8 @@
"_download %n file_::_download %n files_" : [""],
"The update was successful. Redirecting you to ownCloud now." : "განახლება ვერ განხორციელდა. გადამისამართება თქვენს ownCloud–ზე.",
"Use the following link to reset your password: {link}" : "გამოიყენე შემდეგი ლინკი პაროლის შესაცვლელად: {link}",
- "You will receive a link to reset your password via Email." : "თქვენ მოგივათ პაროლის შესაცვლელი ლინკი მეილზე",
- "Username" : "მომხმარებლის სახელი",
"New password" : "ახალი პაროლი",
+ "Reset password" : "პაროლის შეცვლა",
"Personal" : "პირადი",
"Users" : "მომხმარებელი",
"Apps" : "აპლიკაციები",
@@ -76,6 +74,7 @@
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "თქვენი PHP ვერსია შეიცავს საფრთხეს NULL Byte შეტევებისთვის (CVE-2006-7243)",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "თქვენი data დირექტორია და ფაილები დაშვებადია ინტერნეტში რადგან .htaccess ფაილი არ მუშაობს.",
"Create an <strong>admin account</strong>" : "შექმენი <strong>ადმინ ექაუნტი</strong>",
+ "Username" : "მომხმარებლის სახელი",
"Password" : "პაროლი",
"Data folder" : "მონაცემთა საქაღალდე",
"Configure the database" : "მონაცემთა ბაზის კონფიგურირება",
diff --git a/core/l10n/km.js b/core/l10n/km.js
index 80b25cbe34c..4b23b1f8a2a 100644
--- a/core/l10n/km.js
+++ b/core/l10n/km.js
@@ -24,7 +24,6 @@ OC.L10N.register(
"December" : "ខែធ្នូ",
"Settings" : "ការកំណត់",
"Saving..." : "កំពុង​រក្សាទុក",
- "Reset password" : "កំណត់​ពាក្យ​សម្ងាត់​ម្ដង​ទៀត",
"No" : "ទេ",
"Yes" : "ព្រម",
"Choose" : "ជ្រើស",
@@ -74,8 +73,8 @@ OC.L10N.register(
"Add" : "បញ្ចូល",
"_download %n file_::_download %n files_" : [""],
"Please reload the page." : "សូម​ផ្ទុក​ទំព័រ​នេះ​ឡើង​វិញ។",
- "Username" : "ឈ្មោះ​អ្នកប្រើ",
"New password" : "ពាក្យ​សម្ងាត់​ថ្មី",
+ "Reset password" : "កំណត់​ពាក្យ​សម្ងាត់​ម្ដង​ទៀត",
"Personal" : "ផ្ទាល់​ខ្លួន",
"Users" : "អ្នកប្រើ",
"Apps" : "កម្មវិធី",
@@ -84,6 +83,7 @@ OC.L10N.register(
"Access forbidden" : "បាន​ហាមឃាត់​ការ​ចូល",
"Security Warning" : "បម្រាម​សុវត្ថិភាព",
"Create an <strong>admin account</strong>" : "បង្កើត​<strong>គណនី​អភិបាល</strong>",
+ "Username" : "ឈ្មោះ​អ្នកប្រើ",
"Password" : "ពាក្យសម្ងាត់",
"Storage & database" : "ឃ្លាំង​ផ្ទុក & មូលដ្ឋាន​ទិន្នន័យ",
"Data folder" : "ថត​ទិន្នន័យ",
diff --git a/core/l10n/km.json b/core/l10n/km.json
index 50f693d3620..ccaf0576f2c 100644
--- a/core/l10n/km.json
+++ b/core/l10n/km.json
@@ -22,7 +22,6 @@
"December" : "ខែធ្នូ",
"Settings" : "ការកំណត់",
"Saving..." : "កំពុង​រក្សាទុក",
- "Reset password" : "កំណត់​ពាក្យ​សម្ងាត់​ម្ដង​ទៀត",
"No" : "ទេ",
"Yes" : "ព្រម",
"Choose" : "ជ្រើស",
@@ -72,8 +71,8 @@
"Add" : "បញ្ចូល",
"_download %n file_::_download %n files_" : [""],
"Please reload the page." : "សូម​ផ្ទុក​ទំព័រ​នេះ​ឡើង​វិញ។",
- "Username" : "ឈ្មោះ​អ្នកប្រើ",
"New password" : "ពាក្យ​សម្ងាត់​ថ្មី",
+ "Reset password" : "កំណត់​ពាក្យ​សម្ងាត់​ម្ដង​ទៀត",
"Personal" : "ផ្ទាល់​ខ្លួន",
"Users" : "អ្នកប្រើ",
"Apps" : "កម្មវិធី",
@@ -82,6 +81,7 @@
"Access forbidden" : "បាន​ហាមឃាត់​ការ​ចូល",
"Security Warning" : "បម្រាម​សុវត្ថិភាព",
"Create an <strong>admin account</strong>" : "បង្កើត​<strong>គណនី​អភិបាល</strong>",
+ "Username" : "ឈ្មោះ​អ្នកប្រើ",
"Password" : "ពាក្យសម្ងាត់",
"Storage & database" : "ឃ្លាំង​ផ្ទុក & មូលដ្ឋាន​ទិន្នន័យ",
"Data folder" : "ថត​ទិន្នន័យ",
diff --git a/core/l10n/ko.js b/core/l10n/ko.js
index a4c637cec83..91ed8a0fde6 100644
--- a/core/l10n/ko.js
+++ b/core/l10n/ko.js
@@ -32,7 +32,6 @@ OC.L10N.register(
"Settings" : "설정",
"Saving..." : "저장 중...",
"Couldn't send reset email. Please contact your administrator." : "재설정 메일을 보낼수 없습니다. 관리자에게 문의하십시오.",
- "Reset password" : "암호 재설정",
"Password can not be changed. Please contact your administrator." : "비밀번호를 변경할수 없습니다. 관리자에게 문의하십시오.",
"No" : "아니요",
"Yes" : "예",
@@ -103,13 +102,9 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "업데이트가 성공하였습니다. ownCloud로 돌아갑니다.",
"%s password reset" : "%s 암호 재설정",
"Use the following link to reset your password: {link}" : "다음 링크를 사용하여 암호를 재설정할 수 있습니다: {link}",
- "You will receive a link to reset your password via Email." : "이메일로 암호 재설정 링크를 보냈습니다.",
- "Username" : "사용자 이름",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "저장된 파일은 암호화되어 있습니다. 복구 키를 활성화하지 않았다면 암호를 초기화한 후 데이터를 복구할 수 없습니다. 무엇을 해야 할 지 모르겠으면 진행하기 전에 시스템 관리자에게 연락하십시오. 계속 진행하시겠습니까?",
- "Yes, I really want to reset my password now" : "예, 지금 내 암호를 재설정합니다",
- "Reset" : "재설정",
"New password" : "새 암호",
"New Password" : "새 암호",
+ "Reset password" : "암호 재설정",
"Personal" : "개인",
"Users" : "사용자",
"Apps" : "앱",
@@ -132,6 +127,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : ".htaccess 파일이 처리되지 않아서 데이터 디렉터리와 파일을 인터넷에서 접근할 수 없을 수도 있습니다.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "올바른 서버 설정을 위한 정보는 <a href=\"%s\" target=\"_blank\">문서</a>를 참조하십시오.",
"Create an <strong>admin account</strong>" : "<strong>관리자 계정</strong> 만들기",
+ "Username" : "사용자 이름",
"Password" : "암호",
"Storage & database" : "스토리지 & 데이터베이스",
"Data folder" : "데이터 폴더",
diff --git a/core/l10n/ko.json b/core/l10n/ko.json
index b068150f590..769bc98315b 100644
--- a/core/l10n/ko.json
+++ b/core/l10n/ko.json
@@ -30,7 +30,6 @@
"Settings" : "설정",
"Saving..." : "저장 중...",
"Couldn't send reset email. Please contact your administrator." : "재설정 메일을 보낼수 없습니다. 관리자에게 문의하십시오.",
- "Reset password" : "암호 재설정",
"Password can not be changed. Please contact your administrator." : "비밀번호를 변경할수 없습니다. 관리자에게 문의하십시오.",
"No" : "아니요",
"Yes" : "예",
@@ -101,13 +100,9 @@
"The update was successful. Redirecting you to ownCloud now." : "업데이트가 성공하였습니다. ownCloud로 돌아갑니다.",
"%s password reset" : "%s 암호 재설정",
"Use the following link to reset your password: {link}" : "다음 링크를 사용하여 암호를 재설정할 수 있습니다: {link}",
- "You will receive a link to reset your password via Email." : "이메일로 암호 재설정 링크를 보냈습니다.",
- "Username" : "사용자 이름",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "저장된 파일은 암호화되어 있습니다. 복구 키를 활성화하지 않았다면 암호를 초기화한 후 데이터를 복구할 수 없습니다. 무엇을 해야 할 지 모르겠으면 진행하기 전에 시스템 관리자에게 연락하십시오. 계속 진행하시겠습니까?",
- "Yes, I really want to reset my password now" : "예, 지금 내 암호를 재설정합니다",
- "Reset" : "재설정",
"New password" : "새 암호",
"New Password" : "새 암호",
+ "Reset password" : "암호 재설정",
"Personal" : "개인",
"Users" : "사용자",
"Apps" : "앱",
@@ -130,6 +125,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : ".htaccess 파일이 처리되지 않아서 데이터 디렉터리와 파일을 인터넷에서 접근할 수 없을 수도 있습니다.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "올바른 서버 설정을 위한 정보는 <a href=\"%s\" target=\"_blank\">문서</a>를 참조하십시오.",
"Create an <strong>admin account</strong>" : "<strong>관리자 계정</strong> 만들기",
+ "Username" : "사용자 이름",
"Password" : "암호",
"Storage & database" : "스토리지 & 데이터베이스",
"Data folder" : "데이터 폴더",
diff --git a/core/l10n/ku_IQ.js b/core/l10n/ku_IQ.js
index 7f249580986..1c780a6a019 100644
--- a/core/l10n/ku_IQ.js
+++ b/core/l10n/ku_IQ.js
@@ -3,7 +3,6 @@ OC.L10N.register(
{
"Settings" : "ده‌ستكاری",
"Saving..." : "پاشکه‌وتده‌کات...",
- "Reset password" : "دووباره‌ كردنه‌وه‌ی وشه‌ی نهێنی",
"No" : "نەخێر",
"Yes" : "بەڵێ",
"_{count} file conflict_::_{count} file conflicts_" : ["",""],
@@ -13,12 +12,13 @@ OC.L10N.register(
"Warning" : "ئاگاداری",
"Add" : "زیادکردن",
"_download %n file_::_download %n files_" : ["",""],
- "Username" : "ناوی به‌کارهێنه‌ر",
"New password" : "وشەی نهێنی نوێ",
+ "Reset password" : "دووباره‌ كردنه‌وه‌ی وشه‌ی نهێنی",
"Users" : "به‌كارهێنه‌ر",
"Apps" : "به‌رنامه‌كان",
"Admin" : "به‌ڕێوه‌به‌ری سه‌ره‌كی",
"Help" : "یارمەتی",
+ "Username" : "ناوی به‌کارهێنه‌ر",
"Password" : "وشەی تێپەربو",
"Data folder" : "زانیاری فۆڵده‌ر",
"Database user" : "به‌كارهێنه‌ری داتابه‌یس",
diff --git a/core/l10n/ku_IQ.json b/core/l10n/ku_IQ.json
index 2772a2895a2..3dcea4b4fa2 100644
--- a/core/l10n/ku_IQ.json
+++ b/core/l10n/ku_IQ.json
@@ -1,7 +1,6 @@
{ "translations": {
"Settings" : "ده‌ستكاری",
"Saving..." : "پاشکه‌وتده‌کات...",
- "Reset password" : "دووباره‌ كردنه‌وه‌ی وشه‌ی نهێنی",
"No" : "نەخێر",
"Yes" : "بەڵێ",
"_{count} file conflict_::_{count} file conflicts_" : ["",""],
@@ -11,12 +10,13 @@
"Warning" : "ئاگاداری",
"Add" : "زیادکردن",
"_download %n file_::_download %n files_" : ["",""],
- "Username" : "ناوی به‌کارهێنه‌ر",
"New password" : "وشەی نهێنی نوێ",
+ "Reset password" : "دووباره‌ كردنه‌وه‌ی وشه‌ی نهێنی",
"Users" : "به‌كارهێنه‌ر",
"Apps" : "به‌رنامه‌كان",
"Admin" : "به‌ڕێوه‌به‌ری سه‌ره‌كی",
"Help" : "یارمەتی",
+ "Username" : "ناوی به‌کارهێنه‌ر",
"Password" : "وشەی تێپەربو",
"Data folder" : "زانیاری فۆڵده‌ر",
"Database user" : "به‌كارهێنه‌ری داتابه‌یس",
diff --git a/core/l10n/lb.js b/core/l10n/lb.js
index 90ceb4cd8b8..cb918f1e87e 100644
--- a/core/l10n/lb.js
+++ b/core/l10n/lb.js
@@ -28,7 +28,6 @@ OC.L10N.register(
"December" : "Dezember",
"Settings" : "Astellungen",
"Saving..." : "Speicheren...",
- "Reset password" : "Passwuert zréck setzen",
"No" : "Nee",
"Yes" : "Jo",
"Choose" : "Auswielen",
@@ -80,12 +79,8 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "Den Update war erfollegräich. Du gëss elo bei d'ownCloud ëmgeleet.",
"%s password reset" : "%s Passwuert ass nei gesat",
"Use the following link to reset your password: {link}" : "Benotz folgende Link fir däi Passwuert zréckzesetzen: {link}",
- "You will receive a link to reset your password via Email." : "Du kriss e Link fir däi Passwuert zréckzesetze via Email geschéckt.",
- "Username" : "Benotzernumm",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Deng Fichiere si verschlësselt. Falls du de Recuperatiouns-Schlëssel net aktivéiert hues, gëtt et keng Méiglechkeet nees un deng Daten ze komme wann däi Passwuert muss zréckgesat ginn. Falls du net sécher bass wat s de maache soll, kontaktéier w.e.gl däin Administrateur bevir s de weidermëss. Wëlls de wierklech weidermaachen?",
- "Yes, I really want to reset my password now" : "Jo, ech wëll mäi Passwuert elo zrécksetzen",
- "Reset" : "Zeréck setzen",
"New password" : "Neit Passwuert",
+ "Reset password" : "Passwuert zréck setzen",
"Personal" : "Perséinlech",
"Users" : "Benotzer",
"Apps" : "Applikatiounen",
@@ -100,6 +95,7 @@ OC.L10N.register(
"Please update your PHP installation to use %s securely." : "Aktualiséier w.e.gl deng PHP-Installatioun fir %s sécher kennen ze benotzen.",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Däin Daten-Dossier an deng Fichieren si wahrscheinlech iwwert den Internet accessibel well den .htaccess-Fichier net funktionnéiert.",
"Create an <strong>admin account</strong>" : "En <strong>Admin-Account</strong> uleeën",
+ "Username" : "Benotzernumm",
"Password" : "Passwuert",
"Data folder" : "Daten-Dossier",
"Configure the database" : "D'Datebank konfiguréieren",
diff --git a/core/l10n/lb.json b/core/l10n/lb.json
index 9a1be1e4dd9..f20d81a44cf 100644
--- a/core/l10n/lb.json
+++ b/core/l10n/lb.json
@@ -26,7 +26,6 @@
"December" : "Dezember",
"Settings" : "Astellungen",
"Saving..." : "Speicheren...",
- "Reset password" : "Passwuert zréck setzen",
"No" : "Nee",
"Yes" : "Jo",
"Choose" : "Auswielen",
@@ -78,12 +77,8 @@
"The update was successful. Redirecting you to ownCloud now." : "Den Update war erfollegräich. Du gëss elo bei d'ownCloud ëmgeleet.",
"%s password reset" : "%s Passwuert ass nei gesat",
"Use the following link to reset your password: {link}" : "Benotz folgende Link fir däi Passwuert zréckzesetzen: {link}",
- "You will receive a link to reset your password via Email." : "Du kriss e Link fir däi Passwuert zréckzesetze via Email geschéckt.",
- "Username" : "Benotzernumm",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Deng Fichiere si verschlësselt. Falls du de Recuperatiouns-Schlëssel net aktivéiert hues, gëtt et keng Méiglechkeet nees un deng Daten ze komme wann däi Passwuert muss zréckgesat ginn. Falls du net sécher bass wat s de maache soll, kontaktéier w.e.gl däin Administrateur bevir s de weidermëss. Wëlls de wierklech weidermaachen?",
- "Yes, I really want to reset my password now" : "Jo, ech wëll mäi Passwuert elo zrécksetzen",
- "Reset" : "Zeréck setzen",
"New password" : "Neit Passwuert",
+ "Reset password" : "Passwuert zréck setzen",
"Personal" : "Perséinlech",
"Users" : "Benotzer",
"Apps" : "Applikatiounen",
@@ -98,6 +93,7 @@
"Please update your PHP installation to use %s securely." : "Aktualiséier w.e.gl deng PHP-Installatioun fir %s sécher kennen ze benotzen.",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Däin Daten-Dossier an deng Fichieren si wahrscheinlech iwwert den Internet accessibel well den .htaccess-Fichier net funktionnéiert.",
"Create an <strong>admin account</strong>" : "En <strong>Admin-Account</strong> uleeën",
+ "Username" : "Benotzernumm",
"Password" : "Passwuert",
"Data folder" : "Daten-Dossier",
"Configure the database" : "D'Datebank konfiguréieren",
diff --git a/core/l10n/lt_LT.js b/core/l10n/lt_LT.js
index e3796940fbe..5f7f1e3e4e1 100644
--- a/core/l10n/lt_LT.js
+++ b/core/l10n/lt_LT.js
@@ -31,7 +31,6 @@ OC.L10N.register(
"December" : "Gruodis",
"Settings" : "Nustatymai",
"Saving..." : "Saugoma...",
- "Reset password" : "Atkurti slaptažodį",
"No" : "Ne",
"Yes" : "Taip",
"Choose" : "Pasirinkite",
@@ -94,12 +93,8 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "Atnaujinimas buvo sėkmingas. Nukreipiame į jūsų ownCloud.",
"%s password reset" : "%s slaptažodžio atnaujinimas",
"Use the following link to reset your password: {link}" : "Slaptažodio atkūrimui naudokite šią nuorodą: {link}",
- "You will receive a link to reset your password via Email." : "Elektroniniu paštu gausite nuorodą, su kuria galėsite iš naujo nustatyti slaptažodį.",
- "Username" : "Prisijungimo vardas",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Jūsų failai yra užšifruoti. Jei neįjungėte atstatymo rakto, nebus galimybės atstatyti duomenų po slaptažodžio atstatymo. Jei nesate tikri ką daryti, prašome susisiekti su administratoriumi prie tęsiant. Ar tikrai tęsti?",
- "Yes, I really want to reset my password now" : "Taip, aš tikrai noriu atnaujinti slaptažodį",
- "Reset" : "Atstatyti",
"New password" : "Naujas slaptažodis",
+ "Reset password" : "Atkurti slaptažodį",
"Personal" : "Asmeniniai",
"Users" : "Vartotojai",
"Apps" : "Programos",
@@ -122,6 +117,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Jūsų failai yra tikriausiai prieinami per internetą nes .htaccess failas neveikia.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Kad gauti informaciją apie tai kaip tinkamai sukonfigūruoti savo serverį, prašome skaityti <a href=\"%s\" target=\"_blank\">dokumentaciją</a>.",
"Create an <strong>admin account</strong>" : "Sukurti <strong>administratoriaus paskyrą</strong>",
+ "Username" : "Prisijungimo vardas",
"Password" : "Slaptažodis",
"Data folder" : "Duomenų katalogas",
"Configure the database" : "Nustatyti duomenų bazę",
diff --git a/core/l10n/lt_LT.json b/core/l10n/lt_LT.json
index a70b966aae2..781373ec76e 100644
--- a/core/l10n/lt_LT.json
+++ b/core/l10n/lt_LT.json
@@ -29,7 +29,6 @@
"December" : "Gruodis",
"Settings" : "Nustatymai",
"Saving..." : "Saugoma...",
- "Reset password" : "Atkurti slaptažodį",
"No" : "Ne",
"Yes" : "Taip",
"Choose" : "Pasirinkite",
@@ -92,12 +91,8 @@
"The update was successful. Redirecting you to ownCloud now." : "Atnaujinimas buvo sėkmingas. Nukreipiame į jūsų ownCloud.",
"%s password reset" : "%s slaptažodžio atnaujinimas",
"Use the following link to reset your password: {link}" : "Slaptažodio atkūrimui naudokite šią nuorodą: {link}",
- "You will receive a link to reset your password via Email." : "Elektroniniu paštu gausite nuorodą, su kuria galėsite iš naujo nustatyti slaptažodį.",
- "Username" : "Prisijungimo vardas",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Jūsų failai yra užšifruoti. Jei neįjungėte atstatymo rakto, nebus galimybės atstatyti duomenų po slaptažodžio atstatymo. Jei nesate tikri ką daryti, prašome susisiekti su administratoriumi prie tęsiant. Ar tikrai tęsti?",
- "Yes, I really want to reset my password now" : "Taip, aš tikrai noriu atnaujinti slaptažodį",
- "Reset" : "Atstatyti",
"New password" : "Naujas slaptažodis",
+ "Reset password" : "Atkurti slaptažodį",
"Personal" : "Asmeniniai",
"Users" : "Vartotojai",
"Apps" : "Programos",
@@ -120,6 +115,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Jūsų failai yra tikriausiai prieinami per internetą nes .htaccess failas neveikia.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Kad gauti informaciją apie tai kaip tinkamai sukonfigūruoti savo serverį, prašome skaityti <a href=\"%s\" target=\"_blank\">dokumentaciją</a>.",
"Create an <strong>admin account</strong>" : "Sukurti <strong>administratoriaus paskyrą</strong>",
+ "Username" : "Prisijungimo vardas",
"Password" : "Slaptažodis",
"Data folder" : "Duomenų katalogas",
"Configure the database" : "Nustatyti duomenų bazę",
diff --git a/core/l10n/lv.js b/core/l10n/lv.js
index 16bb3007e4c..e71b24a060e 100644
--- a/core/l10n/lv.js
+++ b/core/l10n/lv.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"December" : "Decembris",
"Settings" : "Iestatījumi",
"Saving..." : "Saglabā...",
- "Reset password" : "Mainīt paroli",
"No" : "Nē",
"Yes" : "Jā",
"Choose" : "Izvēlieties",
@@ -68,11 +67,8 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "Atjaunināšana beidzās sekmīgi. Tagad pārsūta jūs uz ownCloud.",
"%s password reset" : "%s paroles maiņa",
"Use the following link to reset your password: {link}" : "Izmantojiet šo saiti, lai mainītu paroli: {link}",
- "You will receive a link to reset your password via Email." : "Jūs savā epastā saņemsiet interneta saiti, caur kuru varēsiet atjaunot paroli.",
- "Username" : "Lietotājvārds",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Jūsu faili ir šifrēti. Ja nav iespējota atgūšanas kods, tad nebūs iespēja atjaunot jūsu failus pēc tam kad tiks mainīta parole. ja neesat pārliecināts kā rīkoties, jautājiet administratoram. Vai tiešam vēlaties turpināt?",
- "Yes, I really want to reset my password now" : "Jā, Es tiešām vēlos mainīt savu paroli",
"New password" : "Jauna parole",
+ "Reset password" : "Mainīt paroli",
"Personal" : "Personīgi",
"Users" : "Lietotāji",
"Apps" : "Lietotnes",
@@ -85,6 +81,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Visticamāk, jūsu datu direktorija un datnes ir pieejamas no interneta, jo .htaccess datne nedarbojas.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Vairāk informācijai kā konfigurēt serveri, lūdzu skatiet <a href=\"%s\" target=\"_blank\">dokumentāciju</a>.",
"Create an <strong>admin account</strong>" : "Izveidot <strong>administratora kontu</strong>",
+ "Username" : "Lietotājvārds",
"Password" : "Parole",
"Data folder" : "Datu mape",
"Configure the database" : "Konfigurēt datubāzi",
diff --git a/core/l10n/lv.json b/core/l10n/lv.json
index afeb3f82a17..684c659d844 100644
--- a/core/l10n/lv.json
+++ b/core/l10n/lv.json
@@ -20,7 +20,6 @@
"December" : "Decembris",
"Settings" : "Iestatījumi",
"Saving..." : "Saglabā...",
- "Reset password" : "Mainīt paroli",
"No" : "Nē",
"Yes" : "Jā",
"Choose" : "Izvēlieties",
@@ -66,11 +65,8 @@
"The update was successful. Redirecting you to ownCloud now." : "Atjaunināšana beidzās sekmīgi. Tagad pārsūta jūs uz ownCloud.",
"%s password reset" : "%s paroles maiņa",
"Use the following link to reset your password: {link}" : "Izmantojiet šo saiti, lai mainītu paroli: {link}",
- "You will receive a link to reset your password via Email." : "Jūs savā epastā saņemsiet interneta saiti, caur kuru varēsiet atjaunot paroli.",
- "Username" : "Lietotājvārds",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Jūsu faili ir šifrēti. Ja nav iespējota atgūšanas kods, tad nebūs iespēja atjaunot jūsu failus pēc tam kad tiks mainīta parole. ja neesat pārliecināts kā rīkoties, jautājiet administratoram. Vai tiešam vēlaties turpināt?",
- "Yes, I really want to reset my password now" : "Jā, Es tiešām vēlos mainīt savu paroli",
"New password" : "Jauna parole",
+ "Reset password" : "Mainīt paroli",
"Personal" : "Personīgi",
"Users" : "Lietotāji",
"Apps" : "Lietotnes",
@@ -83,6 +79,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Visticamāk, jūsu datu direktorija un datnes ir pieejamas no interneta, jo .htaccess datne nedarbojas.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Vairāk informācijai kā konfigurēt serveri, lūdzu skatiet <a href=\"%s\" target=\"_blank\">dokumentāciju</a>.",
"Create an <strong>admin account</strong>" : "Izveidot <strong>administratora kontu</strong>",
+ "Username" : "Lietotājvārds",
"Password" : "Parole",
"Data folder" : "Datu mape",
"Configure the database" : "Konfigurēt datubāzi",
diff --git a/core/l10n/mk.js b/core/l10n/mk.js
index 0b1e993a8f4..20ad24d1e38 100644
--- a/core/l10n/mk.js
+++ b/core/l10n/mk.js
@@ -28,7 +28,6 @@ OC.L10N.register(
"December" : "Декември",
"Settings" : "Подесувања",
"Saving..." : "Снимам...",
- "Reset password" : "Ресетирај лозинка",
"No" : "Не",
"Yes" : "Да",
"Choose" : "Избери",
@@ -86,11 +85,8 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "Надградбата беше успешна. Веднаш ве префрлам на вашиот ownCloud.",
"%s password reset" : "%s ресетирање на лозинката",
"Use the following link to reset your password: {link}" : "Користете ја следната врска да ја ресетирате Вашата лозинка: {link}",
- "You will receive a link to reset your password via Email." : "Ќе добиете врска по е-пошта за да може да ја ресетирате Вашата лозинка.",
- "Username" : "Корисничко име",
- "Yes, I really want to reset my password now" : "Да, јас сега навистина сакам да ја поништам својата лозинка",
- "Reset" : "Поништи",
"New password" : "Нова лозинка",
+ "Reset password" : "Ресетирај лозинка",
"Personal" : "Лично",
"Users" : "Корисници",
"Apps" : "Аппликации",
@@ -109,6 +105,7 @@ OC.L10N.register(
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Вашата верзија на PHP е ранлива на NULL Byte attack (CVE-2006-7243)",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Вашиот директориум со податоци и датотеки се веројатно достапни преку интенернт поради што .htaccess датотеката не функционира.",
"Create an <strong>admin account</strong>" : "Направете <strong>администраторска сметка</strong>",
+ "Username" : "Корисничко име",
"Password" : "Лозинка",
"Data folder" : "Фолдер со податоци",
"Configure the database" : "Конфигурирај ја базата",
diff --git a/core/l10n/mk.json b/core/l10n/mk.json
index 2da6b74e601..19fbf344532 100644
--- a/core/l10n/mk.json
+++ b/core/l10n/mk.json
@@ -26,7 +26,6 @@
"December" : "Декември",
"Settings" : "Подесувања",
"Saving..." : "Снимам...",
- "Reset password" : "Ресетирај лозинка",
"No" : "Не",
"Yes" : "Да",
"Choose" : "Избери",
@@ -84,11 +83,8 @@
"The update was successful. Redirecting you to ownCloud now." : "Надградбата беше успешна. Веднаш ве префрлам на вашиот ownCloud.",
"%s password reset" : "%s ресетирање на лозинката",
"Use the following link to reset your password: {link}" : "Користете ја следната врска да ја ресетирате Вашата лозинка: {link}",
- "You will receive a link to reset your password via Email." : "Ќе добиете врска по е-пошта за да може да ја ресетирате Вашата лозинка.",
- "Username" : "Корисничко име",
- "Yes, I really want to reset my password now" : "Да, јас сега навистина сакам да ја поништам својата лозинка",
- "Reset" : "Поништи",
"New password" : "Нова лозинка",
+ "Reset password" : "Ресетирај лозинка",
"Personal" : "Лично",
"Users" : "Корисници",
"Apps" : "Аппликации",
@@ -107,6 +103,7 @@
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Вашата верзија на PHP е ранлива на NULL Byte attack (CVE-2006-7243)",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Вашиот директориум со податоци и датотеки се веројатно достапни преку интенернт поради што .htaccess датотеката не функционира.",
"Create an <strong>admin account</strong>" : "Направете <strong>администраторска сметка</strong>",
+ "Username" : "Корисничко име",
"Password" : "Лозинка",
"Data folder" : "Фолдер со податоци",
"Configure the database" : "Конфигурирај ја базата",
diff --git a/core/l10n/ms_MY.js b/core/l10n/ms_MY.js
index 612641fe748..7bf41489825 100644
--- a/core/l10n/ms_MY.js
+++ b/core/l10n/ms_MY.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"December" : "Disember",
"Settings" : "Tetapan",
"Saving..." : "Simpan...",
- "Reset password" : "Penetapan semula kata laluan",
"No" : "Tidak",
"Yes" : "Ya",
"Ok" : "Ok",
@@ -38,9 +37,8 @@ OC.L10N.register(
"Add" : "Tambah",
"_download %n file_::_download %n files_" : [""],
"Use the following link to reset your password: {link}" : "Guna pautan berikut untuk menetapkan semula kata laluan anda: {link}",
- "You will receive a link to reset your password via Email." : "Anda akan menerima pautan untuk menetapkan semula kata laluan anda melalui emel",
- "Username" : "Nama pengguna",
"New password" : "Kata laluan baru",
+ "Reset password" : "Penetapan semula kata laluan",
"Personal" : "Peribadi",
"Users" : "Pengguna",
"Apps" : "Aplikasi",
@@ -49,6 +47,7 @@ OC.L10N.register(
"Access forbidden" : "Larangan akses",
"Security Warning" : "Amaran keselamatan",
"Create an <strong>admin account</strong>" : "buat <strong>akaun admin</strong>",
+ "Username" : "Nama pengguna",
"Password" : "Kata laluan",
"Data folder" : "Fail data",
"Configure the database" : "Konfigurasi pangkalan data",
diff --git a/core/l10n/ms_MY.json b/core/l10n/ms_MY.json
index c1323607c8c..3f23b40e847 100644
--- a/core/l10n/ms_MY.json
+++ b/core/l10n/ms_MY.json
@@ -20,7 +20,6 @@
"December" : "Disember",
"Settings" : "Tetapan",
"Saving..." : "Simpan...",
- "Reset password" : "Penetapan semula kata laluan",
"No" : "Tidak",
"Yes" : "Ya",
"Ok" : "Ok",
@@ -36,9 +35,8 @@
"Add" : "Tambah",
"_download %n file_::_download %n files_" : [""],
"Use the following link to reset your password: {link}" : "Guna pautan berikut untuk menetapkan semula kata laluan anda: {link}",
- "You will receive a link to reset your password via Email." : "Anda akan menerima pautan untuk menetapkan semula kata laluan anda melalui emel",
- "Username" : "Nama pengguna",
"New password" : "Kata laluan baru",
+ "Reset password" : "Penetapan semula kata laluan",
"Personal" : "Peribadi",
"Users" : "Pengguna",
"Apps" : "Aplikasi",
@@ -47,6 +45,7 @@
"Access forbidden" : "Larangan akses",
"Security Warning" : "Amaran keselamatan",
"Create an <strong>admin account</strong>" : "buat <strong>akaun admin</strong>",
+ "Username" : "Nama pengguna",
"Password" : "Kata laluan",
"Data folder" : "Fail data",
"Configure the database" : "Konfigurasi pangkalan data",
diff --git a/core/l10n/my_MM.js b/core/l10n/my_MM.js
index ff87f52a5e2..4865ebd319e 100644
--- a/core/l10n/my_MM.js
+++ b/core/l10n/my_MM.js
@@ -28,8 +28,6 @@ OC.L10N.register(
"Password protected" : "စကားဝှက်ဖြင့်ကာကွယ်ထားသည်",
"Add" : "ပေါင်းထည့်",
"_download %n file_::_download %n files_" : [""],
- "You will receive a link to reset your password via Email." : "အီးမေးလ်မှတစ်ဆင့် သင်၏စကားဝှက်ကို ပြန်ဖော်ရန်အတွက် Link တစ်ခုလက်ခံရရှိပါလိမ့်မယ်။",
- "Username" : "သုံးစွဲသူအမည်",
"New password" : "စကားဝှက်အသစ်",
"Users" : "သုံးစွဲသူ",
"Apps" : "Apps",
@@ -37,6 +35,7 @@ OC.L10N.register(
"Help" : "အကူအညီ",
"Security Warning" : "လုံခြုံရေးသတိပေးချက်",
"Create an <strong>admin account</strong>" : "<strong>အက်ဒမင်အကောင့်</strong>တစ်ခုဖန်တီးမည်",
+ "Username" : "သုံးစွဲသူအမည်",
"Password" : "စကားဝှက်",
"Data folder" : "အချက်အလက်ဖိုလ်ဒါလ်",
"Database user" : "Database သုံးစွဲသူ",
diff --git a/core/l10n/my_MM.json b/core/l10n/my_MM.json
index 086e14cdad0..fd30a3df74b 100644
--- a/core/l10n/my_MM.json
+++ b/core/l10n/my_MM.json
@@ -26,8 +26,6 @@
"Password protected" : "စကားဝှက်ဖြင့်ကာကွယ်ထားသည်",
"Add" : "ပေါင်းထည့်",
"_download %n file_::_download %n files_" : [""],
- "You will receive a link to reset your password via Email." : "အီးမေးလ်မှတစ်ဆင့် သင်၏စကားဝှက်ကို ပြန်ဖော်ရန်အတွက် Link တစ်ခုလက်ခံရရှိပါလိမ့်မယ်။",
- "Username" : "သုံးစွဲသူအမည်",
"New password" : "စကားဝှက်အသစ်",
"Users" : "သုံးစွဲသူ",
"Apps" : "Apps",
@@ -35,6 +33,7 @@
"Help" : "အကူအညီ",
"Security Warning" : "လုံခြုံရေးသတိပေးချက်",
"Create an <strong>admin account</strong>" : "<strong>အက်ဒမင်အကောင့်</strong>တစ်ခုဖန်တီးမည်",
+ "Username" : "သုံးစွဲသူအမည်",
"Password" : "စကားဝှက်",
"Data folder" : "အချက်အလက်ဖိုလ်ဒါလ်",
"Database user" : "Database သုံးစွဲသူ",
diff --git a/core/l10n/nb_NO.js b/core/l10n/nb_NO.js
index a033c38aa77..5bb81e3f7a1 100644
--- a/core/l10n/nb_NO.js
+++ b/core/l10n/nb_NO.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Lenken for tilbakestilling av passordet ditt er sendt til din e-postadresse. Hvis du ikke mottar den innen rimelig tid, sjekk mappen for søppelpost.<br>Hvis du ikke finner den der, kontakt din lokale administrator.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Filene dine er kryptert. Hvis du ikke har aktivert gjenopprettingsnøkkelen, vil det være helt umulig å få tilbake dataene dine etter at pasordet ditt er tilbakestilt.<br />Hvis du er usikker på hva du skal gjøre, kontakt administratoren din før du fortsetter. <br />Vil du virkelig fortsette?",
"I know what I'm doing" : "Jeg vet hva jeg gjør",
- "Reset password" : "Tilbakestill passord",
"Password can not be changed. Please contact your administrator." : "Passordet kan ikke endres. Kontakt administratoren din.",
"No" : "Nei",
"Yes" : "Ja",
@@ -120,13 +119,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Klarte ikke å sende e-post for tilbakestilling av passord fordi det ikke finnes noen e-postadresse for dette brukernavnet. Kontakt administratoren din.",
"%s password reset" : "%s tilbakestilling av passord",
"Use the following link to reset your password: {link}" : "Bruk følgende lenke for å tilbakestille passordet ditt: {link}",
- "You will receive a link to reset your password via Email." : "Du burde motta detaljer om å tilbakestille passordet ditt via epost.",
- "Username" : "Brukernavn",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Filene dine er kryptert. Hvis du ikke har aktivert gjenopprettingsnøkkelen, vil det være helt umulig å få tilbake dataene dine etter at passordet ditt er tilbakestilt. Hvis du er usikker på hva du skal gjøre, kontakt administratoren din før du fortsetter. Vil du virkelig fortsette?",
- "Yes, I really want to reset my password now" : "Ja, jeg vil virkelig tilbakestille passordet mitt nå",
- "Reset" : "Tilbakestill",
"New password" : "Nytt passord",
"New Password" : "Nytt passord",
+ "Reset password" : "Tilbakestill passord",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X støttes ikke og %s vil ikke fungere korrekt på denne plattformen. Bruk på egen risiko!",
"For the best results, please consider using a GNU/Linux server instead." : "For beste resultat, vurder å bruke en GNU/Linux-server i stedet.",
"Personal" : "Personlig",
@@ -165,6 +160,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datamappen og filene dine er sannsynligvis tilgjengelig fra Internett fordi .htaccess-filen ikke fungerer.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For informasjon om hvordan du setter opp serveren din riktig, se <a href=\"%s\" target=\"_blank\">dokumentasjonen</a>.",
"Create an <strong>admin account</strong>" : "Opprett en <strong>administrator-konto</strong>",
+ "Username" : "Brukernavn",
"Password" : "Passord",
"Storage & database" : "Lagring og database",
"Data folder" : "Datamappe",
diff --git a/core/l10n/nb_NO.json b/core/l10n/nb_NO.json
index 9ad2c468000..14c4ce0de01 100644
--- a/core/l10n/nb_NO.json
+++ b/core/l10n/nb_NO.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Lenken for tilbakestilling av passordet ditt er sendt til din e-postadresse. Hvis du ikke mottar den innen rimelig tid, sjekk mappen for søppelpost.<br>Hvis du ikke finner den der, kontakt din lokale administrator.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Filene dine er kryptert. Hvis du ikke har aktivert gjenopprettingsnøkkelen, vil det være helt umulig å få tilbake dataene dine etter at pasordet ditt er tilbakestilt.<br />Hvis du er usikker på hva du skal gjøre, kontakt administratoren din før du fortsetter. <br />Vil du virkelig fortsette?",
"I know what I'm doing" : "Jeg vet hva jeg gjør",
- "Reset password" : "Tilbakestill passord",
"Password can not be changed. Please contact your administrator." : "Passordet kan ikke endres. Kontakt administratoren din.",
"No" : "Nei",
"Yes" : "Ja",
@@ -118,13 +117,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Klarte ikke å sende e-post for tilbakestilling av passord fordi det ikke finnes noen e-postadresse for dette brukernavnet. Kontakt administratoren din.",
"%s password reset" : "%s tilbakestilling av passord",
"Use the following link to reset your password: {link}" : "Bruk følgende lenke for å tilbakestille passordet ditt: {link}",
- "You will receive a link to reset your password via Email." : "Du burde motta detaljer om å tilbakestille passordet ditt via epost.",
- "Username" : "Brukernavn",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Filene dine er kryptert. Hvis du ikke har aktivert gjenopprettingsnøkkelen, vil det være helt umulig å få tilbake dataene dine etter at passordet ditt er tilbakestilt. Hvis du er usikker på hva du skal gjøre, kontakt administratoren din før du fortsetter. Vil du virkelig fortsette?",
- "Yes, I really want to reset my password now" : "Ja, jeg vil virkelig tilbakestille passordet mitt nå",
- "Reset" : "Tilbakestill",
"New password" : "Nytt passord",
"New Password" : "Nytt passord",
+ "Reset password" : "Tilbakestill passord",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X støttes ikke og %s vil ikke fungere korrekt på denne plattformen. Bruk på egen risiko!",
"For the best results, please consider using a GNU/Linux server instead." : "For beste resultat, vurder å bruke en GNU/Linux-server i stedet.",
"Personal" : "Personlig",
@@ -163,6 +158,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datamappen og filene dine er sannsynligvis tilgjengelig fra Internett fordi .htaccess-filen ikke fungerer.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For informasjon om hvordan du setter opp serveren din riktig, se <a href=\"%s\" target=\"_blank\">dokumentasjonen</a>.",
"Create an <strong>admin account</strong>" : "Opprett en <strong>administrator-konto</strong>",
+ "Username" : "Brukernavn",
"Password" : "Passord",
"Storage & database" : "Lagring og database",
"Data folder" : "Datamappe",
diff --git a/core/l10n/nl.js b/core/l10n/nl.js
index 011b04fd790..a3def91c894 100644
--- a/core/l10n/nl.js
+++ b/core/l10n/nl.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "De link om uw wachtwoord te herstellen is per e-mail naar u verstuurd. Als u dit bericht niet binnen redelijke tijd hebt ontvangen, controleer dan uw spammap. <br>Als het daar niet in zit, neem dan contact op met uw beheerder.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Uw bestanden zijn versleuteld. Als u de herstelsleutel niet hebt geactiveerd, is er geen mogelijk om uw gegevens terug te krijgen nadat uw wachtwoord is hersteld. <br>Als u niet weet wat u moet doen, neem dan eerst contact op met uw beheerder. <br>Wilt u echt verder gaan?",
"I know what I'm doing" : "Ik weet wat ik doe",
- "Reset password" : "Reset wachtwoord",
"Password can not be changed. Please contact your administrator." : "Het wachtwoord kan niet worden gewijzigd. Neem contact op met uw beheerder.",
"No" : "Nee",
"Yes" : "Ja",
@@ -124,13 +123,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Kon geen herstel e-mail versturen, omdat er geen e-mailadres bekend is bij deze gebruikersnaam. Neem contact op met uw beheerder.",
"%s password reset" : "%s wachtwoord reset",
"Use the following link to reset your password: {link}" : "Gebruik de volgende link om uw wachtwoord te resetten: {link}",
- "You will receive a link to reset your password via Email." : "U ontvangt een link om uw wachtwoord opnieuw in te stellen via e-mail.",
- "Username" : "Gebruikersnaam",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Uw bestanden zijn versleuteld. Als u geen recoverykey hebt ingeschakeld is er geen manier om uw data terug te krijgen na het resetten van uw wachtwoord.\nAls u niet weet wat u moet doen, neem dan alstublieft contact op met uw systeembeheerder voordat u doorgaat.\nWil u echt doorgaan?",
- "Yes, I really want to reset my password now" : "Ja, ik wil mijn wachtwoord nu echt resetten",
- "Reset" : "Reset",
"New password" : "Nieuw wachtwoord",
"New Password" : "Nieuw wachtwoord",
+ "Reset password" : "Reset wachtwoord",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OSX wordt niet ondersteund en %s zal niet goed werken op dit platform. Gebruik het op uw eigen risico!",
"For the best results, please consider using a GNU/Linux server instead." : "Voor het beste resultaat adviseren wij het gebruik van een GNU/Linux server.",
"Personal" : "Persoonlijk",
@@ -170,6 +165,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Uw gegevensdirectory en bestanden zijn vermoedelijk bereikbaar vanaf het internet omdat het .htaccess-bestand niet functioneert.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Bekijk de <a href=\"%s\" target=\"_blank\">documentatie</a> voor Informatie over het correct configureren van uw server.",
"Create an <strong>admin account</strong>" : "Maak een <strong>beheerdersaccount</strong> aan",
+ "Username" : "Gebruikersnaam",
"Password" : "Wachtwoord",
"Storage & database" : "Opslag & database",
"Data folder" : "Gegevensmap",
diff --git a/core/l10n/nl.json b/core/l10n/nl.json
index b59c04e73ff..6a5e2dccab3 100644
--- a/core/l10n/nl.json
+++ b/core/l10n/nl.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "De link om uw wachtwoord te herstellen is per e-mail naar u verstuurd. Als u dit bericht niet binnen redelijke tijd hebt ontvangen, controleer dan uw spammap. <br>Als het daar niet in zit, neem dan contact op met uw beheerder.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Uw bestanden zijn versleuteld. Als u de herstelsleutel niet hebt geactiveerd, is er geen mogelijk om uw gegevens terug te krijgen nadat uw wachtwoord is hersteld. <br>Als u niet weet wat u moet doen, neem dan eerst contact op met uw beheerder. <br>Wilt u echt verder gaan?",
"I know what I'm doing" : "Ik weet wat ik doe",
- "Reset password" : "Reset wachtwoord",
"Password can not be changed. Please contact your administrator." : "Het wachtwoord kan niet worden gewijzigd. Neem contact op met uw beheerder.",
"No" : "Nee",
"Yes" : "Ja",
@@ -122,13 +121,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Kon geen herstel e-mail versturen, omdat er geen e-mailadres bekend is bij deze gebruikersnaam. Neem contact op met uw beheerder.",
"%s password reset" : "%s wachtwoord reset",
"Use the following link to reset your password: {link}" : "Gebruik de volgende link om uw wachtwoord te resetten: {link}",
- "You will receive a link to reset your password via Email." : "U ontvangt een link om uw wachtwoord opnieuw in te stellen via e-mail.",
- "Username" : "Gebruikersnaam",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Uw bestanden zijn versleuteld. Als u geen recoverykey hebt ingeschakeld is er geen manier om uw data terug te krijgen na het resetten van uw wachtwoord.\nAls u niet weet wat u moet doen, neem dan alstublieft contact op met uw systeembeheerder voordat u doorgaat.\nWil u echt doorgaan?",
- "Yes, I really want to reset my password now" : "Ja, ik wil mijn wachtwoord nu echt resetten",
- "Reset" : "Reset",
"New password" : "Nieuw wachtwoord",
"New Password" : "Nieuw wachtwoord",
+ "Reset password" : "Reset wachtwoord",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OSX wordt niet ondersteund en %s zal niet goed werken op dit platform. Gebruik het op uw eigen risico!",
"For the best results, please consider using a GNU/Linux server instead." : "Voor het beste resultaat adviseren wij het gebruik van een GNU/Linux server.",
"Personal" : "Persoonlijk",
@@ -168,6 +163,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Uw gegevensdirectory en bestanden zijn vermoedelijk bereikbaar vanaf het internet omdat het .htaccess-bestand niet functioneert.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Bekijk de <a href=\"%s\" target=\"_blank\">documentatie</a> voor Informatie over het correct configureren van uw server.",
"Create an <strong>admin account</strong>" : "Maak een <strong>beheerdersaccount</strong> aan",
+ "Username" : "Gebruikersnaam",
"Password" : "Wachtwoord",
"Storage & database" : "Opslag & database",
"Data folder" : "Gegevensmap",
diff --git a/core/l10n/nn_NO.js b/core/l10n/nn_NO.js
index d6ba6612f0e..2dccb25d657 100644
--- a/core/l10n/nn_NO.js
+++ b/core/l10n/nn_NO.js
@@ -32,7 +32,6 @@ OC.L10N.register(
"Settings" : "Innstillingar",
"Saving..." : "Lagrar …",
"I know what I'm doing" : "Eg veit kva eg gjer",
- "Reset password" : "Nullstill passord",
"No" : "Nei",
"Yes" : "Ja",
"Choose" : "Vel",
@@ -91,11 +90,8 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "Oppdateringa er fullført. Sender deg vidare til ownCloud no.",
"%s password reset" : "%s passordnullstilling",
"Use the following link to reset your password: {link}" : "Klikk følgjande lenkje til å nullstilla passordet ditt: {link}",
- "You will receive a link to reset your password via Email." : "Du vil få ein e-post med ei lenkje for å nullstilla passordet.",
- "Username" : "Brukarnamn",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Filene dine er krypterte. Viss du ikkje har skrudd på gjenopprettingsnøkkelen, finst det ingen måte å få tilbake dataa dine når passordet ditt er nullstilt. Viss du ikkje er sikker på kva du skal gjera bør du spørja administratoren din før du går vidare. Vil du verkeleg fortsetja?",
- "Yes, I really want to reset my password now" : "Ja, eg vil nullstilla passordet mitt no",
"New password" : "Nytt passord",
+ "Reset password" : "Nullstill passord",
"Personal" : "Personleg",
"Users" : "Brukarar",
"Apps" : "Program",
@@ -108,6 +104,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datamappa og filene dine er sannsynlegvis tilgjengelege frå Internett sidan .htaccess-fila ikkje fungerer.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Ver venleg og les <a href=\"%s\" target=\"_blank\">dokumentasjonen</a> for meir informasjon om korleis du konfigurerer tenaren din.",
"Create an <strong>admin account</strong>" : "Lag ein <strong>admin-konto</strong>",
+ "Username" : "Brukarnamn",
"Password" : "Passord",
"Data folder" : "Datamappe",
"Configure the database" : "Set opp databasen",
diff --git a/core/l10n/nn_NO.json b/core/l10n/nn_NO.json
index 7c1bbc858f4..25151b7f68e 100644
--- a/core/l10n/nn_NO.json
+++ b/core/l10n/nn_NO.json
@@ -30,7 +30,6 @@
"Settings" : "Innstillingar",
"Saving..." : "Lagrar …",
"I know what I'm doing" : "Eg veit kva eg gjer",
- "Reset password" : "Nullstill passord",
"No" : "Nei",
"Yes" : "Ja",
"Choose" : "Vel",
@@ -89,11 +88,8 @@
"The update was successful. Redirecting you to ownCloud now." : "Oppdateringa er fullført. Sender deg vidare til ownCloud no.",
"%s password reset" : "%s passordnullstilling",
"Use the following link to reset your password: {link}" : "Klikk følgjande lenkje til å nullstilla passordet ditt: {link}",
- "You will receive a link to reset your password via Email." : "Du vil få ein e-post med ei lenkje for å nullstilla passordet.",
- "Username" : "Brukarnamn",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Filene dine er krypterte. Viss du ikkje har skrudd på gjenopprettingsnøkkelen, finst det ingen måte å få tilbake dataa dine når passordet ditt er nullstilt. Viss du ikkje er sikker på kva du skal gjera bør du spørja administratoren din før du går vidare. Vil du verkeleg fortsetja?",
- "Yes, I really want to reset my password now" : "Ja, eg vil nullstilla passordet mitt no",
"New password" : "Nytt passord",
+ "Reset password" : "Nullstill passord",
"Personal" : "Personleg",
"Users" : "Brukarar",
"Apps" : "Program",
@@ -106,6 +102,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datamappa og filene dine er sannsynlegvis tilgjengelege frå Internett sidan .htaccess-fila ikkje fungerer.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Ver venleg og les <a href=\"%s\" target=\"_blank\">dokumentasjonen</a> for meir informasjon om korleis du konfigurerer tenaren din.",
"Create an <strong>admin account</strong>" : "Lag ein <strong>admin-konto</strong>",
+ "Username" : "Brukarnamn",
"Password" : "Passord",
"Data folder" : "Datamappe",
"Configure the database" : "Set opp databasen",
diff --git a/core/l10n/oc.js b/core/l10n/oc.js
index 43fee792602..eae84339932 100644
--- a/core/l10n/oc.js
+++ b/core/l10n/oc.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"December" : "Decembre",
"Settings" : "Configuracion",
"Saving..." : "Enregistra...",
- "Reset password" : "Senhal tornat botar",
"No" : "Non",
"Yes" : "Òc",
"Choose" : "Causís",
@@ -52,9 +51,8 @@ OC.L10N.register(
"Add" : "Ajusta",
"_download %n file_::_download %n files_" : ["",""],
"Use the following link to reset your password: {link}" : "Utiliza lo ligam seguent per tornar botar lo senhal : {link}",
- "You will receive a link to reset your password via Email." : "Reçaupràs un ligam per tornar botar ton senhal via corrièl.",
- "Username" : "Non d'usancièr",
"New password" : "Senhal novèl",
+ "Reset password" : "Senhal tornat botar",
"Personal" : "Personal",
"Users" : "Usancièrs",
"Apps" : "Apps",
@@ -63,6 +61,7 @@ OC.L10N.register(
"Access forbidden" : "Acces enebit",
"Security Warning" : "Avertiment de securitat",
"Create an <strong>admin account</strong>" : "Crea un <strong>compte admin</strong>",
+ "Username" : "Non d'usancièr",
"Password" : "Senhal",
"Data folder" : "Dorsièr de donadas",
"Configure the database" : "Configura la basa de donadas",
diff --git a/core/l10n/oc.json b/core/l10n/oc.json
index c2068151419..3b26135470a 100644
--- a/core/l10n/oc.json
+++ b/core/l10n/oc.json
@@ -20,7 +20,6 @@
"December" : "Decembre",
"Settings" : "Configuracion",
"Saving..." : "Enregistra...",
- "Reset password" : "Senhal tornat botar",
"No" : "Non",
"Yes" : "Òc",
"Choose" : "Causís",
@@ -50,9 +49,8 @@
"Add" : "Ajusta",
"_download %n file_::_download %n files_" : ["",""],
"Use the following link to reset your password: {link}" : "Utiliza lo ligam seguent per tornar botar lo senhal : {link}",
- "You will receive a link to reset your password via Email." : "Reçaupràs un ligam per tornar botar ton senhal via corrièl.",
- "Username" : "Non d'usancièr",
"New password" : "Senhal novèl",
+ "Reset password" : "Senhal tornat botar",
"Personal" : "Personal",
"Users" : "Usancièrs",
"Apps" : "Apps",
@@ -61,6 +59,7 @@
"Access forbidden" : "Acces enebit",
"Security Warning" : "Avertiment de securitat",
"Create an <strong>admin account</strong>" : "Crea un <strong>compte admin</strong>",
+ "Username" : "Non d'usancièr",
"Password" : "Senhal",
"Data folder" : "Dorsièr de donadas",
"Configure the database" : "Configura la basa de donadas",
diff --git a/core/l10n/pa.js b/core/l10n/pa.js
index 63933496c0c..c4cc7222434 100644
--- a/core/l10n/pa.js
+++ b/core/l10n/pa.js
@@ -34,8 +34,8 @@ OC.L10N.register(
"Warning" : "ਚੇਤਾਵਨੀ",
"Delete" : "ਹਟਾਓ",
"_download %n file_::_download %n files_" : ["",""],
- "Username" : "ਯੂਜ਼ਰ-ਨਾਂ",
"Security Warning" : "ਸੁਰੱਖਿਆ ਚੇਤਾਵਨੀ",
+ "Username" : "ਯੂਜ਼ਰ-ਨਾਂ",
"Password" : "ਪਾਸਵਰ"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/pa.json b/core/l10n/pa.json
index 6b1259ba9cc..c46d4a37b42 100644
--- a/core/l10n/pa.json
+++ b/core/l10n/pa.json
@@ -32,8 +32,8 @@
"Warning" : "ਚੇਤਾਵਨੀ",
"Delete" : "ਹਟਾਓ",
"_download %n file_::_download %n files_" : ["",""],
- "Username" : "ਯੂਜ਼ਰ-ਨਾਂ",
"Security Warning" : "ਸੁਰੱਖਿਆ ਚੇਤਾਵਨੀ",
+ "Username" : "ਯੂਜ਼ਰ-ਨਾਂ",
"Password" : "ਪਾਸਵਰ"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/pl.js b/core/l10n/pl.js
index 57b18d457c3..35d7faeabf4 100644
--- a/core/l10n/pl.js
+++ b/core/l10n/pl.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Link do zresetowanego hasła, został wysłany na twój adres e-mail. Jeśli nie dostałeś wiadomości w rozsądnym czasie, sprawdź folder ze spamem.<br> Jeśli nie ma wiadomości w tym folderze, skontaktuj się ze swoim administratorem.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Twoje pliki są zaszyfrowane. Jeśli nie włączyłeś klucza odzyskiwania, nie będzie możliwości odszyfrowania tych plików po zresetowaniu hasła.<br>Jeśli nie jesteś pewien co zrobić, skontaktuj się ze swoim administratorem, zanim bedziesz kontynuował. <br/> Czy chcesz kontynuować?\n ",
"I know what I'm doing" : "Wiem co robię",
- "Reset password" : "Zresetuj hasło",
"Password can not be changed. Please contact your administrator." : "Hasło nie może zostać zmienione. Skontaktuj się z administratorem.",
"No" : "Nie",
"Yes" : "Tak",
@@ -119,13 +118,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Nie mogę wysłać maila resetującego. Sprawdź czy nazwa użytkownika lub adres email jest poprawny. Skontaktuj się z administratorem.",
"%s password reset" : "%s reset hasła",
"Use the following link to reset your password: {link}" : "Użyj tego odnośnika by zresetować hasło: {link}",
- "You will receive a link to reset your password via Email." : "Odnośnik służący do resetowania hasła zostanie wysłany na adres e-mail.",
- "Username" : "Nazwa użytkownika",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Pliki są szyfrowane. Jeśli nie włączono klucza odzyskiwania, nie będzie możliwe odzyskać dane z powrotem po zresetowaniu hasła. Jeśli nie masz pewności, co zrobić, prosimy o kontakt z administratorem, przed kontynuowaniem. Czy chcesz kontynuować?",
- "Yes, I really want to reset my password now" : "Tak, naprawdę chcę zresetować hasło teraz",
- "Reset" : "Resetuj",
"New password" : "Nowe hasło",
"New Password" : "Nowe hasło",
+ "Reset password" : "Zresetuj hasło",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nie jest wspierany i %s nie będzie działać poprawnie na tej platformie. Używasz na własne ryzyko!",
"For the best results, please consider using a GNU/Linux server instead." : "Aby uzyskać najlepsze rezultaty, rozważ w to miejsce użycie serwera GNU/Linux.",
"Personal" : "Osobiste",
@@ -164,6 +159,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Twój katalog danych i pliki są prawdopodobnie dostępne z poziomu internetu, ponieważ plik .htaccess nie działa.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Aby uzyskać informacje jak poprawnie skonfigurować swój serwer, zapoznaj się z <a href=\"%s\" target=\"_blank\">dokumentacją</a>.",
"Create an <strong>admin account</strong>" : "Utwórz <strong>konta administratora</strong>",
+ "Username" : "Nazwa użytkownika",
"Password" : "Hasło",
"Storage & database" : "Zasoby dysku & baza danych",
"Data folder" : "Katalog danych",
diff --git a/core/l10n/pl.json b/core/l10n/pl.json
index f6c0615fc4e..7ee07cc66af 100644
--- a/core/l10n/pl.json
+++ b/core/l10n/pl.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Link do zresetowanego hasła, został wysłany na twój adres e-mail. Jeśli nie dostałeś wiadomości w rozsądnym czasie, sprawdź folder ze spamem.<br> Jeśli nie ma wiadomości w tym folderze, skontaktuj się ze swoim administratorem.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Twoje pliki są zaszyfrowane. Jeśli nie włączyłeś klucza odzyskiwania, nie będzie możliwości odszyfrowania tych plików po zresetowaniu hasła.<br>Jeśli nie jesteś pewien co zrobić, skontaktuj się ze swoim administratorem, zanim bedziesz kontynuował. <br/> Czy chcesz kontynuować?\n ",
"I know what I'm doing" : "Wiem co robię",
- "Reset password" : "Zresetuj hasło",
"Password can not be changed. Please contact your administrator." : "Hasło nie może zostać zmienione. Skontaktuj się z administratorem.",
"No" : "Nie",
"Yes" : "Tak",
@@ -117,13 +116,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Nie mogę wysłać maila resetującego. Sprawdź czy nazwa użytkownika lub adres email jest poprawny. Skontaktuj się z administratorem.",
"%s password reset" : "%s reset hasła",
"Use the following link to reset your password: {link}" : "Użyj tego odnośnika by zresetować hasło: {link}",
- "You will receive a link to reset your password via Email." : "Odnośnik służący do resetowania hasła zostanie wysłany na adres e-mail.",
- "Username" : "Nazwa użytkownika",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Pliki są szyfrowane. Jeśli nie włączono klucza odzyskiwania, nie będzie możliwe odzyskać dane z powrotem po zresetowaniu hasła. Jeśli nie masz pewności, co zrobić, prosimy o kontakt z administratorem, przed kontynuowaniem. Czy chcesz kontynuować?",
- "Yes, I really want to reset my password now" : "Tak, naprawdę chcę zresetować hasło teraz",
- "Reset" : "Resetuj",
"New password" : "Nowe hasło",
"New Password" : "Nowe hasło",
+ "Reset password" : "Zresetuj hasło",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nie jest wspierany i %s nie będzie działać poprawnie na tej platformie. Używasz na własne ryzyko!",
"For the best results, please consider using a GNU/Linux server instead." : "Aby uzyskać najlepsze rezultaty, rozważ w to miejsce użycie serwera GNU/Linux.",
"Personal" : "Osobiste",
@@ -162,6 +157,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Twój katalog danych i pliki są prawdopodobnie dostępne z poziomu internetu, ponieważ plik .htaccess nie działa.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Aby uzyskać informacje jak poprawnie skonfigurować swój serwer, zapoznaj się z <a href=\"%s\" target=\"_blank\">dokumentacją</a>.",
"Create an <strong>admin account</strong>" : "Utwórz <strong>konta administratora</strong>",
+ "Username" : "Nazwa użytkownika",
"Password" : "Hasło",
"Storage & database" : "Zasoby dysku & baza danych",
"Data folder" : "Katalog danych",
diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js
index 041159ce172..e8f95ffb885 100644
--- a/core/l10n/pt_BR.js
+++ b/core/l10n/pt_BR.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "O link para redefinir sua senha foi enviada para o seu e-mail. Se você não recebê-lo dentro de um período razoável de tempo, verifique suas pastas de spam/lixo. <br> Se ele não estiver lá, pergunte ao administrador do local.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Seus arquivos são criptografados. Se você não ativou a chave de recuperação, não haverá maneira de obter seus dados de volta após a sua senha ser redefinida. <br/> Se você não tem certeza do que fazer, por favor, contate o administrador antes de continuar. <br/> Você realmente deseja continuar?",
"I know what I'm doing" : "Eu sei o que estou fazendo",
- "Reset password" : "Redefinir senha",
"Password can not be changed. Please contact your administrator." : "A senha não pode ser alterada. Por favor, contate o administrador.",
"No" : "Não",
"Yes" : "Sim",
@@ -114,7 +113,7 @@ OC.L10N.register(
"Hello world!" : "Alô mundo!",
"sunny" : "ensolarado",
"Hello {name}, the weather is {weather}" : "Olá {name}, o clima está {weather}",
- "_download %n file_::_download %n files_" : ["",""],
+ "_download %n file_::_download %n files_" : ["baixar %n arquivo","baixar %n arquivos"],
"Updating {productName} to version {version}, this may take a while." : "Atualizando {productName} para a versão {version}, isso pode demorar um pouco.",
"Please reload the page." : "Por favor recarregue a página",
"The update was unsuccessful." : "A atualização não foi bem sucedida.",
@@ -124,13 +123,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Não foi possível enviar e-mail de redefinição, porque não há nenhum endereço de e-mail para este nome de usuário. Por favor, contate o administrador.",
"%s password reset" : "%s redefinir senha",
"Use the following link to reset your password: {link}" : "Use o seguinte link para redefinir sua senha: {link}",
- "You will receive a link to reset your password via Email." : "Você receberá um link para redefinir sua senha por e-mail.",
- "Username" : "Nome de usuário",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Seus arquivos estão encriptados. Se você não habilitou a chave de recuperação, não haverá maneira de recuperar seus dados após criar uma nova senha. Se você não tem certeza do que fazer, por favor entre em contato com o administrador antes de continuar. Tem certeza que realmente quer continuar?",
- "Yes, I really want to reset my password now" : "Sim, realmente quero criar uma nova senha.",
- "Reset" : "Resetar",
"New password" : "Nova senha",
"New Password" : "Nova Senha",
+ "Reset password" : "Redefinir senha",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X não é suportado e %s não funcionará corretamente nesta plataforma. Use-o por sua conta e risco!",
"For the best results, please consider using a GNU/Linux server instead." : "Para obter os melhores resultados, por favor, considere o uso de um servidor GNU/Linux em seu lugar.",
"Personal" : "Pessoal",
@@ -170,6 +165,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Seu diretório de dados e arquivos são provavelmente acessíveis pela internet, porque o .htaccess não funciona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para obter informações sobre como configurar corretamente o seu servidor, consulte a <a href=\"%s\" target=\"_blank\">documentação</a>.",
"Create an <strong>admin account</strong>" : "Criar uma <strong>conta de administrador</strong>",
+ "Username" : "Nome de usuário",
"Password" : "Senha",
"Storage & database" : "Armazenamento & banco de dados",
"Data folder" : "Pasta de dados",
diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json
index 05be1f4cb1c..d3082d8c06d 100644
--- a/core/l10n/pt_BR.json
+++ b/core/l10n/pt_BR.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "O link para redefinir sua senha foi enviada para o seu e-mail. Se você não recebê-lo dentro de um período razoável de tempo, verifique suas pastas de spam/lixo. <br> Se ele não estiver lá, pergunte ao administrador do local.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Seus arquivos são criptografados. Se você não ativou a chave de recuperação, não haverá maneira de obter seus dados de volta após a sua senha ser redefinida. <br/> Se você não tem certeza do que fazer, por favor, contate o administrador antes de continuar. <br/> Você realmente deseja continuar?",
"I know what I'm doing" : "Eu sei o que estou fazendo",
- "Reset password" : "Redefinir senha",
"Password can not be changed. Please contact your administrator." : "A senha não pode ser alterada. Por favor, contate o administrador.",
"No" : "Não",
"Yes" : "Sim",
@@ -112,7 +111,7 @@
"Hello world!" : "Alô mundo!",
"sunny" : "ensolarado",
"Hello {name}, the weather is {weather}" : "Olá {name}, o clima está {weather}",
- "_download %n file_::_download %n files_" : ["",""],
+ "_download %n file_::_download %n files_" : ["baixar %n arquivo","baixar %n arquivos"],
"Updating {productName} to version {version}, this may take a while." : "Atualizando {productName} para a versão {version}, isso pode demorar um pouco.",
"Please reload the page." : "Por favor recarregue a página",
"The update was unsuccessful." : "A atualização não foi bem sucedida.",
@@ -122,13 +121,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Não foi possível enviar e-mail de redefinição, porque não há nenhum endereço de e-mail para este nome de usuário. Por favor, contate o administrador.",
"%s password reset" : "%s redefinir senha",
"Use the following link to reset your password: {link}" : "Use o seguinte link para redefinir sua senha: {link}",
- "You will receive a link to reset your password via Email." : "Você receberá um link para redefinir sua senha por e-mail.",
- "Username" : "Nome de usuário",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Seus arquivos estão encriptados. Se você não habilitou a chave de recuperação, não haverá maneira de recuperar seus dados após criar uma nova senha. Se você não tem certeza do que fazer, por favor entre em contato com o administrador antes de continuar. Tem certeza que realmente quer continuar?",
- "Yes, I really want to reset my password now" : "Sim, realmente quero criar uma nova senha.",
- "Reset" : "Resetar",
"New password" : "Nova senha",
"New Password" : "Nova Senha",
+ "Reset password" : "Redefinir senha",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X não é suportado e %s não funcionará corretamente nesta plataforma. Use-o por sua conta e risco!",
"For the best results, please consider using a GNU/Linux server instead." : "Para obter os melhores resultados, por favor, considere o uso de um servidor GNU/Linux em seu lugar.",
"Personal" : "Pessoal",
@@ -168,6 +163,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Seu diretório de dados e arquivos são provavelmente acessíveis pela internet, porque o .htaccess não funciona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para obter informações sobre como configurar corretamente o seu servidor, consulte a <a href=\"%s\" target=\"_blank\">documentação</a>.",
"Create an <strong>admin account</strong>" : "Criar uma <strong>conta de administrador</strong>",
+ "Username" : "Nome de usuário",
"Password" : "Senha",
"Storage & database" : "Armazenamento & banco de dados",
"Data folder" : "Pasta de dados",
diff --git a/core/l10n/pt_PT.js b/core/l10n/pt_PT.js
index bc84fc7bbd9..09e688a0eb8 100644
--- a/core/l10n/pt_PT.js
+++ b/core/l10n/pt_PT.js
@@ -1,19 +1,19 @@
OC.L10N.register(
"core",
{
- "Couldn't send mail to following users: %s " : "Não conseguiu enviar correio aos seguintes utilizadores: %s",
- "Turned on maintenance mode" : "Activado o modo de manutenção",
- "Turned off maintenance mode" : "Desactivado o modo de manutenção",
- "Updated database" : "Base de dados actualizada",
+ "Couldn't send mail to following users: %s " : "Não foi possível enviar a mensagem para os seguintes utilizadores: %s",
+ "Turned on maintenance mode" : "Ativado o modo de manutenção",
+ "Turned off maintenance mode" : "Desativado o modo de manutenção",
+ "Updated database" : "Base de dados atualizada",
"Checked database schema update" : "Atualização do esquema da base de dados verificada.",
"Checked database schema update for apps" : "Atualização do esquema da base de dados verificada.",
- "Updated \"%s\" to %s" : "Actualizado \"%s\" para %s",
+ "Updated \"%s\" to %s" : "Atualizado \"%s\" para %s",
"Disabled incompatible apps: %s" : "Apps incompatíveis desativadas: %s",
- "No image or file provided" : "Não foi selecionado nenhum ficheiro para importar",
- "Unknown filetype" : "Ficheiro desconhecido",
+ "No image or file provided" : "Não foi fornecido nenhum ficheiro ou imagem",
+ "Unknown filetype" : "Tipo de ficheiro desconhecido",
"Invalid image" : "Imagem inválida",
- "No temporary profile picture available, try again" : "Foto temporária de perfil indisponível, tente novamente",
- "No crop data provided" : "Sem dados de corte fornecidos",
+ "No temporary profile picture available, try again" : "Fotografia temporária do perfil indisponível, tente novamente",
+ "No crop data provided" : "Não foram fornecidos dados de recorte",
"Sunday" : "Domingo",
"Monday" : "Segunda",
"Tuesday" : "Terça",
@@ -33,36 +33,35 @@ OC.L10N.register(
"October" : "Outubro",
"November" : "Novembro",
"December" : "Dezembro",
- "Settings" : "Configurações",
- "Saving..." : "A guardar...",
- "Couldn't send reset email. Please contact your administrator." : "Ocorreu um problema com o envio do e-mail, por favor contactar o administrador.",
+ "Settings" : "Definições",
+ "Saving..." : "A guardar ...",
+ "Couldn't send reset email. Please contact your administrator." : "Não foi possível enviar o e-mail de reposição. Por favor, contacte o administrador.",
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "O link para fazer reset à sua password foi enviado para o seu e-mail. <br> Se não o recebeu dentro um espaço de tempo aceitável, por favor verifique a sua pasta de SPAM.<br> Se não o encontrar, por favor contacte o seu administrador.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Os seus ficheiros estão encriptados. Se não activou a chave de recuperação, não vai ser possível recuperar os seus dados no caso da sua password ser reinicializada. Se não tem a certeza do que precisa de fazer, por favor contacte o seu administrador antes de continuar. Tem a certeza que quer continuar?",
- "I know what I'm doing" : "Tenho a certeza",
- "Reset password" : "Repor password",
- "Password can not be changed. Please contact your administrator." : "A password não pode ser alterada. Contacte o seu administrador.",
+ "I know what I'm doing" : "Eu sei o que eu estou a fazer",
+ "Password can not be changed. Please contact your administrator." : "A palavra-passe não pode ser alterada. Por favor, contacte o seu administrador.",
"No" : "Não",
"Yes" : "Sim",
- "Choose" : "Escolha",
- "Error loading file picker template: {error}" : "Erro ao carregar o modelo de selecionador de ficheiro: {error}",
+ "Choose" : "Escolher",
+ "Error loading file picker template: {error}" : "Ocorreu um erro ao carregar o modelo do selecionador de ficheiro: {error}",
"Ok" : "Ok",
- "Error loading message template: {error}" : "Erro ao carregar o template: {error}",
+ "Error loading message template: {error}" : "Ocorreu um erro ao carregar o modelo: {error}",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} conflicto de ficheiro","{count} conflitos de ficheiro"],
"One file conflict" : "Um conflito no ficheiro",
"New Files" : "Ficheiros Novos",
- "Already existing files" : "Ficheiro já existente",
+ "Already existing files" : "Ficheiros já existentes",
"Which files do you want to keep?" : "Quais os ficheiros que pretende manter?",
"If you select both versions, the copied file will have a number added to its name." : "Se escolher ambas as versões, o ficheiro copiado irá ter um número adicionado ao seu nome.",
"Cancel" : "Cancelar",
"Continue" : "Continuar",
"(all selected)" : "(todos seleccionados)",
"({count} selected)" : "({count} seleccionados)",
- "Error loading file exists template" : "Erro ao carregar o modelo de existências do ficheiro",
- "Very weak password" : "Password muito fraca",
- "Weak password" : "Password fraca",
- "So-so password" : "Password aceitável",
- "Good password" : "Password Forte",
- "Strong password" : "Password muito forte",
+ "Error loading file exists template" : "Ocorreu um erro ao carregar o ficheiro do modelo existente",
+ "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",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "O seu servidor web não está configurado correctamente para autorizar sincronização de ficheiros, pois o interface WebDAV parece estar com problemas.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Este servidor ownCloud não tem uma ligação de internet a funcionar. Isto significa que algumas funcionalidades como o acesso a locais externos (dropbox, gdrive, etc), notificações sobre actualizções, ou a instalação de aplicações não irá funcionar. Sugerimos que active uma ligação à internet se pretender obter todas as funcionalidades do ownCloud.",
"Error occurred while checking server setup" : "Ocorreu um erro durante a verificação da configuração do servidor",
@@ -76,28 +75,28 @@ OC.L10N.register(
"Shared with you and the group {group} by {owner}" : "Partilhado consigo e com o grupo {group} por {owner}",
"Shared with you by {owner}" : "Partilhado consigo por {owner}",
"Share with user or group …" : "Partilhar com utilizador ou grupo...",
- "Share link" : "Partilhar o link",
+ "Share link" : "Compartilhar hiperligação",
"The public link will expire no later than {days} days after it is created" : "O link público expira, o mais tardar {days} dias após sua criação",
- "Password protect" : "Proteger com palavra-passe",
- "Choose a password for the public link" : "Defina a palavra-passe para o link público",
+ "Password protect" : "Proteger com Palavra-passe",
+ "Choose a password for the public link" : "Defina a palavra-passe para a hiperligação pública",
"Allow Public Upload" : "Permitir Envios Públicos",
"Email link to person" : "Enviar o link por e-mail",
"Send" : "Enviar",
"Set expiration date" : "Especificar data de expiração",
"Expiration date" : "Data de expiração",
- "Adding user..." : "A adicionar utilizador...",
+ "Adding user..." : "A adicionar o utilizador ...",
"group" : "grupo",
"Resharing is not allowed" : "Não é permitido partilhar de novo",
"Shared in {item} with {user}" : "Partilhado em {item} com {user}",
- "Unshare" : "Deixar de partilhar",
- "notify by email" : "Notificar por email",
+ "Unshare" : "Cancelar partilha",
+ "notify by email" : "Notificar por correio eletrónico",
"can share" : "pode partilhar",
"can edit" : "pode editar",
- "access control" : "Controlo de acesso",
+ "access control" : "controlo de acesso",
"create" : "criar",
- "update" : "actualizar",
+ "update" : "atualizar",
"delete" : "apagar",
- "Password protected" : "Protegido com palavra-passe",
+ "Password protected" : "Protegido com Palavra-passe",
"Error unsetting expiration date" : "Erro ao retirar a data de expiração",
"Error setting expiration date" : "Erro ao aplicar a data de expiração",
"Sending ..." : "A Enviar...",
@@ -112,25 +111,21 @@ OC.L10N.register(
"No tags selected for deletion." : "Não foram escolhidas etiquetas para apagar.",
"unknown text" : "texto desconhecido",
"Hello world!" : "Olá mundo!",
- "sunny" : "solarengo",
+ "sunny" : "soalheiro",
"Hello {name}, the weather is {weather}" : "Olá {name}, o tempo está {weather}",
- "_download %n file_::_download %n files_" : ["download %n ficheiro","download %n ficheiros"],
+ "_download %n file_::_download %n files_" : ["transferir %n ficheiro","transferir %n ficheiros"],
"Updating {productName} to version {version}, this may take a while." : "A atualizar {productName} para a versão {version}, isto poderá demorar algum tempo.",
"Please reload the page." : "Por favor recarregue a página.",
"The update was unsuccessful." : "Não foi possível atualizar.",
"The update was successful. Redirecting you to ownCloud now." : "A actualização foi concluída com sucesso. Vai ser redireccionado para o ownCloud agora.",
- "Couldn't reset password because the token is invalid" : "É impossível efetuar reset à password. ",
+ "Couldn't reset password because the token is invalid" : "Não foi possível repor a palavra-passe porque a senha é inválida",
"Couldn't send reset email. Please make sure your username is correct." : "Ocorreu um problema com o envio do e-mail, por favor confirme o seu utilizador.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Ocorreu um problema com o envio do e-mail, por favor contacte o administrador.",
- "%s password reset" : "%s reposição da password",
- "Use the following link to reset your password: {link}" : "Use o seguinte endereço para repor a sua password: {link}",
- "You will receive a link to reset your password via Email." : "Vai receber um endereço para repor a sua password",
- "Username" : "Nome de utilizador",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Os seus ficheiros estão encriptados. Se não activou a chave de recuperação, não vai ser possível recuperar os seus dados no caso da sua password ser reinicializada. Se não tem a certeza do que precisa de fazer, por favor contacte o seu administrador antes de continuar. Tem a certeza que quer continuar?",
- "Yes, I really want to reset my password now" : "Sim, tenho a certeza que pretendo redefinir a minha palavra-passe agora.",
- "Reset" : "Repor",
+ "%s password reset" : "%s reposição da palavra-passe",
+ "Use the following link to reset your password: {link}" : "Utilize a seguinte hiperligação para repor a sua palavra-passe: {link}",
"New password" : "Nova palavra-chave",
- "New Password" : "Nova password",
+ "New Password" : "Nova palavra-passe",
+ "Reset password" : "Repor palavra-passe",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Esta plataforma não suporta o sistema operativo Mac OS X e o %s poderá não funcionar correctamente. Utilize por sua conta e risco.",
"For the best results, please consider using a GNU/Linux server instead." : "Para um melhor resultado, utilize antes o servidor GNU/Linux.",
"Personal" : "Pessoal",
@@ -170,13 +165,14 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "A pasta de dados do ownCloud e os respectivos ficheiros, estarão provavelmente acessíveis a partir da internet, pois o ficheiros .htaccess não funciona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para obter informações de como configurar correctamente o servidor, veja em: <a href=\"%s\" target=\"_blank\">documentação</a>.",
"Create an <strong>admin account</strong>" : "Criar uma <strong>conta administrativa</strong>",
- "Password" : "Password",
+ "Username" : "Nome de utilizador",
+ "Password" : "Palavra-passe",
"Storage & database" : "Armazenamento e base de dados",
"Data folder" : "Pasta de dados",
"Configure the database" : "Configure a base de dados",
"Only %s is available." : "Apenas %s está disponível.",
"Database user" : "Utilizador da base de dados",
- "Database password" : "Password da base de dados",
+ "Database password" : "Palavra-passe da base de dados",
"Database name" : "Nome da base de dados",
"Database tablespace" : "Tablespace da base de dados",
"Database host" : "Anfitrião da base de dados",
@@ -188,7 +184,7 @@ OC.L10N.register(
"Log out" : "Sair",
"Server side authentication failed!" : "Autenticação do lado do servidor falhou!",
"Please contact your administrator." : "Por favor contacte o administrador.",
- "Forgot your password? Reset it!" : "Esqueceu-se da password? Recupere-a!",
+ "Forgot your password? Reset it!" : "Esqueceu-se da sua palavra-passe? Recupere-a!",
"remember" : "lembrar",
"Log in" : "Entrar",
"Alternative Logins" : "Contas de acesso alternativas",
diff --git a/core/l10n/pt_PT.json b/core/l10n/pt_PT.json
index f61e3c076d0..8789b6e13d8 100644
--- a/core/l10n/pt_PT.json
+++ b/core/l10n/pt_PT.json
@@ -1,17 +1,17 @@
{ "translations": {
- "Couldn't send mail to following users: %s " : "Não conseguiu enviar correio aos seguintes utilizadores: %s",
- "Turned on maintenance mode" : "Activado o modo de manutenção",
- "Turned off maintenance mode" : "Desactivado o modo de manutenção",
- "Updated database" : "Base de dados actualizada",
+ "Couldn't send mail to following users: %s " : "Não foi possível enviar a mensagem para os seguintes utilizadores: %s",
+ "Turned on maintenance mode" : "Ativado o modo de manutenção",
+ "Turned off maintenance mode" : "Desativado o modo de manutenção",
+ "Updated database" : "Base de dados atualizada",
"Checked database schema update" : "Atualização do esquema da base de dados verificada.",
"Checked database schema update for apps" : "Atualização do esquema da base de dados verificada.",
- "Updated \"%s\" to %s" : "Actualizado \"%s\" para %s",
+ "Updated \"%s\" to %s" : "Atualizado \"%s\" para %s",
"Disabled incompatible apps: %s" : "Apps incompatíveis desativadas: %s",
- "No image or file provided" : "Não foi selecionado nenhum ficheiro para importar",
- "Unknown filetype" : "Ficheiro desconhecido",
+ "No image or file provided" : "Não foi fornecido nenhum ficheiro ou imagem",
+ "Unknown filetype" : "Tipo de ficheiro desconhecido",
"Invalid image" : "Imagem inválida",
- "No temporary profile picture available, try again" : "Foto temporária de perfil indisponível, tente novamente",
- "No crop data provided" : "Sem dados de corte fornecidos",
+ "No temporary profile picture available, try again" : "Fotografia temporária do perfil indisponível, tente novamente",
+ "No crop data provided" : "Não foram fornecidos dados de recorte",
"Sunday" : "Domingo",
"Monday" : "Segunda",
"Tuesday" : "Terça",
@@ -31,36 +31,35 @@
"October" : "Outubro",
"November" : "Novembro",
"December" : "Dezembro",
- "Settings" : "Configurações",
- "Saving..." : "A guardar...",
- "Couldn't send reset email. Please contact your administrator." : "Ocorreu um problema com o envio do e-mail, por favor contactar o administrador.",
+ "Settings" : "Definições",
+ "Saving..." : "A guardar ...",
+ "Couldn't send reset email. Please contact your administrator." : "Não foi possível enviar o e-mail de reposição. Por favor, contacte o administrador.",
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "O link para fazer reset à sua password foi enviado para o seu e-mail. <br> Se não o recebeu dentro um espaço de tempo aceitável, por favor verifique a sua pasta de SPAM.<br> Se não o encontrar, por favor contacte o seu administrador.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Os seus ficheiros estão encriptados. Se não activou a chave de recuperação, não vai ser possível recuperar os seus dados no caso da sua password ser reinicializada. Se não tem a certeza do que precisa de fazer, por favor contacte o seu administrador antes de continuar. Tem a certeza que quer continuar?",
- "I know what I'm doing" : "Tenho a certeza",
- "Reset password" : "Repor password",
- "Password can not be changed. Please contact your administrator." : "A password não pode ser alterada. Contacte o seu administrador.",
+ "I know what I'm doing" : "Eu sei o que eu estou a fazer",
+ "Password can not be changed. Please contact your administrator." : "A palavra-passe não pode ser alterada. Por favor, contacte o seu administrador.",
"No" : "Não",
"Yes" : "Sim",
- "Choose" : "Escolha",
- "Error loading file picker template: {error}" : "Erro ao carregar o modelo de selecionador de ficheiro: {error}",
+ "Choose" : "Escolher",
+ "Error loading file picker template: {error}" : "Ocorreu um erro ao carregar o modelo do selecionador de ficheiro: {error}",
"Ok" : "Ok",
- "Error loading message template: {error}" : "Erro ao carregar o template: {error}",
+ "Error loading message template: {error}" : "Ocorreu um erro ao carregar o modelo: {error}",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} conflicto de ficheiro","{count} conflitos de ficheiro"],
"One file conflict" : "Um conflito no ficheiro",
"New Files" : "Ficheiros Novos",
- "Already existing files" : "Ficheiro já existente",
+ "Already existing files" : "Ficheiros já existentes",
"Which files do you want to keep?" : "Quais os ficheiros que pretende manter?",
"If you select both versions, the copied file will have a number added to its name." : "Se escolher ambas as versões, o ficheiro copiado irá ter um número adicionado ao seu nome.",
"Cancel" : "Cancelar",
"Continue" : "Continuar",
"(all selected)" : "(todos seleccionados)",
"({count} selected)" : "({count} seleccionados)",
- "Error loading file exists template" : "Erro ao carregar o modelo de existências do ficheiro",
- "Very weak password" : "Password muito fraca",
- "Weak password" : "Password fraca",
- "So-so password" : "Password aceitável",
- "Good password" : "Password Forte",
- "Strong password" : "Password muito forte",
+ "Error loading file exists template" : "Ocorreu um erro ao carregar o ficheiro do modelo existente",
+ "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",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "O seu servidor web não está configurado correctamente para autorizar sincronização de ficheiros, pois o interface WebDAV parece estar com problemas.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Este servidor ownCloud não tem uma ligação de internet a funcionar. Isto significa que algumas funcionalidades como o acesso a locais externos (dropbox, gdrive, etc), notificações sobre actualizções, ou a instalação de aplicações não irá funcionar. Sugerimos que active uma ligação à internet se pretender obter todas as funcionalidades do ownCloud.",
"Error occurred while checking server setup" : "Ocorreu um erro durante a verificação da configuração do servidor",
@@ -74,28 +73,28 @@
"Shared with you and the group {group} by {owner}" : "Partilhado consigo e com o grupo {group} por {owner}",
"Shared with you by {owner}" : "Partilhado consigo por {owner}",
"Share with user or group …" : "Partilhar com utilizador ou grupo...",
- "Share link" : "Partilhar o link",
+ "Share link" : "Compartilhar hiperligação",
"The public link will expire no later than {days} days after it is created" : "O link público expira, o mais tardar {days} dias após sua criação",
- "Password protect" : "Proteger com palavra-passe",
- "Choose a password for the public link" : "Defina a palavra-passe para o link público",
+ "Password protect" : "Proteger com Palavra-passe",
+ "Choose a password for the public link" : "Defina a palavra-passe para a hiperligação pública",
"Allow Public Upload" : "Permitir Envios Públicos",
"Email link to person" : "Enviar o link por e-mail",
"Send" : "Enviar",
"Set expiration date" : "Especificar data de expiração",
"Expiration date" : "Data de expiração",
- "Adding user..." : "A adicionar utilizador...",
+ "Adding user..." : "A adicionar o utilizador ...",
"group" : "grupo",
"Resharing is not allowed" : "Não é permitido partilhar de novo",
"Shared in {item} with {user}" : "Partilhado em {item} com {user}",
- "Unshare" : "Deixar de partilhar",
- "notify by email" : "Notificar por email",
+ "Unshare" : "Cancelar partilha",
+ "notify by email" : "Notificar por correio eletrónico",
"can share" : "pode partilhar",
"can edit" : "pode editar",
- "access control" : "Controlo de acesso",
+ "access control" : "controlo de acesso",
"create" : "criar",
- "update" : "actualizar",
+ "update" : "atualizar",
"delete" : "apagar",
- "Password protected" : "Protegido com palavra-passe",
+ "Password protected" : "Protegido com Palavra-passe",
"Error unsetting expiration date" : "Erro ao retirar a data de expiração",
"Error setting expiration date" : "Erro ao aplicar a data de expiração",
"Sending ..." : "A Enviar...",
@@ -110,25 +109,21 @@
"No tags selected for deletion." : "Não foram escolhidas etiquetas para apagar.",
"unknown text" : "texto desconhecido",
"Hello world!" : "Olá mundo!",
- "sunny" : "solarengo",
+ "sunny" : "soalheiro",
"Hello {name}, the weather is {weather}" : "Olá {name}, o tempo está {weather}",
- "_download %n file_::_download %n files_" : ["download %n ficheiro","download %n ficheiros"],
+ "_download %n file_::_download %n files_" : ["transferir %n ficheiro","transferir %n ficheiros"],
"Updating {productName} to version {version}, this may take a while." : "A atualizar {productName} para a versão {version}, isto poderá demorar algum tempo.",
"Please reload the page." : "Por favor recarregue a página.",
"The update was unsuccessful." : "Não foi possível atualizar.",
"The update was successful. Redirecting you to ownCloud now." : "A actualização foi concluída com sucesso. Vai ser redireccionado para o ownCloud agora.",
- "Couldn't reset password because the token is invalid" : "É impossível efetuar reset à password. ",
+ "Couldn't reset password because the token is invalid" : "Não foi possível repor a palavra-passe porque a senha é inválida",
"Couldn't send reset email. Please make sure your username is correct." : "Ocorreu um problema com o envio do e-mail, por favor confirme o seu utilizador.",
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Ocorreu um problema com o envio do e-mail, por favor contacte o administrador.",
- "%s password reset" : "%s reposição da password",
- "Use the following link to reset your password: {link}" : "Use o seguinte endereço para repor a sua password: {link}",
- "You will receive a link to reset your password via Email." : "Vai receber um endereço para repor a sua password",
- "Username" : "Nome de utilizador",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Os seus ficheiros estão encriptados. Se não activou a chave de recuperação, não vai ser possível recuperar os seus dados no caso da sua password ser reinicializada. Se não tem a certeza do que precisa de fazer, por favor contacte o seu administrador antes de continuar. Tem a certeza que quer continuar?",
- "Yes, I really want to reset my password now" : "Sim, tenho a certeza que pretendo redefinir a minha palavra-passe agora.",
- "Reset" : "Repor",
+ "%s password reset" : "%s reposição da palavra-passe",
+ "Use the following link to reset your password: {link}" : "Utilize a seguinte hiperligação para repor a sua palavra-passe: {link}",
"New password" : "Nova palavra-chave",
- "New Password" : "Nova password",
+ "New Password" : "Nova palavra-passe",
+ "Reset password" : "Repor palavra-passe",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Esta plataforma não suporta o sistema operativo Mac OS X e o %s poderá não funcionar correctamente. Utilize por sua conta e risco.",
"For the best results, please consider using a GNU/Linux server instead." : "Para um melhor resultado, utilize antes o servidor GNU/Linux.",
"Personal" : "Pessoal",
@@ -168,13 +163,14 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "A pasta de dados do ownCloud e os respectivos ficheiros, estarão provavelmente acessíveis a partir da internet, pois o ficheiros .htaccess não funciona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para obter informações de como configurar correctamente o servidor, veja em: <a href=\"%s\" target=\"_blank\">documentação</a>.",
"Create an <strong>admin account</strong>" : "Criar uma <strong>conta administrativa</strong>",
- "Password" : "Password",
+ "Username" : "Nome de utilizador",
+ "Password" : "Palavra-passe",
"Storage & database" : "Armazenamento e base de dados",
"Data folder" : "Pasta de dados",
"Configure the database" : "Configure a base de dados",
"Only %s is available." : "Apenas %s está disponível.",
"Database user" : "Utilizador da base de dados",
- "Database password" : "Password da base de dados",
+ "Database password" : "Palavra-passe da base de dados",
"Database name" : "Nome da base de dados",
"Database tablespace" : "Tablespace da base de dados",
"Database host" : "Anfitrião da base de dados",
@@ -186,7 +182,7 @@
"Log out" : "Sair",
"Server side authentication failed!" : "Autenticação do lado do servidor falhou!",
"Please contact your administrator." : "Por favor contacte o administrador.",
- "Forgot your password? Reset it!" : "Esqueceu-se da password? Recupere-a!",
+ "Forgot your password? Reset it!" : "Esqueceu-se da sua palavra-passe? Recupere-a!",
"remember" : "lembrar",
"Log in" : "Entrar",
"Alternative Logins" : "Contas de acesso alternativas",
diff --git a/core/l10n/ro.js b/core/l10n/ro.js
index 8c48c440460..7970ecf18ae 100644
--- a/core/l10n/ro.js
+++ b/core/l10n/ro.js
@@ -31,7 +31,6 @@ OC.L10N.register(
"Settings" : "Setări",
"Saving..." : "Se salvează...",
"I know what I'm doing" : "Eu știu ce fac",
- "Reset password" : "Resetează parola",
"Password can not be changed. Please contact your administrator." : "Parola nu poate fi modificata. Vă rugăm să contactați administratorul dvs.",
"No" : "Nu",
"Yes" : "Da",
@@ -94,13 +93,9 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "Actualizare reușită. Ești redirecționat către ownCloud.",
"%s password reset" : "%s resetare parola",
"Use the following link to reset your password: {link}" : "Folosește următorul link pentru a reseta parola: {link}",
- "You will receive a link to reset your password via Email." : "Vei primi un mesaj prin care vei putea reseta parola via email.",
- "Username" : "Nume utilizator",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Fișierele tale sunt criptate. Dacă nu ai activat o cheie de recuperare, nu va mai exista nici o metodă prin care să îți recuperezi datele după resetarea parole. Dacă nu ești sigur în privința la ce ai de făcut, contactează un administrator înainte să continuii. Chiar vrei să continui?",
- "Yes, I really want to reset my password now" : "Da, eu chiar doresc să îmi resetez parola acum",
- "Reset" : "Resetare",
"New password" : "Noua parolă",
"New Password" : "Noua parolă",
+ "Reset password" : "Resetează parola",
"Personal" : "Personal",
"Users" : "Utilizatori",
"Apps" : "Aplicații",
@@ -114,6 +109,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Directorul tău de date și fișiere sunt probabil accesibile de pe Internet, deoarece fișierul .htaccess nu funcționează.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pentru informații despre cum să configurezi serverul, vezi <a href=\"%s\" target=\"_blank\">documentația</a>.",
"Create an <strong>admin account</strong>" : "Crează un <strong>cont de administrator</strong>",
+ "Username" : "Nume utilizator",
"Password" : "Parolă",
"Storage & database" : "Stocare și baza de date",
"Data folder" : "Director date",
diff --git a/core/l10n/ro.json b/core/l10n/ro.json
index 137a0bc7a52..037574515eb 100644
--- a/core/l10n/ro.json
+++ b/core/l10n/ro.json
@@ -29,7 +29,6 @@
"Settings" : "Setări",
"Saving..." : "Se salvează...",
"I know what I'm doing" : "Eu știu ce fac",
- "Reset password" : "Resetează parola",
"Password can not be changed. Please contact your administrator." : "Parola nu poate fi modificata. Vă rugăm să contactați administratorul dvs.",
"No" : "Nu",
"Yes" : "Da",
@@ -92,13 +91,9 @@
"The update was successful. Redirecting you to ownCloud now." : "Actualizare reușită. Ești redirecționat către ownCloud.",
"%s password reset" : "%s resetare parola",
"Use the following link to reset your password: {link}" : "Folosește următorul link pentru a reseta parola: {link}",
- "You will receive a link to reset your password via Email." : "Vei primi un mesaj prin care vei putea reseta parola via email.",
- "Username" : "Nume utilizator",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Fișierele tale sunt criptate. Dacă nu ai activat o cheie de recuperare, nu va mai exista nici o metodă prin care să îți recuperezi datele după resetarea parole. Dacă nu ești sigur în privința la ce ai de făcut, contactează un administrator înainte să continuii. Chiar vrei să continui?",
- "Yes, I really want to reset my password now" : "Da, eu chiar doresc să îmi resetez parola acum",
- "Reset" : "Resetare",
"New password" : "Noua parolă",
"New Password" : "Noua parolă",
+ "Reset password" : "Resetează parola",
"Personal" : "Personal",
"Users" : "Utilizatori",
"Apps" : "Aplicații",
@@ -112,6 +107,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Directorul tău de date și fișiere sunt probabil accesibile de pe Internet, deoarece fișierul .htaccess nu funcționează.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pentru informații despre cum să configurezi serverul, vezi <a href=\"%s\" target=\"_blank\">documentația</a>.",
"Create an <strong>admin account</strong>" : "Crează un <strong>cont de administrator</strong>",
+ "Username" : "Nume utilizator",
"Password" : "Parolă",
"Storage & database" : "Stocare și baza de date",
"Data folder" : "Director date",
diff --git a/core/l10n/ru.js b/core/l10n/ru.js
index 066be34d07a..858595bab64 100644
--- a/core/l10n/ru.js
+++ b/core/l10n/ru.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Ссылка для восстановления пароля была отправлена на вашу почту. Если вы не получили её, проверьте папку спама.<br>Если там письма со ссылкой нет, то обратитесь к локальному администратору.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваши файлы зашифрованы. Если вы не включили ключ восстановления, то ваши данные будут недоступны после сброса пароля.<br />Если вы не уверены что делать дальше - обратитесь к локальному администратору.<br />Вытдействительно хотите продолжить?",
"I know what I'm doing" : "Я понимаю, что делаю",
- "Reset password" : "Сбросить пароль",
"Password can not be changed. Please contact your administrator." : "Пароль не может быть изменён. Пожалуйста, свяжитесь с вашим администратором.",
"No" : "Нет",
"Yes" : "Да",
@@ -114,7 +113,7 @@ OC.L10N.register(
"Hello world!" : "Привет мир!",
"sunny" : "солнечно",
"Hello {name}, the weather is {weather}" : "Здравствуйте {name}, погода {weather}",
- "_download %n file_::_download %n files_" : ["","",""],
+ "_download %n file_::_download %n files_" : ["загрузить %n файл","загрузить %n файла","загрузить %n файлов"],
"Updating {productName} to version {version}, this may take a while." : "Обновление {productName} до версии {version}, пожалуйста, подождите.",
"Please reload the page." : "Пожалуйста, перезагрузите страницу.",
"The update was unsuccessful." : "Обновление не удалось.",
@@ -124,13 +123,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Невозможно отправить письмо для сброса пароля, т.к. у вашего аккаунта не прописан адрес почты. Пожалуйста, свяжитесь с администратором.",
"%s password reset" : "%s сброс пароля",
"Use the following link to reset your password: {link}" : "Используйте следующую ссылку чтобы сбросить пароль: {link}",
- "You will receive a link to reset your password via Email." : "На ваш адрес Email выслана ссылка для сброса пароля.",
- "Username" : "Имя пользователя",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Ваши файлы зашифрованы. Если вы не активировали ключ восстановления, то после сброса пароля все ваши данные будут потеряны навсегда. Если вы не знаете что делать, свяжитесь со своим администратором до того как продолжить. Вы действительно хотите продолжить?",
- "Yes, I really want to reset my password now" : "Да, я действительно хочу сбросить свой пароль",
- "Reset" : "Сброс",
"New password" : "Новый пароль",
"New Password" : "Новый пароль",
+ "Reset password" : "Сбросить пароль",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X не поддерживается и %s не будет работать правильно на этой платформе. Используйте ее на свой страх и риск!",
"For the best results, please consider using a GNU/Linux server instead." : "Для достижения наилучших результатов, пожалуйста, рассмотрите возможность использовать взамен GNU/Linux сервер.",
"Personal" : "Личное",
@@ -170,6 +165,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ваша папка с данными и файлы возможно доступны из интернета потому что файл .htaccess не работает.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Для информации, как правильно настроить Ваш сервер, пожалуйста загляните в <a hrev=\"%s\"target=\"blank\">документацию</a>.",
"Create an <strong>admin account</strong>" : "Создать <strong>учётную запись администратора</strong>",
+ "Username" : "Имя пользователя",
"Password" : "Пароль",
"Storage & database" : "Система хранения данных & база данных",
"Data folder" : "Директория с данными",
diff --git a/core/l10n/ru.json b/core/l10n/ru.json
index a65f9b502b0..990a6e9bf9c 100644
--- a/core/l10n/ru.json
+++ b/core/l10n/ru.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Ссылка для восстановления пароля была отправлена на вашу почту. Если вы не получили её, проверьте папку спама.<br>Если там письма со ссылкой нет, то обратитесь к локальному администратору.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваши файлы зашифрованы. Если вы не включили ключ восстановления, то ваши данные будут недоступны после сброса пароля.<br />Если вы не уверены что делать дальше - обратитесь к локальному администратору.<br />Вытдействительно хотите продолжить?",
"I know what I'm doing" : "Я понимаю, что делаю",
- "Reset password" : "Сбросить пароль",
"Password can not be changed. Please contact your administrator." : "Пароль не может быть изменён. Пожалуйста, свяжитесь с вашим администратором.",
"No" : "Нет",
"Yes" : "Да",
@@ -112,7 +111,7 @@
"Hello world!" : "Привет мир!",
"sunny" : "солнечно",
"Hello {name}, the weather is {weather}" : "Здравствуйте {name}, погода {weather}",
- "_download %n file_::_download %n files_" : ["","",""],
+ "_download %n file_::_download %n files_" : ["загрузить %n файл","загрузить %n файла","загрузить %n файлов"],
"Updating {productName} to version {version}, this may take a while." : "Обновление {productName} до версии {version}, пожалуйста, подождите.",
"Please reload the page." : "Пожалуйста, перезагрузите страницу.",
"The update was unsuccessful." : "Обновление не удалось.",
@@ -122,13 +121,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Невозможно отправить письмо для сброса пароля, т.к. у вашего аккаунта не прописан адрес почты. Пожалуйста, свяжитесь с администратором.",
"%s password reset" : "%s сброс пароля",
"Use the following link to reset your password: {link}" : "Используйте следующую ссылку чтобы сбросить пароль: {link}",
- "You will receive a link to reset your password via Email." : "На ваш адрес Email выслана ссылка для сброса пароля.",
- "Username" : "Имя пользователя",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Ваши файлы зашифрованы. Если вы не активировали ключ восстановления, то после сброса пароля все ваши данные будут потеряны навсегда. Если вы не знаете что делать, свяжитесь со своим администратором до того как продолжить. Вы действительно хотите продолжить?",
- "Yes, I really want to reset my password now" : "Да, я действительно хочу сбросить свой пароль",
- "Reset" : "Сброс",
"New password" : "Новый пароль",
"New Password" : "Новый пароль",
+ "Reset password" : "Сбросить пароль",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X не поддерживается и %s не будет работать правильно на этой платформе. Используйте ее на свой страх и риск!",
"For the best results, please consider using a GNU/Linux server instead." : "Для достижения наилучших результатов, пожалуйста, рассмотрите возможность использовать взамен GNU/Linux сервер.",
"Personal" : "Личное",
@@ -168,6 +163,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ваша папка с данными и файлы возможно доступны из интернета потому что файл .htaccess не работает.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Для информации, как правильно настроить Ваш сервер, пожалуйста загляните в <a hrev=\"%s\"target=\"blank\">документацию</a>.",
"Create an <strong>admin account</strong>" : "Создать <strong>учётную запись администратора</strong>",
+ "Username" : "Имя пользователя",
"Password" : "Пароль",
"Storage & database" : "Система хранения данных & база данных",
"Data folder" : "Директория с данными",
diff --git a/core/l10n/si_LK.js b/core/l10n/si_LK.js
index 3a9978aea85..65184265ad6 100644
--- a/core/l10n/si_LK.js
+++ b/core/l10n/si_LK.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"December" : "දෙසැම්බර්",
"Settings" : "සිටුවම්",
"Saving..." : "සුරැකෙමින් පවතී...",
- "Reset password" : "මුරපදය ප්‍රත්‍යාරම්භ කරන්න",
"No" : "එපා",
"Yes" : "ඔව්",
"Choose" : "තෝරන්න",
@@ -48,9 +47,8 @@ OC.L10N.register(
"Delete" : "මකා දමන්න",
"Add" : "එකතු කරන්න",
"_download %n file_::_download %n files_" : ["",""],
- "You will receive a link to reset your password via Email." : "ඔබගේ මුරපදය ප්‍රත්‍යාරම්භ කිරීම සඳහා යොමුව විද්‍යුත් තැපෑලෙන් ලැබෙනු ඇත",
- "Username" : "පරිශීලක නම",
"New password" : "නව මුරපදය",
+ "Reset password" : "මුරපදය ප්‍රත්‍යාරම්භ කරන්න",
"Personal" : "පෞද්ගලික",
"Users" : "පරිශීලකයන්",
"Apps" : "යෙදුම්",
@@ -58,6 +56,7 @@ OC.L10N.register(
"Help" : "උදව්",
"Access forbidden" : "ඇතුල් වීම තහනම්",
"Security Warning" : "ආරක්ෂක නිවේදනයක්",
+ "Username" : "පරිශීලක නම",
"Password" : "මුර පදය",
"Data folder" : "දත්ත ෆෝල්ඩරය",
"Configure the database" : "දත්ත සමුදාය හැඩගැසීම",
diff --git a/core/l10n/si_LK.json b/core/l10n/si_LK.json
index 112e6eb5014..db383dc6ae7 100644
--- a/core/l10n/si_LK.json
+++ b/core/l10n/si_LK.json
@@ -20,7 +20,6 @@
"December" : "දෙසැම්බර්",
"Settings" : "සිටුවම්",
"Saving..." : "සුරැකෙමින් පවතී...",
- "Reset password" : "මුරපදය ප්‍රත්‍යාරම්භ කරන්න",
"No" : "එපා",
"Yes" : "ඔව්",
"Choose" : "තෝරන්න",
@@ -46,9 +45,8 @@
"Delete" : "මකා දමන්න",
"Add" : "එකතු කරන්න",
"_download %n file_::_download %n files_" : ["",""],
- "You will receive a link to reset your password via Email." : "ඔබගේ මුරපදය ප්‍රත්‍යාරම්භ කිරීම සඳහා යොමුව විද්‍යුත් තැපෑලෙන් ලැබෙනු ඇත",
- "Username" : "පරිශීලක නම",
"New password" : "නව මුරපදය",
+ "Reset password" : "මුරපදය ප්‍රත්‍යාරම්භ කරන්න",
"Personal" : "පෞද්ගලික",
"Users" : "පරිශීලකයන්",
"Apps" : "යෙදුම්",
@@ -56,6 +54,7 @@
"Help" : "උදව්",
"Access forbidden" : "ඇතුල් වීම තහනම්",
"Security Warning" : "ආරක්ෂක නිවේදනයක්",
+ "Username" : "පරිශීලක නම",
"Password" : "මුර පදය",
"Data folder" : "දත්ත ෆෝල්ඩරය",
"Configure the database" : "දත්ත සමුදාය හැඩගැසීම",
diff --git a/core/l10n/sk.php b/core/l10n/sk.php
deleted file mode 100644
index 74d6a570c09..00000000000
--- a/core/l10n/sk.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Sunday" => "Nedeľa",
-"Monday" => "Pondelok",
-"Tuesday" => "Utorok",
-"Wednesday" => "Streda",
-"Thursday" => "Štvrtok",
-"Friday" => "Piatok",
-"Saturday" => "Sobota",
-"January" => "Január",
-"February" => "Február",
-"March" => "Marec",
-"April" => "Apríl",
-"May" => "Máj",
-"June" => "Jún",
-"July" => "Júl",
-"August" => "August",
-"September" => "September",
-"October" => "Október",
-"November" => "November",
-"December" => "December",
-"Settings" => "Nastavenia",
-"_{count} file conflict_::_{count} file conflicts_" => array("","",""),
-"Cancel" => "Zrušiť",
-"Share" => "Zdieľať",
-"group" => "skupina",
-"Delete" => "Odstrániť",
-"Personal" => "Osobné"
-);
-$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/core/l10n/sk_SK.js b/core/l10n/sk_SK.js
index 2954e513327..791863c0e48 100644
--- a/core/l10n/sk_SK.js
+++ b/core/l10n/sk_SK.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Odkaz na obnovu hesla bol odoslaný na váš email. Pokiaľ ho neobdržíte v primeranom čase, skontrolujte spam / priečinok nevyžiadanej pošty. <br> Ak tam nie je, kontaktujte svojho administrátora.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Súbory sú zašifrované. Ak ste nepovolili kľúč pre obnovenie, neexistuje žiadny spôsob, ako obnoviť vaše dáta po obnovení vášho hesla. <br /> Ak si nie ste istí čo urobiť, prosím skôr než budete pokračovať, obráťte sa na administrátora. <br /> Naozaj chcete pokračovať?",
"I know what I'm doing" : "Viem, čo robím",
- "Reset password" : "Obnovenie hesla",
"Password can not be changed. Please contact your administrator." : "Heslo nemožno zmeniť. Kontaktujte prosím vášho administrátora.",
"No" : "Nie",
"Yes" : "Áno",
@@ -122,13 +121,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Nemožno poslať email pre obnovu hesla, pretože pre tohoto používateľa nie je uvedená žiadna emailová adresa. Prosím, obráťte sa na administrátora.",
"%s password reset" : "reset hesla %s",
"Use the following link to reset your password: {link}" : "Použite nasledujúci odkaz pre obnovenie vášho hesla: {link}",
- "You will receive a link to reset your password via Email." : "Odkaz pre obnovenie hesla obdržíte emailom.",
- "Username" : "Meno používateľa",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Vaše súbory sú šifrované. Ak nemáte povolený kľúč obnovy, nie je spôsob, ako získať po obnove hesla vaše dáta. Ak nie ste si istí tým, čo robíte, obráťte sa najskôr na administrátora. Naozaj chcete pokračovať?",
- "Yes, I really want to reset my password now" : "Áno, želám si teraz obnoviť svoje heslo",
- "Reset" : "Resetovať",
"New password" : "Nové heslo",
"New Password" : "Nové heslo",
+ "Reset password" : "Obnovenie hesla",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nie je podporovaný a %s nebude správne fungovať na tejto platforme. Použite ho na vlastné riziko!",
"For the best results, please consider using a GNU/Linux server instead." : "Pre dosiahnutie najlepších výsledkov, prosím zvážte použitie GNU/Linux servera.",
"Personal" : "Osobné",
@@ -164,6 +159,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Váš priečinok s dátami a súbormi je dostupný z internetu, lebo súbor .htaccess nefunguje.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pre informácie, ako správne nastaviť váš server, sa pozrite do <a href=\"%s\" target=\"_blank\">dokumentácie</a>.",
"Create an <strong>admin account</strong>" : "Vytvoriť <strong>administrátorský účet</strong>",
+ "Username" : "Meno používateľa",
"Password" : "Heslo",
"Storage & database" : "Úložislo & databáza",
"Data folder" : "Priečinok dát",
@@ -177,6 +173,7 @@ OC.L10N.register(
"SQLite will be used as database. For larger installations we recommend to change this." : "Ako databáza bude použitá SQLite. Pri väčších inštaláciách odporúčame zmeniť na inú.",
"Finish setup" : "Dokončiť inštaláciu",
"Finishing …" : "Dokončujem...",
+ "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Táto aplikácia potrebuje JavaScript pre správne fungovanie. Prosím <a href=\"http://enable-javascript.com/\" target=\"_blank\">zapnite si JavaScript</a> a obnovte stránku",
"%s is available. Get more information on how to update." : "%s je dostupná. Získajte viac informácií o postupe aktualizácie.",
"Log out" : "Odhlásiť",
"Server side authentication failed!" : "Autentifikácia na serveri zlyhala!",
diff --git a/core/l10n/sk_SK.json b/core/l10n/sk_SK.json
index fa6ed266564..6a539ccd773 100644
--- a/core/l10n/sk_SK.json
+++ b/core/l10n/sk_SK.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Odkaz na obnovu hesla bol odoslaný na váš email. Pokiaľ ho neobdržíte v primeranom čase, skontrolujte spam / priečinok nevyžiadanej pošty. <br> Ak tam nie je, kontaktujte svojho administrátora.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Súbory sú zašifrované. Ak ste nepovolili kľúč pre obnovenie, neexistuje žiadny spôsob, ako obnoviť vaše dáta po obnovení vášho hesla. <br /> Ak si nie ste istí čo urobiť, prosím skôr než budete pokračovať, obráťte sa na administrátora. <br /> Naozaj chcete pokračovať?",
"I know what I'm doing" : "Viem, čo robím",
- "Reset password" : "Obnovenie hesla",
"Password can not be changed. Please contact your administrator." : "Heslo nemožno zmeniť. Kontaktujte prosím vášho administrátora.",
"No" : "Nie",
"Yes" : "Áno",
@@ -120,13 +119,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Nemožno poslať email pre obnovu hesla, pretože pre tohoto používateľa nie je uvedená žiadna emailová adresa. Prosím, obráťte sa na administrátora.",
"%s password reset" : "reset hesla %s",
"Use the following link to reset your password: {link}" : "Použite nasledujúci odkaz pre obnovenie vášho hesla: {link}",
- "You will receive a link to reset your password via Email." : "Odkaz pre obnovenie hesla obdržíte emailom.",
- "Username" : "Meno používateľa",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Vaše súbory sú šifrované. Ak nemáte povolený kľúč obnovy, nie je spôsob, ako získať po obnove hesla vaše dáta. Ak nie ste si istí tým, čo robíte, obráťte sa najskôr na administrátora. Naozaj chcete pokračovať?",
- "Yes, I really want to reset my password now" : "Áno, želám si teraz obnoviť svoje heslo",
- "Reset" : "Resetovať",
"New password" : "Nové heslo",
"New Password" : "Nové heslo",
+ "Reset password" : "Obnovenie hesla",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nie je podporovaný a %s nebude správne fungovať na tejto platforme. Použite ho na vlastné riziko!",
"For the best results, please consider using a GNU/Linux server instead." : "Pre dosiahnutie najlepších výsledkov, prosím zvážte použitie GNU/Linux servera.",
"Personal" : "Osobné",
@@ -162,6 +157,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Váš priečinok s dátami a súbormi je dostupný z internetu, lebo súbor .htaccess nefunguje.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pre informácie, ako správne nastaviť váš server, sa pozrite do <a href=\"%s\" target=\"_blank\">dokumentácie</a>.",
"Create an <strong>admin account</strong>" : "Vytvoriť <strong>administrátorský účet</strong>",
+ "Username" : "Meno používateľa",
"Password" : "Heslo",
"Storage & database" : "Úložislo & databáza",
"Data folder" : "Priečinok dát",
@@ -175,6 +171,7 @@
"SQLite will be used as database. For larger installations we recommend to change this." : "Ako databáza bude použitá SQLite. Pri väčších inštaláciách odporúčame zmeniť na inú.",
"Finish setup" : "Dokončiť inštaláciu",
"Finishing …" : "Dokončujem...",
+ "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Táto aplikácia potrebuje JavaScript pre správne fungovanie. Prosím <a href=\"http://enable-javascript.com/\" target=\"_blank\">zapnite si JavaScript</a> a obnovte stránku",
"%s is available. Get more information on how to update." : "%s je dostupná. Získajte viac informácií o postupe aktualizácie.",
"Log out" : "Odhlásiť",
"Server side authentication failed!" : "Autentifikácia na serveri zlyhala!",
diff --git a/core/l10n/sl.js b/core/l10n/sl.js
index a0e815d1618..59a9e8bd72a 100644
--- a/core/l10n/sl.js
+++ b/core/l10n/sl.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Povezava za ponastavitev gesla je bila poslana na naveden elektronski naslov. V kolikor sporočila ne dobite v kratkem, preverite tudi mapo neželene pošte.<br> Če sporočila ni niti v tej mapi, stopite v stik s skrbnikom.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Datoteke so šifrirane. Če niste omogočili obnovitvenega ključa, po ponastavitvi gesla ne bo mogoč dostop do datotek.<br />V primeru, da niste prepričani, kaj storiti, stopite v stik s skrbnikom sistema.<br />Ali ste prepričani, da želite nadaljevati?",
"I know what I'm doing" : "Vem, kaj delam!",
- "Reset password" : "Ponastavi geslo",
"Password can not be changed. Please contact your administrator." : "Gesla ni mogoče spremeniti. Stopite v stik s skrbnikom.",
"No" : "Ne",
"Yes" : "Da",
@@ -124,13 +123,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Ni mogoče poslati elektronskega sporočila za ponastavitev gesla, ker ni navedenega elektronskega naslova. Stopite v stik s skrbnikom sistema.",
"%s password reset" : "Ponastavitev gesla %s",
"Use the following link to reset your password: {link}" : "Za ponastavitev gesla uporabite povezavo: {link}",
- "You will receive a link to reset your password via Email." : "Na elektronski naslov boste prejeli povezavo za ponovno nastavitev gesla.",
- "Username" : "Uporabniško ime",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Datoteke so šifrirane. Če niste omogočili ključa za obnovitev, žal podatkov ne bo mogoče pridobiti nazaj, ko boste geslo enkrat spremenili. Če niste prepričani, kaj storiti, se obrnite na skrbnika storitve. Ali ste prepričani, da želite nadaljevati?",
- "Yes, I really want to reset my password now" : "Da, potrjujem ponastavitev gesla",
- "Reset" : "Ponastavi",
"New password" : "Novo geslo",
"New Password" : "Novo geslo",
+ "Reset password" : "Ponastavi geslo",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Sistem Mac OS X ni podprt, zato %s ne bo deloval zanesljivo v tem okolju. Program uporabljate na lastno odgovornost! ",
"For the best results, please consider using a GNU/Linux server instead." : "Za najbolj še rezultate je priporočljivo uporabljati strežnik GNU/Linux.",
"Personal" : "Osebno",
@@ -170,6 +165,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Podatkovna mapa in datoteke so najverjetneje javno dostopni preko interneta, saj datoteka .htaccess ni ustrezno nastavljena.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Za več informacij o pravilnem nastavljanju strežnika, kliknite na povezavo do <a href=\"%s\" target=\"_blank\">dokumentacije</a>.",
"Create an <strong>admin account</strong>" : "Ustvari <strong>skrbniški račun</strong>",
+ "Username" : "Uporabniško ime",
"Password" : "Geslo",
"Storage & database" : "Shramba in podatkovna zbirka",
"Data folder" : "Podatkovna mapa",
diff --git a/core/l10n/sl.json b/core/l10n/sl.json
index d5a516d4429..abea92d1325 100644
--- a/core/l10n/sl.json
+++ b/core/l10n/sl.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Povezava za ponastavitev gesla je bila poslana na naveden elektronski naslov. V kolikor sporočila ne dobite v kratkem, preverite tudi mapo neželene pošte.<br> Če sporočila ni niti v tej mapi, stopite v stik s skrbnikom.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Datoteke so šifrirane. Če niste omogočili obnovitvenega ključa, po ponastavitvi gesla ne bo mogoč dostop do datotek.<br />V primeru, da niste prepričani, kaj storiti, stopite v stik s skrbnikom sistema.<br />Ali ste prepričani, da želite nadaljevati?",
"I know what I'm doing" : "Vem, kaj delam!",
- "Reset password" : "Ponastavi geslo",
"Password can not be changed. Please contact your administrator." : "Gesla ni mogoče spremeniti. Stopite v stik s skrbnikom.",
"No" : "Ne",
"Yes" : "Da",
@@ -122,13 +121,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Ni mogoče poslati elektronskega sporočila za ponastavitev gesla, ker ni navedenega elektronskega naslova. Stopite v stik s skrbnikom sistema.",
"%s password reset" : "Ponastavitev gesla %s",
"Use the following link to reset your password: {link}" : "Za ponastavitev gesla uporabite povezavo: {link}",
- "You will receive a link to reset your password via Email." : "Na elektronski naslov boste prejeli povezavo za ponovno nastavitev gesla.",
- "Username" : "Uporabniško ime",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Datoteke so šifrirane. Če niste omogočili ključa za obnovitev, žal podatkov ne bo mogoče pridobiti nazaj, ko boste geslo enkrat spremenili. Če niste prepričani, kaj storiti, se obrnite na skrbnika storitve. Ali ste prepričani, da želite nadaljevati?",
- "Yes, I really want to reset my password now" : "Da, potrjujem ponastavitev gesla",
- "Reset" : "Ponastavi",
"New password" : "Novo geslo",
"New Password" : "Novo geslo",
+ "Reset password" : "Ponastavi geslo",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Sistem Mac OS X ni podprt, zato %s ne bo deloval zanesljivo v tem okolju. Program uporabljate na lastno odgovornost! ",
"For the best results, please consider using a GNU/Linux server instead." : "Za najbolj še rezultate je priporočljivo uporabljati strežnik GNU/Linux.",
"Personal" : "Osebno",
@@ -168,6 +163,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Podatkovna mapa in datoteke so najverjetneje javno dostopni preko interneta, saj datoteka .htaccess ni ustrezno nastavljena.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Za več informacij o pravilnem nastavljanju strežnika, kliknite na povezavo do <a href=\"%s\" target=\"_blank\">dokumentacije</a>.",
"Create an <strong>admin account</strong>" : "Ustvari <strong>skrbniški račun</strong>",
+ "Username" : "Uporabniško ime",
"Password" : "Geslo",
"Storage & database" : "Shramba in podatkovna zbirka",
"Data folder" : "Podatkovna mapa",
diff --git a/core/l10n/sq.js b/core/l10n/sq.js
index 9dd27342905..d0692b8a63e 100644
--- a/core/l10n/sq.js
+++ b/core/l10n/sq.js
@@ -1,9 +1,19 @@
OC.L10N.register(
"core",
{
+ "Couldn't send mail to following users: %s " : "Nuk mund ti dërgoj e-mail këtyre përdoruesve: %s",
"Turned on maintenance mode" : "Mënyra e mirëmbajtjes u aktivizua",
"Turned off maintenance mode" : "Mënyra e mirëmbajtjes u çaktivizua",
"Updated database" : "Database-i u azhurnua",
+ "Checked database schema update" : "Përditësim i skemës së kontrolluar të bazës së të dhënave",
+ "Checked database schema update for apps" : "Përditësim i skemës së kontrolluar të bazës së të dhënave për aplikacionet",
+ "Updated \"%s\" to %s" : "U përditësua \"%s\" në %s",
+ "Disabled incompatible apps: %s" : "Aplikacione të papajtueshme të bllokuara: %s",
+ "No image or file provided" : "Nuk është dhënë asnjë imazh apo skedar",
+ "Unknown filetype" : "Tip i panjohur skedari",
+ "Invalid image" : "Imazh i pavlefshëm",
+ "No temporary profile picture available, try again" : "Nuk është i mundur asnjë imazh profili i përkohshëm, provoni përsëri",
+ "No crop data provided" : "Nuk është dhënë asnjë parametër prerjeje",
"Sunday" : "E djelë",
"Monday" : "E hënë",
"Tuesday" : "E martë",
@@ -25,15 +35,38 @@ OC.L10N.register(
"December" : "Dhjetor",
"Settings" : "Parametra",
"Saving..." : "Duke ruajtur...",
- "Reset password" : "Rivendos kodin",
+ "Couldn't send reset email. Please contact your administrator." : "Emaili i rivendosjes nuk mund të dërgohet. Ju lutem kontaktoni me administratorin.",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Lidhja për rivendosjen e kodit tuaj u dërgua tek email-i juaj. Nëse nuk e merrni brenda një kohe të arsyeshme, kontrolloni dosjet e postës së padëshirueshme spam.<br>Nëse nuk është as aty, pyesni administratorin tuaj.",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Skedarët tuaj janë të kodifikuar. Nëse nuk keni aktivizuar çelësin e restaurimit, të dhënat tuaja nuk do të jenë të arritshme pasi të keni rivendosur kodin.<br />Nëse nuk jeni i sigurt, ju lutemi kontaktoni administratorin tuaj përpara se të vazhdoni. Jeni i sigurt që dëshironi të vazhdoni?",
+ "I know what I'm doing" : "Unë e di se çfarë po bëj",
+ "Password can not be changed. Please contact your administrator." : "Fjalëkalimi nuk mund të ndryshohet. Ju lutem kontaktoni me administratorin.",
"No" : "Jo",
"Yes" : "Po",
"Choose" : "Zgjidh",
+ "Error loading file picker template: {error}" : "Gabim gjatë ngarkimit të shabllonit të zgjedhësit të skedarëve: {error}",
"Ok" : "Në rregull",
- "_{count} file conflict_::_{count} file conflicts_" : ["",""],
+ "Error loading message template: {error}" : "Gabim gjatë ngarkimit të shabllonit të mesazheve: {error}",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} konflikt skedari","{count} konflikte skedarësh"],
+ "One file conflict" : "Një konflikt skedari",
+ "New Files" : "Skedarë të rinj",
+ "Already existing files" : "Skedarë ekzistues",
+ "Which files do you want to keep?" : "Cilët skedarë dëshironi të mbani?",
+ "If you select both versions, the copied file will have a number added to its name." : "Nëse i zgjidhni të dyja versionet, skedarit të kopjuar do ti shtohet një numër në emrin e tij.",
"Cancel" : "Anulo",
+ "Continue" : "Vazhdo",
+ "(all selected)" : "(të gjitha të zgjedhura)",
+ "({count} selected)" : "({count} të zgjedhur)",
+ "Error loading file exists template" : "Gabim gjatë ngarkimit të shabllonit të skedarit ekzistues",
+ "Very weak password" : "Fjalëkalim shumë i dobët",
+ "Weak password" : "Fjalëkalim i dobët",
+ "So-so password" : "Fjalëkalim i pranueshëm",
+ "Good password" : "Fjalëkalim i mirë",
+ "Strong password" : "Fjalëkalim shumë i mirë",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Web Serveri juaj nuk është konfigurar sic duhet në mënyre që të lejojë sinkronizimin e skedare pasi ndërfaqja WevDAV duket të jetë e demtuar.",
+ "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Ky server nuk ka lidhje në internet. Kjo dmth qe disa nga funksionalitetet si të montohet ruajtje e jashtme, njoftime mbi versione të reja apo instalimi i aplikacioneve nga palë të 3ta nuk do të funksionojnë. Qasja në distancë e skedarëve dhe dërgimi i emaileve njoftues gjithashtu mund të mos funksionojnë. Ju sugjerojmë që të aktivizoni lidhjen në internet për këtë server nëse dëshironi ti keni të gjitha funksionalitetet.",
+ "Error occurred while checking server setup" : "Gabim gjatë kontrollit të konfigurimit të serverit",
"Shared" : "Ndarë",
+ "Shared with {recipients}" : "Ndarë me {recipients}",
"Share" : "Nda",
"Error" : "Veprim i gabuar",
"Error while sharing" : "Veprim i gabuar gjatë ndarjes",
@@ -41,16 +74,22 @@ OC.L10N.register(
"Error while changing permissions" : "Veprim i gabuar gjatë ndryshimit të lejeve",
"Shared with you and the group {group} by {owner}" : "Ndarë me ju dhe me grupin {group} nga {owner}",
"Shared with you by {owner}" : "Ndarë me ju nga {owner}",
+ "Share with user or group …" : "Ndajeni me përdorues ose grup ...",
+ "Share link" : "Ndaje lidhjen",
+ "The public link will expire no later than {days} days after it is created" : "Lidhja publike do të skadojë jo më vonë se {days} ditë pas krijimit",
"Password protect" : "Mbro me kod",
+ "Choose a password for the public link" : "Zgjidhni një fjalëkalim për lidhjen publike",
"Allow Public Upload" : "Lejo Ngarkimin Publik",
"Email link to person" : "Dërgo email me lidhjen",
"Send" : "Dërgo",
"Set expiration date" : "Cakto datën e përfundimit",
"Expiration date" : "Data e përfundimit",
+ "Adding user..." : "Duke shtuar përdoruesin ...",
"group" : "grupi",
"Resharing is not allowed" : "Rindarja nuk lejohet",
"Shared in {item} with {user}" : "Ndarë në {item} me {user}",
"Unshare" : "Hiq ndarjen",
+ "notify by email" : "njofto me email",
"can share" : "mund të ndajnë",
"can edit" : "mund të ndryshosh",
"access control" : "kontrollimi i hyrjeve",
@@ -62,43 +101,109 @@ OC.L10N.register(
"Error setting expiration date" : "Veprim i gabuar gjatë caktimit të datës së përfundimit",
"Sending ..." : "Duke dërguar...",
"Email sent" : "Email-i u dërgua",
+ "Warning" : "Kujdes",
"The object type is not specified." : "Nuk është specifikuar tipi i objektit.",
+ "Enter new" : "Jep të re",
"Delete" : "Elimino",
"Add" : "Shto",
- "_download %n file_::_download %n files_" : ["",""],
+ "Edit tags" : "Modifiko tag",
+ "Error loading dialog template: {error}" : "Gabim gjatë ngarkimit të shabllonit: {error}",
+ "No tags selected for deletion." : "Nuk është zgjedhur asnjë tag për fshirje.",
+ "unknown text" : "tekst i panjohur",
+ "Hello world!" : "Përshendetje të gjithëve!",
+ "sunny" : "diell",
+ "Hello {name}, the weather is {weather}" : "Përshëndetje {name}, koha është {weather}",
+ "_download %n file_::_download %n files_" : ["shkarko %n skedar","shkarko %n skedarë"],
+ "Updating {productName} to version {version}, this may take a while." : "Po përditësoj {productName} në versionin {version}, kjo mund të zgjasë pak.",
+ "Please reload the page." : "Ju lutem ringarkoni faqen.",
+ "The update was unsuccessful." : "Përditësimi nuk rezultoi me sukses.",
"The update was successful. Redirecting you to ownCloud now." : "Azhurnimi u krye. Tani do t'ju kaloj tek ownCloud-i.",
+ "Couldn't reset password because the token is invalid" : "Nuk mund të rivendos fjalëkalimin sepse shenja është e pavlefshme.",
+ "Couldn't send reset email. Please make sure your username is correct." : "Emaili i rivendosjes nuk mund të dërgohet. Ju lutem sigurohuni që përdoruesi juaj është i saktë.",
+ "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Emaili i rivendosjes nuk mund të dërgohet sepse nuk ekziston asnjë adresë email për këtë përdorues. Ju lutem kontaktoni me administratorin.",
"%s password reset" : "Kodi i %s -it u rivendos",
"Use the following link to reset your password: {link}" : "Përdorni lidhjen në vijim për të rivendosur kodin: {link}",
- "You will receive a link to reset your password via Email." : "Do t'iu vijë një email që përmban një lidhje për ta rivendosur kodin.",
- "Username" : "Përdoruesi",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Skedarët tuaj janë të kodifikuar. Nëqoftëse nuk keni aktivizuar çelësin e restaurimit, të dhënat tuaja nuk do të jenë të arritshme pasi të keni rivendosur kodin. Nëqoftëse nuk jeni i sigurt, ju lutemi kontaktoni administratorin tuaj para se të vazhdoni. Jeni i sigurt që dëshironi të vazhdoni?",
- "Yes, I really want to reset my password now" : "Po, dua ta rivendos kodin tani",
"New password" : "Kodi i ri",
+ "New Password" : "Fjalëkalim i ri",
+ "Reset password" : "Rivendos kodin",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nuk është i mbështetur dhe %s nuk do të funksionojë si duhet në këtë platformë. Përdoreni nën përgjegjësinë tuaj!",
+ "For the best results, please consider using a GNU/Linux server instead." : "Për të arritur rezultatet më të mira të mundshme, ju lutem më mirë konsideroni përdorimin e një serveri GNU/Linux.",
"Personal" : "Personale",
"Users" : "Përdoruesit",
"Apps" : "App",
"Admin" : "Admin",
"Help" : "Ndihmë",
+ "Error loading tags" : "Gabim gjatë ngarkimit të etiketave.",
+ "Tag already exists" : "Etiketa ekziston",
+ "Error deleting tag(s)" : "Gabim gjatë fshirjes së etiketës(ave)",
+ "Error tagging" : "Gabim etiketimi",
+ "Error untagging" : "Gabim në heqjen e etiketës",
+ "Error favoriting" : "Gabim në ruajtjen si të preferuar",
+ "Error unfavoriting" : "Gabim në heqjen nga të preferuarat",
"Access forbidden" : "Ndalohet hyrja",
+ "File not found" : "Skedari nuk mund të gjendet",
+ "The specified document has not been found on the server." : "Dokumenti i përcaktuar nuk mund të gjendet në server.",
+ "You can click here to return to %s." : "Ju mund të klikoni këtu për tu kthyer në %s.",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Tungjatjeta,\n\nju njoftojmë se %s ka ndarë %s me ju.\nShikojeni në: %s\n\n",
+ "The share will expire on %s." : "Ndarja do të skadojë në %s.",
+ "Cheers!" : "Gjithë të mirat",
+ "Internal Server Error" : "Gabim i brendshëm në server",
+ "The server encountered an internal error and was unable to complete your request." : "Serveri u përball me një gabim të brendshem dhe nuk mundet të mbarojë detyrën që i keni ngarkuar.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Ju lutem kontaktoni me administratorin e serverit nëse ky gabim shfaqet herë të tjera, ju lutem përfshini dhe detajet e mëposhtme teknike në raportin tuaj.",
+ "More details can be found in the server log." : "Detaje të mëtejshme mund të gjenden në listën e veprimeve të serverit.",
+ "Technical details" : "Detaje teknike",
+ "Remote Address: %s" : "Adresa tjetër: %s",
+ "Request ID: %s" : "ID e kërkesës: %s",
+ "Code: %s" : "Kodi: %s",
+ "Message: %s" : "Mesazhi: %s",
+ "File: %s" : "Skedari: %s",
+ "Line: %s" : "Rreshti: %s",
+ "Trace" : "Gjurmim",
"Security Warning" : "Paralajmërim sigurie",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Versioni juaj i PHP-së është i cënueshëm nga sulmi NULL Byte (CVE-2006-7243)",
"Please update your PHP installation to use %s securely." : "Ju lutem azhurnoni instalimin tuaj të PHP-së që të përdorni %s -in në mënyrë të sigurt.",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Dosja dhe skedarët e të dhënave tuaja mbase janë të arritshme nga interneti sepse skedari .htaccess nuk po punon.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Për më shumë informacion mbi konfigurimin e duhur të serverit tuaj, ju lutem shikoni <a href=\"%s\" target=\"_blank\">dokumentacionin</a>.",
"Create an <strong>admin account</strong>" : "Krijo një <strong>llogari administruesi</strong>",
+ "Username" : "Përdoruesi",
"Password" : "Kodi",
+ "Storage & database" : "Ruajtja dhe baza e të dhënave",
"Data folder" : "Emri i dosjes",
"Configure the database" : "Konfiguro database-in",
+ "Only %s is available." : "Vetëm %s është e disponueshme.",
"Database user" : "Përdoruesi i database-it",
"Database password" : "Kodi i database-it",
"Database name" : "Emri i database-it",
"Database tablespace" : "Tablespace-i i database-it",
"Database host" : "Pozicioni (host) i database-it",
+ "SQLite will be used as database. For larger installations we recommend to change this." : "SQLite do të përdoret si bazë të dhënash. Për instalime më të mëdha ju rekomandojmë që ta ndryshoni këtë.",
"Finish setup" : "Mbaro setup-in",
+ "Finishing …" : "Duke përfunduar ...",
+ "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Këtij aplikacioni i nevojitet JavaScript për funksionim të rregullt. Ju lutem <a href=\"http://enable-javascript.com/\" target=\"_blank\">aktivizoni JavaScript</a> dhe ringarkoni faqen.",
"%s is available. Get more information on how to update." : "%s është i disponueshëm. Merrni më shumë informacione mbi azhurnimin.",
"Log out" : "Dalje",
+ "Server side authentication failed!" : "Verifikimi në krahun e serverit dështoi!",
+ "Please contact your administrator." : "Ju lutem kontaktoni administratorin.",
+ "Forgot your password? Reset it!" : "Keni harruar fjalëkalimin tuaj? Rivendoseni!",
"remember" : "kujto",
"Log in" : "Hyrje",
- "Alternative Logins" : "Hyrje alternative"
+ "Alternative Logins" : "Hyrje alternative",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Tungjatjeta,<br><br>dëshirojmë t'ju njoftojmë se %s ka ndarë <strong>%s</strong> me ju.<br><a href=\"%s\">Klikoni këtu për ta shikuar!</a><br>",
+ "This ownCloud instance is currently in single user mode." : "Kjo instancë ownCloud është aktualisht në gjendje me përdorues të vetëm.",
+ "This means only administrators can use the instance." : "Kjo dmth që vetëm administratorët mund të shfrytëzojnë instancën.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktoni administratorin e sistemit nëse ky mesazh vazhdon ose është shfaqur papritmas.",
+ "Thank you for your patience." : "Ju faleminderit për durimin tuaj.",
+ "You are accessing the server from an untrusted domain." : "Ju po qaseni në server nga një domain jo i besuar.",
+ "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." : "Ju lutem kontaktoni me administratorin. Nëse jeni administrator i kësaj instance, konfiguroni parametrin \"domain i besuar\" në config/config.php . Një konfigurim shembull është dhënë në config/config.sample.php",
+ "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Në varësi të konfigurimit tuaj, ju si administrator mundet gjithashtu të jeni i aftë të përdorni butonin e mëposhtëm për ti dhënë besim këtij domain.",
+ "Add \"%s\" as trusted domain" : "Shtoni \"%s\" si domain të besuar",
+ "%s will be updated to version %s." : "%s to të përditësohet në versionin %s.",
+ "The following apps will be disabled:" : "Keto aplikacione do të bllokohen:",
+ "The theme %s has been disabled." : "Tema %s u bllokua.",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Ju lutem sigurohuni që bazës së të dhënave, dosjes së konfigurimit dhe dosjes së të dhënave ti jetë bërë një kopje rezervë përpara se të vazhdoni më tutje.",
+ "Start update" : "Fillo përditësimin.",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Për të shmangur momente bllokimi gjatë punës me instalime të mëdha, në vend të kësaj ju mund të kryeni komandën e mëposhtme nga dosja juaj e instalimit:",
+ "This %s instance is currently being updated, which may take a while." : "Kjo instancë %s është në proces përditësimi, i cili mund të zgjasë pak kohë.",
+ "This page will refresh itself when the %s instance is available again." : "Kjo faqe do të ringarkohet automatikisht kur instanca %s të jetë sërish e disponueshme."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/sq.json b/core/l10n/sq.json
index 72230681a4e..3cf8cae21d3 100644
--- a/core/l10n/sq.json
+++ b/core/l10n/sq.json
@@ -1,7 +1,17 @@
{ "translations": {
+ "Couldn't send mail to following users: %s " : "Nuk mund ti dërgoj e-mail këtyre përdoruesve: %s",
"Turned on maintenance mode" : "Mënyra e mirëmbajtjes u aktivizua",
"Turned off maintenance mode" : "Mënyra e mirëmbajtjes u çaktivizua",
"Updated database" : "Database-i u azhurnua",
+ "Checked database schema update" : "Përditësim i skemës së kontrolluar të bazës së të dhënave",
+ "Checked database schema update for apps" : "Përditësim i skemës së kontrolluar të bazës së të dhënave për aplikacionet",
+ "Updated \"%s\" to %s" : "U përditësua \"%s\" në %s",
+ "Disabled incompatible apps: %s" : "Aplikacione të papajtueshme të bllokuara: %s",
+ "No image or file provided" : "Nuk është dhënë asnjë imazh apo skedar",
+ "Unknown filetype" : "Tip i panjohur skedari",
+ "Invalid image" : "Imazh i pavlefshëm",
+ "No temporary profile picture available, try again" : "Nuk është i mundur asnjë imazh profili i përkohshëm, provoni përsëri",
+ "No crop data provided" : "Nuk është dhënë asnjë parametër prerjeje",
"Sunday" : "E djelë",
"Monday" : "E hënë",
"Tuesday" : "E martë",
@@ -23,15 +33,38 @@
"December" : "Dhjetor",
"Settings" : "Parametra",
"Saving..." : "Duke ruajtur...",
- "Reset password" : "Rivendos kodin",
+ "Couldn't send reset email. Please contact your administrator." : "Emaili i rivendosjes nuk mund të dërgohet. Ju lutem kontaktoni me administratorin.",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Lidhja për rivendosjen e kodit tuaj u dërgua tek email-i juaj. Nëse nuk e merrni brenda një kohe të arsyeshme, kontrolloni dosjet e postës së padëshirueshme spam.<br>Nëse nuk është as aty, pyesni administratorin tuaj.",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Skedarët tuaj janë të kodifikuar. Nëse nuk keni aktivizuar çelësin e restaurimit, të dhënat tuaja nuk do të jenë të arritshme pasi të keni rivendosur kodin.<br />Nëse nuk jeni i sigurt, ju lutemi kontaktoni administratorin tuaj përpara se të vazhdoni. Jeni i sigurt që dëshironi të vazhdoni?",
+ "I know what I'm doing" : "Unë e di se çfarë po bëj",
+ "Password can not be changed. Please contact your administrator." : "Fjalëkalimi nuk mund të ndryshohet. Ju lutem kontaktoni me administratorin.",
"No" : "Jo",
"Yes" : "Po",
"Choose" : "Zgjidh",
+ "Error loading file picker template: {error}" : "Gabim gjatë ngarkimit të shabllonit të zgjedhësit të skedarëve: {error}",
"Ok" : "Në rregull",
- "_{count} file conflict_::_{count} file conflicts_" : ["",""],
+ "Error loading message template: {error}" : "Gabim gjatë ngarkimit të shabllonit të mesazheve: {error}",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} konflikt skedari","{count} konflikte skedarësh"],
+ "One file conflict" : "Një konflikt skedari",
+ "New Files" : "Skedarë të rinj",
+ "Already existing files" : "Skedarë ekzistues",
+ "Which files do you want to keep?" : "Cilët skedarë dëshironi të mbani?",
+ "If you select both versions, the copied file will have a number added to its name." : "Nëse i zgjidhni të dyja versionet, skedarit të kopjuar do ti shtohet një numër në emrin e tij.",
"Cancel" : "Anulo",
+ "Continue" : "Vazhdo",
+ "(all selected)" : "(të gjitha të zgjedhura)",
+ "({count} selected)" : "({count} të zgjedhur)",
+ "Error loading file exists template" : "Gabim gjatë ngarkimit të shabllonit të skedarit ekzistues",
+ "Very weak password" : "Fjalëkalim shumë i dobët",
+ "Weak password" : "Fjalëkalim i dobët",
+ "So-so password" : "Fjalëkalim i pranueshëm",
+ "Good password" : "Fjalëkalim i mirë",
+ "Strong password" : "Fjalëkalim shumë i mirë",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Web Serveri juaj nuk është konfigurar sic duhet në mënyre që të lejojë sinkronizimin e skedare pasi ndërfaqja WevDAV duket të jetë e demtuar.",
+ "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Ky server nuk ka lidhje në internet. Kjo dmth qe disa nga funksionalitetet si të montohet ruajtje e jashtme, njoftime mbi versione të reja apo instalimi i aplikacioneve nga palë të 3ta nuk do të funksionojnë. Qasja në distancë e skedarëve dhe dërgimi i emaileve njoftues gjithashtu mund të mos funksionojnë. Ju sugjerojmë që të aktivizoni lidhjen në internet për këtë server nëse dëshironi ti keni të gjitha funksionalitetet.",
+ "Error occurred while checking server setup" : "Gabim gjatë kontrollit të konfigurimit të serverit",
"Shared" : "Ndarë",
+ "Shared with {recipients}" : "Ndarë me {recipients}",
"Share" : "Nda",
"Error" : "Veprim i gabuar",
"Error while sharing" : "Veprim i gabuar gjatë ndarjes",
@@ -39,16 +72,22 @@
"Error while changing permissions" : "Veprim i gabuar gjatë ndryshimit të lejeve",
"Shared with you and the group {group} by {owner}" : "Ndarë me ju dhe me grupin {group} nga {owner}",
"Shared with you by {owner}" : "Ndarë me ju nga {owner}",
+ "Share with user or group …" : "Ndajeni me përdorues ose grup ...",
+ "Share link" : "Ndaje lidhjen",
+ "The public link will expire no later than {days} days after it is created" : "Lidhja publike do të skadojë jo më vonë se {days} ditë pas krijimit",
"Password protect" : "Mbro me kod",
+ "Choose a password for the public link" : "Zgjidhni një fjalëkalim për lidhjen publike",
"Allow Public Upload" : "Lejo Ngarkimin Publik",
"Email link to person" : "Dërgo email me lidhjen",
"Send" : "Dërgo",
"Set expiration date" : "Cakto datën e përfundimit",
"Expiration date" : "Data e përfundimit",
+ "Adding user..." : "Duke shtuar përdoruesin ...",
"group" : "grupi",
"Resharing is not allowed" : "Rindarja nuk lejohet",
"Shared in {item} with {user}" : "Ndarë në {item} me {user}",
"Unshare" : "Hiq ndarjen",
+ "notify by email" : "njofto me email",
"can share" : "mund të ndajnë",
"can edit" : "mund të ndryshosh",
"access control" : "kontrollimi i hyrjeve",
@@ -60,43 +99,109 @@
"Error setting expiration date" : "Veprim i gabuar gjatë caktimit të datës së përfundimit",
"Sending ..." : "Duke dërguar...",
"Email sent" : "Email-i u dërgua",
+ "Warning" : "Kujdes",
"The object type is not specified." : "Nuk është specifikuar tipi i objektit.",
+ "Enter new" : "Jep të re",
"Delete" : "Elimino",
"Add" : "Shto",
- "_download %n file_::_download %n files_" : ["",""],
+ "Edit tags" : "Modifiko tag",
+ "Error loading dialog template: {error}" : "Gabim gjatë ngarkimit të shabllonit: {error}",
+ "No tags selected for deletion." : "Nuk është zgjedhur asnjë tag për fshirje.",
+ "unknown text" : "tekst i panjohur",
+ "Hello world!" : "Përshendetje të gjithëve!",
+ "sunny" : "diell",
+ "Hello {name}, the weather is {weather}" : "Përshëndetje {name}, koha është {weather}",
+ "_download %n file_::_download %n files_" : ["shkarko %n skedar","shkarko %n skedarë"],
+ "Updating {productName} to version {version}, this may take a while." : "Po përditësoj {productName} në versionin {version}, kjo mund të zgjasë pak.",
+ "Please reload the page." : "Ju lutem ringarkoni faqen.",
+ "The update was unsuccessful." : "Përditësimi nuk rezultoi me sukses.",
"The update was successful. Redirecting you to ownCloud now." : "Azhurnimi u krye. Tani do t'ju kaloj tek ownCloud-i.",
+ "Couldn't reset password because the token is invalid" : "Nuk mund të rivendos fjalëkalimin sepse shenja është e pavlefshme.",
+ "Couldn't send reset email. Please make sure your username is correct." : "Emaili i rivendosjes nuk mund të dërgohet. Ju lutem sigurohuni që përdoruesi juaj është i saktë.",
+ "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Emaili i rivendosjes nuk mund të dërgohet sepse nuk ekziston asnjë adresë email për këtë përdorues. Ju lutem kontaktoni me administratorin.",
"%s password reset" : "Kodi i %s -it u rivendos",
"Use the following link to reset your password: {link}" : "Përdorni lidhjen në vijim për të rivendosur kodin: {link}",
- "You will receive a link to reset your password via Email." : "Do t'iu vijë një email që përmban një lidhje për ta rivendosur kodin.",
- "Username" : "Përdoruesi",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Skedarët tuaj janë të kodifikuar. Nëqoftëse nuk keni aktivizuar çelësin e restaurimit, të dhënat tuaja nuk do të jenë të arritshme pasi të keni rivendosur kodin. Nëqoftëse nuk jeni i sigurt, ju lutemi kontaktoni administratorin tuaj para se të vazhdoni. Jeni i sigurt që dëshironi të vazhdoni?",
- "Yes, I really want to reset my password now" : "Po, dua ta rivendos kodin tani",
"New password" : "Kodi i ri",
+ "New Password" : "Fjalëkalim i ri",
+ "Reset password" : "Rivendos kodin",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nuk është i mbështetur dhe %s nuk do të funksionojë si duhet në këtë platformë. Përdoreni nën përgjegjësinë tuaj!",
+ "For the best results, please consider using a GNU/Linux server instead." : "Për të arritur rezultatet më të mira të mundshme, ju lutem më mirë konsideroni përdorimin e një serveri GNU/Linux.",
"Personal" : "Personale",
"Users" : "Përdoruesit",
"Apps" : "App",
"Admin" : "Admin",
"Help" : "Ndihmë",
+ "Error loading tags" : "Gabim gjatë ngarkimit të etiketave.",
+ "Tag already exists" : "Etiketa ekziston",
+ "Error deleting tag(s)" : "Gabim gjatë fshirjes së etiketës(ave)",
+ "Error tagging" : "Gabim etiketimi",
+ "Error untagging" : "Gabim në heqjen e etiketës",
+ "Error favoriting" : "Gabim në ruajtjen si të preferuar",
+ "Error unfavoriting" : "Gabim në heqjen nga të preferuarat",
"Access forbidden" : "Ndalohet hyrja",
+ "File not found" : "Skedari nuk mund të gjendet",
+ "The specified document has not been found on the server." : "Dokumenti i përcaktuar nuk mund të gjendet në server.",
+ "You can click here to return to %s." : "Ju mund të klikoni këtu për tu kthyer në %s.",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Tungjatjeta,\n\nju njoftojmë se %s ka ndarë %s me ju.\nShikojeni në: %s\n\n",
+ "The share will expire on %s." : "Ndarja do të skadojë në %s.",
+ "Cheers!" : "Gjithë të mirat",
+ "Internal Server Error" : "Gabim i brendshëm në server",
+ "The server encountered an internal error and was unable to complete your request." : "Serveri u përball me një gabim të brendshem dhe nuk mundet të mbarojë detyrën që i keni ngarkuar.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Ju lutem kontaktoni me administratorin e serverit nëse ky gabim shfaqet herë të tjera, ju lutem përfshini dhe detajet e mëposhtme teknike në raportin tuaj.",
+ "More details can be found in the server log." : "Detaje të mëtejshme mund të gjenden në listën e veprimeve të serverit.",
+ "Technical details" : "Detaje teknike",
+ "Remote Address: %s" : "Adresa tjetër: %s",
+ "Request ID: %s" : "ID e kërkesës: %s",
+ "Code: %s" : "Kodi: %s",
+ "Message: %s" : "Mesazhi: %s",
+ "File: %s" : "Skedari: %s",
+ "Line: %s" : "Rreshti: %s",
+ "Trace" : "Gjurmim",
"Security Warning" : "Paralajmërim sigurie",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Versioni juaj i PHP-së është i cënueshëm nga sulmi NULL Byte (CVE-2006-7243)",
"Please update your PHP installation to use %s securely." : "Ju lutem azhurnoni instalimin tuaj të PHP-së që të përdorni %s -in në mënyrë të sigurt.",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Dosja dhe skedarët e të dhënave tuaja mbase janë të arritshme nga interneti sepse skedari .htaccess nuk po punon.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Për më shumë informacion mbi konfigurimin e duhur të serverit tuaj, ju lutem shikoni <a href=\"%s\" target=\"_blank\">dokumentacionin</a>.",
"Create an <strong>admin account</strong>" : "Krijo një <strong>llogari administruesi</strong>",
+ "Username" : "Përdoruesi",
"Password" : "Kodi",
+ "Storage & database" : "Ruajtja dhe baza e të dhënave",
"Data folder" : "Emri i dosjes",
"Configure the database" : "Konfiguro database-in",
+ "Only %s is available." : "Vetëm %s është e disponueshme.",
"Database user" : "Përdoruesi i database-it",
"Database password" : "Kodi i database-it",
"Database name" : "Emri i database-it",
"Database tablespace" : "Tablespace-i i database-it",
"Database host" : "Pozicioni (host) i database-it",
+ "SQLite will be used as database. For larger installations we recommend to change this." : "SQLite do të përdoret si bazë të dhënash. Për instalime më të mëdha ju rekomandojmë që ta ndryshoni këtë.",
"Finish setup" : "Mbaro setup-in",
+ "Finishing …" : "Duke përfunduar ...",
+ "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Këtij aplikacioni i nevojitet JavaScript për funksionim të rregullt. Ju lutem <a href=\"http://enable-javascript.com/\" target=\"_blank\">aktivizoni JavaScript</a> dhe ringarkoni faqen.",
"%s is available. Get more information on how to update." : "%s është i disponueshëm. Merrni më shumë informacione mbi azhurnimin.",
"Log out" : "Dalje",
+ "Server side authentication failed!" : "Verifikimi në krahun e serverit dështoi!",
+ "Please contact your administrator." : "Ju lutem kontaktoni administratorin.",
+ "Forgot your password? Reset it!" : "Keni harruar fjalëkalimin tuaj? Rivendoseni!",
"remember" : "kujto",
"Log in" : "Hyrje",
- "Alternative Logins" : "Hyrje alternative"
+ "Alternative Logins" : "Hyrje alternative",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Tungjatjeta,<br><br>dëshirojmë t'ju njoftojmë se %s ka ndarë <strong>%s</strong> me ju.<br><a href=\"%s\">Klikoni këtu për ta shikuar!</a><br>",
+ "This ownCloud instance is currently in single user mode." : "Kjo instancë ownCloud është aktualisht në gjendje me përdorues të vetëm.",
+ "This means only administrators can use the instance." : "Kjo dmth që vetëm administratorët mund të shfrytëzojnë instancën.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktoni administratorin e sistemit nëse ky mesazh vazhdon ose është shfaqur papritmas.",
+ "Thank you for your patience." : "Ju faleminderit për durimin tuaj.",
+ "You are accessing the server from an untrusted domain." : "Ju po qaseni në server nga një domain jo i besuar.",
+ "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." : "Ju lutem kontaktoni me administratorin. Nëse jeni administrator i kësaj instance, konfiguroni parametrin \"domain i besuar\" në config/config.php . Një konfigurim shembull është dhënë në config/config.sample.php",
+ "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Në varësi të konfigurimit tuaj, ju si administrator mundet gjithashtu të jeni i aftë të përdorni butonin e mëposhtëm për ti dhënë besim këtij domain.",
+ "Add \"%s\" as trusted domain" : "Shtoni \"%s\" si domain të besuar",
+ "%s will be updated to version %s." : "%s to të përditësohet në versionin %s.",
+ "The following apps will be disabled:" : "Keto aplikacione do të bllokohen:",
+ "The theme %s has been disabled." : "Tema %s u bllokua.",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Ju lutem sigurohuni që bazës së të dhënave, dosjes së konfigurimit dhe dosjes së të dhënave ti jetë bërë një kopje rezervë përpara se të vazhdoni më tutje.",
+ "Start update" : "Fillo përditësimin.",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Për të shmangur momente bllokimi gjatë punës me instalime të mëdha, në vend të kësaj ju mund të kryeni komandën e mëposhtme nga dosja juaj e instalimit:",
+ "This %s instance is currently being updated, which may take a while." : "Kjo instancë %s është në proces përditësimi, i cili mund të zgjasë pak kohë.",
+ "This page will refresh itself when the %s instance is available again." : "Kjo faqe do të ringarkohet automatikisht kur instanca %s të jetë sërish e disponueshme."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/sr.js b/core/l10n/sr.js
index 5e2c8354261..39ca7b1fda4 100644
--- a/core/l10n/sr.js
+++ b/core/l10n/sr.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"December" : "Децембар",
"Settings" : "Поставке",
"Saving..." : "Чување у току...",
- "Reset password" : "Ресетуј лозинку",
"No" : "Не",
"Yes" : "Да",
"Choose" : "Одабери",
@@ -61,9 +60,8 @@ OC.L10N.register(
"Add" : "Додај",
"_download %n file_::_download %n files_" : ["","",""],
"Use the following link to reset your password: {link}" : "Овом везом ресетујте своју лозинку: {link}",
- "You will receive a link to reset your password via Email." : "Добићете везу за ресетовање лозинке путем е-поште.",
- "Username" : "Корисничко име",
"New password" : "Нова лозинка",
+ "Reset password" : "Ресетуј лозинку",
"Personal" : "Лично",
"Users" : "Корисници",
"Apps" : "Апликације",
@@ -72,6 +70,7 @@ OC.L10N.register(
"Access forbidden" : "Забрањен приступ",
"Security Warning" : "Сигурносно упозорење",
"Create an <strong>admin account</strong>" : "Направи <strong>административни налог</strong>",
+ "Username" : "Корисничко име",
"Password" : "Лозинка",
"Data folder" : "Фацикла података",
"Configure the database" : "Подешавање базе",
diff --git a/core/l10n/sr.json b/core/l10n/sr.json
index bfd13040906..ab3e8e04495 100644
--- a/core/l10n/sr.json
+++ b/core/l10n/sr.json
@@ -20,7 +20,6 @@
"December" : "Децембар",
"Settings" : "Поставке",
"Saving..." : "Чување у току...",
- "Reset password" : "Ресетуј лозинку",
"No" : "Не",
"Yes" : "Да",
"Choose" : "Одабери",
@@ -59,9 +58,8 @@
"Add" : "Додај",
"_download %n file_::_download %n files_" : ["","",""],
"Use the following link to reset your password: {link}" : "Овом везом ресетујте своју лозинку: {link}",
- "You will receive a link to reset your password via Email." : "Добићете везу за ресетовање лозинке путем е-поште.",
- "Username" : "Корисничко име",
"New password" : "Нова лозинка",
+ "Reset password" : "Ресетуј лозинку",
"Personal" : "Лично",
"Users" : "Корисници",
"Apps" : "Апликације",
@@ -70,6 +68,7 @@
"Access forbidden" : "Забрањен приступ",
"Security Warning" : "Сигурносно упозорење",
"Create an <strong>admin account</strong>" : "Направи <strong>административни налог</strong>",
+ "Username" : "Корисничко име",
"Password" : "Лозинка",
"Data folder" : "Фацикла података",
"Configure the database" : "Подешавање базе",
diff --git a/core/l10n/sr@latin.js b/core/l10n/sr@latin.js
index 11c3d2e40a7..a327c2ee55a 100644
--- a/core/l10n/sr@latin.js
+++ b/core/l10n/sr@latin.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"December" : "Decembar",
"Settings" : "Podešavanja",
"I know what I'm doing" : "Znam šta radim",
- "Reset password" : "Resetuj lozinku",
"No" : "Ne",
"Yes" : "Da",
"Choose" : "Izaberi",
@@ -69,9 +68,8 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : ["","",""],
"The update was successful. Redirecting you to ownCloud now." : "Ažuriranje je uspelo. Prosleđivanje na ownCloud.",
"Use the following link to reset your password: {link}" : "Koristite sledeći link za reset lozinke: {link}",
- "You will receive a link to reset your password via Email." : "Dobićete vezu za resetovanje lozinke putem e-pošte.",
- "Username" : "Korisničko ime",
"New password" : "Nova lozinka",
+ "Reset password" : "Resetuj lozinku",
"Personal" : "Lično",
"Users" : "Korisnici",
"Apps" : "Programi",
@@ -82,6 +80,7 @@ OC.L10N.register(
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Vaša PHP verzija je ranjiva na ",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Vaši podaci i direktorijumi su verovatno dostupni sa interneta jer .htaccess fajl ne funkcioniše.",
"Create an <strong>admin account</strong>" : "Napravi <strong>administrativni nalog</strong>",
+ "Username" : "Korisničko ime",
"Password" : "Lozinka",
"Data folder" : "Fascikla podataka",
"Configure the database" : "Podešavanje baze",
diff --git a/core/l10n/sr@latin.json b/core/l10n/sr@latin.json
index a358f57d028..219141ff1df 100644
--- a/core/l10n/sr@latin.json
+++ b/core/l10n/sr@latin.json
@@ -20,7 +20,6 @@
"December" : "Decembar",
"Settings" : "Podešavanja",
"I know what I'm doing" : "Znam šta radim",
- "Reset password" : "Resetuj lozinku",
"No" : "Ne",
"Yes" : "Da",
"Choose" : "Izaberi",
@@ -67,9 +66,8 @@
"_download %n file_::_download %n files_" : ["","",""],
"The update was successful. Redirecting you to ownCloud now." : "Ažuriranje je uspelo. Prosleđivanje na ownCloud.",
"Use the following link to reset your password: {link}" : "Koristite sledeći link za reset lozinke: {link}",
- "You will receive a link to reset your password via Email." : "Dobićete vezu za resetovanje lozinke putem e-pošte.",
- "Username" : "Korisničko ime",
"New password" : "Nova lozinka",
+ "Reset password" : "Resetuj lozinku",
"Personal" : "Lično",
"Users" : "Korisnici",
"Apps" : "Programi",
@@ -80,6 +78,7 @@
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Vaša PHP verzija je ranjiva na ",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Vaši podaci i direktorijumi su verovatno dostupni sa interneta jer .htaccess fajl ne funkcioniše.",
"Create an <strong>admin account</strong>" : "Napravi <strong>administrativni nalog</strong>",
+ "Username" : "Korisničko ime",
"Password" : "Lozinka",
"Data folder" : "Fascikla podataka",
"Configure the database" : "Podešavanje baze",
diff --git a/core/l10n/sv.js b/core/l10n/sv.js
index c0066471dc0..dc427b46dba 100644
--- a/core/l10n/sv.js
+++ b/core/l10n/sv.js
@@ -37,7 +37,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Länken för att återställa ditt lösenord har skickats till din e-mail. Om du inte mottar något inom kort, kontrollera spam/skräpkorgen.<br>Om det inte finns något där, vänligen kontakta din lokala administratör.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dina filer är krypterade. Om du inte angett någon återställningsnyckel, kommer det att vara omöjligt att få tillbaka dina data efter att lösenordet är återställt..<br />Om du är osäker på vad du ska göra, vänligen kontakta din administratör innan du fortsätter.<br />Är du verkligen helt säker på att du vill fortsätta?",
"I know what I'm doing" : "Jag är säker på vad jag gör",
- "Reset password" : "Återställ lösenordet",
"Password can not be changed. Please contact your administrator." : "Lösenordet kan inte ändras. Vänligen kontakta din administratör.",
"No" : "Nej",
"Yes" : "Ja",
@@ -118,13 +117,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Kunde inte skicka något återställningsmail därför att det inte finns någon e-mailadress kopplad till detta användarnamn. Vänligen kontakta din administratör.",
"%s password reset" : "%s återställ lösenord",
"Use the following link to reset your password: {link}" : "Använd följande länk för att återställa lösenordet: {link}",
- "You will receive a link to reset your password via Email." : "Du får en länk att återställa ditt lösenord via e-post.",
- "Username" : "Användarnamn",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Dina filer är krypterade. Om du inte har aktiverat återställningsnyckeln kommer det inte att finnas någon möjlighet att få tillbaka dina filer efter att ditt lösenord har återställts. Om du är osäker, kontakta din systemadministratör innan du fortsätter. Är du verkligen säker på att fortsätta?",
- "Yes, I really want to reset my password now" : "Ja, jag vill verkligen återställa mitt lösenord nu",
- "Reset" : "Återställ",
"New password" : "Nytt lösenord",
"New Password" : "Nytt lösenord",
+ "Reset password" : "Återställ lösenordet",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X stöds inte och %s kommer inte att fungera korrekt på denna plattform. Använd på egen risk!",
"For the best results, please consider using a GNU/Linux server instead." : "För bästa resultat, överväg att använda en GNU/Linux server istället.",
"Personal" : "Personligt",
@@ -150,6 +145,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Din datakatalog och filer är förmodligen tillgängliga från Internet, eftersom .htaccess-filen inte fungerar.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "För information hur du korrekt konfigurerar din servern, se ownCloud <a href=\"%s\" target=\"_blank\">dokumentationen</a>.",
"Create an <strong>admin account</strong>" : "Skapa ett <strong>administratörskonto</strong>",
+ "Username" : "Användarnamn",
"Password" : "Lösenord",
"Storage & database" : "Lagring & databas",
"Data folder" : "Datamapp",
diff --git a/core/l10n/sv.json b/core/l10n/sv.json
index 82a228565e3..c69d5001b5f 100644
--- a/core/l10n/sv.json
+++ b/core/l10n/sv.json
@@ -35,7 +35,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Länken för att återställa ditt lösenord har skickats till din e-mail. Om du inte mottar något inom kort, kontrollera spam/skräpkorgen.<br>Om det inte finns något där, vänligen kontakta din lokala administratör.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dina filer är krypterade. Om du inte angett någon återställningsnyckel, kommer det att vara omöjligt att få tillbaka dina data efter att lösenordet är återställt..<br />Om du är osäker på vad du ska göra, vänligen kontakta din administratör innan du fortsätter.<br />Är du verkligen helt säker på att du vill fortsätta?",
"I know what I'm doing" : "Jag är säker på vad jag gör",
- "Reset password" : "Återställ lösenordet",
"Password can not be changed. Please contact your administrator." : "Lösenordet kan inte ändras. Vänligen kontakta din administratör.",
"No" : "Nej",
"Yes" : "Ja",
@@ -116,13 +115,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Kunde inte skicka något återställningsmail därför att det inte finns någon e-mailadress kopplad till detta användarnamn. Vänligen kontakta din administratör.",
"%s password reset" : "%s återställ lösenord",
"Use the following link to reset your password: {link}" : "Använd följande länk för att återställa lösenordet: {link}",
- "You will receive a link to reset your password via Email." : "Du får en länk att återställa ditt lösenord via e-post.",
- "Username" : "Användarnamn",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Dina filer är krypterade. Om du inte har aktiverat återställningsnyckeln kommer det inte att finnas någon möjlighet att få tillbaka dina filer efter att ditt lösenord har återställts. Om du är osäker, kontakta din systemadministratör innan du fortsätter. Är du verkligen säker på att fortsätta?",
- "Yes, I really want to reset my password now" : "Ja, jag vill verkligen återställa mitt lösenord nu",
- "Reset" : "Återställ",
"New password" : "Nytt lösenord",
"New Password" : "Nytt lösenord",
+ "Reset password" : "Återställ lösenordet",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X stöds inte och %s kommer inte att fungera korrekt på denna plattform. Använd på egen risk!",
"For the best results, please consider using a GNU/Linux server instead." : "För bästa resultat, överväg att använda en GNU/Linux server istället.",
"Personal" : "Personligt",
@@ -148,6 +143,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Din datakatalog och filer är förmodligen tillgängliga från Internet, eftersom .htaccess-filen inte fungerar.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "För information hur du korrekt konfigurerar din servern, se ownCloud <a href=\"%s\" target=\"_blank\">dokumentationen</a>.",
"Create an <strong>admin account</strong>" : "Skapa ett <strong>administratörskonto</strong>",
+ "Username" : "Användarnamn",
"Password" : "Lösenord",
"Storage & database" : "Lagring & databas",
"Data folder" : "Datamapp",
diff --git a/core/l10n/ta_LK.js b/core/l10n/ta_LK.js
index 520feac8871..831729238b1 100644
--- a/core/l10n/ta_LK.js
+++ b/core/l10n/ta_LK.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"December" : "மார்கழி",
"Settings" : "அமைப்புகள்",
"Saving..." : "சேமிக்கப்படுகிறது...",
- "Reset password" : "மீளமைத்த கடவுச்சொல்",
"No" : "இல்லை",
"Yes" : "ஆம்",
"Choose" : "தெரிவுசெய்க ",
@@ -57,9 +56,8 @@ OC.L10N.register(
"Add" : "சேர்க்க",
"_download %n file_::_download %n files_" : ["",""],
"Use the following link to reset your password: {link}" : "உங்கள் கடவுச்சொல்லை மீளமைக்க பின்வரும் இணைப்பை பயன்படுத்தவும் : {இணைப்பு}",
- "You will receive a link to reset your password via Email." : "நீங்கள் மின்னஞ்சல் மூலம் உங்களுடைய கடவுச்சொல்லை மீளமைப்பதற்கான இணைப்பை பெறுவீர்கள். ",
- "Username" : "பயனாளர் பெயர்",
"New password" : "புதிய கடவுச்சொல்",
+ "Reset password" : "மீளமைத்த கடவுச்சொல்",
"Personal" : "தனிப்பட்ட",
"Users" : "பயனாளர்",
"Apps" : "செயலிகள்",
@@ -68,6 +66,7 @@ OC.L10N.register(
"Access forbidden" : "அணுக தடை",
"Security Warning" : "பாதுகாப்பு எச்சரிக்கை",
"Create an <strong>admin account</strong>" : "<strong> நிர்வாக கணக்கொன்றை </strong> உருவாக்குக",
+ "Username" : "பயனாளர் பெயர்",
"Password" : "கடவுச்சொல்",
"Data folder" : "தரவு கோப்புறை",
"Configure the database" : "தரவுத்தளத்தை தகவமைக்க",
diff --git a/core/l10n/ta_LK.json b/core/l10n/ta_LK.json
index 41cdfe8281a..d88f8f42ae5 100644
--- a/core/l10n/ta_LK.json
+++ b/core/l10n/ta_LK.json
@@ -20,7 +20,6 @@
"December" : "மார்கழி",
"Settings" : "அமைப்புகள்",
"Saving..." : "சேமிக்கப்படுகிறது...",
- "Reset password" : "மீளமைத்த கடவுச்சொல்",
"No" : "இல்லை",
"Yes" : "ஆம்",
"Choose" : "தெரிவுசெய்க ",
@@ -55,9 +54,8 @@
"Add" : "சேர்க்க",
"_download %n file_::_download %n files_" : ["",""],
"Use the following link to reset your password: {link}" : "உங்கள் கடவுச்சொல்லை மீளமைக்க பின்வரும் இணைப்பை பயன்படுத்தவும் : {இணைப்பு}",
- "You will receive a link to reset your password via Email." : "நீங்கள் மின்னஞ்சல் மூலம் உங்களுடைய கடவுச்சொல்லை மீளமைப்பதற்கான இணைப்பை பெறுவீர்கள். ",
- "Username" : "பயனாளர் பெயர்",
"New password" : "புதிய கடவுச்சொல்",
+ "Reset password" : "மீளமைத்த கடவுச்சொல்",
"Personal" : "தனிப்பட்ட",
"Users" : "பயனாளர்",
"Apps" : "செயலிகள்",
@@ -66,6 +64,7 @@
"Access forbidden" : "அணுக தடை",
"Security Warning" : "பாதுகாப்பு எச்சரிக்கை",
"Create an <strong>admin account</strong>" : "<strong> நிர்வாக கணக்கொன்றை </strong> உருவாக்குக",
+ "Username" : "பயனாளர் பெயர்",
"Password" : "கடவுச்சொல்",
"Data folder" : "தரவு கோப்புறை",
"Configure the database" : "தரவுத்தளத்தை தகவமைக்க",
diff --git a/core/l10n/te.js b/core/l10n/te.js
index 37dfe005efe..e4febdac9ca 100644
--- a/core/l10n/te.js
+++ b/core/l10n/te.js
@@ -35,11 +35,11 @@ OC.L10N.register(
"Delete" : "తొలగించు",
"Add" : "చేర్చు",
"_download %n file_::_download %n files_" : ["",""],
- "Username" : "వాడుకరి పేరు",
"New password" : "కొత్త సంకేతపదం",
"Personal" : "వ్యక్తిగతం",
"Users" : "వాడుకరులు",
"Help" : "సహాయం",
+ "Username" : "వాడుకరి పేరు",
"Password" : "సంకేతపదం",
"Log out" : "నిష్క్రమించు"
},
diff --git a/core/l10n/te.json b/core/l10n/te.json
index d8224f5ffa1..1f749883e2c 100644
--- a/core/l10n/te.json
+++ b/core/l10n/te.json
@@ -33,11 +33,11 @@
"Delete" : "తొలగించు",
"Add" : "చేర్చు",
"_download %n file_::_download %n files_" : ["",""],
- "Username" : "వాడుకరి పేరు",
"New password" : "కొత్త సంకేతపదం",
"Personal" : "వ్యక్తిగతం",
"Users" : "వాడుకరులు",
"Help" : "సహాయం",
+ "Username" : "వాడుకరి పేరు",
"Password" : "సంకేతపదం",
"Log out" : "నిష్క్రమించు"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/core/l10n/th_TH.js b/core/l10n/th_TH.js
index 7b65977d950..7cf97df4823 100644
--- a/core/l10n/th_TH.js
+++ b/core/l10n/th_TH.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"December" : "ธันวาคม",
"Settings" : "ตั้งค่า",
"Saving..." : "กำลังบันทึกข้อมูล...",
- "Reset password" : "เปลี่ยนรหัสผ่าน",
"No" : "ไม่ตกลง",
"Yes" : "ตกลง",
"Choose" : "เลือก",
@@ -65,9 +64,8 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : [""],
"The update was successful. Redirecting you to ownCloud now." : "การอัพเดทเสร็จเรียบร้อยแล้ว กำลังเปลี่ยนเส้นทางไปที่ ownCloud อยู่ในขณะนี้",
"Use the following link to reset your password: {link}" : "ใช้ลิงค์ต่อไปนี้เพื่อเปลี่ยนรหัสผ่านของคุณใหม่: {link}",
- "You will receive a link to reset your password via Email." : "คุณจะได้รับลิงค์เพื่อกำหนดรหัสผ่านใหม่ทางอีเมล์",
- "Username" : "ชื่อผู้ใช้งาน",
"New password" : "รหัสผ่านใหม่",
+ "Reset password" : "เปลี่ยนรหัสผ่าน",
"Personal" : "ส่วนตัว",
"Users" : "ผู้ใช้งาน",
"Apps" : "แอปฯ",
@@ -76,6 +74,7 @@ OC.L10N.register(
"Access forbidden" : "การเข้าถึงถูกหวงห้าม",
"Security Warning" : "คำเตือนเกี่ยวกับความปลอดภัย",
"Create an <strong>admin account</strong>" : "สร้าง <strong>บัญชีผู้ดูแลระบบ</strong>",
+ "Username" : "ชื่อผู้ใช้งาน",
"Password" : "รหัสผ่าน",
"Data folder" : "โฟลเดอร์เก็บข้อมูล",
"Configure the database" : "กำหนดค่าฐานข้อมูล",
diff --git a/core/l10n/th_TH.json b/core/l10n/th_TH.json
index 12457e67752..4237deb738a 100644
--- a/core/l10n/th_TH.json
+++ b/core/l10n/th_TH.json
@@ -20,7 +20,6 @@
"December" : "ธันวาคม",
"Settings" : "ตั้งค่า",
"Saving..." : "กำลังบันทึกข้อมูล...",
- "Reset password" : "เปลี่ยนรหัสผ่าน",
"No" : "ไม่ตกลง",
"Yes" : "ตกลง",
"Choose" : "เลือก",
@@ -63,9 +62,8 @@
"_download %n file_::_download %n files_" : [""],
"The update was successful. Redirecting you to ownCloud now." : "การอัพเดทเสร็จเรียบร้อยแล้ว กำลังเปลี่ยนเส้นทางไปที่ ownCloud อยู่ในขณะนี้",
"Use the following link to reset your password: {link}" : "ใช้ลิงค์ต่อไปนี้เพื่อเปลี่ยนรหัสผ่านของคุณใหม่: {link}",
- "You will receive a link to reset your password via Email." : "คุณจะได้รับลิงค์เพื่อกำหนดรหัสผ่านใหม่ทางอีเมล์",
- "Username" : "ชื่อผู้ใช้งาน",
"New password" : "รหัสผ่านใหม่",
+ "Reset password" : "เปลี่ยนรหัสผ่าน",
"Personal" : "ส่วนตัว",
"Users" : "ผู้ใช้งาน",
"Apps" : "แอปฯ",
@@ -74,6 +72,7 @@
"Access forbidden" : "การเข้าถึงถูกหวงห้าม",
"Security Warning" : "คำเตือนเกี่ยวกับความปลอดภัย",
"Create an <strong>admin account</strong>" : "สร้าง <strong>บัญชีผู้ดูแลระบบ</strong>",
+ "Username" : "ชื่อผู้ใช้งาน",
"Password" : "รหัสผ่าน",
"Data folder" : "โฟลเดอร์เก็บข้อมูล",
"Configure the database" : "กำหนดค่าฐานข้อมูล",
diff --git a/core/l10n/tr.js b/core/l10n/tr.js
index 32144b5441c..37eab400dd4 100644
--- a/core/l10n/tr.js
+++ b/core/l10n/tr.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Parolanızı değiştirme bağlantısı e-posta adresinize gönderildi. Makul bir süre içerisinde almadıysanız spam/gereksiz klasörlerini kontrol ediniz.<br>Bu konumlarda da yoksa yerel sistem yöneticinize sorunuz.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dosyalarınız şifrelenmiş. Kurtarma anahtarını etkinleştirmemişseniz, parola sıfırlama işleminden sonra verilerinize erişmeniz imkansız olacak.<br />Ne yaptığınızdan emin değilseniz, devam etmeden önce sistem yöneticiniz ile iletişime geçin.<br />Gerçekten devam etmek istiyor musunuz?",
"I know what I'm doing" : "Ne yaptığımı biliyorum",
- "Reset password" : "Parolayı sıfırla",
"Password can not be changed. Please contact your administrator." : "Parola değiştirilemedi. Lütfen yöneticiniz ile iletişime geçin.",
"No" : "Hayır",
"Yes" : "Evet",
@@ -124,13 +123,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Sıfırlama e-postası, bu kullanıcı için bir e-posta adresi olmadığından gönderilemedi. Lütfen yöneticiniz ile iletişime geçin.",
"%s password reset" : "%s parola sıfırlama",
"Use the following link to reset your password: {link}" : "Parolanızı sıfırlamak için bu bağlantıyı kullanın: {link}",
- "You will receive a link to reset your password via Email." : "Parolanızı sıfırlamak için e-posta ile bir bağlantı alacaksınız.",
- "Username" : "Kullanıcı Adı",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Dosyalarınız şifrelenmiş. Eğer kurtarma anahtarını etkinleştirmediyseniz parola sıfırlama işleminden sonra verilerinize erişmeniz imkansız olacak. Eğer ne yaptığınızdan emin değilseniz, devam etmeden önce sistem yöneticiniz ile iletişime geçin. Gerçekten devam etmek istiyor musunuz?",
- "Yes, I really want to reset my password now" : "Evet, gerçekten parolamı şimdi sıfırlamak istiyorum",
- "Reset" : "Sıfırla",
"New password" : "Yeni parola",
"New Password" : "Yeni Parola",
+ "Reset password" : "Parolayı sıfırla",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X desteklenmiyor ve %s bu platformda düzgün çalışmayacak. Kendi riskinizle kullanın!",
"For the best results, please consider using a GNU/Linux server instead." : "En iyi sonuçlar için GNU/Linux sunucusu kullanın.",
"Personal" : "Kişisel",
@@ -170,6 +165,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Veri klasörünüz ve dosyalarınız .htaccess dosyası çalışmadığı için İnternet'ten erişime açık.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Sunucunuzu nasıl ayarlayacağınıza dair bilgi için, lütfen <a href=\"%s\" target=\"_blank\">belgelendirme sayfasını</a> ziyaret edin.",
"Create an <strong>admin account</strong>" : "Bir <strong>yönetici hesabı</strong> oluşturun",
+ "Username" : "Kullanıcı Adı",
"Password" : "Parola",
"Storage & database" : "Depolama ve veritabanı",
"Data folder" : "Veri klasörü",
diff --git a/core/l10n/tr.json b/core/l10n/tr.json
index c22d47c9e37..a34a07bd0e8 100644
--- a/core/l10n/tr.json
+++ b/core/l10n/tr.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Parolanızı değiştirme bağlantısı e-posta adresinize gönderildi. Makul bir süre içerisinde almadıysanız spam/gereksiz klasörlerini kontrol ediniz.<br>Bu konumlarda da yoksa yerel sistem yöneticinize sorunuz.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dosyalarınız şifrelenmiş. Kurtarma anahtarını etkinleştirmemişseniz, parola sıfırlama işleminden sonra verilerinize erişmeniz imkansız olacak.<br />Ne yaptığınızdan emin değilseniz, devam etmeden önce sistem yöneticiniz ile iletişime geçin.<br />Gerçekten devam etmek istiyor musunuz?",
"I know what I'm doing" : "Ne yaptığımı biliyorum",
- "Reset password" : "Parolayı sıfırla",
"Password can not be changed. Please contact your administrator." : "Parola değiştirilemedi. Lütfen yöneticiniz ile iletişime geçin.",
"No" : "Hayır",
"Yes" : "Evet",
@@ -122,13 +121,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Sıfırlama e-postası, bu kullanıcı için bir e-posta adresi olmadığından gönderilemedi. Lütfen yöneticiniz ile iletişime geçin.",
"%s password reset" : "%s parola sıfırlama",
"Use the following link to reset your password: {link}" : "Parolanızı sıfırlamak için bu bağlantıyı kullanın: {link}",
- "You will receive a link to reset your password via Email." : "Parolanızı sıfırlamak için e-posta ile bir bağlantı alacaksınız.",
- "Username" : "Kullanıcı Adı",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Dosyalarınız şifrelenmiş. Eğer kurtarma anahtarını etkinleştirmediyseniz parola sıfırlama işleminden sonra verilerinize erişmeniz imkansız olacak. Eğer ne yaptığınızdan emin değilseniz, devam etmeden önce sistem yöneticiniz ile iletişime geçin. Gerçekten devam etmek istiyor musunuz?",
- "Yes, I really want to reset my password now" : "Evet, gerçekten parolamı şimdi sıfırlamak istiyorum",
- "Reset" : "Sıfırla",
"New password" : "Yeni parola",
"New Password" : "Yeni Parola",
+ "Reset password" : "Parolayı sıfırla",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X desteklenmiyor ve %s bu platformda düzgün çalışmayacak. Kendi riskinizle kullanın!",
"For the best results, please consider using a GNU/Linux server instead." : "En iyi sonuçlar için GNU/Linux sunucusu kullanın.",
"Personal" : "Kişisel",
@@ -168,6 +163,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Veri klasörünüz ve dosyalarınız .htaccess dosyası çalışmadığı için İnternet'ten erişime açık.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Sunucunuzu nasıl ayarlayacağınıza dair bilgi için, lütfen <a href=\"%s\" target=\"_blank\">belgelendirme sayfasını</a> ziyaret edin.",
"Create an <strong>admin account</strong>" : "Bir <strong>yönetici hesabı</strong> oluşturun",
+ "Username" : "Kullanıcı Adı",
"Password" : "Parola",
"Storage & database" : "Depolama ve veritabanı",
"Data folder" : "Veri klasörü",
diff --git a/core/l10n/ug.js b/core/l10n/ug.js
index d6a74751c7a..c71c67807c7 100644
--- a/core/l10n/ug.js
+++ b/core/l10n/ug.js
@@ -38,13 +38,13 @@ OC.L10N.register(
"Delete" : "ئۆچۈر",
"Add" : "قوش",
"_download %n file_::_download %n files_" : [""],
- "Username" : "ئىشلەتكۈچى ئاتى",
"New password" : "يېڭى ئىم",
"Personal" : "شەخسىي",
"Users" : "ئىشلەتكۈچىلەر",
"Apps" : "ئەپلەر",
"Help" : "ياردەم",
"Security Warning" : "بىخەتەرلىك ئاگاھلاندۇرۇش",
+ "Username" : "ئىشلەتكۈچى ئاتى",
"Password" : "ئىم",
"Finish setup" : "تەڭشەك تامام",
"Log out" : "تىزىمدىن چىق"
diff --git a/core/l10n/ug.json b/core/l10n/ug.json
index bd061a85025..aadc8c1cf8b 100644
--- a/core/l10n/ug.json
+++ b/core/l10n/ug.json
@@ -36,13 +36,13 @@
"Delete" : "ئۆچۈر",
"Add" : "قوش",
"_download %n file_::_download %n files_" : [""],
- "Username" : "ئىشلەتكۈچى ئاتى",
"New password" : "يېڭى ئىم",
"Personal" : "شەخسىي",
"Users" : "ئىشلەتكۈچىلەر",
"Apps" : "ئەپلەر",
"Help" : "ياردەم",
"Security Warning" : "بىخەتەرلىك ئاگاھلاندۇرۇش",
+ "Username" : "ئىشلەتكۈچى ئاتى",
"Password" : "ئىم",
"Finish setup" : "تەڭشەك تامام",
"Log out" : "تىزىمدىن چىق"
diff --git a/core/l10n/uk.js b/core/l10n/uk.js
index 38f9d17e692..cd444036896 100644
--- a/core/l10n/uk.js
+++ b/core/l10n/uk.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Посилання для скидання вашого пароль було надіслано на ваш email. Якщо ви не отримали його найближчим часом, перевірте теку зі спамом.<br>Якщо і там немає, спитайте вашого місцевого адміністратора.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваші файли зашифровані. Якщо ви не зробили ключ відновлення, після скидання паролю відновити ваші дані буде неможливо.<br /> Якщо ви не знаєте, що робити, будь ласка, зверніться до адміністратора перед продовженням.<br /> Ви дійсно хочете продовжити?",
"I know what I'm doing" : "Я знаю що роблю",
- "Reset password" : "Скинути пароль",
"Password can not be changed. Please contact your administrator." : "Пароль не може бути змінено. Будь ласка, зверніться до вашого адміністратора",
"No" : "Ні",
"Yes" : "Так",
@@ -124,13 +123,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Не вдалося відправити скидання паролю, тому що немає адреси електронної пошти для цього користувача. Будь ласка, зверніться до адміністратора.",
"%s password reset" : "%s пароль скинуто",
"Use the following link to reset your password: {link}" : "Використовуйте наступне посилання для скидання пароля: {link}",
- "You will receive a link to reset your password via Email." : "Ви отримаєте посилання для скидання вашого паролю на Ел. пошту.",
- "Username" : "Ім'я користувача",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Ваші файли зашифровані. Якщо ви не зробили придатний ключ відновлення, не буде ніякої можливості отримати дані назад після того, як ваш пароль буде скинутий. Якщо ви не знаєте, що робити, будь ласка, зверніться до адміністратора, щоб продовжити. Ви дійсно хочете продовжити?",
- "Yes, I really want to reset my password now" : "Так, я справді бажаю скинути мій пароль зараз",
- "Reset" : "Перевстановити",
"New password" : "Новий пароль",
"New Password" : "Новий пароль",
+ "Reset password" : "Скинути пароль",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X не підтримується і %s не буде коректно працювати на цій платформі. Випробовуєте на свій риск!",
"For the best results, please consider using a GNU/Linux server instead." : "Для кращих результатів розгляньте можливість використання GNU/Linux серверу",
"Personal" : "Особисте",
@@ -170,6 +165,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ваші дані каталогів і файлів, ймовірно, доступні з інтернету, тому що .htaccess файл не працює.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Для отримання інформації, як правильно налаштувати сервер, див. <a href=\"%s\" target=\"_blank\">документацію</a>.",
"Create an <strong>admin account</strong>" : "Створити <strong>обліковий запис адміністратора</strong>",
+ "Username" : "Ім'я користувача",
"Password" : "Пароль",
"Storage & database" : "Сховище і база даних",
"Data folder" : "Каталог даних",
diff --git a/core/l10n/uk.json b/core/l10n/uk.json
index 8ec13dedae7..4e649b34ff4 100644
--- a/core/l10n/uk.json
+++ b/core/l10n/uk.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Посилання для скидання вашого пароль було надіслано на ваш email. Якщо ви не отримали його найближчим часом, перевірте теку зі спамом.<br>Якщо і там немає, спитайте вашого місцевого адміністратора.",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваші файли зашифровані. Якщо ви не зробили ключ відновлення, після скидання паролю відновити ваші дані буде неможливо.<br /> Якщо ви не знаєте, що робити, будь ласка, зверніться до адміністратора перед продовженням.<br /> Ви дійсно хочете продовжити?",
"I know what I'm doing" : "Я знаю що роблю",
- "Reset password" : "Скинути пароль",
"Password can not be changed. Please contact your administrator." : "Пароль не може бути змінено. Будь ласка, зверніться до вашого адміністратора",
"No" : "Ні",
"Yes" : "Так",
@@ -122,13 +121,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Не вдалося відправити скидання паролю, тому що немає адреси електронної пошти для цього користувача. Будь ласка, зверніться до адміністратора.",
"%s password reset" : "%s пароль скинуто",
"Use the following link to reset your password: {link}" : "Використовуйте наступне посилання для скидання пароля: {link}",
- "You will receive a link to reset your password via Email." : "Ви отримаєте посилання для скидання вашого паролю на Ел. пошту.",
- "Username" : "Ім'я користувача",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Ваші файли зашифровані. Якщо ви не зробили придатний ключ відновлення, не буде ніякої можливості отримати дані назад після того, як ваш пароль буде скинутий. Якщо ви не знаєте, що робити, будь ласка, зверніться до адміністратора, щоб продовжити. Ви дійсно хочете продовжити?",
- "Yes, I really want to reset my password now" : "Так, я справді бажаю скинути мій пароль зараз",
- "Reset" : "Перевстановити",
"New password" : "Новий пароль",
"New Password" : "Новий пароль",
+ "Reset password" : "Скинути пароль",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X не підтримується і %s не буде коректно працювати на цій платформі. Випробовуєте на свій риск!",
"For the best results, please consider using a GNU/Linux server instead." : "Для кращих результатів розгляньте можливість використання GNU/Linux серверу",
"Personal" : "Особисте",
@@ -168,6 +163,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ваші дані каталогів і файлів, ймовірно, доступні з інтернету, тому що .htaccess файл не працює.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Для отримання інформації, як правильно налаштувати сервер, див. <a href=\"%s\" target=\"_blank\">документацію</a>.",
"Create an <strong>admin account</strong>" : "Створити <strong>обліковий запис адміністратора</strong>",
+ "Username" : "Ім'я користувача",
"Password" : "Пароль",
"Storage & database" : "Сховище і база даних",
"Data folder" : "Каталог даних",
diff --git a/core/l10n/ur.php b/core/l10n/ur.php
deleted file mode 100644
index fdc6c81bd88..00000000000
--- a/core/l10n/ur.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"_{count} file conflict_::_{count} file conflicts_" => array("",""),
-"Error" => "خرابی"
-);
-$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/core/l10n/ur_PK.js b/core/l10n/ur_PK.js
index ce5c57e5fdf..491309f60a9 100644
--- a/core/l10n/ur_PK.js
+++ b/core/l10n/ur_PK.js
@@ -29,7 +29,6 @@ OC.L10N.register(
"December" : "دسمبر",
"Settings" : "ترتیبات",
"Saving..." : "محفوظ ھو رہا ہے ...",
- "Reset password" : "ری سیٹ پاسورڈ",
"No" : "نہیں",
"Yes" : "ہاں",
"Choose" : "منتخب کریں",
@@ -90,11 +89,8 @@ OC.L10N.register(
"Please reload the page." : "براہ مہربانی صفحہ دوبارہ لوڈ کریں.",
"The update was successful. Redirecting you to ownCloud now." : "اپ ڈیٹ کامیاب تھی۔ اپ کو اون کلوڈ سے منسلک کیا جا رہا ہے",
"Use the following link to reset your password: {link}" : "اپنا پاسورڈ ری سیٹ کرنے کے لیے اس لنک پر کلک کریں۔ {link}",
- "You will receive a link to reset your password via Email." : "آپ ای میل کے ذریعے اپنے پاسورڈ ری سیٹ کا لنک موصول کریں گے",
- "Username" : "یوزر نیم",
- "Yes, I really want to reset my password now" : "جی ہاں، میں واقعی ابھی اپنا پاس ورڈ ری سیٹ کرنا چاہتا ہوں",
- "Reset" : "ری سیٹ",
"New password" : "نیا پاسورڈ",
+ "Reset password" : "ری سیٹ پاسورڈ",
"Personal" : "شخصی",
"Users" : "صارفین",
"Apps" : "ایپز",
@@ -107,6 +103,7 @@ OC.L10N.register(
"Please update your PHP installation to use %s securely." : " براہ مہربانی %s کو بحفاظت استعمال کرنے کے پی ایچ پی کی تنصیب اپڈیٹ کریں",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "آپ کی ڈیٹا ڈائریکٹری اور فائلیں امکان ہےانٹرنیٹ سے قابل رسائی ہیں کیونکہ htaccess. فائل کام نہیں کرتا ہے",
"Create an <strong>admin account</strong>" : "ایک<strong> ایڈمن اکاؤنٹ</strong> بنائیں",
+ "Username" : "یوزر نیم",
"Password" : "پاسورڈ",
"Storage & database" : "ذخیرہ اور ڈیٹا بیس",
"Data folder" : "ڈیٹا فولڈر",
diff --git a/core/l10n/ur_PK.json b/core/l10n/ur_PK.json
index 6f3a5993a9f..138c67824f2 100644
--- a/core/l10n/ur_PK.json
+++ b/core/l10n/ur_PK.json
@@ -27,7 +27,6 @@
"December" : "دسمبر",
"Settings" : "ترتیبات",
"Saving..." : "محفوظ ھو رہا ہے ...",
- "Reset password" : "ری سیٹ پاسورڈ",
"No" : "نہیں",
"Yes" : "ہاں",
"Choose" : "منتخب کریں",
@@ -88,11 +87,8 @@
"Please reload the page." : "براہ مہربانی صفحہ دوبارہ لوڈ کریں.",
"The update was successful. Redirecting you to ownCloud now." : "اپ ڈیٹ کامیاب تھی۔ اپ کو اون کلوڈ سے منسلک کیا جا رہا ہے",
"Use the following link to reset your password: {link}" : "اپنا پاسورڈ ری سیٹ کرنے کے لیے اس لنک پر کلک کریں۔ {link}",
- "You will receive a link to reset your password via Email." : "آپ ای میل کے ذریعے اپنے پاسورڈ ری سیٹ کا لنک موصول کریں گے",
- "Username" : "یوزر نیم",
- "Yes, I really want to reset my password now" : "جی ہاں، میں واقعی ابھی اپنا پاس ورڈ ری سیٹ کرنا چاہتا ہوں",
- "Reset" : "ری سیٹ",
"New password" : "نیا پاسورڈ",
+ "Reset password" : "ری سیٹ پاسورڈ",
"Personal" : "شخصی",
"Users" : "صارفین",
"Apps" : "ایپز",
@@ -105,6 +101,7 @@
"Please update your PHP installation to use %s securely." : " براہ مہربانی %s کو بحفاظت استعمال کرنے کے پی ایچ پی کی تنصیب اپڈیٹ کریں",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "آپ کی ڈیٹا ڈائریکٹری اور فائلیں امکان ہےانٹرنیٹ سے قابل رسائی ہیں کیونکہ htaccess. فائل کام نہیں کرتا ہے",
"Create an <strong>admin account</strong>" : "ایک<strong> ایڈمن اکاؤنٹ</strong> بنائیں",
+ "Username" : "یوزر نیم",
"Password" : "پاسورڈ",
"Storage & database" : "ذخیرہ اور ڈیٹا بیس",
"Data folder" : "ڈیٹا فولڈر",
diff --git a/core/l10n/vi.js b/core/l10n/vi.js
index 5e48c7802d9..6c53239cdf4 100644
--- a/core/l10n/vi.js
+++ b/core/l10n/vi.js
@@ -31,7 +31,6 @@ OC.L10N.register(
"December" : "Tháng 12",
"Settings" : "Cài đặt",
"Saving..." : "Đang lưu...",
- "Reset password" : "Khôi phục mật khẩu",
"No" : "Không",
"Yes" : "Có",
"Choose" : "Chọn",
@@ -93,12 +92,8 @@ OC.L10N.register(
"The update was successful. Redirecting you to ownCloud now." : "Cập nhật thành công .Hệ thống sẽ đưa bạn tới ownCloud.",
"%s password reset" : "%s thiết lập lại mật khẩu",
"Use the following link to reset your password: {link}" : "Dùng đường dẫn sau để khôi phục lại mật khẩu : {link}",
- "You will receive a link to reset your password via Email." : "Vui lòng kiểm tra Email để khôi phục lại mật khẩu.",
- "Username" : "Tên đăng nhập",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Tập tin của bạn được mã hóa. Nếu bạn chưa kích hoạt khoá phục hồi, sẽ không có cách nào để lấy lại được dữ liệu sau khi thiết lập lại mật khẩu. Nếu bạn không biết phải làm gì, xin vui lòng liên hệ với quản trị viên trước khi tiếp tục. Bạn có muốn tiếp tục?",
- "Yes, I really want to reset my password now" : "Vâng, tôi muốn thiết lập lại mật khẩu ngay.",
- "Reset" : "Khởi động lại",
"New password" : "Mật khẩu mới",
+ "Reset password" : "Khôi phục mật khẩu",
"Personal" : "Cá nhân",
"Users" : "Người dùng",
"Apps" : "Ứng dụng",
@@ -119,6 +114,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Thư mục và file dữ liệu của bạn có thể được truy cập từ internet bởi vì file .htaccess không hoạt động",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Để biết thêm thông tin và cách cấu hình đúng vui lòng xem thêm <a href=\"%s\" target=\"_blank\">tài l</a>.",
"Create an <strong>admin account</strong>" : "Tạo một <strong>tài khoản quản trị</strong>",
+ "Username" : "Tên đăng nhập",
"Password" : "Mật khẩu",
"Data folder" : "Thư mục dữ liệu",
"Configure the database" : "Cấu hình cơ sở dữ liệu",
diff --git a/core/l10n/vi.json b/core/l10n/vi.json
index 7567c0a65bb..1670cad7777 100644
--- a/core/l10n/vi.json
+++ b/core/l10n/vi.json
@@ -29,7 +29,6 @@
"December" : "Tháng 12",
"Settings" : "Cài đặt",
"Saving..." : "Đang lưu...",
- "Reset password" : "Khôi phục mật khẩu",
"No" : "Không",
"Yes" : "Có",
"Choose" : "Chọn",
@@ -91,12 +90,8 @@
"The update was successful. Redirecting you to ownCloud now." : "Cập nhật thành công .Hệ thống sẽ đưa bạn tới ownCloud.",
"%s password reset" : "%s thiết lập lại mật khẩu",
"Use the following link to reset your password: {link}" : "Dùng đường dẫn sau để khôi phục lại mật khẩu : {link}",
- "You will receive a link to reset your password via Email." : "Vui lòng kiểm tra Email để khôi phục lại mật khẩu.",
- "Username" : "Tên đăng nhập",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "Tập tin của bạn được mã hóa. Nếu bạn chưa kích hoạt khoá phục hồi, sẽ không có cách nào để lấy lại được dữ liệu sau khi thiết lập lại mật khẩu. Nếu bạn không biết phải làm gì, xin vui lòng liên hệ với quản trị viên trước khi tiếp tục. Bạn có muốn tiếp tục?",
- "Yes, I really want to reset my password now" : "Vâng, tôi muốn thiết lập lại mật khẩu ngay.",
- "Reset" : "Khởi động lại",
"New password" : "Mật khẩu mới",
+ "Reset password" : "Khôi phục mật khẩu",
"Personal" : "Cá nhân",
"Users" : "Người dùng",
"Apps" : "Ứng dụng",
@@ -117,6 +112,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Thư mục và file dữ liệu của bạn có thể được truy cập từ internet bởi vì file .htaccess không hoạt động",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Để biết thêm thông tin và cách cấu hình đúng vui lòng xem thêm <a href=\"%s\" target=\"_blank\">tài l</a>.",
"Create an <strong>admin account</strong>" : "Tạo một <strong>tài khoản quản trị</strong>",
+ "Username" : "Tên đăng nhập",
"Password" : "Mật khẩu",
"Data folder" : "Thư mục dữ liệu",
"Configure the database" : "Cấu hình cơ sở dữ liệu",
diff --git a/core/l10n/zh_CN.js b/core/l10n/zh_CN.js
index da5521925ea..8a432e857ff 100644
--- a/core/l10n/zh_CN.js
+++ b/core/l10n/zh_CN.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "密码重置邮件已经发送到您的电子邮箱中。如果您长时间没能收到邮件,请检查您的垃圾/广告邮件箱。<br>如果未能收到邮件请联系管理员。",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的文件已被加密。如果您没有启用恢复密钥,密码重置后您将无法取回您的文件。<br />在继续之前,如果有疑问请联系您的管理员。<br />确认继续?",
"I know what I'm doing" : "我知道我在做什么",
- "Reset password" : "重置密码",
"Password can not be changed. Please contact your administrator." : "无法修改密码,请联系管理员。",
"No" : "否",
"Yes" : "是",
@@ -120,13 +119,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "此用户名的电子邮件地址不存在导致无法发送重置邮件,请联系管理员。",
"%s password reset" : "重置 %s 的密码",
"Use the following link to reset your password: {link}" : "使用以下链接重置您的密码:{link}",
- "You will receive a link to reset your password via Email." : "您将会收到包含可以重置密码链接的邮件。",
- "Username" : "用户名",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "您的文件已加密。如果您不启用恢复密钥,您将无法在重设密码后取回文件。如果您不太确定,请在继续前联系您的管理员。您真的要继续吗?",
- "Yes, I really want to reset my password now" : "使得,我真的要现在重设密码",
- "Reset" : "重置",
"New password" : "新密码",
"New Password" : "新密码",
+ "Reset password" : "重置密码",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X 不被支持并且 %s 在这个平台上无法正常工作。请自行承担风险!",
"For the best results, please consider using a GNU/Linux server instead." : "为了达到最好的效果,请考虑使用 GNU/Linux 服务器。",
"Personal" : "个人",
@@ -165,6 +160,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "您的数据目录和文件可能可以直接被互联网访问,因为 .htaccess 并未正常工作。",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "关于如何配置服务器,请参见 <a href=\"%s\" target=\"_blank\">此文档</a>。",
"Create an <strong>admin account</strong>" : "创建<strong>管理员账号</strong>",
+ "Username" : "用户名",
"Password" : "密码",
"Storage & database" : "存储 & 数据库",
"Data folder" : "数据目录",
diff --git a/core/l10n/zh_CN.json b/core/l10n/zh_CN.json
index ff67feacad0..7f2aa70e0cd 100644
--- a/core/l10n/zh_CN.json
+++ b/core/l10n/zh_CN.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "密码重置邮件已经发送到您的电子邮箱中。如果您长时间没能收到邮件,请检查您的垃圾/广告邮件箱。<br>如果未能收到邮件请联系管理员。",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的文件已被加密。如果您没有启用恢复密钥,密码重置后您将无法取回您的文件。<br />在继续之前,如果有疑问请联系您的管理员。<br />确认继续?",
"I know what I'm doing" : "我知道我在做什么",
- "Reset password" : "重置密码",
"Password can not be changed. Please contact your administrator." : "无法修改密码,请联系管理员。",
"No" : "否",
"Yes" : "是",
@@ -118,13 +117,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "此用户名的电子邮件地址不存在导致无法发送重置邮件,请联系管理员。",
"%s password reset" : "重置 %s 的密码",
"Use the following link to reset your password: {link}" : "使用以下链接重置您的密码:{link}",
- "You will receive a link to reset your password via Email." : "您将会收到包含可以重置密码链接的邮件。",
- "Username" : "用户名",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "您的文件已加密。如果您不启用恢复密钥,您将无法在重设密码后取回文件。如果您不太确定,请在继续前联系您的管理员。您真的要继续吗?",
- "Yes, I really want to reset my password now" : "使得,我真的要现在重设密码",
- "Reset" : "重置",
"New password" : "新密码",
"New Password" : "新密码",
+ "Reset password" : "重置密码",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X 不被支持并且 %s 在这个平台上无法正常工作。请自行承担风险!",
"For the best results, please consider using a GNU/Linux server instead." : "为了达到最好的效果,请考虑使用 GNU/Linux 服务器。",
"Personal" : "个人",
@@ -163,6 +158,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "您的数据目录和文件可能可以直接被互联网访问,因为 .htaccess 并未正常工作。",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "关于如何配置服务器,请参见 <a href=\"%s\" target=\"_blank\">此文档</a>。",
"Create an <strong>admin account</strong>" : "创建<strong>管理员账号</strong>",
+ "Username" : "用户名",
"Password" : "密码",
"Storage & database" : "存储 & 数据库",
"Data folder" : "数据目录",
diff --git a/core/l10n/zh_HK.js b/core/l10n/zh_HK.js
index c36746e12fc..9e4ef8969d8 100644
--- a/core/l10n/zh_HK.js
+++ b/core/l10n/zh_HK.js
@@ -22,7 +22,6 @@ OC.L10N.register(
"December" : "十二月",
"Settings" : "設定",
"Saving..." : "儲存中...",
- "Reset password" : "重設密碼",
"No" : "否",
"Yes" : "是",
"Ok" : "確認",
@@ -54,17 +53,16 @@ OC.L10N.register(
"_download %n file_::_download %n files_" : [""],
"The update was successful. Redirecting you to ownCloud now." : "更新成功, 正",
"Use the following link to reset your password: {link}" : "請用以下連結重設你的密碼: {link}",
- "You will receive a link to reset your password via Email." : "你將收到一封電郵",
- "Username" : "用戶名稱",
- "Reset" : "重設",
"New password" : "新密碼",
"New Password" : "新密碼",
+ "Reset password" : "重設密碼",
"Personal" : "個人",
"Users" : "用戶",
"Apps" : "軟件",
"Admin" : "管理",
"Help" : "幫助",
"Create an <strong>admin account</strong>" : "建立管理員帳戶",
+ "Username" : "用戶名稱",
"Password" : "密碼",
"Configure the database" : "設定資料庫",
"Database user" : "資料庫帳戶",
diff --git a/core/l10n/zh_HK.json b/core/l10n/zh_HK.json
index 294bdce33b6..83806390d1f 100644
--- a/core/l10n/zh_HK.json
+++ b/core/l10n/zh_HK.json
@@ -20,7 +20,6 @@
"December" : "十二月",
"Settings" : "設定",
"Saving..." : "儲存中...",
- "Reset password" : "重設密碼",
"No" : "否",
"Yes" : "是",
"Ok" : "確認",
@@ -52,17 +51,16 @@
"_download %n file_::_download %n files_" : [""],
"The update was successful. Redirecting you to ownCloud now." : "更新成功, 正",
"Use the following link to reset your password: {link}" : "請用以下連結重設你的密碼: {link}",
- "You will receive a link to reset your password via Email." : "你將收到一封電郵",
- "Username" : "用戶名稱",
- "Reset" : "重設",
"New password" : "新密碼",
"New Password" : "新密碼",
+ "Reset password" : "重設密碼",
"Personal" : "個人",
"Users" : "用戶",
"Apps" : "軟件",
"Admin" : "管理",
"Help" : "幫助",
"Create an <strong>admin account</strong>" : "建立管理員帳戶",
+ "Username" : "用戶名稱",
"Password" : "密碼",
"Configure the database" : "設定資料庫",
"Database user" : "資料庫帳戶",
diff --git a/core/l10n/zh_TW.js b/core/l10n/zh_TW.js
index 47a9f738ed0..2a3e38d6ff8 100644
--- a/core/l10n/zh_TW.js
+++ b/core/l10n/zh_TW.js
@@ -39,7 +39,6 @@ OC.L10N.register(
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "重設密碼的連結已經 email 至你的信箱,如果你在一段時間內沒收到,請檢查垃圾郵件資料夾,如果還是找不到,請聯絡系統管理員。",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的檔案是加密的,如果您沒有啟用救援金鑰,當您重設密碼之後將無法存取您的資料。<br/>如果不確定該怎麼做,請聯絡您的系統管理員。<br/>您確定要繼續嗎?",
"I know what I'm doing" : "我知道我在幹嘛",
- "Reset password" : "重設密碼",
"Password can not be changed. Please contact your administrator." : "無法變更密碼,請聯絡您的系統管理員",
"No" : "否",
"Yes" : "是",
@@ -120,13 +119,9 @@ OC.L10N.register(
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "無法寄送重設 email ,因為這個帳號沒有設定 email 地址,請聯絡您的系統管理員",
"%s password reset" : "%s 密碼重設",
"Use the following link to reset your password: {link}" : "請至以下連結重設您的密碼: {link}",
- "You will receive a link to reset your password via Email." : "重設密碼的連結將會寄到您的電子郵件信箱。",
- "Username" : "使用者名稱",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "您的檔案已加密,如果您沒有設定還原金鑰,未來重設密碼後將無法取回您的資料。如果您不確定該怎麼做,請洽詢系統管理員後再繼續。您確定要現在繼續嗎?",
- "Yes, I really want to reset my password now" : "對,我現在想要重設我的密碼。",
- "Reset" : "重設",
"New password" : "新密碼",
"New Password" : "新密碼",
+ "Reset password" : "重設密碼",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "不支援 Mac OS X 而且 %s 在這個平台上面無法正常運作,請自行衡量風險!",
"For the best results, please consider using a GNU/Linux server instead." : "請考慮使用 GNU/Linux 伺服器以取得最好的效果",
"Personal" : "個人",
@@ -165,6 +160,7 @@ OC.L10N.register(
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "您的資料目錄看起來可以被 Internet 公開存取,因為 .htaccess 設定並未生效。",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "請參考<a href=\"%s\" target=\"_blank\">說明文件</a>以瞭解如何正確設定您的伺服器。",
"Create an <strong>admin account</strong>" : "建立一個<strong>管理者帳號</strong>",
+ "Username" : "使用者名稱",
"Password" : "密碼",
"Storage & database" : "儲存空間和資料庫",
"Data folder" : "資料儲存位置",
diff --git a/core/l10n/zh_TW.json b/core/l10n/zh_TW.json
index 875b5b5af4a..c8db6e348c7 100644
--- a/core/l10n/zh_TW.json
+++ b/core/l10n/zh_TW.json
@@ -37,7 +37,6 @@
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "重設密碼的連結已經 email 至你的信箱,如果你在一段時間內沒收到,請檢查垃圾郵件資料夾,如果還是找不到,請聯絡系統管理員。",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的檔案是加密的,如果您沒有啟用救援金鑰,當您重設密碼之後將無法存取您的資料。<br/>如果不確定該怎麼做,請聯絡您的系統管理員。<br/>您確定要繼續嗎?",
"I know what I'm doing" : "我知道我在幹嘛",
- "Reset password" : "重設密碼",
"Password can not be changed. Please contact your administrator." : "無法變更密碼,請聯絡您的系統管理員",
"No" : "否",
"Yes" : "是",
@@ -118,13 +117,9 @@
"Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "無法寄送重設 email ,因為這個帳號沒有設定 email 地址,請聯絡您的系統管理員",
"%s password reset" : "%s 密碼重設",
"Use the following link to reset your password: {link}" : "請至以下連結重設您的密碼: {link}",
- "You will receive a link to reset your password via Email." : "重設密碼的連結將會寄到您的電子郵件信箱。",
- "Username" : "使用者名稱",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" : "您的檔案已加密,如果您沒有設定還原金鑰,未來重設密碼後將無法取回您的資料。如果您不確定該怎麼做,請洽詢系統管理員後再繼續。您確定要現在繼續嗎?",
- "Yes, I really want to reset my password now" : "對,我現在想要重設我的密碼。",
- "Reset" : "重設",
"New password" : "新密碼",
"New Password" : "新密碼",
+ "Reset password" : "重設密碼",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "不支援 Mac OS X 而且 %s 在這個平台上面無法正常運作,請自行衡量風險!",
"For the best results, please consider using a GNU/Linux server instead." : "請考慮使用 GNU/Linux 伺服器以取得最好的效果",
"Personal" : "個人",
@@ -163,6 +158,7 @@
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "您的資料目錄看起來可以被 Internet 公開存取,因為 .htaccess 設定並未生效。",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "請參考<a href=\"%s\" target=\"_blank\">說明文件</a>以瞭解如何正確設定您的伺服器。",
"Create an <strong>admin account</strong>" : "建立一個<strong>管理者帳號</strong>",
+ "Username" : "使用者名稱",
"Password" : "密碼",
"Storage & database" : "儲存空間和資料庫",
"Data folder" : "資料儲存位置",
diff --git a/core/lostpassword/controller/lostcontroller.php b/core/lostpassword/controller/lostcontroller.php
index e4d51fde077..aee4001ed37 100644
--- a/core/lostpassword/controller/lostcontroller.php
+++ b/core/lostpassword/controller/lostcontroller.php
@@ -9,68 +9,73 @@
namespace OC\Core\LostPassword\Controller;
use \OCP\AppFramework\Controller;
-use \OCP\AppFramework\Http\JSONResponse;
use \OCP\AppFramework\Http\TemplateResponse;
use \OCP\IURLGenerator;
use \OCP\IRequest;
use \OCP\IL10N;
use \OCP\IConfig;
-use \OCP\IUserSession;
-use \OC\Core\LostPassword\EncryptedDataException;
+use OCP\IUserManager;
+use OCP\Security\ISecureRandom;
+use \OC_Defaults;
+use OCP\Security\StringUtils;
+/**
+ * Class LostController
+ *
+ * Successfully changing a password will emit the post_passwordReset hook.
+ *
+ * @package OC\Core\LostPassword\Controller
+ */
class LostController extends Controller {
- /**
- * @var \OCP\IURLGenerator
- */
+ /** @var IURLGenerator */
protected $urlGenerator;
-
- /**
- * @var \OCP\IUserManager
- */
+ /** @var IUserManager */
protected $userManager;
-
- /**
- * @var \OC_Defaults
- */
+ /** @var OC_Defaults */
protected $defaults;
-
- /**
- * @var IL10N
- */
+ /** @var IL10N */
protected $l10n;
+ /** @var string */
protected $from;
+ /** @var bool */
protected $isDataEncrypted;
-
- /**
- * @var IConfig
- */
+ /** @var IConfig */
protected $config;
+ /** @var ISecureRandom */
+ protected $secureRandom;
/**
- * @var IUserSession
+ * @param string $appName
+ * @param IRequest $request
+ * @param IURLGenerator $urlGenerator
+ * @param IUserManager $userManager
+ * @param OC_Defaults $defaults
+ * @param IL10N $l10n
+ * @param IConfig $config
+ * @param ISecureRandom $secureRandom
+ * @param string $from
+ * @param string $isDataEncrypted
*/
- protected $userSession;
-
public function __construct($appName,
- IRequest $request,
- IURLGenerator $urlGenerator,
- $userManager,
- $defaults,
- IL10N $l10n,
- IConfig $config,
- IUserSession $userSession,
- $from,
- $isDataEncrypted) {
+ IRequest $request,
+ IURLGenerator $urlGenerator,
+ IUserManager $userManager,
+ OC_Defaults $defaults,
+ IL10N $l10n,
+ IConfig $config,
+ ISecureRandom $secureRandom,
+ $from,
+ $isDataEncrypted) {
parent::__construct($appName, $request);
$this->urlGenerator = $urlGenerator;
$this->userManager = $userManager;
$this->defaults = $defaults;
$this->l10n = $l10n;
+ $this->secureRandom = $secureRandom;
$this->from = $from;
$this->isDataEncrypted = $isDataEncrypted;
$this->config = $config;
- $this->userSession = $userSession;
}
/**
@@ -81,23 +86,31 @@ class LostController extends Controller {
*
* @param string $token
* @param string $userId
+ * @return TemplateResponse
*/
public function resetform($token, $userId) {
return new TemplateResponse(
'core/lostpassword',
'resetpassword',
array(
- 'isEncrypted' => $this->isDataEncrypted,
- 'link' => $this->getLink('core.lost.setPassword', $userId, $token),
+ 'link' => $this->urlGenerator->linkToRouteAbsolute('core.lost.setPassword', array('userId' => $userId, 'token' => $token)),
),
'guest'
);
}
+ /**
+ * @param $message
+ * @param array $additional
+ * @return array
+ */
private function error($message, array $additional=array()) {
return array_merge(array('status' => 'error', 'msg' => $message), $additional);
}
+ /**
+ * @return array
+ */
private function success() {
return array('status'=>'success');
}
@@ -106,14 +119,12 @@ class LostController extends Controller {
* @PublicPage
*
* @param string $user
- * @param bool $proceed
+ * @return array
*/
- public function email($user, $proceed){
+ public function email($user){
// FIXME: use HTTP error codes
try {
- $this->sendEmail($user, $proceed);
- } catch (EncryptedDataException $e){
- return $this->error('', array('encryption' => '1'));
+ $this->sendEmail($user);
} catch (\Exception $e){
return $this->error($e->getMessage());
}
@@ -121,15 +132,23 @@ class LostController extends Controller {
return $this->success();
}
-
/**
* @PublicPage
+ * @param string $token
+ * @param string $userId
+ * @param string $password
+ * @param boolean $proceed
+ * @return array
*/
- public function setPassword($token, $userId, $password) {
+ public function setPassword($token, $userId, $password, $proceed) {
+ if ($this->isDataEncrypted && !$proceed){
+ return $this->error('', array('encryption' => true));
+ }
+
try {
$user = $this->userManager->get($userId);
- if (!$this->checkToken($userId, $token)) {
+ if (!StringUtils::equals($this->config->getUserValue($userId, 'owncloud', 'lostpassword'), $token)) {
throw new \Exception($this->l10n->t('Couldn\'t reset password because the token is invalid'));
}
@@ -137,9 +156,10 @@ class LostController extends Controller {
throw new \Exception();
}
- // FIXME: should be added to the all config at some point
- \OC_Preferences::deleteKey($userId, 'owncloud', 'lostpassword');
- $this->userSession->unsetMagicInCookie();
+ \OC_Hook::emit('\OC\Core\LostPassword\Controller\LostController', 'post_passwordReset', array('uid' => $userId, 'password' => $password));
+
+ $this->config->deleteUserValue($userId, 'owncloud', 'lostpassword');
+ @\OC_User::unsetMagicInCookie();
} catch (\Exception $e){
return $this->error($e->getMessage());
@@ -148,36 +168,32 @@ class LostController extends Controller {
return $this->success();
}
-
- protected function sendEmail($user, $proceed) {
- if ($this->isDataEncrypted && !$proceed){
- throw new EncryptedDataException();
- }
-
+ /**
+ * @param string $user
+ * @throws \Exception
+ */
+ protected function sendEmail($user) {
if (!$this->userManager->userExists($user)) {
- throw new \Exception(
- $this->l10n->t('Couldn\'t send reset email. Please make sure '.
- 'your username is correct.'));
+ throw new \Exception($this->l10n->t('Couldn\'t send reset email. Please make sure your username is correct.'));
}
- $token = hash('sha256', \OC_Util::generateRandomBytes(30));
-
- // Hash the token again to prevent timing attacks
- $this->config->setUserValue(
- $user, 'owncloud', 'lostpassword', hash('sha256', $token)
- );
-
$email = $this->config->getUserValue($user, 'settings', 'email');
if (empty($email)) {
throw new \Exception(
$this->l10n->t('Couldn\'t send reset email because there is no '.
- 'email address for this username. Please ' .
- 'contact your administrator.')
+ 'email address for this username. Please ' .
+ 'contact your administrator.')
);
}
- $link = $this->getLink('core.lost.resetform', $user, $token);
+ $token = $this->secureRandom->getMediumStrengthGenerator()->generate(21,
+ ISecureRandom::CHAR_DIGITS.
+ ISecureRandom::CHAR_LOWER.
+ ISecureRandom::CHAR_UPPER);
+ $this->config->setUserValue($user, 'owncloud', 'lostpassword', $token);
+
+ $link = $this->urlGenerator->linkToRouteAbsolute('core.lost.resetform', array('userId' => $user, 'token' => $token));
$tmpl = new \OC_Template('core/lostpassword', 'email');
$tmpl->assign('link', $link, false);
@@ -200,23 +216,4 @@ class LostController extends Controller {
}
}
-
- protected function getLink($route, $user, $token){
- $parameters = array(
- 'token' => $token,
- 'userId' => $user
- );
- $link = $this->urlGenerator->linkToRoute($route, $parameters);
-
- return $this->urlGenerator->getAbsoluteUrl($link);
- }
-
-
- protected function checkToken($user, $token) {
- return $this->config->getUserValue(
- $user, 'owncloud', 'lostpassword'
- ) === hash('sha256', $token);
- }
-
-
}
diff --git a/core/lostpassword/css/resetpassword.css b/core/lostpassword/css/resetpassword.css
index 012af672d97..29a7e875537 100644
--- a/core/lostpassword/css/resetpassword.css
+++ b/core/lostpassword/css/resetpassword.css
@@ -2,6 +2,10 @@
position: relative;
}
+.text-center {
+ text-align: center;
+}
+
#password-icon {
top: 20px;
}
diff --git a/core/lostpassword/encrypteddataexception.php b/core/lostpassword/encrypteddataexception.php
deleted file mode 100644
index 99d19445b6c..00000000000
--- a/core/lostpassword/encrypteddataexception.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * @author Victor Dubiniuk
- * @copyright 2013 Victor Dubiniuk victor.dubiniuk@gmail.com
- *
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-namespace OC\Core\LostPassword;
-
-class EncryptedDataException extends \Exception{
-}
diff --git a/core/lostpassword/templates/lostpassword.php b/core/lostpassword/templates/lostpassword.php
deleted file mode 100644
index 00dd139e71f..00000000000
--- a/core/lostpassword/templates/lostpassword.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-//load the file we need
-OCP\Util::addStyle('lostpassword', 'lostpassword'); ?>
-<form action="<?php print_unescaped($_['link']) ?>" method="post">
- <fieldset>
- <div class="update"><?php p($l->t('You will receive a link to reset your password via Email.')); ?></div>
- <p>
- <input type="text" name="user" id="user" placeholder="<?php p($l->t( 'Username' )); ?>" value="" autocomplete="off" required autofocus />
- <label for="user" class="infield"><?php p($l->t( 'Username' )); ?></label>
- <img class="svg" src="<?php print_unescaped(image_path('', 'actions/user.svg')); ?>" alt=""/>
- <?php if ($_['isEncrypted']): ?>
- <br />
- <p class="warning"><?php p($l->t("Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?")); ?><br />
- <input type="checkbox" name="continue" value="Yes" />
- <?php p($l->t('Yes, I really want to reset my password now')); ?></p>
- <?php endif; ?>
- </p>
- <input type="submit" id="submit" value="<?php p($l->t('Reset')); ?>" />
- </fieldset>
-</form>
diff --git a/core/lostpassword/templates/resetpassword.php b/core/lostpassword/templates/resetpassword.php
index 118fe787116..498c692f12e 100644
--- a/core/lostpassword/templates/resetpassword.php
+++ b/core/lostpassword/templates/resetpassword.php
@@ -1,4 +1,10 @@
-<?php OCP\Util::addStyle('lostpassword', 'resetpassword'); ?>
+<?php
+/** @var array $_ */
+/** @var $l OC_L10N */
+style('lostpassword', 'resetpassword');
+script('core', 'lostpassword');
+?>
+
<form action="<?php print_unescaped($_['link']) ?>" id="reset-password" method="post">
<fieldset>
<p>
@@ -7,6 +13,8 @@
<img class="svg" id="password-icon" src="<?php print_unescaped(image_path('', 'actions/password.svg')); ?>" alt=""/>
</p>
<input type="submit" id="submit" value="<?php p($l->t('Reset password')); ?>" />
+ <p class="text-center">
+ <img class="hidden" id="float-spinner" src="<?php p(\OCP\Util::imagePath('core', 'loading-dark.gif'));?>"/>
+ </p>
</fieldset>
</form>
-<?php OCP\Util::addScript('core', 'lostpassword'); ?>
diff --git a/core/register_command.php b/core/register_command.php
index c5d9b6e342d..8f79473ced8 100644
--- a/core/register_command.php
+++ b/core/register_command.php
@@ -11,14 +11,14 @@ $repair = new \OC\Repair(\OC\Repair::getRepairSteps());
/** @var $application Symfony\Component\Console\Application */
$application->add(new OC\Core\Command\Status);
$application->add(new OC\Core\Command\Db\GenerateChangeScript());
-$application->add(new OC\Core\Command\Db\ConvertType(OC_Config::getObject(), new \OC\DB\ConnectionFactory()));
+$application->add(new OC\Core\Command\Db\ConvertType(\OC::$server->getConfig(), new \OC\DB\ConnectionFactory()));
$application->add(new OC\Core\Command\Upgrade(\OC::$server->getConfig()));
$application->add(new OC\Core\Command\Maintenance\SingleUser());
-$application->add(new OC\Core\Command\Maintenance\Mode(OC_Config::getObject()));
+$application->add(new OC\Core\Command\Maintenance\Mode(\OC::$server->getConfig()));
$application->add(new OC\Core\Command\App\Disable());
$application->add(new OC\Core\Command\App\Enable());
$application->add(new OC\Core\Command\App\ListApps());
-$application->add(new OC\Core\Command\Maintenance\Repair($repair, OC_Config::getObject()));
+$application->add(new OC\Core\Command\Maintenance\Repair($repair, \OC::$server->getConfig()));
$application->add(new OC\Core\Command\User\Report());
$application->add(new OC\Core\Command\User\ResetPassword(\OC::$server->getUserManager()));
$application->add(new OC\Core\Command\User\LastSeen());
diff --git a/core/routes.php b/core/routes.php
index 92545d0322e..ced70898f50 100644
--- a/core/routes.php
+++ b/core/routes.php
@@ -95,9 +95,22 @@ $this->create('core_avatar_post_cropped', '/avatar/cropped')
->action('OC\Core\Avatar\Controller', 'postCroppedAvatar');
// Sharing routes
-$this->create('core_share_show_share', '/s/{token}')
- ->get()
- ->action('OC\Core\Share\Controller', 'showShare');
+$this->create('files_sharing.sharecontroller.showShare', '/s/{token}')->action(function($urlParams) {
+ $app = new \OCA\Files_Sharing\Application($urlParams);
+ $app->dispatch('ShareController', 'showShare');
+});
+$this->create('files_sharing.sharecontroller.authenticate', '/s/{token}/authenticate')->post()->action(function($urlParams) {
+ $app = new \OCA\Files_Sharing\Application($urlParams);
+ $app->dispatch('ShareController', 'authenticate');
+});
+$this->create('files_sharing.sharecontroller.showAuthenticate', '/s/{token}/authenticate')->get()->action(function($urlParams) {
+ $app = new \OCA\Files_Sharing\Application($urlParams);
+ $app->dispatch('ShareController', 'showAuthenticate');
+});
+$this->create('files_sharing.sharecontroller.downloadShare', '/s/{token}/download')->get()->action(function($urlParams) {
+ $app = new \OCA\Files_Sharing\Application($urlParams);
+ $app->dispatch('ShareController', 'downloadShare');
+});
// used for heartbeat
$this->create('heartbeat', '/heartbeat')->action(function(){
diff --git a/core/setup/controller.php b/core/setup/controller.php
index 39272120106..5a52b18f73b 100644
--- a/core/setup/controller.php
+++ b/core/setup/controller.php
@@ -12,13 +12,21 @@ namespace OC\Core\Setup;
use OCP\IConfig;
class Controller {
- /** @var \OCP\IConfig */
+ /**
+ * @var \OCP\IConfig
+ */
protected $config;
/**
+ * @var string
+ */
+ private $autoConfigFile;
+
+ /**
* @param IConfig $config
*/
function __construct(IConfig $config) {
+ $this->autoConfigFile = \OC::$SERVERROOT.'/config/autoconfig.php';
$this->config = $config;
}
@@ -64,15 +72,17 @@ class Controller {
}
public function finishSetup() {
+ if( file_exists( $this->autoConfigFile )) {
+ unlink($this->autoConfigFile);
+ }
\OC_Util::redirectToDefaultPage();
}
public function loadAutoConfig($post) {
- $autosetup_file = \OC::$SERVERROOT.'/config/autoconfig.php';
- if( file_exists( $autosetup_file )) {
+ if( file_exists($this->autoConfigFile)) {
\OC_Log::write('core', 'Autoconfig file found, setting up owncloud...', \OC_Log::INFO);
$AUTOCONFIG = array();
- include $autosetup_file;
+ include $this->autoConfigFile;
$post = array_merge ($post, $AUTOCONFIG);
}
@@ -82,9 +92,6 @@ class Controller {
if ($dbIsSet AND $directoryIsSet AND $adminAccountIsSet) {
$post['install'] = 'true';
- if( file_exists( $autosetup_file )) {
- unlink($autosetup_file);
- }
}
$post['dbIsSet'] = $dbIsSet;
$post['directoryIsSet'] = $directoryIsSet;
diff --git a/core/share/controller.php b/core/share/controller.php
deleted file mode 100644
index c1741af0d98..00000000000
--- a/core/share/controller.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * Copyright (c) 2014 Christopher Schäpers <christopher@schaepers.it>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-namespace OC\Core\Share;
-
-class Controller {
- public static function showShare($args) {
- \OC_Util::checkAppEnabled('files_sharing');
-
- $token = $args['token'];
-
- \OC_App::loadApp('files_sharing');
- \OC_User::setIncognitoMode(true);
-
- require_once \OC_App::getAppPath('files_sharing') .'/public.php';
- }
-}
-?>
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 d365a4a306f..74b668551ab 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -66,17 +66,11 @@ class OC {
public static $REQUESTEDAPP = '';
/**
- * check if owncloud runs in cli mode
+ * check if ownCloud runs in cli mode
*/
public static $CLI = false;
/**
- * @deprecated use \OC::$server->getSession() instead
- * @var \OC\Session\Session
- */
- public static $session = null;
-
- /**
* @var \OC\Autoloader $loader
*/
public static $loader = null;
@@ -194,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";
@@ -216,7 +210,7 @@ class OC {
public static function checkInstalled() {
// Redirect to installer if not installed
- if (!OC_Config::getValue('installed', false) && OC::$SUBURI != '/index.php') {
+ if (!\OC::$server->getConfig()->getSystemValue('installed', false) && OC::$SUBURI != '/index.php') {
if (OC::$CLI) {
throw new Exception('Not installed');
} else {
@@ -254,7 +248,7 @@ class OC {
public static function checkMaintenanceMode() {
// Allow ajax update script to execute without being stopped
- if (OC_Config::getValue('maintenance', false) && OC::$SUBURI != '/core/ajax/update.php') {
+ if (\OC::$server->getConfig()->getSystemValue('maintenance', false) && OC::$SUBURI != '/core/ajax/update.php') {
// send http status 503
header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Status: 503 Service Temporarily Unavailable');
@@ -271,7 +265,7 @@ class OC {
public static function checkSingleUserMode() {
$user = OC_User::getUserSession()->getUser();
$group = OC_Group::getManager()->get('admin');
- if ($user && OC_Config::getValue('singleuser', false) && !$group->inGroup($user)) {
+ if ($user && \OC::$server->getConfig()->getSystemValue('singleuser', false) && !$group->inGroup($user)) {
// send http status 503
header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Status: 503 Service Temporarily Unavailable');
@@ -301,10 +295,11 @@ class OC {
*/
public static function checkUpgrade($showTemplate = true) {
if (\OCP\Util::needUpgrade()) {
- if ($showTemplate && !OC_Config::getValue('maintenance', false)) {
+ $config = \OC::$server->getConfig();
+ if ($showTemplate && !$config->getSystemValue('maintenance', false)) {
$version = OC_Util::getVersion();
- $oldTheme = OC_Config::getValue('theme');
- OC_Config::setValue('theme', '');
+ $oldTheme = $config->getSystemValue('theme');
+ $config->setSystemValue('theme', '');
OC_Util::addScript('config'); // needed for web root
OC_Util::addScript('update');
$tmpl = new OC_Template('', 'update.admin', 'guest');
@@ -358,7 +353,7 @@ class OC {
OC_Util::addVendorScript('moment/min/moment-with-locales');
// avatars
- if (\OC_Config::getValue('enable_avatars', true) === true) {
+ if (\OC::$server->getConfig()->getSystemValue('enable_avatars', true) === true) {
\OC_Util::addScript('placeholder');
\OC_Util::addVendorScript('blueimp-md5/js/md5');
\OC_Util::addScript('jquery.avatar');
@@ -438,7 +433,7 @@ class OC {
* @return string
*/
private static function getSessionLifeTime() {
- return OC_Config::getValue('session_lifetime', 60 * 60 * 24);
+ return \OC::$server->getConfig()->getSystemValue('session_lifetime', 60 * 60 * 24);
}
public static function loadAppClassPaths() {
@@ -464,15 +459,14 @@ class OC {
// setup 3rdparty autoloader
$vendorAutoLoad = OC::$THIRDPARTYROOT . '/3rdparty/autoload.php';
if (file_exists($vendorAutoLoad)) {
- $loader = require_once $vendorAutoLoad;
- $loader->add('PasswordHash', OC::$THIRDPARTYROOT . '/3rdparty/phpass');
+ require_once $vendorAutoLoad;
} else {
OC_Response::setStatus(OC_Response::STATUS_SERVICE_UNAVAILABLE);
OC_Template::printErrorPage('Composer autoloader not found, unable to continue.');
}
// 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');
@@ -531,9 +525,7 @@ class OC {
\OC::$server->getEventLogger()->start('init_session', 'Initialize session');
OC_App::loadApps(array('session'));
- if (self::$CLI) {
- self::$session = new \OC\Session\Memory('');
- } else {
+ if (!self::$CLI) {
self::initSession();
}
\OC::$server->getEventLogger()->end('init_session');
@@ -561,8 +553,10 @@ class OC {
$sessionLifeTime = self::getSessionLifeTime();
@ini_set('gc_maxlifetime', (string)$sessionLifeTime);
+ $config = \OC::$server->getConfig();
+
// User and Groups
- if (!OC_Config::getValue("installed", false)) {
+ if (!$config->getSystemValue("installed", false)) {
self::$server->getSession()->set('user_id', '');
}
@@ -585,14 +579,14 @@ class OC {
$tmpManager = \OC::$server->getTempManager();
register_shutdown_function(array($tmpManager, 'clean'));
- if (OC_Config::getValue('installed', false) && !self::checkUpgrade(false)) {
+ if ($config->getSystemValue('installed', false) && !self::checkUpgrade(false)) {
if (\OC::$server->getAppConfig()->getValue('core', 'backgroundjobs_mode', 'ajax') == 'ajax') {
OC_Util::addScript('backgroundjobs');
}
}
// Check whether the sample configuration has been copied
- if(OC_Config::getValue('copied_sample_config', false)) {
+ if($config->getSystemValue('copied_sample_config', false)) {
$l = \OC::$server->getL10N('lib');
header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Status: 503 Service Temporarily Unavailable');
@@ -613,14 +607,8 @@ class OC {
header('HTTP/1.1 400 Bad Request');
header('Status: 400 Bad Request');
- $domain = $_SERVER['SERVER_NAME'];
- // Append port to domain in case it is not
- if($_SERVER['SERVER_PORT'] !== '80' && $_SERVER['SERVER_PORT'] !== '443') {
- $domain .= ':'.$_SERVER['SERVER_PORT'];
- }
-
$tmpl = new OCP\Template('core', 'untrustedDomain', 'guest');
- $tmpl->assign('domain', $domain);
+ $tmpl->assign('domain', $_SERVER['SERVER_NAME']);
$tmpl->printPage();
exit();
@@ -640,7 +628,7 @@ class OC {
* register hooks for the cache
*/
public static function registerCacheHooks() {
- if (OC_Config::getValue('installed', false) && !\OCP\Util::needUpgrade()) { //don't try to do this before we are properly setup
+ if (\OC::$server->getConfig()->getSystemValue('installed', false) && !\OCP\Util::needUpgrade()) { //don't try to do this before we are properly setup
\OCP\BackgroundJob::registerJob('OC\Cache\FileGlobalGC');
// NOTE: This will be replaced to use OCP
@@ -653,10 +641,11 @@ class OC {
* register hooks for the cache
*/
public static function registerLogRotate() {
- if (OC_Config::getValue('installed', false) && OC_Config::getValue('log_rotate_size', false) && !\OCP\Util::needUpgrade()) {
+ $config = \OC::$server->getConfig();
+ if ($config->getSystemValue('installed', false) && $config->getSystemValue('log_rotate_size', false) && !\OCP\Util::needUpgrade()) {
//don't try to do this before we are properly setup
//use custom logfile path if defined, otherwise use default of owncloud.log in data directory
- \OCP\BackgroundJob::registerJob('OC\Log\Rotate', OC_Config::getValue('logfile', OC_Config::getValue("datadirectory", OC::$SERVERROOT . '/data') . '/owncloud.log'));
+ \OCP\BackgroundJob::registerJob('OC\Log\Rotate', $config->getSystemValue('logfile', $config->getSystemValue('datadirectory', OC::$SERVERROOT . '/data') . '/owncloud.log'));
}
}
@@ -686,7 +675,7 @@ class OC {
* register hooks for sharing
*/
public static function registerShareHooks() {
- if (\OC_Config::getValue('installed')) {
+ if (\OC::$server->getConfig()->getSystemValue('installed')) {
OC_Hook::connect('OC_User', 'post_deleteUser', 'OC\Share\Hooks', 'post_deleteUser');
OC_Hook::connect('OC_User', 'post_addToGroup', 'OC\Share\Hooks', 'post_addToGroup');
OC_Hook::connect('OC_User', 'post_removeFromGroup', 'OC\Share\Hooks', 'post_removeFromGroup');
@@ -701,7 +690,7 @@ class OC {
// generate an instanceid via \OC_Util::getInstanceId() because the
// config file may not be writable. As such, we only register a class
// loader cache if instanceid is available without trying to create one.
- $instanceId = OC_Config::getValue('instanceid', null);
+ $instanceId = \OC::$server->getConfig()->getSystemValue('instanceid', null);
if ($instanceId) {
try {
$memcacheFactory = new \OC\Memcache\Factory($instanceId);
@@ -716,12 +705,13 @@ class OC {
*/
public static function handleRequest() {
\OC::$server->getEventLogger()->start('handle_request', 'Handle request');
+ $config = \OC::$server->getConfig();
// load all the classpaths from the enabled apps so they are available
// in the routing files of each app
OC::loadAppClassPaths();
// Check if ownCloud is installed or in maintenance (update) mode
- if (!\OC::$server->getConfig()->getSystemValue('installed', false)) {
+ if (!$config->getSystemValue('installed', false)) {
\OC::$server->getSession()->clear();
$controller = new OC\Core\Setup\Controller(\OC::$server->getConfig());
$controller->run($_POST);
@@ -736,7 +726,7 @@ class OC {
if (!self::$CLI and (!isset($_GET["logout"]) or ($_GET["logout"] !== 'true'))) {
try {
- if (!OC_Config::getValue('maintenance', false) && !\OCP\Util::needUpgrade()) {
+ if (!$config->getSystemValue('maintenance', false) && !\OCP\Util::needUpgrade()) {
OC_App::loadApps(array('authentication'));
OC_App::loadApps(array('filesystem', 'logging'));
OC_App::loadApps();
@@ -802,7 +792,7 @@ class OC {
if (isset($_GET["logout"]) and ($_GET["logout"])) {
OC_JSON::callCheck();
if (isset($_COOKIE['oc_token'])) {
- OC_Preferences::deleteKey(OC_User::getUser(), 'login_token', $_COOKIE['oc_token']);
+ $config->deleteUserValue(OC_User::getUser(), 'login_token', $_COOKIE['oc_token']);
}
OC_User::logout();
// redirect to webroot and add slash if webroot is empty
@@ -861,12 +851,13 @@ class OC {
* @param string $user
*/
protected static function cleanupLoginTokens($user) {
- $cutoff = time() - OC_Config::getValue('remember_login_cookie_lifetime', 60 * 60 * 24 * 15);
- $tokens = OC_Preferences::getKeys($user, 'login_token');
+ $config = \OC::$server->getConfig();
+ $cutoff = time() - $config->getSystemValue('remember_login_cookie_lifetime', 60 * 60 * 24 * 15);
+ $tokens = $config->getUserKeys($user, 'login_token');
foreach ($tokens as $token) {
- $time = OC_Preferences::getValue($user, 'login_token', $token);
+ $time = $config->getUserValue($user, 'login_token', $token);
if ($time < $cutoff) {
- OC_Preferences::deleteKey($user, 'login_token', $token);
+ $config->deleteUserValue($user, 'login_token', $token);
}
}
}
diff --git a/lib/l10n/af_ZA.js b/lib/l10n/af_ZA.js
index fd0ff979e2c..af812fe1e97 100644
--- a/lib/l10n/af_ZA.js
+++ b/lib/l10n/af_ZA.js
@@ -9,6 +9,7 @@ OC.L10N.register(
"Unknown filetype" : "Onbekende leertipe",
"Invalid image" : "Ongeldige prent",
"web services under your control" : "webdienste onder jou beheer",
+ "seconds ago" : "sekondes gelede",
"_%n minute ago_::_%n minutes ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["","%n ure gelede"],
"today" : "vandag",
diff --git a/lib/l10n/af_ZA.json b/lib/l10n/af_ZA.json
index 0a2bd668866..b3dedd54188 100644
--- a/lib/l10n/af_ZA.json
+++ b/lib/l10n/af_ZA.json
@@ -7,6 +7,7 @@
"Unknown filetype" : "Onbekende leertipe",
"Invalid image" : "Ongeldige prent",
"web services under your control" : "webdienste onder jou beheer",
+ "seconds ago" : "sekondes gelede",
"_%n minute ago_::_%n minutes ago_" : ["",""],
"_%n hour ago_::_%n hours ago_" : ["","%n ure gelede"],
"today" : "vandag",
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 82f0f3e51fc..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" : "Настройки",
@@ -17,6 +18,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",
@@ -103,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 62c0ea60f07..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" : "Настройки",
@@ -15,6 +16,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",
@@ -101,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 113f32d40c5..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í",
@@ -17,6 +18,8 @@ OC.L10N.register(
"No app name specified" : "Nebyl zadan název aplikace",
"Unknown filetype" : "Neznámý typ souboru",
"Invalid image" : "Chybný obrázek",
+ "Database Error" : "Chyba databáze",
+ "Please contact your system administrator." : "Kontaktujte prosím svého správce systému.",
"web services under your control" : "webové služby pod Vaší kontrolou",
"App directory already exists" : "Adresář aplikace již existuje",
"Can't create app folder. Please fix permissions. %s" : "Nelze vytvořit složku aplikace. Opravte práva souborů. %s",
@@ -83,7 +86,7 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["před %n hodinou","před %n hodinami","před %n hodinami"],
"today" : "dnes",
"yesterday" : "včera",
- "_%n day go_::_%n days ago_" : ["před %n dnem","před %n dny","před %n dny"],
+ "_%n day go_::_%n days ago_" : ["včera","před %n dny","před %n dny"],
"last month" : "minulý měsíc",
"_%n month ago_::_%n months ago_" : ["před %n měsícem","před %n měsíci","před %n měsíci"],
"last year" : "minulý rok",
@@ -101,16 +104,15 @@ OC.L10N.register(
"This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "To lze obvykle vyřešit <a href=\"%s\" target=\"_blank\">povolením zápisu webovému serveru do kořenového adresáře</a>.",
"Setting locale to %s failed" : "Nastavení jazyka na %s selhalo",
"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 administrátora o instalaci tohoto modulu.",
+ "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 administrátora o aktualizaci PHP na nejnovější verzi. Vaše verze PHP již není podporována komunitami ownCloud a PHP.",
+ "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 svého administrátora o zakázání v php.ini nebo v konfiguraci webového serveru.",
+ "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.",
"Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Je povoleno nastavení Magic Quotes. Pro správnou funkčnost ownCloud je třeba toto vypnout.",
- "Magic Quotes 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." : "Magic Quotes je zastaralé a většinou zbytečné nastavení, které je třeba vypnout. Požádejte prosím svého administrátora o zakázání v php.ini nebo v konfiguraci webového serveru.",
+ "Magic Quotes 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." : "Magic Quotes 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.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP moduly jsou nainstalovány, ale stále se tváří jako chybějící?",
- "Please ask your server administrator to restart the web server." : "Požádejte svého administrátora o restart webového serveru.",
+ "Please ask your server administrator to restart the web server." : "Požádejte svého správce systému o restart webového serveru.",
"PostgreSQL >= 9 required" : "Je vyžadováno PostgreSQL >= 9",
"Please upgrade your database version" : "Aktualizujte prosím verzi své databáze",
"Error occurred while checking PostgreSQL version" : "Při zjišťování verze PostgreSQL došlo k chybě",
diff --git a/lib/l10n/cs_CZ.json b/lib/l10n/cs_CZ.json
index e8806f406ae..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í",
@@ -15,6 +16,8 @@
"No app name specified" : "Nebyl zadan název aplikace",
"Unknown filetype" : "Neznámý typ souboru",
"Invalid image" : "Chybný obrázek",
+ "Database Error" : "Chyba databáze",
+ "Please contact your system administrator." : "Kontaktujte prosím svého správce systému.",
"web services under your control" : "webové služby pod Vaší kontrolou",
"App directory already exists" : "Adresář aplikace již existuje",
"Can't create app folder. Please fix permissions. %s" : "Nelze vytvořit složku aplikace. Opravte práva souborů. %s",
@@ -81,7 +84,7 @@
"_%n hour ago_::_%n hours ago_" : ["před %n hodinou","před %n hodinami","před %n hodinami"],
"today" : "dnes",
"yesterday" : "včera",
- "_%n day go_::_%n days ago_" : ["před %n dnem","před %n dny","před %n dny"],
+ "_%n day go_::_%n days ago_" : ["včera","před %n dny","před %n dny"],
"last month" : "minulý měsíc",
"_%n month ago_::_%n months ago_" : ["před %n měsícem","před %n měsíci","před %n měsíci"],
"last year" : "minulý rok",
@@ -99,16 +102,15 @@
"This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "To lze obvykle vyřešit <a href=\"%s\" target=\"_blank\">povolením zápisu webovému serveru do kořenového adresáře</a>.",
"Setting locale to %s failed" : "Nastavení jazyka na %s selhalo",
"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 administrátora o instalaci tohoto modulu.",
+ "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 administrátora o aktualizaci PHP na nejnovější verzi. Vaše verze PHP již není podporována komunitami ownCloud a PHP.",
+ "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 svého administrátora o zakázání v php.ini nebo v konfiguraci webového serveru.",
+ "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.",
"Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." : "Je povoleno nastavení Magic Quotes. Pro správnou funkčnost ownCloud je třeba toto vypnout.",
- "Magic Quotes 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." : "Magic Quotes je zastaralé a většinou zbytečné nastavení, které je třeba vypnout. Požádejte prosím svého administrátora o zakázání v php.ini nebo v konfiguraci webového serveru.",
+ "Magic Quotes 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." : "Magic Quotes 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.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP moduly jsou nainstalovány, ale stále se tváří jako chybějící?",
- "Please ask your server administrator to restart the web server." : "Požádejte svého administrátora o restart webového serveru.",
+ "Please ask your server administrator to restart the web server." : "Požádejte svého správce systému o restart webového serveru.",
"PostgreSQL >= 9 required" : "Je vyžadováno PostgreSQL >= 9",
"Please upgrade your database version" : "Aktualizujte prosím verzi své databáze",
"Error occurred while checking PostgreSQL version" : "Při zjišťování verze PostgreSQL došlo k chybě",
diff --git a/lib/l10n/da.js b/lib/l10n/da.js
index 6c49ba9b038..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",
@@ -17,6 +18,8 @@ OC.L10N.register(
"No app name specified" : "Intet app-navn angivet",
"Unknown filetype" : "Ukendt filtype",
"Invalid image" : "Ugyldigt billede",
+ "Database Error" : "Databasefejl",
+ "Please contact your system administrator." : "Kontakt venligst din systemadministrator.",
"web services under your control" : "Webtjenester under din kontrol",
"App directory already exists" : "App-mappe findes allerede",
"Can't create app folder. Please fix permissions. %s" : "Kan ikke oprette app-mappe. Ret tilladelser. %s",
@@ -28,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",
@@ -103,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 fe2858f182d..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",
@@ -15,6 +16,8 @@
"No app name specified" : "Intet app-navn angivet",
"Unknown filetype" : "Ukendt filtype",
"Invalid image" : "Ugyldigt billede",
+ "Database Error" : "Databasefejl",
+ "Please contact your system administrator." : "Kontakt venligst din systemadministrator.",
"web services under your control" : "Webtjenester under din kontrol",
"App directory already exists" : "App-mappe findes allerede",
"Can't create app folder. Please fix permissions. %s" : "Kan ikke oprette app-mappe. Ret tilladelser. %s",
@@ -26,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",
@@ -101,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 e512c9d1d4c..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",
@@ -17,6 +18,8 @@ OC.L10N.register(
"No app name specified" : "Es wurde kein Applikation-Name angegeben",
"Unknown filetype" : "Unbekannter Dateityp",
"Invalid image" : "Ungültiges Bild",
+ "Database Error" : "Datenbankfehler",
+ "Please contact your system administrator." : "Bitte kontaktiere Deinen Systemadministrator.",
"web services under your control" : "Web-Services unter Deiner Kontrolle",
"App directory already exists" : "Das Applikationsverzeichnis existiert bereits",
"Can't create app folder. Please fix permissions. %s" : "Es kann kein Applikationsordner erstellt werden. Bitte passe die Berechtigungen an. %s",
@@ -103,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 27dd6781ae7..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",
@@ -15,6 +16,8 @@
"No app name specified" : "Es wurde kein Applikation-Name angegeben",
"Unknown filetype" : "Unbekannter Dateityp",
"Invalid image" : "Ungültiges Bild",
+ "Database Error" : "Datenbankfehler",
+ "Please contact your system administrator." : "Bitte kontaktiere Deinen Systemadministrator.",
"web services under your control" : "Web-Services unter Deiner Kontrolle",
"App directory already exists" : "Das Applikationsverzeichnis existiert bereits",
"Can't create app folder. Please fix permissions. %s" : "Es kann kein Applikationsordner erstellt werden. Bitte passe die Berechtigungen an. %s",
@@ -101,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 48f236f3e04..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",
@@ -17,6 +18,8 @@ OC.L10N.register(
"No app name specified" : "Es wurde kein Applikation-Name angegeben",
"Unknown filetype" : "Unbekannter Dateityp",
"Invalid image" : "Ungültiges Bild",
+ "Database Error" : "Datenbankfehler",
+ "Please contact your system administrator." : "Bitte kontaktieren Sie Ihren Systemadministrator.",
"web services under your control" : "Web-Services unter Ihrer Kontrolle",
"App directory already exists" : "Der Ordner für die Anwendung ist bereits vorhanden.",
"Can't create app folder. Please fix permissions. %s" : "Der Ordner für die Anwendung konnte nicht angelegt werden. Bitte überprüfen Sie die Ordner- und Dateirechte und passen Sie diese entsprechend an. %s",
@@ -103,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 e67d2ccc57c..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",
@@ -15,6 +16,8 @@
"No app name specified" : "Es wurde kein Applikation-Name angegeben",
"Unknown filetype" : "Unbekannter Dateityp",
"Invalid image" : "Ungültiges Bild",
+ "Database Error" : "Datenbankfehler",
+ "Please contact your system administrator." : "Bitte kontaktieren Sie Ihren Systemadministrator.",
"web services under your control" : "Web-Services unter Ihrer Kontrolle",
"App directory already exists" : "Der Ordner für die Anwendung ist bereits vorhanden.",
"Can't create app folder. Please fix permissions. %s" : "Der Ordner für die Anwendung konnte nicht angelegt werden. Bitte überprüfen Sie die Ordner- und Dateirechte und passen Sie diese entsprechend an. %s",
@@ -101,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 43f7edb5258..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",
@@ -17,6 +18,8 @@ OC.L10N.register(
"No app name specified" : "No app name specified",
"Unknown filetype" : "Unknown filetype",
"Invalid image" : "Invalid image",
+ "Database Error" : "Database Error",
+ "Please contact your system administrator." : "Please contact your system administrator.",
"web services under your control" : "web services under your control",
"App directory already exists" : "App directory already exists",
"Can't create app folder. Please fix permissions. %s" : "Can't create app folder. Please fix permissions. %s",
@@ -103,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 7e7756cec9c..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",
@@ -15,6 +16,8 @@
"No app name specified" : "No app name specified",
"Unknown filetype" : "Unknown filetype",
"Invalid image" : "Invalid image",
+ "Database Error" : "Database Error",
+ "Please contact your system administrator." : "Please contact your system administrator.",
"web services under your control" : "web services under your control",
"App directory already exists" : "App directory already exists",
"Can't create app folder. Please fix permissions. %s" : "Can't create app folder. Please fix permissions. %s",
@@ -101,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 76a44a4bed7..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",
@@ -17,6 +18,8 @@ OC.L10N.register(
"No app name specified" : "No se ha especificado nombre de la aplicación",
"Unknown filetype" : "Tipo de archivo desconocido",
"Invalid image" : "Imagen inválida",
+ "Database Error" : "Error en la base de datos",
+ "Please contact your system administrator." : "Por favor contacte al administrador del sistema.",
"web services under your control" : "Servicios web bajo su control",
"App directory already exists" : "El directorio de la aplicación ya existe",
"Can't create app folder. Please fix permissions. %s" : "No se puede crear la carpeta de la aplicación. Corrija los permisos. %s",
@@ -103,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 a6bee7f24db..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",
@@ -15,6 +16,8 @@
"No app name specified" : "No se ha especificado nombre de la aplicación",
"Unknown filetype" : "Tipo de archivo desconocido",
"Invalid image" : "Imagen inválida",
+ "Database Error" : "Error en la base de datos",
+ "Please contact your system administrator." : "Por favor contacte al administrador del sistema.",
"web services under your control" : "Servicios web bajo su control",
"App directory already exists" : "El directorio de la aplicación ya existe",
"Can't create app folder. Please fix permissions. %s" : "No se puede crear la carpeta de la aplicación. Corrija los permisos. %s",
@@ -101,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 f387090da60..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",
@@ -16,6 +17,8 @@ OC.L10N.register(
"No app name specified" : "Sovelluksen nimeä ei määritelty",
"Unknown filetype" : "Tuntematon tiedostotyyppi",
"Invalid image" : "Virheellinen kuva",
+ "Database Error" : "Tietokantavirhe",
+ "Please contact your system administrator." : "Ole yhteydessä järjestelmän ylläpitäjään.",
"web services under your control" : "verkkopalvelut hallinnassasi",
"App directory already exists" : "Sovelluskansio on jo olemassa",
"Can't create app folder. Please fix permissions. %s" : "Sovelluskansion luominen ei onnistu. Korjaa käyttöoikeudet. %s",
@@ -90,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 7c26af25f66..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",
@@ -14,6 +15,8 @@
"No app name specified" : "Sovelluksen nimeä ei määritelty",
"Unknown filetype" : "Tuntematon tiedostotyyppi",
"Invalid image" : "Virheellinen kuva",
+ "Database Error" : "Tietokantavirhe",
+ "Please contact your system administrator." : "Ole yhteydessä järjestelmän ylläpitäjään.",
"web services under your control" : "verkkopalvelut hallinnassasi",
"App directory already exists" : "Sovelluskansio on jo olemassa",
"Can't create app folder. Please fix permissions. %s" : "Sovelluskansion luominen ei onnistu. Korjaa käyttöoikeudet. %s",
@@ -88,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 d50e4f52a34..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",
@@ -17,6 +18,8 @@ OC.L10N.register(
"No app name specified" : "Aucun nom d'application spécifié",
"Unknown filetype" : "Type de fichier inconnu",
"Invalid image" : "Image non valable",
+ "Database Error" : "Erreur dans la base de données",
+ "Please contact your system administrator." : "Veuillez contacter votre administrateur système.",
"web services under your control" : "services web sous votre contrôle",
"App directory already exists" : "Le dossier de l'application existe déjà",
"Can't create app folder. Please fix permissions. %s" : "Impossible de créer le dossier de l'application. Corrigez les droits d'accès. %s",
@@ -100,10 +103,9 @@ OC.L10N.register(
"Cannot create \"data\" directory (%s)" : "Impossible de créer le répertoire \"data\" (%s)",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Ce problème est généralement résolu <a href=\"%s\" target=\"_blank\">en donnant au serveur web un accès en écriture au répertoire racine</a>.",
"Setting locale to %s failed" : "Le choix de la langue pour %s a échoué",
- "Please install one of these locales on your system and restart your webserver." : "Veuillez installer l'une de ces langues sur votre système et redémarrer votre serveur web.",
+ "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 fb054f12b21..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",
@@ -15,6 +16,8 @@
"No app name specified" : "Aucun nom d'application spécifié",
"Unknown filetype" : "Type de fichier inconnu",
"Invalid image" : "Image non valable",
+ "Database Error" : "Erreur dans la base de données",
+ "Please contact your system administrator." : "Veuillez contacter votre administrateur système.",
"web services under your control" : "services web sous votre contrôle",
"App directory already exists" : "Le dossier de l'application existe déjà",
"Can't create app folder. Please fix permissions. %s" : "Impossible de créer le dossier de l'application. Corrigez les droits d'accès. %s",
@@ -98,10 +101,9 @@
"Cannot create \"data\" directory (%s)" : "Impossible de créer le répertoire \"data\" (%s)",
"This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Ce problème est généralement résolu <a href=\"%s\" target=\"_blank\">en donnant au serveur web un accès en écriture au répertoire racine</a>.",
"Setting locale to %s failed" : "Le choix de la langue pour %s a échoué",
- "Please install one of these locales on your system and restart your webserver." : "Veuillez installer l'une de ces langues sur votre système et redémarrer votre serveur web.",
+ "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/hi_IN.php b/lib/l10n/hi_IN.php
deleted file mode 100644
index 15f78e0bce6..00000000000
--- a/lib/l10n/hi_IN.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"_%n minute ago_::_%n minutes ago_" => array("",""),
-"_%n hour ago_::_%n hours ago_" => array("",""),
-"_%n day go_::_%n days ago_" => array("",""),
-"_%n month ago_::_%n months ago_" => array("","")
-);
-$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
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 2874653823b..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",
@@ -17,6 +18,8 @@ OC.L10N.register(
"No app name specified" : "Il nome dell'applicazione non è specificato",
"Unknown filetype" : "Tipo di file sconosciuto",
"Invalid image" : "Immagine non valida",
+ "Database Error" : "Errore del database",
+ "Please contact your system administrator." : "Contatta il tuo amministratore di sistema.",
"web services under your control" : "servizi web nelle tue mani",
"App directory already exists" : "La cartella dell'applicazione esiste già",
"Can't create app folder. Please fix permissions. %s" : "Impossibile creare la cartella dell'applicazione. Correggi i permessi. %s",
@@ -103,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 ca5beb1b802..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",
@@ -15,6 +16,8 @@
"No app name specified" : "Il nome dell'applicazione non è specificato",
"Unknown filetype" : "Tipo di file sconosciuto",
"Invalid image" : "Immagine non valida",
+ "Database Error" : "Errore del database",
+ "Please contact your system administrator." : "Contatta il tuo amministratore di sistema.",
"web services under your control" : "servizi web nelle tue mani",
"App directory already exists" : "La cartella dell'applicazione esiste già",
"Can't create app folder. Please fix permissions. %s" : "Impossibile creare la cartella dell'applicazione. Correggi i permessi. %s",
@@ -101,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 38aa3de36d6..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" : "設定",
@@ -17,6 +18,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 のパーミッションを修正してください。",
@@ -103,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 8a0db934683..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" : "設定",
@@ -15,6 +16,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 のパーミッションを修正してください。",
@@ -101,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 e8b560b730f..5bd8569ad87 100644
--- a/lib/l10n/nl.js
+++ b/lib/l10n/nl.js
@@ -4,9 +4,10 @@ OC.L10N.register(
"Cannot write into \"config\" directory!" : "Kan niet schrijven naar de \"config\" directory!",
"This can usually be fixed by giving the webserver write access to the config directory" : "Dit kan hersteld worden door de webserver schrijfrechten te geven op de de config directory",
"See %s" : "Zie %s",
- "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dit kan hersteld worden door de webserver schrijfrechten te %sgeven op de de config directory%s",
+ "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",
@@ -17,6 +18,8 @@ OC.L10N.register(
"No app name specified" : "Geen app naam opgegeven.",
"Unknown filetype" : "Onbekend bestandsformaat",
"Invalid image" : "Ongeldige afbeelding",
+ "Database Error" : "Database fout",
+ "Please contact your system administrator." : "Neem contact op met uw systeembeheerder.",
"web services under your control" : "Webdiensten in eigen beheer",
"App directory already exists" : "App directory bestaat al",
"Can't create app folder. Please fix permissions. %s" : "Kan de app map niet aanmaken, Herstel de permissies. %s",
@@ -103,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 887ad23b35d..f504ecdcad1 100644
--- a/lib/l10n/nl.json
+++ b/lib/l10n/nl.json
@@ -2,9 +2,10 @@
"Cannot write into \"config\" directory!" : "Kan niet schrijven naar de \"config\" directory!",
"This can usually be fixed by giving the webserver write access to the config directory" : "Dit kan hersteld worden door de webserver schrijfrechten te geven op de de config directory",
"See %s" : "Zie %s",
- "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dit kan hersteld worden door de webserver schrijfrechten te %sgeven op de de config directory%s",
+ "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",
@@ -15,6 +16,8 @@
"No app name specified" : "Geen app naam opgegeven.",
"Unknown filetype" : "Onbekend bestandsformaat",
"Invalid image" : "Ongeldige afbeelding",
+ "Database Error" : "Database fout",
+ "Please contact your system administrator." : "Neem contact op met uw systeembeheerder.",
"web services under your control" : "Webdiensten in eigen beheer",
"App directory already exists" : "App directory bestaat al",
"Can't create app folder. Please fix permissions. %s" : "Kan de app map niet aanmaken, Herstel de permissies. %s",
@@ -101,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 8537b31d543..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",
@@ -17,6 +18,8 @@ OC.L10N.register(
"No app name specified" : "O nome do aplicativo não foi especificado.",
"Unknown filetype" : "Tipo de arquivo desconhecido",
"Invalid image" : "Imagem inválida",
+ "Database Error" : "Erro no Banco de Dados",
+ "Please contact your system administrator." : "Por favor cotactar seu administrador do sistema.",
"web services under your control" : "serviços web sob seu controle",
"App directory already exists" : "Diretório App já existe",
"Can't create app folder. Please fix permissions. %s" : "Não é possível criar pasta app. Corrija as permissões. %s",
@@ -103,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 a9e272afc18..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",
@@ -15,6 +16,8 @@
"No app name specified" : "O nome do aplicativo não foi especificado.",
"Unknown filetype" : "Tipo de arquivo desconhecido",
"Invalid image" : "Imagem inválida",
+ "Database Error" : "Erro no Banco de Dados",
+ "Please contact your system administrator." : "Por favor cotactar seu administrador do sistema.",
"web services under your control" : "serviços web sob seu controle",
"App directory already exists" : "Diretório App já existe",
"Can't create app folder. Please fix permissions. %s" : "Não é possível criar pasta app. Corrija as permissões. %s",
@@ -101,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 c70e373a11c..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",
@@ -17,6 +18,8 @@ OC.L10N.register(
"No app name specified" : "O nome da aplicação não foi especificado",
"Unknown filetype" : "Ficheiro desconhecido",
"Invalid image" : "Imagem inválida",
+ "Database Error" : "Erro da Base de Dados",
+ "Please contact your system administrator." : "Por favor contacte o administrador do sistema.",
"web services under your control" : "serviços web sob o seu controlo",
"App directory already exists" : "A directoria da aplicação já existe",
"Can't create app folder. Please fix permissions. %s" : "Não foi possível criar a pasta da aplicação. Por favor verifique as permissões. %s",
@@ -103,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 85461b0fae6..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",
@@ -15,6 +16,8 @@
"No app name specified" : "O nome da aplicação não foi especificado",
"Unknown filetype" : "Ficheiro desconhecido",
"Invalid image" : "Imagem inválida",
+ "Database Error" : "Erro da Base de Dados",
+ "Please contact your system administrator." : "Por favor contacte o administrador do sistema.",
"web services under your control" : "serviços web sob o seu controlo",
"App directory already exists" : "A directoria da aplicação já existe",
"Can't create app folder. Please fix permissions. %s" : "Não foi possível criar a pasta da aplicação. Por favor verifique as permissões. %s",
@@ -101,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 20ed5013853..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" : "Настройки",
@@ -17,6 +18,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",
@@ -103,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 a8636cf4c35..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" : "Настройки",
@@ -15,6 +16,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",
@@ -101,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.php b/lib/l10n/sk.php
deleted file mode 100644
index 5cfafe6ca0c..00000000000
--- a/lib/l10n/sk.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"Personal" => "Osobné",
-"Settings" => "Nastavenia",
-"_%n minute ago_::_%n minutes ago_" => array("","",""),
-"_%n hour ago_::_%n hours ago_" => array("","",""),
-"_%n day go_::_%n days ago_" => array("","",""),
-"_%n month ago_::_%n months ago_" => array("","","")
-);
-$PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;";
diff --git a/lib/l10n/sk_SK.js b/lib/l10n/sk_SK.js
index a2e87c5b631..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",
@@ -17,6 +18,8 @@ OC.L10N.register(
"No app name specified" : "Nešpecifikované meno aplikácie",
"Unknown filetype" : "Neznámy typ súboru",
"Invalid image" : "Chybný obrázok",
+ "Database Error" : "Error databázy",
+ "Please contact your system administrator." : "Prosím kontaktujte administrátora.",
"web services under your control" : "webové služby pod Vašou kontrolou",
"App directory already exists" : "Aplikačný priečinok už existuje",
"Can't create app folder. Please fix permissions. %s" : "Nemožno vytvoriť aplikačný priečinok. Prosím upravte povolenia. %s",
@@ -102,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 84ab8c4a007..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",
@@ -15,6 +16,8 @@
"No app name specified" : "Nešpecifikované meno aplikácie",
"Unknown filetype" : "Neznámy typ súboru",
"Invalid image" : "Chybný obrázok",
+ "Database Error" : "Error databázy",
+ "Please contact your system administrator." : "Prosím kontaktujte administrátora.",
"web services under your control" : "webové služby pod Vašou kontrolou",
"App directory already exists" : "Aplikačný priečinok už existuje",
"Can't create app folder. Please fix permissions. %s" : "Nemožno vytvoriť aplikačný priečinok. Prosím upravte povolenia. %s",
@@ -100,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 aa783fbd69e..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",
@@ -17,6 +18,8 @@ OC.L10N.register(
"No app name specified" : "Ni podanega imena programa",
"Unknown filetype" : "Neznana vrsta datoteke",
"Invalid image" : "Neveljavna slika",
+ "Database Error" : "Napaka podatkovne zbirke",
+ "Please contact your system administrator." : "Stopite v stik s skrbnikom sistema.",
"web services under your control" : "spletne storitve pod vašim nadzorom",
"App directory already exists" : "Programska mapa že obstaja",
"Can't create app folder. Please fix permissions. %s" : "Programske mape ni mogoče ustvariti. Ni ustreznih dovoljenj. %s",
@@ -103,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 c0cbf41f719..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",
@@ -15,6 +16,8 @@
"No app name specified" : "Ni podanega imena programa",
"Unknown filetype" : "Neznana vrsta datoteke",
"Invalid image" : "Neveljavna slika",
+ "Database Error" : "Napaka podatkovne zbirke",
+ "Please contact your system administrator." : "Stopite v stik s skrbnikom sistema.",
"web services under your control" : "spletne storitve pod vašim nadzorom",
"App directory already exists" : "Programska mapa že obstaja",
"Can't create app folder. Please fix permissions. %s" : "Programske mape ni mogoče ustvariti. Ni ustreznih dovoljenj. %s",
@@ -101,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/sq.js b/lib/l10n/sq.js
index 6328972ac8a..c3be28ef1c6 100644
--- a/lib/l10n/sq.js
+++ b/lib/l10n/sq.js
@@ -6,6 +6,9 @@ OC.L10N.register(
"Settings" : "Parametra",
"Users" : "Përdoruesit",
"Admin" : "Admin",
+ "Recommended" : "E rekomanduar",
+ "Unknown filetype" : "Tip i panjohur skedari",
+ "Invalid image" : "Imazh i pavlefshëm",
"web services under your control" : "shërbime web nën kontrollin tënd",
"Application is not enabled" : "Programi nuk është i aktivizuar.",
"Authentication error" : "Veprim i gabuar gjatë vërtetimit të identitetit",
diff --git a/lib/l10n/sq.json b/lib/l10n/sq.json
index 7df63e8ff84..cd10a590bd1 100644
--- a/lib/l10n/sq.json
+++ b/lib/l10n/sq.json
@@ -4,6 +4,9 @@
"Settings" : "Parametra",
"Users" : "Përdoruesit",
"Admin" : "Admin",
+ "Recommended" : "E rekomanduar",
+ "Unknown filetype" : "Tip i panjohur skedari",
+ "Invalid image" : "Imazh i pavlefshëm",
"web services under your control" : "shërbime web nën kontrollin tënd",
"Application is not enabled" : "Programi nuk është i aktivizuar.",
"Authentication error" : "Veprim i gabuar gjatë vërtetimit të identitetit",
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 0f6a40a7ef2..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",
@@ -17,6 +18,8 @@ OC.L10N.register(
"No app name specified" : "Uygulama adı belirtilmedi",
"Unknown filetype" : "Bilinmeyen dosya türü",
"Invalid image" : "Geçersiz resim",
+ "Database Error" : "Veritabanı Hatası",
+ "Please contact your system administrator." : "Lütfen sistem yöneticiniz ile iletişime geçin.",
"web services under your control" : "denetiminizdeki web hizmetleri",
"App directory already exists" : "Uygulama dizini zaten mevcut",
"Can't create app folder. Please fix permissions. %s" : "Uygulama dizini oluşturulamıyor. Lütfen izinleri düzeltin. %s",
@@ -103,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 52bad09e9cf..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",
@@ -15,6 +16,8 @@
"No app name specified" : "Uygulama adı belirtilmedi",
"Unknown filetype" : "Bilinmeyen dosya türü",
"Invalid image" : "Geçersiz resim",
+ "Database Error" : "Veritabanı Hatası",
+ "Please contact your system administrator." : "Lütfen sistem yöneticiniz ile iletişime geçin.",
"web services under your control" : "denetiminizdeki web hizmetleri",
"App directory already exists" : "Uygulama dizini zaten mevcut",
"Can't create app folder. Please fix permissions. %s" : "Uygulama dizini oluşturulamıyor. Lütfen izinleri düzeltin. %s",
@@ -101,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 28bc758fa35..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,8 @@ 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\"",
"Please ask your server administrator to install the module." : "Будь ласка, зверніться до адміністратора, щоб встановити модуль.",
diff --git a/lib/l10n/uk.json b/lib/l10n/uk.json
index 3fa7aa4d37c..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,8 @@
"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\"",
"Please ask your server administrator to install the module." : "Будь ласка, зверніться до адміністратора, щоб встановити модуль.",
diff --git a/lib/l10n/ur.php b/lib/l10n/ur.php
deleted file mode 100644
index 15f78e0bce6..00000000000
--- a/lib/l10n/ur.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-$TRANSLATIONS = array(
-"_%n minute ago_::_%n minutes ago_" => array("",""),
-"_%n hour ago_::_%n hours ago_" => array("",""),
-"_%n day go_::_%n days ago_" => array("",""),
-"_%n month ago_::_%n months ago_" => array("","")
-);
-$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
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/api.php b/lib/private/api.php
index f5576af2ad8..66b763fdc3e 100644
--- a/lib/private/api.php
+++ b/lib/private/api.php
@@ -132,7 +132,7 @@ class OC_API {
* @return array|\OC_OCS_Result
*/
public static function mergeResponses($responses) {
- // Sort into shipped and thirdparty
+ // Sort into shipped and third-party
$shipped = array(
'succeeded' => array(),
'failed' => array(),
@@ -162,7 +162,7 @@ class OC_API {
if(!empty($shipped['failed'])) {
// Which shipped response do we use if they all failed?
// They may have failed for different reasons (different status codes)
- // Which reponse code should we return?
+ // Which response code should we return?
// Maybe any that are not OC_API::RESPOND_SERVER_ERROR
// Merge failed responses if more than one
$data = array();
@@ -273,26 +273,32 @@ class OC_API {
// reuse existing login
$loggedIn = OC_User::isLoggedIn();
- $ocsApiRequest = isset($_SERVER['HTTP_OCS_APIREQUEST']) ? $_SERVER['HTTP_OCS_APIREQUEST'] === 'true' : false;
- if ($loggedIn === true && $ocsApiRequest) {
+ if ($loggedIn === true) {
+ $ocsApiRequest = isset($_SERVER['HTTP_OCS_APIREQUEST']) ? $_SERVER['HTTP_OCS_APIREQUEST'] === 'true' : false;
+ if ($ocsApiRequest) {
- // initialize the user's filesystem
- \OC_Util::setUpFS(\OC_User::getUser());
+ // initialize the user's filesystem
+ \OC_Util::setUpFS(\OC_User::getUser());
- return OC_User::getUser();
+ return OC_User::getUser();
+ }
+ return false;
}
- // basic auth
- $authUser = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : '';
- $authPw = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : '';
- $return = OC_User::login($authUser, $authPw);
- if ($return === true) {
- self::$logoutRequired = true;
+ // basic auth - because OC_User::login will create a new session we shall only try to login
+ // if user and pass are set
+ if(isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW']) ) {
+ $authUser = $_SERVER['PHP_AUTH_USER'];
+ $authPw = $_SERVER['PHP_AUTH_PW'];
+ $return = OC_User::login($authUser, $authPw);
+ if ($return === true) {
+ self::$logoutRequired = true;
- // initialize the user's filesystem
- \OC_Util::setUpFS(\OC_User::getUser());
+ // initialize the user's filesystem
+ \OC_Util::setUpFS(\OC_User::getUser());
- return $authUser;
+ return $authUser;
+ }
}
return false;
diff --git a/lib/private/app.php b/lib/private/app.php
index bc9ca0351ea..86db8fd9f55 100644
--- a/lib/private/app.php
+++ b/lib/private/app.php
@@ -635,63 +635,10 @@ class OC_App {
}
$file = self::getAppPath($appId) . '/appinfo/info.xml';
}
- $data = array();
- if (!file_exists($file)) {
- return null;
- }
- $content = @file_get_contents($file);
- if (!$content) {
- return null;
- }
- $xml = new SimpleXMLElement($content);
- $data['info'] = array();
- $data['remote'] = array();
- $data['public'] = array();
- foreach ($xml->children() as $child) {
- /**
- * @var $child SimpleXMLElement
- */
- if ($child->getName() == 'remote') {
- foreach ($child->children() as $remote) {
- /**
- * @var $remote SimpleXMLElement
- */
- $data['remote'][$remote->getName()] = (string)$remote;
- }
- } elseif ($child->getName() == 'public') {
- foreach ($child->children() as $public) {
- /**
- * @var $public SimpleXMLElement
- */
- $data['public'][$public->getName()] = (string)$public;
- }
- } elseif ($child->getName() == 'types') {
- $data['types'] = array();
- foreach ($child->children() as $type) {
- /**
- * @var $type SimpleXMLElement
- */
- $data['types'][] = $type->getName();
- }
- } elseif ($child->getName() == 'description') {
- $xml = (string)$child->asXML();
- $data[$child->getName()] = substr($xml, 13, -14); //script <description> tags
- } elseif ($child->getName() == 'documentation') {
- foreach ($child as $subChild) {
- $url = (string) $subChild;
-
- // 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
- if(!\OC::$server->getHTTPHelper()->isHTTPURL($url)) {
- $url = OC_Helper::linkToDocs($url);
- }
- $data["documentation"][$subChild->getName()] = $url;
- }
- } else {
- $data[$child->getName()] = (string)$child;
- }
- }
+ $parser = new \OC\App\InfoParser(\OC::$server->getHTTPHelper(), \OC::$server->getURLGenerator());
+ $data = $parser->parse($file);
+
self::$appInfo[$appId] = $data;
return $data;
@@ -862,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 {
@@ -973,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/appmanager.php b/lib/private/app/appmanager.php
new file mode 100644
index 00000000000..6d9aa0bfe37
--- /dev/null
+++ b/lib/private/app/appmanager.php
@@ -0,0 +1,138 @@
+<?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\App;
+
+use OCP\App\IAppManager;
+use OCP\IAppConfig;
+use OCP\IGroupManager;
+use OCP\IUserSession;
+
+class AppManager implements IAppManager {
+ /**
+ * @var \OCP\IUserSession
+ */
+ private $userSession;
+
+ /**
+ * @var \OCP\IAppConfig
+ */
+ private $appConfig;
+
+ /**
+ * @var \OCP\IGroupManager
+ */
+ private $groupManager;
+
+ /**
+ * @var string[] $appId => $enabled
+ */
+ private $installedAppsCache;
+
+ /**
+ * @param \OCP\IUserSession $userSession
+ * @param \OCP\IAppConfig $appConfig
+ * @param \OCP\IGroupManager $groupManager
+ */
+ public function __construct(IUserSession $userSession, IAppConfig $appConfig, IGroupManager $groupManager) {
+ $this->userSession = $userSession;
+ $this->appConfig = $appConfig;
+ $this->groupManager = $groupManager;
+ }
+
+ /**
+ * @return string[] $appId => $enabled
+ */
+ private function getInstalledApps() {
+ if (!$this->installedAppsCache) {
+ $values = $this->appConfig->getValues(false, 'enabled');
+ $this->installedAppsCache = array_filter($values, function ($value) {
+ return $value !== 'no';
+ });
+ ksort($this->installedAppsCache);
+ }
+ return $this->installedAppsCache;
+ }
+
+ /**
+ * Check if an app is enabled for user
+ *
+ * @param string $appId
+ * @param \OCP\IUser $user (optional) if not defined, the currently logged in user will be used
+ * @return bool
+ */
+ public function isEnabledForUser($appId, $user = null) {
+ if (is_null($user)) {
+ $user = $this->userSession->getUser();
+ }
+ $installedApps = $this->getInstalledApps();
+ if (isset($installedApps[$appId])) {
+ $enabled = $installedApps[$appId];
+ if ($enabled === 'yes') {
+ return true;
+ } elseif (is_null($user)) {
+ return false;
+ } else {
+ $groupIds = json_decode($enabled);
+ $userGroups = $this->groupManager->getUserGroupIds($user);
+ foreach ($userGroups as $groupId) {
+ if (array_search($groupId, $groupIds) !== false) {
+ return true;
+ }
+ }
+ return false;
+ }
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Check if an app is installed in the instance
+ *
+ * @param string $appId
+ * @return bool
+ */
+ public function isInstalled($appId) {
+ $installedApps = $this->getInstalledApps();
+ return isset($installedApps[$appId]);
+ }
+
+ /**
+ * Enable an app for every user
+ *
+ * @param string $appId
+ */
+ public function enableApp($appId) {
+ $this->appConfig->setValue($appId, 'enabled', 'yes');
+ }
+
+ /**
+ * Enable an app only for specific groups
+ *
+ * @param string $appId
+ * @param \OCP\IGroup[] $groups
+ */
+ public function enableAppForGroups($appId, $groups) {
+ $groupIds = array_map(function ($group) {
+ /** @var \OCP\IGroup $group */
+ return $group->getGID();
+ }, $groups);
+ $this->appConfig->setValue($appId, 'enabled', json_encode($groupIds));
+ }
+
+ /**
+ * Disable an app for every user
+ *
+ * @param string $appId
+ */
+ public function disableApp($appId) {
+ $this->appConfig->setValue($appId, 'enabled', 'no');
+ }
+}
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
new file mode 100644
index 00000000000..0bfbf6bd139
--- /dev/null
+++ b/lib/private/app/infoparser.php
@@ -0,0 +1,148 @@
+<?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\IURLGenerator;
+
+class InfoParser {
+ /**
+ * @var \OC\HTTPHelper
+ */
+ private $httpHelper;
+
+ /**
+ * @var IURLGenerator
+ */
+ private $urlGenerator;
+
+ /**
+ * @param \OC\HTTPHelper $httpHelper
+ * @param IURLGenerator $urlGenerator
+ */
+ public function __construct(\OC\HTTPHelper $httpHelper, IURLGenerator $urlGenerator) {
+ $this->httpHelper = $httpHelper;
+ $this->urlGenerator = $urlGenerator;
+ }
+
+ /**
+ * @param string $file the xml file to be loaded
+ * @return null|array where null is an indicator for an error
+ */
+ public function parse($file) {
+ if (!file_exists($file)) {
+ return null;
+ }
+
+ $loadEntities = libxml_disable_entity_loader(false);
+ $xml = @simplexml_load_file($file);
+ libxml_disable_entity_loader($loadEntities);
+ if ($xml == false) {
+ return null;
+ }
+ $array = $this->xmlToArray($xml, false);
+ if (is_null($array)) {
+ return null;
+ }
+ if (!array_key_exists('info', $array)) {
+ $array['info'] = array();
+ }
+ if (!array_key_exists('remote', $array)) {
+ $array['remote'] = array();
+ }
+ if (!array_key_exists('public', $array)) {
+ $array['public'] = array();
+ }
+ if (!array_key_exists('types', $array)) {
+ $array['types'] = 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
+ if (!$this->httpHelper->isHTTPURL($url)) {
+ $url = $this->urlGenerator->linkToDocs($url);
+ }
+
+ $array['documentation'][$key] = $url;
+ }
+ }
+ if (array_key_exists('types', $array)) {
+ 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);
+ }
+ }
+ }
+
+ return $array;
+ }
+}
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/core/api.php b/lib/private/appframework/core/api.php
index 279f4bf97f7..f68c677d106 100644
--- a/lib/private/appframework/core/api.php
+++ b/lib/private/appframework/core/api.php
@@ -49,6 +49,7 @@ class API implements IApi{
/**
* Gets the userid of the current user
* @return string the user id of the current user
+ * @deprecated Use \OC::$server->getUserSession()->getUser()->getUID()
*/
public function getUserId(){
return \OCP\User::getUser();
@@ -112,6 +113,7 @@ class API implements IApi{
/**
* used to return and open a new event source
* @return \OCP\IEventSource a new open EventSource class
+ * @deprecated Use \OC::$server->createEventSource();
*/
public function openEventSource(){
return \OC::$server->createEventSource();
@@ -159,6 +161,7 @@ class API implements IApi{
* @param string $className full namespace and class name of the class
* @param string $methodName the name of the static method that should be
* called
+ * @deprecated Use \OC::$server->getJobList()->add();
*/
public function addRegularTask($className, $methodName) {
\OCP\Backgroundjob::addRegularTask($className, $methodName);
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/appframework/middleware/security/securitymiddleware.php b/lib/private/appframework/middleware/security/securitymiddleware.php
index 948a43ce0f4..8c5ca5891ad 100644
--- a/lib/private/appframework/middleware/security/securitymiddleware.php
+++ b/lib/private/appframework/middleware/security/securitymiddleware.php
@@ -34,6 +34,8 @@ use OCP\INavigationManager;
use OCP\IURLGenerator;
use OCP\IRequest;
use OCP\ILogger;
+use OCP\AppFramework\Controller;
+use OCP\Util;
/**
@@ -110,12 +112,24 @@ class SecurityMiddleware extends Middleware {
}
}
+ // CSRF check - also registers the CSRF token since the session may be closed later
+ Util::callRegister();
if(!$this->reflector->hasAnnotation('NoCSRFRequired')) {
if(!$this->request->passesCSRFCheck()) {
throw new SecurityException('CSRF check failed', Http::STATUS_PRECONDITION_FAILED);
}
}
+ /**
+ * FIXME: Use DI once available
+ * Checks if app is enabled (also inclues a check whether user is allowed to access the resource)
+ * The getAppPath() check is here since components such as settings also use the AppFramework and
+ * therefore won't pass this check.
+ */
+ if(\OC_App::getAppPath($this->appName) !== false && !\OC_App::isEnabled($this->appName)) {
+ throw new SecurityException('App is not enabled', Http::STATUS_PRECONDITION_FAILED);
+ }
+
}
diff --git a/lib/private/appframework/routing/routeconfig.php b/lib/private/appframework/routing/routeconfig.php
index 91687b9c83c..9816b062b8d 100644
--- a/lib/private/appframework/routing/routeconfig.php
+++ b/lib/private/appframework/routing/routeconfig.php
@@ -69,6 +69,12 @@ class RouteConfig {
$simpleRoutes = isset($routes['routes']) ? $routes['routes'] : array();
foreach ($simpleRoutes as $simpleRoute) {
$name = $simpleRoute['name'];
+ $postfix = '';
+
+ if (isset($simpleRoute['postfix'])) {
+ $postfix = $simpleRoute['postfix'];
+ }
+
$url = $simpleRoute['url'];
$verb = isset($simpleRoute['verb']) ? strtoupper($simpleRoute['verb']) : 'GET';
@@ -84,7 +90,7 @@ class RouteConfig {
// register the route
$handler = new RouteActionHandler($this->container, $controllerName, $actionName);
- $router = $this->router->create($this->appName.'.'.$controller.'.'.$action, $url)
+ $router = $this->router->create($this->appName.'.'.$controller.'.'.$action . $postfix, $url)
->method($verb)
->action($handler);
diff --git a/lib/private/arrayparser.php b/lib/private/arrayparser.php
index dab1817c2ed..1cf3355d6fa 100644
--- a/lib/private/arrayparser.php
+++ b/lib/private/arrayparser.php
@@ -21,9 +21,6 @@
namespace OC;
-class SyntaxException extends \Exception {
-}
-
class ArrayParser {
const TYPE_NUM = 1;
const TYPE_BOOL = 2;
@@ -209,7 +206,7 @@ class ArrayParser {
$bracketDepth++;
} elseif ($char === ')') {
if ($bracketDepth <= 0) {
- throw new SyntaxException;
+ throw new UnexpectedValueException();
} else {
$bracketDepth--;
}
diff --git a/lib/private/connector/sabre/appenabledplugin.php b/lib/private/connector/sabre/appenabledplugin.php
new file mode 100644
index 00000000000..61f5170658d
--- /dev/null
+++ b/lib/private/connector/sabre/appenabledplugin.php
@@ -0,0 +1,75 @@
+<?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\Connector\Sabre;
+
+use OCP\App\IAppManager;
+use Sabre\DAV\Exception\Forbidden;
+use Sabre\DAV\ServerPlugin;
+
+/**
+ * Plugin to check if an app is enabled for the current user
+ */
+class AppEnabledPlugin extends ServerPlugin {
+
+ /**
+ * Reference to main server object
+ *
+ * @var \Sabre\DAV\Server
+ */
+ private $server;
+
+ /**
+ * @var string
+ */
+ private $app;
+
+ /**
+ * @var \OCP\App\IAppManager
+ */
+ private $appManager;
+
+ /**
+ * @param string $app
+ * @param \OCP\App\IAppManager $appManager
+ */
+ public function __construct($app, IAppManager $appManager) {
+ $this->app = $app;
+ $this->appManager = $appManager;
+ }
+
+ /**
+ * This initializes the plugin.
+ *
+ * This function is called by \Sabre\DAV\Server, after
+ * addPlugin is called.
+ *
+ * This method should set up the required event subscriptions.
+ *
+ * @param \Sabre\DAV\Server $server
+ * @return void
+ */
+ public function initialize(\Sabre\DAV\Server $server) {
+
+ $this->server = $server;
+ $this->server->subscribeEvent('beforeMethod', array($this, 'checkAppEnabled'), 30);
+ }
+
+ /**
+ * This method is called before any HTTP after auth and checks if the user has access to the app
+ *
+ * @throws \Sabre\DAV\Exception\Forbidden
+ * @return bool
+ */
+ public function checkAppEnabled() {
+ if (!$this->appManager->isEnabledForUser($this->app)) {
+ throw new Forbidden();
+ }
+ }
+}
diff --git a/lib/private/contacts/localaddressbook.php b/lib/private/contacts/localaddressbook.php
index 483bbee83f8..91ddb5798f2 100644
--- a/lib/private/contacts/localaddressbook.php
+++ b/lib/private/contacts/localaddressbook.php
@@ -91,7 +91,7 @@ class LocalAddressBook implements \OCP\IAddressBook {
* @return int
*/
public function getPermissions() {
- return \OCP\PERMISSION_READ;
+ return \OCP\Constants::PERMISSION_READ;
}
/**
diff --git a/lib/private/contactsmanager.php b/lib/private/contactsmanager.php
index 338cc048651..737fc4f0e3a 100644
--- a/lib/private/contactsmanager.php
+++ b/lib/private/contactsmanager.php
@@ -62,7 +62,7 @@ namespace OC {
return null;
}
- if ($addressBook->getPermissions() & \OCP\PERMISSION_DELETE) {
+ if ($addressBook->getPermissions() & \OCP\Constants::PERMISSION_DELETE) {
return null;
}
@@ -83,7 +83,7 @@ namespace OC {
return null;
}
- if ($addressBook->getPermissions() & \OCP\PERMISSION_CREATE) {
+ if ($addressBook->getPermissions() & \OCP\Constants::PERMISSION_CREATE) {
return null;
}
diff --git a/lib/private/databaseexception.php b/lib/private/databaseexception.php
new file mode 100644
index 00000000000..1135621ead2
--- /dev/null
+++ b/lib/private/databaseexception.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Copyright (c) 2012 Frank Karlitschek <frank@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC;
+
+class DatabaseException extends \Exception {
+ private $query;
+
+ //FIXME getQuery seems to be unused, maybe use parent constructor with $message, $code and $previous
+ public function __construct($message, $query = null){
+ parent::__construct($message);
+ $this->query = $query;
+ }
+
+ public function getQuery() {
+ return $this->query;
+ }
+}
diff --git a/lib/private/databasesetupexception.php b/lib/private/databasesetupexception.php
new file mode 100644
index 00000000000..9235cda8c0e
--- /dev/null
+++ b/lib/private/databasesetupexception.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC;
+
+class DatabaseSetupException extends HintException {
+}
diff --git a/lib/private/db.php b/lib/private/db.php
index b820281b8a3..f8015133682 100644
--- a/lib/private/db.php
+++ b/lib/private/db.php
@@ -22,20 +22,6 @@
define('MDB2_SCHEMA_DUMP_STRUCTURE', '1');
-class DatabaseException extends Exception {
- private $query;
-
- //FIXME getQuery seems to be unused, maybe use parent constructor with $message, $code and $previous
- public function __construct($message, $query = null){
- parent::__construct($message);
- $this->query = $query;
- }
-
- public function getQuery() {
- return $this->query;
- }
-}
-
/**
* This class manages the access to the database. It basically is a wrapper for
* Doctrine with some adaptions.
@@ -65,7 +51,7 @@ class OC_DB {
* @param int $limit
* @param int $offset
* @param bool $isManipulation
- * @throws DatabaseException
+ * @throws \OC\DatabaseException
* @return OC_DB_StatementWrapper prepared SQL query
*
* SQL query via Doctrine prepare(), needs to be execute()'d!
@@ -82,7 +68,7 @@ class OC_DB {
try {
$result =$connection->prepare($query, $limit, $offset);
} catch (\Doctrine\DBAL\DBALException $e) {
- throw new \DatabaseException($e->getMessage(), $query);
+ throw new \OC\DatabaseException($e->getMessage(), $query);
}
// differentiate between query and manipulation
$result = new OC_DB_StatementWrapper($result, $isManipulation);
@@ -123,7 +109,7 @@ class OC_DB {
* .. or a simple sql query string
* @param array $parameters
* @return OC_DB_StatementWrapper
- * @throws DatabaseException
+ * @throws \OC\DatabaseException
*/
static public function executeAudited( $stmt, array $parameters = null) {
if (is_string($stmt)) {
@@ -132,7 +118,7 @@ class OC_DB {
// TODO try to convert LIMIT OFFSET notation to parameters, see fixLimitClauseForMSSQL
$message = 'LIMIT and OFFSET are forbidden for portability reasons,'
. ' pass an array with \'limit\' and \'offset\' instead';
- throw new DatabaseException($message);
+ throw new \OC\DatabaseException($message);
}
$stmt = array('sql' => $stmt, 'limit' => null, 'offset' => null);
}
@@ -140,7 +126,7 @@ class OC_DB {
// convert to prepared statement
if ( ! array_key_exists('sql', $stmt) ) {
$message = 'statement array must at least contain key \'sql\'';
- throw new DatabaseException($message);
+ throw new \OC\DatabaseException($message);
}
if ( ! array_key_exists('limit', $stmt) ) {
$stmt['limit'] = null;
@@ -160,7 +146,7 @@ class OC_DB {
} else {
$message = 'Expected a prepared statement or array got ' . gettype($stmt);
}
- throw new DatabaseException($message);
+ throw new \OC\DatabaseException($message);
}
return $result;
}
@@ -169,7 +155,7 @@ class OC_DB {
* gets last value of autoincrement
* @param string $table The optional table name (will replace *PREFIX*) and add sequence suffix
* @return string id
- * @throws DatabaseException
+ * @throws \OC\DatabaseException
*
* \Doctrine\DBAL\Connection lastInsertId
*
@@ -312,7 +298,7 @@ class OC_DB {
* @param mixed $result
* @param string $message
* @return void
- * @throws DatabaseException
+ * @throws \OC\DatabaseException
*/
public static function raiseExceptionOnError($result, $message = null) {
if(self::isError($result)) {
@@ -321,7 +307,7 @@ class OC_DB {
} else {
$message .= ', Root cause:' . self::getErrorMessage($result);
}
- throw new DatabaseException($message, self::getErrorCode($result));
+ throw new \OC\DatabaseException($message, self::getErrorCode($result));
}
}
@@ -345,7 +331,7 @@ class OC_DB {
*
* @param string $table
* @return bool
- * @throws DatabaseException
+ * @throws \OC\DatabaseException
*/
public static function tableExists($table) {
@@ -381,7 +367,7 @@ class OC_DB {
$result = \OC_DB::executeAudited($sql, array($table));
break;
default:
- throw new DatabaseException("Unknown database type: $dbType");
+ throw new \OC\DatabaseException("Unknown database type: $dbType");
}
return $result->fetchOne() === $table;
diff --git a/lib/private/db/adapter.php b/lib/private/db/adapter.php
index 972008776f6..58b3514b922 100644
--- a/lib/private/db/adapter.php
+++ b/lib/private/db/adapter.php
@@ -43,6 +43,7 @@ class Adapter {
* insert the @input values when they do not exist yet
* @param string $table name
* @param array $input key->value pair, key has to be sanitized properly
+ * @throws \OC\HintException
* @return int count of inserted rows
*/
public function insertIfNotExist($table, $input) {
@@ -70,8 +71,13 @@ class Adapter {
$entry = 'DB Error: "'.$e->getMessage() . '"<br />';
$entry .= 'Offending command was: ' . $query.'<br />';
\OC_Log::write('core', $entry, \OC_Log::FATAL);
- error_log('DB error: ' . $entry);
- \OC_Template::printErrorPage( $entry );
+ $l = \OC::$server->getL10N('lib');
+ throw new \OC\HintException(
+ $l->t('Database Error'),
+ $l->t('Please contact your system administrator.'),
+ 0,
+ $e
+ );
}
}
}
diff --git a/lib/private/db/adaptersqlite.php b/lib/private/db/adaptersqlite.php
index 3471fcf4042..c5dfa85aaac 100644
--- a/lib/private/db/adaptersqlite.php
+++ b/lib/private/db/adaptersqlite.php
@@ -41,8 +41,13 @@ class AdapterSqlite extends Adapter {
$entry = 'DB Error: "'.$e->getMessage() . '"<br />';
$entry .= 'Offending command was: ' . $query . '<br />';
\OC_Log::write('core', $entry, \OC_Log::FATAL);
- error_log('DB error: '.$entry);
- \OC_Template::printErrorPage( $entry );
+ $l = \OC::$server->getL10N('lib');
+ throw new \OC\HintException(
+ $l->t('Database Error'),
+ $l->t('Please contact your system administrator.'),
+ 0,
+ $e
+ );
}
if ($stmt->fetchColumn() === '0') {
@@ -60,8 +65,13 @@ class AdapterSqlite extends Adapter {
$entry = 'DB Error: "'.$e->getMessage() . '"<br />';
$entry .= 'Offending command was: ' . $query.'<br />';
\OC_Log::write('core', $entry, \OC_Log::FATAL);
- error_log('DB error: ' . $entry);
- \OC_Template::printErrorPage( $entry );
+ $l = \OC::$server->getL10N('lib');
+ throw new \OC\HintException(
+ $l->t('Database Error'),
+ $l->t('Please contact your system administrator.'),
+ 0,
+ $e
+ );
}
return $result;
diff --git a/lib/private/db/connectionfactory.php b/lib/private/db/connectionfactory.php
index f6253e09b95..58043b30440 100644
--- a/lib/private/db/connectionfactory.php
+++ b/lib/private/db/connectionfactory.php
@@ -90,7 +90,8 @@ class ConnectionFactory {
$eventManager->addEventSubscriber(new \Doctrine\DBAL\Event\Listeners\OracleSessionInit);
break;
case 'sqlite3':
- $eventManager->addEventSubscriber(new SQLiteSessionInit);
+ $journalMode = $additionalConnectionParams['sqlite.journal_mode'];
+ $eventManager->addEventSubscriber(new SQLiteSessionInit(true, $journalMode));
break;
}
$connection = \Doctrine\DBAL\DriverManager::getConnection(
@@ -153,6 +154,7 @@ class ConnectionFactory {
}
$connectionParams['tablePrefix'] = $config->getSystemValue('dbtableprefix', 'oc_');
+ $connectionParams['sqlite.journal_mode'] = $config->getSystemValue('sqlite.journal_mode', 'WAL');
//additional driver options, eg. for mysql ssl
$driverOptions = $config->getSystemValue('dbdriveroptions', null);
diff --git a/lib/private/db/mdb2schemamanager.php b/lib/private/db/mdb2schemamanager.php
index 632e320576c..78267094d0e 100644
--- a/lib/private/db/mdb2schemamanager.php
+++ b/lib/private/db/mdb2schemamanager.php
@@ -49,7 +49,7 @@ class MDB2SchemaManager {
* TODO: write more documentation
*/
public function createDbFromStructure($file) {
- $schemaReader = new MDB2SchemaReader(\OC_Config::getObject(), $this->conn->getDatabasePlatform());
+ $schemaReader = new MDB2SchemaReader(\OC::$server->getConfig(), $this->conn->getDatabasePlatform());
$toSchema = $schemaReader->loadSchemaFromFile($file);
return $this->executeSchemaChange($toSchema);
}
@@ -83,7 +83,7 @@ class MDB2SchemaManager {
*/
private function readSchemaFromFile($file) {
$platform = $this->conn->getDatabasePlatform();
- $schemaReader = new MDB2SchemaReader(\OC_Config::getObject(), $platform);
+ $schemaReader = new MDB2SchemaReader(\OC::$server->getConfig(), $platform);
return $schemaReader->loadSchemaFromFile($file);
}
@@ -131,7 +131,7 @@ class MDB2SchemaManager {
* @param string $file the xml file describing the tables
*/
public function removeDBStructure($file) {
- $schemaReader = new MDB2SchemaReader(\OC_Config::getObject(), $this->conn->getDatabasePlatform());
+ $schemaReader = new MDB2SchemaReader(\OC::$server->getConfig(), $this->conn->getDatabasePlatform());
$fromSchema = $schemaReader->loadSchemaFromFile($file);
$toSchema = clone $fromSchema;
/** @var $table \Doctrine\DBAL\Schema\Table */
diff --git a/lib/private/db/mdb2schemareader.php b/lib/private/db/mdb2schemareader.php
index 288eef5cda0..7dd4168fb6e 100644
--- a/lib/private/db/mdb2schemareader.php
+++ b/lib/private/db/mdb2schemareader.php
@@ -8,6 +8,9 @@
namespace OC\DB;
+use Doctrine\DBAL\Platforms\AbstractPlatform;
+use OCP\IConfig;
+
class MDB2SchemaReader {
/**
* @var string $DBNAME
@@ -25,13 +28,13 @@ class MDB2SchemaReader {
protected $platform;
/**
- * @param \OC\Config $config
+ * @param \OCP\IConfig $config
* @param \Doctrine\DBAL\Platforms\AbstractPlatform $platform
*/
- public function __construct($config, $platform) {
+ public function __construct(IConfig $config, AbstractPlatform $platform) {
$this->platform = $platform;
- $this->DBNAME = $config->getValue('dbname', 'owncloud');
- $this->DBTABLEPREFIX = $config->getValue('dbtableprefix', 'oc_');
+ $this->DBNAME = $config->getSystemValue('dbname', 'owncloud');
+ $this->DBTABLEPREFIX = $config->getSystemValue('dbtableprefix', 'oc_');
}
/**
diff --git a/lib/private/db/oracleconnection.php b/lib/private/db/oracleconnection.php
index e2fc4644f47..4cec7bc4ae4 100644
--- a/lib/private/db/oracleconnection.php
+++ b/lib/private/db/oracleconnection.php
@@ -20,7 +20,7 @@ class OracleConnection extends Connection {
return $return;
}
- /*
+ /**
* {@inheritDoc}
*/
public function insert($tableName, array $data, array $types = array()) {
@@ -29,7 +29,7 @@ class OracleConnection extends Connection {
return parent::insert($tableName, $data, $types);
}
- /*
+ /**
* {@inheritDoc}
*/
public function update($tableName, array $data, array $identifier, array $types = array()) {
@@ -39,11 +39,11 @@ class OracleConnection extends Connection {
return parent::update($tableName, $data, $identifier, $types);
}
- /*
+ /**
* {@inheritDoc}
*/
- public function delete($tableName, array $identifier) {
- $tableName = $this->quoteIdentifier($tableName);
+ public function delete($tableExpression, array $identifier, array $types = array()) {
+ $tableName = $this->quoteIdentifier($tableExpression);
$identifier = $this->quoteKeys($identifier);
return parent::delete($tableName, $identifier);
}
diff --git a/lib/private/db/sqlitesessioninit.php b/lib/private/db/sqlitesessioninit.php
index 7e1166be95b..1fff22b883a 100644
--- a/lib/private/db/sqlitesessioninit.php
+++ b/lib/private/db/sqlitesessioninit.php
@@ -19,12 +19,19 @@ class SQLiteSessionInit implements EventSubscriber {
private $caseSensitiveLike;
/**
+ * @var string
+ */
+ private $journalMode;
+
+ /**
* Configure case sensitive like for each connection
*
* @param bool $caseSensitiveLike
+ * @param string $journalMode
*/
- public function __construct($caseSensitiveLike = true) {
+ public function __construct($caseSensitiveLike, $journalMode) {
$this->caseSensitiveLike = $caseSensitiveLike;
+ $this->journalMode = $journalMode;
}
/**
@@ -34,6 +41,7 @@ class SQLiteSessionInit implements EventSubscriber {
public function postConnect(ConnectionEventArgs $args) {
$sensitive = ($this->caseSensitiveLike) ? 'true' : 'false';
$args->getConnection()->executeUpdate('PRAGMA case_sensitive_like = ' . $sensitive);
+ $args->getConnection()->executeUpdate('PRAGMA journal_mode = ' . $this->journalMode);
}
public function getSubscribedEvents() {
diff --git a/lib/private/db/statementwrapper.php b/lib/private/db/statementwrapper.php
index ad63de98e93..a85c0167e0b 100644
--- a/lib/private/db/statementwrapper.php
+++ b/lib/private/db/statementwrapper.php
@@ -64,7 +64,7 @@ class OC_DB_StatementWrapper {
} else {
$result = $this->statement->execute();
}
-
+
if ($result === false) {
return false;
}
@@ -158,14 +158,16 @@ class OC_DB_StatementWrapper {
OC_Log::write('core', $entry, OC_Log::FATAL);
OC_User::setUserId(null);
- // send http status 503
- header('HTTP/1.1 503 Service Temporarily Unavailable');
- header('Status: 503 Service Temporarily Unavailable');
- OC_Template::printErrorPage('Failed to connect to database');
- die ($entry);
+ $l = \OC::$server->getL10N('lib');
+ throw new \OC\HintException(
+ $l->t('Database Error'),
+ $l->t('Please contact your system administrator.'),
+ 0,
+ $e
+ );
}
}
-
+
/**
* provide an alias for fetch
*
diff --git a/lib/private/files.php b/lib/private/files.php
index 571d3215caa..98f3c52d6c6 100644
--- a/lib/private/files.php
+++ b/lib/private/files.php
@@ -24,17 +24,14 @@
// TODO: get rid of this using proper composer packages
require_once 'mcnetic/phpzipstreamer/ZipStreamer.php';
-class GET_TYPE {
- const FILE = 1;
- const ZIP_FILES = 2;
- const ZIP_DIR = 3;
-}
-
/**
* Class for file server access
*
*/
class OC_Files {
+ const FILE = 1;
+ const ZIP_FILES = 2;
+ const ZIP_DIR = 3;
/**
* @param string $filename
@@ -76,7 +73,7 @@ class OC_Files {
}
if (is_array($files)) {
- $get_type = GET_TYPE::ZIP_FILES;
+ $get_type = self::ZIP_FILES;
$basename = basename($dir);
if ($basename) {
$name = $basename . '.zip';
@@ -88,7 +85,7 @@ class OC_Files {
} else {
$filename = $dir . '/' . $files;
if (\OC\Files\Filesystem::is_dir($dir . '/' . $files)) {
- $get_type = GET_TYPE::ZIP_DIR;
+ $get_type = self::ZIP_DIR;
// downloading root ?
if ($files === '') {
$name = 'download.zip';
@@ -97,12 +94,12 @@ class OC_Files {
}
} else {
- $get_type = GET_TYPE::FILE;
+ $get_type = self::FILE;
$name = $files;
}
}
- if ($get_type === GET_TYPE::FILE) {
+ if ($get_type === self::FILE) {
$zip = false;
if ($xsendfile && OC_App::isEnabled('files_encryption')) {
$xsendfile = false;
@@ -127,7 +124,7 @@ class OC_Files {
if ($zip) {
$executionTime = intval(ini_get('max_execution_time'));
set_time_limit(0);
- if ($get_type === GET_TYPE::ZIP_FILES) {
+ if ($get_type === self::ZIP_FILES) {
foreach ($files as $file) {
$file = $dir . '/' . $file;
if (\OC\Files\Filesystem::is_file($file)) {
@@ -138,7 +135,7 @@ class OC_Files {
self::zipAddDir($file, $zip);
}
}
- } elseif ($get_type === GET_TYPE::ZIP_DIR) {
+ } elseif ($get_type === self::ZIP_DIR) {
$file = $dir . '/' . $files;
self::zipAddDir($file, $zip);
}
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/fileinfo.php b/lib/private/files/fileinfo.php
index 8457a2d160f..8bab51f0737 100644
--- a/lib/private/files/fileinfo.php
+++ b/lib/private/files/fileinfo.php
@@ -122,7 +122,7 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess {
* @return int
*/
public function getSize() {
- return $this->data['size'];
+ return isset($this->data['size']) ? $this->data['size'] : 0;
}
/**
@@ -173,14 +173,14 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess {
* @return bool
*/
public function isReadable() {
- return $this->checkPermissions(\OCP\PERMISSION_READ);
+ return $this->checkPermissions(\OCP\Constants::PERMISSION_READ);
}
/**
* @return bool
*/
public function isUpdateable() {
- return $this->checkPermissions(\OCP\PERMISSION_UPDATE);
+ return $this->checkPermissions(\OCP\Constants::PERMISSION_UPDATE);
}
/**
@@ -189,21 +189,21 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess {
* @return bool
*/
public function isCreatable() {
- return $this->checkPermissions(\OCP\PERMISSION_CREATE);
+ return $this->checkPermissions(\OCP\Constants::PERMISSION_CREATE);
}
/**
* @return bool
*/
public function isDeletable() {
- return $this->checkPermissions(\OCP\PERMISSION_DELETE);
+ return $this->checkPermissions(\OCP\Constants::PERMISSION_DELETE);
}
/**
* @return bool
*/
public function isShareable() {
- return $this->checkPermissions(\OCP\PERMISSION_SHARE);
+ return $this->checkPermissions(\OCP\Constants::PERMISSION_SHARE);
}
/**
diff --git a/lib/private/files/filesystem.php b/lib/private/files/filesystem.php
index c7dc99c55cb..6c8fa8c90ba 100644
--- a/lib/private/files/filesystem.php
+++ b/lib/private/files/filesystem.php
@@ -698,13 +698,22 @@ class Filesystem {
* @param bool $stripTrailingSlash
* @return string
*/
- public static function normalizePath($path, $stripTrailingSlash = true) {
+ public static function normalizePath($path, $stripTrailingSlash = true, $isAbsolutePath = false) {
if ($path == '') {
return '/';
}
+
//no windows style slashes
$path = str_replace('\\', '/', $path);
+ // When normalizing an absolute path, we need to ensure that the drive-letter
+ // is still at the beginning on windows
+ $windows_drive_letter = '';
+ if ($isAbsolutePath && \OC_Util::runningOnWindows() && preg_match('#^([a-zA-Z])$#', $path[0]) && $path[1] == ':' && $path[2] == '/') {
+ $windows_drive_letter = substr($path, 0, 2);
+ $path = substr($path, 2);
+ }
+
//add leading slash
if ($path[0] !== '/') {
$path = '/' . $path;
@@ -733,7 +742,7 @@ class Filesystem {
//normalize unicode if possible
$path = \OC_Util::normalizeUnicode($path);
- return $path;
+ return $windows_drive_letter . $path;
}
/**
diff --git a/lib/private/files/node/file.php b/lib/private/files/node/file.php
index 75d5e0166b6..1c47294cdae 100644
--- a/lib/private/files/node/file.php
+++ b/lib/private/files/node/file.php
@@ -16,7 +16,7 @@ class File extends Node implements \OCP\Files\File {
* @throws \OCP\Files\NotPermittedException
*/
public function getContent() {
- if ($this->checkPermissions(\OCP\PERMISSION_READ)) {
+ if ($this->checkPermissions(\OCP\Constants::PERMISSION_READ)) {
/**
* @var \OC\Files\Storage\Storage $storage;
*/
@@ -31,9 +31,10 @@ class File extends Node implements \OCP\Files\File {
* @throws \OCP\Files\NotPermittedException
*/
public function putContent($data) {
- if ($this->checkPermissions(\OCP\PERMISSION_UPDATE)) {
+ 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
@@ -55,7 +49,7 @@ class File extends Node implements \OCP\Files\File {
public function fopen($mode) {
$preHooks = array();
$postHooks = array();
- $requiredPermissions = \OCP\PERMISSION_READ;
+ $requiredPermissions = \OCP\Constants::PERMISSION_READ;
switch ($mode) {
case 'r+':
case 'rb+':
@@ -73,7 +67,7 @@ class File extends Node implements \OCP\Files\File {
case 'ab':
$preHooks[] = 'preWrite';
$postHooks[] = 'postWrite';
- $requiredPermissions |= \OCP\PERMISSION_UPDATE;
+ $requiredPermissions |= \OCP\Constants::PERMISSION_UPDATE;
break;
}
@@ -88,12 +82,13 @@ class File extends Node implements \OCP\Files\File {
}
public function delete() {
- if ($this->checkPermissions(\OCP\PERMISSION_DELETE)) {
+ if ($this->checkPermissions(\OCP\Constants::PERMISSION_DELETE)) {
$this->sendHooks(array('preDelete'));
$this->view->unlink($this->path);
$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 8c7acc339ae..54a699be532 100644
--- a/lib/private/files/node/folder.php
+++ b/lib/private/files/node/folder.php
@@ -180,7 +180,7 @@ class Folder extends Node implements \OCP\Files\Folder {
* @throws \OCP\Files\NotPermittedException
*/
public function newFolder($path) {
- if ($this->checkPermissions(\OCP\PERMISSION_CREATE)) {
+ if ($this->checkPermissions(\OCP\Constants::PERMISSION_CREATE)) {
$fullPath = $this->getFullPath($path);
$nonExisting = new NonExistingFolder($this->root, $this->view, $fullPath);
$this->root->emit('\OC\Files', 'preWrite', array($nonExisting));
@@ -201,7 +201,7 @@ class Folder extends Node implements \OCP\Files\Folder {
* @throws \OCP\Files\NotPermittedException
*/
public function newFile($path) {
- if ($this->checkPermissions(\OCP\PERMISSION_CREATE)) {
+ if ($this->checkPermissions(\OCP\Constants::PERMISSION_CREATE)) {
$fullPath = $this->getFullPath($path);
$nonExisting = new NonExistingFile($this->root, $this->view, $fullPath);
$this->root->emit('\OC\Files', 'preWrite', array($nonExisting));
@@ -321,15 +321,8 @@ class Folder extends Node implements \OCP\Files\Folder {
return $this->view->free_space($this->path);
}
- /**
- * @return bool
- */
- public function isCreatable() {
- return $this->checkPermissions(\OCP\PERMISSION_CREATE);
- }
-
public function delete() {
- if ($this->checkPermissions(\OCP\PERMISSION_DELETE)) {
+ if ($this->checkPermissions(\OCP\Constants::PERMISSION_DELETE)) {
$this->sendHooks(array('preDelete'));
$this->view->rmdir($this->path);
$nonExisting = new NonExistingFolder($this->root, $this->view, $this->path);
diff --git a/lib/private/files/node/node.php b/lib/private/files/node/node.php
index bc075911749..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
*/
@@ -81,10 +93,16 @@ class Node implements \OCP\Files\Node {
* @throws \OCP\Files\NotPermittedException
*/
public function touch($mtime = null) {
- if ($this->checkPermissions(\OCP\PERMISSION_UPDATE)) {
+ if ($this->checkPermissions(\OCP\Constants::PERMISSION_UPDATE)) {
$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\PERMISSION_READ);
+ return $this->getFileInfo()->isReadable();
}
/**
* @return bool
*/
public function isUpdateable() {
- return $this->checkPermissions(\OCP\PERMISSION_UPDATE);
+ return $this->getFileInfo()->isUpdateable();
}
/**
* @return bool
*/
public function isDeletable() {
- return $this->checkPermissions(\OCP\PERMISSION_DELETE);
+ return $this->getFileInfo()->isDeletable();
}
/**
* @return bool
*/
public function isShareable() {
- return $this->checkPermissions(\OCP\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/node/root.php b/lib/private/files/node/root.php
index 18e7a6b681a..1e8387dc5cb 100644
--- a/lib/private/files/node/root.php
+++ b/lib/private/files/node/root.php
@@ -262,7 +262,7 @@ class Root extends Folder implements Emitter {
* @return int
*/
public function getPermissions() {
- return \OCP\PERMISSION_CREATE;
+ return \OCP\Constants::PERMISSION_CREATE;
}
/**
diff --git a/lib/private/files/objectstore/objectstorestorage.php b/lib/private/files/objectstore/objectstorestorage.php
index ae8bff52896..b0095ad94bb 100644
--- a/lib/private/files/objectstore/objectstorestorage.php
+++ b/lib/private/files/objectstore/objectstorestorage.php
@@ -72,7 +72,7 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common {
'size' => 0,
'mtime' => $mTime,
'storage_mtime' => $mTime,
- 'permissions' => \OCP\PERMISSION_ALL,
+ 'permissions' => \OCP\Constants::PERMISSION_ALL,
);
if ($dirName === '' && !$parentExists) {
@@ -332,7 +332,7 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common {
'size' => 0,
'mtime' => $mtime,
'storage_mtime' => $mtime,
- 'permissions' => \OCP\PERMISSION_ALL,
+ 'permissions' => \OCP\Constants::PERMISSION_ALL,
);
$fileId = $this->getCache()->put($path, $stat);
try {
@@ -357,7 +357,7 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common {
if (empty($stat)) {
// create new file
$stat = array(
- 'permissions' => \OCP\PERMISSION_ALL,
+ 'permissions' => \OCP\Constants::PERMISSION_ALL,
);
}
// update stat with new data
diff --git a/lib/private/files/storage/common.php b/lib/private/files/storage/common.php
index 518d3ec400c..d76c6aa031b 100644
--- a/lib/private/files/storage/common.php
+++ b/lib/private/files/storage/common.php
@@ -113,19 +113,19 @@ abstract class Common implements \OC\Files\Storage\Storage {
public function getPermissions($path) {
$permissions = 0;
if ($this->isCreatable($path)) {
- $permissions |= \OCP\PERMISSION_CREATE;
+ $permissions |= \OCP\Constants::PERMISSION_CREATE;
}
if ($this->isReadable($path)) {
- $permissions |= \OCP\PERMISSION_READ;
+ $permissions |= \OCP\Constants::PERMISSION_READ;
}
if ($this->isUpdatable($path)) {
- $permissions |= \OCP\PERMISSION_UPDATE;
+ $permissions |= \OCP\Constants::PERMISSION_UPDATE;
}
if ($this->isDeletable($path)) {
- $permissions |= \OCP\PERMISSION_DELETE;
+ $permissions |= \OCP\Constants::PERMISSION_DELETE;
}
if ($this->isSharable($path)) {
- $permissions |= \OCP\PERMISSION_SHARE;
+ $permissions |= \OCP\Constants::PERMISSION_SHARE;
}
return $permissions;
}
diff --git a/lib/private/files/storage/dav.php b/lib/private/files/storage/dav.php
index 26fa69408a8..a2832bce009 100644
--- a/lib/private/files/storage/dav.php
+++ b/lib/private/files/storage/dav.php
@@ -416,19 +416,19 @@ class DAV extends \OC\Files\Storage\Common {
}
public function isUpdatable($path) {
- return (bool)($this->getPermissions($path) & \OCP\PERMISSION_UPDATE);
+ return (bool)($this->getPermissions($path) & \OCP\Constants::PERMISSION_UPDATE);
}
public function isCreatable($path) {
- return (bool)($this->getPermissions($path) & \OCP\PERMISSION_CREATE);
+ return (bool)($this->getPermissions($path) & \OCP\Constants::PERMISSION_CREATE);
}
public function isSharable($path) {
- return (bool)($this->getPermissions($path) & \OCP\PERMISSION_SHARE);
+ return (bool)($this->getPermissions($path) & \OCP\Constants::PERMISSION_SHARE);
}
public function isDeletable($path) {
- return (bool)($this->getPermissions($path) & \OCP\PERMISSION_DELETE);
+ return (bool)($this->getPermissions($path) & \OCP\Constants::PERMISSION_DELETE);
}
public function getPermissions($path) {
@@ -438,9 +438,9 @@ class DAV extends \OC\Files\Storage\Common {
if (isset($response['{http://owncloud.org/ns}permissions'])) {
return $this->parsePermissions($response['{http://owncloud.org/ns}permissions']);
} else if ($this->is_dir($path)) {
- return \OCP\PERMISSION_ALL;
+ return \OCP\Constants::PERMISSION_ALL;
} else if ($this->file_exists($path)) {
- return \OCP\PERMISSION_ALL - \OCP\PERMISSION_CREATE;
+ return \OCP\Constants::PERMISSION_ALL - \OCP\Constants::PERMISSION_CREATE;
} else {
return 0;
}
@@ -451,19 +451,19 @@ class DAV extends \OC\Files\Storage\Common {
* @return int
*/
protected function parsePermissions($permissionsString) {
- $permissions = \OCP\PERMISSION_READ;
+ $permissions = \OCP\Constants::PERMISSION_READ;
if (strpos($permissionsString, 'R') !== false) {
- $permissions |= \OCP\PERMISSION_SHARE;
+ $permissions |= \OCP\Constants::PERMISSION_SHARE;
}
if (strpos($permissionsString, 'D') !== false) {
- $permissions |= \OCP\PERMISSION_DELETE;
+ $permissions |= \OCP\Constants::PERMISSION_DELETE;
}
if (strpos($permissionsString, 'W') !== false) {
- $permissions |= \OCP\PERMISSION_UPDATE;
+ $permissions |= \OCP\Constants::PERMISSION_UPDATE;
}
if (strpos($permissionsString, 'CK') !== false) {
- $permissions |= \OCP\PERMISSION_CREATE;
- $permissions |= \OCP\PERMISSION_UPDATE;
+ $permissions |= \OCP\Constants::PERMISSION_CREATE;
+ $permissions |= \OCP\Constants::PERMISSION_UPDATE;
}
return $permissions;
}
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 0a21d2938b7..8f813f973b9 100644
--- a/lib/private/files/storage/mappedlocal.php
+++ b/lib/private/files/storage/mappedlocal.php
@@ -24,9 +24,6 @@ class MappedLocal extends \OC\Files\Storage\Common {
}
public function __destruct() {
- if (defined('PHPUNIT_RUN')) {
- $this->mapper->removePath($this->datadir, true, true);
- }
}
public function getId() {
@@ -34,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) {
@@ -43,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
);
/**
@@ -67,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;
@@ -78,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);
@@ -104,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);
@@ -123,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;
}
@@ -134,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);
@@ -143,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) {
@@ -211,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);
@@ -240,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;
@@ -248,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);
}
/**
@@ -259,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;
@@ -291,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) {
@@ -303,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);
}
/**
@@ -315,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;
@@ -340,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/files/view.php b/lib/private/files/view.php
index 19676524a0e..331ab9ba6cd 100644
--- a/lib/private/files/view.php
+++ b/lib/private/files/view.php
@@ -933,7 +933,7 @@ class View {
}
if ($mount instanceof MoveableMount && $internalPath === '') {
- $data['permissions'] |= \OCP\PERMISSION_DELETE | \OCP\PERMISSION_UPDATE;
+ $data['permissions'] |= \OCP\Constants::PERMISSION_DELETE | \OCP\Constants::PERMISSION_UPDATE;
}
$data = \OC_FileProxy::runPostProxies('getFileInfo', $path, $data);
@@ -988,7 +988,7 @@ class View {
}
// if sharing was disabled for the user we remove the share permissions
if (\OCP\Util::isSharingDisabledForUser()) {
- $content['permissions'] = $content['permissions'] & ~\OCP\PERMISSION_SHARE;
+ $content['permissions'] = $content['permissions'] & ~\OCP\Constants::PERMISSION_SHARE;
}
$files[] = new FileInfo($path . '/' . $content['name'], $storage, $content['path'], $content);
}
@@ -1025,9 +1025,9 @@ class View {
// do not allow renaming/deleting the mount point if they are not shared files/folders
// for shared files/folders we use the permissions given by the owner
if ($mount instanceof MoveableMount) {
- $rootEntry['permissions'] = $permissions | \OCP\PERMISSION_UPDATE | \OCP\PERMISSION_DELETE;
+ $rootEntry['permissions'] = $permissions | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE;
} else {
- $rootEntry['permissions'] = $permissions & (\OCP\PERMISSION_ALL - (\OCP\PERMISSION_UPDATE | \OCP\PERMISSION_DELETE));
+ $rootEntry['permissions'] = $permissions & (\OCP\Constants::PERMISSION_ALL - (\OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE));
}
//remove any existing entry with the same name
@@ -1041,7 +1041,7 @@ class View {
// if sharing was disabled for the user we remove the share permissions
if (\OCP\Util::isSharingDisabledForUser()) {
- $content['permissions'] = $content['permissions'] & ~\OCP\PERMISSION_SHARE;
+ $content['permissions'] = $content['permissions'] & ~\OCP\Constants::PERMISSION_SHARE;
}
$files[] = new FileInfo($path . '/' . $rootEntry['name'], $subStorage, '', $rootEntry);
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/database.php b/lib/private/group/database.php
index 6bad55c8d5e..2069e99599f 100644
--- a/lib/private/group/database.php
+++ b/lib/private/group/database.php
@@ -220,7 +220,7 @@ class OC_Group_Database extends OC_Group_Backend {
* @param string $gid
* @param string $search
* @return int|false
- * @throws DatabaseException
+ * @throws \OC\DatabaseException
*/
public function countUsersInGroup($gid, $search = '') {
$stmt = OC_DB::prepare('SELECT COUNT(`uid`) AS `count` FROM `*PREFIX*group_user` WHERE `gid` = ? AND `uid` LIKE ?');
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 5b1d31bfc59..fb4ddfae3b7 100644
--- a/lib/private/helper.php
+++ b/lib/private/helper.php
@@ -58,12 +58,11 @@ class OC_Helper {
}
/**
- * @param $key
+ * @param string $key
* @return string url to the online documentation
*/
public static function linkToDocs($key) {
- $theme = new OC_Defaults();
- return $theme->buildDocLinkToKey($key);
+ return OC::$server->getURLGenerator()->linkToDocs($key);
}
/**
@@ -159,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',
@@ -873,6 +875,23 @@ class OC_Helper {
}
/**
+ * Try to find a program
+ * Note: currently windows is not supported
+ *
+ * @param string $program
+ * @return null|string
+ */
+ public static function findBinaryPath($program) {
+ if (!\OC_Util::runningOnWindows() && self::is_function_enabled('exec')) {
+ exec('command -v ' . escapeshellarg($program) . ' 2> /dev/null', $output, $returnCode);
+ if ($returnCode === 0 && count($output) > 0) {
+ return escapeshellcmd($output[0]);
+ }
+ }
+ return null;
+ }
+
+ /**
* Calculate the disc space for the given path
*
* @param string $path
@@ -957,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 cd1d8ce392f..60ed06ae352 100644
--- a/lib/private/installer.php
+++ b/lib/private/installer.php
@@ -558,8 +558,8 @@ class OC_Installer{
// is the code checker enabled?
if(OC_Config::getValue('appcodechecker', true)) {
// check if grep is installed
- $grep = exec('command -v grep');
- if($grep=='') {
+ $grep = \OC_Helper::findBinaryPath('grep');
+ if (!$grep) {
OC_Log::write('core',
'grep not installed. So checking the code of the app "'.$appname.'" was not possible',
OC_Log::ERROR);
@@ -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/l10n.php b/lib/private/l10n.php
index 6ec4e967c7f..bc4e53e975c 100644
--- a/lib/private/l10n.php
+++ b/lib/private/l10n.php
@@ -7,19 +7,9 @@
* @copyright 2012 Frank Karlitschek frank@owncloud.org
* @copyright 2013 Jakob Sack
*
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
*/
/**
@@ -30,6 +20,7 @@ class OC_L10N implements \OCP\IL10N {
* cache
*/
protected static $cache = array();
+ protected static $availableLanguages = array();
/**
* The best language
@@ -89,7 +80,8 @@ class OC_L10N implements \OCP\IL10N {
}
/**
- * @param string $transFile
+ * @param $transFile
+ * @param bool $mergeTranslations
* @return bool
*/
public function load($transFile, $mergeTranslations = false) {
@@ -141,8 +133,8 @@ class OC_L10N implements \OCP\IL10N {
// load the translations file
if($this->load($transFile)) {
//merge with translations from theme
- $theme = OC_Config::getValue( "theme" );
- if (!is_null($theme)) {
+ $theme = \OC::$server->getConfig()->getSystemValue('theme');
+ if (!empty($theme)) {
$transFile = OC::$SERVERROOT.'/themes/'.$theme.substr($transFile, strlen(OC::$SERVERROOT));
if (file_exists($transFile)) {
$this->load($transFile, true);
@@ -285,7 +277,8 @@ class OC_L10N implements \OCP\IL10N {
* Localization
* @param string $type Type of localization
* @param array|int|string $data parameters for this localization
- * @return String or false
+ * @param array $options
+ * @return string|false
*
* Returns the localized data.
*
@@ -393,8 +386,8 @@ class OC_L10N implements \OCP\IL10N {
return self::$language;
}
- if(OC_User::getUser() && OC_Preferences::getValue(OC_User::getUser(), 'core', 'lang')) {
- $lang = OC_Preferences::getValue(OC_User::getUser(), 'core', 'lang');
+ if(OC_User::getUser() && \OC::$server->getConfig()->getUserValue(OC_User::getUser(), 'core', 'lang')) {
+ $lang = \OC::$server->getConfig()->getUserValue(OC_User::getUser(), 'core', 'lang');
self::$language = $lang;
if(is_array($app)) {
$available = $app;
@@ -407,7 +400,7 @@ class OC_L10N implements \OCP\IL10N {
}
}
- $default_language = OC_Config::getValue('default_language', false);
+ $default_language = \OC::$server->getConfig()->getSystemValue('default_language', false);
if($default_language !== false) {
return $default_language;
@@ -457,17 +450,17 @@ class OC_L10N implements \OCP\IL10N {
*/
protected static function findI18nDir($app) {
// find the i18n dir
- $i18ndir = OC::$SERVERROOT.'/core/l10n/';
+ $i18nDir = OC::$SERVERROOT.'/core/l10n/';
if($app != '') {
// Check if the app is in the app folder
if(file_exists(OC_App::getAppPath($app).'/l10n/')) {
- $i18ndir = OC_App::getAppPath($app).'/l10n/';
+ $i18nDir = OC_App::getAppPath($app).'/l10n/';
}
else{
- $i18ndir = OC::$SERVERROOT.'/'.$app.'/l10n/';
+ $i18nDir = OC::$SERVERROOT.'/'.$app.'/l10n/';
}
}
- return $i18ndir;
+ return $i18nDir;
}
/**
@@ -476,6 +469,9 @@ class OC_L10N implements \OCP\IL10N {
* @return array an array of available languages
*/
public static function findAvailableLanguages($app=null) {
+ if(!empty(self::$availableLanguages)) {
+ return self::$availableLanguages;
+ }
$available=array('en');//english is always available
$dir = self::findI18nDir($app);
if(is_dir($dir)) {
@@ -487,6 +483,8 @@ class OC_L10N implements \OCP\IL10N {
}
}
}
+
+ self::$availableLanguages = $available;
return $available;
}
@@ -496,7 +494,7 @@ class OC_L10N implements \OCP\IL10N {
* @return bool
*/
public static function languageExists($app, $lang) {
- if ($lang == 'en') {//english is always available
+ if ($lang === 'en') {//english is always available
return true;
}
$dir = self::findI18nDir($app);
diff --git a/lib/private/legacy/config.php b/lib/private/legacy/config.php
index 13ff0dbe040..7b711204256 100644
--- a/lib/private/legacy/config.php
+++ b/lib/private/legacy/config.php
@@ -23,14 +23,6 @@ class OC_Config {
public static $object;
/**
- * Returns the config instance
- * @return \OC\Config
- */
- public static function getObject() {
- return self::$object;
- }
-
- /**
* Lists all available config keys
* @return array an array of key names
*
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/migrate.php b/lib/private/migrate.php
deleted file mode 100644
index 8351155aa55..00000000000
--- a/lib/private/migrate.php
+++ /dev/null
@@ -1,626 +0,0 @@
-<?php
-/**
- * ownCloud
- *
- * @author Tom Needham
- * @copyright 2012 Tom Needham tom@owncloud.com
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-
-/**
- * provides an interface to migrate users and whole ownclouds
- */
-class OC_Migrate{
-
-
- // Array of OC_Migration_Provider objects
- static private $providers=array();
- // User id of the user to import/export
- static private $uid=false;
- // Holds the ZipArchive object
- static private $zip=false;
- // Stores the type of export
- static private $exporttype=false;
- // Holds the db object
- static private $migration_database=false;
- // Path to the sqlite db
- static private $dbpath=false;
- // Holds the path to the zip file
- static private $zippath=false;
- // Holds the OC_Migration_Content object
- static private $content=false;
-
- /**
- * register a new migration provider
- * @param OC_Migration_Provider $provider
- */
- public static function registerProvider($provider) {
- self::$providers[]=$provider;
- }
-
- /**
- * finds and loads the providers
- */
- static private function findProviders() {
- // Find the providers
- $apps = OC_App::getAllApps();
-
- foreach($apps as $app) {
- $path = OC_App::getAppPath($app) . '/appinfo/migrate.php';
- if( file_exists( $path ) ) {
- include_once $path;
- }
- }
- }
-
- /**
- * exports a user, or owncloud instance
- * @param string $uid user id of user to export if export type is user, defaults to current
- * @param string $type type of export, defualts to user
- * @param string $path path to zip output folder
- * @return string on error, path to zip on success
- */
- public static function export( $uid=null, $type='user', $path=null ) {
- $datadir = OC_Config::getValue( 'datadirectory' );
- // Validate export type
- $types = array( 'user', 'instance', 'system', 'userfiles' );
- if( !in_array( $type, $types ) ) {
- OC_Log::write( 'migration', 'Invalid export type', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
- }
- self::$exporttype = $type;
- // Userid?
- if( self::$exporttype == 'user' ) {
- // Check user exists
- self::$uid = is_null($uid) ? OC_User::getUser() : $uid;
- if(!OC_User::userExists(self::$uid)) {
- return json_encode( array( 'success' => false) );
- }
- }
- // Calculate zipname
- if( self::$exporttype == 'user' ) {
- $zipname = 'oc_export_' . self::$uid . '_' . date("y-m-d_H-i-s") . '.zip';
- } else {
- $zipname = 'oc_export_' . self::$exporttype . '_' . date("y-m-d_H-i-s") . '.zip';
- }
- // Calculate path
- if( self::$exporttype == 'user' ) {
- self::$zippath = $datadir . '/' . self::$uid . '/' . $zipname;
- } else {
- if( !is_null( $path ) ) {
- // Validate custom path
- if( !file_exists( $path ) || !is_writeable( $path ) ) {
- OC_Log::write( 'migration', 'Path supplied is invalid.', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
- }
- self::$zippath = $path . $zipname;
- } else {
- // Default path
- self::$zippath = get_temp_dir() . '/' . $zipname;
- }
- }
- // Create the zip object
- if( !self::createZip() ) {
- return json_encode( array( 'success' => false ) );
- }
- // Do the export
- self::findProviders();
- $exportdata = array();
- switch( self::$exporttype ) {
- case 'user':
- // Connect to the db
- self::$dbpath = $datadir . '/' . self::$uid . '/migration.db';
- if( !self::connectDB() ) {
- return json_encode( array( 'success' => false ) );
- }
- self::$content = new OC_Migration_Content( self::$zip, self::$migration_database );
- // Export the app info
- $exportdata = self::exportAppData();
- // Add the data dir to the zip
- self::$content->addDir(OC_User::getHome(self::$uid), true, '/' );
- break;
- case 'instance':
- self::$content = new OC_Migration_Content( self::$zip );
- // Creates a zip that is compatable with the import function
- $dbfile = tempnam( get_temp_dir(), "owncloud_export_data_" );
- OC_DB::getDbStructure( $dbfile, 'MDB2_SCHEMA_DUMP_ALL');
-
- // Now add in *dbname* and *dbprefix*
- $dbexport = file_get_contents( $dbfile );
- $dbnamestring = "<database>\n\n <name>" . OC_Config::getValue( "dbname", "owncloud" );
- $dbtableprefixstring = "<table>\n\n <name>" . OC_Config::getValue( "dbtableprefix", "oc_" );
- $dbexport = str_replace( $dbnamestring, "<database>\n\n <name>*dbname*", $dbexport );
- $dbexport = str_replace( $dbtableprefixstring, "<table>\n\n <name>*dbprefix*", $dbexport );
- // Add the export to the zip
- self::$content->addFromString( $dbexport, "dbexport.xml" );
- // Add user data
- foreach(OC_User::getUsers() as $user) {
- self::$content->addDir(OC_User::getHome($user), true, "/userdata/" );
- }
- break;
- case 'userfiles':
- self::$content = new OC_Migration_Content( self::$zip );
- // Creates a zip with all of the users files
- foreach(OC_User::getUsers() as $user) {
- self::$content->addDir(OC_User::getHome($user), true, "/" );
- }
- break;
- case 'system':
- self::$content = new OC_Migration_Content( self::$zip );
- // Creates a zip with the owncloud system files
- self::$content->addDir( OC::$SERVERROOT . '/', false, '/');
- foreach (array(
- ".git",
- "3rdparty",
- "apps",
- "core",
- "files",
- "l10n",
- "lib",
- "ocs",
- "search",
- "settings",
- "tests"
- ) as $dir) {
- self::$content->addDir( OC::$SERVERROOT . '/' . $dir, true, "/");
- }
- break;
- }
- if( !$info = self::getExportInfo( $exportdata ) ) {
- return json_encode( array( 'success' => false ) );
- }
- // Add the export info json to the export zip
- self::$content->addFromString( $info, 'export_info.json' );
- if( !self::$content->finish() ) {
- return json_encode( array( 'success' => false ) );
- }
- return json_encode( array( 'success' => true, 'data' => self::$zippath ) );
- }
-
- /**
- * imports a user, or owncloud instance
- * @param string $path path to zip
- * @param string $type type of import (user or instance)
- * @param string|null|int $uid userid of new user
- * @return string
- */
- public static function import( $path, $type='user', $uid=null ) {
-
- $datadir = OC_Config::getValue( 'datadirectory' );
- // Extract the zip
- if( !$extractpath = self::extractZip( $path ) ) {
- return json_encode( array( 'success' => false ) );
- }
- // Get export_info.json
- $scan = scandir( $extractpath );
- // Check for export_info.json
- if( !in_array( 'export_info.json', $scan ) ) {
- OC_Log::write( 'migration', 'Invalid import file, export_info.json not found', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
- }
- $json = json_decode( file_get_contents( $extractpath . 'export_info.json' ) );
- if( $json->exporttype != $type ) {
- OC_Log::write( 'migration', 'Invalid import file', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
- }
- self::$exporttype = $type;
-
- $currentuser = OC_User::getUser();
-
- // Have we got a user if type is user
- if( self::$exporttype == 'user' ) {
- self::$uid = !is_null($uid) ? $uid : $currentuser;
- }
-
- // We need to be an admin if we are not importing our own data
- if(($type == 'user' && self::$uid != $currentuser) || $type != 'user' ) {
- if( !OC_User::isAdminUser($currentuser)) {
- // Naughty.
- OC_Log::write( 'migration', 'Import not permitted.', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
- }
- }
-
- // Handle export types
- switch( self::$exporttype ) {
- case 'user':
- // Check user availability
- if( !OC_User::userExists( self::$uid ) ) {
- OC_Log::write( 'migration', 'User doesn\'t exist', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
- }
-
- // Check if the username is valid
- if( preg_match( '/[^a-zA-Z0-9 _\.@\-]/', $json->exporteduser )) {
- OC_Log::write( 'migration', 'Username is not valid', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
- }
-
- // Copy data
- $userfolder = $extractpath . $json->exporteduser;
- $newuserfolder = $datadir . '/' . self::$uid;
- foreach(scandir($userfolder) as $file){
- if($file !== '.' && $file !== '..' && is_dir($userfolder.'/'.$file)) {
- $file = str_replace(array('/', '\\'), '', $file);
-
- // Then copy the folder over
- OC_Helper::copyr($userfolder.'/'.$file, $newuserfolder.'/'.$file);
- }
- }
- // Import user app data
- if(file_exists($extractpath . $json->exporteduser . '/migration.db')) {
- if( !$appsimported = self::importAppData( $extractpath . $json->exporteduser . '/migration.db',
- $json,
- self::$uid ) ) {
- return json_encode( array( 'success' => false ) );
- }
- }
- // All done!
- if( !self::unlink_r( $extractpath ) ) {
- OC_Log::write( 'migration', 'Failed to delete the extracted zip', OC_Log::ERROR );
- }
- return json_encode( array( 'success' => true, 'data' => $appsimported ) );
- break;
- case 'instance':
- /*
- * EXPERIMENTAL
- // Check for new data dir and dbexport before doing anything
- // TODO
-
- // Delete current data folder.
- OC_Log::write( 'migration', "Deleting current data dir", OC_Log::INFO );
- if( !self::unlink_r( $datadir, false ) ) {
- OC_Log::write( 'migration', 'Failed to delete the current data dir', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
- }
-
- // Copy over data
- if( !self::copy_r( $extractpath . 'userdata', $datadir ) ) {
- OC_Log::write( 'migration', 'Failed to copy over data directory', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
- }
-
- // Import the db
- if( !OC_DB::replaceDB( $extractpath . 'dbexport.xml' ) ) {
- return json_encode( array( 'success' => false ) );
- }
- // Done
- return json_encode( array( 'success' => true ) );
- */
- break;
- }
-
- }
-
- /**
- * recursively deletes a directory
- * @param string $dir path of dir to delete
- * @param bool $deleteRootToo delete the root directory
- * @return bool
- */
- private static function unlink_r( $dir, $deleteRootToo=true ) {
- if( !$dh = @opendir( $dir ) ) {
- return false;
- }
- while (false !== ($obj = readdir($dh))) {
- if($obj == '.' || $obj == '..') {
- continue;
- }
- if (!@unlink($dir . '/' . $obj)) {
- self::unlink_r($dir.'/'.$obj, true);
- }
- }
- closedir($dh);
- if ( $deleteRootToo ) {
- @rmdir($dir);
- }
- return true;
- }
-
- /**
- * tries to extract the import zip
- * @param string $path path to the zip
- * @return string path to extract location (with a trailing slash) or false on failure
- */
- static private function extractZip( $path ) {
- self::$zip = new ZipArchive;
- // Validate path
- if( !file_exists( $path ) ) {
- OC_Log::write( 'migration', 'Zip not found', OC_Log::ERROR );
- return false;
- }
- if ( self::$zip->open( $path ) != true ) {
- OC_Log::write( 'migration', "Failed to open zip file", OC_Log::ERROR );
- return false;
- }
- $to = get_temp_dir() . '/oc_import_' . self::$exporttype . '_' . date("y-m-d_H-i-s") . '/';
- if( !self::$zip->extractTo( $to ) ) {
- return false;
- }
- self::$zip->close();
- return $to;
- }
-
- /**
- * creates a migration.db in the users data dir with their app data in
- * @return bool whether operation was successfull
- */
- private static function exportAppData( ) {
-
- $success = true;
- $return = array();
-
- // Foreach provider
- foreach( self::$providers as $provider ) {
- // Check if the app is enabled
- if( OC_App::isEnabled( $provider->getID() ) ) {
- $success = true;
- // Does this app use the database?
- if( file_exists( OC_App::getAppPath($provider->getID()).'/appinfo/database.xml' ) ) {
- // Create some app tables
- $tables = self::createAppTables( $provider->getID() );
- if( is_array( $tables ) ) {
- // Save the table names
- foreach($tables as $table) {
- $return['apps'][$provider->getID()]['tables'][] = $table;
- }
- } else {
- // It failed to create the tables
- $success = false;
- }
- }
-
- // Run the export function?
- if( $success ) {
- // Set the provider properties
- $provider->setData( self::$uid, self::$content );
- $return['apps'][$provider->getID()]['success'] = $provider->export();
- } else {
- $return['apps'][$provider->getID()]['success'] = false;
- $return['apps'][$provider->getID()]['message'] = 'failed to create the app tables';
- }
-
- // Now add some app info the the return array
- $appinfo = OC_App::getAppInfo( $provider->getID() );
- $return['apps'][$provider->getID()]['version'] = OC_App::getAppVersion($provider->getID());
- }
- }
-
- return $return;
-
- }
-
-
- /**
- * generates json containing export info, and merges any data supplied
- * @param array $array of data to include in the returned json
- * @return string
- */
- static private function getExportInfo( $array=array() ) {
- $info = array(
- 'ocversion' => OC_Util::getVersion(),
- 'exporttime' => time(),
- 'exportedby' => OC_User::getUser(),
- 'exporttype' => self::$exporttype,
- 'exporteduser' => self::$uid
- );
-
- if( !is_array( $array ) ) {
- OC_Log::write( 'migration', 'Supplied $array was not an array in getExportInfo()', OC_Log::ERROR );
- }
- // Merge in other data
- $info = array_merge( $info, (array)$array );
- // Create json
- $json = json_encode( $info );
- return $json;
- }
-
- /**
- * connects to migration.db, or creates if not found
- * @param string $path to migration.db, defaults to user data dir
- * @return bool whether the operation was successful
- */
- static private function connectDB( $path=null ) {
- // Has the dbpath been set?
- self::$dbpath = !is_null( $path ) ? $path : self::$dbpath;
- if( !self::$dbpath ) {
- OC_Log::write( 'migration', 'connectDB() was called without dbpath being set', OC_Log::ERROR );
- return false;
- }
- // Already connected
- if(!self::$migration_database) {
- $datadir = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" );
- $connectionParams = array(
- 'path' => self::$dbpath,
- 'driver' => 'pdo_sqlite',
- );
- $connectionParams['adapter'] = '\OC\DB\AdapterSqlite';
- $connectionParams['wrapperClass'] = 'OC\DB\Connection';
- $connectionParams['tablePrefix'] = '';
-
- // Try to establish connection
- self::$migration_database = \Doctrine\DBAL\DriverManager::getConnection($connectionParams);
- }
- return true;
-
- }
-
- /**
- * creates the tables in migration.db from an apps database.xml
- * @param string $appid id of the app
- * @return bool whether the operation was successful
- */
- static private function createAppTables( $appid ) {
- $schema_manager = new OC\DB\MDB2SchemaManager(self::$migration_database);
-
- // There is a database.xml file
- $content = file_get_contents(OC_App::getAppPath($appid) . '/appinfo/database.xml' );
-
- $file2 = 'static://db_scheme';
- // TODO get the relative path to migration.db from the data dir
- // For now just cheat
- $path = pathinfo( self::$dbpath );
- $content = str_replace( '*dbname*', self::$uid.'/migration', $content );
- $content = str_replace( '*dbprefix*', '', $content );
-
- $xml = new SimpleXMLElement($content);
- foreach($xml->table as $table) {
- $tables[] = (string)$table->name;
- }
-
- file_put_contents( $file2, $content );
-
- // Try to create tables
- try {
- $schema_manager->createDbFromStructure($file2);
- } catch(Exception $e) {
- unlink( $file2 );
- OC_Log::write( 'migration', 'Failed to create tables for: '.$appid, OC_Log::FATAL );
- OC_Log::write( 'migration', $e->getMessage(), OC_Log::FATAL );
- return false;
- }
-
- return $tables;
- }
-
- /**
- * tries to create the zip
- * @return bool
- */
- static private function createZip() {
- self::$zip = new ZipArchive;
- // Check if properties are set
- if( !self::$zippath ) {
- OC_Log::write('migration', 'createZip() called but $zip and/or $zippath have not been set', OC_Log::ERROR);
- return false;
- }
- if ( self::$zip->open( self::$zippath, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE ) !== true ) {
- OC_Log::write('migration',
- 'Failed to create the zip with error: '.self::$zip->getStatusString(),
- OC_Log::ERROR);
- return false;
- } else {
- return true;
- }
- }
-
- /**
- * returns an array of apps that support migration
- * @return array
- */
- static public function getApps() {
- $allapps = OC_App::getAllApps();
- foreach($allapps as $app) {
- $path = self::getAppPath($app) . '/lib/migrate.php';
- if( file_exists( $path ) ) {
- $supportsmigration[] = $app;
- }
- }
- return $supportsmigration;
- }
-
- /**
- * imports a new user
- * @param string $db string path to migration.db
- * @param object $info object of migration info
- * @param string|null|int $uid uid to use
- * @return array an array of apps with import statuses, or false on failure.
- */
- public static function importAppData( $db, $info, $uid=null ) {
- // Check if the db exists
- if( file_exists( $db ) ) {
- // Connect to the db
- if(!self::connectDB( $db )) {
- OC_Log::write('migration', 'Failed to connect to migration.db', OC_Log::ERROR);
- return false;
- }
- } else {
- OC_Log::write('migration', 'Migration.db not found at: '.$db, OC_Log::FATAL );
- return false;
- }
-
- // Find providers
- self::findProviders();
-
- // Generate importinfo array
- $importinfo = array(
- 'olduid' => $info->exporteduser,
- 'newuid' => self::$uid
- );
-
- foreach( self::$providers as $provider) {
- // Is the app in the export?
- $id = $provider->getID();
- if( isset( $info->apps->$id ) ) {
- // Is the app installed
- if( !OC_App::isEnabled( $id ) ) {
- OC_Log::write( 'migration',
- 'App: ' . $id . ' is not installed, can\'t import data.',
- OC_Log::INFO );
- $appsstatus[$id] = 'notsupported';
- } else {
- // Did it succeed on export?
- if( $info->apps->$id->success ) {
- // Give the provider the content object
- if( !self::connectDB( $db ) ) {
- return false;
- }
- $content = new OC_Migration_Content( self::$zip, self::$migration_database );
- $provider->setData( self::$uid, $content, $info );
- // Then do the import
- if( !$appsstatus[$id] = $provider->import( $info->apps->$id, $importinfo ) ) {
- // Failed to import app
- OC_Log::write( 'migration',
- 'Failed to import app data for user: ' . self::$uid . ' for app: ' . $id,
- OC_Log::ERROR );
- }
- } else {
- // Add to failed list
- $appsstatus[$id] = false;
- }
- }
- }
- }
-
- return $appsstatus;
-
- }
-
- /**
- * creates a new user in the database
- * @param string $uid user_id of the user to be created
- * @param string $hash hash of the user to be created
- * @return bool result of user creation
- */
- public static function createUser( $uid, $hash ) {
-
- // Check if userid exists
- if(OC_User::userExists( $uid )) {
- return false;
- }
-
- // Create the user
- $query = OC_DB::prepare( "INSERT INTO `*PREFIX*users` ( `uid`, `password` ) VALUES( ?, ? )" );
- $result = $query->execute( array( $uid, $hash));
- if( !$result ) {
- OC_Log::write('migration', 'Failed to create the new user "'.$uid."", OC_Log::ERROR);
- }
- return $result ? true : false;
-
- }
-
-}
diff --git a/lib/private/migration/content.php b/lib/private/migration/content.php
deleted file mode 100644
index cb5d9ad1472..00000000000
--- a/lib/private/migration/content.php
+++ /dev/null
@@ -1,246 +0,0 @@
-<?php
-/**
- * ownCloud
- *
- * @author Tom Needham
- * @copyright 2012 Tom Needham tom@owncloud.com
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-
-/**
- * provides methods to add and access data from the migration
- */
-class OC_Migration_Content{
-
- private $zip=false;
- // Holds the database object
- private $db=null;
- // Holds an array of tmpfiles to delete after zip creation
- private $tmpfiles=array();
-
- /**
- * sets up the
- * @param ZipArchive $zip ZipArchive object
- * @param object $db a database object (required for exporttype user)
- * @return bool|null
- */
- public function __construct( $zip, $db=null ) {
-
- $this->zip = $zip;
- $this->db = $db;
-
- }
-
- /**
- * prepares the db
- * @param string $query the sql query to prepare
- */
- public function prepare( $query ) {
-
- // Only add database to tmpfiles if actually used
- if( !is_null( $this->db ) ) {
- // Get db path
- $db = $this->db->getDatabase();
- if(!in_array($db, $this->tmpfiles)) {
- $this->tmpfiles[] = $db;
- }
- }
-
- // Optimize the query
- $query = $this->processQuery( $query );
-
- // Optimize the query
- $query = $this->db->prepare( $query );
- $query = new OC_DB_StatementWrapper($query, false);
-
- return $query;
- }
-
- /**
- * processes the db query
- * @param string $query the query to process
- * @return string of processed query
- */
- private function processQuery( $query ) {
- $query = str_replace( '`', '\'', $query );
- $query = str_replace( 'NOW()', 'datetime(\'now\')', $query );
- $query = str_replace( 'now()', 'datetime(\'now\')', $query );
- // remove table prefixes
- $query = str_replace( '*PREFIX*', '', $query );
- return $query;
- }
-
- /**
- * copys rows to migration.db from the main database
- * @param array $options array of options.
- * @return bool
- */
- public function copyRows( $options ) {
- if( !array_key_exists( 'table', $options ) ) {
- return false;
- }
-
- $return = array();
-
- // Need to include 'where' in the query?
- if( array_key_exists( 'matchval', $options ) && array_key_exists( 'matchcol', $options ) ) {
-
- // If only one matchval, create an array
- if(!is_array($options['matchval'])) {
- $options['matchval'] = array( $options['matchval'] );
- }
-
- foreach( $options['matchval'] as $matchval ) {
- // Run the query for this match value (where x = y value)
- $sql = 'SELECT * FROM `*PREFIX*' . $options['table'] . '` WHERE `' . $options['matchcol'] . '` = ?';
- $query = OC_DB::prepare( $sql );
- $results = $query->execute( array( $matchval ) );
- $newreturns = $this->insertData( $results, $options );
- $return = array_merge( $return, $newreturns );
- }
-
- } else {
- // Just get everything
- $sql = 'SELECT * FROM `*PREFIX*' . $options['table'] . '`';
- $query = OC_DB::prepare( $sql );
- $results = $query->execute();
- $return = $this->insertData( $results, $options );
-
- }
-
- return $return;
-
- }
-
- /**
- * saves a sql data set into migration.db
- * @param OC_DB_StatementWrapper $data a sql data set returned from self::prepare()->query()
- * @param array $options array of copyRows options
- * @return void
- */
- private function insertData( $data, $options ) {
- $return = array();
- // Foreach row of data to insert
- while( $row = $data->fetchRow() ) {
- // Now save all this to the migration.db
- foreach($row as $field=>$value) {
- $fields[] = $field;
- $values[] = $value;
- }
-
- // Generate some sql
- $sql = "INSERT INTO `" . $options['table'] . '` ( `';
- $fieldssql = implode( '`, `', $fields );
- $sql .= $fieldssql . "` ) VALUES( ";
- $valuessql = substr( str_repeat( '?, ', count( $fields ) ), 0, -2 );
- $sql .= $valuessql . " )";
- // Make the query
- $query = $this->prepare( $sql );
- $query->execute( $values );
- // Do we need to return some values?
- if( array_key_exists( 'idcol', $options ) ) {
- // Yes we do
- $return[] = $row[$options['idcol']];
- } else {
- // Take a guess and return the first field :)
- $return[] = reset($row);
- }
- $fields = '';
- $values = '';
- }
- return $return;
- }
-
- /**
- * adds a directory to the zip object
- * @param boolean|string $dir string path of the directory to add
- * @param bool $recursive
- * @param string $internaldir path of folder to add dir to in zip
- * @return bool
- */
- public function addDir( $dir, $recursive=true, $internaldir='' ) {
- $dirname = basename($dir);
- $this->zip->addEmptyDir($internaldir . $dirname);
- $internaldir.=$dirname.='/';
- if( !file_exists( $dir ) ) {
- return false;
- }
- $dirhandle = opendir($dir);
- if(is_resource($dirhandle)) {
- while (false !== ( $file = readdir($dirhandle))) {
-
- if (( $file != '.' ) && ( $file != '..' )) {
-
- if (is_dir($dir . '/' . $file) && $recursive) {
- $this->addDir($dir . '/' . $file, $recursive, $internaldir);
- } elseif (is_file($dir . '/' . $file)) {
- $this->zip->addFile($dir . '/' . $file, $internaldir . $file);
- }
- }
- }
- closedir($dirhandle);
- } else {
- OC_Log::write('admin_export', "Was not able to open directory: " . $dir, OC_Log::ERROR);
- return false;
- }
- return true;
- }
-
- /**
- * adds a file to the zip from a given string
- * @param string $data string of data to add
- * @param string $path the relative path inside of the zip to save the file to
- * @return bool
- */
- public function addFromString( $data, $path ) {
- // Create a temp file
- $file = tempnam( get_temp_dir(). '/', 'oc_export_tmp_' );
- $this->tmpfiles[] = $file;
- if( !file_put_contents( $file, $data ) ) {
- OC_Log::write( 'migation', 'Failed to save data to a temporary file', OC_Log::ERROR );
- return false;
- }
- // Add file to the zip
- $this->zip->addFile( $file, $path );
- return true;
- }
-
- /**
- * closes the zip, removes temp files
- * @return bool
- */
- public function finish() {
- if( !$this->zip->close() ) {
- OC_Log::write( 'migration',
- 'Failed to write the zip file with error: '.$this->zip->getStatusString(),
- OC_Log::ERROR );
- return false;
- }
- $this->cleanup();
- return true;
- }
-
- /**
- * cleans up after the zip
- */
- private function cleanup() {
- // Delete tmp files
- foreach($this->tmpfiles as $i) {
- unlink( $i );
- }
- }
-}
diff --git a/lib/private/migration/provider.php b/lib/private/migration/provider.php
deleted file mode 100644
index a7c611dcdd4..00000000000
--- a/lib/private/migration/provider.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-/**
- * provides search functionalty
- */
-abstract class OC_Migration_Provider{
-
- protected $id=false;
- protected $content=false;
- protected $uid=false;
- protected $olduid=false;
- protected $appinfo=false;
-
- public function __construct( $appid ) {
- // Set the id
- $this->id = $appid;
- OC_Migrate::registerProvider( $this );
- }
-
- /**
- * exports data for apps
- * @return array appdata to be exported
- */
- abstract function export( );
-
- /**
- * imports data for the app
- * @return void
- */
- abstract function import( );
-
- /**
- * sets the OC_Migration_Content object to $this->content
- * @param OC_Migration_Content $content a OC_Migration_Content object
- */
- public function setData( $uid, $content, $info=null ) {
- $this->content = $content;
- $this->uid = $uid;
- $id = $this->id;
- if( !is_null( $info ) ) {
- $this->olduid = $info->exporteduser;
- $this->appinfo = $info->apps->$id;
- }
- }
-
- /**
- * returns the appid of the provider
- * @return string
- */
- public function getID() {
- return $this->id;
- }
-}
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 dbbe173bf80..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/movies.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';
@@ -48,6 +40,7 @@ class Preview {
//filemapper used for deleting previews
// index is path, value is fileinfo
static public $deleteFileMapper = array();
+ static public $deleteChildrenMapper = array();
/**
* preview images object
@@ -105,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');
}
@@ -189,6 +182,21 @@ class Preview {
return $this->info;
}
+
+ /**
+ * @return array|null
+ */
+ private function getChildren() {
+ $absPath = $this->fileView->getAbsolutePath($this->file);
+ $absPath = Files\Filesystem::normalizePath($absPath);
+
+ if (array_key_exists($absPath, self::$deleteChildrenMapper)) {
+ return self::$deleteChildrenMapper[$absPath];
+ }
+
+ return null;
+ }
+
/**
* set the path of the file you want a thumbnail from
* @param string $file
@@ -269,6 +277,10 @@ class Preview {
return $this;
}
+ /**
+ * @param bool $keepAspect
+ * @return $this
+ */
public function setKeepAspect($keepAspect) {
$this->keepAspect = $keepAspect;
return $this;
@@ -312,20 +324,25 @@ class Preview {
/**
* deletes all previews of a file
- * @return bool
*/
public function deleteAllPreviews() {
$file = $this->getFile();
$fileInfo = $this->getFileInfo($file);
- if($fileInfo !== null && $fileInfo !== false) {
- $fileId = $fileInfo->getId();
- $previewPath = $this->getPreviewPath($fileId);
- $this->userView->deleteAll($previewPath);
- return $this->userView->rmdir($previewPath);
+ $toDelete = $this->getChildren();
+ $toDelete[] = $fileInfo;
+
+ foreach ($toDelete as $delete) {
+ if ($delete !== null && $delete !== false) {
+ /** @var \OCP\Files\FileInfo $delete */
+ $fileId = $delete->getId();
+
+ $previewPath = $this->getPreviewPath($fileId);
+ $this->userView->deleteAll($previewPath);
+ $this->userView->rmdir($previewPath);
+ }
}
- return false;
}
/**
@@ -667,8 +684,8 @@ class Preview {
}
/**
- * Register a new preview provider to be used
- * @param $class
+ * register a new preview provider to be used
+ * @param string $class
* @param array $options
*/
public static function registerProvider($class, $options = array()) {
@@ -688,7 +705,7 @@ class Preview {
* - OC\Preview\OpenDocument
* - OC\Preview\StarOffice
* - OC\Preview\SVG
- * - OC\Preview\Movies
+ * - OC\Preview\Movie
* - OC\Preview\PDF
* - OC\Preview\TIFF
* - OC\Preview\Illustrator
@@ -719,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'];
@@ -734,17 +752,94 @@ 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');
+ }
+ }
}
+ /**
+ * @param array $args
+ */
public static function post_write($args) {
self::post_delete($args, 'files/');
}
+ /**
+ * @param array $args
+ */
public static function prepare_delete_files($args) {
self::prepare_delete($args, 'files/');
}
+ /**
+ * @param array $args
+ * @param string $prefix
+ */
public static function prepare_delete($args, $prefix='') {
$path = $args['path'];
if (substr($path, 0, 1) === '/') {
@@ -752,20 +847,63 @@ class Preview {
}
$view = new \OC\Files\View('/' . \OC_User::getUser() . '/' . $prefix);
- $info = $view->getFileInfo($path);
- \OC\Preview::$deleteFileMapper = array_merge(
- \OC\Preview::$deleteFileMapper,
- array(
- Files\Filesystem::normalizePath($view->getAbsolutePath($path)) => $info,
- )
- );
+ $absPath = Files\Filesystem::normalizePath($view->getAbsolutePath($path));
+ self::addPathToDeleteFileMapper($absPath, $view->getFileInfo($path));
+ if ($view->is_dir($path)) {
+ $children = self::getAllChildren($view, $path);
+ self::$deleteChildrenMapper[$absPath] = $children;
+ }
+ }
+
+ /**
+ * @param string $absolutePath
+ * @param \OCP\Files\FileInfo $info
+ */
+ private static function addPathToDeleteFileMapper($absolutePath, $info) {
+ self::$deleteFileMapper[$absolutePath] = $info;
+ }
+
+ /**
+ * @param \OC\Files\View $view
+ * @param string $path
+ * @return array
+ */
+ private static function getAllChildren($view, $path) {
+ $children = $view->getDirectoryContent($path);
+ $childrensFiles = array();
+
+ $fakeRootLength = strlen($view->getRoot());
+
+ for ($i = 0; $i < count($children); $i++) {
+ $child = $children[$i];
+
+ $childsPath = substr($child->getPath(), $fakeRootLength);
+
+ if ($view->is_dir($childsPath)) {
+ $children = array_merge(
+ $children,
+ $view->getDirectoryContent($childsPath)
+ );
+ } else {
+ $childrensFiles[] = $child;
+ }
+ }
+
+ return $childrensFiles;
}
+ /**
+ * @param array $args
+ */
public static function post_delete_files($args) {
self::post_delete($args, 'files/');
}
+ /**
+ * @param array $args
+ * @param string $prefix
+ */
public static function post_delete($args, $prefix='') {
$path = Files\Filesystem::normalizePath($args['path']);
@@ -814,16 +952,6 @@ class Preview {
self::initProviders();
}
- // FIXME: Ugly hack to prevent SVG of being returned if the SVG
- // provider is not enabled.
- // This is required because the preview system is designed in a
- // bad way and relies on opt-in with asterisks (i.e. image/*)
- // which will lead to the fact that a SVG will also match the image
- // provider.
- if($mimeType === 'image/svg+xml' && !array_key_exists('/image\/svg\+xml/', self::$providers)) {
- return false;
- }
-
foreach(self::$providers as $supportedMimetype => $provider) {
if(preg_match($supportedMimetype, $mimeType)) {
return true;
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 ec5b87befea..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\/.*/';
+ 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
new file mode 100644
index 00000000000..06353ddebb7
--- /dev/null
+++ b/lib/private/preview/movie.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * Copyright (c) 2013 Frank Karlitschek frank@owncloud.org
+ * 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 Movie extends Provider {
+ public static $avconvBinary;
+ public static $ffmpegBinary;
+
+ /**
+ * {@inheritDoc}
+ */
+ public function getMimeType() {
+ return '/video\/.*/';
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ 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());
+
+ if ($useFileDirectly) {
+ $absPath = $fileview->getLocalFile($path);
+ } else {
+ $absPath = \OC_Helper::tmpFile();
+
+ $handle = $fileview->fopen($path, 'rb');
+
+ // 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);
+ }
+
+ $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);
+ }
+ }
+
+ if (!$useFileDirectly) {
+ unlink($absPath);
+ }
+
+ return $result;
+ }
+
+ /**
+ * @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';
+ }
+
+ exec($cmd, $output, $returnCode);
+
+ 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/movies.php b/lib/private/preview/movies.php
deleted file mode 100644
index 2a23c2141c1..00000000000
--- a/lib/private/preview/movies.php
+++ /dev/null
@@ -1,122 +0,0 @@
-<?php
-/**
- * Copyright (c) 2013 Frank Karlitschek frank@owncloud.org
- * 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;
-
-function findBinaryPath($program) {
- exec('command -v ' . escapeshellarg($program) . ' 2> /dev/null', $output, $returnCode);
- if ($returnCode === 0 && count($output) > 0) {
- return escapeshellcmd($output[0]);
- }
- return null;
-}
-
-// movie preview is currently not supported on Windows
-if (!\OC_Util::runningOnWindows()) {
- $isExecEnabled = \OC_Helper::is_function_enabled('exec');
- $ffmpegBinary = null;
- $avconvBinary = null;
-
- if ($isExecEnabled) {
- $avconvBinary = findBinaryPath('avconv');
- if (!$avconvBinary) {
- $ffmpegBinary = findBinaryPath('ffmpeg');
- }
- }
-
- if($isExecEnabled && ( $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());
-
- if ($useFileDirectly) {
- $absPath = $fileview->getLocalFile($path);
- } else {
- $absPath = \OC_Helper::tmpFile();
-
- $handle = $fileview->fopen($path, 'rb');
-
- // 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);
- }
-
- $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);
- }
- }
-
- if (!$useFileDirectly) {
- unlink($absPath);
- }
-
- return $result;
- }
-
- /**
- * @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';
- }
-
- exec($cmd, $output, $returnCode);
-
- if ($returnCode === 0) {
- $image = new \OC_Image();
- $image->loadFromFile($tmpPath);
- unlink($tmpPath);
- return $image->valid() ? $image : false;
- }
- unlink($tmpPath);
- return false;
- }
- }
-
- // a bit hacky but didn't want to use subclasses
- Movie::$avconvBinary = $avconvBinary;
- Movie::$ffmpegBinary = $ffmpegBinary;
-
- \OC\Preview::registerProvider('OC\Preview\Movie');
- }
-}
-
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 42d2cbf34fc..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/repair.php b/lib/private/repair.php
index 081aeb32c66..be607b44ed8 100644
--- a/lib/private/repair.php
+++ b/lib/private/repair.php
@@ -93,14 +93,15 @@ class Repair extends BasicEmitter {
$steps = array(
new InnoDB(),
new Collation(\OC::$server->getConfig(), \OC_DB::getConnection()),
- new SearchLuceneTables()
+ new SearchLuceneTables(),
+ new RepairConfig()
);
//There is no need to delete all previews on every single update
//only 7.0.0 through 7.0.2 generated broken previews
$currentVersion = \OC::$server->getConfig()->getSystemValue('version');
if (version_compare($currentVersion, '7.0.0.0', '>=') &&
- version_compare($currentVersion, '7.0.2.2', '<=')) {
+ version_compare($currentVersion, '7.0.3.4', '<=')) {
$steps[] = new \OC\Repair\Preview();
}
diff --git a/lib/private/request.php b/lib/private/request.php
index 1cfa4a150c5..3c33dfc340a 100644
--- a/lib/private/request.php
+++ b/lib/private/request.php
@@ -12,8 +12,7 @@ class OC_Request {
// Android Chrome user agent: https://developers.google.com/chrome/mobile/docs/user-agent
const USER_AGENT_ANDROID_MOBILE_CHROME = '#Android.*Chrome/[.0-9]*#';
const USER_AGENT_FREEBOX = '#^Mozilla/5\.0$#';
-
- const REGEX_LOCALHOST = '/^(127\.0\.0\.1|localhost)(:[0-9]+|)$/';
+ const REGEX_LOCALHOST = '/^(127\.0\.0\.1|localhost)$/';
static protected $reqId;
/**
@@ -67,22 +66,50 @@ 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) {
- $trustedList = \OC_Config::getValue('trusted_domains', array());
+ public static function isTrustedDomain($domainWithPort) {
+ // Extract port from domain if needed
+ $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());
if (empty($trustedList)) {
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;
}
+
return in_array($domain, $trustedList);
}
diff --git a/lib/private/route/router.php b/lib/private/route/router.php
index 645d6141964..5d6f621dc38 100644
--- a/lib/private/route/router.php
+++ b/lib/private/route/router.php
@@ -243,7 +243,6 @@ class Router implements IRouter {
if (isset($parameters['action'])) {
$action = $parameters['action'];
if (!is_callable($action)) {
- var_dump($action);
throw new \Exception('not a callable action');
}
unset($parameters['action']);
diff --git a/lib/private/security/certificatemanager.php b/lib/private/security/certificatemanager.php
index cae9730eb26..a2a4c8b83d2 100644
--- a/lib/private/security/certificatemanager.php
+++ b/lib/private/security/certificatemanager.php
@@ -49,6 +49,7 @@ class CertificateManager implements ICertificateManager {
} catch(\Exception $e) {}
}
}
+ closedir($handle);
return $result;
}
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 f43613e8188..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;
}
@@ -205,7 +213,7 @@ class Server extends SimpleContainer implements IServerContainer {
$factory = new \OC\DB\ConnectionFactory();
$type = $c->getConfig()->getSystemValue('dbtype', 'sqlite');
if (!$factory->isValidType($type)) {
- throw new \DatabaseException('Invalid database type');
+ throw new \OC\DatabaseException('Invalid database type');
}
$connectionParams = $factory->createConnectionParams($c->getConfig());
$connection = $factory->getConnection($type, $connectionParams);
@@ -233,10 +241,15 @@ 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) {
+ $userSession = $c->getUserSession();
+ $appConfig = $c->getAppConfig();
+ $groupManager = $c->getGroupManager();
+ return new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ });
}
/**
@@ -616,4 +629,22 @@ class Server extends SimpleContainer implements IServerContainer {
function getTempManager() {
return $this->query('TempManager');
}
+
+ /**
+ * Get the app manager
+ *
+ * @return \OCP\App\IAppManager
+ */
+ 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 1125933c8e9..e5eb2bac194 100644
--- a/lib/private/setup.php
+++ b/lib/private/setup.php
@@ -8,9 +8,6 @@
use OCP\IConfig;
-class DatabaseSetupException extends \OC\HintException {
-}
-
class OC_Setup {
/** @var IConfig */
protected $config;
@@ -91,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.');
}
@@ -165,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()) {
@@ -195,7 +192,7 @@ class OC_Setup {
try {
$dbSetup->initialize($options);
$dbSetup->setupDatabase($username);
- } catch (DatabaseSetupException $e) {
+ } catch (\OC\DatabaseSetupException $e) {
$error[] = array(
'error' => $e->getMessage(),
'hint' => $e->getHint()
diff --git a/lib/private/setup/mssql.php b/lib/private/setup/mssql.php
index b8329f99079..5143545b76f 100644
--- a/lib/private/setup/mssql.php
+++ b/lib/private/setup/mssql.php
@@ -17,7 +17,7 @@ class MSSQL extends AbstractDatabase {
} else {
$entry = '';
}
- throw new \DatabaseSetupException($this->trans->t('MS SQL username and/or password not valid: %s', array($entry)),
+ throw new \OC\DatabaseSetupException($this->trans->t('MS SQL username and/or password not valid: %s', array($entry)),
$this->trans->t('You need to enter either an existing account or the administrator.'));
}
diff --git a/lib/private/setup/mysql.php b/lib/private/setup/mysql.php
index 5558a2d1e51..8f8d86d388c 100644
--- a/lib/private/setup/mysql.php
+++ b/lib/private/setup/mysql.php
@@ -9,7 +9,7 @@ class MySQL extends AbstractDatabase {
//check if the database user has admin right
$connection = @mysql_connect($this->dbhost, $this->dbuser, $this->dbpassword);
if(!$connection) {
- throw new \DatabaseSetupException($this->trans->t('MySQL/MariaDB username and/or password not valid'),
+ throw new \OC\DatabaseSetupException($this->trans->t('MySQL/MariaDB username and/or password not valid'),
$this->trans->t('You need to enter either an existing account or the administrator.'));
}
//user already specified in config
@@ -96,13 +96,13 @@ class MySQL extends AbstractDatabase {
$query = "CREATE USER '$name'@'localhost' IDENTIFIED BY '$password'";
$result = mysql_query($query, $connection);
if (!$result) {
- throw new \DatabaseSetupException($this->trans->t("MySQL/MariaDB user '%s'@'localhost' exists already.", array($name)),
+ throw new \OC\DatabaseSetupException($this->trans->t("MySQL/MariaDB user '%s'@'localhost' exists already.", array($name)),
$this->trans->t("Drop this user from MySQL/MariaDB", array($name)));
}
$query = "CREATE USER '$name'@'%' IDENTIFIED BY '$password'";
$result = mysql_query($query, $connection);
if (!$result) {
- throw new \DatabaseSetupException($this->trans->t("MySQL/MariaDB user '%s'@'%%' already exists", array($name)),
+ throw new \OC\DatabaseSetupException($this->trans->t("MySQL/MariaDB user '%s'@'%%' already exists", array($name)),
$this->trans->t("Drop this user from MySQL/MariaDB."));
}
}
diff --git a/lib/private/setup/oci.php b/lib/private/setup/oci.php
index 23b5232438a..b75b658bae2 100644
--- a/lib/private/setup/oci.php
+++ b/lib/private/setup/oci.php
@@ -45,14 +45,14 @@ class OCI extends AbstractDatabase {
if(!$connection) {
$errorMessage = $this->getLastError();
if ($errorMessage) {
- throw new \DatabaseSetupException($this->trans->t('Oracle connection could not be established'),
+ throw new \OC\DatabaseSetupException($this->trans->t('Oracle connection could not be established'),
$errorMessage.' Check environment: ORACLE_HOME='.getenv('ORACLE_HOME')
.' ORACLE_SID='.getenv('ORACLE_SID')
.' LD_LIBRARY_PATH='.getenv('LD_LIBRARY_PATH')
.' NLS_LANG='.getenv('NLS_LANG')
.' tnsnames.ora is '.(is_readable(getenv('ORACLE_HOME').'/network/admin/tnsnames.ora')?'':'not ').'readable');
}
- throw new \DatabaseSetupException($this->trans->t('Oracle username and/or password not valid'),
+ throw new \OC\DatabaseSetupException($this->trans->t('Oracle username and/or password not valid'),
'Check environment: ORACLE_HOME='.getenv('ORACLE_HOME')
.' ORACLE_SID='.getenv('ORACLE_SID')
.' LD_LIBRARY_PATH='.getenv('LD_LIBRARY_PATH')
@@ -124,7 +124,7 @@ class OCI extends AbstractDatabase {
}
$connection = @oci_connect($this->dbuser, $this->dbpassword, $easy_connect_string);
if(!$connection) {
- throw new \DatabaseSetupException($this->trans->t('Oracle username and/or password not valid'),
+ throw new \OC\DatabaseSetupException($this->trans->t('Oracle username and/or password not valid'),
$this->trans->t('You need to enter either an existing account or the administrator.'));
}
$query = "SELECT count(*) FROM user_tables WHERE table_name = :un";
diff --git a/lib/private/setup/postgresql.php b/lib/private/setup/postgresql.php
index 4d0c9b52a4d..3777d1620bc 100644
--- a/lib/private/setup/postgresql.php
+++ b/lib/private/setup/postgresql.php
@@ -27,7 +27,7 @@ class PostgreSQL extends AbstractDatabase {
$connection = @pg_connect($connection_string);
if(!$connection)
- throw new \DatabaseSetupException($this->trans->t('PostgreSQL username and/or password not valid'),
+ throw new \OC\DatabaseSetupException($this->trans->t('PostgreSQL username and/or password not valid'),
$this->trans->t('You need to enter either an existing account or the administrator.'));
}
$e_user = pg_escape_string($this->dbuser);
@@ -80,7 +80,7 @@ class PostgreSQL extends AbstractDatabase {
$connection_string = "host='$e_host' dbname='$e_dbname' user='$e_user' port='$port' password='$e_password'";
$connection = @pg_connect($connection_string);
if(!$connection) {
- throw new \DatabaseSetupException($this->trans->t('PostgreSQL username and/or password not valid'),
+ throw new \OC\DatabaseSetupException($this->trans->t('PostgreSQL username and/or password not valid'),
$this->trans->t('You need to enter either an existing account or the administrator.'));
}
$query = "select count(*) FROM pg_class WHERE relname='".$this->tableprefix."users' limit 1";
diff --git a/lib/private/share/helper.php b/lib/private/share/helper.php
index 2418535c9d5..6bbb101db3a 100644
--- a/lib/private/share/helper.php
+++ b/lib/private/share/helper.php
@@ -189,20 +189,23 @@ class Helper extends \OC\Share\Constants {
public static function calculateExpireDate($defaultExpireSettings, $creationTime, $userExpireDate = null) {
$expires = false;
+ $defaultExpires = null;
if (!empty($defaultExpireSettings['defaultExpireDateSet'])) {
- $expires = $creationTime + $defaultExpireSettings['expireAfterDays'] * 86400;
+ $defaultExpires = $creationTime + $defaultExpireSettings['expireAfterDays'] * 86400;
}
if (isset($userExpireDate)) {
// if the admin decided to enforce the default expire date then we only take
// the user defined expire date of it is before the default expire date
- if ($expires && !empty($defaultExpireSettings['enforceExpireDate'])) {
- $expires = min($userExpireDate, $expires);
+ if ($defaultExpires && !empty($defaultExpireSettings['enforceExpireDate'])) {
+ $expires = min($userExpireDate, $defaultExpires);
} else {
$expires = $userExpireDate;
}
+ } else if ($defaultExpires && !empty($defaultExpireSettings['enforceExpireDate'])) {
+ $expires = $defaultExpires;
}
return $expires;
diff --git a/lib/private/share/share.php b/lib/private/share/share.php
index b7b05dab8ef..c6fd1604ac7 100644
--- a/lib/private/share/share.php
+++ b/lib/private/share/share.php
@@ -287,11 +287,12 @@ class Share extends \OC\Share\Constants {
* Get the item of item type shared with a given user by source
* @param string $itemType
* @param string $itemSource
- * @param string $user User user to whom the item was shared
+ * @param string $user User to whom the item was shared
+ * @param string $owner Owner of the share
+ * @param int $shareType only look for a specific share type
* @return array Return list of items with file_target, permissions and expiration
*/
- public static function getItemSharedWithUser($itemType, $itemSource, $user) {
-
+ public static function getItemSharedWithUser($itemType, $itemSource, $user, $owner = null, $shareType = null) {
$shares = array();
$fileDependend = false;
@@ -314,6 +315,16 @@ class Share extends \OC\Share\Constants {
$arguments[] = $user;
}
+ if ($shareType !== null) {
+ $where .= ' AND `share_type` = ? ';
+ $arguments[] = $shareType;
+ }
+
+ if ($owner !== null) {
+ $where .= ' AND `uid_owner` = ? ';
+ $arguments[] = $owner;
+ }
+
$query = \OC_DB::prepare('SELECT ' . $select . ' FROM `*PREFIX*share` '. $where);
$result = \OC_DB::executeAudited($query, $arguments);
@@ -536,7 +547,7 @@ class Share extends \OC\Share\Constants {
// single file shares should never have delete permissions
if ($itemType === 'file') {
- $permissions = (int)$permissions & ~\OCP\PERMISSION_DELETE;
+ $permissions = (int)$permissions & ~\OCP\Constants::PERMISSION_DELETE;
}
// Verify share type and sharing conditions are met
@@ -627,9 +638,7 @@ class Share extends \OC\Share\Constants {
// Generate hash of password - same method as user passwords
if (!empty($shareWith)) {
- $forcePortable = (CRYPT_BLOWFISH != 1);
- $hasher = new \PasswordHash(8, $forcePortable);
- $shareWith = $hasher->HashPassword($shareWith.\OC_Config::getValue('passwordsalt', ''));
+ $shareWith = \OC::$server->getHasher()->hash($shareWith);
} else {
// reuse the already set password, but only if we change permissions
// otherwise the user disabled the password protection
@@ -697,7 +706,7 @@ class Share extends \OC\Share\Constants {
// check if it is a valid itemType
self::getBackend($itemType);
- $items = self::getItemSharedWithUser($itemType, $itemSource, $shareWith);
+ $items = self::getItemSharedWithUser($itemType, $itemSource, $shareWith, null, $shareType);
$toDelete = array();
$newParent = null;
@@ -920,7 +929,7 @@ class Share extends \OC\Share\Constants {
// Check if permissions were removed
if ($item['permissions'] & ~$permissions) {
// If share permission is removed all reshares must be deleted
- if (($item['permissions'] & \OCP\PERMISSION_SHARE) && (~$permissions & \OCP\PERMISSION_SHARE)) {
+ if (($item['permissions'] & \OCP\Constants::PERMISSION_SHARE) && (~$permissions & \OCP\Constants::PERMISSION_SHARE)) {
Helper::delete($item['id'], true);
} else {
$ids = array();
@@ -1308,14 +1317,18 @@ class Share extends \OC\Share\Constants {
if (isset($shareType)) {
// Include all user and group items
if ($shareType == self::$shareTypeUserAndGroups && isset($shareWith)) {
- $where .= ' AND `share_type` IN (?,?,?)';
+ $where .= ' AND ((`share_type` in (?, ?) AND `share_with` = ?) ';
$queryArgs[] = self::SHARE_TYPE_USER;
- $queryArgs[] = self::SHARE_TYPE_GROUP;
$queryArgs[] = self::$shareTypeGroupUserUnique;
- $userAndGroups = array_merge(array($shareWith), \OC_Group::getUserGroups($shareWith));
- $placeholders = join(',', array_fill(0, count($userAndGroups), '?'));
- $where .= ' AND `share_with` IN ('.$placeholders.')';
- $queryArgs = array_merge($queryArgs, $userAndGroups);
+ $queryArgs[] = $shareWith;
+ $groups = \OC_Group::getUserGroups($shareWith);
+ if (!empty($groups)) {
+ $placeholders = join(',', array_fill(0, count($groups), '?'));
+ $where .= ' OR (`share_type` = ? AND `share_with` IN ('.$placeholders.')) ';
+ $queryArgs[] = self::SHARE_TYPE_GROUP;
+ $queryArgs = array_merge($queryArgs, $groups);
+ }
+ $where .= ')';
// Don't include own group shares
$where .= ' AND `uid_owner` != ?';
$queryArgs[] = $shareWith;
@@ -1445,8 +1458,8 @@ class Share extends \OC\Share\Constants {
}
// Switch ids if sharing permission is granted on only
// one share to ensure correct parent is used if resharing
- if (~(int)$items[$id]['permissions'] & \OCP\PERMISSION_SHARE
- && (int)$row['permissions'] & \OCP\PERMISSION_SHARE) {
+ if (~(int)$items[$id]['permissions'] & \OCP\Constants::PERMISSION_SHARE
+ && (int)$row['permissions'] & \OCP\Constants::PERMISSION_SHARE) {
$items[$row['id']] = $items[$id];
$switchedItems[$id] = $row['id'];
unset($items[$id]);
@@ -1503,11 +1516,14 @@ class Share extends \OC\Share\Constants {
}
// Check if resharing is allowed, if not remove share permission
if (isset($row['permissions']) && (!self::isResharingAllowed() | \OC_Util::isSharingDisabledForUser())) {
- $row['permissions'] &= ~\OCP\PERMISSION_SHARE;
+ $row['permissions'] &= ~\OCP\Constants::PERMISSION_SHARE;
}
// Add display names to result
- if ( isset($row['share_with']) && $row['share_with'] != '') {
+ if ( isset($row['share_with']) && $row['share_with'] != '' &&
+ isset($row['share_with']) && $row['share_type'] === self::SHARE_TYPE_USER) {
$row['share_with_displayname'] = \OCP\User::getDisplayName($row['share_with']);
+ } else {
+ $row['share_with_displayname'] = $row['share_with'];
}
if ( isset($row['uid_owner']) && $row['uid_owner'] != '') {
$row['displayname_owner'] = \OCP\User::getDisplayName($row['uid_owner']);
@@ -1618,7 +1634,7 @@ class Share extends \OC\Share\Constants {
// Need to find a solution which works for all back-ends
$collectionItems = array();
$collectionBackend = self::getBackend('folder');
- $sharedParents = $collectionBackend->getParents($item, $shareWith);
+ $sharedParents = $collectionBackend->getParents($item, $shareWith, $uidOwner);
foreach ($sharedParents as $parent) {
$collectionItems[] = $parent;
}
@@ -1895,7 +1911,7 @@ class Share extends \OC\Share\Constants {
}
// Check if share permissions is granted
- if (self::isResharingAllowed() && (int)$checkReshare['permissions'] & \OCP\PERMISSION_SHARE) {
+ if (self::isResharingAllowed() && (int)$checkReshare['permissions'] & \OCP\Constants::PERMISSION_SHARE) {
if (~(int)$checkReshare['permissions'] & $permissions) {
$message = 'Sharing %s failed, because the permissions exceed permissions granted to %s';
$message_t = $l->t('Sharing %s failed, because the permissions exceed permissions granted to %s', array($itemSourceName, $uidOwner));
diff --git a/lib/private/urlgenerator.php b/lib/private/urlgenerator.php
index e50e9eed6af..d263d25aeef 100644
--- a/lib/private/urlgenerator.php
+++ b/lib/private/urlgenerator.php
@@ -8,6 +8,7 @@
*/
namespace OC;
+use OC_Defaults;
use OCP\IURLGenerator;
use RuntimeException;
@@ -156,7 +157,7 @@ class URLGenerator implements IURLGenerator {
/**
* Makes an URL absolute
- * @param string $url the url in the owncloud host
+ * @param string $url the url in the ownCloud host
* @return string the absolute version of the url
*/
public function getAbsoluteURL($url) {
@@ -173,4 +174,13 @@ class URLGenerator implements IURLGenerator {
return \OC_Request::serverProtocol() . '://' . \OC_Request::serverHost(). $webRoot . $separator . $url;
}
+
+ /**
+ * @param string $key
+ * @return string url to the online documentation
+ */
+ public function linkToDocs($key) {
+ $theme = new OC_Defaults();
+ return $theme->buildDocLinkToKey($key);
+ }
}
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/session.php b/lib/private/user/session.php
index ca0265dfb23..94abaca3e76 100644
--- a/lib/private/user/session.php
+++ b/lib/private/user/session.php
@@ -88,15 +88,6 @@ class Session implements IUserSession, Emitter {
* @return \OCP\ISession
*/
public function getSession() {
- // fetch the deprecated \OC::$session if it changed for backwards compatibility
- if (isset(\OC::$session) && \OC::$session !== $this->session) {
- \OC::$server->getLogger()->warning(
- 'One of your installed apps still seems to use the deprecated ' .
- '\OC::$session and has replaced it with a new instance. Please file a bug against it.' .
- 'Closing and replacing session in UserSession instance.'
- );
- $this->setSession(\OC::$session);
- }
return $this->session;
}
@@ -111,14 +102,6 @@ class Session implements IUserSession, Emitter {
}
$this->session = $session;
$this->activeUser = null;
-
- // maintain deprecated \OC::$session
- if (\OC::$session !== $this->session) {
- if (\OC::$session instanceof \OCP\ISession) {
- \OC::$session->close();
- }
- \OC::$session = $session;
- }
}
/**
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 bee0a579192..38db431e895 100644
--- a/lib/private/util.php
+++ b/lib/private/util.php
@@ -562,6 +562,7 @@ class OC_Util {
'classes' => array(
'ZipArchive' => 'zip',
'DOMDocument' => 'dom',
+ 'XMLWriter' => 'XMLWriter'
),
'functions' => array(
'xml_parser_create' => 'libxml',
@@ -604,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.')
);
@@ -1113,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
@@ -1335,7 +1327,7 @@ class OC_Util {
return false;
}
foreach (str_split($trimmed) as $char) {
- if (strpos(\OCP\FILENAME_INVALID_CHARS, $char) !== false) {
+ if (strpos(\OCP\Constants::FILENAME_INVALID_CHARS, $char) !== false) {
return false;
}
}
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/app/iappmanager.php b/lib/public/app/iappmanager.php
new file mode 100644
index 00000000000..ebd84a1ce9d
--- /dev/null
+++ b/lib/public/app/iappmanager.php
@@ -0,0 +1,51 @@
+<?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 OCP\App;
+
+interface IAppManager {
+ /**
+ * Check if an app is enabled for user
+ *
+ * @param string $appId
+ * @param \OCP\IUser $user (optional) if not defined, the currently loggedin user will be used
+ * @return bool
+ */
+ public function isEnabledForUser($appId, $user = null);
+
+ /**
+ * Check if an app is installed in the instance
+ *
+ * @param string $appId
+ * @return bool
+ */
+ public function isInstalled($appId);
+
+ /**
+ * Enable an app for every user
+ *
+ * @param string $appId
+ */
+ public function enableApp($appId);
+
+ /**
+ * Enable an app only for specific groups
+ *
+ * @param string $appId
+ * @param \OCP\IGroup[] $groups
+ */
+ public function enableAppForGroups($appId, $groups);
+
+ /**
+ * Disable an app for every user
+ *
+ * @param string $appId
+ */
+ public function disableApp($appId);
+}
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/appframework/iapi.php b/lib/public/appframework/iapi.php
index 9af251be850..ecbc0fd1900 100644
--- a/lib/public/appframework/iapi.php
+++ b/lib/public/appframework/iapi.php
@@ -37,6 +37,7 @@ interface IApi {
/**
* Gets the userid of the current user
* @return string the user id of the current user
+ * @deprecated Use \OC::$server->getUserSession()->getUser()->getUID()
*/
function getUserId();
diff --git a/lib/public/constants.php b/lib/public/constants.php
index 350646a0ac0..78cafd11847 100644
--- a/lib/public/constants.php
+++ b/lib/public/constants.php
@@ -26,15 +26,37 @@
namespace OCP;
-/**
- * CRUDS permissions.
- */
+/** @deprecated Use \OCP\Constants::PERMISSION_CREATE instead */
const PERMISSION_CREATE = 4;
+
+/** @deprecated Use \OCP\Constants::PERMISSION_READ instead */
const PERMISSION_READ = 1;
+
+/** @deprecated Use \OCP\Constants::PERMISSION_UPDATE instead */
const PERMISSION_UPDATE = 2;
+
+/** @deprecated Use \OCP\Constants::PERMISSION_DELETE instead */
const PERMISSION_DELETE = 8;
+
+/** @deprecated Use \OCP\Constants::PERMISSION_SHARE instead */
const PERMISSION_SHARE = 16;
+
+/** @deprecated Use \OCP\Constants::PERMISSION_ALL instead */
const PERMISSION_ALL = 31;
+/** @deprecated Use \OCP\Constants::FILENAME_INVALID_CHARS instead */
const FILENAME_INVALID_CHARS = "\\/<>:\"|?*\n";
+class Constants {
+ /**
+ * CRUDS permissions.
+ */
+ const PERMISSION_CREATE = 4;
+ const PERMISSION_READ = 1;
+ const PERMISSION_UPDATE = 2;
+ const PERMISSION_DELETE = 8;
+ const PERMISSION_SHARE = 16;
+ const PERMISSION_ALL = 31;
+
+ const FILENAME_INVALID_CHARS = "\\/<>:\"|?*\n";
+}
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/fileinfo.php b/lib/public/files/fileinfo.php
index ec81a541564..3a407ed67ca 100644
--- a/lib/public/files/fileinfo.php
+++ b/lib/public/files/fileinfo.php
@@ -103,12 +103,12 @@ interface FileInfo {
/**
* Get the permissions of the file or folder as bitmasked combination of the following constants
- * \OCP\PERMISSION_CREATE
- * \OCP\PERMISSION_READ
- * \OCP\PERMISSION_UPDATE
- * \OCP\PERMISSION_DELETE
- * \OCP\PERMISSION_SHARE
- * \OCP\PERMISSION_ALL
+ * \OCP\Constants::PERMISSION_CREATE
+ * \OCP\Constants::PERMISSION_READ
+ * \OCP\Constants::PERMISSION_UPDATE
+ * \OCP\Constants::PERMISSION_DELETE
+ * \OCP\Constants::PERMISSION_SHARE
+ * \OCP\Constants::PERMISSION_ALL
*
* @return int
*/
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/node.php b/lib/public/files/node.php
index a380394095b..35c20b487c9 100644
--- a/lib/public/files/node.php
+++ b/lib/public/files/node.php
@@ -128,11 +128,11 @@ interface Node {
/**
* Get the permissions of the file or folder as a combination of one or more of the following constants:
- * - \OCP\PERMISSION_READ
- * - \OCP\PERMISSION_UPDATE
- * - \OCP\PERMISSION_CREATE
- * - \OCP\PERMISSION_DELETE
- * - \OCP\PERMISSION_SHARE
+ * - \OCP\Constants::PERMISSION_READ
+ * - \OCP\Constants::PERMISSION_UPDATE
+ * - \OCP\Constants::PERMISSION_CREATE
+ * - \OCP\Constants::PERMISSION_DELETE
+ * - \OCP\Constants::PERMISSION_SHARE
*
* @return int
*/
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/iavatar.php b/lib/public/iavatar.php
index 1e80682c4f7..213d2e6cef5 100644
--- a/lib/public/iavatar.php
+++ b/lib/public/iavatar.php
@@ -23,9 +23,9 @@ interface IAvatar {
/**
* sets the users avatar
* @param Image $data mixed imagedata or path to set a new avatar
- * @throws Exception if the provided file is not a jpg or png image
- * @throws Exception if the provided image is not valid
- * @throws \OCP\NotSquareException if the image is not square
+ * @throws \Exception if the provided file is not a jpg or png image
+ * @throws \Exception if the provided image is not valid
+ * @throws \OC\NotSquareException if the image is not square
* @return void
*/
function set($data);
diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index 794bba6bfb6..301f47c68fa 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -291,4 +291,18 @@ interface IServerContainer {
* @return \OCP\ITempManager
*/
function getTempManager();
+
+ /**
+ * Get the app manager
+ *
+ * @return \OCP\App\IAppManager
+ */
+ function getAppManager();
+
+ /**
+ * Get the webroot
+ *
+ * @return string
+ */
+ function getWebRoot();
}
diff --git a/lib/public/iurlgenerator.php b/lib/public/iurlgenerator.php
index dbbd8a3bb63..fa817c10ea5 100644
--- a/lib/public/iurlgenerator.php
+++ b/lib/public/iurlgenerator.php
@@ -69,8 +69,14 @@ interface IURLGenerator {
/**
* Makes an URL absolute
- * @param string $url the url in the owncloud host
+ * @param string $url the url in the ownCloud host
* @return string the absolute version of the url
*/
public function getAbsoluteURL($url);
+
+ /**
+ * @param string $key
+ * @return string url to the online documentation
+ */
+ public function linkToDocs($key);
}
diff --git a/lib/public/share.php b/lib/public/share.php
index 449d1fa211e..b3ece8fab94 100644
--- a/lib/public/share.php
+++ b/lib/public/share.php
@@ -125,11 +125,12 @@ class Share extends \OC\Share\Constants {
* Get the item of item type shared with a given user by source
* @param string $itemType
* @param string $itemSource
- * @param string $user User user to whom the item was shared
+ * @param string $user User to whom the item was shared
+ * @param string $owner Owner of the share
* @return array Return list of items with file_target, permissions and expiration
*/
- public static function getItemSharedWithUser($itemType, $itemSource, $user) {
- return \OC\Share\Share::getItemSharedWithUser($itemType, $itemSource, $user);
+ public static function getItemSharedWithUser($itemType, $itemSource, $user, $owner = null) {
+ return \OC\Share\Share::getItemSharedWithUser($itemType, $itemSource, $user, $owner);
}
/**
@@ -341,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 2e265bb5e8e..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 ));
@@ -88,7 +93,8 @@ function 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
+ * @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/lib/public/user.php b/lib/public/user.php
index 925410d37d5..e9835620433 100644
--- a/lib/public/user.php
+++ b/lib/public/user.php
@@ -38,6 +38,7 @@ class User {
/**
* Get the user id of the user currently logged in.
* @return string uid or false
+ * @deprecated Use \OC::$server->getUserSession()->getUser()->getUID()
*/
public static function getUser() {
return \OC_User::getUser();
@@ -94,6 +95,7 @@ class User {
/**
* Logs the user out including all the session data
* Logout, destroys session
+ * @deprecated Use \OC::$server->getUserSession()->logout();
*/
public static function logout() {
\OC_User::logout();
@@ -106,6 +108,7 @@ class User {
* @return string|false username on success, false otherwise
*
* Check if the password is correct without logging in the user
+ * @deprecated Use \OC::$server->getUserManager()->checkPassword();
*/
public static function checkPassword( $uid, $password ) {
return \OC_User::checkPassword( $uid, $password );
diff --git a/lib/public/util.php b/lib/public/util.php
index a87d26a4004..793a16c4d84 100644
--- a/lib/public/util.php
+++ b/lib/public/util.php
@@ -508,8 +508,8 @@ class Util {
/**
* Compare two strings to provide a natural sort
- * @param $a first string to compare
- * @param $b second string to compare
+ * @param string $a first string to compare
+ * @param string $b second string to compare
* @return -1 if $b comes before $a, 1 if $a comes before $b
* or 0 if the strings are identical
*/
diff --git a/lib/repair/repairconfig.php b/lib/repair/repairconfig.php
index e09d8e8fe7a..e9b322da826 100644
--- a/lib/repair/repairconfig.php
+++ b/lib/repair/repairconfig.php
@@ -12,8 +12,16 @@ use OC\Hooks\BasicEmitter;
use OC\RepairStep;
use Sabre\DAV\Exception;
+/**
+ * Class RepairConfig
+ *
+ * @package OC\Repair
+ */
class RepairConfig extends BasicEmitter implements RepairStep {
+ /**
+ * @return string
+ */
public function getName() {
return 'Repair config';
}
@@ -23,6 +31,7 @@ class RepairConfig extends BasicEmitter implements RepairStep {
*/
public function run() {
$this->addSecret();
+ $this->removePortsFromTrustedDomains();
}
/**
@@ -34,4 +43,24 @@ class RepairConfig extends BasicEmitter implements RepairStep {
\OC::$server->getConfig()->setSystemValue('secret', $secret);
}
}
+
+
+ /**
+ * Remove ports from existing trusted domains in config.php
+ */
+ private function removePortsFromTrustedDomains() {
+ $trustedDomains = \OC::$server->getConfig()->getSystemValue('trusted_domains', array());
+ $newTrustedDomains = array();
+ foreach($trustedDomains as $domain) {
+ $pos = strrpos($domain, ':');
+ if ($pos !== false) {
+ $port = substr($domain, $pos + 1);
+ if (is_numeric($port)) {
+ $domain = substr($domain, 0, $pos);
+ }
+ }
+ $newTrustedDomains[] = $domain;
+ }
+ \OC::$server->getConfig()->setSystemValue('trusted_domains', $newTrustedDomains);
+ }
}
diff --git a/occ b/occ
index e2b71fe4abc..7e47585b01e 100755
--- a/occ
+++ b/occ
@@ -1,4 +1,4 @@
-#!/usr/bin/php
+#!/usr/bin/env php
<?php
/**
* Copyright (c) 2013 Thomas Müller <thomas.mueller@tmit.eu>
diff --git a/public.php b/public.php
index 0e04db66da7..c5c227ef460 100644
--- a/public.php
+++ b/public.php
@@ -37,7 +37,9 @@ try {
OC_App::loadApps(array('authentication'));
OC_App::loadApps(array('filesystem', 'logging'));
- OC_Util::checkAppEnabled($app);
+ if (!\OC::$server->getAppManager()->isInstalled($app)) {
+ throw new Exception('App not installed: ' . $app);
+ }
OC_App::loadApp($app);
OC_User::setIncognitoMode(true);
diff --git a/remote.php b/remote.php
index d854b1d65a6..7993566afec 100644
--- a/remote.php
+++ b/remote.php
@@ -43,7 +43,9 @@ try {
$file = OC::$SERVERROOT .'/'. $file;
break;
default:
- OC_Util::checkAppEnabled($app);
+ if (!\OC::$server->getAppManager()->isInstalled($app)) {
+ throw new Exception('App not installed: ' . $app);
+ }
OC_App::loadApp($app);
$file = OC_App::getAppPath($app) .'/'. $parts[1];
break;
diff --git a/settings/admin.php b/settings/admin.php
index d1ed6e75f50..a5f07037911 100644
--- a/settings/admin.php
+++ b/settings/admin.php
@@ -17,7 +17,7 @@ $config = \OC::$server->getConfig();
$appConfig = \OC::$server->getAppConfig();
// Should we display sendmail as an option?
-$template->assign('sendmail_is_available', (bool)findBinaryPath('sendmail'));
+$template->assign('sendmail_is_available', (bool) \OC_Helper::findBinaryPath('sendmail'));
$template->assign('loglevel', $config->getSystemValue("loglevel", 2));
$template->assign('mail_domain', $config->getSystemValue("mail_domain", ''));
@@ -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'));
}
@@ -115,19 +115,3 @@ $formsAndMore[] = array('anchor' => 'log-section', 'section-name' => $l->t('Log'
$template->assign('forms', $formsAndMore);
$template->printPage();
-
-/**
- * Try to find a program
- *
- * @param string $program
- * @return null|string
- */
-function findBinaryPath($program) {
- if (OC_Helper::is_function_enabled('exec')) {
- exec('command -v ' . escapeshellarg($program) . ' 2> /dev/null', $output, $returnCode);
- if ($returnCode === 0 && count($output) > 0) {
- return escapeshellcmd($output[0]);
- }
- }
- return null;
-}
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 f76cd863eef..f3e4d498cbd 100644
--- a/settings/l10n/ar.js
+++ b/settings/l10n/ar.js
@@ -76,12 +76,9 @@ 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." : "هذا يعني انه من الممكن ان يكون هناك مشكلة في بعض الاحرف في اسم الملف.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "نحن باصرار نقترح ان تثبت الحزم المطلوبة في نظامك لدعم احد هذة اللغات: %s.",
"Please double check the <a href='%s'>installation guides</a>." : "الرجاء التحقق من <a href='%s'>دليل التنصيب</a>.",
"Execute one task with each page loaded" : "قم بتنفيذ مهمة واحدة مع كل صفحة تم تحميلها",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "الملف cron.php تم تسجيله فى خدمه webcron لاستدعاء الملف cron.php كل 15 دقيقه",
diff --git a/settings/l10n/ar.json b/settings/l10n/ar.json
index 2c4e2777936..bd5171b4350 100644
--- a/settings/l10n/ar.json
+++ b/settings/l10n/ar.json
@@ -74,12 +74,9 @@
"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." : "هذا يعني انه من الممكن ان يكون هناك مشكلة في بعض الاحرف في اسم الملف.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "نحن باصرار نقترح ان تثبت الحزم المطلوبة في نظامك لدعم احد هذة اللغات: %s.",
"Please double check the <a href='%s'>installation guides</a>." : "الرجاء التحقق من <a href='%s'>دليل التنصيب</a>.",
"Execute one task with each page loaded" : "قم بتنفيذ مهمة واحدة مع كل صفحة تم تحميلها",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "الملف cron.php تم تسجيله فى خدمه webcron لاستدعاء الملف cron.php كل 15 دقيقه",
diff --git a/settings/l10n/ast.js b/settings/l10n/ast.js
index c2c64a38fff..3c0e0cbd58a 100644
--- a/settings/l10n/ast.js
+++ b/settings/l10n/ast.js
@@ -109,14 +109,11 @@ 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",
"System locale can not be set to a one which supports UTF-8." : "Nun se pue escoyer una configuración rexonal que sofite UTF-8.",
"This means that there might be problems with certain characters in file names." : "Esto significa que pue haber problemes con ciertos caráuteres nos nomes de los ficheros.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Ye enforma recomendable instalar los paquetes necesarios pa poder soportar una de les siguientes configuraciones rexonales: %s. ",
"URL generation in notification emails" : "Xeneración d'URL en mensaxes 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\")" : "Si la so instalación nun ta asitiada nel raigañu del dominiu y uses el cron del sistema, pues atopar problemas cola xeneración d'URL. Pa evitar estos problemes, afita la opción \"overwritewebroot\" nel tu ficheru config.php pa qu'use'l camín del raigañu la so instalación (Suxerencia: \"%s\")",
"Please double check the <a href='%s'>installation guides</a>." : "Por favor, comprueba les <a href='%s'>guíes d'instalación</a>.",
@@ -206,7 +203,6 @@ OC.L10N.register(
"Create" : "Crear",
"Admin Recovery Password" : "Recuperación de la contraseña d'alministración",
"Enter the recovery password in order to recover the users files during password change" : "Introduz la contraseña de recuperación col envís de recuperar los ficheros de los usuarios mientres el cambéu de contraseña.",
- "Search Users and Groups" : "Guetar Usuarios y Grupos",
"Add Group" : "Amestar grupu",
"Group" : "Grupu",
"Everyone" : "Toos",
diff --git a/settings/l10n/ast.json b/settings/l10n/ast.json
index c903f1d1203..2d1a48006c7 100644
--- a/settings/l10n/ast.json
+++ b/settings/l10n/ast.json
@@ -107,14 +107,11 @@
"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",
"System locale can not be set to a one which supports UTF-8." : "Nun se pue escoyer una configuración rexonal que sofite UTF-8.",
"This means that there might be problems with certain characters in file names." : "Esto significa que pue haber problemes con ciertos caráuteres nos nomes de los ficheros.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Ye enforma recomendable instalar los paquetes necesarios pa poder soportar una de les siguientes configuraciones rexonales: %s. ",
"URL generation in notification emails" : "Xeneración d'URL en mensaxes 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\")" : "Si la so instalación nun ta asitiada nel raigañu del dominiu y uses el cron del sistema, pues atopar problemas cola xeneración d'URL. Pa evitar estos problemes, afita la opción \"overwritewebroot\" nel tu ficheru config.php pa qu'use'l camín del raigañu la so instalación (Suxerencia: \"%s\")",
"Please double check the <a href='%s'>installation guides</a>." : "Por favor, comprueba les <a href='%s'>guíes d'instalación</a>.",
@@ -204,7 +201,6 @@
"Create" : "Crear",
"Admin Recovery Password" : "Recuperación de la contraseña d'alministración",
"Enter the recovery password in order to recover the users files during password change" : "Introduz la contraseña de recuperación col envís de recuperar los ficheros de los usuarios mientres el cambéu de contraseña.",
- "Search Users and Groups" : "Guetar Usuarios y Grupos",
"Add Group" : "Amestar grupu",
"Group" : "Grupu",
"Everyone" : "Toos",
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 a7040874a96..506f44c4407 100644
--- a/settings/l10n/bg_BG.js
+++ b/settings/l10n/bg_BG.js
@@ -110,14 +110,11 @@ 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" : "Местоположението не работи",
"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 to install 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\")" : "Ако инсталацията не e инсталиранa в root на домейна и използва cron, може да има проблеми с генерирането на URL. За да избегнеш тези проблеми, моля, промени \"overwritewebroot\" в config.php с webroot пътя (Препоръчително: \"%s\")",
"Connectivity Checks" : "Проверки за свързаност",
@@ -144,6 +141,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" : "Режим на изпращане",
@@ -220,7 +219,6 @@ OC.L10N.register(
"Create" : "Създаване",
"Admin Recovery Password" : "Възстановяване на Администраторска Парола",
"Enter the recovery password in order to recover the users files during password change" : "Въведи паролата за възстановяване, за да възстановиш файловете на потребителите при промяна на паролата.",
- "Search Users and Groups" : "Търси Потребители и Групи",
"Add Group" : "Добави Група",
"Group" : "Група",
"Everyone" : "Всички",
diff --git a/settings/l10n/bg_BG.json b/settings/l10n/bg_BG.json
index cbc1d1352b9..2c000622209 100644
--- a/settings/l10n/bg_BG.json
+++ b/settings/l10n/bg_BG.json
@@ -108,14 +108,11 @@
"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" : "Местоположението не работи",
"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 to install 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\")" : "Ако инсталацията не e инсталиранa в root на домейна и използва cron, може да има проблеми с генерирането на URL. За да избегнеш тези проблеми, моля, промени \"overwritewebroot\" в config.php с webroot пътя (Препоръчително: \"%s\")",
"Connectivity Checks" : "Проверки за свързаност",
@@ -142,6 +139,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" : "Режим на изпращане",
@@ -218,7 +217,6 @@
"Create" : "Създаване",
"Admin Recovery Password" : "Възстановяване на Администраторска Парола",
"Enter the recovery password in order to recover the users files during password change" : "Въведи паролата за възстановяване, за да възстановиш файловете на потребителите при промяна на паролата.",
- "Search Users and Groups" : "Търси Потребители и Групи",
"Add Group" : "Добави Група",
"Group" : "Група",
"Everyone" : "Всички",
diff --git a/settings/l10n/ca.js b/settings/l10n/ca.js
index 166269d39fd..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,18 +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 to install the required packages on your system to support one of the following locales: %s." : "Us recomanem que instal·leu els paquets necessaris en el sistema per donar suport a alguna de les localitzacions següents: %s",
+ "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",
@@ -128,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",
@@ -140,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",
@@ -148,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",
@@ -183,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",
@@ -190,11 +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 and Groups" : "Cerca usuaris i grups",
+ "Search Users" : "Buscar usuaris",
"Add Group" : "Afegeix grup",
"Group" : "Grup",
"Everyone" : "Tothom",
@@ -203,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 42e2f9bc17e..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,18 +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 to install the required packages on your system to support one of the following locales: %s." : "Us recomanem que instal·leu els paquets necessaris en el sistema per donar suport a alguna de les localitzacions següents: %s",
+ "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",
@@ -126,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",
@@ -138,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",
@@ -146,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",
@@ -181,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",
@@ -188,11 +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 and Groups" : "Cerca usuaris i grups",
+ "Search Users" : "Buscar usuaris",
"Add Group" : "Afegeix grup",
"Group" : "Grup",
"Everyone" : "Tothom",
@@ -201,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 c41c1c22555..24a7d8dc31a 100644
--- a/settings/l10n/cs_CZ.js
+++ b/settings/l10n/cs_CZ.js
@@ -13,17 +13,17 @@ OC.L10N.register(
"Group already exists" : "Skupina již existuje",
"Unable to add group" : "Nelze přidat skupinu",
"Files decrypted successfully" : "Soubory úspěšně dešifrovány",
- "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Nebylo možno dešifrovat soubory, zkontroluje prosím owncloud.log nebo kontaktujte svého administrátora",
+ "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Nebylo možno dešifrovat soubory, zkontroluje prosím owncloud.log nebo kontaktujte svého správce systému",
"Couldn't decrypt your files, check your password and try again" : "Nebylo možno dešifrovat soubory, zkontrolujte své heslo a zkuste znovu",
"Encryption keys deleted permanently" : "Šifrovací klíče trvale smazány",
- "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Nebylo možno trvale smazat vaše šifrovací klíče, zkontrolujte prosím owncloud.log nebo kontaktujte svého administrátora",
+ "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Nebylo možno trvale smazat vaše šifrovací klíče, zkontrolujte prosím owncloud.log nebo kontaktujte svého správce systému",
"Couldn't remove app." : "Nepodařilo se odebrat aplikaci.",
"Email saved" : "E-mail uložen",
"Invalid email" : "Neplatný e-mail",
"Unable to delete group" : "Nelze smazat skupinu",
"Unable to delete user" : "Nelze smazat uživatele",
"Backups restored successfully" : "Zálohy úspěšně obnoveny",
- "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nebylo možno obnovit vaše šifrovací klíče, zkontrolujte prosím owncloud.log nebo kontaktujte svého administrátora",
+ "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nebylo možno obnovit vaše šifrovací klíče, zkontrolujte prosím owncloud.log nebo kontaktujte svého správce systému",
"Language changed" : "Jazyk byl změněn",
"Invalid request" : "Neplatný požadavek",
"Admins can't remove themself from the admin group" : "Správci se nemohou odebrat sami ze skupiny správců",
@@ -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,14 +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'" : "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",
"System locale can not be set to a one which supports UTF-8." : "Není možné nastavit znakovou sadu, která podporuje UTF-8.",
"This means that there might be problems with certain characters in file names." : "To znamená, že se mohou vyskytnout problémy s určitými znaky v názvech souborů.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Důrazně doporučujeme nainstalovat do vašeho systém balíčky nutné pro podporu některé z následujících znakových sad: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Velmi doporučujeme nainstalovat požadované balíčky do systému, pro podporu jednoho z následujících národních prostředí: %s.",
"URL generation in notification emails" : "Generování adresy URL v oznamovacích e-mailech",
"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\")" : "Instalace mimo kořenový adresář domény a používání systémového příkazu cron může způsobit problém s generováním správné URL. Pro zabránění těmto chybám nastavte prosím správnou cestu ve svém config.php souboru v hodnotě \"overwritewebroot\" (Doporučujeme: \"%s\")",
"Connectivity Checks" : "Ověřování připojení",
@@ -144,8 +144,8 @@ OC.L10N.register(
"These groups will still be able to receive shares, but not to initiate them." : "Těmto skupinám bude stále možno sdílet, nemohou ale sami sdílet ostatním.",
"Enforce HTTPS" : "Vynutit HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Vynutí připojování klientů k %s šifrovaným spojením.",
- "Enforce HTTPS for subdomains" : "Vynutit HTTPS pro poddomény",
- "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Vynutí připojování klientů k %s a poddoménám šifrovaným spojením.",
+ "Enforce HTTPS for subdomains" : "Vynutit HTTPS pro subdomény",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Vynutí připojování klientů k %s a subdoménám šifrovaným spojením.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Připojte se k %s přes HTTPS pro povolení nebo zakázání vynucení SSL.",
"This is used for sending out notifications." : "Toto se používá pro odesílání upozornění.",
"Send mode" : "Mód odesílání",
@@ -222,7 +222,7 @@ OC.L10N.register(
"Create" : "Vytvořit",
"Admin Recovery Password" : "Heslo obnovy správce",
"Enter the recovery password in order to recover the users files during password change" : "Zadejte heslo obnovy pro obnovení souborů uživatele při změně hesla",
- "Search Users and Groups" : "Prohledat uživatele a skupiny",
+ "Search Users" : "Hledat uživatele",
"Add Group" : "Přidat skupinu",
"Group" : "Skupina",
"Everyone" : "Všichni",
@@ -231,7 +231,7 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Zvolte prosím kvótu pro úložiště (např. \"512 MB\" nebo \"12 GB\")",
"Unlimited" : "Neomezeně",
"Other" : "Jiný",
- "Group Admin for" : "Administrátor skupiny ",
+ "Group Admin for" : "Správce skupiny ",
"Quota" : "Kvóta",
"Storage Location" : "Umístění úložiště",
"Last Login" : "Poslední přihlášení",
diff --git a/settings/l10n/cs_CZ.json b/settings/l10n/cs_CZ.json
index 70d6c3f8eae..a20d98b1b77 100644
--- a/settings/l10n/cs_CZ.json
+++ b/settings/l10n/cs_CZ.json
@@ -11,17 +11,17 @@
"Group already exists" : "Skupina již existuje",
"Unable to add group" : "Nelze přidat skupinu",
"Files decrypted successfully" : "Soubory úspěšně dešifrovány",
- "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Nebylo možno dešifrovat soubory, zkontroluje prosím owncloud.log nebo kontaktujte svého administrátora",
+ "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Nebylo možno dešifrovat soubory, zkontroluje prosím owncloud.log nebo kontaktujte svého správce systému",
"Couldn't decrypt your files, check your password and try again" : "Nebylo možno dešifrovat soubory, zkontrolujte své heslo a zkuste znovu",
"Encryption keys deleted permanently" : "Šifrovací klíče trvale smazány",
- "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Nebylo možno trvale smazat vaše šifrovací klíče, zkontrolujte prosím owncloud.log nebo kontaktujte svého administrátora",
+ "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Nebylo možno trvale smazat vaše šifrovací klíče, zkontrolujte prosím owncloud.log nebo kontaktujte svého správce systému",
"Couldn't remove app." : "Nepodařilo se odebrat aplikaci.",
"Email saved" : "E-mail uložen",
"Invalid email" : "Neplatný e-mail",
"Unable to delete group" : "Nelze smazat skupinu",
"Unable to delete user" : "Nelze smazat uživatele",
"Backups restored successfully" : "Zálohy úspěšně obnoveny",
- "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nebylo možno obnovit vaše šifrovací klíče, zkontrolujte prosím owncloud.log nebo kontaktujte svého administrátora",
+ "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nebylo možno obnovit vaše šifrovací klíče, zkontrolujte prosím owncloud.log nebo kontaktujte svého správce systému",
"Language changed" : "Jazyk byl změněn",
"Invalid request" : "Neplatný požadavek",
"Admins can't remove themself from the admin group" : "Správci se nemohou odebrat sami ze skupiny správců",
@@ -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,14 +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'" : "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",
"System locale can not be set to a one which supports UTF-8." : "Není možné nastavit znakovou sadu, která podporuje UTF-8.",
"This means that there might be problems with certain characters in file names." : "To znamená, že se mohou vyskytnout problémy s určitými znaky v názvech souborů.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Důrazně doporučujeme nainstalovat do vašeho systém balíčky nutné pro podporu některé z následujících znakových sad: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Velmi doporučujeme nainstalovat požadované balíčky do systému, pro podporu jednoho z následujících národních prostředí: %s.",
"URL generation in notification emails" : "Generování adresy URL v oznamovacích e-mailech",
"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\")" : "Instalace mimo kořenový adresář domény a používání systémového příkazu cron může způsobit problém s generováním správné URL. Pro zabránění těmto chybám nastavte prosím správnou cestu ve svém config.php souboru v hodnotě \"overwritewebroot\" (Doporučujeme: \"%s\")",
"Connectivity Checks" : "Ověřování připojení",
@@ -142,8 +142,8 @@
"These groups will still be able to receive shares, but not to initiate them." : "Těmto skupinám bude stále možno sdílet, nemohou ale sami sdílet ostatním.",
"Enforce HTTPS" : "Vynutit HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Vynutí připojování klientů k %s šifrovaným spojením.",
- "Enforce HTTPS for subdomains" : "Vynutit HTTPS pro poddomény",
- "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Vynutí připojování klientů k %s a poddoménám šifrovaným spojením.",
+ "Enforce HTTPS for subdomains" : "Vynutit HTTPS pro subdomény",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Vynutí připojování klientů k %s a subdoménám šifrovaným spojením.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Připojte se k %s přes HTTPS pro povolení nebo zakázání vynucení SSL.",
"This is used for sending out notifications." : "Toto se používá pro odesílání upozornění.",
"Send mode" : "Mód odesílání",
@@ -220,7 +220,7 @@
"Create" : "Vytvořit",
"Admin Recovery Password" : "Heslo obnovy správce",
"Enter the recovery password in order to recover the users files during password change" : "Zadejte heslo obnovy pro obnovení souborů uživatele při změně hesla",
- "Search Users and Groups" : "Prohledat uživatele a skupiny",
+ "Search Users" : "Hledat uživatele",
"Add Group" : "Přidat skupinu",
"Group" : "Skupina",
"Everyone" : "Všichni",
@@ -229,7 +229,7 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Zvolte prosím kvótu pro úložiště (např. \"512 MB\" nebo \"12 GB\")",
"Unlimited" : "Neomezeně",
"Other" : "Jiný",
- "Group Admin for" : "Administrátor skupiny ",
+ "Group Admin for" : "Správce skupiny ",
"Quota" : "Kvóta",
"Storage Location" : "Umístění úložiště",
"Last Login" : "Poslední přihlášení",
diff --git a/settings/l10n/da.js b/settings/l10n/da.js
index f0567ba20f5..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,14 +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'" : "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",
"System locale can not be set to a one which supports UTF-8." : "Systemets locale kan ikke sættes til et der bruger UTF-8.",
"This means that there might be problems with certain characters in file names." : "Det betyder at der kan være problemer med visse tegn i filnavne.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Vi anbefaler at du installerer den krævede pakke på dit system, for at understøtte følgende locales: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vi anbefaler kraftigt, at du installerer den krævede pakke på dit system, for at understøtte følgende lokaliteter: %s.",
"URL generation in notification emails" : "URL-oprettelse i e-mailnotifikationer.",
"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\")" : "Hvis din installation ikke er installeret i roden af domænet, og bruger systemets cron, så kan der være problemer med URL-oprettelsen. For at undgå disse problemer, så angiv tilvalget \"overwritewebroot\" i din fil config.php til webrodens sti for din installation (foreslået værdi: \"%s\")",
"Connectivity Checks" : "Forbindelsestjek",
@@ -222,7 +222,7 @@ OC.L10N.register(
"Create" : "Ny",
"Admin Recovery Password" : "Administrator gendannelse kodeord",
"Enter the recovery password in order to recover the users files during password change" : "Indtast et gendannelse kodeord for, at kunne gendanne brugerens filer ved ændring af kodeord",
- "Search Users and Groups" : "Søg efter brugere og grupper",
+ "Search Users" : "Søg efter brugere",
"Add Group" : "Tilføj Gruppe",
"Group" : "Gruppe",
"Everyone" : "Alle",
diff --git a/settings/l10n/da.json b/settings/l10n/da.json
index 9f68b18a743..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,14 +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'" : "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",
"System locale can not be set to a one which supports UTF-8." : "Systemets locale kan ikke sættes til et der bruger UTF-8.",
"This means that there might be problems with certain characters in file names." : "Det betyder at der kan være problemer med visse tegn i filnavne.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Vi anbefaler at du installerer den krævede pakke på dit system, for at understøtte følgende locales: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vi anbefaler kraftigt, at du installerer den krævede pakke på dit system, for at understøtte følgende lokaliteter: %s.",
"URL generation in notification emails" : "URL-oprettelse i e-mailnotifikationer.",
"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\")" : "Hvis din installation ikke er installeret i roden af domænet, og bruger systemets cron, så kan der være problemer med URL-oprettelsen. For at undgå disse problemer, så angiv tilvalget \"overwritewebroot\" i din fil config.php til webrodens sti for din installation (foreslået værdi: \"%s\")",
"Connectivity Checks" : "Forbindelsestjek",
@@ -220,7 +220,7 @@
"Create" : "Ny",
"Admin Recovery Password" : "Administrator gendannelse kodeord",
"Enter the recovery password in order to recover the users files during password change" : "Indtast et gendannelse kodeord for, at kunne gendanne brugerens filer ved ændring af kodeord",
- "Search Users and Groups" : "Søg efter brugere og grupper",
+ "Search Users" : "Søg efter brugere",
"Add Group" : "Tilføj Gruppe",
"Group" : "Gruppe",
"Everyone" : "Alle",
diff --git a/settings/l10n/de.js b/settings/l10n/de.js
index bc33e10ac24..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,14 +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'" : "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",
"System locale can not be set to a one which supports UTF-8." : "Systemgebietsschema kann nicht auf eine UTF-8 unterstützende eingestellt werden.",
"This means that there might be problems with certain characters in file names." : "Dies bedeutet, dass Probleme mit bestimmten Zeichen in den Dateinamen geben kann.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Wir empfehlen dringend, die erforderlichen Pakete auf Ihrem System zu installieren, damit eine der folgenden Gebietsschemas unterstützt wird: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Wir empfehlen dringend, die erforderlichen Pakete auf Ihrem System zu installieren, damit eine der folgenden Gebietsschemas unterstützt wird: %s.",
"URL generation in notification emails" : "URL-Generierung in Mail-Benachrichtungen",
"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\")" : "Wenn sich Deine Installation nicht im Wurzelverzeichnis der Domain befindet und Cron aus dem System genutzt wird, kann es zu Fehlern bei der URL-Generierung kommen. Um dies zu verhindern, setze bitte die \"overwritewebroot\"-Option in Deiner config.php auf das Web-Wurzelverzeichnis Deiner Installation (Vorschlag: \"%s\").",
"Connectivity Checks" : "Verbindungsüberprüfungen",
@@ -222,7 +222,7 @@ OC.L10N.register(
"Create" : "Anlegen",
"Admin Recovery Password" : "Admin-Wiederherstellungspasswort",
"Enter the recovery password in order to recover the users files during password change" : "Gib das Wiederherstellungspasswort ein, um die Benutzerdateien während Passwortänderung wiederherzustellen",
- "Search Users and Groups" : "Nutzer und Gruppen suchen",
+ "Search Users" : "Nutzer suchen",
"Add Group" : "Gruppe hinzufügen",
"Group" : "Gruppe",
"Everyone" : "Jeder",
diff --git a/settings/l10n/de.json b/settings/l10n/de.json
index b345d6b6540..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,14 +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'" : "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",
"System locale can not be set to a one which supports UTF-8." : "Systemgebietsschema kann nicht auf eine UTF-8 unterstützende eingestellt werden.",
"This means that there might be problems with certain characters in file names." : "Dies bedeutet, dass Probleme mit bestimmten Zeichen in den Dateinamen geben kann.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Wir empfehlen dringend, die erforderlichen Pakete auf Ihrem System zu installieren, damit eine der folgenden Gebietsschemas unterstützt wird: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Wir empfehlen dringend, die erforderlichen Pakete auf Ihrem System zu installieren, damit eine der folgenden Gebietsschemas unterstützt wird: %s.",
"URL generation in notification emails" : "URL-Generierung in Mail-Benachrichtungen",
"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\")" : "Wenn sich Deine Installation nicht im Wurzelverzeichnis der Domain befindet und Cron aus dem System genutzt wird, kann es zu Fehlern bei der URL-Generierung kommen. Um dies zu verhindern, setze bitte die \"overwritewebroot\"-Option in Deiner config.php auf das Web-Wurzelverzeichnis Deiner Installation (Vorschlag: \"%s\").",
"Connectivity Checks" : "Verbindungsüberprüfungen",
@@ -220,7 +220,7 @@
"Create" : "Anlegen",
"Admin Recovery Password" : "Admin-Wiederherstellungspasswort",
"Enter the recovery password in order to recover the users files during password change" : "Gib das Wiederherstellungspasswort ein, um die Benutzerdateien während Passwortänderung wiederherzustellen",
- "Search Users and Groups" : "Nutzer und Gruppen suchen",
+ "Search Users" : "Nutzer suchen",
"Add Group" : "Gruppe hinzufügen",
"Group" : "Gruppe",
"Everyone" : "Jeder",
diff --git a/settings/l10n/de_DE.js b/settings/l10n/de_DE.js
index ae1249a2c51..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,14 +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'" : "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",
"System locale can not be set to a one which supports UTF-8." : "Systemgebietsschema kann nicht auf eine UTF-8 unterstützende eingestellt werden.",
"This means that there might be problems with certain characters in file names." : "Dieses bedeutet, dass es Probleme mit bestimmten Zeichen in den Dateinamen geben kann.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Wir empfehlen dringend, die erforderlichen Pakete auf Ihrem System zu installieren, damit eine der folgenden Gebietsschemas unterstützt wird: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Wir empfehlen dringend, die erforderlichen Pakete auf Ihrem System zu installieren, damit eine der folgenden Gebietsschemas unterstützt wird: %s.",
"URL generation in notification emails" : "Adresserstellung in E-Mail-Benachrichtungen",
"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\")" : "Wenn sich Ihre Installation nicht im Wurzelverzeichnis der Domain befindet und Cron aus dem System genutzt wird, kann es zu Fehlern bei der Adresserstellung kommen. Um dieses zu verhindern, stellen Sie bitte die »overwritewebroot«-Option in Ihrer config.php auf das Internetwurzelverzeichnis Ihrer Installation (Vorschlag: »%s«).",
"Connectivity Checks" : "Verbindungsüberprüfungen",
@@ -222,7 +222,7 @@ OC.L10N.register(
"Create" : "Erstellen",
"Admin Recovery Password" : "Admin-Passwort-Wiederherstellung",
"Enter the recovery password in order to recover the users files during password change" : "Geben Sie das Wiederherstellungspasswort ein, um die Benutzerdateien während Passwortänderung wiederherzustellen",
- "Search Users and Groups" : "Benutzer und Gruppen suchen",
+ "Search Users" : "Nutzer suchen",
"Add Group" : "Gruppe hinzufügen",
"Group" : "Gruppe",
"Everyone" : "Jeder",
diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json
index a2ad5a222df..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,14 +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'" : "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",
"System locale can not be set to a one which supports UTF-8." : "Systemgebietsschema kann nicht auf eine UTF-8 unterstützende eingestellt werden.",
"This means that there might be problems with certain characters in file names." : "Dieses bedeutet, dass es Probleme mit bestimmten Zeichen in den Dateinamen geben kann.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Wir empfehlen dringend, die erforderlichen Pakete auf Ihrem System zu installieren, damit eine der folgenden Gebietsschemas unterstützt wird: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Wir empfehlen dringend, die erforderlichen Pakete auf Ihrem System zu installieren, damit eine der folgenden Gebietsschemas unterstützt wird: %s.",
"URL generation in notification emails" : "Adresserstellung in E-Mail-Benachrichtungen",
"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\")" : "Wenn sich Ihre Installation nicht im Wurzelverzeichnis der Domain befindet und Cron aus dem System genutzt wird, kann es zu Fehlern bei der Adresserstellung kommen. Um dieses zu verhindern, stellen Sie bitte die »overwritewebroot«-Option in Ihrer config.php auf das Internetwurzelverzeichnis Ihrer Installation (Vorschlag: »%s«).",
"Connectivity Checks" : "Verbindungsüberprüfungen",
@@ -220,7 +220,7 @@
"Create" : "Erstellen",
"Admin Recovery Password" : "Admin-Passwort-Wiederherstellung",
"Enter the recovery password in order to recover the users files during password change" : "Geben Sie das Wiederherstellungspasswort ein, um die Benutzerdateien während Passwortänderung wiederherzustellen",
- "Search Users and Groups" : "Benutzer und Gruppen suchen",
+ "Search Users" : "Nutzer suchen",
"Add Group" : "Gruppe hinzufügen",
"Group" : "Gruppe",
"Everyone" : "Jeder",
diff --git a/settings/l10n/el.js b/settings/l10n/el.js
index c10f68207ff..545b39b7687 100644
--- a/settings/l10n/el.js
+++ b/settings/l10n/el.js
@@ -110,14 +110,11 @@ 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" : "Η μετάφραση δεν δουλεύει",
"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 to install 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\")" : "Αν η εγκατάστασή σας δεν είναι εγκατεστημένη στη ρίζα της περιοχής και χρησιμοποιεί το cron του συστήματος, μπορεί να υπάρξουν ζητήματα με τη δημιουργία URL. Για να αποφύγετε αυτά τα προβλήματα, παρακαλώ ρυθμίστε την επιλογή \"overwritewebroot\" στον config.php φάκελό σας στη διαδρομή webroot της εγκατάστασής σας (Suggested: \"%s\")",
"No problems found" : "Δεν βρέθηκαν προβλήματα",
@@ -218,7 +215,6 @@ OC.L10N.register(
"Create" : "Δημιουργία",
"Admin Recovery Password" : "Κωδικός Επαναφοράς Διαχειριστή ",
"Enter the recovery password in order to recover the users files during password change" : "Εισάγετε το συνθηματικό ανάκτησης ώστε να ανακτήσετε τα αρχεία χρηστών κατά την αλλαγή συνθηματικού",
- "Search Users and Groups" : "Αναζήτηση Χρηστών και Ομάδων",
"Add Group" : "Προσθήκη Ομάδας",
"Group" : "Ομάδα",
"Everyone" : "Όλοι",
diff --git a/settings/l10n/el.json b/settings/l10n/el.json
index 05388c7408f..7ac46e926d0 100644
--- a/settings/l10n/el.json
+++ b/settings/l10n/el.json
@@ -108,14 +108,11 @@
"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" : "Η μετάφραση δεν δουλεύει",
"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 to install 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\")" : "Αν η εγκατάστασή σας δεν είναι εγκατεστημένη στη ρίζα της περιοχής και χρησιμοποιεί το cron του συστήματος, μπορεί να υπάρξουν ζητήματα με τη δημιουργία URL. Για να αποφύγετε αυτά τα προβλήματα, παρακαλώ ρυθμίστε την επιλογή \"overwritewebroot\" στον config.php φάκελό σας στη διαδρομή webroot της εγκατάστασής σας (Suggested: \"%s\")",
"No problems found" : "Δεν βρέθηκαν προβλήματα",
@@ -216,7 +213,6 @@
"Create" : "Δημιουργία",
"Admin Recovery Password" : "Κωδικός Επαναφοράς Διαχειριστή ",
"Enter the recovery password in order to recover the users files during password change" : "Εισάγετε το συνθηματικό ανάκτησης ώστε να ανακτήσετε τα αρχεία χρηστών κατά την αλλαγή συνθηματικού",
- "Search Users and Groups" : "Αναζήτηση Χρηστών και Ομάδων",
"Add Group" : "Προσθήκη Ομάδας",
"Group" : "Ομάδα",
"Everyone" : "Όλοι",
diff --git a/settings/l10n/en_GB.js b/settings/l10n/en_GB.js
index 9d2358b6cbd..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,14 +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'" : "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",
"System locale can not be set to a one which supports UTF-8." : "System locale can not be set to a one which supports UTF-8.",
"This means that there might be problems with certain characters in file names." : "This means that there might be problems with certain characters in file names.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "We strongly suggest installing the required packages on your system to support one of the following locales: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "We strongly suggest installing the required packages on your system to support one of the following locales: %s.",
"URL generation in notification emails" : "URL generation in notification emails",
"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\")" : "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\")",
"Connectivity Checks" : "Connectivity Checks",
@@ -222,7 +222,7 @@ OC.L10N.register(
"Create" : "Create",
"Admin Recovery Password" : "Admin Recovery Password",
"Enter the recovery password in order to recover the users files during password change" : "Enter the recovery password in order to recover the user's files during password change",
- "Search Users and Groups" : "Search Users and Groups",
+ "Search Users" : "Search Users",
"Add Group" : "Add Group",
"Group" : "Group",
"Everyone" : "Everyone",
diff --git a/settings/l10n/en_GB.json b/settings/l10n/en_GB.json
index 1991825e663..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,14 +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'" : "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",
"System locale can not be set to a one which supports UTF-8." : "System locale can not be set to a one which supports UTF-8.",
"This means that there might be problems with certain characters in file names." : "This means that there might be problems with certain characters in file names.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "We strongly suggest installing the required packages on your system to support one of the following locales: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "We strongly suggest installing the required packages on your system to support one of the following locales: %s.",
"URL generation in notification emails" : "URL generation in notification emails",
"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\")" : "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\")",
"Connectivity Checks" : "Connectivity Checks",
@@ -220,7 +220,7 @@
"Create" : "Create",
"Admin Recovery Password" : "Admin Recovery Password",
"Enter the recovery password in order to recover the users files during password change" : "Enter the recovery password in order to recover the user's files during password change",
- "Search Users and Groups" : "Search Users and Groups",
+ "Search Users" : "Search Users",
"Add Group" : "Add Group",
"Group" : "Group",
"Everyone" : "Everyone",
diff --git a/settings/l10n/eo.js b/settings/l10n/eo.js
index ca5eeb55d71..ff757ce143c 100644
--- a/settings/l10n/eo.js
+++ b/settings/l10n/eo.js
@@ -137,7 +137,6 @@ OC.L10N.register(
"Delete Encryption Keys" : "Forigi ĉifroklavojn",
"Username" : "Uzantonomo",
"Create" : "Krei",
- "Search Users and Groups" : "Serĉi uzantojn kaj grupojn",
"Add Group" : "Aldoni grupon",
"Group" : "Grupo",
"Everyone" : "Ĉiuj",
diff --git a/settings/l10n/eo.json b/settings/l10n/eo.json
index 584f1bbe127..35af2f7f22f 100644
--- a/settings/l10n/eo.json
+++ b/settings/l10n/eo.json
@@ -135,7 +135,6 @@
"Delete Encryption Keys" : "Forigi ĉifroklavojn",
"Username" : "Uzantonomo",
"Create" : "Krei",
- "Search Users and Groups" : "Serĉi uzantojn kaj grupojn",
"Add Group" : "Aldoni grupon",
"Group" : "Grupo",
"Everyone" : "Ĉiuj",
diff --git a/settings/l10n/es.js b/settings/l10n/es.js
index 5e86d9bbf02..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,14 +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'" : "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",
"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.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Es muy recomendable instalar los paquetes necesarios para poder soportar una de las siguientes configuraciones regionales: %s. ",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Es muy recomendable instalar los paquetes necesarios para poder soportar una de las siguientes configuraciones regionales: %s. ",
"URL generation in notification emails" : "Generación de URL en mensajes 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\")" : "Si su instalación no está ubicada en la raíz del dominio y usa el cron del sistema, puede haber problemas al generarse los URL. Para evitarlos, configure la opción \"overwritewebroot\" en su archivo config.php para que use la ruta de la raíz del sitio web de su instalación (sugerencia: \"%s\")",
"Connectivity Checks" : "Probar la Conectividad",
@@ -144,6 +144,8 @@ OC.L10N.register(
"These groups will still be able to receive shares, but not to initiate them." : "Estos grupos aún podrán recibir contenidos compartidos, pero no podrán, pero no podrán iniciarlos.",
"Enforce HTTPS" : "Forzar HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Forzar a los clientes a conectarse a %s por medio de una conexión cifrada.",
+ "Enforce HTTPS for subdomains" : "Forzar HTTPS para subdominios",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Obliga a los clientes a conectara %s y subdominios mediante una conexión cifrada.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Por favor, conéctese a su %s a través de HTTPS para habilitar o deshabilitar la aplicación de SSL.",
"This is used for sending out notifications." : "Esto se usa para enviar notificaciones.",
"Send mode" : "Modo de envío",
@@ -220,7 +222,7 @@ OC.L10N.register(
"Create" : "Crear",
"Admin Recovery Password" : "Recuperación de la contraseña de administración",
"Enter the recovery password in order to recover the users files during password change" : "Introduzca la contraseña de recuperación a fin de recuperar los archivos de los usuarios durante el cambio de contraseña.",
- "Search Users and Groups" : "Buscar usuarios y grupos",
+ "Search Users" : "Buscar usuarios",
"Add Group" : "Agregar grupo",
"Group" : "Grupo",
"Everyone" : "Todos",
diff --git a/settings/l10n/es.json b/settings/l10n/es.json
index 3f08f3573cd..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,14 +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'" : "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",
"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.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Es muy recomendable instalar los paquetes necesarios para poder soportar una de las siguientes configuraciones regionales: %s. ",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Es muy recomendable instalar los paquetes necesarios para poder soportar una de las siguientes configuraciones regionales: %s. ",
"URL generation in notification emails" : "Generación de URL en mensajes 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\")" : "Si su instalación no está ubicada en la raíz del dominio y usa el cron del sistema, puede haber problemas al generarse los URL. Para evitarlos, configure la opción \"overwritewebroot\" en su archivo config.php para que use la ruta de la raíz del sitio web de su instalación (sugerencia: \"%s\")",
"Connectivity Checks" : "Probar la Conectividad",
@@ -142,6 +142,8 @@
"These groups will still be able to receive shares, but not to initiate them." : "Estos grupos aún podrán recibir contenidos compartidos, pero no podrán, pero no podrán iniciarlos.",
"Enforce HTTPS" : "Forzar HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Forzar a los clientes a conectarse a %s por medio de una conexión cifrada.",
+ "Enforce HTTPS for subdomains" : "Forzar HTTPS para subdominios",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Obliga a los clientes a conectara %s y subdominios mediante una conexión cifrada.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Por favor, conéctese a su %s a través de HTTPS para habilitar o deshabilitar la aplicación de SSL.",
"This is used for sending out notifications." : "Esto se usa para enviar notificaciones.",
"Send mode" : "Modo de envío",
@@ -218,7 +220,7 @@
"Create" : "Crear",
"Admin Recovery Password" : "Recuperación de la contraseña de administración",
"Enter the recovery password in order to recover the users files during password change" : "Introduzca la contraseña de recuperación a fin de recuperar los archivos de los usuarios durante el cambio de contraseña.",
- "Search Users and Groups" : "Buscar usuarios y grupos",
+ "Search Users" : "Buscar usuarios",
"Add Group" : "Agregar grupo",
"Group" : "Grupo",
"Everyone" : "Todos",
diff --git a/settings/l10n/es_AR.js b/settings/l10n/es_AR.js
index f6a36390253..b681fa8d077 100644
--- a/settings/l10n/es_AR.js
+++ b/settings/l10n/es_AR.js
@@ -80,12 +80,9 @@ 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.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Se sugiere fuertemente instalar los paquetes requeridos en su sistema para soportar uno de las siguientes localizaciones: %s.",
"Please double check the <a href='%s'>installation guides</a>." : "Por favor, comprobá nuevamente la <a href='%s'>guía de instalación</a>.",
"Execute one task with each page loaded" : "Ejecutá una tarea con cada pagina cargada.",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php está registrado en el servicio webcron para llamarlo cada 15 minutos usando http.",
diff --git a/settings/l10n/es_AR.json b/settings/l10n/es_AR.json
index 772b62cef52..14ce77fbb88 100644
--- a/settings/l10n/es_AR.json
+++ b/settings/l10n/es_AR.json
@@ -78,12 +78,9 @@
"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.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Se sugiere fuertemente instalar los paquetes requeridos en su sistema para soportar uno de las siguientes localizaciones: %s.",
"Please double check the <a href='%s'>installation guides</a>." : "Por favor, comprobá nuevamente la <a href='%s'>guía de instalación</a>.",
"Execute one task with each page loaded" : "Ejecutá una tarea con cada pagina cargada.",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php está registrado en el servicio webcron para llamarlo cada 15 minutos usando http.",
diff --git a/settings/l10n/es_MX.js b/settings/l10n/es_MX.js
index 02e7e40b96e..ff7bc009b82 100644
--- a/settings/l10n/es_MX.js
+++ b/settings/l10n/es_MX.js
@@ -63,12 +63,9 @@ 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.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Es muy recomendable instalar los paquetes necesarios para poder soportar una de las siguientes configuraciones regionales: %s. ",
"Please double check the <a href='%s'>installation guides</a>." : "Por favor, vuelva a comprobar las <a href='%s'>guías de instalación</a>.",
"Execute one task with each page loaded" : "Ejecutar una tarea con cada página cargada",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php se registra en un servicio webcron para llamar a cron.php cada 15 minutos a través de HTTP.",
diff --git a/settings/l10n/es_MX.json b/settings/l10n/es_MX.json
index e3c065f6315..8e6456ec85b 100644
--- a/settings/l10n/es_MX.json
+++ b/settings/l10n/es_MX.json
@@ -61,12 +61,9 @@
"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.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Es muy recomendable instalar los paquetes necesarios para poder soportar una de las siguientes configuraciones regionales: %s. ",
"Please double check the <a href='%s'>installation guides</a>." : "Por favor, vuelva a comprobar las <a href='%s'>guías de instalación</a>.",
"Execute one task with each page loaded" : "Ejecutar una tarea con cada página cargada",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php se registra en un servicio webcron para llamar a cron.php cada 15 minutos a través de HTTP.",
diff --git a/settings/l10n/et_EE.js b/settings/l10n/et_EE.js
index a01c375f15a..18d7cff60f9 100644
--- a/settings/l10n/et_EE.js
+++ b/settings/l10n/et_EE.js
@@ -110,14 +110,11 @@ 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",
"System locale can not be set to a one which supports UTF-8." : "Süsteemi lokaliseeringuks ei saa panna sellist, mis toetab UTF-8-t.",
"This means that there might be problems with certain characters in file names." : "See tähendab, et võib esineda probleeme failide nimedes mõnede sümbolitega.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Soovitame tungivalt paigaldada vajalikud paketid oma süsteemi tagamaks tuge järgmistele lokaliseeringutele: %s.",
"URL generation in notification emails" : "URL-ide loomine teavituskirjades",
"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\")" : "Kui sinu sait pole paigaldatud domeeni juurkausta ja see kasutab ajastatud tegevusi, siis võib tekkide probleeme URL-ide loomisega. Nende probleemide vältimiseks sisesta palun failis config.php valikusse \"overwritewebroot\" oma veebiserveri juurkaust (Soovituslik: \"%s\")",
"Connectivity Checks" : "Ühenduse kontrollid",
@@ -222,7 +219,6 @@ OC.L10N.register(
"Create" : "Lisa",
"Admin Recovery Password" : "Admini parooli taastamine",
"Enter the recovery password in order to recover the users files during password change" : "Sisesta taasteparool kasutaja failide taastamiseks paroolivahetuse käigus",
- "Search Users and Groups" : "Otsi kasutajaid ja gruppe",
"Add Group" : "Lisa grupp",
"Group" : "Grupp",
"Everyone" : "Igaüks",
diff --git a/settings/l10n/et_EE.json b/settings/l10n/et_EE.json
index 478545ed065..0b2c35b5f1f 100644
--- a/settings/l10n/et_EE.json
+++ b/settings/l10n/et_EE.json
@@ -108,14 +108,11 @@
"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",
"System locale can not be set to a one which supports UTF-8." : "Süsteemi lokaliseeringuks ei saa panna sellist, mis toetab UTF-8-t.",
"This means that there might be problems with certain characters in file names." : "See tähendab, et võib esineda probleeme failide nimedes mõnede sümbolitega.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Soovitame tungivalt paigaldada vajalikud paketid oma süsteemi tagamaks tuge järgmistele lokaliseeringutele: %s.",
"URL generation in notification emails" : "URL-ide loomine teavituskirjades",
"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\")" : "Kui sinu sait pole paigaldatud domeeni juurkausta ja see kasutab ajastatud tegevusi, siis võib tekkide probleeme URL-ide loomisega. Nende probleemide vältimiseks sisesta palun failis config.php valikusse \"overwritewebroot\" oma veebiserveri juurkaust (Soovituslik: \"%s\")",
"Connectivity Checks" : "Ühenduse kontrollid",
@@ -220,7 +217,6 @@
"Create" : "Lisa",
"Admin Recovery Password" : "Admini parooli taastamine",
"Enter the recovery password in order to recover the users files during password change" : "Sisesta taasteparool kasutaja failide taastamiseks paroolivahetuse käigus",
- "Search Users and Groups" : "Otsi kasutajaid ja gruppe",
"Add Group" : "Lisa grupp",
"Group" : "Grupp",
"Everyone" : "Igaüks",
diff --git a/settings/l10n/eu.js b/settings/l10n/eu.js
index 3a5ba67ed83..eeff2dd7dbd 100644
--- a/settings/l10n/eu.js
+++ b/settings/l10n/eu.js
@@ -108,14 +108,11 @@ 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",
"System locale can not be set to a one which supports UTF-8." : "Eskualdeko ezarpena ezin da UTF-8 onartzen duen batera ezarri.",
"This means that there might be problems with certain characters in file names." : "Honek esan nahi du fitxategien izenetako karaktere batzuekin arazoak egon daitezkeela.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Biziki gomendatzen dizugu beharrezkoak diren paketea zure sisteman instalatzea honi euskarria eman ahal izateko: %s.",
"URL generation in notification emails" : "URL sorrera jakinarazpen mezuetan",
"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\")" : "Zure instalazioa ez badago domeinuaren sustraian egina eta erabiltzen badu sistemaren cron-a, arazoak izan daitezke URL sorreran. Arazo horiek saihesteko ezarri \"overwritewebroot\" opzioa zure config.php fitxategian zure instalazioaren webroot bidera (Proposatua: \"%s\")",
"No problems found" : "Ez da problemarik aurkitu",
@@ -213,7 +210,6 @@ OC.L10N.register(
"Create" : "Sortu",
"Admin Recovery Password" : "Administratzailearen pasahitza berreskuratzea",
"Enter the recovery password in order to recover the users files during password change" : "Berreskuratze pasahitza idatzi pasahitz aldaketan erabiltzaileen fitxategiak berreskuratzeko",
- "Search Users and Groups" : "Bilatu erabiltzaileak eta taldeak",
"Add Group" : "Gehitu taldea",
"Group" : "Taldea",
"Everyone" : "Edonor",
diff --git a/settings/l10n/eu.json b/settings/l10n/eu.json
index 0668428251b..3405967c4a9 100644
--- a/settings/l10n/eu.json
+++ b/settings/l10n/eu.json
@@ -106,14 +106,11 @@
"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",
"System locale can not be set to a one which supports UTF-8." : "Eskualdeko ezarpena ezin da UTF-8 onartzen duen batera ezarri.",
"This means that there might be problems with certain characters in file names." : "Honek esan nahi du fitxategien izenetako karaktere batzuekin arazoak egon daitezkeela.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Biziki gomendatzen dizugu beharrezkoak diren paketea zure sisteman instalatzea honi euskarria eman ahal izateko: %s.",
"URL generation in notification emails" : "URL sorrera jakinarazpen mezuetan",
"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\")" : "Zure instalazioa ez badago domeinuaren sustraian egina eta erabiltzen badu sistemaren cron-a, arazoak izan daitezke URL sorreran. Arazo horiek saihesteko ezarri \"overwritewebroot\" opzioa zure config.php fitxategian zure instalazioaren webroot bidera (Proposatua: \"%s\")",
"No problems found" : "Ez da problemarik aurkitu",
@@ -211,7 +208,6 @@
"Create" : "Sortu",
"Admin Recovery Password" : "Administratzailearen pasahitza berreskuratzea",
"Enter the recovery password in order to recover the users files during password change" : "Berreskuratze pasahitza idatzi pasahitz aldaketan erabiltzaileen fitxategiak berreskuratzeko",
- "Search Users and Groups" : "Bilatu erabiltzaileak eta taldeak",
"Add Group" : "Gehitu taldea",
"Group" : "Taldea",
"Everyone" : "Edonor",
diff --git a/settings/l10n/fa.js b/settings/l10n/fa.js
index 45ece7beff6..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 اجرا شد.",
@@ -170,7 +169,6 @@ OC.L10N.register(
"Create" : "ایجاد کردن",
"Admin Recovery Password" : "مدیریت بازیابی رمز عبور",
"Enter the recovery password in order to recover the users files during password change" : "در حین تغییر رمز عبور به منظور بازیابی فایل های کاربران، رمز عبور بازیابی را وارد کنید",
- "Search Users and Groups" : "جستجوی کاربران و گروه ها",
"Add Group" : "افزودن گروه",
"Group" : "گروه",
"Everyone" : "همه",
diff --git a/settings/l10n/fa.json b/settings/l10n/fa.json
index c91afde0fdb..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 اجرا شد.",
@@ -168,7 +167,6 @@
"Create" : "ایجاد کردن",
"Admin Recovery Password" : "مدیریت بازیابی رمز عبور",
"Enter the recovery password in order to recover the users files during password change" : "در حین تغییر رمز عبور به منظور بازیابی فایل های کاربران، رمز عبور بازیابی را وارد کنید",
- "Search Users and Groups" : "جستجوی کاربران و گروه ها",
"Add Group" : "افزودن گروه",
"Group" : "گروه",
"Everyone" : "همه",
diff --git a/settings/l10n/fi_FI.js b/settings/l10n/fi_FI.js
index 18037bed46d..5d23d380e62 100644
--- a/settings/l10n/fi_FI.js
+++ b/settings/l10n/fi_FI.js
@@ -102,19 +102,18 @@ 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",
"System locale can not be set to a one which supports UTF-8." : "Järjestelmän maa-asetusta ei voi asettaa UTF-8:aa tukevaksi.",
"This means that there might be problems with certain characters in file names." : "Tämä tarkoittaa, että tiettyjen merkkien kanssa tiedostojen nimissä saattaa olla ongelmia.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Suosittelemme vahvasti asentamaan vaaditut paketit järjestelmään, jotta jotain seuraavista maa-asetuksista on mahdollista tukea: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Suosittelemme asentamaan vaaditut paketit järjestelmään, jotta järjestelmässä on tuki yhdelle seuraavista maa-asetuksista: %s.",
"URL generation in notification emails" : "Verkko-osoitteiden luominen sähköposti-ilmoituksissa",
"No problems found" : "Ongelmia ei löytynyt",
"Please double check the <a href='%s'>installation guides</a>." : "Lue tarkasti <a href='%s'>asennusohjeet</a>.",
@@ -214,7 +213,7 @@ OC.L10N.register(
"Username" : "Käyttäjätunnus",
"Create" : "Luo",
"Admin Recovery Password" : "Ylläpitäjän palautussalasana",
- "Search Users and Groups" : "Etsi käyttäjiä ja ryhmiä",
+ "Search Users" : "Etsi käyttäjiä",
"Add Group" : "Lisää ryhmä",
"Group" : "Ryhmä",
"Everyone" : "Kaikki",
diff --git a/settings/l10n/fi_FI.json b/settings/l10n/fi_FI.json
index b44ff19ad29..856e2117bf7 100644
--- a/settings/l10n/fi_FI.json
+++ b/settings/l10n/fi_FI.json
@@ -100,19 +100,18 @@
"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",
"System locale can not be set to a one which supports UTF-8." : "Järjestelmän maa-asetusta ei voi asettaa UTF-8:aa tukevaksi.",
"This means that there might be problems with certain characters in file names." : "Tämä tarkoittaa, että tiettyjen merkkien kanssa tiedostojen nimissä saattaa olla ongelmia.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Suosittelemme vahvasti asentamaan vaaditut paketit järjestelmään, jotta jotain seuraavista maa-asetuksista on mahdollista tukea: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Suosittelemme asentamaan vaaditut paketit järjestelmään, jotta järjestelmässä on tuki yhdelle seuraavista maa-asetuksista: %s.",
"URL generation in notification emails" : "Verkko-osoitteiden luominen sähköposti-ilmoituksissa",
"No problems found" : "Ongelmia ei löytynyt",
"Please double check the <a href='%s'>installation guides</a>." : "Lue tarkasti <a href='%s'>asennusohjeet</a>.",
@@ -212,7 +211,7 @@
"Username" : "Käyttäjätunnus",
"Create" : "Luo",
"Admin Recovery Password" : "Ylläpitäjän palautussalasana",
- "Search Users and Groups" : "Etsi käyttäjiä ja ryhmiä",
+ "Search Users" : "Etsi käyttäjiä",
"Add Group" : "Lisää ryhmä",
"Group" : "Ryhmä",
"Everyone" : "Kaikki",
diff --git a/settings/l10n/fr.js b/settings/l10n/fr.js
index 8fb3b2270a1..651f6608207 100644
--- a/settings/l10n/fr.js
+++ b/settings/l10n/fr.js
@@ -110,21 +110,19 @@ 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",
"System locale can not be set to a one which supports UTF-8." : "Les paramètres régionaux ne peuvent pas être configurés avec prise en charge d'UTF-8.",
"This means that there might be problems with certain characters in file names." : "Cela signifie qu'il pourrait y avoir des problèmes avec certains caractères dans les noms de fichier.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Nous conseillons vivement d'installer sur votre système les paquets nécessaires à la prise en charge de l'un des paramètres régionaux suivants : %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Nous vous recommandons d'installer sur votre système les paquets requis à la prise en charge de l'un des paramètres régionaux suivants : %s",
"URL generation in notification emails" : "Génération d'URL dans les mails de notification",
"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\")" : "Si votre installation n'a pas été effectuée à la racine du domaine et qu'elle utilise le cron du système, il peut y avoir des problèmes avec la génération d'URL. Pour les éviter, veuillez configurer l'option \"overwritewebroot\" de votre fichier config.php avec le chemin de la racine de votre installation (suggéré : \"%s\")",
"Connectivity Checks" : "Vérification de la connectivité",
"No problems found" : "Aucun problème trouvé",
"Please double check the <a href='%s'>installation guides</a>." : "Veuillez vous référer au <a href='%s'>guide d'installation</a>.",
- "Last cron was executed at %s." : "Le dernier cron s'est exécuté à %s.",
- "Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Le dernier cron s'est exécuté à %s. Cela fait plus d'une heure, quelque chose a du mal se passer.",
+ "Last cron was executed at %s." : "Le dernier cron s'est exécuté à la date suivante : %s.",
+ "Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Le dernier cron s'est exécuté à la date suivante : %s. Cela fait plus d'une heure, quelque chose a du mal se passer.",
"Cron was not executed yet!" : "Le cron n'a pas encore été exécuté !",
"Execute one task with each page loaded" : "Exécute une tâche à chaque chargement de page",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php est enregistré en tant que service webcron pour appeler cron.php toutes les 15 minutes via http.",
@@ -222,7 +220,7 @@ OC.L10N.register(
"Create" : "Créer",
"Admin Recovery Password" : "Récupération du mot de passe administrateur",
"Enter the recovery password in order to recover the users files during password change" : "Entrez le mot de passe de récupération pour récupérer les fichiers utilisateurs pendant le changement de mot de passe",
- "Search Users and Groups" : "Chercher parmi les utilisateurs et groupes",
+ "Search Users" : "Recherche des utilisateurs",
"Add Group" : "Ajouter un groupe",
"Group" : "Groupe",
"Everyone" : "Tout le monde",
diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json
index 2ee4d13454f..450b5542985 100644
--- a/settings/l10n/fr.json
+++ b/settings/l10n/fr.json
@@ -108,21 +108,19 @@
"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",
"System locale can not be set to a one which supports UTF-8." : "Les paramètres régionaux ne peuvent pas être configurés avec prise en charge d'UTF-8.",
"This means that there might be problems with certain characters in file names." : "Cela signifie qu'il pourrait y avoir des problèmes avec certains caractères dans les noms de fichier.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Nous conseillons vivement d'installer sur votre système les paquets nécessaires à la prise en charge de l'un des paramètres régionaux suivants : %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Nous vous recommandons d'installer sur votre système les paquets requis à la prise en charge de l'un des paramètres régionaux suivants : %s",
"URL generation in notification emails" : "Génération d'URL dans les mails de notification",
"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\")" : "Si votre installation n'a pas été effectuée à la racine du domaine et qu'elle utilise le cron du système, il peut y avoir des problèmes avec la génération d'URL. Pour les éviter, veuillez configurer l'option \"overwritewebroot\" de votre fichier config.php avec le chemin de la racine de votre installation (suggéré : \"%s\")",
"Connectivity Checks" : "Vérification de la connectivité",
"No problems found" : "Aucun problème trouvé",
"Please double check the <a href='%s'>installation guides</a>." : "Veuillez vous référer au <a href='%s'>guide d'installation</a>.",
- "Last cron was executed at %s." : "Le dernier cron s'est exécuté à %s.",
- "Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Le dernier cron s'est exécuté à %s. Cela fait plus d'une heure, quelque chose a du mal se passer.",
+ "Last cron was executed at %s." : "Le dernier cron s'est exécuté à la date suivante : %s.",
+ "Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Le dernier cron s'est exécuté à la date suivante : %s. Cela fait plus d'une heure, quelque chose a du mal se passer.",
"Cron was not executed yet!" : "Le cron n'a pas encore été exécuté !",
"Execute one task with each page loaded" : "Exécute une tâche à chaque chargement de page",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php est enregistré en tant que service webcron pour appeler cron.php toutes les 15 minutes via http.",
@@ -220,7 +218,7 @@
"Create" : "Créer",
"Admin Recovery Password" : "Récupération du mot de passe administrateur",
"Enter the recovery password in order to recover the users files during password change" : "Entrez le mot de passe de récupération pour récupérer les fichiers utilisateurs pendant le changement de mot de passe",
- "Search Users and Groups" : "Chercher parmi les utilisateurs et groupes",
+ "Search Users" : "Recherche des utilisateurs",
"Add Group" : "Ajouter un groupe",
"Group" : "Groupe",
"Everyone" : "Tout le monde",
diff --git a/settings/l10n/gl.js b/settings/l10n/gl.js
index 778020d821e..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,14 +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 to install the required packages on your system to support one of the following locales: %s." : "Recomendamoslle que instale no sistema os paquetes necesarios para admitir unha das seguintes configuracións rexionais: %s.",
+ "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",
@@ -144,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",
@@ -220,7 +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 and Groups" : "Buscar usuarios e grupos",
+ "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 3ceb32390dd..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,14 +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 to install the required packages on your system to support one of the following locales: %s." : "Recomendamoslle que instale no sistema os paquetes necesarios para admitir unha das seguintes configuracións rexionais: %s.",
+ "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",
@@ -142,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",
@@ -218,7 +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 and Groups" : "Buscar usuarios e grupos",
+ "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 806ec98e984..ff690b743e3 100644
--- a/settings/l10n/hr.js
+++ b/settings/l10n/hr.js
@@ -104,14 +104,11 @@ 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",
"System locale can not be set to a one which supports UTF-8." : "Regionalnu shemu sustava nemoguće je postaviti na neku koja podržava UTF-8.",
"This means that there might be problems with certain characters in file names." : "To znači da se mogu javiti problemi s određenim znakovima u datoteci.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Toplo preporučpujemo da u svoj sustav instalirate potrebne pakete koji će podržatijednu od sljedećih regionalnih shema: %s.",
"URL generation in notification emails" : "Generiranje URL-a u notifikacijskoj e-pošti",
"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\")" : "Ako vaša instalacija nije instalirana u korijenu domene i koristi sustav cron,mogu se javiti problemi s generiranjem URL. Da biste takve probleme izbjegli,molimo postavite opciju \"overwritewebroot\" u vašoj datoteci config.php.na webroot path vaše instalacije (Predlažemo: \"%s\").",
"Please double check the <a href='%s'>installation guides</a>." : "Molimo provjerite <a href='%s'> instalacijske vodiče </a>.",
@@ -207,7 +204,6 @@ OC.L10N.register(
"Create" : "Kreirajte",
"Admin Recovery Password" : "Admin lozinka za oporavak",
"Enter the recovery password in order to recover the users files during password change" : "Unesite lozinku za oporavak da biste oporavili korisničke datoteke tijekom promjene lozinke",
- "Search Users and Groups" : "Pretražite korisnike i grupe",
"Add Group" : "Dodajte grupu",
"Group" : "Grupa",
"Everyone" : "Svi",
diff --git a/settings/l10n/hr.json b/settings/l10n/hr.json
index 258a54c6f64..4f28ba64adc 100644
--- a/settings/l10n/hr.json
+++ b/settings/l10n/hr.json
@@ -102,14 +102,11 @@
"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",
"System locale can not be set to a one which supports UTF-8." : "Regionalnu shemu sustava nemoguće je postaviti na neku koja podržava UTF-8.",
"This means that there might be problems with certain characters in file names." : "To znači da se mogu javiti problemi s određenim znakovima u datoteci.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Toplo preporučpujemo da u svoj sustav instalirate potrebne pakete koji će podržatijednu od sljedećih regionalnih shema: %s.",
"URL generation in notification emails" : "Generiranje URL-a u notifikacijskoj e-pošti",
"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\")" : "Ako vaša instalacija nije instalirana u korijenu domene i koristi sustav cron,mogu se javiti problemi s generiranjem URL. Da biste takve probleme izbjegli,molimo postavite opciju \"overwritewebroot\" u vašoj datoteci config.php.na webroot path vaše instalacije (Predlažemo: \"%s\").",
"Please double check the <a href='%s'>installation guides</a>." : "Molimo provjerite <a href='%s'> instalacijske vodiče </a>.",
@@ -205,7 +202,6 @@
"Create" : "Kreirajte",
"Admin Recovery Password" : "Admin lozinka za oporavak",
"Enter the recovery password in order to recover the users files during password change" : "Unesite lozinku za oporavak da biste oporavili korisničke datoteke tijekom promjene lozinke",
- "Search Users and Groups" : "Pretražite korisnike i grupe",
"Add Group" : "Dodajte grupu",
"Group" : "Grupa",
"Everyone" : "Svi",
diff --git a/settings/l10n/hu_HU.js b/settings/l10n/hu_HU.js
index 5b7c2f97771..4a83a78a977 100644
--- a/settings/l10n/hu_HU.js
+++ b/settings/l10n/hu_HU.js
@@ -104,14 +104,11 @@ 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",
"System locale can not be set to a one which supports UTF-8." : "A rendszer lokalizációs állományai között nem sikerült olyat beállítani, ami támogatja az UTF-8-at.",
"This means that there might be problems with certain characters in file names." : "Ez azt jelenti, hogy probléma lehet bizonyos karakterekkel a fájlnevekben.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Feltétlenül javasoljuk, hogy telepítse a szükséges csomagokat ahhoz, hogy a rendszere támogassa a következő lokalizációk valamelyikét: %s",
"URL generation in notification emails" : "URL-képzés az értesítő e-mailekben",
"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\")" : "Ha a telepítése nem a webkiszolgáló gyökerében van, és a rendszer cron szolgáltatását használja, akkor problémák lehetnek az URL-ek képzésével. Ezek elkerülése érdekében állítsa be a config.php-ban az \"overwritewebroot\" paramétert a telepítés által használt webútvonalra. (Javasolt beállítás: \"%s\")",
"Please double check the <a href='%s'>installation guides</a>." : "Kérjük tüzetesen tanulmányozza át a <a href='%s'>telepítési útmutatót</a>.",
@@ -201,7 +198,6 @@ OC.L10N.register(
"Create" : "Létrehozás",
"Admin Recovery Password" : "Adminisztrátori jelszó az állományok visszanyerésére",
"Enter the recovery password in order to recover the users files during password change" : "Adja meg az adatok visszanyeréséhez szükséges jelszót arra az esetre, ha a felhasználók megváltoztatják a jelszavukat",
- "Search Users and Groups" : "Keresés a felhasználók és a csoportok között",
"Add Group" : "Csoport létrehozása",
"Group" : "Csoport",
"Everyone" : "Mindenki",
diff --git a/settings/l10n/hu_HU.json b/settings/l10n/hu_HU.json
index 46616b5291b..01895bb8b9f 100644
--- a/settings/l10n/hu_HU.json
+++ b/settings/l10n/hu_HU.json
@@ -102,14 +102,11 @@
"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",
"System locale can not be set to a one which supports UTF-8." : "A rendszer lokalizációs állományai között nem sikerült olyat beállítani, ami támogatja az UTF-8-at.",
"This means that there might be problems with certain characters in file names." : "Ez azt jelenti, hogy probléma lehet bizonyos karakterekkel a fájlnevekben.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Feltétlenül javasoljuk, hogy telepítse a szükséges csomagokat ahhoz, hogy a rendszere támogassa a következő lokalizációk valamelyikét: %s",
"URL generation in notification emails" : "URL-képzés az értesítő e-mailekben",
"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\")" : "Ha a telepítése nem a webkiszolgáló gyökerében van, és a rendszer cron szolgáltatását használja, akkor problémák lehetnek az URL-ek képzésével. Ezek elkerülése érdekében állítsa be a config.php-ban az \"overwritewebroot\" paramétert a telepítés által használt webútvonalra. (Javasolt beállítás: \"%s\")",
"Please double check the <a href='%s'>installation guides</a>." : "Kérjük tüzetesen tanulmányozza át a <a href='%s'>telepítési útmutatót</a>.",
@@ -199,7 +196,6 @@
"Create" : "Létrehozás",
"Admin Recovery Password" : "Adminisztrátori jelszó az állományok visszanyerésére",
"Enter the recovery password in order to recover the users files during password change" : "Adja meg az adatok visszanyeréséhez szükséges jelszót arra az esetre, ha a felhasználók megváltoztatják a jelszavukat",
- "Search Users and Groups" : "Keresés a felhasználók és a csoportok között",
"Add Group" : "Csoport létrehozása",
"Group" : "Csoport",
"Everyone" : "Mindenki",
diff --git a/settings/l10n/id.js b/settings/l10n/id.js
index 74dfa4c9b0f..c772bc8127c 100644
--- a/settings/l10n/id.js
+++ b/settings/l10n/id.js
@@ -109,14 +109,11 @@ 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",
"System locale can not be set to a one which supports UTF-8." : "Sistem lokal tidak dapat diatur untuk satu yang mendukung UTF-8.",
"This means that there might be problems with certain characters in file names." : "Ini artinya mungkin ada masalah dengan karakter tertentu pada nama berkas.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Kami sangat menyarankan untuk menginstal paket yang dibutuhkan pada sistem agar mendukung salah satu bahasa berikut: %s.",
"URL generation in notification emails" : "URL dibuat dalam email pemberitahuan",
"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\")" : "Jika instalasi Anda tidak terinstal didalam root domain dan menggunakan cron sistem, ini dapat menyebabkan masalah dengan pembuatan URL. Untuk mencegah masalah ini, mohon atur opsi \"overwritewebroot\" didalam berkas config.php ke jalur lokasi webroot instalasi Anda (Disarankan: \"%s\")",
"No problems found" : "Masalah tidak ditemukan",
@@ -218,7 +215,6 @@ OC.L10N.register(
"Create" : "Buat",
"Admin Recovery Password" : "Sandi pemulihan Admin",
"Enter the recovery password in order to recover the users files during password change" : "Masukkan sandi pemulihan untuk memulihkan berkas pengguna saat penggantian sandi",
- "Search Users and Groups" : "Telusuri Pengguna dan Grup",
"Add Group" : "Tambah Grup",
"Group" : "Grup",
"Everyone" : "Semua orang",
diff --git a/settings/l10n/id.json b/settings/l10n/id.json
index 326ab4c6bca..5a507822b59 100644
--- a/settings/l10n/id.json
+++ b/settings/l10n/id.json
@@ -107,14 +107,11 @@
"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",
"System locale can not be set to a one which supports UTF-8." : "Sistem lokal tidak dapat diatur untuk satu yang mendukung UTF-8.",
"This means that there might be problems with certain characters in file names." : "Ini artinya mungkin ada masalah dengan karakter tertentu pada nama berkas.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Kami sangat menyarankan untuk menginstal paket yang dibutuhkan pada sistem agar mendukung salah satu bahasa berikut: %s.",
"URL generation in notification emails" : "URL dibuat dalam email pemberitahuan",
"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\")" : "Jika instalasi Anda tidak terinstal didalam root domain dan menggunakan cron sistem, ini dapat menyebabkan masalah dengan pembuatan URL. Untuk mencegah masalah ini, mohon atur opsi \"overwritewebroot\" didalam berkas config.php ke jalur lokasi webroot instalasi Anda (Disarankan: \"%s\")",
"No problems found" : "Masalah tidak ditemukan",
@@ -216,7 +213,6 @@
"Create" : "Buat",
"Admin Recovery Password" : "Sandi pemulihan Admin",
"Enter the recovery password in order to recover the users files during password change" : "Masukkan sandi pemulihan untuk memulihkan berkas pengguna saat penggantian sandi",
- "Search Users and Groups" : "Telusuri Pengguna dan Grup",
"Add Group" : "Tambah Grup",
"Group" : "Grup",
"Everyone" : "Semua orang",
diff --git a/settings/l10n/it.js b/settings/l10n/it.js
index d5a7a3259df..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,14 +111,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 è 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",
"System locale can not be set to a one which supports UTF-8." : "La localizzazione di sistema non può essere impostata a una che supporta UTF-8.",
"This means that there might be problems with certain characters in file names." : "Ciò significa che potrebbero esserci problemi con alcuni caratteri nei nomi dei file.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Consigliamo vivamente di installare i pacchetti richiesti sul tuo sistema per supportare una delle\nlocalizzazioni seguenti: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Consigliamo vivamente di installare i pacchetti richiesti sul tuo sistema per supportare una delle localizzazioni seguenti: %s.",
"URL generation in notification emails" : "Generazione di URL nelle email di notifica",
"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 la tua installazione non si trova nella radice del dominio e utilizza il cron di sistema, potrebbero esserci problemi con la generazione degli URL. Per evitare questi problemi, imposta l'opzione \"overwritewebroot\" nel file config.php al percorso della radice del sito della tua installazione (Suggerito: \"%s\")",
"Connectivity Checks" : "Controlli di connettività",
@@ -144,6 +143,8 @@ OC.L10N.register(
"These groups will still be able to receive shares, but not to initiate them." : "Questi gruppi saranno in grado di ricevere condivisioni, ma non iniziarle.",
"Enforce HTTPS" : "Forza HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Forza i client a connettersi a %s tramite una connessione cifrata.",
+ "Enforce HTTPS for subdomains" : "Forza HTTPS per i sottodomini",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Forza i client a connettersi a %s e ai sottodomini tramite una connessione cifrata.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Connettiti al tuo %s tramite HTTPS per abilitare o disabilitare l'applicazione di SSL.",
"This is used for sending out notifications." : "Viene utilizzato per inviare le notifiche.",
"Send mode" : "Modalità di invio",
@@ -220,7 +221,7 @@ OC.L10N.register(
"Create" : "Crea",
"Admin Recovery Password" : "Password di ripristino amministrativa",
"Enter the recovery password in order to recover the users files during password change" : "Digita la password di ripristino per recuperare i file degli utenti durante la modifica della password.",
- "Search Users and Groups" : "Cerca utenti e gruppi",
+ "Search Users" : "Cerca utenti",
"Add Group" : "Aggiungi gruppo",
"Group" : "Gruppo",
"Everyone" : "Chiunque",
diff --git a/settings/l10n/it.json b/settings/l10n/it.json
index 228c98c6068..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,14 +109,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 è 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",
"System locale can not be set to a one which supports UTF-8." : "La localizzazione di sistema non può essere impostata a una che supporta UTF-8.",
"This means that there might be problems with certain characters in file names." : "Ciò significa che potrebbero esserci problemi con alcuni caratteri nei nomi dei file.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Consigliamo vivamente di installare i pacchetti richiesti sul tuo sistema per supportare una delle\nlocalizzazioni seguenti: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Consigliamo vivamente di installare i pacchetti richiesti sul tuo sistema per supportare una delle localizzazioni seguenti: %s.",
"URL generation in notification emails" : "Generazione di URL nelle email di notifica",
"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 la tua installazione non si trova nella radice del dominio e utilizza il cron di sistema, potrebbero esserci problemi con la generazione degli URL. Per evitare questi problemi, imposta l'opzione \"overwritewebroot\" nel file config.php al percorso della radice del sito della tua installazione (Suggerito: \"%s\")",
"Connectivity Checks" : "Controlli di connettività",
@@ -142,6 +141,8 @@
"These groups will still be able to receive shares, but not to initiate them." : "Questi gruppi saranno in grado di ricevere condivisioni, ma non iniziarle.",
"Enforce HTTPS" : "Forza HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Forza i client a connettersi a %s tramite una connessione cifrata.",
+ "Enforce HTTPS for subdomains" : "Forza HTTPS per i sottodomini",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Forza i client a connettersi a %s e ai sottodomini tramite una connessione cifrata.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Connettiti al tuo %s tramite HTTPS per abilitare o disabilitare l'applicazione di SSL.",
"This is used for sending out notifications." : "Viene utilizzato per inviare le notifiche.",
"Send mode" : "Modalità di invio",
@@ -218,7 +219,7 @@
"Create" : "Crea",
"Admin Recovery Password" : "Password di ripristino amministrativa",
"Enter the recovery password in order to recover the users files during password change" : "Digita la password di ripristino per recuperare i file degli utenti durante la modifica della password.",
- "Search Users and Groups" : "Cerca utenti e gruppi",
+ "Search Users" : "Cerca utenti",
"Add Group" : "Aggiungi gruppo",
"Group" : "Gruppo",
"Everyone" : "Chiunque",
diff --git a/settings/l10n/ja.js b/settings/l10n/ja.js
index 4bc56102af4..572ae5511c8 100644
--- a/settings/l10n/ja.js
+++ b/settings/l10n/ja.js
@@ -110,14 +110,11 @@ 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" : "ロケールが動作していません",
"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 to install 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\")" : "もし、URLがドメインのルート(/)で終わっていない場合で、システムのcronを利用している場合、URLの生成に問題が発生します。その場合は、config.php ファイルの中の \"overwritewebroot\" オプションをインストールしたパスに設定してください。(推奨: \"%s\")",
"Connectivity Checks" : "接続の確認",
@@ -222,7 +219,6 @@ OC.L10N.register(
"Create" : "作成",
"Admin Recovery Password" : "管理者リカバリパスワード",
"Enter the recovery password in order to recover the users files during password change" : "パスワード変更時のユーザーのファイルを回復するため、リカバリパスワードを入力してください",
- "Search Users and Groups" : "ユーザーとグループを検索",
"Add Group" : "グループを追加",
"Group" : "グループ",
"Everyone" : "すべてのユーザー",
diff --git a/settings/l10n/ja.json b/settings/l10n/ja.json
index 0a01be40311..37048e345ac 100644
--- a/settings/l10n/ja.json
+++ b/settings/l10n/ja.json
@@ -108,14 +108,11 @@
"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" : "ロケールが動作していません",
"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 to install 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\")" : "もし、URLがドメインのルート(/)で終わっていない場合で、システムのcronを利用している場合、URLの生成に問題が発生します。その場合は、config.php ファイルの中の \"overwritewebroot\" オプションをインストールしたパスに設定してください。(推奨: \"%s\")",
"Connectivity Checks" : "接続の確認",
@@ -220,7 +217,6 @@
"Create" : "作成",
"Admin Recovery Password" : "管理者リカバリパスワード",
"Enter the recovery password in order to recover the users files during password change" : "パスワード変更時のユーザーのファイルを回復するため、リカバリパスワードを入力してください",
- "Search Users and Groups" : "ユーザーとグループを検索",
"Add Group" : "グループを追加",
"Group" : "グループ",
"Everyone" : "すべてのユーザー",
diff --git a/settings/l10n/ko.js b/settings/l10n/ko.js
index f669d5d1b25..e55c4c75dab 100644
--- a/settings/l10n/ko.js
+++ b/settings/l10n/ko.js
@@ -84,12 +84,9 @@ 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." : "파일 이름의 일부 문자에 문제가 생길 수도 있습니다.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "다음 로캘을 지원하도록 시스템 설정을 변경하는 것을 추천합니다: %s",
"Please double check the <a href='%s'>installation guides</a>." : "<a href='%s'>설치 가이드</a>를 다시 한 번 확인하십시오.",
"Execute one task with each page loaded" : "개별 페이지를 불러올 때마다 실행",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php는 webcron 서비스에 등록되어 HTTP로 15분마다 cron.php에 접근합니다.",
@@ -157,7 +154,6 @@ OC.L10N.register(
"Create" : "만들기",
"Admin Recovery Password" : "관리자 복구 암호",
"Enter the recovery password in order to recover the users files during password change" : "암호 변경 시 변경된 사용자 파일을 복구하려면 복구 암호를 입력하십시오",
- "Search Users and Groups" : "사용자와 그룹 검색",
"Add Group" : "그룹 추가",
"Group" : "그룹",
"Admins" : "관리자",
diff --git a/settings/l10n/ko.json b/settings/l10n/ko.json
index bde465dddc9..2415c30316d 100644
--- a/settings/l10n/ko.json
+++ b/settings/l10n/ko.json
@@ -82,12 +82,9 @@
"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." : "파일 이름의 일부 문자에 문제가 생길 수도 있습니다.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "다음 로캘을 지원하도록 시스템 설정을 변경하는 것을 추천합니다: %s",
"Please double check the <a href='%s'>installation guides</a>." : "<a href='%s'>설치 가이드</a>를 다시 한 번 확인하십시오.",
"Execute one task with each page loaded" : "개별 페이지를 불러올 때마다 실행",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php는 webcron 서비스에 등록되어 HTTP로 15분마다 cron.php에 접근합니다.",
@@ -155,7 +152,6 @@
"Create" : "만들기",
"Admin Recovery Password" : "관리자 복구 암호",
"Enter the recovery password in order to recover the users files during password change" : "암호 변경 시 변경된 사용자 파일을 복구하려면 복구 암호를 입력하십시오",
- "Search Users and Groups" : "사용자와 그룹 검색",
"Add Group" : "그룹 추가",
"Group" : "그룹",
"Admins" : "관리자",
diff --git a/settings/l10n/mk.js b/settings/l10n/mk.js
index c331bab6c8d..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-то за споделување",
@@ -148,7 +147,6 @@ OC.L10N.register(
"Username" : "Корисничко име",
"Create" : "Создај",
"Admin Recovery Password" : "Обновување на Admin лозинката",
- "Search Users and Groups" : "Барај корисници и групи",
"Add Group" : "Додади група",
"Group" : "Група",
"Everyone" : "Секој",
diff --git a/settings/l10n/mk.json b/settings/l10n/mk.json
index bcc0841a398..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-то за споделување",
@@ -146,7 +145,6 @@
"Username" : "Корисничко име",
"Create" : "Создај",
"Admin Recovery Password" : "Обновување на Admin лозинката",
- "Search Users and Groups" : "Барај корисници и групи",
"Add Group" : "Додади група",
"Group" : "Група",
"Everyone" : "Секој",
diff --git a/settings/l10n/nb_NO.js b/settings/l10n/nb_NO.js
index feb8c9bb372..cf73debd87d 100644
--- a/settings/l10n/nb_NO.js
+++ b/settings/l10n/nb_NO.js
@@ -104,14 +104,11 @@ 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",
"System locale can not be set to a one which supports UTF-8." : "Kan ikke sette systemets nasjonale innstillinger til en som støtter UTF-8.",
"This means that there might be problems with certain characters in file names." : "Dette betyr at det kan forekomme problemer med visse tegn i filnavn.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Vi anbefaler på det sterkeste å installere pakkene som er nødvendig for at systemet skal støtte en av følgende nasjonale innstillinger: %s.",
"URL generation in notification emails" : "URL-generering i varsel-eposter",
"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\")" : "Hvis installasjonen din ikke er installert i roten av domenet og bruker system cron, kan det bli problemer med URL-generering. For å forhindre disse problemene, sett \"overwritewebroot\" i filen config.php til webroot-stien for installasjonen din (Forslag: \"%s\")",
"No problems found" : "Ingen problemer funnet",
@@ -208,7 +205,6 @@ OC.L10N.register(
"Create" : "Opprett",
"Admin Recovery Password" : "Administrativt gjenopprettingspassord",
"Enter the recovery password in order to recover the users files during password change" : "Legg inn gjenopprettingspassordet for å gjenopprette brukerfilene når passordet endres",
- "Search Users and Groups" : "Søk i brukere og grupper",
"Add Group" : "Legg til gruppe",
"Group" : "Gruppe",
"Everyone" : "Alle",
diff --git a/settings/l10n/nb_NO.json b/settings/l10n/nb_NO.json
index 593bc0d2e07..0c4614c1cfa 100644
--- a/settings/l10n/nb_NO.json
+++ b/settings/l10n/nb_NO.json
@@ -102,14 +102,11 @@
"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",
"System locale can not be set to a one which supports UTF-8." : "Kan ikke sette systemets nasjonale innstillinger til en som støtter UTF-8.",
"This means that there might be problems with certain characters in file names." : "Dette betyr at det kan forekomme problemer med visse tegn i filnavn.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Vi anbefaler på det sterkeste å installere pakkene som er nødvendig for at systemet skal støtte en av følgende nasjonale innstillinger: %s.",
"URL generation in notification emails" : "URL-generering i varsel-eposter",
"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\")" : "Hvis installasjonen din ikke er installert i roten av domenet og bruker system cron, kan det bli problemer med URL-generering. For å forhindre disse problemene, sett \"overwritewebroot\" i filen config.php til webroot-stien for installasjonen din (Forslag: \"%s\")",
"No problems found" : "Ingen problemer funnet",
@@ -206,7 +203,6 @@
"Create" : "Opprett",
"Admin Recovery Password" : "Administrativt gjenopprettingspassord",
"Enter the recovery password in order to recover the users files during password change" : "Legg inn gjenopprettingspassordet for å gjenopprette brukerfilene når passordet endres",
- "Search Users and Groups" : "Søk i brukere og grupper",
"Add Group" : "Legg til gruppe",
"Group" : "Gruppe",
"Everyone" : "Alle",
diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js
index 2b4f2c6c4ed..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,14 +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'" : "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",
"System locale can not be set to a one which supports UTF-8." : "De systeemtaal kan niet worden ingesteld op een taal die UTF-8 ondersteunt.",
"This means that there might be problems with certain characters in file names." : "Dat betekent dat er problemen kunnen optreden met bepaalde tekens in bestandsnamen.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "We adviseren met klem om de noodzakelijke pakketten op uw systeem te installeren om een van de volgende talen te ondersteunen: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "We adviseren met klem om de noodzakelijke pakketten op uw systeem te installeren om een van de volgende talen te ondersteunen: %s.",
"URL generation in notification emails" : "URL genereren in notificatie e-mails",
"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\")" : "Als uw installatie niet in de hoofddirectory van het domein staat, maar wel cron gebruikt, dan kunnen er problemen ontstaan bij het genereren van URL's. Om deze problemen te voorkomen zou u de \"overwritewebroot\" optie in config.php moeten instellen op het webroot pad van uw ownCloud (aanbevolen: \"%s\") ",
"Connectivity Checks" : "Verbindingscontroles",
@@ -222,7 +222,7 @@ OC.L10N.register(
"Create" : "Aanmaken",
"Admin Recovery Password" : "Beheer herstel wachtwoord",
"Enter the recovery password in order to recover the users files during password change" : "Voer het herstel wachtwoord in om de gebruikersbestanden terug te halen bij wachtwoordwijziging",
- "Search Users and Groups" : "Zoeken naar gebruikers en groepen",
+ "Search Users" : "Zoek gebruikers",
"Add Group" : "Toevoegen groep",
"Group" : "Groep",
"Everyone" : "Iedereen",
diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json
index e27106179ee..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,14 +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'" : "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",
"System locale can not be set to a one which supports UTF-8." : "De systeemtaal kan niet worden ingesteld op een taal die UTF-8 ondersteunt.",
"This means that there might be problems with certain characters in file names." : "Dat betekent dat er problemen kunnen optreden met bepaalde tekens in bestandsnamen.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "We adviseren met klem om de noodzakelijke pakketten op uw systeem te installeren om een van de volgende talen te ondersteunen: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "We adviseren met klem om de noodzakelijke pakketten op uw systeem te installeren om een van de volgende talen te ondersteunen: %s.",
"URL generation in notification emails" : "URL genereren in notificatie e-mails",
"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\")" : "Als uw installatie niet in de hoofddirectory van het domein staat, maar wel cron gebruikt, dan kunnen er problemen ontstaan bij het genereren van URL's. Om deze problemen te voorkomen zou u de \"overwritewebroot\" optie in config.php moeten instellen op het webroot pad van uw ownCloud (aanbevolen: \"%s\") ",
"Connectivity Checks" : "Verbindingscontroles",
@@ -220,7 +220,7 @@
"Create" : "Aanmaken",
"Admin Recovery Password" : "Beheer herstel wachtwoord",
"Enter the recovery password in order to recover the users files during password change" : "Voer het herstel wachtwoord in om de gebruikersbestanden terug te halen bij wachtwoordwijziging",
- "Search Users and Groups" : "Zoeken naar gebruikers en groepen",
+ "Search Users" : "Zoek gebruikers",
"Add Group" : "Toevoegen groep",
"Group" : "Groep",
"Everyone" : "Iedereen",
diff --git a/settings/l10n/pl.js b/settings/l10n/pl.js
index 14108c49ae2..b1f268c1373 100644
--- a/settings/l10n/pl.js
+++ b/settings/l10n/pl.js
@@ -109,14 +109,11 @@ 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",
"System locale can not be set to a one which supports UTF-8." : "Ustawienia regionalne systemu nie można ustawić na jeden, który obsługuje UTF-8.",
"This means that there might be problems with certain characters in file names." : "Oznacza to, że mogą być problemy z niektórymi znakami w nazwach plików.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Zalecamy, aby zainstalować wymagane pakiety w systemie, jeden z następujących języków: %s.",
"URL generation in notification emails" : "Generowanie URL w powiadomieniach email",
"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\")" : "Jeśli Twoja instalacja nie jest zainstalowana w katalogu głównym serwera www, a system używa cron-a, mogą występować problemy z generowaniem URL-i. Aby uniknąć tych problemów, proszę ustawić opcję \"overwritewebroot\" w pliku config.php na ścieżkę z adresu www Twojej instalacji (Sugerowane: \"%s\")",
"No problems found" : "Nie ma żadnych problemów",
@@ -217,7 +214,6 @@ OC.L10N.register(
"Create" : "Utwórz",
"Admin Recovery Password" : "Odzyskiwanie hasła administratora",
"Enter the recovery password in order to recover the users files during password change" : "Wpisz hasło odzyskiwania, aby odzyskać pliki użytkowników podczas zmiany hasła",
- "Search Users and Groups" : "Przeszukuj użytkowników i grupy",
"Add Group" : "Dodaj grupę",
"Group" : "Grupa",
"Everyone" : "Wszyscy",
diff --git a/settings/l10n/pl.json b/settings/l10n/pl.json
index b30513d8a8a..3e2c17d3140 100644
--- a/settings/l10n/pl.json
+++ b/settings/l10n/pl.json
@@ -107,14 +107,11 @@
"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",
"System locale can not be set to a one which supports UTF-8." : "Ustawienia regionalne systemu nie można ustawić na jeden, który obsługuje UTF-8.",
"This means that there might be problems with certain characters in file names." : "Oznacza to, że mogą być problemy z niektórymi znakami w nazwach plików.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Zalecamy, aby zainstalować wymagane pakiety w systemie, jeden z następujących języków: %s.",
"URL generation in notification emails" : "Generowanie URL w powiadomieniach email",
"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\")" : "Jeśli Twoja instalacja nie jest zainstalowana w katalogu głównym serwera www, a system używa cron-a, mogą występować problemy z generowaniem URL-i. Aby uniknąć tych problemów, proszę ustawić opcję \"overwritewebroot\" w pliku config.php na ścieżkę z adresu www Twojej instalacji (Sugerowane: \"%s\")",
"No problems found" : "Nie ma żadnych problemów",
@@ -215,7 +212,6 @@
"Create" : "Utwórz",
"Admin Recovery Password" : "Odzyskiwanie hasła administratora",
"Enter the recovery password in order to recover the users files during password change" : "Wpisz hasło odzyskiwania, aby odzyskać pliki użytkowników podczas zmiany hasła",
- "Search Users and Groups" : "Przeszukuj użytkowników i grupy",
"Add Group" : "Dodaj grupę",
"Group" : "Grupa",
"Everyone" : "Wszyscy",
diff --git a/settings/l10n/pt_BR.js b/settings/l10n/pt_BR.js
index 16c855ea18f..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,14 +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'" : "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",
"System locale can not be set to a one which supports UTF-8." : "Localidade do sistema não pode ser definido como um que suporta UTF-8.",
"This means that there might be problems with certain characters in file names." : "Isso significa que pode haver problemas com certos caracteres nos nomes de arquivo.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Nós fortemente sugerimos instalar os pacotes necessários no seu sistema para suportar uma das seguintes localidades: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Nós sugerimos a instalação dos pacotes necessários em seu sistema para suportar um dos seguintes locais: %s.",
"URL generation in notification emails" : "Geração de 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 estiver instalada na raiz do domínio e usa cron do sistema, pode haver problemas com a geração de URL. Para evitar esses problemas, por favor, defina a opção \"overwritewebroot\" em seu arquivo config.php para o caminho webroot de sua instalação (Sugestão: \"%s\")",
"Connectivity Checks" : "Verificações de Conectividade",
@@ -222,7 +222,7 @@ OC.L10N.register(
"Create" : "Criar",
"Admin Recovery Password" : "Recuperação da Senha do Administrador",
"Enter the recovery password in order to recover the users files during password change" : "Digite a senha de recuperação para recuperar os arquivos dos usuários durante a mudança de senha.",
- "Search Users and Groups" : "Pesquisar Usuários e Grupos",
+ "Search Users" : "Pesquisar Usuários",
"Add Group" : "Adicionar Grupo",
"Group" : "Grupo",
"Everyone" : "Para todos",
diff --git a/settings/l10n/pt_BR.json b/settings/l10n/pt_BR.json
index 0d9a8cb5a89..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,14 +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'" : "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",
"System locale can not be set to a one which supports UTF-8." : "Localidade do sistema não pode ser definido como um que suporta UTF-8.",
"This means that there might be problems with certain characters in file names." : "Isso significa que pode haver problemas com certos caracteres nos nomes de arquivo.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Nós fortemente sugerimos instalar os pacotes necessários no seu sistema para suportar uma das seguintes localidades: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Nós sugerimos a instalação dos pacotes necessários em seu sistema para suportar um dos seguintes locais: %s.",
"URL generation in notification emails" : "Geração de 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 estiver instalada na raiz do domínio e usa cron do sistema, pode haver problemas com a geração de URL. Para evitar esses problemas, por favor, defina a opção \"overwritewebroot\" em seu arquivo config.php para o caminho webroot de sua instalação (Sugestão: \"%s\")",
"Connectivity Checks" : "Verificações de Conectividade",
@@ -220,7 +220,7 @@
"Create" : "Criar",
"Admin Recovery Password" : "Recuperação da Senha do Administrador",
"Enter the recovery password in order to recover the users files during password change" : "Digite a senha de recuperação para recuperar os arquivos dos usuários durante a mudança de senha.",
- "Search Users and Groups" : "Pesquisar Usuários e Grupos",
+ "Search Users" : "Pesquisar Usuários",
"Add Group" : "Adicionar Grupo",
"Group" : "Grupo",
"Everyone" : "Para todos",
diff --git a/settings/l10n/pt_PT.js b/settings/l10n/pt_PT.js
index 092a8d7c2a2..93fad6a87be 100644
--- a/settings/l10n/pt_PT.js
+++ b/settings/l10n/pt_PT.js
@@ -13,81 +13,81 @@ OC.L10N.register(
"Group already exists" : "O grupo já existe",
"Unable to add group" : "Não é possível acrescentar o grupo",
"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 desencriptar os seus arquivos. 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 desencriptar os seus arquivos. Verifique a sua senha 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",
+ "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" : "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.",
- "Wrong password" : "Senha errada",
- "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 chave de recuperação de administrador, caso contrário todos os dados de utilizador serão perdidos",
- "Wrong admin recovery password. Please check the password and try again." : "Palavra chave de recuperação de administrador errada. Por favor verifique a palavra chave e tente de novo.",
- "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 encriptação foi atualizada.",
- "Unable to change password" : "Não foi possível alterar a sua password",
+ "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",
+ "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",
- "Very weak password" : "Senha muito fraca",
- "Weak password" : "Senha fraca",
- "So-so password" : "Senha aceitável",
- "Good password" : "Senha Forte",
- "Strong password" : "Senha muito forte",
- "Valid until {date}" : "Válido até {date}",
+ "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á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" : "Uma password válida deve ser fornecida",
- "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,23 +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 to install the required packages on your system to support one of the following locales: %s." : "Recomendamos fortemente que instale no seu sistema todos os pacotes necessários para suportar os seguintes locales: %s.",
+ "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",
@@ -131,7 +131,7 @@ OC.L10N.register(
"Use system's cron service to call the cron.php file every 15 minutes." : "Usar o serviço sistema cron para ligar o ficheiro cron.php a cada 15 minutos.",
"Allow apps to use the Share API" : "Permitir que os utilizadores usem a API de partilha",
"Allow users to share via link" : "Permitir que os utilizadores partilhem através do link",
- "Enforce password protection" : "Forçar protecção da palavra passe",
+ "Enforce password protection" : "Forçar proteção por palavra-passe",
"Allow public uploads" : "Permitir Envios Públicos",
"Set default expiration date" : "Especificar a data padrão de expiração",
"Expire after " : "Expira após",
@@ -157,7 +157,7 @@ OC.L10N.register(
"Port" : "Porta",
"Credentials" : "Credenciais",
"SMTP Username" : "Nome de utilizador SMTP",
- "SMTP Password" : "Senha SMTP",
+ "SMTP Password" : "Palavra-passe SMTP",
"Store credentials" : "Armazenar credenciais",
"Test email settings" : "Testar definições de e-mail",
"Send email" : "Enviar email",
@@ -185,16 +185,16 @@ OC.L10N.register(
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Se quer ajudar no projecto\n⇥⇥<a href=\"https://owncloud.org/contribute\"\n⇥⇥⇥target=\"_blank\">aderir desenvolvimento</a>\n⇥⇥ou\n⇥⇥<a href=\"https://owncloud.org/promote\"\n⇥⇥⇥target=\"_blank\">espalhe a palavra</a>!",
"Show First Run Wizard again" : "Mostrar novamente Wizard de Arranque Inicial",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Usou <strong>%s</strong> do disponivel <strong>%s</strong>",
- "Password" : "Password",
+ "Password" : "Palavra-passe",
"Your password was changed" : "A sua palavra-passe foi alterada",
- "Unable to change your password" : "Não foi possivel alterar a sua palavra-chave",
- "Current password" : "Palavra-chave actual",
- "New password" : "Nova palavra-chave",
- "Change password" : "Alterar palavra-chave",
+ "Unable to change your password" : "Não foi possível alterar a sua palavra-passe",
+ "Current password" : "Palavra-passe atual",
+ "New password" : "Nova palavra-passe",
+ "Change password" : "Alterar palavra-passe",
"Full Name" : "Nome completo",
"Email" : "Email",
"Your email address" : "O seu endereço de email",
- "Fill in an email address to enable password recovery and receive notifications" : "Preencha com um endereço e-mail para permitir a recuperação de senha e receber notificações",
+ "Fill in an email address to enable password recovery and receive notifications" : "Preencha com um endereço e-mail para permitir a recuperação da palavra-passe e receber notificações",
"Profile picture" : "Foto do perfil",
"Upload new" : "Carregar novo",
"Select new from Files" : "Seleccionar novo a partir dos ficheiros",
@@ -211,7 +211,7 @@ OC.L10N.register(
"Valid until %s" : "Válido até %s",
"Import Root Certificate" : "Importar Certificado Root",
"The encryption app is no longer enabled, please decrypt all your files" : "A aplicação de encriptação já não está ativa, por favor desincripte todos os seus ficheiros",
- "Log-in password" : "Password de entrada",
+ "Log-in password" : "Palavra-passe de Iniciar a Sessão",
"Decrypt all Files" : "Desencriptar todos os ficheiros",
"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." : "As suas chaves de encriptação foram movidas para um local de segurança. Em caso de algo correr mal você pode restaurar as chaves. Só deve eliminar as chaves permanentemente se tiver certeza absoluta que os ficheiros são decrepitados correctamente.",
"Restore Encryption Keys" : "Restaurar as chaves de encriptação",
@@ -220,9 +220,9 @@ OC.L10N.register(
"Show last log in" : "Mostrar ultimo acesso de entrada",
"Username" : "Nome de utilizador",
"Create" : "Criar",
- "Admin Recovery Password" : "Recuperar password de administrador",
- "Enter the recovery password in order to recover the users files during password change" : "Digite a senha de recuperação, a fim de recuperar os arquivos de usuários durante a mudança de senha",
- "Search Users and Groups" : "Pesquisa Utilizadores e Grupos",
+ "Admin Recovery Password" : "Recuperação da Palavra-passe de Administrador",
+ "Enter the recovery password in order to recover the users files during password change" : "Digite a senha de recuperação, a fim de recuperar os ficheiros dos utilizadores durante a mudança da palavra-passe",
+ "Search Users" : "Procurar Utilizadores",
"Add Group" : "Adicionar grupo",
"Group" : "Grupo",
"Everyone" : "Para todos",
diff --git a/settings/l10n/pt_PT.json b/settings/l10n/pt_PT.json
index 6274d83d290..d46aabb68b0 100644
--- a/settings/l10n/pt_PT.json
+++ b/settings/l10n/pt_PT.json
@@ -11,81 +11,81 @@
"Group already exists" : "O grupo já existe",
"Unable to add group" : "Não é possível acrescentar o grupo",
"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 desencriptar os seus arquivos. 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 desencriptar os seus arquivos. Verifique a sua senha 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",
+ "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" : "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.",
- "Wrong password" : "Senha errada",
- "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 chave de recuperação de administrador, caso contrário todos os dados de utilizador serão perdidos",
- "Wrong admin recovery password. Please check the password and try again." : "Palavra chave de recuperação de administrador errada. Por favor verifique a palavra chave e tente de novo.",
- "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 encriptação foi atualizada.",
- "Unable to change password" : "Não foi possível alterar a sua password",
+ "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",
+ "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",
- "Very weak password" : "Senha muito fraca",
- "Weak password" : "Senha fraca",
- "So-so password" : "Senha aceitável",
- "Good password" : "Senha Forte",
- "Strong password" : "Senha muito forte",
- "Valid until {date}" : "Válido até {date}",
+ "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á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" : "Uma password válida deve ser fornecida",
- "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,23 +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 to install the required packages on your system to support one of the following locales: %s." : "Recomendamos fortemente que instale no seu sistema todos os pacotes necessários para suportar os seguintes locales: %s.",
+ "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",
@@ -129,7 +129,7 @@
"Use system's cron service to call the cron.php file every 15 minutes." : "Usar o serviço sistema cron para ligar o ficheiro cron.php a cada 15 minutos.",
"Allow apps to use the Share API" : "Permitir que os utilizadores usem a API de partilha",
"Allow users to share via link" : "Permitir que os utilizadores partilhem através do link",
- "Enforce password protection" : "Forçar protecção da palavra passe",
+ "Enforce password protection" : "Forçar proteção por palavra-passe",
"Allow public uploads" : "Permitir Envios Públicos",
"Set default expiration date" : "Especificar a data padrão de expiração",
"Expire after " : "Expira após",
@@ -155,7 +155,7 @@
"Port" : "Porta",
"Credentials" : "Credenciais",
"SMTP Username" : "Nome de utilizador SMTP",
- "SMTP Password" : "Senha SMTP",
+ "SMTP Password" : "Palavra-passe SMTP",
"Store credentials" : "Armazenar credenciais",
"Test email settings" : "Testar definições de e-mail",
"Send email" : "Enviar email",
@@ -183,16 +183,16 @@
"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" : "Se quer ajudar no projecto\n⇥⇥<a href=\"https://owncloud.org/contribute\"\n⇥⇥⇥target=\"_blank\">aderir desenvolvimento</a>\n⇥⇥ou\n⇥⇥<a href=\"https://owncloud.org/promote\"\n⇥⇥⇥target=\"_blank\">espalhe a palavra</a>!",
"Show First Run Wizard again" : "Mostrar novamente Wizard de Arranque Inicial",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Usou <strong>%s</strong> do disponivel <strong>%s</strong>",
- "Password" : "Password",
+ "Password" : "Palavra-passe",
"Your password was changed" : "A sua palavra-passe foi alterada",
- "Unable to change your password" : "Não foi possivel alterar a sua palavra-chave",
- "Current password" : "Palavra-chave actual",
- "New password" : "Nova palavra-chave",
- "Change password" : "Alterar palavra-chave",
+ "Unable to change your password" : "Não foi possível alterar a sua palavra-passe",
+ "Current password" : "Palavra-passe atual",
+ "New password" : "Nova palavra-passe",
+ "Change password" : "Alterar palavra-passe",
"Full Name" : "Nome completo",
"Email" : "Email",
"Your email address" : "O seu endereço de email",
- "Fill in an email address to enable password recovery and receive notifications" : "Preencha com um endereço e-mail para permitir a recuperação de senha e receber notificações",
+ "Fill in an email address to enable password recovery and receive notifications" : "Preencha com um endereço e-mail para permitir a recuperação da palavra-passe e receber notificações",
"Profile picture" : "Foto do perfil",
"Upload new" : "Carregar novo",
"Select new from Files" : "Seleccionar novo a partir dos ficheiros",
@@ -209,7 +209,7 @@
"Valid until %s" : "Válido até %s",
"Import Root Certificate" : "Importar Certificado Root",
"The encryption app is no longer enabled, please decrypt all your files" : "A aplicação de encriptação já não está ativa, por favor desincripte todos os seus ficheiros",
- "Log-in password" : "Password de entrada",
+ "Log-in password" : "Palavra-passe de Iniciar a Sessão",
"Decrypt all Files" : "Desencriptar todos os ficheiros",
"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." : "As suas chaves de encriptação foram movidas para um local de segurança. Em caso de algo correr mal você pode restaurar as chaves. Só deve eliminar as chaves permanentemente se tiver certeza absoluta que os ficheiros são decrepitados correctamente.",
"Restore Encryption Keys" : "Restaurar as chaves de encriptação",
@@ -218,9 +218,9 @@
"Show last log in" : "Mostrar ultimo acesso de entrada",
"Username" : "Nome de utilizador",
"Create" : "Criar",
- "Admin Recovery Password" : "Recuperar password de administrador",
- "Enter the recovery password in order to recover the users files during password change" : "Digite a senha de recuperação, a fim de recuperar os arquivos de usuários durante a mudança de senha",
- "Search Users and Groups" : "Pesquisa Utilizadores e Grupos",
+ "Admin Recovery Password" : "Recuperação da Palavra-passe de Administrador",
+ "Enter the recovery password in order to recover the users files during password change" : "Digite a senha de recuperação, a fim de recuperar os ficheiros dos utilizadores durante a mudança da palavra-passe",
+ "Search Users" : "Procurar Utilizadores",
"Add Group" : "Adicionar grupo",
"Group" : "Grupo",
"Everyone" : "Para todos",
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 e776aeb220d..863e74ba137 100644
--- a/settings/l10n/ru.js
+++ b/settings/l10n/ru.js
@@ -110,14 +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. Для больших установок рекомендуется использовать другие типы Баз Данных. Чтобы переехать на другую Базу Данных используйте инструмент командной строки: '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" : "Локализация не работает",
"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 to install the required packages on your system to support one of the following locales: %s." : "Мы настоятельно рекомендуем установить требуемые пакеты в систему, для поддержки одной из следующих локалей: %s.",
+ "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. Чтобы избежать этого, установите опцию verwritewebroot файла config.php равной пути папки установки. (Вероятно, это \"%s\".)",
"Connectivity Checks" : "Проверка соединения",
@@ -144,9 +142,11 @@ 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" : "Отправить сообщение",
+ "Send mode" : "Способ отправки",
"From address" : "Адрес отправителя",
"mail" : "почта",
"Authentication method" : "Метод проверки подлинности",
@@ -156,9 +156,9 @@ OC.L10N.register(
"Credentials" : "Учётные данные",
"SMTP Username" : "Пользователь SMTP",
"SMTP Password" : "Пароль SMTP",
- "Store credentials" : "Хранить учётные данные",
+ "Store credentials" : "Сохранить учётные данные",
"Test email settings" : "Проверить настройки почты",
- "Send email" : "Отправить сообщение",
+ "Send email" : "Отправить email",
"Log level" : "Уровень детализации журнала",
"More" : "Больше",
"Less" : "Меньше",
@@ -166,7 +166,7 @@ OC.L10N.register(
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." : "Разрабатывается <a href=\"http://ownCloud.org/contact\" target=\"_blank\">сообществом ownCloud</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">исходный код</a> доступен под лицензией <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
"More apps" : "Ещё приложения",
"Add your app" : "Добавить своё приложение",
- "by" : ":",
+ "by" : "автор",
"licensed" : "Лицензировано",
"Documentation:" : "Документация:",
"User Documentation" : "Пользовательская документация",
@@ -220,7 +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 and Groups" : "Искать пользователей и групп",
+ "Search Users" : "Искать пользователей",
"Add Group" : "Добавить группу",
"Group" : "Группа",
"Everyone" : "Все",
diff --git a/settings/l10n/ru.json b/settings/l10n/ru.json
index 44661eed3e2..052861fd163 100644
--- a/settings/l10n/ru.json
+++ b/settings/l10n/ru.json
@@ -108,14 +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. Для больших установок рекомендуется использовать другие типы Баз Данных. Чтобы переехать на другую Базу Данных используйте инструмент командной строки: '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" : "Локализация не работает",
"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 to install the required packages on your system to support one of the following locales: %s." : "Мы настоятельно рекомендуем установить требуемые пакеты в систему, для поддержки одной из следующих локалей: %s.",
+ "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. Чтобы избежать этого, установите опцию verwritewebroot файла config.php равной пути папки установки. (Вероятно, это \"%s\".)",
"Connectivity Checks" : "Проверка соединения",
@@ -142,9 +140,11 @@
"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" : "Отправить сообщение",
+ "Send mode" : "Способ отправки",
"From address" : "Адрес отправителя",
"mail" : "почта",
"Authentication method" : "Метод проверки подлинности",
@@ -154,9 +154,9 @@
"Credentials" : "Учётные данные",
"SMTP Username" : "Пользователь SMTP",
"SMTP Password" : "Пароль SMTP",
- "Store credentials" : "Хранить учётные данные",
+ "Store credentials" : "Сохранить учётные данные",
"Test email settings" : "Проверить настройки почты",
- "Send email" : "Отправить сообщение",
+ "Send email" : "Отправить email",
"Log level" : "Уровень детализации журнала",
"More" : "Больше",
"Less" : "Меньше",
@@ -164,7 +164,7 @@
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." : "Разрабатывается <a href=\"http://ownCloud.org/contact\" target=\"_blank\">сообществом ownCloud</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">исходный код</a> доступен под лицензией <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
"More apps" : "Ещё приложения",
"Add your app" : "Добавить своё приложение",
- "by" : ":",
+ "by" : "автор",
"licensed" : "Лицензировано",
"Documentation:" : "Документация:",
"User Documentation" : "Пользовательская документация",
@@ -218,7 +218,7 @@
"Create" : "Создать",
"Admin Recovery Password" : "Восстановление пароля администратора",
"Enter the recovery password in order to recover the users files during password change" : "Введите пароль для того, чтобы восстановить файлы пользователей при смене пароля",
- "Search Users and Groups" : "Искать пользователей и групп",
+ "Search Users" : "Искать пользователей",
"Add Group" : "Добавить группу",
"Group" : "Группа",
"Everyone" : "Все",
diff --git a/settings/l10n/sk_SK.js b/settings/l10n/sk_SK.js
index 36dc76b6358..3d9fe53c946 100644
--- a/settings/l10n/sk_SK.js
+++ b/settings/l10n/sk_SK.js
@@ -110,14 +110,11 @@ 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",
"System locale can not be set to a one which supports UTF-8." : "Nie je možné nastaviť znakovú sadu, ktorá podporuje UTF-8.",
"This means that there might be problems with certain characters in file names." : "To znamená, že sa môžu vyskytnúť problémy s niektorými znakmi v názvoch súborov.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Dôrazne doporučujeme nainštalovať na váš systém požadované balíčky podporujúce jednu z nasledovných znakových sád: %s.",
"URL generation in notification emails" : "Generovanie adresy URL v oznamovacích emailoch",
"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\")" : "Inštalácia mimo koreňový priečinok domény a používanie systémového príkazu cron môže spôsobiť problém s generovaním správnej URL. Pre zabránenie týmto chybám nastavte prosím správnu cestu v svojom config.php súbore pre hodnotu \"overwritewebroot\" (Doporučujeme: \"%s\")",
"Connectivity Checks" : "Overovanie pripojenia",
@@ -220,7 +217,7 @@ OC.L10N.register(
"Create" : "Vytvoriť",
"Admin Recovery Password" : "Obnovenie hesla administrátora",
"Enter the recovery password in order to recover the users files during password change" : "Zadajte heslo pre obnovenie súborov používateľa pri zmene hesla",
- "Search Users and Groups" : "Prehľadať používateľov a skupiny",
+ "Search Users" : "Hľadať používateľov",
"Add Group" : "Pridať skupinu",
"Group" : "Skupina",
"Everyone" : "Všetci",
diff --git a/settings/l10n/sk_SK.json b/settings/l10n/sk_SK.json
index fa42832c52e..95c4c76b74b 100644
--- a/settings/l10n/sk_SK.json
+++ b/settings/l10n/sk_SK.json
@@ -108,14 +108,11 @@
"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",
"System locale can not be set to a one which supports UTF-8." : "Nie je možné nastaviť znakovú sadu, ktorá podporuje UTF-8.",
"This means that there might be problems with certain characters in file names." : "To znamená, že sa môžu vyskytnúť problémy s niektorými znakmi v názvoch súborov.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Dôrazne doporučujeme nainštalovať na váš systém požadované balíčky podporujúce jednu z nasledovných znakových sád: %s.",
"URL generation in notification emails" : "Generovanie adresy URL v oznamovacích emailoch",
"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\")" : "Inštalácia mimo koreňový priečinok domény a používanie systémového príkazu cron môže spôsobiť problém s generovaním správnej URL. Pre zabránenie týmto chybám nastavte prosím správnu cestu v svojom config.php súbore pre hodnotu \"overwritewebroot\" (Doporučujeme: \"%s\")",
"Connectivity Checks" : "Overovanie pripojenia",
@@ -218,7 +215,7 @@
"Create" : "Vytvoriť",
"Admin Recovery Password" : "Obnovenie hesla administrátora",
"Enter the recovery password in order to recover the users files during password change" : "Zadajte heslo pre obnovenie súborov používateľa pri zmene hesla",
- "Search Users and Groups" : "Prehľadať používateľov a skupiny",
+ "Search Users" : "Hľadať používateľov",
"Add Group" : "Pridať skupinu",
"Group" : "Skupina",
"Everyone" : "Všetci",
diff --git a/settings/l10n/sl.js b/settings/l10n/sl.js
index fad7b286870..cd8a932499d 100644
--- a/settings/l10n/sl.js
+++ b/settings/l10n/sl.js
@@ -107,13 +107,11 @@ 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.",
"This means that there might be problems with certain characters in file names." : "To pomeni, da se lahko pojavijo napake pri nekaterih znakih v imenih datotek.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Priporočljivo je namestiti zahtevane pakete v sistem za podporo ene izmed navedenih jezikovnih možnosti: %s",
+ "URL generation in notification emails" : "Ustvarjanje naslova URL v elektronskih sporočilih",
"Connectivity Checks" : "Preverjanje povezav",
"No problems found" : "Ni zaznanih težav",
"Please double check the <a href='%s'>installation guides</a>." : "Preverite <a href='%s'>navodila namestitve</a>.",
@@ -138,6 +136,8 @@ OC.L10N.register(
"These groups will still be able to receive shares, but not to initiate them." : "Te skupine lahko sprejemajo mape v souporabo, ne morejo pa souporabe dovoliti",
"Enforce HTTPS" : "Zahtevaj uporabo HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Vsili povezavo odjemalca z %s preko šifrirane povezave.",
+ "Enforce HTTPS for subdomains" : "Vsili protokol HTTPS za podrejene domene",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Vsili povezavo odjemalcev na naslovu %s in na vseh podrejenih domenah preko šifrirane povezave. ",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Za nastavljanje šifriranja SSL je treba vzpostaviti povezavo z mestom %s preko protokola HTTPS.",
"This is used for sending out notifications." : "Možnost je uporabljena za omogočanje pošiljanja obvestil.",
"Send mode" : "Način pošiljanja",
@@ -210,7 +210,7 @@ OC.L10N.register(
"Create" : "Ustvari",
"Admin Recovery Password" : "Obnovitev skrbniškega gesla",
"Enter the recovery password in order to recover the users files during password change" : "Vnesite geslo, ki omogoča obnovitev uporabniških datotek med spreminjanjem gesla",
- "Search Users and Groups" : "Iskanje uporabnikov in skupin",
+ "Search Users" : "Poišči med uporabniki",
"Add Group" : "Dodaj skupino",
"Group" : "Skupina",
"Everyone" : "Vsi",
diff --git a/settings/l10n/sl.json b/settings/l10n/sl.json
index 9f148233534..831ca55d515 100644
--- a/settings/l10n/sl.json
+++ b/settings/l10n/sl.json
@@ -105,13 +105,11 @@
"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.",
"This means that there might be problems with certain characters in file names." : "To pomeni, da se lahko pojavijo napake pri nekaterih znakih v imenih datotek.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Priporočljivo je namestiti zahtevane pakete v sistem za podporo ene izmed navedenih jezikovnih možnosti: %s",
+ "URL generation in notification emails" : "Ustvarjanje naslova URL v elektronskih sporočilih",
"Connectivity Checks" : "Preverjanje povezav",
"No problems found" : "Ni zaznanih težav",
"Please double check the <a href='%s'>installation guides</a>." : "Preverite <a href='%s'>navodila namestitve</a>.",
@@ -136,6 +134,8 @@
"These groups will still be able to receive shares, but not to initiate them." : "Te skupine lahko sprejemajo mape v souporabo, ne morejo pa souporabe dovoliti",
"Enforce HTTPS" : "Zahtevaj uporabo HTTPS",
"Forces the clients to connect to %s via an encrypted connection." : "Vsili povezavo odjemalca z %s preko šifrirane povezave.",
+ "Enforce HTTPS for subdomains" : "Vsili protokol HTTPS za podrejene domene",
+ "Forces the clients to connect to %s and subdomains via an encrypted connection." : "Vsili povezavo odjemalcev na naslovu %s in na vseh podrejenih domenah preko šifrirane povezave. ",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." : "Za nastavljanje šifriranja SSL je treba vzpostaviti povezavo z mestom %s preko protokola HTTPS.",
"This is used for sending out notifications." : "Možnost je uporabljena za omogočanje pošiljanja obvestil.",
"Send mode" : "Način pošiljanja",
@@ -208,7 +208,7 @@
"Create" : "Ustvari",
"Admin Recovery Password" : "Obnovitev skrbniškega gesla",
"Enter the recovery password in order to recover the users files during password change" : "Vnesite geslo, ki omogoča obnovitev uporabniških datotek med spreminjanjem gesla",
- "Search Users and Groups" : "Iskanje uporabnikov in skupin",
+ "Search Users" : "Poišči med uporabniki",
"Add Group" : "Dodaj skupino",
"Group" : "Skupina",
"Everyone" : "Vsi",
diff --git a/settings/l10n/sq.js b/settings/l10n/sq.js
index 40697726184..fbb926feeb7 100644
--- a/settings/l10n/sq.js
+++ b/settings/l10n/sq.js
@@ -1,17 +1,29 @@
OC.L10N.register(
"settings",
{
+ "Security & Setup Warnings" : "Paralajmërimet e Sigurisë dhe Konfigurimit",
"Cron" : "Cron",
"Sharing" : "Ndarje",
"Security" : "Siguria",
+ "Email Server" : "Serveri Email",
"Log" : "Historik aktiviteti",
"Authentication error" : "Gabim autentifikimi",
+ "Your full name has been changed." : "Emri juaj i plotë ka ndryshuar.",
+ "Unable to change full name" : "Nuk mund të ndryshohet emri i plotë",
"Group already exists" : "Grupi ekziston",
"Unable to add group" : "E pamundur të shtohet grupi",
+ "Files decrypted successfully" : "Skedarët janë dëshifruar me sukses",
+ "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Nuk mund të dëshifrohen skedarët tuaj, ju lutem kontrolloni owncloud.log ose pyesni administratorin tuaj.",
+ "Couldn't decrypt your files, check your password and try again" : "Nuk mund të dëshifrohen skedarët tuaj, ju lutem kontrolloni fjalëkalimin tuaj dhe provoni përsëri.",
+ "Encryption keys deleted permanently" : "Çelësat e shifrimit u fshinë përfundimisht",
+ "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Nuk mund të fshihen përfundimisht çelësat tuaj të shifrimit, ju lutem kontrolloni owncloud.log ose pyesni administratorin tuaj.",
+ "Couldn't remove app." : "Nuk mund të hiqet aplikacioni.",
"Email saved" : "Email u ruajt",
"Invalid email" : "Email jo i vlefshëm",
"Unable to delete group" : "E pamundur të fshihet grupi",
"Unable to delete user" : "E pamundur të fshihet përdoruesi",
+ "Backups restored successfully" : "Kopjet rezervë u restauruan me sukses",
+ "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nuk mund të restaurohen çelësat tuaj të shifrimit, ju lutem kontrolloni owncloud.log ose pyesni administratorin tuaj.",
"Language changed" : "Gjuha u ndryshua",
"Invalid request" : "Kërkesë e pavlefshme",
"Admins can't remove themself from the admin group" : "Administratorët nuk mund të heqin vehten prej grupit admin",
@@ -19,8 +31,16 @@ OC.L10N.register(
"Unable to remove user from group %s" : "E pamundur të hiqet përdoruesi nga grupi %s",
"Couldn't update app." : "E pamundur të përditësohet app.",
"Wrong password" : "Fjalëkalim i gabuar",
+ "No user supplied" : "Nuk është dhënë asnjë përdorues",
+ "Please provide an admin recovery password, otherwise all user data will be lost" : "Ju lutem jepni një fjalëkalim restaurimi administrativ, në të kundërt të gjitha të dhënat do humbasin",
+ "Wrong admin recovery password. Please check the password and try again." : "Fjalëkalim i gabuar restaurimi administrativ. Ju lutem kontrolloni fjalëkalimin dhe provoni përsëri.",
+ "Back-end doesn't support password change, but the users encryption key was successfully updated." : "Paneli i kontrollit nuk mbështet ndryshimin e fjalëkalimit, por çelësi i shifrimit të përdoruesit u modifikua me sukses.",
"Unable to change password" : "Fjalëkalimi nuk mund të ndryshohet",
+ "Enabled" : "Aktivizuar",
+ "Not enabled" : "Jo aktive",
+ "Recommended" : "E rekomanduar",
"Saved" : "U ruajt",
+ "test email settings" : "parametra test për email",
"Email sent" : "Email-i u dërgua",
"Sending..." : "Duke dërguar",
"All" : "Të gjitha",
@@ -31,6 +51,11 @@ OC.L10N.register(
"Error while updating app" : "Gabim gjatë përditësimit të app",
"Updated" : "I përditësuar",
"Select a profile picture" : "Zgjidh një foto profili",
+ "Very weak password" : "Fjalëkalim shumë i dobët",
+ "Weak password" : "Fjalëkalim i dobët",
+ "So-so password" : "Fjalëkalim i pranueshëm",
+ "Good password" : "Fjalëkalim i mirë",
+ "Strong password" : "Fjalëkalim shumë i mirë",
"Delete" : "Fshi",
"Groups" : "Grupet",
"deleted {groupName}" : "u fshi {groupName}",
@@ -101,7 +126,6 @@ OC.L10N.register(
"Create" : "Krijo",
"Admin Recovery Password" : "Rigjetja e fjalëkalimit të Admin",
"Enter the recovery password in order to recover the users files during password change" : "Jepni fjalëkalimin e rigjetjes për të rigjetur skedarët e përdoruesit gjatë ndryshimit të fjalëkalimit",
- "Search Users and Groups" : "Kërko Përdorues apo Grupe",
"Add Group" : "Shto Grup",
"Group" : "Grup",
"Everyone" : "Të gjithë",
diff --git a/settings/l10n/sq.json b/settings/l10n/sq.json
index e3671303a3b..2fa9c2f6d17 100644
--- a/settings/l10n/sq.json
+++ b/settings/l10n/sq.json
@@ -1,15 +1,27 @@
{ "translations": {
+ "Security & Setup Warnings" : "Paralajmërimet e Sigurisë dhe Konfigurimit",
"Cron" : "Cron",
"Sharing" : "Ndarje",
"Security" : "Siguria",
+ "Email Server" : "Serveri Email",
"Log" : "Historik aktiviteti",
"Authentication error" : "Gabim autentifikimi",
+ "Your full name has been changed." : "Emri juaj i plotë ka ndryshuar.",
+ "Unable to change full name" : "Nuk mund të ndryshohet emri i plotë",
"Group already exists" : "Grupi ekziston",
"Unable to add group" : "E pamundur të shtohet grupi",
+ "Files decrypted successfully" : "Skedarët janë dëshifruar me sukses",
+ "Couldn't decrypt your files, please check your owncloud.log or ask your administrator" : "Nuk mund të dëshifrohen skedarët tuaj, ju lutem kontrolloni owncloud.log ose pyesni administratorin tuaj.",
+ "Couldn't decrypt your files, check your password and try again" : "Nuk mund të dëshifrohen skedarët tuaj, ju lutem kontrolloni fjalëkalimin tuaj dhe provoni përsëri.",
+ "Encryption keys deleted permanently" : "Çelësat e shifrimit u fshinë përfundimisht",
+ "Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" : "Nuk mund të fshihen përfundimisht çelësat tuaj të shifrimit, ju lutem kontrolloni owncloud.log ose pyesni administratorin tuaj.",
+ "Couldn't remove app." : "Nuk mund të hiqet aplikacioni.",
"Email saved" : "Email u ruajt",
"Invalid email" : "Email jo i vlefshëm",
"Unable to delete group" : "E pamundur të fshihet grupi",
"Unable to delete user" : "E pamundur të fshihet përdoruesi",
+ "Backups restored successfully" : "Kopjet rezervë u restauruan me sukses",
+ "Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" : "Nuk mund të restaurohen çelësat tuaj të shifrimit, ju lutem kontrolloni owncloud.log ose pyesni administratorin tuaj.",
"Language changed" : "Gjuha u ndryshua",
"Invalid request" : "Kërkesë e pavlefshme",
"Admins can't remove themself from the admin group" : "Administratorët nuk mund të heqin vehten prej grupit admin",
@@ -17,8 +29,16 @@
"Unable to remove user from group %s" : "E pamundur të hiqet përdoruesi nga grupi %s",
"Couldn't update app." : "E pamundur të përditësohet app.",
"Wrong password" : "Fjalëkalim i gabuar",
+ "No user supplied" : "Nuk është dhënë asnjë përdorues",
+ "Please provide an admin recovery password, otherwise all user data will be lost" : "Ju lutem jepni një fjalëkalim restaurimi administrativ, në të kundërt të gjitha të dhënat do humbasin",
+ "Wrong admin recovery password. Please check the password and try again." : "Fjalëkalim i gabuar restaurimi administrativ. Ju lutem kontrolloni fjalëkalimin dhe provoni përsëri.",
+ "Back-end doesn't support password change, but the users encryption key was successfully updated." : "Paneli i kontrollit nuk mbështet ndryshimin e fjalëkalimit, por çelësi i shifrimit të përdoruesit u modifikua me sukses.",
"Unable to change password" : "Fjalëkalimi nuk mund të ndryshohet",
+ "Enabled" : "Aktivizuar",
+ "Not enabled" : "Jo aktive",
+ "Recommended" : "E rekomanduar",
"Saved" : "U ruajt",
+ "test email settings" : "parametra test për email",
"Email sent" : "Email-i u dërgua",
"Sending..." : "Duke dërguar",
"All" : "Të gjitha",
@@ -29,6 +49,11 @@
"Error while updating app" : "Gabim gjatë përditësimit të app",
"Updated" : "I përditësuar",
"Select a profile picture" : "Zgjidh një foto profili",
+ "Very weak password" : "Fjalëkalim shumë i dobët",
+ "Weak password" : "Fjalëkalim i dobët",
+ "So-so password" : "Fjalëkalim i pranueshëm",
+ "Good password" : "Fjalëkalim i mirë",
+ "Strong password" : "Fjalëkalim shumë i mirë",
"Delete" : "Fshi",
"Groups" : "Grupet",
"deleted {groupName}" : "u fshi {groupName}",
@@ -99,7 +124,6 @@
"Create" : "Krijo",
"Admin Recovery Password" : "Rigjetja e fjalëkalimit të Admin",
"Enter the recovery password in order to recover the users files during password change" : "Jepni fjalëkalimin e rigjetjes për të rigjetur skedarët e përdoruesit gjatë ndryshimit të fjalëkalimit",
- "Search Users and Groups" : "Kërko Përdorues apo Grupe",
"Add Group" : "Shto Grup",
"Group" : "Grup",
"Everyone" : "Të gjithë",
diff --git a/settings/l10n/sv.js b/settings/l10n/sv.js
index 0487e5efd8b..ca4fac8cdd1 100644
--- a/settings/l10n/sv.js
+++ b/settings/l10n/sv.js
@@ -104,12 +104,9 @@ 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.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Vi rekommenderar starkt att installera de paket som krävs på ditt system för att stödja en av följande systemspråk: %s.",
"Please double check the <a href='%s'>installation guides</a>." : "Var god kontrollera <a href='%s'>installationsguiden</a>.",
"Last cron was executed at %s." : "Sista cron kördes vid %s",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Sista cron kördes vid %s. Detta är mer än en timme sedan, något verkar fel.",
@@ -198,7 +195,6 @@ OC.L10N.register(
"Create" : "Skapa",
"Admin Recovery Password" : "Admin återställningslösenord",
"Enter the recovery password in order to recover the users files during password change" : "Ange återställningslösenordet för att återställa användarnas filer vid lösenordsbyte",
- "Search Users and Groups" : "Sök Användare och Grupper",
"Add Group" : "Lägg till Grupp",
"Group" : "Grupp",
"Everyone" : "Alla",
diff --git a/settings/l10n/sv.json b/settings/l10n/sv.json
index 03b1899ce1e..d3e685a8432 100644
--- a/settings/l10n/sv.json
+++ b/settings/l10n/sv.json
@@ -102,12 +102,9 @@
"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.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Vi rekommenderar starkt att installera de paket som krävs på ditt system för att stödja en av följande systemspråk: %s.",
"Please double check the <a href='%s'>installation guides</a>." : "Var god kontrollera <a href='%s'>installationsguiden</a>.",
"Last cron was executed at %s." : "Sista cron kördes vid %s",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Sista cron kördes vid %s. Detta är mer än en timme sedan, något verkar fel.",
@@ -196,7 +193,6 @@
"Create" : "Skapa",
"Admin Recovery Password" : "Admin återställningslösenord",
"Enter the recovery password in order to recover the users files during password change" : "Ange återställningslösenordet för att återställa användarnas filer vid lösenordsbyte",
- "Search Users and Groups" : "Sök Användare och Grupper",
"Add Group" : "Lägg till Grupp",
"Group" : "Grupp",
"Everyone" : "Alla",
diff --git a/settings/l10n/tr.js b/settings/l10n/tr.js
index cf25a212c27..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,18 +112,16 @@ 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",
"System locale can not be set to a one which supports UTF-8." : "Sistem yereli, UTF-8 destekleyenlerden biri olarak ayarlanamadı.",
"This means that there might be problems with certain characters in file names." : "Bu, dosya adlarında belirli karakterlerde problem olabileceği anlamına gelir.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Şu dillerden birini desteklemesi için sisteminize gerekli paketleri kurmanızı şiddetle tavsiye ederiz: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Şu dillerden birini desteklemesi için sisteminize gerekli paketleri kurmanızı şiddetle tavsiye ederiz: %s.",
"URL generation in notification emails" : "Bildirim e-postalarında URL oluşturulması",
"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\")" : "Eğer kurulumunuz alan adının köküne yapılmamışsa ve sistem cron'u kullanıyorsa, URL oluşturma ile ilgili sorunlar olabilir. Bu sorunların önüne geçmek için, kurulumunuzun web kök yolundaki config.php dosyasında \"overwritewebroot\" seçeneğini ayarlayın (Önerilen: \"%s\")",
"Connectivity Checks" : "Bağlantı Kontrolleri",
- "No problems found" : "Sorun bulunamadı",
+ "No problems found" : "Hiç sorun yok",
"Please double check the <a href='%s'>installation guides</a>." : "Lütfen <a href='%s'>kurulum rehberlerini</a> iki kez kontrol edin.",
"Last cron was executed at %s." : "Son cron %s zamanında çalıştırıldı.",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Son cron %s zamanında çalıştırıldı. Bu bir saatten daha uzun bir süre, bir şeyler yanlış gibi görünüyor.",
@@ -138,7 +138,7 @@ OC.L10N.register(
"days" : "gün sonra dolsun",
"Enforce expiration date" : "Son kullanma tarihini zorla",
"Allow resharing" : "Yeniden paylaşıma izin ver",
- "Restrict users to only share with users in their groups" : "Kullanıcıların sadece kendi gruplarındaki kullanıcılarla paylaşmasına sınırla",
+ "Restrict users to only share with users in their groups" : "Kullanıcıların, dosyaları sadece kendi gruplarındaki kullanıcılarla paylaşmasına izin ver",
"Allow users to send mail notification for shared files" : "Paylaşılmış dosyalar için kullanıcıların posta bildirimi göndermesine izin ver",
"Exclude groups from sharing" : "Grupları paylaşma eyleminden hariç tut",
"These groups will still be able to receive shares, but not to initiate them." : "Bu gruplar hala paylaşımları alabilecek, ancak başlatamayacaktır.",
@@ -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ı",
@@ -222,7 +222,7 @@ OC.L10N.register(
"Create" : "Oluştur",
"Admin Recovery Password" : "Yönetici Kurtarma Parolası",
"Enter the recovery password in order to recover the users files during password change" : "Parola değiştirme sırasında kullanıcı dosyalarını kurtarmak için kurtarma parolasını girin",
- "Search Users and Groups" : "Kullanıcı ve Grupları Ara",
+ "Search Users" : "Kullanıcı Ara",
"Add Group" : "Grup Ekle",
"Group" : "Grup",
"Everyone" : "Herkes",
diff --git a/settings/l10n/tr.json b/settings/l10n/tr.json
index 3bb8cce46b6..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,18 +110,16 @@
"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",
"System locale can not be set to a one which supports UTF-8." : "Sistem yereli, UTF-8 destekleyenlerden biri olarak ayarlanamadı.",
"This means that there might be problems with certain characters in file names." : "Bu, dosya adlarında belirli karakterlerde problem olabileceği anlamına gelir.",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "Şu dillerden birini desteklemesi için sisteminize gerekli paketleri kurmanızı şiddetle tavsiye ederiz: %s.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Şu dillerden birini desteklemesi için sisteminize gerekli paketleri kurmanızı şiddetle tavsiye ederiz: %s.",
"URL generation in notification emails" : "Bildirim e-postalarında URL oluşturulması",
"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\")" : "Eğer kurulumunuz alan adının köküne yapılmamışsa ve sistem cron'u kullanıyorsa, URL oluşturma ile ilgili sorunlar olabilir. Bu sorunların önüne geçmek için, kurulumunuzun web kök yolundaki config.php dosyasında \"overwritewebroot\" seçeneğini ayarlayın (Önerilen: \"%s\")",
"Connectivity Checks" : "Bağlantı Kontrolleri",
- "No problems found" : "Sorun bulunamadı",
+ "No problems found" : "Hiç sorun yok",
"Please double check the <a href='%s'>installation guides</a>." : "Lütfen <a href='%s'>kurulum rehberlerini</a> iki kez kontrol edin.",
"Last cron was executed at %s." : "Son cron %s zamanında çalıştırıldı.",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "Son cron %s zamanında çalıştırıldı. Bu bir saatten daha uzun bir süre, bir şeyler yanlış gibi görünüyor.",
@@ -136,7 +136,7 @@
"days" : "gün sonra dolsun",
"Enforce expiration date" : "Son kullanma tarihini zorla",
"Allow resharing" : "Yeniden paylaşıma izin ver",
- "Restrict users to only share with users in their groups" : "Kullanıcıların sadece kendi gruplarındaki kullanıcılarla paylaşmasına sınırla",
+ "Restrict users to only share with users in their groups" : "Kullanıcıların, dosyaları sadece kendi gruplarındaki kullanıcılarla paylaşmasına izin ver",
"Allow users to send mail notification for shared files" : "Paylaşılmış dosyalar için kullanıcıların posta bildirimi göndermesine izin ver",
"Exclude groups from sharing" : "Grupları paylaşma eyleminden hariç tut",
"These groups will still be able to receive shares, but not to initiate them." : "Bu gruplar hala paylaşımları alabilecek, ancak başlatamayacaktır.",
@@ -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ı",
@@ -220,7 +220,7 @@
"Create" : "Oluştur",
"Admin Recovery Password" : "Yönetici Kurtarma Parolası",
"Enter the recovery password in order to recover the users files during password change" : "Parola değiştirme sırasında kullanıcı dosyalarını kurtarmak için kurtarma parolasını girin",
- "Search Users and Groups" : "Kullanıcı ve Grupları Ara",
+ "Search Users" : "Kullanıcı Ara",
"Add Group" : "Grup Ekle",
"Group" : "Grup",
"Everyone" : "Herkes",
diff --git a/settings/l10n/uk.js b/settings/l10n/uk.js
index 94a0ac7af01..e46e32c1a2e 100644
--- a/settings/l10n/uk.js
+++ b/settings/l10n/uk.js
@@ -110,14 +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 to install the required packages on your system to support one of the following locales: %s." : "Ми наполегливо рекомендуємо встановити необхідні пакети в систему, для підтримки наступних локалей: %s.",
+ "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" : "Перевірка З'єднання",
@@ -144,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" : "Надіслати повідомлення",
@@ -220,7 +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 and Groups" : "Шукати користувачів та групи",
+ "Search Users" : "Шукати користувачів",
"Add Group" : "Додати групу",
"Group" : "Група",
"Everyone" : "Всі",
diff --git a/settings/l10n/uk.json b/settings/l10n/uk.json
index abe77748e17..03455e50155 100644
--- a/settings/l10n/uk.json
+++ b/settings/l10n/uk.json
@@ -108,14 +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 to install the required packages on your system to support one of the following locales: %s." : "Ми наполегливо рекомендуємо встановити необхідні пакети в систему, для підтримки наступних локалей: %s.",
+ "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" : "Перевірка З'єднання",
@@ -142,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" : "Надіслати повідомлення",
@@ -218,7 +218,7 @@
"Create" : "Створити",
"Admin Recovery Password" : "Пароль адміністратора для відновлення",
"Enter the recovery password in order to recover the users files during password change" : "Введіть пароль для того, щоб відновити файли користувачів при зміні паролю",
- "Search Users and Groups" : "Шукати користувачів та групи",
+ "Search Users" : "Шукати користувачів",
"Add Group" : "Додати групу",
"Group" : "Група",
"Everyone" : "Всі",
diff --git a/settings/l10n/zh_CN.js b/settings/l10n/zh_CN.js
index af5b786c789..15ff53307d3 100644
--- a/settings/l10n/zh_CN.js
+++ b/settings/l10n/zh_CN.js
@@ -104,14 +104,11 @@ 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" : "本地化无法工作",
"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 to install 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在域名的根目录里,并使用系统的crom,这会导致URL的生成出错。要避免这个问题,请设置 config.php 文件中的\"overwritewebroot\" 参数值为你的实际安装web路径。(建议为: \"%s\")",
"No problems found" : "未发现问题",
@@ -209,7 +206,6 @@ OC.L10N.register(
"Create" : "创建",
"Admin Recovery Password" : "管理恢复密码",
"Enter the recovery password in order to recover the users files during password change" : "输入恢复密码来在更改密码的时候恢复用户文件",
- "Search Users and Groups" : "搜索用户和组",
"Add Group" : "增加组",
"Group" : "分组",
"Everyone" : "所有人",
diff --git a/settings/l10n/zh_CN.json b/settings/l10n/zh_CN.json
index 35d784f8a3f..776ca101012 100644
--- a/settings/l10n/zh_CN.json
+++ b/settings/l10n/zh_CN.json
@@ -102,14 +102,11 @@
"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" : "本地化无法工作",
"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 to install 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在域名的根目录里,并使用系统的crom,这会导致URL的生成出错。要避免这个问题,请设置 config.php 文件中的\"overwritewebroot\" 参数值为你的实际安装web路径。(建议为: \"%s\")",
"No problems found" : "未发现问题",
@@ -207,7 +204,6 @@
"Create" : "创建",
"Admin Recovery Password" : "管理恢复密码",
"Enter the recovery password in order to recover the users files during password change" : "输入恢复密码来在更改密码的时候恢复用户文件",
- "Search Users and Groups" : "搜索用户和组",
"Add Group" : "增加组",
"Group" : "分组",
"Everyone" : "所有人",
diff --git a/settings/l10n/zh_TW.js b/settings/l10n/zh_TW.js
index c32238afb7c..1a2b20e3f1d 100644
--- a/settings/l10n/zh_TW.js
+++ b/settings/l10n/zh_TW.js
@@ -83,12 +83,9 @@ 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." : "這個意思是指在檔名中使用一些字元可能會有問題",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "我們強烈建議在您的系統上安裝必要的套件來支援以下的語系: %s",
"Please double check the <a href='%s'>installation guides</a>." : "請參考<a href='%s'>安裝指南</a>。",
"Last cron was executed at %s." : "最後的排程已執行於 %s。",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "最後的排程已執行於 %s。現在過了好幾個小時,看起來是有錯誤。",
diff --git a/settings/l10n/zh_TW.json b/settings/l10n/zh_TW.json
index a493cbf7d41..030d0f30720 100644
--- a/settings/l10n/zh_TW.json
+++ b/settings/l10n/zh_TW.json
@@ -81,12 +81,9 @@
"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." : "這個意思是指在檔名中使用一些字元可能會有問題",
- "We strongly suggest to install the required packages on your system to support one of the following locales: %s." : "我們強烈建議在您的系統上安裝必要的套件來支援以下的語系: %s",
"Please double check the <a href='%s'>installation guides</a>." : "請參考<a href='%s'>安裝指南</a>。",
"Last cron was executed at %s." : "最後的排程已執行於 %s。",
"Last cron was executed at %s. This is more than an hour ago, something seems wrong." : "最後的排程已執行於 %s。現在過了好幾個小時,看起來是有錯誤。",
diff --git a/settings/templates/admin.php b/settings/templates/admin.php
index ddac77508c7..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']) {
?>
@@ -184,7 +184,7 @@ if (!$_['isLocaleWorking']) {
?>
<br>
<?php
- p($l->t('We strongly suggest to install the required packages on your system to support one of the following locales: %s.', array($locales)));
+ p($l->t('We strongly suggest installing the required packages on your system to support one of the following locales: %s.', array($locales)));
?>
</span>
@@ -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/settings/templates/users/part.createuser.php b/settings/templates/users/part.createuser.php
index 20528964f68..d3ebbfb987a 100644
--- a/settings/templates/users/part.createuser.php
+++ b/settings/templates/users/part.createuser.php
@@ -29,6 +29,6 @@
</div>
<?php endif; ?>
<form autocomplete="off" id="usersearchform">
- <input type="text" class="input userFilter" placeholder="<?php p($l->t('Search Users and Groups')); ?>" />
+ <input type="text" class="input userFilter" placeholder="<?php p($l->t('Search Users')); ?>" />
</form>
</div>
diff --git a/tests/core/lostpassword/controller/lostcontrollertest.php b/tests/core/lostpassword/controller/lostcontrollertest.php
new file mode 100644
index 00000000000..2ed7692a32f
--- /dev/null
+++ b/tests/core/lostpassword/controller/lostcontrollertest.php
@@ -0,0 +1,203 @@
+<?php
+/**
+ * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Core\LostPassword\Controller;
+use OC\Core\Application;
+use OCP\AppFramework\Http\TemplateResponse;
+
+/**
+ * Class LostControllerTest
+ *
+ * @package OC\Core\LostPassword\Controller
+ */
+class LostControllerTest extends \PHPUnit_Framework_TestCase {
+
+ private $container;
+ /** @var LostController */
+ private $lostController;
+
+ protected function setUp() {
+ $app = new Application();
+ $this->container = $app->getContainer();
+ $this->container['AppName'] = 'core';
+ $this->container['Config'] = $this->getMockBuilder('\OCP\IConfig')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['L10N'] = $this->getMockBuilder('\OCP\IL10N')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['Defaults'] = $this->getMockBuilder('\OC_Defaults')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['UserManager'] = $this->getMockBuilder('\OCP\IUserManager')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['Config'] = $this->getMockBuilder('\OCP\IConfig')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['URLGenerator'] = $this->getMockBuilder('\OCP\IURLGenerator')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['SecureRandom'] = $this->getMockBuilder('\OCP\Security\ISecureRandom')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['IsEncryptionEnabled'] = true;
+ $this->lostController = $this->container['LostController'];
+ }
+
+ public function testResetFormUnsuccessful() {
+ $userId = 'admin';
+ $token = 'MySecretToken';
+
+ $this->container['URLGenerator']
+ ->expects($this->once())
+ ->method('linkToRouteAbsolute')
+ ->with('core.lost.setPassword', array('userId' => 'admin', 'token' => 'MySecretToken'))
+ ->will($this->returnValue('https://ownCloud.com/index.php/lostpassword/'));
+
+ $response = $this->lostController->resetform($token, $userId);
+ $expectedResponse = new TemplateResponse('core/lostpassword',
+ 'resetpassword',
+ array(
+ 'link' => 'https://ownCloud.com/index.php/lostpassword/',
+ ),
+ 'guest');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testEmailUnsucessful() {
+ $existingUser = 'ExistingUser';
+ $nonExistingUser = 'NonExistingUser';
+ $this->container['UserManager']
+ ->expects($this->any())
+ ->method('userExists')
+ ->will($this->returnValueMap(array(
+ array(true, $existingUser),
+ array(false, $nonExistingUser)
+ )));
+ $this->container['L10N']
+ ->expects($this->any())
+ ->method('t')
+ ->will(
+ $this->returnValueMap(
+ array(
+ array('Couldn\'t send reset email. Please make sure your username is correct.', array(),
+ 'Couldn\'t send reset email. Please make sure your username is correct.'),
+
+ )
+ ));
+
+ // With a non existing user
+ $response = $this->lostController->email($nonExistingUser);
+ $expectedResponse = array('status' => 'error', 'msg' => 'Couldn\'t send reset email. Please make sure your username is correct.');
+ $this->assertSame($expectedResponse, $response);
+
+ // With no mail address
+ $this->container['Config']
+ ->expects($this->any())
+ ->method('getUserValue')
+ ->with($existingUser, 'settings', 'email')
+ ->will($this->returnValue(null));
+ $response = $this->lostController->email($existingUser);
+ $expectedResponse = array('status' => 'error', 'msg' => 'Couldn\'t send reset email. Please make sure your username is correct.');
+ $this->assertSame($expectedResponse, $response);
+ }
+
+ 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())
+ ->method('generate')
+ ->with('21')
+ ->will($this->returnValue('ThisIsMaybeANotSoSecretToken!'));
+ $this->container['UserManager']
+ ->expects($this->once())
+ ->method('userExists')
+ ->with('ExistingUser')
+ ->will($this->returnValue(true));
+ $this->container['Config']
+ ->expects($this->once())
+ ->method('getUserValue')
+ ->with('ExistingUser', 'settings', 'email')
+ ->will($this->returnValue('test@example.com'));
+ $this->container['SecureRandom']
+ ->expects($this->once())
+ ->method('getMediumStrengthGenerator')
+ ->will($this->returnValue($randomToken));
+ $this->container['Config']
+ ->expects($this->once())
+ ->method('setUserValue')
+ ->with('ExistingUser', 'owncloud', 'lostpassword', 'ThisIsMaybeANotSoSecretToken!');
+ $this->container['URLGenerator']
+ ->expects($this->once())
+ ->method('linkToRouteAbsolute')
+ ->with('core.lost.resetform', array('userId' => 'ExistingUser', 'token' => 'ThisIsMaybeANotSoSecretToken!'))
+ ->will($this->returnValue('https://ownCloud.com/index.php/lostpassword/'));
+
+ $response = $this->lostController->email('ExistingUser');
+ $expectedResponse = array('status' => 'success');
+ $this->assertSame($expectedResponse, $response);
+ }
+
+ public function testSetPasswordUnsuccessful() {
+ $this->container['L10N']
+ ->expects($this->any())
+ ->method('t')
+ ->will(
+ $this->returnValueMap(
+ array(
+ array('Couldn\'t reset password because the token is invalid', array(),
+ 'Couldn\'t reset password because the token is invalid'),
+ )
+ ));
+ $this->container['Config']
+ ->expects($this->once())
+ ->method('getUserValue')
+ ->with('InvalidTokenUser', 'owncloud', 'lostpassword')
+ ->will($this->returnValue('TheOnlyAndOnlyOneTokenToResetThePassword'));
+
+ // With an invalid token
+ $userName = 'InvalidTokenUser';
+ $response = $this->lostController->setPassword('wrongToken', $userName, 'NewPassword', true);
+ $expectedResponse = array('status' => 'error', 'msg' => 'Couldn\'t reset password because the token is invalid');
+ $this->assertSame($expectedResponse, $response);
+
+ // With a valid token and no proceed
+ $response = $this->lostController->setPassword('TheOnlyAndOnlyOneTokenToResetThePassword!', $userName, 'NewPassword', false);
+ $expectedResponse = array('status' => 'error', 'msg' => '', 'encryption' => true);
+ $this->assertSame($expectedResponse, $response);
+ }
+
+ public function testSetPasswordSuccessful() {
+ $this->container['Config']
+ ->expects($this->once())
+ ->method('getUserValue')
+ ->with('ValidTokenUser', 'owncloud', 'lostpassword')
+ ->will($this->returnValue('TheOnlyAndOnlyOneTokenToResetThePassword'));
+ $user = $this->getMockBuilder('\OCP\IUser')
+ ->disableOriginalConstructor()->getMock();
+ $user->expects($this->once())
+ ->method('setPassword')
+ ->with('NewPassword')
+ ->will($this->returnValue(true));
+ $this->container['UserManager']
+ ->expects($this->once())
+ ->method('get')
+ ->with('ValidTokenUser')
+ ->will($this->returnValue($user));
+ $this->container['Config']
+ ->expects($this->once())
+ ->method('deleteUserValue')
+ ->with('ValidTokenUser', 'owncloud', 'lostpassword');
+
+ $response = $this->lostController->setPassword('TheOnlyAndOnlyOneTokenToResetThePassword', 'ValidTokenUser', 'NewPassword', true);
+ $expectedResponse = array('status' => 'success');
+ $this->assertSame($expectedResponse, $response);
+ }
+}
diff --git a/tests/data/app/expected-info.json b/tests/data/app/expected-info.json
new file mode 100644
index 00000000000..fc0ab224977
--- /dev/null
+++ b/tests/data/app/expected-info.json
@@ -0,0 +1,49 @@
+{
+ "info": [],
+ "remote": [],
+ "public": [],
+ "id": "files_encryption",
+ "name": "Server-side Encryption",
+ "description": "\n\tThis application encrypts all files accessed by ownCloud at rest, wherever they are stored. As an example, with this application enabled, external cloud based Amazon S3 storage will be encrypted, protecting this data on storage outside of the control of the Admin. When this application is enabled for the first time, all files are encrypted as users log in and are prompted for their password. The recommended recovery key option enables recovery of files in case the key is lost. \n\tNote that this app encrypts all files that are touched by ownCloud, so external storage providers and applications such as SharePoint will see new files encrypted when they are accessed. Encryption is based on AES 128 or 256 bit keys. More information is available in the Encryption documentation \n\t",
+ "licence": "AGPL",
+ "author": "Sam Tuke, Bjoern Schiessle, Florin Peter",
+ "requiremin": "4",
+ "shipped": "true",
+ "documentation": {
+ "user": "https://docs.example.com/server/go.php?to=user-encryption",
+ "admin": "https://docs.example.com/server/go.php?to=admin-encryption"
+ },
+ "rememberlogin": "false",
+ "types": ["filesystem"],
+ "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/invalid-info.xml b/tests/data/app/invalid-info.xml
new file mode 100644
index 00000000000..3947f5420c2
--- /dev/null
+++ b/tests/data/app/invalid-info.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<info
+ <id>files_encryption</id>
+ <name>Server-side Encryption</name>
+ <description>
+ This application encrypts all files accessed by ownCloud at rest, wherever they are stored. As an example, with this application enabled, external cloud based Amazon S3 storage will be encrypted, protecting this data on storage outside of the control of the Admin. When this application is enabled for the first time, all files are encrypted as users log in and are prompted for their password. The recommended recovery key option enables recovery of files in case the key is lost.
+ Note that this app encrypts all files that are touched by ownCloud, so external storage providers and applications such as SharePoint will see new files encrypted when they are accessed. Encryption is based on AES 128 or 256 bit keys. More information is available in the Encryption documentation
+ </description>
+ <licence>AGPL</licence>
+ <author>Sam Tuke, Bjoern Schiessle, Florin Peter</author>
+ <requiremin>4</requiremin>
+ <shipped>true</shipped>
+ <documentation>
+ <user>user-encryption</user>
+ <admin>admin-encryption</admin>
+ </documentation>
+ <rememberlogin>false</rememberlogin>
+ <types>
+ <filesystem/>
+ </types>
+ <ocsid>166047</ocsid>
+</info>
diff --git a/tests/data/app/valid-info.xml b/tests/data/app/valid-info.xml
new file mode 100644
index 00000000000..f01f5fd55ea
--- /dev/null
+++ b/tests/data/app/valid-info.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<info>
+ <id>files_encryption</id>
+ <name>Server-side Encryption</name>
+ <description>
+ This application encrypts all files accessed by ownCloud at rest, wherever they are stored. As an example, with this application enabled, external cloud based Amazon S3 storage will be encrypted, protecting this data on storage outside of the control of the Admin. When this application is enabled for the first time, all files are encrypted as users log in and are prompted for their password. The recommended recovery key option enables recovery of files in case the key is lost.
+ Note that this app encrypts all files that are touched by ownCloud, so external storage providers and applications such as SharePoint will see new files encrypted when they are accessed. Encryption is based on AES 128 or 256 bit keys. More information is available in the Encryption documentation
+ </description>
+ <licence>AGPL</licence>
+ <author>Sam Tuke, Bjoern Schiessle, Florin Peter</author>
+ <requiremin>4</requiremin>
+ <shipped>true</shipped>
+ <documentation>
+ <user>user-encryption</user>
+ <admin>admin-encryption</admin>
+ </documentation>
+ <rememberlogin>false</rememberlogin>
+ <types>
+ <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 f21b82c52c3..0683eb68193 100644
--- a/tests/lib/activitymanager.php
+++ b/tests/lib/activitymanager.php
@@ -8,12 +8,14 @@
*
*/
-class Test_ActivityManager extends PHPUnit_Framework_TestCase {
+class Test_ActivityManager extends \Test\TestCase {
/** @var \OC\ActivityManager */
private $activityManager;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->activityManager = new \OC\ActivityManager();
$this->activityManager->registerExtension(function() {
return new NoOpExtension();
@@ -85,11 +87,14 @@ class Test_ActivityManager extends PHPUnit_Framework_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 0f7d08543ea..3b925a63960 100644
--- a/tests/lib/api.php
+++ b/tests/lib/api.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_API extends PHPUnit_Framework_TestCase {
+class Test_API extends \Test\TestCase {
// Helps build a response variable
@@ -17,7 +17,7 @@ class Test_API extends PHPUnit_Framework_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.php b/tests/lib/app.php
index 5bce3b8c3e6..23c1a340e03 100644
--- a/tests/lib/app.php
+++ b/tests/lib/app.php
@@ -7,7 +7,7 @@
* See the COPYING-README file.
*/
-class Test_App extends PHPUnit_Framework_TestCase {
+class Test_App extends \Test\TestCase {
private $oldAppConfigService;
@@ -455,6 +455,9 @@ class Test_App extends PHPUnit_Framework_TestCase {
\OC::$server->registerService('AppConfig', function ($c) use ($oldService){
return $oldService;
});
+
+ // Remove the cache of the mocked apps list with a forceRefresh
+ \OC_App::getEnabledApps(true);
}
}
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
new file mode 100644
index 00000000000..13c0b51e117
--- /dev/null
+++ b/tests/lib/app/infoparser.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * @author Thomas Müller
+ * @copyright 2014 Thomas Müller deepdiver@owncloud.com
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\App;
+
+use OC;
+
+class InfoParser extends \PHPUnit_Framework_TestCase {
+
+ /**
+ * @var \OC\App\InfoParser
+ */
+ private $parser;
+
+ public function setUp() {
+ $config = $this->getMockBuilder('\OC\AllConfig')
+ ->disableOriginalConstructor()->getMock();
+ $httpHelper = $this->getMockBuilder('\OC\HTTPHelper')
+ ->setConstructorArgs(array($config))
+ ->setMethods(array('getHeaders'))
+ ->getMock();
+ $urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ //linkToDocs
+ $urlGenerator->expects($this->any())
+ ->method('linkToDocs')
+ ->will($this->returnCallback(function ($url) {
+ return "https://docs.example.com/server/go.php?to=$url";
+ }));
+
+ $this->parser = new \OC\App\InfoParser($httpHelper, $urlGenerator);
+ }
+
+ /**
+ * @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);
+ }
+
+ function providesInfoXml() {
+ return array(
+ array('expected-info.json', 'valid-info.xml'),
+ array(null, 'invalid-info.xml'),
+ );
+ }
+}
diff --git a/tests/lib/app/manager.php b/tests/lib/app/manager.php
new file mode 100644
index 00000000000..4c0555b501f
--- /dev/null
+++ b/tests/lib/app/manager.php
@@ -0,0 +1,195 @@
+<?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\App;
+
+use OC\Group\Group;
+use OC\User\User;
+
+class Manager extends \PHPUnit_Framework_TestCase {
+ /**
+ * @return \OCP\IAppConfig | \PHPUnit_Framework_MockObject_MockObject
+ */
+ protected function getAppConfig() {
+ $appConfig = array();
+ $config = $this->getMockBuilder('\OCP\IAppConfig')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $config->expects($this->any())
+ ->method('getValue')
+ ->will($this->returnCallback(function ($app, $key, $default) use (&$appConfig) {
+ return (isset($appConfig[$app]) and isset($appConfig[$app][$key])) ? $appConfig[$app][$key] : $default;
+ }));
+ $config->expects($this->any())
+ ->method('setValue')
+ ->will($this->returnCallback(function ($app, $key, $value) use (&$appConfig) {
+ if (!isset($appConfig[$app])) {
+ $appConfig[$app] = array();
+ }
+ $appConfig[$app][$key] = $value;
+ }));
+ $config->expects($this->any())
+ ->method('getValues')
+ ->will($this->returnCallback(function ($app, $key) use (&$appConfig) {
+ if ($app) {
+ return $appConfig[$app];
+ } else {
+ $values = array();
+ foreach ($appConfig as $app => $appData) {
+ if (isset($appData[$key])) {
+ $values[$app] = $appData[$key];
+ }
+ }
+ return $values;
+ }
+ }));
+
+ return $config;
+ }
+
+ public function testEnableApp() {
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $manager->enableApp('test');
+ $this->assertEquals('yes', $appConfig->getValue('test', 'enabled', 'no'));
+ }
+
+ public function testDisableApp() {
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $manager->disableApp('test');
+ $this->assertEquals('no', $appConfig->getValue('test', 'enabled', 'no'));
+ }
+
+ public function testEnableAppForGroups() {
+ $groups = array(
+ new Group('group1', array(), null),
+ new Group('group2', array(), null)
+ );
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $manager->enableAppForGroups('test', $groups);
+ $this->assertEquals('["group1","group2"]', $appConfig->getValue('test', 'enabled', 'no'));
+ }
+
+ public function testIsInstalledEnabled() {
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $appConfig->setValue('test', 'enabled', 'yes');
+ $this->assertTrue($manager->isInstalled('test'));
+ }
+
+ public function testIsInstalledDisabled() {
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $appConfig->setValue('test', 'enabled', 'no');
+ $this->assertFalse($manager->isInstalled('test'));
+ }
+
+ public function testIsInstalledEnabledForGroups() {
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $appConfig->setValue('test', 'enabled', '["foo"]');
+ $this->assertTrue($manager->isInstalled('test'));
+ }
+
+ public function testIsEnabledForUserEnabled() {
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $appConfig->setValue('test', 'enabled', 'yes');
+ $user = new User('user1', null);
+ $this->assertTrue($manager->isEnabledForUser('test', $user));
+ }
+
+ public function testIsEnabledForUserDisabled() {
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $appConfig->setValue('test', 'enabled', 'no');
+ $user = new User('user1', null);
+ $this->assertFalse($manager->isEnabledForUser('test', $user));
+ }
+
+ public function testIsEnabledForUserEnabledForGroup() {
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+ $user = new User('user1', null);
+
+ $groupManager->expects($this->once())
+ ->method('getUserGroupIds')
+ ->with($user)
+ ->will($this->returnValue(array('foo', 'bar')));
+
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $appConfig->setValue('test', 'enabled', '["foo"]');
+ $this->assertTrue($manager->isEnabledForUser('test', $user));
+ }
+
+ public function testIsEnabledForUserDisabledForGroup() {
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+ $user = new User('user1', null);
+
+ $groupManager->expects($this->once())
+ ->method('getUserGroupIds')
+ ->with($user)
+ ->will($this->returnValue(array('bar')));
+
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $appConfig->setValue('test', 'enabled', '["foo"]');
+ $this->assertFalse($manager->isEnabledForUser('test', $user));
+ }
+
+ public function testIsEnabledForUserLoggedOut() {
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $appConfig->setValue('test', 'enabled', '["foo"]');
+ $this->assertFalse($manager->IsEnabledForUser('test'));
+ }
+
+ public function testIsEnabledForUserLoggedIn() {
+ $userSession = $this->getMock('\OCP\IUserSession');
+ $groupManager = $this->getMock('\OCP\IGroupManager');
+ $user = new User('user1', null);
+
+ $userSession->expects($this->once())
+ ->method('getUser')
+ ->will($this->returnValue($user));
+ $groupManager->expects($this->once())
+ ->method('getUserGroupIds')
+ ->with($user)
+ ->will($this->returnValue(array('foo', 'bar')));
+
+ $appConfig = $this->getAppConfig();
+ $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+ $appConfig->setValue('test', 'enabled', '["foo"]');
+ $this->assertTrue($manager->isEnabledForUser('test'));
+ }
+}
diff --git a/tests/lib/appconfig.php b/tests/lib/appconfig.php
index 9257ae45b0e..188721ff92d 100644
--- a/tests/lib/appconfig.php
+++ b/tests/lib/appconfig.php
@@ -7,8 +7,10 @@
* See the COPYING-README file.
*/
-class Test_Appconfig extends PHPUnit_Framework_TestCase {
+class Test_Appconfig extends \Test\TestCase {
public static function setUpBeforeClass() {
+ parent::setUpBeforeClass();
+
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*appconfig` VALUES (?, ?, ?)');
$query->execute(array('testapp', 'enabled', 'true'));
@@ -33,6 +35,8 @@ class Test_Appconfig extends PHPUnit_Framework_TestCase {
$query->execute(array('someapp'));
$query->execute(array('123456'));
$query->execute(array('anotherapp'));
+
+ parent::tearDownAfterClass();
}
public function testGetApps() {
diff --git a/tests/lib/appframework/AppTest.php b/tests/lib/appframework/AppTest.php
index 92fa4838341..86128db118f 100644
--- a/tests/lib/appframework/AppTest.php
+++ b/tests/lib/appframework/AppTest.php
@@ -25,7 +25,7 @@
namespace OC\AppFramework;
-class AppTest extends \PHPUnit_Framework_TestCase {
+class AppTest extends \Test\TestCase {
private $container;
private $api;
@@ -38,6 +38,8 @@ class AppTest extends \PHPUnit_Framework_TestCase {
private $controllerMethod;
protected function setUp() {
+ parent::setUp();
+
$this->container = new \OC\AppFramework\DependencyInjection\DIContainer('test', array());
$this->controller = $this->getMockBuilder(
'OCP\AppFramework\Controller')
@@ -61,7 +63,7 @@ class AppTest extends \PHPUnit_Framework_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/ApiControllerTest.php b/tests/lib/appframework/controller/ApiControllerTest.php
index b772f540ce8..3055fbe0da8 100644
--- a/tests/lib/appframework/controller/ApiControllerTest.php
+++ b/tests/lib/appframework/controller/ApiControllerTest.php
@@ -31,7 +31,7 @@ use OCP\AppFramework\Http\TemplateResponse;
class ChildApiController extends ApiController {};
-class ApiControllerTest extends \PHPUnit_Framework_TestCase {
+class ApiControllerTest extends \Test\TestCase {
public function testCors() {
diff --git a/tests/lib/appframework/controller/ControllerTest.php b/tests/lib/appframework/controller/ControllerTest.php
index 0de94ff5b70..18d47d00f6b 100644
--- a/tests/lib/appframework/controller/ControllerTest.php
+++ b/tests/lib/appframework/controller/ControllerTest.php
@@ -54,7 +54,7 @@ class ChildController extends Controller {
}
};
-class ControllerTest extends \PHPUnit_Framework_TestCase {
+class ControllerTest extends \Test\TestCase {
/**
* @var Controller
@@ -63,6 +63,8 @@ class ControllerTest extends \PHPUnit_Framework_TestCase {
private $app;
protected function setUp(){
+ parent::setUp();
+
$request = new Request(
array(
'get' => array('name' => 'John Q. Public', 'nickname' => 'Joey'),
@@ -171,7 +173,8 @@ class ControllerTest extends \PHPUnit_Framework_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/db/EntityTest.php b/tests/lib/appframework/db/EntityTest.php
index d98cb549422..161e11d8030 100644
--- a/tests/lib/appframework/db/EntityTest.php
+++ b/tests/lib/appframework/db/EntityTest.php
@@ -49,11 +49,12 @@ class TestEntity extends Entity {
};
-class EntityTest extends \PHPUnit_Framework_TestCase {
+class EntityTest extends \Test\TestCase {
private $entity;
protected function setUp(){
+ parent::setUp();
$this->entity = new TestEntity();
}
diff --git a/tests/lib/appframework/db/mappertest.php b/tests/lib/appframework/db/mappertest.php
index fd1acd0367e..6ad8cd86bff 100644
--- a/tests/lib/appframework/db/mappertest.php
+++ b/tests/lib/appframework/db/mappertest.php
@@ -57,7 +57,7 @@ class MapperTest extends MapperTestUtility {
*/
private $mapper;
- public function setUp(){
+ protected function setUp(){
parent::setUp();
$this->mapper = new ExampleMapper($this->db);
}
diff --git a/tests/lib/appframework/db/mappertestutility.php b/tests/lib/appframework/db/mappertestutility.php
index 0430eef2c21..ad7a67a96b1 100644
--- a/tests/lib/appframework/db/mappertestutility.php
+++ b/tests/lib/appframework/db/mappertestutility.php
@@ -28,9 +28,7 @@ namespace Test\AppFramework\Db;
/**
* Simple utility class for testing mappers
*/
-abstract class MapperTestUtility extends \PHPUnit_Framework_TestCase {
-
-
+abstract class MapperTestUtility extends \Test\TestCase {
protected $db;
private $query;
private $pdoResult;
@@ -45,6 +43,8 @@ abstract class MapperTestUtility extends \PHPUnit_Framework_TestCase {
* db. After this the db can be accessed by using $this->db
*/
protected function setUp(){
+ parent::setUp();
+
$this->db = $this->getMockBuilder(
'\OCP\IDb')
->disableOriginalConstructor()
diff --git a/tests/lib/appframework/dependencyinjection/DIContainerTest.php b/tests/lib/appframework/dependencyinjection/DIContainerTest.php
index acc5c2e66d8..08e72aff984 100644
--- a/tests/lib/appframework/dependencyinjection/DIContainerTest.php
+++ b/tests/lib/appframework/dependencyinjection/DIContainerTest.php
@@ -29,12 +29,13 @@ namespace OC\AppFramework\DependencyInjection;
use \OC\AppFramework\Http\Request;
-class DIContainerTest extends \PHPUnit_Framework_TestCase {
+class DIContainerTest extends \Test\TestCase {
private $container;
private $api;
protected function setUp(){
+ parent::setUp();
$this->container = new DIContainer('name');
$this->api = $this->getMock('OC\AppFramework\Core\API', array(), array('hi'));
}
diff --git a/tests/lib/appframework/http/DataResponseTest.php b/tests/lib/appframework/http/DataResponseTest.php
index 961327c978c..e91d3cefea9 100644
--- a/tests/lib/appframework/http/DataResponseTest.php
+++ b/tests/lib/appframework/http/DataResponseTest.php
@@ -29,7 +29,7 @@ use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\Http;
-class DataResponseTest extends \PHPUnit_Framework_TestCase {
+class DataResponseTest extends \Test\TestCase {
/**
* @var DataResponse
@@ -37,6 +37,7 @@ class DataResponseTest extends \PHPUnit_Framework_TestCase {
private $response;
protected function setUp() {
+ parent::setUp();
$this->response = new DataResponse();
}
diff --git a/tests/lib/appframework/http/DispatcherTest.php b/tests/lib/appframework/http/DispatcherTest.php
index f082ddc8b3a..3933e00804b 100644
--- a/tests/lib/appframework/http/DispatcherTest.php
+++ b/tests/lib/appframework/http/DispatcherTest.php
@@ -62,9 +62,7 @@ class TestController extends Controller {
}
-class DispatcherTest extends \PHPUnit_Framework_TestCase {
-
-
+class DispatcherTest extends \Test\TestCase {
private $middlewareDispatcher;
private $dispatcher;
private $controllerMethod;
@@ -75,6 +73,7 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
private $reflector;
protected function setUp() {
+ parent::setUp();
$this->controllerMethod = 'test';
$app = $this->getMockBuilder(
@@ -228,15 +227,11 @@ class DispatcherTest extends \PHPUnit_Framework_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');
@@ -247,15 +242,11 @@ class DispatcherTest extends \PHPUnit_Framework_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');
@@ -302,7 +293,7 @@ class DispatcherTest extends \PHPUnit_Framework_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]);
}
@@ -325,7 +316,7 @@ class DispatcherTest extends \PHPUnit_Framework_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]);
}
@@ -351,7 +342,7 @@ class DispatcherTest extends \PHPUnit_Framework_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]);
}
@@ -376,7 +367,7 @@ class DispatcherTest extends \PHPUnit_Framework_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]);
}
@@ -402,7 +393,7 @@ class DispatcherTest extends \PHPUnit_Framework_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]);
}
@@ -430,7 +421,7 @@ class DispatcherTest extends \PHPUnit_Framework_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/DownloadResponseTest.php b/tests/lib/appframework/http/DownloadResponseTest.php
index ab381e5c298..5e5db2c55ec 100644
--- a/tests/lib/appframework/http/DownloadResponseTest.php
+++ b/tests/lib/appframework/http/DownloadResponseTest.php
@@ -30,7 +30,7 @@ class ChildDownloadResponse extends DownloadResponse {
};
-class DownloadResponseTest extends \PHPUnit_Framework_TestCase {
+class DownloadResponseTest extends \Test\TestCase {
/**
* @var ChildDownloadResponse
@@ -38,6 +38,7 @@ class DownloadResponseTest extends \PHPUnit_Framework_TestCase {
protected $response;
protected function setUp(){
+ parent::setUp();
$this->response = new ChildDownloadResponse('file', 'content');
}
diff --git a/tests/lib/appframework/http/HttpTest.php b/tests/lib/appframework/http/HttpTest.php
index a7a189c98e5..e9be3e73904 100644
--- a/tests/lib/appframework/http/HttpTest.php
+++ b/tests/lib/appframework/http/HttpTest.php
@@ -27,7 +27,7 @@ namespace OC\AppFramework\Http;
use OC\AppFramework\Http;
-class HttpTest extends \PHPUnit_Framework_TestCase {
+class HttpTest extends \Test\TestCase {
private $server;
@@ -37,6 +37,8 @@ class HttpTest extends \PHPUnit_Framework_TestCase {
private $http;
protected function setUp(){
+ parent::setUp();
+
$this->server = array();
$this->http = new Http($this->server);
}
diff --git a/tests/lib/appframework/http/JSONResponseTest.php b/tests/lib/appframework/http/JSONResponseTest.php
index 06cd3410a69..cdd8d269b41 100644
--- a/tests/lib/appframework/http/JSONResponseTest.php
+++ b/tests/lib/appframework/http/JSONResponseTest.php
@@ -30,7 +30,7 @@ namespace OC\AppFramework\Http;
use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\Http;
-class JSONResponseTest extends \PHPUnit_Framework_TestCase {
+class JSONResponseTest extends \Test\TestCase {
/**
* @var JSONResponse
@@ -38,6 +38,7 @@ class JSONResponseTest extends \PHPUnit_Framework_TestCase {
private $json;
protected function setUp() {
+ parent::setUp();
$this->json = new JSONResponse();
}
diff --git a/tests/lib/appframework/http/RedirectResponseTest.php b/tests/lib/appframework/http/RedirectResponseTest.php
index e5d452f7f91..17db0c0be6c 100644
--- a/tests/lib/appframework/http/RedirectResponseTest.php
+++ b/tests/lib/appframework/http/RedirectResponseTest.php
@@ -27,7 +27,7 @@ namespace OCP\AppFramework\Http;
use OCP\AppFramework\Http;
-class RedirectResponseTest extends \PHPUnit_Framework_TestCase {
+class RedirectResponseTest extends \Test\TestCase {
/**
* @var RedirectResponse
@@ -35,6 +35,7 @@ class RedirectResponseTest extends \PHPUnit_Framework_TestCase {
protected $response;
protected function setUp(){
+ parent::setUp();
$this->response = new RedirectResponse('/url');
}
diff --git a/tests/lib/appframework/http/RequestTest.php b/tests/lib/appframework/http/RequestTest.php
index 58828d17bb2..caa22c84415 100644
--- a/tests/lib/appframework/http/RequestTest.php
+++ b/tests/lib/appframework/http/RequestTest.php
@@ -10,9 +10,11 @@ namespace OC\AppFramework\Http;
global $data;
-class RequestTest extends \PHPUnit_Framework_TestCase {
+class RequestTest extends \Test\TestCase {
+
+ protected function setUp() {
+ parent::setUp();
- public function setUp() {
require_once __DIR__ . '/requeststream.php';
if (in_array('fakeinput', stream_get_wrappers())) {
stream_wrapper_unregister('fakeinput');
@@ -21,8 +23,9 @@ class RequestTest extends \PHPUnit_Framework_TestCase {
$this->stream = 'fakeinput://data';
}
- public function tearDown() {
+ protected function tearDown() {
stream_wrapper_unregister('fakeinput');
+ parent::tearDown();
}
public function testRequestAccessors() {
diff --git a/tests/lib/appframework/http/ResponseTest.php b/tests/lib/appframework/http/ResponseTest.php
index b1dddd9ebc7..b4352348bae 100644
--- a/tests/lib/appframework/http/ResponseTest.php
+++ b/tests/lib/appframework/http/ResponseTest.php
@@ -29,7 +29,7 @@ use OCP\AppFramework\Http\Response;
use OCP\AppFramework\Http;
-class ResponseTest extends \PHPUnit_Framework_TestCase {
+class ResponseTest extends \Test\TestCase {
/**
* @var \OCP\AppFramework\Http\Response
@@ -37,6 +37,7 @@ class ResponseTest extends \PHPUnit_Framework_TestCase {
private $childResponse;
protected function setUp(){
+ parent::setUp();
$this->childResponse = new Response();
}
@@ -75,6 +76,92 @@ class ResponseTest extends \PHPUnit_Framework_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/appframework/http/TemplateResponseTest.php b/tests/lib/appframework/http/TemplateResponseTest.php
index afdcf322b85..2ec57f8979a 100644
--- a/tests/lib/appframework/http/TemplateResponseTest.php
+++ b/tests/lib/appframework/http/TemplateResponseTest.php
@@ -28,7 +28,7 @@ use OCP\AppFramework\Http\TemplateResponse;
use OCP\AppFramework\Http;
-class TemplateResponseTest extends \PHPUnit_Framework_TestCase {
+class TemplateResponseTest extends \Test\TestCase {
/**
* @var \OCP\AppFramework\Http\TemplateResponse
@@ -41,6 +41,8 @@ class TemplateResponseTest extends \PHPUnit_Framework_TestCase {
private $api;
protected function setUp() {
+ parent::setUp();
+
$this->api = $this->getMock('OC\AppFramework\Core\API',
array('getAppName'), array('test'));
$this->api->expects($this->any())
diff --git a/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php b/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php
index b1e221aab99..be8765afd39 100644
--- a/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php
+++ b/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php
@@ -100,7 +100,7 @@ class TestMiddleware extends Middleware {
}
-class MiddlewareDispatcherTest extends \PHPUnit_Framework_TestCase {
+class MiddlewareDispatcherTest extends \Test\TestCase {
public $exception;
public $response;
@@ -113,8 +113,9 @@ class MiddlewareDispatcherTest extends \PHPUnit_Framework_TestCase {
*/
private $dispatcher;
+ protected function setUp() {
+ parent::setUp();
- public function setUp() {
$this->dispatcher = new MiddlewareDispatcher();
$this->controller = $this->getControllerMock();
$this->method = 'method';
diff --git a/tests/lib/appframework/middleware/MiddlewareTest.php b/tests/lib/appframework/middleware/MiddlewareTest.php
index 9d952f61573..b41ec33eb15 100644
--- a/tests/lib/appframework/middleware/MiddlewareTest.php
+++ b/tests/lib/appframework/middleware/MiddlewareTest.php
@@ -31,7 +31,7 @@ use OCP\AppFramework\Middleware;
class ChildMiddleware extends Middleware {};
-class MiddlewareTest extends \PHPUnit_Framework_TestCase {
+class MiddlewareTest extends \Test\TestCase {
/**
* @var Middleware
@@ -42,6 +42,8 @@ class MiddlewareTest extends \PHPUnit_Framework_TestCase {
private $api;
protected function setUp(){
+ parent::setUp();
+
$this->middleware = new ChildMiddleware();
$this->api = $this->getMockBuilder(
diff --git a/tests/lib/appframework/middleware/security/CORSMiddlewareTest.php b/tests/lib/appframework/middleware/security/CORSMiddlewareTest.php
index 79cd3b278af..b4bbcce5ad7 100644
--- a/tests/lib/appframework/middleware/security/CORSMiddlewareTest.php
+++ b/tests/lib/appframework/middleware/security/CORSMiddlewareTest.php
@@ -18,11 +18,12 @@ use OC\AppFramework\Utility\ControllerMethodReflector;
use OCP\AppFramework\Http\Response;
-class CORSMiddlewareTest extends \PHPUnit_Framework_TestCase {
+class CORSMiddlewareTest extends \Test\TestCase {
private $reflector;
protected function setUp() {
+ parent::setUp();
$this->reflector = new ControllerMethodReflector();
}
diff --git a/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php b/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php
index 74fc7907fb5..a8925403a95 100644
--- a/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php
+++ b/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php
@@ -31,7 +31,7 @@ use OCP\AppFramework\Http\RedirectResponse;
use OCP\AppFramework\Http\JSONResponse;
-class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
+class SecurityMiddlewareTest extends \Test\TestCase {
private $middleware;
private $controller;
@@ -43,7 +43,9 @@ class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
private $navigationManager;
private $urlGenerator;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->controller = $this->getMockBuilder('OCP\AppFramework\Controller')
->disableOriginalConstructor()
->getMock();
@@ -77,7 +79,7 @@ class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
$this->navigationManager,
$this->urlGenerator,
$this->logger,
- 'test',
+ 'files',
$isLoggedIn,
$isAdminUser
);
@@ -91,7 +93,7 @@ class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
public function testSetNavigationEntry(){
$this->navigationManager->expects($this->once())
->method('setActiveEntry')
- ->with($this->equalTo('test'));
+ ->with($this->equalTo('files'));
$this->reader->reflect(__CLASS__, __FUNCTION__);
$this->middleware->beforeController(__CLASS__, __FUNCTION__);
diff --git a/tests/lib/appframework/middleware/sessionmiddlewaretest.php b/tests/lib/appframework/middleware/sessionmiddlewaretest.php
index 13e558bf21a..344b555ec3c 100644
--- a/tests/lib/appframework/middleware/sessionmiddlewaretest.php
+++ b/tests/lib/appframework/middleware/sessionmiddlewaretest.php
@@ -18,7 +18,7 @@ use OC\AppFramework\Utility\ControllerMethodReflector;
use OCP\AppFramework\Http\Response;
-class SessionMiddlewareTest extends \PHPUnit_Framework_TestCase {
+class SessionMiddlewareTest extends \Test\TestCase {
/**
* @var ControllerMethodReflector
@@ -31,6 +31,8 @@ class SessionMiddlewareTest extends \PHPUnit_Framework_TestCase {
private $request;
protected function setUp() {
+ parent::setUp();
+
$this->request = new Request();
$this->reflector = new ControllerMethodReflector();
}
diff --git a/tests/lib/appframework/routing/RoutingTest.php b/tests/lib/appframework/routing/RoutingTest.php
index a1d9a51a3c8..4ee3ed58807 100644
--- a/tests/lib/appframework/routing/RoutingTest.php
+++ b/tests/lib/appframework/routing/RoutingTest.php
@@ -6,7 +6,7 @@ use OC\AppFramework\DependencyInjection\DIContainer;
use OC\AppFramework\routing\RouteConfig;
-class RoutingTest extends \PHPUnit_Framework_TestCase
+class RoutingTest extends \Test\TestCase
{
public function testSimpleRoute()
@@ -54,6 +54,15 @@ class RoutingTest extends \PHPUnit_Framework_TestCase
$this->assertSimpleRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open', array(), array('param' => 'foobar'));
}
+ public function testSimpleRouteWithPostfix()
+ {
+ $routes = array('routes' => array(
+ array('name' => 'folders#open', 'url' => '/folders/{folderId}/open', 'verb' => 'delete', 'postfix' => '_something')
+ ));
+
+ $this->assertSimpleRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open', array(), array(), '_something');
+ }
+
/**
* @expectedException \UnexpectedValueException
@@ -104,8 +113,12 @@ class RoutingTest extends \PHPUnit_Framework_TestCase
* @param string $controllerName
* @param string $actionName
*/
- private function assertSimpleRoute($routes, $name, $verb, $url, $controllerName, $actionName, array $requirements=array(), array $defaults=array())
+ private function assertSimpleRoute($routes, $name, $verb, $url, $controllerName, $actionName, array $requirements=array(), array $defaults=array(), $postfix='')
{
+ if ($postfix) {
+ $name .= $postfix;
+ }
+
// route mocks
$route = $this->mockRoute($verb, $controllerName, $actionName, $requirements, $defaults);
diff --git a/tests/lib/appframework/utility/ControllerMethodReflectorTest.php b/tests/lib/appframework/utility/ControllerMethodReflectorTest.php
index 8939a203edb..cd6bd57da4c 100644
--- a/tests/lib/appframework/utility/ControllerMethodReflectorTest.php
+++ b/tests/lib/appframework/utility/ControllerMethodReflectorTest.php
@@ -25,7 +25,7 @@
namespace OC\AppFramework\Utility;
-class ControllerMethodReflectorTest extends \PHPUnit_Framework_TestCase {
+class ControllerMethodReflectorTest extends \Test\TestCase {
/**
diff --git a/tests/lib/archive.php b/tests/lib/archive.php
index be5cc897a67..690b4378b88 100644
--- a/tests/lib/archive.php
+++ b/tests/lib/archive.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-abstract class Test_Archive extends PHPUnit_Framework_TestCase {
+abstract class Test_Archive extends \Test\TestCase {
/**
* @var OC_Archive
*/
diff --git a/tests/lib/archive/tar.php b/tests/lib/archive/tar.php
index 5b9089b32e1..43157e2054d 100644
--- a/tests/lib/archive/tar.php
+++ b/tests/lib/archive/tar.php
@@ -7,11 +7,12 @@
*/
class Test_Archive_TAR extends Test_Archive {
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
if (OC_Util::runningOnWindows()) {
- $this->markTestSkipped('tar archives are not supported on windows');
+ $this->markTestSkipped('[Windows] tar archives are not supported on Windows');
}
- parent::setUp();
}
protected function getExisting() {
diff --git a/tests/lib/archive/zip.php b/tests/lib/archive/zip.php
index 90958baf380..09ea5d7d27c 100644
--- a/tests/lib/archive/zip.php
+++ b/tests/lib/archive/zip.php
@@ -6,8 +6,15 @@
* See the COPYING-README file.
*/
-if (!OC_Util::runningOnWindows()) {
class Test_Archive_ZIP extends Test_Archive {
+ protected function setUp() {
+ parent::setUp();
+
+ if (OC_Util::runningOnWindows()) {
+ $this->markTestSkipped('[Windows] ');
+ }
+ }
+
protected function getExisting() {
$dir = OC::$SERVERROOT . '/tests/data';
return new OC_Archive_ZIP($dir . '/data.zip');
@@ -17,4 +24,3 @@ class Test_Archive_ZIP extends Test_Archive {
return new OC_Archive_ZIP(OCP\Files::tmpFile('.zip'));
}
}
-}
diff --git a/tests/lib/autoloader.php b/tests/lib/autoloader.php
index 46172647249..bf63094a9ef 100644
--- a/tests/lib/autoloader.php
+++ b/tests/lib/autoloader.php
@@ -8,13 +8,14 @@
namespace Test;
-class AutoLoader extends \PHPUnit_Framework_TestCase {
+class AutoLoader extends TestCase {
/**
* @var \OC\Autoloader $loader
*/
private $loader;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$this->loader = new \OC\AutoLoader();
}
diff --git a/tests/lib/avatar.php b/tests/lib/avatar.php
index 0334639afa8..421be155d17 100644
--- a/tests/lib/avatar.php
+++ b/tests/lib/avatar.php
@@ -6,12 +6,14 @@
* later.
* See the COPYING-README file.
*/
-class Test_Avatar extends PHPUnit_Framework_TestCase {
+class Test_Avatar extends \Test\TestCase {
private $user;
- public function setUp() {
- $this->user = uniqid();
+ protected function setUp() {
+ parent::setUp();
+
+ $this->user = $this->getUniqueID();
$storage = new \OC\Files\Storage\Temporary(array());
\OC\Files\Filesystem::mount($storage, array(), '/' . $this->user . '/');
}
diff --git a/tests/lib/backgroundjob/job.php b/tests/lib/backgroundjob/job.php
index 10a8f46462e..fec9b0a792d 100644
--- a/tests/lib/backgroundjob/job.php
+++ b/tests/lib/backgroundjob/job.php
@@ -8,10 +8,11 @@
namespace Test\BackgroundJob;
-class Job extends \PHPUnit_Framework_TestCase {
+class Job extends \Test\TestCase {
private $run = false;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$this->run = false;
}
diff --git a/tests/lib/backgroundjob/joblist.php b/tests/lib/backgroundjob/joblist.php
index c3318f80cb2..13bee12479e 100644
--- a/tests/lib/backgroundjob/joblist.php
+++ b/tests/lib/backgroundjob/joblist.php
@@ -8,7 +8,7 @@
namespace Test\BackgroundJob;
-class JobList extends \PHPUnit_Framework_TestCase {
+class JobList extends \Test\TestCase {
/**
* @var \OC\BackgroundJob\JobList
*/
@@ -19,7 +19,9 @@ class JobList extends \PHPUnit_Framework_TestCase {
*/
protected $config;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$conn = \OC::$server->getDatabaseConnection();
$this->config = $this->getMock('\OCP\IConfig');
$this->instance = new \OC\BackgroundJob\JobList($conn, $this->config);
diff --git a/tests/lib/backgroundjob/queuedjob.php b/tests/lib/backgroundjob/queuedjob.php
index 19c1b28a507..8d3cd6f907b 100644
--- a/tests/lib/backgroundjob/queuedjob.php
+++ b/tests/lib/backgroundjob/queuedjob.php
@@ -23,7 +23,7 @@ class TestQueuedJob extends \OC\BackgroundJob\QueuedJob {
}
}
-class QueuedJob extends \PHPUnit_Framework_TestCase {
+class QueuedJob extends \Test\TestCase {
/**
* @var DummyJobList $jobList
*/
@@ -39,7 +39,9 @@ class QueuedJob extends \PHPUnit_Framework_TestCase {
$this->jobRun = true;
}
- public function setup() {
+ protected function setup() {
+ parent::setUp();
+
$this->jobList = new DummyJobList();
$this->job = new TestQueuedJob($this);
$this->jobList->add($this->job);
diff --git a/tests/lib/backgroundjob/timedjob.php b/tests/lib/backgroundjob/timedjob.php
index 646a2607ef3..7d9bfe979af 100644
--- a/tests/lib/backgroundjob/timedjob.php
+++ b/tests/lib/backgroundjob/timedjob.php
@@ -24,7 +24,7 @@ class TestTimedJob extends \OC\BackgroundJob\TimedJob {
}
}
-class TimedJob extends \PHPUnit_Framework_TestCase {
+class TimedJob extends \Test\TestCase {
/**
* @var DummyJobList $jobList
*/
@@ -40,7 +40,9 @@ class TimedJob extends \PHPUnit_Framework_TestCase {
$this->jobRun = true;
}
- public function setup() {
+ protected function setup() {
+ parent::setUp();
+
$this->jobList = new DummyJobList();
$this->job = new TestTimedJob($this);
$this->jobList->add($this->job);
diff --git a/tests/lib/cache.php b/tests/lib/cache.php
index 8fefa25f65d..894d8c57662 100644
--- a/tests/lib/cache.php
+++ b/tests/lib/cache.php
@@ -6,16 +6,18 @@
* See the COPYING-README file.
*/
-abstract class Test_Cache extends PHPUnit_Framework_TestCase {
+abstract class Test_Cache extends \Test\TestCase {
/**
* @var \OC\Cache cache;
*/
protected $instance;
- public function tearDown() {
+ protected function tearDown() {
if($this->instance) {
$this->instance->clear();
}
+
+ parent::tearDown();
}
function testSimple() {
diff --git a/tests/lib/cache/file.php b/tests/lib/cache/file.php
index 0e19c105cd1..d51322036c8 100644
--- a/tests/lib/cache/file.php
+++ b/tests/lib/cache/file.php
@@ -23,14 +23,20 @@
namespace Test\Cache;
class FileCache extends \Test_Cache {
+ /** @var string */
private $user;
+ /** @var string */
private $datadir;
+ /** @var \OC\Files\Storage\Storage */
+ private $storage;
function skip() {
//$this->skipUnless(OC_User::isLoggedIn());
}
-
- public function setUp() {
+
+ protected function setUp() {
+ parent::setUp();
+
//clear all proxies and hooks so we can do clean testing
\OC_FileProxy::clearProxies();
\OC_Hook::clear('OC_Filesystem');
@@ -42,6 +48,7 @@ class FileCache extends \Test_Cache {
//}
//set up temporary storage
+ $this->storage = \OC\Files\Filesystem::getStorage('/');
\OC\Files\Filesystem::clearMounts();
$storage = new \OC\Files\Storage\Temporary(array());
\OC\Files\Filesystem::mount($storage,array(),'/');
@@ -65,8 +72,14 @@ class FileCache extends \Test_Cache {
$this->instance=new \OC\Cache\File();
}
- public function tearDown() {
+ protected function tearDown() {
\OC_User::setUserId($this->user);
\OC_Config::setValue('cachedirectory', $this->datadir);
+
+ // Restore the original mount point
+ \OC\Files\Filesystem::clearMounts();
+ \OC\Files\Filesystem::mount($this->storage, array(), '/');
+
+ parent::tearDown();
}
}
diff --git a/tests/lib/cache/usercache.php b/tests/lib/cache/usercache.php
index a1b6af1c55d..3822a714d5a 100644
--- a/tests/lib/cache/usercache.php
+++ b/tests/lib/cache/usercache.php
@@ -23,10 +23,16 @@
namespace Test\Cache;
class UserCache extends \Test_Cache {
+ /** @var string */
private $user;
+ /** @var string */
private $datadir;
+ /** @var \OC\Files\Storage\Storage */
+ private $storage;
+
+ protected function setUp() {
+ parent::setUp();
- public function setUp() {
//clear all proxies and hooks so we can do clean testing
\OC_FileProxy::clearProxies();
\OC_Hook::clear('OC_Filesystem');
@@ -38,6 +44,7 @@ class UserCache extends \Test_Cache {
//}
//set up temporary storage
+ $this->storage = \OC\Files\Filesystem::getStorage('/');
\OC\Files\Filesystem::clearMounts();
$storage = new \OC\Files\Storage\Temporary(array());
\OC\Files\Filesystem::mount($storage,array(),'/');
@@ -61,7 +68,14 @@ class UserCache extends \Test_Cache {
$this->instance=new \OC\Cache\UserCache();
}
- public function tearDown() {
+ protected function tearDown() {
\OC_User::setUserId($this->user);
+ \OC_Config::setValue('cachedirectory', $this->datadir);
+
+ // Restore the original mount point
+ \OC\Files\Filesystem::clearMounts();
+ \OC\Files\Filesystem::mount($this->storage, array(), '/');
+
+ parent::tearDown();
}
}
diff --git a/tests/lib/config.php b/tests/lib/config.php
index 180f6b1649b..9dff3aab84f 100644
--- a/tests/lib/config.php
+++ b/tests/lib/config.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_Config extends PHPUnit_Framework_TestCase {
+class Test_Config extends \Test\TestCase {
const TESTCONTENT = '<?php $CONFIG=array("foo"=>"bar", "beers" => array("Appenzeller", "Guinness", "Kölsch"), "alcohol_free" => false);';
/** @var array */
@@ -18,15 +18,18 @@ class Test_Config extends PHPUnit_Framework_TestCase {
/** @var string */
private $randomTmpDir;
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->randomTmpDir = \OC_Helper::tmpFolder();
$this->configFile = $this->randomTmpDir.'testconfig.php';
file_put_contents($this->configFile, self::TESTCONTENT);
$this->config = new OC\Config($this->randomTmpDir, 'testconfig.php');
}
- public function tearDown() {
+ protected function tearDown() {
unlink($this->configFile);
+ parent::tearDown();
}
public function testGetKeys() {
diff --git a/tests/lib/connector/sabre/directory.php b/tests/lib/connector/sabre/directory.php
index 453d8e8d42a..d8dca35cd71 100644
--- a/tests/lib/connector/sabre/directory.php
+++ b/tests/lib/connector/sabre/directory.php
@@ -6,12 +6,14 @@
* later.
* See the COPYING-README file.
*/
-class Test_OC_Connector_Sabre_Directory extends PHPUnit_Framework_TestCase {
+class Test_OC_Connector_Sabre_Directory extends \Test\TestCase {
private $view;
private $info;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->view = $this->getMock('OC\Files\View', array(), array(), '', false);
$this->info = $this->getMock('OC\Files\FileInfo', array(), array(), '', false);
}
diff --git a/tests/lib/connector/sabre/file.php b/tests/lib/connector/sabre/file.php
index 0993a27f372..b4fdd91f512 100644
--- a/tests/lib/connector/sabre/file.php
+++ b/tests/lib/connector/sabre/file.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase {
+class Test_OC_Connector_Sabre_File extends \Test\TestCase {
/**
* @expectedException \Sabre\DAV\Exception
@@ -23,7 +23,7 @@ class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase {
->will($this->returnValue('/test.txt'));
$info = new \OC\Files\FileInfo('/test.txt', null, null, array(
- 'permissions'=>\OCP\PERMISSION_ALL
+ 'permissions'=>\OCP\Constants::PERMISSION_ALL
));
$file = new OC_Connector_Sabre_File($view, $info);
@@ -58,7 +58,7 @@ class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase {
$_SERVER['REQUEST_METHOD'] = 'PUT';
$info = new \OC\Files\FileInfo('/test.txt', null, null, array(
- 'permissions' => \OCP\PERMISSION_ALL
+ 'permissions' => \OCP\Constants::PERMISSION_ALL
));
$file = new OC_Connector_Sabre_File($view, $info);
@@ -82,7 +82,7 @@ class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase {
->will($this->returnValue('/super*star.txt'));
$info = new \OC\Files\FileInfo('/super*star.txt', null, null, array(
- 'permissions' => \OCP\PERMISSION_ALL
+ 'permissions' => \OCP\Constants::PERMISSION_ALL
));
$file = new OC_Connector_Sabre_File($view, $info);
@@ -103,7 +103,7 @@ class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase {
->will($this->returnValue('/super*star.txt'));
$info = new \OC\Files\FileInfo('/super*star.txt', null, null, array(
- 'permissions' => \OCP\PERMISSION_ALL
+ 'permissions' => \OCP\Constants::PERMISSION_ALL
));
$file = new OC_Connector_Sabre_File($view, $info);
$file->setName('/super*star.txt');
@@ -135,7 +135,7 @@ class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase {
$_SERVER['REQUEST_METHOD'] = 'PUT';
$info = new \OC\Files\FileInfo('/test.txt', null, null, array(
- 'permissions' => \OCP\PERMISSION_ALL
+ 'permissions' => \OCP\Constants::PERMISSION_ALL
));
$file = new OC_Connector_Sabre_File($view, $info);
@@ -157,7 +157,7 @@ class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase {
->will($this->returnValue(true));
$info = new \OC\Files\FileInfo('/test.txt', null, null, array(
- 'permissions' => \OCP\PERMISSION_ALL
+ 'permissions' => \OCP\Constants::PERMISSION_ALL
));
$file = new OC_Connector_Sabre_File($view, $info);
@@ -198,7 +198,7 @@ class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase {
->will($this->returnValue(false));
$info = new \OC\Files\FileInfo('/test.txt', null, null, array(
- 'permissions' => \OCP\PERMISSION_ALL
+ 'permissions' => \OCP\Constants::PERMISSION_ALL
));
$file = new OC_Connector_Sabre_File($view, $info);
diff --git a/tests/lib/connector/sabre/node.php b/tests/lib/connector/sabre/node.php
index 0f303457248..1e927deed44 100644
--- a/tests/lib/connector/sabre/node.php
+++ b/tests/lib/connector/sabre/node.php
@@ -12,18 +12,18 @@ namespace Test\Connector\Sabre;
use OC\Files\FileInfo;
use OC\Files\View;
-class Node extends \PHPUnit_Framework_TestCase {
+class Node extends \Test\TestCase {
public function davPermissionsProvider() {
return array(
- array(\OCP\PERMISSION_ALL, 'file', false, false, 'RDNVW'),
- array(\OCP\PERMISSION_ALL, 'dir', false, false, 'RDNVCK'),
- array(\OCP\PERMISSION_ALL, 'file', true, false, 'SRDNVW'),
- array(\OCP\PERMISSION_ALL, 'file', true, true, 'SRMDNVW'),
- array(\OCP\PERMISSION_ALL - \OCP\PERMISSION_SHARE, 'file', true, false, 'SDNVW'),
- array(\OCP\PERMISSION_ALL - \OCP\PERMISSION_UPDATE, 'file', false, false, 'RDNV'),
- array(\OCP\PERMISSION_ALL - \OCP\PERMISSION_DELETE, 'file', false, false, 'RW'),
- array(\OCP\PERMISSION_ALL - \OCP\PERMISSION_CREATE, 'file', false, false, 'RDNVW'),
- array(\OCP\PERMISSION_ALL - \OCP\PERMISSION_CREATE, 'dir', false, false, 'RDNV'),
+ array(\OCP\Constants::PERMISSION_ALL, 'file', false, false, 'RDNVW'),
+ array(\OCP\Constants::PERMISSION_ALL, 'dir', false, false, 'RDNVCK'),
+ array(\OCP\Constants::PERMISSION_ALL, 'file', true, false, 'SRDNVW'),
+ array(\OCP\Constants::PERMISSION_ALL, 'file', true, true, 'SRMDNVW'),
+ array(\OCP\Constants::PERMISSION_ALL - \OCP\Constants::PERMISSION_SHARE, 'file', true, false, 'SDNVW'),
+ array(\OCP\Constants::PERMISSION_ALL - \OCP\Constants::PERMISSION_UPDATE, 'file', false, false, 'RDNV'),
+ array(\OCP\Constants::PERMISSION_ALL - \OCP\Constants::PERMISSION_DELETE, 'file', false, false, 'RW'),
+ array(\OCP\Constants::PERMISSION_ALL - \OCP\Constants::PERMISSION_CREATE, 'file', false, false, 'RDNVW'),
+ array(\OCP\Constants::PERMISSION_ALL - \OCP\Constants::PERMISSION_CREATE, 'dir', false, false, 'RDNV'),
);
}
diff --git a/tests/lib/connector/sabre/objecttree.php b/tests/lib/connector/sabre/objecttree.php
index fc9f802066f..d1de46d2ee7 100644
--- a/tests/lib/connector/sabre/objecttree.php
+++ b/tests/lib/connector/sabre/objecttree.php
@@ -13,7 +13,7 @@ use OC\Files\FileInfo;
use OC_Connector_Sabre_Directory;
use PHPUnit_Framework_TestCase;
-class TestDoubleFileView extends \OC\Files\View{
+class TestDoubleFileView extends \OC\Files\View {
public function __construct($updatables, $deletables, $canRename = true) {
$this->updatables = $updatables;
@@ -42,7 +42,7 @@ class TestDoubleFileView extends \OC\Files\View{
}
}
-class ObjectTree extends PHPUnit_Framework_TestCase {
+class ObjectTree extends \Test\TestCase {
/**
* @dataProvider moveFailedProvider
diff --git a/tests/lib/connector/sabre/quotaplugin.php b/tests/lib/connector/sabre/quotaplugin.php
index 3b144cf56b5..f08637854ce 100644
--- a/tests/lib/connector/sabre/quotaplugin.php
+++ b/tests/lib/connector/sabre/quotaplugin.php
@@ -6,7 +6,7 @@
* later.
* See the COPYING-README file.
*/
-class Test_OC_Connector_Sabre_QuotaPlugin extends PHPUnit_Framework_TestCase {
+class Test_OC_Connector_Sabre_QuotaPlugin extends \Test\TestCase {
/**
* @var \Sabre\DAV\Server
diff --git a/tests/lib/contacts/localadressbook.php b/tests/lib/contacts/localadressbook.php
index bb69910820f..5fa260ffc3b 100644
--- a/tests/lib/contacts/localadressbook.php
+++ b/tests/lib/contacts/localadressbook.php
@@ -11,7 +11,7 @@ use OC\Contacts\LocalAddressBook;
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
-class Test_LocalAddressBook extends PHPUnit_Framework_TestCase
+class Test_LocalAddressBook extends \Test\TestCase
{
public function testSearchFN() {
diff --git a/tests/lib/db.php b/tests/lib/db.php
index fb673b8092b..aefbb3624ed 100644
--- a/tests/lib/db.php
+++ b/tests/lib/db.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_DB extends PHPUnit_Framework_TestCase {
+class Test_DB extends \Test\TestCase {
protected $backupGlobals = FALSE;
protected static $schema_file = 'static://test_db_scheme';
@@ -32,7 +32,9 @@ class Test_DB extends PHPUnit_Framework_TestCase {
*/
private $table4;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$dbfile = OC::$SERVERROOT.'/tests/data/db_structure.xml';
$r = '_'.OC_Util::generateRandomBytes(4).'_';
@@ -48,9 +50,11 @@ class Test_DB extends PHPUnit_Framework_TestCase {
$this->table4 = $this->test_prefix.'decimal';
}
- public function tearDown() {
+ protected function tearDown() {
OC_DB::removeDBStructure(self::$schema_file);
unlink(self::$schema_file);
+
+ parent::tearDown();
}
public function testQuotes() {
@@ -261,7 +265,7 @@ class Test_DB extends PHPUnit_Framework_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/mdb2schemamanager.php b/tests/lib/db/mdb2schemamanager.php
index 527b2cba648..3e6abab70b4 100644
--- a/tests/lib/db/mdb2schemamanager.php
+++ b/tests/lib/db/mdb2schemamanager.php
@@ -12,15 +12,17 @@ namespace Test\DB;
use Doctrine\DBAL\Platforms\OraclePlatform;
use Doctrine\DBAL\Platforms\SQLServerPlatform;
-class MDB2SchemaManager extends \PHPUnit_Framework_TestCase {
+class MDB2SchemaManager extends \Test\TestCase {
- public function tearDown() {
+ protected function tearDown() {
// do not drop the table for Oracle as it will create a bogus transaction
// that will break the following test suites requiring transactions
if (\OC::$server->getConfig()->getSystemValue('dbtype', 'sqlite') === 'oci') {
return;
}
\OC_DB::dropTable('table');
+
+ parent::tearDown();
}
public function testAutoIncrement() {
diff --git a/tests/lib/db/mdb2schemareader.php b/tests/lib/db/mdb2schemareader.php
index f08996cbeaf..7939c782e80 100644
--- a/tests/lib/db/mdb2schemareader.php
+++ b/tests/lib/db/mdb2schemareader.php
@@ -11,7 +11,7 @@ namespace Test\DB;
use Doctrine\DBAL\Platforms\MySqlPlatform;
-class MDB2SchemaReader extends \PHPUnit_Framework_TestCase {
+class MDB2SchemaReader extends \Test\TestCase {
/**
* @var \OC\DB\MDB2SchemaReader $reader
*/
@@ -21,11 +21,11 @@ class MDB2SchemaReader extends \PHPUnit_Framework_TestCase {
* @return \OC\Config
*/
protected function getConfig() {
- $config = $this->getMockBuilder('\OC\Config')
+ $config = $this->getMockBuilder('\OCP\IConfig')
->disableOriginalConstructor()
->getMock();
$config->expects($this->any())
- ->method('getValue')
+ ->method('getSystemValue')
->will($this->returnValueMap(array(
array('dbname', 'owncloud', 'testDB'),
array('dbtableprefix', 'oc_', 'test_')
diff --git a/tests/lib/db/migrator.php b/tests/lib/db/migrator.php
index 09742a53eb4..1a1d530f1d2 100644
--- a/tests/lib/db/migrator.php
+++ b/tests/lib/db/migrator.php
@@ -15,7 +15,7 @@ use Doctrine\DBAL\Platforms\SQLServerPlatform;
use \Doctrine\DBAL\Schema\Schema;
use \Doctrine\DBAL\Schema\SchemaConfig;
-class Migrator extends \PHPUnit_Framework_TestCase {
+class Migrator extends \Test\TestCase {
/**
* @var \Doctrine\DBAL\Connection $connection
*/
@@ -28,7 +28,9 @@ class Migrator extends \PHPUnit_Framework_TestCase {
private $tableName;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->connection = \OC_DB::getConnection();
if ($this->connection->getDatabasePlatform() instanceof OraclePlatform) {
$this->markTestSkipped('DB migration tests are not supported on OCI');
@@ -37,11 +39,12 @@ class Migrator extends \PHPUnit_Framework_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_'));
}
- public function tearDown() {
+ protected function tearDown() {
$this->connection->exec('DROP TABLE ' . $this->tableName);
+ parent::tearDown();
}
/**
diff --git a/tests/lib/db/mysqlmigration.php b/tests/lib/db/mysqlmigration.php
index 584df1d4465..6c283e6c59c 100644
--- a/tests/lib/db/mysqlmigration.php
+++ b/tests/lib/db/mysqlmigration.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class TestMySqlMigration extends \PHPUnit_Framework_TestCase {
+class TestMySqlMigration extends \Test\TestCase {
/** @var \Doctrine\DBAL\Connection */
private $connection;
@@ -14,19 +14,22 @@ class TestMySqlMigration extends \PHPUnit_Framework_TestCase {
/** @var string */
private $tableName;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->connection = \OC_DB::getConnection();
if (!$this->connection->getDatabasePlatform() instanceof \Doctrine\DBAL\Platforms\MySqlPlatform) {
$this->markTestSkipped("Test only relevant on MySql");
}
$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'))");
}
- public function tearDown() {
+ protected function tearDown() {
$this->connection->getSchemaManager()->dropTable($this->tableName);
+ parent::tearDown();
}
public function testNonOCTables() {
diff --git a/tests/lib/db/sqlitemigration.php b/tests/lib/db/sqlitemigration.php
index adfc03a2ca7..9206381ff71 100644
--- a/tests/lib/db/sqlitemigration.php
+++ b/tests/lib/db/sqlitemigration.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class TestSqliteMigration extends \PHPUnit_Framework_TestCase {
+class TestSqliteMigration extends \Test\TestCase {
/** @var \Doctrine\DBAL\Connection */
private $connection;
@@ -14,19 +14,22 @@ class TestSqliteMigration extends \PHPUnit_Framework_TestCase {
/** @var string */
private $tableName;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->connection = \OC_DB::getConnection();
if (!$this->connection->getDatabasePlatform() instanceof \Doctrine\DBAL\Platforms\SqlitePlatform) {
$this->markTestSkipped("Test only relevant on Sqlite");
}
$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)");
}
- public function tearDown() {
+ protected function tearDown() {
$this->connection->getSchemaManager()->dropTable($this->tableName);
+ parent::tearDown();
}
public function testNonOCTables() {
diff --git a/tests/lib/dbschema.php b/tests/lib/dbschema.php
index d31bd34124e..cfaebec079e 100644
--- a/tests/lib/dbschema.php
+++ b/tests/lib/dbschema.php
@@ -9,13 +9,15 @@
use OCP\Security\ISecureRandom;
-class Test_DBSchema extends PHPUnit_Framework_TestCase {
+class Test_DBSchema extends \Test\TestCase {
protected $schema_file = 'static://test_db_scheme';
protected $schema_file2 = 'static://test_db_scheme2';
protected $table1;
protected $table2;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$dbfile = OC::$SERVERROOT.'/tests/data/db_structure.xml';
$dbfile2 = OC::$SERVERROOT.'/tests/data/db_structure2.xml';
@@ -32,9 +34,11 @@ class Test_DBSchema extends PHPUnit_Framework_TestCase {
$this->table2 = $r.'cntcts_cards';
}
- public function tearDown() {
+ protected function tearDown() {
unlink($this->schema_file);
unlink($this->schema_file2);
+
+ parent::tearDown();
}
// everything in one test, they depend on each other
diff --git a/tests/lib/errorHandler.php b/tests/lib/errorHandler.php
index 58db80b3c6e..726529e83f4 100644
--- a/tests/lib/errorHandler.php
+++ b/tests/lib/errorHandler.php
@@ -20,7 +20,7 @@
*
*/
-class Test_ErrorHandler extends \PHPUnit_Framework_TestCase {
+class Test_ErrorHandler extends \Test\TestCase {
/**
* provide username, password combinations for testRemovePassword
diff --git a/tests/lib/files/cache/cache.php b/tests/lib/files/cache/cache.php
index 969740419c6..7360e9885c1 100644
--- a/tests/lib/files/cache/cache.php
+++ b/tests/lib/files/cache/cache.php
@@ -16,24 +16,24 @@ class LongId extends \OC\Files\Storage\Temporary {
}
}
-class Cache extends \PHPUnit_Framework_TestCase {
+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';
@@ -452,13 +452,17 @@ class Cache extends \PHPUnit_Framework_TestCase {
$this->assertEquals(1, count($this->cache->getFolderContents('folder')));
}
- public function tearDown() {
+ protected function tearDown() {
if ($this->cache) {
$this->cache->clear();
}
+
+ parent::tearDown();
}
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->storage = new \OC\Files\Storage\Temporary(array());
$this->storage2 = new \OC\Files\Storage\Temporary(array());
$this->cache = new \OC\Files\Cache\Cache($this->storage);
diff --git a/tests/lib/files/cache/changepropagator.php b/tests/lib/files/cache/changepropagator.php
index a52682cd086..89bd9dfe80a 100644
--- a/tests/lib/files/cache/changepropagator.php
+++ b/tests/lib/files/cache/changepropagator.php
@@ -12,7 +12,7 @@ use OC\Files\Filesystem;
use OC\Files\Storage\Temporary;
use OC\Files\View;
-class ChangePropagator extends \PHPUnit_Framework_TestCase {
+class ChangePropagator extends \Test\TestCase {
/**
* @var \OC\Files\Cache\ChangePropagator
*/
@@ -23,9 +23,11 @@ class ChangePropagator extends \PHPUnit_Framework_TestCase {
*/
private $view;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$storage = new Temporary(array());
- $root = '/' . uniqid();
+ $root = $this->getUniqueID('/');
Filesystem::mount($storage, array(), $root);
$this->view = new View($root);
$this->propagator = new \OC\Files\Cache\ChangePropagator($this->view);
diff --git a/tests/lib/files/cache/homecache.php b/tests/lib/files/cache/homecache.php
index 80dc54c9d19..7ebb053bcfa 100644
--- a/tests/lib/files/cache/homecache.php
+++ b/tests/lib/files/cache/homecache.php
@@ -43,7 +43,7 @@ class DummyUser extends \OC\User\User {
}
}
-class HomeCache extends \PHPUnit_Framework_TestCase {
+class HomeCache extends \Test\TestCase {
/**
* @var \OC\Files\Storage\Home $storage
*/
@@ -59,7 +59,9 @@ class HomeCache extends \PHPUnit_Framework_TestCase {
*/
private $user;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->user = new DummyUser('foo', \OC_Helper::tmpFolder());
$this->storage = new \OC\Files\Storage\Home(array('user' => $this->user));
$this->cache = $this->storage->getCache();
diff --git a/tests/lib/files/cache/scanner.php b/tests/lib/files/cache/scanner.php
index 0a274631d1c..b44cf0a49df 100644
--- a/tests/lib/files/cache/scanner.php
+++ b/tests/lib/files/cache/scanner.php
@@ -8,7 +8,7 @@
namespace Test\Files\Cache;
-class Scanner extends \PHPUnit_Framework_TestCase {
+class Scanner extends \Test\TestCase {
/**
* @var \OC\Files\Storage\Storage $storage
*/
@@ -24,16 +24,20 @@ class Scanner extends \PHPUnit_Framework_TestCase {
*/
private $cache;
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->storage = new \OC\Files\Storage\Temporary(array());
$this->scanner = new \OC\Files\Cache\Scanner($this->storage);
$this->cache = new \OC\Files\Cache\Cache($this->storage);
}
- function tearDown() {
+ protected function tearDown() {
if ($this->cache) {
$this->cache->clear();
}
+
+ parent::tearDown();
}
function testFile() {
diff --git a/tests/lib/files/cache/updater.php b/tests/lib/files/cache/updater.php
index 96b4207ad43..01b036de5d8 100644
--- a/tests/lib/files/cache/updater.php
+++ b/tests/lib/files/cache/updater.php
@@ -12,7 +12,7 @@ use OC\Files\Filesystem;
use OC\Files\Storage\Temporary;
use OC\Files\View;
-class Updater extends \PHPUnit_Framework_TestCase {
+class Updater extends \Test\TestCase {
/**
* @var \OC\Files\Storage\Storage
*/
@@ -33,7 +33,14 @@ class Updater extends \PHPUnit_Framework_TestCase {
*/
protected $updater;
- public function setUp() {
+ /** @var \OC\Files\Storage\Storage */
+ private $originalStorage;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->originalStorage = Filesystem::getStorage('/');
+
$this->storage = new Temporary(array());
Filesystem::clearMounts();
Filesystem::mount($this->storage, array(), '/');
@@ -42,6 +49,13 @@ class Updater extends \PHPUnit_Framework_TestCase {
$this->cache = $this->storage->getCache();
}
+ protected function tearDown() {
+ Filesystem::clearMounts();
+ Filesystem::mount($this->originalStorage, array(), '/');
+
+ parent::tearDown();
+ }
+
public function testNewFile() {
$this->storage->file_put_contents('foo.txt', 'bar');
$this->assertFalse($this->cache->inCache('foo.txt'));
diff --git a/tests/lib/files/cache/updaterlegacy.php b/tests/lib/files/cache/updaterlegacy.php
index c80c3168ad6..7cf4dc6df5f 100644
--- a/tests/lib/files/cache/updaterlegacy.php
+++ b/tests/lib/files/cache/updaterlegacy.php
@@ -11,7 +11,7 @@ namespace Test\Files\Cache;
use \OC\Files\Filesystem as Filesystem;
use OC\Files\Storage\Temporary;
-class UpdaterLegacy extends \PHPUnit_Framework_TestCase {
+class UpdaterLegacy extends \Test\TestCase {
/**
* @var \OC\Files\Storage\Storage $storage
*/
@@ -29,9 +29,13 @@ class UpdaterLegacy extends \PHPUnit_Framework_TestCase {
*/
private $cache;
+ /** @var \OC\Files\Storage\Storage */
+ private $originalStorage;
+
private static $user;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
// remember files_encryption state
$this->stateFilesEncryption = \OC_App::isEnabled('files_encryption');
@@ -51,15 +55,16 @@ class UpdaterLegacy extends \PHPUnit_Framework_TestCase {
$this->scanner->scan('');
$this->cache = $this->storage->getCache();
- \OC\Files\Filesystem::tearDown();
+ $this->originalStorage = Filesystem::getStorage('/');
+ Filesystem::tearDown();
if (!self::$user) {
- self::$user = uniqid();
+ self::$user = $this->getUniqueID();
}
\OC_User::createUser(self::$user, 'password');
\OC_User::setUserId(self::$user);
- \OC\Files\Filesystem::init(self::$user, '/' . self::$user . '/files');
+ Filesystem::init(self::$user, '/' . self::$user . '/files');
Filesystem::clearMounts();
Filesystem::mount($this->storage, array(), '/' . self::$user . '/files');
@@ -67,17 +72,20 @@ class UpdaterLegacy extends \PHPUnit_Framework_TestCase {
\OC_Hook::clear('OC_Filesystem');
}
- public function tearDown() {
+ protected function tearDown() {
if ($this->cache) {
$this->cache->clear();
}
$result = \OC_User::deleteUser(self::$user);
$this->assertTrue($result);
Filesystem::tearDown();
+ Filesystem::mount($this->originalStorage, array(), '/');
// reset app files_encryption
if ($this->stateFilesEncryption) {
\OC_App::enable('files_encryption');
}
+
+ parent::tearDown();
}
public function testWrite() {
diff --git a/tests/lib/files/cache/watcher.php b/tests/lib/files/cache/watcher.php
index 22c11b9a4e0..ee605c64e01 100644
--- a/tests/lib/files/cache/watcher.php
+++ b/tests/lib/files/cache/watcher.php
@@ -8,23 +8,34 @@
namespace Test\Files\Cache;
-class Watcher extends \PHPUnit_Framework_TestCase {
+class Watcher extends \Test\TestCase {
/**
* @var \OC\Files\Storage\Storage[] $storages
*/
private $storages = array();
- public function setUp() {
+ /** @var \OC\Files\Storage\Storage */
+ private $originalStorage;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->originalStorage = \OC\Files\Filesystem::getStorage('/');
\OC\Files\Filesystem::clearMounts();
}
- public function tearDown() {
+ protected function tearDown() {
foreach ($this->storages as $storage) {
$cache = $storage->getCache();
$ids = $cache->getAll();
$cache->clear();
}
+
+ \OC\Files\Filesystem::clearMounts();
+ \OC\Files\Filesystem::mount($this->originalStorage, array(), '/');
+
+ parent::tearDown();
}
/**
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/etagtest.php b/tests/lib/files/etagtest.php
index b5dec107e79..eec24d9f4c6 100644
--- a/tests/lib/files/etagtest.php
+++ b/tests/lib/files/etagtest.php
@@ -11,7 +11,7 @@ namespace Test\Files;
use OC\Files\Filesystem;
use OCP\Share;
-class EtagTest extends \PHPUnit_Framework_TestCase {
+class EtagTest extends \Test\TestCase {
private $datadir;
private $tmpDir;
@@ -23,7 +23,12 @@ class EtagTest extends \PHPUnit_Framework_TestCase {
*/
private $userBackend;
- public function setUp() {
+ /** @var \OC\Files\Storage\Storage */
+ private $originalStorage;
+
+ protected function setUp() {
+ parent::setUp();
+
\OC_Hook::clear('OC_Filesystem', 'setup');
\OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup');
\OCP\Share::registerBackend('file', 'OC_Share_Backend_File');
@@ -37,17 +42,21 @@ class EtagTest extends \PHPUnit_Framework_TestCase {
$this->userBackend = new \OC_User_Dummy();
\OC_User::useBackend($this->userBackend);
+ $this->originalStorage = \OC\Files\Filesystem::getStorage('/');
\OC_Util::tearDownFS();
}
- public function tearDown() {
+ protected function tearDown() {
\OC_Config::setValue('datadirectory', $this->datadir);
\OC_User::setUserId($this->uid);
\OC_Util::setupFS($this->uid);
+ \OC\Files\Filesystem::mount($this->originalStorage, array(), '/');
+
+ parent::tearDown();
}
public function testNewUser() {
- $user1 = uniqid('user_');
+ $user1 = $this->getUniqueID('user_');
$this->userBackend->createUser($user1, '');
\OC_Util::tearDownFS();
diff --git a/tests/lib/files/filesystem.php b/tests/lib/files/filesystem.php
index 930a252bcb2..1b84db0fc0d 100644
--- a/tests/lib/files/filesystem.php
+++ b/tests/lib/files/filesystem.php
@@ -22,12 +22,15 @@
namespace Test\Files;
-class Filesystem extends \PHPUnit_Framework_TestCase {
+class Filesystem extends \Test\TestCase {
/**
* @var array tmpDirs
*/
private $tmpDirs = array();
+ /** @var \OC\Files\Storage\Storage */
+ private $originalStorage;
+
/**
* @return array
*/
@@ -37,17 +40,23 @@ class Filesystem extends \PHPUnit_Framework_TestCase {
return array('datadir' => $dir);
}
- public function tearDown() {
+ protected function setUp() {
+ parent::setUp();
+
+ $this->originalStorage = \OC\Files\Filesystem::getStorage('/');
+ \OC_User::setUserId('');
+ \OC\Files\Filesystem::clearMounts();
+ }
+
+ protected function tearDown() {
foreach ($this->tmpDirs as $dir) {
\OC_Helper::rmdirr($dir);
}
\OC\Files\Filesystem::clearMounts();
+ \OC\Files\Filesystem::mount($this->originalStorage, array(), '/');
\OC_User::setUserId('');
- }
- public function setUp() {
- \OC_User::setUserId('');
- \OC\Files\Filesystem::clearMounts();
+ parent::tearDown();
}
public function testMount() {
@@ -68,78 +77,119 @@ class Filesystem extends \PHPUnit_Framework_TestCase {
$this->assertEquals('folder', $internalPath);
}
- public function testNormalize() {
- $this->assertEquals('/', \OC\Files\Filesystem::normalizePath(''));
- $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('/'));
- $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('/', false));
- $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('//'));
- $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('//', false));
- $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('/path/'));
- $this->assertEquals('/path/', \OC\Files\Filesystem::normalizePath('/path/', false));
- $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('path'));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo//bar/'));
- $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('/foo//bar/', false));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo////bar'));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo/////bar'));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo/bar/.'));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo/bar/./'));
- $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('/foo/bar/./', false));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo/bar/./.'));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo/bar/././'));
- $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('/foo/bar/././', false));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo/./bar/'));
- $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('/foo/./bar/', false));
- $this->assertEquals('/foo/.bar', \OC\Files\Filesystem::normalizePath('/foo/.bar/'));
- $this->assertEquals('/foo/.bar/', \OC\Files\Filesystem::normalizePath('/foo/.bar/', false));
- $this->assertEquals('/foo/.bar/tee', \OC\Files\Filesystem::normalizePath('/foo/.bar/tee'));
-
- // normalize does not resolve '..' (by design)
- $this->assertEquals('/foo/..', \OC\Files\Filesystem::normalizePath('/foo/../'));
-
- if (class_exists('Patchwork\PHP\Shim\Normalizer')) {
- $this->assertEquals("/foo/bar\xC3\xBC", \OC\Files\Filesystem::normalizePath("/foo/baru\xCC\x88"));
+ public function normalizePathData() {
+ return array(
+ array('/', ''),
+ array('/', '/'),
+ array('/', '//'),
+ array('/', '/', false),
+ array('/', '//', false),
+
+ array('/path', '/path/'),
+ array('/path/', '/path/', false),
+ array('/path', 'path'),
+
+ array('/foo/bar', '/foo//bar/'),
+ array('/foo/bar/', '/foo//bar/', false),
+ array('/foo/bar', '/foo////bar'),
+ array('/foo/bar', '/foo/////bar'),
+ array('/foo/bar', '/foo/bar/.'),
+ array('/foo/bar', '/foo/bar/./'),
+ array('/foo/bar/', '/foo/bar/./', false),
+ array('/foo/bar', '/foo/bar/./.'),
+ array('/foo/bar', '/foo/bar/././'),
+ array('/foo/bar/', '/foo/bar/././', false),
+ array('/foo/bar', '/foo/./bar/'),
+ array('/foo/bar/', '/foo/./bar/', false),
+ array('/foo/.bar', '/foo/.bar/'),
+ array('/foo/.bar/', '/foo/.bar/', false),
+ array('/foo/.bar/tee', '/foo/.bar/tee'),
+
+ // Windows paths
+ array('/', ''),
+ array('/', '\\'),
+ array('/', '\\', false),
+ array('/', '\\\\'),
+ array('/', '\\\\', false),
+
+ array('/path', '\\path'),
+ array('/path', '\\path', false),
+ array('/path', '\\path\\'),
+ array('/path/', '\\path\\', false),
+
+ array('/foo/bar', '\\foo\\\\bar\\'),
+ array('/foo/bar/', '\\foo\\\\bar\\', false),
+ array('/foo/bar', '\\foo\\\\\\\\bar'),
+ array('/foo/bar', '\\foo\\\\\\\\\\bar'),
+ array('/foo/bar', '\\foo\\bar\\.'),
+ array('/foo/bar', '\\foo\\bar\\.\\'),
+ array('/foo/bar/', '\\foo\\bar\\.\\', false),
+ array('/foo/bar', '\\foo\\bar\\.\\.'),
+ array('/foo/bar', '\\foo\\bar\\.\\.\\'),
+ array('/foo/bar/', '\\foo\\bar\\.\\.\\', false),
+ array('/foo/bar', '\\foo\\.\\bar\\'),
+ array('/foo/bar/', '\\foo\\.\\bar\\', false),
+ array('/foo/.bar', '\\foo\\.bar\\'),
+ array('/foo/.bar/', '\\foo\\.bar\\', false),
+ array('/foo/.bar/tee', '\\foo\\.bar\\tee'),
+
+ // Absolute windows paths NOT marked as absolute
+ array('/C:', 'C:\\'),
+ array('/C:/', 'C:\\', false),
+ array('/C:/tests', 'C:\\tests'),
+ array('/C:/tests', 'C:\\tests', false),
+ array('/C:/tests', 'C:\\tests\\'),
+ array('/C:/tests/', 'C:\\tests\\', false),
+
+ // normalize does not resolve '..' (by design)
+ array('/foo/..', '/foo/../'),
+ array('/foo/..', '\\foo\\..\\'),
+ );
+ }
+
+ /**
+ * @dataProvider normalizePathData
+ */
+ public function testNormalizePath($expected, $path, $stripTrailingSlash = true) {
+ $this->assertEquals($expected, \OC\Files\Filesystem::normalizePath($path, $stripTrailingSlash));
+ }
+
+ public function normalizePathWindowsAbsolutePathData() {
+ return array(
+ array('C:/', 'C:\\'),
+ array('C:/', 'C:\\', false),
+ array('C:/tests', 'C:\\tests'),
+ array('C:/tests', 'C:\\tests', false),
+ array('C:/tests', 'C:\\tests\\'),
+ array('C:/tests/', 'C:\\tests\\', false),
+ );
+ }
+
+ /**
+ * @dataProvider normalizePathWindowsAbsolutePathData
+ */
+ public function testNormalizePathWindowsAbsolutePath($expected, $path, $stripTrailingSlash = true) {
+ if (!\OC_Util::runningOnWindows()) {
+ $this->markTestSkipped('This test is Windows only');
}
+
+ $this->assertEquals($expected, \OC\Files\Filesystem::normalizePath($path, $stripTrailingSlash, true));
}
- public function testNormalizeWindowsPaths() {
- $this->assertEquals('/', \OC\Files\Filesystem::normalizePath(''));
- $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('\\'));
- $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('\\', false));
- $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('\\\\'));
- $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('\\\\', false));
- $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('\\path'));
- $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('\\path', false));
- $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('\\path\\'));
- $this->assertEquals('/path/', \OC\Files\Filesystem::normalizePath('\\path\\', false));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\\\bar\\'));
- $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('\\foo\\\\bar\\', false));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\\\\\\\bar'));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\\\\\\\\\bar'));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\bar\\.'));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\bar\\.\\'));
- $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('\\foo\\bar\\.\\', false));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\bar\\.\\.'));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\bar\\.\\.\\'));
- $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('\\foo\\bar\\.\\.\\', false));
- $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\.\\bar\\'));
- $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('\\foo\\.\\bar\\', false));
- $this->assertEquals('/foo/.bar', \OC\Files\Filesystem::normalizePath('\\foo\\.bar\\'));
- $this->assertEquals('/foo/.bar/', \OC\Files\Filesystem::normalizePath('\\foo\\.bar\\', false));
- $this->assertEquals('/foo/.bar/tee', \OC\Files\Filesystem::normalizePath('\\foo\\.bar\\tee'));
-
- // normalize does not resolve '..' (by design)
- $this->assertEquals('/foo/..', \OC\Files\Filesystem::normalizePath('\\foo\\..\\'));
-
- if (class_exists('Patchwork\PHP\Shim\Normalizer')) {
- $this->assertEquals("/foo/bar\xC3\xBC", \OC\Files\Filesystem::normalizePath("\\foo\\baru\xCC\x88"));
+ public function testNormalizePathUTF8() {
+ if (!class_exists('Patchwork\PHP\Shim\Normalizer')) {
+ $this->markTestSkipped('UTF8 normalizer Patchwork was not found');
}
+
+ $this->assertEquals("/foo/bar\xC3\xBC", \OC\Files\Filesystem::normalizePath("/foo/baru\xCC\x88"));
+ $this->assertEquals("/foo/bar\xC3\xBC", \OC\Files\Filesystem::normalizePath("\\foo\\baru\xCC\x88"));
}
public function testHooks() {
if (\OC\Files\Filesystem::getView()) {
$user = \OC_User::getUser();
} else {
- $user = uniqid();
+ $user = $this->getUniqueID();
\OC\Files\Filesystem::init($user, '/' . $user . '/files');
}
\OC_Hook::clear('OC_Filesystem');
@@ -167,7 +217,7 @@ class Filesystem extends \PHPUnit_Framework_TestCase {
*/
public function testLocalMountWhenUserDoesNotExist() {
$datadir = \OC_Config::getValue("datadirectory", \OC::$SERVERROOT . "/data");
- $userId = uniqid('user_');
+ $userId = $this->getUniqueID('user_');
\OC\Files\Filesystem::initMountPoints($userId);
@@ -181,7 +231,7 @@ class Filesystem extends \PHPUnit_Framework_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);
@@ -201,7 +251,7 @@ class Filesystem extends \PHPUnit_Framework_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
@@ -231,7 +281,7 @@ class Filesystem extends \PHPUnit_Framework_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', '');
@@ -256,7 +306,7 @@ class Filesystem extends \PHPUnit_Framework_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/mapper.php b/tests/lib/files/mapper.php
index d513f3ce4b3..18161734b60 100644
--- a/tests/lib/files/mapper.php
+++ b/tests/lib/files/mapper.php
@@ -22,14 +22,15 @@
namespace Test\Files;
-class Mapper extends \PHPUnit_Framework_TestCase {
+class Mapper extends \Test\TestCase {
/**
* @var \OC\Files\Mapper
*/
private $mapper = null;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$this->mapper = new \OC\Files\Mapper('D:/');
}
diff --git a/tests/lib/files/mount/manager.php b/tests/lib/files/mount/manager.php
index 154c35ccead..051b76ccf2e 100644
--- a/tests/lib/files/mount/manager.php
+++ b/tests/lib/files/mount/manager.php
@@ -16,13 +16,14 @@ class LongId extends Temporary {
}
}
-class Manager extends \PHPUnit_Framework_TestCase {
+class Manager extends \Test\TestCase {
/**
* @var \OC\Files\Mount\Manager
*/
private $manager;
- public function setup() {
+ protected function setup() {
+ parent::setUp();
$this->manager = new \OC\Files\Mount\Manager();
}
diff --git a/tests/lib/files/mount/mount.php b/tests/lib/files/mount/mount.php
index c3d33e0870b..5ee3d934e97 100644
--- a/tests/lib/files/mount/mount.php
+++ b/tests/lib/files/mount/mount.php
@@ -12,7 +12,7 @@ namespace Test\Files\Mount;
use OC\Files\Storage\Loader;
use OC\Files\Storage\Wrapper\Wrapper;
-class Mount extends \PHPUnit_Framework_TestCase {
+class Mount extends \Test\TestCase {
public function testFromStorageObject() {
$storage = $this->getMockBuilder('\OC\Files\Storage\Temporary')
->disableOriginalConstructor()
diff --git a/tests/lib/files/node/file.php b/tests/lib/files/node/file.php
index 76938a0dcc8..a1d2266edf7 100644
--- a/tests/lib/files/node/file.php
+++ b/tests/lib/files/node/file.php
@@ -8,17 +8,23 @@
namespace Test\Files\Node;
+use OC\Files\FileInfo;
use OCP\Files\NotFoundException;
use OCP\Files\NotPermittedException;
use OC\Files\View;
-class File extends \PHPUnit_Framework_TestCase {
+class File extends \Test\TestCase {
private $user;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$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');
@@ -38,7 +44,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_ALL)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
$view->expects($this->once())
->method('unlink')
@@ -88,7 +94,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->any())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_ALL, 'fileid' => 1)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1))));
$view->expects($this->once())
->method('unlink')
@@ -123,7 +129,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\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();
@@ -155,7 +161,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\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());
@@ -179,7 +185,7 @@ class File extends \PHPUnit_Framework_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();
@@ -200,7 +206,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_ALL)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
$view->expects($this->once())
->method('file_put_contents')
@@ -225,7 +231,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\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');
@@ -240,9 +246,9 @@ class File extends \PHPUnit_Framework_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());
@@ -278,7 +284,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\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');
@@ -315,7 +321,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\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');
@@ -347,7 +353,7 @@ class File extends \PHPUnit_Framework_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');
@@ -374,7 +380,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\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');
@@ -401,7 +407,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\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');
@@ -424,7 +430,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->any())
->method('getFileInfo')
- ->will($this->returnValue(array('permissions' => \OCP\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');
@@ -468,7 +474,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->any())
->method('getFileInfo')
- ->will($this->returnValue(array('permissions' => \OCP\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');
@@ -555,7 +561,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->any())
->method('getFileInfo')
- ->will($this->returnValue(array('permissions' => \OCP\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');
@@ -586,7 +592,7 @@ class File extends \PHPUnit_Framework_TestCase {
$view->expects($this->any())
->method('getFileInfo')
- ->will($this->returnValue(array('permissions' => \OCP\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 436161aba72..4aa57aa9373 100644
--- a/tests/lib/files/node/folder.php
+++ b/tests/lib/files/node/folder.php
@@ -9,19 +9,25 @@
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;
use OCP\Files\NotPermittedException;
use OC\Files\View;
-class Folder extends \PHPUnit_Framework_TestCase {
+class Folder extends \Test\TestCase {
private $user;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$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');
/**
@@ -38,7 +44,7 @@ class Folder extends \PHPUnit_Framework_TestCase {
$view->expects($this->any())
->method('getFileInfo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_ALL)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
$view->expects($this->once())
->method('rmdir')
@@ -86,7 +92,7 @@ class Folder extends \PHPUnit_Framework_TestCase {
$view->expects($this->any())
->method('getFileInfo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_ALL, 'fileid' => 1)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1))));
$view->expects($this->once())
->method('rmdir')
@@ -120,7 +126,7 @@ class Folder extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\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();
@@ -254,7 +260,7 @@ class Folder extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_ALL)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
$view->expects($this->once())
->method('mkdir')
@@ -284,7 +290,7 @@ class Folder extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\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');
@@ -304,7 +310,7 @@ class Folder extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\PERMISSION_ALL)));
+ ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL))));
$view->expects($this->once())
->method('touch')
@@ -334,7 +340,7 @@ class Folder extends \PHPUnit_Framework_TestCase {
$view->expects($this->once())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\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 319f2f9f5f7..d8c180cc844 100644
--- a/tests/lib/files/node/integration.php
+++ b/tests/lib/files/node/integration.php
@@ -14,12 +14,15 @@ use OC\Files\Storage\Temporary;
use OC\Files\View;
use OC\User\User;
-class IntegrationTests extends \PHPUnit_Framework_TestCase {
+class IntegrationTests extends \Test\TestCase {
/**
* @var \OC\Files\Node\Root $root
*/
private $root;
+ /** @var \OC\Files\Storage\Storage */
+ private $originalStorage;
+
/**
* @var \OC\Files\Storage\Storage[]
*/
@@ -30,7 +33,10 @@ class IntegrationTests extends \PHPUnit_Framework_TestCase {
*/
private $view;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
+ $this->originalStorage = \OC\Files\Filesystem::getStorage('/');
\OC\Files\Filesystem::init('', '');
\OC\Files\Filesystem::clearMounts();
$manager = \OC\Files\Filesystem::getMountManager();
@@ -42,7 +48,7 @@ class IntegrationTests extends \PHPUnit_Framework_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);
@@ -54,11 +60,14 @@ class IntegrationTests extends \PHPUnit_Framework_TestCase {
$this->root->mount($subStorage, '/substorage/');
}
- public function tearDown() {
+ protected function tearDown() {
foreach ($this->storages as $storage) {
$storage->getCache()->clear();
}
\OC\Files\Filesystem::clearMounts();
+ \OC\Files\Filesystem::mount($this->originalStorage, array(), '/');
+
+ parent::tearDown();
}
public function testBasicFile() {
diff --git a/tests/lib/files/node/node.php b/tests/lib/files/node/node.php
index cf5fec30522..4697479ba95 100644
--- a/tests/lib/files/node/node.php
+++ b/tests/lib/files/node/node.php
@@ -8,13 +8,20 @@
namespace Test\Files\Node;
-class Node extends \PHPUnit_Framework_TestCase {
+use OC\Files\FileInfo;
+
+class Node extends \Test\TestCase {
private $user;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$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');
/**
@@ -54,12 +61,12 @@ class Node extends \PHPUnit_Framework_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')
@@ -81,10 +88,18 @@ class Node extends \PHPUnit_Framework_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());
@@ -101,12 +116,12 @@ class Node extends \PHPUnit_Framework_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')
@@ -127,15 +142,18 @@ class Node extends \PHPUnit_Framework_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());
@@ -238,14 +256,9 @@ class Node extends \PHPUnit_Framework_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\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);
@@ -298,7 +311,7 @@ class Node extends \PHPUnit_Framework_TestCase {
$view->expects($this->any())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\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);
@@ -322,7 +335,7 @@ class Node extends \PHPUnit_Framework_TestCase {
$view->expects($this->any())
->method('getFileInfo')
->with('/bar/foo')
- ->will($this->returnValue(array('permissions' => \OCP\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 27f1a937826..35bd462157e 100644
--- a/tests/lib/files/node/root.php
+++ b/tests/lib/files/node/root.php
@@ -8,16 +8,22 @@
namespace Test\Files\Node;
+use OC\Files\FileInfo;
use OCP\Files\NotPermittedException;
use OC\Files\Mount\Manager;
-class Root extends \PHPUnit_Framework_TestCase {
+class Root extends \Test\TestCase {
private $user;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$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();
/**
@@ -33,7 +39,7 @@ class Root extends \PHPUnit_Framework_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 37d6cc74de6..30c60598277 100644
--- a/tests/lib/files/objectstore/swift.php
+++ b/tests/lib/files/objectstore/swift.php
@@ -30,9 +30,11 @@ class Swift extends \Test\Files\Storage\Storage {
private $objectStorage;
- public function setUp() {
+ protected function setUp() {
+ 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');
@@ -74,19 +76,17 @@ class Swift extends \Test\Files\Storage\Storage {
$this->instance = new ObjectStoreStorage($params);
}
- public function tearDown() {
+ protected function tearDown() {
if (is_null($this->instance)) {
return;
}
$this->objectStorage->deleteContainer(true);
$this->instance->getCache()->clear();
+
+ parent::tearDown();
}
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/commontest.php b/tests/lib/files/storage/commontest.php
index ce53c884f32..2b70dc8713e 100644
--- a/tests/lib/files/storage/commontest.php
+++ b/tests/lib/files/storage/commontest.php
@@ -27,12 +27,15 @@ class CommonTest extends Storage {
* @var string tmpDir
*/
private $tmpDir;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->tmpDir=\OC_Helper::tmpFolder();
$this->instance=new \OC\Files\Storage\CommonTest(array('datadir'=>$this->tmpDir));
}
- public function tearDown() {
+ protected function tearDown() {
\OC_Helper::rmdirr($this->tmpDir);
+ parent::tearDown();
}
}
diff --git a/tests/lib/files/storage/home.php b/tests/lib/files/storage/home.php
index 953fcfc8a6a..b0670a22892 100644
--- a/tests/lib/files/storage/home.php
+++ b/tests/lib/files/storage/home.php
@@ -60,22 +60,30 @@ class Home extends Storage {
*/
private $user;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->tmpDir = \OC_Helper::tmpFolder();
- $this->userId = uniqid('user_');
+ $this->userId = $this->getUniqueID('user_');
$this->user = new DummyUser($this->userId, $this->tmpDir);
$this->instance = new \OC\Files\Storage\Home(array('user' => $this->user));
}
- public function tearDown() {
+ protected function tearDown() {
\OC_Helper::rmdirr($this->tmpDir);
+ parent::tearDown();
}
/**
* Tests that the root path matches the data dir
*/
public function testRoot() {
- $this->assertEquals($this->tmpDir, $this->instance->getLocalFolder(''));
+ if (\OC_Util::runningOnWindows()) {
+ // Windows removes trailing slashes when returning paths
+ $this->assertEquals(rtrim($this->tmpDir, '/'), $this->instance->getLocalFolder(''));
+ } else {
+ $this->assertEquals($this->tmpDir, $this->instance->getLocalFolder(''));
+ }
}
/**
diff --git a/tests/lib/files/storage/local.php b/tests/lib/files/storage/local.php
index 37462941d0c..d2b27117c3b 100644
--- a/tests/lib/files/storage/local.php
+++ b/tests/lib/files/storage/local.php
@@ -28,18 +28,21 @@ class Local extends Storage {
*/
private $tmpDir;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->tmpDir = \OC_Helper::tmpFolder();
$this->instance = new \OC\Files\Storage\Local(array('datadir' => $this->tmpDir));
}
- public function tearDown() {
+ protected function tearDown() {
\OC_Helper::rmdirr($this->tmpDir);
+ parent::tearDown();
}
public function testStableEtag() {
if (\OC_Util::runningOnWindows()) {
- $this->markTestSkipped('On Windows platform we have no stable etag generation - yet');
+ $this->markTestSkipped('[Windows] On Windows platform we have no stable etag generation - yet');
}
$this->instance->file_put_contents('test.txt', 'foobar');
@@ -50,7 +53,7 @@ class Local extends Storage {
public function testEtagChange() {
if (\OC_Util::runningOnWindows()) {
- $this->markTestSkipped('On Windows platform we have no stable etag generation - yet');
+ $this->markTestSkipped('[Windows] On Windows platform we have no stable etag generation - yet');
}
$this->instance->file_put_contents('test.txt', 'foo');
diff --git a/tests/lib/files/storage/mappedlocal.php b/tests/lib/files/storage/mappedlocal.php
index b483f3a1954..1e87b53d00a 100644
--- a/tests/lib/files/storage/mappedlocal.php
+++ b/tests/lib/files/storage/mappedlocal.php
@@ -27,14 +27,17 @@ class MappedLocal extends Storage {
* @var string tmpDir
*/
private $tmpDir;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->tmpDir=\OC_Helper::tmpFolder();
$this->instance=new \OC\Files\Storage\MappedLocal(array('datadir'=>$this->tmpDir));
}
- public function tearDown() {
+ protected function tearDown() {
\OC_Helper::rmdirr($this->tmpDir);
unset($this->instance);
+ parent::tearDown();
}
}
diff --git a/tests/lib/files/storage/mappedlocalwithdotteddatadir.php b/tests/lib/files/storage/mappedlocalwithdotteddatadir.php
index d2e5e2e97af..3a733b7b469 100644
--- a/tests/lib/files/storage/mappedlocalwithdotteddatadir.php
+++ b/tests/lib/files/storage/mappedlocalwithdotteddatadir.php
@@ -28,15 +28,18 @@ class MappedLocalWithDottedDataDir extends Storage {
*/
private $tmpDir;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->tmpDir = \OC_Helper::tmpFolder().'dir.123'.DIRECTORY_SEPARATOR;
mkdir($this->tmpDir);
$this->instance=new \OC\Files\Storage\MappedLocal(array('datadir'=>$this->tmpDir));
}
- public function tearDown() {
+ protected function tearDown() {
\OC_Helper::rmdirr($this->tmpDir);
unset($this->instance);
+ parent::tearDown();
}
}
diff --git a/tests/lib/files/storage/storage.php b/tests/lib/files/storage/storage.php
index 960eb137ea0..30f403d60df 100644
--- a/tests/lib/files/storage/storage.php
+++ b/tests/lib/files/storage/storage.php
@@ -22,7 +22,7 @@
namespace Test\Files\Storage;
-abstract class Storage extends \PHPUnit_Framework_TestCase {
+abstract class Storage extends \Test\TestCase {
/**
* @var \OC\Files\Storage\Storage instance
*/
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/storage/wrapper/quota.php b/tests/lib/files/storage/wrapper/quota.php
index 954fe199cc8..9e6b1c85a95 100644
--- a/tests/lib/files/storage/wrapper/quota.php
+++ b/tests/lib/files/storage/wrapper/quota.php
@@ -17,14 +17,17 @@ class Quota extends \Test\Files\Storage\Storage {
*/
private $tmpDir;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->tmpDir = \OC_Helper::tmpFolder();
$storage = new \OC\Files\Storage\Local(array('datadir' => $this->tmpDir));
$this->instance = new \OC\Files\Storage\Wrapper\Quota(array('storage' => $storage, 'quota' => 10000000));
}
- public function tearDown() {
+ protected function tearDown() {
\OC_Helper::rmdirr($this->tmpDir);
+ parent::tearDown();
}
/**
diff --git a/tests/lib/files/storage/wrapper/wrapper.php b/tests/lib/files/storage/wrapper/wrapper.php
index 8bcf42035d4..486cd0495c1 100644
--- a/tests/lib/files/storage/wrapper/wrapper.php
+++ b/tests/lib/files/storage/wrapper/wrapper.php
@@ -14,14 +14,17 @@ class Wrapper extends \Test\Files\Storage\Storage {
*/
private $tmpDir;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->tmpDir = \OC_Helper::tmpFolder();
$storage = new \OC\Files\Storage\Local(array('datadir' => $this->tmpDir));
$this->instance = new \OC\Files\Storage\Wrapper\Wrapper(array('storage' => $storage));
}
- public function tearDown() {
+ protected function tearDown() {
\OC_Helper::rmdirr($this->tmpDir);
+ parent::tearDown();
}
public function testInstanceOfStorageWrapper() {
diff --git a/tests/lib/files/stream/quota.php b/tests/lib/files/stream/quota.php
index d5edace544d..28584cf82db 100644
--- a/tests/lib/files/stream/quota.php
+++ b/tests/lib/files/stream/quota.php
@@ -8,9 +8,10 @@
namespace Test\Files\Stream;
-class Quota extends \PHPUnit_Framework_TestCase {
- public function tearDown() {
+class Quota extends \Test\TestCase {
+ protected function tearDown() {
\OC\Files\Stream\Quota::clear();
+ parent::tearDown();
}
/**
diff --git a/tests/lib/files/stream/staticstream.php b/tests/lib/files/stream/staticstream.php
index d55086196a0..416a4670efd 100644
--- a/tests/lib/files/stream/staticstream.php
+++ b/tests/lib/files/stream/staticstream.php
@@ -8,18 +8,20 @@
namespace Test\Files\Stream;
-class StaticStream extends \PHPUnit_Framework_TestCase {
+class StaticStream extends \Test\TestCase {
private $sourceFile;
private $sourceText;
- public function __construct() {
+ protected function setUp() {
+ parent::setUp();
$this->sourceFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
$this->sourceText = file_get_contents($this->sourceFile);
}
- public function tearDown() {
+ protected function tearDown() {
\OC\Files\Stream\StaticStream::clear();
+ parent::tearDown();
}
public function testContent() {
diff --git a/tests/lib/files/utils/scanner.php b/tests/lib/files/utils/scanner.php
index 27b9b8dd4f4..f729be81bd7 100644
--- a/tests/lib/files/utils/scanner.php
+++ b/tests/lib/files/utils/scanner.php
@@ -38,7 +38,22 @@ class TestScanner extends \OC\Files\Utils\Scanner {
}
}
-class Scanner extends \PHPUnit_Framework_TestCase {
+class Scanner extends \Test\TestCase {
+ /** @var \OC\Files\Storage\Storage */
+ private $originalStorage;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->originalStorage = \OC\Files\Filesystem::getStorage('/');
+ }
+
+ protected function tearDown() {
+ \OC\Files\Filesystem::mount($this->originalStorage, array(), '/');
+
+ parent::tearDown();
+ }
+
public function testReuseExistingRoot() {
$storage = new Temporary(array());
$mount = new Mount($storage, '');
diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php
index 086ac873bfb..8bb4e0ac2cc 100644
--- a/tests/lib/files/view.php
+++ b/tests/lib/files/view.php
@@ -16,16 +16,22 @@ class TemporaryNoTouch extends \OC\Files\Storage\Temporary {
}
}
-class View extends \PHPUnit_Framework_TestCase {
+class View extends \Test\TestCase {
/**
* @var \OC\Files\Storage\Storage[] $storages
*/
private $storages = array();
private $user;
+ /** @var \OC\Files\Storage\Storage */
private $tempStorage;
- public function setUp() {
+ /** @var \OC\Files\Storage\Storage */
+ private $originalStorage;
+
+ protected function setUp() {
+ parent::setUp();
+
\OC_User::clearBackends();
\OC_User::useBackend(new \OC_User_Dummy());
@@ -34,12 +40,13 @@ class View extends \PHPUnit_Framework_TestCase {
$this->user = \OC_User::getUser();
\OC_User::setUserId('test');
+ $this->originalStorage = \OC\Files\Filesystem::getStorage('/');
\OC\Files\Filesystem::clearMounts();
$this->tempStorage = null;
}
- public function tearDown() {
+ protected function tearDown() {
\OC_User::setUserId($this->user);
foreach ($this->storages as $storage) {
$cache = $storage->getCache();
@@ -50,6 +57,11 @@ class View extends \PHPUnit_Framework_TestCase {
if ($this->tempStorage && !\OC_Util::runningOnWindows()) {
system('rm -rf ' . escapeshellarg($this->tempStorage->getDataDir()));
}
+
+ \OC\Files\Filesystem::clearMounts();
+ \OC\Files\Filesystem::mount($this->originalStorage, array(), '/');
+
+ parent::tearDown();
}
/**
@@ -59,7 +71,7 @@ class View extends \PHPUnit_Framework_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');
@@ -599,7 +611,7 @@ class View extends \PHPUnit_Framework_TestCase {
$folderName = 'abcdefghijklmnopqrstuvwxyz012345678901234567890123456789';
$tmpdirLength = strlen(\OC_Helper::tmpFolder());
if (\OC_Util::runningOnWindows()) {
- $this->markTestSkipped();
+ $this->markTestSkipped('[Windows] ');
$depth = ((260 - $tmpdirLength) / 57);
}elseif(\OC_Util::runningOnMac()){
$depth = ((1024 - $tmpdirLength) / 57);
diff --git a/tests/lib/geo.php b/tests/lib/geo.php
index 1c56a976129..0678297b55a 100644
--- a/tests/lib/geo.php
+++ b/tests/lib/geo.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_Geo extends PHPUnit_Framework_TestCase {
+class Test_Geo extends \Test\TestCase {
/**
* @medium
diff --git a/tests/lib/group.php b/tests/lib/group.php
index 724e723b187..795de695513 100644
--- a/tests/lib/group.php
+++ b/tests/lib/group.php
@@ -22,38 +22,39 @@
*
*/
-class Test_Group extends PHPUnit_Framework_TestCase {
- function setUp() {
+class Test_Group extends \Test\TestCase {
+ protected function setUp() {
+ parent::setUp();
OC_Group::clearBackends();
OC_User::clearBackends();
}
- function testSingleBackend() {
+ public function testSingleBackend() {
$userBackend = new \OC_User_Dummy();
\OC_User::getManager()->registerBackend($userBackend);
OC_Group::useBackend(new OC_Group_Dummy());
- $group1 = uniqid();
- $group2 = uniqid();
+ $group1 = $this->getUniqueID();
+ $group2 = $this->getUniqueID();
OC_Group::createGroup($group1);
OC_Group::createGroup($group2);
- $user1 = uniqid();
- $user2 = uniqid();
+ $user1 = $this->getUniqueID();
+ $user2 = $this->getUniqueID();
$userBackend->createUser($user1, '');
$userBackend->createUser($user2, '');
- $this->assertFalse(OC_Group::inGroup($user1, $group1));
- $this->assertFalse(OC_Group::inGroup($user2, $group1));
- $this->assertFalse(OC_Group::inGroup($user1, $group2));
- $this->assertFalse(OC_Group::inGroup($user2, $group2));
+ $this->assertFalse(OC_Group::inGroup($user1, $group1), 'Asserting that user1 is not in group1');
+ $this->assertFalse(OC_Group::inGroup($user2, $group1), 'Asserting that user2 is not in group1');
+ $this->assertFalse(OC_Group::inGroup($user1, $group2), 'Asserting that user1 is not in group2');
+ $this->assertFalse(OC_Group::inGroup($user2, $group2), 'Asserting that user2 is not in group2');
$this->assertTrue(OC_Group::addToGroup($user1, $group1));
- $this->assertTrue(OC_Group::inGroup($user1, $group1));
- $this->assertFalse(OC_Group::inGroup($user2, $group1));
- $this->assertFalse(OC_Group::inGroup($user1, $group2));
- $this->assertFalse(OC_Group::inGroup($user2, $group2));
+ $this->assertTrue(OC_Group::inGroup($user1, $group1), 'Asserting that user1 is in group1');
+ $this->assertFalse(OC_Group::inGroup($user2, $group1), 'Asserting that user2 is not in group1');
+ $this->assertFalse(OC_Group::inGroup($user1, $group2), 'Asserting that user1 is not in group2');
+ $this->assertFalse(OC_Group::inGroup($user2, $group2), 'Asserting that user2 is not in group2');
$this->assertTrue(OC_Group::addToGroup($user1, $group1));
@@ -80,7 +81,7 @@ class Test_Group extends PHPUnit_Framework_TestCase {
public function testNoGroupsTwice() {
OC_Group::useBackend(new OC_Group_Dummy());
- $group = uniqid();
+ $group = $this->getUniqueID();
OC_Group::createGroup($group);
$groupCopy = $group;
@@ -103,7 +104,7 @@ class Test_Group extends PHPUnit_Framework_TestCase {
public function testDontAddUserToNonexistentGroup() {
OC_Group::useBackend(new OC_Group_Dummy());
$groupNonExistent = 'notExistent';
- $user = uniqid();
+ $user = $this->getUniqueID();
$this->assertEquals(false, OC_Group::addToGroup($user, $groupNonExistent));
$this->assertEquals(array(), OC_Group::getGroups());
@@ -114,12 +115,12 @@ class Test_Group extends PHPUnit_Framework_TestCase {
$userBackend = new \OC_User_Dummy();
\OC_User::getManager()->registerBackend($userBackend);
- $group1 = uniqid();
- $group2 = uniqid();
- $group3 = uniqid();
- $user1 = uniqid();
- $user2 = uniqid();
- $user3 = uniqid();
+ $group1 = $this->getUniqueID();
+ $group2 = $this->getUniqueID();
+ $group3 = $this->getUniqueID();
+ $user1 = $this->getUniqueID();
+ $user2 = $this->getUniqueID();
+ $user3 = $this->getUniqueID();
OC_Group::createGroup($group1);
OC_Group::createGroup($group2);
OC_Group::createGroup($group3);
@@ -139,8 +140,7 @@ class Test_Group extends PHPUnit_Framework_TestCase {
// FIXME: needs more parameter variation
}
-
- function testMultiBackend() {
+ public function testMultiBackend() {
$userBackend = new \OC_User_Dummy();
\OC_User::getManager()->registerBackend($userBackend);
$backend1 = new OC_Group_Dummy();
@@ -148,8 +148,8 @@ class Test_Group extends PHPUnit_Framework_TestCase {
OC_Group::useBackend($backend1);
OC_Group::useBackend($backend2);
- $group1 = uniqid();
- $group2 = uniqid();
+ $group1 = $this->getUniqueID();
+ $group2 = $this->getUniqueID();
OC_Group::createGroup($group1);
//groups should be added to the first registered backend
@@ -166,8 +166,8 @@ class Test_Group extends PHPUnit_Framework_TestCase {
$this->assertTrue(OC_Group::groupExists($group1));
$this->assertTrue(OC_Group::groupExists($group2));
- $user1 = uniqid();
- $user2 = uniqid();
+ $user1 = $this->getUniqueID();
+ $user2 = $this->getUniqueID();
$userBackend->createUser($user1, '');
$userBackend->createUser($user2, '');
diff --git a/tests/lib/group/backend.php b/tests/lib/group/backend.php
index 95a5cf5f49c..62c189489d7 100644
--- a/tests/lib/group/backend.php
+++ b/tests/lib/group/backend.php
@@ -20,7 +20,7 @@
*
*/
-abstract class Test_Group_Backend extends PHPUnit_Framework_TestCase {
+abstract class Test_Group_Backend extends \Test\TestCase {
/**
* @var OC_Group_Backend $backend
*/
@@ -33,7 +33,7 @@ abstract class Test_Group_Backend extends PHPUnit_Framework_TestCase {
*/
public function getGroupName($name = null) {
if(is_null($name)) {
- return uniqid('test_');
+ return $this->getUniqueID('test_');
} else {
return $name;
}
@@ -45,7 +45,7 @@ abstract class Test_Group_Backend extends PHPUnit_Framework_TestCase {
* @return string
*/
public function getUserName() {
- return uniqid('test_');
+ return $this->getUniqueID('test_');
}
public function testAddRemove() {
@@ -138,6 +138,4 @@ abstract class Test_Group_Backend extends PHPUnit_Framework_TestCase {
$result = $this->backend->countUsersInGroup($group, 'bar');
$this->assertSame(2, $result);
}
-
-
}
diff --git a/tests/lib/group/database.php b/tests/lib/group/database.php
index 9b39ac00452..10958a6ccdc 100644
--- a/tests/lib/group/database.php
+++ b/tests/lib/group/database.php
@@ -22,36 +22,27 @@
class Test_Group_Database extends Test_Group_Backend {
private $groups=array();
-
+
/**
* get a new unique group name
* test cases can override this in order to clean up created groups
* @return string
*/
public function getGroupName($name = null) {
- if(is_null($name)) {
- $name=uniqid('test_');
- }
- $this->groups[]=$name;
+ $name = parent::getGroupName($name);
+ $this->groups[] = $name;
return $name;
}
- /**
- * get a new unique user name
- * test cases can override this in order to clean up created user
- * @return string
- */
- public function getUserName() {
- return uniqid('test_');
- }
-
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$this->backend=new OC_Group_Database();
}
- public function tearDown() {
+ protected function tearDown() {
foreach($this->groups as $group) {
$this->backend->deleteGroup($group);
}
+ parent::tearDown();
}
}
diff --git a/tests/lib/group/dummy.php b/tests/lib/group/dummy.php
index 287d6f1a977..b4456c8f7e1 100644
--- a/tests/lib/group/dummy.php
+++ b/tests/lib/group/dummy.php
@@ -21,7 +21,8 @@
*/
class Test_Group_Dummy extends Test_Group_Backend {
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$this->backend=new OC_Group_Dummy();
}
}
diff --git a/tests/lib/group/group.php b/tests/lib/group/group.php
index 4d15999a826..d758e5959d0 100644
--- a/tests/lib/group/group.php
+++ b/tests/lib/group/group.php
@@ -11,7 +11,7 @@ namespace Test\Group;
use OC\User\User;
-class Group extends \PHPUnit_Framework_TestCase {
+class Group extends \Test\TestCase {
/**
* @return \OC\User\Manager | \OC\User\Manager
*/
diff --git a/tests/lib/group/manager.php b/tests/lib/group/manager.php
index 8fd19513c0a..f72ea8e912f 100644
--- a/tests/lib/group/manager.php
+++ b/tests/lib/group/manager.php
@@ -11,7 +11,7 @@ namespace Test\Group;
use OC\User\User;
-class Manager extends \PHPUnit_Framework_TestCase {
+class Manager extends \Test\TestCase {
public function testGet() {
/**
* @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
diff --git a/tests/lib/group/metadata.php b/tests/lib/group/metadata.php
index 7ef2d6b35ff..94944189cad 100644
--- a/tests/lib/group/metadata.php
+++ b/tests/lib/group/metadata.php
@@ -9,7 +9,7 @@
namespace Test\Group;
-class Test_MetaData extends \PHPUnit_Framework_TestCase {
+class Test_MetaData extends \Test\TestCase {
private function getGroupManagerMock() {
return $this->getMockBuilder('\OC\Group\Manager')
->disableOriginalConstructor()
diff --git a/tests/lib/helper.php b/tests/lib/helper.php
index 520a3e0e669..53a3e1a0ec8 100644
--- a/tests/lib/helper.php
+++ b/tests/lib/helper.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_Helper extends PHPUnit_Framework_TestCase {
+class Test_Helper extends \Test\TestCase {
/**
* @dataProvider humanFileSizeProvider
@@ -115,6 +115,10 @@ class Test_Helper extends PHPUnit_Framework_TestCase {
}
function testGetStringMimeType() {
+ if (\OC_Util::runningOnWindows()) {
+ $this->markTestSkipped('[Windows] Strings have mimetype application/octet-stream on Windows');
+ }
+
$result = OC_Helper::getStringMimeType("/data/data.tar.gz");
$expected = 'text/plain; charset=us-ascii';
$this->assertEquals($result, $expected);
diff --git a/tests/lib/helperstorage.php b/tests/lib/helperstorage.php
index 4fdd9dd6b9b..9f3bd8824f7 100644
--- a/tests/lib/helperstorage.php
+++ b/tests/lib/helperstorage.php
@@ -9,14 +9,22 @@
/**
* Test the storage functions of OC_Helper
*/
-class Test_Helper_Storage extends PHPUnit_Framework_TestCase {
+
+class Test_Helper_Storage extends \Test\TestCase {
+ /** @var string */
private $user;
+ /** @var \OC\Files\Storage\Storage */
private $storageMock;
+ /** @var \OC\Files\Storage\Storage */
+ private $storage;
+
+ protected function setUp() {
+ parent::setUp();
- public function setUp() {
- $this->user = 'user_' . uniqid();
+ $this->user = $this->getUniqueID('user_');
\OC_User::createUser($this->user, $this->user);
+ $this->storage = \OC\Files\Filesystem::getStorage('/');
\OC\Files\Filesystem::tearDown();
\OC_User::setUserId($this->user);
\OC\Files\Filesystem::init($this->user, '/' . $this->user . '/files');
@@ -25,7 +33,7 @@ class Test_Helper_Storage extends PHPUnit_Framework_TestCase {
$this->storageMock = null;
}
- public function tearDown() {
+ protected function tearDown() {
$this->user = null;
if ($this->storageMock) {
@@ -33,10 +41,13 @@ class Test_Helper_Storage extends PHPUnit_Framework_TestCase {
$this->storageMock = null;
}
\OC\Files\Filesystem::tearDown();
+ \OC\Files\Filesystem::mount($this->storage, array(), '/');
\OC_User::setUserId('');
\OC_User::deleteUser($this->user);
\OC_Preferences::deleteUser($this->user);
+
+ parent::tearDown();
}
/**
diff --git a/tests/lib/hooks/basicemitter.php b/tests/lib/hooks/basicemitter.php
index 0eae730d030..899d3ecd3b3 100644
--- a/tests/lib/hooks/basicemitter.php
+++ b/tests/lib/hooks/basicemitter.php
@@ -31,13 +31,14 @@ class DummyEmitter extends \OC\Hooks\BasicEmitter {
class EmittedException extends \Exception {
}
-class BasicEmitter extends \PHPUnit_Framework_TestCase {
+class BasicEmitter extends \Test\TestCase {
/**
* @var \OC\Hooks\Emitter $emitter
*/
protected $emitter;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$this->emitter = new DummyEmitter();
}
diff --git a/tests/lib/hooks/legacyemitter.php b/tests/lib/hooks/legacyemitter.php
index a7bed879a72..f030afbc090 100644
--- a/tests/lib/hooks/legacyemitter.php
+++ b/tests/lib/hooks/legacyemitter.php
@@ -26,7 +26,9 @@ class LegacyEmitter extends BasicEmitter {
//we can't use exceptions here since OC_Hooks catches all exceptions
private static $emitted = false;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->emitter = new DummyLegacyEmitter();
self::$emitted = false;
\OC_Hook::clear('Test','test');
diff --git a/tests/lib/httphelper.php b/tests/lib/httphelper.php
index 191200aee3d..eb58508f158 100644
--- a/tests/lib/httphelper.php
+++ b/tests/lib/httphelper.php
@@ -6,14 +6,16 @@
* See the COPYING-README file.
*/
-class TestHTTPHelper extends \PHPUnit_Framework_TestCase {
+class TestHTTPHelper extends \Test\TestCase {
/** @var \OC\AllConfig*/
private $config;
/** @var \OC\HTTPHelper */
private $httpHelperMock;
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->config = $this->getMockBuilder('\OC\AllConfig')
->disableOriginalConstructor()->getMock();
$this->httpHelperMock = $this->getMockBuilder('\OC\HTTPHelper')
@@ -22,7 +24,7 @@ class TestHTTPHelper extends \PHPUnit_Framework_TestCase {
->getMock();
}
- public function testIsHTTPProvider() {
+ public function isHttpTestData() {
return array(
array('http://wwww.owncloud.org/enterprise/', true),
array('https://wwww.owncloud.org/enterprise/', true),
@@ -79,7 +81,7 @@ class TestHTTPHelper extends \PHPUnit_Framework_TestCase {
}
/**
- * @dataProvider testIsHTTPProvider
+ * @dataProvider isHttpTestData
*/
public function testIsHTTP($url, $expected) {
$this->assertSame($expected, $this->httpHelperMock->isHTTPURL($url));
diff --git a/tests/lib/image.php b/tests/lib/image.php
index 795bc464159..e0009b9710e 100644
--- a/tests/lib/image.php
+++ b/tests/lib/image.php
@@ -6,10 +6,12 @@
* See the COPYING-README file.
*/
-class Test_Image extends PHPUnit_Framework_TestCase {
+class Test_Image extends \Test\TestCase {
public static function tearDownAfterClass() {
@unlink(OC::$SERVERROOT.'/tests/data/testimage2.png');
@unlink(OC::$SERVERROOT.'/tests/data/testimage2.jpg');
+
+ parent::tearDownAfterClass();
}
public function testGetMimeTypeForFile() {
@@ -62,14 +64,18 @@ class Test_Image extends PHPUnit_Framework_TestCase {
$img = new \OC_Image(OC::$SERVERROOT.'/tests/data/testimage.png');
$this->assertEquals('image/png', $img->mimeType());
+ $img = new \OC_Image(null);
+ $this->assertEquals('', $img->mimeType());
+
+ if (\OC_Util::runningOnWindows()) {
+ $this->markTestSkipped('[Windows] Images created with imagecreate() are pngs on windows');
+ }
+
$img = new \OC_Image(file_get_contents(OC::$SERVERROOT.'/tests/data/testimage.jpg'));
$this->assertEquals('image/jpeg', $img->mimeType());
$img = new \OC_Image(base64_encode(file_get_contents(OC::$SERVERROOT.'/tests/data/testimage.gif')));
$this->assertEquals('image/gif', $img->mimeType());
-
- $img = new \OC_Image(null);
- $this->assertEquals('', $img->mimeType());
}
public function testWidth() {
diff --git a/tests/lib/installer.php b/tests/lib/installer.php
index 5e267245200..b58a71b5a08 100644
--- a/tests/lib/installer.php
+++ b/tests/lib/installer.php
@@ -6,20 +6,24 @@
* See the COPYING-README file.
*/
-class Test_Installer extends PHPUnit_Framework_TestCase {
+class Test_Installer extends \Test\TestCase {
private static $appid = 'testapp';
private $appstore;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->appstore = OC_Config::getValue('appstoreenabled', true);
OC_Config::setValue('appstoreenabled', true);
OC_Installer::removeApp(self::$appid);
}
- public function tearDown() {
+ protected function tearDown() {
OC_Installer::removeApp(self::$appid);
OC_Config::setValue('appstoreenabled', $this->appstore);
+
+ parent::tearDown();
}
public function testInstallApp() {
diff --git a/tests/lib/l10n.php b/tests/lib/l10n.php
index df86fcfda81..68f43b76f51 100644
--- a/tests/lib/l10n.php
+++ b/tests/lib/l10n.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_L10n extends PHPUnit_Framework_TestCase {
+class Test_L10n extends \Test\TestCase {
public function testGermanPluralTranslations() {
$l = new OC_L10N('test');
diff --git a/tests/lib/largefilehelper.php b/tests/lib/largefilehelper.php
index 5db1f9c5a74..1267a8c5833 100644
--- a/tests/lib/largefilehelper.php
+++ b/tests/lib/largefilehelper.php
@@ -8,10 +8,10 @@
namespace Test;
-class LargeFileHelper extends \PHPUnit_Framework_TestCase {
+class LargeFileHelper extends TestCase {
protected $helper;
- public function setUp() {
+ protected function setUp() {
parent::setUp();
$this->helper = new \OC\LargeFileHelper;
}
diff --git a/tests/lib/largefilehelpergetfilesize.php b/tests/lib/largefilehelpergetfilesize.php
index 58571d641e0..c97b7b32b0f 100644
--- a/tests/lib/largefilehelpergetfilesize.php
+++ b/tests/lib/largefilehelpergetfilesize.php
@@ -12,59 +12,78 @@ namespace Test;
* Tests whether LargeFileHelper is able to determine file size at all.
* Large files are not considered yet.
*/
-class LargeFileHelperGetFileSize extends \PHPUnit_Framework_TestCase {
- protected $filename;
- protected $fileSize;
+class LargeFileHelperGetFileSize extends TestCase {
+ /** @var \OC\LargeFileHelper */
protected $helper;
- public function setUp() {
+ protected function setUp() {
parent::setUp();
- $ds = DIRECTORY_SEPARATOR;
- $this->filename = dirname(__DIR__) . "{$ds}data{$ds}strängé filename (duplicate #2).txt";
- $this->fileSize = 446;
- $this->helper = new \OC\LargeFileHelper;
+ $this->helper = new \OC\LargeFileHelper();
}
- public function testGetFileSizeViaCurl() {
+ public function dataFileNameProvider() {
+ $path = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR;
+
+ $filePaths = array(array($path . 'lorem.txt', 446));
+ if (!\OC_Util::runningOnWindows()) {
+ $filePaths[] = array($path . 'strängé filename (duplicate #2).txt', 446);
+ }
+
+ return $filePaths;
+ }
+
+ /**
+ * @dataProvider dataFileNameProvider
+ */
+ public function testGetFileSizeViaCurl($filename, $fileSize) {
if (!extension_loaded('curl')) {
$this->markTestSkipped(
'The PHP curl extension is required for this test.'
);
}
$this->assertSame(
- $this->fileSize,
- $this->helper->getFileSizeViaCurl($this->filename)
+ $fileSize,
+ $this->helper->getFileSizeViaCurl($filename)
);
}
- public function testGetFileSizeViaCOM() {
+ /**
+ * @dataProvider dataFileNameProvider
+ */
+ public function testGetFileSizeViaCOM($filename, $fileSize) {
if (!extension_loaded('COM')) {
$this->markTestSkipped(
'The PHP Windows COM extension is required for this test.'
);
}
$this->assertSame(
- $this->fileSize,
- $this->helper->getFileSizeViaCOM($this->filename)
+ $fileSize,
+ $this->helper->getFileSizeViaCOM($filename)
);
}
- public function testGetFileSizeViaExec() {
+ /**
+ * @dataProvider dataFileNameProvider
+ */
+ public function testGetFileSizeViaExec($filename, $fileSize) {
if (!\OC_Helper::is_function_enabled('exec')) {
$this->markTestSkipped(
'The exec() function needs to be enabled for this test.'
);
}
$this->assertSame(
- $this->fileSize,
- $this->helper->getFileSizeViaExec($this->filename)
+ $fileSize,
+ $this->helper->getFileSizeViaExec($filename)
);
}
- public function testGetFileSizeNative() {
+ /**
+ * @dataProvider dataFileNameProvider
+ */
+ public function testGetFileSizeNative($filename, $fileSize) {
$this->assertSame(
- $this->fileSize,
- $this->helper->getFileSizeNative($this->filename)
+ $fileSize,
+ $this->helper->getFileSizeNative($filename)
);
}
}
diff --git a/tests/lib/logger.php b/tests/lib/logger.php
index fcdf5b58670..700a847917b 100644
--- a/tests/lib/logger.php
+++ b/tests/lib/logger.php
@@ -10,14 +10,16 @@ namespace Test;
use OC\Log;
-class Logger extends \PHPUnit_Framework_TestCase {
+class Logger extends TestCase {
/**
* @var \OCP\ILogger
*/
private $logger;
static private $logs = array();
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
self::$logs = array();
$this->logger = new Log('Test\Logger');
}
diff --git a/tests/lib/mail.php b/tests/lib/mail.php
index 3cc9868e25e..568ecff52b0 100644
--- a/tests/lib/mail.php
+++ b/tests/lib/mail.php
@@ -6,10 +6,12 @@
* See the COPYING-README file.
*/
-class Test_Mail extends PHPUnit_Framework_TestCase {
+class Test_Mail extends \Test\TestCase {
protected function setUp()
{
+ parent::setUp();
+
if (!function_exists('idn_to_ascii')) {
$this->markTestSkipped(
'The intl extension is not available.'
diff --git a/tests/lib/memcache/apc.php b/tests/lib/memcache/apc.php
index e5d753a4fa5..fdb785b9dc5 100644
--- a/tests/lib/memcache/apc.php
+++ b/tests/lib/memcache/apc.php
@@ -10,7 +10,9 @@
namespace Test\Memcache;
class APC extends Cache {
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
if(!\OC\Memcache\APC::isAvailable()) {
$this->markTestSkipped('The apc extension is not available.');
return;
@@ -19,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 7b99e7cd5e0..afcaa99bfbe 100644
--- a/tests/lib/memcache/apcu.php
+++ b/tests/lib/memcache/apcu.php
@@ -10,11 +10,13 @@
namespace Test\Memcache;
class APCu extends Cache {
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
if(!\OC\Memcache\APCu::isAvailable()) {
$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/cache.php b/tests/lib/memcache/cache.php
index d07c492cef0..8a4a708e4b7 100644
--- a/tests/lib/memcache/cache.php
+++ b/tests/lib/memcache/cache.php
@@ -50,9 +50,11 @@ abstract class Cache extends \Test_Cache {
$this->assertFalse($this->instance->hasKey('foo'));
}
- public function tearDown() {
+ protected function tearDown() {
if ($this->instance) {
$this->instance->clear();
}
+
+ parent::tearDown();
}
}
diff --git a/tests/lib/memcache/memcached.php b/tests/lib/memcache/memcached.php
index fdab32693ff..51a78996dd4 100644
--- a/tests/lib/memcache/memcached.php
+++ b/tests/lib/memcache/memcached.php
@@ -11,16 +11,19 @@ namespace Test\Memcache;
class Memcached extends Cache {
static public function setUpBeforeClass() {
+ parent::setUpBeforeClass();
+
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.');
}
}
- public function setUp() {
- $this->instance = new \OC\Memcache\Memcached(uniqid());
+ protected function setUp() {
+ parent::setUp();
+ $this->instance = new \OC\Memcache\Memcached($this->getUniqueID());
}
}
diff --git a/tests/lib/memcache/xcache.php b/tests/lib/memcache/xcache.php
index f59afda3966..36efe0b220a 100644
--- a/tests/lib/memcache/xcache.php
+++ b/tests/lib/memcache/xcache.php
@@ -10,11 +10,13 @@
namespace Test\Memcache;
class XCache extends Cache {
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
if (!\OC\Memcache\XCache::isAvailable()) {
$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/migrate.php b/tests/lib/migrate.php
deleted file mode 100644
index c4442511e1f..00000000000
--- a/tests/lib/migrate.php
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-/**
- * Copyright (c) 2014 Tom Needham <tom@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-class Test_Migrate extends PHPUnit_Framework_TestCase {
-
- public $users;
- public $tmpfiles = array();
-
- /**
- * Generates a test user and sets up their file system
- * @return string the test users id
- */
- public function generateUser() {
- $username = uniqid();
- \OC_User::createUser($username, 'password');
- \OC_Util::tearDownFS();
- \OC_User::setUserId('');
- \OC\Files\Filesystem::tearDown();
- \OC_Util::setupFS($username);
- $this->users[] = $username;
- return $username;
- }
-
- /**
- * validates an export for a user
- * checks for existence of export_info.json and file folder
- * @param string $exportedUser the user that was exported
- * @param string $path the path to the .zip export
- * @param string $exportedBy
- */
- public function validateUserExport($exportedBy, $exportedUser, $path) {
- $this->assertTrue(file_exists($path));
- // Extract
- $extract = get_temp_dir() . '/oc_import_' . uniqid();
- //mkdir($extract);
- $this->tmpfiles[] = $extract;
- $zip = new ZipArchive;
- $zip->open($path);
- $zip->extractTo($extract);
- $zip->close();
- $this->assertTrue(file_exists($extract.'/export_info.json'));
- $exportInfo = file_get_contents($extract.'/export_info.json');
- $exportInfo = json_decode($exportInfo);
- $this->assertNotNull($exportInfo);
- $this->assertEquals($exportedUser, $exportInfo->exporteduser);
- $this->assertEquals($exportedBy, $exportInfo->exportedby);
- $this->assertTrue(file_exists($extract.'/'.$exportedUser.'/files'));
- }
-
- public function testUserSelfExport() {
- // Create a user
- $user = $this->generateUser();
- \OC_User::setUserId($user);
- $export = \OC_Migrate::export($user);
- // Check it succeeded and exists
- $this->assertTrue(json_decode($export)->success);
- // Validate the export
- $this->validateUserExport($user, $user, json_decode($export)->data);
- }
-
- public function testUserOtherExport() {
- $user = $this->generateUser();
- $user2 = $this->generateUser();
- \OC_User::setUserId($user2);
- $export = \OC_Migrate::export($user);
- // Check it succeeded and exists
- $this->assertTrue(json_decode($export)->success);
- // Validate the export
- $this->validateUserExport($user2, $user, json_decode($export)->data);
- }
-
- public function tearDown() {
- $u = new OC_User();
- foreach($this->users as $user) {
- $u->deleteUser($user);
- }
- foreach($this->tmpfiles as $file) {
- \OC_Helper::rmdirr($file);
- }
- }
-
-
-
-
-}
diff --git a/tests/lib/naturalsort.php b/tests/lib/naturalsort.php
index 09a0e6a5f9d..e022a855309 100644
--- a/tests/lib/naturalsort.php
+++ b/tests/lib/naturalsort.php
@@ -6,9 +6,11 @@
* See the COPYING-README file.
*/
-class Test_NaturalSort extends PHPUnit_Framework_TestCase {
+class Test_NaturalSort extends \Test\TestCase {
public function setUp() {
+ parent::setUp();
+
if(!class_exists('Collator')) {
$this->markTestSkipped('The intl module is not available, natural sorting will not work as expected.');
return;
diff --git a/tests/lib/ocs/privatedata.php b/tests/lib/ocs/privatedata.php
index 534fc21b07a..a9300f5beac 100644
--- a/tests/lib/ocs/privatedata.php
+++ b/tests/lib/ocs/privatedata.php
@@ -20,17 +20,13 @@
*
*/
-class Test_OC_OCS_Privatedata extends PHPUnit_Framework_TestCase
-{
-
+class Test_OC_OCS_Privatedata extends \Test\TestCase {
private $appKey;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
\OC::$server->getSession()->set('user_id', 'user1');
- $this->appKey = uniqid('app');
- }
-
- public function tearDown() {
+ $this->appKey = $this->getUniqueID('app');
}
public function testGetEmptyOne() {
diff --git a/tests/lib/preferences-singleton.php b/tests/lib/preferences-singleton.php
index 7abf5a6be36..01e15acdfe1 100644
--- a/tests/lib/preferences-singleton.php
+++ b/tests/lib/preferences-singleton.php
@@ -7,8 +7,10 @@
* See the COPYING-README file.
*/
-class Test_Preferences extends PHPUnit_Framework_TestCase {
+class Test_Preferences extends \Test\TestCase {
public static function setUpBeforeClass() {
+ parent::setUpBeforeClass();
+
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*preferences` VALUES(?, ?, ?, ?)');
$query->execute(array("Someuser", "someapp", "somekey", "somevalue"));
@@ -34,6 +36,8 @@ class Test_Preferences extends PHPUnit_Framework_TestCase {
$query->execute(array('Someuser'));
$query->execute(array('Anotheruser'));
$query->execute(array('Anuser'));
+
+ parent::tearDownAfterClass();
}
public function testGetUsers() {
diff --git a/tests/lib/preferences.php b/tests/lib/preferences.php
index fe8e3e8b48c..193b1f80280 100644
--- a/tests/lib/preferences.php
+++ b/tests/lib/preferences.php
@@ -7,7 +7,7 @@
* See the COPYING-README file.
*/
-class Test_Preferences_Object extends PHPUnit_Framework_TestCase {
+class Test_Preferences_Object extends \Test\TestCase {
public function testGetUsers()
{
$statementMock = $this->getMock('\Doctrine\DBAL\Statement', array(), array(), '', false);
diff --git a/tests/lib/preview.php b/tests/lib/preview.php
index 2febe524cba..2a6761403f4 100644
--- a/tests/lib/preview.php
+++ b/tests/lib/preview.php
@@ -8,7 +8,7 @@
namespace Test;
-class Preview extends \PHPUnit_Framework_TestCase {
+class Preview extends TestCase {
/**
* @var string
@@ -20,14 +20,34 @@ class Preview extends \PHPUnit_Framework_TestCase {
*/
private $rootView;
- public function setUp() {
- $this->user = $this->initFS();
+ /** @var \OC\Files\Storage\Storage */
+ private $originalStorage;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->originalStorage = \OC\Files\Filesystem::getStorage('/');
+
+ // create a new user with his own filesystem view
+ // this gets called by each test in this test class
+ $this->user = $this->getUniqueID();
+ \OC_User::setUserId($this->user);
+ \OC\Files\Filesystem::init($this->user, '/' . $this->user . '/files');
+
+ \OC\Files\Filesystem::mount('OC\Files\Storage\Temporary', array(), '/');
$this->rootView = new \OC\Files\View('');
$this->rootView->mkdir('/'.$this->user);
$this->rootView->mkdir('/'.$this->user.'/files');
}
+ protected function tearDown() {
+ \OC\Files\Filesystem::clearMounts();
+ \OC\Files\Filesystem::mount($this->originalStorage, array(), '/');
+
+ parent::tearDown();
+ }
+
public function testIsPreviewDeleted() {
$sampleFile = '/'.$this->user.'/files/test.txt';
@@ -184,16 +204,4 @@ class Preview extends \PHPUnit_Framework_TestCase {
$this->assertEquals($this->user . '/' . \OC\Preview::THUMBNAILS_FOLDER . '/' . $fileId . '/150-150.png', $isCached);
}
*/
-
- private function initFS() {
- // create a new user with his own filesystem view
- // this gets called by each test in this test class
- $user=uniqid();
- \OC_User::setUserId($user);
- \OC\Files\Filesystem::init($user, '/'.$user.'/files');
-
- \OC\Files\Filesystem::mount('OC\Files\Storage\Temporary', array(), '/');
-
- return $user;
- }
}
diff --git a/tests/lib/public/contacts.php b/tests/lib/public/contacts.php
index d6008876a00..151e98d3905 100644
--- a/tests/lib/public/contacts.php
+++ b/tests/lib/public/contacts.php
@@ -19,17 +19,12 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
-class Test_Contacts extends PHPUnit_Framework_TestCase
-{
-
- public function setUp() {
-
+class Test_Contacts extends \Test\TestCase {
+ protected function setUp() {
+ parent::setUp();
OCP\Contacts::clear();
}
- public function tearDown() {
- }
-
public function testDisabledIfEmpty() {
// pretty simple
$this->assertFalse(OCP\Contacts::isEnabled());
diff --git a/tests/lib/public/ocpconfig.php b/tests/lib/public/ocpconfig.php
index 43a9ca625ee..947d2b3c9ef 100644
--- a/tests/lib/public/ocpconfig.php
+++ b/tests/lib/public/ocpconfig.php
@@ -19,12 +19,11 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
-class Test_OCPConfig extends PHPUnit_Framework_TestCase
-{
+class Test_OCPConfig extends \Test\TestCase {
public function testSetAppValueIfSetToNull() {
- $key = uniqid("key-");
+ $key = $this->getUniqueID('key-');
$result = \OCP\Config::setAppValue('unit-test', $key, null);
$this->assertTrue($result);
diff --git a/tests/lib/repair.php b/tests/lib/repair.php
index 121f41dedd9..248db382140 100644
--- a/tests/lib/repair.php
+++ b/tests/lib/repair.php
@@ -29,7 +29,7 @@ class TestRepairStep extends BasicEmitter implements \OC\RepairStep{
}
}
-class Test_Repair extends PHPUnit_Framework_TestCase {
+class Test_Repair extends \Test\TestCase {
public function testRunRepairStep() {
$output = array();
diff --git a/tests/lib/repair/repaircollation.php b/tests/lib/repair/repaircollation.php
index 362feb8463f..29dad190008 100644
--- a/tests/lib/repair/repaircollation.php
+++ b/tests/lib/repair/repaircollation.php
@@ -21,7 +21,7 @@ class TestCollationRepair extends \OC\Repair\Collation {
*
* @see \OC\Repair\RepairMimeTypes
*/
-class TestRepairCollation extends PHPUnit_Framework_TestCase {
+class TestRepairCollation extends \Test\TestCase {
/**
* @var TestCollationRepair
@@ -43,7 +43,9 @@ class TestRepairCollation extends PHPUnit_Framework_TestCase {
*/
private $config;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->connection = \OC_DB::getConnection();
$this->config = \OC::$server->getConfig();
if (!$this->connection->getDatabasePlatform() instanceof \Doctrine\DBAL\Platforms\MySqlPlatform) {
@@ -51,14 +53,15 @@ class TestRepairCollation extends PHPUnit_Framework_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);
}
- public function tearDown() {
+ protected function tearDown() {
$this->connection->getSchemaManager()->dropTable($this->tableName);
+ parent::tearDown();
}
public function testCollationConvert() {
diff --git a/tests/lib/repair/repairinnodb.php b/tests/lib/repair/repairinnodb.php
index e7d2442f127..d4039472a6b 100644
--- a/tests/lib/repair/repairinnodb.php
+++ b/tests/lib/repair/repairinnodb.php
@@ -11,7 +11,7 @@
*
* @see \OC\Repair\RepairMimeTypes
*/
-class TestRepairInnoDB extends PHPUnit_Framework_TestCase {
+class TestRepairInnoDB extends \Test\TestCase {
/** @var \OC\RepairStep */
private $repair;
@@ -22,21 +22,24 @@ class TestRepairInnoDB extends PHPUnit_Framework_TestCase {
/** @var string */
private $tableName;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->connection = \OC_DB::getConnection();
if (!$this->connection->getDatabasePlatform() instanceof \Doctrine\DBAL\Platforms\MySqlPlatform) {
$this->markTestSkipped("Test only relevant on MySql");
}
$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();
}
- public function tearDown() {
+ protected function tearDown() {
$this->connection->getSchemaManager()->dropTable($this->tableName);
+ parent::tearDown();
}
public function testInnoDBConvert() {
diff --git a/tests/lib/repair/repairlegacystorage.php b/tests/lib/repair/repairlegacystorage.php
index 4528c5288df..f08393300e1 100644
--- a/tests/lib/repair/repairlegacystorage.php
+++ b/tests/lib/repair/repairlegacystorage.php
@@ -11,8 +11,10 @@
*
* @see \OC\Repair\RepairLegacyStorages
*/
-class TestRepairLegacyStorages extends PHPUnit_Framework_TestCase {
+class TestRepairLegacyStorages extends \Test\TestCase {
+ private $connection;
+ private $config;
private $user;
private $repair;
@@ -22,7 +24,9 @@ class TestRepairLegacyStorages extends PHPUnit_Framework_TestCase {
private $legacyStorageId;
private $newStorageId;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->config = \OC::$server->getConfig();
$this->connection = \OC_DB::getConnection();
$this->oldDataDir = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data/');
@@ -30,7 +34,7 @@ class TestRepairLegacyStorages extends PHPUnit_Framework_TestCase {
$this->repair = new \OC\Repair\RepairLegacyStorages($this->config, $this->connection);
}
- public function tearDown() {
+ protected function tearDown() {
\OC_User::deleteUser($this->user);
$sql = 'DELETE FROM `*PREFIX*storages`';
@@ -39,6 +43,8 @@ class TestRepairLegacyStorages extends PHPUnit_Framework_TestCase {
$this->connection->executeQuery($sql);
\OCP\Config::setSystemValue('datadirectory', $this->oldDataDir);
$this->config->setAppValue('core', 'repairlegacystoragesdone', 'no');
+
+ parent::tearDown();
}
function prepareSettings($dataDir, $userId) {
@@ -243,12 +249,12 @@ class TestRepairLegacyStorages extends PHPUnit_Framework_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(
@@ -267,7 +273,7 @@ class TestRepairLegacyStorages extends PHPUnit_Framework_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/repair/repairmimetypes.php b/tests/lib/repair/repairmimetypes.php
index 7754864a69e..6eaf68d8a44 100644
--- a/tests/lib/repair/repairmimetypes.php
+++ b/tests/lib/repair/repairmimetypes.php
@@ -11,26 +11,29 @@
*
* @see \OC\Repair\RepairMimeTypes
*/
-class TestRepairMimeTypes extends PHPUnit_Framework_TestCase {
+class TestRepairMimeTypes extends \Test\TestCase {
/** @var \OC\RepairStep */
private $repair;
private $storage;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$this->storage = new \OC\Files\Storage\Temporary(array());
$this->repair = new \OC\Repair\RepairMimeTypes();
}
- public function tearDown() {
+ protected function tearDown() {
$this->storage->getCache()->clear();
$sql = 'DELETE FROM `*PREFIX*storages` WHERE `id` = ?';
\OC_DB::executeAudited($sql, array($this->storage->getId()));
$this->clearMimeTypes();
DummyFileCache::clearCachedMimeTypes();
+
+ parent::tearDown();
}
private function clearMimeTypes() {
diff --git a/tests/lib/request.php b/tests/lib/request.php
index b89bf92ece7..ea3722b90a6 100644
--- a/tests/lib/request.php
+++ b/tests/lib/request.php
@@ -6,19 +6,23 @@
* See the COPYING-README file.
*/
-class Test_Request extends PHPUnit_Framework_TestCase {
+class Test_Request extends \Test\TestCase {
+
+ protected function setUp() {
+ parent::setUp();
- public function setUp() {
OC::$server->getConfig()->setSystemValue('overwritewebroot', '/domain.tld/ownCloud');
OC::$server->getConfig()->setSystemValue('trusted_proxies', array());
OC::$server->getConfig()->setSystemValue('forwarded_for_headers', array());
}
- public function tearDown() {
+ protected function tearDown() {
OC::$server->getConfig()->setSystemValue('overwritewebroot', '');
OC::$server->getConfig()->setSystemValue('trusted_proxies', array());
OC::$server->getConfig()->setSystemValue('forwarded_for_headers', array());
+
+ parent::tearDown();
}
public function testScriptNameOverWrite() {
@@ -224,6 +228,23 @@ class Test_Request extends PHPUnit_Framework_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
*/
@@ -240,7 +261,7 @@ class Test_Request extends PHPUnit_Framework_TestCase {
}
public function trustedDomainDataProvider() {
- $trustedHostTestList = array('host.one.test:8080', 'host.two.test:8080');
+ $trustedHostTestList = array('host.one.test', 'host.two.test', '[1fff:0:a88:85a3::ac1f]');
return array(
// empty defaults to true
array(null, 'host.one.test:8080', true),
@@ -249,8 +270,12 @@ class Test_Request extends PHPUnit_Framework_TestCase {
// trust list when defined
array($trustedHostTestList, 'host.two.test:8080', true),
- array($trustedHostTestList, 'host.two.test:9999', false),
+ array($trustedHostTestList, 'host.two.test:9999', true),
array($trustedHostTestList, 'host.three.test:8080', false),
+ array($trustedHostTestList, 'host.two.test:8080:aa:222', false),
+ array($trustedHostTestList, '[1fff:0:a88:85a3::ac1f]', true),
+ array($trustedHostTestList, '[1fff:0:a88:85a3::ac1f]:801', true),
+ array($trustedHostTestList, '[1fff:0:a88:85a3::ac1f]:801:34', false),
// trust localhost regardless of trust list
array($trustedHostTestList, 'localhost', true),
diff --git a/tests/lib/security/certificate.php b/tests/lib/security/certificate.php
index 898f583a43c..361f2f8c38d 100644
--- a/tests/lib/security/certificate.php
+++ b/tests/lib/security/certificate.php
@@ -8,7 +8,7 @@
use \OC\Security\Certificate;
-class CertificateTest extends \PHPUnit_Framework_TestCase {
+class CertificateTest extends \Test\TestCase {
/** @var Certificate That contains a valid certificate */
protected $goodCertificate;
@@ -17,7 +17,9 @@ class CertificateTest extends \PHPUnit_Framework_TestCase {
/** @var Certificate That contains an expired certificate */
protected $expiredCertificate;
- function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$goodCertificate = file_get_contents(__DIR__ . '/../../data/certificates/goodCertificate.crt');
$this->goodCertificate = new Certificate($goodCertificate, 'GoodCertificate');
$badCertificate = file_get_contents(__DIR__ . '/../../data/certificates/badCertificate.crt');
diff --git a/tests/lib/security/certificatemanager.php b/tests/lib/security/certificatemanager.php
index 5baf9e16e81..cff6932b670 100644
--- a/tests/lib/security/certificatemanager.php
+++ b/tests/lib/security/certificatemanager.php
@@ -8,7 +8,7 @@
use \OC\Security\CertificateManager;
-class CertificateManagerTest extends \PHPUnit_Framework_TestCase {
+class CertificateManagerTest extends \Test\TestCase {
/** @var CertificateManager */
private $certificateManager;
@@ -17,9 +17,11 @@ class CertificateManagerTest extends \PHPUnit_Framework_TestCase {
/** @var \OC\User\User */
private $user;
- function setUp() {
- $this->username = OC_Util::generateRandomBytes(20);
- OC_User::createUser($this->username, OC_Util::generateRandomBytes(20));
+ protected function setUp() {
+ parent::setUp();
+
+ $this->username = $this->getUniqueID('', 20);
+ OC_User::createUser($this->username, $this->getUniqueID('', 20));
\OC_Util::tearDownFS();
\OC_User::setUserId('');
@@ -31,8 +33,9 @@ class CertificateManagerTest extends \PHPUnit_Framework_TestCase {
$this->certificateManager = new CertificateManager($this->user);
}
- function tearDown() {
+ protected function tearDown() {
\OC_User::deleteUser($this->username);
+ parent::tearDown();
}
protected function assertEqualsArrays($expected, $actual) {
diff --git a/tests/lib/security/crypto.php b/tests/lib/security/crypto.php
index 0f89253839e..1571cf89248 100644
--- a/tests/lib/security/crypto.php
+++ b/tests/lib/security/crypto.php
@@ -8,7 +8,7 @@
use \OC\Security\Crypto;
-class CryptoTest extends \PHPUnit_Framework_TestCase {
+class CryptoTest extends \Test\TestCase {
public function defaultEncryptionProvider()
{
@@ -23,6 +23,7 @@ class CryptoTest extends \PHPUnit_Framework_TestCase {
protected $crypto;
protected function setUp() {
+ parent::setUp();
$this->crypto = new Crypto(\OC::$server->getConfig(), \OC::$server->getSecureRandom());
}
diff --git a/tests/lib/security/securerandom.php b/tests/lib/security/securerandom.php
index 2920077fa1d..d9bbd0e71e5 100644
--- a/tests/lib/security/securerandom.php
+++ b/tests/lib/security/securerandom.php
@@ -8,7 +8,7 @@
use \OC\Security\SecureRandom;
-class SecureRandomTest extends \PHPUnit_Framework_TestCase {
+class SecureRandomTest extends \Test\TestCase {
public function stringGenerationProvider() {
return array(
@@ -34,6 +34,7 @@ class SecureRandomTest extends \PHPUnit_Framework_TestCase {
protected $rng;
protected function setUp() {
+ parent::setUp();
$this->rng = new \OC\Security\SecureRandom();
}
diff --git a/tests/lib/security/stringutils.php b/tests/lib/security/stringutils.php
index 039f3d3756a..060315debb4 100644
--- a/tests/lib/security/stringutils.php
+++ b/tests/lib/security/stringutils.php
@@ -8,7 +8,7 @@
use \OC\Security\StringUtils;
-class StringUtilsTest extends \PHPUnit_Framework_TestCase {
+class StringUtilsTest extends \Test\TestCase {
public function dataProvider()
{
diff --git a/tests/lib/session/memory.php b/tests/lib/session/memory.php
index 2dc236b73bf..1ca4956c6ea 100644
--- a/tests/lib/session/memory.php
+++ b/tests/lib/session/memory.php
@@ -10,7 +10,8 @@
namespace Test\Session;
class Memory extends Session {
- public function setUp() {
- $this->instance = new \OC\Session\Memory(uniqid());
+ protected function setUp() {
+ parent::setUp();
+ $this->instance = new \OC\Session\Memory($this->getUniqueID());
}
}
diff --git a/tests/lib/session/session.php b/tests/lib/session/session.php
index 9ce11274c84..a1ed01b2ec8 100644
--- a/tests/lib/session/session.php
+++ b/tests/lib/session/session.php
@@ -9,14 +9,15 @@
namespace Test\Session;
-abstract class Session extends \PHPUnit_Framework_TestCase {
+abstract class Session extends \Test\TestCase {
/**
* @var \OC\Session\Session
*/
protected $instance;
- public function tearDown() {
+ protected function tearDown() {
$this->instance->clear();
+ parent::tearDown();
}
public function testNotExistsEmpty() {
diff --git a/tests/lib/setup.php b/tests/lib/setup.php
index 2c1569dd800..8373ba316d6 100644
--- a/tests/lib/setup.php
+++ b/tests/lib/setup.php
@@ -8,14 +8,16 @@
use OCP\IConfig;
-class Test_OC_Setup extends PHPUnit_Framework_TestCase {
+class Test_OC_Setup extends \Test\TestCase {
/** @var IConfig */
protected $config;
/** @var \OC_Setup */
protected $setupClass;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->config = $this->getMock('\OCP\IConfig');
$this->setupClass = $this->getMock('\OC_Setup', array('class_exists', 'is_callable'), array($this->config));
}
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/share/helper.php b/tests/lib/share/helper.php
index 367507417a0..7a546410aea 100644
--- a/tests/lib/share/helper.php
+++ b/tests/lib/share/helper.php
@@ -19,7 +19,7 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
-class Test_Share_Helper extends PHPUnit_Framework_TestCase {
+class Test_Share_Helper extends \Test\TestCase {
public function expireDateProvider() {
return array(
@@ -27,8 +27,8 @@ class Test_Share_Helper extends PHPUnit_Framework_TestCase {
array(array('defaultExpireDateSet' => false), 2000000000, 2000010000, 2000010000),
// no default expire date and no user defined expire date, return false
array(array('defaultExpireDateSet' => false), 2000000000, null, false),
- // unenforced expire data and no user defined expire date, take default expire date
- array(array('defaultExpireDateSet' => true, 'expireAfterDays' => 1, 'enforceExpireDate' => false), 2000000000, null, 2000086400),
+ // unenforced expire data and no user defined expire date, return false (because the default is not enforced)
+ array(array('defaultExpireDateSet' => true, 'expireAfterDays' => 1, 'enforceExpireDate' => false), 2000000000, null, false),
// enforced expire date and no user defined expire date, take default expire date
array(array('defaultExpireDateSet' => true, 'expireAfterDays' => 1, 'enforceExpireDate' => true), 2000000000, null, 2000086400),
// unenforced expire date and user defined date > default expire date, take users expire date
@@ -49,6 +49,4 @@ class Test_Share_Helper extends PHPUnit_Framework_TestCase {
$result = \OC\Share\Helper::calculateExpireDate($defaultExpireSettings, $creationTime, $userExpireDate);
$this->assertSame($expected, $result);
}
-
-
}
diff --git a/tests/lib/share/searchresultsorter.php b/tests/lib/share/searchresultsorter.php
index eaf93400a7d..97ef0f9478a 100644
--- a/tests/lib/share/searchresultsorter.php
+++ b/tests/lib/share/searchresultsorter.php
@@ -19,7 +19,7 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
-class Test_Share_Search extends \PHPUnit_Framework_TestCase {
+class Test_Share_Search extends \Test\TestCase {
public function testSort() {
$search = 'lin';
$sorter = new \OC\Share\SearchResultSorter($search, 'foobar');
diff --git a/tests/lib/share/share.php b/tests/lib/share/share.php
index 3d99883f2de..1f95502919d 100644
--- a/tests/lib/share/share.php
+++ b/tests/lib/share/share.php
@@ -19,7 +19,7 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
-class Test_Share extends PHPUnit_Framework_TestCase {
+class Test_Share extends \Test\TestCase {
protected $itemType;
protected $userBackend;
@@ -27,6 +27,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
protected $user2;
protected $user3;
protected $user4;
+ protected $groupAndUser;
protected $groupBackend;
protected $group1;
protected $group2;
@@ -34,29 +35,36 @@ class Test_Share extends PHPUnit_Framework_TestCase {
protected $dateInFuture;
protected $dateInPast;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
OC_User::clearBackends();
OC_User::useBackend('dummy');
- $this->user1 = uniqid('user1_');
- $this->user2 = uniqid('user2_');
- $this->user3 = uniqid('user3_');
- $this->user4 = uniqid('user4_');
+ $this->user1 = $this->getUniqueID('user1_');
+ $this->user2 = $this->getUniqueID('user2_');
+ $this->user3 = $this->getUniqueID('user3_');
+ $this->user4 = $this->getUniqueID('user4_');
+ $this->groupAndUser = $this->getUniqueID('groupAndUser_');
OC_User::createUser($this->user1, 'pass');
OC_User::createUser($this->user2, 'pass');
OC_User::createUser($this->user3, 'pass');
OC_User::createUser($this->user4, 'pass');
+ OC_User::createUser($this->groupAndUser, 'pass');
OC_User::setUserId($this->user1);
OC_Group::clearBackends();
OC_Group::useBackend(new OC_Group_Dummy);
- $this->group1 = uniqid('group1_');
- $this->group2 = uniqid('group2_');
+ $this->group1 = $this->getUniqueID('group1_');
+ $this->group2 = $this->getUniqueID('group2_');
OC_Group::createGroup($this->group1);
OC_Group::createGroup($this->group2);
+ OC_Group::createGroup($this->groupAndUser);
OC_Group::addToGroup($this->user1, $this->group1);
OC_Group::addToGroup($this->user2, $this->group1);
OC_Group::addToGroup($this->user3, $this->group1);
OC_Group::addToGroup($this->user2, $this->group2);
OC_Group::addToGroup($this->user4, $this->group2);
+ OC_Group::addToGroup($this->user2, $this->groupAndUser);
+ OC_Group::addToGroup($this->user3, $this->groupAndUser);
OCP\Share::registerBackend('test', 'Test_Share_Backend');
OC_Hook::clear('OCP\\Share');
OC::registerShareHooks();
@@ -70,16 +78,18 @@ class Test_Share extends PHPUnit_Framework_TestCase {
$this->dateInFuture = date($dateFormat, $now + 20 * 60);
}
- public function tearDown() {
+ protected function tearDown() {
$query = OC_DB::prepare('DELETE FROM `*PREFIX*share` WHERE `item_type` = ?');
$query->execute(array('test'));
OC_Appconfig::setValue('core', 'shareapi_allow_resharing', $this->resharing);
+
+ parent::tearDown();
}
public function testShareInvalidShareType() {
$message = 'Share type foobar is not valid for test.txt';
try {
- OCP\Share::shareItem('test', 'test.txt', 'foobar', $this->user2, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', 'foobar', $this->user2, \OCP\Constants::PERMISSION_READ);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
}
@@ -88,7 +98,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
public function testInvalidItemType() {
$message = 'Sharing backend for foobar not found';
try {
- OCP\Share::shareItem('foobar', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('foobar', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -124,7 +134,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
$this->assertEquals($message, $exception->getMessage());
}
try {
- OCP\Share::setPermissions('foobar', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_UPDATE);
+ OCP\Share::setPermissions('foobar', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_UPDATE);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -134,7 +144,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
protected function shareUserOneTestFileWithUserTwo() {
OC_User::setUserId($this->user1);
$this->assertTrue(
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ),
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ),
'Failed asserting that user 1 successfully shared text.txt with user 2.'
);
$this->assertContains(
@@ -153,7 +163,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
protected function shareUserTestFileAsLink() {
OC_User::setUserId($this->user1);
- $result = OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_LINK, null, OCP\PERMISSION_READ);
+ $result = OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_LINK, null, \OCP\Constants::PERMISSION_READ);
$this->assertTrue(is_string($result));
}
@@ -164,7 +174,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
protected function shareUserTestFileWithUser($sharer, $receiver) {
OC_User::setUserId($sharer);
$this->assertTrue(
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $receiver, OCP\PERMISSION_READ | OCP\PERMISSION_SHARE),
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $receiver, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE),
'Failed asserting that ' . $sharer . ' successfully shared text.txt with ' . $receiver . '.'
);
$this->assertContains(
@@ -185,21 +195,21 @@ class Test_Share extends PHPUnit_Framework_TestCase {
// Invalid shares
$message = 'Sharing test.txt failed, because the user '.$this->user1.' is the item owner';
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user1, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user1, \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
}
$message = 'Sharing test.txt failed, because the user foobar does not exist';
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, 'foobar', OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, 'foobar', \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
}
$message = 'Sharing foobar failed, because the sharing backend for test could not find its source';
try {
- OCP\Share::shareItem('test', 'foobar', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'foobar', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -212,7 +222,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
OC_User::setUserId($this->user1);
$message = 'Sharing test.txt failed, because this item is already shared with '.$this->user2;
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -222,7 +232,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
OC_User::setUserId($this->user2);
$message = 'Sharing test.txt failed, because the user '.$this->user1.' is the original sharer';
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user1, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user1, \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -233,11 +243,11 @@ class Test_Share extends PHPUnit_Framework_TestCase {
$this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2));
// Attempt reshare without share permission
- $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ));
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ));
OC_User::setUserId($this->user2);
$message = 'Sharing test.txt failed, because resharing is not allowed';
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -245,30 +255,30 @@ class Test_Share extends PHPUnit_Framework_TestCase {
// Owner grants share and update permission
OC_User::setUserId($this->user1);
- $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ | OCP\PERMISSION_UPDATE | OCP\PERMISSION_SHARE));
+ $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_SHARE));
// Attempt reshare with escalated permissions
OC_User::setUserId($this->user2);
$message = 'Sharing test.txt failed, because the permissions exceed permissions granted to '.$this->user2;
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\PERMISSION_READ | OCP\PERMISSION_DELETE);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_DELETE);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
}
// Valid reshare
- $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\PERMISSION_READ | OCP\PERMISSION_UPDATE));
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE));
$this->assertEquals(array('test.txt'), OCP\Share::getItemShared('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE));
OC_User::setUserId($this->user3);
$this->assertEquals(array('test.txt'), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE));
- $this->assertEquals(array(OCP\PERMISSION_READ | OCP\PERMISSION_UPDATE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
+ $this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
// Attempt to escalate permissions
OC_User::setUserId($this->user2);
$message = 'Setting permissions for test.txt failed, because the permissions exceed permissions granted to '.$this->user2;
try {
- OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\PERMISSION_READ | OCP\PERMISSION_DELETE);
+ OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_DELETE);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -276,25 +286,25 @@ class Test_Share extends PHPUnit_Framework_TestCase {
// Remove update permission
OC_User::setUserId($this->user1);
- $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ | OCP\PERMISSION_SHARE));
+ $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE));
OC_User::setUserId($this->user2);
- $this->assertEquals(array(OCP\PERMISSION_READ | OCP\PERMISSION_SHARE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
+ $this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
OC_User::setUserId($this->user3);
- $this->assertEquals(array(OCP\PERMISSION_READ), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
+ $this->assertEquals(array(\OCP\Constants::PERMISSION_READ), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
// Remove share permission
OC_User::setUserId($this->user1);
- $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ));
+ $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ));
OC_User::setUserId($this->user2);
- $this->assertEquals(array(OCP\PERMISSION_READ), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
+ $this->assertEquals(array(\OCP\Constants::PERMISSION_READ), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
OC_User::setUserId($this->user3);
$this->assertSame(array(), OCP\Share::getItemSharedWith('test', 'test.txt'));
// Reshare again, and then have owner unshare
OC_User::setUserId($this->user1);
- $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ | OCP\PERMISSION_SHARE));
+ $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE));
OC_User::setUserId($this->user2);
- $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\PERMISSION_READ));
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, \OCP\Constants::PERMISSION_READ));
OC_User::setUserId($this->user1);
$this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2));
OC_User::setUserId($this->user2);
@@ -304,9 +314,9 @@ class Test_Share extends PHPUnit_Framework_TestCase {
// Attempt target conflict
OC_User::setUserId($this->user1);
- $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ));
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ));
OC_User::setUserId($this->user3);
- $this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ));
+ $this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ));
OC_User::setUserId($this->user2);
$to_test = OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET);
@@ -323,9 +333,9 @@ class Test_Share extends PHPUnit_Framework_TestCase {
$this->assertEquals(array(), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
OC_User::setUserId($this->user1);
- $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ));
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ));
OC_User::setUserId($this->user3);
- $this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ));
+ $this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ));
OC_User::setUserId($this->user2);
$to_test = OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET);
@@ -402,7 +412,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
OC_User::setUserId($this->user1);
$this->assertTrue(
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user4, OCP\PERMISSION_ALL),
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user4, \OCP\Constants::PERMISSION_ALL),
'Failed asserting that user 1 successfully shared text.txt with user 4.'
);
$this->assertContains(
@@ -419,7 +429,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
$share = OCP\Share::getItemSharedWith('test', 'test.txt');
- $this->assertSame(\OCP\PERMISSION_ALL & ~OCP\PERMISSION_SHARE, $share['permissions'],
+ $this->assertSame(\OCP\Constants::PERMISSION_ALL & ~\OCP\Constants::PERMISSION_SHARE, $share['permissions'],
'Failed asserting that user 4 is excluded from re-sharing');
\OC_Appconfig::deleteKey('core', 'shareapi_exclude_groups_list');
@@ -430,7 +440,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
protected function shareUserOneTestFileWithGroupOne() {
OC_User::setUserId($this->user1);
$this->assertTrue(
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\PERMISSION_READ),
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, \OCP\Constants::PERMISSION_READ),
'Failed asserting that user 1 successfully shared text.txt with group 1.'
);
$this->assertContains(
@@ -458,7 +468,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
// Invalid shares
$message = 'Sharing test.txt failed, because the group foobar does not exist';
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, 'foobar', OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, 'foobar', \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -467,7 +477,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
OC_Appconfig::setValue('core', 'shareapi_only_share_with_group_members', 'yes');
$message = 'Sharing test.txt failed, because '.$this->user1.' is not a member of the group '.$this->group2;
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group2, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group2, \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -481,7 +491,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
OC_User::setUserId($this->user1);
$message = 'Sharing test.txt failed, because this item is already shared with '.$this->group1;
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -491,7 +501,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
OC_User::setUserId($this->user2);
$message = 'Sharing test.txt failed, because the user '.$this->user1.' is the original sharer';
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user1, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user1, \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -500,7 +510,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
// Attempt to share back to group
$message = 'Sharing test.txt failed, because this item is already shared with '.$this->group1;
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -509,7 +519,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
// Attempt to share back to member of group
$message ='Sharing test.txt failed, because this item is already shared with '.$this->user3;
try {
- OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, \OCP\Constants::PERMISSION_READ);
$this->fail('Exception was expected: '.$message);
} catch (Exception $exception) {
$this->assertEquals($message, $exception->getMessage());
@@ -520,18 +530,18 @@ class Test_Share extends PHPUnit_Framework_TestCase {
$this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1));
// Valid share with same person - user then group
- $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ | OCP\PERMISSION_DELETE | OCP\PERMISSION_SHARE));
- $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\PERMISSION_READ | OCP\PERMISSION_UPDATE));
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_DELETE | \OCP\Constants::PERMISSION_SHARE));
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE));
OC_User::setUserId($this->user2);
$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
- $this->assertEquals(array(OCP\PERMISSION_READ | OCP\PERMISSION_UPDATE | OCP\PERMISSION_DELETE | OCP\PERMISSION_SHARE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
+ $this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE | \OCP\Constants::PERMISSION_SHARE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
OC_User::setUserId($this->user3);
$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
- $this->assertEquals(array(OCP\PERMISSION_READ | OCP\PERMISSION_UPDATE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
+ $this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
// Valid reshare
OC_User::setUserId($this->user2);
- $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user4, OCP\PERMISSION_READ));
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user4, \OCP\Constants::PERMISSION_READ));
OC_User::setUserId($this->user4);
$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
@@ -539,26 +549,26 @@ class Test_Share extends PHPUnit_Framework_TestCase {
OC_User::setUserId($this->user1);
$this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2));
OC_User::setUserId($this->user2);
- $this->assertEquals(array(OCP\PERMISSION_READ | OCP\PERMISSION_UPDATE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
+ $this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
OC_User::setUserId($this->user4);
$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
// Valid share with same person - group then user
OC_User::setUserId($this->user1);
- $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\PERMISSION_READ | OCP\PERMISSION_DELETE));
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_DELETE));
OC_User::setUserId($this->user2);
$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
- $this->assertEquals(array(OCP\PERMISSION_READ | OCP\PERMISSION_UPDATE | OCP\PERMISSION_DELETE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
+ $this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
// Unshare from group only
OC_User::setUserId($this->user1);
$this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1));
OC_User::setUserId($this->user2);
- $this->assertEquals(array(OCP\PERMISSION_READ | OCP\PERMISSION_DELETE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
+ $this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_DELETE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS));
// Attempt user specific target conflict
OC_User::setUserId($this->user3);
- $this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\PERMISSION_READ | OCP\PERMISSION_SHARE));
+ $this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE));
OC_User::setUserId($this->user2);
$to_test = OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET);
$this->assertEquals(2, count($to_test));
@@ -566,7 +576,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
$this->assertTrue(in_array('test1.txt', $to_test));
// Valid reshare
- $this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_USER, $this->user4, OCP\PERMISSION_READ | OCP\PERMISSION_SHARE));
+ $this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_USER, $this->user4, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE));
OC_User::setUserId($this->user4);
$this->assertEquals(array('test1.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET));
@@ -600,6 +610,41 @@ class Test_Share extends PHPUnit_Framework_TestCase {
$this->assertEquals(array(), OCP\Share::getItemsShared('test'));
}
+
+ public function testShareWithGroupAndUserBothHaveTheSameId() {
+
+ $this->shareUserTestFileWithUser($this->user1, $this->groupAndUser);
+
+ OC_User::setUserId($this->groupAndUser);
+
+ $this->assertEquals(array('test.txt'), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE),
+ '"groupAndUser"-User does not see the file but it was shared with him');
+
+ OC_User::setUserId($this->user2);
+ $this->assertEquals(array(), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE),
+ 'User2 sees test.txt but it was only shared with the user "groupAndUser" and not with group');
+
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::unshareAll('test', 'test.txt'));
+
+ $this->assertTrue(
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->groupAndUser, \OCP\Constants::PERMISSION_READ),
+ 'Failed asserting that user 1 successfully shared text.txt with group 1.'
+ );
+
+ OC_User::setUserId($this->groupAndUser);
+ $this->assertEquals(array(), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE),
+ '"groupAndUser"-User sees test.txt but it was only shared with the group "groupAndUser" and not with the user');
+
+ OC_User::setUserId($this->user2);
+ $this->assertEquals(array('test.txt'), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE),
+ 'User2 does not see test.txt but it was shared with the group "groupAndUser"');
+
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::unshareAll('test', 'test.txt'));
+
+ }
+
/**
* @param boolean|string $token
*/
@@ -613,9 +658,53 @@ class Test_Share extends PHPUnit_Framework_TestCase {
return $row;
}
+ public function testGetItemSharedWithUser() {
+ OC_User::setUserId($this->user1);
+
+ //add dummy values to the share table
+ $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` ('
+ .' `item_type`, `item_source`, `item_target`, `share_type`,'
+ .' `share_with`, `uid_owner`) VALUES (?,?,?,?,?,?)');
+ $args = array('test', 99, 'target1', OCP\Share::SHARE_TYPE_USER, $this->user2, $this->user1);
+ $query->execute($args);
+ $args = array('test', 99, 'target2', OCP\Share::SHARE_TYPE_USER, $this->user4, $this->user1);
+ $query->execute($args);
+ $args = array('test', 99, 'target3', OCP\Share::SHARE_TYPE_USER, $this->user3, $this->user2);
+ $query->execute($args);
+ $args = array('test', 99, 'target4', OCP\Share::SHARE_TYPE_USER, $this->user3, $this->user4);
+ $query->execute($args);
+
+
+ $result1 = \OCP\Share::getItemSharedWithUser('test', 99, $this->user2, $this->user1);
+ $this->assertSame(1, count($result1));
+ $this->verifyResult($result1, array('target1'));
+
+ $result2 = \OCP\Share::getItemSharedWithUser('test', 99, null, $this->user1);
+ $this->assertSame(2, count($result2));
+ $this->verifyResult($result2, array('target1', 'target2'));
+
+ $result3 = \OCP\Share::getItemSharedWithUser('test', 99, $this->user3);
+ $this->assertSame(2, count($result3));
+ $this->verifyResult($result3, array('target3', 'target4'));
+
+ $result4 = \OCP\Share::getItemSharedWithUser('test', 99, null, null);
+ $this->assertSame(4, count($result4));
+ $this->verifyResult($result4, array('target1', 'target2', 'target3', 'target4'));
+ }
+
+ public function verifyResult($result, $expected) {
+ foreach ($result as $r) {
+ if (in_array($r['item_target'], $expected)) {
+ $key = array_search($r['item_target'], $expected);
+ unset($expected[$key]);
+ }
+ }
+ $this->assertEmpty($expected, 'did not found all expected values');
+ }
+
public function testShareItemWithLink() {
OC_User::setUserId($this->user1);
- $token = OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_LINK, null, OCP\PERMISSION_READ);
+ $token = OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_LINK, null, \OCP\Constants::PERMISSION_READ);
$this->assertInternalType(
'string',
$token,
@@ -661,7 +750,7 @@ class Test_Share extends PHPUnit_Framework_TestCase {
\OC_Appconfig::setValue('core', 'shareapi_default_expire_date', 'yes');
\OC_Appconfig::setValue('core', 'shareapi_expire_after_n_days', '2');
- $token = OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_LINK, null, OCP\PERMISSION_READ);
+ $token = OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_LINK, null, \OCP\Constants::PERMISSION_READ);
$this->assertInternalType(
'string',
$token,
@@ -787,20 +876,20 @@ class Test_Share extends PHPUnit_Framework_TestCase {
// one array with one share
array(
array( // input
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_ALL, 'item_target' => 't1')),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_ALL, 'item_target' => 't1')),
array( // expected result
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_ALL, 'item_target' => 't1'))),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_ALL, 'item_target' => 't1'))),
// two shares both point to the same source
array(
array( // input
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ, 'item_target' => 't1'),
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_UPDATE, 'item_target' => 't1'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_READ, 'item_target' => 't1'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_UPDATE, 'item_target' => 't1'),
),
array( // expected result
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ | \OCP\PERMISSION_UPDATE, 'item_target' => 't1',
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE, 'item_target' => 't1',
'grouped' => array(
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ, 'item_target' => 't1'),
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_UPDATE, 'item_target' => 't1'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_READ, 'item_target' => 't1'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_UPDATE, 'item_target' => 't1'),
)
),
)
@@ -808,29 +897,29 @@ class Test_Share extends PHPUnit_Framework_TestCase {
// two shares both point to the same source but with different targets
array(
array( // input
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ, 'item_target' => 't1'),
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_UPDATE, 'item_target' => 't2'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_READ, 'item_target' => 't1'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_UPDATE, 'item_target' => 't2'),
),
array( // expected result
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ, 'item_target' => 't1'),
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_UPDATE, 'item_target' => 't2'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_READ, 'item_target' => 't1'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_UPDATE, 'item_target' => 't2'),
)
),
// three shares two point to the same source
array(
array( // input
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ, 'item_target' => 't1'),
- array('item_source' => 2, 'permissions' => \OCP\PERMISSION_CREATE, 'item_target' => 't2'),
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_UPDATE, 'item_target' => 't1'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_READ, 'item_target' => 't1'),
+ array('item_source' => 2, 'permissions' => \OCP\Constants::PERMISSION_CREATE, 'item_target' => 't2'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_UPDATE, 'item_target' => 't1'),
),
array( // expected result
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ | \OCP\PERMISSION_UPDATE, 'item_target' => 't1',
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE, 'item_target' => 't1',
'grouped' => array(
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_READ, 'item_target' => 't1'),
- array('item_source' => 1, 'permissions' => \OCP\PERMISSION_UPDATE, 'item_target' => 't1'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_READ, 'item_target' => 't1'),
+ array('item_source' => 1, 'permissions' => \OCP\Constants::PERMISSION_UPDATE, 'item_target' => 't1'),
)
),
- array('item_source' => 2, 'permissions' => \OCP\PERMISSION_CREATE, 'item_target' => 't2'),
+ array('item_source' => 2, 'permissions' => \OCP\Constants::PERMISSION_CREATE, 'item_target' => 't2'),
)
),
);
diff --git a/tests/lib/streamwrappers.php b/tests/lib/streamwrappers.php
index 1b61446f4dc..9a3b6bc9266 100644
--- a/tests/lib/streamwrappers.php
+++ b/tests/lib/streamwrappers.php
@@ -20,7 +20,7 @@
*
*/
-class Test_StreamWrappers extends PHPUnit_Framework_TestCase {
+class Test_StreamWrappers extends \Test\TestCase {
public function testFakeDir() {
$items = array('foo', 'bar');
\OC\Files\Stream\Dir::register('test', $items);
@@ -65,7 +65,9 @@ class Test_StreamWrappers extends PHPUnit_Framework_TestCase {
}
public function testOC() {
+ $originalStorage = \OC\Files\Filesystem::getStorage('/');
\OC\Files\Filesystem::clearMounts();
+
$storage = new \OC\Files\Storage\Temporary(array());
$storage->file_put_contents('foo.txt', 'asd');
\OC\Files\Filesystem::mount($storage, array(), '/');
@@ -91,5 +93,8 @@ class Test_StreamWrappers extends PHPUnit_Framework_TestCase {
unlink('oc:///foo.txt');
$this->assertEquals(array('.', '..', 'bar.txt'), scandir('oc:///'));
+
+ \OC\Files\Filesystem::clearMounts();
+ \OC\Files\Filesystem::mount($originalStorage, array(), '/');
}
}
diff --git a/tests/lib/tags.php b/tests/lib/tags.php
index 57b64f1cd36..533e6a19add 100644
--- a/tests/lib/tags.php
+++ b/tests/lib/tags.php
@@ -20,18 +20,23 @@
*
*/
-class Test_Tags extends PHPUnit_Framework_TestCase {
+class Test_Tags extends \Test\TestCase {
protected $objectType;
protected $user;
protected $backupGlobals = FALSE;
+ /** @var \OC\Tagging\TagMapper */
+ protected $tagMapper;
+ /** @var \OC\TagManager */
+ protected $tagMgr;
- public function setUp() {
+ 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());
@@ -39,9 +44,11 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
}
- public function tearDown() {
+ protected function tearDown() {
//$query = OC_DB::prepare('DELETE FROM `*PREFIX*vcategories` WHERE `item_type` = ?');
//$query->execute(array('test'));
+
+ parent::tearDown();
}
public function testInstantiateWithDefaults() {
@@ -202,7 +209,7 @@ class Test_Tags extends PHPUnit_Framework_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);
@@ -211,7 +218,7 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
$this->assertFalse($other_tagger->hasTag($test_tag));
OC_User::setUserId($this->user);
- OCP\Share::shareItem('test', 1, OCP\Share::SHARE_TYPE_USER, $other_user, OCP\PERMISSION_READ);
+ OCP\Share::shareItem('test', 1, OCP\Share::SHARE_TYPE_USER, $other_user, \OCP\Constants::PERMISSION_READ);
OC_User::setUserId($other_user);
$other_tagger = $other_tagMgr->load('test', array(), true); // Update tags, load shared ones.
diff --git a/tests/lib/template.php b/tests/lib/template.php
index 819d592aacf..d77284a5bf2 100644
--- a/tests/lib/template.php
+++ b/tests/lib/template.php
@@ -20,9 +20,11 @@
*
*/
-class Test_TemplateFunctions extends PHPUnit_Framework_TestCase {
+class Test_TemplateFunctions extends \Test\TestCase {
+
+ protected function setUp() {
+ parent::setUp();
- public function setUp() {
$loader = new \OC\Autoloader();
$loader->load('OC_Template');
}
diff --git a/tests/lib/template/resourcelocator.php b/tests/lib/template/resourcelocator.php
index cd354df0036..f350fd144e1 100644
--- a/tests/lib/template/resourcelocator.php
+++ b/tests/lib/template/resourcelocator.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_ResourceLocator extends PHPUnit_Framework_TestCase {
+class Test_ResourceLocator extends \Test\TestCase {
/**
* @param string $theme
diff --git a/tests/lib/templatelayout.php b/tests/lib/templatelayout.php
index 0335c7c88ee..1035dae122d 100644
--- a/tests/lib/templatelayout.php
+++ b/tests/lib/templatelayout.php
@@ -11,23 +11,27 @@ namespace OC\Test;
/**
* @package OC\Test
*/
-class OC_TemplateLayout extends \PHPUnit_Framework_TestCase {
+class OC_TemplateLayout extends \Test\TestCase {
- private $oldServerUri;
+ private $oldServerURI;
private $oldScriptName;
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->oldServerURI = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : null;
$this->oldScriptName = $_SERVER['SCRIPT_NAME'];
}
- public function tearDown() {
+ protected function tearDown() {
if ($this->oldServerURI === null) {
unset($_SERVER['REQUEST_URI']);
} else {
$_SERVER['REQUEST_URI'] = $this->oldServerURI;
}
$_SERVER['SCRIPT_NAME'] = $this->oldScriptName;
+
+ parent::tearDown();
}
/**
diff --git a/tests/lib/tempmanager.php b/tests/lib/tempmanager.php
index f16fbce2c7c..c030eef2c9e 100644
--- a/tests/lib/tempmanager.php
+++ b/tests/lib/tempmanager.php
@@ -21,22 +21,25 @@ class NullLogger extends Log {
}
}
-class TempManager extends \PHPUnit_Framework_TestCase {
+class TempManager extends \Test\TestCase {
protected $baseDir;
- public function setUp() {
- $this->baseDir = get_temp_dir() . '/oc_tmp_test';
+ protected function setUp() {
+ parent::setUp();
+
+ $this->baseDir = get_temp_dir() . $this->getUniqueID('/oc_tmp_test');
if (!is_dir($this->baseDir)) {
mkdir($this->baseDir);
}
}
- public function tearDown() {
+ protected function tearDown() {
\OC_Helper::rmdirr($this->baseDir);
+ parent::tearDown();
}
/**
- * @param \Psr\Log\LoggerInterface $logger
+ * @param \OCP\ILogger $logger
* @return \OC\TempManager
*/
protected function getManager($logger = null) {
@@ -122,6 +125,10 @@ class TempManager extends \PHPUnit_Framework_TestCase {
}
public function testLogCantCreateFile() {
+ if (\OC_Util::runningOnWindows()) {
+ $this->markTestSkipped('[Windows] chmod() does not work as intended on Windows.');
+ }
+
$logger = $this->getMock('\Test\NullLogger');
$manager = $this->getManager($logger);
chmod($this->baseDir, 0500);
@@ -132,6 +139,10 @@ class TempManager extends \PHPUnit_Framework_TestCase {
}
public function testLogCantCreateFolder() {
+ if (\OC_Util::runningOnWindows()) {
+ $this->markTestSkipped('[Windows] chmod() does not work as intended on Windows.');
+ }
+
$logger = $this->getMock('\Test\NullLogger');
$manager = $this->getManager($logger);
chmod($this->baseDir, 0500);
diff --git a/tests/lib/testcase.php b/tests/lib/testcase.php
new file mode 100644
index 00000000000..27c28329535
--- /dev/null
+++ b/tests/lib/testcase.php
@@ -0,0 +1,151 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Joas Schilling
+ * @copyright 2014 Joas Schilling nickvergessen@owncloud.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test;
+
+use OCP\Security\ISecureRandom;
+
+abstract class TestCase extends \PHPUnit_Framework_TestCase {
+ /**
+ * Returns a unique identifier as uniqid() is not reliable sometimes
+ *
+ * @param string $prefix
+ * @param int $length
+ * @return string
+ */
+ 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
+ ISecureRandom::CHAR_DIGITS . ISecureRandom::CHAR_LOWER . ISecureRandom::CHAR_UPPER
+ );
+ }
+
+ public static function tearDownAfterClass() {
+ $dataDir = \OC::$server->getConfig()->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data-autotest');
+
+ self::tearDownAfterClassCleanFileMapper($dataDir);
+ self::tearDownAfterClassCleanStorages();
+ self::tearDownAfterClassCleanFileCache();
+ self::tearDownAfterClassCleanStrayDataFiles($dataDir);
+ self::tearDownAfterClassCleanStrayHooks();
+ self::tearDownAfterClassCleanProxies();
+
+ parent::tearDownAfterClass();
+ }
+
+ /**
+ * Remove all entries from the files map table
+ * @param string $dataDir
+ */
+ static protected function tearDownAfterClassCleanFileMapper($dataDir) {
+ if (\OC_Util::runningOnWindows()) {
+ $mapper = new \OC\Files\Mapper($dataDir);
+ $mapper->removePath($dataDir, true, true);
+ }
+ }
+
+ /**
+ * Remove all entries from the storages table
+ * @throws \OC\DatabaseException
+ */
+ static protected function tearDownAfterClassCleanStorages() {
+ $sql = 'DELETE FROM `*PREFIX*storages`';
+ $query = \OC_DB::prepare($sql);
+ $query->execute();
+ }
+
+ /**
+ * Remove all entries from the filecache table
+ * @throws \OC\DatabaseException
+ */
+ static protected function tearDownAfterClassCleanFileCache() {
+ $sql = 'DELETE FROM `*PREFIX*filecache`';
+ $query = \OC_DB::prepare($sql);
+ $query->execute();
+ }
+
+ /**
+ * Remove all unused files from the data dir
+ *
+ * @param string $dataDir
+ */
+ static protected function tearDownAfterClassCleanStrayDataFiles($dataDir) {
+ $knownEntries = array(
+ 'owncloud.log' => true,
+ 'owncloud.db' => true,
+ '.ocdata' => true,
+ '..' => true,
+ '.' => true,
+ );
+
+ if ($dh = opendir($dataDir)) {
+ while (($file = readdir($dh)) !== false) {
+ if (!isset($knownEntries[$file])) {
+ self::tearDownAfterClassCleanStrayDataUnlinkDir($dataDir . '/' . $file);
+ }
+ }
+ closedir($dh);
+ }
+ }
+
+ /**
+ * Recursive delete files and folders from a given directory
+ *
+ * @param string $dir
+ */
+ static protected function tearDownAfterClassCleanStrayDataUnlinkDir($dir) {
+ if ($dh = @opendir($dir)) {
+ while (($file = readdir($dh)) !== false) {
+ if ($file === '..' || $file === '.') {
+ continue;
+ }
+ $path = $dir . '/' . $file;
+ if (is_dir($path)) {
+ self::tearDownAfterClassCleanStrayDataUnlinkDir($path);
+ }
+ else {
+ @unlink($path);
+ }
+ }
+ closedir($dh);
+ }
+ @rmdir($dir);
+ }
+
+ /**
+ * Clean up the list of hooks
+ */
+ static protected function tearDownAfterClassCleanStrayHooks() {
+ \OC_Hook::clear();
+ }
+
+ /**
+ * Clean up the list of file proxies
+ *
+ * Also reenables file proxies, in case a test disabled them
+ */
+ static protected function tearDownAfterClassCleanProxies() {
+ \OC_FileProxy::$enabled = true;
+ \OC_FileProxy::clearProxies();
+ }
+}
diff --git a/tests/lib/updater.php b/tests/lib/updater.php
index 4488744fa1d..155dccf78a7 100644
--- a/tests/lib/updater.php
+++ b/tests/lib/updater.php
@@ -8,9 +8,9 @@
namespace OC;
-class UpdaterTest extends \PHPUnit_Framework_TestCase {
+class UpdaterTest extends \Test\TestCase {
- public function testVersionCompatbility() {
+ public function versionCompatibilityTestData() {
return array(
array('1.0.0.0', '2.2.0', true),
array('1.1.1.1', '2.0.0', true),
@@ -24,7 +24,7 @@ class UpdaterTest extends \PHPUnit_Framework_TestCase {
}
/**
- * @dataProvider testVersionCompatbility
+ * @dataProvider versionCompatibilityTestData
*/
function testIsUpgradePossible($oldVersion, $newVersion, $result) {
$updater = new Updater();
diff --git a/tests/lib/urlgenerator.php b/tests/lib/urlgenerator.php
index 066272731ee..a92aaddeb4c 100644
--- a/tests/lib/urlgenerator.php
+++ b/tests/lib/urlgenerator.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_Urlgenerator extends PHPUnit_Framework_TestCase {
+class Test_Urlgenerator extends \Test\TestCase {
/**
* @small
diff --git a/tests/lib/user.php b/tests/lib/user.php
index e2c3282a19f..cb0c661b2a4 100644
--- a/tests/lib/user.php
+++ b/tests/lib/user.php
@@ -9,13 +9,15 @@
namespace Test;
-class User extends \PHPUnit_Framework_TestCase {
+class User extends TestCase {
/**
* @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
private $backend;
protected function setUp(){
+ parent::setUp();
+
$this->backend = $this->getMock('\OC_User_Dummy');
$manager = \OC_User::getManager();
$manager->registerBackend($this->backend);
diff --git a/tests/lib/user/backend.php b/tests/lib/user/backend.php
index 0d3914c7ca6..c2040f4e3be 100644
--- a/tests/lib/user/backend.php
+++ b/tests/lib/user/backend.php
@@ -30,7 +30,7 @@
* For an example see /tests/lib/user/dummy.php
*/
-abstract class Test_User_Backend extends PHPUnit_Framework_TestCase {
+abstract class Test_User_Backend extends \Test\TestCase {
/**
* @var OC_User_Backend $backend
*/
@@ -42,7 +42,7 @@ abstract class Test_User_Backend extends PHPUnit_Framework_TestCase {
* @return string
*/
public function getUser() {
- return uniqid('test_');
+ return $this->getUniqueID('test_');
}
public function testAddRemove() {
@@ -68,29 +68,29 @@ abstract class Test_User_Backend extends PHPUnit_Framework_TestCase {
$this->assertTrue((array_search($name1, $this->backend->getUsers())!==false));
$this->assertFalse((array_search($name2, $this->backend->getUsers())!==false));
}
-
+
public function testLogin() {
$name1=$this->getUser();
$name2=$this->getUser();
-
+
$this->assertFalse($this->backend->userExists($name1));
$this->assertFalse($this->backend->userExists($name2));
-
+
$this->backend->createUser($name1, 'pass1');
$this->backend->createUser($name2, 'pass2');
-
+
$this->assertTrue($this->backend->userExists($name1));
$this->assertTrue($this->backend->userExists($name2));
-
+
$this->assertSame($name1, $this->backend->checkPassword($name1, 'pass1'));
$this->assertSame($name2, $this->backend->checkPassword($name2, 'pass2'));
-
+
$this->assertFalse($this->backend->checkPassword($name1, 'pass2'));
$this->assertFalse($this->backend->checkPassword($name2, 'pass1'));
-
+
$this->assertFalse($this->backend->checkPassword($name1, 'dummy'));
$this->assertFalse($this->backend->checkPassword($name2, 'foobar'));
-
+
$this->backend->setPassword($name1, 'newpass1');
$this->assertFalse($this->backend->checkPassword($name1, 'pass1'));
$this->assertSame($name1, $this->backend->checkPassword($name1, 'newpass1'));
@@ -112,5 +112,4 @@ abstract class Test_User_Backend extends PHPUnit_Framework_TestCase {
$result = $this->backend->getDisplayNames('bar');
$this->assertSame(2, count($result));
}
-
}
diff --git a/tests/lib/user/database.php b/tests/lib/user/database.php
index a8e497720c2..3a6be1ceee5 100644
--- a/tests/lib/user/database.php
+++ b/tests/lib/user/database.php
@@ -21,22 +21,27 @@
*/
class Test_User_Database extends Test_User_Backend {
+ /** @var array */
+ private $users;
+
public function getUser() {
$user = parent::getUser();
$this->users[]=$user;
return $user;
}
-
- public function setUp() {
+
+ protected function setUp() {
+ parent::setUp();
$this->backend=new OC_User_Database();
}
-
- public function tearDown() {
+
+ protected function tearDown() {
if(!isset($this->users)) {
return;
}
foreach($this->users as $user) {
$this->backend->deleteUser($user);
}
+ parent::tearDown();
}
}
diff --git a/tests/lib/user/dummy.php b/tests/lib/user/dummy.php
index e417fd97603..fcc921de4b1 100644
--- a/tests/lib/user/dummy.php
+++ b/tests/lib/user/dummy.php
@@ -21,7 +21,8 @@
*/
class Test_User_Dummy extends Test_User_Backend {
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
$this->backend=new OC_User_Dummy();
}
}
diff --git a/tests/lib/user/manager.php b/tests/lib/user/manager.php
index 15b28e61bd5..c825ec05775 100644
--- a/tests/lib/user/manager.php
+++ b/tests/lib/user/manager.php
@@ -9,7 +9,7 @@
namespace Test\User;
-class Manager extends \PHPUnit_Framework_TestCase {
+class Manager extends \Test\TestCase {
public function testUserExistsSingleBackendExists() {
/**
* @var \OC_User_Dummy | \PHPUnit_Framework_MockObject_MockObject $backend
diff --git a/tests/lib/user/session.php b/tests/lib/user/session.php
index 5126049d77f..8d9d024197c 100644
--- a/tests/lib/user/session.php
+++ b/tests/lib/user/session.php
@@ -12,7 +12,7 @@ namespace Test\User;
use OC\Session\Memory;
use OC\User\User;
-class Session extends \PHPUnit_Framework_TestCase {
+class Session extends \Test\TestCase {
public function testGetUser() {
$session = $this->getMock('\OC\Session\Memory', array(), array(''));
$session->expects($this->once())
diff --git a/tests/lib/user/user.php b/tests/lib/user/user.php
index 7a1db861c98..6aa7243a75a 100644
--- a/tests/lib/user/user.php
+++ b/tests/lib/user/user.php
@@ -12,7 +12,7 @@ namespace Test\User;
use OC\AllConfig;
use OC\Hooks\PublicEmitter;
-class User extends \PHPUnit_Framework_TestCase {
+class User extends \Test\TestCase {
public function testDisplayName() {
/**
* @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
diff --git a/tests/lib/util.php b/tests/lib/util.php
index 9a3185b3f79..1ddbd2aba2b 100644
--- a/tests/lib/util.php
+++ b/tests/lib/util.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
-class Test_Util extends PHPUnit_Framework_TestCase {
+class Test_Util extends \Test\TestCase {
public function testGetVersion() {
$version = \OC_Util::getVersion();
$this->assertTrue(is_array($version));
@@ -150,7 +150,7 @@ class Test_Util extends PHPUnit_Framework_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 PHPUnit_Framework_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 PHPUnit_Framework_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/lib/utilcheckserver.php b/tests/lib/utilcheckserver.php
index be5596c1900..bb9b7a24452 100644
--- a/tests/lib/utilcheckserver.php
+++ b/tests/lib/utilcheckserver.php
@@ -9,7 +9,7 @@
/**
* Tests for server check functions
*/
-class Test_Util_CheckServer extends PHPUnit_Framework_TestCase {
+class Test_Util_CheckServer extends \Test\TestCase {
private $datadir;
@@ -32,16 +32,19 @@ class Test_Util_CheckServer extends PHPUnit_Framework_TestCase {
return $config;
}
- public function setUp() {
+ protected function setUp() {
+ parent::setUp();
+
$this->datadir = \OC_Helper::tmpFolder();
file_put_contents($this->datadir . '/.ocdata', '');
\OC::$server->getSession()->set('checkServer_succeeded', false);
}
- public function tearDown() {
+ protected function tearDown() {
// clean up
@unlink($this->datadir . '/.ocdata');
+ parent::tearDown();
}
/**
@@ -138,6 +141,10 @@ class Test_Util_CheckServer extends PHPUnit_Framework_TestCase {
* Tests an error is given when the datadir is not writable
*/
public function testDataDirNotWritable() {
+ if (\OC_Util::runningOnWindows()) {
+ $this->markTestSkipped('[Windows] chmod() does not work as intended on Windows.');
+ }
+
chmod($this->datadir, 0300);
$result = \OC_Util::checkServer($this->getConfig(array(
'installed' => true,
diff --git a/tests/lib/vobject.php b/tests/lib/vobject.php
index db5b0f99f06..6fabf30e48f 100644
--- a/tests/lib/vobject.php
+++ b/tests/lib/vobject.php
@@ -6,9 +6,11 @@
* See the COPYING-README file.
*/
-class Test_VObject extends PHPUnit_Framework_TestCase {
+class Test_VObject extends \Test\TestCase {
+
+ protected function setUp() {
+ parent::setUp();
- public function setUp() {
Sabre\VObject\Property::$classMap['SUMMARY'] = 'OC\VObject\StringProperty';
Sabre\VObject\Property::$classMap['ORG'] = 'OC\VObject\CompoundProperty';
}
diff --git a/tests/phpunit-autotest.xml b/tests/phpunit-autotest.xml
index 3805bb1ac79..15e0e3dd408 100644
--- a/tests/phpunit-autotest.xml
+++ b/tests/phpunit-autotest.xml
@@ -9,6 +9,7 @@
<testsuite name='ownCloud'>
<directory suffix='.php'>lib/</directory>
<directory suffix='.php'>settings/</directory>
+ <directory suffix='.php'>core/</directory>
<file>apps.php</file>
</testsuite>
<!-- filters for code coverage -->
@@ -19,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>
@@ -38,11 +38,6 @@
</filter>
<listeners>
<listener class="StartSessionListener" file="startsessionlistener.php" />
- <listener class="TestCleanupListener" file="testcleanuplistener.php">
- <arguments>
- <string>detail</string>
- </arguments>
- </listener>
</listeners>
</phpunit>
diff --git a/tests/phpunit.xml.dist b/tests/phpunit.xml.dist
index 21c63ea0469..95abe473965 100644
--- a/tests/phpunit.xml.dist
+++ b/tests/phpunit.xml.dist
@@ -2,6 +2,8 @@
<phpunit bootstrap="bootstrap.php">
<testsuite name='ownCloud'>
<directory suffix='.php'>lib/</directory>
+ <directory suffix='.php'>settings/</directory>
+ <directory suffix='.php'>core/</directory>
<file>apps.php</file>
</testsuite>
<!-- filters for code coverage -->
diff --git a/tests/preseed-config.php b/tests/preseed-config.php
index 3fd5b3cb7fc..3f41573bf29 100644
--- a/tests/preseed-config.php
+++ b/tests/preseed-config.php
@@ -1,22 +1,21 @@
<?php
$CONFIG = array (
- "appstoreenabled" => false,
- 'apps_paths' =>
- array (
- 0 =>
- array (
- 'path' => OC::$SERVERROOT.'/apps',
- 'url' => '/apps',
- 'writable' => true,
- ),
- 1 =>
- array (
- 'path' => OC::$SERVERROOT.'/apps2',
- 'url' => '/apps2',
- 'writable' => false,
- )
- ),
-
+ "appstoreenabled" => false,
+ 'apps_paths' =>
+ array (
+ 0 =>
+ array (
+ 'path' => OC::$SERVERROOT.'/apps',
+ 'url' => '/apps',
+ 'writable' => true,
+ ),
+ 1 =>
+ array (
+ 'path' => OC::$SERVERROOT.'/apps2',
+ 'url' => '/apps2',
+ 'writable' => false,
+ )
+ ),
);
if(substr(strtolower(PHP_OS), 0, 3) == "win") {
diff --git a/tests/settings/controller/mailsettingscontrollertest.php b/tests/settings/controller/mailsettingscontrollertest.php
index ff3d1d93a1b..f6ebade7b17 100644
--- a/tests/settings/controller/mailsettingscontrollertest.php
+++ b/tests/settings/controller/mailsettingscontrollertest.php
@@ -14,11 +14,13 @@ use \OC\Settings\Application;
/**
* @package OC\Settings\Controller
*/
-class MailSettingscontrollerTest extends \PHPUnit_Framework_TestCase {
+class MailSettingsControllerTest extends \Test\TestCase {
private $container;
protected function setUp() {
+ parent::setUp();
+
$app = new Application();
$this->container = $app->getContainer();
$this->container['Config'] = $this->getMockBuilder('\OCP\IConfig')
@@ -147,6 +149,12 @@ class MailSettingscontrollerTest extends \PHPUnit_Framework_TestCase {
}
public function testSendTestMail() {
+ /**
+ * FIXME: Disabled due to missing DI on mail class.
+ * TODO: Re-enable when https://github.com/owncloud/core/pull/12085 is merged.
+ */
+ $this->markTestSkipped('Disable test until OC_Mail is rewritten.');
+
$user = $this->getMockBuilder('\OC\User\User')
->disableOriginalConstructor()
->getMock();
diff --git a/tests/testcleanuplistener.php b/tests/testcleanuplistener.php
deleted file mode 100644
index 7b442bbd4f7..00000000000
--- a/tests/testcleanuplistener.php
+++ /dev/null
@@ -1,176 +0,0 @@
-<?php
-/**
- * Copyright (c) 2013 Vincent Petry <pvince81@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-/**
- * Detects tests that didn't clean up properly, show a warning, then clean up after them.
- */
-class TestCleanupListener implements PHPUnit_Framework_TestListener {
- private $verbosity;
-
- public function __construct($verbosity = 'verbose') {
- $this->verbosity = $verbosity;
- }
-
- public function addError(PHPUnit_Framework_Test $test, Exception $e, $time) {
- }
-
- public function addFailure(PHPUnit_Framework_Test $test, PHPUnit_Framework_AssertionFailedError $e, $time) {
- }
-
- public function addIncompleteTest(PHPUnit_Framework_Test $test, Exception $e, $time) {
- }
-
- public function addRiskyTest(PHPUnit_Framework_Test $test, Exception $e, $time) {
- }
-
- public function addSkippedTest(PHPUnit_Framework_Test $test, Exception $e, $time) {
- }
-
- public function startTest(PHPUnit_Framework_Test $test) {
- }
-
- public function endTest(PHPUnit_Framework_Test $test, $time) {
- }
-
- public function startTestSuite(PHPUnit_Framework_TestSuite $suite) {
- }
-
- public function endTestSuite(PHPUnit_Framework_TestSuite $suite) {
- // don't clean up the test environment if a data provider finished
- if (!($suite instanceof PHPUnit_Framework_TestSuite_DataProvider)) {
- if ($this->cleanStorages() && $this->isShowSuiteWarning()) {
- printf("TestSuite '%s': Did not clean up storages\n", $suite->getName());
- }
- if ($this->cleanFileCache() && $this->isShowSuiteWarning()) {
- printf("TestSuite '%s': Did not clean up file cache\n", $suite->getName());
- }
- if ($this->cleanStrayDataFiles() && $this->isShowSuiteWarning()) {
- printf("TestSuite '%s': Did not clean up data dir\n", $suite->getName());
- }
- if ($this->cleanStrayHooks() && $this->isShowSuiteWarning()) {
- printf("TestSuite '%s': Did not clean up hooks\n", $suite->getName());
- }
- if ($this->cleanProxies() && $this->isShowSuiteWarning()) {
- printf("TestSuite '%s': Did not clean up proxies\n", $suite->getName());
- }
- }
- }
-
- private function isShowSuiteWarning() {
- return $this->verbosity === 'suite' || $this->verbosity === 'detail';
- }
-
- private function isShowDetail() {
- return $this->verbosity === 'detail';
- }
-
- /**
- * @param string $dir
- */
- private function unlinkDir($dir) {
- if ($dh = @opendir($dir)) {
- while (($file = readdir($dh)) !== false) {
- if ($file === '..' || $file === '.') {
- continue;
- }
- $path = $dir . '/' . $file;
- if (is_dir($path)) {
- $this->unlinkDir($path);
- }
- else {
- @unlink($path);
- }
- }
- closedir($dh);
- }
- @rmdir($dir);
- }
-
- private function cleanStrayDataFiles() {
- $knownEntries = array(
- 'owncloud.log' => true,
- 'owncloud.db' => true,
- '.ocdata' => true,
- '..' => true,
- '.' => true
- );
- $datadir = \OC_Config::getValue('datadirectory', \OC::$SERVERROOT . '/data');
- $entries = array();
- if ($dh = opendir($datadir)) {
- while (($file = readdir($dh)) !== false) {
- if (!isset($knownEntries[$file])) {
- $entries[] = $file;
- }
- }
- closedir($dh);
- }
-
- if (count($entries) > 0) {
- foreach ($entries as $entry) {
- $this->unlinkDir($datadir . '/' . $entry);
- if ($this->isShowDetail()) {
- printf("Stray datadir entry: %s\n", $entry);
- }
- }
- return true;
- }
-
- return false;
- }
-
- private function cleanStorages() {
- $sql = 'DELETE FROM `*PREFIX*storages`';
- $query = \OC_DB::prepare( $sql );
- $result = $query->execute();
- if ($result > 0) {
- return true;
- }
- return false;
- }
-
- private function cleanFileCache() {
- $sql = 'DELETE FROM `*PREFIX*filecache`';
- $query = \OC_DB::prepare( $sql );
- $result = $query->execute();
- if ($result > 0) {
- return true;
- }
- return false;
- }
-
- private function cleanStrayHooks() {
- $hasHooks = false;
- $hooks = OC_Hook::getHooks();
- if (!$hooks || sizeof($hooks) === 0) {
- return false;
- }
-
- foreach ($hooks as $signalClass => $signals) {
- if (sizeof($signals)) {
- foreach ($signals as $signalName => $handlers ) {
- if (sizeof($handlers) > 0) {
- $hasHooks = true;
- OC_Hook::clear($signalClass, $signalName);
- if ($this->isShowDetail()) {
- printf("Stray hook: \"%s\" \"%s\"\n", $signalClass, $signalName);
- }
- }
- }
- }
- }
- return $hasHooks;
- }
-
- private function cleanProxies() {
- $proxies = OC_FileProxy::getProxies();
- OC_FileProxy::clearProxies();
- // reenable in case some test failed to reenable them
- OC_FileProxy::$enabled = true;
- return count($proxies) > 0;
- }
-}