summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
m---------3rdparty0
-rw-r--r--apps/files/css/files.css4
-rw-r--r--apps/files/css/mobile.css6
-rw-r--r--apps/files/js/filelist.js1
-rw-r--r--apps/files/l10n/pt_BR.php22
-rw-r--r--apps/files_encryption/js/settings-personal.js8
-rw-r--r--apps/files_encryption/l10n/pt_BR.php2
-rw-r--r--apps/files_encryption/lib/util.php3
-rw-r--r--apps/files_external/3rdparty/php-opencloud/LICENSE16
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/Autoload.php296
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Base.php301
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Collection.php320
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/AsyncError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/AsyncHttpError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/AsyncTimeoutError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/AttributeError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/AuthenticationError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/BaseException.php7
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CdnError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CdnHttpError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CdnNotAvailableError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CdnTtlError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CollectionError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerCreateError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerDeleteError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerNameError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerNotEmptyError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerNotFoundError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CreateError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CreateUpdateError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CredentialError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DatabaseCreateError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DatabaseDeleteError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DatabaseListError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DatabaseNameError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DatabaseUpdateError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DeleteError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DocumentError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DomainError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/EmptyResponseError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/EndpointError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/FlavorError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpForbiddenError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpOverLimitError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpRetryError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpTimeoutError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpUnauthorizedError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpUrlError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/IOError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/IdRequiredError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ImageError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceCreateError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceDeleteError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceFlavorError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceNotFound.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceUpdateError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InvalidArgumentError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InvalidIdTypeError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InvalidIpTypeError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InvalidParameterError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InvalidRequestError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/JsonError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/LoggingException.php16
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataCreateError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataDeleteError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataJsonError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataKeyError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataPrefixError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataUpdateError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MisMatchedChecksumError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MissingValueError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NameError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NetworkCreateError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NetworkDeleteError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NetworkError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NetworkUpdateError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NetworkUrlError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NoContentTypeError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NoNameError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ObjFetchError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ObjectCopyError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ObjectError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/RebuildError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/RecordTypeError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerActionError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerCreateError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerDeleteError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerImageScheduleError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerIpsError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerJsonError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerUpdateError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerUrlError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServiceValueError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/SnapshotError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/TempUrlMethodError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnknownError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnknownParameterError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnrecognizedServiceError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnsupportedExtensionError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnsupportedFeatureExtension.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnsupportedVersionError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UpdateError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UrlError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UserCreateError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UserDeleteError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UserListError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UserNameError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UserUpdateError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/VolumeError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/VolumeTypeError.php5
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Identity/Role.php21
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Identity/Tenant.php22
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Identity/User.php73
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Lang.php21
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Log/AbstractLogger.php140
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Log/LogLevel.php38
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Log/Logger.php220
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Log/LoggerInterface.php134
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Metadata.php92
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Nova.php140
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/PersistentObject.php939
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Request/Curl.php308
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Request/HttpRequestInterface.php23
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Request/Response/Blank.php27
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Request/Response/Http.php140
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Service.php489
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/ServiceCatalogItem.php18
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Globals.php252
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/AbstractService.php57
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/CDNService.php62
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/Resource/AbstractStorageObject.php170
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/Resource/CDNContainer.php298
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/Resource/Container.php401
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/Resource/DataObject.php941
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/Service.php115
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/OpenStack.php1198
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Rackspace.php132
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/openstack.php8
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/php-opencloud.php15
-rw-r--r--apps/files_external/3rdparty/php-opencloud/lib/rackspace.php8
-rw-r--r--apps/files_external/ajax/dropbox.php7
-rw-r--r--apps/files_external/ajax/google.php5
-rw-r--r--apps/files_external/l10n/pt_BR.php10
-rwxr-xr-xapps/files_external/lib/config.php4
-rw-r--r--apps/files_external/lib/swift.php218
-rw-r--r--apps/files_external/tests/swift.php11
-rw-r--r--apps/files_sharing/js/external.js4
-rw-r--r--apps/files_sharing/js/public.js4
-rw-r--r--apps/files_sharing/l10n/de.php1
-rw-r--r--apps/files_sharing/l10n/de_DE.php1
-rw-r--r--apps/files_sharing/l10n/en_GB.php1
-rw-r--r--apps/files_sharing/l10n/et_EE.php1
-rw-r--r--apps/files_sharing/l10n/fi_FI.php1
-rw-r--r--apps/files_sharing/l10n/gl.php1
-rw-r--r--apps/files_sharing/l10n/id.php17
-rw-r--r--apps/files_sharing/l10n/it.php1
-rw-r--r--apps/files_sharing/l10n/nl.php1
-rw-r--r--apps/files_sharing/l10n/pt_BR.php5
-rw-r--r--apps/files_sharing/l10n/tr.php1
-rw-r--r--apps/files_sharing/lib/external/storage.php19
-rw-r--r--apps/files_sharing/tests/js/appSpec.js2
-rwxr-xr-xconfig/config.sample.php28
-rw-r--r--core/js/share.js4
-rw-r--r--core/js/tests/specs/shareSpec.js146
-rw-r--r--core/l10n/ar.php1
-rw-r--r--core/l10n/ast.php1
-rw-r--r--core/l10n/ca.php1
-rw-r--r--core/l10n/cs_CZ.php1
-rw-r--r--core/l10n/da.php1
-rw-r--r--core/l10n/de.php1
-rw-r--r--core/l10n/de_AT.php1
-rw-r--r--core/l10n/de_DE.php1
-rw-r--r--core/l10n/el.php1
-rw-r--r--core/l10n/en_GB.php1
-rw-r--r--core/l10n/eo.php1
-rw-r--r--core/l10n/es.php1
-rw-r--r--core/l10n/es_AR.php1
-rw-r--r--core/l10n/es_MX.php1
-rw-r--r--core/l10n/et_EE.php1
-rw-r--r--core/l10n/eu.php1
-rw-r--r--core/l10n/fa.php1
-rw-r--r--core/l10n/fi_FI.php1
-rw-r--r--core/l10n/fr.php1
-rw-r--r--core/l10n/gl.php1
-rw-r--r--core/l10n/he.php1
-rw-r--r--core/l10n/hu_HU.php1
-rw-r--r--core/l10n/ia.php1
-rw-r--r--core/l10n/it.php1
-rw-r--r--core/l10n/ja.php1
-rw-r--r--core/l10n/km.php1
-rw-r--r--core/l10n/ko.php1
-rw-r--r--core/l10n/lb.php1
-rw-r--r--core/l10n/lt_LT.php1
-rw-r--r--core/l10n/nb_NO.php1
-rw-r--r--core/l10n/nl.php1
-rw-r--r--core/l10n/pl.php1
-rw-r--r--core/l10n/pt_BR.php1
-rw-r--r--core/l10n/pt_PT.php1
-rw-r--r--core/l10n/ro.php1
-rw-r--r--core/l10n/ru.php1
-rw-r--r--core/l10n/sk_SK.php1
-rw-r--r--core/l10n/sl.php1
-rw-r--r--core/l10n/sq.php1
-rw-r--r--core/l10n/sv.php1
-rw-r--r--core/l10n/th_TH.php1
-rw-r--r--core/l10n/tr.php1
-rw-r--r--core/l10n/uk.php1
-rw-r--r--core/l10n/vi.php1
-rw-r--r--core/l10n/zh_CN.php1
-rw-r--r--core/l10n/zh_TW.php1
-rw-r--r--l10n/ar/core.po22
-rw-r--r--l10n/ast/core.po22
-rw-r--r--l10n/ca/core.po22
-rw-r--r--l10n/cs_CZ/core.po22
-rw-r--r--l10n/da/core.po22
-rw-r--r--l10n/de/core.po22
-rw-r--r--l10n/de/files_sharing.po12
-rw-r--r--l10n/de_AT/core.po22
-rw-r--r--l10n/de_DE/core.po22
-rw-r--r--l10n/de_DE/files_sharing.po12
-rw-r--r--l10n/el/core.po22
-rw-r--r--l10n/en_GB/core.po22
-rw-r--r--l10n/en_GB/files_sharing.po12
-rw-r--r--l10n/eo/core.po22
-rw-r--r--l10n/es/core.po22
-rw-r--r--l10n/es_AR/core.po22
-rw-r--r--l10n/es_MX/core.po22
-rw-r--r--l10n/et_EE/core.po22
-rw-r--r--l10n/et_EE/files_sharing.po14
-rw-r--r--l10n/eu/core.po22
-rw-r--r--l10n/fa/core.po22
-rw-r--r--l10n/fi_FI/core.po22
-rw-r--r--l10n/fi_FI/files_sharing.po12
-rw-r--r--l10n/fr/core.po22
-rw-r--r--l10n/gl/core.po22
-rw-r--r--l10n/gl/files_sharing.po12
-rw-r--r--l10n/he/core.po22
-rw-r--r--l10n/hu_HU/core.po22
-rw-r--r--l10n/ia/core.po22
-rw-r--r--l10n/id/files_sharing.po40
-rw-r--r--l10n/it/core.po22
-rw-r--r--l10n/it/files_sharing.po12
-rw-r--r--l10n/ja/core.po22
-rw-r--r--l10n/km/core.po22
-rw-r--r--l10n/ko/core.po22
-rw-r--r--l10n/lb/core.po22
-rw-r--r--l10n/lt_LT/core.po22
-rw-r--r--l10n/nb_NO/core.po22
-rw-r--r--l10n/nl/core.po22
-rw-r--r--l10n/nl/files_sharing.po12
-rw-r--r--l10n/pl/core.po22
-rw-r--r--l10n/pt_BR/core.po22
-rw-r--r--l10n/pt_BR/files.po84
-rw-r--r--l10n/pt_BR/files_encryption.po6
-rw-r--r--l10n/pt_BR/files_external.po112
-rw-r--r--l10n/pt_BR/files_sharing.po16
-rw-r--r--l10n/pt_BR/user_ldap.po4
-rw-r--r--l10n/pt_BR/user_webdavauth.po4
-rw-r--r--l10n/pt_PT/core.po22
-rw-r--r--l10n/ro/core.po22
-rw-r--r--l10n/ru/core.po22
-rw-r--r--l10n/ru/files.po60
-rw-r--r--l10n/ru/settings.po15
-rw-r--r--l10n/sk_SK/core.po22
-rw-r--r--l10n/sl/core.po22
-rw-r--r--l10n/sq/core.po22
-rw-r--r--l10n/sv/core.po22
-rw-r--r--l10n/templates/core.pot18
-rw-r--r--l10n/templates/files.pot58
-rw-r--r--l10n/templates/files_encryption.pot2
-rw-r--r--l10n/templates/files_external.pot100
-rw-r--r--l10n/templates/files_sharing.pot6
-rw-r--r--l10n/templates/files_trashbin.pot2
-rw-r--r--l10n/templates/files_versions.pot2
-rw-r--r--l10n/templates/lib.pot2
-rw-r--r--l10n/templates/private.pot2
-rw-r--r--l10n/templates/settings.pot2
-rw-r--r--l10n/templates/user_ldap.pot2
-rw-r--r--l10n/templates/user_webdavauth.pot2
-rw-r--r--l10n/th_TH/core.po22
-rw-r--r--l10n/tr/core.po22
-rw-r--r--l10n/tr/files_sharing.po12
-rw-r--r--l10n/uk/core.po22
-rw-r--r--l10n/vi/core.po22
-rw-r--r--l10n/zh_CN/core.po22
-rw-r--r--l10n/zh_TW/core.po22
-rw-r--r--lib/base.php14
-rw-r--r--lib/private/defaults.php7
-rw-r--r--lib/private/files/filesystem.php31
-rw-r--r--lib/private/files/mount/mount.php7
-rw-r--r--lib/private/files/objectstore/homeobjectstorestorage.php71
-rw-r--r--lib/private/files/objectstore/noopscanner.php74
-rw-r--r--lib/private/files/objectstore/objectstorestorage.php421
-rw-r--r--lib/private/files/objectstore/swift.php147
-rw-r--r--lib/private/files/storage/common.php5
-rw-r--r--lib/private/files/storage/dav.php69
-rwxr-xr-xlib/private/util.php193
-rw-r--r--lib/public/files/objectstore/iobjectstore.php33
-rw-r--r--settings/l10n/ru.php4
-rw-r--r--tests/lib/files/objectstore/swift.php106
304 files changed, 2347 insertions, 9039 deletions
diff --git a/3rdparty b/3rdparty
-Subproject 045dde529e050316788a63cd0067a38bbc6921b
+Subproject 20066c9f65fe9237895461ff3af2ac81218382a
diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index bf76682f03c..ecb58789f61 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -437,9 +437,9 @@ a.action>img {
}
#fileList a.action[data-action="Rename"] {
- padding:18px 14px !important;
+ padding: 16px 14px 17px !important;
position: relative;
- top: -6px;
+ top: -21px;
}
#fileList tr:hover a.action, #fileList a.action.permanent {
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
diff --git a/apps/files/css/mobile.css b/apps/files/css/mobile.css
index 04a9a3079e8..fe876899b4a 100644
--- a/apps/files/css/mobile.css
+++ b/apps/files/css/mobile.css
@@ -40,6 +40,12 @@ table td.filename .nametext {
opacity: .2 !important;
display: inline !important;
}
+/* show share action of shared items darker to distinguish from non-shared */
+#fileList a.action.permanent {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)" !important;
+ filter: alpha(opacity=70) !important;
+ opacity: .7 !important;
+}
/* do not show Rename or Versions on mobile */
#fileList .action.action-rename,
#fileList .action.action-versions {
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index dd77b534f51..0477a657035 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -517,7 +517,6 @@
* This will refresh the file actions on the list.
*/
_onFileActionsUpdated: function() {
- console.log('onFileActionsUpdated');
var self = this;
this.$fileList.find('tr td.filename').each(function() {
self.fileActions.display($(this), true, self);
diff --git a/apps/files/l10n/pt_BR.php b/apps/files/l10n/pt_BR.php
index 38bc6d86977..5f5ca62af77 100644
--- a/apps/files/l10n/pt_BR.php
+++ b/apps/files/l10n/pt_BR.php
@@ -13,7 +13,7 @@ $TRANSLATIONS = array(
"Error when creating the file" => "Erro ao criar o arquivo",
"Folder name cannot be empty." => "O nome da pasta não pode estar vazio.",
"Error when creating the folder" => "Erro ao criar a pasta",
-"Unable to set upload directory." => "Impossível configurar o diretório de upload",
+"Unable to set upload directory." => "Impossível configurar o diretório de envio",
"Invalid Token" => "Token inválido",
"No file was uploaded. Unknown error" => "Nenhum arquivo foi enviado. Erro desconhecido",
"There is no error, the file uploaded with success" => "Sem erros, o arquivo foi enviado com sucesso",
@@ -34,7 +34,7 @@ $TRANSLATIONS = array(
"Not enough free space, you are uploading {size1} but only {size2} is left" => "Não há espaço suficiente, você está enviando {size1} mas resta apenas {size2}",
"Upload cancelled." => "Envio cancelado.",
"Could not get result from server." => "Não foi possível obter o resultado do servidor.",
-"File upload is in progress. Leaving the page now will cancel the upload." => "Upload em andamento. Sair da página agora resultará no cancelamento do envio.",
+"File upload is in progress. Leaving the page now will cancel the upload." => "Envio de arquivo em andamento. Sair da página agora resultará no cancelamento do envio.",
"URL cannot be empty" => "URL não pode estar vazia",
"{new_name} already exists" => "{new_name} já existe",
"Could not create file" => "Não foi possível criar o arquivo",
@@ -60,16 +60,16 @@ $TRANSLATIONS = array(
"\"{name}\" is an invalid file name." => "\"{name}\" é um nome de arquivo inválido.",
"Your storage is full, files can not be updated or synced anymore!" => "Seu armazenamento está cheio, arquivos não podem mais ser atualizados ou sincronizados!",
"Your storage is almost full ({usedSpacePercent}%)" => "Seu armazenamento está quase cheio ({usedSpacePercent}%)",
-"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "App de encriptação está ativado, mas as chaves não estão inicializadas, por favor log-out e faça login novamente",
-"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Chave do App de Encriptação é inválida. Por favor, atualize sua senha de chave privada em suas configurações pessoais para recuperar o acesso a seus arquivos criptografados.",
-"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Encriptação foi desabilitada mas seus arquivos continuam encriptados. Por favor vá a suas configurações pessoais para descriptar seus arquivos.",
+"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "App de criptografia está ativado, mas as chaves não estão inicializadas, por favor log-out e faça login novamente",
+"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Chave do App de Criptografia é inválida. Por favor, atualize sua senha de chave privada em suas configurações pessoais para recuperar o acesso a seus arquivos criptografados.",
+"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Criptografia foi desabilitada mas seus arquivos continuam criptografados. Por favor vá a suas configurações pessoais para descriptar seus arquivos.",
"{dirs} and {files}" => "{dirs} e {files}",
"%s could not be renamed" => "%s não pode ser renomeado",
"Upload (max. %s)" => "Envio (max. %s)",
"File handling" => "Tratamento de Arquivo",
-"Maximum upload size" => "Tamanho máximo para carregar",
+"Maximum upload size" => "Tamanho máximo para envio",
"max. possible: " => "max. possível:",
-"Save" => "Guardar",
+"Save" => "Salvar",
"WebDAV" => "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" => "Use este endereço <a href=\"%s\" target=\"_blank\">para ter acesso aos seus Arquivos via WebDAV</a>",
"New" => "Novo",
@@ -78,12 +78,12 @@ $TRANSLATIONS = array(
"New folder" => "Nova pasta",
"Folder" => "Pasta",
"From link" => "Do link",
-"Cancel upload" => "Cancelar upload",
-"You don’t have permission to upload or create files here" => "Você não tem permissão para carregar ou criar arquivos aqui",
+"Cancel upload" => "Cancelar envio",
+"You don’t have permission to upload or create files here" => "Você não tem permissão para enviar ou criar arquivos aqui",
"Nothing in here. Upload something!" => "Nada aqui. Carrege alguma coisa!",
"Download" => "Baixar",
-"Upload too large" => "Upload muito grande",
-"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os arquivos que você está tentando carregar excedeu o tamanho máximo para arquivos no servidor.",
+"Upload too large" => "Arquivo muito grande para envio",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os arquivos que você está tentando enviar excedeu o tamanho máximo para arquivos no servidor.",
"Files are being scanned, please wait." => "Arquivos sendo escaneados, por favor aguarde.",
"Currently scanning" => "Atualmente escaneando"
);
diff --git a/apps/files_encryption/js/settings-personal.js b/apps/files_encryption/js/settings-personal.js
index e16519c3c98..f857c2c9f05 100644
--- a/apps/files_encryption/js/settings-personal.js
+++ b/apps/files_encryption/js/settings-personal.js
@@ -24,7 +24,7 @@ function updatePrivateKeyPasswd() {
$(document).ready(function(){
// Trigger ajax on recoveryAdmin status change
- $( 'input:radio[name="userEnableRecovery"]' ).change(
+ $( 'input:radio[name="userEnableRecovery"]' ).change(
function() {
// Hide feedback messages in case they're already visible
@@ -33,7 +33,7 @@ $(document).ready(function(){
var recoveryStatus = $( this ).val();
- $.post(
+ $.post(
OC.filePath( 'files_encryption', 'ajax', 'userrecovery.php' )
, { userEnableRecovery: recoveryStatus }
, function( data ) {
@@ -49,7 +49,7 @@ $(document).ready(function(){
}
);
- $("#encryptAll").click(
+ $("#encryptAll").click(
function(){
// Hide feedback messages in case they're already visible
@@ -59,7 +59,7 @@ $(document).ready(function(){
var userPassword = $( '#userPassword' ).val();
var encryptAll = $( '#encryptAll' ).val();
- $.post(
+ $.post(
OC.filePath( 'files_encryption', 'ajax', 'encryptall.php' )
, { encryptAll: encryptAll, userPassword: userPassword }
, function( data ) {
diff --git a/apps/files_encryption/l10n/pt_BR.php b/apps/files_encryption/l10n/pt_BR.php
index 1a829352daf..d1a95f7966a 100644
--- a/apps/files_encryption/l10n/pt_BR.php
+++ b/apps/files_encryption/l10n/pt_BR.php
@@ -34,7 +34,7 @@ $TRANSLATIONS = array(
" If you don't remember your old password you can ask your administrator to recover your files." => "Se você não se lembra de sua antiga senha você pode pedir ao administrador que recupere seus arquivos.",
"Old log-in password" => "Senha antiga de login",
"Current log-in password" => "Senha de login atual",
-"Update Private Key Password" => "Atualizar senha de chave privada",
+"Update Private Key Password" => "Atualizar Senha de Chave Privada",
"Enable password recovery:" => "Habilitar recuperação de senha:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Habilitar essa opção vai permitir que você obtenha novamente acesso aos seus arquivos encriptados em caso de perda de senha",
"File recovery settings updated" => "Configurações de recuperação de arquivo atualizado",
diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php
index ea2b1b10d63..eb18507b4d5 100644
--- a/apps/files_encryption/lib/util.php
+++ b/apps/files_encryption/lib/util.php
@@ -1493,10 +1493,11 @@ class Util {
* @return boolean
*/
public function isSystemWideMountPoint($path) {
+ $normalizedPath = ltrim($path, '/');
if (\OCP\App::isEnabled("files_external")) {
$mount = \OC_Mount_Config::getSystemMountPoints();
foreach ($mount as $mountPoint => $data) {
- if ($mountPoint == substr($path, 1, strlen($mountPoint))) {
+ if ($mountPoint == substr($normalizedPath, 0, strlen($mountPoint))) {
return true;
}
}
diff --git a/apps/files_external/3rdparty/php-opencloud/LICENSE b/apps/files_external/3rdparty/php-opencloud/LICENSE
deleted file mode 100644
index f7c56967e6c..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/LICENSE
+++ /dev/null
@@ -1,16 +0,0 @@
- Copyright 2012-2013 Rackspace US, 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.
-
- All contributions to this repository are covered under the same license,
- terms, and conditions. \ No newline at end of file
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/Autoload.php b/apps/files_external/3rdparty/php-opencloud/lib/Autoload.php
deleted file mode 100644
index 32e9dc24b7e..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/Autoload.php
+++ /dev/null
@@ -1,296 +0,0 @@
-<?php
-
-// Copyright (c) 2004-2013 Fabien Potencier
-
-// 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 ClassLoader
-{
- private $namespaces = array();
- private $prefixes = array();
- private $namespaceFallbacks = array();
- private $prefixFallbacks = array();
- private $useIncludePath = false;
-
- /**
- * Turns on searching the include for class files. Allows easy loading
- * of installed PEAR packages
- *
- * @param Boolean $useIncludePath
- */
- public function useIncludePath($useIncludePath)
- {
- $this->useIncludePath = $useIncludePath;
- }
-
- /**
- * Can be used to check if the autoloader uses the include path to check
- * for classes.
- *
- * @return Boolean
- */
- public function getUseIncludePath()
- {
- return $this->useIncludePath;
- }
-
- /**
- * Gets the configured namespaces.
- *
- * @return array A hash with namespaces as keys and directories as values
- */
- public function getNamespaces()
- {
- return $this->namespaces;
- }
-
- /**
- * Gets the configured class prefixes.
- *
- * @return array A hash with class prefixes as keys and directories as values
- */
- public function getPrefixes()
- {
- return $this->prefixes;
- }
-
- /**
- * Gets the directory(ies) to use as a fallback for namespaces.
- *
- * @return array An array of directories
- */
- public function getNamespaceFallbacks()
- {
- return $this->namespaceFallbacks;
- }
-
- /**
- * Gets the directory(ies) to use as a fallback for class prefixes.
- *
- * @return array An array of directories
- */
- public function getPrefixFallbacks()
- {
- return $this->prefixFallbacks;
- }
-
- /**
- * Registers the directory to use as a fallback for namespaces.
- *
- * @param array $dirs An array of directories
- *
- * @api
- */
- public function registerNamespaceFallbacks(array $dirs)
- {
- $this->namespaceFallbacks = $dirs;
- }
-
- /**
- * Registers a directory to use as a fallback for namespaces.
- *
- * @param string $dir A directory
- */
- public function registerNamespaceFallback($dir)
- {
- $this->namespaceFallbacks[] = $dir;
- }
-
- /**
- * Registers directories to use as a fallback for class prefixes.
- *
- * @param array $dirs An array of directories
- *
- * @api
- */
- public function registerPrefixFallbacks(array $dirs)
- {
- $this->prefixFallbacks = $dirs;
- }
-
- /**
- * Registers a directory to use as a fallback for class prefixes.
- *
- * @param string $dir A directory
- */
- public function registerPrefixFallback($dir)
- {
- $this->prefixFallbacks[] = $dir;
- }
-
- /**
- * Registers an array of namespaces
- *
- * @param array $namespaces An array of namespaces (namespaces as keys and locations as values)
- *
- * @api
- */
- public function registerNamespaces(array $namespaces)
- {
- foreach ($namespaces as $namespace => $locations) {
- $this->namespaces[$namespace] = (array) $locations;
- }
- }
-
- /**
- * Registers a namespace.
- *
- * @param string $namespace The namespace
- * @param array|string $paths The location(s) of the namespace
- *
- * @api
- */
- public function registerNamespace($namespace, $paths)
- {
- $this->namespaces[$namespace] = (array) $paths;
- }
-
- /**
- * Registers an array of classes using the PEAR naming convention.
- *
- * @param array $classes An array of classes (prefixes as keys and locations as values)
- *
- * @api
- */
- public function registerPrefixes(array $classes)
- {
- foreach ($classes as $prefix => $locations) {
- $this->prefixes[$prefix] = (array) $locations;
- }
- }
-
- /**
- * Registers a set of classes using the PEAR naming convention.
- *
- * @param string $prefix The classes prefix
- * @param array|string $paths The location(s) of the classes
- *
- * @api
- */
- public function registerPrefix($prefix, $paths)
- {
- $this->prefixes[$prefix] = (array) $paths;
- }
-
- /**
- * Registers this instance as an autoloader.
- *
- * @param Boolean $prepend Whether to prepend the autoloader or not
- *
- * @api
- */
- public function register($prepend = false)
- {
- spl_autoload_register(array($this, 'loadClass'), true, $prepend);
- }
-
- /**
- * Fix for certain versions of PHP that have trouble with
- * namespaces with leading separators.
- *
- * @access private
- * @param mixed $className
- * @return void
- */
- private function makeBackwardsCompatible($className)
- {
- return (phpversion() < '5.3.3') ? ltrim($className, '\\') : $className;
- }
-
- /**
- * Loads the given class or interface.
- *
- * @param string $class The name of the class
- *
- * @return Boolean|null True, if loaded
- */
- public function loadClass($class)
- {
- $class = $this->makeBackwardsCompatible($class);
-
- if ($file = $this->findFile($class)) {
- require $file;
-
- return true;
- }
- }
-
- /**
- * Finds the path to the file where the class is defined.
- *
- * @param string $class The name of the class
- *
- * @return string|null The path, if found
- */
- public function findFile($class)
- {
- if (false !== $pos = strrpos($class, '\\')) {
- // namespaced class name
- $namespace = substr($class, 0, $pos);
- $className = substr($class, $pos + 1);
- $normalizedClass = str_replace('\\', DIRECTORY_SEPARATOR, $namespace).DIRECTORY_SEPARATOR.str_replace('_', DIRECTORY_SEPARATOR, $className).'.php';
- foreach ($this->namespaces as $ns => $dirs) {
- if (0 !== strpos($namespace, $ns)) {
- continue;
- }
-
- foreach ($dirs as $dir) {
- $file = $dir.DIRECTORY_SEPARATOR.$normalizedClass;
- if (is_file($file)) {
- return $file;
- }
- }
- }
-
- foreach ($this->namespaceFallbacks as $dir) {
- $file = $dir.DIRECTORY_SEPARATOR.$normalizedClass;
- if (is_file($file)) {
- return $file;
- }
- }
-
- } else {
- // PEAR-like class name
- $normalizedClass = str_replace('_', DIRECTORY_SEPARATOR, $class).'.php';
- foreach ($this->prefixes as $prefix => $dirs) {
- if (0 !== strpos($class, $prefix)) {
- continue;
- }
-
- foreach ($dirs as $dir) {
- $file = $dir.DIRECTORY_SEPARATOR.$normalizedClass;
- if (is_file($file)) {
- return $file;
- }
- }
- }
-
- foreach ($this->prefixFallbacks as $dir) {
- $file = $dir.DIRECTORY_SEPARATOR.$normalizedClass;
- if (is_file($file)) {
- return $file;
- }
- }
- }
-
- if ($this->useIncludePath && $file = stream_resolve_include_path($normalizedClass)) {
- return $file;
- }
- }
-}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Base.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Base.php
deleted file mode 100644
index f80c9320e2a..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Base.php
+++ /dev/null
@@ -1,301 +0,0 @@
-<?php
-/**
- * @copyright 2012-2013 Rackspace Hosting, Inc.
- * See COPYING for licensing information
- * @package phpOpenCloud
- * @version 1.0
- * @author Glen Campbell <glen.campbell@rackspace.com>
- * @author Jamie Hannaford <jamie.hannaford@rackspace.com>
- */
-
-namespace OpenCloud\Common;
-
-use OpenCloud\Common\Lang;
-use OpenCloud\Common\Exceptions\AttributeError;
-use OpenCloud\Common\Exceptions\JsonError;
-use OpenCloud\Common\Exceptions\UrlError;
-
-/**
- * The root class for all other objects used or defined by this SDK.
- *
- * It contains common code for error handling as well as service functions that
- * are useful. Because it is an abstract class, it cannot be called directly,
- * and it has no publicly-visible properties.
- */
-abstract class Base
-{
-
- private $http_headers = array();
- private $_errors = array();
-
- /**
- * Debug status.
- *
- * @var LoggerInterface
- * @access private
- */
- private $logger;
-
- /**
- * Sets the Logger object.
- *
- * @param \OpenCloud\Common\Log\LoggerInterface $logger
- */
- public function setLogger(Log\LoggerInterface $logger)
- {
- $this->logger = $logger;
- }
-
- /**
- * Returns the Logger object.
- *
- * @return \OpenCloud\Common\Log\AbstractLogger
- */
- public function getLogger()
- {
- if (null === $this->logger) {
- $this->setLogger(new Log\Logger);
- }
- return $this->logger;
- }
-
- /**
- * Returns the URL of the service/object
- *
- * The assumption is that nearly all objects will have a URL; at this
- * base level, it simply throws an exception to enforce the idea that
- * subclasses need to define this method.
- *
- * @throws UrlError
- */
- public function url($subresource = '')
- {
- throw new UrlError(Lang::translate(
- 'URL method must be overridden in class definition'
- ));
- }
-
-/**
- * Populates the current object based on an unknown data type.
- *
- * @param array|object|string|integer $info
- * @throws Exceptions\InvalidArgumentError
- */
- public function populate($info, $setObjects = true)
- {
- if (is_string($info) || is_integer($info)) {
-
- // If the data type represents an ID, the primary key is set
- // and we retrieve the full resource from the API
- $this->{$this->primaryKeyField()} = (string) $info;
- $this->refresh($info);
-
- } elseif (is_object($info) || is_array($info)) {
-
- foreach($info as $key => $value) {
-
- if ($key == 'metadata' || $key == 'meta') {
-
- if (empty($this->metadata) || !$this->metadata instanceof Metadata) {
- $this->metadata = new Metadata;
- }
-
- // Metadata
- $this->$key->setArray($value);
-
- } elseif (!empty($this->associatedResources[$key]) && $setObjects === true) {
-
- // Associated resource
- try {
- $resource = $this->service()->resource($this->associatedResources[$key], $value);
- $resource->setParent($this);
- $this->$key = $resource;
- } catch (Exception\ServiceException $e) {}
-
- } elseif (!empty($this->associatedCollections[$key]) && $setObjects === true) {
-
- // Associated collection
- try {
- $this->$key = $this->service()->resourceList($this->associatedCollections[$key], null, $this);
- } catch (Exception\ServiceException $e) {}
-
- } else {
-
- // Normal key/value pair
- $this->$key = $value;
- }
- }
- } elseif (null !== $info) {
- throw new Exceptions\InvalidArgumentError(sprintf(
- Lang::translate('Argument for [%s] must be string or object'),
- get_class()
- ));
- }
- }
-
- /**
- * Sets extended attributes on an object and validates them
- *
- * This function is provided to ensure that attributes cannot
- * arbitrarily added to an object. If this function is called, it
- * means that the attribute is not defined on the object, and thus
- * an exception is thrown.
- *
- * @codeCoverageIgnore
- *
- * @param string $property the name of the attribute
- * @param mixed $value the value of the attribute
- * @return void
- */
- public function __set($property, $value)
- {
- $this->setProperty($property, $value);
- }
-
- /**
- * Sets an extended (unrecognized) property on the current object
- *
- * If RAXSDK_STRICT_PROPERTY_CHECKS is TRUE, then the prefix of the
- * property name must appear in the $prefixes array, or else an
- * exception is thrown.
- *
- * @param string $property the property name
- * @param mixed $value the value of the property
- * @param array $prefixes optional list of supported prefixes
- * @throws \OpenCloud\AttributeError if strict checks are on and
- * the property prefix is not in the list of prefixes.
- */
- public function setProperty($property, $value, array $prefixes = array())
- {
- // if strict checks are off, go ahead and set it
- if (!RAXSDK_STRICT_PROPERTY_CHECKS
- || $this->checkAttributePrefix($property, $prefixes)
- ) {
- $this->$property = $value;
- } else {
- // if that fails, then throw the exception
- throw new AttributeError(sprintf(
- Lang::translate('Unrecognized attribute [%s] for [%s]'),
- $property,
- get_class($this)
- ));
- }
- }
-
- /**
- * Converts an array of key/value pairs into a single query string
- *
- * For example, array('A'=>1,'B'=>2) would become 'A=1&B=2'.
- *
- * @param array $arr array of key/value pairs
- * @return string
- */
- public function makeQueryString($array)
- {
- $queryString = '';
-
- foreach($array as $key => $value) {
- if ($queryString) {
- $queryString .= '&';
- }
- $queryString .= urlencode($key) . '=' . urlencode($this->to_string($value));
- }
-
- return $queryString;
- }
-
- /**
- * Checks the most recent JSON operation for errors
- *
- * This function should be called after any `json_*()` function call.
- * This ensures that nasty JSON errors are detected and the proper
- * exception thrown.
- *
- * Example:
- * `$obj = json_decode($string);`
- * `if (check_json_error()) do something ...`
- *
- * @return boolean TRUE if an error occurred, FALSE if none
- * @throws JsonError
- *
- * @codeCoverageIgnore
- */
- public function checkJsonError()
- {
- switch (json_last_error()) {
- case JSON_ERROR_NONE:
- return;
- case JSON_ERROR_DEPTH:
- $jsonError = 'JSON error: The maximum stack depth has been exceeded';
- break;
- case JSON_ERROR_STATE_MISMATCH:
- $jsonError = 'JSON error: Invalid or malformed JSON';
- break;
- case JSON_ERROR_CTRL_CHAR:
- $jsonError = 'JSON error: Control character error, possibly incorrectly encoded';
- break;
- case JSON_ERROR_SYNTAX:
- $jsonError = 'JSON error: Syntax error';
- break;
- case JSON_ERROR_UTF8:
- $jsonError = 'JSON error: Malformed UTF-8 characters, possibly incorrectly encoded';
- break;
- default:
- $jsonError = 'Unexpected JSON error';
- break;
- }
-
- if (isset($jsonError)) {
- throw new JsonError(Lang::translate($jsonError));
- }
- }
-
- /**
- * Returns a class that implements the HttpRequest interface.
- *
- * This can be stubbed out for unit testing and avoid making live calls.
- */
- public function getHttpRequestObject($url, $method = 'GET', array $options = array())
- {
- return new Request\Curl($url, $method, $options);
- }
-
- /**
- * Checks the attribute $property and only permits it if the prefix is
- * in the specified $prefixes array
- *
- * This is to support extension namespaces in some services.
- *
- * @param string $property the name of the attribute
- * @param array $prefixes a list of prefixes
- * @return boolean TRUE if valid; FALSE if not
- */
- private function checkAttributePrefix($property, array $prefixes = array())
- {
- $prefix = strstr($property, ':', true);
-
- if (in_array($prefix, $prefixes)) {
- return true;
- } else {
- return false;
- }
- }
-
- /**
- * Converts a value to an HTTP-displayable string form
- *
- * @param mixed $x a value to convert
- * @return string
- */
- private function to_string($x)
- {
- if (is_bool($x) && $x) {
- return 'True';
- } elseif (is_bool($x)) {
- return 'False';
- } else {
- return (string) $x;
- }
- }
-
-}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Collection.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Collection.php
deleted file mode 100644
index e1bf80376e0..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Collection.php
+++ /dev/null
@@ -1,320 +0,0 @@
-<?php
-
-namespace OpenCloud\Common;
-
-/**
- * Provides an abstraction for working with ordered sets of objects
- *
- * Collection objects are used whenever there are multiples; for example,
- * multiple objects in a container, or multiple servers in a service.
- *
- * @since 1.0
- * @author Glen Campbell <glen.campbell@rackspace.com>
- * @author Jamie Hannaford <jamie.hannaford@rackspace.com>
- */
-class Collection extends Base
-{
-
- private $service;
- private $itemclass;
- private $itemlist = array();
- private $pointer = 0;
- private $sortkey;
- private $next_page_class;
- private $next_page_callback;
- private $next_page_url;
-
- /**
- * A Collection is an array of objects
- *
- * Some assumptions:
- * * The `Collection` class assumes that there exists on its service
- * a factory method with the same name of the class. For example, if
- * you create a Collection of class `Foobar`, it will attempt to call
- * the method `parent::Foobar()` to create instances of that class.
- * * It assumes that the factory method can take an array of values, and
- * it passes that to the method.
- *
- * @param Service $service - the service associated with the collection
- * @param string $itemclass - the Class of each item in the collection
- * (assumed to be the name of the factory method)
- * @param array $arr - the input array
- */
- public function __construct($service, $itemclass, $array)
- {
- $this->service = $service;
-
- $this->getLogger()->info(
- 'Collection:service={class}, class={itemClass}, array={array}',
- array(
- 'class' => get_class($service),
- 'itemClass' => $itemclass,
- 'array' => print_r($array, true)
- )
- );
-
- $this->next_page_class = $itemclass;
-
- if (false !== ($classNamePos = strrpos($itemclass, '\\'))) {
- $this->itemclass = substr($itemclass, $classNamePos + 1);
- } else {
- $this->itemclass = $itemclass;
- }
-
- if (!is_array($array)) {
- throw new Exceptions\CollectionError(
- Lang::translate('Cannot create a Collection without an array')
- );
- }
-
- // save the array of items
- $this->setItemList($array);
- }
-
- /**
- * Set the entire data array.
- *
- * @param array $array
- */
- public function setItemList(array $array)
- {
- $this->itemlist = $array;
- }
-
- /**
- * Retrieve the entire data array.
- *
- * @return array
- */
- public function getItemList()
- {
- return $this->itemlist;
- }
-
- /**
- * Returns the number of items in the collection
- *
- * For most services, this is the total number of items. If the Collection
- * is paginated, however, this only returns the count of items in the
- * current page of data.
- *
- * @return int
- */
- public function count()
- {
- return count($this->itemlist);
- }
-
- /**
- * Pseudonym for count()
- *
- * @codeCoverageIgnore
- */
- public function size()
- {
- return $this->count();
- }
-
- /**
- * Retrieves the service associated with the Collection
- *
- * @return Service
- */
- public function service()
- {
- return $this->service;
- }
-
- /**
- * Resets the pointer to the beginning, but does NOT return the first item
- *
- * @api
- * @return void
- */
- public function reset()
- {
- $this->pointer = 0;
- }
-
- /**
- * Resets the collection pointer back to the first item in the page
- * and returns it
- *
- * This is useful if you're only interested in the first item in the page.
- *
- * @api
- * @return Base the first item in the set
- */
- public function first()
- {
- $this->reset();
- return $this->next();
- }
-
- /**
- * Returns the next item in the page
- *
- * @api
- * @return Base the next item or FALSE if at the end of the page
- */
- public function next()
- {
- if ($this->pointer >= $this->count()) {
- return false;
- }
-
- $service = $this->service();
-
- if (method_exists($service, $this->itemclass)) {
- return $service->{$this->itemclass}($this->itemlist[$this->pointer++]);
- } elseif (method_exists($service, 'resource')) {
- return $service->resource($this->itemclass, $this->itemlist[$this->pointer++]);
- }
- // @codeCoverageIgnoreStart
- return false;
- // @codeCoverageIgnoreEnd
- }
-
- /**
- * sorts the collection on a specified key
- *
- * Note: only top-level keys can be used as the sort key. Note that this
- * only sorts the data in the current page of the Collection (for
- * multi-page data).
- *
- * @api
- * @param string $keyname the name of the field to use as the sort key
- * @return void
- */
- public function sort($keyname = 'id')
- {
- $this->sortkey = $keyname;
- usort($this->itemlist, array($this, 'sortCompare'));
- }
-
- /**
- * selects only specified items from the Collection
- *
- * This provides a simple form of filtering on Collections. For each item
- * in the collection, it calls the callback function, passing it the item.
- * If the callback returns `TRUE`, then the item is retained; if it returns
- * `FALSE`, then the item is deleted from the collection.
- *
- * Note that this should not supersede server-side filtering; the
- * `Collection::Select()` method requires that *all* of the data for the
- * Collection be retrieved from the server before the filtering is
- * performed; this can be very inefficient, especially for large data
- * sets. This method is mostly useful on smaller-sized sets.
- *
- * Example:
- * <code>
- * $services = $connection->ServiceList();
- * $services->Select(function($item){ return $item->region=='ORD';});
- * // now the $services Collection only has items from the ORD region
- * </code>
- *
- * `Select()` is *destructive*; that is, it actually removes entries from
- * the collection. For example, if you use `Select()` to find items with
- * the ID > 10, then use it again to find items that are <= 10, it will
- * return an empty list.
- *
- * @api
- * @param callable $testfunc a callback function that is passed each item
- * in turn. Note that `Select()` performs an explicit test for
- * `FALSE`, so functions like `strpos()` need to be cast into a
- * boolean value (and not just return the integer).
- * @returns void
- * @throws DomainError if callback doesn't return a boolean value
- */
- public function select($testfunc)
- {
- foreach ($this->getItemList() as $index => $item) {
- $test = call_user_func($testfunc, $item);
- if (!is_bool($test)) {
- throw new Exceptions\DomainError(
- Lang::translate('Callback function for Collection::Select() did not return boolean')
- );
- }
- if ($test === false) {
- unset($this->itemlist[$index]);
- }
- }
- }
-
- /**
- * returns the Collection object for the next page of results, or
- * FALSE if there are no more pages
- *
- * Generally, the structure for a multi-page collection will look like
- * this:
- *
- * $coll = $obj->Collection();
- * do {
- * while($item = $coll->Next()) {
- * // do something with the item
- * }
- * } while ($coll = $coll->NextPage());
- *
- * @api
- * @return Collection if there are more pages of results, otherwise FALSE
- */
- public function nextPage()
- {
- if (isset($this->next_page_url)) {
- return call_user_func(
- $this->next_page_callback,
- $this->next_page_class,
- $this->next_page_url
- );
- }
- // @codeCoverageIgnoreStart
- return false;
- // @codeCoverageIgnoreEnd
- }
-
- /**
- * for paginated collection, sets the callback function and URL for
- * the next page
- *
- * The callback function should have the signature:
- *
- * function Whatever($class, $url, $parent)
- *
- * and the `$url` should be the URL of the next page of results
- *
- * @param callable $callback the name of the function (or array of
- * object, function name)
- * @param string $url the URL of the next page of results
- * @return void
- */
- public function setNextPageCallback($callback, $url)
- {
- $this->next_page_callback = $callback;
- $this->next_page_url = $url;
- }
-
- /**
- * Compares two values of sort keys
- */
- private function sortCompare($a, $b)
- {
- $key = $this->sortkey;
-
- // handle strings with strcmp()
- if (is_string($a->$key)) {
- return strcmp($a->$key, $b->$key);
- }
-
- // handle others with logical comparisons
- if ($a->$key == $b->$key) {
- return 0;
- }
-
- if ($a->$key < $b->$key) {
- return -1;
- } else {
- return 1;
- }
- }
-
-}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/AsyncError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/AsyncError.php
deleted file mode 100644
index cbbacff38bd..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/AsyncError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class AsyncError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/AsyncHttpError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/AsyncHttpError.php
deleted file mode 100644
index dc7b2d7e3a7..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/AsyncHttpError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class AsyncHttpError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/AsyncTimeoutError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/AsyncTimeoutError.php
deleted file mode 100644
index bba5f09f64f..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/AsyncTimeoutError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class AsyncTimeoutError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/AttributeError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/AttributeError.php
deleted file mode 100644
index 7d09ceb0147..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/AttributeError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class AttributeError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/AuthenticationError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/AuthenticationError.php
deleted file mode 100644
index 091e4602ec0..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/AuthenticationError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class AuthenticationError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/BaseException.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/BaseException.php
deleted file mode 100644
index 0bc967adf67..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/BaseException.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class BaseException extends \Exception
-{
-} \ No newline at end of file
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CdnError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CdnError.php
deleted file mode 100644
index 0f972e9c5c7..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CdnError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class CdnError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CdnHttpError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CdnHttpError.php
deleted file mode 100644
index f1e2722f158..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CdnHttpError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class CdnHttpError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CdnNotAvailableError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CdnNotAvailableError.php
deleted file mode 100644
index 853b17c7127..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CdnNotAvailableError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class CdnNotAvailableError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CdnTtlError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CdnTtlError.php
deleted file mode 100644
index b4364f93467..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CdnTtlError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class CdnTtlError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CollectionError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CollectionError.php
deleted file mode 100644
index 9d5030403f6..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CollectionError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class CollectionError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerCreateError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerCreateError.php
deleted file mode 100644
index afc8119bd5a..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerCreateError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class ContainerCreateError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerDeleteError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerDeleteError.php
deleted file mode 100644
index c212bfbaffd..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerDeleteError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class ContainerDeleteError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerError.php
deleted file mode 100644
index c9716fef075..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class ContainerError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerNameError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerNameError.php
deleted file mode 100644
index e0b9592835e..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerNameError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class ContainerNameError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerNotEmptyError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerNotEmptyError.php
deleted file mode 100644
index e987449d444..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerNotEmptyError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class ContainerNotEmptyError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerNotFoundError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerNotFoundError.php
deleted file mode 100644
index 2e700dbe039..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ContainerNotFoundError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class ContainerNotFoundError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CreateError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CreateError.php
deleted file mode 100644
index bb2030373fb..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CreateError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class CreateError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CreateUpdateError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CreateUpdateError.php
deleted file mode 100644
index 8aa651a76d9..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CreateUpdateError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class CreateUpdateError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CredentialError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CredentialError.php
deleted file mode 100644
index 2769edaf378..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/CredentialError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class CredentialError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DatabaseCreateError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DatabaseCreateError.php
deleted file mode 100644
index eb19198c2fe..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DatabaseCreateError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class DatabaseCreateError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DatabaseDeleteError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DatabaseDeleteError.php
deleted file mode 100644
index 41f397529fe..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DatabaseDeleteError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class DatabaseDeleteError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DatabaseListError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DatabaseListError.php
deleted file mode 100644
index 04a7fb9e835..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DatabaseListError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class DatabaseListError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DatabaseNameError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DatabaseNameError.php
deleted file mode 100644
index 17a987a03b0..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DatabaseNameError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class DatabaseNameError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DatabaseUpdateError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DatabaseUpdateError.php
deleted file mode 100644
index c891c173787..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DatabaseUpdateError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class DatabaseUpdateError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DeleteError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DeleteError.php
deleted file mode 100644
index 27c4b2a4894..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DeleteError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class DeleteError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DocumentError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DocumentError.php
deleted file mode 100644
index d501e3594b6..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DocumentError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class DocumentError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DomainError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DomainError.php
deleted file mode 100644
index b4eac2ae1d3..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/DomainError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class DomainError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/EmptyResponseError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/EmptyResponseError.php
deleted file mode 100644
index c7863c09b01..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/EmptyResponseError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class EmptyResponseError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/EndpointError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/EndpointError.php
deleted file mode 100644
index a686a6456e9..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/EndpointError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class EndpointError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/FlavorError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/FlavorError.php
deleted file mode 100644
index 469dc27e76c..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/FlavorError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class FlavorError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpError.php
deleted file mode 100644
index 1b54b8a8253..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class HttpError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpForbiddenError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpForbiddenError.php
deleted file mode 100644
index a5c64780516..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpForbiddenError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class HttpForbiddenError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpOverLimitError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpOverLimitError.php
deleted file mode 100644
index 243e8df64fd..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpOverLimitError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class HttpOverLimitError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpRetryError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpRetryError.php
deleted file mode 100644
index 78345840bba..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpRetryError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class HttpRetryError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpTimeoutError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpTimeoutError.php
deleted file mode 100644
index 81bc9dda608..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpTimeoutError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class HttpTimeoutError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpUnauthorizedError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpUnauthorizedError.php
deleted file mode 100644
index 9b1edb20333..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpUnauthorizedError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class HttpUnauthorizedError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpUrlError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpUrlError.php
deleted file mode 100644
index fa2af82c564..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/HttpUrlError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class HttpUrlError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/IOError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/IOError.php
deleted file mode 100644
index df816336c6c..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/IOError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class IOError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/IdRequiredError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/IdRequiredError.php
deleted file mode 100644
index 398b9f3fd85..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/IdRequiredError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class IdRequiredError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ImageError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ImageError.php
deleted file mode 100644
index 3b846a7551f..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ImageError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class ImageError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceCreateError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceCreateError.php
deleted file mode 100644
index 65caa154497..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceCreateError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class InstanceCreateError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceDeleteError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceDeleteError.php
deleted file mode 100644
index e4c6fdb7f57..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceDeleteError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class InstanceDeleteError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceError.php
deleted file mode 100644
index 48152824862..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class InstanceError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceFlavorError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceFlavorError.php
deleted file mode 100644
index e8a074eb9bf..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceFlavorError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class InstanceFlavorError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceNotFound.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceNotFound.php
deleted file mode 100644
index 4bc94797b3f..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceNotFound.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class InstanceNotFound extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceUpdateError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceUpdateError.php
deleted file mode 100644
index b15f3426013..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InstanceUpdateError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class InstanceUpdateError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InvalidArgumentError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InvalidArgumentError.php
deleted file mode 100644
index a655f11a731..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InvalidArgumentError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class InvalidArgumentError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InvalidIdTypeError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InvalidIdTypeError.php
deleted file mode 100644
index f329c748957..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InvalidIdTypeError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class InvalidIdTypeError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InvalidIpTypeError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InvalidIpTypeError.php
deleted file mode 100644
index 370d8f650de..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InvalidIpTypeError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class InvalidIpTypeError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InvalidParameterError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InvalidParameterError.php
deleted file mode 100644
index f13986ffc94..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InvalidParameterError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class InvalidParameterError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InvalidRequestError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InvalidRequestError.php
deleted file mode 100644
index 0266d8f22bd..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/InvalidRequestError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class InvalidRequestError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/JsonError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/JsonError.php
deleted file mode 100644
index 96f9102ed37..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/JsonError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class JsonError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/LoggingException.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/LoggingException.php
deleted file mode 100644
index a5bdad705f4..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/LoggingException.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-/**
- * @copyright Copyright 2012-2013 Rackspace US, Inc.
- See COPYING for licensing information.
- * @license https://www.apache.org/licenses/LICENSE-2.0 Apache 2.0
- * @version 1.5.9
- * @author Jamie Hannaford <jamie.hannaford@rackspace.com>
- */
-
-namespace OpenCloud\Common\Exceptions;
-
-use Exception;
-
-class LoggingException extends Exception
-{
-} \ No newline at end of file
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataCreateError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataCreateError.php
deleted file mode 100644
index a119397392f..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataCreateError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class MetadataCreateError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataDeleteError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataDeleteError.php
deleted file mode 100644
index 4acd879afe9..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataDeleteError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class MetadataDeleteError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataError.php
deleted file mode 100644
index 65f94975a44..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class MetadataError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataJsonError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataJsonError.php
deleted file mode 100644
index a7a74ca9e13..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataJsonError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class MetadataJsonError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataKeyError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataKeyError.php
deleted file mode 100644
index 606f6d95874..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataKeyError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class MetadataKeyError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataPrefixError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataPrefixError.php
deleted file mode 100644
index 271e69010a7..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataPrefixError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class MetadataPrefixError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataUpdateError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataUpdateError.php
deleted file mode 100644
index 49db43d6f70..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MetadataUpdateError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class MetadataUpdateError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MisMatchedChecksumError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MisMatchedChecksumError.php
deleted file mode 100644
index 75b4f926995..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MisMatchedChecksumError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class MisMatchedChecksumError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MissingValueError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MissingValueError.php
deleted file mode 100644
index 0dd5b8ee737..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/MissingValueError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class MissingValueError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NameError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NameError.php
deleted file mode 100644
index 6918120a56c..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NameError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class NameError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NetworkCreateError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NetworkCreateError.php
deleted file mode 100644
index a0c7640ffe8..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NetworkCreateError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class NetworkCreateError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NetworkDeleteError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NetworkDeleteError.php
deleted file mode 100644
index 0e2922babe2..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NetworkDeleteError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class NetworkDeleteError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NetworkError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NetworkError.php
deleted file mode 100644
index 4b30806c1bc..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NetworkError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class NetworkError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NetworkUpdateError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NetworkUpdateError.php
deleted file mode 100644
index f55f09d8ec2..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NetworkUpdateError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class NetworkUpdateError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NetworkUrlError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NetworkUrlError.php
deleted file mode 100644
index 666ec50482b..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NetworkUrlError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class NetworkUrlError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NoContentTypeError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NoContentTypeError.php
deleted file mode 100644
index 59a33088163..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NoContentTypeError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class NoContentTypeError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NoNameError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NoNameError.php
deleted file mode 100644
index 2d56f5fcd0d..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/NoNameError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class NoNameError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ObjFetchError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ObjFetchError.php
deleted file mode 100644
index 9d7391823e8..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ObjFetchError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class ObjFetchError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ObjectCopyError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ObjectCopyError.php
deleted file mode 100644
index ef7b3b39220..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ObjectCopyError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class ObjectCopyError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ObjectError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ObjectError.php
deleted file mode 100644
index ea667ad25f6..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ObjectError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class ObjectError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/RebuildError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/RebuildError.php
deleted file mode 100644
index 9ee6ab37fd9..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/RebuildError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class RebuildError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/RecordTypeError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/RecordTypeError.php
deleted file mode 100644
index 718ce98574c..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/RecordTypeError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class RecordTypeError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerActionError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerActionError.php
deleted file mode 100644
index d4ad6453281..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerActionError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class ServerActionError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerCreateError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerCreateError.php
deleted file mode 100644
index 69904111c61..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerCreateError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class ServerCreateError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerDeleteError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerDeleteError.php
deleted file mode 100644
index 94a1adc4f0b..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerDeleteError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class ServerDeleteError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerImageScheduleError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerImageScheduleError.php
deleted file mode 100644
index 19fbcbd279c..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerImageScheduleError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class ServerImageScheduleError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerIpsError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerIpsError.php
deleted file mode 100644
index 3e737c28614..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerIpsError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class ServerIpsError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerJsonError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerJsonError.php
deleted file mode 100644
index c10e67d645d..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerJsonError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class ServerJsonError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerUpdateError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerUpdateError.php
deleted file mode 100644
index d9d7b370808..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerUpdateError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class ServerUpdateError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerUrlError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerUrlError.php
deleted file mode 100644
index ba0308d04e7..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServerUrlError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class ServerUrlError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServiceValueError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServiceValueError.php
deleted file mode 100644
index 7ce52c846a4..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/ServiceValueError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class ServiceValueError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/SnapshotError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/SnapshotError.php
deleted file mode 100644
index 14d7614a9ee..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/SnapshotError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class SnapshotError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/TempUrlMethodError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/TempUrlMethodError.php
deleted file mode 100644
index 61f4647d1b3..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/TempUrlMethodError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class TempUrlMethodError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnknownError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnknownError.php
deleted file mode 100644
index 2b0772530fc..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnknownError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class UnknownError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnknownParameterError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnknownParameterError.php
deleted file mode 100644
index 704ee28c052..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnknownParameterError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class UnknownParameterError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnrecognizedServiceError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnrecognizedServiceError.php
deleted file mode 100644
index 396d451e131..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnrecognizedServiceError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class UnrecognizedServiceError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnsupportedExtensionError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnsupportedExtensionError.php
deleted file mode 100644
index 5ff5ae89c73..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnsupportedExtensionError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class UnsupportedExtensionError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnsupportedFeatureExtension.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnsupportedFeatureExtension.php
deleted file mode 100644
index 6d9143a1d91..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnsupportedFeatureExtension.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class UnsupportedFeatureExtension extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnsupportedVersionError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnsupportedVersionError.php
deleted file mode 100644
index 060733ad5b5..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UnsupportedVersionError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class UnsupportedVersionError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UpdateError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UpdateError.php
deleted file mode 100644
index 23f0dbb6aa7..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UpdateError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class UpdateError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UrlError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UrlError.php
deleted file mode 100644
index 6c4d9ab69aa..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UrlError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class UrlError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UserCreateError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UserCreateError.php
deleted file mode 100644
index f87ee0d2fc9..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UserCreateError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class UserCreateError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UserDeleteError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UserDeleteError.php
deleted file mode 100644
index 3196289aafc..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UserDeleteError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class UserDeleteError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UserListError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UserListError.php
deleted file mode 100644
index 7d287ae0ecf..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UserListError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class UserListError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UserNameError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UserNameError.php
deleted file mode 100644
index 51902f8e93c..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UserNameError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class UserNameError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UserUpdateError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UserUpdateError.php
deleted file mode 100644
index 403b53420d0..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/UserUpdateError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class UserUpdateError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/VolumeError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/VolumeError.php
deleted file mode 100644
index c19c4c2009d..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/VolumeError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class VolumeError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/VolumeTypeError.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/VolumeTypeError.php
deleted file mode 100644
index a9cc1e3f64b..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Exceptions/VolumeTypeError.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Exceptions;
-
-class VolumeTypeError extends \Exception {}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Identity/Role.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Identity/Role.php
deleted file mode 100644
index b2c480d71b5..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Identity/Role.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-/**
- * PHP OpenCloud library.
- *
- * @author Jamie Hannaford <jamie@limetree.org>
- * @version 2.0.0
- * @copyright Copyright 2012-2013 Rackspace US, Inc.
- * @license https://www.apache.org/licenses/LICENSE-2.0 Apache 2.0
- */
-
-/**
- * Description of Role
- *
- * @link
- *
- * @codeCoverageIgnore
- */
-class Role
-{
-} \ No newline at end of file
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Identity/Tenant.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Identity/Tenant.php
deleted file mode 100644
index 62783613c2f..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Identity/Tenant.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-/**
- * PHP OpenCloud library.
- *
- * @author Jamie Hannaford <jamie@limetree.org>
- * @version 2.0.0
- * @copyright Copyright 2012-2013 Rackspace US, Inc.
- * @license https://www.apache.org/licenses/LICENSE-2.0 Apache 2.0
- */
-
-/**
- * Description of Tenant
- *
- * @link
- *
- * @codeCoverageIgnore
- */
-class Tenant
-{
-
-} \ No newline at end of file
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Identity/User.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Identity/User.php
deleted file mode 100644
index 9e3862d1750..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Identity/User.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-/**
- * @copyright 2012-2013 Rackspace Hosting, Inc.
- * See COPYING for licensing information
- * @package phpOpenCloud
- * @version 1.5.9
- * @author Glen Campbell <glen.campbell@rackspace.com>
- * @author Jamie Hannaford <jamie.hannaford@rackspace.co.uk>
- */
-
-/**
- * Represents a sub-user in Keystone.
- *
- * @link http://docs.rackspace.com/auth/api/v2.0/auth-client-devguide/content/User_Calls.html
- *
- * @codeCoverageIgnore
- */
-class User extends PersistentObject
-{
-
- public static function factory($info)
- {
- $user = new self;
- }
-
- /**
- * Return detailed information about a specific user, by either user name or user ID.
- * @param int|string $info
- */
- public function get($info)
- {
- if (is_integer($info)) {
-
- } elseif (is_string($info)) {
-
- } else {
- throw new Exception\IdentityException(sprintf(
- 'A string-based username or an integer-based user ID is valid'
- ));
- }
- }
-
- public function create()
- {
-
- }
-
- public function update()
- {
-
- }
-
- public function delete()
- {
-
- }
-
- public function listAllCredentials()
- {
-
- }
-
- public function getCredentials()
- {
-
- }
-
- public function resetApiKey()
- {
-
- }
-
-} \ No newline at end of file
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Lang.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Lang.php
deleted file mode 100644
index 7bb12859734..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Lang.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-namespace OpenCloud\Common;
-
-class Lang
-{
-
- public static function translate($word = null)
- {
- return $word;
- }
-
- public static function noslash($str)
- {
- while ($str && (substr($str, -1) == '/')) {
- $str = substr($str, 0, strlen($str) - 1);
- }
- return $str;
- }
-
-}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Log/AbstractLogger.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Log/AbstractLogger.php
deleted file mode 100644
index c7aea7f8767..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Log/AbstractLogger.php
+++ /dev/null
@@ -1,140 +0,0 @@
-<?php
-
-// Copyright (c) 2012 PHP Framework Interoperability Group
-//
-// 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.
-
-namespace OpenCloud\Common\Log;
-
-/**
- * This is a simple Logger implementation that other Loggers can inherit from.
- *
- * It simply delegates all log-level-specific methods to the `log` method to
- * reduce boilerplate code that a simple Logger that does the same thing with
- * messages regardless of the error level has to implement.
- */
-abstract class AbstractLogger implements LoggerInterface
-{
- /**
- * System is unusable.
- *
- * @param string $message
- * @param array $context
- * @return null
- */
- public function emergency($message, array $context = array())
- {
- $this->log(LogLevel::EMERGENCY, $message, $context);
- }
-
- /**
- * Action must be taken immediately.
- *
- * Example: Entire website down, database unavailable, etc. This should
- * trigger the SMS alerts and wake you up.
- *
- * @param string $message
- * @param array $context
- * @return null
- */
- public function alert($message, array $context = array())
- {
- $this->log(LogLevel::ALERT, $message, $context);
- }
-
- /**
- * Critical conditions.
- *
- * Example: Application component unavailable, unexpected exception.
- *
- * @param string $message
- * @param array $context
- * @return null
- */
- public function critical($message, array $context = array())
- {
- $this->log(LogLevel::CRITICAL, $message, $context);
- }
-
- /**
- * Runtime errors that do not require immediate action but should typically
- * be logged and monitored.
- *
- * @param string $message
- * @param array $context
- * @return null
- */
- public function error($message, array $context = array())
- {
- $this->log(LogLevel::ERROR, $message, $context);
- }
-
- /**
- * Exceptional occurrences that are not errors.
- *
- * Example: Use of deprecated APIs, poor use of an API, undesirable things
- * that are not necessarily wrong.
- *
- * @param string $message
- * @param array $context
- * @return null
- */
- public function warning($message, array $context = array())
- {
- $this->log(LogLevel::WARNING, $message, $context);
- }
-
- /**
- * Normal but significant events.
- *
- * @param string $message
- * @param array $context
- * @return null
- */
- public function notice($message, array $context = array())
- {
- $this->log(LogLevel::NOTICE, $message, $context);
- }
-
- /**
- * Interesting events.
- *
- * Example: User logs in, SQL logs.
- *
- * @param string $message
- * @param array $context
- * @return null
- */
- public function info($message, array $context = array())
- {
- $this->log(LogLevel::INFO, $message, $context);
- }
-
- /**
- * Detailed debug information.
- *
- * @param string $message
- * @param array $context
- * @return null
- */
- public function debug($message, array $context = array())
- {
- $this->log(LogLevel::DEBUG, $message, $context);
- }
-} \ No newline at end of file
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Log/LogLevel.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Log/LogLevel.php
deleted file mode 100644
index 64b0169b507..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Log/LogLevel.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-
-// Copyright (c) 2012 PHP Framework Interoperability Group
-//
-// 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.
-
-namespace OpenCloud\Common\Log;
-
-/**
- * Describes log levels
- */
-class LogLevel
-{
- const EMERGENCY = 'emergency';
- const ALERT = 'alert';
- const CRITICAL = 'critical';
- const ERROR = 'error';
- const WARNING = 'warning';
- const NOTICE = 'notice';
- const INFO = 'info';
- const DEBUG = 'debug';
-} \ No newline at end of file
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Log/Logger.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Log/Logger.php
deleted file mode 100644
index e11d3fbb7ca..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Log/Logger.php
+++ /dev/null
@@ -1,220 +0,0 @@
-<?php
-/**
- * @copyright Copyright 2012-2013 Rackspace US, Inc.
- See COPYING for licensing information.
- * @license https://www.apache.org/licenses/LICENSE-2.0 Apache 2.0
- * @version 1.5.9
- * @author Jamie Hannaford <jamie.hannaford@rackspace.com>
- */
-
-namespace OpenCloud\Common\Log;
-
-use OpenCloud\Common\Exceptions\LoggingException;
-
-/**
- * Basic logger for OpenCloud which extends FIG's PSR-3 standard logger.
- *
- * @link https://github.com/php-fig/log
- */
-class Logger extends AbstractLogger
-{
- /**
- * Is this debug class enabled or not?
- *
- * @var bool
- */
- private $enabled = false;
-
- /**
- * These are the levels which will always be outputted - regardless of
- * user-imposed settings.
- *
- * @var array
- */
- private $urgentLevels = array(
- LogLevel::EMERGENCY,
- LogLevel::ALERT,
- LogLevel::CRITICAL
- );
-
- /**
- * Logging options.
- *
- * @var array
- */
- private $options = array(
- 'outputToFile' => false,
- 'logFile' => null,
- 'dateFormat' => 'd/m/y H:I',
- 'delimeter' => ' - '
- );
-
- /**
- * Determines whether a log level needs to be outputted.
- *
- * @param string $logLevel
- * @return bool
- */
- private function outputIsUrgent($logLevel)
- {
- return in_array($logLevel, $this->urgentLevels);
- }
-
- /**
- * Interpolates context values into the message placeholders.
- *
- * @param string $message
- * @param array $context
- * @return type
- */
- private function interpolate($message, array $context = array())
- {
- // build a replacement array with braces around the context keys
- $replace = array();
- foreach ($context as $key => $val) {
- $replace['{' . $key . '}'] = $val;
- }
-
- // interpolate replacement values into the message and return
- return strtr($message, $replace);
- }
-
- /**
- * Enable or disable the debug class.
- *
- * @param bool $enabled
- * @return self
- */
- public function setEnabled($enabled)
- {
- $this->enabled = $enabled;
- return $this;
- }
-
- /**
- * Is the debug class enabled?
- *
- * @return bool
- */
- public function getEnabled()
- {
- return $this->enabled;
- }
-
- /**
- * Set an array of options.
- *
- * @param array $options
- */
- public function setOptions(array $options = array())
- {
- foreach ($options as $key => $value) {
- $this->setOption($key, $value);
- }
- }
-
- /**
- * Get all options.
- *
- * @return array
- */
- public function getOptions()
- {
- return $this->options;
- }
-
- /**
- * Set an individual option.
- *
- * @param string $key
- * @param string $value
- */
- public function setOption($key, $value)
- {
- if ($this->optionExists($key)) {
- $this->options[$key] = $value;
- }
- }
-
- /**
- * Get an individual option.
- *
- * @param string $key
- * @return string|null
- */
- public function getOption($key)
- {
- if ($this->optionExists($key)) {
- return $this->options[$key];
- }
- }
-
- /**
- * Check whether an individual option exists.
- *
- * @param string $key
- * @return bool
- */
- private function optionExists($key)
- {
- return array_key_exists($key, $this->getOptions());
- }
-
- /**
- * Outputs a log message if necessary.
- *
- * @param string $logLevel
- * @param string $message
- * @param string $context
- */
- public function log($level, $message, array $context = array())
- {
- if ($this->outputIsUrgent($level)
- || $this->getEnabled() === true
- || RAXSDK_DEBUG === true
- ) {
- $this->dispatch($message, $context);
- }
- }
-
- /**
- * Used to format the line outputted in the log file.
- *
- * @param string $string
- * @return string
- */
- private function formatFileLine($string)
- {
- $format = $this->getOption('dateFormat') . $this->getOption('delimeter');
- return date($format) . $string;
- }
-
- /**
- * Dispatch a log output message.
- *
- * @param string $message
- * @param array $context
- * @throws LoggingException
- */
- private function dispatch($message, $context)
- {
- $output = $this->interpolate($message, $context) . PHP_EOL;
-
- if ($this->getOption('outputToFile') === true) {
- $file = $this->getOption('logFile');
-
- if (!is_writable($file)) {
- throw new LoggingException(
- 'The log file either does not exist or is not writeable'
- );
- }
-
- // Output to file
- file_put_contents($file, $this->formatFileLine($output));
- } else {
-
- echo $output;
- }
- }
-
-} \ No newline at end of file
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Log/LoggerInterface.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Log/LoggerInterface.php
deleted file mode 100644
index daef1b04dad..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Log/LoggerInterface.php
+++ /dev/null
@@ -1,134 +0,0 @@
-<?php
-
-// Copyright (c) 2012 PHP Framework Interoperability Group
-//
-// 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.
-
-namespace OpenCloud\Common\Log;
-
-/**
- * Describes a logger instance
- *
- * The message MUST be a string or object implementing __toString().
- *
- * The message MAY contain placeholders in the form: {foo} where foo
- * will be replaced by the context data in key "foo".
- *
- * The context array can contain arbitrary data, the only assumption that
- * can be made by implementors is that if an Exception instance is given
- * to produce a stack trace, it MUST be in a key named "exception".
- *
- * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
- * for the full interface specification.
- */
-interface LoggerInterface
-{
- /**
- * System is unusable.
- *
- * @param string $message
- * @param array $context
- * @return null
- */
- public function emergency($message, array $context = array());
-
- /**
- * Action must be taken immediately.
- *
- * Example: Entire website down, database unavailable, etc. This should
- * trigger the SMS alerts and wake you up.
- *
- * @param string $message
- * @param array $context
- * @return null
- */
- public function alert($message, array $context = array());
-
- /**
- * Critical conditions.
- *
- * Example: Application component unavailable, unexpected exception.
- *
- * @param string $message
- * @param array $context
- * @return null
- */
- public function critical($message, array $context = array());
-
- /**
- * Runtime errors that do not require immediate action but should typically
- * be logged and monitored.
- *
- * @param string $message
- * @param array $context
- * @return null
- */
- public function error($message, array $context = array());
-
- /**
- * Exceptional occurrences that are not errors.
- *
- * Example: Use of deprecated APIs, poor use of an API, undesirable things
- * that are not necessarily wrong.
- *
- * @param string $message
- * @param array $context
- * @return null
- */
- public function warning($message, array $context = array());
-
- /**
- * Normal but significant events.
- *
- * @param string $message
- * @param array $context
- * @return null
- */
- public function notice($message, array $context = array());
-
- /**
- * Interesting events.
- *
- * Example: User logs in, SQL logs.
- *
- * @param string $message
- * @param array $context
- * @return null
- */
- public function info($message, array $context = array());
-
- /**
- * Detailed debug information.
- *
- * @param string $message
- * @param array $context
- * @return null
- */
- public function debug($message, array $context = array());
-
- /**
- * Logs with an arbitrary level.
- *
- * @param mixed $level
- * @param string $message
- * @param array $context
- * @return null
- */
- public function log($level, $message, array $context = array());
-} \ No newline at end of file
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Metadata.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Metadata.php
deleted file mode 100644
index be6903e897e..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Metadata.php
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-/**
- * A metadata object, used by other components in Compute and Object Storage
- *
- * @copyright 2012-2013 Rackspace Hosting, Inc.
- * See COPYING for licensing information
- *
- * @package phpOpenCloud
- * @version 1.0
- * @author Glen Campbell <glen.campbell@rackspace.com>
- */
-
-namespace OpenCloud\Common;
-
-/**
- * The Metadata class represents either Server or Image metadata
- *
- * @api
- * @author Glen Campbell <glen.campbell@rackspace.com>
- */
-class Metadata extends Base
-{
-
- // array holding the names of keys that were set
- private $_keylist = array();
-
- /**
- * This setter overrides the base one, since the metadata key can be
- * anything
- *
- * @param string $key
- * @param string $value
- * @return void
- */
- public function __set($key, $value)
- {
- // set the value and track the keys
- if (!in_array($key, $this->_keylist)) {
- $this->_keylist[] = $key;
- }
-
- $this->$key = $value;
- }
-
- /**
- * Returns the list of keys defined
- *
- * @return array
- */
- public function Keylist()
- {
- return $this->_keylist;
- }
-
- /**
- * Sets metadata values from an array, with optional prefix
- *
- * If $prefix is provided, then only array keys that match the prefix
- * are set as metadata values, and $prefix is stripped from the key name.
- *
- * @param array $values an array of key/value pairs to set
- * @param string $prefix if provided, a prefix that is used to identify
- * metadata values. For example, you can set values from headers
- * for a Container by using $prefix='X-Container-Meta-'.
- * @return void
- */
- public function setArray($values, $prefix = null)
- {
- if (empty($values)) {
- return false;
- }
-
- foreach ($values as $key => $value) {
- if ($prefix) {
- if (strpos($key, $prefix) === 0) {
- $name = substr($key, strlen($prefix));
- $this->getLogger()->info(
- Lang::translate('Setting [{name}] to [{value}]'),
- array(
- 'name' => $name,
- 'value' => $value
- )
- );
- $this->$name = $value;
- }
- } else {
- $this->$key = $value;
- }
- }
- }
-
-}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Nova.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Nova.php
deleted file mode 100644
index fe4dcccc73f..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Nova.php
+++ /dev/null
@@ -1,140 +0,0 @@
-<?php
-
-/**
- * An abstract class that defines shared components for products that use
- * OpenStack Nova
- *
- * @copyright 2012-2013 Rackspace Hosting, Inc.
- * See COPYING for licensing information
- *
- * @package phpOpenCloud
- * @version 1.0
- * @author Glen Campbell <glen.campbell@rackspace.com>
- */
-
-namespace OpenCloud\Common;
-
-use OpenCloud\OpenStack;
-use OpenCloud\Common\Lang;
-use OpenCloud\Compute\Flavor;
-
-/**
- * Nova is an abstraction layer for the OpenStack compute service.
- *
- * Nova is used as a basis for several products, including Compute services
- * as well as Rackspace's Cloud Databases. This class is, in essence, a vehicle
- * for sharing common code between those other classes.
- */
-abstract class Nova extends Service
-{
-
- private $_url;
-
- /**
- * Called when creating a new Compute service object
- *
- * _NOTE_ that the order of parameters for this is *different* from the
- * parent Service class. This is because the earlier parameters are the
- * ones that most typically change, whereas the later ones are not
- * modified as often.
- *
- * @param \OpenCloud\Identity $conn - a connection object
- * @param string $serviceRegion - identifies the region of this Compute
- * service
- * @param string $urltype - identifies the URL type ("publicURL",
- * "privateURL")
- * @param string $serviceName - identifies the name of the service in the
- * catalog
- */
- public function __construct(
- OpenStack $conn,
- $serviceType,
- $serviceName,
- $serviceRegion,
- $urltype
- ) {
- parent::__construct(
- $conn,
- $serviceType,
- $serviceName,
- $serviceRegion,
- $urltype
- );
-
- $this->_url = Lang::noslash(parent::Url());
-
- $this->getLogger()->info(Lang::translate('Initializing Nova...'));
- }
-
- /**
- * Returns a flavor from the service
- *
- * This is a factory method and should generally be called instead of
- * creating a Flavor object directly.
- *
- * @api
- * @param string $id - if supplied, the Flavor identified by this is
- * retrieved
- * @return Compute\Flavor object
- */
- public function Flavor($id = null)
- {
- return new Flavor($this, $id);
- }
-
- /**
- * Returns a list of Flavor objects
- *
- * This is a factory method and should generally be called instead of
- * creating a FlavorList object directly.
- *
- * @api
- * @param boolean $details - if TRUE (the default), returns full details.
- * Set to FALSE to retrieve minimal details and possibly improve
- * performance.
- * @param array $filter - optional key/value pairs for creating query
- * strings
- * @return Collection (or FALSE on an error)
- */
- public function FlavorList($details = true, array $filter = array())
- {
- if ($details) {
- $url = $this->Url(Flavor::ResourceName().'/detail', $filter);
- } else {
- $url = $this->Url(Flavor::ResourceName(), $filter);
- }
- return $this->Collection('\OpenCloud\Compute\Flavor', $url);
- }
-
- /**
- * Gets a request from an HTTP source and ensures that the
- * content type is always "application/json"
- *
- * This is a simple subclass of the parent::Request() method that ensures
- * that all Compute requests use application/json as the Content-Type:
- *
- * @param string $url - the URL of the request
- * @param string $method - the HTTP method ("GET" by default)
- * @param array $headers - an associative array of headers to pass to
- * the request
- * @param string $body - optional body for POST or PUT requests
- * @return \Rackspace\HttpResult object
- */
- public function Request($url, $method = 'GET', array $headers = array(), $body = null)
- {
- $headers['Content-Type'] = RAXSDK_CONTENT_TYPE_JSON;
- return parent::Request($url, $method, $headers, $body);
- }
-
- /**
- * Loads the available namespaces from the /extensions resource
- */
- protected function load_namespaces()
- {
- $ext = $this->Extensions();
- foreach($ext as $obj) {
- $this->_namespaces[] = $obj->alias;
- }
- }
-
-}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/PersistentObject.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/PersistentObject.php
deleted file mode 100644
index 0257526d709..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/PersistentObject.php
+++ /dev/null
@@ -1,939 +0,0 @@
-<?php
-/**
- * An abstraction that defines persistent objects associated with a service
- *
- * @copyright 2012-2013 Rackspace Hosting, Inc.
- * See COPYING for licensing information
- *
- * @package phpOpenCloud
- * @version 1.0
- * @author Glen Campbell <glen.campbell@rackspace.com>
- * @author Jamie Hannaford <jamie.hannaford@rackspace.com>
- */
-
-namespace OpenCloud\Common;
-
-/**
- * Represents an object that can be retrieved, created, updated and deleted.
- *
- * This class abstracts much of the common functionality between:
- *
- * * Nova servers;
- * * Swift containers and objects;
- * * DBAAS instances;
- * * Cinder volumes;
- * * and various other objects that:
- * * have a URL;
- * * can be created, updated, deleted, or retrieved;
- * * use a standard JSON format with a top-level element followed by
- * a child object with attributes.
- *
- * In general, you can create a persistent object class by subclassing this
- * class and defining some protected, static variables:
- *
- * * $url_resource - the sub-resource value in the URL of the parent. For
- * example, if the parent URL is `http://something/parent`, then setting this
- * value to "another" would result in a URL for the persistent object of
- * `http://something/parent/another`.
- *
- * * $json_name - the top-level JSON object name. For example, if the
- * persistent object is represented by `{"foo": {"attr":value, ...}}`, then
- * set $json_name to "foo".
- *
- * * $json_collection_name - optional; this value is the name of a collection
- * of the persistent objects. If not provided, it defaults to `json_name`
- * with an appended "s" (e.g., if `json_name` is "foo", then
- * `json_collection_name` would be "foos"). Set this value if the collection
- * name doesn't follow this pattern.
- *
- * * $json_collection_element - the common pattern for a collection is:
- * `{"collection": [{"attr":"value",...}, {"attr":"value",...}, ...]}`
- * That is, each element of the array is a \stdClass object containing the
- * object's attributes. In rare instances, the objects in the array
- * are named, and `json_collection_element` contains the name of the
- * collection objects. For example, in this JSON response:
- * `{"allowedDomain":[{"allowedDomain":{"name":"foo"}}]}`,
- * `json_collection_element` would be set to "allowedDomain".
- *
- * The PersistentObject class supports the standard CRUD methods; if these are
- * not needed (i.e. not supported by the service), the subclass should redefine
- * these to call the `noCreate`, `noUpdate`, or `noDelete` methods, which will
- * trigger an appropriate exception. For example, if an object cannot be created:
- *
- * function create($params = array())
- * {
- * $this->noCreate();
- * }
- */
-abstract class PersistentObject extends Base
-{
-
- private $service;
-
- private $parent;
-
- protected $id;
-
- /**
- * Retrieves the instance from persistent storage
- *
- * @param mixed $service The service object for this resource
- * @param mixed $info The ID or array/object of data
- */
- public function __construct($service = null, $info = null)
- {
- if ($service instanceof Service) {
- $this->setService($service);
- }
-
- if (property_exists($this, 'metadata')) {
- $this->metadata = new Metadata;
- }
-
- $this->populate($info);
- }
-
- /**
- * Validates properties that have a namespace: prefix
- *
- * If the property prefix: appears in the list of supported extension
- * namespaces, then the property is applied to the object. Otherwise,
- * an exception is thrown.
- *
- * @param string $name the name of the property
- * @param mixed $value the property's value
- * @return void
- * @throws AttributeError
- */
- public function __set($name, $value)
- {
- $this->setProperty($name, $value, $this->getService()->namespaces());
- }
-
- /**
- * Sets the service associated with this resource object.
- *
- * @param \OpenCloud\Common\Service $service
- */
- public function setService(Service $service)
- {
- $this->service = $service;
- return $this;
- }
-
- /**
- * Returns the service object for this resource; required for making
- * requests, etc. because it has direct access to the Connection.
- *
- * @return \OpenCloud\Common\Service
- */
- public function getService()
- {
- if (null === $this->service) {
- throw new Exceptions\ServiceValueError(
- 'No service defined'
- );
- }
- return $this->service;
- }
-
- /**
- * Legacy shortcut to getService
- *
- * @return \OpenCloud\Common\Service
- */
- public function service()
- {
- return $this->getService();
- }
-
- /**
- * Set the parent object for this resource.
- *
- * @param \OpenCloud\Common\PersistentObject $parent
- */
- public function setParent(PersistentObject $parent)
- {
- $this->parent = $parent;
- return $this;
- }
-
- /**
- * Returns the parent.
- *
- * @return \OpenCloud\Common\PersistentObject
- */
- public function getParent()
- {
- if (null === $this->parent) {
- $this->parent = $this->getService();
- }
- return $this->parent;
- }
-
- /**
- * Legacy shortcut to getParent
- *
- * @return \OpenCloud\Common\PersistentObject
- */
- public function parent()
- {
- return $this->getParent();
- }
-
-
-
-
- /**
- * API OPERATIONS (CRUD & CUSTOM)
- */
-
- /**
- * Creates a new object
- *
- * @api
- * @param array $params array of values to set when creating the object
- * @return HttpResponse
- * @throws VolumeCreateError if HTTP status is not Success
- */
- public function create($params = array())
- {
- // set parameters
- if (!empty($params)) {
- $this->populate($params, false);
- }
-
- // debug
- $this->getLogger()->info('{class}::Create({name})', array(
- 'class' => get_class($this),
- 'name' => $this->Name()
- ));
-
- // construct the JSON
- $object = $this->createJson();
- $json = json_encode($object);
- $this->checkJsonError();
-
- $this->getLogger()->info('{class}::Create JSON [{json}]', array(
- 'class' => get_class($this),
- 'json' => $json
- ));
-
- // send the request
- $response = $this->getService()->request(
- $this->createUrl(),
- 'POST',
- array('Content-Type' => 'application/json'),
- $json
- );
-
- // check the return code
- // @codeCoverageIgnoreStart
- if ($response->httpStatus() > 204) {
- throw new Exceptions\CreateError(sprintf(
- Lang::translate('Error creating [%s] [%s], status [%d] response [%s]'),
- get_class($this),
- $this->Name(),
- $response->HttpStatus(),
- $response->HttpBody()
- ));
- }
-
- if ($response->HttpStatus() == "201" && ($location = $response->Header('Location'))) {
- // follow Location header
- $this->refresh(null, $location);
- } else {
- // set values from response
- $object = json_decode($response->httpBody());
-
- if (!$this->checkJsonError()) {
- $top = $this->jsonName();
- if (isset($object->$top)) {
- $this->populate($object->$top);
- }
- }
- }
- // @codeCoverageIgnoreEnd
-
- return $response;
- }
-
- /**
- * Updates an existing object
- *
- * @api
- * @param array $params array of values to set when updating the object
- * @return HttpResponse
- * @throws VolumeCreateError if HTTP status is not Success
- */
- public function update($params = array())
- {
- // set parameters
- if (!empty($params)) {
- $this->populate($params);
- }
-
- // debug
- $this->getLogger()->info('{class}::Update({name})', array(
- 'class' => get_class($this),
- 'name' => $this->Name()
- ));
-
- // construct the JSON
- $obj = $this->updateJson($params);
- $json = json_encode($obj);
-
- $this->checkJsonError();
-
- $this->getLogger()->info('{class}::Update JSON [{json}]', array(
- 'class' => get_class($this),
- 'json' => $json
- ));
-
- // send the request
- $response = $this->getService()->Request(
- $this->url(),
- 'PUT',
- array(),
- $json
- );
-
- // check the return code
- // @codeCoverageIgnoreStart
- if ($response->HttpStatus() > 204) {
- throw new Exceptions\UpdateError(sprintf(
- Lang::translate('Error updating [%s] with [%s], status [%d] response [%s]'),
- get_class($this),
- $json,
- $response->HttpStatus(),
- $response->HttpBody()
- ));
- }
- // @codeCoverageIgnoreEnd
-
- return $response;
- }
-
- /**
- * Deletes an object
- *
- * @api
- * @return HttpResponse
- * @throws DeleteError if HTTP status is not Success
- */
- public function delete()
- {
- $this->getLogger()->info('{class}::Delete()', array('class' => get_class($this)));
-
- // send the request
- $response = $this->getService()->request($this->url(), 'DELETE');
-
- // check the return code
- // @codeCoverageIgnoreStart
- if ($response->HttpStatus() > 204) {
- throw new Exceptions\DeleteError(sprintf(
- Lang::translate('Error deleting [%s] [%s], status [%d] response [%s]'),
- get_class(),
- $this->Name(),
- $response->HttpStatus(),
- $response->HttpBody()
- ));
- }
- // @codeCoverageIgnoreEnd
-
- return $response;
- }
-
- /**
- * Returns an object for the Create() method JSON
- * Must be overridden in a child class.
- *
- * @throws CreateError if not overridden
- */
- protected function createJson()
- {
- throw new Exceptions\CreateError(sprintf(
- Lang::translate('[%s] CreateJson() must be overridden'),
- get_class($this)
- ));
- }
-
- /**
- * Returns an object for the Update() method JSON
- * Must be overridden in a child class.
- *
- * @throws UpdateError if not overridden
- */
- protected function updateJson($params = array())
- {
- throw new Exceptions\UpdateError(sprintf(
- Lang::translate('[%s] UpdateJson() must be overridden'),
- get_class($this)
- ));
- }
-
- /**
- * throws a CreateError for subclasses that don't support Create
- *
- * @throws CreateError
- */
- protected function noCreate()
- {
- throw new Exceptions\CreateError(sprintf(
- Lang::translate('[%s] does not support Create()'),
- get_class()
- ));
- }
-
- /**
- * throws a DeleteError for subclasses that don't support Delete
- *
- * @throws DeleteError
- */
- protected function noDelete()
- {
- throw new Exceptions\DeleteError(sprintf(
- Lang::translate('[%s] does not support Delete()'),
- get_class()
- ));
- }
-
- /**
- * throws a UpdateError for subclasses that don't support Update
- *
- * @throws UpdateError
- */
- protected function noUpdate()
- {
- throw new Exceptions\UpdateError(sprintf(
- Lang::translate('[%s] does not support Update()'),
- get_class()
- ));
- }
-
- /**
- * Returns the default URL of the object
- *
- * This may have to be overridden in subclasses.
- *
- * @param string $subresource optional sub-resource string
- * @param array $qstr optional k/v pairs for query strings
- * @return string
- * @throws UrlError if URL is not defined
- */
- public function url($subresource = null, $queryString = array())
- {
- // find the primary key attribute name
- $primaryKey = $this->primaryKeyField();
-
- // first, see if we have a [self] link
- $url = $this->findLink('self');
-
- /**
- * Next, check to see if we have an ID
- * Note that we use Parent() instead of Service(), since the parent
- * object might not be a service.
- */
- if (!$url && $this->$primaryKey) {
- $url = Lang::noslash($this->getParent()->url($this->resourceName())) . '/' . $this->$primaryKey;
- }
-
- // add the subresource
- if ($url) {
- $url .= $subresource ? "/$subresource" : '';
- if (count($queryString)) {
- $url .= '?' . $this->makeQueryString($queryString);
- }
- return $url;
- }
-
- // otherwise, we don't have a URL yet
- throw new Exceptions\UrlError(sprintf(
- Lang::translate('%s does not have a URL yet'),
- get_class($this)
- ));
- }
-
- /**
- * Waits for the server/instance status to change
- *
- * This function repeatedly polls the system for a change in server
- * status. Once the status reaches the `$terminal` value (or 'ERROR'),
- * then the function returns.
- *
- * The polling interval is set by the constant RAXSDK_POLL_INTERVAL.
- *
- * The function will automatically terminate after RAXSDK_SERVER_MAXTIMEOUT
- * seconds elapse.
- *
- * @api
- * @param string $terminal the terminal state to wait for
- * @param integer $timeout the max time (in seconds) to wait
- * @param callable $callback a callback function that is invoked with
- * each repetition of the polling sequence. This can be used, for
- * example, to update a status display or to permit other operations
- * to continue
- * @return void
- */
- public function waitFor(
- $terminal = 'ACTIVE',
- $timeout = RAXSDK_SERVER_MAXTIMEOUT,
- $callback = NULL,
- $sleep = RAXSDK_POLL_INTERVAL
- ) {
- // find the primary key field
- $primaryKey = $this->PrimaryKeyField();
-
- // save stats
- $startTime = time();
-
- $states = array('ERROR', $terminal);
-
- while (true) {
-
- $this->refresh($this->$primaryKey);
-
- if ($callback) {
- call_user_func($callback, $this);
- }
-
- if (in_array($this->status(), $states) || (time() - $startTime) > $timeout) {
- return;
- }
- // @codeCoverageIgnoreStart
- sleep($sleep);
- }
- }
- // @codeCoverageIgnoreEnd
-
- /**
- * Refreshes the object from the origin (useful when the server is
- * changing states)
- *
- * @return void
- * @throws IdRequiredError
- */
- public function refresh($id = null, $url = null)
- {
- $primaryKey = $this->PrimaryKeyField();
-
- if (!$url) {
- if ($id === null) {
- $id = $this->$primaryKey;
- }
-
- if (!$id) {
- throw new Exceptions\IdRequiredError(sprintf(
- Lang::translate('%s has no ID; cannot be refreshed'),
- get_class())
- );
- }
-
- // retrieve it
- $this->getLogger()->info(Lang::translate('{class} id [{id}]'), array(
- 'class' => get_class($this),
- 'id' => $id
- ));
-
- $this->$primaryKey = $id;
- $url = $this->url();
- }
-
- // reset status, if available
- if (property_exists($this, 'status')) {
- $this->status = null;
- }
-
- // perform a GET on the URL
- $response = $this->getService()->Request($url);
-
- // check status codes
- // @codeCoverageIgnoreStart
- if ($response->HttpStatus() == 404) {
- throw new Exceptions\InstanceNotFound(
- sprintf(Lang::translate('%s [%s] not found [%s]'),
- get_class($this),
- $this->$primaryKey,
- $url
- ));
- }
-
- if ($response->HttpStatus() >= 300) {
- throw new Exceptions\UnknownError(
- sprintf(Lang::translate('Unexpected %s error [%d] [%s]'),
- get_class($this),
- $response->HttpStatus(),
- $response->HttpBody()
- ));
- }
-
- // check for empty response
- if (!$response->HttpBody()) {
- throw new Exceptions\EmptyResponseError(
- sprintf(Lang::translate('%s::Refresh() unexpected empty response, URL [%s]'),
- get_class($this),
- $url
- ));
- }
-
- // we're ok, reload the response
- if ($json = $response->HttpBody()) {
-
- $this->getLogger()->info('refresh() JSON [{json}]', array('json' => $json));
-
- $response = json_decode($json);
-
- if ($this->CheckJsonError()) {
- throw new Exceptions\ServerJsonError(sprintf(
- Lang::translate('JSON parse error on %s refresh'),
- get_class($this)
- ));
- }
-
- $top = $this->JsonName();
-
- if ($top && isset($response->$top)) {
- $content = $response->$top;
- } else {
- $content = $response;
- }
-
- $this->populate($content);
-
- }
- // @codeCoverageIgnoreEnd
- }
-
-
- /**
- * OBJECT INFORMATION
- */
-
- /**
- * Returns the displayable name of the object
- *
- * Can be overridden by child objects; *must* be overridden by child
- * objects if the object does not have a `name` attribute defined.
- *
- * @api
- * @return string
- * @throws NameError if attribute 'name' is not defined
- */
- public function name()
- {
- if (property_exists($this, 'name')) {
- return $this->name;
- } else {
- throw new Exceptions\NameError(sprintf(
- Lang::translate('Name attribute does not exist for [%s]'),
- get_class($this)
- ));
- }
- }
-
- /**
- * Sends the json string to the /action resource
- *
- * This is used for many purposes, such as rebooting the server,
- * setting the root password, creating images, etc.
- * Since it can only be used on a live server, it checks for a valid ID.
- *
- * @param $object - this will be encoded as json, and we handle all the JSON
- * error-checking in one place
- * @throws ServerIdError if server ID is not defined
- * @throws ServerActionError on other errors
- * @returns boolean; TRUE if successful, FALSE otherwise
- */
- protected function action($object)
- {
- $primaryKey = $this->primaryKeyField();
-
- if (!$this->$primaryKey) {
- throw new Exceptions\IdRequiredError(sprintf(
- Lang::translate('%s is not defined'),
- get_class($this)
- ));
- }
-
- if (!is_object($object)) {
- throw new Exceptions\ServerActionError(sprintf(
- Lang::translate('%s::Action() requires an object as its parameter'),
- get_class($this)
- ));
- }
-
- // convert the object to json
- $json = json_encode($object);
- $this->getLogger()->info('JSON [{string}]', array('json' => $json));
-
- $this->checkJsonError();
-
- // debug - save the request
- $this->getLogger()->info(Lang::translate('{class}::action [{json}]'), array(
- 'class' => get_class($this),
- 'json' => $json
- ));
-
- // get the URL for the POST message
- $url = $this->url('action');
-
- // POST the message
- $response = $this->getService()->request($url, 'POST', array(), $json);
-
- // @codeCoverageIgnoreStart
- if (!is_object($response)) {
- throw new Exceptions\HttpError(sprintf(
- Lang::translate('Invalid response for %s::Action() request'),
- get_class($this)
- ));
- }
-
- // check for errors
- if ($response->HttpStatus() >= 300) {
- throw new Exceptions\ServerActionError(sprintf(
- Lang::translate('%s::Action() [%s] failed; response [%s]'),
- get_class($this),
- $url,
- $response->HttpBody()
- ));
- }
- // @codeCoverageIgnoreStart
-
- return $response;
- }
-
- /**
- * Execute a custom resource request.
- *
- * @param string $path
- * @param string $method
- * @param string|array|object $body
- * @return boolean
- * @throws Exceptions\InvalidArgumentError
- * @throws Exceptions\HttpError
- * @throws Exceptions\ServerActionError
- */
- public function customAction($url, $method = 'GET', $body = null)
- {
- if (is_string($body) && (json_decode($body) === null)) {
- throw new Exceptions\InvalidArgumentError(
- 'Please provide either a well-formed JSON string, or an object '
- . 'for JSON serialization'
- );
- } else {
- $body = json_encode($body);
- }
-
- // POST the message
- $response = $this->service()->request($url, $method, array(), $body);
-
- if (!is_object($response)) {
- throw new Exceptions\HttpError(sprintf(
- Lang::translate('Invalid response for %s::customAction() request'),
- get_class($this)
- ));
- }
-
- // check for errors
- // @codeCoverageIgnoreStart
- if ($response->HttpStatus() >= 300) {
- throw new Exceptions\ServerActionError(sprintf(
- Lang::translate('%s::customAction() [%s] failed; response [%s]'),
- get_class($this),
- $url,
- $response->HttpBody()
- ));
- }
- // @codeCoverageIgnoreEnd
-
- $object = json_decode($response->httpBody());
-
- $this->checkJsonError();
-
- return $object;
- }
-
- /**
- * returns the object's status or `N/A` if not available
- *
- * @api
- * @return string
- */
- public function status()
- {
- return (isset($this->status)) ? $this->status : 'N/A';
- }
-
- /**
- * returns the object's identifier
- *
- * Can be overridden by a child class if the identifier is not in the
- * `$id` property. Use of this function permits the `$id` attribute to
- * be protected or private to prevent unauthorized overwriting for
- * security.
- *
- * @api
- * @return string
- */
- public function id()
- {
- return $this->id;
- }
-
- /**
- * checks for `$alias` in extensions and throws an error if not present
- *
- * @throws UnsupportedExtensionError
- */
- public function checkExtension($alias)
- {
- if (!in_array($alias, $this->getService()->namespaces())) {
- throw new Exceptions\UnsupportedExtensionError(sprintf(
- Lang::translate('Extension [%s] is not installed'),
- $alias
- ));
- }
-
- return true;
- }
-
- /**
- * returns the region associated with the object
- *
- * navigates to the parent service to determine the region.
- *
- * @api
- */
- public function region()
- {
- return $this->getService()->Region();
- }
-
- /**
- * Since each server can have multiple links, this returns the desired one
- *
- * @param string $type - 'self' is most common; use 'bookmark' for
- * the version-independent one
- * @return string the URL from the links block
- */
- public function findLink($type = 'self')
- {
- if (empty($this->links)) {
- return false;
- }
-
- foreach ($this->links as $link) {
- if ($link->rel == $type) {
- return $link->href;
- }
- }
-
- return false;
- }
-
- /**
- * returns the URL used for Create
- *
- * @return string
- */
- protected function createUrl()
- {
- return $this->getParent()->Url($this->ResourceName());
- }
-
- /**
- * Returns the primary key field for the object
- *
- * The primary key is usually 'id', but this function is provided so that
- * (in rare cases where it is not 'id'), it can be overridden.
- *
- * @return string
- */
- protected function primaryKeyField()
- {
- return 'id';
- }
-
- /**
- * Returns the top-level document identifier for the returned response
- * JSON document; must be overridden in child classes
- *
- * For example, a server document is (JSON) `{"server": ...}` and an
- * Instance document is `{"instance": ...}` - this function must return
- * the top level document name (either "server" or "instance", in
- * these examples).
- *
- * @throws DocumentError if not overridden
- */
- public static function jsonName()
- {
- if (isset(static::$json_name)) {
- return static::$json_name;
- }
-
- throw new Exceptions\DocumentError(sprintf(
- Lang::translate('No JSON object defined for class [%s] in JsonName()'),
- get_class()
- ));
- }
-
- /**
- * returns the collection JSON element name
- *
- * When an object is returned in a collection, it usually has a top-level
- * object that is an array holding child objects of the object types.
- * This static function returns the name of the top-level element. Usually,
- * that top-level element is simply the JSON name of the resource.'s';
- * however, it can be overridden by specifying the $json_collection_name
- * attribute.
- *
- * @return string
- */
- public static function jsonCollectionName()
- {
- if (isset(static::$json_collection_name)) {
- return static::$json_collection_name;
- } else {
- return static::$json_name . 's';
- }
- }
-
- /**
- * returns the JSON name for each element in a collection
- *
- * Usually, elements in a collection are anonymous; this function, however,
- * provides for an element level name:
- *
- * `{ "collection" : [ { "element" : ... } ] }`
- *
- * @return string
- */
- public static function jsonCollectionElement()
- {
- if (isset(static::$json_collection_element)) {
- return static::$json_collection_element;
- }
- }
-
- /**
- * Returns the resource name for the URL of the object; must be overridden
- * in child classes
- *
- * For example, a server is `/servers/`, a database instance is
- * `/instances/`. Must be overridden in child classes.
- *
- * @throws UrlError
- */
- public static function resourceName()
- {
- if (isset(static::$url_resource)) {
- return static::$url_resource;
- }
-
- throw new Exceptions\UrlError(sprintf(
- Lang::translate('No URL resource defined for class [%s] in ResourceName()'),
- get_class()
- ));
- }
-
-} \ No newline at end of file
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Request/Curl.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Request/Curl.php
deleted file mode 100644
index bb829afc5f6..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Request/Curl.php
+++ /dev/null
@@ -1,308 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Request;
-
-use OpenCloud\Common\Base;
-use OpenCloud\Common\Lang;
-use OpenCloud\Common\Exceptions\HttpRetryError;
-use OpenCloud\Common\Exceptions\HttpUrlError;
-use OpenCloud\Common\Exceptions\HttpTimeoutError;
-use OpenCloud\Common\Exceptions\HttpError;
-
-/**
- * The CurlRequest class is a simple wrapper to CURL functions. Not only does
- * this permit stubbing of the interface as described under the HttpRequest
- * interface, it could potentially allow us to replace the interface methods
- * with other function calls in the future.
- *
- * @api
- * @author Glen Campbell <glen.campbell@rackspace.com>
- */
-class Curl extends Base implements HttpRequestInterface
-{
-
- private $url;
- private $method;
- private $handle;
- private $retries = 0;
- private $headers = array();
- private $returnheaders = array();
-
- /**
- * Initializes the CURL handle and HTTP method
- *
- * The constructor also sets a number of default values for options.
- *
- * @param string $url the URL to connect to
- * @param string $method the HTTP method (default "GET")
- * @param array $options optional hashed array of options => value pairs
- */
- public function __construct($url, $method = 'GET', array $options = array())
- {
- $this->url = $url;
- $this->method = $method;
- $this->handle = curl_init($url);
-
- // set our options
- $this->setOption(CURLOPT_CUSTOMREQUEST, $method);
-
- foreach($options as $opt => $value) {
- $this->getLogger()->info(Lang::translate('Setting option {key}={val}'), array(
- 'key' => $opt,
- 'val' => $value
- ));
- $this->setOption($opt, $value);
- }
-
- // @codeCoverageIgnoreStart
- if (RAXSDK_SSL_VERIFYHOST != 2) {
- $this->getLogger()->warning("WARNING: RAXSDK_SSL_VERIFYHOST has reduced security, value [{value}]", array(
- 'value' => RAXSDK_SSL_VERIFYHOST
- ));
- }
-
- if (RAXSDK_SSL_VERIFYPEER !== true) {
- $this->getLogger()->warning("WARNING: RAXSDK_SSL_VERIFYPEER has reduced security");
- }
- // @codeCoverageIgnoreEnd
-
- $this->setOption(CURLOPT_SSL_VERIFYHOST, RAXSDK_SSL_VERIFYHOST);
- $this->setOption(CURLOPT_SSL_VERIFYPEER, RAXSDK_SSL_VERIFYPEER);
-
- if (defined('RAXSDK_CACERTPEM') && file_exists(RAXSDK_CACERTPEM)) {
- $this->setOption(CURLOPT_CAINFO, RAXSDK_CACERTPEM);
- }
-
- // curl code [18]
- // message [transfer closed with x bytes remaining to read]
- if ($method === 'HEAD') {
- $this->setOption(CURLOPT_NOBODY, true);
- }
-
- // follow redirects
- $this->setOption(CURLOPT_FOLLOWLOCATION, true);
-
- // don't return the headers in the request
- $this->setOption(CURLOPT_HEADER, false);
-
- // retrieve headers via callback
- $this->setOption(CURLOPT_HEADERFUNCTION, array($this, '_get_header_cb'));
-
- // return the entire request on curl_exec()
- $this->setOption(CURLOPT_RETURNTRANSFER, true);
-
- // set default timeouts
- $this->setConnectTimeout(RAXSDK_CONNECTTIMEOUT);
- $this->setHttpTimeout(RAXSDK_TIMEOUT);
- }
-
- /**
- * Sets a CURL option
- *
- * @param const $name - a CURL named constant; e.g. CURLOPT_TIMEOUT
- * @param mixed $value - the value for the option
- */
- public function setOption($name, $value)
- {
- return curl_setopt($this->handle, $name, $value);
- }
-
- /**
- * Explicit method for setting the connect timeout
- *
- * The connect timeout is the time it takes for the initial connection
- * request to be established. It is different than the HTTP timeout, which
- * is the time for the entire request to be serviced.
- *
- * @param integer $value The connection timeout in seconds.
- * Use 0 to wait indefinitely (NOT recommended)
- */
- public function setConnectTimeout($value)
- {
- $this->setOption(CURLOPT_CONNECTTIMEOUT, $value);
- }
-
- /**
- * Explicit method for setting the HTTP timeout
- *
- * The HTTP timeout is the time it takes for the HTTP request to be
- * serviced. This value is usually larger than the connect timeout
- * value.
- *
- * @param integer $value - the number of seconds to wait before timing out
- * the HTTP request.
- */
- public function setHttpTimeout($value)
- {
- $this->setOption(CURLOPT_TIMEOUT, $value);
- }
-
- /**
- * Sets the number of retries
- *
- * If you set this to a non-zero value, then it will repeat the request
- * up to that number.
- */
- public function setRetries($value)
- {
- $this->retries = $value;
- }
-
- /**
- * Simplified method for setting lots of headers at once
- *
- * This method takes an associative array of header/value pairs and calls
- * the setheader() method on each of them.
- *
- * @param array $arr an associative array of headers
- */
- public function setheaders($array)
- {
- if (!is_array($array)) {
- throw new HttpError(Lang::translate(
- 'Value passed to CurlRequest::setheaders() must be array'
- ));
- }
-
- foreach ($array as $name => $value) {
- $this->setHeader($name, $value);
- }
- }
-
- /**
- * Sets a single header
- *
- * For example, to set the content type to JSON:
- * `$request->SetHeader('Content-Type','application/json');`
- *
- * @param string $name The name of the header
- * @param mixed $value The value of the header
- */
- public function setHeader($name, $value)
- {
- $this->headers[$name] = $value;
- }
-
- /**
- * Executes the current request
- *
- * This method actually performs the request using the values set
- * previously. It throws a OpenCloud\HttpError exception on
- * any CURL error.
- *
- * @return OpenCloud\HttpResponse
- * @throws OpenCloud\HttpError
- *
- * @codeCoverageIgnore
- */
- public function execute()
- {
- // set all the headers
- $headarr = array();
-
- foreach ($this->headers as $name => $value) {
- $headarr[] = $name.': '.$value;
- }
-
- $this->setOption(CURLOPT_HTTPHEADER, $headarr);
-
- // set up to retry if necessary
- $try_counter = 0;
-
- do {
- $data = curl_exec($this->handle);
- if (curl_errno($this->handle) && ($try_counter<$this->retries)) {
- $this->getLogger()->info(Lang::translate('Curl error [%d]; retrying [%s]'), array(
- 'error' => curl_errno($this->handle),
- 'url' => $this->url
- ));
- }
-
- } while((++$try_counter <= $this->retries) && (curl_errno($this->handle) != 0));
-
- // log retries error
- if ($this->retries && curl_errno($this->handle)) {
- throw new HttpRetryError(sprintf(
- Lang::translate('No more retries available, last error [%d]'),
- curl_errno($this->handle)
- ));
- }
-
- // check for CURL errors
- switch(curl_errno($this->handle)) {
- case 0:
- // everything's ok
- break;
- case 3:
- throw new HttpUrlError(sprintf(Lang::translate('Malformed URL [%s]'), $this->url));
- break;
- case 28:
- // timeout
- throw new HttpTimeoutError(Lang::translate('Operation timed out; check RAXSDK_TIMEOUT value'));
- break;
- default:
- throw new HttpError(sprintf(
- Lang::translate('HTTP error on [%s], curl code [%d] message [%s]'),
- $this->url,
- curl_errno($this->handle),
- curl_error($this->handle)
- ));
- }
-
- // otherwise, return the HttpResponse
- return new Response\Http($this, $data);
- }
-
- /**
- * returns an array of information about the request
- */
- public function info()
- {
- return curl_getinfo($this->handle);
- }
-
- /**
- * returns the most recent CURL error number
- */
- public function errno()
- {
- return curl_errno($this->handle);
- }
-
- /**
- * returns the most recent CURL error string
- */
- public function error()
- {
- return curl_error($this->handle);
- }
-
- /**
- * Closes the HTTP request
- */
- public function close()
- {
- return curl_close($this->handle);
- }
-
- /**
- * Returns the headers as an array
- */
- public function returnHeaders()
- {
- return $this->returnheaders;
- }
-
- /**
- * This is a callback method used to handle the returned HTTP headers
- *
- * @param mixed $ch a CURL handle
- * @param string $header the header string in its entirety
- */
- public function _get_header_cb($ch, $header)
- {
- $this->returnheaders[] = $header;
- return strlen($header);
- }
-
-}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Request/HttpRequestInterface.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Request/HttpRequestInterface.php
deleted file mode 100644
index cbe3b5412a1..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Request/HttpRequestInterface.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Request;
-
-/**
- * The HttpRequest interface defines methods for wrapping CURL; this allows
- * those methods to be stubbed out for unit testing, thus allowing us to
- * test without actually making live calls.
- */
-interface HttpRequestInterface
-{
-
- public function SetOption($name, $value);
-
- public function setheaders($arr);
-
- public function SetHeader($header, $value);
-
- public function Execute();
-
- public function close();
-
-}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Request/Response/Blank.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Request/Response/Blank.php
deleted file mode 100644
index 0c79adcef3a..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Request/Response/Blank.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Request\Response;
-
-class Blank extends Http
-{
- public $errno;
- public $error;
- public $info;
- public $body;
- public $headers = array();
- public $status = 200;
- public $rawdata;
-
- public function __construct(array $values = array())
- {
- foreach($values as $name => $value) {
- $this->$name = $value;
- }
- }
-
- public function httpStatus()
- {
- return $this->status;
- }
-
-} \ No newline at end of file
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Request/Response/Http.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Request/Response/Http.php
deleted file mode 100644
index a7cb9e96346..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Request/Response/Http.php
+++ /dev/null
@@ -1,140 +0,0 @@
-<?php
-
-namespace OpenCloud\Common\Request\Response;
-
-use OpenCloud\Common\Base;
-
-/**
- * The HttpResponse returns an object with status information, separated
- * headers, and any response body necessary.
- *
- * @api
- * @author Glen Campbell <glen.campbell@rackspace.com>
- */
-
-class Http extends Base
-{
-
- private $errno;
- private $error;
- private $info = array();
- protected $body;
- protected $headers = array();
-
- /**
- * The constructor parses everything necessary
- */
- public function __construct($request, $data)
- {
- // save the raw data (who knows? we might need it)
- $this->setBody($data);
-
- // and split each line into name: value pairs
- foreach($request->returnHeaders() as $line) {
- if (preg_match('/^([^:]+):\s+(.+?)\s*$/', $line, $matches)) {
- $this->headers[$matches[1]] = $matches[2];
- } else {
- $this->headers[$line] = trim($line);
- }
- }
-
- // @codeCoverageIgnoreStart
- if (isset($this->headers['Cache-Control'])) {
- $this->getLogger()->info('Cache-Control: {header}', array(
- 'headers' => $this->headers['Cache-Control']
- ));
- }
- if (isset($this->headers['Expires'])) {
- $this->getLogger()->info('Expires: {header}', array(
- 'headers' => $this->headers['Expires']
- ));
- }
- // @codeCoverageIgnoreEnd
-
- // set some other data
- $this->info = $request->info();
- $this->errno = $request->errno();
- $this->error = $request->error();
- }
-
- /**
- * Returns the full body of the request
- *
- * @return string
- */
- public function httpBody()
- {
- return $this->body;
- }
-
- /**
- * Sets the body.
- *
- * @param string $body
- */
- public function setBody($body)
- {
- $this->body = $body;
- }
-
- /**
- * Returns an array of headers
- *
- * @return associative array('header'=>value)
- */
- public function headers()
- {
- return $this->headers;
- }
-
- /**
- * Returns a single header
- *
- * @return string with the value of the requested header, or NULL
- */
- public function header($name)
- {
- return isset($this->headers[$name]) ? $this->headers[$name] : null;
- }
-
- /**
- * Returns an array of information
- *
- * @return array
- */
- public function info()
- {
- return $this->info;
- }
-
- /**
- * Returns the most recent error number
- *
- * @return integer
- */
- public function errno()
- {
- return $this->errno;
- }
-
- /**
- * Returns the most recent error message
- *
- * @return string
- */
- public function error()
- {
- return $this->error;
- }
-
- /**
- * Returns the HTTP status code
- *
- * @return integer
- */
- public function httpStatus()
- {
- return $this->info['http_code'];
- }
-
-}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Service.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Service.php
deleted file mode 100644
index 5b3aa729a97..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/Service.php
+++ /dev/null
@@ -1,489 +0,0 @@
-<?php
-/**
- * PHP OpenCloud library.
- *
- * @copyright Copyright 2013 Rackspace US, Inc. See COPYING for licensing information.
- * @license https://www.apache.org/licenses/LICENSE-2.0 Apache 2.0
- * @version 1.6.0
- * @author Jamie Hannaford <jamie.hannaford@rackspace.com>
- */
-
-namespace OpenCloud\Common;
-
-use OpenCloud\Common\Base;
-use OpenCloud\Common\Lang;
-use OpenCloud\OpenStack;
-use OpenCloud\Common\Exceptions;
-
-/**
- * This class defines a cloud service; a relationship between a specific OpenStack
- * and a provided service, represented by a URL in the service catalog.
- *
- * Because Service is an abstract class, it cannot be called directly. Provider
- * services such as Rackspace Cloud Servers or OpenStack Swift are each
- * subclassed from Service.
- *
- * @author Glen Campbell <glen.campbell@rackspace.com>
- */
-
-abstract class Service extends Base
-{
-
- protected $conn;
- private $service_type;
- private $service_name;
- private $service_region;
- private $service_url;
-
- protected $_namespaces = array();
-
- /**
- * Creates a service on the specified connection
- *
- * Usage: `$x = new Service($conn, $type, $name, $region, $urltype);`
- * The service's URL is defined in the OpenStack's serviceCatalog; it
- * uses the $type, $name, $region, and $urltype to find the proper URL
- * and set it. If it cannot find a URL in the service catalog that matches
- * the criteria, then an exception is thrown.
- *
- * @param OpenStack $conn - a Connection object
- * @param string $type - the service type (e.g., "compute")
- * @param string $name - the service name (e.g., "cloudServersOpenStack")
- * @param string $region - the region (e.g., "ORD")
- * @param string $urltype - the specified URL from the catalog
- * (e.g., "publicURL")
- */
- public function __construct(
- OpenStack $conn,
- $type,
- $name,
- $region,
- $urltype = RAXSDK_URL_PUBLIC,
- $customServiceUrl = null
- ) {
- $this->setConnection($conn);
- $this->service_type = $type;
- $this->service_name = $name;
- $this->service_region = $region;
- $this->service_url = $customServiceUrl ?: $this->getEndpoint($type, $name, $region, $urltype);
- }
-
- /**
- * Set this service's connection.
- *
- * @param type $connection
- */
- public function setConnection($connection)
- {
- $this->conn = $connection;
- }
-
- /**
- * Get this service's connection.
- *
- * @return type
- */
- public function getConnection()
- {
- return $this->conn;
- }
-
- /**
- * Returns the URL for the Service
- *
- * @param string $resource optional sub-resource
- * @param array $query optional k/v pairs for query strings
- * @return string
- */
- public function url($resource = '', array $param = array())
- {
- $baseurl = $this->service_url;
-
- // use strlen instead of boolean test because '0' is a valid name
- if (strlen($resource) > 0) {
- $baseurl = Lang::noslash($baseurl).'/'.$resource;
- }
-
- if (!empty($param)) {
- $baseurl .= '?'.$this->MakeQueryString($param);
- }
-
- return $baseurl;
- }
-
- /**
- * Returns the /extensions for the service
- *
- * @api
- * @return array of objects
- */
- public function extensions()
- {
- $ext = $this->getMetaUrl('extensions');
- return (is_object($ext) && isset($ext->extensions)) ? $ext->extensions : array();
- }
-
- /**
- * Returns the /limits for the service
- *
- * @api
- * @return array of limits
- */
- public function limits()
- {
- $limits = $this->getMetaUrl('limits');
- return (is_object($limits)) ? $limits->limits : array();
- }
-
- /**
- * Performs an authenticated request
- *
- * This method handles the addition of authentication headers to each
- * request. It always adds the X-Auth-Token: header and will add the
- * X-Auth-Project-Id: header if there is a tenant defined on the
- * connection.
- *
- * @param string $url The URL of the request
- * @param string $method The HTTP method (defaults to "GET")
- * @param array $headers An associative array of headers
- * @param string $body An optional body for POST/PUT requests
- * @return \OpenCloud\HttpResult
- */
- public function request(
- $url,
- $method = 'GET',
- array $headers = array(),
- $body = null
- ) {
-
- $headers['X-Auth-Token'] = $this->conn->Token();
-
- if ($tenant = $this->conn->Tenant()) {
- $headers['X-Auth-Project-Id'] = $tenant;
- }
-
- return $this->conn->request($url, $method, $headers, $body);
- }
-
- /**
- * returns a collection of objects
- *
- * @param string $class the class of objects to fetch
- * @param string $url (optional) the URL to retrieve
- * @param mixed $parent (optional) the parent service/object
- * @return OpenCloud\Common\Collection
- */
- public function collection($class, $url = null, $parent = null)
- {
- // Set the element names
- $collectionName = $class::JsonCollectionName();
- $elementName = $class::JsonCollectionElement();
-
- // Set the parent if empty
- if (!$parent) {
- $parent = $this;
- }
-
- // Set the URL if empty
- if (!$url) {
- $url = $parent->url($class::ResourceName());
- }
-
- // Save debug info
- $this->getLogger()->info(
- '{class}:Collection({url}, {collectionClass}, {collectionName})',
- array(
- 'class' => get_class($this),
- 'url' => $url,
- 'collectionClass' => $class,
- 'collectionName' => $collectionName
- )
- );
-
- // Fetch the list
- $response = $this->request($url);
-
- $this->getLogger()->info('Response {status} [{body}]', array(
- 'status' => $response->httpStatus(),
- 'body' => $response->httpBody()
- ));
-
- // Check return code
- if ($response->httpStatus() > 204) {
- throw new Exceptions\CollectionError(sprintf(
- Lang::translate('Unable to retrieve [%s] list from [%s], status [%d] response [%s]'),
- $class,
- $url,
- $response->httpStatus(),
- $response->httpBody()
- ));
- }
-
- // Handle empty response
- if (strlen($response->httpBody()) == 0) {
- return new Collection($parent, $class, array());
- }
-
- // Parse the return
- $object = json_decode($response->httpBody());
- $this->checkJsonError();
-
- // See if there's a "next" link
- // Note: not sure if the current API offers links as top-level structures;
- // might have to refactor to allow $nextPageUrl as method argument
- // @codeCoverageIgnoreStart
- if (isset($object->links) && is_array($object->links)) {
- foreach($object->links as $link) {
- if (isset($link->rel) && $link->rel == 'next') {
- if (isset($link->href)) {
- $nextPageUrl = $link->href;
- } else {
- $this->getLogger()->warning(
- 'Unexpected [links] found with no [href]'
- );
- }
- }
- }
- }
- // @codeCoverageIgnoreEnd
-
- // How should we populate the collection?
- $data = array();
-
- if (!$collectionName) {
- // No element name, just a plain object
- // @codeCoverageIgnoreStart
- $data = $object;
- // @codeCoverageIgnoreEnd
- } elseif (isset($object->$collectionName)) {
- if (!$elementName) {
- // The object has a top-level collection name only
- $data = $object->$collectionName;
- } else {
- // The object has element levels which need to be iterated over
- $data = array();
- foreach($object->$collectionName as $item) {
- $subValues = $item->$elementName;
- unset($item->$elementName);
- $data[] = array_merge((array)$item, (array)$subValues);
- }
- }
- }
-
- $collectionObject = new Collection($parent, $class, $data);
-
- // if there's a $nextPageUrl, then we need to establish a callback
- // @codeCoverageIgnoreStart
- if (!empty($nextPageUrl)) {
- $collectionObject->setNextPageCallback(array($this, 'Collection'), $nextPageUrl);
- }
- // @codeCoverageIgnoreEnd
-
- return $collectionObject;
- }
-
- /**
- * returns the Region associated with the service
- *
- * @api
- * @return string
- */
- public function region()
- {
- return $this->service_region;
- }
-
- /**
- * returns the serviceName associated with the service
- *
- * This is used by DNS for PTR record lookups
- *
- * @api
- * @return string
- */
- public function name()
- {
- return $this->service_name;
- }
-
- /**
- * Returns a list of supported namespaces
- *
- * @return array
- */
- public function namespaces()
- {
- return (isset($this->_namespaces) && is_array($this->_namespaces)) ? $this->_namespaces : array();
- }
-
- /**
- * Given a service type, name, and region, return the url
- *
- * This function ensures that services are represented by an entry in the
- * service catalog, and NOT by an arbitrarily-constructed URL.
- *
- * Note that it will always return the first match found in the
- * service catalog (there *should* be only one, but you never know...)
- *
- * @param string $type The OpenStack service type ("compute" or
- * "object-store", for example
- * @param string $name The name of the service in the service catlog
- * @param string $region The region of the service
- * @param string $urltype The URL type; defaults to "publicURL"
- * @return string The URL of the service
- */
- private function getEndpoint($type, $name, $region, $urltype = 'publicURL')
- {
- $catalog = $this->getConnection()->serviceCatalog();
-
- // Search each service to find The One
- foreach ($catalog as $service) {
- // Find the service by comparing the type ("compute") and name ("openstack")
- if (!strcasecmp($service->type, $type) && !strcasecmp($service->name, $name)) {
- foreach($service->endpoints as $endpoint) {
- // Only set the URL if:
- // a. It is a regionless service (i.e. no region key set)
- // b. The region matches the one we want
- if (isset($endpoint->$urltype) &&
- (!isset($endpoint->region) || !strcasecmp($endpoint->region, $region))
- ) {
- $url = $endpoint->$urltype;
- }
- }
- }
- }
-
- // error if not found
- if (empty($url)) {
- throw new Exceptions\EndpointError(sprintf(
- 'No endpoints for service type [%s], name [%s], region [%s] and urlType [%s]',
- $type,
- $name,
- $region,
- $urltype
- ));
- }
-
- return $url;
- }
-
- /**
- * Constructs a specified URL from the subresource
- *
- * Given a subresource (e.g., "extensions"), this constructs the proper
- * URL and retrieves the resource.
- *
- * @param string $resource The resource requested; should NOT have slashes
- * at the beginning or end
- * @return \stdClass object
- */
- private function getMetaUrl($resource)
- {
- $urlBase = $this->getEndpoint(
- $this->service_type,
- $this->service_name,
- $this->service_region,
- RAXSDK_URL_PUBLIC
- );
-
- $url = Lang::noslash($urlBase) . '/' . $resource;
-
- $response = $this->request($url);
-
- // check for NOT FOUND response
- if ($response->httpStatus() == 404) {
- return array();
- }
-
- // @codeCoverageIgnoreStart
- if ($response->httpStatus() >= 300) {
- throw new Exceptions\HttpError(sprintf(
- Lang::translate('Error accessing [%s] - status [%d], response [%s]'),
- $urlBase,
- $response->httpStatus(),
- $response->httpBody()
- ));
- }
- // @codeCoverageIgnoreEnd
-
- // we're good; proceed
- $object = json_decode($response->httpBody());
-
- $this->checkJsonError();
-
- return $object;
- }
-
- /**
- * Get all associated resources for this service.
- *
- * @access public
- * @return void
- */
- public function getResources()
- {
- return $this->resources;
- }
-
- /**
- * Internal method for accessing child namespace from parent scope.
- *
- * @return type
- */
- protected function getCurrentNamespace()
- {
- $namespace = get_class($this);
- return substr($namespace, 0, strrpos($namespace, '\\'));
- }
-
- /**
- * Resolves fully-qualified classname for associated local resource.
- *
- * @param string $resourceName
- * @return string
- */
- protected function resolveResourceClass($resourceName)
- {
- $className = substr_count($resourceName, '\\')
- ? $resourceName
- : $this->getCurrentNamespace() . '\\Resource\\' . ucfirst($resourceName);
-
- if (!class_exists($className)) {
- throw new Exceptions\UnrecognizedServiceError(sprintf(
- '%s resource does not exist, please try one of the following: %s',
- $resourceName,
- implode(', ', $this->getResources())
- ));
- }
-
- return $className;
- }
-
- /**
- * Factory method for instantiating resource objects.
- *
- * @access public
- * @param string $resourceName
- * @param mixed $info (default: null)
- * @return object
- */
- public function resource($resourceName, $info = null)
- {
- $className = $this->resolveResourceClass($resourceName);
- return new $className($this, $info);
- }
-
- /**
- * Factory method for instantiate a resource collection.
- *
- * @param string $resourceName
- * @param string|null $url
- * @return Collection
- */
- public function resourceList($resourceName, $url = null, $service = null)
- {
- $className = $this->resolveResourceClass($resourceName);
- return $this->collection($className, $url, $service);
- }
-
-}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/ServiceCatalogItem.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/ServiceCatalogItem.php
deleted file mode 100644
index 3e20bcbc7b9..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Common/ServiceCatalogItem.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-namespace OpenCloud\Common;
-
-/**
- * Holds information on a single service from the Service Catalog
- */
-class ServiceCatalogItem
-{
-
- public function __construct($info = array())
- {
- foreach($info as $key => $value) {
- $this->$key = $value;
- }
- }
-
-}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Globals.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Globals.php
deleted file mode 100644
index fbdc4355e02..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Globals.php
+++ /dev/null
@@ -1,252 +0,0 @@
-<?php
-/**
- * Defines global constants and functions
- *
- * @copyright 2012-2013 Rackspace Hosting, Inc.
- * See COPYING for licensing information
- *
- * @package phpOpenCloud
- * @version 1.0
- * @author Glen Campbell <glen.campbell@rackspace.com>
- */
-
-namespace OpenCloud;
-
-/**
- * This file contains only configuration data such as constants.
- * You can override these constants by defining them BEFORE you including
- * any of the top-level files from the SDK.
- *
- * Definitions:
- * * RAXSDK_TIMEZONE - the default timezone for interpreting date/time requests
- * * RAXSDK_STRICT_PROPERTY_CHECKS - if TRUE, the library will strictly enforce
- * property names on objects; only properties that are pre-defined or
- * appear in the extensions aliases for the service will be permitted.
- * When FALSE (the default), then any property can be set on an object.
- * * RAXSDK_COMPUTE_NAME - the default name for the compute service
- * * RAXSDK_COMPUTE_REGION - the default region for the compute service
- * * RAXSDK_COMPUTE_URLTYPE - the default URL type for the compute service
- * * RAXSDK_OBJSTORE_NAME - the default name for the object storage service
- * * RAXSDK_OBJSTORE_REGION - the default region for the object storage service
- * * RAXSDK_OBJSTORE_URLTYPE - the default URL type for the object storage
- * service
- * * RAXSDK_DATABASE_NAME - the default name for the DbService service
- * * RAXSDK_DATABASE_REGION - the default region for the DbService service
- * * RAXSDK_DATABASE_URLTYPE - the default URL type for the DbService service
- * * RAXSDK_CONNECTTIMEOUT - the time (in seconds) to wait for a connection
- * to a service
- * * RAXSDK_TIMEOUT - the max time (in seconds) to wait for an HTTP request
- * to complete
- * * RAXSDK_SERVER_MAXTIMEOUT - the max time (in seconds) that a server
- * will wait for a change in status (Server::WaitFor() method)
- * * RAXSDK_POLL_INTERVAL - how often (in seconds) the Server::WaitFor() method
- * will poll for a status change
- * * RAXSDK_DEFAULT_IP_VERSION - the default IP version (4 or 6) to return for
- * the server's primary IP address
- * * RAXSDK_OVERLIMIT_TIMEOUT - the max time (in seconds) to wait before
- * retrying a request that has failed because of rate limits. If the
- * next available time for the request is more than (X) seconds away,
- * then the request will fail; otherwise, the request will sleep until
- * available.
- */
-
-if (!defined('RAXSDK_TIMEZONE'))
- define('RAXSDK_TIMEZONE', 'America/Chicago');
-if (!defined('RAXSDK_STRICT_PROPERTY_CHECKS'))
- define('RAXSDK_STRICT_PROPERTY_CHECKS', FALSE);
-if (!defined('RAXSDK_COMPUTE_NAME'))
- define('RAXSDK_COMPUTE_NAME', 'cloudServersOpenStack');
-if (!defined('RAXSDK_COMPUTE_REGION'))
- define('RAXSDK_COMPUTE_REGION', NULL);
-if (!defined('RAXSDK_COMPUTE_URLTYPE'))
- define('RAXSDK_COMPUTE_URLTYPE', 'publicURL');
-if (!defined('RAXSDK_MONITORING_NAME'))
- define('RAXSDK_MONITORING_NAME', 'cloudMonitoring');
-if (!defined('RAXSDK_MONITORING_REGION'))
- define('RAXSDK_MONITORING_REGION', '{ignore}');
-if (!defined('RAXSDK_MONITORING_URLTYPE'))
- define('RAXSDK_MONITORING_URLTYPE', 'publicURL');
-if (!defined('RAXSDK_ORCHESTRATION_NAME'))
- define('RAXSDK_ORCHESTRATION_NAME', 'cloudOrchestration');
-if (!defined('RAXSDK_ORCHESTRATION_REGION'))
- define('RAXSDK_ORCHESTRATION_REGION', NULL);
-if (!defined('RAXSDK_ORCHESTRATION_URLTYPE'))
- define('RAXSDK_ORCHESTRATION_URLTYPE', 'publicURL');
-if (!defined('RAXSDK_OBJSTORE_NAME'))
- define('RAXSDK_OBJSTORE_NAME', 'cloudFiles');
-if (!defined('RAXSDK_OBJSTORE_REGION'))
- define('RAXSDK_OBJSTORE_REGION', NULL);
-if (!defined('RAXSDK_OBJSTORE_URLTYPE'))
- define('RAXSDK_OBJSTORE_URLTYPE', 'publicURL');
-if (!defined('RAXSDK_DATABASE_NAME'))
- define('RAXSDK_DATABASE_NAME', 'cloudDatabases');
-if (!defined('RAXSDK_DATABASE_REGION'))
- define('RAXSDK_DATABASE_REGION', NULL);
-if (!defined('RAXSDK_DATABASE_URLTYPE'))
- define('RAXSDK_DATABASE_URLTYPE', 'publicURL');
-if (!defined('RAXSDK_VOLUME_NAME'))
- define('RAXSDK_VOLUME_NAME', 'cloudBlockStorage');
-if (!defined('RAXSDK_VOLUME_REGION'))
- define('RAXSDK_VOLUME_REGION', NULL);
-if (!defined('RAXSDK_VOLUME_URLTYPE'))
- define('RAXSDK_VOLUME_URLTYPE', 'publicURL');
-if (!defined('RAXSDK_LBSERVICE_NAME'))
- define('RAXSDK_LBSERVICE_NAME', 'cloudLoadBalancers');
-if (!defined('RAXSDK_LBSERVICE_REGION'))
- define('RAXSDK_LBSERVICE_REGION', NULL);
-if (!defined('RAXSDK_LBSERVICE_URLTYPE'))
- define('RAXSDK_LBSERVICE_URLTYPE', 'publicURL');
-if (!defined('RAXSDK_DNS_NAME'))
- define('RAXSDK_DNS_NAME', 'cloudDNS');
-if (!defined('RAXSDK_DNS_REGION'))
- define('RAXSDK_DNS_REGION', '{ignore}'); // DNS is regionless
-if (!defined('RAXSDK_DNS_URLTYPE'))
- define('RAXSDK_DNS_URLTYPE', 'publicURL');
-if (!defined('RAXSDK_AUTOSCALE_NAME'))
- define('RAXSDK_AUTOSCALE_NAME', 'autoscale');
-if (!defined('RAXSDK_AUTOSCALE_REGION'))
- define('RAXSDK_AUTOSCALE_REGION', NULL);
-if (!defined('RAXSDK_AUTOSCALE_URLTYPE'))
- define('RAXSDK_AUTOSCALE_URLTYPE', 'publicURL');
-if (!defined('RAXSDK_DNS_ASYNC_TIMEOUT'))
- define('RAXSDK_DNS_ASYNC_TIMEOUT', 60);
-if (!defined('RAXSDK_DNS_ASYNC_INTERVAL'))
- define('RAXSDK_DNS_ASYNC_INTERVAL', 1);
-if (!defined('RAXSDK_CONNECTTIMEOUT'))
- define('RAXSDK_CONNECTTIMEOUT', 5);
-if (!defined('RAXSDK_TIMEOUT'))
- define('RAXSDK_TIMEOUT', 60);
-if (!defined('RAXSDK_SERVER_MAXTIMEOUT'))
- define('RAXSDK_SERVER_MAXTIMEOUT', 3600);
-if (!defined('RAXSDK_POLL_INTERVAL'))
- define('RAXSDK_POLL_INTERVAL', 10);
-if (!defined('RAXSDK_DEFAULT_IP_VERSION'))
- define('RAXSDK_DEFAULT_IP_VERSION', 4);
-if (!defined('RAXSDK_OVERLIMIT_TIMEOUT'))
- define('RAXSDK_OVERLIMIT_TIMEOUT', 300);
-/**
- * sets default (highly secure) value for CURLOPT_SSL_VERIFYHOST. If you
- * are using a self-signed SSL certificate, you can reduce this setting, but
- * you do so at your own risk.
- */
-if (!defined('RAXSDK_SSL_VERIFYHOST'))
- define('RAXSDK_SSL_VERIFYHOST', 2);
-/**
- * sets default (highly secure) value for CURLOPT_SSL_VERIFYPEER. If you
- * are using a self-signed SSL certificate, you can reduce this setting, but
- * you do so at your own risk.
- */
-if (!defined('RAXSDK_SSL_VERIFYPEER'))
- define('RAXSDK_SSL_VERIFYPEER', TRUE);
-
-/**
- * edit and uncomment this to set the default location of cacert.pem file
- */
-//define('RAXSDK_CACERTPEM', __DIR__ . DIRECTORY_SEPARATOR . 'cacert.pem');
-
-/* these should not be overridden */
-define('RAXSDK_VERSION', '1.5.10');
-define('RAXSDK_USER_AGENT', 'php-opencloud/'.RAXSDK_VERSION.' (Rackspace)');
-define('RAXSDK_ERROR', 'Error:');
-define('RAXSDK_FATAL', 'FATAL ERROR:');
-define('RAXSDK_TERMINATED', '*** PROCESSING HALTED ***');
-define('RAXSDK_CONTENT_TYPE_JSON', 'application/json');
-define('RAXSDK_URL_PUBLIC', 'publicURL');
-define('RAXSDK_URL_INTERNAL', 'internalURL');
-define('RAXSDK_URL_VERSION_INFO', 'versionInfo');
-define('RAXSDK_URL_VERSION_LIST', 'versionList');
-
-/**
- * definitions for Rackspace authentication endpoints
- */
-define('RACKSPACE_US', 'https://identity.api.rackspacecloud.com/v2.0/');
-define('RACKSPACE_UK', 'https://lon.identity.api.rackspacecloud.com/v2.0/');
-
-/**
- * We can re-authenticate this many seconds before the token expires
- *
- * Set this to a higher value if your service does not cache tokens; if
- * it *does* cache them, then this value is not required.
- */
-define('RAXSDK_FUDGE', 0);
-
-/**
- * Readable constants
- */
-define('RAXSDK_SOFT_REBOOT', 'soft');
-define('RAXSDK_HARD_REBOOT', 'hard');
-define('RAXSDK_DETAILS', TRUE);
-define('RAXSDK_MAX_CONTAINER_NAME_LEN', 256);
-
-/**
- * UUID of the Rackspace 'public' network
- */
-define('RAX_PUBLIC','00000000-0000-0000-0000-000000000000');
-/**
- * UUID of the Rackspace 'private' network
- */
-define('RAX_PRIVATE','11111111-1111-1111-1111-111111111111');
-
-// Turn off debug mode by default
-define('RAXSDK_DEBUG', false);
-
-/********** TIMEZONE MAGIC **********/
-
-/**
- * This is called if there is an error getting the default timezone;
- * that means that the default timezone isn't set.
- *
- * @codeCoverageIgnore
- */
-function __raxsdk_timezone_set($errno, $errstr) {
- if ($errno==2)
- date_default_timezone_set(RAXSDK_TIMEZONE);
- else
- die(sprintf("Unknown error %d: %s\n", $errno, $errstr));
-}
-set_error_handler('\OpenCloud\__raxsdk_timezone_set');
-@date_default_timezone_get();
-restore_error_handler();
-
-/********** SOME GLOBAL FUNCTIONS **********/
-
- /**
- * \OpenCloud\Common\Lang::translate() - this function should be used to wrap all static strings. In the future,
- * this may provide us with a hook for providing different language
- * translations.
- *
- * @codeCoverageIgnore
- */
- function define_gettext() {
- function translate($str) {
- return $str;
- }
- }
-
- if (!function_exists('_'))
- define_gettext();
-
- /**
- * removes trailing slash(es) from a URL string
- *
- * Mainly, this is just for appearance's sake. I really hate to see
- * URLs like .../servers//address, for some reason.
- *
- * @codeCoverageIgnore
- */
- function noslash($str) {
- while ($str && (substr($str, -1) == '/'))
- $str = substr($str, 0, strlen($str)-1);
- return $str;
- }
-
- /**
- * Turns debugging on or off
- *
- * @codeCoverageIgnore
- */
- function setDebug($state=TRUE) {
- global $RAXSDK_DEBUG;
- $RAXSDK_DEBUG=$state;
- }
-
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/AbstractService.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/AbstractService.php
deleted file mode 100644
index 4a2298d60ed..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/AbstractService.php
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-/**
- * PHP OpenCloud library.
- *
- * @copyright Copyright 2013 Rackspace US, Inc. See COPYING for licensing information.
- * @license https://www.apache.org/licenses/LICENSE-2.0 Apache 2.0
- * @version 1.6.0
- * @author Glen Campbell <glen.campbell@rackspace.com>
- * @author Jamie Hannaford <jamie.hannaford@rackspace.com>
- */
-
-namespace OpenCloud\ObjectStore;
-
-use OpenCloud\Common\Service as CommonService;
-
-define('SWIFT_MAX_OBJECT_SIZE', 5 * 1024 * 1024 * 1024 + 1);
-
-/**
- * An abstract base class for common code shared between ObjectStore\Service
- * (container) and ObjectStore\CDNService (CDN containers).
- *
- * @todo Maybe we use Traits instead of this small abstract class?
- */
-abstract class AbstractService extends CommonService
-{
-
- const MAX_CONTAINER_NAME_LEN = 256;
- const MAX_OBJECT_NAME_LEN = 1024;
- const MAX_OBJECT_SIZE = SWIFT_MAX_OBJECT_SIZE;
-
- /**
- * Creates a Container resource object.
- *
- * @param mixed $cdata The name of the container or an object from which to set values
- * @return OpenCloud\ObjectStore\Resource\Container
- */
- public function container($cdata = null)
- {
- return new Resource\Container($this, $cdata);
- }
-
- /**
- * Returns a Collection of Container objects.
- *
- * @param array $filter An array to filter the results
- * @return OpenCloud\Common\Collection
- */
- public function containerList(array $filter = array())
- {
- $filter['format'] = 'json';
-
- return $this->collection(
- 'OpenCloud\ObjectStore\Resource\Container', $this->url(null, $filter)
- );
- }
-
-}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/CDNService.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/CDNService.php
deleted file mode 100644
index 132d5f47ad6..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/CDNService.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-/**
- * PHP OpenCloud library.
- *
- * @copyright Copyright 2013 Rackspace US, Inc. See COPYING for licensing information.
- * @license https://www.apache.org/licenses/LICENSE-2.0 Apache 2.0
- * @version 1.6.0
- * @author Glen Campbell <glen.campbell@rackspace.com>
- * @author Jamie Hannaford <jamie.hannaford@rackspace.com>
- */
-
-namespace OpenCloud\ObjectStore;
-
-use OpenCloud\OpenStack;
-use OpenCloud\Common\Exceptions;
-
-/**
- * This is the CDN version of the ObjectStore service.
- */
-class CDNService extends AbstractService
-{
-
- /**
- * Creates a new CDNService object.
- *
- * This is a simple wrapper function around the parent Service construct,
- * but supplies defaults for the service type.
- *
- * @param OpenCloud\OpenStack $connection The connection object
- * @param string $serviceName The name of the service
- * @param string $serviceRegion The service's region
- * @param string $urlType The type of URL (normally 'publicURL')
- */
- public function __construct(
- OpenStack $connection,
- $serviceName = RAXSDK_OBJSTORE_NAME,
- $serviceRegion = RAXSDK_OBJSTORE_REGION,
- $urltype = RAXSDK_URL_PUBLIC
- ) {
- $this->getLogger()->info('Initializing CDN Service...');
-
- parent::__construct(
- $connection,
- 'rax:object-cdn',
- $serviceName,
- $serviceRegion,
- $urltype
- );
- }
-
- /**
- * Helps catch errors if someone calls the method on the
- * wrong object
- */
- public function CDN()
- {
- throw new Exceptions\CdnError(
- 'Invalid method call; no CDN() on the CDN object'
- );
- }
-
-}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/Resource/AbstractStorageObject.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/Resource/AbstractStorageObject.php
deleted file mode 100644
index c6799b22b7e..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/Resource/AbstractStorageObject.php
+++ /dev/null
@@ -1,170 +0,0 @@
-<?php
-/**
- * PHP OpenCloud library.
- *
- * @copyright Copyright 2013 Rackspace US, Inc. See COPYING for licensing information.
- * @license https://www.apache.org/licenses/LICENSE-2.0 Apache 2.0
- * @version 1.6.0
- * @author Glen Campbell <glen.campbell@rackspace.com>
- * @author Jamie Hannaford <jamie.hannaford@rackspace.com>
- */
-
-namespace OpenCloud\ObjectStore\Resource;
-
-use OpenCloud\Common\Base;
-use OpenCloud\Common\Metadata;
-use OpenCloud\Common\Exceptions\NameError;
-use OpenCloud\Common\Exceptions\MetadataPrefixError;
-use OpenCloud\Common\Request\Response\Http;
-
-/**
- * Abstract base class which implements shared functionality of ObjectStore
- * resources. Provides support, for example, for metadata-handling and other
- * features that are common to the ObjectStore components.
- */
-abstract class AbstractStorageObject extends Base
-{
-
- const ACCOUNT_META_PREFIX = 'X-Account-';
- const CONTAINER_META_PREFIX = 'X-Container-Meta-';
- const OBJECT_META_PREFIX = 'X-Object-Meta-';
- const CDNCONTAINER_META_PREFIX = 'X-Cdn-';
-
- /**
- * Metadata belonging to a resource.
- *
- * @var OpenCloud\Common\Metadata
- */
- public $metadata;
-
- /**
- * Initializes the metadata component
- */
- public function __construct()
- {
- $this->metadata = new Metadata;
- }
-
- /**
- * Given an Http response object, converts the appropriate headers
- * to metadata
- *
- * @param OpenCloud\Common\Request\Response\Http
- * @return void
- */
- public function getMetadata(Http $response)
- {
- $this->metadata = new Metadata;
- $this->metadata->setArray($response->headers(), $this->prefix());
- }
-
- /**
- * If object has metadata, return an associative array of headers.
- *
- * For example, if a DataObject has a metadata item named 'FOO',
- * then this would return array('X-Object-Meta-FOO'=>$value);
- *
- * @return array
- */
- public function metadataHeaders()
- {
- $headers = array();
-
- // only build if we have metadata
- if (is_object($this->metadata)) {
- foreach ($this->metadata as $key => $value) {
- $headers[$this->prefix() . $key] = $value;
- }
- }
-
- return $headers;
- }
-
- /**
- * Returns the displayable name of the object
- *
- * Can be overridden by child objects; *must* be overridden by child
- * objects if the object does not have a `name` attribute defined.
- *
- * @api
- * @throws NameError if attribute 'name' is not defined
- */
- public function name()
- {
- if (property_exists($this, 'name')) {
- return $this->name;
- } else {
- throw new NameError(sprintf(
- 'Name attribute does not exist for [%s]',
- get_class($this)
- ));
- }
- }
-
- /**
- * Override parent method.
- *
- * @return null
- */
- public static function jsonName()
- {
- return null;
- }
-
- /**
- * Override parent method.
- *
- * @return null
- */
- public static function jsonCollectionName()
- {
- return null;
- }
-
- /**
- * Override parent method.
- *
- * @return null
- */
- public static function jsonCollectionElement()
- {
- return null;
- }
-
- /**
- * Returns the proper prefix for the specified type of object
- *
- * @param string $type The type of object; derived from `get_class()` if not
- * specified.
- * @codeCoverageIgnore
- */
- private function prefix($type = null)
- {
- if ($type === null) {
- $parts = preg_split('/\\\/', get_class($this));
- $type = $parts[count($parts)-1];
- }
-
- switch($type) {
- case 'Account':
- $prefix = self::ACCOUNT_META_PREFIX;
- break;
- case 'CDNContainer':
- $prefix = self::CDNCONTAINER_META_PREFIX;
- break;
- case 'Container':
- $prefix = self::CONTAINER_META_PREFIX;
- break;
- case 'DataObject':
- $prefix = self::OBJECT_META_PREFIX;
- break;
- default:
- throw new MetadataPrefixError(sprintf(
- 'Unrecognized metadata type [%s]',
- $type
- ));
- }
-
- return $prefix;
- }
-}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/Resource/CDNContainer.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/Resource/CDNContainer.php
deleted file mode 100644
index 9b6367c87e0..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/Resource/CDNContainer.php
+++ /dev/null
@@ -1,298 +0,0 @@
-<?php
-/**
- * PHP OpenCloud library.
- *
- * @copyright Copyright 2013 Rackspace US, Inc. See COPYING for licensing information.
- * @license https://www.apache.org/licenses/LICENSE-2.0 Apache 2.0
- * @version 1.6.0
- * @author Glen Campbell <glen.campbell@rackspace.com>
- * @author Jamie Hannaford <jamie.hannaford@rackspace.com>
- */
-
-namespace OpenCloud\ObjectStore\Resource;
-
-use OpenCloud\Common\Service as AbstractService;
-use OpenCloud\Common\Lang;
-use OpenCloud\Common\Exceptions;
-use OpenCloud\ObjectStore\AbstractService as AbstractObjectService;
-
-/**
- * A container that has been CDN-enabled. Each CDN-enabled container has a unique
- * Uniform Resource Locator (URL) that can be combined with its object names and
- * openly distributed in web pages, emails, or other applications.
- */
-class CDNContainer extends AbstractStorageObject
-{
- /**
- * The name of the container.
- *
- * The only restrictions on container names is that they cannot contain a
- * forward slash (/) and must be less than 256 bytes in length. Please note
- * that the length restriction applies to the name after it has been URL
- * encoded. For example, a container named Course Docs would be URL encoded
- * as Course%20Docs - which is 13 bytes in length rather than the expected 11.
- *
- * @var string
- */
- public $name;
-
- /**
- * Count of how many objects exist in the container.
- *
- * @var int
- */
- public $count = 0;
-
- /**
- * The total bytes used in the container.
- *
- * @var int
- */
- public $bytes = 0;
-
- /**
- * The service object.
- *
- * @var AbstractService
- */
- private $service;
-
- /**
- * URL of the container.
- *
- * @var string
- */
- private $containerUrl;
-
- /**
- * Creates the container object
- *
- * Creates a new container object or, if the $cdata object is a string,
- * retrieves the named container from the object store. If $cdata is an
- * array or an object, then its values are used to set this object.
- *
- * @param OpenCloud\ObjectStore $service - the ObjectStore service
- * @param mixed $cdata - if supplied, the name of the object
- */
- public function __construct(AbstractService $service, $cdata = null)
- {
- $this->getLogger()->info('Initializing CDN Container Service...');
-
- parent::__construct();
-
- $this->service = $service;
-
- // Populate data if set
- $this->populate($cdata);
- }
-
- /**
- * Allow other objects to know what the primary key is.
- *
- * @return string
- */
- public function primaryKeyField()
- {
- return 'name';
- }
-
- /**
- * Returns the Service associated with the Container
- */
- public function getService()
- {
- return $this->service;
- }
-
- /**
- * Returns the URL of the container
- *
- * @return string
- * @param string $subresource not used; required for compatibility
- * @throws NoNameError
- */
- public function url($subresource = '')
- {
- if (strlen($this->name) == 0) {
- throw new Exceptions\NoNameError(
- Lang::translate('Container does not have an identifier')
- );
- }
-
- return Lang::noslash($this->getService()->url(rawurlencode($this->name)));
- }
-
- /**
- * Creates a new container with the specified attributes
- *
- * @param array $params array of parameters
- * @return boolean TRUE on success; FALSE on failure
- * @throws ContainerCreateError
- */
- public function create($params = array())
- {
- // Populate object and check container name
- $this->populate($params);
- $this->isValidName($this->name);
-
- // Dispatch
- $this->containerUrl = $this->url();
- $response = $this->getService()->request($this->url(), 'PUT', $this->metadataHeaders());
-
- // Check return code
- // @codeCoverageIgnoreStart
- if ($response->httpStatus() > 202) {
- throw new Exceptions\ContainerCreateError(sprintf(
- Lang::translate('Problem creating container [%s] status [%d] response [%s]'),
- $this->url(),
- $response->httpStatus(),
- $response->httpBody()
- ));
- }
- // @codeCoverageIgnoreEnd
-
- return true;
- }
-
- /**
- * Updates the metadata for a container
- *
- * @return boolean TRUE on success; FALSE on failure
- * @throws ContainerCreateError
- */
- public function update()
- {
- $response = $this->getService()->request($this->url(), 'POST', $this->metadataHeaders());
-
- // check return code
- // @codeCoverageIgnoreStart
- if ($response->httpStatus() > 204) {
- throw new Exceptions\ContainerCreateError(sprintf(
- Lang::translate('Problem updating container [%s] status [%d] response [%s]'),
- $this->Url(),
- $response->httpStatus(),
- $response->httpBody()
- ));
- }
- // @codeCoverageIgnoreEnd
-
- return true;
- }
-
- /**
- * Deletes the specified container
- *
- * @return boolean TRUE on success; FALSE on failure
- * @throws ContainerDeleteError
- */
- public function delete()
- {
- $response = $this->getService()->request($this->url(), 'DELETE');
-
- // validate the response code
- // @codeCoverageIgnoreStart
- if ($response->httpStatus() == 404) {
- throw new Exceptions\ContainerNotFoundError(sprintf(
- Lang::translate('Container [%s] not found'),
- $this->name
- ));
- }
-
- if ($response->httpStatus() == 409) {
- throw new Exceptions\ContainerNotEmptyError(sprintf(
- Lang::translate('Container [%s] must be empty before deleting'),
- $this->name
- ));
- }
-
- if ($response->httpStatus() >= 300) {
- throw new Exceptions\ContainerDeleteError(sprintf(
- Lang::translate('Problem deleting container [%s] status [%d] response [%s]'),
- $this->url(),
- $response->httpStatus(),
- $response->httpBody()
- ));
- return false;
- }
- // @codeCoverageIgnoreEnd
-
- return true;
- }
-
- /**
- * Loads the object from the service
- *
- * @return void
- */
- public function refresh($name = null, $url = null)
- {
- $response = $this->getService()->request(
- $this->url($name), 'HEAD', array('Accept' => '*/*')
- );
-
- // validate the response code
- // @codeCoverageIgnoreStart
- if ($response->HttpStatus() == 404) {
- throw new Exceptions\ContainerNotFoundError(sprintf(
- 'Container [%s] (%s) not found',
- $this->name,
- $this->url()
- ));
- }
-
- if ($response->HttpStatus() >= 300) {
- throw new Exceptions\HttpError(sprintf(
- 'Error retrieving Container, status [%d] response [%s]',
- $response->httpStatus(),
- $response->httpBody()
- ));
- }
-
- // check for headers (not metadata)
- foreach($response->headers() as $header => $value) {
- switch($header) {
- case 'X-Container-Object-Count':
- $this->count = $value;
- break;
- case 'X-Container-Bytes-Used':
- $this->bytes = $value;
- break;
- }
- }
- // @codeCoverageIgnoreEnd
-
- // parse the returned object
- $this->getMetadata($response);
- }
-
- /**
- * Validates that the container name is acceptable
- *
- * @param string $name the container name to validate
- * @return boolean TRUE if ok; throws an exception if not
- * @throws ContainerNameError
- */
- public function isValidName($name)
- {
- if (strlen($name) == 0) {
- throw new Exceptions\ContainerNameError(
- 'Container name cannot be blank'
- );
- }
-
- if (strpos($name, '/') !== false) {
- throw new Exceptions\ContainerNameError(
- 'Container name cannot contain "/"'
- );
- }
-
- if (strlen($name) > AbstractObjectService::MAX_CONTAINER_NAME_LEN) {
- throw new Exceptions\ContainerNameError(
- 'Container name is too long'
- );
- }
-
- return true;
- }
-
-}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/Resource/Container.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/Resource/Container.php
deleted file mode 100644
index 3a56ebd9fca..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/Resource/Container.php
+++ /dev/null
@@ -1,401 +0,0 @@
-<?php
-/**
- * PHP OpenCloud library.
- *
- * @copyright Copyright 2013 Rackspace US, Inc. See COPYING for licensing information.
- * @license https://www.apache.org/licenses/LICENSE-2.0 Apache 2.0
- * @version 1.6.0
- * @author Glen Campbell <glen.campbell@rackspace.com>
- * @author Jamie Hannaford <jamie.hannaford@rackspace.com>
- */
-
-namespace OpenCloud\ObjectStore\Resource;
-
-use OpenCloud\Common\Exceptions;
-use OpenCloud\Common\Lang;
-
-/**
- * A container is a storage compartment for your data and provides a way for you
- * to organize your data. You can think of a container as a folder in Windows®
- * or a directory in UNIX®. The primary difference between a container and these
- * other file system concepts is that containers cannot be nested.
- *
- * A container can also be CDN-enabled (for public access), in which case you
- * will need to interact with a CDNContainer object instead of this one.
- */
-class Container extends CDNContainer
-{
-
- /**
- * CDN container (if set).
- *
- * @var CDNContainer|null
- */
- private $cdn;
-
- /**
- * Sets the CDN container.
- *
- * @param OpenCloud\ObjectStore\Resource\CDNContainer $cdn
- */
- public function setCDN(CDNContainer $cdn)
- {
- $this->cdn = $cdn;
- }
-
- /**
- * Returns the CDN container.
- *
- * @returns CDNContainer
- */
- public function getCDN()
- {
- if (!$this->cdn) {
- throw new Exceptions\CdnNotAvailableError(
- Lang::translate('CDN-enabled container is not available')
- );
- }
-
- return $this->cdn;
- }
-
- /**
- * Backwards compatability.
- */
- public function CDN()
- {
- return $this->getCDN();
- }
-
- /**
- * Makes the container public via the CDN
- *
- * @api
- * @param integer $TTL the Time-To-Live for the CDN container; if NULL,
- * then the cloud's default value will be used for caching.
- * @throws CDNNotAvailableError if CDN services are not available
- * @return CDNContainer
- */
- public function enableCDN($ttl = null)
- {
- $url = $this->getService()->CDN()->url() . '/' . rawurlencode($this->name);
-
- $headers = $this->metadataHeaders();
-
- if ($ttl) {
-
- // Make sure we're dealing with a real figure
- if (!is_integer($ttl)) {
- throw new Exceptions\CdnTtlError(sprintf(
- Lang::translate('TTL value [%s] must be an integer'),
- $ttl
- ));
- }
-
- $headers['X-TTL'] = $ttl;
- }
-
- $headers['X-Log-Retention'] = 'True';
- $headers['X-CDN-Enabled'] = 'True';
-
- // PUT to the CDN container
- $response = $this->getService()->request($url, 'PUT', $headers);
-
- // check the response status
- // @codeCoverageIgnoreStart
- if ($response->httpStatus() > 202) {
- throw new Exceptions\CdnHttpError(sprintf(
- Lang::translate('HTTP error publishing to CDN, status [%d] response [%s]'),
- $response->httpStatus(),
- $response->httpBody()
- ));
- }
- // @codeCoverageIgnoreEnd
-
- // refresh the data
- $this->refresh();
-
- // return the CDN container object
- $cdn = new CDNContainer($this->getService()->getCDNService(), $this->name);
- $this->setCDN($cdn);
-
- return $cdn;
- }
-
- /**
- * Backwards compatability.
- */
- public function publishToCDN($ttl = null)
- {
- return $this->enableCDN($ttl);
- }
-
- /**
- * Disables the containers CDN function.
- *
- * Note that the container will still be available on the CDN until
- * its TTL expires.
- *
- * @api
- * @return void
- */
- public function disableCDN()
- {
- // Set necessary headers
- $headers['X-Log-Retention'] = 'False';
- $headers['X-CDN-Enabled'] = 'False';
-
- // PUT it to the CDN service
- $response = $this->getService()->request($this->CDNURL(), 'PUT', $headers);
-
- // check the response status
- // @codeCoverageIgnoreStart
- if ($response->httpStatus() != 201) {
- throw new Exceptions\CdnHttpError(sprintf(
- Lang::translate('HTTP error disabling CDN, status [%d] response [%s]'),
- $response->httpStatus(),
- $response->httpBody()
- ));
- }
- // @codeCoverageIgnoreEnd
-
- return true;
- }
-
- /**
- * Creates a static website from the container
- *
- * @api
- * @link http://docs.rackspace.com/files/api/v1/cf-devguide/content/Create_Static_Website-dle4000.html
- * @param string $index the index page (starting page) of the website
- * @return \OpenCloud\HttpResponse
- */
- public function createStaticSite($indexHtml)
- {
- $headers = array('X-Container-Meta-Web-Index' => $indexHtml);
- $response = $this->getService()->request($this->url(), 'POST', $headers);
-
- // check return code
- // @codeCoverageIgnoreStart
- if ($response->HttpStatus() > 204) {
- throw new Exceptions\ContainerError(sprintf(
- Lang::translate('Error creating static website for [%s], status [%d] response [%s]'),
- $this->name,
- $response->httpStatus(),
- $response->httpBody()
- ));
- }
- // @codeCoverageIgnoreEnd
-
- return $response;
- }
-
- /**
- * Sets the error page(s) for the static website
- *
- * @api
- * @link http://docs.rackspace.com/files/api/v1/cf-devguide/content/Set_Error_Pages_for_Static_Website-dle4005.html
- * @param string $name the name of the error page
- * @return \OpenCloud\HttpResponse
- */
- public function staticSiteErrorPage($name)
- {
- $headers = array('X-Container-Meta-Web-Error' => $name);
- $response = $this->getService()->request($this->url(), 'POST', $headers);
-
- // check return code
- // @codeCoverageIgnoreStart
- if ($response->httpStatus() > 204) {
- throw new Exceptions\ContainerError(sprintf(
- Lang::translate('Error creating static site error page for [%s], status [%d] response [%s]'),
- $this->name,
- $response->httpStatus(),
- $response->httpBody()
- ));
- }
-
- return $response;
- // @codeCoverageIgnoreEnd
- }
-
- /**
- * Returns the CDN URL of the container (if enabled)
- *
- * The CDNURL() is used to manage the container. Note that it is different
- * from the PublicURL() of the container, which is the publicly-accessible
- * URL on the network.
- *
- * @api
- * @return string
- */
- public function CDNURL()
- {
- return $this->getCDN()->url();
- }
-
- /**
- * Returns the Public URL of the container (on the CDN network)
- *
- */
- public function publicURL()
- {
- return $this->CDNURI();
- }
-
- /**
- * Returns the CDN info about the container
- *
- * @api
- * @return stdClass
- */
- public function CDNinfo($property = null)
- {
- // Not quite sure why this is here...
- // @codeCoverageIgnoreStart
- if ($this->getService() instanceof CDNService) {
- return $this->metadata;
- }
- // @codeCoverageIgnoreEnd
-
- // return NULL if the CDN container is not enabled
- if (!isset($this->getCDN()->metadata->Enabled)
- || $this->getCDN()->metadata->Enabled == 'False'
- ) {
- return null;
- }
-
- // check to see if it's set
- if (isset($this->getCDN()->metadata->$property)) {
- return trim($this->getCDN()->metadata->$property);
- } elseif ($property !== null) {
- return null;
- }
-
- // otherwise, return the whole metadata object
- return $this->getCDN()->metadata;
- }
-
- /**
- * Returns the CDN container URI prefix
- *
- * @api
- * @return string
- */
- public function CDNURI()
- {
- return $this->CDNinfo('Uri');
- }
-
- /**
- * Returns the SSL URI for the container
- *
- * @api
- * @return string
- */
- public function SSLURI()
- {
- return $this->CDNinfo('Ssl-Uri');
- }
-
- /**
- * Returns the streaming URI for the container
- *
- * @api
- * @return string
- */
- public function streamingURI()
- {
- return $this->CDNinfo('Streaming-Uri');
- }
-
- /**
- * Returns the IOS streaming URI for the container
- *
- * @api
- * @link http://docs.rackspace.com/files/api/v1/cf-devguide/content/iOS-Streaming-d1f3725.html
- * @return string
- */
- public function iosStreamingURI()
- {
- return $this->CDNinfo('Ios-Uri');
- }
-
- /**
- * Creates a Collection of objects in the container
- *
- * @param array $params associative array of parameter values.
- * * account/tenant - The unique identifier of the account/tenant.
- * * container- The unique identifier of the container.
- * * limit (Optional) - The number limit of results.
- * * marker (Optional) - Value of the marker, that the object names
- * greater in value than are returned.
- * * end_marker (Optional) - Value of the marker, that the object names
- * less in value than are returned.
- * * prefix (Optional) - Value of the prefix, which the returned object
- * names begin with.
- * * format (Optional) - Value of the serialized response format, either
- * json or xml.
- * * delimiter (Optional) - Value of the delimiter, that all the object
- * names nested in the container are returned.
- * @link http://api.openstack.org for a list of possible parameter
- * names and values
- * @return OpenCloud\Collection
- * @throws ObjFetchError
- */
- public function objectList($params = array())
- {
- // construct a query string out of the parameters
- $params['format'] = 'json';
-
- $queryString = $this->makeQueryString($params);
-
- // append the query string to the URL
- $url = $this->url();
- if (strlen($queryString) > 0) {
- $url .= '?' . $queryString;
- }
-
- return $this->getService()->collection(
- 'OpenCloud\ObjectStore\Resource\DataObject', $url, $this
- );
- }
-
- /**
- * Returns a new DataObject associated with this container
- *
- * @param string $name if supplied, the name of the object to return
- * @return DataObject
- */
- public function dataObject($name = null)
- {
- return new DataObject($this, $name);
- }
-
- /**
- * Refreshes, then associates the CDN container
- */
- public function refresh($id = null, $url = null)
- {
- parent::refresh($id, $url);
-
- // @codeCoverageIgnoreStart
- if ($this->getService() instanceof CDNService) {
- return;
- }
-
-
- if (null !== ($cdn = $this->getService()->CDN())) {
- try {
- $this->cdn = new CDNContainer(
- $cdn,
- $this->name
- );
- } catch (Exceptions\ContainerNotFoundError $e) {
- $this->cdn = new CDNContainer($cdn);
- $this->cdn->name = $this->name;
- }
- }
- // @codeCoverageIgnoreEnd
- }
-
-}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/Resource/DataObject.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/Resource/DataObject.php
deleted file mode 100644
index 443df1f651f..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/Resource/DataObject.php
+++ /dev/null
@@ -1,941 +0,0 @@
-<?php
-/**
- * PHP OpenCloud library.
- *
- * @copyright Copyright 2013 Rackspace US, Inc. See COPYING for licensing information.
- * @license https://www.apache.org/licenses/LICENSE-2.0 Apache 2.0
- * @version 1.6.0
- * @author Glen Campbell <glen.campbell@rackspace.com>
- * @author Jamie Hannaford <jamie.hannaford@rackspace.com>
- */
-
-namespace OpenCloud\ObjectStore\Resource;
-
-use finfo as FileInfo;
-use OpenCloud\Common\Lang;
-use OpenCloud\Common\Exceptions;
-use OpenCloud\ObjectStore\AbstractService;
-use OpenCloud\Common\Request\Response\Http;
-
-/**
- * Objects are the basic storage entities in Cloud Files. They represent the
- * files and their optional metadata you upload to the system. When you upload
- * objects to Cloud Files, the data is stored as-is (without compression or
- * encryption) and consists of a location (container), the object's name, and
- * any metadata you assign consisting of key/value pairs.
- */
-class DataObject extends AbstractStorageObject
-{
- /**
- * Object name. The only restriction on object names is that they must be
- * less than 1024 bytes in length after URL encoding.
- *
- * @var string
- */
- public $name;
-
- /**
- * Hash value of the object.
- *
- * @var string
- */
- public $hash;
-
- /**
- * Size of object in bytes.
- *
- * @var string
- */
- public $bytes;
-
- /**
- * Date of last modification.
- *
- * @var string
- */
- public $last_modified;
-
- /**
- * Object's content type.
- *
- * @var string
- */
- public $content_type;
-
- /**
- * Object's content length.
- *
- * @var string
- */
- public $content_length;
-
- /**
- * Other headers set for this object (e.g. Access-Control-Allow-Origin)
- *
- * @var array
- */
- public $extra_headers = array();
-
- /**
- * Whether or not to calculate and send an ETag on create.
- *
- * @var bool
- */
- public $send_etag = true;
-
- /**
- * The data contained by the object.
- *
- * @var string
- */
- private $data;
-
- /**
- * The ETag value.
- *
- * @var string
- */
- private $etag;
-
- /**
- * The parent container of this object.
- *
- * @var CDNContainer
- */
- private $container;
-
- /**
- * Is this data object a pseudo directory?
- *
- * @var bool
- */
- private $directory = false;
-
- /**
- * Used to translate header values (returned by requests) into properties.
- *
- * @var array
- */
- private $headerTranslate = array(
- 'Etag' => 'hash',
- 'ETag' => 'hash',
- 'Last-Modified' => 'last_modified',
- 'Content-Length' => array('bytes', 'content_length'),
- );
-
- /**
- * These properties can be freely set by the user for CRUD operations.
- *
- * @var array
- */
- private $allowedProperties = array(
- 'name',
- 'content_type',
- 'extra_headers',
- 'send_etag'
- );
-
- /**
- * Option for clearing the status cache when objects are uploaded to API.
- * By default, it is set to FALSE for performance; but if you have files
- * that are rapidly and very often updated, you might want to clear the status
- * cache so PHP reads the files directly, instead of relying on the cache.
- *
- * @link http://php.net/manual/en/function.clearstatcache.php
- * @var bool
- */
- public $clearStatusCache = false;
-
- /**
- * A DataObject is related to a container and has a name
- *
- * If `$name` is specified, then it attempts to retrieve the object from the
- * object store.
- *
- * @param Container $container the container holding this object
- * @param mixed $cdata if an object or array, it is treated as values
- * with which to populate the object. If it is a string, it is
- * treated as a name and the object's info is retrieved from
- * the service.
- * @return void
- */
- public function __construct($container, $cdata = null)
- {
- parent::__construct();
-
- $this->container = $container;
-
- // For pseudo-directories, we need to ensure the name is set
- if (!empty($cdata->subdir)) {
- $this->name = $cdata->subdir;
- $this->directory = true;
- } else {
- $this->populate($cdata);
- }
- }
-
- /**
- * Is this data object a pseudo-directory?
- *
- * @return bool
- */
- public function isDirectory()
- {
- return $this->directory;
- }
-
- /**
- * Allow other objects to know what the primary key is.
- *
- * @return string
- */
- public function primaryKeyField()
- {
- return 'name';
- }
-
- /**
- * Is this a real file?
- *
- * @param string $filename
- * @return bool
- */
- private function isRealFile($filename)
- {
- return $filename != '/dev/null' && $filename != 'NUL';
- }
-
- /**
- * Set this file's content type.
- *
- * @param string $contentType
- */
- public function setContentType($contentType)
- {
- $this->content_type = $contentType;
- }
-
- /**
- * Return the content type.
- *
- * @return string
- */
- public function getContentType()
- {
- return $this->content_type;
- }
-
- /**
- * Returns the URL of the data object
- *
- * If the object is new and doesn't have a name, then an exception is
- * thrown.
- *
- * @param string $subresource Not used
- * @return string
- * @throws NoNameError
- */
- public function url($subresource = '')
- {
- if (!$this->name) {
- throw new Exceptions\NoNameError(Lang::translate('Object has no name'));
- }
-
- return Lang::noslash(
- $this->container->url()) . '/' . str_replace('%2F', '/', rawurlencode($this->name)
- );
- }
-
- /**
- * Creates (or updates; both the same) an instance of the object
- *
- * @api
- * @param array $params an optional associative array that can contain the
- * 'name' and 'content_type' of the object
- * @param string $filename if provided, then the object is loaded from the
- * specified file
- * @return boolean
- * @throws CreateUpdateError
- */
- public function create($params = array(), $filename = null, $extractArchive = null)
- {
- // Set and validate params
- $this->setParams($params);
-
- // assume no file upload
- $fp = false;
-
- // if the filename is provided, process it
- if ($filename) {
-
- if (!$fp = @fopen($filename, 'r')) {
- throw new Exceptions\IOError(sprintf(
- Lang::translate('Could not open file [%s] for reading'),
- $filename
- ));
- }
-
- // @todo Maybe, for performance, we could set the "clear status cache"
- // feature to false by default - but allow users to set to true if required
- clearstatcache($this->clearStatusCache === true, $filename);
-
- // Cast filesize as a floating point
- $filesize = (float) filesize($filename);
-
- // Check it's below a reasonable size, and set
- // @codeCoverageIgnoreStart
- if ($filesize > AbstractService::MAX_OBJECT_SIZE) {
- throw new Exceptions\ObjectError("File size exceeds maximum object size.");
- }
- // @codeCoverageIgnoreEnd
- $this->content_length = $filesize;
-
- // Guess the content type if necessary
- if (!$this->getContentType() && $this->isRealFile($filename)) {
- $this->setContentType($this->inferContentType($filename));
- }
-
- // Send ETag checksum if necessary
- if ($this->send_etag) {
- $this->etag = md5_file($filename);
- }
-
- // Announce to the world
- $this->getLogger()->info('Uploading {size} bytes from {name}', array(
- 'size' => $filesize,
- 'name' => $filename
- ));
-
- } else {
- // compute the length
- $this->content_length = strlen($this->data);
-
- if ($this->send_etag) {
- $this->etag = md5($this->data);
- }
- }
-
- // Only allow supported archive types
- // http://docs.rackspace.com/files/api/v1/cf-devguide/content/Extract_Archive-d1e2338.html
- $extractArchiveUrlArg = '';
-
- if ($extractArchive) {
- if ($extractArchive !== "tar.gz" && $extractArchive !== "tar.bz2") {
- throw new Exceptions\ObjectError(
- "Extract Archive only supports tar.gz and tar.bz2"
- );
- } else {
- $extractArchiveUrlArg = "?extract-archive=" . $extractArchive;
- $this->etag = null;
- $this->setContentType('');
- }
- }
-
- // Set headers
- $headers = $this->metadataHeaders();
-
- if (!empty($this->etag)) {
- $headers['ETag'] = $this->etag;
- }
-
- // Content-Type is no longer required; if not specified, it will
- // attempt to guess based on the file extension.
- if (!$this->getContentType()) {
- $headers['Content-Type'] = $this->getContentType();
- }
-
- $headers['Content-Length'] = $this->content_length;
-
- // Merge in extra headers
- if (!empty($this->extra_headers)) {
- $headers = $this->extra_headers + $headers;
- }
-
- // perform the request
- $response = $this->getService()->request(
- $this->url() . $extractArchiveUrlArg,
- 'PUT',
- $headers,
- $fp ? $fp : $this->data
- );
-
- // check the status
- // @codeCoverageIgnoreStart
- if (($status = $response->httpStatus()) >= 300) {
- throw new Exceptions\CreateUpdateError(sprintf(
- Lang::translate('Problem saving/updating object [%s] HTTP status [%s] response [%s]'),
- $this->url() . $extractArchiveUrlArg,
- $status,
- $response->httpBody()
- ));
- }
- // @codeCoverageIgnoreEnd
-
- // set values from response
- $this->saveResponseHeaders($response);
-
- // close the file handle
- if ($fp) {
- fclose($fp);
- }
-
- return $response;
- }
-
- /**
- * Update() is provided as an alias for the Create() method
- *
- * Since update and create both use a PUT request, the different functions
- * may allow the developer to distinguish between the semantics in his or
- * her application.
- *
- * @api
- * @param array $params an optional associative array that can contain the
- * 'name' and 'type' of the object
- * @param string $filename if provided, the object is loaded from the file
- * @return boolean
- */
- public function update($params = array(), $filename = '')
- {
- return $this->create($params, $filename);
- }
-
- /**
- * UpdateMetadata() - updates headers
- *
- * Updates metadata headers
- *
- * @api
- * @param array $params an optional associative array that can contain the
- * 'name' and 'type' of the object
- * @return boolean
- */
- public function updateMetadata($params = array())
- {
- $this->setParams($params);
-
- // set the headers
- $headers = $this->metadataHeaders();
- $headers['Content-Type'] = $this->getContentType();
-
- $response = $this->getService()->request(
- $this->url(),
- 'POST',
- $headers
- );
-
- // check the status
- // @codeCoverageIgnoreStart
- if (($stat = $response->httpStatus()) >= 204) {
- throw new Exceptions\UpdateError(sprintf(
- Lang::translate('Problem updating object [%s] HTTP status [%s] response [%s]'),
- $this->url(),
- $stat,
- $response->httpBody()
- ));
- }
- // @codeCoverageIgnoreEnd
-
- return $response;
- }
-
- /**
- * Deletes an object from the Object Store
- *
- * Note that we can delete without retrieving by specifying the name in the
- * parameter array.
- *
- * @api
- * @param array $params an array of parameters
- * @return HttpResponse if successful; FALSE if not
- * @throws DeleteError
- */
- public function delete($params = array())
- {
- $this->setParams($params);
-
- $response = $this->getService()->request($this->url(), 'DELETE');
-
- // check the status
- // @codeCoverageIgnoreStart
- if (($stat = $response->httpStatus()) >= 300) {
- throw new Exceptions\DeleteError(sprintf(
- Lang::translate('Problem deleting object [%s] HTTP status [%s] response [%s]'),
- $this->url(),
- $stat,
- $response->httpBody()
- ));
- }
- // @codeCoverageIgnoreEnd
-
- return $response;
- }
-
- /**
- * Copies the object to another container/object
- *
- * Note that this function, because it operates within the Object Store
- * itself, is much faster than downloading the object and re-uploading it
- * to a new object.
- *
- * @param DataObject $target the target of the COPY command
- */
- public function copy(DataObject $target)
- {
- $uri = sprintf('/%s/%s', $target->container()->name(), $target->name());
-
- $this->getLogger()->info('Copying object to [{uri}]', array('uri' => $uri));
-
- $response = $this->getService()->request(
- $this->url(),
- 'COPY',
- array('Destination' => $uri)
- );
-
- // check response code
- // @codeCoverageIgnoreStart
- if ($response->httpStatus() > 202) {
- throw new Exceptions\ObjectCopyError(sprintf(
- Lang::translate('Error copying object [%s], status [%d] response [%s]'),
- $this->url(),
- $response->httpStatus(),
- $response->httpBody()
- ));
- }
- // @codeCoverageIgnoreEnd
-
- return $response;
- }
-
- /**
- * Returns the container of the object
- *
- * @return Container
- */
- public function container()
- {
- return $this->container;
- }
-
- /**
- * returns the TEMP_URL for the object
- *
- * Some notes:
- * * The `$secret` value is arbitrary; it must match the value set for
- * the `X-Account-Meta-Temp-URL-Key` on the account level. This can be
- * set by calling `$service->SetTempUrlSecret($secret)`.
- * * The `$expires` value is the number of seconds you want the temporary
- * URL to be valid for. For example, use `60` to make it valid for a
- * minute
- * * The `$method` must be either GET or PUT. No other methods are
- * supported.
- *
- * @param string $secret the shared secret
- * @param integer $expires the expiration time (in seconds)
- * @param string $method either GET or PUT
- * @return string the temporary URL
- */
- public function tempUrl($secret, $expires, $method)
- {
- $method = strtoupper($method);
- $expiry_time = time() + $expires;
-
- // check for proper method
- if ($method != 'GET' && $method != 'PUT') {
- throw new Exceptions\TempUrlMethodError(sprintf(
- Lang::translate(
- 'Bad method [%s] for TempUrl; only GET or PUT supported'),
- $method
- ));
- }
-
- // construct the URL
- $url = $this->url();
- $path = urldecode(parse_url($url, PHP_URL_PATH));
-
- $hmac_body = "$method\n$expiry_time\n$path";
- $hash = hash_hmac('sha1', $hmac_body, $secret);
-
- $this->getLogger()->info('URL [{url}]; SIG [{sig}]; HASH [{hash}]', array(
- 'url' => $url,
- 'sig' => $hmac_body,
- 'hash' => $hash
- ));
-
- $temp_url = sprintf('%s?temp_url_sig=%s&temp_url_expires=%d', $url, $hash, $expiry_time);
-
- // debug that stuff
- $this->getLogger()->info('TempUrl generated [{url}]', array(
- 'url' => $temp_url
- ));
-
- return $temp_url;
- }
-
- /**
- * Sets object data from string
- *
- * This is a convenience function to permit the use of other technologies
- * for setting an object's content.
- *
- * @param string $data
- * @return void
- */
- public function setData($data)
- {
- $this->data = (string) $data;
- }
-
- /**
- * Return object's data as a string
- *
- * @return string the entire object
- */
- public function saveToString()
- {
- return $this->getService()->request($this->url())->httpBody();
- }
-
- /**
- * Saves the object's data to local filename
- *
- * Given a local filename, the Object's data will be written to the newly
- * created file.
- *
- * Example:
- * <code>
- * # ... authentication/connection/container code excluded
- * # ... see previous examples
- *
- * # Whoops! I deleted my local README, let me download/save it
- * #
- * $my_docs = $conn->get_container("documents");
- * $doc = $my_docs->get_object("README");
- *
- * $doc->SaveToFilename("/home/ej/cloudfiles/readme.restored");
- * </code>
- *
- * @param string $filename name of local file to write data to
- * @return boolean <kbd>TRUE</kbd> if successful
- * @throws IOException error opening file
- * @throws InvalidResponseException unexpected response
- */
- public function saveToFilename($filename)
- {
- if (!$fp = @fopen($filename, "wb")) {
- throw new Exceptions\IOError(sprintf(
- Lang::translate('Could not open file [%s] for writing'),
- $filename
- ));
- }
-
- $result = $this->getService()->request($this->url(), 'GET', array(), $fp);
-
- fclose($fp);
-
- return $result;
- }
-
- /**
- * Saves the object's to a stream filename
- *
- * Given a local filename, the Object's data will be written to the stream
- *
- * Example:
- * <code>
- * # ... authentication/connection/container code excluded
- * # ... see previous examples
- *
- * # If I want to write the README to a temporary memory string I
- * # do :
- * #
- * $my_docs = $conn->get_container("documents");
- * $doc = $my_docs->DataObject(array("name"=>"README"));
- *
- * $fp = fopen('php://temp', 'r+');
- * $doc->SaveToStream($fp);
- * fclose($fp);
- * </code>
- *
- * @param string $filename name of local file to write data to
- * @return boolean <kbd>TRUE</kbd> if successful
- * @throws IOException error opening file
- * @throws InvalidResponseException unexpected response
- */
- public function saveToStream($resource)
- {
- if (!is_resource($resource)) {
- throw new Exceptions\ObjectError(
- Lang::translate("Resource argument not a valid PHP resource."
- ));
- }
-
- return $this->getService()->request($this->url(), 'GET', array(), $resource);
- }
-
-
- /**
- * Returns the object's MD5 checksum
- *
- * Accessor method for reading Object's private ETag attribute.
- *
- * @api
- * @return string MD5 checksum hexidecimal string
- */
- public function getETag()
- {
- return $this->etag;
- }
-
- /**
- * Purges the object from the CDN
- *
- * Note that the object will still be served up to the time of its
- * TTL value.
- *
- * @api
- * @param string $email An email address that will be notified when
- * the object is purged.
- * @return void
- * @throws CdnError if the container is not CDN-enabled
- * @throws CdnHttpError if there is an HTTP error in the transaction
- */
- public function purgeCDN($email)
- {
- // @codeCoverageIgnoreStart
- if (!$cdn = $this->Container()->CDNURL()) {
- throw new Exceptions\CdnError(Lang::translate('Container is not CDN-enabled'));
- }
- // @codeCoverageIgnoreEnd
-
- $url = $cdn . '/' . $this->name;
- $headers['X-Purge-Email'] = $email;
- $response = $this->getService()->request($url, 'DELETE', $headers);
-
- // check the status
- // @codeCoverageIgnoreStart
- if ($response->httpStatus() > 204) {
- throw new Exceptions\CdnHttpError(sprintf(
- Lang::translate('Error purging object, status [%d] response [%s]'),
- $response->httpStatus(),
- $response->httpBody()
- ));
- }
- // @codeCoverageIgnoreEnd
-
- return true;
- }
-
- /**
- * Returns the CDN URL (for managing the object)
- *
- * Note that the DataObject::PublicURL() method is used to return the
- * publicly-available URL of the object, while the CDNURL() is used
- * to manage the object.
- *
- * @return string
- */
- public function CDNURL()
- {
- return $this->container()->CDNURL() . '/' . $this->name;
- }
-
- /**
- * Returns the object's Public CDN URL, if available
- *
- * @api
- * @param string $type can be 'streaming', 'ssl', 'ios-streaming',
- * or anything else for the
- * default URL. For example, `$object->PublicURL('ios-streaming')`
- * @return string
- */
- public function publicURL($type = null)
- {
- if (!$prefix = $this->container()->CDNURI()) {
- return null;
- }
-
- switch(strtoupper($type)) {
- case 'SSL':
- $url = $this->container()->SSLURI().'/'.$this->name;
- break;
- case 'STREAMING':
- $url = $this->container()->streamingURI().'/'.$this->name;
- break;
- case 'IOS':
- case 'IOS-STREAMING':
- $url = $this->container()->iosStreamingURI().'/'.$this->name;
- break;
- default:
- $url = $prefix.'/'.$this->name;
- break;
- }
-
- return $url;
- }
-
- /**
- * Sets parameters from an array and validates them.
- *
- * @param array $params Associative array of parameters
- * @return void
- */
- private function setParams(array $params = array())
- {
- // Inspect the user's array for any unapproved keys, and unset if necessary
- foreach (array_diff(array_keys($params), $this->allowedProperties) as $key) {
- $this->getLogger()->warning('You cannot use the {keyName} key when creating an object', array(
- 'keyName' => $key
- ));
- unset($params[$key]);
- }
-
- $this->populate($params);
- }
-
- /**
- * Retrieves a single object, parses headers
- *
- * @return void
- * @throws NoNameError, ObjFetchError
- */
- private function fetch()
- {
- if (!$this->name) {
- throw new Exceptions\NoNameError(Lang::translate('Cannot retrieve an unnamed object'));
- }
-
- $response = $this->getService()->request($this->url(), 'HEAD', array('Accept' => '*/*'));
-
- // check for errors
- // @codeCoverageIgnoreStart
- if ($response->httpStatus() >= 300) {
- throw new Exceptions\ObjFetchError(sprintf(
- Lang::translate('Problem retrieving object [%s]'),
- $this->url()
- ));
- }
- // @codeCoverageIgnoreEnd
-
- // set headers as metadata?
- $this->saveResponseHeaders($response);
-
- // parse the metadata
- $this->getMetadata($response);
- }
-
- /**
- * Extracts the headers from the response, and saves them as object
- * attributes. Additional name conversions are done where necessary.
- *
- * @param Http $response
- */
- private function saveResponseHeaders(Http $response, $fillExtraIfNotFound = true)
- {
- foreach ($response->headers() as $header => $value) {
- if (isset($this->headerTranslate[$header])) {
- // This header needs to be translated
- $property = $this->headerTranslate[$header];
- // Are there multiple properties that need to be set?
- if (is_array($property)) {
- foreach ($property as $subProperty) {
- $this->$subProperty = $value;
- }
- } else {
- $this->$property = $value;
- }
- } elseif ($fillExtraIfNotFound === true) {
- // Otherwise, stock extra headers
- $this->extra_headers[$header] = $value;
- }
- }
- }
-
- /**
- * Compatability.
- */
- public function refresh()
- {
- return $this->fetch();
- }
-
- /**
- * Returns the service associated with this object
- *
- * It's actually the object's container's service, so this method will
- * simplify things a bit.
- */
- private function getService()
- {
- return $this->container->getService();
- }
-
- /**
- * Performs an internal check to get the proper MIME type for an object
- *
- * This function would go over the available PHP methods to get
- * the MIME type.
- *
- * By default it will try to use the PHP fileinfo library which is
- * available from PHP 5.3 or as an PECL extension
- * (http://pecl.php.net/package/Fileinfo).
- *
- * It will get the magic file by default from the system wide file
- * which is usually available in /usr/share/magic on Unix or try
- * to use the file specified in the source directory of the API
- * (share directory).
- *
- * if fileinfo is not available it will try to use the internal
- * mime_content_type function.
- *
- * @param string $handle name of file or buffer to guess the type from
- * @return boolean <kbd>TRUE</kbd> if successful
- * @throws BadContentTypeException
- * @codeCoverageIgnore
- */
- private function inferContentType($handle)
- {
- if ($contentType = $this->getContentType()) {
- return $contentType;
- }
-
- $contentType = false;
-
- $filePath = (is_string($handle)) ? $handle : (string) $handle;
-
- if (function_exists("finfo_open")) {
-
- $magicPath = dirname(__FILE__) . "/share/magic";
- $finfo = new FileInfo(FILEINFO_MIME, file_exists($magicPath) ? $magicPath : null);
-
- if ($finfo) {
-
- $contentType = is_file($filePath)
- ? $finfo->file($handle)
- : $finfo->buffer($handle);
-
- /**
- * PHP 5.3 fileinfo display extra information like charset so we
- * remove everything after the ; since we are not into that stuff
- */
- if (null !== ($extraInfo = strpos($contentType, "; "))) {
- $contentType = substr($contentType, 0, $extraInfo);
- }
- }
-
- //unset($finfo);
- }
-
- if (!$contentType) {
- // Try different native function instead
- if (is_file((string) $handle) && function_exists("mime_content_type")) {
- $contentType = mime_content_type($handle);
- } else {
- $this->getLogger()->error('Content-Type cannot be found');
- }
- }
-
- return $contentType;
- }
-
-}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/Service.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/Service.php
deleted file mode 100644
index 571b33378ac..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/ObjectStore/Service.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-/**
- * PHP OpenCloud library.
- *
- * @copyright Copyright 2013 Rackspace US, Inc. See COPYING for licensing information.
- * @license https://www.apache.org/licenses/LICENSE-2.0 Apache 2.0
- * @version 1.6.0
- * @author Glen Campbell <glen.campbell@rackspace.com>
- * @author Jamie Hannaford <jamie.hannaford@rackspace.com>
- */
-
-namespace OpenCloud\ObjectStore;
-
-use OpenCloud\OpenStack;
-use OpenCloud\Common\Exceptions;
-use OpenCloud\Common\Lang;
-
-/**
- * The ObjectStore (Cloud Files) service.
- */
-class Service extends AbstractService
-{
-
- /**
- * This holds the associated CDN service (for Rackspace public cloud)
- * or is NULL otherwise. The existence of an object here is
- * indicative that the CDN service is available.
- */
- private $cdn;
-
- /**
- * Creates a new ObjectStore service object.
- *
- * @param OpenCloud\OpenStack $connection The connection object
- * @param string $serviceName The name of the service
- * @param string $serviceRegion The service's region
- * @param string $urlType The type of URL (normally 'publicURL')
- */
- public function __construct(
- OpenStack $connection,
- $serviceName = RAXSDK_OBJSTORE_NAME,
- $serviceRegion = RAXSDK_OBJSTORE_REGION,
- $urltype = RAXSDK_OBJSTORE_URLTYPE
- ) {
- $this->getLogger()->info('Initializing Container Service...');
-
- parent::__construct(
- $connection,
- 'object-store',
- $serviceName,
- $serviceRegion,
- $urltype
- );
-
- // establish the CDN container, if available
- try {
- $this->cdn = new CDNService(
- $connection,
- $serviceName . 'CDN',
- $serviceRegion,
- $urltype
- );
- } catch (Exceptions\EndpointError $e) {
- // If we have an endpoint error, then the CDN functionality is not
- // available. In this case, we silently ignore it.
- }
- }
-
- /**
- * Sets the shared secret value for the TEMP_URL
- *
- * @param string $secret the shared secret
- * @return HttpResponse
- */
- public function setTempUrlSecret($secret)
- {
- $response = $this->request(
- $this->url(),
- 'POST',
- array('X-Account-Meta-Temp-Url-Key' => $secret)
- );
-
- // @codeCoverageIgnoreStart
- if ($response->httpStatus() > 204) {
- throw new Exceptions\HttpError(sprintf(
- Lang::translate('Error in request, status [%d] for URL [%s] [%s]'),
- $response->httpStatus(),
- $this->url(),
- $response->httpBody()
- ));
- }
- // @codeCoverageIgnoreEnd
-
- return $response;
- }
-
- /**
- * Get the CDN service.
- *
- * @return null|CDNService
- */
- public function getCDNService()
- {
- return $this->cdn;
- }
-
- /**
- * Backwards compability.
- */
- public function CDN()
- {
- return $this->getCDNService();
- }
-
-}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/OpenStack.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/OpenStack.php
deleted file mode 100644
index c3e645a5406..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/OpenStack.php
+++ /dev/null
@@ -1,1198 +0,0 @@
-<?php
-/**
- * PHP OpenCloud library.
- *
- * @copyright Copyright 2013 Rackspace US, Inc. See COPYING for licensing information.
- * @license https://www.apache.org/licenses/LICENSE-2.0 Apache 2.0
- * @version 1.6.0
- * @author Glen Campbell <glen.campbell@rackspace.com>
- * @author Jamie Hannaford <jamie.hannaford@rackspace.com>
- */
-
-namespace OpenCloud;
-
-require_once __DIR__ . '/Globals.php';
-
-use OpenCloud\Common\Base;
-use OpenCloud\Common\Lang;
-use OpenCloud\Common\Exceptions;
-use OpenCloud\Common\ServiceCatalogItem;
-
-/**
- * The OpenStack class represents a relationship (or "connection")
- * between a user and a service.
- *
- * This is the primary entry point into an OpenStack system, and the only one
- * where the developer is required to know and provide the endpoint URL (in
- * all other cases, the endpoint is derived from the Service Catalog provided
- * by the authentication system).
- *
- * Since various providers have different mechanisms for authentication, users
- * will often use a subclass of OpenStack. For example, the Rackspace
- * class is provided for users of Rackspace's cloud services, and other cloud
- * providers are welcome to add their own subclasses as well.
- *
- * General usage example:
- * <code>
- * $username = 'My Username';
- * $secret = 'My Secret';
- * $connection = new OpenCloud\OpenStack($username, $secret);
- * // having established the connection, we can set some defaults
- * // this sets the default name and region of the Compute service
- * $connection->SetDefaults('Compute', 'cloudServersOpenStack', 'ORD');
- * // access a Compute service
- * $chicago = $connection->Compute();
- * // if we want to access a different service, we can:
- * $dallas = $connection->Compute('cloudServersOpenStack', 'DFW');
- * </code>
- */
-class OpenStack extends Base
-{
-
- /**
- * This holds the HTTP User-Agent: used for all requests to the services. It
- * is public so that, if necessary, it can be entirely overridden by the
- * developer. However, it's strongly recomended that you use the
- * appendUserAgent() method to APPEND your own User Agent identifier to the
- * end of this string; the user agent information can be very valuable to
- * service providers to track who is using their service.
- *
- * @var string
- */
- public $useragent = RAXSDK_USER_AGENT;
-
- protected $url;
- protected $secret = array();
- protected $token;
- protected $expiration = 0;
- protected $tenant;
- protected $catalog;
- protected $connectTimeout = RAXSDK_CONNECTTIMEOUT;
- protected $httpTimeout = RAXSDK_TIMEOUT;
- protected $overlimitTimeout = RAXSDK_OVERLIMIT_TIMEOUT;
-
- /**
- * This associative array holds default values used to identify each
- * service (and to select it from the Service Catalog). Use the
- * Compute::SetDefaults() method to change the default values, or
- * define the global constants (for example, RAXSDK_COMPUTE_NAME)
- * BEFORE loading the OpenCloud library:
- *
- * <code>
- * define('RAXSDK_COMPUTE_NAME', 'cloudServersOpenStack');
- * include('openstack.php');
- * </code>
- */
- protected $defaults = array(
- 'Compute' => array(
- 'name' => RAXSDK_COMPUTE_NAME,
- 'region' => RAXSDK_COMPUTE_REGION,
- 'urltype' => RAXSDK_COMPUTE_URLTYPE
- ),
- 'ObjectStore' => array(
- 'name' => RAXSDK_OBJSTORE_NAME,
- 'region' => RAXSDK_OBJSTORE_REGION,
- 'urltype' => RAXSDK_OBJSTORE_URLTYPE
- ),
- 'Database' => array(
- 'name' => RAXSDK_DATABASE_NAME,
- 'region' => RAXSDK_DATABASE_REGION,
- 'urltype' => RAXSDK_DATABASE_URLTYPE
- ),
- 'Volume' => array(
- 'name' => RAXSDK_VOLUME_NAME,
- 'region' => RAXSDK_VOLUME_REGION,
- 'urltype' => RAXSDK_VOLUME_URLTYPE
- ),
- 'LoadBalancer' => array(
- 'name' => RAXSDK_LBSERVICE_NAME,
- 'region' => RAXSDK_LBSERVICE_REGION,
- 'urltype' => RAXSDK_LBSERVICE_URLTYPE
- ),
- 'DNS' => array(
- 'name' => RAXSDK_DNS_NAME,
- 'region' => RAXSDK_DNS_REGION,
- 'urltype' => RAXSDK_DNS_URLTYPE
- ),
- 'Orchestration' => array(
- 'name' => RAXSDK_ORCHESTRATION_NAME,
- 'region' => RAXSDK_ORCHESTRATION_REGION,
- 'urltype' => RAXSDK_ORCHESTRATION_URLTYPE
- ),
- 'CloudMonitoring' => array(
- 'name' => RAXSDK_MONITORING_NAME,
- 'region' => RAXSDK_MONITORING_REGION,
- 'urltype' => RAXSDK_MONITORING_URLTYPE
- ),
- 'Autoscale' => array(
- 'name' => RAXSDK_AUTOSCALE_NAME,
- 'region' => RAXSDK_AUTOSCALE_REGION,
- 'urltype' => RAXSDK_AUTOSCALE_URLTYPE
- )
- );
-
- private $_user_write_progress_callback_func;
- private $_user_read_progress_callback_func;
-
- /**
- * Tracks file descriptors used by streaming downloads
- *
- * This will permit multiple simultaneous streaming downloads; the
- * key is the URL of the object, and the value is its file descriptor.
- *
- * To prevent memory overflows, each array element is deleted when
- * the end of the file is reached.
- */
- private $fileDescriptors = array();
-
- /**
- * array of options to pass to the CURL request object
- */
- private $curlOptions = array();
-
- /**
- * list of attributes to export/import
- */
- private $exportItems = array(
- 'token',
- 'expiration',
- 'tenant',
- 'catalog'
- );
-
- /**
- * Creates a new OpenStack object
- *
- * The OpenStack object needs two bits of information: the URL to
- * authenticate against, and a "secret", which is an associative array
- * of name/value pairs. Usually, the secret will be a username and a
- * password, but other values may be required by different authentication
- * systems. For example, OpenStack Keystone requires a username and
- * password, but Rackspace uses a username, tenant ID, and API key.
- * (See OpenCloud\Rackspace for that.)
- *
- * @param string $url - the authentication endpoint URL
- * @param array $secret - an associative array of auth information:
- * * username
- * * password
- * @param array $options - CURL options to pass to the HttpRequest object
- */
- public function __construct($url, array $secret, array $options = array())
- {
- // check for supported version
- // @codeCoverageIgnoreStart
- $version = phpversion();
- if ($version < '5.3.1') {
- throw new Exceptions\UnsupportedVersionError(sprintf(
- Lang::translate('PHP version [%s] is not supported'),
- $version
- ));
- }
- // @codeCoverageIgnoreEnd
-
- // Start processing
- $this->getLogger()->info(Lang::translate('Initializing OpenStack client'));
-
- // Set properties
- $this->setUrl($url);
- $this->setSecret($secret);
- $this->setCurlOptions($options);
- }
-
- /**
- * Set user agent.
- *
- * @param string $useragent
- * @return OpenCloud\OpenStack
- */
- public function setUserAgent($useragent)
- {
- $this->useragent = $useragent;
-
- return $this;
- }
-
- /**
- * Allows the user to append a user agent string
- *
- * Programs that are using these bindings are encouraged to add their
- * user agent to the one supplied by this SDK. This will permit cloud
- * providers to track users so that they can provide better service.
- *
- * @param string $agent an arbitrary user-agent string; e.g. "My Cloud App"
- * @return OpenCloud\OpenStack
- */
- public function appendUserAgent($useragent)
- {
- $this->useragent .= ';' . $useragent;
-
- return $this;
- }
-
- /**
- * Get user agent.
- *
- * @return string
- */
- public function getUserAgent()
- {
- return $this->useragent;
- }
-
- /**
- * Sets the URL which the client will access.
- *
- * @param string $url
- * @return OpenCloud\OpenStack
- */
- public function setUrl($url)
- {
- $this->url = $url;
-
- return $this;
- }
-
- /**
- * Get the URL.
- *
- * @return string
- */
- public function getUrl()
- {
- return $this->url;
- }
-
- /**
- * Set the secret for the client.
- *
- * @param array $secret
- * @return OpenCloud\OpenStack
- */
- public function setSecret(array $secret = array())
- {
- $this->secret = $secret;
-
- return $this;
- }
-
- /**
- * Get the secret.
- *
- * @return array
- */
- public function getSecret()
- {
- return $this->secret;
- }
-
- /**
- * Set the token for this client.
- *
- * @param string $token
- * @return OpenCloud\OpenStack
- */
- public function setToken($token)
- {
- $this->token = $token;
-
- return $this;
- }
-
- /**
- * Get the token for this client.
- *
- * @return string
- */
- public function getToken()
- {
- return $this->token;
- }
-
- /**
- * Set the expiration for this token.
- *
- * @param int $expiration
- * @return OpenCloud\OpenStack
- */
- public function setExpiration($expiration)
- {
- $this->expiration = $expiration;
-
- return $this;
- }
-
- /**
- * Get the expiration time.
- *
- * @return int
- */
- public function getExpiration()
- {
- return $this->expiration;
- }
-
- /**
- * Set the tenant for this client.
- *
- * @param string $tenant
- * @return OpenCloud\OpenStack
- */
- public function setTenant($tenant)
- {
- $this->tenant = $tenant;
-
- return $this;
- }
-
- /**
- * Get the tenant for this client.
- *
- * @return string
- */
- public function getTenant()
- {
- return $this->tenant;
- }
-
- /**
- * Set the service catalog.
- *
- * @param mixed $catalog
- * @return OpenCloud\OpenStack
- */
- public function setCatalog($catalog)
- {
- $this->catalog = $catalog;
-
- return $this;
- }
-
- /**
- * Get the service catalog.
- *
- * @return array
- */
- public function getCatalog()
- {
- return $this->catalog;
- }
-
- /**
- * Set (all) the cURL options.
- *
- * @param array $options
- * @return OpenCloud\OpenStack
- */
- public function setCurlOptions(array $options)
- {
- $this->curlOptions = $options;
-
- return $this;
- }
-
- /**
- * Get the cURL options.
- *
- * @return array
- */
- public function getCurlOptions()
- {
- return $this->curlOptions;
- }
-
- /**
- * Set a specific file descriptor (associated with a URL)
- *
- * @param string $key
- * @param resource $value
- * @return OpenCloud\OpenStack
- */
- public function setFileDescriptor($key, $value)
- {
- $this->descriptors[$key] = $value;
-
- return $this;
- }
-
- /**
- * Get a specific file descriptor (associated with a URL)
- *
- * @param string $key
- * @return resource|false
- */
- public function getFileDescriptor($key)
- {
- return (!isset($this->descriptors[$key])) ? false : $this->descriptors[$key];
- }
-
- /**
- * Get the items to be exported.
- *
- * @return array
- */
- public function getExportItems()
- {
- return $this->exportItems;
- }
-
- /**
- * Sets the connect timeout.
- *
- * @param int $timeout
- * @return OpenCloud\OpenStack
- */
- public function setConnectTimeout($timeout)
- {
- $this->connectTimeout = $timeout;
-
- return $this;
- }
-
- /**
- * Get the connect timeout.
- *
- * @return int
- */
- public function getConnectTimeout()
- {
- return $this->connectTimeout;
- }
-
- /**
- * Set the HTTP timeout.
- *
- * @param int $timeout
- * @return OpenCloud\OpenStack
- */
- public function setHttpTimeout($timeout)
- {
- $this->httpTimeout = $timeout;
-
- return $this;
- }
-
- /**
- * Get the HTTP timeout.
- *
- * @return int
- */
- public function getHttpTimeout()
- {
- return $this->httpTimeout;
- }
-
- /**
- * Set the overlimit timeout.
- *
- * @param int $timeout
- * @return OpenCloud\OpenStack
- */
- public function setOverlimitTimeout($timeout)
- {
- $this->overlimitTimeout = $timeout;
-
- return $this;
- }
-
- /**
- * Get the overlimit timeout.
- *
- * @return int
- */
- public function getOverlimitTimeout()
- {
- return $this->overlimitTimeout;
- }
-
- /**
- * Sets default values (an array) for a service. Each array must contain a
- * "name", "region" and "urltype" key.
- *
- * @param string $service
- * @param array $value
- * @return OpenCloud\OpenStack
- */
- public function setDefault($service, array $value = array())
- {
- if (isset($value['name']) && isset($value['region']) && isset($value['urltype'])) {
- $this->defaults[$service] = $value;
- }
-
- return $this;
- }
-
- /**
- * Get a specific default value for a service. If none exist, return FALSE.
- *
- * @param string $service
- * @return array|false
- */
- public function getDefault($service)
- {
- return (!isset($this->defaults[$service])) ? false : $this->defaults[$service];
- }
-
-/**
- * Sets the timeouts for the current connection
- *
- * @api
- * @param integer $t_http the HTTP timeout value (the max period that
- * the OpenStack object will wait for any HTTP request to complete).
- * Value is in seconds.
- * @param integer $t_conn the Connect timeout value (the max period
- * that the OpenStack object will wait to establish an HTTP
- * connection). Value is in seconds.
- * @param integer $t_overlimit the overlimit timeout value (the max period
- * that the OpenStack object will wait to retry on an overlimit
- * condition). Value is in seconds.
- * @return void
- */
- public function setTimeouts($httpTimeout, $connectTimeout = null, $overlimitTimeout = null)
- {
- $this->setHttpTimeout($httpTimeout);
-
- if (isset($connectTimeout)) {
- $this->setConnectTimeout($connectTimeout);
- }
-
- if (isset($overlimitTimeout)) {
- $this->setOverlimitTimeout($overlimitTimeout);
- }
- }
-
- /**
- * Returns the URL of this object
- *
- * @api
- * @param string $subresource specified subresource
- * @return string
- */
- public function url($subresource='tokens')
- {
- return Lang::noslash($this->url) . '/' . $subresource;
- }
-
- /**
- * Returns the stored secret
- *
- * @return array
- */
- public function secret()
- {
- return $this->getSecret();
- }
-
- /**
- * Re-authenticates session if expired.
- */
- public function checkExpiration()
- {
- if ($this->hasExpired()) {
- $this->authenticate();
- }
- }
-
- /**
- * Checks whether token has expired.
- *
- * @return bool
- */
- public function hasExpired()
- {
- return time() > ($this->getExpiration() - RAXSDK_FUDGE);
- }
-
- /**
- * Returns the cached token; if it has expired, then it re-authenticates
- *
- * @api
- * @return string
- */
- public function token()
- {
- $this->checkExpiration();
-
- return $this->getToken();
- }
-
- /**
- * Returns the cached expiration time;
- * if it has expired, then it re-authenticates
- *
- * @api
- * @return string
- */
- public function expiration()
- {
- $this->checkExpiration();
-
- return $this->getExpiration();
- }
-
- /**
- * Returns the tenant ID, re-authenticating if necessary
- *
- * @api
- * @return string
- */
- public function tenant()
- {
- $this->checkExpiration();
-
- return $this->getTenant();
- }
-
- /**
- * Returns the service catalog object from the auth service
- *
- * @return \stdClass
- */
- public function serviceCatalog()
- {
- $this->checkExpiration();
-
- return $this->getCatalog();
- }
-
- /**
- * Returns a Collection of objects with information on services
- *
- * Note that these are informational (read-only) and are not actually
- * 'Service'-class objects.
- */
- public function serviceList()
- {
- return new Common\Collection($this, 'ServiceCatalogItem', $this->serviceCatalog());
- }
-
- /**
- * Creates and returns the formatted credentials to POST to the auth
- * service.
- *
- * @return string
- */
- public function credentials()
- {
- if (isset($this->secret['username']) && isset($this->secret['password'])) {
-
- $credentials = array(
- 'auth' => array(
- 'passwordCredentials' => array(
- 'username' => $this->secret['username'],
- 'password' => $this->secret['password']
- )
- )
- );
-
- if (isset($this->secret['tenantName'])) {
- $credentials['auth']['tenantName'] = $this->secret['tenantName'];
- }
-
- return json_encode($credentials);
-
- } else {
- throw new Exceptions\CredentialError(
- Lang::translate('Unrecognized credential secret')
- );
- }
- }
-
- /**
- * Authenticates using the supplied credentials
- *
- * @api
- * @return void
- * @throws AuthenticationError
- */
- public function authenticate()
- {
- // try to auth
- $response = $this->request(
- $this->url(),
- 'POST',
- array('Content-Type'=>'application/json'),
- $this->credentials()
- );
-
- $json = $response->httpBody();
-
- // check for errors
- if ($response->HttpStatus() >= 400) {
- throw new Exceptions\AuthenticationError(sprintf(
- Lang::translate('Authentication failure, status [%d], response [%s]'),
- $response->httpStatus(),
- $json
- ));
- }
-
- // Decode and check
- $object = json_decode($json);
- $this->checkJsonError();
-
- // Save the token information as well as the ServiceCatalog
- $this->setToken($object->access->token->id);
- $this->setExpiration(strtotime($object->access->token->expires));
- $this->setCatalog($object->access->serviceCatalog);
-
- /**
- * In some cases, the tenant name/id is not returned
- * as part of the auth token, so we check for it before
- * we set it. This occurs with pure Keystone, but not
- * with the Rackspace auth.
- */
- if (isset($object->access->token->tenant)) {
- $this->setTenant($object->access->token->tenant->id);
- }
- }
-
- /**
- * Performs a single HTTP request
- *
- * The request() method is one of the most frequently-used in the entire
- * library. It performs an HTTP request using the specified URL, method,
- * and with the supplied headers and body. It handles error and
- * exceptions for the request.
- *
- * @api
- * @param string url - the URL of the request
- * @param string method - the HTTP method (defaults to GET)
- * @param array headers - an associative array of headers
- * @param string data - either a string or a resource (file pointer) to
- * use as the request body (for PUT or POST)
- * @return HttpResponse object
- * @throws HttpOverLimitError, HttpUnauthorizedError, HttpForbiddenError
- */
- public function request($url, $method = 'GET', $headers = array(), $data = null)
- {
- $this->getLogger()->info('Resource [{url}] method [{method}] body [{body}]', array(
- 'url' => $url,
- 'method' => $method,
- 'data' => $data
- ));
-
- // get the request object
- $http = $this->getHttpRequestObject($url, $method, $this->getCurlOptions());
-
- // set various options
- $this->getLogger()->info('Headers: [{headers}]', array(
- 'headers' => print_r($headers, true)
- ));
-
- $http->setheaders($headers);
- $http->setHttpTimeout($this->getHttpTimeout());
- $http->setConnectTimeout($this->getConnectTimeout());
- $http->setOption(CURLOPT_USERAGENT, $this->getUserAgent());
-
- // data can be either a resource or a string
- if (is_resource($data)) {
- // loading from or writing to a file
- // set the appropriate callback functions
- switch($method) {
- // @codeCoverageIgnoreStart
- case 'GET':
- // need to save the file descriptor
- $this->setFileDescriptor($url, $data);
- // set the CURL options
- $http->setOption(CURLOPT_FILE, $data);
- $http->setOption(CURLOPT_WRITEFUNCTION, array($this, '_write_cb'));
- break;
- // @codeCoverageIgnoreEnd
- case 'PUT':
- case 'POST':
- // need to save the file descriptor
- $this->setFileDescriptor($url, $data);
- if (!isset($headers['Content-Length'])) {
- throw new Exceptions\HttpError(
- Lang::translate('The Content-Length: header must be specified for file uploads')
- );
- }
- $http->setOption(CURLOPT_UPLOAD, TRUE);
- $http->setOption(CURLOPT_INFILE, $data);
- $http->setOption(CURLOPT_INFILESIZE, $headers['Content-Length']);
- $http->setOption(CURLOPT_READFUNCTION, array($this, '_read_cb'));
- break;
- default:
- // do nothing
- break;
- }
- } elseif (is_string($data)) {
- $http->setOption(CURLOPT_POSTFIELDS, $data);
- } elseif (isset($data)) {
- throw new Exceptions\HttpError(
- Lang::translate('Unrecognized data type for PUT/POST body, must be string or resource')
- );
- }
-
- // perform the HTTP request; returns an HttpResult object
- $response = $http->execute();
-
- // handle and retry on overlimit errors
- if ($response->httpStatus() == 413) {
-
- $object = json_decode($response->httpBody());
- $this->checkJsonError();
-
- // @codeCoverageIgnoreStart
- if (isset($object->overLimit)) {
- /**
- * @TODO(glen) - The documentation says "retryAt", but
- * the field returned is "retryAfter". If the doc changes,
- * then there's no problem, but we'll need to fix this if
- * they change the code to match the docs.
- */
- $retryAfter = $object->overLimit->retryAfter;
- $sleepInterval = strtotime($retryAfter) - time();
-
- if ($sleepInterval && $sleepInterval <= $this->getOverlimitTimeout()) {
- sleep($sleepInterval);
- $response = $http->Execute();
- } else {
- throw new Exceptions\HttpOverLimitError(sprintf(
- Lang::translate('Over limit; next available request [%s][%s] is not for [%d] seconds at [%s]'),
- $method,
- $url,
- $sleepInterval,
- $retryAfter
- ));
- }
- }
- // @codeCoverageIgnoreEnd
- }
-
- // do some common error checking
- switch ($response->httpStatus()) {
- case 401:
- throw new Exceptions\HttpUnauthorizedError(sprintf(
- Lang::translate('401 Unauthorized for [%s] [%s]'),
- $url,
- $response->HttpBody()
- ));
- break;
- case 403:
- throw new Exceptions\HttpForbiddenError(sprintf(
- Lang::translate('403 Forbidden for [%s] [%s]'),
- $url,
- $response->HttpBody()
- ));
- break;
- case 413: // limit
- throw new Exceptions\HttpOverLimitError(sprintf(
- Lang::translate('413 Over limit for [%s] [%s]'),
- $url,
- $response->HttpBody()
- ));
- break;
- default:
- // everything is fine here, we're fine, how are you?
- break;
- }
-
- // free the handle
- $http->close();
-
- // return the HttpResponse object
- $this->getLogger()->info('HTTP STATUS [{code}]', array(
- 'code' => $response->httpStatus()
- ));
-
- return $response;
- }
-
- /**
- * Sets default values for name, region, URL type for a service
- *
- * Once these are set (and they can also be set by defining global
- * constants), then you do not need to specify these values when
- * creating new service objects.
- *
- * @api
- * @param string $service the name of a supported service; e.g. 'Compute'
- * @param string $name the service name; e.g., 'cloudServersOpenStack'
- * @param string $region the region name; e.g., 'LON'
- * @param string $urltype the type of URL to use; e.g., 'internalURL'
- * @return void
- * @throws UnrecognizedServiceError
- */
- public function setDefaults(
- $service,
- $name = null,
- $region = null,
- $urltype = null
- ) {
-
- if (!isset($this->defaults[$service])) {
- throw new Exceptions\UnrecognizedServiceError(sprintf(
- Lang::translate('Service [%s] is not recognized'), $service
- ));
- }
-
- if (isset($name)) {
- $this->defaults[$service]['name'] = $name;
- }
-
- if (isset($region)) {
- $this->defaults[$service]['region'] = $region;
- }
-
- if (isset($urltype)) {
- $this->defaults[$service]['urltype'] = $urltype;
- }
- }
-
- /**
- * Allows the user to define a function for tracking uploads
- *
- * This can be used to implement a progress bar or similar function. The
- * callback function is called with a single parameter, the length of the
- * data that is being uploaded on this call.
- *
- * @param callable $callback the name of a global callback function, or an
- * array($object, $functionname)
- * @return void
- */
- public function setUploadProgressCallback($callback)
- {
- $this->_user_write_progress_callback_func = $callback;
- }
-
- /**
- * Allows the user to define a function for tracking downloads
- *
- * This can be used to implement a progress bar or similar function. The
- * callback function is called with a single parameter, the length of the
- * data that is being downloaded on this call.
- *
- * @param callable $callback the name of a global callback function, or an
- * array($object, $functionname)
- * @return void
- */
- public function setDownloadProgressCallback($callback)
- {
- $this->_user_read_progress_callback_func = $callback;
- }
-
- /**
- * Callback function to handle reads for file uploads
- *
- * Internal function for handling file uploads. Note that, although this
- * function's visibility is public, this is only because it must be called
- * from the HttpRequest interface. This should NOT be called by users
- * directly.
- *
- * @param resource $ch a CURL handle
- * @param resource $fd a file descriptor
- * @param integer $length the amount of data to read
- * @return string the data read
- * @codeCoverageIgnore
- */
- public function _read_cb($ch, $fd, $length)
- {
- $data = fread($fd, $length);
- $len = strlen($data);
- if (isset($this->_user_write_progress_callback_func)) {
- call_user_func($this->_user_write_progress_callback_func, $len);
- }
- return $data;
- }
-
- /**
- * Callback function to handle writes for file downloads
- *
- * Internal function for handling file downloads. Note that, although this
- * function's visibility is public, this is only because it must be called
- * via the HttpRequest interface. This should NOT be called by users
- * directly.
- *
- * @param resource $ch a CURL handle
- * @param string $data the data to be written to a file
- * @return integer the number of bytes written
- * @codeCoverageIgnore
- */
- public function _write_cb($ch, $data)
- {
- $url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
-
- if (false === ($fp = $this->getFileDescriptor($url))) {
- throw new Exceptions\HttpUrlError(sprintf(
- Lang::translate('Cannot find file descriptor for URL [%s]'), $url)
- );
- }
-
- $dlen = strlen($data);
- fwrite($fp, $data, $dlen);
-
- // call used callback function
- if (isset($this->_user_read_progress_callback_func)) {
- call_user_func($this->_user_read_progress_callback_func, $dlen);
- }
-
- // MUST return the length to CURL
- return $dlen;
- }
-
- /**
- * exports saved token, expiration, tenant, and service catalog as an array
- *
- * This could be stored in a cache (APC or disk file) and reloaded using
- * ImportCredentials()
- *
- * @return array
- */
- public function exportCredentials()
- {
- $this->authenticate();
-
- $array = array();
-
- foreach ($this->getExportItems() as $key) {
- $array[$key] = $this->$key;
- }
-
- return $array;
- }
-
- /**
- * imports credentials from an array
- *
- * Takes the same values as ExportCredentials() and reuses them.
- *
- * @return void
- */
- public function importCredentials(array $values)
- {
- foreach ($this->getExportItems() as $item) {
- $this->$item = $values[$item];
- }
- }
-
- /********** FACTORY METHODS **********
- *
- * These methods are provided to permit easy creation of services
- * (for example, Nova or Swift) from a connection object. As new
- * services are supported, factory methods should be provided here.
- */
-
- /**
- * Creates a new ObjectStore object (Swift/Cloud Files)
- *
- * @api
- * @param string $name the name of the Object Storage service to attach to
- * @param string $region the name of the region to use
- * @param string $urltype the URL type (normally "publicURL")
- * @return ObjectStore
- */
- public function objectStore($name = null, $region = null, $urltype = null)
- {
- return $this->service('ObjectStore', $name, $region, $urltype);
- }
-
- /**
- * Creates a new Compute object (Nova/Cloud Servers)
- *
- * @api
- * @param string $name the name of the Compute service to attach to
- * @param string $region the name of the region to use
- * @param string $urltype the URL type (normally "publicURL")
- * @return Compute
- */
- public function compute($name = null, $region = null, $urltype = null)
- {
- return $this->service('Compute', $name, $region, $urltype);
- }
-
- /**
- * Creates a new Orchestration (heat) service object
- *
- * @api
- * @param string $name the name of the Compute service to attach to
- * @param string $region the name of the region to use
- * @param string $urltype the URL type (normally "publicURL")
- * @return Orchestration\Service
- * @codeCoverageIgnore
- */
- public function orchestration($name = null, $region = null, $urltype = null)
- {
- return $this->service('Orchestration', $name, $region, $urltype);
- }
-
- /**
- * Creates a new VolumeService (cinder) service object
- *
- * This is a factory method that is Rackspace-only (NOT part of OpenStack).
- *
- * @param string $name the name of the service (e.g., 'cloudBlockStorage')
- * @param string $region the region (e.g., 'DFW')
- * @param string $urltype the type of URL (e.g., 'publicURL');
- */
- public function volumeService($name = null, $region = null, $urltype = null)
- {
- return $this->service('Volume', $name, $region, $urltype);
- }
-
- /**
- * Generic Service factory method
- *
- * Contains code reused by the other service factory methods.
- *
- * @param string $class the name of the Service class to produce
- * @param string $name the name of the Compute service to attach to
- * @param string $region the name of the region to use
- * @param string $urltype the URL type (normally "publicURL")
- * @return Service (or subclass such as Compute, ObjectStore)
- * @throws ServiceValueError
- */
- public function service($class, $name = null, $region = null, $urltype = null)
- {
- // debug message
- $this->getLogger()->info('Factory for class [{class}] [{name}/{region}/{urlType}]', array(
- 'class' => $class,
- 'name' => $name,
- 'region' => $region,
- 'urlType' => $urltype
- ));
-
- // Strips off base namespace
- $class = preg_replace('#\\\?OpenCloud\\\#', '', $class);
-
- // check for defaults
- $default = $this->getDefault($class);
-
- // report errors
- if (!$name = $name ?: $default['name']) {
- throw new Exceptions\ServiceValueError(sprintf(
- Lang::translate('No value for %s name'),
- $class
- ));
- }
-
- if (!$region = $region ?: $default['region']) {
- throw new Exceptions\ServiceValueError(sprintf(
- Lang::translate('No value for %s region'),
- $class
- ));
- }
-
- if (!$urltype = $urltype ?: $default['urltype']) {
- throw new Exceptions\ServiceValueError(sprintf(
- Lang::translate('No value for %s URL type'),
- $class
- ));
- }
-
- // return the object
- $fullclass = 'OpenCloud\\' . $class . '\\Service';
-
- return new $fullclass($this, $name, $region, $urltype);
- }
-
- /**
- * returns a service catalog item
- *
- * This is a helper function used to list service catalog items easily
- */
- public function serviceCatalogItem($info = array())
- {
- return new ServiceCatalogItem($info);
- }
-
-}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Rackspace.php b/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Rackspace.php
deleted file mode 100644
index 41be608b347..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/OpenCloud/Rackspace.php
+++ /dev/null
@@ -1,132 +0,0 @@
-<?php
-/**
- * The Rackspace cloud/connection class (which uses different authentication
- * than the pure OpenStack class)
- *
- * @copyright 2012-2013 Rackspace Hosting, Inc.
- * See COPYING for licensing information
- *
- * @package phpOpenCloud
- * @version 1.0
- * @author Glen Campbell <glen.campbell@rackspace.com>
- */
-
-namespace OpenCloud;
-
-/**
- * Rackspace extends the OpenStack class with support for Rackspace's
- * API key and tenant requirements.
- *
- * The only difference between Rackspace and OpenStack is that the
- * Rackspace class generates credentials using the username
- * and API key, as required by the Rackspace authentication
- * service.
- *
- * Example:
- * <code>
- * $username = 'FRED';
- * $apiKey = '0900af093093788912388fc09dde090ffee09';
- * $conn = new Rackspace(
- * 'https://identity.api.rackspacecloud.com/v2.0/',
- * array(
- * 'username' => $username,
- * 'apiKey' => $apiKey
- * ));
- * </code>
- */
-class Rackspace extends OpenStack
-{
-
- //this is the JSON string for our new credentials
-const APIKEYTEMPLATE = <<<ENDCRED
-{ "auth": { "RAX-KSKEY:apiKeyCredentials": { "username": "%s",
- "apiKey": "%s"
- }
- }
-}
-ENDCRED;
-
- /**
- * Generates Rackspace API key credentials
- *
- * @return string
- */
- public function Credentials()
- {
- $sec = $this->Secret();
- if (isset($sec['username'])
- && isset($sec['apiKey'])
- ) {
- return sprintf(
- self::APIKEYTEMPLATE,
- $sec['username'],
- $sec['apiKey']
- );
- } else {
- return parent::Credentials();
- }
- }
-
- /**
- * Creates a new DbService (Database as a Service) object
- *
- * This is a factory method that is Rackspace-only (NOT part of OpenStack).
- *
- * @param string $name the name of the service (e.g., 'Cloud Databases')
- * @param string $region the region (e.g., 'DFW')
- * @param string $urltype the type of URL (e.g., 'publicURL');
- */
- public function DbService($name = null, $region = null, $urltype = null)
- {
- return $this->Service('Database', $name, $region, $urltype);
- }
-
- /**
- * Creates a new LoadBalancerService object
- *
- * This is a factory method that is Rackspace-only (NOT part of OpenStack).
- *
- * @param string $name the name of the service
- * (e.g., 'Cloud Load Balancers')
- * @param string $region the region (e.g., 'DFW')
- * @param string $urltype the type of URL (e.g., 'publicURL');
- */
- public function LoadBalancerService($name = null, $region = null, $urltype = null)
- {
- return $this->Service('LoadBalancer', $name, $region, $urltype);
- }
-
- /**
- * creates a new DNS service object
- *
- * This is a factory method that is currently Rackspace-only
- * (not available via the OpenStack class)
- */
- public function DNS($name = null, $region = null, $urltype = null)
- {
- return $this->Service('DNS', $name, $region, $urltype);
- }
-
- /**
- * creates a new CloudMonitoring service object
- *
- * This is a factory method that is currently Rackspace-only
- * (not available via the OpenStack class)
- */
- public function CloudMonitoring($name=null, $region=null, $urltype=null)
- {
- return $this->Service('CloudMonitoring', $name, $region, $urltype);
- }
-
- /**
- * creates a new Autoscale service object
- *
- * This is a factory method that is currently Rackspace-only
- * (not available via the OpenStack class)
- */
- public function Autoscale($name=null, $region=null, $urltype=null)
- {
- return $this->Service('Autoscale', $name, $region, $urltype);
- }
-
-}
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/openstack.php b/apps/files_external/3rdparty/php-opencloud/lib/openstack.php
deleted file mode 100644
index 738902d244e..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/openstack.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/**
- * provided for backwards compatibility
- *
- * @copyright 2013 Rackspace Hosting, Inc.
- * @license http://www.apache.org/licenses/LICENSE-2.0
- */
-require_once __DIR__.'/php-opencloud.php';
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/php-opencloud.php b/apps/files_external/3rdparty/php-opencloud/lib/php-opencloud.php
deleted file mode 100644
index 15ff034b92d..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/php-opencloud.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-/**
- * entry point for PHP-OpenCloud library
- *
- * @copyright 2013 Rackspace Hosting, Inc.
- * @license http://www.apache.org/licenses/LICENSE-2.0
- */
-require_once(__DIR__ . '/Autoload.php');
-require_once(__DIR__ . '/OpenCloud/Globals.php');
-
-$classLoader = new ClassLoader;
-$classLoader->registerNamespaces(array(
- 'OpenCloud' => array(__DIR__, __DIR__ . '/../tests')
-));
-$classLoader->register(); \ No newline at end of file
diff --git a/apps/files_external/3rdparty/php-opencloud/lib/rackspace.php b/apps/files_external/3rdparty/php-opencloud/lib/rackspace.php
deleted file mode 100644
index 738902d244e..00000000000
--- a/apps/files_external/3rdparty/php-opencloud/lib/rackspace.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/**
- * provided for backwards compatibility
- *
- * @copyright 2013 Rackspace Hosting, Inc.
- * @license http://www.apache.org/licenses/LICENSE-2.0
- */
-require_once __DIR__.'/php-opencloud.php';
diff --git a/apps/files_external/ajax/dropbox.php b/apps/files_external/ajax/dropbox.php
index 91c465500d0..bbedf8e9cac 100644
--- a/apps/files_external/ajax/dropbox.php
+++ b/apps/files_external/ajax/dropbox.php
@@ -5,6 +5,7 @@ require_once __DIR__ . '/../3rdparty/Dropbox/autoload.php';
OCP\JSON::checkAppEnabled('files_external');
OCP\JSON::checkLoggedIn();
OCP\JSON::callCheck();
+$l = OC_L10N::get('files_external');
if (isset($_POST['app_key']) && isset($_POST['app_secret'])) {
$oauth = new Dropbox_OAuth_Curl($_POST['app_key'], $_POST['app_secret']);
@@ -23,7 +24,7 @@ if (isset($_POST['app_key']) && isset($_POST['app_secret'])) {
'request_token_secret' => $token['token_secret'])));
} catch (Exception $exception) {
OCP\JSON::error(array('data' => array('message' =>
- 'Fetching request tokens failed. Verify that your Dropbox app key and secret are correct.')
+ $l->t('Fetching request tokens failed. Verify that your Dropbox app key and secret are correct.'))
));
}
break;
@@ -36,7 +37,7 @@ if (isset($_POST['app_key']) && isset($_POST['app_secret'])) {
'access_token_secret' => $token['token_secret']));
} catch (Exception $exception) {
OCP\JSON::error(array('data' => array('message' =>
- 'Fetching access tokens failed. Verify that your Dropbox app key and secret are correct.')
+ $l->t('Fetching access tokens failed. Verify that your Dropbox app key and secret are correct.'))
));
}
}
@@ -44,5 +45,5 @@ if (isset($_POST['app_key']) && isset($_POST['app_secret'])) {
}
}
} else {
- OCP\JSON::error(array('data' => array('message' => 'Please provide a valid Dropbox app key and secret.')));
+ OCP\JSON::error(array('data' => array('message' => $l->t('Please provide a valid Dropbox app key and secret.'))));
}
diff --git a/apps/files_external/ajax/google.php b/apps/files_external/ajax/google.php
index 2594a1780b3..13e74071846 100644
--- a/apps/files_external/ajax/google.php
+++ b/apps/files_external/ajax/google.php
@@ -6,6 +6,7 @@ require_once 'Google_Client.php';
OCP\JSON::checkAppEnabled('files_external');
OCP\JSON::checkLoggedIn();
OCP\JSON::callCheck();
+$l = OC_L10N::get('files_external');
if (isset($_POST['client_id']) && isset($_POST['client_secret']) && isset($_POST['redirect'])) {
$client = new Google_Client();
@@ -23,7 +24,7 @@ if (isset($_POST['client_id']) && isset($_POST['client_secret']) && isset($_POST
)));
} catch (Exception $exception) {
OCP\JSON::error(array('data' => array(
- 'message' => 'Step 1 failed. Exception: '.$exception->getMessage()
+ 'message' => $l->t('Step 1 failed. Exception: %s', array($exception->getMessage()))
)));
}
} else if ($step == 2 && isset($_POST['code'])) {
@@ -34,7 +35,7 @@ if (isset($_POST['client_id']) && isset($_POST['client_secret']) && isset($_POST
)));
} catch (Exception $exception) {
OCP\JSON::error(array('data' => array(
- 'message' => 'Step 2 failed. Exception: '.$exception->getMessage()
+ 'message' => $l->t('Step 2 failed. Exception: %s', array($exception->getMessage()))
)));
}
}
diff --git a/apps/files_external/l10n/pt_BR.php b/apps/files_external/l10n/pt_BR.php
index be5e8fcda8d..14add7fed9e 100644
--- a/apps/files_external/l10n/pt_BR.php
+++ b/apps/files_external/l10n/pt_BR.php
@@ -2,10 +2,10 @@
$TRANSLATIONS = array(
"External storage" => "Armazenamento Externo",
"Local" => "Local",
-"Location" => "Local",
+"Location" => "Localização",
"Amazon S3" => "Amazon S3",
"Key" => "Chave",
-"Secret" => "Secreta",
+"Secret" => "Segredo",
"Bucket" => "Cesta",
"Amazon S3 and compliant" => "Amazon S3 e compatível",
"Access Key" => "Chave de Acesso",
@@ -17,7 +17,7 @@ $TRANSLATIONS = array(
"Enable Path Style" => "Habilitar Estilo do Caminho",
"App key" => "Chave do Aplicativo",
"App secret" => "Segredo da Aplicação",
-"Host" => "Servidor",
+"Host" => "Host",
"Username" => "Nome de Usuário",
"Password" => "Senha",
"Root" => "Raiz",
@@ -35,7 +35,7 @@ $TRANSLATIONS = array(
"URL of identity endpoint (required for OpenStack Object Storage)" => "Ponto final de identidade da URL (obrigatório para armazenamento de objetos OpenStack)",
"Timeout of HTTP requests in seconds (optional)" => "Tempo limite de solicitações HTTP em segundos (opcional)",
"Share" => "Compartilhar",
-"SMB / CIFS using OC login" => "SMB / CIFS usando OC logon",
+"SMB / CIFS using OC login" => "SMB / CIFS usando OC login",
"Username as share" => "Nome de usuário como compartilhado",
"URL" => "URL",
"Secure https://" => "https:// segura",
@@ -43,7 +43,7 @@ $TRANSLATIONS = array(
"Access granted" => "Acesso concedido",
"Error configuring Dropbox storage" => "Erro ao configurar armazenamento do Dropbox",
"Grant access" => "Permitir acesso",
-"Please provide a valid Dropbox app key and secret." => "Por favor forneça um app key e secret válido do Dropbox",
+"Please provide a valid Dropbox app key and secret." => "Por favor forneça uma chave de aplicativo e segurança válidos para o Dropbox",
"Error configuring Google Drive storage" => "Erro ao configurar armazenamento do Google Drive",
"Personal" => "Pessoal",
"System" => "Sistema",
diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php
index 6f78e569b64..ec908fb068d 100755
--- a/apps/files_external/lib/config.php
+++ b/apps/files_external/lib/config.php
@@ -107,6 +107,10 @@ class OC_Mount_Config {
$loader = \OC\Files\Filesystem::getLoader();
$manager = \OC\Files\Filesystem::getMountManager();
foreach ($mountPoints as $mountPoint => $options) {
+ if (isset($options['options']['objectstore'])) {
+ $objectClass = $options['options']['objectstore']['class'];
+ $options['options']['objectstore'] = new $objectClass($options['options']['objectstore']);
+ }
if ($options['personal']){
$mount = new \OCA\Files_External\PersonalMount($options['class'], $mountPoint, $options['options'], $loader);
} else{
diff --git a/apps/files_external/lib/swift.php b/apps/files_external/lib/swift.php
index 03364867b0c..47ab3294673 100644
--- a/apps/files_external/lib/swift.php
+++ b/apps/files_external/lib/swift.php
@@ -22,21 +22,21 @@
namespace OC\Files\Storage;
-set_include_path(get_include_path() . PATH_SEPARATOR .
- \OC_App::getAppPath('files_external') . '/3rdparty/php-opencloud/lib');
-require_once 'openstack.php';
-
-use \OpenCloud;
-use \OpenCloud\Common\Exceptions;
+use Guzzle\Http\Exception\ClientErrorResponseException;
+use OpenCloud;
+use OpenCloud\Common\Exceptions;
+use OpenCloud\OpenStack;
+use OpenCloud\ObjectStore\Resource\DataObject;
+use OpenCloud\ObjectStore\Exception;
class Swift extends \OC\Files\Storage\Common {
/**
- * @var \OpenCloud\ObjectStore
+ * @var \OpenCloud\ObjectStore\Service
*/
private $connection;
/**
- * @var \OpenCloud\ObjectStore\Container
+ * @var \OpenCloud\ObjectStore\Resource\Container
*/
private $container;
/**
@@ -62,6 +62,8 @@ class Swift extends \OC\Files\Storage\Common {
$path = '.';
}
+ $path = str_replace('#', '%23', $path);
+
return $path;
}
@@ -82,12 +84,9 @@ class Swift extends \OC\Files\Storage\Common {
*/
private function doesObjectExist($path) {
try {
- $object = $this->container->DataObject($path);
+ $this->container->getPartialObject($path);
return true;
- } catch (Exceptions\ObjFetchError $e) {
- \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
- return false;
- } catch (Exceptions\HttpError $e) {
+ } catch (ClientErrorResponseException $e) {
\OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
return false;
}
@@ -113,7 +112,6 @@ class Swift extends \OC\Files\Storage\Common {
$settings = array(
'username' => $params['user'],
-
);
if (isset($params['password'])) {
@@ -126,19 +124,18 @@ class Swift extends \OC\Files\Storage\Common {
$settings['tenantName'] = $params['tenant'];
}
- $this->anchor = new \OpenCloud\OpenStack($params['url'], $settings);
-
if (isset($params['timeout'])) {
- $this->anchor->setHttpTimeout($params['timeout']);
+ $settings['timeout'] = $params['timeout'];
}
- $this->connection = $this->anchor->ObjectStore($params['service_name'], $params['region'], 'publicURL');
+ $this->anchor = new OpenStack($params['url'], $settings);
+
+ $this->connection = $this->anchor->objectStoreService($params['service_name'], $params['region']);
try {
- $this->container = $this->connection->Container($this->bucket);
- } catch (Exceptions\ContainerNotFoundError $e) {
- $this->container = $this->connection->Container();
- $this->container->Create(array('name' => $this->bucket));
+ $this->container = $this->connection->getContainer($this->bucket);
+ } catch (ClientErrorResponseException $e) {
+ $this->container = $this->connection->createContainer($this->bucket);
}
if (!$this->file_exists('.')) {
@@ -158,11 +155,10 @@ class Swift extends \OC\Files\Storage\Common {
}
try {
- $object = $this->container->DataObject();
- $object->Create(array(
- 'name' => $path,
- 'content_type' => 'httpd/unix-directory'
- ));
+ $customHeaders = array('content-type' => 'httpd/unix-directory');
+ $metadataHeaders = DataObject::stockHeaders(array());
+ $allHeaders = $customHeaders + $metadataHeaders;
+ $this->container->uploadObject($path, '', $allHeaders);
} catch (Exceptions\CreateUpdateError $e) {
\OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
return false;
@@ -202,8 +198,7 @@ class Swift extends \OC\Files\Storage\Common {
}
try {
- $object = $this->container->DataObject($path . '/');
- $object->Delete();
+ $this->container->dataObject()->setName($path . '/')->delete();
} catch (Exceptions\DeleteError $e) {
\OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
return false;
@@ -221,15 +216,19 @@ class Swift extends \OC\Files\Storage\Common {
$path .= '/';
}
+ $path = str_replace('%23', '#', $path); // the prefix is sent as a query param, so revert the encoding of #
+
try {
$files = array();
- $objects = $this->container->ObjectList(array(
+ /** @var OpenCloud\Common\Collection $objects */
+ $objects = $this->container->objectList(array(
'prefix' => $path,
'delimiter' => '/'
));
- while ($object = $objects->Next()) {
- $file = basename($object->Name());
+ /** @var OpenCloud\ObjectStore\Resource\DataObject $object */
+ foreach ($objects as $object) {
+ $file = basename($object->getName());
if ($file !== basename($path)) {
$files[] = $file;
}
@@ -252,15 +251,22 @@ class Swift extends \OC\Files\Storage\Common {
}
try {
- $object = $this->container->DataObject($path);
- } catch (Exceptions\ObjFetchError $e) {
+ $object = $this->container->getPartialObject($path);
+ } catch (ClientErrorResponseException $e) {
\OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
return false;
}
- $mtime = $object->extra_headers['X-Timestamp'];
- if (isset($object->extra_headers['X-Object-Meta-Timestamp'])) {
- $mtime = $object->extra_headers['X-Object-Meta-Timestamp'];
+ $dateTime = \DateTime::createFromFormat(\DateTime::RFC1123, $object->getLastModified());
+ if ($dateTime !== false) {
+ $mtime = $dateTime->getTimestamp();
+ } else {
+ $mtime = null;
+ }
+ $objectMetadata = $object->getMetadata();
+ $metaTimestamp = $objectMetadata->getProperty('timestamp');
+ if (isset($metaTimestamp)) {
+ $mtime = $metaTimestamp;
}
if (!empty($mtime)) {
@@ -268,7 +274,7 @@ class Swift extends \OC\Files\Storage\Common {
}
$stat = array();
- $stat['size'] = $object->content_length;
+ $stat['size'] = (int) $object->getContentLength();
$stat['mtime'] = $mtime;
$stat['atime'] = time();
return $stat;
@@ -293,13 +299,13 @@ class Swift extends \OC\Files\Storage\Common {
public function unlink($path) {
$path = $this->normalizePath($path);
+ if ($this->is_dir($path)) {
+ return $this->rmdir($path);
+ }
+
try {
- $object = $this->container->DataObject($path);
- $object->Delete();
- } catch (Exceptions\DeleteError $e) {
- \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
- return false;
- } catch (Exceptions\ObjFetchError $e) {
+ $this->container->dataObject()->setName($path)->delete();
+ } catch (ClientErrorResponseException $e) {
\OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
return false;
}
@@ -316,13 +322,19 @@ class Swift extends \OC\Files\Storage\Common {
$tmpFile = \OC_Helper::tmpFile();
self::$tmpFiles[$tmpFile] = $path;
try {
- $object = $this->container->DataObject($path);
- } catch (Exceptions\ObjFetchError $e) {
+ $object = $this->container->getObject($path);
+ } catch (ClientErrorResponseException $e) {
+ \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
+ return false;
+ } catch (Exception\ObjectNotFoundException $e) {
\OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
return false;
}
try {
- $object->SaveToFilename($tmpFile);
+ $objectContent = $object->getContent();
+ $objectContent->rewind();
+ $stream = $objectContent->getStream();
+ file_put_contents($tmpFile, $stream);
} catch (Exceptions\IOError $e) {
\OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
return false;
@@ -363,43 +375,32 @@ class Swift extends \OC\Files\Storage\Common {
if ($this->is_dir($path)) {
return 'httpd/unix-directory';
} else if ($this->file_exists($path)) {
- $object = $this->container->DataObject($path);
- return $object->extra_headers["Content-Type"];
+ $object = $this->container->getPartialObject($path);
+ return $object->getContentType();
}
return false;
}
public function touch($path, $mtime = null) {
$path = $this->normalizePath($path);
+ if (is_null($mtime)) {
+ $mtime = time();
+ }
+ $metadata = array('timestamp' => $mtime);
if ($this->file_exists($path)) {
if ($this->is_dir($path) && $path != '.') {
$path .= '/';
}
- $object = $this->container->DataObject($path);
- if( is_null($mtime)) {
- $mtime = time();
- }
- $settings = array(
- 'name' => $path,
- 'extra_headers' => array(
- 'X-Object-Meta-Timestamp' => $mtime
- )
- );
- return $object->UpdateMetadata($settings);
+ $object = $this->container->getPartialObject($path);
+ $object->saveMetadata($metadata);
+ return true;
} else {
- $object = $this->container->DataObject();
- if (is_null($mtime)) {
- $mtime = time();
- }
- $settings = array(
- 'name' => $path,
- 'content_type' => 'text/plain',
- 'extra_headers' => array(
- 'X-Object-Meta-Timestamp' => $mtime
- )
- );
- return $object->Create($settings);
+ $customHeaders = array('content-type' => 'text/plain');
+ $metadataHeaders = DataObject::stockHeaders($metadata);
+ $allHeaders = $customHeaders + $metadataHeaders;
+ $this->container->uploadObject($path, '', $allHeaders);
+ return true;
}
}
@@ -407,31 +408,29 @@ class Swift extends \OC\Files\Storage\Common {
$path1 = $this->normalizePath($path1);
$path2 = $this->normalizePath($path2);
- if ($this->is_file($path1)) {
+ $fileType = $this->filetype($path1);
+ if ($fileType === 'file') {
+
+ // make way
+ $this->unlink($path2);
+
try {
- $source = $this->container->DataObject($path1);
- $target = $this->container->DataObject();
- $target->Create(array(
- 'name' => $path2,
- ));
- $source->Copy($target);
- } catch (Exceptions\ObjectCopyError $e) {
+ $source = $this->container->getPartialObject($path1);
+ $source->copy($this->bucket.'/'.$path2);
+ } catch (ClientErrorResponseException $e) {
\OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
return false;
}
- } else {
- if ($this->file_exists($path2)) {
- return false;
- }
+
+ } else if ($fileType === 'dir') {
+
+ // make way
+ $this->unlink($path2);
try {
- $source = $this->container->DataObject($path1 . '/');
- $target = $this->container->DataObject();
- $target->Create(array(
- 'name' => $path2 . '/',
- ));
- $source->Copy($target);
- } catch (Exceptions\ObjectCopyError $e) {
+ $source = $this->container->getPartialObject($path1 . '/');
+ $source->copy($this->bucket.'/'.$path2 . '/');
+ } catch (ClientErrorResponseException $e) {
\OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
return false;
}
@@ -446,6 +445,10 @@ class Swift extends \OC\Files\Storage\Common {
$target = $path2 . '/' . $file;
$this->copy($source, $target);
}
+
+ } else {
+ //file does not exist
+ return false;
}
return true;
@@ -455,31 +458,28 @@ class Swift extends \OC\Files\Storage\Common {
$path1 = $this->normalizePath($path1);
$path2 = $this->normalizePath($path2);
- if ($this->is_file($path1)) {
+ $fileType = $this->filetype($path1);
+
+ if ($fileType === 'dir' || $fileType === 'file') {
+
+ // make way
+ $this->unlink($path2);
+
+ // copy
if ($this->copy($path1, $path2) === false) {
return false;
}
+ // cleanup
if ($this->unlink($path1) === false) {
$this->unlink($path2);
return false;
}
- } else {
- if ($this->file_exists($path2)) {
- return false;
- }
-
- if ($this->copy($path1, $path2) === false) {
- return false;
- }
- if ($this->rmdir($path1) === false) {
- $this->rmdir($path2);
- return false;
- }
+ return true;
}
- return true;
+ return false;
}
public function getId() {
@@ -494,12 +494,8 @@ class Swift extends \OC\Files\Storage\Common {
if (!isset(self::$tmpFiles[$tmpFile])) {
return false;
}
-
- $object = $this->container->DataObject();
- $object->Create(array(
- 'name' => self::$tmpFiles[$tmpFile],
- 'content_type' => \OC_Helper::getMimeType($tmpFile)
- ), $tmpFile);
+ $fileData = fopen($tmpFile, 'r');
+ $this->container->uploadObject(self::$tmpFiles[$tmpFile], $fileData);
unlink($tmpFile);
}
diff --git a/apps/files_external/tests/swift.php b/apps/files_external/tests/swift.php
index bdfdbdeebe9..3918497ebfa 100644
--- a/apps/files_external/tests/swift.php
+++ b/apps/files_external/tests/swift.php
@@ -38,14 +38,15 @@ class Swift extends Storage {
public function tearDown() {
if ($this->instance) {
$connection = $this->instance->getConnection();
- $container = $connection->Container($this->config['swift']['bucket']);
+ $container = $connection->getContainer($this->config['swift']['bucket']);
- $objects = $container->ObjectList();
- while($object = $objects->Next()) {
- $object->Delete();
+ $objects = $container->objectList();
+ while($object = $objects->next()) {
+ $object->setName(str_replace('#','%23',$object->getName()));
+ $object->delete();
}
- $container->Delete();
+ $container->delete();
}
}
}
diff --git a/apps/files_sharing/js/external.js b/apps/files_sharing/js/external.js
index a142819b112..1eb447da896 100644
--- a/apps/files_sharing/js/external.js
+++ b/apps/files_sharing/js/external.js
@@ -43,10 +43,10 @@
};
if (!passwordProtected) {
OC.dialogs.confirm(t('files_sharing', 'Add {name} from {owner}@{remote}', {name: name, owner: owner, remote: remoteClean})
- , 'Add Share', callback, true);
+ , t('files_sharing','Add Share'), callback, true);
} else {
OC.dialogs.prompt(t('files_sharing', 'Add {name} from {owner}@{remote}', {name: name, owner: owner, remote: remoteClean})
- , 'Add Share', callback, true, 'Password', true);
+ , t('files_sharing','Add Share'), callback, true, t('files_sharing','Password'), true);
}
};
})();
diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js
index 1d633a655d5..f911f3689eb 100644
--- a/apps/files_sharing/js/public.js
+++ b/apps/files_sharing/js/public.js
@@ -33,6 +33,10 @@ OCA.Sharing.PublicApp = {
// regular actions
fileActions.merge(OCA.Files.fileActions);
+ // in case apps would decide to register file actions later,
+ // replace the global object with this one
+ OCA.Files.fileActions = fileActions;
+
this._initialized = true;
this.initialDir = $('#dir').val();
diff --git a/apps/files_sharing/l10n/de.php b/apps/files_sharing/l10n/de.php
index ecf7f175800..ec443bf5b43 100644
--- a/apps/files_sharing/l10n/de.php
+++ b/apps/files_sharing/l10n/de.php
@@ -30,6 +30,7 @@ $TRANSLATIONS = array(
"Download" => "Herunterladen",
"Download %s" => "Download %s",
"Direct link" => "Direkter Link",
+"Remote Shares" => "Entfernte Freigaben",
"Allow other instances to mount public links shared from this server" => "Andere Instanzen zum Hinzufügen von öffentlichen Links, die über diesen Server Freigegeben werden, erlauben",
"Allow users to mount public link shares" => "Erlaube Nutzern das Hinzufügen von freigegebenen öffentlichen Links"
);
diff --git a/apps/files_sharing/l10n/de_DE.php b/apps/files_sharing/l10n/de_DE.php
index c0488b4988b..636156c6fe5 100644
--- a/apps/files_sharing/l10n/de_DE.php
+++ b/apps/files_sharing/l10n/de_DE.php
@@ -30,6 +30,7 @@ $TRANSLATIONS = array(
"Download" => "Herunterladen",
"Download %s" => "Download %s",
"Direct link" => "Direkte Verlinkung",
+"Remote Shares" => "Entfernte Freigaben",
"Allow other instances to mount public links shared from this server" => "Andere Instanzen zum Hinzufügen von öffentlichen Links, die über diesen Server Freigegeben werden, erlauben",
"Allow users to mount public link shares" => "Erlaube Nutzern das Hinzufügen von freigegebenen öffentlichen Links"
);
diff --git a/apps/files_sharing/l10n/en_GB.php b/apps/files_sharing/l10n/en_GB.php
index 04a5bb5e1b2..ff2b032b0dd 100644
--- a/apps/files_sharing/l10n/en_GB.php
+++ b/apps/files_sharing/l10n/en_GB.php
@@ -30,6 +30,7 @@ $TRANSLATIONS = array(
"Download" => "Download",
"Download %s" => "Download %s",
"Direct link" => "Direct link",
+"Remote Shares" => "Remote Shares",
"Allow other instances to mount public links shared from this server" => "Allow other instances to mount public links shared from this server",
"Allow users to mount public link shares" => "Allow users to mount public link shares"
);
diff --git a/apps/files_sharing/l10n/et_EE.php b/apps/files_sharing/l10n/et_EE.php
index 422adf39a58..2867d87fb5f 100644
--- a/apps/files_sharing/l10n/et_EE.php
+++ b/apps/files_sharing/l10n/et_EE.php
@@ -30,6 +30,7 @@ $TRANSLATIONS = array(
"Download" => "Lae alla",
"Download %s" => "Laadi alla %s",
"Direct link" => "Otsene link",
+"Remote Shares" => "Eemalolevad jagamised",
"Allow other instances to mount public links shared from this server" => "Luba teistel instantsidel ühendada sellest serverist jagatud avalikke linke",
"Allow users to mount public link shares" => "Luba kasutajatel ühendada jagatud avalikke linke"
);
diff --git a/apps/files_sharing/l10n/fi_FI.php b/apps/files_sharing/l10n/fi_FI.php
index 16694632ec2..c5db10aff73 100644
--- a/apps/files_sharing/l10n/fi_FI.php
+++ b/apps/files_sharing/l10n/fi_FI.php
@@ -30,6 +30,7 @@ $TRANSLATIONS = array(
"Download" => "Lataa",
"Download %s" => "Lataa %s",
"Direct link" => "Suora linkki",
+"Remote Shares" => "Etäjaot",
"Allow other instances to mount public links shared from this server" => "Salli muiden instanssien liittää tältä palvelimelta jaettuja julkisia linkkejä",
"Allow users to mount public link shares" => "Salli käyttäjien liittää julkisia linkkijakoja"
);
diff --git a/apps/files_sharing/l10n/gl.php b/apps/files_sharing/l10n/gl.php
index d2f690e7729..33e2005b731 100644
--- a/apps/files_sharing/l10n/gl.php
+++ b/apps/files_sharing/l10n/gl.php
@@ -30,6 +30,7 @@ $TRANSLATIONS = array(
"Download" => "Descargar",
"Download %s" => "Descargar %s",
"Direct link" => "Ligazón directa",
+"Remote Shares" => "Comparticións remotas",
"Allow other instances to mount public links shared from this server" => "Permitir que outras instancias monten ligazóns públicas compartidas desde este servidor",
"Allow users to mount public link shares" => "Permitirlle aos usuarios montar ligazóns públicas compartidas"
);
diff --git a/apps/files_sharing/l10n/id.php b/apps/files_sharing/l10n/id.php
index 841169a3980..7dbd9ac427e 100644
--- a/apps/files_sharing/l10n/id.php
+++ b/apps/files_sharing/l10n/id.php
@@ -1,19 +1,34 @@
<?php
$TRANSLATIONS = array(
+"Server to server sharing is not enabled on this server" => "Berbagi server ke server tidaj diaktifkan pada server ini",
+"Shared with you" => "Dibagikan dengan Anda",
+"Shared with others" => "Dibagikan dengan lainnya",
+"Shared by link" => "Dibagikan dengan tautan",
+"No files have been shared with you yet." => "Tidak ada berkas yang dibagikan kepada Anda.",
+"You haven't shared any files yet." => "Anda belum berbagi berkas apapun.",
+"You haven't shared any files by link yet." => "Anda belum berbagi berkas dengan tautan satupun.",
+"Add {name} from {owner}@{remote}" => "Tambah {name} dari {owner}@{remote}",
+"No ownCloud installation found at {remote}" => "Tidak ada instalasi ownCloud yang ditemukan di {remote}",
+"Invalid ownCloud url" => "URL ownCloud tidak sah",
"Shared by {owner}" => "Dibagikan oleh {owner}",
"Shared by" => "Dibagikan oleh",
"This share is password-protected" => "Berbagi ini dilindungi sandi",
"The password is wrong. Try again." => "Sandi salah. Coba lagi",
"Password" => "Sandi",
"Name" => "Nama",
+"Share time" => "Bagikan waktu",
"Sorry, this link doesn’t seem to work anymore." => "Maaf, tautan ini tampaknya tidak berfungsi lagi.",
"Reasons might be:" => "Alasan mungkin:",
"the item was removed" => "item telah dihapus",
"the link expired" => "tautan telah kadaluarsa",
"sharing is disabled" => "berbagi dinonaktifkan",
"For more info, please ask the person who sent this link." => "Untuk info lebih lanjut, silakan tanyakan orang yang mengirim tautan ini.",
+"Save to ownCloud" => "Simpan ke ownCloud",
+"example.com/owncloud" => "contoh.com/owncloud",
"Save" => "Simpan",
"Download" => "Unduh",
-"Direct link" => "Tautan langsung"
+"Download %s" => "Unduh %s",
+"Direct link" => "Tautan langsung",
+"Allow users to mount public link shares" => "Izinkan pengguna untuk mengaitkan tautan berbagi publik"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_sharing/l10n/it.php b/apps/files_sharing/l10n/it.php
index 4aa95730aa1..aa00f1b9bd2 100644
--- a/apps/files_sharing/l10n/it.php
+++ b/apps/files_sharing/l10n/it.php
@@ -30,6 +30,7 @@ $TRANSLATIONS = array(
"Download" => "Scarica",
"Download %s" => "Scarica %s",
"Direct link" => "Collegamento diretto",
+"Remote Shares" => "Condivisioni Remote",
"Allow other instances to mount public links shared from this server" => "Permetti ad altre istanze di montare collegamenti pubblici condivisi da questo server",
"Allow users to mount public link shares" => "Permetti agli utenti di montare condivisioni con collegamento pubblico"
);
diff --git a/apps/files_sharing/l10n/nl.php b/apps/files_sharing/l10n/nl.php
index 4f01b2e79d8..276b7d64368 100644
--- a/apps/files_sharing/l10n/nl.php
+++ b/apps/files_sharing/l10n/nl.php
@@ -30,6 +30,7 @@ $TRANSLATIONS = array(
"Download" => "Downloaden",
"Download %s" => "Download %s",
"Direct link" => "Directe link",
+"Remote Shares" => "Externe shares",
"Allow other instances to mount public links shared from this server" => "Toestaan dat andere oanClouds openbaar gedeelde links mounten vanaf deze server",
"Allow users to mount public link shares" => "Toestaan dat gebruikers openbaar gedeelde links mounten"
);
diff --git a/apps/files_sharing/l10n/pt_BR.php b/apps/files_sharing/l10n/pt_BR.php
index 7d6f036d2a0..df8c397c13b 100644
--- a/apps/files_sharing/l10n/pt_BR.php
+++ b/apps/files_sharing/l10n/pt_BR.php
@@ -12,7 +12,7 @@ $TRANSLATIONS = array(
"No ownCloud installation found at {remote}" => "Nenhuma instalação ownCloud encontrada em {remote}",
"Invalid ownCloud url" => "Url invalida para ownCloud",
"Shared by {owner}" => "Compartilhado por {owner}",
-"Shared by" => "Compartilhada por",
+"Shared by" => "Compartilhado por",
"This share is password-protected" => "Este compartilhamento esta protegido por senha",
"The password is wrong. Try again." => "Senha incorreta. Tente novamente.",
"Password" => "Senha",
@@ -22,7 +22,7 @@ $TRANSLATIONS = array(
"Reasons might be:" => "As razões podem ser:",
"the item was removed" => "o item foi removido",
"the link expired" => "o link expirou",
-"sharing is disabled" => "compartilhamento está desativada",
+"sharing is disabled" => "o compartilhamento está desativado",
"For more info, please ask the person who sent this link." => "Para mais informações, por favor, pergunte a pessoa que enviou este link.",
"Save to ownCloud" => "Salvar em ownCloud",
"example.com/owncloud" => "example.com/owncloud",
@@ -30,6 +30,7 @@ $TRANSLATIONS = array(
"Download" => "Baixar",
"Download %s" => "Baixar %s",
"Direct link" => "Link direto",
+"Remote Shares" => "Compartilhamentos Remoto",
"Allow other instances to mount public links shared from this server" => "Permitir que outras instâncias montem links de compartilhamentos públicos a partir desde servidor",
"Allow users to mount public link shares" => "Permitir aos usuários montar links públicos de compartilhamentos"
);
diff --git a/apps/files_sharing/l10n/tr.php b/apps/files_sharing/l10n/tr.php
index acf1620a6a1..f9cd7258112 100644
--- a/apps/files_sharing/l10n/tr.php
+++ b/apps/files_sharing/l10n/tr.php
@@ -30,6 +30,7 @@ $TRANSLATIONS = array(
"Download" => "İndir",
"Download %s" => "İndir: %s",
"Direct link" => "Doğrudan bağlantı",
+"Remote Shares" => "Uzak Paylaşımlar",
"Allow other instances to mount public links shared from this server" => "Diğer örneklerin, bu sunucudan paylaşılmış herkese açık bağlantıları bağlamasına izin ver",
"Allow users to mount public link shares" => "Kullanıcıların herkese açık bağlantı paylaşımlarını bağlamasına izin ver"
);
diff --git a/apps/files_sharing/lib/external/storage.php b/apps/files_sharing/lib/external/storage.php
index 2771f974614..454196f15ae 100644
--- a/apps/files_sharing/lib/external/storage.php
+++ b/apps/files_sharing/lib/external/storage.php
@@ -33,6 +33,8 @@ class Storage extends DAV implements ISharedStorage {
*/
private $token;
+ private $updateChecked = false;
+
public function __construct($options) {
$this->remote = $options['remote'];
$this->remoteUser = $options['owner'];
@@ -100,4 +102,21 @@ class Storage extends DAV implements ISharedStorage {
}
return $this->scanner;
}
+
+ /**
+ * check if a file or folder has been updated since $time
+ *
+ * @param string $path
+ * @param int $time
+ * @return bool
+ */
+ public function hasUpdated($path, $time) {
+ // since for owncloud webdav servers we can rely on etag propagation we only need to check the root of the storage
+ // because of that we only do one check for the entire storage per request
+ if ($this->updateChecked) {
+ return false;
+ }
+ $this->updateChecked = true;
+ return parent::hasUpdated('', $time);
+ }
}
diff --git a/apps/files_sharing/tests/js/appSpec.js b/apps/files_sharing/tests/js/appSpec.js
index d0480ad1aa4..5fb269da75e 100644
--- a/apps/files_sharing/tests/js/appSpec.js
+++ b/apps/files_sharing/tests/js/appSpec.js
@@ -55,7 +55,7 @@ describe('OCA.Sharing.App tests', function() {
describe('initialization', function() {
it('inits sharing-in list on show', function() {
- expect(fileListIn._sharedWithUser).toEqual(true);
+ expect(fileListIn._sharedWithUser).toEqual(true);
});
it('inits sharing-out list on show', function() {
expect(fileListOut._sharedWithUser).toBeFalsy();
diff --git a/config/config.sample.php b/config/config.sample.php
index 6da00fc12a5..59e1f3890ce 100755
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -304,4 +304,32 @@ $CONFIG = array(
/* If true, prevent owncloud from changing the cache due to changes in the filesystem for all storage */
'filesystem_cache_readonly' => false,
+
+/*
+ * The example below shows how to configure ownCloud to store all files in a swift object storage
+ *
+ * It is important to note that ownCloud in object store mode will expect exclusive access
+ * to the object store container because it only stores the binary data for each file. The
+ * metadata is currently kept in the local database for performance reasons.
+ *
+ * WARNING: The current implementation is incompatible with any app that uses direct file IO and circumvents our
+ * virtual filesystem. That includes Encryption and Gallery. Gallery will store thumbnails directly in the filesystem
+ * and encryption will cause severe overhead because key files need to be fetched in addition to any requested file.
+ *
+ * One way to test is applying for a trystack account at http://trystack.org/
+ */
+'objectstore' => array(
+ 'class' => 'OC\\Files\\ObjectStore\\Swift',
+ 'arguments' => array(
+ 'username' => 'facebook100000123456789', // trystack will user your facebook id as the user name
+ 'password' => 'Secr3tPaSSWoRdt7', // in the trystack dashboard go to user -> settings -> API Password to generate a password
+ 'container' => 'owncloud', // must already exist in the objectstore, name can be different
+ 'autocreate' => true, // create the container if it does not exist. default is false
+ 'region' => 'RegionOne', //required, dev-/trystack defaults to 'RegionOne'
+ 'url' => 'http://8.21.28.222:5000/v2.0', // The Identity / Keystone endpoint
+ 'tenantName' => 'facebook100000123456789', // required on dev-/trystack
+ 'serviceName' => 'swift', //dev-/trystack uses swift by default, the lib defaults to 'cloudFiles' if omitted
+ ),
+),
+
);
diff --git a/core/js/share.js b/core/js/share.js
index 1c59524939c..aab41cf76da 100644
--- a/core/js/share.js
+++ b/core/js/share.js
@@ -374,7 +374,7 @@ OC.Share={
if (data.shares) {
$.each(data.shares, function(index, share) {
if (share.share_type == OC.Share.SHARE_TYPE_LINK) {
- if ( !('file_target' in share) ) {
+ if (itemSource === share.file_source || itemSource === share.item_source) {
OC.Share.showLink(share.token, share.share_with, itemSource);
}
} else {
@@ -620,6 +620,7 @@ OC.Share={
var file = $('#dir').val() + '/' + filename;
}
file = '/'+OC.currentUser+'/files'+file;
+ // TODO: use oc webroot ?
var link = parent.location.protocol+'//'+location.host+OC.linkTo('', 'public.php')+'?service=files&'+type+'='+encodeURIComponent(file);
} else {
//TODO add path param when showing a link to file in a subfolder of a public link share
@@ -630,6 +631,7 @@ OC.Share={
service=linkSharetype;
}
+ // TODO: use oc webroot ?
var link = parent.location.protocol+'//'+location.host+OC.linkTo('', 'public.php')+'?service='+service+'&t='+token;
}
diff --git a/core/js/tests/specs/shareSpec.js b/core/js/tests/specs/shareSpec.js
index 458bc41b6a1..588e51036e4 100644
--- a/core/js/tests/specs/shareSpec.js
+++ b/core/js/tests/specs/shareSpec.js
@@ -96,7 +96,6 @@ describe('OC.Share tests', function() {
describe('Share with link', function() {
// TODO: test ajax calls
// TODO: test password field visibility (whenever enforced or not)
- // TODO: check public upload visibility based on config
it('shows share with link checkbox when allowed', function() {
$('#allowShareWithLink').val('yes');
OC.Share.showDropDown(
@@ -121,6 +120,151 @@ describe('OC.Share tests', function() {
);
expect($('#dropdown #linkCheckbox').length).toEqual(0);
});
+ it('shows populated link share when a link share exists', function() {
+ loadItemStub.returns({
+ reshare: [],
+ /* jshint camelcase: false */
+ shares: [{
+ displayname_owner: 'root',
+ expiration: null,
+ file_source: 123,
+ file_target: '/folder',
+ id: 20,
+ item_source: '123',
+ item_type: 'folder',
+ mail_send: '0',
+ parent: null,
+ path: '/folder',
+ permissions: OC.PERMISSION_READ,
+ share_type: OC.Share.SHARE_TYPE_LINK,
+ share_with: null,
+ stime: 1403884258,
+ storage: 1,
+ token: 'tehtoken',
+ uid_owner: 'root'
+ }]
+ });
+ OC.Share.showDropDown(
+ 'file',
+ 123,
+ $container,
+ 'http://localhost/dummylink',
+ 31,
+ 'folder'
+ );
+ expect($('#dropdown #linkCheckbox').prop('checked')).toEqual(true);
+ // this is how the OC.Share class does it...
+ var link = parent.location.protocol + '//' + location.host +
+ OC.linkTo('', 'public.php')+'?service=files&t=tehtoken';
+ expect($('#dropdown #linkText').val()).toEqual(link);
+ });
+ it('does not show populated link share when a link share exists for a different file', function() {
+ loadItemStub.returns({
+ reshare: [],
+ /* jshint camelcase: false */
+ shares: [{
+ displayname_owner: 'root',
+ expiration: null,
+ file_source: 123,
+ file_target: '/folder',
+ id: 20,
+ item_source: '123',
+ item_type: 'folder',
+ mail_send: '0',
+ parent: null,
+ path: '/folder',
+ permissions: OC.PERMISSION_READ,
+ share_type: OC.Share.SHARE_TYPE_LINK,
+ share_with: null,
+ stime: 1403884258,
+ storage: 1,
+ token: 'tehtoken',
+ uid_owner: 'root'
+ }]
+ });
+ OC.Share.showDropDown(
+ 'file',
+ 456, // another file
+ $container,
+ 'http://localhost/dummylink',
+ 31,
+ 'folder'
+ );
+ expect($('#dropdown #linkCheckbox').prop('checked')).toEqual(false);
+ });
+ it('shows correct link share when a nest link share exists along with parent one', function() {
+ loadItemStub.returns({
+ reshare: [],
+ /* jshint camelcase: false */
+ shares: [{
+ displayname_owner: 'root',
+ expiration: null,
+ file_source: 123,
+ file_target: '/folder',
+ id: 20,
+ item_source: '123',
+ item_type: 'file',
+ mail_send: '0',
+ parent: null,
+ path: '/folder',
+ permissions: OC.PERMISSION_READ,
+ share_type: OC.Share.SHARE_TYPE_LINK,
+ share_with: null,
+ stime: 1403884258,
+ storage: 1,
+ token: 'tehtoken',
+ uid_owner: 'root'
+ }, {
+ displayname_owner: 'root',
+ expiration: null,
+ file_source: 456,
+ file_target: '/file_in_folder.txt',
+ id: 21,
+ item_source: '456',
+ item_type: 'file',
+ mail_send: '0',
+ parent: null,
+ path: '/folder/file_in_folder.txt',
+ permissions: OC.PERMISSION_READ,
+ share_type: OC.Share.SHARE_TYPE_LINK,
+ share_with: null,
+ stime: 1403884509,
+ storage: 1,
+ token: 'anothertoken',
+ uid_owner: 'root'
+ }]
+ });
+
+ // parent one
+ OC.Share.showDropDown(
+ 'folder',
+ 123,
+ $container,
+ 'http://localhost/dummylink',
+ 31,
+ 'folder'
+ );
+ expect($('#dropdown #linkCheckbox').prop('checked')).toEqual(true);
+ // this is how the OC.Share class does it...
+ var link = parent.location.protocol + '//' + location.host +
+ OC.linkTo('', 'public.php')+'?service=files&t=tehtoken';
+ expect($('#dropdown #linkText').val()).toEqual(link);
+
+ // nested one
+ OC.Share.showDropDown(
+ 'file',
+ 456,
+ $container,
+ 'http://localhost/dummylink',
+ 31,
+ 'file_in_folder.txt'
+ );
+ expect($('#dropdown #linkCheckbox').prop('checked')).toEqual(true);
+ // this is how the OC.Share class does it...
+ link = parent.location.protocol + '//' + location.host +
+ OC.linkTo('', 'public.php')+'?service=files&t=anothertoken';
+ expect($('#dropdown #linkText').val()).toEqual(link);
+ });
});
describe('"sharesChanged" event', function() {
var autocompleteOptions;
diff --git a/core/l10n/ar.php b/core/l10n/ar.php
index c19f7fed8cb..f20fb164bbf 100644
--- a/core/l10n/ar.php
+++ b/core/l10n/ar.php
@@ -69,6 +69,7 @@ $TRANSLATIONS = array(
"Resharing is not allowed" => "لا يسمح بعملية إعادة المشاركة",
"Shared in {item} with {user}" => "شورك في {item} مع {user}",
"Unshare" => "إلغاء مشاركة",
+"can share" => "يمكن المشاركة",
"can edit" => "التحرير مسموح",
"access control" => "ضبط الوصول",
"create" => "إنشاء",
diff --git a/core/l10n/ast.php b/core/l10n/ast.php
index 23f7e63d8ae..fe575a69e38 100644
--- a/core/l10n/ast.php
+++ b/core/l10n/ast.php
@@ -103,6 +103,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Compartíu en {item} con {user}",
"Unshare" => "Dexar de compartir",
"notify by email" => "notificar per corréu",
+"can share" => "pue compartir",
"can edit" => "pue editar",
"access control" => "control d'accesu",
"create" => "crear",
diff --git a/core/l10n/ca.php b/core/l10n/ca.php
index d91b4321aef..17528bee940 100644
--- a/core/l10n/ca.php
+++ b/core/l10n/ca.php
@@ -103,6 +103,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Compartit en {item} amb {user}",
"Unshare" => "Deixa de compartir",
"notify by email" => "notifica per correu electrònic",
+"can share" => "pot compartir",
"can edit" => "pot editar",
"access control" => "control d'accés",
"create" => "crea",
diff --git a/core/l10n/cs_CZ.php b/core/l10n/cs_CZ.php
index 85f6acbd8a6..ed2dfad8366 100644
--- a/core/l10n/cs_CZ.php
+++ b/core/l10n/cs_CZ.php
@@ -102,6 +102,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Sdíleno v {item} s {user}",
"Unshare" => "Zrušit sdílení",
"notify by email" => "upozornit e-mailem",
+"can share" => "může sdílet",
"can edit" => "lze upravovat",
"access control" => "řízení přístupu",
"create" => "vytvořit",
diff --git a/core/l10n/da.php b/core/l10n/da.php
index 2f2932a0b1d..b8a0d32b6f2 100644
--- a/core/l10n/da.php
+++ b/core/l10n/da.php
@@ -101,6 +101,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Delt i {item} med {user}",
"Unshare" => "Fjern deling",
"notify by email" => "Giv besked med mail",
+"can share" => "kan dele",
"can edit" => "kan redigere",
"access control" => "Adgangskontrol",
"create" => "opret",
diff --git a/core/l10n/de.php b/core/l10n/de.php
index 603929d87f6..632fcc8ce3d 100644
--- a/core/l10n/de.php
+++ b/core/l10n/de.php
@@ -103,6 +103,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Für {user} in {item} freigegeben",
"Unshare" => "Freigabe aufheben",
"notify by email" => "Per E-Mail informieren",
+"can share" => "Kann teilen",
"can edit" => "kann bearbeiten",
"access control" => "Zugriffskontrolle",
"create" => "erstellen",
diff --git a/core/l10n/de_AT.php b/core/l10n/de_AT.php
index 18a4adb948e..b213a756785 100644
--- a/core/l10n/de_AT.php
+++ b/core/l10n/de_AT.php
@@ -29,6 +29,7 @@ $TRANSLATIONS = array(
"Share" => "Freigeben",
"group" => "Gruppe",
"Unshare" => "Teilung zurücknehmen",
+"can share" => "Kann teilen",
"can edit" => "kann bearbeiten",
"Delete" => "Löschen",
"Personal" => "Persönlich",
diff --git a/core/l10n/de_DE.php b/core/l10n/de_DE.php
index a126e3dcdfc..32e613862cd 100644
--- a/core/l10n/de_DE.php
+++ b/core/l10n/de_DE.php
@@ -103,6 +103,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Freigegeben in {item} von {user}",
"Unshare" => "Freigabe aufheben",
"notify by email" => "Per E-Mail informieren",
+"can share" => "kann geteilt werden",
"can edit" => "kann bearbeiten",
"access control" => "Zugriffskontrolle",
"create" => "erstellen",
diff --git a/core/l10n/el.php b/core/l10n/el.php
index 4720ad96322..520e7bcacb1 100644
--- a/core/l10n/el.php
+++ b/core/l10n/el.php
@@ -103,6 +103,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Διαμοιρασμός του {item} με τον {user}",
"Unshare" => "Διακοπή διαμοιρασμού",
"notify by email" => "ειδοποίηση με email",
+"can share" => "δυνατότητα διαμοιρασμού",
"can edit" => "δυνατότητα αλλαγής",
"access control" => "έλεγχος πρόσβασης",
"create" => "δημιουργία",
diff --git a/core/l10n/en_GB.php b/core/l10n/en_GB.php
index e41d00fcae6..8c477442699 100644
--- a/core/l10n/en_GB.php
+++ b/core/l10n/en_GB.php
@@ -103,6 +103,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Shared in {item} with {user}",
"Unshare" => "Unshare",
"notify by email" => "notify by email",
+"can share" => "can share",
"can edit" => "can edit",
"access control" => "access control",
"create" => "create",
diff --git a/core/l10n/eo.php b/core/l10n/eo.php
index ce44645151b..2f2bac8fe47 100644
--- a/core/l10n/eo.php
+++ b/core/l10n/eo.php
@@ -78,6 +78,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Kunhavigita en {item} kun {user}",
"Unshare" => "Malkunhavigi",
"notify by email" => "avizi per retpoŝto",
+"can share" => "kunhavebla",
"can edit" => "povas redakti",
"access control" => "alirkontrolo",
"create" => "krei",
diff --git a/core/l10n/es.php b/core/l10n/es.php
index 34447fcccb2..8cf5edfc107 100644
--- a/core/l10n/es.php
+++ b/core/l10n/es.php
@@ -103,6 +103,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Compartido en {item} con {user}",
"Unshare" => "Dejar de compartir",
"notify by email" => "notificar por correo electrónico",
+"can share" => "puede compartir",
"can edit" => "puede editar",
"access control" => "control de acceso",
"create" => "crear",
diff --git a/core/l10n/es_AR.php b/core/l10n/es_AR.php
index 95bef493e2f..7ebac19d107 100644
--- a/core/l10n/es_AR.php
+++ b/core/l10n/es_AR.php
@@ -89,6 +89,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Compartido en {item} con {user}",
"Unshare" => "Dejar de compartir",
"notify by email" => "notificar por correo",
+"can share" => "puede compartir",
"can edit" => "podés editar",
"access control" => "control de acceso",
"create" => "crear",
diff --git a/core/l10n/es_MX.php b/core/l10n/es_MX.php
index 97658d7da16..55a043a26c9 100644
--- a/core/l10n/es_MX.php
+++ b/core/l10n/es_MX.php
@@ -82,6 +82,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Compartido en {item} con {user}",
"Unshare" => "Dejar de compartir",
"notify by email" => "notificar al usuario por correo electrónico",
+"can share" => "puede compartir",
"can edit" => "puede editar",
"access control" => "control de acceso",
"create" => "crear",
diff --git a/core/l10n/et_EE.php b/core/l10n/et_EE.php
index a56e63a4a22..af3bc1e83ef 100644
--- a/core/l10n/et_EE.php
+++ b/core/l10n/et_EE.php
@@ -103,6 +103,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Jagatud {item} kasutajaga {user}",
"Unshare" => "Lõpeta jagamine",
"notify by email" => "teavita e-postiga",
+"can share" => "saab jagada",
"can edit" => "saab muuta",
"access control" => "ligipääsukontroll",
"create" => "loo",
diff --git a/core/l10n/eu.php b/core/l10n/eu.php
index 4e4a74b4b57..25b3c8186d6 100644
--- a/core/l10n/eu.php
+++ b/core/l10n/eu.php
@@ -98,6 +98,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "{user}ekin {item}-n elkarbanatuta",
"Unshare" => "Ez elkarbanatu",
"notify by email" => "jakinarazi eposta bidez",
+"can share" => "elkarbana dezake",
"can edit" => "editatu dezake",
"access control" => "sarrera kontrola",
"create" => "sortu",
diff --git a/core/l10n/fa.php b/core/l10n/fa.php
index ef00a56a1cb..ab251a0294f 100644
--- a/core/l10n/fa.php
+++ b/core/l10n/fa.php
@@ -69,6 +69,7 @@ $TRANSLATIONS = array(
"Resharing is not allowed" => "اشتراک گذاری مجدد مجاز نمی باشد",
"Shared in {item} with {user}" => "به اشتراک گذاشته شده در {بخش} با {کاربر}",
"Unshare" => "لغو اشتراک",
+"can share" => "قابل به اشتراک گذاری",
"can edit" => "می توان ویرایش کرد",
"access control" => "کنترل دسترسی",
"create" => "ایجاد",
diff --git a/core/l10n/fi_FI.php b/core/l10n/fi_FI.php
index 18fe3b382ac..cea884cac7c 100644
--- a/core/l10n/fi_FI.php
+++ b/core/l10n/fi_FI.php
@@ -100,6 +100,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "{item} on jaettu {user} kanssa",
"Unshare" => "Peru jakaminen",
"notify by email" => "ilmoita sähköpostitse",
+"can share" => "jaa",
"can edit" => "voi muokata",
"access control" => "Pääsyn hallinta",
"create" => "luo",
diff --git a/core/l10n/fr.php b/core/l10n/fr.php
index 125ba35de9b..9723ec427bd 100644
--- a/core/l10n/fr.php
+++ b/core/l10n/fr.php
@@ -103,6 +103,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Partagé dans {item} avec {user}",
"Unshare" => "Ne plus partager",
"notify by email" => "Notifier par email",
+"can share" => "peut partager",
"can edit" => "édition autorisée",
"access control" => "contrôle des accès",
"create" => "créer",
diff --git a/core/l10n/gl.php b/core/l10n/gl.php
index 5facbd5f709..af868e6c4d6 100644
--- a/core/l10n/gl.php
+++ b/core/l10n/gl.php
@@ -103,6 +103,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Compartido en {item} con {user}",
"Unshare" => "Deixar de compartir",
"notify by email" => "notificar por correo",
+"can share" => "pode compartir",
"can edit" => "pode editar",
"access control" => "control de acceso",
"create" => "crear",
diff --git a/core/l10n/he.php b/core/l10n/he.php
index cc5c3641631..95df6201f7d 100644
--- a/core/l10n/he.php
+++ b/core/l10n/he.php
@@ -60,6 +60,7 @@ $TRANSLATIONS = array(
"Resharing is not allowed" => "אסור לעשות שיתוף מחדש",
"Shared in {item} with {user}" => "שותף תחת {item} עם {user}",
"Unshare" => "הסר שיתוף",
+"can share" => "ניתן לשתף",
"can edit" => "ניתן לערוך",
"access control" => "בקרת גישה",
"create" => "יצירה",
diff --git a/core/l10n/hu_HU.php b/core/l10n/hu_HU.php
index 82fc07d7248..b857120798a 100644
--- a/core/l10n/hu_HU.php
+++ b/core/l10n/hu_HU.php
@@ -98,6 +98,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Megosztva {item}-ben {user}-rel",
"Unshare" => "A megosztás visszavonása",
"notify by email" => "email értesítés",
+"can share" => "megosztható",
"can edit" => "módosíthat",
"access control" => "jogosultság",
"create" => "létrehoz",
diff --git a/core/l10n/ia.php b/core/l10n/ia.php
index 65cff076a72..47cdaf0805b 100644
--- a/core/l10n/ia.php
+++ b/core/l10n/ia.php
@@ -80,6 +80,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Compartite in {item} con {user}",
"Unshare" => "Leva compartir",
"notify by email" => "notificar per message de e-posta",
+"can share" => "pote compartir",
"can edit" => "pote modificar",
"access control" => "controlo de accesso",
"create" => "crear",
diff --git a/core/l10n/it.php b/core/l10n/it.php
index 59320286865..106a4af2a56 100644
--- a/core/l10n/it.php
+++ b/core/l10n/it.php
@@ -103,6 +103,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Condiviso in {item} con {user}",
"Unshare" => "Rimuovi condivisione",
"notify by email" => "notifica tramite email",
+"can share" => "può condividere",
"can edit" => "può modificare",
"access control" => "controllo d'accesso",
"create" => "creare",
diff --git a/core/l10n/ja.php b/core/l10n/ja.php
index f612eec193c..1c887e8b072 100644
--- a/core/l10n/ja.php
+++ b/core/l10n/ja.php
@@ -103,6 +103,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "{item} 内で {user} と共有中",
"Unshare" => "共有解除",
"notify by email" => "メールで通知",
+"can share" => "共有可",
"can edit" => "編集を許可",
"access control" => "アクセス権限",
"create" => "作成",
diff --git a/core/l10n/km.php b/core/l10n/km.php
index bb959ce98bf..ab9e79e9023 100644
--- a/core/l10n/km.php
+++ b/core/l10n/km.php
@@ -71,6 +71,7 @@ $TRANSLATIONS = array(
"Resharing is not allowed" => "មិន​អនុញ្ញាត​ឲ្យ​មាន​ការ​ចែក​រំលែក​ឡើង​វិញ",
"Shared in {item} with {user}" => "បាន​ចែក​រំលែក​ក្នុង {item} ជាមួយ {user}",
"Unshare" => "លែង​ចែក​រំលែក",
+"can share" => "អាច​ចែក​រំលែក",
"can edit" => "អាច​កែប្រែ",
"access control" => "សិទ្ធិ​បញ្ជា",
"create" => "បង្កើត",
diff --git a/core/l10n/ko.php b/core/l10n/ko.php
index bd52e5eb277..d99cb7b3133 100644
--- a/core/l10n/ko.php
+++ b/core/l10n/ko.php
@@ -87,6 +87,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "{user} 님과 {item}에서 공유 중",
"Unshare" => "공유 해제",
"notify by email" => "이메일로 알림",
+"can share" => "공유 가능",
"can edit" => "편집 가능",
"access control" => "접근 제어",
"create" => "생성",
diff --git a/core/l10n/lb.php b/core/l10n/lb.php
index 8123c8fe865..e0d774fb062 100644
--- a/core/l10n/lb.php
+++ b/core/l10n/lb.php
@@ -72,6 +72,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Gedeelt an {item} mat {user}",
"Unshare" => "Net méi deelen",
"notify by email" => "via e-mail Bescheed ginn",
+"can share" => "kann deelen",
"can edit" => "kann änneren",
"access control" => "Zougrëffskontroll",
"create" => "erstellen",
diff --git a/core/l10n/lt_LT.php b/core/l10n/lt_LT.php
index 278df5ef460..6b05a085721 100644
--- a/core/l10n/lt_LT.php
+++ b/core/l10n/lt_LT.php
@@ -82,6 +82,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Pasidalino {item} su {user}",
"Unshare" => "Nebesidalinti",
"notify by email" => "pranešti el. paštu",
+"can share" => "gali dalintis",
"can edit" => "gali redaguoti",
"access control" => "priėjimo kontrolė",
"create" => "sukurti",
diff --git a/core/l10n/nb_NO.php b/core/l10n/nb_NO.php
index 3dace79ab7c..28e07c5b2b1 100644
--- a/core/l10n/nb_NO.php
+++ b/core/l10n/nb_NO.php
@@ -103,6 +103,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Delt i {item} med {user}",
"Unshare" => "Avslutt deling",
"notify by email" => "Varsle på email",
+"can share" => "kan dele",
"can edit" => "kan endre",
"access control" => "tilgangskontroll",
"create" => "opprett",
diff --git a/core/l10n/nl.php b/core/l10n/nl.php
index 7d297073222..df1af1ecab6 100644
--- a/core/l10n/nl.php
+++ b/core/l10n/nl.php
@@ -103,6 +103,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Gedeeld in {item} met {user}",
"Unshare" => "Stop met delen",
"notify by email" => "melden per e-mail",
+"can share" => "kan delen",
"can edit" => "kan wijzigen",
"access control" => "toegangscontrole",
"create" => "creëer",
diff --git a/core/l10n/pl.php b/core/l10n/pl.php
index eb6bf8eea09..bc22a87122b 100644
--- a/core/l10n/pl.php
+++ b/core/l10n/pl.php
@@ -101,6 +101,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Współdzielone w {item} z {user}",
"Unshare" => "Zatrzymaj współdzielenie",
"notify by email" => "powiadom przez emaila",
+"can share" => "może współdzielić",
"can edit" => "może edytować",
"access control" => "kontrola dostępu",
"create" => "utwórz",
diff --git a/core/l10n/pt_BR.php b/core/l10n/pt_BR.php
index bffe14ecddb..7c40d498795 100644
--- a/core/l10n/pt_BR.php
+++ b/core/l10n/pt_BR.php
@@ -103,6 +103,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Compartilhado em {item} com {user}",
"Unshare" => "Descompartilhar",
"notify by email" => "notificar por e-mail",
+"can share" => "pode compartilhar",
"can edit" => "pode editar",
"access control" => "controle de acesso",
"create" => "criar",
diff --git a/core/l10n/pt_PT.php b/core/l10n/pt_PT.php
index 73c738b55f9..6288ec464e9 100644
--- a/core/l10n/pt_PT.php
+++ b/core/l10n/pt_PT.php
@@ -103,6 +103,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Partilhado em {item} com {user}",
"Unshare" => "Deixar de partilhar",
"notify by email" => "Notificar por email",
+"can share" => "pode partilhar",
"can edit" => "pode editar",
"access control" => "Controlo de acesso",
"create" => "criar",
diff --git a/core/l10n/ro.php b/core/l10n/ro.php
index c6ffc2ce684..033290b34f9 100644
--- a/core/l10n/ro.php
+++ b/core/l10n/ro.php
@@ -69,6 +69,7 @@ $TRANSLATIONS = array(
"Resharing is not allowed" => "Repartajarea nu este permisă",
"Shared in {item} with {user}" => "Distribuie in {item} si {user}",
"Unshare" => "Anulare partajare",
+"can share" => "se poate partaja",
"can edit" => "poate edita",
"access control" => "control acces",
"create" => "creare",
diff --git a/core/l10n/ru.php b/core/l10n/ru.php
index 2adde7f9ba4..77e7764d2b3 100644
--- a/core/l10n/ru.php
+++ b/core/l10n/ru.php
@@ -103,6 +103,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Общий доступ к {item} с {user}",
"Unshare" => "Закрыть общий доступ",
"notify by email" => "уведомить по почте",
+"can share" => "можно дать доступ",
"can edit" => "может редактировать",
"access control" => "контроль доступа",
"create" => "создать",
diff --git a/core/l10n/sk_SK.php b/core/l10n/sk_SK.php
index 09336bfe5a6..7a274e648ac 100644
--- a/core/l10n/sk_SK.php
+++ b/core/l10n/sk_SK.php
@@ -103,6 +103,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Zdieľané v {item} s {user}",
"Unshare" => "Zrušiť zdieľanie",
"notify by email" => "informovať emailom",
+"can share" => "môže zdieľať",
"can edit" => "môže upraviť",
"access control" => "prístupové práva",
"create" => "vytvoriť",
diff --git a/core/l10n/sl.php b/core/l10n/sl.php
index 35a3c378555..cfe2063624c 100644
--- a/core/l10n/sl.php
+++ b/core/l10n/sl.php
@@ -93,6 +93,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "V souporabi v {item} z uporabnikom {user}",
"Unshare" => "Prekliči souporabo",
"notify by email" => "obvesti po elektronski pošti",
+"can share" => "lahko omogoči souporabo",
"can edit" => "lahko ureja",
"access control" => "nadzor dostopa",
"create" => "ustvari",
diff --git a/core/l10n/sq.php b/core/l10n/sq.php
index 2479d69a4cf..8c4303eca59 100644
--- a/core/l10n/sq.php
+++ b/core/l10n/sq.php
@@ -62,6 +62,7 @@ $TRANSLATIONS = array(
"Resharing is not allowed" => "Rindarja nuk lejohet",
"Shared in {item} with {user}" => "Ndarë në {item} me {user}",
"Unshare" => "Hiq ndarjen",
+"can share" => "mund të ndajnë",
"can edit" => "mund të ndryshosh",
"access control" => "kontrollimi i hyrjeve",
"create" => "krijo",
diff --git a/core/l10n/sv.php b/core/l10n/sv.php
index e8ea85e09b4..67f8f1cd7ec 100644
--- a/core/l10n/sv.php
+++ b/core/l10n/sv.php
@@ -96,6 +96,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Delad i {item} med {user}",
"Unshare" => "Sluta dela",
"notify by email" => "informera via e-post",
+"can share" => "får dela",
"can edit" => "kan redigera",
"access control" => "åtkomstkontroll",
"create" => "skapa",
diff --git a/core/l10n/th_TH.php b/core/l10n/th_TH.php
index f195dce509b..93bbb8c0b38 100644
--- a/core/l10n/th_TH.php
+++ b/core/l10n/th_TH.php
@@ -61,6 +61,7 @@ $TRANSLATIONS = array(
"Resharing is not allowed" => "ไม่อนุญาตให้แชร์ข้อมูลซ้ำได้",
"Shared in {item} with {user}" => "ได้แชร์ {item} ให้กับ {user}",
"Unshare" => "ยกเลิกการแชร์",
+"can share" => "สามารถแชร์ได้",
"can edit" => "สามารถแก้ไข",
"access control" => "ระดับควบคุมการเข้าใช้งาน",
"create" => "สร้าง",
diff --git a/core/l10n/tr.php b/core/l10n/tr.php
index f75de2cb1ee..20e06cea359 100644
--- a/core/l10n/tr.php
+++ b/core/l10n/tr.php
@@ -103,6 +103,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "{item} içinde {user} ile paylaşılanlar",
"Unshare" => "Paylaşmayı Kaldır",
"notify by email" => "e-posta ile bildir",
+"can share" => "paylaşabilir",
"can edit" => "düzenleyebilir",
"access control" => "erişim kontrolü",
"create" => "oluştur",
diff --git a/core/l10n/uk.php b/core/l10n/uk.php
index a9773127951..3d7d3dffac9 100644
--- a/core/l10n/uk.php
+++ b/core/l10n/uk.php
@@ -88,6 +88,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Опубліковано {item} для {user}",
"Unshare" => "Закрити доступ",
"notify by email" => "повідомити по Email",
+"can share" => "можна поділитися",
"can edit" => "може редагувати",
"access control" => "контроль доступу",
"create" => "створити",
diff --git a/core/l10n/vi.php b/core/l10n/vi.php
index 27f2daac596..229d51f6d55 100644
--- a/core/l10n/vi.php
+++ b/core/l10n/vi.php
@@ -82,6 +82,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "Đã được chia sẽ trong {item} với {user}",
"Unshare" => "Bỏ chia sẻ",
"notify by email" => "Thông báo qua email",
+"can share" => "có thể chia sẽ",
"can edit" => "có thể chỉnh sửa",
"access control" => "quản lý truy cập",
"create" => "tạo",
diff --git a/core/l10n/zh_CN.php b/core/l10n/zh_CN.php
index 17b3a82ea66..4cf679658c2 100644
--- a/core/l10n/zh_CN.php
+++ b/core/l10n/zh_CN.php
@@ -94,6 +94,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "在 {item} 与 {user} 共享。",
"Unshare" => "取消共享",
"notify by email" => "以邮件通知",
+"can share" => "可共享",
"can edit" => "可以修改",
"access control" => "访问控制",
"create" => "创建",
diff --git a/core/l10n/zh_TW.php b/core/l10n/zh_TW.php
index d0ba680c042..1657609dec5 100644
--- a/core/l10n/zh_TW.php
+++ b/core/l10n/zh_TW.php
@@ -88,6 +88,7 @@ $TRANSLATIONS = array(
"Shared in {item} with {user}" => "已和 {user} 分享 {item}",
"Unshare" => "取消分享",
"notify by email" => "以 email 通知",
+"can share" => "可分享",
"can edit" => "可編輯",
"access control" => "存取控制",
"create" => "建立",
diff --git a/l10n/ar/core.po b/l10n/ar/core.po
index ad88829c9a1..ddc50ac41a7 100644
--- a/l10n/ar/core.po
+++ b/l10n/ar/core.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
"MIME-Version: 1.0\n"
@@ -377,12 +377,12 @@ msgstr ""
msgid "Share"
msgstr "شارك"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "خطأ"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "حصل خطأ عند عملية المشاركة"
@@ -477,7 +477,7 @@ msgstr ""
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "يمكن المشاركة"
#: js/share.js:576
msgid "can edit"
@@ -499,27 +499,27 @@ msgstr "تحديث"
msgid "delete"
msgstr "حذف"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "محمي بكلمة السر"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "حصل خطأ عند عملية إزالة تاريخ إنتهاء الصلاحية"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "حصل خطأ عند عملية تعيين تاريخ إنتهاء الصلاحية"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "جاري الارسال ..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "تم ارسال البريد الالكتروني"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "تحذير"
diff --git a/l10n/ast/core.po b/l10n/ast/core.po
index 858f2aa6a57..b291e6193f3 100644
--- a/l10n/ast/core.po
+++ b/l10n/ast/core.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Asturian (http://www.transifex.com/projects/p/owncloud/language/ast/)\n"
"MIME-Version: 1.0\n"
@@ -358,12 +358,12 @@ msgstr "Compartío con {recipients}"
msgid "Share"
msgstr "Compartir"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Fallu"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Fallu mientres la compartición"
@@ -458,7 +458,7 @@ msgstr "notificar per corréu"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "pue compartir"
#: js/share.js:576
msgid "can edit"
@@ -480,27 +480,27 @@ msgstr "xubir"
msgid "delete"
msgstr "desaniciar"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Contraseña protexida"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Fallu desafitando la data de caducidá"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Fallu afitando la fecha de caducidá"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Unviando ..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "Corréu unviáu"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Avisu"
diff --git a/l10n/ca/core.po b/l10n/ca/core.po
index e3bb368bbfa..d2ba2e0b572 100644
--- a/l10n/ca/core.po
+++ b/l10n/ca/core.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
"MIME-Version: 1.0\n"
@@ -357,12 +357,12 @@ msgstr "Compartit amb {recipients}"
msgid "Share"
msgstr "Comparteix"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Error"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Error en compartir"
@@ -457,7 +457,7 @@ msgstr "notifica per correu electrònic"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "pot compartir"
#: js/share.js:576
msgid "can edit"
@@ -479,27 +479,27 @@ msgstr "actualitza"
msgid "delete"
msgstr "elimina"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Protegeix amb contrasenya"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Error en eliminar la data de venciment"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Error en establir la data de venciment"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Enviant..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "El correu electrónic s'ha enviat"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Avís"
diff --git a/l10n/cs_CZ/core.po b/l10n/cs_CZ/core.po
index 9448374dc41..b4cb74e1e67 100644
--- a/l10n/cs_CZ/core.po
+++ b/l10n/cs_CZ/core.po
@@ -17,8 +17,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
"MIME-Version: 1.0\n"
@@ -369,12 +369,12 @@ msgstr "Sdíleno s {recipients}"
msgid "Share"
msgstr "Sdílet"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Chyba"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Chyba při sdílení"
@@ -469,7 +469,7 @@ msgstr "upozornit e-mailem"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "může sdílet"
#: js/share.js:576
msgid "can edit"
@@ -491,27 +491,27 @@ msgstr "aktualizovat"
msgid "delete"
msgstr "smazat"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Chráněno heslem"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Chyba při odstraňování data vypršení platnosti"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Chyba při nastavení data vypršení platnosti"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Odesílám ..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "E-mail odeslán"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Varování"
diff --git a/l10n/da/core.po b/l10n/da/core.po
index ccb6f6fdb9b..100b691774e 100644
--- a/l10n/da/core.po
+++ b/l10n/da/core.po
@@ -16,8 +16,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
"MIME-Version: 1.0\n"
@@ -363,12 +363,12 @@ msgstr "Delt med {recipients}"
msgid "Share"
msgstr "Del"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Fejl"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Fejl under deling"
@@ -463,7 +463,7 @@ msgstr "Giv besked med mail"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "kan dele"
#: js/share.js:576
msgid "can edit"
@@ -485,27 +485,27 @@ msgstr "opdater"
msgid "delete"
msgstr "slet"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Beskyttet med adgangskode"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Fejl ved fjernelse af udløbsdato"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Fejl under sætning af udløbsdato"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Sender ..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "E-mail afsendt"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Advarsel"
diff --git a/l10n/de/core.po b/l10n/de/core.po
index bbbc2bcdb7d..2c56b2061b8 100644
--- a/l10n/de/core.po
+++ b/l10n/de/core.po
@@ -18,8 +18,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
"MIME-Version: 1.0\n"
@@ -365,12 +365,12 @@ msgstr "Geteilt mit {recipients}"
msgid "Share"
msgstr "Teilen"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Fehler"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Fehler beim Teilen"
@@ -465,7 +465,7 @@ msgstr "Per E-Mail informieren"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "Kann teilen"
#: js/share.js:576
msgid "can edit"
@@ -487,27 +487,27 @@ msgstr "aktualisieren"
msgid "delete"
msgstr "löschen"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Durch ein Passwort geschützt"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Fehler beim Entfernen des Ablaufdatums"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Fehler beim Setzen des Ablaufdatums"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Sende ..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "E-Mail wurde verschickt"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Warnung"
diff --git a/l10n/de/files_sharing.po b/l10n/de/files_sharing.po
index 4c238c5b728..7a79a5d6269 100644
--- a/l10n/de/files_sharing.po
+++ b/l10n/de/files_sharing.po
@@ -13,9 +13,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 07:11+0000\n"
+"Last-Translator: Mario Siegmann <mario_siegmann@web.de>\n"
"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -59,11 +59,11 @@ msgstr "Du hast bis jetzt keine Dateien über einen Link mit anderen geteilt."
msgid "Add {name} from {owner}@{remote}"
msgstr "{name} wird von {owner}@{remote} hinzugefügt"
-#: js/public.js:200
+#: js/public.js:204
msgid "No ownCloud installation found at {remote}"
msgstr "Keine OwnCloud-Installation auf {remote} gefunden"
-#: js/public.js:201
+#: js/public.js:205
msgid "Invalid ownCloud url"
msgstr "Ungültige OwnCloud-URL"
@@ -146,7 +146,7 @@ msgstr "Direkter Link"
#: templates/settings-admin.php:3
msgid "Remote Shares"
-msgstr ""
+msgstr "Entfernte Freigaben"
#: templates/settings-admin.php:7
msgid "Allow other instances to mount public links shared from this server"
diff --git a/l10n/de_AT/core.po b/l10n/de_AT/core.po
index c9e57b05cea..de3ac735fdc 100644
--- a/l10n/de_AT/core.po
+++ b/l10n/de_AT/core.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: German (Austria) (http://www.transifex.com/projects/p/owncloud/language/de_AT/)\n"
"MIME-Version: 1.0\n"
@@ -355,12 +355,12 @@ msgstr ""
msgid "Share"
msgstr "Freigeben"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr ""
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr ""
@@ -455,7 +455,7 @@ msgstr ""
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "Kann teilen"
#: js/share.js:576
msgid "can edit"
@@ -477,27 +477,27 @@ msgstr ""
msgid "delete"
msgstr ""
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr ""
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr ""
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr ""
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr ""
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr ""
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr ""
diff --git a/l10n/de_DE/core.po b/l10n/de_DE/core.po
index 06f773f1dea..54d41deb292 100644
--- a/l10n/de_DE/core.po
+++ b/l10n/de_DE/core.po
@@ -18,8 +18,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n"
"MIME-Version: 1.0\n"
@@ -365,12 +365,12 @@ msgstr "Geteilt mit {recipients}"
msgid "Share"
msgstr "Teilen"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Fehler"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Fehler beim Teilen"
@@ -465,7 +465,7 @@ msgstr "Per E-Mail informieren"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "kann geteilt werden"
#: js/share.js:576
msgid "can edit"
@@ -487,27 +487,27 @@ msgstr "aktualisieren"
msgid "delete"
msgstr "löschen"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Passwortgeschützt"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Fehler beim Entfernen des Ablaufdatums"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Fehler beim Setzen des Ablaufdatums"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Sende ..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "Email gesendet"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Warnung"
diff --git a/l10n/de_DE/files_sharing.po b/l10n/de_DE/files_sharing.po
index 22d95c85d4a..b54e24dad83 100644
--- a/l10n/de_DE/files_sharing.po
+++ b/l10n/de_DE/files_sharing.po
@@ -12,9 +12,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 07:11+0000\n"
+"Last-Translator: Mario Siegmann <mario_siegmann@web.de>\n"
"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -58,11 +58,11 @@ msgstr "Sie haben bis jetzt keine Dateien über einen Link mit anderen geteilt."
msgid "Add {name} from {owner}@{remote}"
msgstr "{name} wird von {owner}@{remote} hinzugefügt"
-#: js/public.js:200
+#: js/public.js:204
msgid "No ownCloud installation found at {remote}"
msgstr "Keine OwnCloud-Installation auf {remote} gefunden"
-#: js/public.js:201
+#: js/public.js:205
msgid "Invalid ownCloud url"
msgstr "Ungültige OwnCloud-URL"
@@ -145,7 +145,7 @@ msgstr "Direkte Verlinkung"
#: templates/settings-admin.php:3
msgid "Remote Shares"
-msgstr ""
+msgstr "Entfernte Freigaben"
#: templates/settings-admin.php:7
msgid "Allow other instances to mount public links shared from this server"
diff --git a/l10n/el/core.po b/l10n/el/core.po
index adb74f6fa66..eb1d70a9b1c 100644
--- a/l10n/el/core.po
+++ b/l10n/el/core.po
@@ -18,8 +18,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
"MIME-Version: 1.0\n"
@@ -365,12 +365,12 @@ msgstr "Διαμοιράστηκε με {recipients}"
msgid "Share"
msgstr "Διαμοιρασμός"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Σφάλμα"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Σφάλμα κατά τον διαμοιρασμό"
@@ -465,7 +465,7 @@ msgstr "ειδοποίηση με email"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "δυνατότητα διαμοιρασμού"
#: js/share.js:576
msgid "can edit"
@@ -487,27 +487,27 @@ msgstr "ενημέρωση"
msgid "delete"
msgstr "διαγραφή"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Προστασία με συνθηματικό"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Σφάλμα κατά την διαγραφή της ημ. λήξης"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Σφάλμα κατά τον ορισμό ημ. λήξης"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Αποστολή..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "Το Email απεστάλη "
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Προειδοποίηση"
diff --git a/l10n/en_GB/core.po b/l10n/en_GB/core.po
index a81fb0710a2..0d14bcf6bfe 100644
--- a/l10n/en_GB/core.po
+++ b/l10n/en_GB/core.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/en_GB/)\n"
"MIME-Version: 1.0\n"
@@ -355,12 +355,12 @@ msgstr "Shared with {recipients}"
msgid "Share"
msgstr "Share"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Error"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Error whilst sharing"
@@ -455,7 +455,7 @@ msgstr "notify by email"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "can share"
#: js/share.js:576
msgid "can edit"
@@ -477,27 +477,27 @@ msgstr "update"
msgid "delete"
msgstr "delete"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Password protected"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Error unsetting expiration date"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Error setting expiration date"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Sending ..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "Email sent"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Warning"
diff --git a/l10n/en_GB/files_sharing.po b/l10n/en_GB/files_sharing.po
index f6c7b07f517..36f1da9e1fb 100644
--- a/l10n/en_GB/files_sharing.po
+++ b/l10n/en_GB/files_sharing.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 12:00+0000\n"
+"Last-Translator: Darren Richardson <transifex@mnestis.net>\n"
"Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/en_GB/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -54,11 +54,11 @@ msgstr "You haven't shared any files by link yet."
msgid "Add {name} from {owner}@{remote}"
msgstr "Add {name} from {owner}@{remote}"
-#: js/public.js:200
+#: js/public.js:204
msgid "No ownCloud installation found at {remote}"
msgstr "No ownCloud installation found at {remote}"
-#: js/public.js:201
+#: js/public.js:205
msgid "Invalid ownCloud url"
msgstr "Invalid ownCloud URL"
@@ -141,7 +141,7 @@ msgstr "Direct link"
#: templates/settings-admin.php:3
msgid "Remote Shares"
-msgstr ""
+msgstr "Remote Shares"
#: templates/settings-admin.php:7
msgid "Allow other instances to mount public links shared from this server"
diff --git a/l10n/eo/core.po b/l10n/eo/core.po
index 801050be3d0..f68ec02caf0 100644
--- a/l10n/eo/core.po
+++ b/l10n/eo/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
"MIME-Version: 1.0\n"
@@ -356,12 +356,12 @@ msgstr ""
msgid "Share"
msgstr "Kunhavigi"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Eraro"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Eraro dum kunhavigo"
@@ -456,7 +456,7 @@ msgstr "avizi per retpoŝto"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "kunhavebla"
#: js/share.js:576
msgid "can edit"
@@ -478,27 +478,27 @@ msgstr "ĝisdatigi"
msgid "delete"
msgstr "forigi"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Protektita per pasvorto"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Eraro dum malagordado de limdato"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Eraro dum agordado de limdato"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Sendante..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "La retpoŝtaĵo sendiĝis"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Averto"
diff --git a/l10n/es/core.po b/l10n/es/core.po
index 7b50de05bc2..f6116f68167 100644
--- a/l10n/es/core.po
+++ b/l10n/es/core.po
@@ -24,8 +24,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
"MIME-Version: 1.0\n"
@@ -371,12 +371,12 @@ msgstr "Compartido con {recipients}"
msgid "Share"
msgstr "Compartir"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Error"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Error al compartir"
@@ -471,7 +471,7 @@ msgstr "notificar por correo electrónico"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "puede compartir"
#: js/share.js:576
msgid "can edit"
@@ -493,27 +493,27 @@ msgstr "actualizar"
msgid "delete"
msgstr "eliminar"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Protegido con contraseña"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Error eliminando fecha de caducidad"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Error estableciendo fecha de caducidad"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Enviando..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "Correo electrónico enviado"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Precaución"
diff --git a/l10n/es_AR/core.po b/l10n/es_AR/core.po
index fcc88aea856..ad9cc452d6b 100644
--- a/l10n/es_AR/core.po
+++ b/l10n/es_AR/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
"MIME-Version: 1.0\n"
@@ -356,12 +356,12 @@ msgstr ""
msgid "Share"
msgstr "Compartir"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Error"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Error al compartir"
@@ -456,7 +456,7 @@ msgstr "notificar por correo"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "puede compartir"
#: js/share.js:576
msgid "can edit"
@@ -478,27 +478,27 @@ msgstr "actualizar"
msgid "delete"
msgstr "borrar"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Protegido por contraseña"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Error al remover la fecha de vencimiento"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Error al asignar fecha de vencimiento"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Mandando..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "e-mail mandado"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Atención"
diff --git a/l10n/es_MX/core.po b/l10n/es_MX/core.po
index 995eb38d1d9..6351243c6dc 100644
--- a/l10n/es_MX/core.po
+++ b/l10n/es_MX/core.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Spanish (Mexico) (http://www.transifex.com/projects/p/owncloud/language/es_MX/)\n"
"MIME-Version: 1.0\n"
@@ -354,12 +354,12 @@ msgstr ""
msgid "Share"
msgstr "Compartir"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Error"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Error al compartir"
@@ -454,7 +454,7 @@ msgstr "notificar al usuario por correo electrónico"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "puede compartir"
#: js/share.js:576
msgid "can edit"
@@ -476,27 +476,27 @@ msgstr "actualizar"
msgid "delete"
msgstr "eliminar"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Protegido con contraseña"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Error eliminando fecha de caducidad"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Error estableciendo fecha de caducidad"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Enviando..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "Correo electrónico enviado"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Precaución"
diff --git a/l10n/et_EE/core.po b/l10n/et_EE/core.po
index 021126939a3..2490adc5cf5 100644
--- a/l10n/et_EE/core.po
+++ b/l10n/et_EE/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
"MIME-Version: 1.0\n"
@@ -356,12 +356,12 @@ msgstr "Jagatud {recipients}"
msgid "Share"
msgstr "Jaga"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Viga"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Viga jagamisel"
@@ -456,7 +456,7 @@ msgstr "teavita e-postiga"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "saab jagada"
#: js/share.js:576
msgid "can edit"
@@ -478,27 +478,27 @@ msgstr "uuenda"
msgid "delete"
msgstr "kustuta"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Parooliga kaitstud"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Viga aegumise kuupäeva eemaldamisel"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Viga aegumise kuupäeva määramisel"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Saatmine ..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "E-kiri on saadetud"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Hoiatus"
diff --git a/l10n/et_EE/files_sharing.po b/l10n/et_EE/files_sharing.po
index 269c5d28687..847a3a29260 100644
--- a/l10n/et_EE/files_sharing.po
+++ b/l10n/et_EE/files_sharing.po
@@ -4,14 +4,14 @@
#
# Translators:
# Pisike Sipelgas <pisike.sipelgas@gmail.com>, 2013-2014
-# Rivo Zängov <eraser@eraser.ee>, 2013
+# Rivo Zängov <eraser@eraser.ee>, 2013-2014
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 22:50+0000\n"
+"Last-Translator: Rivo Zängov <eraser@eraser.ee>\n"
"Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -55,11 +55,11 @@ msgstr "Sa pole lingiga jaganud veel ühtegi faili."
msgid "Add {name} from {owner}@{remote}"
msgstr "Lisa {name} kohast {owner}@{remote}"
-#: js/public.js:200
+#: js/public.js:204
msgid "No ownCloud installation found at {remote}"
msgstr "Ei leitud ownCloud paigaldust asukohas {remote}"
-#: js/public.js:201
+#: js/public.js:205
msgid "Invalid ownCloud url"
msgstr "Vigane ownCloud url"
@@ -142,7 +142,7 @@ msgstr "Otsene link"
#: templates/settings-admin.php:3
msgid "Remote Shares"
-msgstr ""
+msgstr "Eemalolevad jagamised"
#: templates/settings-admin.php:7
msgid "Allow other instances to mount public links shared from this server"
diff --git a/l10n/eu/core.po b/l10n/eu/core.po
index 74ff0ec9775..e7ded8de87e 100644
--- a/l10n/eu/core.po
+++ b/l10n/eu/core.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
"MIME-Version: 1.0\n"
@@ -358,12 +358,12 @@ msgstr "{recipients}-rekin partekatua."
msgid "Share"
msgstr "Elkarbanatu"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Errorea"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Errore bat egon da elkarbanatzean"
@@ -458,7 +458,7 @@ msgstr "jakinarazi eposta bidez"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "elkarbana dezake"
#: js/share.js:576
msgid "can edit"
@@ -480,27 +480,27 @@ msgstr "eguneratu"
msgid "delete"
msgstr "ezabatu"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Pasahitzarekin babestuta"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Errorea izan da muga data kentzean"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Errore bat egon da muga data ezartzean"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Bidaltzen ..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "Eposta bidalia"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Abisua"
diff --git a/l10n/fa/core.po b/l10n/fa/core.po
index 48aebdcdf8d..0bf15975943 100644
--- a/l10n/fa/core.po
+++ b/l10n/fa/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
"MIME-Version: 1.0\n"
@@ -351,12 +351,12 @@ msgstr ""
msgid "Share"
msgstr "اشتراک‌گذاری"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "خطا"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "خطا درحال به اشتراک گذاشتن"
@@ -451,7 +451,7 @@ msgstr ""
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "قابل به اشتراک گذاری"
#: js/share.js:576
msgid "can edit"
@@ -473,27 +473,27 @@ msgstr "به روز"
msgid "delete"
msgstr "پاک کردن"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "نگهداری از رمز عبور"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "خطا در تنظیم نکردن تاریخ انقضا "
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "خطا در تنظیم تاریخ انقضا"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "درحال ارسال ..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "ایمیل ارسال شد"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "اخطار"
diff --git a/l10n/fi_FI/core.po b/l10n/fi_FI/core.po
index 76b2a4ad4c8..20f8533882c 100644
--- a/l10n/fi_FI/core.po
+++ b/l10n/fi_FI/core.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
"MIME-Version: 1.0\n"
@@ -357,12 +357,12 @@ msgstr "Jaettu henkilöiden {recipients} kanssa"
msgid "Share"
msgstr "Jaa"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Virhe"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Virhe jaettaessa"
@@ -457,7 +457,7 @@ msgstr "ilmoita sähköpostitse"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "jaa"
#: js/share.js:576
msgid "can edit"
@@ -479,27 +479,27 @@ msgstr "päivitä"
msgid "delete"
msgstr "poista"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Salasanasuojattu"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Virhe purettaessa eräpäivää"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Virhe päättymispäivää asettaessa"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Lähetetään..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "Sähköposti lähetetty"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Varoitus"
diff --git a/l10n/fi_FI/files_sharing.po b/l10n/fi_FI/files_sharing.po
index 573a02fb60f..c7eb969d322 100644
--- a/l10n/fi_FI/files_sharing.po
+++ b/l10n/fi_FI/files_sharing.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 07:00+0000\n"
+"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
"Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -54,11 +54,11 @@ msgstr "Et ole vielä jakanut yhtäkään tiedostoa linkin kautta."
msgid "Add {name} from {owner}@{remote}"
msgstr "Lisää {name} käyttäjältä {owner}@{remote}"
-#: js/public.js:200
+#: js/public.js:204
msgid "No ownCloud installation found at {remote}"
msgstr "ownCloud-asennusta ei löytynyt kohteesta {remote}"
-#: js/public.js:201
+#: js/public.js:205
msgid "Invalid ownCloud url"
msgstr "Virheellinen ownCloud-osoite"
@@ -141,7 +141,7 @@ msgstr "Suora linkki"
#: templates/settings-admin.php:3
msgid "Remote Shares"
-msgstr ""
+msgstr "Etäjaot"
#: templates/settings-admin.php:7
msgid "Allow other instances to mount public links shared from this server"
diff --git a/l10n/fr/core.po b/l10n/fr/core.po
index c47ef8e7743..59d27585a0d 100644
--- a/l10n/fr/core.po
+++ b/l10n/fr/core.po
@@ -18,8 +18,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
"MIME-Version: 1.0\n"
@@ -365,12 +365,12 @@ msgstr "Partagé avec {recipients}"
msgid "Share"
msgstr "Partager"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Erreur"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Erreur lors de la mise en partage"
@@ -465,7 +465,7 @@ msgstr "Notifier par email"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "peut partager"
#: js/share.js:576
msgid "can edit"
@@ -487,27 +487,27 @@ msgstr "mettre à jour"
msgid "delete"
msgstr "supprimer"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Protégé par un mot de passe"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Une erreur est survenue pendant la suppression de la date d'expiration"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Erreur lors de la spécification de la date d'expiration"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "En cours d'envoi ..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "Email envoyé"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Attention"
diff --git a/l10n/gl/core.po b/l10n/gl/core.po
index 7c3296820fd..f9ea4cd09f9 100644
--- a/l10n/gl/core.po
+++ b/l10n/gl/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
"MIME-Version: 1.0\n"
@@ -356,12 +356,12 @@ msgstr "Compartido con {recipients}"
msgid "Share"
msgstr "Compartir"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Erro"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Produciuse un erro ao compartir"
@@ -456,7 +456,7 @@ msgstr "notificar por correo"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "pode compartir"
#: js/share.js:576
msgid "can edit"
@@ -478,27 +478,27 @@ msgstr "actualizar"
msgid "delete"
msgstr "eliminar"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Protexido con contrasinal"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Produciuse un erro ao retirar a data de caducidade"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Produciuse un erro ao definir a data de caducidade"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Enviando..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "Correo enviado"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Aviso"
diff --git a/l10n/gl/files_sharing.po b/l10n/gl/files_sharing.po
index 96d9b396914..8bac45dd149 100644
--- a/l10n/gl/files_sharing.po
+++ b/l10n/gl/files_sharing.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 08:11+0000\n"
+"Last-Translator: Miguel Anxo Bouzada <mbouzada@gmail.com>\n"
"Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -55,11 +55,11 @@ msgstr "Aínda non compartiu ningún ficheiro por ligazón."
msgid "Add {name} from {owner}@{remote}"
msgstr "Engadir {name} desde {owner}@{remote}"
-#: js/public.js:200
+#: js/public.js:204
msgid "No ownCloud installation found at {remote}"
msgstr "Non se atopou unha instalación do ownCloud en {remote}"
-#: js/public.js:201
+#: js/public.js:205
msgid "Invalid ownCloud url"
msgstr "URL incorrecta do ownCloud"
@@ -142,7 +142,7 @@ msgstr "Ligazón directa"
#: templates/settings-admin.php:3
msgid "Remote Shares"
-msgstr ""
+msgstr "Comparticións remotas"
#: templates/settings-admin.php:7
msgid "Allow other instances to mount public links shared from this server"
diff --git a/l10n/he/core.po b/l10n/he/core.po
index 67b0bf6c94e..eaaff662f1b 100644
--- a/l10n/he/core.po
+++ b/l10n/he/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
"MIME-Version: 1.0\n"
@@ -356,12 +356,12 @@ msgstr ""
msgid "Share"
msgstr "שתף"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "שגיאה"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "שגיאה במהלך השיתוף"
@@ -456,7 +456,7 @@ msgstr ""
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "ניתן לשתף"
#: js/share.js:576
msgid "can edit"
@@ -478,27 +478,27 @@ msgstr "עדכון"
msgid "delete"
msgstr "מחיקה"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "מוגן בססמה"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "אירעה שגיאה בביטול תאריך התפוגה"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "אירעה שגיאה בעת הגדרת תאריך התפוגה"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "מתבצעת שליחה ..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "הודעת הדוא״ל נשלחה"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "אזהרה"
diff --git a/l10n/hu_HU/core.po b/l10n/hu_HU/core.po
index 54ccc79da19..2e3be93fb3c 100644
--- a/l10n/hu_HU/core.po
+++ b/l10n/hu_HU/core.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
"MIME-Version: 1.0\n"
@@ -358,12 +358,12 @@ msgstr "Megosztva ővelük: {recipients}"
msgid "Share"
msgstr "Megosztás"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Hiba"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Nem sikerült létrehozni a megosztást"
@@ -458,7 +458,7 @@ msgstr "email értesítés"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "megosztható"
#: js/share.js:576
msgid "can edit"
@@ -480,27 +480,27 @@ msgstr "szerkeszt"
msgid "delete"
msgstr "töröl"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Jelszóval van védve"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Nem sikerült a lejárati időt törölni"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Nem sikerült a lejárati időt beállítani"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Küldés ..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "Az emailt elküldtük"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Figyelmeztetés"
diff --git a/l10n/ia/core.po b/l10n/ia/core.po
index edcfc1ad6d0..758b6e7c98a 100644
--- a/l10n/ia/core.po
+++ b/l10n/ia/core.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
"MIME-Version: 1.0\n"
@@ -355,12 +355,12 @@ msgstr ""
msgid "Share"
msgstr "Compartir"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Error"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Error quando on compartiva"
@@ -455,7 +455,7 @@ msgstr "notificar per message de e-posta"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "pote compartir"
#: js/share.js:576
msgid "can edit"
@@ -477,27 +477,27 @@ msgstr "actualisar"
msgid "delete"
msgstr "deler"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Proteger con contrasigno"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Error quando on levava le data de expiration"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Error quando on fixava le data de expiration"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Inviante ..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "Message de e-posta inviate"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Aviso"
diff --git a/l10n/id/files_sharing.po b/l10n/id/files_sharing.po
index a2a99ced31c..6aa1b2d56d4 100644
--- a/l10n/id/files_sharing.po
+++ b/l10n/id/files_sharing.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 09:31+0000\n"
+"Last-Translator: Arif Budiman <arifpedia@gmail.com>\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,7 +20,7 @@ msgstr ""
#: ajax/external.php:20
msgid "Server to server sharing is not enabled on this server"
-msgstr ""
+msgstr "Berbagi server ke server tidaj diaktifkan pada server ini"
#: ajax/external.php:50
msgid "Couldn't add remote share"
@@ -28,39 +28,39 @@ msgstr ""
#: appinfo/app.php:33 js/app.js:34
msgid "Shared with you"
-msgstr ""
+msgstr "Dibagikan dengan Anda"
#: appinfo/app.php:42 js/app.js:53
msgid "Shared with others"
-msgstr ""
+msgstr "Dibagikan dengan lainnya"
#: appinfo/app.php:51 js/app.js:72
msgid "Shared by link"
-msgstr ""
+msgstr "Dibagikan dengan tautan"
#: js/app.js:35
msgid "No files have been shared with you yet."
-msgstr ""
+msgstr "Tidak ada berkas yang dibagikan kepada Anda."
#: js/app.js:54
msgid "You haven't shared any files yet."
-msgstr ""
+msgstr "Anda belum berbagi berkas apapun."
#: js/app.js:73
msgid "You haven't shared any files by link yet."
-msgstr ""
+msgstr "Anda belum berbagi berkas dengan tautan satupun."
#: js/external.js:45 js/external.js:48
msgid "Add {name} from {owner}@{remote}"
-msgstr ""
+msgstr "Tambah {name} dari {owner}@{remote}"
-#: js/public.js:200
+#: js/public.js:204
msgid "No ownCloud installation found at {remote}"
-msgstr ""
+msgstr "Tidak ada instalasi ownCloud yang ditemukan di {remote}"
-#: js/public.js:201
+#: js/public.js:205
msgid "Invalid ownCloud url"
-msgstr ""
+msgstr "URL ownCloud tidak sah"
#: js/share.js:60
msgid "Shared by {owner}"
@@ -88,7 +88,7 @@ msgstr "Nama"
#: templates/list.php:20
msgid "Share time"
-msgstr ""
+msgstr "Bagikan waktu"
#: templates/part.404.php:3
msgid "Sorry, this link doesn’t seem to work anymore."
@@ -116,11 +116,11 @@ msgstr "Untuk info lebih lanjut, silakan tanyakan orang yang mengirim tautan ini
#: templates/public.php:20
msgid "Save to ownCloud"
-msgstr ""
+msgstr "Simpan ke ownCloud"
#: templates/public.php:22
msgid "example.com/owncloud"
-msgstr ""
+msgstr "contoh.com/owncloud"
#: templates/public.php:23
msgid "Save"
@@ -133,7 +133,7 @@ msgstr "Unduh"
#: templates/public.php:59
#, php-format
msgid "Download %s"
-msgstr ""
+msgstr "Unduh %s"
#: templates/public.php:63
msgid "Direct link"
@@ -149,4 +149,4 @@ msgstr ""
#: templates/settings-admin.php:11
msgid "Allow users to mount public link shares"
-msgstr ""
+msgstr "Izinkan pengguna untuk mengaitkan tautan berbagi publik"
diff --git a/l10n/it/core.po b/l10n/it/core.po
index 32be86c304e..c645ceb1829 100644
--- a/l10n/it/core.po
+++ b/l10n/it/core.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
"MIME-Version: 1.0\n"
@@ -358,12 +358,12 @@ msgstr "Condiviso con {recipients}"
msgid "Share"
msgstr "Condividi"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Errore"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Errore durante la condivisione"
@@ -458,7 +458,7 @@ msgstr "notifica tramite email"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "può condividere"
#: js/share.js:576
msgid "can edit"
@@ -480,27 +480,27 @@ msgstr "aggiornare"
msgid "delete"
msgstr "elimina"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Protetta da password"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Errore durante la rimozione della data di scadenza"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Errore durante l'impostazione della data di scadenza"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Invio in corso..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "Messaggio inviato"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Avviso"
diff --git a/l10n/it/files_sharing.po b/l10n/it/files_sharing.po
index 660a0b0a3af..428c5fc721f 100644
--- a/l10n/it/files_sharing.po
+++ b/l10n/it/files_sharing.po
@@ -10,9 +10,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 17:02+0000\n"
+"Last-Translator: Paolo Velati <paolo.velati@gmail.com>\n"
"Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -56,11 +56,11 @@ msgstr "Non hai ancora condiviso alcun file tramite collegamento."
msgid "Add {name} from {owner}@{remote}"
msgstr "Aggiungi {name} da {owner}@{remote}"
-#: js/public.js:200
+#: js/public.js:204
msgid "No ownCloud installation found at {remote}"
msgstr "Nessuna installazione di ownCloud trovata su {remote}"
-#: js/public.js:201
+#: js/public.js:205
msgid "Invalid ownCloud url"
msgstr "URL di ownCloud non valido"
@@ -143,7 +143,7 @@ msgstr "Collegamento diretto"
#: templates/settings-admin.php:3
msgid "Remote Shares"
-msgstr ""
+msgstr "Condivisioni Remote"
#: templates/settings-admin.php:7
msgid "Allow other instances to mount public links shared from this server"
diff --git a/l10n/ja/core.po b/l10n/ja/core.po
index 1d486b8aa63..f4989b20b75 100644
--- a/l10n/ja/core.po
+++ b/l10n/ja/core.po
@@ -14,8 +14,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
"MIME-Version: 1.0\n"
@@ -356,12 +356,12 @@ msgstr "{recipients} と共有"
msgid "Share"
msgstr "共有"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "エラー"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "共有でエラー発生"
@@ -456,7 +456,7 @@ msgstr "メールで通知"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "共有可"
#: js/share.js:576
msgid "can edit"
@@ -478,27 +478,27 @@ msgstr "アップデート"
msgid "delete"
msgstr "削除"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "パスワード保護"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "有効期限の未設定エラー"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "有効期限の設定でエラー発生"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "送信中..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "メールを送信しました"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "警告"
diff --git a/l10n/km/core.po b/l10n/km/core.po
index c6968584136..6fba9e5444d 100644
--- a/l10n/km/core.po
+++ b/l10n/km/core.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Khmer (http://www.transifex.com/projects/p/owncloud/language/km/)\n"
"MIME-Version: 1.0\n"
@@ -350,12 +350,12 @@ msgstr ""
msgid "Share"
msgstr "ចែក​រំលែក"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "កំហុស"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "កំហុស​ពេល​ចែក​រំលែក"
@@ -450,7 +450,7 @@ msgstr ""
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "អាច​ចែក​រំលែក"
#: js/share.js:576
msgid "can edit"
@@ -472,27 +472,27 @@ msgstr "ធ្វើ​បច្ចុប្បន្នភាព"
msgid "delete"
msgstr "លុប"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "បាន​ការ​ពារ​ដោយ​ពាក្យ​សម្ងាត់"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr ""
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr ""
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "កំពុង​ផ្ញើ ..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "បាន​ផ្ញើ​អ៊ីមែល"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "បម្រាម"
diff --git a/l10n/ko/core.po b/l10n/ko/core.po
index 7fb3d095159..5f161ee1759 100644
--- a/l10n/ko/core.po
+++ b/l10n/ko/core.po
@@ -14,8 +14,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
"MIME-Version: 1.0\n"
@@ -356,12 +356,12 @@ msgstr ""
msgid "Share"
msgstr "공유"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "오류"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "공유하는 중 오류 발생"
@@ -456,7 +456,7 @@ msgstr "이메일로 알림"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "공유 가능"
#: js/share.js:576
msgid "can edit"
@@ -478,27 +478,27 @@ msgstr "업데이트"
msgid "delete"
msgstr "삭제"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "암호로 보호됨"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "만료 날짜 해제 오류"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "만료 날짜 설정 오류"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "전송 중..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "이메일 발송됨"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "경고"
diff --git a/l10n/lb/core.po b/l10n/lb/core.po
index 0fd841a370a..36d2180e990 100644
--- a/l10n/lb/core.po
+++ b/l10n/lb/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
"MIME-Version: 1.0\n"
@@ -356,12 +356,12 @@ msgstr ""
msgid "Share"
msgstr "Deelen"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Feeler"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Feeler beim Deelen"
@@ -456,7 +456,7 @@ msgstr "via e-mail Bescheed ginn"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "kann deelen"
#: js/share.js:576
msgid "can edit"
@@ -478,27 +478,27 @@ msgstr "aktualiséieren"
msgid "delete"
msgstr "läschen"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Passwuertgeschützt"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Feeler beim Läsche vum Verfallsdatum"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Feeler beim Setze vum Verfallsdatum"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Gëtt geschéckt..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "Email geschéckt"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Warnung"
diff --git a/l10n/lt_LT/core.po b/l10n/lt_LT/core.po
index 78943c3fb9f..955358a13cd 100644
--- a/l10n/lt_LT/core.po
+++ b/l10n/lt_LT/core.po
@@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
"MIME-Version: 1.0\n"
@@ -364,12 +364,12 @@ msgstr ""
msgid "Share"
msgstr "Dalintis"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Klaida"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Klaida, dalijimosi metu"
@@ -464,7 +464,7 @@ msgstr "pranešti el. paštu"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "gali dalintis"
#: js/share.js:576
msgid "can edit"
@@ -486,27 +486,27 @@ msgstr "atnaujinti"
msgid "delete"
msgstr "ištrinti"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Apsaugota slaptažodžiu"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Klaida nuimant galiojimo laiką"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Klaida nustatant galiojimo laiką"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Siunčiama..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "Laiškas išsiųstas"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Įspėjimas"
diff --git a/l10n/nb_NO/core.po b/l10n/nb_NO/core.po
index be53e02e9ab..d890c710d4d 100644
--- a/l10n/nb_NO/core.po
+++ b/l10n/nb_NO/core.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
"MIME-Version: 1.0\n"
@@ -358,12 +358,12 @@ msgstr "Delt med {recipients}"
msgid "Share"
msgstr "Del"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Feil"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Feil under deling"
@@ -458,7 +458,7 @@ msgstr "Varsle på email"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "kan dele"
#: js/share.js:576
msgid "can edit"
@@ -480,27 +480,27 @@ msgstr "oppdater"
msgid "delete"
msgstr "slett"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Passordbeskyttet"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Feil ved nullstilling av utløpsdato"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Kan ikke sette utløpsdato"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Sender..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "E-post sendt"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Advarsel"
diff --git a/l10n/nl/core.po b/l10n/nl/core.po
index 3866ca5b813..f635b28e3bd 100644
--- a/l10n/nl/core.po
+++ b/l10n/nl/core.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
"MIME-Version: 1.0\n"
@@ -357,12 +357,12 @@ msgstr "Gedeeld met {recipients}"
msgid "Share"
msgstr "Delen"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Fout"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Fout tijdens het delen"
@@ -457,7 +457,7 @@ msgstr "melden per e-mail"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "kan delen"
#: js/share.js:576
msgid "can edit"
@@ -479,27 +479,27 @@ msgstr "bijwerken"
msgid "delete"
msgstr "verwijderen"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Wachtwoord beveiligd"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Fout tijdens het verwijderen van de vervaldatum"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Fout tijdens het instellen van de vervaldatum"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Versturen ..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "E-mail verzonden"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Waarschuwing"
diff --git a/l10n/nl/files_sharing.po b/l10n/nl/files_sharing.po
index 14d526a63a5..1f9f7dd7684 100644
--- a/l10n/nl/files_sharing.po
+++ b/l10n/nl/files_sharing.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 17:11+0000\n"
+"Last-Translator: André Koot <meneer@tken.net>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -55,11 +55,11 @@ msgstr "U hebt nog geen bestanden via een link gedeeld."
msgid "Add {name} from {owner}@{remote}"
msgstr "Toevoegen {name} van {owner}@{remote}"
-#: js/public.js:200
+#: js/public.js:204
msgid "No ownCloud installation found at {remote}"
msgstr "Geen ownCloud installatie gevonden op {remote}"
-#: js/public.js:201
+#: js/public.js:205
msgid "Invalid ownCloud url"
msgstr "Ongeldige ownCloud url"
@@ -142,7 +142,7 @@ msgstr "Directe link"
#: templates/settings-admin.php:3
msgid "Remote Shares"
-msgstr ""
+msgstr "Externe shares"
#: templates/settings-admin.php:7
msgid "Allow other instances to mount public links shared from this server"
diff --git a/l10n/pl/core.po b/l10n/pl/core.po
index 3b50a31f055..26ccfad1b1f 100644
--- a/l10n/pl/core.po
+++ b/l10n/pl/core.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
"MIME-Version: 1.0\n"
@@ -363,12 +363,12 @@ msgstr "Współdzielony z {recipients}"
msgid "Share"
msgstr "Udostępnij"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Błąd"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Błąd podczas współdzielenia"
@@ -463,7 +463,7 @@ msgstr "powiadom przez emaila"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "może współdzielić"
#: js/share.js:576
msgid "can edit"
@@ -485,27 +485,27 @@ msgstr "uaktualnij"
msgid "delete"
msgstr "usuń"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Zabezpieczone hasłem"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Błąd podczas usuwania daty wygaśnięcia"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Błąd podczas ustawiania daty wygaśnięcia"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Wysyłanie..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "E-mail wysłany"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Ostrzeżenie"
diff --git a/l10n/pt_BR/core.po b/l10n/pt_BR/core.po
index cad61f2b119..a0b1246ab9d 100644
--- a/l10n/pt_BR/core.po
+++ b/l10n/pt_BR/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
@@ -356,12 +356,12 @@ msgstr "Compartilhado com {recipients}"
msgid "Share"
msgstr "Compartilhar"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Erro"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Erro ao compartilhar"
@@ -456,7 +456,7 @@ msgstr "notificar por e-mail"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "pode compartilhar"
#: js/share.js:576
msgid "can edit"
@@ -478,27 +478,27 @@ msgstr "atualizar"
msgid "delete"
msgstr "remover"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Protegido com senha"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Erro ao remover data de expiração"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Erro ao definir data de expiração"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Enviando ..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "E-mail enviado"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Aviso"
diff --git a/l10n/pt_BR/files.po b/l10n/pt_BR/files.po
index 6c1890c0248..c3524b22326 100644
--- a/l10n/pt_BR/files.po
+++ b/l10n/pt_BR/files.po
@@ -11,9 +11,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-26 01:54-0400\n"
-"PO-Revision-Date: 2014-06-25 15:21+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 12:41+0000\n"
+"Last-Translator: Flávio Veras <flaviove@gmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -86,7 +86,7 @@ msgstr "Erro ao criar a pasta"
#: ajax/upload.php:19 ajax/upload.php:57
msgid "Unable to set upload directory."
-msgstr "Impossível configurar o diretório de upload"
+msgstr "Impossível configurar o diretório de envio"
#: ajax/upload.php:33
msgid "Invalid Token"
@@ -151,123 +151,123 @@ msgstr "Arquivos"
msgid "All files"
msgstr "Todos os arquivos"
-#: js/file-upload.js:257
+#: js/file-upload.js:268
msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
msgstr "Incapaz de fazer o envio de {filename}, pois é um diretório ou tem 0 bytes"
-#: js/file-upload.js:270
+#: js/file-upload.js:281
msgid "Total file size {size1} exceeds upload limit {size2}"
msgstr "O tamanho total do arquivo {size1} excede o limite de envio {size2}"
-#: js/file-upload.js:281
+#: js/file-upload.js:292
msgid ""
"Not enough free space, you are uploading {size1} but only {size2} is left"
msgstr "Não há espaço suficiente, você está enviando {size1} mas resta apenas {size2}"
-#: js/file-upload.js:358
+#: js/file-upload.js:369
msgid "Upload cancelled."
msgstr "Envio cancelado."
-#: js/file-upload.js:404
+#: js/file-upload.js:415
msgid "Could not get result from server."
msgstr "Não foi possível obter o resultado do servidor."
-#: js/file-upload.js:490
+#: js/file-upload.js:499
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
-msgstr "Upload em andamento. Sair da página agora resultará no cancelamento do envio."
+msgstr "Envio de arquivo em andamento. Sair da página agora resultará no cancelamento do envio."
-#: js/file-upload.js:555
+#: js/file-upload.js:564
msgid "URL cannot be empty"
msgstr "URL não pode estar vazia"
-#: js/file-upload.js:559 js/filelist.js:1192
+#: js/file-upload.js:568 js/filelist.js:1228
msgid "{new_name} already exists"
msgstr "{new_name} já existe"
-#: js/file-upload.js:614
+#: js/file-upload.js:623
msgid "Could not create file"
msgstr "Não foi possível criar o arquivo"
-#: js/file-upload.js:630
+#: js/file-upload.js:639
msgid "Could not create folder"
msgstr "Não foi possível criar a pasta"
-#: js/file-upload.js:677
+#: js/file-upload.js:686
msgid "Error fetching URL"
msgstr "Erro ao buscar URL"
-#: js/fileactions.js:213
+#: js/fileactions.js:257
msgid "Share"
msgstr "Compartilhar"
-#: js/fileactions.js:226
+#: js/fileactions.js:270
msgid "Delete permanently"
msgstr "Excluir permanentemente"
-#: js/fileactions.js:228 templates/list.php:78 templates/list.php:79
+#: js/fileactions.js:272 templates/list.php:78 templates/list.php:79
msgid "Delete"
msgstr "Excluir"
-#: js/fileactions.js:264
+#: js/fileactions.js:308
msgid "Rename"
msgstr "Renomear"
-#: js/filelist.js:314
+#: js/filelist.js:339
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "Seu download está sendo preparado. Isto pode levar algum tempo se os arquivos forem grandes."
-#: js/filelist.js:623 js/filelist.js:1713
+#: js/filelist.js:659 js/filelist.js:1752
msgid "Pending"
msgstr "Pendente"
-#: js/filelist.js:1143
+#: js/filelist.js:1179
msgid "Error moving file."
msgstr "Erro movendo o arquivo."
-#: js/filelist.js:1151
+#: js/filelist.js:1187
msgid "Error moving file"
msgstr "Erro movendo o arquivo"
-#: js/filelist.js:1151
+#: js/filelist.js:1187
msgid "Error"
msgstr "Erro"
-#: js/filelist.js:1240
+#: js/filelist.js:1276
msgid "Could not rename file"
msgstr "Não foi possível renomear o arquivo"
-#: js/filelist.js:1358
+#: js/filelist.js:1394
msgid "Error deleting file."
msgstr "Erro eliminando o arquivo."
-#: js/filelist.js:1461 templates/list.php:62
+#: js/filelist.js:1497 templates/list.php:62
msgid "Name"
msgstr "Nome"
-#: js/filelist.js:1462 templates/list.php:73
+#: js/filelist.js:1498 templates/list.php:73
msgid "Size"
msgstr "Tamanho"
-#: js/filelist.js:1463 templates/list.php:76
+#: js/filelist.js:1499 templates/list.php:76
msgid "Modified"
msgstr "Modificado"
-#: js/filelist.js:1473 js/filesummary.js:141 js/filesummary.js:168
+#: js/filelist.js:1509 js/filesummary.js:141 js/filesummary.js:168
msgid "%n folder"
msgid_plural "%n folders"
msgstr[0] "%n pasta"
msgstr[1] "%n pastas"
-#: js/filelist.js:1479 js/filesummary.js:142 js/filesummary.js:169
+#: js/filelist.js:1515 js/filesummary.js:142 js/filesummary.js:169
msgid "%n file"
msgid_plural "%n files"
msgstr[0] "%n arquivo"
msgstr[1] "%n arquivos"
-#: js/filelist.js:1606 js/filelist.js:1645
+#: js/filelist.js:1645 js/filelist.js:1684
msgid "Uploading %n file"
msgid_plural "Uploading %n files"
msgstr[0] "Enviando %n arquivo"
@@ -289,20 +289,20 @@ msgstr "Seu armazenamento está quase cheio ({usedSpacePercent}%)"
msgid ""
"Encryption App is enabled but your keys are not initialized, please log-out "
"and log-in again"
-msgstr "App de encriptação está ativado, mas as chaves não estão inicializadas, por favor log-out e faça login novamente"
+msgstr "App de criptografia está ativado, mas as chaves não estão inicializadas, por favor log-out e faça login novamente"
#: js/files.js:144
msgid ""
"Invalid private key for Encryption App. Please update your private key "
"password in your personal settings to recover access to your encrypted "
"files."
-msgstr "Chave do App de Encriptação é inválida. Por favor, atualize sua senha de chave privada em suas configurações pessoais para recuperar o acesso a seus arquivos criptografados."
+msgstr "Chave do App de Criptografia é inválida. Por favor, atualize sua senha de chave privada em suas configurações pessoais para recuperar o acesso a seus arquivos criptografados."
#: js/files.js:148
msgid ""
"Encryption was disabled but your files are still encrypted. Please go to "
"your personal settings to decrypt your files."
-msgstr "Encriptação foi desabilitada mas seus arquivos continuam encriptados. Por favor vá a suas configurações pessoais para descriptar seus arquivos."
+msgstr "Criptografia foi desabilitada mas seus arquivos continuam criptografados. Por favor vá a suas configurações pessoais para descriptar seus arquivos."
#: js/filesummary.js:182
msgid "{dirs} and {files}"
@@ -324,7 +324,7 @@ msgstr "Tratamento de Arquivo"
#: templates/admin.php:7
msgid "Maximum upload size"
-msgstr "Tamanho máximo para carregar"
+msgstr "Tamanho máximo para envio"
#: templates/admin.php:10
msgid "max. possible: "
@@ -332,7 +332,7 @@ msgstr "max. possível:"
#: templates/admin.php:15
msgid "Save"
-msgstr "Guardar"
+msgstr "Salvar"
#: templates/appnavigation.php:12
msgid "WebDAV"
@@ -371,11 +371,11 @@ msgstr "Do link"
#: templates/list.php:42
msgid "Cancel upload"
-msgstr "Cancelar upload"
+msgstr "Cancelar envio"
#: templates/list.php:48
msgid "You don’t have permission to upload or create files here"
-msgstr "Você não tem permissão para carregar ou criar arquivos aqui"
+msgstr "Você não tem permissão para enviar ou criar arquivos aqui"
#: templates/list.php:53
msgid "Nothing in here. Upload something!"
@@ -387,13 +387,13 @@ msgstr "Baixar"
#: templates/list.php:92
msgid "Upload too large"
-msgstr "Upload muito grande"
+msgstr "Arquivo muito grande para envio"
#: templates/list.php:94
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr "Os arquivos que você está tentando carregar excedeu o tamanho máximo para arquivos no servidor."
+msgstr "Os arquivos que você está tentando enviar excedeu o tamanho máximo para arquivos no servidor."
#: templates/list.php:99
msgid "Files are being scanned, please wait."
diff --git a/l10n/pt_BR/files_encryption.po b/l10n/pt_BR/files_encryption.po
index 59d9ffac8a4..95ae2aaf93e 100644
--- a/l10n/pt_BR/files_encryption.po
+++ b/l10n/pt_BR/files_encryption.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-15 01:54-0400\n"
-"PO-Revision-Date: 2014-06-14 17:30+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 12:21+0000\n"
"Last-Translator: Flávio Veras <flaviove@gmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
@@ -180,7 +180,7 @@ msgstr "Senha de login atual"
#: templates/settings-personal.php:32
msgid "Update Private Key Password"
-msgstr "Atualizar senha de chave privada"
+msgstr "Atualizar Senha de Chave Privada"
#: templates/settings-personal.php:41
msgid "Enable password recovery:"
diff --git a/l10n/pt_BR/files_external.po b/l10n/pt_BR/files_external.po
index 617cffeae37..c92b96e3a2a 100644
--- a/l10n/pt_BR/files_external.po
+++ b/l10n/pt_BR/files_external.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-26 01:54-0400\n"
-"PO-Revision-Date: 2014-06-25 15:01+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 11:41+0000\n"
"Last-Translator: Flávio Veras <flaviove@gmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
@@ -18,167 +18,167 @@ msgstr ""
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: appinfo/app.php:36 js/app.js:32 templates/settings.php:9
+#: appinfo/app.php:35 js/app.js:32 templates/settings.php:9
msgid "External storage"
msgstr "Armazenamento Externo"
-#: appinfo/app.php:45
+#: appinfo/app.php:44
msgid "Local"
msgstr "Local"
-#: appinfo/app.php:48
+#: appinfo/app.php:47
msgid "Location"
-msgstr "Local"
+msgstr "Localização"
-#: appinfo/app.php:51
+#: appinfo/app.php:50
msgid "Amazon S3"
msgstr "Amazon S3"
-#: appinfo/app.php:54
+#: appinfo/app.php:53
msgid "Key"
msgstr "Chave"
-#: appinfo/app.php:55
+#: appinfo/app.php:54
msgid "Secret"
-msgstr "Secreta"
+msgstr "Segredo"
-#: appinfo/app.php:56 appinfo/app.php:65
+#: appinfo/app.php:55 appinfo/app.php:64
msgid "Bucket"
msgstr "Cesta"
-#: appinfo/app.php:60
+#: appinfo/app.php:59
msgid "Amazon S3 and compliant"
msgstr "Amazon S3 e compatível"
-#: appinfo/app.php:63
+#: appinfo/app.php:62
msgid "Access Key"
msgstr "Chave de Acesso"
-#: appinfo/app.php:64
+#: appinfo/app.php:63
msgid "Secret Key"
msgstr "Chave Secreta"
-#: appinfo/app.php:66
+#: appinfo/app.php:65
msgid "Hostname (optional)"
msgstr "Nome do Host (opcional)"
-#: appinfo/app.php:67
+#: appinfo/app.php:66
msgid "Port (optional)"
msgstr "Porta (opcional)"
-#: appinfo/app.php:68
+#: appinfo/app.php:67
msgid "Region (optional)"
msgstr "Região (opcional)"
-#: appinfo/app.php:69
+#: appinfo/app.php:68
msgid "Enable SSL"
msgstr "Habilitar SSL"
-#: appinfo/app.php:70
+#: appinfo/app.php:69
msgid "Enable Path Style"
msgstr "Habilitar Estilo do Caminho"
-#: appinfo/app.php:78
+#: appinfo/app.php:77
msgid "App key"
msgstr "Chave do Aplicativo"
-#: appinfo/app.php:79
+#: appinfo/app.php:78
msgid "App secret"
msgstr "Segredo da Aplicação"
-#: appinfo/app.php:89 appinfo/app.php:130 appinfo/app.php:141
-#: appinfo/app.php:174
+#: appinfo/app.php:88 appinfo/app.php:129 appinfo/app.php:140
+#: appinfo/app.php:173
msgid "Host"
-msgstr "Servidor"
+msgstr "Host"
-#: appinfo/app.php:90 appinfo/app.php:131 appinfo/app.php:153
-#: appinfo/app.php:164 appinfo/app.php:175
+#: appinfo/app.php:89 appinfo/app.php:130 appinfo/app.php:152
+#: appinfo/app.php:163 appinfo/app.php:174
msgid "Username"
msgstr "Nome de Usuário"
-#: appinfo/app.php:91 appinfo/app.php:132 appinfo/app.php:154
-#: appinfo/app.php:165 appinfo/app.php:176
+#: appinfo/app.php:90 appinfo/app.php:131 appinfo/app.php:153
+#: appinfo/app.php:164 appinfo/app.php:175
msgid "Password"
msgstr "Senha"
-#: appinfo/app.php:92 appinfo/app.php:134 appinfo/app.php:144
-#: appinfo/app.php:155 appinfo/app.php:177
+#: appinfo/app.php:91 appinfo/app.php:133 appinfo/app.php:143
+#: appinfo/app.php:154 appinfo/app.php:176
msgid "Root"
msgstr "Raiz"
-#: appinfo/app.php:93
+#: appinfo/app.php:92
msgid "Secure ftps://"
msgstr "Seguro ftps://"
-#: appinfo/app.php:101
+#: appinfo/app.php:100
msgid "Client ID"
msgstr "ID do Cliente"
-#: appinfo/app.php:102
+#: appinfo/app.php:101
msgid "Client secret"
msgstr "Segredo do cliente"
-#: appinfo/app.php:109
+#: appinfo/app.php:108
msgid "OpenStack Object Storage"
msgstr "Armazenamento de Objetos OpenStack"
-#: appinfo/app.php:112
+#: appinfo/app.php:111
msgid "Username (required)"
msgstr "Nome do Usuário (requerido)"
-#: appinfo/app.php:113
+#: appinfo/app.php:112
msgid "Bucket (required)"
msgstr "Cesta (requerido)"
-#: appinfo/app.php:114
+#: appinfo/app.php:113
msgid "Region (optional for OpenStack Object Storage)"
msgstr "Região (opcional para armazenamento de objetos OpenStack)"
-#: appinfo/app.php:115
+#: appinfo/app.php:114
msgid "API Key (required for Rackspace Cloud Files)"
msgstr "Chave API (necessário para Rackspace Cloud File)"
-#: appinfo/app.php:116
+#: appinfo/app.php:115
msgid "Tenantname (required for OpenStack Object Storage)"
msgstr "Nome Tenant (necessário para armazenamento de objetos OpenStack)"
-#: appinfo/app.php:117
+#: appinfo/app.php:116
msgid "Password (required for OpenStack Object Storage)"
msgstr "Senha (necessário para armazenamento de objetos OpenStack)"
-#: appinfo/app.php:118
+#: appinfo/app.php:117
msgid "Service Name (required for OpenStack Object Storage)"
msgstr "Nome do Serviço (necessário para armazenamento de objetos OpenStack)"
-#: appinfo/app.php:119
+#: appinfo/app.php:118
msgid "URL of identity endpoint (required for OpenStack Object Storage)"
msgstr "Ponto final de identidade da URL (obrigatório para armazenamento de objetos OpenStack)"
-#: appinfo/app.php:120
+#: appinfo/app.php:119
msgid "Timeout of HTTP requests in seconds (optional)"
msgstr "Tempo limite de solicitações HTTP em segundos (opcional)"
-#: appinfo/app.php:133 appinfo/app.php:143
+#: appinfo/app.php:132 appinfo/app.php:142
msgid "Share"
msgstr "Compartilhar"
-#: appinfo/app.php:138
+#: appinfo/app.php:137
msgid "SMB / CIFS using OC login"
-msgstr "SMB / CIFS usando OC logon"
+msgstr "SMB / CIFS usando OC login"
-#: appinfo/app.php:142
+#: appinfo/app.php:141
msgid "Username as share"
msgstr "Nome de usuário como compartilhado"
-#: appinfo/app.php:152 appinfo/app.php:163
+#: appinfo/app.php:151 appinfo/app.php:162
msgid "URL"
msgstr "URL"
-#: appinfo/app.php:156 appinfo/app.php:167
+#: appinfo/app.php:155 appinfo/app.php:166
msgid "Secure https://"
msgstr "https:// segura"
-#: appinfo/app.php:166
+#: appinfo/app.php:165
msgid "Remote subfolder"
msgstr "Subpasta remota"
@@ -196,7 +196,7 @@ msgstr "Permitir acesso"
#: js/dropbox.js:102
msgid "Please provide a valid Dropbox app key and secret."
-msgstr "Por favor forneça um app key e secret válido do Dropbox"
+msgstr "Por favor forneça uma chave de aplicativo e segurança válidos para o Dropbox"
#: js/google.js:45 js/google.js:122
msgid "Error configuring Google Drive storage"
@@ -214,29 +214,29 @@ msgstr "Sistema"
msgid "Saved"
msgstr "Salvo"
-#: lib/config.php:703
+#: lib/config.php:707
msgid "<b>Note:</b> "
msgstr "<b>Nota:</b>"
-#: lib/config.php:713
+#: lib/config.php:717
msgid " and "
msgstr "e"
-#: lib/config.php:735
+#: lib/config.php:739
#, php-format
msgid ""
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting "
"of %s is not possible. Please ask your system administrator to install it."
msgstr "<b>Nota:</b> O suporte cURL do PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo."
-#: lib/config.php:737
+#: lib/config.php:741
#, php-format
msgid ""
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of"
" %s is not possible. Please ask your system administrator to install it."
msgstr "<b>Nota:</b> O suporte FTP no PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo."
-#: lib/config.php:739
+#: lib/config.php:743
#, php-format
msgid ""
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please"
diff --git a/l10n/pt_BR/files_sharing.po b/l10n/pt_BR/files_sharing.po
index 3e3e6acda04..1f0b984650c 100644
--- a/l10n/pt_BR/files_sharing.po
+++ b/l10n/pt_BR/files_sharing.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 12:31+0000\n"
+"Last-Translator: Flávio Veras <flaviove@gmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -54,11 +54,11 @@ msgstr "Você ainda não compartilhou nenhum arquivo por link."
msgid "Add {name} from {owner}@{remote}"
msgstr "Adicionar {name} de {owner}@{remote}"
-#: js/public.js:200
+#: js/public.js:204
msgid "No ownCloud installation found at {remote}"
msgstr "Nenhuma instalação ownCloud encontrada em {remote}"
-#: js/public.js:201
+#: js/public.js:205
msgid "Invalid ownCloud url"
msgstr "Url invalida para ownCloud"
@@ -68,7 +68,7 @@ msgstr "Compartilhado por {owner}"
#: js/sharedfilelist.js:128
msgid "Shared by"
-msgstr "Compartilhada por"
+msgstr "Compartilhado por"
#: templates/authenticate.php:4
msgid "This share is password-protected"
@@ -108,7 +108,7 @@ msgstr "o link expirou"
#: templates/part.404.php:8
msgid "sharing is disabled"
-msgstr "compartilhamento está desativada"
+msgstr "o compartilhamento está desativado"
#: templates/part.404.php:10
msgid "For more info, please ask the person who sent this link."
@@ -141,7 +141,7 @@ msgstr "Link direto"
#: templates/settings-admin.php:3
msgid "Remote Shares"
-msgstr ""
+msgstr "Compartilhamentos Remoto"
#: templates/settings-admin.php:7
msgid "Allow other instances to mount public links shared from this server"
diff --git a/l10n/pt_BR/user_ldap.po b/l10n/pt_BR/user_ldap.po
index 4d6af9e24e5..afcb9ccf91b 100644
--- a/l10n/pt_BR/user_ldap.po
+++ b/l10n/pt_BR/user_ldap.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-26 01:54-0400\n"
-"PO-Revision-Date: 2014-06-25 15:21+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 12:31+0000\n"
"Last-Translator: Flávio Veras <flaviove@gmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
diff --git a/l10n/pt_BR/user_webdavauth.po b/l10n/pt_BR/user_webdavauth.po
index f0bbdf1f424..047ea9a0100 100644
--- a/l10n/pt_BR/user_webdavauth.po
+++ b/l10n/pt_BR/user_webdavauth.po
@@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-26 01:54-0400\n"
-"PO-Revision-Date: 2014-06-25 15:21+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 12:31+0000\n"
"Last-Translator: Flávio Veras <flaviove@gmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
diff --git a/l10n/pt_PT/core.po b/l10n/pt_PT/core.po
index f4fce5235d9..972685fd727 100644
--- a/l10n/pt_PT/core.po
+++ b/l10n/pt_PT/core.po
@@ -19,8 +19,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
"MIME-Version: 1.0\n"
@@ -366,12 +366,12 @@ msgstr "Partilhado com {recipients}"
msgid "Share"
msgstr "Partilhar"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Erro"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Erro ao partilhar"
@@ -466,7 +466,7 @@ msgstr "Notificar por email"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "pode partilhar"
#: js/share.js:576
msgid "can edit"
@@ -488,27 +488,27 @@ msgstr "actualizar"
msgid "delete"
msgstr "apagar"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Protegido com palavra-passe"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Erro ao retirar a data de expiração"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Erro ao aplicar a data de expiração"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "A Enviar..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "E-mail enviado"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Aviso"
diff --git a/l10n/ro/core.po b/l10n/ro/core.po
index 7bf19da6549..ff984652f4d 100644
--- a/l10n/ro/core.po
+++ b/l10n/ro/core.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
"MIME-Version: 1.0\n"
@@ -363,12 +363,12 @@ msgstr ""
msgid "Share"
msgstr "Partajează"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Eroare"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Eroare la partajare"
@@ -463,7 +463,7 @@ msgstr ""
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "se poate partaja"
#: js/share.js:576
msgid "can edit"
@@ -485,27 +485,27 @@ msgstr "actualizare"
msgid "delete"
msgstr "ștergere"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Protejare cu parolă"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Eroare la anularea datei de expirare"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Eroare la specificarea datei de expirare"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Se expediază..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "Mesajul a fost expediat"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Atenție"
diff --git a/l10n/ru/core.po b/l10n/ru/core.po
index 85b3b3bf46b..65610fddf4d 100644
--- a/l10n/ru/core.po
+++ b/l10n/ru/core.po
@@ -32,8 +32,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
"MIME-Version: 1.0\n"
@@ -384,12 +384,12 @@ msgstr "Доступ открыт {recipients}"
msgid "Share"
msgstr "Открыть доступ"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Ошибка"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Ошибка при открытии доступа"
@@ -484,7 +484,7 @@ msgstr "уведомить по почте"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "можно дать доступ"
#: js/share.js:576
msgid "can edit"
@@ -506,27 +506,27 @@ msgstr "обновить"
msgid "delete"
msgstr "удалить"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Защищено паролем"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Ошибка при отмене срока доступа"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Ошибка при установке срока доступа"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Отправляется ..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "Письмо отправлено"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Предупреждение"
diff --git a/l10n/ru/files.po b/l10n/ru/files.po
index 5e28f82e06f..91583ab1575 100644
--- a/l10n/ru/files.po
+++ b/l10n/ru/files.po
@@ -23,8 +23,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-26 10:50+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 09:51+0000\n"
"Last-Translator: Михаил Маслиёв <misha.masliev@yandex.ru>\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
"MIME-Version: 1.0\n"
@@ -163,125 +163,125 @@ msgstr "Файлы"
msgid "All files"
msgstr "Все файлы"
-#: js/file-upload.js:257
+#: js/file-upload.js:268
msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
msgstr "Невозможно загрузить {filename}, так как это либо каталог, либо файл нулевого размера"
-#: js/file-upload.js:270
+#: js/file-upload.js:281
msgid "Total file size {size1} exceeds upload limit {size2}"
msgstr "Полный размер файла {size1} превышает лимит по загрузке {size2}"
-#: js/file-upload.js:281
+#: js/file-upload.js:292
msgid ""
"Not enough free space, you are uploading {size1} but only {size2} is left"
msgstr "Не достаточно свободного места, Вы загружаете {size1} но осталось только {size2}"
-#: js/file-upload.js:358
+#: js/file-upload.js:369
msgid "Upload cancelled."
msgstr "Загрузка отменена."
-#: js/file-upload.js:404
+#: js/file-upload.js:415
msgid "Could not get result from server."
msgstr "Не удалось получить ответ от сервера."
-#: js/file-upload.js:490
+#: js/file-upload.js:499
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr "Идёт загрузка файла. Покинув страницу, вы прервёте загрузку."
-#: js/file-upload.js:555
+#: js/file-upload.js:564
msgid "URL cannot be empty"
msgstr "Ссылка не может быть пустой."
-#: js/file-upload.js:559 js/filelist.js:1192
+#: js/file-upload.js:568 js/filelist.js:1228
msgid "{new_name} already exists"
msgstr "{new_name} уже существует"
-#: js/file-upload.js:614
+#: js/file-upload.js:623
msgid "Could not create file"
msgstr "Не удалось создать файл"
-#: js/file-upload.js:630
+#: js/file-upload.js:639
msgid "Could not create folder"
msgstr "Не удалось создать каталог"
-#: js/file-upload.js:677
+#: js/file-upload.js:686
msgid "Error fetching URL"
msgstr "Ошибка получения URL"
-#: js/fileactions.js:213
+#: js/fileactions.js:257
msgid "Share"
msgstr "Открыть доступ"
-#: js/fileactions.js:226
+#: js/fileactions.js:270
msgid "Delete permanently"
msgstr "Удалить окончательно"
-#: js/fileactions.js:228 templates/list.php:78 templates/list.php:79
+#: js/fileactions.js:272 templates/list.php:78 templates/list.php:79
msgid "Delete"
msgstr "Удалить"
-#: js/fileactions.js:264
+#: js/fileactions.js:308
msgid "Rename"
msgstr "Переименовать"
-#: js/filelist.js:314
+#: js/filelist.js:339
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr "Идёт подготовка к скачиванию. Это может занять некоторое время, если файлы большого размера."
-#: js/filelist.js:623 js/filelist.js:1713
+#: js/filelist.js:659 js/filelist.js:1752
msgid "Pending"
msgstr "Ожидание"
-#: js/filelist.js:1143
+#: js/filelist.js:1179
msgid "Error moving file."
msgstr "Ошибка перемещения файла."
-#: js/filelist.js:1151
+#: js/filelist.js:1187
msgid "Error moving file"
msgstr "Ошибка при перемещении файла"
-#: js/filelist.js:1151
+#: js/filelist.js:1187
msgid "Error"
msgstr "Ошибка"
-#: js/filelist.js:1240
+#: js/filelist.js:1276
msgid "Could not rename file"
msgstr "Не удалось переименовать файл"
-#: js/filelist.js:1358
+#: js/filelist.js:1394
msgid "Error deleting file."
msgstr "Ошибка при удалении файла."
-#: js/filelist.js:1461 templates/list.php:62
+#: js/filelist.js:1497 templates/list.php:62
msgid "Name"
msgstr "Имя"
-#: js/filelist.js:1462 templates/list.php:73
+#: js/filelist.js:1498 templates/list.php:73
msgid "Size"
msgstr "Размер"
-#: js/filelist.js:1463 templates/list.php:76
+#: js/filelist.js:1499 templates/list.php:76
msgid "Modified"
msgstr "Изменён"
-#: js/filelist.js:1473 js/filesummary.js:141 js/filesummary.js:168
+#: js/filelist.js:1509 js/filesummary.js:141 js/filesummary.js:168
msgid "%n folder"
msgid_plural "%n folders"
msgstr[0] "%n каталог"
msgstr[1] "%n каталога"
msgstr[2] "%n каталогов"
-#: js/filelist.js:1479 js/filesummary.js:142 js/filesummary.js:169
+#: js/filelist.js:1515 js/filesummary.js:142 js/filesummary.js:169
msgid "%n file"
msgid_plural "%n files"
msgstr[0] "%n файл"
msgstr[1] "%n файла"
msgstr[2] "%n файлов"
-#: js/filelist.js:1606 js/filelist.js:1645
+#: js/filelist.js:1645 js/filelist.js:1684
msgid "Uploading %n file"
msgid_plural "Uploading %n files"
msgstr[0] "Закачка %n файла"
diff --git a/l10n/ru/settings.po b/l10n/ru/settings.po
index dae2644404e..1afd37ff359 100644
--- a/l10n/ru/settings.po
+++ b/l10n/ru/settings.po
@@ -13,6 +13,7 @@
# Evgenij Spitsyn <evgeniy@spitsyn.net>, 2013
# jekader <jekader@gmail.com>, 2013
# Михаил Маслиёв <misha.masliev@yandex.ru>, 2014
+# Glosshead <o44ehb@gmail.com>, 2014
# Serge Shpikin <rkfg@rkfg.me>, 2013
# anshibanov <shibanovan@yandex.ru>, 2014
# Simon Tushev, 2014
@@ -28,9 +29,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-26 15:02+0000\n"
-"Last-Translator: Михаил Маслиёв <misha.masliev@yandex.ru>\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-28 05:00+0000\n"
+"Last-Translator: Glosshead <o44ehb@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -420,7 +421,7 @@ msgstr "Логин"
#: templates/admin.php:18
msgid "Plain"
-msgstr ""
+msgstr "Простой"
#: templates/admin.php:19
msgid "NT LAN Manager"
@@ -591,7 +592,7 @@ msgstr "Позволить приложениям использовать API �
#: templates/admin.php:243
msgid "Allow users to share via link"
-msgstr ""
+msgstr "Разрешить пользователям публикации через ссылки"
#: templates/admin.php:249
msgid "Enforce password protection"
@@ -623,7 +624,7 @@ msgstr "Разрешить переоткрытие общего доступа"
#: templates/admin.php:276
msgid "Restrict users to only share with users in their groups"
-msgstr ""
+msgstr "Разрешить пользователям публикации только внутри их групп"
#: templates/admin.php:281
msgid "Allow users to send mail notification for shared files"
@@ -980,7 +981,7 @@ msgstr "Квота"
#: templates/users/part.userlist.php:15
msgid "Storage Location"
-msgstr ""
+msgstr "Место хранилища"
#: templates/users/part.userlist.php:16
msgid "Last Login"
diff --git a/l10n/sk_SK/core.po b/l10n/sk_SK/core.po
index cbb696bc198..1f818866191 100644
--- a/l10n/sk_SK/core.po
+++ b/l10n/sk_SK/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
"MIME-Version: 1.0\n"
@@ -361,12 +361,12 @@ msgstr "Zdieľa s {recipients}"
msgid "Share"
msgstr "Zdieľať"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Chyba"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Chyba počas zdieľania"
@@ -461,7 +461,7 @@ msgstr "informovať emailom"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "môže zdieľať"
#: js/share.js:576
msgid "can edit"
@@ -483,27 +483,27 @@ msgstr "aktualizovať"
msgid "delete"
msgstr "vymazať"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Chránené heslom"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Chyba pri odstraňovaní dátumu expirácie"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Chyba pri nastavení dátumu expirácie"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Odosielam ..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "Email odoslaný"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Varovanie"
diff --git a/l10n/sl/core.po b/l10n/sl/core.po
index bbd94efc59d..842501f087a 100644
--- a/l10n/sl/core.po
+++ b/l10n/sl/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
"MIME-Version: 1.0\n"
@@ -366,12 +366,12 @@ msgstr ""
msgid "Share"
msgstr "Souporaba"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Napaka"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Napaka med souporabo"
@@ -466,7 +466,7 @@ msgstr "obvesti po elektronski pošti"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "lahko omogoči souporabo"
#: js/share.js:576
msgid "can edit"
@@ -488,27 +488,27 @@ msgstr "posodobi"
msgid "delete"
msgstr "izbriše"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Zaščiteno z geslom"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Napaka brisanja datuma preteka"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Napaka nastavljanja datuma preteka"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Pošiljanje ..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "Elektronska pošta je poslana"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Opozorilo"
diff --git a/l10n/sq/core.po b/l10n/sq/core.po
index b6a8caf4075..0a77913c5d5 100644
--- a/l10n/sq/core.po
+++ b/l10n/sq/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Albanian (http://www.transifex.com/projects/p/owncloud/language/sq/)\n"
"MIME-Version: 1.0\n"
@@ -356,12 +356,12 @@ msgstr ""
msgid "Share"
msgstr "Nda"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Veprim i gabuar"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Veprim i gabuar gjatë ndarjes"
@@ -456,7 +456,7 @@ msgstr ""
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "mund të ndajnë"
#: js/share.js:576
msgid "can edit"
@@ -478,27 +478,27 @@ msgstr "azhurno"
msgid "delete"
msgstr "elimino"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Mbrojtur me kod"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Veprim i gabuar gjatë heqjes së datës së përfundimit"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Veprim i gabuar gjatë caktimit të datës së përfundimit"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Duke dërguar..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "Email-i u dërgua"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr ""
diff --git a/l10n/sv/core.po b/l10n/sv/core.po
index 580cacc7185..13aaac06d9b 100644
--- a/l10n/sv/core.po
+++ b/l10n/sv/core.po
@@ -16,8 +16,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
"MIME-Version: 1.0\n"
@@ -363,12 +363,12 @@ msgstr "Delad med {recipients}"
msgid "Share"
msgstr "Dela"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Fel"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Fel vid delning"
@@ -463,7 +463,7 @@ msgstr "informera via e-post"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "får dela"
#: js/share.js:576
msgid "can edit"
@@ -485,27 +485,27 @@ msgstr "uppdatera"
msgid "delete"
msgstr "radera"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Lösenordsskyddad"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Fel vid borttagning av utgångsdatum"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Fel vid sättning av utgångsdatum"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Skickar ..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "E-post skickat"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Varning"
diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot
index 264a31c8a2e..6c28d9d3886 100644
--- a/l10n/templates/core.pot
+++ b/l10n/templates/core.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -355,12 +355,12 @@ msgstr ""
msgid "Share"
msgstr ""
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr ""
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr ""
@@ -477,27 +477,27 @@ msgstr ""
msgid "delete"
msgstr ""
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr ""
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr ""
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr ""
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr ""
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr ""
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr ""
diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot
index c5c4a1c3000..97c4d10862d 100644
--- a/l10n/templates/files.pot
+++ b/l10n/templates/files.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -147,123 +147,123 @@ msgstr ""
msgid "All files"
msgstr ""
-#: js/file-upload.js:257
+#: js/file-upload.js:268
msgid "Unable to upload {filename} as it is a directory or has 0 bytes"
msgstr ""
-#: js/file-upload.js:270
+#: js/file-upload.js:281
msgid "Total file size {size1} exceeds upload limit {size2}"
msgstr ""
-#: js/file-upload.js:281
+#: js/file-upload.js:292
msgid ""
"Not enough free space, you are uploading {size1} but only {size2} is left"
msgstr ""
-#: js/file-upload.js:358
+#: js/file-upload.js:369
msgid "Upload cancelled."
msgstr ""
-#: js/file-upload.js:404
+#: js/file-upload.js:415
msgid "Could not get result from server."
msgstr ""
-#: js/file-upload.js:490
+#: js/file-upload.js:499
msgid ""
"File upload is in progress. Leaving the page now will cancel the upload."
msgstr ""
-#: js/file-upload.js:555
+#: js/file-upload.js:564
msgid "URL cannot be empty"
msgstr ""
-#: js/file-upload.js:559 js/filelist.js:1192
+#: js/file-upload.js:568 js/filelist.js:1228
msgid "{new_name} already exists"
msgstr ""
-#: js/file-upload.js:614
+#: js/file-upload.js:623
msgid "Could not create file"
msgstr ""
-#: js/file-upload.js:630
+#: js/file-upload.js:639
msgid "Could not create folder"
msgstr ""
-#: js/file-upload.js:677
+#: js/file-upload.js:686
msgid "Error fetching URL"
msgstr ""
-#: js/fileactions.js:213
+#: js/fileactions.js:257
msgid "Share"
msgstr ""
-#: js/fileactions.js:226
+#: js/fileactions.js:270
msgid "Delete permanently"
msgstr ""
-#: js/fileactions.js:228 templates/list.php:78 templates/list.php:79
+#: js/fileactions.js:272 templates/list.php:78 templates/list.php:79
msgid "Delete"
msgstr ""
-#: js/fileactions.js:264
+#: js/fileactions.js:308
msgid "Rename"
msgstr ""
-#: js/filelist.js:314
+#: js/filelist.js:339
msgid ""
"Your download is being prepared. This might take some time if the files are "
"big."
msgstr ""
-#: js/filelist.js:623 js/filelist.js:1713
+#: js/filelist.js:659 js/filelist.js:1752
msgid "Pending"
msgstr ""
-#: js/filelist.js:1143
+#: js/filelist.js:1179
msgid "Error moving file."
msgstr ""
-#: js/filelist.js:1151
+#: js/filelist.js:1187
msgid "Error moving file"
msgstr ""
-#: js/filelist.js:1151
+#: js/filelist.js:1187
msgid "Error"
msgstr ""
-#: js/filelist.js:1240
+#: js/filelist.js:1276
msgid "Could not rename file"
msgstr ""
-#: js/filelist.js:1358
+#: js/filelist.js:1394
msgid "Error deleting file."
msgstr ""
-#: js/filelist.js:1461 templates/list.php:62
+#: js/filelist.js:1497 templates/list.php:62
msgid "Name"
msgstr ""
-#: js/filelist.js:1462 templates/list.php:73
+#: js/filelist.js:1498 templates/list.php:73
msgid "Size"
msgstr ""
-#: js/filelist.js:1463 templates/list.php:76
+#: js/filelist.js:1499 templates/list.php:76
msgid "Modified"
msgstr ""
-#: js/filelist.js:1473 js/filesummary.js:141 js/filesummary.js:168
+#: js/filelist.js:1509 js/filesummary.js:141 js/filesummary.js:168
msgid "%n folder"
msgid_plural "%n folders"
msgstr[0] ""
msgstr[1] ""
-#: js/filelist.js:1479 js/filesummary.js:142 js/filesummary.js:169
+#: js/filelist.js:1515 js/filesummary.js:142 js/filesummary.js:169
msgid "%n file"
msgid_plural "%n files"
msgstr[0] ""
msgstr[1] ""
-#: js/filelist.js:1606 js/filelist.js:1645
+#: js/filelist.js:1645 js/filelist.js:1684
msgid "Uploading %n file"
msgid_plural "Uploading %n files"
msgstr[0] ""
diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot
index 07735900cf2..d2b5c139083 100644
--- a/l10n/templates/files_encryption.pot
+++ b/l10n/templates/files_encryption.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot
index cf1f64511ed..34f26664730 100644
--- a/l10n/templates/files_external.pot
+++ b/l10n/templates/files_external.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,167 +17,167 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: appinfo/app.php:36 js/app.js:32 templates/settings.php:9
+#: appinfo/app.php:35 js/app.js:32 templates/settings.php:9
msgid "External storage"
msgstr ""
-#: appinfo/app.php:45
+#: appinfo/app.php:44
msgid "Local"
msgstr ""
-#: appinfo/app.php:48
+#: appinfo/app.php:47
msgid "Location"
msgstr ""
-#: appinfo/app.php:51
+#: appinfo/app.php:50
msgid "Amazon S3"
msgstr ""
-#: appinfo/app.php:54
+#: appinfo/app.php:53
msgid "Key"
msgstr ""
-#: appinfo/app.php:55
+#: appinfo/app.php:54
msgid "Secret"
msgstr ""
-#: appinfo/app.php:56 appinfo/app.php:65
+#: appinfo/app.php:55 appinfo/app.php:64
msgid "Bucket"
msgstr ""
-#: appinfo/app.php:60
+#: appinfo/app.php:59
msgid "Amazon S3 and compliant"
msgstr ""
-#: appinfo/app.php:63
+#: appinfo/app.php:62
msgid "Access Key"
msgstr ""
-#: appinfo/app.php:64
+#: appinfo/app.php:63
msgid "Secret Key"
msgstr ""
-#: appinfo/app.php:66
+#: appinfo/app.php:65
msgid "Hostname (optional)"
msgstr ""
-#: appinfo/app.php:67
+#: appinfo/app.php:66
msgid "Port (optional)"
msgstr ""
-#: appinfo/app.php:68
+#: appinfo/app.php:67
msgid "Region (optional)"
msgstr ""
-#: appinfo/app.php:69
+#: appinfo/app.php:68
msgid "Enable SSL"
msgstr ""
-#: appinfo/app.php:70
+#: appinfo/app.php:69
msgid "Enable Path Style"
msgstr ""
-#: appinfo/app.php:78
+#: appinfo/app.php:77
msgid "App key"
msgstr ""
-#: appinfo/app.php:79
+#: appinfo/app.php:78
msgid "App secret"
msgstr ""
-#: appinfo/app.php:89 appinfo/app.php:130 appinfo/app.php:141
-#: appinfo/app.php:174
+#: appinfo/app.php:88 appinfo/app.php:129 appinfo/app.php:140
+#: appinfo/app.php:173
msgid "Host"
msgstr ""
-#: appinfo/app.php:90 appinfo/app.php:131 appinfo/app.php:153
-#: appinfo/app.php:164 appinfo/app.php:175
+#: appinfo/app.php:89 appinfo/app.php:130 appinfo/app.php:152
+#: appinfo/app.php:163 appinfo/app.php:174
msgid "Username"
msgstr ""
-#: appinfo/app.php:91 appinfo/app.php:132 appinfo/app.php:154
-#: appinfo/app.php:165 appinfo/app.php:176
+#: appinfo/app.php:90 appinfo/app.php:131 appinfo/app.php:153
+#: appinfo/app.php:164 appinfo/app.php:175
msgid "Password"
msgstr ""
-#: appinfo/app.php:92 appinfo/app.php:134 appinfo/app.php:144
-#: appinfo/app.php:155 appinfo/app.php:177
+#: appinfo/app.php:91 appinfo/app.php:133 appinfo/app.php:143
+#: appinfo/app.php:154 appinfo/app.php:176
msgid "Root"
msgstr ""
-#: appinfo/app.php:93
+#: appinfo/app.php:92
msgid "Secure ftps://"
msgstr ""
-#: appinfo/app.php:101
+#: appinfo/app.php:100
msgid "Client ID"
msgstr ""
-#: appinfo/app.php:102
+#: appinfo/app.php:101
msgid "Client secret"
msgstr ""
-#: appinfo/app.php:109
+#: appinfo/app.php:108
msgid "OpenStack Object Storage"
msgstr ""
-#: appinfo/app.php:112
+#: appinfo/app.php:111
msgid "Username (required)"
msgstr ""
-#: appinfo/app.php:113
+#: appinfo/app.php:112
msgid "Bucket (required)"
msgstr ""
-#: appinfo/app.php:114
+#: appinfo/app.php:113
msgid "Region (optional for OpenStack Object Storage)"
msgstr ""
-#: appinfo/app.php:115
+#: appinfo/app.php:114
msgid "API Key (required for Rackspace Cloud Files)"
msgstr ""
-#: appinfo/app.php:116
+#: appinfo/app.php:115
msgid "Tenantname (required for OpenStack Object Storage)"
msgstr ""
-#: appinfo/app.php:117
+#: appinfo/app.php:116
msgid "Password (required for OpenStack Object Storage)"
msgstr ""
-#: appinfo/app.php:118
+#: appinfo/app.php:117
msgid "Service Name (required for OpenStack Object Storage)"
msgstr ""
-#: appinfo/app.php:119
+#: appinfo/app.php:118
msgid "URL of identity endpoint (required for OpenStack Object Storage)"
msgstr ""
-#: appinfo/app.php:120
+#: appinfo/app.php:119
msgid "Timeout of HTTP requests in seconds (optional)"
msgstr ""
-#: appinfo/app.php:133 appinfo/app.php:143
+#: appinfo/app.php:132 appinfo/app.php:142
msgid "Share"
msgstr ""
-#: appinfo/app.php:138
+#: appinfo/app.php:137
msgid "SMB / CIFS using OC login"
msgstr ""
-#: appinfo/app.php:142
+#: appinfo/app.php:141
msgid "Username as share"
msgstr ""
-#: appinfo/app.php:152 appinfo/app.php:163
+#: appinfo/app.php:151 appinfo/app.php:162
msgid "URL"
msgstr ""
-#: appinfo/app.php:156 appinfo/app.php:167
+#: appinfo/app.php:155 appinfo/app.php:166
msgid "Secure https://"
msgstr ""
-#: appinfo/app.php:166
+#: appinfo/app.php:165
msgid "Remote subfolder"
msgstr ""
@@ -213,29 +213,29 @@ msgstr ""
msgid "Saved"
msgstr ""
-#: lib/config.php:703
+#: lib/config.php:707
msgid "<b>Note:</b> "
msgstr ""
-#: lib/config.php:713
+#: lib/config.php:717
msgid " and "
msgstr ""
-#: lib/config.php:735
+#: lib/config.php:739
#, php-format
msgid ""
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting "
"of %s is not possible. Please ask your system administrator to install it."
msgstr ""
-#: lib/config.php:737
+#: lib/config.php:741
#, php-format
msgid ""
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of "
"%s is not possible. Please ask your system administrator to install it."
msgstr ""
-#: lib/config.php:739
+#: lib/config.php:743
#, php-format
msgid ""
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please "
diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot
index fc1fede7825..0e192f187dd 100644
--- a/l10n/templates/files_sharing.pot
+++ b/l10n/templates/files_sharing.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -53,11 +53,11 @@ msgstr ""
msgid "Add {name} from {owner}@{remote}"
msgstr ""
-#: js/public.js:200
+#: js/public.js:204
msgid "No ownCloud installation found at {remote}"
msgstr ""
-#: js/public.js:201
+#: js/public.js:205
msgid "Invalid ownCloud url"
msgstr ""
diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot
index 43f167b9a94..9445d69033b 100644
--- a/l10n/templates/files_trashbin.pot
+++ b/l10n/templates/files_trashbin.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot
index 93e8a1e513f..52a059428cb 100644
--- a/l10n/templates/files_versions.pot
+++ b/l10n/templates/files_versions.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot
index c600c434fb1..d5c717ad7db 100644
--- a/l10n/templates/lib.pot
+++ b/l10n/templates/lib.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/private.pot b/l10n/templates/private.pot
index e21a25b0f2e..99cdac274e4 100644
--- a/l10n/templates/private.pot
+++ b/l10n/templates/private.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot
index 4b0a05a97f4..06de62fed90 100644
--- a/l10n/templates/settings.pot
+++ b/l10n/templates/settings.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot
index 6adebd34d9f..4624e0c24c4 100644
--- a/l10n/templates/user_ldap.pot
+++ b/l10n/templates/user_ldap.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot
index b1234d130e6..af9bb06bbbf 100644
--- a/l10n/templates/user_webdavauth.pot
+++ b/l10n/templates/user_webdavauth.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/th_TH/core.po b/l10n/th_TH/core.po
index 652dbe026df..5b108203b31 100644
--- a/l10n/th_TH/core.po
+++ b/l10n/th_TH/core.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
"MIME-Version: 1.0\n"
@@ -349,12 +349,12 @@ msgstr ""
msgid "Share"
msgstr "แชร์"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "ข้อผิดพลาด"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "เกิดข้อผิดพลาดในระหว่างการแชร์ข้อมูล"
@@ -449,7 +449,7 @@ msgstr ""
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "สามารถแชร์ได้"
#: js/share.js:576
msgid "can edit"
@@ -471,27 +471,27 @@ msgstr "อัพเดท"
msgid "delete"
msgstr "ลบ"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "ใส่รหัสผ่านไว้"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "เกิดข้อผิดพลาดในการยกเลิกการตั้งค่าวันที่หมดอายุ"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "เกิดข้อผิดพลาดในการตั้งค่าวันที่หมดอายุ"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "กำลังส่ง..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "ส่งอีเมล์แล้ว"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "คำเตือน"
diff --git a/l10n/tr/core.po b/l10n/tr/core.po
index ce8615897ed..016c05d9459 100644
--- a/l10n/tr/core.po
+++ b/l10n/tr/core.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
"MIME-Version: 1.0\n"
@@ -358,12 +358,12 @@ msgstr "{recipients} ile paylaşılmış"
msgid "Share"
msgstr "Paylaş"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Hata"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Paylaşım sırasında hata"
@@ -458,7 +458,7 @@ msgstr "e-posta ile bildir"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "paylaşabilir"
#: js/share.js:576
msgid "can edit"
@@ -480,27 +480,27 @@ msgstr "güncelle"
msgid "delete"
msgstr "sil"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Parola korumalı"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Son kullanma tarihi kaldırma hatası"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Son kullanma tarihi ayarlama hatası"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Gönderiliyor..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "E-posta gönderildi"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Uyarı"
diff --git a/l10n/tr/files_sharing.po b/l10n/tr/files_sharing.po
index f843d847004..2f616053359 100644
--- a/l10n/tr/files_sharing.po
+++ b/l10n/tr/files_sharing.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 23:49+0000\n"
+"Last-Translator: Volkan Gezer <volkangezer@gmail.com>\n"
"Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -54,11 +54,11 @@ msgstr "Bağlantı ile henüz hiçbir dosya paylaşmadınız."
msgid "Add {name} from {owner}@{remote}"
msgstr "{name} paylaşımını {owner}@{remote} konumundan ekle"
-#: js/public.js:200
+#: js/public.js:204
msgid "No ownCloud installation found at {remote}"
msgstr "{remote} üzerinde ownCloud kurulumu bulunamadı"
-#: js/public.js:201
+#: js/public.js:205
msgid "Invalid ownCloud url"
msgstr "Geçersiz ownCloud adresi"
@@ -141,7 +141,7 @@ msgstr "Doğrudan bağlantı"
#: templates/settings-admin.php:3
msgid "Remote Shares"
-msgstr ""
+msgstr "Uzak Paylaşımlar"
#: templates/settings-admin.php:7
msgid "Allow other instances to mount public links shared from this server"
diff --git a/l10n/uk/core.po b/l10n/uk/core.po
index 059970ca1fe..3e1ab6509a8 100644
--- a/l10n/uk/core.po
+++ b/l10n/uk/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
"MIME-Version: 1.0\n"
@@ -361,12 +361,12 @@ msgstr ""
msgid "Share"
msgstr "Поділитися"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Помилка"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Помилка під час публікації"
@@ -461,7 +461,7 @@ msgstr "повідомити по Email"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "можна поділитися"
#: js/share.js:576
msgid "can edit"
@@ -483,27 +483,27 @@ msgstr "оновити"
msgid "delete"
msgstr "видалити"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Захищено паролем"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Помилка при відміні терміна дії"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Помилка при встановленні терміна дії"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Надсилання..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "Ел. пошта надіслана"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Попередження"
diff --git a/l10n/vi/core.po b/l10n/vi/core.po
index cf31110c6c8..43770e5cf43 100644
--- a/l10n/vi/core.po
+++ b/l10n/vi/core.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
"MIME-Version: 1.0\n"
@@ -353,12 +353,12 @@ msgstr ""
msgid "Share"
msgstr "Chia sẻ"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "Lỗi"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "Lỗi trong quá trình chia sẻ"
@@ -453,7 +453,7 @@ msgstr "Thông báo qua email"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "có thể chia sẽ"
#: js/share.js:576
msgid "can edit"
@@ -475,27 +475,27 @@ msgstr "cập nhật"
msgid "delete"
msgstr "xóa"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "Mật khẩu bảo vệ"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "Lỗi không thiết lập ngày kết thúc"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "Lỗi cấu hình ngày kết thúc"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "Đang gởi ..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "Email đã được gửi"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "Cảnh báo"
diff --git a/l10n/zh_CN/core.po b/l10n/zh_CN/core.po
index 4fa4eb39b30..0173f79b2aa 100644
--- a/l10n/zh_CN/core.po
+++ b/l10n/zh_CN/core.po
@@ -14,8 +14,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
"MIME-Version: 1.0\n"
@@ -356,12 +356,12 @@ msgstr ""
msgid "Share"
msgstr "分享"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "错误"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "共享时出错"
@@ -456,7 +456,7 @@ msgstr "以邮件通知"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "可共享"
#: js/share.js:576
msgid "can edit"
@@ -478,27 +478,27 @@ msgstr "更新"
msgid "delete"
msgstr "删除"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "密码已受保护"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "取消设置过期日期时出错"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "设置过期日期时出错"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "正在发送..."
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "邮件已发送"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "警告"
diff --git a/l10n/zh_TW/core.po b/l10n/zh_TW/core.po
index cb8b2d8d24b..3a91821e624 100644
--- a/l10n/zh_TW/core.po
+++ b/l10n/zh_TW/core.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-06-27 01:54-0400\n"
-"PO-Revision-Date: 2014-06-27 05:54+0000\n"
+"POT-Creation-Date: 2014-06-28 01:54-0400\n"
+"PO-Revision-Date: 2014-06-27 06:11+0000\n"
"Last-Translator: I Robot\n"
"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
"MIME-Version: 1.0\n"
@@ -351,12 +351,12 @@ msgstr ""
msgid "Share"
msgstr "分享"
-#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:936
+#: js/share.js:271 js/share.js:285 js/share.js:292 js/share.js:938
#: templates/installation.php:10
msgid "Error"
msgstr "錯誤"
-#: js/share.js:273 js/share.js:999
+#: js/share.js:273 js/share.js:1001
msgid "Error while sharing"
msgstr "分享時發生錯誤"
@@ -451,7 +451,7 @@ msgstr "以 email 通知"
#: js/share.js:573
msgid "can share"
-msgstr ""
+msgstr "可分享"
#: js/share.js:576
msgid "can edit"
@@ -473,27 +473,27 @@ msgstr "更新"
msgid "delete"
msgstr "刪除"
-#: js/share.js:917
+#: js/share.js:919
msgid "Password protected"
msgstr "受密碼保護"
-#: js/share.js:936
+#: js/share.js:938
msgid "Error unsetting expiration date"
msgstr "取消到期日設定失敗"
-#: js/share.js:957
+#: js/share.js:959
msgid "Error setting expiration date"
msgstr "設定到期日發生錯誤"
-#: js/share.js:986
+#: js/share.js:988
msgid "Sending ..."
msgstr "正在傳送…"
-#: js/share.js:997
+#: js/share.js:999
msgid "Email sent"
msgstr "Email 已寄出"
-#: js/share.js:1021
+#: js/share.js:1023
msgid "Warning"
msgstr "警告"
diff --git a/lib/base.php b/lib/base.php
index eef094737b6..d9fe94f1ccc 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -179,20 +179,22 @@ class OC {
}
public static function checkConfig() {
+ $l = OC_L10N::get('lib');
if (file_exists(self::$configDir . "/config.php")
and !is_writable(self::$configDir . "/config.php")
) {
if (self::$CLI) {
- echo "Can't write into config directory!\n";
- echo "This can usually be fixed by giving the webserver write access to the config directory\n";
+ 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";
echo "\n";
- echo "See " . \OC_Helper::linkToDocs('admin-dir_permissions') . "\n";
+ echo $l->t('See %s', array(\OC_Helper::linkToDocs('admin-dir_permissions')))."\n";
exit;
} else {
OC_Template::printErrorPage(
- "Can't write into config directory!",
- 'This can usually be fixed by '
- . '<a href="' . \OC_Helper::linkToDocs('admin-dir_permissions') . '" target="_blank">giving the webserver write access to the config directory</a>.'
+ $l->t('Cannot write into "config" directory!'),
+ $l->t('This can usually be fixed by '
+ . '%sgiving the webserver write access to the config directory%s.',
+ array('<a href="'.\OC_Helper::linkToDocs('admin-dir_permissions').'" target="_blank">', '</a>'))
);
}
}
diff --git a/lib/private/defaults.php b/lib/private/defaults.php
index 663c327a3b0..c039c30fbb9 100644
--- a/lib/private/defaults.php
+++ b/lib/private/defaults.php
@@ -19,12 +19,14 @@ class OC_Defaults {
private $defaultBaseUrl;
private $defaultSyncClientUrl;
private $defaultDocBaseUrl;
+ private $defaultDocVersion;
private $defaultSlogan;
private $defaultLogoClaim;
private $defaultMailHeaderColor;
function __construct() {
- $this->l = OC_L10N::get('core');
+ $this->l = OC_L10N::get('lib');
+ $version = OC_Util::getVersion();
$this->defaultEntity = "ownCloud"; /* e.g. company name, used for footers and copyright notices */
$this->defaultName = "ownCloud"; /* short name, used when referring to the software */
@@ -32,6 +34,7 @@ class OC_Defaults {
$this->defaultBaseUrl = "https://owncloud.org";
$this->defaultSyncClientUrl = "https://owncloud.org/sync-clients/";
$this->defaultDocBaseUrl = "http://doc.owncloud.org";
+ $this->defaultDocVersion = $version[0] . ".0"; // used to generate doc links
$this->defaultSlogan = $this->l->t("web services under your control");
$this->defaultLogoClaim = "";
$this->defaultMailHeaderColor = "#1d2d44"; /* header color of mail notifications */
@@ -180,7 +183,7 @@ class OC_Defaults {
if ($this->themeExist('buildDocLinkToKey')) {
return $this->theme->buildDocLinkToKey($key);
}
- return $this->getDocBaseUrl() . '/server/6.0/go.php?to=' . $key;
+ return $this->getDocBaseUrl() . '/server/' . $this->defaultDocVersion . '/go.php?to=' . $key;
}
/**
diff --git a/lib/private/files/filesystem.php b/lib/private/files/filesystem.php
index 2cc4a2130eb..4774d25ad9e 100644
--- a/lib/private/files/filesystem.php
+++ b/lib/private/files/filesystem.php
@@ -325,13 +325,36 @@ class Filesystem {
$userObject = \OC_User::getManager()->get($user);
if (!is_null($userObject)) {
+ $homeStorage = \OC_Config::getValue( 'objectstore' );
+ if (!empty($homeStorage)) {
+ // sanity checks
+ if (empty($homeStorage['class'])) {
+ \OCP\Util::writeLog('files', 'No class given for objectstore', \OCP\Util::ERROR);
+ }
+ if (!isset($homeStorage['arguments'])) {
+ $homeStorage['arguments'] = array();
+ }
+ // instantiate object store implementation
+ $homeStorage['arguments']['objectstore'] = new $homeStorage['class']($homeStorage['arguments']);
+ // mount with home object store implementation
+ $homeStorage['class'] = '\OC\Files\ObjectStore\HomeObjectStoreStorage';
+ } else {
+ $homeStorage = array(
+ //default home storage configuration:
+ 'class' => '\OC\Files\Storage\Home',
+ 'arguments' => array()
+ );
+ }
+ $homeStorage['arguments']['user'] = $userObject;
+
// check for legacy home id (<= 5.0.12)
if (\OC\Files\Cache\Storage::exists('local::' . $root . '/')) {
- self::mount('\OC\Files\Storage\Home', array('user' => $userObject, 'legacy' => true), $user);
- }
- else {
- self::mount('\OC\Files\Storage\Home', array('user' => $userObject), $user);
+ $homeStorage['arguments']['legacy'] = true;
}
+
+ self::mount($homeStorage['class'], $homeStorage['arguments'], $user);
+
+ $home = \OC\Files\Filesystem::getStorage($user);
}
else {
self::mount('\OC\Files\Storage\Local', array('datadir' => $root), $user);
diff --git a/lib/private/files/mount/mount.php b/lib/private/files/mount/mount.php
index 04bccbcab87..48c9d88c23c 100644
--- a/lib/private/files/mount/mount.php
+++ b/lib/private/files/mount/mount.php
@@ -93,7 +93,12 @@ class Mount {
try {
return $this->loader->load($this->mountPoint, $this->class, $this->arguments);
} catch (\Exception $exception) {
- \OC_Log::write('core', $exception->getMessage(), \OC_Log::ERROR);
+ if ($this->mountPoint === '/') {
+ // the root storage could not be initialized, show the user!
+ throw new \Exception('The root storage could not be initialized. Please contact your local administrator.', $exception->getCode(), $exception);
+ } else {
+ \OC_Log::write('core', $exception->getMessage(), \OC_Log::ERROR);
+ }
return null;
}
} else {
diff --git a/lib/private/files/objectstore/homeobjectstorestorage.php b/lib/private/files/objectstore/homeobjectstorestorage.php
new file mode 100644
index 00000000000..26a2788d860
--- /dev/null
+++ b/lib/private/files/objectstore/homeobjectstorestorage.php
@@ -0,0 +1,71 @@
+<?php
+/**
+ * @author Jörn Friedrich Dreyer
+ * @copyright (c) 2014 Jörn Friedrich Dreyer <jfd@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Files\ObjectStore;
+
+use OC\User\User;
+
+class HomeObjectStoreStorage extends ObjectStoreStorage {
+
+ /**
+ * The home user storage requires a user object to create a unique storage id
+ * @param array $params
+ */
+ public function __construct($params) {
+ if ( ! isset($params['user']) || ! $params['user'] instanceof User) {
+ throw new \Exception('missing user object in parameters');
+ }
+ $this->user = $params['user'];
+ parent::__construct($params);
+
+
+ //initialize cache with root directory in cache
+ if ( ! $this->is_dir('files') ) {
+ $this->mkdir('files');
+ }
+ }
+
+ public function getId () {
+ return 'object::user:' . $this->user->getUID();
+ }
+
+ /**
+ * get the owner of a path
+ *
+ * @param string $path The path to get the owner
+ * @return false|string uid
+ */
+ public function getOwner($path) {
+ if (is_object($this->user)) {
+ return $this->user->getUID();
+ }
+ return false;
+ }
+
+ /**
+ * @param string $path, optional
+ * @return \OC\User\User
+ */
+ public function getUser($path = null) {
+ return $this->user;
+ }
+
+
+} \ No newline at end of file
diff --git a/lib/private/files/objectstore/noopscanner.php b/lib/private/files/objectstore/noopscanner.php
new file mode 100644
index 00000000000..59ca1771971
--- /dev/null
+++ b/lib/private/files/objectstore/noopscanner.php
@@ -0,0 +1,74 @@
+<?php
+/**
+ * @author Jörn Friedrich Dreyer
+ * @copyright (c) 2014 Jörn Friedrich Dreyer <jfd@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Files\ObjectStore;
+use \OC\Files\Cache\Scanner;
+use \OC\Files\Storage\Storage;
+
+class NoopScanner extends Scanner {
+
+ public function __construct(Storage $storage) {
+ //we don't need the storage, so do nothing here
+ }
+
+ /**
+ * scan a single file and store it in the cache
+ *
+ * @param string $file
+ * @param int $reuseExisting
+ * @param bool $parentExistsInCache
+ * @return array with metadata of the scanned file
+ */
+ public function scanFile($file, $reuseExisting = 0, $parentExistsInCache = false) {
+ return array();
+ }
+
+ /**
+ * scan a folder and all it's children
+ *
+ * @param string $path
+ * @param bool $recursive
+ * @param int $reuse
+ * @return array with the meta data of the scanned file or folder
+ */
+ public function scan($path, $recursive = self::SCAN_RECURSIVE, $reuse = -1) {
+ return array();
+ }
+
+ /**
+ * scan all the files and folders in a folder
+ *
+ * @param string $path
+ * @param bool $recursive
+ * @param int $reuse
+ * @return int the size of the scanned folder or -1 if the size is unknown at this stage
+ */
+ public function scanChildren($path, $recursive = Storage::SCAN_RECURSIVE, $reuse = -1) {
+ $size = 0;
+ return $size;
+ }
+
+ /**
+ * walk over any folders that are not fully scanned yet and scan them
+ */
+ public function backgroundScan() {
+ //noop
+ }
+}
diff --git a/lib/private/files/objectstore/objectstorestorage.php b/lib/private/files/objectstore/objectstorestorage.php
new file mode 100644
index 00000000000..85f43b90cbb
--- /dev/null
+++ b/lib/private/files/objectstore/objectstorestorage.php
@@ -0,0 +1,421 @@
+<?php
+/**
+ * @author Jörn Friedrich Dreyer
+ * @copyright (c) 2014 Jörn Friedrich Dreyer <jfd@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Files\ObjectStore;
+
+use OC\Files\Filesystem;
+use OCP\Files\ObjectStore\IObjectStore;
+
+class ObjectStoreStorage extends \OC\Files\Storage\Common {
+
+ /**
+ * @var array
+ */
+ private static $tmpFiles = array();
+ /**
+ * @var \OCP\Files\ObjectStore\IObjectStore $objectStore
+ */
+ protected $objectStore;
+ /**
+ * @var \OC\User\User $user
+ */
+ protected $user;
+
+ public function __construct($params) {
+ if (isset($params['objectstore']) && $params['objectstore'] instanceof IObjectStore) {
+ $this->objectStore = $params['objectstore'];
+ } else {
+ throw new \Exception('missing IObjectStore instance');
+ }
+ if (isset($params['storageid'])) {
+ $this->id = 'object::store:' . $params['storageid'];
+ } else {
+ $this->id = 'object::store:' . $this->objectStore->getStorageId();
+ }
+ //initialize cache with root directory in cache
+ if (!$this->is_dir('/')) {
+ $this->mkdir('/');
+ }
+ }
+
+ public function mkdir($path) {
+ $path = $this->normalizePath($path);
+
+ if ($this->is_dir($path)) {
+ return false;
+ }
+
+ $dirName = $this->normalizePath(dirname($path));
+ $parentExists = $this->is_dir($dirName);
+
+ $mTime = time();
+
+ $data = array(
+ 'mimetype' => 'httpd/unix-directory',
+ 'size' => 0,
+ 'mtime' => $mTime,
+ 'storage_mtime' => $mTime,
+ 'permissions' => \OCP\PERMISSION_ALL,
+ );
+
+ if ($dirName === '' && !$parentExists) {
+ //create root on the fly
+ $data['etag'] = $this->getETag('');
+ $this->getCache()->put('', $data);
+ $parentExists = true;
+
+ // we are done when the root folder was meant to be created
+ if ($dirName === $path) {
+ return true;
+ }
+ }
+
+ if ($parentExists) {
+ $data['etag'] = $this->getETag($path);
+ $this->getCache()->put($path, $data);
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @param string $path
+ * @return string
+ */
+ private function normalizePath($path) {
+ $path = trim($path, '/');
+ //FIXME why do we sometimes get a path like 'files//username'?
+ $path = str_replace('//', '/', $path);
+
+ // dirname('/folder') returns '.' but internally (in the cache) we store the root as ''
+ if (!$path || $path === '.') {
+ $path = '';
+ }
+
+ return $path;
+ }
+
+ /**
+ * Object Stores use a NoopScanner because metadata is directly stored in
+ * the file cache and cannot really scan the filesystem. The storage passed in is not used anywhere.
+ *
+ * @param string $path
+ * @param \OC\Files\Storage\Storage (optional) the storage to pass to the scanner
+ * @return \OC\Files\ObjectStore\NoopScanner
+ */
+ public function getScanner($path = '', $storage = null) {
+ if (!$storage) {
+ $storage = $this;
+ }
+ if (!isset($this->scanner)) {
+ $this->scanner = new NoopScanner($storage);
+ }
+ return $this->scanner;
+ }
+
+ public function getId() {
+ return $this->id;
+ }
+
+ public function rmdir($path) {
+ $path = $this->normalizePath($path);
+
+ if (!$this->is_dir($path)) {
+ return false;
+ }
+
+ $this->rmObjects($path);
+
+ $this->getCache()->remove($path);
+
+ return true;
+ }
+
+ private function rmObjects($path) {
+ $children = $this->getCache()->getFolderContents($path);
+ foreach ($children as $child) {
+ if ($child['mimetype'] === 'httpd/unix-directory') {
+ $this->rmObjects($child['path']);
+ } else {
+ $this->unlink($child['path']);
+ }
+ }
+ }
+
+ public function unlink($path) {
+ $path = $this->normalizePath($path);
+ $stat = $this->stat($path);
+
+ if ($stat && isset($stat['fileid'])) {
+ if ($stat['mimetype'] === 'httpd/unix-directory') {
+ return $this->rmdir($path);
+ }
+ try {
+ $this->objectStore->deleteObject($this->getURN($stat['fileid']));
+ } catch (\Exception $ex) {
+ if ($ex->getCode() !== 404) {
+ \OCP\Util::writeLog('objectstore', 'Could not delete object: ' . $ex->getMessage(), \OCP\Util::ERROR);
+ return false;
+ } else {
+ //removing from cache is ok as it does not exist in the objectstore anyway
+ }
+ }
+ $this->getCache()->remove($path);
+ return true;
+ }
+ return false;
+ }
+
+ public function stat($path) {
+ $path = $this->normalizePath($path);
+ return $this->getCache()->get($path);
+ }
+
+ /**
+ * Override this method if you need a different unique resource identifier for your object storage implementation.
+ * The default implementations just appends the fileId to 'urn:oid:'. Make sure the URN is unique over all users.
+ * You may need a mapping table to store your URN if it cannot be generated from the fileid.
+ *
+ * @param int $fileId the fileid
+ * @return null|string the unified resource name used to identify the object
+ */
+ protected function getURN($fileId) {
+ if (is_numeric($fileId)) {
+ return 'urn:oid:' . $fileId;
+ }
+ return null;
+ }
+
+ public function opendir($path) {
+ $path = $this->normalizePath($path);
+
+ try {
+ $files = array();
+ $folderContents = $this->getCache()->getFolderContents($path);
+ foreach ($folderContents as $file) {
+ $files[] = $file['name'];
+ }
+
+ \OC\Files\Stream\Dir::register('objectstore' . $path . '/', $files);
+
+ return opendir('fakedir://objectstore' . $path . '/');
+ } catch (Exception $e) {
+ \OCP\Util::writeLog('objectstore', $e->getMessage(), \OCP\Util::ERROR);
+ return false;
+ }
+ }
+
+ public function filetype($path) {
+ $path = $this->normalizePath($path);
+ $stat = $this->stat($path);
+ if ($stat) {
+ if ($stat['mimetype'] === 'httpd/unix-directory') {
+ return 'dir';
+ }
+ return 'file';
+ } else {
+ return false;
+ }
+ }
+
+ public function fopen($path, $mode) {
+ $path = $this->normalizePath($path);
+
+ switch ($mode) {
+ case 'r':
+ case 'rb':
+ $stat = $this->stat($path);
+ if (is_array($stat)) {
+ try {
+ return $this->objectStore->readObject($this->getURN($stat['fileid']));
+ } catch (\Exception $ex) {
+ \OCP\Util::writeLog('objectstore', 'Could not get object: ' . $ex->getMessage(), \OCP\Util::ERROR);
+ return false;
+ }
+ } else {
+ return false;
+ }
+ case 'w':
+ case 'wb':
+ case 'a':
+ case 'ab':
+ case 'r+':
+ case 'w+':
+ case 'wb+':
+ case 'a+':
+ case 'x':
+ case 'x+':
+ case 'c':
+ case 'c+':
+ if (strrpos($path, '.') !== false) {
+ $ext = substr($path, strrpos($path, '.'));
+ } else {
+ $ext = '';
+ }
+ $tmpFile = \OC_Helper::tmpFile($ext);
+ \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
+ if ($this->file_exists($path)) {
+ $source = $this->fopen($path, 'r');
+ file_put_contents($tmpFile, $source);
+ }
+ self::$tmpFiles[$tmpFile] = $path;
+
+ return fopen('close://' . $tmpFile, $mode);
+ }
+ return false;
+ }
+
+ public function file_exists($path) {
+ $path = $this->normalizePath($path);
+ return (bool)$this->stat($path);
+ }
+
+ public function rename($source, $target) {
+ $source = $this->normalizePath($source);
+ $target = $this->normalizePath($target);
+ $stat1 = $this->stat($source);
+ if (isset($stat1['mimetype']) && $stat1['mimetype'] === 'httpd/unix-directory') {
+ $this->remove($target);
+ $dir = $this->opendir($source);
+ $this->mkdir($target);
+ while ($file = readdir($dir)) {
+ if (!Filesystem::isIgnoredDir($file)) {
+ if (!$this->rename($source . '/' . $file, $target . '/' . $file)) {
+ return false;
+ }
+ }
+ }
+ closedir($dir);
+ $this->remove($source);
+ return true;
+ } else {
+ if (is_array($stat1)) {
+ $parent = $this->stat(dirname($target));
+ if (is_array($parent)) {
+ $this->remove($target);
+ $stat1['parent'] = $parent['fileid'];
+ $stat1['path'] = $target;
+ $stat1['path_hash'] = md5($target);
+ $stat1['name'] = \OC_Util::basename($target);
+ $stat1['mtime'] = time();
+ $stat1['etag'] = $this->getETag($target);
+ $this->getCache()->update($stat1['fileid'], $stat1);
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ public function getMimeType($path) {
+ $path = $this->normalizePath($path);
+ $stat = $this->stat($path);
+ if (is_array($stat)) {
+ return $stat['mimetype'];
+ } else {
+ return false;
+ }
+ }
+
+ public function touch($path, $mtime = null) {
+ if (is_null($mtime)) {
+ $mtime = time();
+ }
+
+ $path = $this->normalizePath($path);
+ $dirName = dirname($path);
+ $parentExists = $this->is_dir($dirName);
+ if (!$parentExists) {
+ return false;
+ }
+
+ $stat = $this->stat($path);
+ if (is_array($stat)) {
+ // update existing mtime in db
+ $stat['mtime'] = $mtime;
+ $this->getCache()->update($stat['fileid'], $stat);
+ } else {
+ $mimeType = \OC_Helper::getFileNameMimeType($path);
+ // create new file
+ $stat = array(
+ 'etag' => $this->getETag($path),
+ 'mimetype' => $mimeType,
+ 'size' => 0,
+ 'mtime' => $mtime,
+ 'storage_mtime' => $mtime,
+ 'permissions' => \OCP\PERMISSION_ALL,
+ );
+ $fileId = $this->getCache()->put($path, $stat);
+ try {
+ //read an empty file from memory
+ $this->objectStore->writeObject($this->getURN($fileId), fopen('php://memory', 'r'));
+ } catch (\Exception $ex) {
+ $this->getCache()->remove($path);
+ \OCP\Util::writeLog('objectstore', 'Could not create object: ' . $ex->getMessage(), \OCP\Util::ERROR);
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public function writeBack($tmpFile) {
+ if (!isset(self::$tmpFiles[$tmpFile])) {
+ return false;
+ }
+
+ $path = self::$tmpFiles[$tmpFile];
+ $stat = $this->stat($path);
+ if (empty($stat)) {
+ // create new file
+ $stat = array(
+ 'etag' => $this->getETag($path),
+ 'permissions' => \OCP\PERMISSION_ALL,
+ );
+ }
+ // update stat with new data
+ $mTime = time();
+ $stat['size'] = filesize($tmpFile);
+ $stat['mtime'] = $mTime;
+ $stat['storage_mtime'] = $mTime;
+ $stat['mimetype'] = \OC_Helper::getMimeType($tmpFile);
+
+ $fileId = $this->getCache()->put($path, $stat);
+ try {
+ //upload to object storage
+ $this->objectStore->writeObject($this->getURN($fileId), fopen($tmpFile, 'r'));
+ } catch (\Exception $ex) {
+ $this->getCache()->remove($path);
+ \OCP\Util::writeLog('objectstore', 'Could not create object: ' . $ex->getMessage(), \OCP\Util::ERROR);
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * external changes are not supported, exclusive access to the object storage is assumed
+ *
+ * @param string $path
+ * @param int $time
+ * @return false
+ */
+ public function hasUpdated($path, $time) {
+ return false;
+ }
+}
diff --git a/lib/private/files/objectstore/swift.php b/lib/private/files/objectstore/swift.php
new file mode 100644
index 00000000000..3378fd7b86f
--- /dev/null
+++ b/lib/private/files/objectstore/swift.php
@@ -0,0 +1,147 @@
+<?php
+/**
+ * @author Jörn Friedrich Dreyer
+ * @copyright (c) 2014 Jörn Friedrich Dreyer <jfd@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Files\ObjectStore;
+
+use Guzzle\Http\Exception\ClientErrorResponseException;
+use OCP\Files\ObjectStore\IObjectStore;
+use OpenCloud\OpenStack;
+use OpenCloud\Rackspace;
+
+class Swift implements IObjectStore {
+ /**
+ * @var \OpenCloud\OpenStack
+ */
+ private $client;
+
+ /**
+ * @var array
+ */
+ private $params;
+
+ /**
+ * @var \OpenCloud\ObjectStore\Service
+ */
+ private $objectStoreService;
+
+ /**
+ * @var \OpenCloud\ObjectStore\Resource\Container
+ */
+ private $container;
+
+ public function __construct($params) {
+ if (!isset($params['container'])) {
+ $params['container'] = 'owncloud';
+ }
+ if (!isset($params['autocreate'])) {
+ // should only be true for tests
+ $params['autocreate'] = false;
+ }
+
+ if (isset($params['apiKey'])) {
+ $this->client = new Rackspace($params['url'], $params);
+ } else {
+ $this->client = new OpenStack($params['url'], $params);
+ }
+ $this->params = $params;
+ }
+
+ protected function init() {
+ if ($this->container) {
+ return;
+ }
+
+ // the OpenCloud client library will default to 'cloudFiles' if $serviceName is null
+ $serviceName = null;
+ if ($this->params['serviceName']) {
+ $serviceName = $this->params['serviceName'];
+ }
+
+ $this->objectStoreService = $this->client->objectStoreService($serviceName, $this->params['region']);
+
+ try {
+ $this->container = $this->objectStoreService->getContainer($this->params['container']);
+ } catch (ClientErrorResponseException $ex) {
+ // if the container does not exist and autocreate is true try to create the container on the fly
+ if (isset($this->params['autocreate']) && $this->params['autocreate'] === true) {
+ $this->container = $this->objectStoreService->createContainer($this->params['container']);
+ } else {
+ throw $ex;
+ }
+ }
+ }
+
+ /**
+ * @return string the container name where objects are stored
+ */
+ public function getStorageId() {
+ return $this->params['container'];
+ }
+
+ /**
+ * @param string $urn the unified resource name used to identify the object
+ * @param resource $stream stream with the data to write
+ * @throws Exception from openstack lib when something goes wrong
+ */
+ public function writeObject($urn, $stream) {
+ $this->init();
+ $this->container->uploadObject($urn, $stream);
+ }
+
+ /**
+ * @param string $urn the unified resource name used to identify the object
+ * @return resource stream with the read data
+ * @throws Exception from openstack lib when something goes wrong
+ */
+ public function readObject($urn) {
+ $this->init();
+ $object = $this->container->getObject($urn);
+
+ // we need to keep a reference to objectContent or
+ // the stream will be closed before we can do anything with it
+ /** @var $objectContent \Guzzle\Http\EntityBody * */
+ $objectContent = $object->getContent();
+ $objectContent->rewind();
+
+ // directly returning the object stream does not work because the GC seems to collect it, so we need a copy
+ $tmpStream = fopen('php://temp', 'r+');
+ stream_copy_to_stream($objectContent->getStream(), $tmpStream);
+ rewind($tmpStream);
+
+ return $tmpStream;
+ }
+
+ /**
+ * @param string $urn Unified Resource Name
+ * @return void
+ * @throws Exception from openstack lib when something goes wrong
+ */
+ public function deleteObject($urn) {
+ $this->init();
+ // see https://github.com/rackspace/php-opencloud/issues/243#issuecomment-30032242
+ $this->container->dataObject()->setName($urn)->delete();
+ }
+
+ public function deleteContainer($recursive = false) {
+ $this->init();
+ $this->container->delete($recursive);
+ }
+
+}
diff --git a/lib/private/files/storage/common.php b/lib/private/files/storage/common.php
index ecc75298b66..9657b511f15 100644
--- a/lib/private/files/storage/common.php
+++ b/lib/private/files/storage/common.php
@@ -279,6 +279,11 @@ abstract class Common implements \OC\Files\Storage\Storage {
/**
* check if a file or folder has been updated since $time
*
+ * The method is only used to check if the cache needs to be updated. Storage backends that don't support checking
+ * the mtime should always return false here. As a result storage implementations that always return false expect
+ * exclusive access to the backend and will not pick up files that have been added in a way that circumvents
+ * ownClouds filesystem.
+ *
* @param string $path
* @param int $time
* @return bool
diff --git a/lib/private/files/storage/dav.php b/lib/private/files/storage/dav.php
index 8536c65ace9..8b97f750204 100644
--- a/lib/private/files/storage/dav.php
+++ b/lib/private/files/storage/dav.php
@@ -426,21 +426,7 @@ class DAV extends \OC\Files\Storage\Common {
$this->init();
$response = $this->client->propfind($this->encodePath($path), array('{http://owncloud.org/ns}permissions'));
if (isset($response['{http://owncloud.org/ns}permissions'])) {
- $permissions = \OCP\PERMISSION_READ;
- $permissionsString = $response['{http://owncloud.org/ns}permissions'];
- if (strpos($permissionsString, 'R') !== false) {
- $permissions |= \OCP\PERMISSION_SHARE;
- }
- if (strpos($permissionsString, 'D') !== false) {
- $permissions |= \OCP\PERMISSION_DELETE;
- }
- if (strpos($permissionsString, 'W') !== false) {
- $permissions |= \OCP\PERMISSION_UPDATE;
- }
- if (strpos($permissionsString, 'C') !== false) {
- $permissions |= \OCP\PERMISSION_CREATE;
- }
- return $permissions;
+ return $this->parsePermissions($response['{http://owncloud.org/ns}permissions']);
} else if ($this->is_dir($path)) {
return \OCP\PERMISSION_ALL;
} else if ($this->file_exists($path)) {
@@ -449,5 +435,58 @@ class DAV extends \OC\Files\Storage\Common {
return 0;
}
}
+
+ /**
+ * @param string $permissionsString
+ * @return int
+ */
+ protected function parsePermissions($permissionsString) {
+ $permissions = \OCP\PERMISSION_READ;
+ if (strpos($permissionsString, 'R') !== false) {
+ $permissions |= \OCP\PERMISSION_SHARE;
+ }
+ if (strpos($permissionsString, 'D') !== false) {
+ $permissions |= \OCP\PERMISSION_DELETE;
+ }
+ if (strpos($permissionsString, 'W') !== false) {
+ $permissions |= \OCP\PERMISSION_UPDATE;
+ }
+ if (strpos($permissionsString, 'CK') !== false) {
+ $permissions |= \OCP\PERMISSION_CREATE;
+ $permissions |= \OCP\PERMISSION_UPDATE;
+ }
+ return $permissions;
+ }
+
+ /**
+ * check if a file or folder has been updated since $time
+ *
+ * @param string $path
+ * @param int $time
+ * @return bool
+ */
+ public function hasUpdated($path, $time) {
+ $this->init();
+ $response = $this->client->propfind($this->encodePath($path), array(
+ '{DAV:}getlastmodified',
+ '{DAV:}getetag',
+ '{http://owncloud.org/ns}permissions'
+ ));
+ if (isset($response['{DAV:}getetag'])) {
+ $cachedData = $this->getCache()->get($path);
+ $etag = trim($response['{DAV:}getetag'], '"');
+ if ($cachedData['etag'] !== $etag) {
+ return true;
+ } else if (isset($response['{http://owncloud.org/ns}permissions'])) {
+ $permissions = $this->parsePermissions($response['{http://owncloud.org/ns}permissions']);
+ return $permissions !== $cachedData['permissions'];
+ } else {
+ return false;
+ }
+ } else {
+ $remoteMtime = strtotime($response['{DAV:}getlastmodified']);
+ return $remoteMtime > $time;
+ }
+ }
}
diff --git a/lib/private/util.php b/lib/private/util.php
index 94005daef61..7836489832d 100755
--- a/lib/private/util.php
+++ b/lib/private/util.php
@@ -12,6 +12,45 @@ class OC_Util {
private static $rootMounted=false;
private static $fsSetup=false;
+ private static function initLocalStorageRootFS() {
+ // mount local file backend as root
+ $configDataDirectory = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" );
+ //first set up the local "root" storage
+ \OC\Files\Filesystem::initMounts();
+ if(!self::$rootMounted) {
+ \OC\Files\Filesystem::mount('\OC\Files\Storage\Local', array('datadir'=>$configDataDirectory), '/');
+ self::$rootMounted = true;
+ }
+ }
+
+ /**
+ * mounting an object storage as the root fs will in essence remove the
+ * necessity of a data folder being present.
+ * TODO make home storage aware of this and use the object storage instead of local disk access
+ * @param array $config containing 'class' and optional 'arguments'
+ */
+ private static function initObjectStoreRootFS($config) {
+ // check misconfiguration
+ if (empty($config['class'])) {
+ \OCP\Util::writeLog('files', 'No class given for objectstore', \OCP\Util::ERROR);
+ }
+ if (!isset($config['arguments'])) {
+ $config['arguments'] = array();
+ }
+
+ // instantiate object store implementation
+ $config['arguments']['objectstore'] = new $config['class']($config['arguments']);
+ // mount with plain / root object store implementation
+ $config['class'] = '\OC\Files\ObjectStore\ObjectStoreStorage';
+
+ // mount object storage as root
+ \OC\Files\Filesystem::initMounts();
+ if(!self::$rootMounted) {
+ \OC\Files\Filesystem::mount($config['class'], $config['arguments'], '/');
+ self::$rootMounted = true;
+ }
+ }
+
/**
* Can be set up
* @param string $user
@@ -39,12 +78,12 @@ class OC_Util {
self::$fsSetup=true;
}
- $configDataDirectory = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" );
- //first set up the local "root" storage
- \OC\Files\Filesystem::initMounts();
- if(!self::$rootMounted) {
- \OC\Files\Filesystem::mount('\OC\Files\Storage\Local', array('datadir'=>$configDataDirectory), '/');
- self::$rootMounted = true;
+ //check if we are using an object storage
+ $objectStore = OC_Config::getValue( 'objectstore' );
+ if ( isset( $objectStore ) ) {
+ self::initObjectStoreRootFS($objectStore);
+ } else {
+ self::initLocalStorageRootFS();
}
if ($user != '' && !OCP\User::userExists($user)) {
@@ -60,24 +99,33 @@ class OC_Util {
/**
* @var \OC\Files\Storage\Storage $storage
*/
- if ($storage->instanceOfStorage('\OC\Files\Storage\Home')) {
- $user = $storage->getUser()->getUID();
- $quota = OC_Util::getUserQuota($user);
- if ($quota !== \OC\Files\SPACE_UNLIMITED) {
- return new \OC\Files\Storage\Wrapper\Quota(array('storage' => $storage, 'quota' => $quota, 'root' => 'files'));
+ if ($storage->instanceOfStorage('\OC\Files\Storage\Home')
+ || $storage->instanceOfStorage('\OC\Files\ObjectStore\HomeObjectStoreStorage')
+ ) {
+ if (is_object($storage->getUser())) {
+ $user = $storage->getUser()->getUID();
+ $quota = OC_Util::getUserQuota($user);
+ if ($quota !== \OC\Files\SPACE_UNLIMITED) {
+ return new \OC\Files\Storage\Wrapper\Quota(array('storage' => $storage, 'quota' => $quota, 'root' => 'files'));
+ }
}
}
return $storage;
});
- $userDir = '/'.$user.'/files';
- $userRoot = OC_User::getHome($user);
- $userDirectory = $userRoot . '/files';
- if( !is_dir( $userDirectory )) {
- mkdir( $userDirectory, 0755, true );
- OC_Util::copySkeleton($userDirectory);
+ // copy skeleton for local storage only
+ if ( ! isset( $objectStore ) ) {
+ $userRoot = OC_User::getHome($user);
+ $userDirectory = $userRoot . '/files';
+ if( !is_dir( $userDirectory )) {
+ mkdir( $userDirectory, 0755, true );
+ OC_Util::copySkeleton($userDirectory);
+ }
}
+
+ $userDir = '/'.$user.'/files';
+
//jail the user into his "home" directory
\OC\Files\Filesystem::init($user, $userDir);
@@ -326,6 +374,7 @@ class OC_Util {
* @return array arrays with error messages and hints
*/
public static function checkServer() {
+ $l = OC_L10N::get('lib');
$errors = array();
$CONFIG_DATADIRECTORY = OC_Config::getValue('datadirectory', OC::$SERVERROOT . '/data');
@@ -346,24 +395,24 @@ class OC_Util {
and !is_callable('pg_connect')
and !is_callable('oci_connect')) {
$errors[] = array(
- 'error'=>'No database drivers (sqlite, mysql, or postgresql) installed.',
+ 'error'=> $l->t('No database drivers (sqlite, mysql, or postgresql) installed.'),
'hint'=>'' //TODO: sane hint
);
$webServerRestart = true;
}
//common hint for all file permissions error messages
- $permissionsHint = 'Permissions can usually be fixed by '
- .'<a href="' . OC_Helper::linkToDocs('admin-dir_permissions')
- .'" target="_blank">giving the webserver write access to the root directory</a>.';
+ $permissionsHint = $l->t('Permissions can usually be fixed by '
+ .'%sgiving the webserver write access to the root directory%s.',
+ array('<a href="'.\OC_Helper::linkToDocs('admin-dir_permissions').'" target="_blank">', '</a>'));
// Check if config folder is writable.
if(!is_writable(OC::$configDir) or !is_readable(OC::$configDir)) {
$errors[] = array(
- 'error' => "Can't write into config directory",
- 'hint' => 'This can usually be fixed by '
- .'<a href="' . OC_Helper::linkToDocs('admin-dir_permissions')
- .'" target="_blank">giving the webserver write access to the config directory</a>.'
+ 'error' => $l->t('Cannot write into "config" directory'),
+ 'hint' => $l->t('This can usually be fixed by '
+ .'%sgiving the webserver write access to the config directory%s.',
+ array('<a href="'.\OC_Helper::linkToDocs('admin-dir_permissions').'" target="_blank">', '</a>'))
);
}
@@ -373,11 +422,11 @@ class OC_Util {
|| !is_writable(OC_App::getInstallPath())
|| !is_readable(OC_App::getInstallPath()) ) {
$errors[] = array(
- 'error' => "Can't write into apps directory",
- 'hint' => 'This can usually be fixed by '
- .'<a href="' . OC_Helper::linkToDocs('admin-dir_permissions')
- .'" target="_blank">giving the webserver write access to the apps directory</a> '
- .'or disabling the appstore in the config file.'
+ 'error' => $l->t('Cannot write into "apps" directory'),
+ 'hint' => $l->t('This can usually be fixed by '
+ .'%sgiving the webserver write access to the apps directory%s'
+ .' or disabling the appstore in the config file.',
+ array('<a href="'.\OC_Helper::linkToDocs('admin-dir_permissions').'" target="_blank">', '</a>'))
);
}
}
@@ -388,11 +437,11 @@ class OC_Util {
$errors = array_merge($errors, self::checkDataDirectoryPermissions($CONFIG_DATADIRECTORY));
} else {
$errors[] = array(
- 'error' => "Can't create data directory (".$CONFIG_DATADIRECTORY.")",
- 'hint' => 'This can usually be fixed by '
- .'<a href="' . OC_Helper::linkToDocs('admin-dir_permissions')
- .'" target="_blank">giving the webserver write access to the root directory</a>.'
- );
+ 'error' => $l->t('Cannot create "data" directory (%s)', array($CONFIG_DATADIRECTORY)),
+ 'hint' => $l->t('This can usually be fixed by '
+ .'<a href="%s" target="_blank">giving the webserver write access to the root directory</a>.',
+ array(OC_Helper::linkToDocs('admin-dir_permissions')))
+ );
}
} else if(!is_writable($CONFIG_DATADIRECTORY) or !is_readable($CONFIG_DATADIRECTORY)) {
$errors[] = array(
@@ -405,30 +454,32 @@ class OC_Util {
if(!OC_Util::isSetLocaleWorking()) {
$errors[] = array(
- 'error' => 'Setting locale to en_US.UTF-8/fr_FR.UTF-8/es_ES.UTF-8/de_DE.UTF-8/ru_RU.UTF-8/pt_BR.UTF-8/it_IT.UTF-8/ja_JP.UTF-8/zh_CN.UTF-8 failed',
- 'hint' => 'Please install one of theses locales on your system and restart your webserver.'
+ 'error' => $l->t('Setting locale to %s failed',
+ array('en_US.UTF-8/fr_FR.UTF-8/es_ES.UTF-8/de_DE.UTF-8/ru_RU.UTF-8/'
+ .'pt_BR.UTF-8/it_IT.UTF-8/ja_JP.UTF-8/zh_CN.UTF-8')),
+ 'hint' => $l->t('Please install one of theses locales on your system and restart your webserver.')
);
}
- $moduleHint = "Please ask your server administrator to install the module.";
+ $moduleHint = $l->t('Please ask your server administrator to install the module.');
// check if all required php modules are present
if(!class_exists('ZipArchive')) {
$errors[] = array(
- 'error'=>'PHP module zip not installed.',
+ 'error'=> $l->t('PHP module %s not installed.', array('zip')),
'hint'=>$moduleHint
);
$webServerRestart = true;
}
if(!class_exists('DOMDocument')) {
$errors[] = array(
- 'error' => 'PHP module dom not installed.',
+ 'error'=> $l->t('PHP module %s not installed.', array('dom')),
'hint' => $moduleHint
);
$webServerRestart =true;
}
if(!function_exists('xml_parser_create')) {
$errors[] = array(
- 'error' => 'PHP module libxml not installed.',
+ 'error'=> $l->t('PHP module %s not installed.', array('libxml')),
'hint' => $moduleHint
);
$webServerRestart = true;
@@ -442,57 +493,57 @@ class OC_Util {
}
if(!function_exists('ctype_digit')) {
$errors[] = array(
- 'error'=>'PHP module ctype is not installed.',
+ 'error'=> $l->t('PHP module %s not installed.', array('ctype')),
'hint'=>$moduleHint
);
$webServerRestart = true;
}
if(!function_exists('json_encode')) {
$errors[] = array(
- 'error'=>'PHP module JSON is not installed.',
+ 'error'=> $l->t('PHP module %s not installed.', array('JSON')),
'hint'=>$moduleHint
);
$webServerRestart = true;
}
if(!extension_loaded('gd') || !function_exists('gd_info')) {
$errors[] = array(
- 'error'=>'PHP module GD is not installed.',
+ 'error'=> $l->t('PHP module %s not installed.', array('GD')),
'hint'=>$moduleHint
);
$webServerRestart = true;
}
if(!function_exists('gzencode')) {
$errors[] = array(
- 'error'=>'PHP module zlib is not installed.',
+ 'error'=> $l->t('PHP module %s not installed.', array('zlib')),
'hint'=>$moduleHint
);
$webServerRestart = true;
}
if(!function_exists('iconv')) {
$errors[] = array(
- 'error'=>'PHP module iconv is not installed.',
+ 'error'=> $l->t('PHP module %s not installed.', array('iconv')),
'hint'=>$moduleHint
);
$webServerRestart = true;
}
if(!function_exists('simplexml_load_string')) {
$errors[] = array(
- 'error'=>'PHP module SimpleXML is not installed.',
+ 'error'=> $l->t('PHP module %s not installed.', array('SimpleXML')),
'hint'=>$moduleHint
);
$webServerRestart = true;
}
if(version_compare(phpversion(), '5.3.3', '<')) {
$errors[] = array(
- 'error'=>'PHP 5.3.3 or higher is required.',
- 'hint'=>'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.'
+ 'error'=> $l->t('PHP %s or higher is required.', '5.3.3'),
+ '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.')
);
$webServerRestart = true;
}
if(!defined('PDO::ATTR_DRIVER_NAME')) {
$errors[] = array(
- 'error'=>'PHP PDO module is not installed.',
+ 'error'=> $l->t('PHP module %s not installed.', array('PDO')),
'hint'=>$moduleHint
);
$webServerRestart = true;
@@ -502,17 +553,17 @@ class OC_Util {
|| (strtolower(@ini_get('safe_mode')) == 'true')
|| (ini_get("safe_mode") == 1 ))) {
$errors[] = array(
- 'error'=>'PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly.',
- 'hint'=>'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.'
+ 'error'=> $l->t('PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly.'),
+ 'hint'=> $l->t('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.')
);
$webServerRestart = true;
}
if (get_magic_quotes_gpc() == 1 ) {
$errors[] = array(
- 'error'=>'Magic Quotes is enabled. ownCloud requires that it is disabled to work properly.',
- 'hint'=>'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.'
+ 'error'=> $l->t('Magic Quotes is enabled. ownCloud requires that it is disabled to work properly.'),
+ 'hint'=> $l->t('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.')
);
$webServerRestart = true;
}
@@ -525,8 +576,8 @@ class OC_Util {
if($webServerRestart) {
$errors[] = array(
- 'error'=>'PHP modules have been installed, but they are still listed as missing?',
- 'hint'=>'Please ask your server administrator to restart the web server.'
+ 'error'=> $l->t('PHP modules have been installed, but they are still listed as missing?'),
+ 'hint'=> $l->t('Please ask your server administrator to restart the web server.')
);
}
@@ -543,6 +594,7 @@ class OC_Util {
* @return array errors array
*/
public static function checkDatabaseVersion() {
+ $l = OC_L10N::get('lib');
$errors = array();
$dbType = \OC_Config::getValue('dbtype', 'sqlite');
if ($dbType === 'pgsql') {
@@ -554,16 +606,17 @@ class OC_Util {
$version = $data['server_version'];
if (version_compare($version, '9.0.0', '<')) {
$errors[] = array(
- 'error' => 'PostgreSQL >= 9 required',
- 'hint' => 'Please upgrade your database version'
+ 'error' => $l->t('PostgreSQL >= 9 required'),
+ 'hint' => $l->t('Please upgrade your database version')
);
}
}
} catch (\Doctrine\DBAL\DBALException $e) {
\OCP\Util::logException('core', $e);
$errors[] = array(
- 'error' => 'Error occurred while checking PostgreSQL version',
- 'hint' => 'Please make sure you have PostgreSQL >= 9 or check the logs for more information about the error'
+ 'error' => $l->t('Error occurred while checking PostgreSQL version'),
+ 'hint' => $l->t('Please make sure you have PostgreSQL >= 9 or'
+ .' check the logs for more information about the error')
);
}
}
@@ -619,12 +672,13 @@ class OC_Util {
* @return array arrays with error messages and hints
*/
public static function checkDataDirectoryPermissions($dataDirectory) {
+ $l = OC_L10N::get('lib');
$errors = array();
if (self::runningOnWindows()) {
//TODO: permissions checks for windows hosts
} else {
- $permissionsModHint = 'Please change the permissions to 0770 so that the directory'
- .' cannot be listed by other users.';
+ $permissionsModHint = $l->t('Please change the permissions to 0770 so that the directory'
+ .' cannot be listed by other users.');
$perms = substr(decoct(@fileperms($dataDirectory)), -3);
if (substr($perms, -1) != '0') {
chmod($dataDirectory, 0770);
@@ -632,7 +686,7 @@ class OC_Util {
$perms = substr(decoct(@fileperms($dataDirectory)), -3);
if (substr($perms, 2, 1) != '0') {
$errors[] = array(
- 'error' => 'Data directory ('.$dataDirectory.') is readable for other users',
+ 'error' => $l->t('Data directory (%s) is readable by other users', array($dataDirectory)),
'hint' => $permissionsModHint
);
}
@@ -649,12 +703,13 @@ class OC_Util {
* @return bool true if the data directory is valid, false otherwise
*/
public static function checkDataDirectoryValidity($dataDirectory) {
+ $l = OC_L10N::get('lib');
$errors = array();
if (!file_exists($dataDirectory.'/.ocdata')) {
$errors[] = array(
- 'error' => 'Data directory (' . $dataDirectory . ') is invalid',
- 'hint' => 'Please check that the data directory contains a file' .
- ' ".ocdata" in its root.'
+ 'error' => $l->t('Data directory (%s) is invalid', array($dataDirectory)),
+ 'hint' => $l->t('Please check that the data directory contains a file' .
+ ' ".ocdata" in its root.')
);
}
return $errors;
diff --git a/lib/public/files/objectstore/iobjectstore.php b/lib/public/files/objectstore/iobjectstore.php
new file mode 100644
index 00000000000..b2c5a9da134
--- /dev/null
+++ b/lib/public/files/objectstore/iobjectstore.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace OCP\Files\ObjectStore;
+
+interface IObjectStore {
+
+ /**
+ * @return string the container or bucket name where objects are stored
+ */
+ function getStorageId();
+
+ /**
+ * @param string $urn the unified resource name used to identify the object
+ * @return resource stream with the read data
+ * @throws Exception when something goes wrong, message will be logged
+ */
+ function readObject($urn);
+
+ /**
+ * @param string $urn the unified resource name used to identify the object
+ * @param resource $stream stream with the data to write
+ * @throws Exception when something goes wrong, message will be logged
+ */
+ function writeObject($urn, $stream);
+
+ /**
+ * @param string $urn the unified resource name used to identify the object
+ * @return void
+ * @throws Exception when something goes wrong, message will be logged
+ */
+ function deleteObject($urn);
+
+} \ No newline at end of file
diff --git a/settings/l10n/ru.php b/settings/l10n/ru.php
index eea1d455525..ab40b3bf4be 100644
--- a/settings/l10n/ru.php
+++ b/settings/l10n/ru.php
@@ -90,6 +90,7 @@ $TRANSLATIONS = array(
"Fatal issues only" => "Только критические проблемы",
"None" => "Нет новостей",
"Login" => "Логин",
+"Plain" => "Простой",
"SSL" => "SSL",
"TLS" => "TLS",
"Security Warning" => "Предупреждение безопасности",
@@ -120,11 +121,13 @@ $TRANSLATIONS = array(
"Use systems cron service to call the cron.php file every 15 minutes." => "Использовать системный cron для вызова cron.php каждые 15 минут.",
"Sharing" => "Общий доступ",
"Allow apps to use the Share API" => "Позволить приложениям использовать API общего доступа",
+"Allow users to share via link" => "Разрешить пользователям публикации через ссылки",
"Allow public uploads" => "Разрешить открытые загрузки",
"Set default expiration date" => "Установите дату окончания по-умолчанию",
"Expire after " => "Заканчивается после",
"days" => "дней",
"Allow resharing" => "Разрешить переоткрытие общего доступа",
+"Restrict users to only share with users in their groups" => "Разрешить пользователям публикации только внутри их групп",
"Allow users to send mail notification for shared files" => "Разрешить пользователю оповещать почтой о расшаренных файлах",
"Exclude groups from sharing" => "Исключить группы из общего доступа",
"These groups will still be able to receive shares, but not to initiate them." => "Эти группы смогут получать общие файлы, но не смогут отправлять их.",
@@ -208,6 +211,7 @@ $TRANSLATIONS = array(
"Other" => "Другое",
"Username" => "Имя пользователя",
"Quota" => "Квота",
+"Storage Location" => "Место хранилища",
"Last Login" => "Последний вход",
"change full name" => "изменить полное имя",
"set new password" => "установить новый пароль",
diff --git a/tests/lib/files/objectstore/swift.php b/tests/lib/files/objectstore/swift.php
new file mode 100644
index 00000000000..7f3b45c0dab
--- /dev/null
+++ b/tests/lib/files/objectstore/swift.php
@@ -0,0 +1,106 @@
+<?php
+/**
+ * @author Jörn Friedrich Dreyer
+ * @copyright (c) 2014 Jörn Friedrich Dreyer <jfd@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\ObjectStore\Tests\Unit;
+
+use OC\Files\ObjectStore\ObjectStoreStorage;
+use OC\Files\ObjectStore\Swift as ObjectStoreToTest;
+
+use PHPUnit_Framework_TestCase;
+
+//class Swift extends PHPUnit_Framework_TestCase {
+class Swift extends \Test\Files\Storage\Storage {
+
+ private $objectStorage;
+
+ public function setUp() {
+
+ \OC_App::disable('files_sharing');
+ \OC_App::disable('files_versions');
+
+ // reset backend
+ \OC_User::clearBackends();
+ \OC_User::useBackend('database');
+
+ // create users
+ $users = array('test');
+ foreach($users as $userName) {
+ \OC_User::deleteUser($userName);
+ \OC_User::createUser($userName, $userName);
+ }
+
+ // main test user
+ $userName = 'test';
+ \OC_Util::tearDownFS();
+ \OC_User::setUserId('');
+ \OC\Files\Filesystem::tearDown();
+ \OC_User::setUserId('test');
+
+ $testContainer = 'oc-test-container-'.substr( md5(rand()), 0, 7);
+
+ $params = array(
+ 'username' => 'facebook100000330192569',
+ 'password' => 'Dbdj1sXnRSHxIGc4',
+ 'container' => $testContainer,
+ 'autocreate' => true,
+ 'region' => 'RegionOne', //required, trystack defaults to 'RegionOne'
+ 'url' => 'http://8.21.28.222:5000/v2.0', // The Identity / Keystone endpoint
+ 'tenantName' => 'facebook100000330192569', // required on trystack
+ 'serviceName' => 'swift', //trystack uses swift by default, the lib defaults to 'cloudFiles' if omitted
+ 'user' => \OC_User::getManager()->get($userName)
+ );
+ $this->objectStorage = new ObjectStoreToTest($params);
+ $params['objectstore'] = $this->objectStorage;
+ $this->instance = new ObjectStoreStorage($params);
+ }
+
+ public function tearDown() {
+ if (is_null($this->instance)) {
+ return;
+ }
+ $this->objectStorage->deleteContainer(true);
+ $this->instance->getCache()->clear();
+ }
+
+ public function testStat() {
+ $textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
+ $ctimeStart = time();
+ $this->instance->file_put_contents('/lorem.txt', file_get_contents($textFile));
+ $this->assertTrue($this->instance->isReadable('/lorem.txt'));
+ $ctimeEnd = time();
+ $mTime = $this->instance->filemtime('/lorem.txt');
+
+ // check that ($ctimeStart - 5) <= $mTime <= ($ctimeEnd + 1)
+ $this->assertGreaterThanOrEqual(($ctimeStart - 5), $mTime);
+ $this->assertLessThanOrEqual(($ctimeEnd + 1), $mTime);
+ $this->assertEquals(filesize($textFile), $this->instance->filesize('/lorem.txt'));
+
+ $stat = $this->instance->stat('/lorem.txt');
+ //only size and mtime are required in the result
+ $this->assertEquals($stat['size'], $this->instance->filesize('/lorem.txt'));
+ $this->assertEquals($stat['mtime'], $mTime);
+
+ if ($this->instance->touch('/lorem.txt', 100) !== false) {
+ $mTime = $this->instance->filemtime('/lorem.txt');
+ $this->assertEquals($mTime, 100);
+ }
+ }
+
+}