summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/admin_audit/appinfo/app.php2
-rw-r--r--apps/admin_audit/lib/Actions/Action.php1
-rw-r--r--apps/admin_audit/lib/Actions/Auth.php1
-rw-r--r--apps/admin_audit/lib/Actions/Files.php1
-rw-r--r--apps/admin_audit/lib/Actions/GroupManagement.php1
-rw-r--r--apps/admin_audit/lib/Actions/Sharing.php1
-rw-r--r--apps/admin_audit/lib/Actions/Trashbin.php1
-rw-r--r--apps/admin_audit/lib/Actions/UserManagement.php1
-rw-r--r--apps/admin_audit/lib/Actions/Versions.php1
-rw-r--r--apps/admin_audit/lib/AppInfo/Application.php3
-rw-r--r--apps/comments/appinfo/app.php2
-rw-r--r--apps/comments/appinfo/routes.php5
-rw-r--r--apps/comments/css/autocomplete.scss2
-rw-r--r--apps/comments/l10n/es_EC.js34
-rw-r--r--apps/comments/l10n/es_EC.json32
-rw-r--r--apps/comments/lib/Activity/Filter.php2
-rw-r--r--apps/comments/lib/Activity/Listener.php1
-rw-r--r--apps/comments/lib/Activity/Provider.php2
-rw-r--r--apps/comments/lib/Activity/Setting.php2
-rw-r--r--apps/comments/lib/AppInfo/Application.php20
-rw-r--r--apps/comments/lib/Controller/Notifications.php20
-rw-r--r--apps/comments/lib/EventHandler.php1
-rw-r--r--apps/comments/lib/Notification/Listener.php4
-rw-r--r--apps/comments/lib/Notification/Notifier.php5
-rw-r--r--apps/comments/tests/Unit/AppInfo/ApplicationTest.php4
-rw-r--r--apps/comments/tests/Unit/Controller/NotificationsTest.php4
-rw-r--r--apps/comments/tests/Unit/Notification/ListenerTest.php5
-rw-r--r--apps/comments/tests/Unit/Notification/NotifierTest.php1
-rw-r--r--apps/dav/appinfo/app.php1
-rw-r--r--apps/dav/appinfo/v1/caldav.php4
-rw-r--r--apps/dav/appinfo/v1/carddav.php2
-rw-r--r--apps/dav/appinfo/v1/webdav.php4
-rw-r--r--apps/dav/appinfo/v2/remote.php1
-rw-r--r--apps/dav/l10n/es_EC.js52
-rw-r--r--apps/dav/l10n/es_EC.json50
-rw-r--r--apps/dav/l10n/nl.js3
-rw-r--r--apps/dav/l10n/nl.json3
-rw-r--r--apps/dav/lib/AppInfo/Application.php5
-rw-r--r--apps/dav/lib/AppInfo/PluginManager.php4
-rw-r--r--apps/dav/lib/Avatars/AvatarHome.php5
-rw-r--r--apps/dav/lib/Avatars/AvatarNode.php4
-rw-r--r--apps/dav/lib/Avatars/RootCollection.php24
-rw-r--r--apps/dav/lib/CalDAV/Activity/Backend.php3
-rw-r--r--apps/dav/lib/CalDAV/Activity/Filter/Calendar.php2
-rw-r--r--apps/dav/lib/CalDAV/Activity/Filter/Todo.php2
-rw-r--r--apps/dav/lib/CalDAV/Activity/Provider/Base.php2
-rw-r--r--apps/dav/lib/CalDAV/Activity/Provider/Calendar.php2
-rw-r--r--apps/dav/lib/CalDAV/Activity/Provider/Event.php2
-rw-r--r--apps/dav/lib/CalDAV/Activity/Provider/Todo.php2
-rw-r--r--apps/dav/lib/CalDAV/Activity/Setting/Calendar.php2
-rw-r--r--apps/dav/lib/CalDAV/Activity/Setting/Event.php2
-rw-r--r--apps/dav/lib/CalDAV/Activity/Setting/Todo.php2
-rw-r--r--apps/dav/lib/CalDAV/BirthdayService.php4
-rw-r--r--apps/dav/lib/CalDAV/CalDavBackend.php6
-rw-r--r--apps/dav/lib/CalDAV/Calendar.php3
-rw-r--r--apps/dav/lib/CalDAV/CalendarHome.php2
-rw-r--r--apps/dav/lib/CalDAV/CalendarObject.php2
-rw-r--r--apps/dav/lib/CalDAV/Plugin.php4
-rw-r--r--apps/dav/lib/CalDAV/PublicCalendar.php15
-rw-r--r--apps/dav/lib/CalDAV/PublicCalendarObject.php15
-rw-r--r--apps/dav/lib/CalDAV/PublicCalendarRoot.php6
-rw-r--r--apps/dav/lib/CalDAV/Publishing/PublishPlugin.php17
-rw-r--r--apps/dav/lib/CalDAV/Publishing/Xml/Publisher.php16
-rw-r--r--apps/dav/lib/CalDAV/Schedule/IMipPlugin.php325
-rw-r--r--apps/dav/lib/CalDAV/Search/SearchPlugin.php17
-rw-r--r--apps/dav/lib/CalDAV/Search/Xml/Filter/CompFilter.php16
-rw-r--r--apps/dav/lib/CalDAV/Search/Xml/Filter/LimitFilter.php16
-rw-r--r--apps/dav/lib/CalDAV/Search/Xml/Filter/OffsetFilter.php16
-rw-r--r--apps/dav/lib/CalDAV/Search/Xml/Filter/ParamFilter.php16
-rw-r--r--apps/dav/lib/CalDAV/Search/Xml/Filter/PropFilter.php16
-rw-r--r--apps/dav/lib/CalDAV/Search/Xml/Filter/SearchTermFilter.php16
-rw-r--r--apps/dav/lib/CalDAV/Search/Xml/Request/CalendarSearchReport.php16
-rw-r--r--apps/dav/lib/Capabilities.php3
-rw-r--r--apps/dav/lib/CardDAV/AddressBook.php1
-rw-r--r--apps/dav/lib/CardDAV/AddressBookImpl.php3
-rw-r--r--apps/dav/lib/CardDAV/AddressBookRoot.php1
-rw-r--r--apps/dav/lib/CardDAV/CardDavBackend.php7
-rw-r--r--apps/dav/lib/CardDAV/ContactsManager.php3
-rw-r--r--apps/dav/lib/CardDAV/Converter.php1
-rw-r--r--apps/dav/lib/CardDAV/ImageExportPlugin.php3
-rw-r--r--apps/dav/lib/CardDAV/PhotoCache.php23
-rw-r--r--apps/dav/lib/CardDAV/Plugin.php1
-rw-r--r--apps/dav/lib/CardDAV/SyncService.php3
-rw-r--r--apps/dav/lib/CardDAV/UserAddressBooks.php1
-rw-r--r--apps/dav/lib/Command/CreateCalendar.php2
-rw-r--r--apps/dav/lib/Comments/CommentsPlugin.php1
-rw-r--r--apps/dav/lib/Connector/LegacyDAVACL.php1
-rw-r--r--apps/dav/lib/Connector/PublicAuth.php1
-rw-r--r--apps/dav/lib/Connector/Sabre/Auth.php1
-rw-r--r--apps/dav/lib/Connector/Sabre/BearerAuth.php2
-rw-r--r--apps/dav/lib/Connector/Sabre/CachingTree.php2
-rw-r--r--apps/dav/lib/Connector/Sabre/CommentPropertiesPlugin.php1
-rw-r--r--apps/dav/lib/Connector/Sabre/DummyGetResponsePlugin.php2
-rw-r--r--apps/dav/lib/Connector/Sabre/ExceptionLoggerPlugin.php3
-rw-r--r--apps/dav/lib/Connector/Sabre/FakeLockerPlugin.php1
-rw-r--r--apps/dav/lib/Connector/Sabre/File.php3
-rw-r--r--apps/dav/lib/Connector/Sabre/FilesPlugin.php2
-rw-r--r--apps/dav/lib/Connector/Sabre/FilesReportPlugin.php1
-rw-r--r--apps/dav/lib/Connector/Sabre/MaintenancePlugin.php1
-rw-r--r--apps/dav/lib/Connector/Sabre/Node.php1
-rw-r--r--apps/dav/lib/Connector/Sabre/ObjectTree.php2
-rw-r--r--apps/dav/lib/Connector/Sabre/Principal.php1
-rw-r--r--apps/dav/lib/Connector/Sabre/QuotaPlugin.php3
-rw-r--r--apps/dav/lib/Connector/Sabre/Server.php1
-rw-r--r--apps/dav/lib/Connector/Sabre/SharesPlugin.php4
-rw-r--r--apps/dav/lib/Connector/Sabre/TagsPlugin.php2
-rw-r--r--apps/dav/lib/DAV/CustomPropertiesBackend.php2
-rw-r--r--apps/dav/lib/DAV/GroupPrincipalBackend.php1
-rw-r--r--apps/dav/lib/DAV/PublicAuth.php3
-rw-r--r--apps/dav/lib/DAV/Sharing/Backend.php1
-rw-r--r--apps/dav/lib/DAV/Sharing/Plugin.php1
-rw-r--r--apps/dav/lib/DAV/SystemPrincipalBackend.php1
-rw-r--r--apps/dav/lib/Files/FileSearchBackend.php2
-rw-r--r--apps/dav/lib/Files/FilesHome.php3
-rw-r--r--apps/dav/lib/Files/RootCollection.php2
-rw-r--r--apps/dav/lib/HookManager.php5
-rw-r--r--apps/dav/lib/Migration/FixBirthdayCalendarComponent.php3
-rw-r--r--apps/dav/lib/Migration/Version1004Date20170825134824.php1
-rw-r--r--apps/dav/lib/Migration/Version1004Date20170919104507.php22
-rw-r--r--apps/dav/lib/Migration/Version1004Date20170926103422.php22
-rw-r--r--apps/dav/lib/Server.php9
-rw-r--r--apps/dav/lib/SystemTag/SystemTagNode.php1
-rw-r--r--apps/dav/lib/SystemTag/SystemTagsObjectMappingCollection.php1
-rw-r--r--apps/dav/lib/Upload/AssemblyStream.php3
-rw-r--r--apps/dav/lib/Upload/UploadHome.php1
-rw-r--r--apps/dav/tests/unit/AppInfo/PluginManagerTest.php3
-rw-r--r--apps/dav/tests/unit/Avatars/AvatarHomeTest.php4
-rw-r--r--apps/dav/tests/unit/Avatars/AvatarNodeTest.php3
-rw-r--r--apps/dav/tests/unit/CalDAV/AbstractCalDavBackend.php3
-rw-r--r--apps/dav/tests/unit/CalDAV/Activity/BackendTest.php2
-rw-r--r--apps/dav/tests/unit/CalDAV/Activity/Filter/CalendarTest.php2
-rw-r--r--apps/dav/tests/unit/CalDAV/Activity/Filter/GenericTest.php2
-rw-r--r--apps/dav/tests/unit/CalDAV/Activity/Filter/TodoTest.php2
-rw-r--r--apps/dav/tests/unit/CalDAV/Activity/Provider/BaseTest.php2
-rw-r--r--apps/dav/tests/unit/CalDAV/Activity/Setting/GenericTest.php2
-rw-r--r--apps/dav/tests/unit/CalDAV/CalDavBackendTest.php3
-rw-r--r--apps/dav/tests/unit/CalDAV/CalendarTest.php3
-rw-r--r--apps/dav/tests/unit/CalDAV/PluginTest.php2
-rw-r--r--apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php27
-rw-r--r--apps/dav/tests/unit/CalDAV/PublicCalendarTest.php16
-rw-r--r--apps/dav/tests/unit/CalDAV/Publishing/PublisherTest.php23
-rw-r--r--apps/dav/tests/unit/CalDAV/Publishing/PublishingTest.php23
-rw-r--r--apps/dav/tests/unit/CalDAV/Schedule/IMipPluginTest.php99
-rw-r--r--apps/dav/tests/unit/CalDAV/Schedule/PluginTest.php2
-rw-r--r--apps/dav/tests/unit/CalDAV/Search/Request/CalendarSearchReportTest.php16
-rw-r--r--apps/dav/tests/unit/CalDAV/Search/SearchPluginTest.php16
-rw-r--r--apps/dav/tests/unit/CapabilitiesTest.php2
-rw-r--r--apps/dav/tests/unit/CardDAV/AddressBookImplTest.php2
-rw-r--r--apps/dav/tests/unit/CardDAV/AddressBookTest.php1
-rw-r--r--apps/dav/tests/unit/CardDAV/CardDavBackendTest.php6
-rw-r--r--apps/dav/tests/unit/CardDAV/ContactsManagerTest.php3
-rw-r--r--apps/dav/tests/unit/CardDAV/ConverterTest.php2
-rw-r--r--apps/dav/tests/unit/CardDAV/ImageExportPluginTest.php3
-rw-r--r--apps/dav/tests/unit/CardDAV/Sharing/PluginTest.php1
-rw-r--r--apps/dav/tests/unit/CardDAV/SyncServiceTest.php3
-rw-r--r--apps/dav/tests/unit/Comments/CommentsNodeTest.php1
-rw-r--r--apps/dav/tests/unit/Comments/CommentsPluginTest.php1
-rw-r--r--apps/dav/tests/unit/Comments/EntityCollectionTest.php1
-rw-r--r--apps/dav/tests/unit/Comments/EntityTypeCollectionTest.php1
-rw-r--r--apps/dav/tests/unit/Comments/RootCollectionTest.php1
-rw-r--r--apps/dav/tests/unit/Connector/PublicAuthTest.php2
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/AuthTest.php1
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/BearerAuthTest.php2
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/BlockLegacyClientPluginTest.php1
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/CommentsPropertiesPluginTest.php1
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/CopyEtagHeaderPluginTest.php1
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/CustomPropertiesBackendTest.php1
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php2
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/DummyGetResponsePluginTest.php1
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/ExceptionLoggerPluginTest.php1
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/FakeLockerPluginTest.php1
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/FileTest.php1
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php3
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php2
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/MaintenancePluginTest.php2
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/NodeTest.php1
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/ObjectTreeTest.php1
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/PrincipalTest.php1
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/QuotaPluginTest.php1
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/RequestTest/DeleteTest.php1
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/RequestTest/EncryptionMasterKeyUploadTest.php4
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/RequestTest/EncryptionUploadTest.php1
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/RequestTest/PartFileInRootUploadTest.php1
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTestCase.php1
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/SharesPluginTest.php3
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/TagsPluginTest.php1
-rw-r--r--apps/dav/tests/unit/DAV/BrowserErrorPagePluginTest.php1
-rw-r--r--apps/dav/tests/unit/DAV/GroupPrincipalTest.php1
-rw-r--r--apps/dav/tests/unit/DAV/HookManagerTest.php6
-rw-r--r--apps/dav/tests/unit/DAV/Sharing/PluginTest.php1
-rw-r--r--apps/dav/tests/unit/DAV/SystemPrincipalBackendTest.php1
-rw-r--r--apps/dav/tests/unit/Files/FileSearchBackendTest.php3
-rw-r--r--apps/dav/tests/unit/Migration/CalDAVRemoveEmptyValueTest.php2
-rw-r--r--apps/dav/tests/unit/ServerTest.php1
-rw-r--r--apps/dav/tests/unit/SystemTag/SystemTagMappingNodeTest.php1
-rw-r--r--apps/dav/tests/unit/SystemTag/SystemTagNodeTest.php1
-rw-r--r--apps/dav/tests/unit/SystemTag/SystemTagPluginTest.php1
-rw-r--r--apps/dav/tests/unit/SystemTag/SystemTagsByIdCollectionTest.php1
-rw-r--r--apps/dav/tests/unit/SystemTag/SystemTagsObjectMappingCollectionTest.php1
-rw-r--r--apps/dav/tests/unit/SystemTag/SystemTagsObjectTypeCollectionTest.php1
-rw-r--r--apps/dav/tests/unit/Upload/AssemblyStreamTest.php3
-rw-r--r--apps/dav/tests/unit/Upload/FutureFileTest.php1
-rw-r--r--apps/encryption/appinfo/app.php1
-rw-r--r--apps/encryption/l10n/es_EC.js65
-rw-r--r--apps/encryption/l10n/es_EC.json63
-rw-r--r--apps/encryption/l10n/sr.js32
-rw-r--r--apps/encryption/l10n/sr.json32
-rw-r--r--apps/encryption/lib/AppInfo/Application.php1
-rw-r--r--apps/encryption/lib/Command/DisableMasterKey.php2
-rw-r--r--apps/encryption/lib/Command/MigrateKeys.php1
-rw-r--r--apps/encryption/lib/Controller/StatusController.php2
-rw-r--r--apps/encryption/lib/Crypto/Crypt.php2
-rw-r--r--apps/encryption/lib/Crypto/EncryptAll.php1
-rw-r--r--apps/encryption/lib/Crypto/Encryption.php2
-rw-r--r--apps/encryption/lib/Hooks/UserHooks.php2
-rw-r--r--apps/encryption/lib/KeyManager.php2
-rw-r--r--apps/encryption/lib/Migration.php1
-rw-r--r--apps/encryption/lib/Migration/SetMasterKeyStatus.php2
-rw-r--r--apps/encryption/lib/Session.php1
-rw-r--r--apps/encryption/lib/Util.php1
-rw-r--r--apps/encryption/tests/Command/TestEnableMasterKey.php1
-rw-r--r--apps/encryption/tests/Controller/RecoveryControllerTest.php1
-rw-r--r--apps/encryption/tests/Controller/SettingsControllerTest.php2
-rw-r--r--apps/encryption/tests/Controller/StatusControllerTest.php3
-rw-r--r--apps/encryption/tests/Crypto/CryptTest.php3
-rw-r--r--apps/encryption/tests/Crypto/DecryptAllTest.php1
-rw-r--r--apps/encryption/tests/Crypto/EncryptAllTest.php3
-rw-r--r--apps/encryption/tests/Crypto/EncryptionTest.php3
-rw-r--r--apps/encryption/tests/HookManagerTest.php2
-rw-r--r--apps/encryption/tests/Hooks/UserHooksTest.php3
-rw-r--r--apps/encryption/tests/KeyManagerTest.php4
-rw-r--r--apps/encryption/tests/MigrationTest.php1
-rw-r--r--apps/encryption/tests/RecoveryTest.php2
-rw-r--r--apps/encryption/tests/SessionTest.php2
-rw-r--r--apps/encryption/tests/Settings/AdminTest.php1
-rw-r--r--apps/encryption/tests/Users/SetupTest.php2
-rw-r--r--apps/encryption/tests/UtilTest.php3
-rw-r--r--apps/federatedfilesharing/appinfo/app.php2
-rw-r--r--apps/federatedfilesharing/appinfo/routes.php2
-rw-r--r--apps/federatedfilesharing/l10n/es_EC.js58
-rw-r--r--apps/federatedfilesharing/l10n/es_EC.json56
-rw-r--r--apps/federatedfilesharing/lib/AddressHandler.php2
-rw-r--r--apps/federatedfilesharing/lib/AppInfo/Application.php3
-rw-r--r--apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php4
-rw-r--r--apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php4
-rw-r--r--apps/federatedfilesharing/lib/Controller/RequestHandlerController.php3
-rw-r--r--apps/federatedfilesharing/lib/FederatedShareProvider.php3
-rw-r--r--apps/federatedfilesharing/lib/Notifications.php2
-rw-r--r--apps/federatedfilesharing/lib/Notifier.php1
-rw-r--r--apps/federatedfilesharing/lib/Settings/Admin.php2
-rw-r--r--apps/federatedfilesharing/lib/Settings/Personal.php1
-rw-r--r--apps/federatedfilesharing/tests/AddressHandlerTest.php3
-rw-r--r--apps/federatedfilesharing/tests/Controller/MountPublicLinkControllerTest.php2
-rw-r--r--apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php2
-rw-r--r--apps/federatedfilesharing/tests/FederatedShareProviderTest.php3
-rw-r--r--apps/federatedfilesharing/tests/NotificationsTest.php2
-rw-r--r--apps/federatedfilesharing/tests/Settings/AdminTest.php1
-rw-r--r--apps/federatedfilesharing/tests/TestCase.php2
-rw-r--r--apps/federatedfilesharing/tests/TokenHandlerTest.php1
-rw-r--r--apps/federation/appinfo/routes.php2
-rw-r--r--apps/federation/l10n/es_EC.js16
-rw-r--r--apps/federation/l10n/es_EC.json14
-rw-r--r--apps/federation/lib/AppInfo/Application.php2
-rw-r--r--apps/federation/lib/BackgroundJob/GetSharedSecret.php4
-rw-r--r--apps/federation/lib/BackgroundJob/RequestSharedSecret.php4
-rw-r--r--apps/federation/lib/Command/SyncFederationAddressBooks.php1
-rw-r--r--apps/federation/lib/Controller/OCSAuthAPIController.php2
-rw-r--r--apps/federation/lib/Controller/SettingsController.php1
-rw-r--r--apps/federation/lib/DbHandler.php1
-rw-r--r--apps/federation/lib/Middleware/AddServerMiddleware.php3
-rw-r--r--apps/federation/lib/SyncFederationAddressBooks.php1
-rw-r--r--apps/federation/lib/SyncJob.php1
-rw-r--r--apps/federation/lib/TrustedServers.php1
-rw-r--r--apps/federation/tests/BackgroundJob/GetSharedSecretTest.php2
-rw-r--r--apps/federation/tests/BackgroundJob/RequestSharedSecretTest.php2
-rw-r--r--apps/federation/tests/Controller/OCSAuthAPIControllerTest.php2
-rw-r--r--apps/federation/tests/Controller/SettingsControllerTest.php1
-rw-r--r--apps/federation/tests/DbHandlerTest.php1
-rw-r--r--apps/federation/tests/Middleware/AddServerMiddlewareTest.php2
-rw-r--r--apps/federation/tests/SyncFederationAddressbooksTest.php1
-rw-r--r--apps/federation/tests/TrustedServersTest.php2
-rw-r--r--apps/files/ajax/download.php1
-rw-r--r--apps/files/appinfo/app.php2
-rw-r--r--apps/files/appinfo/routes.php1
-rw-r--r--apps/files/css/files.scss2
-rw-r--r--apps/files/js/files.js2
-rw-r--r--apps/files/l10n/es_EC.js164
-rw-r--r--apps/files/l10n/es_EC.json162
-rw-r--r--apps/files/l10n/fr.js1
-rw-r--r--apps/files/l10n/fr.json1
-rw-r--r--apps/files/lib/Activity/FavoriteProvider.php2
-rw-r--r--apps/files/lib/Activity/Filter/Favorites.php2
-rw-r--r--apps/files/lib/Activity/Filter/FileChanges.php2
-rw-r--r--apps/files/lib/Activity/Provider.php3
-rw-r--r--apps/files/lib/Activity/Settings/FavoriteAction.php2
-rw-r--r--apps/files/lib/Activity/Settings/FileChanged.php2
-rw-r--r--apps/files/lib/Activity/Settings/FileCreated.php2
-rw-r--r--apps/files/lib/Activity/Settings/FileDeleted.php2
-rw-r--r--apps/files/lib/Activity/Settings/FileFavorite.php2
-rw-r--r--apps/files/lib/Activity/Settings/FileRestored.php2
-rw-r--r--apps/files/lib/App.php1
-rw-r--r--apps/files/lib/AppInfo/Application.php2
-rw-r--r--apps/files/lib/Command/ScanAppData.php24
-rw-r--r--apps/files/lib/Command/TransferOwnership.php4
-rw-r--r--apps/files/lib/Controller/ApiController.php3
-rw-r--r--apps/files/lib/Controller/ViewController.php2
-rw-r--r--apps/files/lib/Helper.php1
-rw-r--r--apps/files/lib/Service/TagService.php1
-rw-r--r--apps/files/lib/Settings/Admin.php1
-rw-r--r--apps/files/recentlist.php22
-rw-r--r--apps/files/tests/Activity/Filter/GenericTest.php2
-rw-r--r--apps/files/tests/Activity/ProviderTest.php2
-rw-r--r--apps/files/tests/Activity/Setting/GenericTest.php2
-rw-r--r--apps/files/tests/BackgroundJob/ScanFilesTest.php1
-rw-r--r--apps/files/tests/Controller/ApiControllerTest.php1
-rw-r--r--apps/files/tests/Controller/ViewControllerTest.php4
-rw-r--r--apps/files/tests/HelperTest.php1
-rw-r--r--apps/files/tests/Settings/AdminTest.php1
-rw-r--r--apps/files_external/ajax/oauth2.php5
-rw-r--r--apps/files_external/appinfo/app.php5
-rw-r--r--apps/files_external/l10n/es_EC.js134
-rw-r--r--apps/files_external/l10n/es_EC.json132
-rw-r--r--apps/files_external/l10n/zh_TW.js8
-rw-r--r--apps/files_external/l10n/zh_TW.json8
-rw-r--r--apps/files_external/lib/Command/Applicable.php1
-rw-r--r--apps/files_external/lib/Command/Config.php1
-rw-r--r--apps/files_external/lib/Command/Create.php1
-rw-r--r--apps/files_external/lib/Command/Delete.php1
-rw-r--r--apps/files_external/lib/Command/Import.php1
-rw-r--r--apps/files_external/lib/Command/ListCommand.php1
-rw-r--r--apps/files_external/lib/Command/Notify.php1
-rw-r--r--apps/files_external/lib/Config/ExternalMountPoint.php2
-rw-r--r--apps/files_external/lib/Controller/AjaxController.php2
-rw-r--r--apps/files_external/lib/Lib/Api.php2
-rw-r--r--apps/files_external/lib/Lib/Auth/AuthMechanism.php1
-rw-r--r--apps/files_external/lib/Lib/Auth/InvalidAuth.php3
-rw-r--r--apps/files_external/lib/Lib/Auth/Password/GlobalAuth.php1
-rw-r--r--apps/files_external/lib/Lib/Auth/Password/SessionCredentials.php2
-rw-r--r--apps/files_external/lib/Lib/Auth/PublicKey/RSA.php1
-rw-r--r--apps/files_external/lib/Lib/Backend/Backend.php1
-rw-r--r--apps/files_external/lib/Lib/Backend/InvalidBackend.php5
-rw-r--r--apps/files_external/lib/Lib/Backend/OwnCloud.php1
-rw-r--r--apps/files_external/lib/Lib/FrontendDefinitionTrait.php1
-rw-r--r--apps/files_external/lib/Lib/IdentifierTrait.php1
-rw-r--r--apps/files_external/lib/Lib/InsufficientDataForMeaningfulAnswerException.php1
-rw-r--r--apps/files_external/lib/Lib/Storage/AmazonS3.php1
-rw-r--r--apps/files_external/lib/Lib/Storage/FTP.php1
-rw-r--r--apps/files_external/lib/Lib/Storage/OwnCloud.php2
-rw-r--r--apps/files_external/lib/Lib/Storage/SFTP.php1
-rw-r--r--apps/files_external/lib/Lib/Storage/SMB.php3
-rw-r--r--apps/files_external/lib/Lib/Storage/Swift.php4
-rw-r--r--apps/files_external/lib/Service/DBConfigService.php1
-rw-r--r--apps/files_external/lib/Settings/Personal.php2
-rw-r--r--apps/files_external/lib/Settings/PersonalSection.php3
-rw-r--r--apps/files_external/lib/Settings/Section.php1
-rw-r--r--apps/files_external/lib/config.php1
-rw-r--r--apps/files_external/tests/Auth/AuthMechanismTest.php1
-rw-r--r--apps/files_external/tests/Auth/Password/GlobalAuth.php1
-rw-r--r--apps/files_external/tests/Backend/BackendTest.php1
-rw-r--r--apps/files_external/tests/Command/ApplicableTest.php1
-rw-r--r--apps/files_external/tests/Command/ListCommandTest.php3
-rw-r--r--apps/files_external/tests/Controller/AjaxControllerTest.php1
-rw-r--r--apps/files_external/tests/Controller/GlobalStoragesControllerTest.php1
-rw-r--r--apps/files_external/tests/Controller/StoragesControllerTest.php1
-rw-r--r--apps/files_external/tests/Controller/UserStoragesControllerTest.php1
-rw-r--r--apps/files_external/tests/FrontendDefinitionTraitTest.php1
-rw-r--r--apps/files_external/tests/Service/BackendServiceTest.php2
-rw-r--r--apps/files_external/tests/Service/StoragesServiceTest.php2
-rw-r--r--apps/files_external/tests/Service/UserGlobalStoragesServiceTest.php1
-rw-r--r--apps/files_external/tests/Service/UserStoragesServiceTest.php1
-rw-r--r--apps/files_external/tests/Settings/SectionTest.php1
-rw-r--r--apps/files_external/tests/Storage/SmbTest.php1
-rw-r--r--apps/files_external/tests/StorageConfigTest.php1
-rw-r--r--apps/files_sharing/appinfo/app.php7
-rw-r--r--apps/files_sharing/appinfo/routes.php4
-rw-r--r--apps/files_sharing/l10n/es_EC.js115
-rw-r--r--apps/files_sharing/l10n/es_EC.json113
-rw-r--r--apps/files_sharing/lib/Activity/Filter.php2
-rw-r--r--apps/files_sharing/lib/Activity/Providers/Base.php2
-rw-r--r--apps/files_sharing/lib/Activity/Providers/Downloads.php2
-rw-r--r--apps/files_sharing/lib/Activity/Providers/Groups.php2
-rw-r--r--apps/files_sharing/lib/Activity/Providers/PublicLinks.php2
-rw-r--r--apps/files_sharing/lib/Activity/Providers/RemoteShares.php3
-rw-r--r--apps/files_sharing/lib/Activity/Providers/Users.php2
-rw-r--r--apps/files_sharing/lib/Activity/Settings/PublicLinks.php2
-rw-r--r--apps/files_sharing/lib/Activity/Settings/RemoteShare.php3
-rw-r--r--apps/files_sharing/lib/Activity/Settings/Shared.php3
-rw-r--r--apps/files_sharing/lib/AppInfo/Application.php2
-rw-r--r--apps/files_sharing/lib/Cache.php1
-rw-r--r--apps/files_sharing/lib/Capabilities.php1
-rw-r--r--apps/files_sharing/lib/Command/CleanupRemoteStorages.php5
-rw-r--r--apps/files_sharing/lib/Controller/PublicPreviewController.php1
-rw-r--r--apps/files_sharing/lib/Controller/RemoteController.php3
-rw-r--r--apps/files_sharing/lib/Controller/ShareAPIController.php5
-rw-r--r--apps/files_sharing/lib/Controller/ShareController.php5
-rw-r--r--apps/files_sharing/lib/Controller/ShareInfoController.php23
-rw-r--r--apps/files_sharing/lib/Controller/ShareesAPIController.php7
-rw-r--r--apps/files_sharing/lib/ExpireSharesJob.php1
-rw-r--r--apps/files_sharing/lib/External/Manager.php2
-rw-r--r--apps/files_sharing/lib/External/MountProvider.php1
-rw-r--r--apps/files_sharing/lib/External/Storage.php2
-rw-r--r--apps/files_sharing/lib/Hooks.php1
-rw-r--r--apps/files_sharing/lib/Middleware/OCSShareAPIMiddleware.php24
-rw-r--r--apps/files_sharing/lib/Middleware/ShareInfoMiddleware.php23
-rw-r--r--apps/files_sharing/lib/Middleware/SharingCheckMiddleware.php1
-rw-r--r--apps/files_sharing/lib/MountProvider.php2
-rw-r--r--apps/files_sharing/lib/Scanner.php1
-rw-r--r--apps/files_sharing/lib/ShareBackend/Folder.php1
-rw-r--r--apps/files_sharing/lib/SharedMount.php1
-rw-r--r--apps/files_sharing/lib/SharedStorage.php1
-rw-r--r--apps/files_sharing/tests/ApiTest.php2
-rw-r--r--apps/files_sharing/tests/BackendTest.php1
-rw-r--r--apps/files_sharing/tests/CapabilitiesTest.php2
-rw-r--r--apps/files_sharing/tests/Command/CleanupRemoteStoragesTest.php4
-rw-r--r--apps/files_sharing/tests/Controller/ShareAPIControllerTest.php5
-rw-r--r--apps/files_sharing/tests/Controller/ShareControllerTest.php2
-rw-r--r--apps/files_sharing/tests/Controller/ShareInfoControllerTest.php23
-rw-r--r--apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php5
-rw-r--r--apps/files_sharing/tests/DeleteOrphanedSharesJobTest.php1
-rw-r--r--apps/files_sharing/tests/EncryptedSizePropagationTest.php1
-rw-r--r--apps/files_sharing/tests/ExpireSharesJobTest.php1
-rw-r--r--apps/files_sharing/tests/External/ManagerTest.php4
-rw-r--r--apps/files_sharing/tests/ExternalStorageTest.php1
-rw-r--r--apps/files_sharing/tests/GroupEtagPropagationTest.php2
-rw-r--r--apps/files_sharing/tests/HelperTest.php1
-rw-r--r--apps/files_sharing/tests/Middleware/OCSShareAPIMiddlewareTest.php23
-rw-r--r--apps/files_sharing/tests/Middleware/ShareInfoMiddlewareTest.php23
-rw-r--r--apps/files_sharing/tests/Middleware/SharingCheckMiddlewareTest.php1
-rw-r--r--apps/files_sharing/tests/Migration/SetPasswordColumnTest.php4
-rw-r--r--apps/files_sharing/tests/MountProviderTest.php2
-rw-r--r--apps/files_sharing/tests/SharedMountTest.php1
-rw-r--r--apps/files_sharing/tests/UpdaterTest.php1
-rw-r--r--apps/files_trashbin/ajax/undelete.php1
-rw-r--r--apps/files_trashbin/appinfo/app.php4
-rw-r--r--apps/files_trashbin/appinfo/routes.php1
-rw-r--r--apps/files_trashbin/l10n/es_EC.js21
-rw-r--r--apps/files_trashbin/l10n/es_EC.json19
-rw-r--r--apps/files_trashbin/lib/BackgroundJob/ExpireTrash.php1
-rw-r--r--apps/files_trashbin/lib/Command/ExpireTrash.php4
-rw-r--r--apps/files_trashbin/lib/Controller/PreviewController.php1
-rw-r--r--apps/files_trashbin/lib/Events/MoveToTrashEvent.php2
-rw-r--r--apps/files_trashbin/lib/Helper.php3
-rw-r--r--apps/files_trashbin/lib/Storage.php2
-rw-r--r--apps/files_trashbin/lib/Trashbin.php7
-rw-r--r--apps/files_trashbin/tests/BackgroundJob/ExpireTrashTest.php1
-rw-r--r--apps/files_trashbin/tests/Command/CleanUpTest.php1
-rw-r--r--apps/files_trashbin/tests/ExpirationTest.php1
-rw-r--r--apps/files_trashbin/tests/StorageTest.php1
-rw-r--r--apps/files_versions/appinfo/routes.php3
-rw-r--r--apps/files_versions/l10n/es_EC.js14
-rw-r--r--apps/files_versions/l10n/es_EC.json12
-rw-r--r--apps/files_versions/lib/BackgroundJob/ExpireVersions.php1
-rw-r--r--apps/files_versions/lib/Command/Expire.php1
-rw-r--r--apps/files_versions/lib/Command/ExpireVersions.php4
-rw-r--r--apps/files_versions/lib/Controller/PreviewController.php1
-rw-r--r--apps/files_versions/lib/Events/CreateVersionEvent.php2
-rw-r--r--apps/files_versions/lib/Hooks.php2
-rw-r--r--apps/files_versions/lib/Storage.php2
-rw-r--r--apps/files_versions/tests/Command/CleanupTest.php1
-rw-r--r--apps/files_versions/tests/ExpirationTest.php1
-rw-r--r--apps/files_versions/tests/VersioningTest.php2
-rw-r--r--apps/oauth2/l10n/es_EC.js13
-rw-r--r--apps/oauth2/l10n/es_EC.json11
-rw-r--r--apps/oauth2/l10n/zh_TW.js13
-rw-r--r--apps/oauth2/l10n/zh_TW.json11
-rw-r--r--apps/provisioning_api/appinfo/routes.php4
-rw-r--r--apps/provisioning_api/lib/AppInfo/Application.php24
-rw-r--r--apps/provisioning_api/lib/Controller/AppConfigController.php2
-rw-r--r--apps/provisioning_api/lib/Controller/AppsController.php1
-rw-r--r--apps/provisioning_api/lib/Controller/GroupsController.php1
-rw-r--r--apps/provisioning_api/lib/Controller/UsersController.php1
-rw-r--r--apps/provisioning_api/lib/Middleware/Exceptions/NotSubAdminException.php23
-rw-r--r--apps/provisioning_api/lib/Middleware/ProvisioningApiMiddleware.php24
-rw-r--r--apps/provisioning_api/tests/Controller/AppConfigControllerTest.php2
-rw-r--r--apps/provisioning_api/tests/Controller/UsersControllerTest.php2
-rw-r--r--apps/sharebymail/l10n/el.js2
-rw-r--r--apps/sharebymail/l10n/el.json2
-rw-r--r--apps/sharebymail/l10n/es_DO.js50
-rw-r--r--apps/sharebymail/l10n/es_DO.json48
-rw-r--r--apps/sharebymail/l10n/es_EC.js50
-rw-r--r--apps/sharebymail/l10n/es_EC.json48
-rw-r--r--apps/systemtags/appinfo/app.php3
-rw-r--r--apps/systemtags/l10n/es_DO.js58
-rw-r--r--apps/systemtags/l10n/es_DO.json56
-rw-r--r--apps/systemtags/l10n/es_EC.js58
-rw-r--r--apps/systemtags/l10n/es_EC.json56
-rw-r--r--apps/systemtags/lib/Activity/Listener.php1
-rw-r--r--apps/systemtags/lib/Activity/Provider.php2
-rw-r--r--apps/systemtags/lib/Activity/Setting.php2
-rw-r--r--apps/systemtags/lib/Controller/LastUsedController.php2
-rw-r--r--apps/systemtags/lib/Settings/Admin.php1
-rw-r--r--apps/systemtags/tests/Settings/AdminTest.php1
-rw-r--r--apps/testing/appinfo/app.php4
-rw-r--r--apps/testing/appinfo/routes.php2
-rw-r--r--apps/testing/clean_opcode_cache.php2
-rw-r--r--apps/testing/lib/AlternativeHomeUserBackend.php3
-rw-r--r--apps/testing/lib/AppInfo/Application.php4
-rw-r--r--apps/testing/lib/Controller/ConfigController.php1
-rw-r--r--apps/testing/lib/Controller/LockingController.php2
-rw-r--r--apps/testing/lib/Controller/RateLimitTestController.php2
-rw-r--r--apps/theming/appinfo/app.php2
-rw-r--r--apps/theming/appinfo/routes.php3
-rw-r--r--apps/theming/l10n/es_DO.js39
-rw-r--r--apps/theming/l10n/es_DO.json37
-rw-r--r--apps/theming/l10n/es_EC.js39
-rw-r--r--apps/theming/l10n/es_EC.json37
-rw-r--r--apps/theming/lib/Capabilities.php9
-rw-r--r--apps/theming/lib/Controller/IconController.php2
-rw-r--r--apps/theming/lib/Controller/ThemingController.php7
-rw-r--r--apps/theming/lib/IconBuilder.php22
-rw-r--r--apps/theming/lib/ImageManager.php22
-rw-r--r--apps/theming/lib/Migration/ThemingImages.php22
-rw-r--r--apps/theming/lib/Settings/Admin.php6
-rw-r--r--apps/theming/lib/Settings/Section.php1
-rw-r--r--apps/theming/lib/ThemingDefaults.php11
-rw-r--r--apps/theming/lib/Util.php5
-rw-r--r--apps/theming/tests/CapabilitiesTest.php7
-rw-r--r--apps/theming/tests/Controller/IconControllerTest.php23
-rw-r--r--apps/theming/tests/Controller/ThemingControllerTest.php8
-rw-r--r--apps/theming/tests/IconBuilderTest.php23
-rw-r--r--apps/theming/tests/ImageManagerTest.php23
-rw-r--r--apps/theming/tests/Migration/ThemingImages.php22
-rw-r--r--apps/theming/tests/ServicesTest.php2
-rw-r--r--apps/theming/tests/Settings/AdminTest.php4
-rw-r--r--apps/theming/tests/Settings/SectionTest.php1
-rw-r--r--apps/theming/tests/ThemingDefaultsTest.php6
-rw-r--r--apps/theming/tests/UtilTest.php2
-rw-r--r--apps/twofactor_backupcodes/l10n/es_DO.js18
-rw-r--r--apps/twofactor_backupcodes/l10n/es_DO.json16
-rw-r--r--apps/twofactor_backupcodes/l10n/es_EC.js18
-rw-r--r--apps/twofactor_backupcodes/l10n/es_EC.json16
-rw-r--r--apps/updatenotification/appinfo/app.php1
-rw-r--r--apps/updatenotification/l10n/es_DO.js28
-rw-r--r--apps/updatenotification/l10n/es_DO.json26
-rw-r--r--apps/updatenotification/l10n/es_EC.js28
-rw-r--r--apps/updatenotification/l10n/es_EC.json26
-rw-r--r--apps/updatenotification/lib/Controller/AdminController.php2
-rw-r--r--apps/updatenotification/lib/Notification/BackgroundJob.php2
-rw-r--r--apps/updatenotification/lib/Notification/Notifier.php2
-rw-r--r--apps/updatenotification/lib/UpdateChecker.php1
-rw-r--r--apps/updatenotification/tests/Controller/AdminControllerTest.php1
-rw-r--r--apps/updatenotification/tests/ResetTokenBackgroundJobTest.php1
-rw-r--r--apps/updatenotification/tests/UpdateCheckerTest.php1
-rw-r--r--apps/user_ldap/ajax/deleteConfiguration.php2
-rw-r--r--apps/user_ldap/ajax/getConfiguration.php2
-rw-r--r--apps/user_ldap/ajax/getNewServerConfigPrefix.php1
-rw-r--r--apps/user_ldap/ajax/testConfiguration.php2
-rw-r--r--apps/user_ldap/ajax/wizard.php3
-rw-r--r--apps/user_ldap/appinfo/app.php26
-rw-r--r--apps/user_ldap/appinfo/install.php3
-rw-r--r--apps/user_ldap/appinfo/register_command.php6
-rw-r--r--apps/user_ldap/appinfo/routes.php2
-rw-r--r--apps/user_ldap/appinfo/update.php5
-rw-r--r--apps/user_ldap/composer/composer/autoload_classmap.php5
-rw-r--r--apps/user_ldap/composer/composer/autoload_static.php5
-rw-r--r--apps/user_ldap/l10n/es_DO.js197
-rw-r--r--apps/user_ldap/l10n/es_DO.json195
-rw-r--r--apps/user_ldap/l10n/es_EC.js197
-rw-r--r--apps/user_ldap/l10n/es_EC.json195
-rw-r--r--apps/user_ldap/lib/Access.php5
-rw-r--r--apps/user_ldap/lib/Command/Search.php8
-rw-r--r--apps/user_ldap/lib/Command/SetConfig.php1
-rw-r--r--apps/user_ldap/lib/Command/TestConfig.php1
-rw-r--r--apps/user_ldap/lib/Configuration.php4
-rw-r--r--apps/user_ldap/lib/Connection.php6
-rw-r--r--apps/user_ldap/lib/GroupPluginManager.php169
-rw-r--r--apps/user_ldap/lib/Group_LDAP.php121
-rw-r--r--apps/user_ldap/lib/Group_Proxy.php77
-rw-r--r--apps/user_ldap/lib/Helper.php9
-rw-r--r--apps/user_ldap/lib/IGroupLDAP.php44
-rw-r--r--apps/user_ldap/lib/ILDAPGroupPlugin.php86
-rw-r--r--apps/user_ldap/lib/ILDAPUserPlugin.php93
-rw-r--r--apps/user_ldap/lib/ILDAPWrapper.php4
-rw-r--r--apps/user_ldap/lib/IUserLDAP.php4
-rw-r--r--apps/user_ldap/lib/Jobs/CleanUp.php6
-rw-r--r--apps/user_ldap/lib/Jobs/UpdateGroups.php8
-rw-r--r--apps/user_ldap/lib/LDAPProvider.php143
-rw-r--r--apps/user_ldap/lib/LDAPProviderFactory.php5
-rw-r--r--apps/user_ldap/lib/Migration/UUIDFixGroup.php5
-rw-r--r--apps/user_ldap/lib/Migration/UUIDFixUser.php4
-rw-r--r--apps/user_ldap/lib/Notification/Notifier.php2
-rw-r--r--apps/user_ldap/lib/Proxy.php2
-rw-r--r--apps/user_ldap/lib/Settings/Admin.php2
-rw-r--r--apps/user_ldap/lib/Settings/Section.php2
-rw-r--r--apps/user_ldap/lib/User/Manager.php1
-rw-r--r--apps/user_ldap/lib/User/User.php7
-rw-r--r--apps/user_ldap/lib/UserPluginManager.php210
-rw-r--r--apps/user_ldap/lib/User_LDAP.php65
-rw-r--r--apps/user_ldap/lib/User_Proxy.php33
-rw-r--r--apps/user_ldap/lib/Wizard.php3
-rw-r--r--apps/user_ldap/tests/AccessTest.php7
-rw-r--r--apps/user_ldap/tests/ConnectionTest.php3
-rw-r--r--apps/user_ldap/tests/GroupLDAPPluginTest.php248
-rw-r--r--apps/user_ldap/tests/Group_LDAPTest.php343
-rw-r--r--apps/user_ldap/tests/HelperTest.php23
-rw-r--r--apps/user_ldap/tests/Integration/AbstractIntegrationTest.php10
-rw-r--r--apps/user_ldap/tests/Integration/Bootstrap.php16
-rw-r--r--apps/user_ldap/tests/Integration/ExceptionOnLostConnection.php1
-rw-r--r--apps/user_ldap/tests/Integration/Lib/IntegrationTestAttributeDetection.php5
-rw-r--r--apps/user_ldap/tests/Integration/Lib/IntegrationTestFetchUsersByLoginName.php3
-rw-r--r--apps/user_ldap/tests/Integration/Lib/IntegrationTestPaging.php3
-rw-r--r--apps/user_ldap/tests/Integration/Lib/IntegrationTestUserHome.php5
-rw-r--r--apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserAvatar.php4
-rw-r--r--apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserCleanUp.php4
-rw-r--r--apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php3
-rw-r--r--apps/user_ldap/tests/Jobs/CleanUpTest.php1
-rw-r--r--apps/user_ldap/tests/LDAPGroupPluginDummy.php59
-rw-r--r--apps/user_ldap/tests/LDAPProviderTest.php421
-rw-r--r--apps/user_ldap/tests/LDAPTest.php2
-rw-r--r--apps/user_ldap/tests/LDAPUserPluginDummy.php63
-rw-r--r--apps/user_ldap/tests/Mapping/AbstractMappingTest.php1
-rw-r--r--apps/user_ldap/tests/Settings/AdminTest.php2
-rw-r--r--apps/user_ldap/tests/Settings/SectionTest.php1
-rw-r--r--apps/user_ldap/tests/User/ManagerTest.php2
-rw-r--r--apps/user_ldap/tests/User/UserTest.php4
-rw-r--r--apps/user_ldap/tests/UserLDAPPluginTest.php311
-rw-r--r--apps/user_ldap/tests/User_LDAPTest.php402
-rw-r--r--apps/user_ldap/tests/User_ProxyTest.php30
-rw-r--r--apps/user_ldap/tests/WizardTest.php2
-rw-r--r--apps/workflowengine/l10n/es_DO.js73
-rw-r--r--apps/workflowengine/l10n/es_DO.json71
-rw-r--r--apps/workflowengine/l10n/es_EC.js73
-rw-r--r--apps/workflowengine/l10n/es_EC.json71
623 files changed, 8059 insertions, 626 deletions
diff --git a/apps/admin_audit/appinfo/app.php b/apps/admin_audit/appinfo/app.php
index fef5b9ef02b..6959c6afa76 100644
--- a/apps/admin_audit/appinfo/app.php
+++ b/apps/admin_audit/appinfo/app.php
@@ -3,7 +3,7 @@
* @copyright Copyright (c) 2016 Bjoern Schiessle <bjoern@schiessle.org>
* @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
*
- * @author Bjoern Schiessle <bjoern@schiessle.org>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
*
* @license GNU AGPL version 3 or any later version
diff --git a/apps/admin_audit/lib/Actions/Action.php b/apps/admin_audit/lib/Actions/Action.php
index d9257b53fd5..9ca85363250 100644
--- a/apps/admin_audit/lib/Actions/Action.php
+++ b/apps/admin_audit/lib/Actions/Action.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
*
* @license GNU AGPL version 3 or any later version
diff --git a/apps/admin_audit/lib/Actions/Auth.php b/apps/admin_audit/lib/Actions/Auth.php
index a6a37409b96..7a2a3b42e15 100644
--- a/apps/admin_audit/lib/Actions/Auth.php
+++ b/apps/admin_audit/lib/Actions/Auth.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
*
* @license GNU AGPL version 3 or any later version
diff --git a/apps/admin_audit/lib/Actions/Files.php b/apps/admin_audit/lib/Actions/Files.php
index 2f8626497cb..e2d60c448db 100644
--- a/apps/admin_audit/lib/Actions/Files.php
+++ b/apps/admin_audit/lib/Actions/Files.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
*
* @license GNU AGPL version 3 or any later version
diff --git a/apps/admin_audit/lib/Actions/GroupManagement.php b/apps/admin_audit/lib/Actions/GroupManagement.php
index 07d65ec0687..6872ed2894c 100644
--- a/apps/admin_audit/lib/Actions/GroupManagement.php
+++ b/apps/admin_audit/lib/Actions/GroupManagement.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016 Bjoern Schiessle <bjoern@schiessle.org>
*
* @author Bjoern Schiessle <bjoern@schiessle.org>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Roger Szabo <roger.szabo@web.de>
*
diff --git a/apps/admin_audit/lib/Actions/Sharing.php b/apps/admin_audit/lib/Actions/Sharing.php
index 48e8121f8b0..689ec44f6c4 100644
--- a/apps/admin_audit/lib/Actions/Sharing.php
+++ b/apps/admin_audit/lib/Actions/Sharing.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
*
* @license GNU AGPL version 3 or any later version
diff --git a/apps/admin_audit/lib/Actions/Trashbin.php b/apps/admin_audit/lib/Actions/Trashbin.php
index 27830345b6c..c2b88589ab8 100644
--- a/apps/admin_audit/lib/Actions/Trashbin.php
+++ b/apps/admin_audit/lib/Actions/Trashbin.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016 Bjoern Schiessle <bjoern@schiessle.org>
*
* @author Bjoern Schiessle <bjoern@schiessle.org>
+ * @author Joas Schilling <coding@schilljs.com>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/admin_audit/lib/Actions/UserManagement.php b/apps/admin_audit/lib/Actions/UserManagement.php
index 6cb70fad50c..9d0b237e303 100644
--- a/apps/admin_audit/lib/Actions/UserManagement.php
+++ b/apps/admin_audit/lib/Actions/UserManagement.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
* @author Bjoern Schiessle <bjoern@schiessle.org>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
*
* @license GNU AGPL version 3 or any later version
diff --git a/apps/admin_audit/lib/Actions/Versions.php b/apps/admin_audit/lib/Actions/Versions.php
index 9c8a1c81326..5d26dcc3d77 100644
--- a/apps/admin_audit/lib/Actions/Versions.php
+++ b/apps/admin_audit/lib/Actions/Versions.php
@@ -3,6 +3,7 @@
* @copyright Bjoern Schiessle <bjoern@schiessle.org>
*
* @author Bjoern Schiessle <bjoern@schiessle.org>
+ * @author Joas Schilling <coding@schilljs.com>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/admin_audit/lib/AppInfo/Application.php b/apps/admin_audit/lib/AppInfo/Application.php
index 2748efc56ff..d3ae4ad26c1 100644
--- a/apps/admin_audit/lib/AppInfo/Application.php
+++ b/apps/admin_audit/lib/AppInfo/Application.php
@@ -2,6 +2,9 @@
/**
* @copyright Copyright (c) 2017 Joas Schilling <coding@schilljs.com>
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/comments/appinfo/app.php b/apps/comments/appinfo/app.php
index f6e022e8179..e6974111811 100644
--- a/apps/comments/appinfo/app.php
+++ b/apps/comments/appinfo/app.php
@@ -2,7 +2,9 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/comments/appinfo/routes.php b/apps/comments/appinfo/routes.php
index 66b3abe61be..37d3496c4ed 100644
--- a/apps/comments/appinfo/routes.php
+++ b/apps/comments/appinfo/routes.php
@@ -1,9 +1,10 @@
<?php
-
/**
+ * @copyright Copyright (c) 2016, ownCloud, Inc.
+ *
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
- * @copyright Copyright (c) 2016, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/comments/css/autocomplete.scss b/apps/comments/css/autocomplete.scss
index 10e56f15420..41695e08301 100644
--- a/apps/comments/css/autocomplete.scss
+++ b/apps/comments/css/autocomplete.scss
@@ -12,7 +12,7 @@
background: $color-main-background;
color: $color-main-text;
border: 1px solid $color-border;
- border-radius: 3px;
+ border-radius: $border-radius;
box-shadow: 0 0 5px $color-box-shadow;
min-width: 120px;
z-index: 11110 !important;
diff --git a/apps/comments/l10n/es_EC.js b/apps/comments/l10n/es_EC.js
new file mode 100644
index 00000000000..e291a497795
--- /dev/null
+++ b/apps/comments/l10n/es_EC.js
@@ -0,0 +1,34 @@
+OC.L10N.register(
+ "comments",
+ {
+ "Comments" : "Comentarios",
+ "Unknown user" : "Usuario desconocido",
+ "New comment …" : "Comentario nuevo ...",
+ "Delete comment" : "Borrar comentario",
+ "Post" : "Publicar",
+ "Cancel" : "Cancelar",
+ "Edit comment" : "Editar comentario",
+ "[Deleted user]" : "[Usuario borrado]",
+ "No comments yet, start the conversation!" : "¡Aún no hay comentarios, inicia la conversación!",
+ "More comments …" : "Más comentarios ...",
+ "Save" : "Guardar",
+ "Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
+ "Error occurred while retrieving comment with id {id}" : "Se presentó un error al recuperar el comentario con Id {id}",
+ "Error occurred while updating comment with id {id}" : "Se presentó un error al actualizar el comentario con Id {id}",
+ "Error occurred while posting comment" : "Se presentó un error al publicar el comentario",
+ "_%n unread comment_::_%n unread comments_" : ["%n comentarios sin leer","%n comentarios sin leer"],
+ "Comment" : "Comentario",
+ "You commented" : "Comentaste",
+ "%1$s commented" : "%1$s comentó",
+ "{author} commented" : "{author} comentó",
+ "You commented on %1$s" : "Usted comentó en %1$s",
+ "You commented on {file}" : "Hiciste un comentario de {file}",
+ "%1$s commented on %2$s" : "%1$s comentó en %2$s",
+ "{author} commented on {file}" : "{author} comentó en {file}",
+ "<strong>Comments</strong> for files" : "<strong>Comentarios</strong> de los archivos",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "Un usuario (ahora) borrado te mencionó en un commentario en “%s”",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuario (ahora) borrado te mencionó en un commentario en “{file}”",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s te mencionó en un comentario en “%2$s”",
+ "{user} mentioned you in a comment on “{file}”" : "{user} te mencionó en un comentario en “{file}”"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/comments/l10n/es_EC.json b/apps/comments/l10n/es_EC.json
new file mode 100644
index 00000000000..1a9e2231489
--- /dev/null
+++ b/apps/comments/l10n/es_EC.json
@@ -0,0 +1,32 @@
+{ "translations": {
+ "Comments" : "Comentarios",
+ "Unknown user" : "Usuario desconocido",
+ "New comment …" : "Comentario nuevo ...",
+ "Delete comment" : "Borrar comentario",
+ "Post" : "Publicar",
+ "Cancel" : "Cancelar",
+ "Edit comment" : "Editar comentario",
+ "[Deleted user]" : "[Usuario borrado]",
+ "No comments yet, start the conversation!" : "¡Aún no hay comentarios, inicia la conversación!",
+ "More comments …" : "Más comentarios ...",
+ "Save" : "Guardar",
+ "Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
+ "Error occurred while retrieving comment with id {id}" : "Se presentó un error al recuperar el comentario con Id {id}",
+ "Error occurred while updating comment with id {id}" : "Se presentó un error al actualizar el comentario con Id {id}",
+ "Error occurred while posting comment" : "Se presentó un error al publicar el comentario",
+ "_%n unread comment_::_%n unread comments_" : ["%n comentarios sin leer","%n comentarios sin leer"],
+ "Comment" : "Comentario",
+ "You commented" : "Comentaste",
+ "%1$s commented" : "%1$s comentó",
+ "{author} commented" : "{author} comentó",
+ "You commented on %1$s" : "Usted comentó en %1$s",
+ "You commented on {file}" : "Hiciste un comentario de {file}",
+ "%1$s commented on %2$s" : "%1$s comentó en %2$s",
+ "{author} commented on {file}" : "{author} comentó en {file}",
+ "<strong>Comments</strong> for files" : "<strong>Comentarios</strong> de los archivos",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "Un usuario (ahora) borrado te mencionó en un commentario en “%s”",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuario (ahora) borrado te mencionó en un commentario en “{file}”",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s te mencionó en un comentario en “%2$s”",
+ "{user} mentioned you in a comment on “{file}”" : "{user} te mencionó en un comentario en “{file}”"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/comments/lib/Activity/Filter.php b/apps/comments/lib/Activity/Filter.php
index b9417b6b236..606d4652154 100644
--- a/apps/comments/lib/Activity/Filter.php
+++ b/apps/comments/lib/Activity/Filter.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/comments/lib/Activity/Listener.php b/apps/comments/lib/Activity/Listener.php
index 67f04c03b17..76af565cf15 100644
--- a/apps/comments/lib/Activity/Listener.php
+++ b/apps/comments/lib/Activity/Listener.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/comments/lib/Activity/Provider.php b/apps/comments/lib/Activity/Provider.php
index 41ab8ea8b8e..c21b7a9c4fd 100644
--- a/apps/comments/lib/Activity/Provider.php
+++ b/apps/comments/lib/Activity/Provider.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/comments/lib/Activity/Setting.php b/apps/comments/lib/Activity/Setting.php
index 110ec4a31a4..8a6bd982173 100644
--- a/apps/comments/lib/Activity/Setting.php
+++ b/apps/comments/lib/Activity/Setting.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/comments/lib/AppInfo/Application.php b/apps/comments/lib/AppInfo/Application.php
index a863ca506b7..e60f0cbf36b 100644
--- a/apps/comments/lib/AppInfo/Application.php
+++ b/apps/comments/lib/AppInfo/Application.php
@@ -1,22 +1,24 @@
<?php
-
/**
+ *
+ *
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
*
* @license GNU AGPL version 3 or any later version
*
- * 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 program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
- * This library is distributed in the hope that it will be useful,
+ * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
- * 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\Comments\AppInfo;
diff --git a/apps/comments/lib/Controller/Notifications.php b/apps/comments/lib/Controller/Notifications.php
index 9a07e2fbad7..911f19d46e1 100644
--- a/apps/comments/lib/Controller/Notifications.php
+++ b/apps/comments/lib/Controller/Notifications.php
@@ -1,22 +1,24 @@
<?php
-
/**
+ *
+ *
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license GNU AGPL version 3 or any later version
*
- * 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 program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
- * This library is distributed in the hope that it will be useful,
+ * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ * 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/>.
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
diff --git a/apps/comments/lib/EventHandler.php b/apps/comments/lib/EventHandler.php
index 8c20c698371..0fc6de7bf49 100644
--- a/apps/comments/lib/EventHandler.php
+++ b/apps/comments/lib/EventHandler.php
@@ -1,5 +1,4 @@
<?php
-
/**
* @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de>
*
diff --git a/apps/comments/lib/Notification/Listener.php b/apps/comments/lib/Notification/Listener.php
index 365f93ce8dd..896b383f873 100644
--- a/apps/comments/lib/Notification/Listener.php
+++ b/apps/comments/lib/Notification/Listener.php
@@ -1,8 +1,10 @@
<?php
/**
+ * @copyright Copyright (c) 2016, ownCloud, Inc.
+ *
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Joas Schilling <coding@schilljs.com>
*
- * @copyright Copyright (c) 2016, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/comments/lib/Notification/Notifier.php b/apps/comments/lib/Notification/Notifier.php
index 60dd85f74c5..55802c9a08d 100644
--- a/apps/comments/lib/Notification/Notifier.php
+++ b/apps/comments/lib/Notification/Notifier.php
@@ -1,8 +1,11 @@
<?php
/**
+ * @copyright Copyright (c) 2016, ownCloud, Inc.
+ *
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
- * @copyright Copyright (c) 2016, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/comments/tests/Unit/AppInfo/ApplicationTest.php b/apps/comments/tests/Unit/AppInfo/ApplicationTest.php
index 5adfbbcc635..6ff3bc54b0d 100644
--- a/apps/comments/tests/Unit/AppInfo/ApplicationTest.php
+++ b/apps/comments/tests/Unit/AppInfo/ApplicationTest.php
@@ -1,8 +1,10 @@
<?php
/**
+ * @copyright Copyright (c) 2016, ownCloud, Inc.
+ *
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Joas Schilling <coding@schilljs.com>
*
- * @copyright Copyright (c) 2016, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/comments/tests/Unit/Controller/NotificationsTest.php b/apps/comments/tests/Unit/Controller/NotificationsTest.php
index 2c34971f4b7..eb29947342b 100644
--- a/apps/comments/tests/Unit/Controller/NotificationsTest.php
+++ b/apps/comments/tests/Unit/Controller/NotificationsTest.php
@@ -1,8 +1,10 @@
<?php
/**
+ * @copyright Copyright (c) 2016, ownCloud, Inc.
+ *
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Morris Jobke <hey@morrisjobke.de>
*
- * @copyright Copyright (c) 2016, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/comments/tests/Unit/Notification/ListenerTest.php b/apps/comments/tests/Unit/Notification/ListenerTest.php
index cbe2b633429..d6f83262f30 100644
--- a/apps/comments/tests/Unit/Notification/ListenerTest.php
+++ b/apps/comments/tests/Unit/Notification/ListenerTest.php
@@ -1,8 +1,11 @@
<?php
/**
+ * @copyright Copyright (c) 2016, ownCloud, Inc.
+ *
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
*
- * @copyright Copyright (c) 2016, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/comments/tests/Unit/Notification/NotifierTest.php b/apps/comments/tests/Unit/Notification/NotifierTest.php
index 0b08849030b..a7ada41d43a 100644
--- a/apps/comments/tests/Unit/Notification/NotifierTest.php
+++ b/apps/comments/tests/Unit/Notification/NotifierTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de>
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Joas Schilling <coding@schilljs.com>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/dav/appinfo/app.php b/apps/dav/appinfo/app.php
index 0d417fd3fed..e312b48d0b8 100644
--- a/apps/dav/appinfo/app.php
+++ b/apps/dav/appinfo/app.php
@@ -4,6 +4,7 @@
*
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/appinfo/v1/caldav.php b/apps/dav/appinfo/v1/caldav.php
index a103f82a420..e96c3f28064 100644
--- a/apps/dav/appinfo/v1/caldav.php
+++ b/apps/dav/appinfo/v1/caldav.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Christoph Wurst <christoph@owncloud.com>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Thomas Müller <thomas.mueller@tmit.eu>
@@ -87,9 +88,8 @@ $server->addPlugin(new \Sabre\CalDAV\ICSExportPlugin());
$server->addPlugin(new \OCA\DAV\CalDAV\Schedule\Plugin());
if ($sendInvitations) {
- $server->addPlugin(new \OCA\DAV\CalDAV\Schedule\IMipPlugin( \OC::$server->getMailer(), \OC::$server->getLogger(), new \OC\AppFramework\Utility\TimeFactory()));
+ $server->addPlugin(\OC::$server->query(\OCA\DAV\CalDAV\Schedule\IMipPlugin::class));
}
-
$server->addPlugin(new ExceptionLoggerPlugin('caldav', \OC::$server->getLogger()));
// And off we go!
diff --git a/apps/dav/appinfo/v1/carddav.php b/apps/dav/appinfo/v1/carddav.php
index 74003f11c9b..8633b4211e1 100644
--- a/apps/dav/appinfo/v1/carddav.php
+++ b/apps/dav/appinfo/v1/carddav.php
@@ -3,9 +3,9 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Christoph Wurst <christoph@owncloud.com>
- * @author Georg Ehrke <georg@owncloud.com>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/appinfo/v1/webdav.php b/apps/dav/appinfo/v1/webdav.php
index a47316ee939..d6dc9aa9b45 100644
--- a/apps/dav/appinfo/v1/webdav.php
+++ b/apps/dav/appinfo/v1/webdav.php
@@ -2,10 +2,14 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Christoph Wurst <christoph@owncloud.com>
+ * @author Ko- <k.stoffelen@cs.ru.nl>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
*
diff --git a/apps/dav/appinfo/v2/remote.php b/apps/dav/appinfo/v2/remote.php
index c1b29a4a177..d692d973511 100644
--- a/apps/dav/appinfo/v2/remote.php
+++ b/apps/dav/appinfo/v2/remote.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Ko- <k.stoffelen@cs.ru.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/dav/l10n/es_EC.js b/apps/dav/l10n/es_EC.js
new file mode 100644
index 00000000000..433949bf30f
--- /dev/null
+++ b/apps/dav/l10n/es_EC.js
@@ -0,0 +1,52 @@
+OC.L10N.register(
+ "dav",
+ {
+ "Calendar" : "Calendario",
+ "Todos" : "Pendientes",
+ "Personal" : "Personal",
+ "{actor} created calendar {calendar}" : "{actor} creó el calendario {calendar}",
+ "You created calendar {calendar}" : "Creaste el calendario {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor} borró el calendario {calendar}",
+ "You deleted calendar {calendar}" : "Borraste el calendario {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} actualizó el calendario {calendar}",
+ "You updated calendar {calendar}" : "Actualizaste el calendario {calendar}",
+ "{actor} shared calendar {calendar} with you" : "{actor} ha compartido el calendario {calendar} contigo",
+ "You shared calendar {calendar} with {user}" : "Compartiste el calendario {calendar} con {user}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} compartió el calendario {calendar} con {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} ha dejado de compartir el calendario {calendar} contigo",
+ "You unshared calendar {calendar} from {user}" : "Has dejado de compartir el calendario {calendar} con {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} dejó de compartir el calendario {calendar} con {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} dejó de compartir {el calendario calendar} con él mismo",
+ "You shared calendar {calendar} with group {group}" : "Compartiste el calendario {calendar} con el grupo {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} compartió el calendario {calendar} con el grupo {group}",
+ "You unshared calendar {calendar} from group {group}" : "Dejaste de compartir el calendario {calendar} con el grupo {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} dejó de compartir el calendrio {calendar} con el grupo {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} creó el evento {event} en el calendario {calendar}",
+ "You created event {event} in calendar {calendar}" : "Creaste el evento {event} en el calendario {calendar}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} borró el eventó {event} del calendario {calendar}",
+ "You deleted event {event} from calendar {calendar}" : "Borraste el evento {event} del calendario {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} actualizó el evento {event} en el calendario {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Actualizaste el evento {event} en el calendario {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} creó el pendiente {todo} en la lista {calendar}",
+ "You created todo {todo} in list {calendar}" : "Creaste el pendiente {todo} en la lista {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} borró el pendiente {todo} de la lista {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "Borraste el pendiente {todo} de la lista {calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} actualizó el pendiente {todo} de la lista {calendar}",
+ "You updated todo {todo} in list {calendar}" : "Actualizaste el pendiente {todo} de la lista {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} resolvió el pendiente {todo} de la lista {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Resolviste el pendiente {todo} de la lista {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} reabrió el pendiente {todo} de la lista{calendar}",
+ "You reopened todo {todo} in list {calendar}" : "Reabriste el pendiente {todo} de la lista {calendar}",
+ "A <strong>calendar</strong> was modified" : "Un <strong>calendario</strong> fue modificado",
+ "A calendar <strong>event</strong> was modified" : "Un <strong>evento</strong> de un calendario fue modificado",
+ "A calendar <strong>todo</strong> was modified" : "Un <strong>pendiente</strong> de un calendario fue modificado",
+ "Contact birthdays" : "Cumpleaños del contacto",
+ "Contacts" : "Contactos",
+ "Technical details" : "Detalles técnicos",
+ "Remote Address: %s" : "Dirección remota: %s",
+ "Request ID: %s" : "ID de solicitud: %s",
+ "CalDAV server" : "Servidor CalDAV",
+ "Send invitations to attendees" : "Enviar invitaciones a los asistentes",
+ "Please make sure to properly set up the email settings above." : "Por favor asegurarte de establecer correctamente las configuraciones de correo anteriores. "
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/dav/l10n/es_EC.json b/apps/dav/l10n/es_EC.json
new file mode 100644
index 00000000000..ea72915ea47
--- /dev/null
+++ b/apps/dav/l10n/es_EC.json
@@ -0,0 +1,50 @@
+{ "translations": {
+ "Calendar" : "Calendario",
+ "Todos" : "Pendientes",
+ "Personal" : "Personal",
+ "{actor} created calendar {calendar}" : "{actor} creó el calendario {calendar}",
+ "You created calendar {calendar}" : "Creaste el calendario {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor} borró el calendario {calendar}",
+ "You deleted calendar {calendar}" : "Borraste el calendario {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} actualizó el calendario {calendar}",
+ "You updated calendar {calendar}" : "Actualizaste el calendario {calendar}",
+ "{actor} shared calendar {calendar} with you" : "{actor} ha compartido el calendario {calendar} contigo",
+ "You shared calendar {calendar} with {user}" : "Compartiste el calendario {calendar} con {user}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} compartió el calendario {calendar} con {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} ha dejado de compartir el calendario {calendar} contigo",
+ "You unshared calendar {calendar} from {user}" : "Has dejado de compartir el calendario {calendar} con {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} dejó de compartir el calendario {calendar} con {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} dejó de compartir {el calendario calendar} con él mismo",
+ "You shared calendar {calendar} with group {group}" : "Compartiste el calendario {calendar} con el grupo {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} compartió el calendario {calendar} con el grupo {group}",
+ "You unshared calendar {calendar} from group {group}" : "Dejaste de compartir el calendario {calendar} con el grupo {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} dejó de compartir el calendrio {calendar} con el grupo {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} creó el evento {event} en el calendario {calendar}",
+ "You created event {event} in calendar {calendar}" : "Creaste el evento {event} en el calendario {calendar}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} borró el eventó {event} del calendario {calendar}",
+ "You deleted event {event} from calendar {calendar}" : "Borraste el evento {event} del calendario {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} actualizó el evento {event} en el calendario {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Actualizaste el evento {event} en el calendario {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} creó el pendiente {todo} en la lista {calendar}",
+ "You created todo {todo} in list {calendar}" : "Creaste el pendiente {todo} en la lista {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} borró el pendiente {todo} de la lista {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "Borraste el pendiente {todo} de la lista {calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} actualizó el pendiente {todo} de la lista {calendar}",
+ "You updated todo {todo} in list {calendar}" : "Actualizaste el pendiente {todo} de la lista {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} resolvió el pendiente {todo} de la lista {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Resolviste el pendiente {todo} de la lista {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} reabrió el pendiente {todo} de la lista{calendar}",
+ "You reopened todo {todo} in list {calendar}" : "Reabriste el pendiente {todo} de la lista {calendar}",
+ "A <strong>calendar</strong> was modified" : "Un <strong>calendario</strong> fue modificado",
+ "A calendar <strong>event</strong> was modified" : "Un <strong>evento</strong> de un calendario fue modificado",
+ "A calendar <strong>todo</strong> was modified" : "Un <strong>pendiente</strong> de un calendario fue modificado",
+ "Contact birthdays" : "Cumpleaños del contacto",
+ "Contacts" : "Contactos",
+ "Technical details" : "Detalles técnicos",
+ "Remote Address: %s" : "Dirección remota: %s",
+ "Request ID: %s" : "ID de solicitud: %s",
+ "CalDAV server" : "Servidor CalDAV",
+ "Send invitations to attendees" : "Enviar invitaciones a los asistentes",
+ "Please make sure to properly set up the email settings above." : "Por favor asegurarte de establecer correctamente las configuraciones de correo anteriores. "
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/dav/l10n/nl.js b/apps/dav/l10n/nl.js
index 094e621c926..26908ebb3fc 100644
--- a/apps/dav/l10n/nl.js
+++ b/apps/dav/l10n/nl.js
@@ -46,6 +46,7 @@ OC.L10N.register(
"Remote Address: %s" : "Extern adres: %s",
"Request ID: %s" : "Aanvraag-ID: %s",
"CalDAV server" : "CalDAV server",
- "Send invitations to attendees" : "Verzend uitnodigingen naar deelnemers"
+ "Send invitations to attendees" : "Verzend uitnodigingen naar deelnemers",
+ "Please make sure to properly set up the email settings above." : "Zorg ervoor dat je de bovenstaande e-mailinstellingen correct instelt."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/dav/l10n/nl.json b/apps/dav/l10n/nl.json
index f38a938cd2d..7b55c63d626 100644
--- a/apps/dav/l10n/nl.json
+++ b/apps/dav/l10n/nl.json
@@ -44,6 +44,7 @@
"Remote Address: %s" : "Extern adres: %s",
"Request ID: %s" : "Aanvraag-ID: %s",
"CalDAV server" : "CalDAV server",
- "Send invitations to attendees" : "Verzend uitnodigingen naar deelnemers"
+ "Send invitations to attendees" : "Verzend uitnodigingen naar deelnemers",
+ "Please make sure to properly set up the email settings above." : "Zorg ervoor dat je de bovenstaande e-mailinstellingen correct instelt."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/dav/lib/AppInfo/Application.php b/apps/dav/lib/AppInfo/Application.php
index 5d89324d4a9..ae08e50d607 100644
--- a/apps/dav/lib/AppInfo/Application.php
+++ b/apps/dav/lib/AppInfo/Application.php
@@ -2,9 +2,10 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
- * @author Björn Schießle <bjoern@schiessle.org>
- * @author Georg Ehrke <georg@owncloud.com>
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/lib/AppInfo/PluginManager.php b/apps/dav/lib/AppInfo/PluginManager.php
index 9cdf358c80e..59b03f54fd0 100644
--- a/apps/dav/lib/AppInfo/PluginManager.php
+++ b/apps/dav/lib/AppInfo/PluginManager.php
@@ -1,8 +1,10 @@
<?php
/**
+ * @copyright Copyright (c) 2016, ownCloud GmbH.
+ *
+ * @author Julius Härtl <jus@bitgrid.net>
* @author Vincent Petry <pvince81@owncloud.com>
*
- * @copyright Copyright (c) 2016, ownCloud GmbH.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/dav/lib/Avatars/AvatarHome.php b/apps/dav/lib/Avatars/AvatarHome.php
index 17ac37dc8af..ee654f2aaa2 100644
--- a/apps/dav/lib/Avatars/AvatarHome.php
+++ b/apps/dav/lib/Avatars/AvatarHome.php
@@ -1,8 +1,11 @@
<?php
/**
+ * @copyright Copyright (c) 2016, ownCloud GmbH
+ *
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
- * @copyright Copyright (c) 2016, ownCloud GmbH
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/dav/lib/Avatars/AvatarNode.php b/apps/dav/lib/Avatars/AvatarNode.php
index 4030f482510..c40ed1b52db 100644
--- a/apps/dav/lib/Avatars/AvatarNode.php
+++ b/apps/dav/lib/Avatars/AvatarNode.php
@@ -1,8 +1,10 @@
<?php
/**
+ * @copyright Copyright (c) 2016, ownCloud GmbH
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
- * @copyright Copyright (c) 2016, ownCloud GmbH
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/dav/lib/Avatars/RootCollection.php b/apps/dav/lib/Avatars/RootCollection.php
index d7c7ff4e9fb..4fc12b5d3ed 100644
--- a/apps/dav/lib/Avatars/RootCollection.php
+++ b/apps/dav/lib/Avatars/RootCollection.php
@@ -1,5 +1,27 @@
<?php
-
+/**
+ *
+ *
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
namespace OCA\DAV\Avatars;
use Sabre\DAVACL\AbstractPrincipalCollection;
diff --git a/apps/dav/lib/CalDAV/Activity/Backend.php b/apps/dav/lib/CalDAV/Activity/Backend.php
index c1a68c1682c..f1f1b43d53f 100644
--- a/apps/dav/lib/CalDAV/Activity/Backend.php
+++ b/apps/dav/lib/CalDAV/Activity/Backend.php
@@ -2,6 +2,9 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/lib/CalDAV/Activity/Filter/Calendar.php b/apps/dav/lib/CalDAV/Activity/Filter/Calendar.php
index a20b8ad544d..7456074915b 100644
--- a/apps/dav/lib/CalDAV/Activity/Filter/Calendar.php
+++ b/apps/dav/lib/CalDAV/Activity/Filter/Calendar.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/lib/CalDAV/Activity/Filter/Todo.php b/apps/dav/lib/CalDAV/Activity/Filter/Todo.php
index 42ee0740851..5bc08c8f2dd 100644
--- a/apps/dav/lib/CalDAV/Activity/Filter/Todo.php
+++ b/apps/dav/lib/CalDAV/Activity/Filter/Todo.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/lib/CalDAV/Activity/Provider/Base.php b/apps/dav/lib/CalDAV/Activity/Provider/Base.php
index 983d05310ac..b6d8a5be736 100644
--- a/apps/dav/lib/CalDAV/Activity/Provider/Base.php
+++ b/apps/dav/lib/CalDAV/Activity/Provider/Base.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/lib/CalDAV/Activity/Provider/Calendar.php b/apps/dav/lib/CalDAV/Activity/Provider/Calendar.php
index fb4a0ff45a8..1d524ce354c 100644
--- a/apps/dav/lib/CalDAV/Activity/Provider/Calendar.php
+++ b/apps/dav/lib/CalDAV/Activity/Provider/Calendar.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/lib/CalDAV/Activity/Provider/Event.php b/apps/dav/lib/CalDAV/Activity/Provider/Event.php
index 7b515d78b14..eabd2e517c0 100644
--- a/apps/dav/lib/CalDAV/Activity/Provider/Event.php
+++ b/apps/dav/lib/CalDAV/Activity/Provider/Event.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/lib/CalDAV/Activity/Provider/Todo.php b/apps/dav/lib/CalDAV/Activity/Provider/Todo.php
index 20d7afef028..7ee91184794 100644
--- a/apps/dav/lib/CalDAV/Activity/Provider/Todo.php
+++ b/apps/dav/lib/CalDAV/Activity/Provider/Todo.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/lib/CalDAV/Activity/Setting/Calendar.php b/apps/dav/lib/CalDAV/Activity/Setting/Calendar.php
index 608ee266bb9..24d2cef913e 100644
--- a/apps/dav/lib/CalDAV/Activity/Setting/Calendar.php
+++ b/apps/dav/lib/CalDAV/Activity/Setting/Calendar.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/lib/CalDAV/Activity/Setting/Event.php b/apps/dav/lib/CalDAV/Activity/Setting/Event.php
index 887cd22afad..14b22ad220e 100644
--- a/apps/dav/lib/CalDAV/Activity/Setting/Event.php
+++ b/apps/dav/lib/CalDAV/Activity/Setting/Event.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/lib/CalDAV/Activity/Setting/Todo.php b/apps/dav/lib/CalDAV/Activity/Setting/Todo.php
index 234774bfea4..272843198a9 100644
--- a/apps/dav/lib/CalDAV/Activity/Setting/Todo.php
+++ b/apps/dav/lib/CalDAV/Activity/Setting/Todo.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/lib/CalDAV/BirthdayService.php b/apps/dav/lib/CalDAV/BirthdayService.php
index e11f922a636..aa902bacc53 100644
--- a/apps/dav/lib/CalDAV/BirthdayService.php
+++ b/apps/dav/lib/CalDAV/BirthdayService.php
@@ -4,9 +4,11 @@
* @copyright Copyright (c) 2016, Georg Ehrke
*
* @author Achim Königs <garfonso@tratschtante.de>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
- * @author Georg Ehrke <georg@nextcloud.com>
*
* @license AGPL-3.0
*
diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php
index 2c34f6d6d31..8d22a8bb346 100644
--- a/apps/dav/lib/CalDAV/CalDavBackend.php
+++ b/apps/dav/lib/CalDAV/CalDavBackend.php
@@ -3,11 +3,15 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
* @copyright Copyright (c) 2017 Georg Ehrke
*
+ * @author Georg Ehrke <oc.list@georgehrke.com>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author nhirokinet <nhirokinet@nhiroki.net>
+ * @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Stefan Weil <sw@weilnetz.de>
* @author Thomas Citharel <tcit@tcit.fr>
* @author Thomas Müller <thomas.mueller@tmit.eu>
- * @author Georg Ehrke <oc.list@georgehrke.com>
*
* @license AGPL-3.0
*
diff --git a/apps/dav/lib/CalDAV/Calendar.php b/apps/dav/lib/CalDAV/Calendar.php
index 75e78daf505..ac3bcec6173 100644
--- a/apps/dav/lib/CalDAV/Calendar.php
+++ b/apps/dav/lib/CalDAV/Calendar.php
@@ -2,8 +2,11 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Georg Ehrke <oc.list@georgehrke.com>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Thomas Citharel <tcit@tcit.fr>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/lib/CalDAV/CalendarHome.php b/apps/dav/lib/CalDAV/CalendarHome.php
index 2aa2c9caa36..3429c24705d 100644
--- a/apps/dav/lib/CalDAV/CalendarHome.php
+++ b/apps/dav/lib/CalDAV/CalendarHome.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Georg Ehrke <oc.list@georgehrke.com>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
diff --git a/apps/dav/lib/CalDAV/CalendarObject.php b/apps/dav/lib/CalDAV/CalendarObject.php
index c268b7410cd..949886bf32a 100644
--- a/apps/dav/lib/CalDAV/CalendarObject.php
+++ b/apps/dav/lib/CalDAV/CalendarObject.php
@@ -3,8 +3,8 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
* @copyright Copyright (c) 2017, Georg Ehrke
*
- * @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Georg Ehrke <oc.list@georgehrke.com>
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
*
diff --git a/apps/dav/lib/CalDAV/Plugin.php b/apps/dav/lib/CalDAV/Plugin.php
index 647dbb5c587..167ea4ffd69 100644
--- a/apps/dav/lib/CalDAV/Plugin.php
+++ b/apps/dav/lib/CalDAV/Plugin.php
@@ -1,8 +1,10 @@
<?php
/**
+ * @copyright Copyright (c) 2016, ownCloud GmbH.
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
- * @copyright Copyright (c) 2016, ownCloud GmbH.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/dav/lib/CalDAV/PublicCalendar.php b/apps/dav/lib/CalDAV/PublicCalendar.php
index 63cbdbfa118..f65ac9797b8 100644
--- a/apps/dav/lib/CalDAV/PublicCalendar.php
+++ b/apps/dav/lib/CalDAV/PublicCalendar.php
@@ -4,19 +4,20 @@
*
* @author Georg Ehrke <oc.list@georgehrke.com>
*
- * @license AGPL-3.0
+ * @license GNU AGPL version 3 or any later version
*
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\DAV\CalDAV;
diff --git a/apps/dav/lib/CalDAV/PublicCalendarObject.php b/apps/dav/lib/CalDAV/PublicCalendarObject.php
index a4e33ca5ce1..aaeea64b237 100644
--- a/apps/dav/lib/CalDAV/PublicCalendarObject.php
+++ b/apps/dav/lib/CalDAV/PublicCalendarObject.php
@@ -4,19 +4,20 @@
*
* @author Georg Ehrke <oc.list@georgehrke.com>
*
- * @license AGPL-3.0
+ * @license GNU AGPL version 3 or any later version
*
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\DAV\CalDAV;
diff --git a/apps/dav/lib/CalDAV/PublicCalendarRoot.php b/apps/dav/lib/CalDAV/PublicCalendarRoot.php
index 20654549884..55f969e2167 100644
--- a/apps/dav/lib/CalDAV/PublicCalendarRoot.php
+++ b/apps/dav/lib/CalDAV/PublicCalendarRoot.php
@@ -1,8 +1,12 @@
<?php
/**
+ * @copyright Copyright (c) 2016, ownCloud, Inc.
+ *
+ * @author Georg Ehrke <oc.list@georgehrke.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Thomas Citharel <tcit@tcit.fr>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
- * @copyright Copyright (c) 2016, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/dav/lib/CalDAV/Publishing/PublishPlugin.php b/apps/dav/lib/CalDAV/Publishing/PublishPlugin.php
index 199bc67e615..53059818039 100644
--- a/apps/dav/lib/CalDAV/Publishing/PublishPlugin.php
+++ b/apps/dav/lib/CalDAV/Publishing/PublishPlugin.php
@@ -1,21 +1,24 @@
<?php
/**
+ * @copyright Copyright (c) 2016 Thomas Citharel <tcit@tcit.fr>
+ *
* @author Thomas Citharel <tcit@tcit.fr>
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
*
- * @copyright Copyright (c) 2016 Thomas Citharel <tcit@tcit.fr>
* @license GNU AGPL version 3 or any later version
*
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\DAV\CalDAV\Publishing;
diff --git a/apps/dav/lib/CalDAV/Publishing/Xml/Publisher.php b/apps/dav/lib/CalDAV/Publishing/Xml/Publisher.php
index 5adbe71c433..6d5e05e0cc3 100644
--- a/apps/dav/lib/CalDAV/Publishing/Xml/Publisher.php
+++ b/apps/dav/lib/CalDAV/Publishing/Xml/Publisher.php
@@ -1,21 +1,23 @@
<?php
/**
+ * @copyright Copyright (c) 2016 Thomas Citharel <tcit@tcit.fr>
+ *
* @author Thomas Citharel <tcit@tcit.fr>
*
- * @copyright Copyright (c) 2016 Thomas Citharel <tcit@tcit.fr>
* @license GNU AGPL version 3 or any later version
*
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\DAV\CalDAV\Publishing\Xml;
diff --git a/apps/dav/lib/CalDAV/Schedule/IMipPlugin.php b/apps/dav/lib/CalDAV/Schedule/IMipPlugin.php
index 8e1d7e2563d..edb52c3ad89 100644
--- a/apps/dav/lib/CalDAV/Schedule/IMipPlugin.php
+++ b/apps/dav/lib/CalDAV/Schedule/IMipPlugin.php
@@ -3,8 +3,10 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
* @copyright Copyright (c) 2017, Georg Ehrke
*
- * @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Georg Ehrke <oc.list@georgehrke.com>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Leon Klingele <leon@struktur.de>
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
*
@@ -24,14 +26,22 @@
namespace OCA\DAV\CalDAV\Schedule;
use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\IConfig;
+use OCP\IL10N;
use OCP\ILogger;
+use OCP\IURLGenerator;
+use OCP\L10N\IFactory as L10NFactory;
+use OCP\Mail\IEMailTemplate;
use OCP\Mail\IMailer;
+use Sabre\CalDAV\Schedule\IMipPlugin as SabreIMipPlugin;
+use Sabre\DAV\Xml\Element\Prop;
use Sabre\VObject\Component\VCalendar;
+use Sabre\VObject\Component\VEvent;
use Sabre\VObject\DateTimeParser;
-use Sabre\VObject\ITip;
-use Sabre\CalDAV\Schedule\IMipPlugin as SabreIMipPlugin;
+use Sabre\VObject\ITip\Message;
+use Sabre\VObject\Parameter;
+use Sabre\VObject\Property;
use Sabre\VObject\Recur\EventIterator;
-
/**
* iMIP handler.
*
@@ -48,6 +58,12 @@ use Sabre\VObject\Recur\EventIterator;
*/
class IMipPlugin extends SabreIMipPlugin {
+ /** @var string */
+ private $userId;
+
+ /** @var IConfig */
+ private $config;
+
/** @var IMailer */
private $mailer;
@@ -57,29 +73,45 @@ class IMipPlugin extends SabreIMipPlugin {
/** @var ITimeFactory */
private $timeFactory;
+ /** @var L10NFactory */
+ private $l10nFactory;
+
+ /** @var IURLGenerator */
+ private $urlGenerator;
+
const MAX_DATE = '2038-01-01';
+ const METHOD_REQUEST = 'request';
+ const METHOD_REPLY = 'reply';
+ const METHOD_CANCEL = 'cancel';
+
/**
- * Creates the email handler.
- *
+ * @param IConfig $config
* @param IMailer $mailer
* @param ILogger $logger
* @param ITimeFactory $timeFactory
+ * @param L10NFactory $l10nFactory
+ * @param IUrlGenerator $urlGenerator
+ * @param string $userId
*/
- function __construct(IMailer $mailer, ILogger $logger, ITimeFactory $timeFactory) {
+ public function __construct(IConfig $config, IMailer $mailer, ILogger $logger, ITimeFactory $timeFactory, L10NFactory $l10nFactory, IURLGenerator $urlGenerator, $userId) {
parent::__construct('');
+ $this->userId = $userId;
+ $this->config = $config;
$this->mailer = $mailer;
$this->logger = $logger;
$this->timeFactory = $timeFactory;
+ $this->l10nFactory = $l10nFactory;
+ $this->urlGenerator = $urlGenerator;
}
/**
* Event handler for the 'schedule' event.
*
- * @param ITip\Message $iTipMessage
+ * @param Message $iTipMessage
* @return void
*/
- function schedule(ITip\Message $iTipMessage) {
+ public function schedule(Message $iTipMessage) {
// Not sending any emails if the system considers the update
// insignificant.
@@ -105,40 +137,100 @@ class IMipPlugin extends SabreIMipPlugin {
return;
}
+ // Strip off mailto:
$sender = substr($iTipMessage->sender, 7);
$recipient = substr($iTipMessage->recipient, 7);
- $senderName = ($iTipMessage->senderName) ? $iTipMessage->senderName : null;
- $recipientName = ($iTipMessage->recipientName) ? $iTipMessage->recipientName : null;
+ $senderName = $iTipMessage->senderName ?: null;
+ $recipientName = $iTipMessage->recipientName ?: null;
- $subject = 'SabreDAV iTIP message';
- switch (strtoupper($iTipMessage->method)) {
- case 'REPLY' :
- $subject = 'Re: ' . $summary;
- break;
- case 'REQUEST' :
- $subject = $summary;
+ /** @var VEvent $vevent */
+ $vevent = $iTipMessage->message->VEVENT;
+
+ $attendee = $this->getCurrentAttendee($iTipMessage);
+ $defaultLang = $this->config->getUserValue($this->userId, 'core', 'lang', $this->l10nFactory->findLanguage());
+ $lang = $this->getAttendeeLangOrDefault($defaultLang, $attendee);
+ $l10n = $this->l10nFactory->get('dav', $lang);
+
+ $meetingAttendeeName = $recipientName ?: $recipient;
+ $meetingInviteeName = $senderName ?: $sender;
+
+ $meetingTitle = $vevent->SUMMARY;
+ $meetingDescription = $vevent->DESCRIPTION;
+
+ $start = $vevent->DTSTART;
+ if (isset($vevent->DTEND)) {
+ $end = $vevent->DTEND;
+ } elseif (isset($vevent->DURATION)) {
+ $isFloating = $vevent->DTSTART->isFloating();
+ $end = clone $vevent->DTSTART;
+ $endDateTime = $end->getDateTime();
+ $endDateTime = $endDateTime->add(DateTimeParser::parse($vevent->DURATION->getValue()));
+ $end->setDateTime($endDateTime, $isFloating);
+ } elseif (!$vevent->DTSTART->hasTime()) {
+ $isFloating = $vevent->DTSTART->isFloating();
+ $end = clone $vevent->DTSTART;
+ $endDateTime = $end->getDateTime();
+ $endDateTime = $endDateTime->modify('+1 day');
+ $end->setDateTime($endDateTime, $isFloating);
+ } else {
+ $end = clone $vevent->DTSTART;
+ }
+
+ $meetingWhen = $this->generateWhenString($l10n, $start, $end);
+
+ $meetingUrl = $vevent->URL;
+ $meetingLocation = $vevent->LOCATION;
+
+ $defaultVal = '--';
+
+ $method = self::METHOD_REQUEST;
+ switch (strtolower($iTipMessage->method)) {
+ case self::METHOD_REPLY:
+ $method = self::METHOD_REPLY;
break;
- case 'CANCEL' :
- $subject = 'Cancelled: ' . $summary;
+ case self::METHOD_CANCEL:
+ $method = self::METHOD_CANCEL;
break;
}
- $contentType = 'text/calendar; charset=UTF-8; method=' . $iTipMessage->method;
+ $data = array(
+ 'attendee_name' => (string)$meetingAttendeeName ?: $defaultVal,
+ 'invitee_name' => (string)$meetingInviteeName ?: $defaultVal,
+ 'meeting_title' => (string)$meetingTitle ?: $defaultVal,
+ 'meeting_description' => (string)$meetingDescription ?: $defaultVal,
+ 'meeting_url' => (string)$meetingUrl ?: $defaultVal,
+ );
+
+ $message = $this->mailer->createMessage()
+ ->setReplyTo([$sender => $senderName])
+ ->setTo([$recipient => $recipientName]);
- $message = $this->mailer->createMessage();
+ $template = $this->mailer->createEMailTemplate('dav.calendarInvite.' . $method, $data);
+ $template->addHeader();
+
+ $this->addSubjectAndHeading($template, $l10n, $method, $summary,
+ $meetingAttendeeName, $meetingInviteeName);
+ $this->addBulletList($template, $l10n, $meetingWhen, $meetingLocation,
+ $meetingDescription, $meetingUrl);
+
+ $template->addFooter();
+ $message->useTemplate($template);
+
+ $attachment = $this->mailer->createAttachment(
+ $iTipMessage->message->serialize(),
+ 'event.ics',// TODO(leon): Make file name unique, e.g. add event id
+ 'text/calendar; method=' . $iTipMessage->method
+ );
+ $message->attach($attachment);
- $message->setReplyTo([$sender => $senderName])
- ->setTo([$recipient => $recipientName])
- ->setSubject($subject)
- ->setBody($iTipMessage->message->serialize(), $contentType);
try {
$failed = $this->mailer->send($message);
+ $iTipMessage->scheduleStatus = '1.1; Scheduling message is sent via iMip';
if ($failed) {
$this->logger->error('Unable to deliver message to {failed}', ['app' => 'dav', 'failed' => implode(', ', $failed)]);
$iTipMessage->scheduleStatus = '5.0; EMail delivery failed';
}
- $iTipMessage->scheduleStatus = '1.1; Scheduling message is sent via iMip';
} catch(\Exception $ex) {
$this->logger->logException($ex, ['app' => 'dav']);
$iTipMessage->scheduleStatus = '5.0; EMail delivery failed';
@@ -151,6 +243,7 @@ class IMipPlugin extends SabreIMipPlugin {
* @return bool
*/
private function isEventInThePast(VCalendar $vObject) {
+ /** @var VEvent $component */
$component = $vObject->VEVENT;
$firstOccurrence = $component->DTSTART->getDateTime()->getTimeStamp();
@@ -159,15 +252,17 @@ class IMipPlugin extends SabreIMipPlugin {
if (isset($component->DTEND)) {
$lastOccurrence = $component->DTEND->getDateTime()->getTimeStamp();
} elseif (isset($component->DURATION)) {
+ /** @var \DateTime $endDate */
$endDate = clone $component->DTSTART->getDateTime();
// $component->DTEND->getDateTime() returns DateTimeImmutable
$endDate = $endDate->add(DateTimeParser::parse($component->DURATION->getValue()));
- $lastOccurrence = $endDate->getTimeStamp();
+ $lastOccurrence = $endDate->getTimestamp();
} elseif (!$component->DTSTART->hasTime()) {
+ /** @var \DateTime $endDate */
$endDate = clone $component->DTSTART->getDateTime();
// $component->DTSTART->getDateTime() returns DateTimeImmutable
$endDate = $endDate->modify('+1 day');
- $lastOccurrence = $endDate->getTimeStamp();
+ $lastOccurrence = $endDate->getTimestamp();
} else {
$lastOccurrence = $firstOccurrence;
}
@@ -190,4 +285,176 @@ class IMipPlugin extends SabreIMipPlugin {
$currentTime = $this->timeFactory->getTime();
return $lastOccurrence < $currentTime;
}
+
+
+ /**
+ * @param Message $iTipMessage
+ * @return null|Property
+ */
+ private function getCurrentAttendee(Message $iTipMessage) {
+ /** @var VEvent $vevent */
+ $vevent = $iTipMessage->message->VEVENT;
+ $attendees = $vevent->select('ATTENDEE');
+ foreach ($attendees as $attendee) {
+ /** @var Property $attendee */
+ if (strcasecmp($attendee->getValue(), $iTipMessage->recipient) === 0) {
+ return $attendee;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * @param string $default
+ * @param Property|null $attendee
+ * @return string
+ */
+ private function getAttendeeLangOrDefault($default, Property $attendee = null) {
+ if ($attendee !== null) {
+ $lang = $attendee->offsetGet('LANGUAGE');
+ if ($lang instanceof Parameter) {
+ return $lang->getValue();
+ }
+ }
+ return $default;
+ }
+
+ /**
+ * @param IL10N $l10n
+ * @param Property $dtstart
+ * @param Property $dtend
+ */
+ private function generateWhenString(IL10N $l10n, Property $dtstart, Property $dtend) {
+ $isAllDay = $dtstart instanceof Property\ICalendar\Date;
+
+ /** @var Property\ICalendar\Date | Property\ICalendar\DateTime $dtstart */
+ /** @var Property\ICalendar\Date | Property\ICalendar\DateTime $dtend */
+ /** @var \DateTimeImmutable $dtstartDt */
+ $dtstartDt = $dtstart->getDateTime();
+ /** @var \DateTimeImmutable $dtendDt */
+ $dtendDt = $dtend->getDateTime();
+
+ $diff = $dtstartDt->diff($dtendDt);
+
+ $dtstartDt = new \DateTime($dtstartDt->format(\DateTime::ATOM));
+ $dtendDt = new \DateTime($dtendDt->format(\DateTime::ATOM));
+
+ if ($isAllDay) {
+ // One day event
+ if ($diff->days === 1) {
+ return $l10n->l('date', $dtstartDt, ['width' => 'medium']);
+ }
+
+ //event that spans over multiple days
+ $localeStart = $l10n->l('date', $dtstartDt, ['width' => 'medium']);
+ $localeEnd = $l10n->l('date', $dtendDt, ['width' => 'medium']);
+
+ return $localeStart . ' - ' . $localeEnd;
+ }
+
+ /** @var Property\ICalendar\DateTime $dtstart */
+ /** @var Property\ICalendar\DateTime $dtend */
+ $isFloating = $dtstart->isFloating();
+ $startTimezone = $endTimezone = null;
+ if (!$isFloating) {
+ $prop = $dtstart->offsetGet('TZID');
+ if ($prop instanceof Parameter) {
+ $startTimezone = $prop->getValue();
+ }
+
+ $prop = $dtend->offsetGet('TZID');
+ if ($prop instanceof Parameter) {
+ $endTimezone = $prop->getValue();
+ }
+ }
+
+ $localeStart = $l10n->l('datetime', $dtstartDt, ['width' => 'medium']);
+
+ // always show full date with timezone if timezones are different
+ if ($startTimezone !== $endTimezone) {
+ $localeEnd = $l10n->l('datetime', $dtendDt, ['width' => 'medium']);
+
+ return $localeStart . ' (' . $startTimezone . ') - ' .
+ $localeEnd . ' (' . $endTimezone . ')';
+ }
+
+ // show only end time if date is the same
+ if ($this->isDayEqual($dtstartDt, $dtendDt)) {
+ $localeEnd = $l10n->l('time', $dtendDt, ['width' => 'medium']);
+ } else {
+ $localeEnd = $l10n->l('datetime', $dtendDt, ['width' => 'medium']);
+ }
+
+ return $localeStart . ' - ' . $localeEnd . ' (' . $startTimezone . ')';
+ }
+
+ /**
+ * @param \DateTime $dtStart
+ * @param \DateTime $dtEnd
+ * @return bool
+ */
+ private function isDayEqual(\DateTime $dtStart, \DateTime $dtEnd) {
+ return $dtStart->format('Y-m-d') === $dtEnd->format('Y-m-d');
+ }
+
+ /**
+ * @param IEMailTemplate $template
+ * @param IL10N $l10n
+ * @param string $method
+ * @param string $summary
+ * @param string $attendeeName
+ * @param string $inviteeName
+ */
+ private function addSubjectAndHeading(IEMailTemplate $template, IL10N $l10n,
+ $method, $summary, $attendeeName, $inviteeName) {
+ if ($method === self::METHOD_CANCEL) {
+ $template->setSubject('Cancelled: ' . $summary);
+ $template->addHeading($l10n->t('Invitation canceled'), $l10n->t('Hello %s,', [$attendeeName]));
+ $template->addBodyText($l10n->t('The meeting »%s« with %s was canceled.', [$summary, $inviteeName]));
+ } else if ($method === self::METHOD_REPLY) {
+ $template->setSubject('Re: ' . $summary);
+ $template->addHeading($l10n->t('Invitation updated'), $l10n->t('Hello %s,', [$attendeeName]));
+ $template->addBodyText($l10n->t('The meeting »%s« with %s was updated.', [$summary, $inviteeName]));
+ } else {
+ $template->setSubject('Invitation: ' . $summary);
+ $template->addHeading($l10n->t('%s invited you to »%s«', [$inviteeName, $summary]), $l10n->t('Hello %s,', [$attendeeName]));
+ }
+
+ }
+
+ /**
+ * @param IEMailTemplate $template
+ * @param IL10N $l10n
+ * @param string $time
+ * @param string $location
+ * @param string $description
+ * @param string $url
+ */
+ private function addBulletList(IEMailTemplate $template, IL10N $l10n, $time, $location, $description, $url) {
+ $template->addBodyListItem($time, $l10n->t('When:'),
+ $this->getAbsoluteImagePath('filetypes/text-calendar.svg'));
+
+ if ($location) {
+ $template->addBodyListItem($location, $l10n->t('Where:'),
+ $this->getAbsoluteImagePath('filetypes/location.svg'));
+ }
+ if ($description) {
+ $template->addBodyListItem((string)$description, $l10n->t('Description:'),
+ $this->getAbsoluteImagePath('filetypes/text.svg'));
+ }
+ if ($url) {
+ $template->addBodyListItem((string)$url, $l10n->t('Link:'),
+ $this->getAbsoluteImagePath('filetypes/link.svg'));
+ }
+ }
+
+ /**
+ * @param string $path
+ * @return string
+ */
+ private function getAbsoluteImagePath($path) {
+ return $this->urlGenerator->getAbsoluteURL(
+ $this->urlGenerator->imagePath('core', $path)
+ );
+ }
}
diff --git a/apps/dav/lib/CalDAV/Search/SearchPlugin.php b/apps/dav/lib/CalDAV/Search/SearchPlugin.php
index 84e095da5f8..37000aa2eb8 100644
--- a/apps/dav/lib/CalDAV/Search/SearchPlugin.php
+++ b/apps/dav/lib/CalDAV/Search/SearchPlugin.php
@@ -1,21 +1,24 @@
<?php
/**
+ * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com>
+ *
* @author Georg Ehrke <oc.list@georgehrke.com>
+ * @author Joas Schilling <coding@schilljs.com>
*
- * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com>
* @license GNU AGPL version 3 or any later version
*
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\DAV\CalDAV\Search;
diff --git a/apps/dav/lib/CalDAV/Search/Xml/Filter/CompFilter.php b/apps/dav/lib/CalDAV/Search/Xml/Filter/CompFilter.php
index a2a3c910f05..5cc8f799f90 100644
--- a/apps/dav/lib/CalDAV/Search/Xml/Filter/CompFilter.php
+++ b/apps/dav/lib/CalDAV/Search/Xml/Filter/CompFilter.php
@@ -1,21 +1,23 @@
<?php
/**
+ * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com>
+ *
* @author Georg Ehrke <oc.list@georgehrke.com>
*
- * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com>
* @license GNU AGPL version 3 or any later version
*
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\DAV\CalDAV\Search\Xml\Filter;
diff --git a/apps/dav/lib/CalDAV/Search/Xml/Filter/LimitFilter.php b/apps/dav/lib/CalDAV/Search/Xml/Filter/LimitFilter.php
index f5de78b539c..5fc38315438 100644
--- a/apps/dav/lib/CalDAV/Search/Xml/Filter/LimitFilter.php
+++ b/apps/dav/lib/CalDAV/Search/Xml/Filter/LimitFilter.php
@@ -1,21 +1,23 @@
<?php
/**
+ * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com>
+ *
* @author Georg Ehrke <oc.list@georgehrke.com>
*
- * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com>
* @license GNU AGPL version 3 or any later version
*
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\DAV\CalDAV\Search\Xml\Filter;
diff --git a/apps/dav/lib/CalDAV/Search/Xml/Filter/OffsetFilter.php b/apps/dav/lib/CalDAV/Search/Xml/Filter/OffsetFilter.php
index 7257e1e72f9..7aac59809a2 100644
--- a/apps/dav/lib/CalDAV/Search/Xml/Filter/OffsetFilter.php
+++ b/apps/dav/lib/CalDAV/Search/Xml/Filter/OffsetFilter.php
@@ -1,21 +1,23 @@
<?php
/**
+ * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com>
+ *
* @author Georg Ehrke <oc.list@georgehrke.com>
*
- * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com>
* @license GNU AGPL version 3 or any later version
*
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\DAV\CalDAV\Search\Xml\Filter;
diff --git a/apps/dav/lib/CalDAV/Search/Xml/Filter/ParamFilter.php b/apps/dav/lib/CalDAV/Search/Xml/Filter/ParamFilter.php
index 1c443763daf..bfcb960d402 100644
--- a/apps/dav/lib/CalDAV/Search/Xml/Filter/ParamFilter.php
+++ b/apps/dav/lib/CalDAV/Search/Xml/Filter/ParamFilter.php
@@ -1,21 +1,23 @@
<?php
/**
+ * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com>
+ *
* @author Georg Ehrke <oc.list@georgehrke.com>
*
- * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com>
* @license GNU AGPL version 3 or any later version
*
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\DAV\CalDAV\Search\Xml\Filter;
diff --git a/apps/dav/lib/CalDAV/Search/Xml/Filter/PropFilter.php b/apps/dav/lib/CalDAV/Search/Xml/Filter/PropFilter.php
index 06b41d91c6e..cfb2211fb59 100644
--- a/apps/dav/lib/CalDAV/Search/Xml/Filter/PropFilter.php
+++ b/apps/dav/lib/CalDAV/Search/Xml/Filter/PropFilter.php
@@ -1,21 +1,23 @@
<?php
/**
+ * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com>
+ *
* @author Georg Ehrke <oc.list@georgehrke.com>
*
- * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com>
* @license GNU AGPL version 3 or any later version
*
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\DAV\CalDAV\Search\Xml\Filter;
diff --git a/apps/dav/lib/CalDAV/Search/Xml/Filter/SearchTermFilter.php b/apps/dav/lib/CalDAV/Search/Xml/Filter/SearchTermFilter.php
index 8779e2b3940..ddd36818223 100644
--- a/apps/dav/lib/CalDAV/Search/Xml/Filter/SearchTermFilter.php
+++ b/apps/dav/lib/CalDAV/Search/Xml/Filter/SearchTermFilter.php
@@ -1,21 +1,23 @@
<?php
/**
+ * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com>
+ *
* @author Georg Ehrke <oc.list@georgehrke.com>
*
- * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com>
* @license GNU AGPL version 3 or any later version
*
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\DAV\CalDAV\Search\Xml\Filter;
diff --git a/apps/dav/lib/CalDAV/Search/Xml/Request/CalendarSearchReport.php b/apps/dav/lib/CalDAV/Search/Xml/Request/CalendarSearchReport.php
index 4d22f310c24..e7c229c7b03 100644
--- a/apps/dav/lib/CalDAV/Search/Xml/Request/CalendarSearchReport.php
+++ b/apps/dav/lib/CalDAV/Search/Xml/Request/CalendarSearchReport.php
@@ -1,21 +1,23 @@
<?php
/**
+ * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com>
+ *
* @author Georg Ehrke <oc.list@georgehrke.com>
*
- * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com>
* @license GNU AGPL version 3 or any later version
*
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\DAV\CalDAV\Search\Xml\Request;
diff --git a/apps/dav/lib/Capabilities.php b/apps/dav/lib/Capabilities.php
index c6f63b37420..a301a393008 100644
--- a/apps/dav/lib/Capabilities.php
+++ b/apps/dav/lib/Capabilities.php
@@ -1,8 +1,9 @@
<?php
/**
+ * @copyright Copyright (c) 2016, ownCloud GmbH
+ *
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
- * @copyright Copyright (c) 2016, ownCloud GmbH
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/dav/lib/CardDAV/AddressBook.php b/apps/dav/lib/CardDAV/AddressBook.php
index eb5bebaa2ee..a034f8b9426 100644
--- a/apps/dav/lib/CardDAV/AddressBook.php
+++ b/apps/dav/lib/CardDAV/AddressBook.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/lib/CardDAV/AddressBookImpl.php b/apps/dav/lib/CardDAV/AddressBookImpl.php
index c650f6c30be..5034b16ed2f 100644
--- a/apps/dav/lib/CardDAV/AddressBookImpl.php
+++ b/apps/dav/lib/CardDAV/AddressBookImpl.php
@@ -3,7 +3,8 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Björn Schießle <bjoern@schiessle.org>
- * @author Georg Ehrke <georg@owncloud.com>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/lib/CardDAV/AddressBookRoot.php b/apps/dav/lib/CardDAV/AddressBookRoot.php
index 88435165a88..c52ee2d74f8 100644
--- a/apps/dav/lib/CardDAV/AddressBookRoot.php
+++ b/apps/dav/lib/CardDAV/AddressBookRoot.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/lib/CardDAV/CardDavBackend.php b/apps/dav/lib/CardDAV/CardDavBackend.php
index 7c73a2cb941..be92f16f772 100644
--- a/apps/dav/lib/CardDAV/CardDavBackend.php
+++ b/apps/dav/lib/CardDAV/CardDavBackend.php
@@ -5,9 +5,14 @@
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
- * @author Georg Ehrke <georg@owncloud.com>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
* @author Joas Schilling <coding@schilljs.com>
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Stefan Weil <sw@weilnetz.de>
+ * @author Thomas Citharel <tcit@tcit.fr>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/lib/CardDAV/ContactsManager.php b/apps/dav/lib/CardDAV/ContactsManager.php
index b2e3544b287..ad02d4ba427 100644
--- a/apps/dav/lib/CardDAV/ContactsManager.php
+++ b/apps/dav/lib/CardDAV/ContactsManager.php
@@ -2,7 +2,8 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
- * @author Georg Ehrke <georg@owncloud.com>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Robin Appelman <robin@icewind.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
diff --git a/apps/dav/lib/CardDAV/Converter.php b/apps/dav/lib/CardDAV/Converter.php
index 9e106a0fe28..c3f27c0299e 100644
--- a/apps/dav/lib/CardDAV/Converter.php
+++ b/apps/dav/lib/CardDAV/Converter.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/lib/CardDAV/ImageExportPlugin.php b/apps/dav/lib/CardDAV/ImageExportPlugin.php
index 747c879ecd4..069239326ba 100644
--- a/apps/dav/lib/CardDAV/ImageExportPlugin.php
+++ b/apps/dav/lib/CardDAV/ImageExportPlugin.php
@@ -2,7 +2,8 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
- * @author Georg Ehrke <georg@owncloud.com>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/dav/lib/CardDAV/PhotoCache.php b/apps/dav/lib/CardDAV/PhotoCache.php
index c9625914263..0029af7bff7 100644
--- a/apps/dav/lib/CardDAV/PhotoCache.php
+++ b/apps/dav/lib/CardDAV/PhotoCache.php
@@ -1,5 +1,26 @@
<?php
-
+/**
+ *
+ *
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
namespace OCA\DAV\CardDAV;
use OCP\Files\IAppData;
diff --git a/apps/dav/lib/CardDAV/Plugin.php b/apps/dav/lib/CardDAV/Plugin.php
index 61b9915b1ad..2dca3585f35 100644
--- a/apps/dav/lib/CardDAV/Plugin.php
+++ b/apps/dav/lib/CardDAV/Plugin.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/lib/CardDAV/SyncService.php b/apps/dav/lib/CardDAV/SyncService.php
index b6f57753431..4a5e45ecb80 100644
--- a/apps/dav/lib/CardDAV/SyncService.php
+++ b/apps/dav/lib/CardDAV/SyncService.php
@@ -2,8 +2,9 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/lib/CardDAV/UserAddressBooks.php b/apps/dav/lib/CardDAV/UserAddressBooks.php
index 4c7626ba42b..6a0394676a1 100644
--- a/apps/dav/lib/CardDAV/UserAddressBooks.php
+++ b/apps/dav/lib/CardDAV/UserAddressBooks.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/lib/Command/CreateCalendar.php b/apps/dav/lib/Command/CreateCalendar.php
index adc86faa190..1ef859e0631 100644
--- a/apps/dav/lib/Command/CreateCalendar.php
+++ b/apps/dav/lib/Command/CreateCalendar.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Thomas Citharel <tcit@tcit.fr>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/lib/Comments/CommentsPlugin.php b/apps/dav/lib/Comments/CommentsPlugin.php
index 9b496ccf6e5..d49dfdb14ef 100644
--- a/apps/dav/lib/Comments/CommentsPlugin.php
+++ b/apps/dav/lib/Comments/CommentsPlugin.php
@@ -4,6 +4,7 @@
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/dav/lib/Connector/LegacyDAVACL.php b/apps/dav/lib/Connector/LegacyDAVACL.php
index 704b967a002..f96d75a2486 100644
--- a/apps/dav/lib/Connector/LegacyDAVACL.php
+++ b/apps/dav/lib/Connector/LegacyDAVACL.php
@@ -4,6 +4,7 @@
*
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/lib/Connector/PublicAuth.php b/apps/dav/lib/Connector/PublicAuth.php
index 5fca8d5c020..8d29704c970 100644
--- a/apps/dav/lib/Connector/PublicAuth.php
+++ b/apps/dav/lib/Connector/PublicAuth.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
diff --git a/apps/dav/lib/Connector/Sabre/Auth.php b/apps/dav/lib/Connector/Sabre/Auth.php
index 9147e79594c..456bb17138a 100644
--- a/apps/dav/lib/Connector/Sabre/Auth.php
+++ b/apps/dav/lib/Connector/Sabre/Auth.php
@@ -11,6 +11,7 @@
* @author Markus Goetz <markus@woboq.com>
* @author Michael Gapczynski <GapczynskiM@gmail.com>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Robin Appelman <robin@icewind.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/dav/lib/Connector/Sabre/BearerAuth.php b/apps/dav/lib/Connector/Sabre/BearerAuth.php
index b7fd9116f21..bf347b5dc8e 100644
--- a/apps/dav/lib/Connector/Sabre/BearerAuth.php
+++ b/apps/dav/lib/Connector/Sabre/BearerAuth.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
*
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/lib/Connector/Sabre/CachingTree.php b/apps/dav/lib/Connector/Sabre/CachingTree.php
index 80c8311fed3..fd3319f9b43 100644
--- a/apps/dav/lib/Connector/Sabre/CachingTree.php
+++ b/apps/dav/lib/Connector/Sabre/CachingTree.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2017 Robin Appelman <robin@icewind.nl>
*
+ * @author Robin Appelman <robin@icewind.nl>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/lib/Connector/Sabre/CommentPropertiesPlugin.php b/apps/dav/lib/Connector/Sabre/CommentPropertiesPlugin.php
index 66d6b335f40..ac625c3a9a4 100644
--- a/apps/dav/lib/Connector/Sabre/CommentPropertiesPlugin.php
+++ b/apps/dav/lib/Connector/Sabre/CommentPropertiesPlugin.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Robin Appelman <robin@icewind.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/dav/lib/Connector/Sabre/DummyGetResponsePlugin.php b/apps/dav/lib/Connector/Sabre/DummyGetResponsePlugin.php
index f8193f38e1f..f28f86e502e 100644
--- a/apps/dav/lib/Connector/Sabre/DummyGetResponsePlugin.php
+++ b/apps/dav/lib/Connector/Sabre/DummyGetResponsePlugin.php
@@ -2,7 +2,9 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Christoph Wickert <cwickert@suse.de>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/lib/Connector/Sabre/ExceptionLoggerPlugin.php b/apps/dav/lib/Connector/Sabre/ExceptionLoggerPlugin.php
index ba7ea13c548..5721f483832 100644
--- a/apps/dav/lib/Connector/Sabre/ExceptionLoggerPlugin.php
+++ b/apps/dav/lib/Connector/Sabre/ExceptionLoggerPlugin.php
@@ -2,9 +2,8 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
- * @author Pierre Jochem <pierrejochem@msn.com>
- * @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
diff --git a/apps/dav/lib/Connector/Sabre/FakeLockerPlugin.php b/apps/dav/lib/Connector/Sabre/FakeLockerPlugin.php
index eb490851fcb..4fa208d8805 100644
--- a/apps/dav/lib/Connector/Sabre/FakeLockerPlugin.php
+++ b/apps/dav/lib/Connector/Sabre/FakeLockerPlugin.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
diff --git a/apps/dav/lib/Connector/Sabre/File.php b/apps/dav/lib/Connector/Sabre/File.php
index 478321d41f2..f172bde5f1f 100644
--- a/apps/dav/lib/Connector/Sabre/File.php
+++ b/apps/dav/lib/Connector/Sabre/File.php
@@ -12,8 +12,11 @@
* @author Owen Winkler <a_github@midnightcircus.com>
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Semih Serhat Karakaya <karakayasemi@itu.edu.tr>
+ * @author Stefan Schneider <stefan.schneider@squareweave.com.au>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
*
* @license AGPL-3.0
*
diff --git a/apps/dav/lib/Connector/Sabre/FilesPlugin.php b/apps/dav/lib/Connector/Sabre/FilesPlugin.php
index 5655f0355ac..daf9d2d2112 100644
--- a/apps/dav/lib/Connector/Sabre/FilesPlugin.php
+++ b/apps/dav/lib/Connector/Sabre/FilesPlugin.php
@@ -2,9 +2,11 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Michael Jobst <mjobst+github@tecratech.de>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
diff --git a/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php b/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php
index 81c082b9105..3e85615638b 100644
--- a/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php
+++ b/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/dav/lib/Connector/Sabre/MaintenancePlugin.php b/apps/dav/lib/Connector/Sabre/MaintenancePlugin.php
index c305fa63f69..21bffcdb299 100644
--- a/apps/dav/lib/Connector/Sabre/MaintenancePlugin.php
+++ b/apps/dav/lib/Connector/Sabre/MaintenancePlugin.php
@@ -5,7 +5,6 @@
* @author Bart Visscher <bartv@thisnet.nl>
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
- * @author Robin Appelman <robin@icewind.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/dav/lib/Connector/Sabre/Node.php b/apps/dav/lib/Connector/Sabre/Node.php
index b6d4090bf8f..b2e4c449095 100644
--- a/apps/dav/lib/Connector/Sabre/Node.php
+++ b/apps/dav/lib/Connector/Sabre/Node.php
@@ -6,6 +6,7 @@
* @author Bart Visscher <bartv@thisnet.nl>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Jakob Sack <mail@jakobsack.de>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Klaas Freitag <freitag@owncloud.com>
* @author Markus Goetz <markus@woboq.com>
diff --git a/apps/dav/lib/Connector/Sabre/ObjectTree.php b/apps/dav/lib/Connector/Sabre/ObjectTree.php
index a44b25c24cb..41bfceeab96 100644
--- a/apps/dav/lib/Connector/Sabre/ObjectTree.php
+++ b/apps/dav/lib/Connector/Sabre/ObjectTree.php
@@ -3,11 +3,11 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Bjoern Schiessle <bjoern@schiessle.org>
- * @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/dav/lib/Connector/Sabre/Principal.php b/apps/dav/lib/Connector/Sabre/Principal.php
index dfcbf1e1ca0..b45807ff82b 100644
--- a/apps/dav/lib/Connector/Sabre/Principal.php
+++ b/apps/dav/lib/Connector/Sabre/Principal.php
@@ -7,6 +7,7 @@
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Thomas Tanghus <thomas@tanghus.net>
* @author Vincent Petry <pvince81@owncloud.com>
diff --git a/apps/dav/lib/Connector/Sabre/QuotaPlugin.php b/apps/dav/lib/Connector/Sabre/QuotaPlugin.php
index a41a4678f30..af45f526831 100644
--- a/apps/dav/lib/Connector/Sabre/QuotaPlugin.php
+++ b/apps/dav/lib/Connector/Sabre/QuotaPlugin.php
@@ -3,8 +3,9 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Felix Moeller <mail@felixmoeller.de>
- * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author scambra <sergio@entrecables.com>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
diff --git a/apps/dav/lib/Connector/Sabre/Server.php b/apps/dav/lib/Connector/Sabre/Server.php
index 686b0ea7604..d6576c0bf42 100644
--- a/apps/dav/lib/Connector/Sabre/Server.php
+++ b/apps/dav/lib/Connector/Sabre/Server.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Robin Appelman <robin@icewind.nl>
* @author scolebrook <scolebrook@mac.com>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
diff --git a/apps/dav/lib/Connector/Sabre/SharesPlugin.php b/apps/dav/lib/Connector/Sabre/SharesPlugin.php
index 9b06ef07810..811a1fbfcbe 100644
--- a/apps/dav/lib/Connector/Sabre/SharesPlugin.php
+++ b/apps/dav/lib/Connector/Sabre/SharesPlugin.php
@@ -2,6 +2,10 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Maxence Lange <maxence@nextcloud.com>
+ * @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/dav/lib/Connector/Sabre/TagsPlugin.php b/apps/dav/lib/Connector/Sabre/TagsPlugin.php
index 490501a0011..07e0f849a57 100644
--- a/apps/dav/lib/Connector/Sabre/TagsPlugin.php
+++ b/apps/dav/lib/Connector/Sabre/TagsPlugin.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Sergio Bertolín <sbertolin@solidgear.es>
+ * @author Thomas Citharel <tcit@tcit.fr>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/dav/lib/DAV/CustomPropertiesBackend.php b/apps/dav/lib/DAV/CustomPropertiesBackend.php
index ee0d0407015..a5ad3e22acc 100644
--- a/apps/dav/lib/DAV/CustomPropertiesBackend.php
+++ b/apps/dav/lib/DAV/CustomPropertiesBackend.php
@@ -3,9 +3,9 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
* @copyright Copyright (c) 2017, Georg Ehrke <oc.list@georgehrke.com>
*
+ * @author Georg Ehrke <oc.list@georgehrke.com>
* @author Robin Appelman <robin@icewind.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
- * @author Georg Ehrke <oc.list@georgehrke.com>
*
* @license AGPL-3.0
*
diff --git a/apps/dav/lib/DAV/GroupPrincipalBackend.php b/apps/dav/lib/DAV/GroupPrincipalBackend.php
index f6295d3b386..1f182445dbd 100644
--- a/apps/dav/lib/DAV/GroupPrincipalBackend.php
+++ b/apps/dav/lib/DAV/GroupPrincipalBackend.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/lib/DAV/PublicAuth.php b/apps/dav/lib/DAV/PublicAuth.php
index ffc588c4a56..636039eeb3c 100644
--- a/apps/dav/lib/DAV/PublicAuth.php
+++ b/apps/dav/lib/DAV/PublicAuth.php
@@ -1,8 +1,9 @@
<?php
/**
+ * @copyright Copyright (c) 2016, ownCloud, Inc.
+ *
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
- * @copyright Copyright (c) 2016, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/dav/lib/DAV/Sharing/Backend.php b/apps/dav/lib/DAV/Sharing/Backend.php
index aa4b137f2b0..141c54899ad 100644
--- a/apps/dav/lib/DAV/Sharing/Backend.php
+++ b/apps/dav/lib/DAV/Sharing/Backend.php
@@ -4,6 +4,7 @@
*
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Thomas Citharel <tcit@tcit.fr>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/lib/DAV/Sharing/Plugin.php b/apps/dav/lib/DAV/Sharing/Plugin.php
index a1f034d54b5..2ac65f94478 100644
--- a/apps/dav/lib/DAV/Sharing/Plugin.php
+++ b/apps/dav/lib/DAV/Sharing/Plugin.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Georg Ehrke <oc.list@georgehrke.com>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/lib/DAV/SystemPrincipalBackend.php b/apps/dav/lib/DAV/SystemPrincipalBackend.php
index 7c5bdcab01d..e3b9302886e 100644
--- a/apps/dav/lib/DAV/SystemPrincipalBackend.php
+++ b/apps/dav/lib/DAV/SystemPrincipalBackend.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/lib/Files/FileSearchBackend.php b/apps/dav/lib/Files/FileSearchBackend.php
index 515e7ed0121..9616d21b887 100644
--- a/apps/dav/lib/Files/FileSearchBackend.php
+++ b/apps/dav/lib/Files/FileSearchBackend.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2017 Robin Appelman <robin@icewind.nl>
*
+ * @author Robin Appelman <robin@icewind.nl>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/lib/Files/FilesHome.php b/apps/dav/lib/Files/FilesHome.php
index 8768d6313b1..8820ef6ffb7 100644
--- a/apps/dav/lib/Files/FilesHome.php
+++ b/apps/dav/lib/Files/FilesHome.php
@@ -2,7 +2,10 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
*
diff --git a/apps/dav/lib/Files/RootCollection.php b/apps/dav/lib/Files/RootCollection.php
index 66e3160eaf8..28f98483c4c 100644
--- a/apps/dav/lib/Files/RootCollection.php
+++ b/apps/dav/lib/Files/RootCollection.php
@@ -2,7 +2,9 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
*
diff --git a/apps/dav/lib/HookManager.php b/apps/dav/lib/HookManager.php
index 624e45dc55f..1e808e58656 100644
--- a/apps/dav/lib/HookManager.php
+++ b/apps/dav/lib/HookManager.php
@@ -2,6 +2,11 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ * @author Robin Appelman <robin@icewind.nl>
+ * @author Thomas Citharel <tcit@tcit.fr>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/lib/Migration/FixBirthdayCalendarComponent.php b/apps/dav/lib/Migration/FixBirthdayCalendarComponent.php
index 03bd298ff1d..d878f07d12f 100644
--- a/apps/dav/lib/Migration/FixBirthdayCalendarComponent.php
+++ b/apps/dav/lib/Migration/FixBirthdayCalendarComponent.php
@@ -1,8 +1,9 @@
<?php
/**
+ * @copyright Copyright (c) 2016, ownCloud GmbH.
+ *
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
- * @copyright Copyright (c) 2016, ownCloud GmbH.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/dav/lib/Migration/Version1004Date20170825134824.php b/apps/dav/lib/Migration/Version1004Date20170825134824.php
index b99f51322c5..dceb1ffbbdc 100644
--- a/apps/dav/lib/Migration/Version1004Date20170825134824.php
+++ b/apps/dav/lib/Migration/Version1004Date20170825134824.php
@@ -2,6 +2,7 @@
/**
* @copyright 2017, Roeland Jago Douma <roeland@famdouma.nl>
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license GNU AGPL version 3 or any later version
diff --git a/apps/dav/lib/Migration/Version1004Date20170919104507.php b/apps/dav/lib/Migration/Version1004Date20170919104507.php
index 3a0fb1ab904..d4c7026aea8 100644
--- a/apps/dav/lib/Migration/Version1004Date20170919104507.php
+++ b/apps/dav/lib/Migration/Version1004Date20170919104507.php
@@ -1,4 +1,26 @@
<?php
+/**
+ *
+ *
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
namespace OCA\DAV\Migration;
use Doctrine\DBAL\Schema\Schema;
diff --git a/apps/dav/lib/Migration/Version1004Date20170926103422.php b/apps/dav/lib/Migration/Version1004Date20170926103422.php
index 76adc8fe6a1..d50cbae396b 100644
--- a/apps/dav/lib/Migration/Version1004Date20170926103422.php
+++ b/apps/dav/lib/Migration/Version1004Date20170926103422.php
@@ -1,4 +1,26 @@
<?php
+/**
+ *
+ *
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
namespace OCA\DAV\Migration;
use Doctrine\DBAL\Schema\Schema;
diff --git a/apps/dav/lib/Server.php b/apps/dav/lib/Server.php
index 719e4974755..14f6f4e49eb 100644
--- a/apps/dav/lib/Server.php
+++ b/apps/dav/lib/Server.php
@@ -3,11 +3,15 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Christoph Wurst <christoph@owncloud.com>
- * @author Georg Ehrke <georg@owncloud.com>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Leon Klingele <leon@struktur.de>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Thomas Citharel <tcit@tcit.fr>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
*
@@ -77,6 +81,7 @@ class Server {
$dispatcher = \OC::$server->getEventDispatcher();
$timezone = new TimeFactory();
$sendInvitations = \OC::$server->getConfig()->getAppValue('dav', 'sendInvitations', 'yes') === 'yes';
+ $l10nFactory = \OC::$server->getL10NFactory();
$root = new RootCollection();
$this->server = new \OCA\DAV\Connector\Sabre\Server(new CachingTree($root));
@@ -139,7 +144,7 @@ class Server {
$this->server->addPlugin(new \Sabre\CalDAV\ICSExportPlugin());
$this->server->addPlugin(new \OCA\DAV\CalDAV\Schedule\Plugin());
if ($sendInvitations) {
- $this->server->addPlugin(new IMipPlugin($mailer, $logger, $timezone));
+ $this->server->addPlugin(\OC::$server->query(\OCA\DAV\CalDAV\Schedule\IMipPlugin::class));
}
$this->server->addPlugin(new \Sabre\CalDAV\Subscriptions\Plugin());
$this->server->addPlugin(new \Sabre\CalDAV\Notifications\Plugin());
diff --git a/apps/dav/lib/SystemTag/SystemTagNode.php b/apps/dav/lib/SystemTag/SystemTagNode.php
index bd21082f783..b825820aa9d 100644
--- a/apps/dav/lib/SystemTag/SystemTagNode.php
+++ b/apps/dav/lib/SystemTag/SystemTagNode.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/dav/lib/SystemTag/SystemTagsObjectMappingCollection.php b/apps/dav/lib/SystemTag/SystemTagsObjectMappingCollection.php
index 5d54a7f4430..9e1dee38fbd 100644
--- a/apps/dav/lib/SystemTag/SystemTagsObjectMappingCollection.php
+++ b/apps/dav/lib/SystemTag/SystemTagsObjectMappingCollection.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/dav/lib/Upload/AssemblyStream.php b/apps/dav/lib/Upload/AssemblyStream.php
index 4b327cecaac..e20d8f9adba 100644
--- a/apps/dav/lib/Upload/AssemblyStream.php
+++ b/apps/dav/lib/Upload/AssemblyStream.php
@@ -3,7 +3,10 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Markus Goetz <markus@woboq.com>
+ * @author Robin Appelman <robin@icewind.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
*
diff --git a/apps/dav/lib/Upload/UploadHome.php b/apps/dav/lib/Upload/UploadHome.php
index df458e8bc4b..9f4ae0e8a2c 100644
--- a/apps/dav/lib/Upload/UploadHome.php
+++ b/apps/dav/lib/Upload/UploadHome.php
@@ -4,6 +4,7 @@
*
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
*
diff --git a/apps/dav/tests/unit/AppInfo/PluginManagerTest.php b/apps/dav/tests/unit/AppInfo/PluginManagerTest.php
index 5776b939123..89c972acd26 100644
--- a/apps/dav/tests/unit/AppInfo/PluginManagerTest.php
+++ b/apps/dav/tests/unit/AppInfo/PluginManagerTest.php
@@ -1,8 +1,9 @@
<?php
/**
+ * @copyright Copyright (c) 2016, ownCloud GmbH.
+ *
* @author Vincent Petry <pvince81@owncloud.com>
*
- * @copyright Copyright (c) 2016, ownCloud GmbH.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/dav/tests/unit/Avatars/AvatarHomeTest.php b/apps/dav/tests/unit/Avatars/AvatarHomeTest.php
index f9e1ab56876..aa5c4bf3049 100644
--- a/apps/dav/tests/unit/Avatars/AvatarHomeTest.php
+++ b/apps/dav/tests/unit/Avatars/AvatarHomeTest.php
@@ -1,8 +1,10 @@
<?php
/**
+ * @copyright Copyright (c) 2017, ownCloud GmbH
+ *
+ * @author Georg Ehrke <oc.list@georgehrke.com>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
- * @copyright Copyright (c) 2017, ownCloud GmbH
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/dav/tests/unit/Avatars/AvatarNodeTest.php b/apps/dav/tests/unit/Avatars/AvatarNodeTest.php
index 8e56ea6f6df..98a868aa14c 100644
--- a/apps/dav/tests/unit/Avatars/AvatarNodeTest.php
+++ b/apps/dav/tests/unit/Avatars/AvatarNodeTest.php
@@ -1,8 +1,9 @@
<?php
/**
+ * @copyright Copyright (c) 2017, ownCloud GmbH
+ *
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
- * @copyright Copyright (c) 2017, ownCloud GmbH
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/dav/tests/unit/CalDAV/AbstractCalDavBackend.php b/apps/dav/tests/unit/CalDAV/AbstractCalDavBackend.php
index eef69aadf40..71b1de09ed2 100644
--- a/apps/dav/tests/unit/CalDAV/AbstractCalDavBackend.php
+++ b/apps/dav/tests/unit/CalDAV/AbstractCalDavBackend.php
@@ -2,6 +2,9 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Georg Ehrke <oc.list@georgehrke.com>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php b/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php
index dd48d8172d3..16b2b8a616e 100644
--- a/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php
+++ b/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/tests/unit/CalDAV/Activity/Filter/CalendarTest.php b/apps/dav/tests/unit/CalDAV/Activity/Filter/CalendarTest.php
index 895a404acf5..0fdd50b54c4 100644
--- a/apps/dav/tests/unit/CalDAV/Activity/Filter/CalendarTest.php
+++ b/apps/dav/tests/unit/CalDAV/Activity/Filter/CalendarTest.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/tests/unit/CalDAV/Activity/Filter/GenericTest.php b/apps/dav/tests/unit/CalDAV/Activity/Filter/GenericTest.php
index 533f88747cd..8f495698d02 100644
--- a/apps/dav/tests/unit/CalDAV/Activity/Filter/GenericTest.php
+++ b/apps/dav/tests/unit/CalDAV/Activity/Filter/GenericTest.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/tests/unit/CalDAV/Activity/Filter/TodoTest.php b/apps/dav/tests/unit/CalDAV/Activity/Filter/TodoTest.php
index 54a5a6f5f9d..f060e7a0b37 100644
--- a/apps/dav/tests/unit/CalDAV/Activity/Filter/TodoTest.php
+++ b/apps/dav/tests/unit/CalDAV/Activity/Filter/TodoTest.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/tests/unit/CalDAV/Activity/Provider/BaseTest.php b/apps/dav/tests/unit/CalDAV/Activity/Provider/BaseTest.php
index adffaf27ded..affc1909e3f 100644
--- a/apps/dav/tests/unit/CalDAV/Activity/Provider/BaseTest.php
+++ b/apps/dav/tests/unit/CalDAV/Activity/Provider/BaseTest.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/tests/unit/CalDAV/Activity/Setting/GenericTest.php b/apps/dav/tests/unit/CalDAV/Activity/Setting/GenericTest.php
index 54c7a54baf7..73ddebeccce 100644
--- a/apps/dav/tests/unit/CalDAV/Activity/Setting/GenericTest.php
+++ b/apps/dav/tests/unit/CalDAV/Activity/Setting/GenericTest.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php b/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php
index 50c8b39484e..a60b586e233 100644
--- a/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php
+++ b/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php
@@ -3,10 +3,11 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
* @copyright Copyright (c) 2017 Georg Ehrke
*
+ * @author Georg Ehrke <oc.list@georgehrke.com>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Robin Appelman <robin@icewind.nl>
* @author Thomas Citharel <tcit@tcit.fr>
* @author Thomas Müller <thomas.mueller@tmit.eu>
- * @author Georg Ehrke <oc.list@georgehrke.com>
*
* @license AGPL-3.0
*
diff --git a/apps/dav/tests/unit/CalDAV/CalendarTest.php b/apps/dav/tests/unit/CalDAV/CalendarTest.php
index 3fb29fd0c6b..99ad640c447 100644
--- a/apps/dav/tests/unit/CalDAV/CalendarTest.php
+++ b/apps/dav/tests/unit/CalDAV/CalendarTest.php
@@ -2,7 +2,10 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Georg Ehrke <oc.list@georgehrke.com>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/tests/unit/CalDAV/PluginTest.php b/apps/dav/tests/unit/CalDAV/PluginTest.php
index d0330af402a..7d283b6d1ed 100644
--- a/apps/dav/tests/unit/CalDAV/PluginTest.php
+++ b/apps/dav/tests/unit/CalDAV/PluginTest.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php b/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php
index 29ab503e082..82f4161c206 100644
--- a/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php
+++ b/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php
@@ -1,5 +1,30 @@
<?php
-
+/**
+ *
+ *
+ * @author Georg Ehrke <oc.list@georgehrke.com>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Thomas Citharel <tcit@tcit.fr>
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
namespace OCA\DAV\Tests\unit\CalDAV;
use OCA\DAV\CalDAV\Calendar;
diff --git a/apps/dav/tests/unit/CalDAV/PublicCalendarTest.php b/apps/dav/tests/unit/CalDAV/PublicCalendarTest.php
index 03cbf71d6ca..9783d1a6267 100644
--- a/apps/dav/tests/unit/CalDAV/PublicCalendarTest.php
+++ b/apps/dav/tests/unit/CalDAV/PublicCalendarTest.php
@@ -3,20 +3,22 @@
* @copyright Copyright (c) 2017, Georg Ehrke
*
* @author Georg Ehrke <oc.list@georgehrke.com>
+ * @author Joas Schilling <coding@schilljs.com>
*
- * @license AGPL-3.0
+ * @license GNU AGPL version 3 or any later version
*
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
diff --git a/apps/dav/tests/unit/CalDAV/Publishing/PublisherTest.php b/apps/dav/tests/unit/CalDAV/Publishing/PublisherTest.php
index b6b1e4381b5..b2ba8ba119a 100644
--- a/apps/dav/tests/unit/CalDAV/Publishing/PublisherTest.php
+++ b/apps/dav/tests/unit/CalDAV/Publishing/PublisherTest.php
@@ -1,5 +1,26 @@
<?php
-
+/**
+ *
+ *
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Thomas Citharel <tcit@tcit.fr>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
namespace OCA\DAV\Tests\unit\CalDAV\Publishing;
use OCA\DAV\CalDAV\Publishing\Xml\Publisher;
diff --git a/apps/dav/tests/unit/CalDAV/Publishing/PublishingTest.php b/apps/dav/tests/unit/CalDAV/Publishing/PublishingTest.php
index b60c567e9f1..efdafe8bc33 100644
--- a/apps/dav/tests/unit/CalDAV/Publishing/PublishingTest.php
+++ b/apps/dav/tests/unit/CalDAV/Publishing/PublishingTest.php
@@ -1,5 +1,26 @@
<?php
-
+/**
+ *
+ *
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Thomas Citharel <tcit@tcit.fr>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
namespace OCA\DAV\Tests\unit\CalDAV\Publishing;
use OCA\DAV\CalDAV\Calendar;
diff --git a/apps/dav/tests/unit/CalDAV/Schedule/IMipPluginTest.php b/apps/dav/tests/unit/CalDAV/Schedule/IMipPluginTest.php
index 894617781b5..ee52cab2814 100644
--- a/apps/dav/tests/unit/CalDAV/Schedule/IMipPluginTest.php
+++ b/apps/dav/tests/unit/CalDAV/Schedule/IMipPluginTest.php
@@ -3,9 +3,10 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
* @copyright Copyright (c) 2017, Georg Ehrke
*
+ * @author Georg Ehrke <oc.list@georgehrke.com>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
- * @author Georg Ehrke <oc.list@georgehrke.com>
*
* @license AGPL-3.0
*
@@ -28,7 +29,15 @@ namespace OCA\DAV\Tests\unit\CalDAV\Schedule;
use OC\Mail\Mailer;
use OCA\DAV\CalDAV\Schedule\IMipPlugin;
use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\IConfig;
+use OCP\IL10N;
use OCP\ILogger;
+use OCP\IURLGenerator;
+use OCP\L10N\IFactory;
+use OCP\Mail\IAttachment;
+use OCP\Mail\IEMailTemplate;
+use OCP\Mail\IMailer;
+use OCP\Mail\IMessage;
use Sabre\VObject\Component\VCalendar;
use Sabre\VObject\ITip\Message;
use Test\TestCase;
@@ -36,17 +45,31 @@ use Test\TestCase;
class IMipPluginTest extends TestCase {
public function testDelivery() {
- $mailMessage = new \OC\Mail\Message(new \Swift_Message());
+ $mailMessage = $this->createMock(IMessage::class);
+ $mailMessage->method('setReplyTo')->willReturn($mailMessage);
+ $mailMessage->method('setTo')->willReturn($mailMessage);
/** @var Mailer | \PHPUnit_Framework_MockObject_MockObject $mailer */
- $mailer = $this->getMockBuilder(Mailer::class)->disableOriginalConstructor()->getMock();
+ $mailer = $this->getMockBuilder(IMailer::class)->disableOriginalConstructor()->getMock();
+ $emailTemplate = $this->createMock(IEMailTemplate::class);
+ $emailAttachment = $this->createMock(IAttachment::class);
+ $mailer->method('createEMailTemplate')->willReturn($emailTemplate);
$mailer->method('createMessage')->willReturn($mailMessage);
+ $mailer->method('createAttachment')->willReturn($emailAttachment);
$mailer->expects($this->once())->method('send');
/** @var ILogger | \PHPUnit_Framework_MockObject_MockObject $logger */
$logger = $this->getMockBuilder(ILogger::class)->disableOriginalConstructor()->getMock();
$timeFactory = $this->getMockBuilder(ITimeFactory::class)->disableOriginalConstructor()->getMock();
$timeFactory->method('getTime')->willReturn(1);
+ /** @var IConfig | \PHPUnit_Framework_MockObject_MockObject $config */
+ $config = $this->createMock(IConfig::class);
+ $l10n = $this->createMock(IL10N::class);
+ /** @var IFactory | \PHPUnit_Framework_MockObject_MockObject $l10nFactory */
+ $l10nFactory = $this->createMock(IFactory::class);
+ $l10nFactory->method('get')->willReturn($l10n);
+ /** @var IURLGenerator | \PHPUnit_Framework_MockObject_MockObject $urlGenerator */
+ $urlGenerator = $this->createMock(IURLGenerator::class);
- $plugin = new IMipPlugin($mailer, $logger, $timeFactory);
+ $plugin = new IMipPlugin($config, $mailer, $logger, $timeFactory, $l10nFactory, $urlGenerator, 'user123');
$message = new Message();
$message->method = 'REQUEST';
$message->message = new VCalendar();
@@ -59,26 +82,46 @@ class IMipPluginTest extends TestCase {
$message->sender = 'mailto:gandalf@wiz.ard';
$message->recipient = 'mailto:frodo@hobb.it';
+ $emailTemplate->expects($this->once())
+ ->method('setSubject')
+ ->with('Invitation: Fellowship meeting');
+ $mailMessage->expects($this->once())
+ ->method('setTo')
+ ->with(['frodo@hobb.it' => null]);
+ $mailMessage->expects($this->once())
+ ->method('setReplyTo')
+ ->with(['gandalf@wiz.ard' => null]);
+
$plugin->schedule($message);
$this->assertEquals('1.1', $message->getScheduleStatus());
- $this->assertEquals('Fellowship meeting', $mailMessage->getSubject());
- $this->assertEquals(['frodo@hobb.it' => null], $mailMessage->getTo());
- $this->assertEquals(['gandalf@wiz.ard' => null], $mailMessage->getReplyTo());
- $this->assertEquals('text/calendar; charset=UTF-8; method=REQUEST', $mailMessage->getSwiftMessage()->getContentType());
}
public function testFailedDelivery() {
- $mailMessage = new \OC\Mail\Message(new \Swift_Message());
+ $mailMessage = $this->createMock(IMessage::class);
+ $mailMessage->method('setReplyTo')->willReturn($mailMessage);
+ $mailMessage->method('setTo')->willReturn($mailMessage);
/** @var Mailer | \PHPUnit_Framework_MockObject_MockObject $mailer */
- $mailer = $this->getMockBuilder(Mailer::class)->disableOriginalConstructor()->getMock();
+ $mailer = $this->getMockBuilder(IMailer::class)->disableOriginalConstructor()->getMock();
+ $emailTemplate = $this->createMock(IEMailTemplate::class);
+ $emailAttachment = $this->createMock(IAttachment::class);
+ $mailer->method('createEMailTemplate')->willReturn($emailTemplate);
$mailer->method('createMessage')->willReturn($mailMessage);
+ $mailer->method('createAttachment')->willReturn($emailAttachment);
$mailer->method('send')->willThrowException(new \Exception());
/** @var ILogger | \PHPUnit_Framework_MockObject_MockObject $logger */
$logger = $this->getMockBuilder(ILogger::class)->disableOriginalConstructor()->getMock();
$timeFactory = $this->getMockBuilder(ITimeFactory::class)->disableOriginalConstructor()->getMock();
$timeFactory->method('getTime')->willReturn(1);
+ /** @var IConfig | \PHPUnit_Framework_MockObject_MockObject $config */
+ $config = $this->createMock(IConfig::class);
+ $l10n = $this->createMock(IL10N::class);
+ /** @var IFactory | \PHPUnit_Framework_MockObject_MockObject $l10nFactory */
+ $l10nFactory = $this->createMock(IFactory::class);
+ $l10nFactory->method('get')->willReturn($l10n);
+ /** @var IURLGenerator | \PHPUnit_Framework_MockObject_MockObject $urlGenerator */
+ $urlGenerator = $this->createMock(IURLGenerator::class);
- $plugin = new IMipPlugin($mailer, $logger, $timeFactory);
+ $plugin = new IMipPlugin($config, $mailer, $logger, $timeFactory, $l10nFactory, $urlGenerator, 'user123');
$message = new Message();
$message->method = 'REQUEST';
$message->message = new VCalendar();
@@ -91,22 +134,34 @@ class IMipPluginTest extends TestCase {
$message->sender = 'mailto:gandalf@wiz.ard';
$message->recipient = 'mailto:frodo@hobb.it';
+ $emailTemplate->expects($this->once())
+ ->method('setSubject')
+ ->with('Invitation: Fellowship meeting');
+ $mailMessage->expects($this->once())
+ ->method('setTo')
+ ->with(['frodo@hobb.it' => null]);
+ $mailMessage->expects($this->once())
+ ->method('setReplyTo')
+ ->with(['gandalf@wiz.ard' => null]);
+
$plugin->schedule($message);
$this->assertEquals('5.0', $message->getScheduleStatus());
- $this->assertEquals('Fellowship meeting', $mailMessage->getSubject());
- $this->assertEquals(['frodo@hobb.it' => null], $mailMessage->getTo());
- $this->assertEquals(['gandalf@wiz.ard' => null], $mailMessage->getReplyTo());
- $this->assertEquals('text/calendar; charset=UTF-8; method=REQUEST', $mailMessage->getSwiftMessage()->getContentType());
}
/**
* @dataProvider dataNoMessageSendForPastEvents
*/
public function testNoMessageSendForPastEvents($veventParams, $expectsMail) {
- $mailMessage = new \OC\Mail\Message(new \Swift_Message());
+ $mailMessage = $this->createMock(IMessage::class);
+ $mailMessage->method('setReplyTo')->willReturn($mailMessage);
+ $mailMessage->method('setTo')->willReturn($mailMessage);
/** @var Mailer | \PHPUnit_Framework_MockObject_MockObject $mailer */
- $mailer = $this->getMockBuilder(Mailer::class)->disableOriginalConstructor()->getMock();
+ $mailer = $this->getMockBuilder(IMailer::class)->disableOriginalConstructor()->getMock();
+ $emailTemplate = $this->createMock(IEMailTemplate::class);
+ $emailAttachment = $this->createMock(IAttachment::class);
+ $mailer->method('createEMailTemplate')->willReturn($emailTemplate);
$mailer->method('createMessage')->willReturn($mailMessage);
+ $mailer->method('createAttachment')->willReturn($emailAttachment);
if ($expectsMail) {
$mailer->expects($this->once())->method('send');
} else {
@@ -116,8 +171,16 @@ class IMipPluginTest extends TestCase {
$logger = $this->getMockBuilder(ILogger::class)->disableOriginalConstructor()->getMock();
$timeFactory = $this->getMockBuilder(ITimeFactory::class)->disableOriginalConstructor()->getMock();
$timeFactory->method('getTime')->willReturn(1496912528);
+ /** @var IConfig | \PHPUnit_Framework_MockObject_MockObject $config */
+ $config = $this->createMock(IConfig::class);
+ $l10n = $this->createMock(IL10N::class);
+ /** @var IFactory | \PHPUnit_Framework_MockObject_MockObject $l10nFactory */
+ $l10nFactory = $this->createMock(IFactory::class);
+ $l10nFactory->method('get')->willReturn($l10n);
+ /** @var IURLGenerator | \PHPUnit_Framework_MockObject_MockObject $urlGenerator */
+ $urlGenerator = $this->createMock(IURLGenerator::class);
- $plugin = new IMipPlugin($mailer, $logger, $timeFactory);
+ $plugin = new IMipPlugin($config, $mailer, $logger, $timeFactory, $l10nFactory, $urlGenerator, 'user123');
$message = new Message();
$message->method = 'REQUEST';
$message->message = new VCalendar();
diff --git a/apps/dav/tests/unit/CalDAV/Schedule/PluginTest.php b/apps/dav/tests/unit/CalDAV/Schedule/PluginTest.php
index 6df8d2da2a2..243077063a0 100644
--- a/apps/dav/tests/unit/CalDAV/Schedule/PluginTest.php
+++ b/apps/dav/tests/unit/CalDAV/Schedule/PluginTest.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/tests/unit/CalDAV/Search/Request/CalendarSearchReportTest.php b/apps/dav/tests/unit/CalDAV/Search/Request/CalendarSearchReportTest.php
index cbfc2e55493..30cf768feab 100644
--- a/apps/dav/tests/unit/CalDAV/Search/Request/CalendarSearchReportTest.php
+++ b/apps/dav/tests/unit/CalDAV/Search/Request/CalendarSearchReportTest.php
@@ -1,21 +1,23 @@
<?php
/**
+ * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com>
+ *
* @author Georg Ehrke <oc.list@georgehrke.com>
*
- * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com>
* @license GNU AGPL version 3 or any later version
*
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
diff --git a/apps/dav/tests/unit/CalDAV/Search/SearchPluginTest.php b/apps/dav/tests/unit/CalDAV/Search/SearchPluginTest.php
index fc647bb5daf..12eb74259fc 100644
--- a/apps/dav/tests/unit/CalDAV/Search/SearchPluginTest.php
+++ b/apps/dav/tests/unit/CalDAV/Search/SearchPluginTest.php
@@ -1,21 +1,23 @@
<?php
/**
+ * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com>
+ *
* @author Georg Ehrke <oc.list@georgehrke.com>
*
- * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com>
* @license GNU AGPL version 3 or any later version
*
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
diff --git a/apps/dav/tests/unit/CapabilitiesTest.php b/apps/dav/tests/unit/CapabilitiesTest.php
index 718f2e5d72d..e8c1a778ee6 100644
--- a/apps/dav/tests/unit/CapabilitiesTest.php
+++ b/apps/dav/tests/unit/CapabilitiesTest.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/tests/unit/CardDAV/AddressBookImplTest.php b/apps/dav/tests/unit/CardDAV/AddressBookImplTest.php
index 172b341bd79..89253ce9dc9 100644
--- a/apps/dav/tests/unit/CardDAV/AddressBookImplTest.php
+++ b/apps/dav/tests/unit/CardDAV/AddressBookImplTest.php
@@ -3,7 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Björn Schießle <bjoern@schiessle.org>
- * @author Georg Ehrke <georg@owncloud.com>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
* @author Joas Schilling <coding@schilljs.com>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
diff --git a/apps/dav/tests/unit/CardDAV/AddressBookTest.php b/apps/dav/tests/unit/CardDAV/AddressBookTest.php
index 0e3d7c6f9b1..8fa6023f0d2 100644
--- a/apps/dav/tests/unit/CardDAV/AddressBookTest.php
+++ b/apps/dav/tests/unit/CardDAV/AddressBookTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php b/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php
index a8c0ce9d9c7..63e090873bb 100644
--- a/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php
+++ b/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php
@@ -5,8 +5,12 @@
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
- * @author Georg Ehrke <georg@owncloud.com>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
* @author Joas Schilling <coding@schilljs.com>
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/tests/unit/CardDAV/ContactsManagerTest.php b/apps/dav/tests/unit/CardDAV/ContactsManagerTest.php
index 7a773ac999c..768b867234c 100644
--- a/apps/dav/tests/unit/CardDAV/ContactsManagerTest.php
+++ b/apps/dav/tests/unit/CardDAV/ContactsManagerTest.php
@@ -2,8 +2,9 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
- * @author Georg Ehrke <georg@owncloud.com>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/tests/unit/CardDAV/ConverterTest.php b/apps/dav/tests/unit/CardDAV/ConverterTest.php
index 9ab0631e93a..757d69659e8 100644
--- a/apps/dav/tests/unit/CardDAV/ConverterTest.php
+++ b/apps/dav/tests/unit/CardDAV/ConverterTest.php
@@ -2,7 +2,9 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
diff --git a/apps/dav/tests/unit/CardDAV/ImageExportPluginTest.php b/apps/dav/tests/unit/CardDAV/ImageExportPluginTest.php
index e773e41ba5e..1f7ad404251 100644
--- a/apps/dav/tests/unit/CardDAV/ImageExportPluginTest.php
+++ b/apps/dav/tests/unit/CardDAV/ImageExportPluginTest.php
@@ -2,7 +2,8 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
- * @author Georg Ehrke <georg@owncloud.com>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
diff --git a/apps/dav/tests/unit/CardDAV/Sharing/PluginTest.php b/apps/dav/tests/unit/CardDAV/Sharing/PluginTest.php
index 4d4070511bb..9dbeee2434e 100644
--- a/apps/dav/tests/unit/CardDAV/Sharing/PluginTest.php
+++ b/apps/dav/tests/unit/CardDAV/Sharing/PluginTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/tests/unit/CardDAV/SyncServiceTest.php b/apps/dav/tests/unit/CardDAV/SyncServiceTest.php
index 0c0f36d0309..1ca27d61ce4 100644
--- a/apps/dav/tests/unit/CardDAV/SyncServiceTest.php
+++ b/apps/dav/tests/unit/CardDAV/SyncServiceTest.php
@@ -2,8 +2,9 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
- * @author Björn Schießle <bjoern@schiessle.org>
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
diff --git a/apps/dav/tests/unit/Comments/CommentsNodeTest.php b/apps/dav/tests/unit/Comments/CommentsNodeTest.php
index a0ff029efa7..f38546f329e 100644
--- a/apps/dav/tests/unit/Comments/CommentsNodeTest.php
+++ b/apps/dav/tests/unit/Comments/CommentsNodeTest.php
@@ -4,6 +4,7 @@
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/dav/tests/unit/Comments/CommentsPluginTest.php b/apps/dav/tests/unit/Comments/CommentsPluginTest.php
index e0f7a09a502..c713a2d0cd7 100644
--- a/apps/dav/tests/unit/Comments/CommentsPluginTest.php
+++ b/apps/dav/tests/unit/Comments/CommentsPluginTest.php
@@ -4,6 +4,7 @@
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/dav/tests/unit/Comments/EntityCollectionTest.php b/apps/dav/tests/unit/Comments/EntityCollectionTest.php
index 0cac135843b..2657e117b12 100644
--- a/apps/dav/tests/unit/Comments/EntityCollectionTest.php
+++ b/apps/dav/tests/unit/Comments/EntityCollectionTest.php
@@ -4,6 +4,7 @@
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
diff --git a/apps/dav/tests/unit/Comments/EntityTypeCollectionTest.php b/apps/dav/tests/unit/Comments/EntityTypeCollectionTest.php
index c63d95ad533..9add05ee630 100644
--- a/apps/dav/tests/unit/Comments/EntityTypeCollectionTest.php
+++ b/apps/dav/tests/unit/Comments/EntityTypeCollectionTest.php
@@ -4,6 +4,7 @@
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
diff --git a/apps/dav/tests/unit/Comments/RootCollectionTest.php b/apps/dav/tests/unit/Comments/RootCollectionTest.php
index 05fb94239b4..fde74dc46e7 100644
--- a/apps/dav/tests/unit/Comments/RootCollectionTest.php
+++ b/apps/dav/tests/unit/Comments/RootCollectionTest.php
@@ -4,6 +4,7 @@
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
diff --git a/apps/dav/tests/unit/Connector/PublicAuthTest.php b/apps/dav/tests/unit/Connector/PublicAuthTest.php
index dbb39bac6d2..5f35182fa27 100644
--- a/apps/dav/tests/unit/Connector/PublicAuthTest.php
+++ b/apps/dav/tests/unit/Connector/PublicAuthTest.php
@@ -2,8 +2,10 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
diff --git a/apps/dav/tests/unit/Connector/Sabre/AuthTest.php b/apps/dav/tests/unit/Connector/Sabre/AuthTest.php
index 34998745f77..f94afb257de 100644
--- a/apps/dav/tests/unit/Connector/Sabre/AuthTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/AuthTest.php
@@ -6,6 +6,7 @@
* @author Christoph Wurst <christoph@owncloud.com>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
diff --git a/apps/dav/tests/unit/Connector/Sabre/BearerAuthTest.php b/apps/dav/tests/unit/Connector/Sabre/BearerAuthTest.php
index 04bb035a635..9b3163d1106 100644
--- a/apps/dav/tests/unit/Connector/Sabre/BearerAuthTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/BearerAuthTest.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
*
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/tests/unit/Connector/Sabre/BlockLegacyClientPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/BlockLegacyClientPluginTest.php
index e80d12979ed..e6482de8878 100644
--- a/apps/dav/tests/unit/Connector/Sabre/BlockLegacyClientPluginTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/BlockLegacyClientPluginTest.php
@@ -4,6 +4,7 @@
*
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
diff --git a/apps/dav/tests/unit/Connector/Sabre/CommentsPropertiesPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/CommentsPropertiesPluginTest.php
index c31a3af980b..afb72b09778 100644
--- a/apps/dav/tests/unit/Connector/Sabre/CommentsPropertiesPluginTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/CommentsPropertiesPluginTest.php
@@ -4,6 +4,7 @@
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
diff --git a/apps/dav/tests/unit/Connector/Sabre/CopyEtagHeaderPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/CopyEtagHeaderPluginTest.php
index f44a4abf634..580558b9517 100644
--- a/apps/dav/tests/unit/Connector/Sabre/CopyEtagHeaderPluginTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/CopyEtagHeaderPluginTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/dav/tests/unit/Connector/Sabre/CustomPropertiesBackendTest.php b/apps/dav/tests/unit/Connector/Sabre/CustomPropertiesBackendTest.php
index c96915244f7..cbde8c2ef68 100644
--- a/apps/dav/tests/unit/Connector/Sabre/CustomPropertiesBackendTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/CustomPropertiesBackendTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
diff --git a/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php b/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php
index d5da0dce0d1..e72987ef02d 100644
--- a/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php
@@ -3,8 +3,8 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/dav/tests/unit/Connector/Sabre/DummyGetResponsePluginTest.php b/apps/dav/tests/unit/Connector/Sabre/DummyGetResponsePluginTest.php
index fa6f849f12f..aec70328788 100644
--- a/apps/dav/tests/unit/Connector/Sabre/DummyGetResponsePluginTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/DummyGetResponsePluginTest.php
@@ -4,6 +4,7 @@
*
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
diff --git a/apps/dav/tests/unit/Connector/Sabre/ExceptionLoggerPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/ExceptionLoggerPluginTest.php
index 83a51ddd86b..9cfb2c465e4 100644
--- a/apps/dav/tests/unit/Connector/Sabre/ExceptionLoggerPluginTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/ExceptionLoggerPluginTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/tests/unit/Connector/Sabre/FakeLockerPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/FakeLockerPluginTest.php
index e42bb1704f0..d8fce27e9e6 100644
--- a/apps/dav/tests/unit/Connector/Sabre/FakeLockerPluginTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/FakeLockerPluginTest.php
@@ -4,6 +4,7 @@
*
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
diff --git a/apps/dav/tests/unit/Connector/Sabre/FileTest.php b/apps/dav/tests/unit/Connector/Sabre/FileTest.php
index bf9daebdc5b..4d106842cf0 100644
--- a/apps/dav/tests/unit/Connector/Sabre/FileTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/FileTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
diff --git a/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php
index e3cf1ff4453..3372f99e957 100644
--- a/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php
@@ -3,6 +3,9 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Markus Goetz <markus@woboq.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Stefan Weil <sw@weilnetz.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
diff --git a/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php
index c46e4b14805..b6290719e7d 100644
--- a/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php
@@ -3,6 +3,8 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/dav/tests/unit/Connector/Sabre/MaintenancePluginTest.php b/apps/dav/tests/unit/Connector/Sabre/MaintenancePluginTest.php
index b028cb8e6ac..d4cc00f1582 100644
--- a/apps/dav/tests/unit/Connector/Sabre/MaintenancePluginTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/MaintenancePluginTest.php
@@ -3,7 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/tests/unit/Connector/Sabre/NodeTest.php b/apps/dav/tests/unit/Connector/Sabre/NodeTest.php
index fe6cbd97829..d4964557126 100644
--- a/apps/dav/tests/unit/Connector/Sabre/NodeTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/NodeTest.php
@@ -4,6 +4,7 @@
*
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
diff --git a/apps/dav/tests/unit/Connector/Sabre/ObjectTreeTest.php b/apps/dav/tests/unit/Connector/Sabre/ObjectTreeTest.php
index d1b37541dc3..a8fbcb39a85 100644
--- a/apps/dav/tests/unit/Connector/Sabre/ObjectTreeTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/ObjectTreeTest.php
@@ -3,7 +3,6 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
- * @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
diff --git a/apps/dav/tests/unit/Connector/Sabre/PrincipalTest.php b/apps/dav/tests/unit/Connector/Sabre/PrincipalTest.php
index 8d7485769fa..5b77a0694fe 100644
--- a/apps/dav/tests/unit/Connector/Sabre/PrincipalTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/PrincipalTest.php
@@ -4,6 +4,7 @@
*
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/dav/tests/unit/Connector/Sabre/QuotaPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/QuotaPluginTest.php
index 927178996c9..8d3cf3620e7 100644
--- a/apps/dav/tests/unit/Connector/Sabre/QuotaPluginTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/QuotaPluginTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
diff --git a/apps/dav/tests/unit/Connector/Sabre/RequestTest/DeleteTest.php b/apps/dav/tests/unit/Connector/Sabre/RequestTest/DeleteTest.php
index 35fd83f1fe6..5e59524d143 100644
--- a/apps/dav/tests/unit/Connector/Sabre/RequestTest/DeleteTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/RequestTest/DeleteTest.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Robin Appelman <robin@icewind.nl>
*
* @license AGPL-3.0
diff --git a/apps/dav/tests/unit/Connector/Sabre/RequestTest/EncryptionMasterKeyUploadTest.php b/apps/dav/tests/unit/Connector/Sabre/RequestTest/EncryptionMasterKeyUploadTest.php
index 480baab6baf..264d8b69fed 100644
--- a/apps/dav/tests/unit/Connector/Sabre/RequestTest/EncryptionMasterKeyUploadTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/RequestTest/EncryptionMasterKeyUploadTest.php
@@ -2,9 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
- * @author Joas Schilling <coding@schilljs.com>
- * @author Robin Appelman <robin@icewind.nl>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
*
* @license AGPL-3.0
*
diff --git a/apps/dav/tests/unit/Connector/Sabre/RequestTest/EncryptionUploadTest.php b/apps/dav/tests/unit/Connector/Sabre/RequestTest/EncryptionUploadTest.php
index c0cba121386..448a21c1987 100644
--- a/apps/dav/tests/unit/Connector/Sabre/RequestTest/EncryptionUploadTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/RequestTest/EncryptionUploadTest.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
* @author Robin Appelman <robin@icewind.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
diff --git a/apps/dav/tests/unit/Connector/Sabre/RequestTest/PartFileInRootUploadTest.php b/apps/dav/tests/unit/Connector/Sabre/RequestTest/PartFileInRootUploadTest.php
index ec4652a3af2..88b6316b689 100644
--- a/apps/dav/tests/unit/Connector/Sabre/RequestTest/PartFileInRootUploadTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/RequestTest/PartFileInRootUploadTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
diff --git a/apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTestCase.php b/apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTestCase.php
index aec467dd50a..a869e68fbbe 100644
--- a/apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTestCase.php
+++ b/apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTestCase.php
@@ -4,6 +4,7 @@
*
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
diff --git a/apps/dav/tests/unit/Connector/Sabre/SharesPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/SharesPluginTest.php
index 57be6e5a9e2..63b84eb5c6c 100644
--- a/apps/dav/tests/unit/Connector/Sabre/SharesPluginTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/SharesPluginTest.php
@@ -3,6 +3,9 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Maxence Lange <maxence@nextcloud.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/dav/tests/unit/Connector/Sabre/TagsPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/TagsPluginTest.php
index af156310887..37b35bc0178 100644
--- a/apps/dav/tests/unit/Connector/Sabre/TagsPluginTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/TagsPluginTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
diff --git a/apps/dav/tests/unit/DAV/BrowserErrorPagePluginTest.php b/apps/dav/tests/unit/DAV/BrowserErrorPagePluginTest.php
index 32f19e9ddb9..6d130a9c792 100644
--- a/apps/dav/tests/unit/DAV/BrowserErrorPagePluginTest.php
+++ b/apps/dav/tests/unit/DAV/BrowserErrorPagePluginTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/tests/unit/DAV/GroupPrincipalTest.php b/apps/dav/tests/unit/DAV/GroupPrincipalTest.php
index 180fc31040a..214054176ae 100644
--- a/apps/dav/tests/unit/DAV/GroupPrincipalTest.php
+++ b/apps/dav/tests/unit/DAV/GroupPrincipalTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/tests/unit/DAV/HookManagerTest.php b/apps/dav/tests/unit/DAV/HookManagerTest.php
index 3296d550a6b..25219b7a8f2 100644
--- a/apps/dav/tests/unit/DAV/HookManagerTest.php
+++ b/apps/dav/tests/unit/DAV/HookManagerTest.php
@@ -2,7 +2,13 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Robin Appelman <robin@icewind.nl>
+ * @author Thomas Citharel <tcit@tcit.fr>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/tests/unit/DAV/Sharing/PluginTest.php b/apps/dav/tests/unit/DAV/Sharing/PluginTest.php
index d6291467e47..c3b41590368 100644
--- a/apps/dav/tests/unit/DAV/Sharing/PluginTest.php
+++ b/apps/dav/tests/unit/DAV/Sharing/PluginTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/tests/unit/DAV/SystemPrincipalBackendTest.php b/apps/dav/tests/unit/DAV/SystemPrincipalBackendTest.php
index 71bdfb3b2bc..5833847cfed 100644
--- a/apps/dav/tests/unit/DAV/SystemPrincipalBackendTest.php
+++ b/apps/dav/tests/unit/DAV/SystemPrincipalBackendTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Thomas Citharel <tcit@tcit.fr>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/dav/tests/unit/Files/FileSearchBackendTest.php b/apps/dav/tests/unit/Files/FileSearchBackendTest.php
index 28b6f082712..14df99a278a 100644
--- a/apps/dav/tests/unit/Files/FileSearchBackendTest.php
+++ b/apps/dav/tests/unit/Files/FileSearchBackendTest.php
@@ -2,6 +2,9 @@
/**
* @copyright Copyright (c) 2017 Robin Appelman <robin@icewind.nl>
*
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Robin Appelman <robin@icewind.nl>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/dav/tests/unit/Migration/CalDAVRemoveEmptyValueTest.php b/apps/dav/tests/unit/Migration/CalDAVRemoveEmptyValueTest.php
index bf1f708e69a..2c77078bb5e 100644
--- a/apps/dav/tests/unit/Migration/CalDAVRemoveEmptyValueTest.php
+++ b/apps/dav/tests/unit/Migration/CalDAVRemoveEmptyValueTest.php
@@ -2,7 +2,7 @@
/**
* @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
*
- * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Joas Schilling <coding@schilljs.com>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/dav/tests/unit/ServerTest.php b/apps/dav/tests/unit/ServerTest.php
index 1b430b0f198..d502b24adcf 100644
--- a/apps/dav/tests/unit/ServerTest.php
+++ b/apps/dav/tests/unit/ServerTest.php
@@ -6,6 +6,7 @@
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Robin Appelman <robin@icewind.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
*
diff --git a/apps/dav/tests/unit/SystemTag/SystemTagMappingNodeTest.php b/apps/dav/tests/unit/SystemTag/SystemTagMappingNodeTest.php
index f67160af8d0..8992cb78d0f 100644
--- a/apps/dav/tests/unit/SystemTag/SystemTagMappingNodeTest.php
+++ b/apps/dav/tests/unit/SystemTag/SystemTagMappingNodeTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/dav/tests/unit/SystemTag/SystemTagNodeTest.php b/apps/dav/tests/unit/SystemTag/SystemTagNodeTest.php
index dd6892fe6ea..18c774883c0 100644
--- a/apps/dav/tests/unit/SystemTag/SystemTagNodeTest.php
+++ b/apps/dav/tests/unit/SystemTag/SystemTagNodeTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/dav/tests/unit/SystemTag/SystemTagPluginTest.php b/apps/dav/tests/unit/SystemTag/SystemTagPluginTest.php
index b231577845c..7e1f34a5ebf 100644
--- a/apps/dav/tests/unit/SystemTag/SystemTagPluginTest.php
+++ b/apps/dav/tests/unit/SystemTag/SystemTagPluginTest.php
@@ -5,6 +5,7 @@
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/dav/tests/unit/SystemTag/SystemTagsByIdCollectionTest.php b/apps/dav/tests/unit/SystemTag/SystemTagsByIdCollectionTest.php
index ec52de0536a..840b36e3f16 100644
--- a/apps/dav/tests/unit/SystemTag/SystemTagsByIdCollectionTest.php
+++ b/apps/dav/tests/unit/SystemTag/SystemTagsByIdCollectionTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/dav/tests/unit/SystemTag/SystemTagsObjectMappingCollectionTest.php b/apps/dav/tests/unit/SystemTag/SystemTagsObjectMappingCollectionTest.php
index f99e4df1f69..4795d54e849 100644
--- a/apps/dav/tests/unit/SystemTag/SystemTagsObjectMappingCollectionTest.php
+++ b/apps/dav/tests/unit/SystemTag/SystemTagsObjectMappingCollectionTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/dav/tests/unit/SystemTag/SystemTagsObjectTypeCollectionTest.php b/apps/dav/tests/unit/SystemTag/SystemTagsObjectTypeCollectionTest.php
index 0dc7ace2b89..877fe56c6d8 100644
--- a/apps/dav/tests/unit/SystemTag/SystemTagsObjectTypeCollectionTest.php
+++ b/apps/dav/tests/unit/SystemTag/SystemTagsObjectTypeCollectionTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/dav/tests/unit/Upload/AssemblyStreamTest.php b/apps/dav/tests/unit/Upload/AssemblyStreamTest.php
index 0396f80c9f4..de60b94168e 100644
--- a/apps/dav/tests/unit/Upload/AssemblyStreamTest.php
+++ b/apps/dav/tests/unit/Upload/AssemblyStreamTest.php
@@ -4,7 +4,10 @@
*
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Markus Goetz <markus@woboq.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
*
diff --git a/apps/dav/tests/unit/Upload/FutureFileTest.php b/apps/dav/tests/unit/Upload/FutureFileTest.php
index 10669912530..1f20642ff09 100644
--- a/apps/dav/tests/unit/Upload/FutureFileTest.php
+++ b/apps/dav/tests/unit/Upload/FutureFileTest.php
@@ -4,6 +4,7 @@
*
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/encryption/appinfo/app.php b/apps/encryption/appinfo/app.php
index 4f54f0e7251..63e99476602 100644
--- a/apps/encryption/appinfo/app.php
+++ b/apps/encryption/appinfo/app.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Clark Tomlinson <fallen013@gmail.com>
*
diff --git a/apps/encryption/l10n/es_EC.js b/apps/encryption/l10n/es_EC.js
new file mode 100644
index 00000000000..424b1f9313f
--- /dev/null
+++ b/apps/encryption/l10n/es_EC.js
@@ -0,0 +1,65 @@
+OC.L10N.register(
+ "encryption",
+ {
+ "Missing recovery key password" : "No se encontró la contraseña de la llave de recuperación",
+ "Please repeat the recovery key password" : "Por favor reingresa la contraseña de recuperación",
+ "Repeated recovery key password does not match the provided recovery key password" : "Las contraseñas de la llave de recuperación no coinciden",
+ "Recovery key successfully enabled" : "Llave de recuperación habilitada exitosamente",
+ "Could not enable recovery key. Please check your recovery key password!" : "No fue posible habilitar la llave de recuperación. ¡Por favor comprueba la contraseña de tu llave de recuperación!",
+ "Recovery key successfully disabled" : "Llave de recuperación deshabilitada exitosamente",
+ "Could not disable recovery key. Please check your recovery key password!" : "No fue posible deshabilitar la llave de recuperación. ¡Por favor comprueba la contraseña de tu llave de recuperación!",
+ "Missing parameters" : "Parámetros faltantes",
+ "Please provide the old recovery password" : "Por favor proporciona tu contraseña de recuperación anterior",
+ "Please provide a new recovery password" : "Por favor proporciona una nueva contraseña de recuperación",
+ "Please repeat the new recovery password" : "Por favor reingresa la nueva contraseña de recuperación",
+ "Password successfully changed." : "La contraseña ha sido cambiada exitosamente",
+ "Could not change the password. Maybe the old password was not correct." : "No fue posible cambiar la contraseña. Por favor verifica que contraseña anterior sea correcta.",
+ "Recovery Key disabled" : "Llave de recuperación deshabilitada",
+ "Recovery Key enabled" : "Llave de recuperación habilitada",
+ "Could not enable the recovery key, please try again or contact your administrator" : "No fue posible habilitar la llave de recuperación, por favor intentalo de nuevo o contacta a tu administrador",
+ "Could not update the private key password." : "No fue posible actualizar la contraseña de la llave privada.",
+ "The old password was not correct, please try again." : "La contraseña anterior no es correcta, favor de intentar de nuevo. ",
+ "The current log-in password was not correct, please try again." : "La contraseña actual para iniciar sesión fue incorrecta, por favor vuelvelo a intentar. ",
+ "Private key password successfully updated." : "Contraseña de llave privada actualizada exitosamente.",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Necesitas migar tus llaves de encripción de la encripción anterior (ownCloud <=8.0) a la nueva. Por favor ejecuta 'occ encryption:migrate' o contacta a tu adminstrador",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "La llave de encripción privada es inválida para la aplicación de encripción. Por favor actualiza la contraseña de tu llave privada en tus configuraciones personales para recuperar el acceso a tus archivos encriptados. ",
+ "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "La aplicación de encripción está habilitada, pero tus llaves no han sido inicializadas. Por favor cierra sesión e inicia sesión de nuevo. ",
+ "Please enable server side encryption in the admin settings in order to use the encryption module." : "Por favor activa el encriptado del lado del servidor en los ajustes de administración para usar el módulo de encripción.",
+ "Encryption app is enabled and ready" : "La aplicación de encripción se cuentra habilitada y lista",
+ "Bad Signature" : "Firma equivocada",
+ "Missing Signature" : "Firma faltante",
+ "one-time password for server-side-encryption" : "Contraseña de una-sola-vez para la encripción del lado del servidor",
+ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es posible decriptar este archivo, posiblemente sea un archivo compartido. Por favor solicita al dueño del archivo que lo vuelva a compartir contigo.",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es posible leer este archivo, posiblemente sea un archivo compartido. Por favor solicita al dueño que vuelva a compartirlo contigo.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hola,\n\nel administrador ha habilitado la encripción de lado del servidor. Tus archivos fueron encriptados usando la contraseña '%s'\n\nPor favor inicia sesión en la interface web, ve a la sección \"módulo de encripción básica\" de tus configuraciones personales y actualiza su contraseña de encripción ingresando esta contraseña en el campo 'contraseña de inicio de sesión anterior' y tu contraseña de inicio de sesión actual. \n",
+ "The share will expire on %s." : "El elemento compartido expirará el %s.",
+ "Cheers!" : "¡Saludos!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hola, <br><br>el administrador ha habilitado la encripción del lado del servidor. Tus archivos fueron encriptados usando la contraseña <strong>%s</strong>.<br><br> Por favor inicia sesisón en la interface web, ve a la sección \"módulo de encripción básica\" de tus configuraciones personales y actualiza tu contraseña de encripción ingresando esta contraseña en el campo \"contraseña de inicio de sesión anterior\" y tu contraseña de inicio de sesión actual. <br><br>",
+ "Default encryption module" : "Módulo de encripción predeterminado",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encripción esta habilitada pero tus llaves no han sido inicializadas, por favor sal y vuelve a entrar a tu sesión",
+ "Encrypt the home storage" : "Encriptar el almacenamiento de inicio",
+ "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Habilitar esta opción encripta todos los archivos almacenados en el almacenamiento principal, de otro modo, sólo los archivos en el almacenamiento externo serán encriptados",
+ "Enable recovery key" : "Habilitar llave de recuperación",
+ "Disable recovery key" : "Deshabilitar llave de recuperación",
+ "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La llave de recuperación es una llave de encripción que se usa para encriptar archivos. Permite la recuperación de los archivos del usuario si este olvida su contraseña. ",
+ "Recovery key password" : "Contraseña de llave de recuperación",
+ "Repeat recovery key password" : "Repetir la contraseña de la llave de recuperación",
+ "Change recovery key password:" : "Cambiar la contraseña de la llave de recuperación:",
+ "Old recovery key password" : "Anterior contraseña de llave de recuperación",
+ "New recovery key password" : "Nueva contraseña de llave de recuperación",
+ "Repeat new recovery key password" : "Reingresar la nueva contraseña de llave de recuperación",
+ "Change Password" : "Cambiar contraseña",
+ "Basic encryption module" : "Módulo de encripción básica",
+ "Your private key password no longer matches your log-in password." : "Tu contraseña de llave privada ya no corresónde con tu contraseña de inicio de sesión. ",
+ "Set your old private key password to your current log-in password:" : "Establece tu contraseña de llave privada a tu contraseña actual de inicio de seisón:",
+ " If you don't remember your old password you can ask your administrator to recover your files." : "Si no recuerdas tu contraseña anterior le puedes pedir a tu administrador que recupere tus archivos.",
+ "Old log-in password" : "Contraseña anterior",
+ "Current log-in password" : "Contraseña actual",
+ "Update Private Key Password" : "Actualizar Contraseña de Llave Privada",
+ "Enable password recovery:" : "Habilitar la recuperación de contraseña:",
+ "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Habilitar esta opción te permitirá volver a tener acceso a tus archivos encriptados en caso de que pierdas la contraseña",
+ "Enabled" : "Habilitado",
+ "Disabled" : "Deshabilitado",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encripción está habilitada pero tus llaves no han sido establecidas, por favor cierra la sesión y vuelve a iniciarla."
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/encryption/l10n/es_EC.json b/apps/encryption/l10n/es_EC.json
new file mode 100644
index 00000000000..dabe0c4c41f
--- /dev/null
+++ b/apps/encryption/l10n/es_EC.json
@@ -0,0 +1,63 @@
+{ "translations": {
+ "Missing recovery key password" : "No se encontró la contraseña de la llave de recuperación",
+ "Please repeat the recovery key password" : "Por favor reingresa la contraseña de recuperación",
+ "Repeated recovery key password does not match the provided recovery key password" : "Las contraseñas de la llave de recuperación no coinciden",
+ "Recovery key successfully enabled" : "Llave de recuperación habilitada exitosamente",
+ "Could not enable recovery key. Please check your recovery key password!" : "No fue posible habilitar la llave de recuperación. ¡Por favor comprueba la contraseña de tu llave de recuperación!",
+ "Recovery key successfully disabled" : "Llave de recuperación deshabilitada exitosamente",
+ "Could not disable recovery key. Please check your recovery key password!" : "No fue posible deshabilitar la llave de recuperación. ¡Por favor comprueba la contraseña de tu llave de recuperación!",
+ "Missing parameters" : "Parámetros faltantes",
+ "Please provide the old recovery password" : "Por favor proporciona tu contraseña de recuperación anterior",
+ "Please provide a new recovery password" : "Por favor proporciona una nueva contraseña de recuperación",
+ "Please repeat the new recovery password" : "Por favor reingresa la nueva contraseña de recuperación",
+ "Password successfully changed." : "La contraseña ha sido cambiada exitosamente",
+ "Could not change the password. Maybe the old password was not correct." : "No fue posible cambiar la contraseña. Por favor verifica que contraseña anterior sea correcta.",
+ "Recovery Key disabled" : "Llave de recuperación deshabilitada",
+ "Recovery Key enabled" : "Llave de recuperación habilitada",
+ "Could not enable the recovery key, please try again or contact your administrator" : "No fue posible habilitar la llave de recuperación, por favor intentalo de nuevo o contacta a tu administrador",
+ "Could not update the private key password." : "No fue posible actualizar la contraseña de la llave privada.",
+ "The old password was not correct, please try again." : "La contraseña anterior no es correcta, favor de intentar de nuevo. ",
+ "The current log-in password was not correct, please try again." : "La contraseña actual para iniciar sesión fue incorrecta, por favor vuelvelo a intentar. ",
+ "Private key password successfully updated." : "Contraseña de llave privada actualizada exitosamente.",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Necesitas migar tus llaves de encripción de la encripción anterior (ownCloud <=8.0) a la nueva. Por favor ejecuta 'occ encryption:migrate' o contacta a tu adminstrador",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "La llave de encripción privada es inválida para la aplicación de encripción. Por favor actualiza la contraseña de tu llave privada en tus configuraciones personales para recuperar el acceso a tus archivos encriptados. ",
+ "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "La aplicación de encripción está habilitada, pero tus llaves no han sido inicializadas. Por favor cierra sesión e inicia sesión de nuevo. ",
+ "Please enable server side encryption in the admin settings in order to use the encryption module." : "Por favor activa el encriptado del lado del servidor en los ajustes de administración para usar el módulo de encripción.",
+ "Encryption app is enabled and ready" : "La aplicación de encripción se cuentra habilitada y lista",
+ "Bad Signature" : "Firma equivocada",
+ "Missing Signature" : "Firma faltante",
+ "one-time password for server-side-encryption" : "Contraseña de una-sola-vez para la encripción del lado del servidor",
+ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es posible decriptar este archivo, posiblemente sea un archivo compartido. Por favor solicita al dueño del archivo que lo vuelva a compartir contigo.",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es posible leer este archivo, posiblemente sea un archivo compartido. Por favor solicita al dueño que vuelva a compartirlo contigo.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hola,\n\nel administrador ha habilitado la encripción de lado del servidor. Tus archivos fueron encriptados usando la contraseña '%s'\n\nPor favor inicia sesión en la interface web, ve a la sección \"módulo de encripción básica\" de tus configuraciones personales y actualiza su contraseña de encripción ingresando esta contraseña en el campo 'contraseña de inicio de sesión anterior' y tu contraseña de inicio de sesión actual. \n",
+ "The share will expire on %s." : "El elemento compartido expirará el %s.",
+ "Cheers!" : "¡Saludos!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hola, <br><br>el administrador ha habilitado la encripción del lado del servidor. Tus archivos fueron encriptados usando la contraseña <strong>%s</strong>.<br><br> Por favor inicia sesisón en la interface web, ve a la sección \"módulo de encripción básica\" de tus configuraciones personales y actualiza tu contraseña de encripción ingresando esta contraseña en el campo \"contraseña de inicio de sesión anterior\" y tu contraseña de inicio de sesión actual. <br><br>",
+ "Default encryption module" : "Módulo de encripción predeterminado",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encripción esta habilitada pero tus llaves no han sido inicializadas, por favor sal y vuelve a entrar a tu sesión",
+ "Encrypt the home storage" : "Encriptar el almacenamiento de inicio",
+ "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Habilitar esta opción encripta todos los archivos almacenados en el almacenamiento principal, de otro modo, sólo los archivos en el almacenamiento externo serán encriptados",
+ "Enable recovery key" : "Habilitar llave de recuperación",
+ "Disable recovery key" : "Deshabilitar llave de recuperación",
+ "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La llave de recuperación es una llave de encripción que se usa para encriptar archivos. Permite la recuperación de los archivos del usuario si este olvida su contraseña. ",
+ "Recovery key password" : "Contraseña de llave de recuperación",
+ "Repeat recovery key password" : "Repetir la contraseña de la llave de recuperación",
+ "Change recovery key password:" : "Cambiar la contraseña de la llave de recuperación:",
+ "Old recovery key password" : "Anterior contraseña de llave de recuperación",
+ "New recovery key password" : "Nueva contraseña de llave de recuperación",
+ "Repeat new recovery key password" : "Reingresar la nueva contraseña de llave de recuperación",
+ "Change Password" : "Cambiar contraseña",
+ "Basic encryption module" : "Módulo de encripción básica",
+ "Your private key password no longer matches your log-in password." : "Tu contraseña de llave privada ya no corresónde con tu contraseña de inicio de sesión. ",
+ "Set your old private key password to your current log-in password:" : "Establece tu contraseña de llave privada a tu contraseña actual de inicio de seisón:",
+ " If you don't remember your old password you can ask your administrator to recover your files." : "Si no recuerdas tu contraseña anterior le puedes pedir a tu administrador que recupere tus archivos.",
+ "Old log-in password" : "Contraseña anterior",
+ "Current log-in password" : "Contraseña actual",
+ "Update Private Key Password" : "Actualizar Contraseña de Llave Privada",
+ "Enable password recovery:" : "Habilitar la recuperación de contraseña:",
+ "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Habilitar esta opción te permitirá volver a tener acceso a tus archivos encriptados en caso de que pierdas la contraseña",
+ "Enabled" : "Habilitado",
+ "Disabled" : "Deshabilitado",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encripción está habilitada pero tus llaves no han sido establecidas, por favor cierra la sesión y vuelve a iniciarla."
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/encryption/l10n/sr.js b/apps/encryption/l10n/sr.js
index f41cc4ffeb6..ac03e3cc744 100644
--- a/apps/encryption/l10n/sr.js
+++ b/apps/encryption/l10n/sr.js
@@ -17,28 +17,28 @@ OC.L10N.register(
"Recovery Key disabled" : "Кључ за опоравак искључен",
"Recovery Key enabled" : "Кључ за опоравак укључен",
"Could not enable the recovery key, please try again or contact your administrator" : "Не могу да укључим кључ за опоравак. Покушајте поново или контактирајте администратора",
- "Could not update the private key password." : "Не могу да ажурирам лозинку тајног кључа.",
+ "Could not update the private key password." : "Не могу да ажурирам лозинку личног кључа.",
"The old password was not correct, please try again." : "Стара лозинка није исправна. Покушајте поново.",
"The current log-in password was not correct, please try again." : "Тренутна лозинка за пријаву није исправна. Покушајте поново.",
"Private key password successfully updated." : "Лозинка личног кључа је успешно ажурирана.",
- "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Морате да пребаците старе шифрарске кључеве (оунКлауд <= 8.0) у нови. Укључите „оунКлауд подразумевани шифрарски модул“ и покрените 'occ encryption:migrate'",
- "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Неисправан тајни кључ за апликацију шифровања. Ажурирајте Ваш тајни кључ у личним подешавањима да вратите назад приступ шифрованим фајловима.",
- "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "Апликација за шифровање је укључена, али кључеви још нису иницијализовани. Одјавите се и поново се пријавите.",
- "Please enable server side encryption in the admin settings in order to use the encryption module." : "Укључите шифровање на страни сервера и администраторским подешавањима да бисте користили модул за шифровање.",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Морате да пребаците старе шифрарске кључеве (оунКлауд <= 8.0) у нове. Покрените 'occ encryption:migrate' или контактирајте администратора.",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Неисправан лични кључ за шифровање. Ажурирајте лозинку личног кључа у поставкама да повратите приступ шифрованим фајловима.",
+ "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "Апликација за шифровање је укључена али кључеви још нису иницијализовани. Одјавите се и поново се пријавите.",
+ "Please enable server side encryption in the admin settings in order to use the encryption module." : "Укључите шифровање на страни сервера у администраторским поставкама да бисте користили модул за шифровање.",
"Encryption app is enabled and ready" : "Апликација за шифровање је укључена и спремна",
"Bad Signature" : "Лош потпис",
"Missing Signature" : "Недостаје потпис",
- "one-time password for server-side-encryption" : "једнокрана лозинка за шифровање на серверској страни",
- "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу да дешифрујем фајл. Вероватно је то дељен фајл. Затражите од власника фајла да га поново подели са Вама.",
- "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу да читам фајл. Вероватно је дељен. Питајте власника да га поново подели са Вама.",
- "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Поштовање,\n\nадминистратор је укључио шифровање на серверској страни. Ваши фајлови су шифровани лозинком '%s'.\n\nУлогујте се на веб сучеље, идите на одељак 'основни модул за шифровање' у личним подешавањима и ажурирајте Вашу лозинку за шифровање тако што унесете ову лозинку у поље 'стара лозинка за пријаву' и Вашу тренутно лозинку за пријављивање.\n",
+ "one-time password for server-side-encryption" : "једнократна лозинка за шифровање на страни сервера",
+ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу да дешифрујем фајл. Вероватно је то дељен фајл. Затражите од власника да га поново подели.",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу да читам фајл. Вероватно је дељен. Питајте власника да га поново подели.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Поштовање,\n\nадминистратор је укључио шифровање на серверској страни. Ваши фајлови су шифровани лозинком „%s“.\n\nПријавите се на веб сучеље, идите на одељак 'основни модул за шифровање' у личним поставкама и ажурирајте своју лозинку за шифровање уношењем ове лозинке у поље „стара лозинка за пријаву“ и своју тренутну лозинку за пријављивање.\n",
"The share will expire on %s." : "Дељење истиче %s.",
- "Cheers!" : "Поздрав!",
- "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Поштовање,<br><br>администратор је укључио шифровање на серверској страни. Ваши фајлови су шифровани лозинком <strong>%s</strong>.<br><br>Улогујте се на веб сучеље, идите на одељак 'основни модул за шифровање' у личним подешавањима и ажурирајте Вашу лозинку за шифровање тако што унесете ову лозинку у поље 'стара лозинка за пријаву' и Вашу тренутно лозинку за пријављивање.<br><br>",
+ "Cheers!" : "Здраво!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Поштовање,<br><br>администратор је укључио шифровање на серверској страни. Ваши фајлови су шифровани лозинком <strong>%s</strong>.<br><br>Пријавите се на веб сучеље, идите на одељак 'основни модул за шифровање' у личним поставкама и ажурирајте своју лозинку за шифровање тако што унесете ову лозинку у поље 'стара лозинка за пријаву' и своју тренутну лозинку за пријављивање.<br><br>",
"Default encryption module" : "Подразумевани модул за шифровање",
- "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Апликација за шифровање је укључена, али кључеви још нису иницијализовани. Одјавите се и поново се пријавите.",
- "Encrypt the home storage" : "Шифрујте Ваше главно складиште",
- "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Укључивањем ове опције ћете шифровати све фајлове на главном складишту, а у супротном ће само фајловим на спољашњем складишту бити шифровани",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Апликација за шифровање је укључена али кључеви још нису иницијализовани. Одјавите се и поново се пријавите.",
+ "Encrypt the home storage" : "Шифровање главног складишта",
+ "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Укључивање ове опције ће шифровати све фајлове на главном складишту. У супротном ће само фајлови на спољашњем складишту бити шифровани",
"Enable recovery key" : "Омогући кључ за опоравак",
"Disable recovery key" : "Онемогући кључ за опоравак",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Кључ за опоравак је додатни шифрарски кључ који се користи за шифровање фајлова. Он омогућава опоравак корисничких фајлова ако корисник заборави своју лозинку.",
@@ -58,8 +58,8 @@ OC.L10N.register(
"Update Private Key Password" : "Ажурирај лозинку личног кључа",
"Enable password recovery:" : "Укључи опоравак лозинке:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Укључивање ове опције омогућиће поновно добијање приступа вашим шифрованим фајловима у случају губитка лозинке",
- "Enabled" : "Укључено",
- "Disabled" : "Искључено",
+ "Enabled" : "укључено",
+ "Disabled" : "искључено",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Апликација шифровања је укључена али ваши кључеви нису иницијализовани. Одјавите се и поново се пријавите."
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/encryption/l10n/sr.json b/apps/encryption/l10n/sr.json
index 316dd670947..eec6b6e158f 100644
--- a/apps/encryption/l10n/sr.json
+++ b/apps/encryption/l10n/sr.json
@@ -15,28 +15,28 @@
"Recovery Key disabled" : "Кључ за опоравак искључен",
"Recovery Key enabled" : "Кључ за опоравак укључен",
"Could not enable the recovery key, please try again or contact your administrator" : "Не могу да укључим кључ за опоравак. Покушајте поново или контактирајте администратора",
- "Could not update the private key password." : "Не могу да ажурирам лозинку тајног кључа.",
+ "Could not update the private key password." : "Не могу да ажурирам лозинку личног кључа.",
"The old password was not correct, please try again." : "Стара лозинка није исправна. Покушајте поново.",
"The current log-in password was not correct, please try again." : "Тренутна лозинка за пријаву није исправна. Покушајте поново.",
"Private key password successfully updated." : "Лозинка личног кључа је успешно ажурирана.",
- "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Морате да пребаците старе шифрарске кључеве (оунКлауд <= 8.0) у нови. Укључите „оунКлауд подразумевани шифрарски модул“ и покрените 'occ encryption:migrate'",
- "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Неисправан тајни кључ за апликацију шифровања. Ажурирајте Ваш тајни кључ у личним подешавањима да вратите назад приступ шифрованим фајловима.",
- "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "Апликација за шифровање је укључена, али кључеви још нису иницијализовани. Одјавите се и поново се пријавите.",
- "Please enable server side encryption in the admin settings in order to use the encryption module." : "Укључите шифровање на страни сервера и администраторским подешавањима да бисте користили модул за шифровање.",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Морате да пребаците старе шифрарске кључеве (оунКлауд <= 8.0) у нове. Покрените 'occ encryption:migrate' или контактирајте администратора.",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Неисправан лични кључ за шифровање. Ажурирајте лозинку личног кључа у поставкама да повратите приступ шифрованим фајловима.",
+ "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "Апликација за шифровање је укључена али кључеви још нису иницијализовани. Одјавите се и поново се пријавите.",
+ "Please enable server side encryption in the admin settings in order to use the encryption module." : "Укључите шифровање на страни сервера у администраторским поставкама да бисте користили модул за шифровање.",
"Encryption app is enabled and ready" : "Апликација за шифровање је укључена и спремна",
"Bad Signature" : "Лош потпис",
"Missing Signature" : "Недостаје потпис",
- "one-time password for server-side-encryption" : "једнокрана лозинка за шифровање на серверској страни",
- "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу да дешифрујем фајл. Вероватно је то дељен фајл. Затражите од власника фајла да га поново подели са Вама.",
- "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу да читам фајл. Вероватно је дељен. Питајте власника да га поново подели са Вама.",
- "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Поштовање,\n\nадминистратор је укључио шифровање на серверској страни. Ваши фајлови су шифровани лозинком '%s'.\n\nУлогујте се на веб сучеље, идите на одељак 'основни модул за шифровање' у личним подешавањима и ажурирајте Вашу лозинку за шифровање тако што унесете ову лозинку у поље 'стара лозинка за пријаву' и Вашу тренутно лозинку за пријављивање.\n",
+ "one-time password for server-side-encryption" : "једнократна лозинка за шифровање на страни сервера",
+ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу да дешифрујем фајл. Вероватно је то дељен фајл. Затражите од власника да га поново подели.",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу да читам фајл. Вероватно је дељен. Питајте власника да га поново подели.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Поштовање,\n\nадминистратор је укључио шифровање на серверској страни. Ваши фајлови су шифровани лозинком „%s“.\n\nПријавите се на веб сучеље, идите на одељак 'основни модул за шифровање' у личним поставкама и ажурирајте своју лозинку за шифровање уношењем ове лозинке у поље „стара лозинка за пријаву“ и своју тренутну лозинку за пријављивање.\n",
"The share will expire on %s." : "Дељење истиче %s.",
- "Cheers!" : "Поздрав!",
- "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Поштовање,<br><br>администратор је укључио шифровање на серверској страни. Ваши фајлови су шифровани лозинком <strong>%s</strong>.<br><br>Улогујте се на веб сучеље, идите на одељак 'основни модул за шифровање' у личним подешавањима и ажурирајте Вашу лозинку за шифровање тако што унесете ову лозинку у поље 'стара лозинка за пријаву' и Вашу тренутно лозинку за пријављивање.<br><br>",
+ "Cheers!" : "Здраво!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Поштовање,<br><br>администратор је укључио шифровање на серверској страни. Ваши фајлови су шифровани лозинком <strong>%s</strong>.<br><br>Пријавите се на веб сучеље, идите на одељак 'основни модул за шифровање' у личним поставкама и ажурирајте своју лозинку за шифровање тако што унесете ову лозинку у поље 'стара лозинка за пријаву' и своју тренутну лозинку за пријављивање.<br><br>",
"Default encryption module" : "Подразумевани модул за шифровање",
- "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Апликација за шифровање је укључена, али кључеви још нису иницијализовани. Одјавите се и поново се пријавите.",
- "Encrypt the home storage" : "Шифрујте Ваше главно складиште",
- "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Укључивањем ове опције ћете шифровати све фајлове на главном складишту, а у супротном ће само фајловим на спољашњем складишту бити шифровани",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Апликација за шифровање је укључена али кључеви још нису иницијализовани. Одјавите се и поново се пријавите.",
+ "Encrypt the home storage" : "Шифровање главног складишта",
+ "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Укључивање ове опције ће шифровати све фајлове на главном складишту. У супротном ће само фајлови на спољашњем складишту бити шифровани",
"Enable recovery key" : "Омогући кључ за опоравак",
"Disable recovery key" : "Онемогући кључ за опоравак",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Кључ за опоравак је додатни шифрарски кључ који се користи за шифровање фајлова. Он омогућава опоравак корисничких фајлова ако корисник заборави своју лозинку.",
@@ -56,8 +56,8 @@
"Update Private Key Password" : "Ажурирај лозинку личног кључа",
"Enable password recovery:" : "Укључи опоравак лозинке:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Укључивање ове опције омогућиће поновно добијање приступа вашим шифрованим фајловима у случају губитка лозинке",
- "Enabled" : "Укључено",
- "Disabled" : "Искључено",
+ "Enabled" : "укључено",
+ "Disabled" : "искључено",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Апликација шифровања је укључена али ваши кључеви нису иницијализовани. Одјавите се и поново се пријавите."
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/encryption/lib/AppInfo/Application.php b/apps/encryption/lib/AppInfo/Application.php
index dd9d173c8eb..2130044d1f4 100644
--- a/apps/encryption/lib/AppInfo/Application.php
+++ b/apps/encryption/lib/AppInfo/Application.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Clark Tomlinson <fallen013@gmail.com>
* @author Thomas Müller <thomas.mueller@tmit.eu>
diff --git a/apps/encryption/lib/Command/DisableMasterKey.php b/apps/encryption/lib/Command/DisableMasterKey.php
index 97c2ad40b61..230de754bfc 100644
--- a/apps/encryption/lib/Command/DisableMasterKey.php
+++ b/apps/encryption/lib/Command/DisableMasterKey.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org>
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/encryption/lib/Command/MigrateKeys.php b/apps/encryption/lib/Command/MigrateKeys.php
index 1cdd76795d9..18eb6e710a6 100644
--- a/apps/encryption/lib/Command/MigrateKeys.php
+++ b/apps/encryption/lib/Command/MigrateKeys.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
*
diff --git a/apps/encryption/lib/Controller/StatusController.php b/apps/encryption/lib/Controller/StatusController.php
index 9ec9fd1234b..b133d5b2e5b 100644
--- a/apps/encryption/lib/Controller/StatusController.php
+++ b/apps/encryption/lib/Controller/StatusController.php
@@ -2,7 +2,9 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/encryption/lib/Crypto/Crypt.php b/apps/encryption/lib/Crypto/Crypt.php
index 6e1b7387c88..090ca6184d6 100644
--- a/apps/encryption/lib/Crypto/Crypt.php
+++ b/apps/encryption/lib/Crypto/Crypt.php
@@ -2,10 +2,12 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Clark Tomlinson <fallen013@gmail.com>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/encryption/lib/Crypto/EncryptAll.php b/apps/encryption/lib/Crypto/EncryptAll.php
index 2afab22d522..c2619dc8ef1 100644
--- a/apps/encryption/lib/Crypto/EncryptAll.php
+++ b/apps/encryption/lib/Crypto/EncryptAll.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Kenneth Newwood <kenneth@newwood.name>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
diff --git a/apps/encryption/lib/Crypto/Encryption.php b/apps/encryption/lib/Crypto/Encryption.php
index 4d20c103a5d..bd75e4ae10c 100644
--- a/apps/encryption/lib/Crypto/Encryption.php
+++ b/apps/encryption/lib/Crypto/Encryption.php
@@ -2,11 +2,13 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Clark Tomlinson <fallen013@gmail.com>
* @author Jan-Christoph Borchardt <hey@jancborchardt.net>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/encryption/lib/Hooks/UserHooks.php b/apps/encryption/lib/Hooks/UserHooks.php
index a08796aee54..1dade9f782f 100644
--- a/apps/encryption/lib/Hooks/UserHooks.php
+++ b/apps/encryption/lib/Hooks/UserHooks.php
@@ -2,8 +2,10 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Clark Tomlinson <fallen013@gmail.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/encryption/lib/KeyManager.php b/apps/encryption/lib/KeyManager.php
index 6039aaaaa0e..d25a25cdcb8 100644
--- a/apps/encryption/lib/KeyManager.php
+++ b/apps/encryption/lib/KeyManager.php
@@ -2,9 +2,11 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Clark Tomlinson <fallen013@gmail.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/encryption/lib/Migration.php b/apps/encryption/lib/Migration.php
index 656cab6a1e1..35f35a1520c 100644
--- a/apps/encryption/lib/Migration.php
+++ b/apps/encryption/lib/Migration.php
@@ -4,6 +4,7 @@
*
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
*
* @license AGPL-3.0
diff --git a/apps/encryption/lib/Migration/SetMasterKeyStatus.php b/apps/encryption/lib/Migration/SetMasterKeyStatus.php
index a21d0acae24..2c515fd5f72 100644
--- a/apps/encryption/lib/Migration/SetMasterKeyStatus.php
+++ b/apps/encryption/lib/Migration/SetMasterKeyStatus.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org>
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/encryption/lib/Session.php b/apps/encryption/lib/Session.php
index a61ee25fadb..c8f6ac6d0da 100644
--- a/apps/encryption/lib/Session.php
+++ b/apps/encryption/lib/Session.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Clark Tomlinson <fallen013@gmail.com>
* @author Lukas Reschke <lukas@statuscode.ch>
diff --git a/apps/encryption/lib/Util.php b/apps/encryption/lib/Util.php
index d6ae9bd7e5e..5926817dc48 100644
--- a/apps/encryption/lib/Util.php
+++ b/apps/encryption/lib/Util.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Clark Tomlinson <fallen013@gmail.com>
* @author Phil Davis <phil.davis@inf.org>
diff --git a/apps/encryption/tests/Command/TestEnableMasterKey.php b/apps/encryption/tests/Command/TestEnableMasterKey.php
index 58118db8c53..3b58148f376 100644
--- a/apps/encryption/tests/Command/TestEnableMasterKey.php
+++ b/apps/encryption/tests/Command/TestEnableMasterKey.php
@@ -4,6 +4,7 @@
*
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
*
* @license AGPL-3.0
*
diff --git a/apps/encryption/tests/Controller/RecoveryControllerTest.php b/apps/encryption/tests/Controller/RecoveryControllerTest.php
index 7ab3bc7eebb..c38436e68e2 100644
--- a/apps/encryption/tests/Controller/RecoveryControllerTest.php
+++ b/apps/encryption/tests/Controller/RecoveryControllerTest.php
@@ -4,6 +4,7 @@
*
* @author Clark Tomlinson <fallen013@gmail.com>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
*
* @license AGPL-3.0
*
diff --git a/apps/encryption/tests/Controller/SettingsControllerTest.php b/apps/encryption/tests/Controller/SettingsControllerTest.php
index aceb94b23f7..b12652b51c9 100644
--- a/apps/encryption/tests/Controller/SettingsControllerTest.php
+++ b/apps/encryption/tests/Controller/SettingsControllerTest.php
@@ -4,6 +4,8 @@
*
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/encryption/tests/Controller/StatusControllerTest.php b/apps/encryption/tests/Controller/StatusControllerTest.php
index d72fcd1ac36..0dc04b0ba1c 100644
--- a/apps/encryption/tests/Controller/StatusControllerTest.php
+++ b/apps/encryption/tests/Controller/StatusControllerTest.php
@@ -2,8 +2,11 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/encryption/tests/Crypto/CryptTest.php b/apps/encryption/tests/Crypto/CryptTest.php
index ace4453a803..9645dc3cce0 100644
--- a/apps/encryption/tests/Crypto/CryptTest.php
+++ b/apps/encryption/tests/Crypto/CryptTest.php
@@ -2,9 +2,12 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/encryption/tests/Crypto/DecryptAllTest.php b/apps/encryption/tests/Crypto/DecryptAllTest.php
index 99b1b47ba8e..c14549bb96a 100644
--- a/apps/encryption/tests/Crypto/DecryptAllTest.php
+++ b/apps/encryption/tests/Crypto/DecryptAllTest.php
@@ -4,6 +4,7 @@
*
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
*
* @license AGPL-3.0
*
diff --git a/apps/encryption/tests/Crypto/EncryptAllTest.php b/apps/encryption/tests/Crypto/EncryptAllTest.php
index 38b64a8b6bf..0d894ab6fd7 100644
--- a/apps/encryption/tests/Crypto/EncryptAllTest.php
+++ b/apps/encryption/tests/Crypto/EncryptAllTest.php
@@ -4,6 +4,9 @@
*
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Kenneth Newwood <kenneth@newwood.name>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/encryption/tests/Crypto/EncryptionTest.php b/apps/encryption/tests/Crypto/EncryptionTest.php
index 42da71b0eb1..3e47b4b0750 100644
--- a/apps/encryption/tests/Crypto/EncryptionTest.php
+++ b/apps/encryption/tests/Crypto/EncryptionTest.php
@@ -2,8 +2,11 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/encryption/tests/HookManagerTest.php b/apps/encryption/tests/HookManagerTest.php
index 109afb1ef8d..0b0c09bbf79 100644
--- a/apps/encryption/tests/HookManagerTest.php
+++ b/apps/encryption/tests/HookManagerTest.php
@@ -4,6 +4,8 @@
*
* @author Clark Tomlinson <fallen013@gmail.com>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/encryption/tests/Hooks/UserHooksTest.php b/apps/encryption/tests/Hooks/UserHooksTest.php
index f4c7a5ae0f7..f951ddb37f7 100644
--- a/apps/encryption/tests/Hooks/UserHooksTest.php
+++ b/apps/encryption/tests/Hooks/UserHooksTest.php
@@ -2,9 +2,12 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Clark Tomlinson <fallen013@gmail.com>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/encryption/tests/KeyManagerTest.php b/apps/encryption/tests/KeyManagerTest.php
index 721b7f53a0c..7af9e39e95d 100644
--- a/apps/encryption/tests/KeyManagerTest.php
+++ b/apps/encryption/tests/KeyManagerTest.php
@@ -2,11 +2,15 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Clark Tomlinson <fallen013@gmail.com>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
*
diff --git a/apps/encryption/tests/MigrationTest.php b/apps/encryption/tests/MigrationTest.php
index 71d2f52dd5c..3854a821809 100644
--- a/apps/encryption/tests/MigrationTest.php
+++ b/apps/encryption/tests/MigrationTest.php
@@ -4,6 +4,7 @@
*
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
diff --git a/apps/encryption/tests/RecoveryTest.php b/apps/encryption/tests/RecoveryTest.php
index 2dda774565c..b83b71737f3 100644
--- a/apps/encryption/tests/RecoveryTest.php
+++ b/apps/encryption/tests/RecoveryTest.php
@@ -6,6 +6,8 @@
* @author Clark Tomlinson <fallen013@gmail.com>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/encryption/tests/SessionTest.php b/apps/encryption/tests/SessionTest.php
index 3000fedf2c3..7bced196793 100644
--- a/apps/encryption/tests/SessionTest.php
+++ b/apps/encryption/tests/SessionTest.php
@@ -2,9 +2,11 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Clark Tomlinson <fallen013@gmail.com>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/encryption/tests/Settings/AdminTest.php b/apps/encryption/tests/Settings/AdminTest.php
index 5fe3fe956e4..9afc024dfc8 100644
--- a/apps/encryption/tests/Settings/AdminTest.php
+++ b/apps/encryption/tests/Settings/AdminTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/encryption/tests/Users/SetupTest.php b/apps/encryption/tests/Users/SetupTest.php
index 27866ef3927..f61969039a8 100644
--- a/apps/encryption/tests/Users/SetupTest.php
+++ b/apps/encryption/tests/Users/SetupTest.php
@@ -5,6 +5,8 @@
* @author Björn Schießle <bjoern@schiessle.org>
* @author Clark Tomlinson <fallen013@gmail.com>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/encryption/tests/UtilTest.php b/apps/encryption/tests/UtilTest.php
index e59565d3b84..1777d1f8f1f 100644
--- a/apps/encryption/tests/UtilTest.php
+++ b/apps/encryption/tests/UtilTest.php
@@ -2,9 +2,12 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Clark Tomlinson <fallen013@gmail.com>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/federatedfilesharing/appinfo/app.php b/apps/federatedfilesharing/appinfo/app.php
index 62265ff0644..f941987365f 100644
--- a/apps/federatedfilesharing/appinfo/app.php
+++ b/apps/federatedfilesharing/appinfo/app.php
@@ -4,6 +4,8 @@
*
* @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Jörn Friedrich Dreyer <jfd@butonic.de>
*
* @license AGPL-3.0
*
diff --git a/apps/federatedfilesharing/appinfo/routes.php b/apps/federatedfilesharing/appinfo/routes.php
index 3c1272840ed..9dafbfdc770 100644
--- a/apps/federatedfilesharing/appinfo/routes.php
+++ b/apps/federatedfilesharing/appinfo/routes.php
@@ -4,6 +4,8 @@
*
* @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/federatedfilesharing/l10n/es_EC.js b/apps/federatedfilesharing/l10n/es_EC.js
new file mode 100644
index 00000000000..c4be26868c2
--- /dev/null
+++ b/apps/federatedfilesharing/l10n/es_EC.js
@@ -0,0 +1,58 @@
+OC.L10N.register(
+ "federatedfilesharing",
+ {
+ "Federated sharing" : "Elementos compartidos",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "¿Desea agregar el elemento compartido remoto {name} de {owner}@{remote}?",
+ "Remote share" : "Elemento compartido remoto",
+ "Remote share password" : "Contraseña del elemento compartido remoto",
+ "Cancel" : "Cancelar",
+ "Add remote share" : "Agregar elemento compartido remoto",
+ "Copy" : "Copiar",
+ "Copied!" : "¡Copiado!",
+ "Not supported!" : "¡No soportado!",
+ "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.",
+ "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.",
+ "Invalid Federated Cloud ID" : "El ID es inválido",
+ "Server to server sharing is not enabled on this server" : "Compartir de servidor a servidor no está habilitado en este servidor",
+ "Couldn't establish a federated share." : "No fue posible establecer el elemento compartido. ",
+ "Couldn't establish a federated share, maybe the password was wrong." : "No fue posible establecer el elemento compartido federado, tal vez la contraseña sea incorrecta. ",
+ "Federated Share request sent, you will receive an invitation. Check your notifications." : "Solicitud de elemento compartido Federado enviada, recibiras una invitación. Verifica tus notificaciones.",
+ "The mountpoint name contains invalid characters." : "El nombre del punto de montaje contiene caracteres inválidos.",
+ "Not allowed to create a federated share with the owner." : "No está permitido crear un elemento compartido federado con el dueño. ",
+ "Invalid or untrusted SSL certificate" : "Certificado SSL inválido o no de confianza",
+ "Could not authenticate to remote share, password might be wrong" : "No fue posible autenticarse ante el elemento compartido remoto, la contraseña puede estar incorrecta",
+ "Storage not valid" : "Almacenamiento inválido",
+ "Federated share added" : "Elemento compartido Federado agregado",
+ "Couldn't add remote share" : "No fue posible agregar el elemento compartido remoto",
+ "Sharing %s failed, because this item is already shared with %s" : "Se presentó una falla al compartir %s, porque este elemento ya se encuentra compartido con %s",
+ "Not allowed to create a federated share with the same user" : "No está permitido crear un elelmento compartido federado con el mismo usuario",
+ "File is already shared with %s" : "El archivo ya ha sido compartido con %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Se presentó una falla al compartir %s, no fue posible encontrar %s, tal vez el servidor no está alcanzable o usa un certificado auto-firmado.",
+ "Could not find share" : "No fue posible encontrar el elemento compartido",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Has recibido \"%3$s\" como un elemento compartido remoto de %1$s (de parte de %2$s)",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Has recibido {share} como un elemento compartido remoto de {user} (de parte de {behalf})",
+ "You received \"%3$s\" as a remote share from %1$s" : "Has recibido \"%3$s\" como un elemento compartido remoto de %1$s",
+ "You received {share} as a remote share from {user}" : "Recibiste {share} como un elemento compartido remoto de {user}",
+ "Accept" : "Aceptar",
+ "Decline" : "Rechazar",
+ "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Compartir conmigo a través de mi ID de Nube Federada #Nextcloud, ver %s",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "Compartir conmigo a través de mi ID de Nube Federada #Nextcloud",
+ "Sharing" : "Compartiendo",
+ "Federated Cloud Sharing" : "Compartiendo en la Nube Federada",
+ "Open documentation" : "Abrir documentación",
+ "Adjust how people can share between servers." : "Ajustar cómo las personas pueden compartir entre servidores. ",
+ "Allow users on this server to send shares to other servers" : "Permitirle a los usuarios de este servidor enviar elementos compartidos a otros servidores",
+ "Allow users on this server to receive shares from other servers" : "Permitirle alos usuarios de este servidor recibir elementos compartidos de otros servidores",
+ "Search global and public address book for users" : "Buscar usuarios en las libretas de contactos globales y públicas",
+ "Allow users to publish their data to a global and public address book" : "Permitirle a los usuarios publicar sus datos a una libreta de direcciones global y pública",
+ "Federated Cloud" : "Nube Federada",
+ "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "¡Puedes compartir con cualquiera que use NextCloud, ownCloud o Pydio! Solo ingresa tu ID de Nube Federada en ventana de diálogo de compartir. Se ve algo así como person@cloud.example.com",
+ "Your Federated Cloud ID:" : "Tu ID de Nube Federada:",
+ "Share it so your friends can share files with you:" : "Compártelo para que tus amigos puedan compartir archivos contigo:",
+ "Add to your website" : "Agregar a tu sitio web",
+ "Share with me via Nextcloud" : "Compartir conmigo vía Nextcloud",
+ "HTML Code:" : "Código HTML:",
+ "Search global and public address book for users and let local users publish their data" : "Buscar una libreta de direcciones global y pública para los usuarios y permitir a los usuarios locales publicar sus datos",
+ "Share it:" : "Compartirlo:"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/federatedfilesharing/l10n/es_EC.json b/apps/federatedfilesharing/l10n/es_EC.json
new file mode 100644
index 00000000000..29ee41a77e4
--- /dev/null
+++ b/apps/federatedfilesharing/l10n/es_EC.json
@@ -0,0 +1,56 @@
+{ "translations": {
+ "Federated sharing" : "Elementos compartidos",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "¿Desea agregar el elemento compartido remoto {name} de {owner}@{remote}?",
+ "Remote share" : "Elemento compartido remoto",
+ "Remote share password" : "Contraseña del elemento compartido remoto",
+ "Cancel" : "Cancelar",
+ "Add remote share" : "Agregar elemento compartido remoto",
+ "Copy" : "Copiar",
+ "Copied!" : "¡Copiado!",
+ "Not supported!" : "¡No soportado!",
+ "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.",
+ "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.",
+ "Invalid Federated Cloud ID" : "El ID es inválido",
+ "Server to server sharing is not enabled on this server" : "Compartir de servidor a servidor no está habilitado en este servidor",
+ "Couldn't establish a federated share." : "No fue posible establecer el elemento compartido. ",
+ "Couldn't establish a federated share, maybe the password was wrong." : "No fue posible establecer el elemento compartido federado, tal vez la contraseña sea incorrecta. ",
+ "Federated Share request sent, you will receive an invitation. Check your notifications." : "Solicitud de elemento compartido Federado enviada, recibiras una invitación. Verifica tus notificaciones.",
+ "The mountpoint name contains invalid characters." : "El nombre del punto de montaje contiene caracteres inválidos.",
+ "Not allowed to create a federated share with the owner." : "No está permitido crear un elemento compartido federado con el dueño. ",
+ "Invalid or untrusted SSL certificate" : "Certificado SSL inválido o no de confianza",
+ "Could not authenticate to remote share, password might be wrong" : "No fue posible autenticarse ante el elemento compartido remoto, la contraseña puede estar incorrecta",
+ "Storage not valid" : "Almacenamiento inválido",
+ "Federated share added" : "Elemento compartido Federado agregado",
+ "Couldn't add remote share" : "No fue posible agregar el elemento compartido remoto",
+ "Sharing %s failed, because this item is already shared with %s" : "Se presentó una falla al compartir %s, porque este elemento ya se encuentra compartido con %s",
+ "Not allowed to create a federated share with the same user" : "No está permitido crear un elelmento compartido federado con el mismo usuario",
+ "File is already shared with %s" : "El archivo ya ha sido compartido con %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Se presentó una falla al compartir %s, no fue posible encontrar %s, tal vez el servidor no está alcanzable o usa un certificado auto-firmado.",
+ "Could not find share" : "No fue posible encontrar el elemento compartido",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Has recibido \"%3$s\" como un elemento compartido remoto de %1$s (de parte de %2$s)",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Has recibido {share} como un elemento compartido remoto de {user} (de parte de {behalf})",
+ "You received \"%3$s\" as a remote share from %1$s" : "Has recibido \"%3$s\" como un elemento compartido remoto de %1$s",
+ "You received {share} as a remote share from {user}" : "Recibiste {share} como un elemento compartido remoto de {user}",
+ "Accept" : "Aceptar",
+ "Decline" : "Rechazar",
+ "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Compartir conmigo a través de mi ID de Nube Federada #Nextcloud, ver %s",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "Compartir conmigo a través de mi ID de Nube Federada #Nextcloud",
+ "Sharing" : "Compartiendo",
+ "Federated Cloud Sharing" : "Compartiendo en la Nube Federada",
+ "Open documentation" : "Abrir documentación",
+ "Adjust how people can share between servers." : "Ajustar cómo las personas pueden compartir entre servidores. ",
+ "Allow users on this server to send shares to other servers" : "Permitirle a los usuarios de este servidor enviar elementos compartidos a otros servidores",
+ "Allow users on this server to receive shares from other servers" : "Permitirle alos usuarios de este servidor recibir elementos compartidos de otros servidores",
+ "Search global and public address book for users" : "Buscar usuarios en las libretas de contactos globales y públicas",
+ "Allow users to publish their data to a global and public address book" : "Permitirle a los usuarios publicar sus datos a una libreta de direcciones global y pública",
+ "Federated Cloud" : "Nube Federada",
+ "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "¡Puedes compartir con cualquiera que use NextCloud, ownCloud o Pydio! Solo ingresa tu ID de Nube Federada en ventana de diálogo de compartir. Se ve algo así como person@cloud.example.com",
+ "Your Federated Cloud ID:" : "Tu ID de Nube Federada:",
+ "Share it so your friends can share files with you:" : "Compártelo para que tus amigos puedan compartir archivos contigo:",
+ "Add to your website" : "Agregar a tu sitio web",
+ "Share with me via Nextcloud" : "Compartir conmigo vía Nextcloud",
+ "HTML Code:" : "Código HTML:",
+ "Search global and public address book for users and let local users publish their data" : "Buscar una libreta de direcciones global y pública para los usuarios y permitir a los usuarios locales publicar sus datos",
+ "Share it:" : "Compartirlo:"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/federatedfilesharing/lib/AddressHandler.php b/apps/federatedfilesharing/lib/AddressHandler.php
index 6c59df06863..78234f17ed7 100644
--- a/apps/federatedfilesharing/lib/AddressHandler.php
+++ b/apps/federatedfilesharing/lib/AddressHandler.php
@@ -2,7 +2,9 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Robin Appelman <robin@icewind.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/federatedfilesharing/lib/AppInfo/Application.php b/apps/federatedfilesharing/lib/AppInfo/Application.php
index a2e2f761862..ba0126c3fa3 100644
--- a/apps/federatedfilesharing/lib/AppInfo/Application.php
+++ b/apps/federatedfilesharing/lib/AppInfo/Application.php
@@ -2,7 +2,10 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php b/apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php
index bb07c2717f9..bd0990e37c2 100644
--- a/apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php
+++ b/apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php
@@ -2,7 +2,11 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php b/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php
index 09bc7333c13..19f98b264e6 100644
--- a/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php
+++ b/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php
@@ -3,8 +3,12 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
* @copyright Copyright (c) 2016, Björn Schießle <bjoern@schiessle.org>
*
+ * @author Allan Nordhøy <epost@anotheragency.no>
* @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php b/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php
index 529d7f7db67..e0985f9aefc 100644
--- a/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php
+++ b/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php
@@ -3,10 +3,13 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/federatedfilesharing/lib/FederatedShareProvider.php b/apps/federatedfilesharing/lib/FederatedShareProvider.php
index 60a54c6ca3c..27606c5fdec 100644
--- a/apps/federatedfilesharing/lib/FederatedShareProvider.php
+++ b/apps/federatedfilesharing/lib/FederatedShareProvider.php
@@ -4,6 +4,9 @@
*
* @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
diff --git a/apps/federatedfilesharing/lib/Notifications.php b/apps/federatedfilesharing/lib/Notifications.php
index 5abac711985..6f3f699e5c4 100644
--- a/apps/federatedfilesharing/lib/Notifications.php
+++ b/apps/federatedfilesharing/lib/Notifications.php
@@ -4,9 +4,7 @@
*
* @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
- * @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
- * @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
*
diff --git a/apps/federatedfilesharing/lib/Notifier.php b/apps/federatedfilesharing/lib/Notifier.php
index 2b7c9f78a75..03491f20af6 100644
--- a/apps/federatedfilesharing/lib/Notifier.php
+++ b/apps/federatedfilesharing/lib/Notifier.php
@@ -4,6 +4,7 @@
*
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Robin Appelman <robin@icewind.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/federatedfilesharing/lib/Settings/Admin.php b/apps/federatedfilesharing/lib/Settings/Admin.php
index 47470fd5841..cbeaa167fff 100644
--- a/apps/federatedfilesharing/lib/Settings/Admin.php
+++ b/apps/federatedfilesharing/lib/Settings/Admin.php
@@ -3,6 +3,8 @@
* @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de>
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
+ * @author Lukas Reschke <lukas@statuscode.ch>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/federatedfilesharing/lib/Settings/Personal.php b/apps/federatedfilesharing/lib/Settings/Personal.php
index 13e96cf872e..e7522d0c963 100644
--- a/apps/federatedfilesharing/lib/Settings/Personal.php
+++ b/apps/federatedfilesharing/lib/Settings/Personal.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Marin Treselj <marin@pixelipo.com>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/federatedfilesharing/tests/AddressHandlerTest.php b/apps/federatedfilesharing/tests/AddressHandlerTest.php
index a9c5cedf49b..358bef428bc 100644
--- a/apps/federatedfilesharing/tests/AddressHandlerTest.php
+++ b/apps/federatedfilesharing/tests/AddressHandlerTest.php
@@ -2,7 +2,10 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
diff --git a/apps/federatedfilesharing/tests/Controller/MountPublicLinkControllerTest.php b/apps/federatedfilesharing/tests/Controller/MountPublicLinkControllerTest.php
index cef341fdc81..e4556972b10 100644
--- a/apps/federatedfilesharing/tests/Controller/MountPublicLinkControllerTest.php
+++ b/apps/federatedfilesharing/tests/Controller/MountPublicLinkControllerTest.php
@@ -5,6 +5,8 @@
*
* @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Robin Appelman <robin@icewind.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php b/apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php
index 585102d687a..d04c75b9a86 100644
--- a/apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php
+++ b/apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php
@@ -2,11 +2,13 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/federatedfilesharing/tests/FederatedShareProviderTest.php b/apps/federatedfilesharing/tests/FederatedShareProviderTest.php
index aa81eef9e63..0a6d95d9d9e 100644
--- a/apps/federatedfilesharing/tests/FederatedShareProviderTest.php
+++ b/apps/federatedfilesharing/tests/FederatedShareProviderTest.php
@@ -2,8 +2,11 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
diff --git a/apps/federatedfilesharing/tests/NotificationsTest.php b/apps/federatedfilesharing/tests/NotificationsTest.php
index 4f70d5f3950..c2ad1b2030d 100644
--- a/apps/federatedfilesharing/tests/NotificationsTest.php
+++ b/apps/federatedfilesharing/tests/NotificationsTest.php
@@ -2,7 +2,9 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/federatedfilesharing/tests/Settings/AdminTest.php b/apps/federatedfilesharing/tests/Settings/AdminTest.php
index 183cd055686..debd2bec63a 100644
--- a/apps/federatedfilesharing/tests/Settings/AdminTest.php
+++ b/apps/federatedfilesharing/tests/Settings/AdminTest.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Lukas Reschke <lukas@statuscode.ch>
*
* @license GNU AGPL version 3 or any later version
diff --git a/apps/federatedfilesharing/tests/TestCase.php b/apps/federatedfilesharing/tests/TestCase.php
index b31772e4e9e..35fbd97803e 100644
--- a/apps/federatedfilesharing/tests/TestCase.php
+++ b/apps/federatedfilesharing/tests/TestCase.php
@@ -3,6 +3,8 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
*
* @license AGPL-3.0
*
diff --git a/apps/federatedfilesharing/tests/TokenHandlerTest.php b/apps/federatedfilesharing/tests/TokenHandlerTest.php
index 2025b90e00b..aca6c3d26c1 100644
--- a/apps/federatedfilesharing/tests/TokenHandlerTest.php
+++ b/apps/federatedfilesharing/tests/TokenHandlerTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
diff --git a/apps/federation/appinfo/routes.php b/apps/federation/appinfo/routes.php
index 01c37eab584..065be94f36b 100644
--- a/apps/federation/appinfo/routes.php
+++ b/apps/federation/appinfo/routes.php
@@ -2,7 +2,9 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/federation/l10n/es_EC.js b/apps/federation/l10n/es_EC.js
new file mode 100644
index 00000000000..f67269dab94
--- /dev/null
+++ b/apps/federation/l10n/es_EC.js
@@ -0,0 +1,16 @@
+OC.L10N.register(
+ "federation",
+ {
+ "Added to the list of trusted servers" : "Agregado a la lista de servidores de confianza",
+ "Server is already in the list of trusted servers." : "El servidor ya se encuentra en la lista de servidores de confianza.",
+ "No server to federate with found" : "No se encontraron servidores para integrar a la federación",
+ "Could not add server" : "No fue posible agregar el servidor",
+ "Trusted servers" : "Servidores de confianza",
+ "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.",
+ "Add server automatically once a federated share was created successfully" : "Agregar el servidor automáticamente una vez que se genere exitosamente el elemento compartido federado",
+ "+ Add trusted server" : "+ Agregar servidor de confianza",
+ "Trusted server" : "Servidor de confianza",
+ "Add" : "Agregar",
+ "Federation" : "Federación"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/federation/l10n/es_EC.json b/apps/federation/l10n/es_EC.json
new file mode 100644
index 00000000000..4e87e62726f
--- /dev/null
+++ b/apps/federation/l10n/es_EC.json
@@ -0,0 +1,14 @@
+{ "translations": {
+ "Added to the list of trusted servers" : "Agregado a la lista de servidores de confianza",
+ "Server is already in the list of trusted servers." : "El servidor ya se encuentra en la lista de servidores de confianza.",
+ "No server to federate with found" : "No se encontraron servidores para integrar a la federación",
+ "Could not add server" : "No fue posible agregar el servidor",
+ "Trusted servers" : "Servidores de confianza",
+ "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.",
+ "Add server automatically once a federated share was created successfully" : "Agregar el servidor automáticamente una vez que se genere exitosamente el elemento compartido federado",
+ "+ Add trusted server" : "+ Agregar servidor de confianza",
+ "Trusted server" : "Servidor de confianza",
+ "Add" : "Agregar",
+ "Federation" : "Federación"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/federation/lib/AppInfo/Application.php b/apps/federation/lib/AppInfo/Application.php
index 38bbe293a56..ea8116e4353 100644
--- a/apps/federation/lib/AppInfo/Application.php
+++ b/apps/federation/lib/AppInfo/Application.php
@@ -3,7 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Björn Schießle <bjoern@schiessle.org>
- * @author Robin Appelman <robin@icewind.nl>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/federation/lib/BackgroundJob/GetSharedSecret.php b/apps/federation/lib/BackgroundJob/GetSharedSecret.php
index bf9f58999db..a3b087e12f8 100644
--- a/apps/federation/lib/BackgroundJob/GetSharedSecret.php
+++ b/apps/federation/lib/BackgroundJob/GetSharedSecret.php
@@ -2,9 +2,13 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/federation/lib/BackgroundJob/RequestSharedSecret.php b/apps/federation/lib/BackgroundJob/RequestSharedSecret.php
index 7effb838d8b..0ba4e37f759 100644
--- a/apps/federation/lib/BackgroundJob/RequestSharedSecret.php
+++ b/apps/federation/lib/BackgroundJob/RequestSharedSecret.php
@@ -2,9 +2,13 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/federation/lib/Command/SyncFederationAddressBooks.php b/apps/federation/lib/Command/SyncFederationAddressBooks.php
index db332d3d7ad..3b1f95b0502 100644
--- a/apps/federation/lib/Command/SyncFederationAddressBooks.php
+++ b/apps/federation/lib/Command/SyncFederationAddressBooks.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
diff --git a/apps/federation/lib/Controller/OCSAuthAPIController.php b/apps/federation/lib/Controller/OCSAuthAPIController.php
index b0594877b23..a1284a4e3ad 100644
--- a/apps/federation/lib/Controller/OCSAuthAPIController.php
+++ b/apps/federation/lib/Controller/OCSAuthAPIController.php
@@ -2,8 +2,10 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
diff --git a/apps/federation/lib/Controller/SettingsController.php b/apps/federation/lib/Controller/SettingsController.php
index 68267dcb73c..6e64200dc8c 100644
--- a/apps/federation/lib/Controller/SettingsController.php
+++ b/apps/federation/lib/Controller/SettingsController.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Morris Jobke <hey@morrisjobke.de>
*
diff --git a/apps/federation/lib/DbHandler.php b/apps/federation/lib/DbHandler.php
index 04968daf0fd..abfb4c2f1b9 100644
--- a/apps/federation/lib/DbHandler.php
+++ b/apps/federation/lib/DbHandler.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
diff --git a/apps/federation/lib/Middleware/AddServerMiddleware.php b/apps/federation/lib/Middleware/AddServerMiddleware.php
index 082596216c8..247cc958833 100644
--- a/apps/federation/lib/Middleware/AddServerMiddleware.php
+++ b/apps/federation/lib/Middleware/AddServerMiddleware.php
@@ -2,8 +2,11 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/federation/lib/SyncFederationAddressBooks.php b/apps/federation/lib/SyncFederationAddressBooks.php
index 87419a5ba54..b5cd9a574c4 100644
--- a/apps/federation/lib/SyncFederationAddressBooks.php
+++ b/apps/federation/lib/SyncFederationAddressBooks.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Thomas Müller <thomas.mueller@tmit.eu>
diff --git a/apps/federation/lib/SyncJob.php b/apps/federation/lib/SyncJob.php
index 2e5d1578ba2..0aa1d61affb 100644
--- a/apps/federation/lib/SyncJob.php
+++ b/apps/federation/lib/SyncJob.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/federation/lib/TrustedServers.php b/apps/federation/lib/TrustedServers.php
index 067cf671a96..79cf86ab67b 100644
--- a/apps/federation/lib/TrustedServers.php
+++ b/apps/federation/lib/TrustedServers.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
diff --git a/apps/federation/tests/BackgroundJob/GetSharedSecretTest.php b/apps/federation/tests/BackgroundJob/GetSharedSecretTest.php
index 8759392caea..fca64faebe4 100644
--- a/apps/federation/tests/BackgroundJob/GetSharedSecretTest.php
+++ b/apps/federation/tests/BackgroundJob/GetSharedSecretTest.php
@@ -2,8 +2,10 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/federation/tests/BackgroundJob/RequestSharedSecretTest.php b/apps/federation/tests/BackgroundJob/RequestSharedSecretTest.php
index 276180e5137..33133e3b12f 100644
--- a/apps/federation/tests/BackgroundJob/RequestSharedSecretTest.php
+++ b/apps/federation/tests/BackgroundJob/RequestSharedSecretTest.php
@@ -2,8 +2,10 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/federation/tests/Controller/OCSAuthAPIControllerTest.php b/apps/federation/tests/Controller/OCSAuthAPIControllerTest.php
index ef6c7c80bfc..b489bc16e50 100644
--- a/apps/federation/tests/Controller/OCSAuthAPIControllerTest.php
+++ b/apps/federation/tests/Controller/OCSAuthAPIControllerTest.php
@@ -2,8 +2,10 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/federation/tests/Controller/SettingsControllerTest.php b/apps/federation/tests/Controller/SettingsControllerTest.php
index 2f93ebfeaa1..f023274e3e4 100644
--- a/apps/federation/tests/Controller/SettingsControllerTest.php
+++ b/apps/federation/tests/Controller/SettingsControllerTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/federation/tests/DbHandlerTest.php b/apps/federation/tests/DbHandlerTest.php
index d9f9cf162b6..8a1b9e32755 100644
--- a/apps/federation/tests/DbHandlerTest.php
+++ b/apps/federation/tests/DbHandlerTest.php
@@ -4,6 +4,7 @@
*
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/federation/tests/Middleware/AddServerMiddlewareTest.php b/apps/federation/tests/Middleware/AddServerMiddlewareTest.php
index 6c502c66f5f..4620234d685 100644
--- a/apps/federation/tests/Middleware/AddServerMiddlewareTest.php
+++ b/apps/federation/tests/Middleware/AddServerMiddlewareTest.php
@@ -2,7 +2,9 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/federation/tests/SyncFederationAddressbooksTest.php b/apps/federation/tests/SyncFederationAddressbooksTest.php
index 9ce5efeb457..3ee12c8830c 100644
--- a/apps/federation/tests/SyncFederationAddressbooksTest.php
+++ b/apps/federation/tests/SyncFederationAddressbooksTest.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
diff --git a/apps/federation/tests/TrustedServersTest.php b/apps/federation/tests/TrustedServersTest.php
index 5995c5e4462..c350796a01a 100644
--- a/apps/federation/tests/TrustedServersTest.php
+++ b/apps/federation/tests/TrustedServersTest.php
@@ -2,9 +2,11 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/files/ajax/download.php b/apps/files/ajax/download.php
index 7c33cdec6dd..cc9ae7d566b 100644
--- a/apps/files/ajax/download.php
+++ b/apps/files/ajax/download.php
@@ -5,6 +5,7 @@
* @author Andreas Fischer <bantu@owncloud.com>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Frank Karlitschek <frank@karlitschek.de>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
diff --git a/apps/files/appinfo/app.php b/apps/files/appinfo/app.php
index 63acda3a706..6624740b931 100644
--- a/apps/files/appinfo/app.php
+++ b/apps/files/appinfo/app.php
@@ -2,11 +2,9 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
- * @author Jakob Sack <mail@jakobsack.de>
* @author Joas Schilling <coding@schilljs.com>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Lukas Reschke <lukas@statuscode.ch>
- * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
diff --git a/apps/files/appinfo/routes.php b/apps/files/appinfo/routes.php
index 06d8d39585f..28bc60a31a3 100644
--- a/apps/files/appinfo/routes.php
+++ b/apps/files/appinfo/routes.php
@@ -5,6 +5,7 @@
* @author Bart Visscher <bartv@thisnet.nl>
* @author Christoph Wurst <christoph@owncloud.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Tobias Kaminsky <tobias@kaminsky.me>
* @author Tom Needham <tom@owncloud.com>
diff --git a/apps/files/css/files.scss b/apps/files/css/files.scss
index ef73f0800cb..a3beac152ce 100644
--- a/apps/files/css/files.scss
+++ b/apps/files/css/files.scss
@@ -752,7 +752,7 @@ table.dragshadow td.size {
.quota-container {
height: 5px;
- border-radius: 3px;
+ border-radius: $border-radius;
div {
height: 100%;
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index cdc2e27a612..e34d7fe2550 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -96,7 +96,7 @@
*/
isFileNameValid: function (name) {
var trimmedName = name.trim();
- if (trimmedName === '.' || trimmedName === '..')
+ if (trimmedName === '.' || trimmedName === '..')
{
throw t('files', '"{name}" is an invalid file name.', {name: name});
} else if (trimmedName.length === 0) {
diff --git a/apps/files/l10n/es_EC.js b/apps/files/l10n/es_EC.js
new file mode 100644
index 00000000000..ce1f5db9667
--- /dev/null
+++ b/apps/files/l10n/es_EC.js
@@ -0,0 +1,164 @@
+OC.L10N.register(
+ "files",
+ {
+ "Storage is temporarily not available" : "El almacenamiento no está disponible temporalmente ",
+ "Storage invalid" : "El almacenamiento es inválido",
+ "Unknown error" : "Se presentó un error desconocido",
+ "All files" : "Todos los archivos",
+ "Recent" : "Reciente",
+ "File could not be found" : "No fue posible encontrar el archivo",
+ "Home" : "Inicio",
+ "Close" : "Cerrar",
+ "Favorites" : "Favoritos",
+ "Could not create folder \"{dir}\"" : "No fue posible crear la carpeta \"{dir}\"",
+ "Upload cancelled." : "Carga cancelada.",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "No fue posible cargar {filename} ya que es una carpeta o tiene un tamaño de 0 bytes",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "No tienes suficiente espacio disponible, Estas cargando {size1} pero sólo cuentas con {size2} disponible",
+ "Target folder \"{dir}\" does not exist any more" : "La carpeta destino \"{dir}\" ya no existe",
+ "Not enough free space" : "No cuentas con suficiente espacio libre",
+ "Uploading …" : "Cargando...",
+ "…" : "...",
+ "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
+ "Actions" : "Acciones",
+ "Download" : "Descargar",
+ "Rename" : "Renombrar",
+ "Move or copy" : "Mover o copiar",
+ "Target folder" : "Carpeta destino",
+ "Delete" : "Borrar",
+ "Disconnect storage" : "Desconectar almacenamiento",
+ "Unshare" : "Dejar de compartir",
+ "Could not load info for file \"{file}\"" : "No fue posible cargar información para el archivo \"{file}\"",
+ "Files" : "Archivos",
+ "Details" : "Detalles",
+ "Select" : "Seleccionar",
+ "Pending" : "Pendiente",
+ "Unable to determine date" : "No fue posible determinar la fecha",
+ "This operation is forbidden" : "Esta operación está prohibida",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Esta carpeta no está disponible, por favor verfica las bitácoras o contacta al administrador",
+ "Could not move \"{file}\", target exists" : "No fue posible mover \"{file}\", el destino ya existe",
+ "Could not move \"{file}\"" : "No fue posible mover \"{file}\"",
+ "Could not copy \"{file}\", target exists" : "No se pudo copiar \"{file}\", el destino ya existe",
+ "Could not copy \"{file}\"" : "No se pudo copiar \"{file}\"",
+ "Copied {origin} inside {destination}" : "{origin} fue copiado dentro de {destination}",
+ "Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} y otros {nbfiles} archivos fueron copiados dentro de {destination}",
+ "{newName} already exists" : "{newName} ya existe",
+ "Could not rename \"{fileName}\", it does not exist any more" : "No fue posible renombrar \"{fileName}\", ya no existe",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "El nombre \"{targetName}\" ya está en uso en la carpeta \"{dir}\". Por favor elege un nombre diferete. ",
+ "Could not rename \"{fileName}\"" : "No fue posible renombrar \"{fileName}\"",
+ "Could not create file \"{file}\"" : "No fue posible crear el archivo \"{file}\"",
+ "Could not create file \"{file}\" because it already exists" : "No fue posible crear el archivo\"{file}\" porque ya existe",
+ "Could not create folder \"{dir}\" because it already exists" : "No fue posible crear la carpeta \"{dir}\" porque ya existe",
+ "Error deleting file \"{fileName}\"." : "Se presentó un error al borrar el archivo \"{fileName}\".",
+ "No search results in other folders for {tag}{filter}{endtag}" : "No se encontraron resultados en otras carpetas para {tag}{filter}{endtag}",
+ "Name" : "Nombre",
+ "Size" : "Tamaño",
+ "Modified" : "Modificado",
+ "_%n folder_::_%n folders_" : ["%n carpeta","%n carpetas"],
+ "_%n file_::_%n files_" : ["%n archivo","%n archivos"],
+ "{dirs} and {files}" : "{dirs} y {files}",
+ "_including %n hidden_::_including %n hidden_" : ["incluyendo %n escondido","incluyendo %n ocultos"],
+ "You don’t have permission to upload or create files here" : "No cuentas con los permisos para cargar o crear archivos aquí",
+ "_Uploading %n file_::_Uploading %n files_" : ["Subiendo %n archivo","Cargando %n archivos"],
+ "New" : "Nuevo",
+ "\"{name}\" is an invalid file name." : "\"{name}\" es un nombre de archivo inválido. ",
+ "File name cannot be empty." : "El nombre de archivo no puede estar vacío.",
+ "\"{name}\" is not an allowed filetype" : "\"{name}\" es un tipo de archivo no permitido",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "El espacio de {owner} está lleno. ¡Los archivos ya no se pueden actualizar o sincronizar!",
+ "Your storage is full, files can not be updated or synced anymore!" : "Tu espacio está lleno. ¡Los archivos ya no se pueden actualizar o sincronizar!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "El espacio de {owner} está casi lleno ({usedSpacePercent}%)",
+ "Your storage is almost full ({usedSpacePercent}%)" : "Tu espacio está casi lleno ({usedSpacePercent}%)",
+ "_matches '{filter}'_::_match '{filter}'_" : ["coincide '{filter}'","coincidencia '{filter}'"],
+ "View in folder" : "Ver en la carpeta",
+ "Copied!" : "¡Copiado!",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Copiar liga directa (sólo funciona para usuarios que tienen acceso a este archivo/carpeta)",
+ "Path" : "Ruta",
+ "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
+ "Favorited" : "Marcado como favorito",
+ "Favorite" : "Favorito",
+ "New folder" : "Carpeta nueva",
+ "Upload file" : "Cargar archivo",
+ "Not favorited" : "No es un favorito",
+ "Remove from favorites" : "Eliminar de favoritos",
+ "Add to favorites" : "Agregar a favoritos",
+ "An error occurred while trying to update the tags" : "Se presentó un error al intentar actualizar la etiqueta",
+ "Added to favorites" : "Agregado a los favoritos",
+ "Removed from favorites" : "Eliminado de los favoritos",
+ "You added {file} to your favorites" : "Agregaste {file} a tus favoritos",
+ "You removed {file} from your favorites" : "Eliminaste {file} de tus favoritos",
+ "File changes" : "Cambios al archivo",
+ "Created by {user}" : "Creado por {user}",
+ "Changed by {user}" : "Cambiado por {user}",
+ "Deleted by {user}" : "Borrado por {user}",
+ "Restored by {user}" : "Restaurado por {user}",
+ "Renamed by {user}" : "Renombrado por {user}",
+ "Moved by {user}" : "Movido por {user}",
+ "\"remote user\"" : "\"usuario remoto\"",
+ "You created {file}" : "Creaste {file}",
+ "{user} created {file}" : "{user} creó {file}",
+ "{file} was created in a public folder" : "{file} fue creado en una carpeta pública",
+ "You changed {file}" : "Cambiaste {file}",
+ "{user} changed {file}" : "{user} cambió {file}",
+ "You deleted {file}" : "Borraste {file}",
+ "{user} deleted {file}" : "{user} borró {file}",
+ "You restored {file}" : "Restauraste {file}",
+ "{user} restored {file}" : "{user} restauró {file}",
+ "You renamed {oldfile} to {newfile}" : "Renombraste {oldfile} como {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} renombró {oldfile} como {newfile}",
+ "You moved {oldfile} to {newfile}" : "Moviste {oldfile} a {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} movió {oldfile} a {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Un archivo ha sido agregado o eliminado de tus <strong>favoritos</strong>",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Un archivo o carpeta ha sido <strong>cambiado </strong> o <strong>renombrado</strong>",
+ "A new file or folder has been <strong>created</strong>" : "Un archivo o carpeta ha sido <strong>creado</strong>",
+ "A file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>borrado</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limita las notificaciones de la creación y cambios a tus <strong>archivos favoritos</strong> <em>(sólo flujo)</em>",
+ "A file or folder has been <strong>restored</strong>" : "Un archivo o carpeta ha sido <strong>restaurado</strong>",
+ "Unlimited" : "Ilimitado",
+ "Upload (max. %s)" : "Cargar (max. %s)",
+ "File handling" : "Manejo de archivos",
+ "Maximum upload size" : "Tamaño máximo de carga",
+ "max. possible: " : "max. posible:",
+ "Save" : "Guardar",
+ "With PHP-FPM it might take 5 minutes for changes to be applied." : "Con PHP-FPM podría tomar 5 minutos para que los cambios apliquen. ",
+ "Missing permissions to edit from here." : "Faltan privilegios para editar desde aquí. ",
+ "%s of %s used" : "%s de %s usado",
+ "%s used" : "%s usado",
+ "Settings" : "Configuraciones ",
+ "Show hidden files" : "Mostrar archivos ocultos",
+ "WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Usa esta dirección para <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">acceder tus archivos vía WebDAV</a>",
+ "Cancel upload" : "Cancelar carga",
+ "No files in here" : "No hay archivos aquí",
+ "Upload some content or sync with your devices!" : "¡Carga algún contenido o sincroniza con tus dispositivos!",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Select all" : "Seleccionar todo",
+ "Upload too large" : "La carga es demasido grande",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.",
+ "No favorites yet" : "Aún no hay favoritos",
+ "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ",
+ "Shared with you" : "Compartido con usted",
+ "Shared with others" : "Compartido con otros",
+ "Shared by link" : "Compartido por liga",
+ "Tags" : "Etiquetas",
+ "Deleted files" : "Archivos borrados",
+ "Text file" : "Archivo de texto",
+ "New text file.txt" : "Nuevo ArchivoDeTexto.txt",
+ "Uploading..." : "Cargando...",
+ "..." : "...",
+ "_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["falta {hours}:{minutes}:{seconds} hora","faltan {hours}:{minutes}:{seconds} horas"],
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["falta {minutes}:{seconds} minuto","faltan {minutes}:{seconds} minutos"],
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "_{seconds} second left_::_{seconds} seconds left_" : ["falta {seconds} segundo","faltan {seconds} segundos"],
+ "{seconds}s" : "{seconds}s",
+ "Any moment now..." : "En cualquier momento...",
+ "Soon..." : "Pronto...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "La carga del archivo está en curso. El salir de la página ahora, la cancelará. ",
+ "Move" : "Mover",
+ "Copy local link" : "Copiar liga local",
+ "Folder" : "Carpeta",
+ "Upload" : "Cargar",
+ "A new file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>borrado</strong>",
+ "A new file or folder has been <strong>restored</strong>" : "Un archivo o carpeta ha sido <strong>restaurado</strong>",
+ "No favorites" : "No hay favoritos"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/es_EC.json b/apps/files/l10n/es_EC.json
new file mode 100644
index 00000000000..cabba647c0e
--- /dev/null
+++ b/apps/files/l10n/es_EC.json
@@ -0,0 +1,162 @@
+{ "translations": {
+ "Storage is temporarily not available" : "El almacenamiento no está disponible temporalmente ",
+ "Storage invalid" : "El almacenamiento es inválido",
+ "Unknown error" : "Se presentó un error desconocido",
+ "All files" : "Todos los archivos",
+ "Recent" : "Reciente",
+ "File could not be found" : "No fue posible encontrar el archivo",
+ "Home" : "Inicio",
+ "Close" : "Cerrar",
+ "Favorites" : "Favoritos",
+ "Could not create folder \"{dir}\"" : "No fue posible crear la carpeta \"{dir}\"",
+ "Upload cancelled." : "Carga cancelada.",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "No fue posible cargar {filename} ya que es una carpeta o tiene un tamaño de 0 bytes",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "No tienes suficiente espacio disponible, Estas cargando {size1} pero sólo cuentas con {size2} disponible",
+ "Target folder \"{dir}\" does not exist any more" : "La carpeta destino \"{dir}\" ya no existe",
+ "Not enough free space" : "No cuentas con suficiente espacio libre",
+ "Uploading …" : "Cargando...",
+ "…" : "...",
+ "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
+ "Actions" : "Acciones",
+ "Download" : "Descargar",
+ "Rename" : "Renombrar",
+ "Move or copy" : "Mover o copiar",
+ "Target folder" : "Carpeta destino",
+ "Delete" : "Borrar",
+ "Disconnect storage" : "Desconectar almacenamiento",
+ "Unshare" : "Dejar de compartir",
+ "Could not load info for file \"{file}\"" : "No fue posible cargar información para el archivo \"{file}\"",
+ "Files" : "Archivos",
+ "Details" : "Detalles",
+ "Select" : "Seleccionar",
+ "Pending" : "Pendiente",
+ "Unable to determine date" : "No fue posible determinar la fecha",
+ "This operation is forbidden" : "Esta operación está prohibida",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Esta carpeta no está disponible, por favor verfica las bitácoras o contacta al administrador",
+ "Could not move \"{file}\", target exists" : "No fue posible mover \"{file}\", el destino ya existe",
+ "Could not move \"{file}\"" : "No fue posible mover \"{file}\"",
+ "Could not copy \"{file}\", target exists" : "No se pudo copiar \"{file}\", el destino ya existe",
+ "Could not copy \"{file}\"" : "No se pudo copiar \"{file}\"",
+ "Copied {origin} inside {destination}" : "{origin} fue copiado dentro de {destination}",
+ "Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} y otros {nbfiles} archivos fueron copiados dentro de {destination}",
+ "{newName} already exists" : "{newName} ya existe",
+ "Could not rename \"{fileName}\", it does not exist any more" : "No fue posible renombrar \"{fileName}\", ya no existe",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "El nombre \"{targetName}\" ya está en uso en la carpeta \"{dir}\". Por favor elege un nombre diferete. ",
+ "Could not rename \"{fileName}\"" : "No fue posible renombrar \"{fileName}\"",
+ "Could not create file \"{file}\"" : "No fue posible crear el archivo \"{file}\"",
+ "Could not create file \"{file}\" because it already exists" : "No fue posible crear el archivo\"{file}\" porque ya existe",
+ "Could not create folder \"{dir}\" because it already exists" : "No fue posible crear la carpeta \"{dir}\" porque ya existe",
+ "Error deleting file \"{fileName}\"." : "Se presentó un error al borrar el archivo \"{fileName}\".",
+ "No search results in other folders for {tag}{filter}{endtag}" : "No se encontraron resultados en otras carpetas para {tag}{filter}{endtag}",
+ "Name" : "Nombre",
+ "Size" : "Tamaño",
+ "Modified" : "Modificado",
+ "_%n folder_::_%n folders_" : ["%n carpeta","%n carpetas"],
+ "_%n file_::_%n files_" : ["%n archivo","%n archivos"],
+ "{dirs} and {files}" : "{dirs} y {files}",
+ "_including %n hidden_::_including %n hidden_" : ["incluyendo %n escondido","incluyendo %n ocultos"],
+ "You don’t have permission to upload or create files here" : "No cuentas con los permisos para cargar o crear archivos aquí",
+ "_Uploading %n file_::_Uploading %n files_" : ["Subiendo %n archivo","Cargando %n archivos"],
+ "New" : "Nuevo",
+ "\"{name}\" is an invalid file name." : "\"{name}\" es un nombre de archivo inválido. ",
+ "File name cannot be empty." : "El nombre de archivo no puede estar vacío.",
+ "\"{name}\" is not an allowed filetype" : "\"{name}\" es un tipo de archivo no permitido",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "El espacio de {owner} está lleno. ¡Los archivos ya no se pueden actualizar o sincronizar!",
+ "Your storage is full, files can not be updated or synced anymore!" : "Tu espacio está lleno. ¡Los archivos ya no se pueden actualizar o sincronizar!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "El espacio de {owner} está casi lleno ({usedSpacePercent}%)",
+ "Your storage is almost full ({usedSpacePercent}%)" : "Tu espacio está casi lleno ({usedSpacePercent}%)",
+ "_matches '{filter}'_::_match '{filter}'_" : ["coincide '{filter}'","coincidencia '{filter}'"],
+ "View in folder" : "Ver en la carpeta",
+ "Copied!" : "¡Copiado!",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Copiar liga directa (sólo funciona para usuarios que tienen acceso a este archivo/carpeta)",
+ "Path" : "Ruta",
+ "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
+ "Favorited" : "Marcado como favorito",
+ "Favorite" : "Favorito",
+ "New folder" : "Carpeta nueva",
+ "Upload file" : "Cargar archivo",
+ "Not favorited" : "No es un favorito",
+ "Remove from favorites" : "Eliminar de favoritos",
+ "Add to favorites" : "Agregar a favoritos",
+ "An error occurred while trying to update the tags" : "Se presentó un error al intentar actualizar la etiqueta",
+ "Added to favorites" : "Agregado a los favoritos",
+ "Removed from favorites" : "Eliminado de los favoritos",
+ "You added {file} to your favorites" : "Agregaste {file} a tus favoritos",
+ "You removed {file} from your favorites" : "Eliminaste {file} de tus favoritos",
+ "File changes" : "Cambios al archivo",
+ "Created by {user}" : "Creado por {user}",
+ "Changed by {user}" : "Cambiado por {user}",
+ "Deleted by {user}" : "Borrado por {user}",
+ "Restored by {user}" : "Restaurado por {user}",
+ "Renamed by {user}" : "Renombrado por {user}",
+ "Moved by {user}" : "Movido por {user}",
+ "\"remote user\"" : "\"usuario remoto\"",
+ "You created {file}" : "Creaste {file}",
+ "{user} created {file}" : "{user} creó {file}",
+ "{file} was created in a public folder" : "{file} fue creado en una carpeta pública",
+ "You changed {file}" : "Cambiaste {file}",
+ "{user} changed {file}" : "{user} cambió {file}",
+ "You deleted {file}" : "Borraste {file}",
+ "{user} deleted {file}" : "{user} borró {file}",
+ "You restored {file}" : "Restauraste {file}",
+ "{user} restored {file}" : "{user} restauró {file}",
+ "You renamed {oldfile} to {newfile}" : "Renombraste {oldfile} como {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} renombró {oldfile} como {newfile}",
+ "You moved {oldfile} to {newfile}" : "Moviste {oldfile} a {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} movió {oldfile} a {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Un archivo ha sido agregado o eliminado de tus <strong>favoritos</strong>",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Un archivo o carpeta ha sido <strong>cambiado </strong> o <strong>renombrado</strong>",
+ "A new file or folder has been <strong>created</strong>" : "Un archivo o carpeta ha sido <strong>creado</strong>",
+ "A file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>borrado</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limita las notificaciones de la creación y cambios a tus <strong>archivos favoritos</strong> <em>(sólo flujo)</em>",
+ "A file or folder has been <strong>restored</strong>" : "Un archivo o carpeta ha sido <strong>restaurado</strong>",
+ "Unlimited" : "Ilimitado",
+ "Upload (max. %s)" : "Cargar (max. %s)",
+ "File handling" : "Manejo de archivos",
+ "Maximum upload size" : "Tamaño máximo de carga",
+ "max. possible: " : "max. posible:",
+ "Save" : "Guardar",
+ "With PHP-FPM it might take 5 minutes for changes to be applied." : "Con PHP-FPM podría tomar 5 minutos para que los cambios apliquen. ",
+ "Missing permissions to edit from here." : "Faltan privilegios para editar desde aquí. ",
+ "%s of %s used" : "%s de %s usado",
+ "%s used" : "%s usado",
+ "Settings" : "Configuraciones ",
+ "Show hidden files" : "Mostrar archivos ocultos",
+ "WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Usa esta dirección para <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">acceder tus archivos vía WebDAV</a>",
+ "Cancel upload" : "Cancelar carga",
+ "No files in here" : "No hay archivos aquí",
+ "Upload some content or sync with your devices!" : "¡Carga algún contenido o sincroniza con tus dispositivos!",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Select all" : "Seleccionar todo",
+ "Upload too large" : "La carga es demasido grande",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.",
+ "No favorites yet" : "Aún no hay favoritos",
+ "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ",
+ "Shared with you" : "Compartido con usted",
+ "Shared with others" : "Compartido con otros",
+ "Shared by link" : "Compartido por liga",
+ "Tags" : "Etiquetas",
+ "Deleted files" : "Archivos borrados",
+ "Text file" : "Archivo de texto",
+ "New text file.txt" : "Nuevo ArchivoDeTexto.txt",
+ "Uploading..." : "Cargando...",
+ "..." : "...",
+ "_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["falta {hours}:{minutes}:{seconds} hora","faltan {hours}:{minutes}:{seconds} horas"],
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["falta {minutes}:{seconds} minuto","faltan {minutes}:{seconds} minutos"],
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "_{seconds} second left_::_{seconds} seconds left_" : ["falta {seconds} segundo","faltan {seconds} segundos"],
+ "{seconds}s" : "{seconds}s",
+ "Any moment now..." : "En cualquier momento...",
+ "Soon..." : "Pronto...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "La carga del archivo está en curso. El salir de la página ahora, la cancelará. ",
+ "Move" : "Mover",
+ "Copy local link" : "Copiar liga local",
+ "Folder" : "Carpeta",
+ "Upload" : "Cargar",
+ "A new file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>borrado</strong>",
+ "A new file or folder has been <strong>restored</strong>" : "Un archivo o carpeta ha sido <strong>restaurado</strong>",
+ "No favorites" : "No hay favoritos"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js
index 9574a557cd3..ee0e05e70fd 100644
--- a/apps/files/l10n/fr.js
+++ b/apps/files/l10n/fr.js
@@ -77,6 +77,7 @@ OC.L10N.register(
"Favorite" : "Favoris",
"New folder" : "Nouveau dossier",
"Upload file" : "Téléverser un fichier",
+ "Not favorited" : "Non marqué comme favori",
"Remove from favorites" : "Retirer des favoris",
"Add to favorites" : "Ajouter aux favoris",
"An error occurred while trying to update the tags" : "Une erreur est survenue lors de la mise à jour des étiquettes",
diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json
index 21074489eec..990624b07f6 100644
--- a/apps/files/l10n/fr.json
+++ b/apps/files/l10n/fr.json
@@ -75,6 +75,7 @@
"Favorite" : "Favoris",
"New folder" : "Nouveau dossier",
"Upload file" : "Téléverser un fichier",
+ "Not favorited" : "Non marqué comme favori",
"Remove from favorites" : "Retirer des favoris",
"Add to favorites" : "Ajouter aux favoris",
"An error occurred while trying to update the tags" : "Une erreur est survenue lors de la mise à jour des étiquettes",
diff --git a/apps/files/lib/Activity/FavoriteProvider.php b/apps/files/lib/Activity/FavoriteProvider.php
index 318ce66e672..787978babed 100644
--- a/apps/files/lib/Activity/FavoriteProvider.php
+++ b/apps/files/lib/Activity/FavoriteProvider.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files/lib/Activity/Filter/Favorites.php b/apps/files/lib/Activity/Filter/Favorites.php
index 2639ae847fc..0cb03eec2b2 100644
--- a/apps/files/lib/Activity/Filter/Favorites.php
+++ b/apps/files/lib/Activity/Filter/Favorites.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files/lib/Activity/Filter/FileChanges.php b/apps/files/lib/Activity/Filter/FileChanges.php
index d8d1a698816..122dc4250f9 100644
--- a/apps/files/lib/Activity/Filter/FileChanges.php
+++ b/apps/files/lib/Activity/Filter/FileChanges.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files/lib/Activity/Provider.php b/apps/files/lib/Activity/Provider.php
index 736b930b7aa..3da1f3c1157 100644
--- a/apps/files/lib/Activity/Provider.php
+++ b/apps/files/lib/Activity/Provider.php
@@ -2,6 +2,9 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files/lib/Activity/Settings/FavoriteAction.php b/apps/files/lib/Activity/Settings/FavoriteAction.php
index 509c0883e1e..8f798d6e5d3 100644
--- a/apps/files/lib/Activity/Settings/FavoriteAction.php
+++ b/apps/files/lib/Activity/Settings/FavoriteAction.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files/lib/Activity/Settings/FileChanged.php b/apps/files/lib/Activity/Settings/FileChanged.php
index 1c20fb6f01a..f89c088e1bd 100644
--- a/apps/files/lib/Activity/Settings/FileChanged.php
+++ b/apps/files/lib/Activity/Settings/FileChanged.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files/lib/Activity/Settings/FileCreated.php b/apps/files/lib/Activity/Settings/FileCreated.php
index dfde00ae7ec..945d25806a7 100644
--- a/apps/files/lib/Activity/Settings/FileCreated.php
+++ b/apps/files/lib/Activity/Settings/FileCreated.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files/lib/Activity/Settings/FileDeleted.php b/apps/files/lib/Activity/Settings/FileDeleted.php
index 256e412b3f4..34ecc7cb2d7 100644
--- a/apps/files/lib/Activity/Settings/FileDeleted.php
+++ b/apps/files/lib/Activity/Settings/FileDeleted.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files/lib/Activity/Settings/FileFavorite.php b/apps/files/lib/Activity/Settings/FileFavorite.php
index b2f20688df9..ae0a4cae674 100644
--- a/apps/files/lib/Activity/Settings/FileFavorite.php
+++ b/apps/files/lib/Activity/Settings/FileFavorite.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files/lib/Activity/Settings/FileRestored.php b/apps/files/lib/Activity/Settings/FileRestored.php
index bac5485f5e4..76f2cca5888 100644
--- a/apps/files/lib/Activity/Settings/FileRestored.php
+++ b/apps/files/lib/Activity/Settings/FileRestored.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files/lib/App.php b/apps/files/lib/App.php
index 34d3ab4384c..ca4b0b7f4f0 100644
--- a/apps/files/lib/App.php
+++ b/apps/files/lib/App.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Christopher Schäpers <kondou@ts.unde.re>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
diff --git a/apps/files/lib/AppInfo/Application.php b/apps/files/lib/AppInfo/Application.php
index 43c977655c3..7042af10ca2 100644
--- a/apps/files/lib/AppInfo/Application.php
+++ b/apps/files/lib/AppInfo/Application.php
@@ -3,6 +3,8 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Christoph Wurst <christoph@owncloud.com>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Tobias Kaminsky <tobias@kaminsky.me>
* @author Vincent Petry <pvince81@owncloud.com>
diff --git a/apps/files/lib/Command/ScanAppData.php b/apps/files/lib/Command/ScanAppData.php
index afcdf999d22..f347cb868b1 100644
--- a/apps/files/lib/Command/ScanAppData.php
+++ b/apps/files/lib/Command/ScanAppData.php
@@ -1,6 +1,26 @@
<?php
-
-
+/**
+ *
+ *
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
namespace OCA\Files\Command;
use Doctrine\DBAL\Connection;
diff --git a/apps/files/lib/Command/TransferOwnership.php b/apps/files/lib/Command/TransferOwnership.php
index aa07cf9de91..d175f66d171 100644
--- a/apps/files/lib/Command/TransferOwnership.php
+++ b/apps/files/lib/Command/TransferOwnership.php
@@ -4,7 +4,11 @@
*
* @author Carla Schroder <carla@owncloud.com>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Sujith H <sharidasan@owncloud.com>
* @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
*
diff --git a/apps/files/lib/Controller/ApiController.php b/apps/files/lib/Controller/ApiController.php
index 790da4a184a..a66b1b4d565 100644
--- a/apps/files/lib/Controller/ApiController.php
+++ b/apps/files/lib/Controller/ApiController.php
@@ -2,12 +2,13 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Christoph Wurst <christoph@owncloud.com>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Tobias Kaminsky <tobias@kaminsky.me>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/files/lib/Controller/ViewController.php b/apps/files/lib/Controller/ViewController.php
index bfeb2cafcf6..fa8243822a8 100644
--- a/apps/files/lib/Controller/ViewController.php
+++ b/apps/files/lib/Controller/ViewController.php
@@ -5,7 +5,7 @@
* @author Christoph Wurst <christoph@owncloud.com>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
- * @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/files/lib/Helper.php b/apps/files/lib/Helper.php
index 3eddbbaebf8..ab952c97dfb 100644
--- a/apps/files/lib/Helper.php
+++ b/apps/files/lib/Helper.php
@@ -6,6 +6,7 @@
* @author brumsel <brumsel@losecatcher.de>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Michael Jobst <mjobst+github@tecratech.de>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
diff --git a/apps/files/lib/Service/TagService.php b/apps/files/lib/Service/TagService.php
index cea26d26d16..d812b16c30e 100644
--- a/apps/files/lib/Service/TagService.php
+++ b/apps/files/lib/Service/TagService.php
@@ -4,7 +4,6 @@
*
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/files/lib/Settings/Admin.php b/apps/files/lib/Settings/Admin.php
index faaeb5b89c1..4965c1e6c17 100644
--- a/apps/files/lib/Settings/Admin.php
+++ b/apps/files/lib/Settings/Admin.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de>
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Joas Schilling <coding@schilljs.com>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/files/recentlist.php b/apps/files/recentlist.php
index 1976be4894a..91a9bce06b5 100644
--- a/apps/files/recentlist.php
+++ b/apps/files/recentlist.php
@@ -1,4 +1,26 @@
<?php
+/**
+ *
+ *
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
// Check if we are a user
OCP\User::checkLoggedIn();
diff --git a/apps/files/tests/Activity/Filter/GenericTest.php b/apps/files/tests/Activity/Filter/GenericTest.php
index 3788126dd94..f2b1acba3b3 100644
--- a/apps/files/tests/Activity/Filter/GenericTest.php
+++ b/apps/files/tests/Activity/Filter/GenericTest.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files/tests/Activity/ProviderTest.php b/apps/files/tests/Activity/ProviderTest.php
index 6cb89961a1b..4a835f42d75 100644
--- a/apps/files/tests/Activity/ProviderTest.php
+++ b/apps/files/tests/Activity/ProviderTest.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2017 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files/tests/Activity/Setting/GenericTest.php b/apps/files/tests/Activity/Setting/GenericTest.php
index 5ae15f02a02..a8df291cb80 100644
--- a/apps/files/tests/Activity/Setting/GenericTest.php
+++ b/apps/files/tests/Activity/Setting/GenericTest.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files/tests/BackgroundJob/ScanFilesTest.php b/apps/files/tests/BackgroundJob/ScanFilesTest.php
index 877c3bafd6d..5b5557310d2 100644
--- a/apps/files/tests/BackgroundJob/ScanFilesTest.php
+++ b/apps/files/tests/BackgroundJob/ScanFilesTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/files/tests/Controller/ApiControllerTest.php b/apps/files/tests/Controller/ApiControllerTest.php
index eba87289300..3beabf73ada 100644
--- a/apps/files/tests/Controller/ApiControllerTest.php
+++ b/apps/files/tests/Controller/ApiControllerTest.php
@@ -5,6 +5,7 @@
* @author Christoph Wurst <christoph@owncloud.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/files/tests/Controller/ViewControllerTest.php b/apps/files/tests/Controller/ViewControllerTest.php
index 3d8c8164abb..b4f07b65e76 100644
--- a/apps/files/tests/Controller/ViewControllerTest.php
+++ b/apps/files/tests/Controller/ViewControllerTest.php
@@ -3,8 +3,12 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Christoph Wurst <christoph@owncloud.com>
+ * @author Jan-Christoph Borchardt <hey@jancborchardt.net>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/files/tests/HelperTest.php b/apps/files/tests/HelperTest.php
index 901e86ddb20..34d01bd7bcc 100644
--- a/apps/files/tests/HelperTest.php
+++ b/apps/files/tests/HelperTest.php
@@ -6,6 +6,7 @@
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/files/tests/Settings/AdminTest.php b/apps/files/tests/Settings/AdminTest.php
index 1bcfd111db5..071cef7d75f 100644
--- a/apps/files/tests/Settings/AdminTest.php
+++ b/apps/files/tests/Settings/AdminTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/files_external/ajax/oauth2.php b/apps/files_external/ajax/oauth2.php
index 2510d6ba8cb..9a3f2e0af6a 100644
--- a/apps/files_external/ajax/oauth2.php
+++ b/apps/files_external/ajax/oauth2.php
@@ -2,15 +2,10 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
- * @author Adam Williamson <awilliam@redhat.com>
- * @author Christopher Schäpers <kondou@ts.unde.re>
- * @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Michael Gapczynski <GapczynskiM@gmail.com>
* @author Robin Appelman <robin@icewind.nl>
- * @author Robin McCorkell <robin@mccorkell.me.uk>
* @author Vincent Petry <pvince81@owncloud.com>
- * @author Volkan Gezer <volkangezer@gmail.com>
*
* @license AGPL-3.0
*
diff --git a/apps/files_external/appinfo/app.php b/apps/files_external/appinfo/app.php
index 250cbbd00d1..4a1b7c1b09c 100644
--- a/apps/files_external/appinfo/app.php
+++ b/apps/files_external/appinfo/app.php
@@ -2,13 +2,12 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
- * @author Jan-Christoph Borchardt <hey@jancborchardt.net>
* @author j-ed <juergen@eisfair.org>
+ * @author Jan-Christoph Borchardt <hey@jancborchardt.net>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
- * @author Ross Nicoll <jrn@jrn.me.uk>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/files_external/l10n/es_EC.js b/apps/files_external/l10n/es_EC.js
new file mode 100644
index 00000000000..720a7c663d2
--- /dev/null
+++ b/apps/files_external/l10n/es_EC.js
@@ -0,0 +1,134 @@
+OC.L10N.register(
+ "files_external",
+ {
+ "External storages" : "Almacenamiento externo",
+ "Personal" : "Personal",
+ "System" : "Sistema",
+ "Grant access" : "Conceder acceso",
+ "Error configuring OAuth1" : "Se presentó un error al configurar OAuth1",
+ "Please provide a valid app key and secret." : "Por favor proporciona una llave de aplicación y secreto válidos.",
+ "Error configuring OAuth2" : "Se presentó un error al configurar OAuth2",
+ "Generate keys" : "Generar llaves",
+ "Error generating key pair" : "Se presentó un error al generar el juego de llaves",
+ "All users. Type to select user or group." : "Todos los usuarios. Escribe para seleccionar el usuario o grupo",
+ "(group)" : "(grupo)",
+ "Compatibility with Mac NFD encoding (slow)" : "Compatibilidad con codificación Mac NFD (lenta)",
+ "Admin defined" : "Administrador definido",
+ "Are you sure you want to delete this external storage" : "¿Estás seguro de que quieres borrar este almacenamiento externo?",
+ "Delete storage?" : "¿Borrar almacenamiento?",
+ "Saved" : "Guardado",
+ "Saving..." : "Guardando...",
+ "Save" : "Guardar",
+ "Empty response from the server" : "Respuesta del servidor vacía",
+ "Couldn't access. Please log out and in again to activate this mount point" : "No fue posible accesar. Por favor sal de la sesión y vuelve a entrar para activar este punto de montaje",
+ "Couldn't get the information from the remote server: {code} {type}" : "No fue posible obtener la información del servidor remoto: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "No fue posible obtener la lista de puntos de montaje externos: {type}",
+ "There was an error with message: " : "Se presentó un problema con el mensaje:",
+ "External mount error" : "Error de montaje externo",
+ "external-storage" : "almacenamiento externo",
+ "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "No fue posible obtener el listado de los puntos de motaje de unidades de red Windows. Respuesta vacía del servidor",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Algunos de los puntos de montaje externos configurados no se encuentran conectados. Por favor has click en los renglon(es) en rojo para más información",
+ "Please enter the credentials for the {mount} mount" : "Por favor ingresa las credenciales para el montaje {mount}",
+ "Username" : "Usuario",
+ "Password" : "Contraseña",
+ "Credentials saved" : "Credenciales guardadas",
+ "Credentials saving failed" : "Se ha presentado una falla al guardar las credenciales",
+ "Credentials required" : "Se requieren credenciales",
+ "Storage with ID \"%d\" not found" : "El almacenamiento con ID \"%d\" no fue encontrado",
+ "Invalid backend or authentication mechanism class" : "Backend o clase de mecanismo de autenticación inválido ",
+ "Invalid mount point" : "Punto de montaje inválido",
+ "Objectstore forbidden" : "Objectstore prohibido",
+ "Invalid storage backend \"%s\"" : "Almacenamiento de backend \"%s\" inválido ",
+ "Not permitted to use backend \"%s\"" : "No está permitido usar el backend \"%s\"",
+ "Not permitted to use authentication mechanism \"%s\"" : "No está permitido el uso del mecanismo de autenticación \"%s\"",
+ "Unsatisfied backend parameters" : "Parametros del backend no satisfechos",
+ "Unsatisfied authentication mechanism parameters" : "Parámetros no satisfechos del mecanismo de autenticación",
+ "Insufficient data: %s" : "Datos insuficientes: %s",
+ "%s" : "%s",
+ "Storage with ID \"%d\" is not user editable" : "El almacenamiento con ID \"%d\" no puede ser editado por el usuario",
+ "Access key" : "Llave de acceso",
+ "Secret key" : "Llave secreta",
+ "Builtin" : "Integrado",
+ "None" : "Ninguno",
+ "OAuth1" : "OAuth1",
+ "App key" : "Llave de la aplicación",
+ "App secret" : "Secreto de la aplicación",
+ "OAuth2" : "OAuth2",
+ "Client ID" : "ID del cliente",
+ "Client secret" : "Secreto del cliente",
+ "OpenStack" : "OpenStack",
+ "Tenant name" : "Nombre de inquilino",
+ "Identity endpoint URL" : "URL del punto de enlace de Identidad",
+ "Rackspace" : "Rackspace",
+ "API key" : "Llave de API",
+ "Global credentials" : "Credenciales globales",
+ "Log-in credentials, save in database" : "Credenciales de inicio de sesión, guardar en la base de datos",
+ "Username and password" : "Usuario y contraseña",
+ "Log-in credentials, save in session" : "Credenciales de inicio de sesión, guardar en la sesión",
+ "User entered, store in database" : "Usuario ingresado, almacenar en la base de datos",
+ "RSA public key" : "Llave pública RSA",
+ "Public key" : "Llave pública",
+ "Amazon S3" : "Amazon S3",
+ "Bucket" : "Bucket",
+ "Hostname" : "Nombre del servidor",
+ "Port" : "Puerto",
+ "Region" : "Región",
+ "Enable SSL" : "Habilitar SSL",
+ "Enable Path Style" : "Habilitar Estilo de Ruta",
+ "WebDAV" : "WebDAV",
+ "URL" : "URL",
+ "Remote subfolder" : "Subcarpeta remota",
+ "Secure https://" : "https:// seguro",
+ "FTP" : "FTP",
+ "Host" : "Servidor",
+ "Secure ftps://" : "ftps:// seguro",
+ "Local" : "Local",
+ "Location" : "Ubicación",
+ "Nextcloud" : "Nextcloud",
+ "SFTP" : "SFTP",
+ "Root" : "Raíz",
+ "SFTP with secret key login" : "Inicio de sesión SFTP con llave secreta",
+ "SMB / CIFS" : "SMB / CIFS",
+ "Share" : "Compartir",
+ "Domain" : "Dominio",
+ "SMB / CIFS using OC login" : "SMB / CIFS usando inicio de sesión OC",
+ "Username as share" : "Usuario como elemento compartido",
+ "OpenStack Object Storage" : "OpenStack Object Storage",
+ "Service name" : "Nombre del servicio",
+ "Request timeout (seconds)" : "Tiemo de vida de la solicitud (segudos)",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para cURL en PHP no se encuentra habilitado o instalado. El montaje de %s no es posible. Por favor solicita a tu administador su instalación. ",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para FTP en PHP no se encuentra habilitado o instalado. El montaje de %s no es posible. Por favor solicita a tu administador su instalación. ",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" no se encuentra instalado. El montaje de %s no es posible. Por favor solicita a tu administrador su instalación. ",
+ "No external storage configured" : "No se ha configurado el almacenamiento externo",
+ "You can add external storages in the personal settings" : "Puedes agregar almacenamiento externo en las configuraciones personales",
+ "Name" : "Nombre",
+ "Storage type" : "Tipo de almacenamiento",
+ "Scope" : "Alcance",
+ "Enable encryption" : "Habilitar encripción",
+ "Enable previews" : "Habilitar vistas previas",
+ "Enable sharing" : "Habilitar compartir",
+ "Check for changes" : "Verificar si hay cambios",
+ "Never" : "Nunca",
+ "Once every direct access" : "Una vez cada acceso directo",
+ "Folder name" : "Nombre de la carpeta",
+ "External storage" : "Almacenamiento externo",
+ "Authentication" : "Autenticación",
+ "Configuration" : "Configuración",
+ "Available for" : "Disponible para",
+ "Add storage" : "Agregar almacenamiento",
+ "Advanced settings" : "Configuraciones avanzadas",
+ "Delete" : "Borrar",
+ "Allow users to mount external storage" : "Permitir a los usuarios montar almacenamiento externo",
+ "Allow users to mount the following external storage" : "Permitir a los usuarios montar el siguiente almacenamiento externo",
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "Se presentó una falla al buscar las fichas de solicitud. Por favor verifica que tu llave de aplicación y tu secreto sean correctos. ",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Se presentó una falla al buscar las fichas de acceso. Por favor verifica que tu llave de aplicación y tu secreto sean correctos. ",
+ "Step 1 failed. Exception: %s" : "Falla en el paso 1: Excepción %s",
+ "Step 2 failed. Exception: %s" : "Paso 2 falló. Excepción: %s",
+ "Dropbox App Configuration" : "Configuración de la aplicación Dropbox",
+ "Google Drive App Configuration" : "Configuración de Aplicación Google Drive",
+ "Storage with id \"%i\" not found" : "El almacenamiento con id \"%i\" no fue encontrado",
+ "Storage with id \"%i\" is not user editable" : "El almacenamiento con id \"%i\" no puede ser editado por el usuario",
+ "Dropbox" : "Dropbox",
+ "Google Drive" : "Google Drive"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/es_EC.json b/apps/files_external/l10n/es_EC.json
new file mode 100644
index 00000000000..59b9db811b3
--- /dev/null
+++ b/apps/files_external/l10n/es_EC.json
@@ -0,0 +1,132 @@
+{ "translations": {
+ "External storages" : "Almacenamiento externo",
+ "Personal" : "Personal",
+ "System" : "Sistema",
+ "Grant access" : "Conceder acceso",
+ "Error configuring OAuth1" : "Se presentó un error al configurar OAuth1",
+ "Please provide a valid app key and secret." : "Por favor proporciona una llave de aplicación y secreto válidos.",
+ "Error configuring OAuth2" : "Se presentó un error al configurar OAuth2",
+ "Generate keys" : "Generar llaves",
+ "Error generating key pair" : "Se presentó un error al generar el juego de llaves",
+ "All users. Type to select user or group." : "Todos los usuarios. Escribe para seleccionar el usuario o grupo",
+ "(group)" : "(grupo)",
+ "Compatibility with Mac NFD encoding (slow)" : "Compatibilidad con codificación Mac NFD (lenta)",
+ "Admin defined" : "Administrador definido",
+ "Are you sure you want to delete this external storage" : "¿Estás seguro de que quieres borrar este almacenamiento externo?",
+ "Delete storage?" : "¿Borrar almacenamiento?",
+ "Saved" : "Guardado",
+ "Saving..." : "Guardando...",
+ "Save" : "Guardar",
+ "Empty response from the server" : "Respuesta del servidor vacía",
+ "Couldn't access. Please log out and in again to activate this mount point" : "No fue posible accesar. Por favor sal de la sesión y vuelve a entrar para activar este punto de montaje",
+ "Couldn't get the information from the remote server: {code} {type}" : "No fue posible obtener la información del servidor remoto: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "No fue posible obtener la lista de puntos de montaje externos: {type}",
+ "There was an error with message: " : "Se presentó un problema con el mensaje:",
+ "External mount error" : "Error de montaje externo",
+ "external-storage" : "almacenamiento externo",
+ "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "No fue posible obtener el listado de los puntos de motaje de unidades de red Windows. Respuesta vacía del servidor",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Algunos de los puntos de montaje externos configurados no se encuentran conectados. Por favor has click en los renglon(es) en rojo para más información",
+ "Please enter the credentials for the {mount} mount" : "Por favor ingresa las credenciales para el montaje {mount}",
+ "Username" : "Usuario",
+ "Password" : "Contraseña",
+ "Credentials saved" : "Credenciales guardadas",
+ "Credentials saving failed" : "Se ha presentado una falla al guardar las credenciales",
+ "Credentials required" : "Se requieren credenciales",
+ "Storage with ID \"%d\" not found" : "El almacenamiento con ID \"%d\" no fue encontrado",
+ "Invalid backend or authentication mechanism class" : "Backend o clase de mecanismo de autenticación inválido ",
+ "Invalid mount point" : "Punto de montaje inválido",
+ "Objectstore forbidden" : "Objectstore prohibido",
+ "Invalid storage backend \"%s\"" : "Almacenamiento de backend \"%s\" inválido ",
+ "Not permitted to use backend \"%s\"" : "No está permitido usar el backend \"%s\"",
+ "Not permitted to use authentication mechanism \"%s\"" : "No está permitido el uso del mecanismo de autenticación \"%s\"",
+ "Unsatisfied backend parameters" : "Parametros del backend no satisfechos",
+ "Unsatisfied authentication mechanism parameters" : "Parámetros no satisfechos del mecanismo de autenticación",
+ "Insufficient data: %s" : "Datos insuficientes: %s",
+ "%s" : "%s",
+ "Storage with ID \"%d\" is not user editable" : "El almacenamiento con ID \"%d\" no puede ser editado por el usuario",
+ "Access key" : "Llave de acceso",
+ "Secret key" : "Llave secreta",
+ "Builtin" : "Integrado",
+ "None" : "Ninguno",
+ "OAuth1" : "OAuth1",
+ "App key" : "Llave de la aplicación",
+ "App secret" : "Secreto de la aplicación",
+ "OAuth2" : "OAuth2",
+ "Client ID" : "ID del cliente",
+ "Client secret" : "Secreto del cliente",
+ "OpenStack" : "OpenStack",
+ "Tenant name" : "Nombre de inquilino",
+ "Identity endpoint URL" : "URL del punto de enlace de Identidad",
+ "Rackspace" : "Rackspace",
+ "API key" : "Llave de API",
+ "Global credentials" : "Credenciales globales",
+ "Log-in credentials, save in database" : "Credenciales de inicio de sesión, guardar en la base de datos",
+ "Username and password" : "Usuario y contraseña",
+ "Log-in credentials, save in session" : "Credenciales de inicio de sesión, guardar en la sesión",
+ "User entered, store in database" : "Usuario ingresado, almacenar en la base de datos",
+ "RSA public key" : "Llave pública RSA",
+ "Public key" : "Llave pública",
+ "Amazon S3" : "Amazon S3",
+ "Bucket" : "Bucket",
+ "Hostname" : "Nombre del servidor",
+ "Port" : "Puerto",
+ "Region" : "Región",
+ "Enable SSL" : "Habilitar SSL",
+ "Enable Path Style" : "Habilitar Estilo de Ruta",
+ "WebDAV" : "WebDAV",
+ "URL" : "URL",
+ "Remote subfolder" : "Subcarpeta remota",
+ "Secure https://" : "https:// seguro",
+ "FTP" : "FTP",
+ "Host" : "Servidor",
+ "Secure ftps://" : "ftps:// seguro",
+ "Local" : "Local",
+ "Location" : "Ubicación",
+ "Nextcloud" : "Nextcloud",
+ "SFTP" : "SFTP",
+ "Root" : "Raíz",
+ "SFTP with secret key login" : "Inicio de sesión SFTP con llave secreta",
+ "SMB / CIFS" : "SMB / CIFS",
+ "Share" : "Compartir",
+ "Domain" : "Dominio",
+ "SMB / CIFS using OC login" : "SMB / CIFS usando inicio de sesión OC",
+ "Username as share" : "Usuario como elemento compartido",
+ "OpenStack Object Storage" : "OpenStack Object Storage",
+ "Service name" : "Nombre del servicio",
+ "Request timeout (seconds)" : "Tiemo de vida de la solicitud (segudos)",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para cURL en PHP no se encuentra habilitado o instalado. El montaje de %s no es posible. Por favor solicita a tu administador su instalación. ",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para FTP en PHP no se encuentra habilitado o instalado. El montaje de %s no es posible. Por favor solicita a tu administador su instalación. ",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" no se encuentra instalado. El montaje de %s no es posible. Por favor solicita a tu administrador su instalación. ",
+ "No external storage configured" : "No se ha configurado el almacenamiento externo",
+ "You can add external storages in the personal settings" : "Puedes agregar almacenamiento externo en las configuraciones personales",
+ "Name" : "Nombre",
+ "Storage type" : "Tipo de almacenamiento",
+ "Scope" : "Alcance",
+ "Enable encryption" : "Habilitar encripción",
+ "Enable previews" : "Habilitar vistas previas",
+ "Enable sharing" : "Habilitar compartir",
+ "Check for changes" : "Verificar si hay cambios",
+ "Never" : "Nunca",
+ "Once every direct access" : "Una vez cada acceso directo",
+ "Folder name" : "Nombre de la carpeta",
+ "External storage" : "Almacenamiento externo",
+ "Authentication" : "Autenticación",
+ "Configuration" : "Configuración",
+ "Available for" : "Disponible para",
+ "Add storage" : "Agregar almacenamiento",
+ "Advanced settings" : "Configuraciones avanzadas",
+ "Delete" : "Borrar",
+ "Allow users to mount external storage" : "Permitir a los usuarios montar almacenamiento externo",
+ "Allow users to mount the following external storage" : "Permitir a los usuarios montar el siguiente almacenamiento externo",
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "Se presentó una falla al buscar las fichas de solicitud. Por favor verifica que tu llave de aplicación y tu secreto sean correctos. ",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Se presentó una falla al buscar las fichas de acceso. Por favor verifica que tu llave de aplicación y tu secreto sean correctos. ",
+ "Step 1 failed. Exception: %s" : "Falla en el paso 1: Excepción %s",
+ "Step 2 failed. Exception: %s" : "Paso 2 falló. Excepción: %s",
+ "Dropbox App Configuration" : "Configuración de la aplicación Dropbox",
+ "Google Drive App Configuration" : "Configuración de Aplicación Google Drive",
+ "Storage with id \"%i\" not found" : "El almacenamiento con id \"%i\" no fue encontrado",
+ "Storage with id \"%i\" is not user editable" : "El almacenamiento con id \"%i\" no puede ser editado por el usuario",
+ "Dropbox" : "Dropbox",
+ "Google Drive" : "Google Drive"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files_external/l10n/zh_TW.js b/apps/files_external/l10n/zh_TW.js
index d18680efaac..8e4f1b9669a 100644
--- a/apps/files_external/l10n/zh_TW.js
+++ b/apps/files_external/l10n/zh_TW.js
@@ -12,6 +12,9 @@ OC.L10N.register(
"Error generating key pair" : "產生金鑰對錯誤",
"All users. Type to select user or group." : "所有人都可以使用,或者選擇特定使用者、群組",
"(group)" : "(群組)",
+ "Admin defined" : "管理者定義",
+ "Are you sure you want to delete this external storage" : "您確定要刪除額外的空間?",
+ "Delete storage?" : "刪除空間",
"Saved" : "已儲存",
"Saving..." : "儲存中...",
"Save" : "儲存",
@@ -23,6 +26,8 @@ OC.L10N.register(
"external-storage" : "外部儲存",
"Username" : "使用者名稱",
"Password" : "密碼",
+ "Credentials saved" : "已儲存憑證",
+ "Credentials saving failed" : "憑證儲存失敗",
"Invalid backend or authentication mechanism class" : "無效的後端處理或是驗證方式",
"Invalid mount point" : "無效的掛載點",
"Objectstore forbidden" : "物件儲存禁止存取",
@@ -35,6 +40,7 @@ OC.L10N.register(
"%s" : "%s",
"Access key" : "存取金鑰",
"Secret key" : "私密金鑰",
+ "Builtin" : "公告",
"None" : "無",
"App key" : "App 金鑰",
"App secret" : "App 密碼",
@@ -64,7 +70,9 @@ OC.L10N.register(
"Secure ftps://" : "安全 ftps://",
"Local" : "本地",
"Location" : "地點",
+ "Nextcloud" : "Nextcloud",
"SFTP" : "安全檔案傳輸協定-SFTP",
+ "Root" : "Root",
"SFTP with secret key login" : "以密碼金鑰登入SFTP",
"SMB / CIFS" : "伺服器訊息區塊-SMB/網路文件共享系統 (CIFS)",
"Share" : "分享",
diff --git a/apps/files_external/l10n/zh_TW.json b/apps/files_external/l10n/zh_TW.json
index a2b5b8f8e81..21a8d621c5b 100644
--- a/apps/files_external/l10n/zh_TW.json
+++ b/apps/files_external/l10n/zh_TW.json
@@ -10,6 +10,9 @@
"Error generating key pair" : "產生金鑰對錯誤",
"All users. Type to select user or group." : "所有人都可以使用,或者選擇特定使用者、群組",
"(group)" : "(群組)",
+ "Admin defined" : "管理者定義",
+ "Are you sure you want to delete this external storage" : "您確定要刪除額外的空間?",
+ "Delete storage?" : "刪除空間",
"Saved" : "已儲存",
"Saving..." : "儲存中...",
"Save" : "儲存",
@@ -21,6 +24,8 @@
"external-storage" : "外部儲存",
"Username" : "使用者名稱",
"Password" : "密碼",
+ "Credentials saved" : "已儲存憑證",
+ "Credentials saving failed" : "憑證儲存失敗",
"Invalid backend or authentication mechanism class" : "無效的後端處理或是驗證方式",
"Invalid mount point" : "無效的掛載點",
"Objectstore forbidden" : "物件儲存禁止存取",
@@ -33,6 +38,7 @@
"%s" : "%s",
"Access key" : "存取金鑰",
"Secret key" : "私密金鑰",
+ "Builtin" : "公告",
"None" : "無",
"App key" : "App 金鑰",
"App secret" : "App 密碼",
@@ -62,7 +68,9 @@
"Secure ftps://" : "安全 ftps://",
"Local" : "本地",
"Location" : "地點",
+ "Nextcloud" : "Nextcloud",
"SFTP" : "安全檔案傳輸協定-SFTP",
+ "Root" : "Root",
"SFTP with secret key login" : "以密碼金鑰登入SFTP",
"SMB / CIFS" : "伺服器訊息區塊-SMB/網路文件共享系統 (CIFS)",
"Share" : "分享",
diff --git a/apps/files_external/lib/Command/Applicable.php b/apps/files_external/lib/Command/Applicable.php
index 2e8311db9ec..d954be48937 100644
--- a/apps/files_external/lib/Command/Applicable.php
+++ b/apps/files_external/lib/Command/Applicable.php
@@ -4,6 +4,7 @@
*
* @author Joas Schilling <coding@schilljs.com>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/files_external/lib/Command/Config.php b/apps/files_external/lib/Command/Config.php
index 5df6f7ee650..375181d35e5 100644
--- a/apps/files_external/lib/Command/Config.php
+++ b/apps/files_external/lib/Command/Config.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Ardinis <Ardinis@users.noreply.github.com>
* @author Joas Schilling <coding@schilljs.com>
* @author Robin Appelman <robin@icewind.nl>
*
diff --git a/apps/files_external/lib/Command/Create.php b/apps/files_external/lib/Command/Create.php
index ff9fa3ae878..2b1ac7af3db 100644
--- a/apps/files_external/lib/Command/Create.php
+++ b/apps/files_external/lib/Command/Create.php
@@ -4,6 +4,7 @@
*
* @author Joas Schilling <coding@schilljs.com>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/files_external/lib/Command/Delete.php b/apps/files_external/lib/Command/Delete.php
index 015995ec14f..1b87a63793d 100644
--- a/apps/files_external/lib/Command/Delete.php
+++ b/apps/files_external/lib/Command/Delete.php
@@ -4,6 +4,7 @@
*
* @author Joas Schilling <coding@schilljs.com>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/files_external/lib/Command/Import.php b/apps/files_external/lib/Command/Import.php
index 712a8851c8a..88e67d703fc 100644
--- a/apps/files_external/lib/Command/Import.php
+++ b/apps/files_external/lib/Command/Import.php
@@ -4,6 +4,7 @@
*
* @author Joas Schilling <coding@schilljs.com>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/files_external/lib/Command/ListCommand.php b/apps/files_external/lib/Command/ListCommand.php
index a9618854b34..efb2669e281 100644
--- a/apps/files_external/lib/Command/ListCommand.php
+++ b/apps/files_external/lib/Command/ListCommand.php
@@ -4,6 +4,7 @@
*
* @author Joas Schilling <coding@schilljs.com>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/files_external/lib/Command/Notify.php b/apps/files_external/lib/Command/Notify.php
index 3c5c3af9ac2..f649d36df78 100644
--- a/apps/files_external/lib/Command/Notify.php
+++ b/apps/files_external/lib/Command/Notify.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016 Robin Appelman <robin@icewind.nl>
*
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/files_external/lib/Config/ExternalMountPoint.php b/apps/files_external/lib/Config/ExternalMountPoint.php
index 76a090b7ec4..76040a839f6 100644
--- a/apps/files_external/lib/Config/ExternalMountPoint.php
+++ b/apps/files_external/lib/Config/ExternalMountPoint.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2017 Robin Appelman <robin@icewind.nl>
*
+ * @author Robin Appelman <robin@icewind.nl>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files_external/lib/Controller/AjaxController.php b/apps/files_external/lib/Controller/AjaxController.php
index 5f5b32cffb6..9c2953851f5 100644
--- a/apps/files_external/lib/Controller/AjaxController.php
+++ b/apps/files_external/lib/Controller/AjaxController.php
@@ -3,9 +3,11 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Martin Mattel <martin.mattel@diemattels.at>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Ross Nicoll <jrn@jrn.me.uk>
*
* @license AGPL-3.0
diff --git a/apps/files_external/lib/Lib/Api.php b/apps/files_external/lib/Lib/Api.php
index 547285a2312..6957af0b7bb 100644
--- a/apps/files_external/lib/Lib/Api.php
+++ b/apps/files_external/lib/Lib/Api.php
@@ -5,7 +5,9 @@
* @author Jesús Macias <jmacias@solidgear.es>
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/files_external/lib/Lib/Auth/AuthMechanism.php b/apps/files_external/lib/Lib/Auth/AuthMechanism.php
index b18579163a3..28d1dde4375 100644
--- a/apps/files_external/lib/Lib/Auth/AuthMechanism.php
+++ b/apps/files_external/lib/Lib/Auth/AuthMechanism.php
@@ -4,6 +4,7 @@
*
* @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/files_external/lib/Lib/Auth/InvalidAuth.php b/apps/files_external/lib/Lib/Auth/InvalidAuth.php
index c99eaa73d16..e22a75adc17 100644
--- a/apps/files_external/lib/Lib/Auth/InvalidAuth.php
+++ b/apps/files_external/lib/Lib/Auth/InvalidAuth.php
@@ -1,8 +1,9 @@
<?php
/**
+ * @copyright Copyright (c) 2016, ownCloud GmbH.
+ *
* @author Vincent Petry <pvince81@owncloud.com>
*
- * @copyright Copyright (c) 2016, ownCloud GmbH.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/files_external/lib/Lib/Auth/Password/GlobalAuth.php b/apps/files_external/lib/Lib/Auth/Password/GlobalAuth.php
index c0ece745aa4..3c5798ccee7 100644
--- a/apps/files_external/lib/Lib/Auth/Password/GlobalAuth.php
+++ b/apps/files_external/lib/Lib/Auth/Password/GlobalAuth.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2015, ownCloud, Inc.
*
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
*
* @license AGPL-3.0
diff --git a/apps/files_external/lib/Lib/Auth/Password/SessionCredentials.php b/apps/files_external/lib/Lib/Auth/Password/SessionCredentials.php
index 30644206c26..9f1ad9e4a32 100644
--- a/apps/files_external/lib/Lib/Auth/Password/SessionCredentials.php
+++ b/apps/files_external/lib/Lib/Auth/Password/SessionCredentials.php
@@ -1,8 +1,8 @@
<?php
-
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Christoph Wurst <christoph@owncloud.com>
* @author Robin McCorkell <robin@mccorkell.me.uk>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/files_external/lib/Lib/Auth/PublicKey/RSA.php b/apps/files_external/lib/Lib/Auth/PublicKey/RSA.php
index 8dedf8c5196..425a601d7e9 100644
--- a/apps/files_external/lib/Lib/Auth/PublicKey/RSA.php
+++ b/apps/files_external/lib/Lib/Auth/PublicKey/RSA.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/files_external/lib/Lib/Backend/Backend.php b/apps/files_external/lib/Lib/Backend/Backend.php
index 3b6f7c3eeed..d00c1802b4b 100644
--- a/apps/files_external/lib/Lib/Backend/Backend.php
+++ b/apps/files_external/lib/Lib/Backend/Backend.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/files_external/lib/Lib/Backend/InvalidBackend.php b/apps/files_external/lib/Lib/Backend/InvalidBackend.php
index 6c8eda22d07..7b3eb26aec9 100644
--- a/apps/files_external/lib/Lib/Backend/InvalidBackend.php
+++ b/apps/files_external/lib/Lib/Backend/InvalidBackend.php
@@ -1,8 +1,11 @@
<?php
/**
+ * @copyright Copyright (c) 2016, ownCloud GmbH.
+ *
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Robin Appelman <robin@icewind.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
- * @copyright Copyright (c) 2016, ownCloud GmbH.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/files_external/lib/Lib/Backend/OwnCloud.php b/apps/files_external/lib/Lib/Backend/OwnCloud.php
index 1304b09c87c..0d3ffb30b40 100644
--- a/apps/files_external/lib/Lib/Backend/OwnCloud.php
+++ b/apps/files_external/lib/Lib/Backend/OwnCloud.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
*
* @license AGPL-3.0
diff --git a/apps/files_external/lib/Lib/FrontendDefinitionTrait.php b/apps/files_external/lib/Lib/FrontendDefinitionTrait.php
index 03b39927d97..25b3cb4fc29 100644
--- a/apps/files_external/lib/Lib/FrontendDefinitionTrait.php
+++ b/apps/files_external/lib/Lib/FrontendDefinitionTrait.php
@@ -4,6 +4,7 @@
*
* @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/files_external/lib/Lib/IdentifierTrait.php b/apps/files_external/lib/Lib/IdentifierTrait.php
index 38f2d4cd33f..a9f553dea89 100644
--- a/apps/files_external/lib/Lib/IdentifierTrait.php
+++ b/apps/files_external/lib/Lib/IdentifierTrait.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/files_external/lib/Lib/InsufficientDataForMeaningfulAnswerException.php b/apps/files_external/lib/Lib/InsufficientDataForMeaningfulAnswerException.php
index 6b335f82b56..dc0799042e5 100644
--- a/apps/files_external/lib/Lib/InsufficientDataForMeaningfulAnswerException.php
+++ b/apps/files_external/lib/Lib/InsufficientDataForMeaningfulAnswerException.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Lukas Reschke <lukas@statuscode.ch>
* @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
*
diff --git a/apps/files_external/lib/Lib/Storage/AmazonS3.php b/apps/files_external/lib/Lib/Storage/AmazonS3.php
index d3157bccf66..7c536443a0e 100644
--- a/apps/files_external/lib/Lib/Storage/AmazonS3.php
+++ b/apps/files_external/lib/Lib/Storage/AmazonS3.php
@@ -4,7 +4,6 @@
*
* @author André Gaul <gaul@web-yard.de>
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
- * @author Bart Visscher <bartv@thisnet.nl>
* @author Christian Berendt <berendt@b1-systems.de>
* @author Christopher T. Johnson <ctjctj@gmail.com>
* @author Johan Björk <johanimon@gmail.com>
diff --git a/apps/files_external/lib/Lib/Storage/FTP.php b/apps/files_external/lib/Lib/Storage/FTP.php
index 1bbdfaba468..427a076ffe1 100644
--- a/apps/files_external/lib/Lib/Storage/FTP.php
+++ b/apps/files_external/lib/Lib/Storage/FTP.php
@@ -5,6 +5,7 @@
* @author Bart Visscher <bartv@thisnet.nl>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Felix Moeller <mail@felixmoeller.de>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Michael Gapczynski <GapczynskiM@gmail.com>
* @author Morris Jobke <hey@morrisjobke.de>
diff --git a/apps/files_external/lib/Lib/Storage/OwnCloud.php b/apps/files_external/lib/Lib/Storage/OwnCloud.php
index 34838b9891e..d846fa811a0 100644
--- a/apps/files_external/lib/Lib/Storage/OwnCloud.php
+++ b/apps/files_external/lib/Lib/Storage/OwnCloud.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin McCorkell <robin@mccorkell.me.uk>
* @author Vincent Petry <pvince81@owncloud.com>
diff --git a/apps/files_external/lib/Lib/Storage/SFTP.php b/apps/files_external/lib/Lib/Storage/SFTP.php
index 8d489551264..22162fa61cf 100644
--- a/apps/files_external/lib/Lib/Storage/SFTP.php
+++ b/apps/files_external/lib/Lib/Storage/SFTP.php
@@ -5,6 +5,7 @@
* @author Andreas Fischer <bantu@owncloud.com>
* @author Bart Visscher <bartv@thisnet.nl>
* @author hkjolhede <hkjolhede@gmail.com>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Lennart Rosam <lennart.rosam@medien-systempartner.de>
* @author Lukas Reschke <lukas@statuscode.ch>
diff --git a/apps/files_external/lib/Lib/Storage/SMB.php b/apps/files_external/lib/Lib/Storage/SMB.php
index 4af6df5d84a..557dafda72c 100644
--- a/apps/files_external/lib/Lib/Storage/SMB.php
+++ b/apps/files_external/lib/Lib/Storage/SMB.php
@@ -4,6 +4,9 @@
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Jesús Macias <jmacias@solidgear.es>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Juan Pablo Villafañez <jvillafanez@solidgear.es>
+ * @author Juan Pablo Villafáñez <jvillafanez@solidgear.es>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Michael Gapczynski <GapczynskiM@gmail.com>
* @author Morris Jobke <hey@morrisjobke.de>
diff --git a/apps/files_external/lib/Lib/Storage/Swift.php b/apps/files_external/lib/Lib/Storage/Swift.php
index a775195e85e..970ade02cea 100644
--- a/apps/files_external/lib/Lib/Storage/Swift.php
+++ b/apps/files_external/lib/Lib/Storage/Swift.php
@@ -2,12 +2,16 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Bart Visscher <bartv@thisnet.nl>
* @author Benjamin Liles <benliles@arch.tamu.edu>
* @author Christian Berendt <berendt@b1-systems.de>
+ * @author Christopher Bartz <bartz@dkrz.de>
* @author Daniel Tosello <tosello.daniel@gmail.com>
* @author Felix Moeller <mail@felixmoeller.de>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
+ * @author Lukas Reschke <lukas@statuscode.ch>
* @author Martin Mattel <martin.mattel@diemattels.at>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Philipp Kapfer <philipp.kapfer@gmx.at>
diff --git a/apps/files_external/lib/Service/DBConfigService.php b/apps/files_external/lib/Service/DBConfigService.php
index 71a77cd4347..c986acbaa5d 100644
--- a/apps/files_external/lib/Service/DBConfigService.php
+++ b/apps/files_external/lib/Service/DBConfigService.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
* @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
*
diff --git a/apps/files_external/lib/Settings/Personal.php b/apps/files_external/lib/Settings/Personal.php
index 946ba9f6944..7aec459bfb7 100644
--- a/apps/files_external/lib/Settings/Personal.php
+++ b/apps/files_external/lib/Settings/Personal.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2017 Robin Appelman <robin@icewind.nl>
*
+ * @author Robin Appelman <robin@icewind.nl>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files_external/lib/Settings/PersonalSection.php b/apps/files_external/lib/Settings/PersonalSection.php
index 669cd941da9..1a2197f60c7 100644
--- a/apps/files_external/lib/Settings/PersonalSection.php
+++ b/apps/files_external/lib/Settings/PersonalSection.php
@@ -2,6 +2,9 @@
/**
* @copyright Copyright (c) 2017 Robin Appelman <robin@icewind.nl>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Robin Appelman <robin@icewind.nl>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files_external/lib/Settings/Section.php b/apps/files_external/lib/Settings/Section.php
index 4829bb60d39..d7ebfd325cb 100644
--- a/apps/files_external/lib/Settings/Section.php
+++ b/apps/files_external/lib/Settings/Section.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de>
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Joas Schilling <coding@schilljs.com>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php
index 4900de57b64..13960dde684 100644
--- a/apps/files_external/lib/config.php
+++ b/apps/files_external/lib/config.php
@@ -15,6 +15,7 @@
* @author Philipp Kapfer <philipp.kapfer@gmx.at>
* @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/files_external/tests/Auth/AuthMechanismTest.php b/apps/files_external/tests/Auth/AuthMechanismTest.php
index 11eee7b8824..ed3b52c1dbb 100644
--- a/apps/files_external/tests/Auth/AuthMechanismTest.php
+++ b/apps/files_external/tests/Auth/AuthMechanismTest.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin McCorkell <robin@mccorkell.me.uk>
*
* @license AGPL-3.0
diff --git a/apps/files_external/tests/Auth/Password/GlobalAuth.php b/apps/files_external/tests/Auth/Password/GlobalAuth.php
index 405fbd2941c..c447be7a669 100644
--- a/apps/files_external/tests/Auth/Password/GlobalAuth.php
+++ b/apps/files_external/tests/Auth/Password/GlobalAuth.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/files_external/tests/Backend/BackendTest.php b/apps/files_external/tests/Backend/BackendTest.php
index 1a1c386240a..bc8aa6a0aee 100644
--- a/apps/files_external/tests/Backend/BackendTest.php
+++ b/apps/files_external/tests/Backend/BackendTest.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin McCorkell <robin@mccorkell.me.uk>
*
* @license AGPL-3.0
diff --git a/apps/files_external/tests/Command/ApplicableTest.php b/apps/files_external/tests/Command/ApplicableTest.php
index 70b18be6b7b..90cfeace361 100644
--- a/apps/files_external/tests/Command/ApplicableTest.php
+++ b/apps/files_external/tests/Command/ApplicableTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/files_external/tests/Command/ListCommandTest.php b/apps/files_external/tests/Command/ListCommandTest.php
index 76a8f98f520..046b4de3282 100644
--- a/apps/files_external/tests/Command/ListCommandTest.php
+++ b/apps/files_external/tests/Command/ListCommandTest.php
@@ -2,8 +2,11 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Christoph Wurst <christoph@owncloud.com>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/files_external/tests/Controller/AjaxControllerTest.php b/apps/files_external/tests/Controller/AjaxControllerTest.php
index 8aba70e0d6b..1153036c414 100644
--- a/apps/files_external/tests/Controller/AjaxControllerTest.php
+++ b/apps/files_external/tests/Controller/AjaxControllerTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/files_external/tests/Controller/GlobalStoragesControllerTest.php b/apps/files_external/tests/Controller/GlobalStoragesControllerTest.php
index 5c334efdf4c..2e0245e76fa 100644
--- a/apps/files_external/tests/Controller/GlobalStoragesControllerTest.php
+++ b/apps/files_external/tests/Controller/GlobalStoragesControllerTest.php
@@ -5,6 +5,7 @@
* @author Joas Schilling <coding@schilljs.com>
* @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/files_external/tests/Controller/StoragesControllerTest.php b/apps/files_external/tests/Controller/StoragesControllerTest.php
index f854b25676c..ad0a3401412 100644
--- a/apps/files_external/tests/Controller/StoragesControllerTest.php
+++ b/apps/files_external/tests/Controller/StoragesControllerTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin McCorkell <robin@mccorkell.me.uk>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/files_external/tests/Controller/UserStoragesControllerTest.php b/apps/files_external/tests/Controller/UserStoragesControllerTest.php
index cdfcbcd1407..817c5b4e5c3 100644
--- a/apps/files_external/tests/Controller/UserStoragesControllerTest.php
+++ b/apps/files_external/tests/Controller/UserStoragesControllerTest.php
@@ -5,6 +5,7 @@
* @author Joas Schilling <coding@schilljs.com>
* @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/files_external/tests/FrontendDefinitionTraitTest.php b/apps/files_external/tests/FrontendDefinitionTraitTest.php
index 4154ac6092c..cdb1cb2b879 100644
--- a/apps/files_external/tests/FrontendDefinitionTraitTest.php
+++ b/apps/files_external/tests/FrontendDefinitionTraitTest.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
*
diff --git a/apps/files_external/tests/Service/BackendServiceTest.php b/apps/files_external/tests/Service/BackendServiceTest.php
index 6916d47a02a..e8a3181658c 100644
--- a/apps/files_external/tests/Service/BackendServiceTest.php
+++ b/apps/files_external/tests/Service/BackendServiceTest.php
@@ -2,7 +2,9 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/files_external/tests/Service/StoragesServiceTest.php b/apps/files_external/tests/Service/StoragesServiceTest.php
index 22409ea9dbd..01e5c4122f2 100644
--- a/apps/files_external/tests/Service/StoragesServiceTest.php
+++ b/apps/files_external/tests/Service/StoragesServiceTest.php
@@ -3,8 +3,10 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/files_external/tests/Service/UserGlobalStoragesServiceTest.php b/apps/files_external/tests/Service/UserGlobalStoragesServiceTest.php
index 72e5dc15147..013af9b0426 100644
--- a/apps/files_external/tests/Service/UserGlobalStoragesServiceTest.php
+++ b/apps/files_external/tests/Service/UserGlobalStoragesServiceTest.php
@@ -5,6 +5,7 @@
* @author Joas Schilling <coding@schilljs.com>
* @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/files_external/tests/Service/UserStoragesServiceTest.php b/apps/files_external/tests/Service/UserStoragesServiceTest.php
index 3a820f644b4..2d90ec3a488 100644
--- a/apps/files_external/tests/Service/UserStoragesServiceTest.php
+++ b/apps/files_external/tests/Service/UserStoragesServiceTest.php
@@ -5,6 +5,7 @@
* @author Joas Schilling <coding@schilljs.com>
* @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/files_external/tests/Settings/SectionTest.php b/apps/files_external/tests/Settings/SectionTest.php
index 93aee61b47d..b83f8f0feef 100644
--- a/apps/files_external/tests/Settings/SectionTest.php
+++ b/apps/files_external/tests/Settings/SectionTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/files_external/tests/Storage/SmbTest.php b/apps/files_external/tests/Storage/SmbTest.php
index 037c4cd4d39..edacb498d5e 100644
--- a/apps/files_external/tests/Storage/SmbTest.php
+++ b/apps/files_external/tests/Storage/SmbTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Juan Pablo Villafáñez <jvillafanez@solidgear.es>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
diff --git a/apps/files_external/tests/StorageConfigTest.php b/apps/files_external/tests/StorageConfigTest.php
index f357c0c6990..37bb27bf510 100644
--- a/apps/files_external/tests/StorageConfigTest.php
+++ b/apps/files_external/tests/StorageConfigTest.php
@@ -4,6 +4,7 @@
*
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin McCorkell <robin@mccorkell.me.uk>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php
index b89d468f9b0..4782ac1b94f 100644
--- a/apps/files_sharing/appinfo/app.php
+++ b/apps/files_sharing/appinfo/app.php
@@ -2,12 +2,13 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
- * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Gadzy <dev@gadzy.fr>
- * @author Joas Schilling <coding@schilljs.com>
- * @author Michael Gapczynski <GapczynskiM@gmail.com>
+ * @author Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @author Jörn Friedrich Dreyer <jfd@butonic.de>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/files_sharing/appinfo/routes.php b/apps/files_sharing/appinfo/routes.php
index 310b1c46eb6..863b27da277 100644
--- a/apps/files_sharing/appinfo/routes.php
+++ b/apps/files_sharing/appinfo/routes.php
@@ -3,12 +3,8 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Björn Schießle <bjoern@schiessle.org>
- * @author Georg Ehrke <georg@owncloud.com>
- * @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
- * @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
*
diff --git a/apps/files_sharing/l10n/es_EC.js b/apps/files_sharing/l10n/es_EC.js
new file mode 100644
index 00000000000..620d498f604
--- /dev/null
+++ b/apps/files_sharing/l10n/es_EC.js
@@ -0,0 +1,115 @@
+OC.L10N.register(
+ "files_sharing",
+ {
+ "Shared with you" : "Compartido contigo",
+ "Shared with others" : "Compartido con otros",
+ "Shared by link" : "Compartido por liga",
+ "Nothing shared with you yet" : "Nada ha sido compartido contigo aún",
+ "Files and folders others share with you will show up here" : "Los archivos y carpetas que sean compartidos contigo se mostrarán aquí",
+ "Nothing shared yet" : "Nada compartido aún",
+ "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí",
+ "No shared links" : "No hay ligas compartidas",
+ "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí",
+ "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta",
+ "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}",
+ "Invalid server URL" : "URL del servidor inválido",
+ "Failed to add the public link to your Nextcloud" : "Se presentó una falla al agregar la liga pública a tu Nextcloud",
+ "Share" : "Compartir",
+ "No expiration date set" : "No se ha establecido la fecha de expiración",
+ "Shared by" : "Compartido por",
+ "Sharing" : "Compartiendo",
+ "File shares" : "Archivos compartidos",
+ "Downloaded via public link" : "Descargado mediante una liga pública",
+ "Downloaded by {email}" : "Descargado por {email}",
+ "{file} downloaded via public link" : "{file} descargado mediante una liga pública",
+ "{email} downloaded {file}" : "{email} descargó {file}",
+ "Shared with group {group}" : "Compartido con el gupo {group}",
+ "Removed share for group {group}" : "Se eliminó el elemento compartido del grupo {group}",
+ "{actor} shared with group {group}" : "{actor} compartió con el grupo {group}",
+ "{actor} removed share for group {group}" : "{actor} eliminó el elemento compartido del grupo {group}",
+ "You shared {file} with group {group}" : "Compartiste {file} con el grupo {group}",
+ "You removed group {group} from {file}" : "Eliminaste al grupo {group} de {file}",
+ "{actor} shared {file} with group {group}" : "{actor} compartió {file} con el grupo {group}",
+ "{actor} removed group {group} from {file}" : "{actor} eliminó el grupo {group} de {file}",
+ "Shared as public link" : "Compartido como una liga pública",
+ "Removed public link" : "Liga pública eliminada",
+ "Public link expired" : "La liga pública ha expirado",
+ "{actor} shared as public link" : "{actor} compartió como una liga pública",
+ "{actor} removed public link" : "{actor} eliminó la liga pública",
+ "Public link of {actor} expired" : "La liga pública de {actor} ha expirado",
+ "You shared {file} as public link" : "Compartiste {file} como una liga pública",
+ "You removed public link for {file}" : "Eliminaste la liga pública de {file}",
+ "Public link expired for {file}" : "La liga pública para {file} ha expirado",
+ "{actor} shared {file} as public link" : "{actor} ha compartido {file} como una liga pública",
+ "{actor} removed public link for {file}" : "{actor} eliminó la liga pública de {file}",
+ "Public link of {actor} for {file} expired" : "La liga pública de {actor} para {file} ha expirado",
+ "{user} accepted the remote share" : "{user} aceptó el elemento compartido remoto",
+ "{user} declined the remote share" : "{user} declinó el elemento compartido remoto",
+ "You received a new remote share {file} from {user}" : "Recibiste un nuevo elemento compartido remoto {file} de {user}",
+ "{user} accepted the remote share of {file}" : "{user} aceptó el elemento compartido remoto de {file}",
+ "{user} declined the remote share of {file}" : "{user} declinó el elemento compartido remoto de {file}",
+ "{user} unshared {file} from you" : "{user} ha dejado de compartir {file} contigo",
+ "Shared with {user}" : "Compartido con {user}",
+ "Removed share for {user}" : "Se eliminó el elemento compartido para {user}",
+ "{actor} shared with {user}" : "{actor} compartió con {user}",
+ "{actor} removed share for {user}" : "{actor} eliminó el elemento compartido para {user}",
+ "Shared by {actor}" : "Compartido por {actor}",
+ "{actor} removed share" : "{actor} eliminó el elemento compartido",
+ "You shared {file} with {user}" : "Compartiste {file} con {user}",
+ "You removed {user} from {file}" : "Eliminaste a {user} de {file}",
+ "{actor} shared {file} with {user}" : "{actor} compartió {file} con {user}",
+ "{actor} removed {user} from {file}" : "{actor} eliminó a {user} de {file}",
+ "{actor} shared {file} with you" : "{actor} ha compartido {file} contigo",
+ "{actor} removed you from {file}" : "{actor} lo eliminó de {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Un archivo o carpeta comparitdo por correo o por liga pública ha sido <strong>descargado</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Un archivo o carpeta fue compartido desde <strong>otro servidor</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Un archivo o carpeta ha sido <strong>compartido</strong>",
+ "Wrong share ID, share doesn't exist" : "ID del elemento compartido equivocado, el elemento compartido no existe",
+ "could not delete share" : "no fue posible borrar el elemento compartido",
+ "Could not delete share" : "No fue posible borrar el elemento compartido",
+ "Please specify a file or folder path" : "Por favor especifica un archivo o ruta de carpeta",
+ "Wrong path, file/folder doesn't exist" : "La ruta es incorrecta, el correo / carpeta no existe ",
+ "Could not create share" : "No fue posible crear el elemento compartido",
+ "invalid permissions" : "permisos inválidos",
+ "Please specify a valid user" : "Por favor especifica un usuario válido",
+ "Group sharing is disabled by the administrator" : "Compartir en grupos está deshabilitado por el administrador",
+ "Please specify a valid group" : "Por favor especifica un grupo válido",
+ "Public link sharing is disabled by the administrator" : "Compartir ligas públicas está deshabilitado por el administrador",
+ "Public upload disabled by the administrator" : "Cargas públicas deshabilitadas por el administrador",
+ "Public upload is only possible for publicly shared folders" : "Las cargas públicas son posibles sólo para carpetas compartidas públicamente",
+ "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD",
+ "Sharing %s failed because the back end does not allow shares from type %s" : "Se presentó una falla al compartir %s, porque el backend no permite elementos compartidos de tipo %s",
+ "You cannot share to a Circle if the app is not enabled" : "No puedes compartir al Círculo si la aplicación no está habilitada",
+ "Please specify a valid circle" : "Por favor especifica un círculo válido",
+ "Unknown share type" : "Tipo de elemento compartido desconocido",
+ "Not a directory" : "No es una carpeta",
+ "Could not lock path" : "No fue posible bloquear la ruta",
+ "Wrong or no update parameter given" : "El parametro de actualización está erróneo o falta",
+ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas",
+ "Cannot increase permissions" : "No es posible incrementar los permisos",
+ "Share API is disabled" : "El API para compartir está deshabilitado",
+ "This share is password-protected" : "Este elemento compartido está protegido con contraseña",
+ "The password is wrong. Try again." : "La contraseña es incorrecta. Por favor inténtalo de nuevo.",
+ "Password" : "Contraseña",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Name" : "Nombre",
+ "Share time" : "Compartido desde",
+ "Expiration date" : "Fecha de expiración",
+ "Sorry, this link doesn’t seem to work anymore." : "Lo sentimos, parece que esta liga ya no funciona. ",
+ "Reasons might be:" : "Las causas podrían ser:",
+ "the item was removed" : "el elemento fue eliminado",
+ "the link expired" : "la liga expiró",
+ "sharing is disabled" : "compartir está deshabilitado",
+ "For more info, please ask the person who sent this link." : "Para mayores informes, contacta a la persona que le envió esta liga.",
+ "shared by %s" : "compartido por %s",
+ "Download" : "Descargar",
+ "Direct link" : "Liga directa",
+ "Add to your Nextcloud" : "Agregar a tu Nextcloud",
+ "Download %s" : "Descargar %s",
+ "Upload files to %s" : "Cargar archivos a %s",
+ "Select or drop files" : "Selecciona o suelta los archivos",
+ "Uploading files…" : "Cargando archivos...",
+ "Uploaded files:" : "Archivos cargados:",
+ "%s is publicly shared" : "%s está compartido públicamente"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/es_EC.json b/apps/files_sharing/l10n/es_EC.json
new file mode 100644
index 00000000000..43064dfb9c5
--- /dev/null
+++ b/apps/files_sharing/l10n/es_EC.json
@@ -0,0 +1,113 @@
+{ "translations": {
+ "Shared with you" : "Compartido contigo",
+ "Shared with others" : "Compartido con otros",
+ "Shared by link" : "Compartido por liga",
+ "Nothing shared with you yet" : "Nada ha sido compartido contigo aún",
+ "Files and folders others share with you will show up here" : "Los archivos y carpetas que sean compartidos contigo se mostrarán aquí",
+ "Nothing shared yet" : "Nada compartido aún",
+ "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí",
+ "No shared links" : "No hay ligas compartidas",
+ "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí",
+ "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta",
+ "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}",
+ "Invalid server URL" : "URL del servidor inválido",
+ "Failed to add the public link to your Nextcloud" : "Se presentó una falla al agregar la liga pública a tu Nextcloud",
+ "Share" : "Compartir",
+ "No expiration date set" : "No se ha establecido la fecha de expiración",
+ "Shared by" : "Compartido por",
+ "Sharing" : "Compartiendo",
+ "File shares" : "Archivos compartidos",
+ "Downloaded via public link" : "Descargado mediante una liga pública",
+ "Downloaded by {email}" : "Descargado por {email}",
+ "{file} downloaded via public link" : "{file} descargado mediante una liga pública",
+ "{email} downloaded {file}" : "{email} descargó {file}",
+ "Shared with group {group}" : "Compartido con el gupo {group}",
+ "Removed share for group {group}" : "Se eliminó el elemento compartido del grupo {group}",
+ "{actor} shared with group {group}" : "{actor} compartió con el grupo {group}",
+ "{actor} removed share for group {group}" : "{actor} eliminó el elemento compartido del grupo {group}",
+ "You shared {file} with group {group}" : "Compartiste {file} con el grupo {group}",
+ "You removed group {group} from {file}" : "Eliminaste al grupo {group} de {file}",
+ "{actor} shared {file} with group {group}" : "{actor} compartió {file} con el grupo {group}",
+ "{actor} removed group {group} from {file}" : "{actor} eliminó el grupo {group} de {file}",
+ "Shared as public link" : "Compartido como una liga pública",
+ "Removed public link" : "Liga pública eliminada",
+ "Public link expired" : "La liga pública ha expirado",
+ "{actor} shared as public link" : "{actor} compartió como una liga pública",
+ "{actor} removed public link" : "{actor} eliminó la liga pública",
+ "Public link of {actor} expired" : "La liga pública de {actor} ha expirado",
+ "You shared {file} as public link" : "Compartiste {file} como una liga pública",
+ "You removed public link for {file}" : "Eliminaste la liga pública de {file}",
+ "Public link expired for {file}" : "La liga pública para {file} ha expirado",
+ "{actor} shared {file} as public link" : "{actor} ha compartido {file} como una liga pública",
+ "{actor} removed public link for {file}" : "{actor} eliminó la liga pública de {file}",
+ "Public link of {actor} for {file} expired" : "La liga pública de {actor} para {file} ha expirado",
+ "{user} accepted the remote share" : "{user} aceptó el elemento compartido remoto",
+ "{user} declined the remote share" : "{user} declinó el elemento compartido remoto",
+ "You received a new remote share {file} from {user}" : "Recibiste un nuevo elemento compartido remoto {file} de {user}",
+ "{user} accepted the remote share of {file}" : "{user} aceptó el elemento compartido remoto de {file}",
+ "{user} declined the remote share of {file}" : "{user} declinó el elemento compartido remoto de {file}",
+ "{user} unshared {file} from you" : "{user} ha dejado de compartir {file} contigo",
+ "Shared with {user}" : "Compartido con {user}",
+ "Removed share for {user}" : "Se eliminó el elemento compartido para {user}",
+ "{actor} shared with {user}" : "{actor} compartió con {user}",
+ "{actor} removed share for {user}" : "{actor} eliminó el elemento compartido para {user}",
+ "Shared by {actor}" : "Compartido por {actor}",
+ "{actor} removed share" : "{actor} eliminó el elemento compartido",
+ "You shared {file} with {user}" : "Compartiste {file} con {user}",
+ "You removed {user} from {file}" : "Eliminaste a {user} de {file}",
+ "{actor} shared {file} with {user}" : "{actor} compartió {file} con {user}",
+ "{actor} removed {user} from {file}" : "{actor} eliminó a {user} de {file}",
+ "{actor} shared {file} with you" : "{actor} ha compartido {file} contigo",
+ "{actor} removed you from {file}" : "{actor} lo eliminó de {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Un archivo o carpeta comparitdo por correo o por liga pública ha sido <strong>descargado</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Un archivo o carpeta fue compartido desde <strong>otro servidor</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Un archivo o carpeta ha sido <strong>compartido</strong>",
+ "Wrong share ID, share doesn't exist" : "ID del elemento compartido equivocado, el elemento compartido no existe",
+ "could not delete share" : "no fue posible borrar el elemento compartido",
+ "Could not delete share" : "No fue posible borrar el elemento compartido",
+ "Please specify a file or folder path" : "Por favor especifica un archivo o ruta de carpeta",
+ "Wrong path, file/folder doesn't exist" : "La ruta es incorrecta, el correo / carpeta no existe ",
+ "Could not create share" : "No fue posible crear el elemento compartido",
+ "invalid permissions" : "permisos inválidos",
+ "Please specify a valid user" : "Por favor especifica un usuario válido",
+ "Group sharing is disabled by the administrator" : "Compartir en grupos está deshabilitado por el administrador",
+ "Please specify a valid group" : "Por favor especifica un grupo válido",
+ "Public link sharing is disabled by the administrator" : "Compartir ligas públicas está deshabilitado por el administrador",
+ "Public upload disabled by the administrator" : "Cargas públicas deshabilitadas por el administrador",
+ "Public upload is only possible for publicly shared folders" : "Las cargas públicas son posibles sólo para carpetas compartidas públicamente",
+ "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD",
+ "Sharing %s failed because the back end does not allow shares from type %s" : "Se presentó una falla al compartir %s, porque el backend no permite elementos compartidos de tipo %s",
+ "You cannot share to a Circle if the app is not enabled" : "No puedes compartir al Círculo si la aplicación no está habilitada",
+ "Please specify a valid circle" : "Por favor especifica un círculo válido",
+ "Unknown share type" : "Tipo de elemento compartido desconocido",
+ "Not a directory" : "No es una carpeta",
+ "Could not lock path" : "No fue posible bloquear la ruta",
+ "Wrong or no update parameter given" : "El parametro de actualización está erróneo o falta",
+ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas",
+ "Cannot increase permissions" : "No es posible incrementar los permisos",
+ "Share API is disabled" : "El API para compartir está deshabilitado",
+ "This share is password-protected" : "Este elemento compartido está protegido con contraseña",
+ "The password is wrong. Try again." : "La contraseña es incorrecta. Por favor inténtalo de nuevo.",
+ "Password" : "Contraseña",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Name" : "Nombre",
+ "Share time" : "Compartido desde",
+ "Expiration date" : "Fecha de expiración",
+ "Sorry, this link doesn’t seem to work anymore." : "Lo sentimos, parece que esta liga ya no funciona. ",
+ "Reasons might be:" : "Las causas podrían ser:",
+ "the item was removed" : "el elemento fue eliminado",
+ "the link expired" : "la liga expiró",
+ "sharing is disabled" : "compartir está deshabilitado",
+ "For more info, please ask the person who sent this link." : "Para mayores informes, contacta a la persona que le envió esta liga.",
+ "shared by %s" : "compartido por %s",
+ "Download" : "Descargar",
+ "Direct link" : "Liga directa",
+ "Add to your Nextcloud" : "Agregar a tu Nextcloud",
+ "Download %s" : "Descargar %s",
+ "Upload files to %s" : "Cargar archivos a %s",
+ "Select or drop files" : "Selecciona o suelta los archivos",
+ "Uploading files…" : "Cargando archivos...",
+ "Uploaded files:" : "Archivos cargados:",
+ "%s is publicly shared" : "%s está compartido públicamente"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files_sharing/lib/Activity/Filter.php b/apps/files_sharing/lib/Activity/Filter.php
index 66ba7f1967b..ab1ad0c8145 100644
--- a/apps/files_sharing/lib/Activity/Filter.php
+++ b/apps/files_sharing/lib/Activity/Filter.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files_sharing/lib/Activity/Providers/Base.php b/apps/files_sharing/lib/Activity/Providers/Base.php
index 3b73c23786e..d9d041f21f8 100644
--- a/apps/files_sharing/lib/Activity/Providers/Base.php
+++ b/apps/files_sharing/lib/Activity/Providers/Base.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files_sharing/lib/Activity/Providers/Downloads.php b/apps/files_sharing/lib/Activity/Providers/Downloads.php
index 1e1688d7b0f..53c60356dd6 100644
--- a/apps/files_sharing/lib/Activity/Providers/Downloads.php
+++ b/apps/files_sharing/lib/Activity/Providers/Downloads.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files_sharing/lib/Activity/Providers/Groups.php b/apps/files_sharing/lib/Activity/Providers/Groups.php
index 683927d5735..53262e19311 100644
--- a/apps/files_sharing/lib/Activity/Providers/Groups.php
+++ b/apps/files_sharing/lib/Activity/Providers/Groups.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files_sharing/lib/Activity/Providers/PublicLinks.php b/apps/files_sharing/lib/Activity/Providers/PublicLinks.php
index 98e4ebda2d8..5dab4179149 100644
--- a/apps/files_sharing/lib/Activity/Providers/PublicLinks.php
+++ b/apps/files_sharing/lib/Activity/Providers/PublicLinks.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files_sharing/lib/Activity/Providers/RemoteShares.php b/apps/files_sharing/lib/Activity/Providers/RemoteShares.php
index f89fb0b0052..4a5c6d7c8e6 100644
--- a/apps/files_sharing/lib/Activity/Providers/RemoteShares.php
+++ b/apps/files_sharing/lib/Activity/Providers/RemoteShares.php
@@ -2,6 +2,9 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Robin Appelman <robin@icewind.nl>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files_sharing/lib/Activity/Providers/Users.php b/apps/files_sharing/lib/Activity/Providers/Users.php
index 02f47f3775a..b5322db4270 100644
--- a/apps/files_sharing/lib/Activity/Providers/Users.php
+++ b/apps/files_sharing/lib/Activity/Providers/Users.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files_sharing/lib/Activity/Settings/PublicLinks.php b/apps/files_sharing/lib/Activity/Settings/PublicLinks.php
index 04fd5e23378..081081b9adf 100644
--- a/apps/files_sharing/lib/Activity/Settings/PublicLinks.php
+++ b/apps/files_sharing/lib/Activity/Settings/PublicLinks.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files_sharing/lib/Activity/Settings/RemoteShare.php b/apps/files_sharing/lib/Activity/Settings/RemoteShare.php
index 2a5cdcd995f..a208ead7ba5 100644
--- a/apps/files_sharing/lib/Activity/Settings/RemoteShare.php
+++ b/apps/files_sharing/lib/Activity/Settings/RemoteShare.php
@@ -2,6 +2,9 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files_sharing/lib/Activity/Settings/Shared.php b/apps/files_sharing/lib/Activity/Settings/Shared.php
index 97318dc79b3..b07872ded99 100644
--- a/apps/files_sharing/lib/Activity/Settings/Shared.php
+++ b/apps/files_sharing/lib/Activity/Settings/Shared.php
@@ -2,6 +2,9 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files_sharing/lib/AppInfo/Application.php b/apps/files_sharing/lib/AppInfo/Application.php
index 3e95c738df8..fe2669640ca 100644
--- a/apps/files_sharing/lib/AppInfo/Application.php
+++ b/apps/files_sharing/lib/AppInfo/Application.php
@@ -6,8 +6,10 @@
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
*
diff --git a/apps/files_sharing/lib/Cache.php b/apps/files_sharing/lib/Cache.php
index 1c311935bb6..b3366b29ee3 100644
--- a/apps/files_sharing/lib/Cache.php
+++ b/apps/files_sharing/lib/Cache.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Christopher Schäpers <kondou@ts.unde.re>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Michael Gapczynski <GapczynskiM@gmail.com>
* @author Morris Jobke <hey@morrisjobke.de>
diff --git a/apps/files_sharing/lib/Capabilities.php b/apps/files_sharing/lib/Capabilities.php
index e8e6a4c26f3..af41add250c 100644
--- a/apps/files_sharing/lib/Capabilities.php
+++ b/apps/files_sharing/lib/Capabilities.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
diff --git a/apps/files_sharing/lib/Command/CleanupRemoteStorages.php b/apps/files_sharing/lib/Command/CleanupRemoteStorages.php
index 389b0dc4985..f269b86ea9f 100644
--- a/apps/files_sharing/lib/Command/CleanupRemoteStorages.php
+++ b/apps/files_sharing/lib/Command/CleanupRemoteStorages.php
@@ -1,8 +1,11 @@
<?php
/**
+ * @copyright Copyright (c) 2016, ownCloud GmbH.
+ *
+ * @author Joas Schilling <coding@schilljs.com>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
- * @copyright Copyright (c) 2016, ownCloud GmbH.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/files_sharing/lib/Controller/PublicPreviewController.php b/apps/files_sharing/lib/Controller/PublicPreviewController.php
index 56d8d94534f..0870995fc7b 100644
--- a/apps/files_sharing/lib/Controller/PublicPreviewController.php
+++ b/apps/files_sharing/lib/Controller/PublicPreviewController.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, Roeland Jago Douma <roeland@famdouma.nl>
*
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license GNU AGPL version 3 or any later version
diff --git a/apps/files_sharing/lib/Controller/RemoteController.php b/apps/files_sharing/lib/Controller/RemoteController.php
index 299b6fe4df7..d6206391180 100644
--- a/apps/files_sharing/lib/Controller/RemoteController.php
+++ b/apps/files_sharing/lib/Controller/RemoteController.php
@@ -2,8 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
- * @author Joas Schilling <coding@schilljs.com>
- * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
diff --git a/apps/files_sharing/lib/Controller/ShareAPIController.php b/apps/files_sharing/lib/Controller/ShareAPIController.php
index a2e7cbf727a..10876e16568 100644
--- a/apps/files_sharing/lib/Controller/ShareAPIController.php
+++ b/apps/files_sharing/lib/Controller/ShareAPIController.php
@@ -2,7 +2,12 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Maxence Lange <maxence@nextcloud.com>
+ * @author Michael Jobst <mjobst+github@tecratech.de>
+ * @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/files_sharing/lib/Controller/ShareController.php b/apps/files_sharing/lib/Controller/ShareController.php
index 9c3f4c6afeb..c51bc1a75dd 100644
--- a/apps/files_sharing/lib/Controller/ShareController.php
+++ b/apps/files_sharing/lib/Controller/ShareController.php
@@ -5,13 +5,16 @@
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
- * @author Georg Ehrke <georg@owncloud.com>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Maxence Lange <maxence@pontapreta.net>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Piotr Filiciak <piotr@filiciak.pl>
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Sascha Sambale <mastixmc@gmail.com>
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/files_sharing/lib/Controller/ShareInfoController.php b/apps/files_sharing/lib/Controller/ShareInfoController.php
index ccf7b7093a5..28bfcd12c24 100644
--- a/apps/files_sharing/lib/Controller/ShareInfoController.php
+++ b/apps/files_sharing/lib/Controller/ShareInfoController.php
@@ -1,5 +1,26 @@
<?php
-
+/**
+ *
+ *
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
namespace OCA\Files_Sharing\Controller;
use OCA\Files_External\NotFoundException;
diff --git a/apps/files_sharing/lib/Controller/ShareesAPIController.php b/apps/files_sharing/lib/Controller/ShareesAPIController.php
index dcecf2c8e08..575bf01fdb0 100644
--- a/apps/files_sharing/lib/Controller/ShareesAPIController.php
+++ b/apps/files_sharing/lib/Controller/ShareesAPIController.php
@@ -2,11 +2,14 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Maxence Lange <maxence@nextcloud.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
- * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
*
* @license AGPL-3.0
*
diff --git a/apps/files_sharing/lib/ExpireSharesJob.php b/apps/files_sharing/lib/ExpireSharesJob.php
index e7e10b30c12..39965336bff 100644
--- a/apps/files_sharing/lib/ExpireSharesJob.php
+++ b/apps/files_sharing/lib/ExpireSharesJob.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
diff --git a/apps/files_sharing/lib/External/Manager.php b/apps/files_sharing/lib/External/Manager.php
index ab20e37a79b..6935685685c 100644
--- a/apps/files_sharing/lib/External/Manager.php
+++ b/apps/files_sharing/lib/External/Manager.php
@@ -2,7 +2,9 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Daniel Hansson <daniel@techandme.se>
* @author Joas Schilling <coding@schilljs.com>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Lukas Reschke <lukas@statuscode.ch>
diff --git a/apps/files_sharing/lib/External/MountProvider.php b/apps/files_sharing/lib/External/MountProvider.php
index 27ee9fcb46b..0b07569b307 100644
--- a/apps/files_sharing/lib/External/MountProvider.php
+++ b/apps/files_sharing/lib/External/MountProvider.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Lukas Reschke <lukas@statuscode.ch>
* @author Robin Appelman <robin@icewind.nl>
*
* @license AGPL-3.0
diff --git a/apps/files_sharing/lib/External/Storage.php b/apps/files_sharing/lib/External/Storage.php
index 95f45dc3691..d07e0556685 100644
--- a/apps/files_sharing/lib/External/Storage.php
+++ b/apps/files_sharing/lib/External/Storage.php
@@ -2,11 +2,13 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/files_sharing/lib/Hooks.php b/apps/files_sharing/lib/Hooks.php
index 821c3046595..97b1079f1eb 100644
--- a/apps/files_sharing/lib/Hooks.php
+++ b/apps/files_sharing/lib/Hooks.php
@@ -7,6 +7,7 @@
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/files_sharing/lib/Middleware/OCSShareAPIMiddleware.php b/apps/files_sharing/lib/Middleware/OCSShareAPIMiddleware.php
index 9df0229ab8c..faf9ef4756d 100644
--- a/apps/files_sharing/lib/Middleware/OCSShareAPIMiddleware.php
+++ b/apps/files_sharing/lib/Middleware/OCSShareAPIMiddleware.php
@@ -1,5 +1,27 @@
<?php
-
+/**
+ *
+ *
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
namespace OCA\Files_Sharing\Middleware;
use OCA\Files_Sharing\Controller\ShareAPIController;
diff --git a/apps/files_sharing/lib/Middleware/ShareInfoMiddleware.php b/apps/files_sharing/lib/Middleware/ShareInfoMiddleware.php
index 56e9b48f570..74a5db4f308 100644
--- a/apps/files_sharing/lib/Middleware/ShareInfoMiddleware.php
+++ b/apps/files_sharing/lib/Middleware/ShareInfoMiddleware.php
@@ -1,5 +1,26 @@
<?php
-
+/**
+ *
+ *
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
namespace OCA\Files_Sharing\Middleware;
use OCA\FederatedFileSharing\FederatedShareProvider;
diff --git a/apps/files_sharing/lib/Middleware/SharingCheckMiddleware.php b/apps/files_sharing/lib/Middleware/SharingCheckMiddleware.php
index e1a77fdec30..c96b559daf5 100644
--- a/apps/files_sharing/lib/Middleware/SharingCheckMiddleware.php
+++ b/apps/files_sharing/lib/Middleware/SharingCheckMiddleware.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
diff --git a/apps/files_sharing/lib/MountProvider.php b/apps/files_sharing/lib/MountProvider.php
index a02d6350499..fd4c537210f 100644
--- a/apps/files_sharing/lib/MountProvider.php
+++ b/apps/files_sharing/lib/MountProvider.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Maxence Lange <maxence@nextcloud.com>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
diff --git a/apps/files_sharing/lib/Scanner.php b/apps/files_sharing/lib/Scanner.php
index 8540d296cd6..18ea879d5d8 100644
--- a/apps/files_sharing/lib/Scanner.php
+++ b/apps/files_sharing/lib/Scanner.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
diff --git a/apps/files_sharing/lib/ShareBackend/Folder.php b/apps/files_sharing/lib/ShareBackend/Folder.php
index 55c2eff6fe0..80b141326d3 100644
--- a/apps/files_sharing/lib/ShareBackend/Folder.php
+++ b/apps/files_sharing/lib/ShareBackend/Folder.php
@@ -4,6 +4,7 @@
*
* @author Bart Visscher <bartv@thisnet.nl>
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Michael Gapczynski <GapczynskiM@gmail.com>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin McCorkell <robin@mccorkell.me.uk>
diff --git a/apps/files_sharing/lib/SharedMount.php b/apps/files_sharing/lib/SharedMount.php
index b42682ab2a8..4f0dc89e997 100644
--- a/apps/files_sharing/lib/SharedMount.php
+++ b/apps/files_sharing/lib/SharedMount.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Frédéric Fortier <frederic.fortier@oronospolytechnique.com>
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
diff --git a/apps/files_sharing/lib/SharedStorage.php b/apps/files_sharing/lib/SharedStorage.php
index 32304afea01..f681854cd2b 100644
--- a/apps/files_sharing/lib/SharedStorage.php
+++ b/apps/files_sharing/lib/SharedStorage.php
@@ -11,6 +11,7 @@
* @author Robin McCorkell <robin@mccorkell.me.uk>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author scambra <sergio@entrecables.com>
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/files_sharing/tests/ApiTest.php b/apps/files_sharing/tests/ApiTest.php
index 8a976108b3f..2279155e914 100644
--- a/apps/files_sharing/tests/ApiTest.php
+++ b/apps/files_sharing/tests/ApiTest.php
@@ -2,7 +2,9 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Jan-Christoph Borchardt <hey@jancborchardt.net>
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
diff --git a/apps/files_sharing/tests/BackendTest.php b/apps/files_sharing/tests/BackendTest.php
index f3ac485c781..897cf7c2de2 100644
--- a/apps/files_sharing/tests/BackendTest.php
+++ b/apps/files_sharing/tests/BackendTest.php
@@ -6,6 +6,7 @@
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/files_sharing/tests/CapabilitiesTest.php b/apps/files_sharing/tests/CapabilitiesTest.php
index e65131bf45f..721dd0fbf5e 100644
--- a/apps/files_sharing/tests/CapabilitiesTest.php
+++ b/apps/files_sharing/tests/CapabilitiesTest.php
@@ -2,7 +2,9 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
diff --git a/apps/files_sharing/tests/Command/CleanupRemoteStoragesTest.php b/apps/files_sharing/tests/Command/CleanupRemoteStoragesTest.php
index 5480874615e..7380f39dfba 100644
--- a/apps/files_sharing/tests/Command/CleanupRemoteStoragesTest.php
+++ b/apps/files_sharing/tests/Command/CleanupRemoteStoragesTest.php
@@ -1,8 +1,10 @@
<?php
/**
+ * @copyright Copyright (c) 2016, ownCloud GmbH.
+ *
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
+ * @author Morris Jobke <hey@morrisjobke.de>
*
- * @copyright Copyright (c) 2016, ownCloud GmbH.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php b/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php
index 3bebb9e1195..c438dac2521 100644
--- a/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php
+++ b/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php
@@ -2,8 +2,11 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
- * @author Björn Schießle <bjoern@schiessle.org>
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/files_sharing/tests/Controller/ShareControllerTest.php b/apps/files_sharing/tests/Controller/ShareControllerTest.php
index 6f0b3f9c2da..6062ff89065 100644
--- a/apps/files_sharing/tests/Controller/ShareControllerTest.php
+++ b/apps/files_sharing/tests/Controller/ShareControllerTest.php
@@ -4,7 +4,7 @@
*
* @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
- * @author Georg Ehrke <georg@owncloud.com>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
diff --git a/apps/files_sharing/tests/Controller/ShareInfoControllerTest.php b/apps/files_sharing/tests/Controller/ShareInfoControllerTest.php
index 497b7f7d5ae..882e858217e 100644
--- a/apps/files_sharing/tests/Controller/ShareInfoControllerTest.php
+++ b/apps/files_sharing/tests/Controller/ShareInfoControllerTest.php
@@ -1,5 +1,26 @@
<?php
-
+/**
+ *
+ *
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
namespace OCA\Files_Sharing\Tests\Controller;
use OCA\Files_Sharing\Controller\ShareInfoController;
diff --git a/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php b/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php
index 2b919f4849d..98ae953a318 100644
--- a/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php
+++ b/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php
@@ -2,8 +2,11 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
- * @author Björn Schießle <bjoern@schiessle.org>
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
diff --git a/apps/files_sharing/tests/DeleteOrphanedSharesJobTest.php b/apps/files_sharing/tests/DeleteOrphanedSharesJobTest.php
index e417fdb74aa..246fe816e54 100644
--- a/apps/files_sharing/tests/DeleteOrphanedSharesJobTest.php
+++ b/apps/files_sharing/tests/DeleteOrphanedSharesJobTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/files_sharing/tests/EncryptedSizePropagationTest.php b/apps/files_sharing/tests/EncryptedSizePropagationTest.php
index 38bbf12177c..ea2d7e786a9 100644
--- a/apps/files_sharing/tests/EncryptedSizePropagationTest.php
+++ b/apps/files_sharing/tests/EncryptedSizePropagationTest.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
* @author Robin Appelman <robin@icewind.nl>
*
diff --git a/apps/files_sharing/tests/ExpireSharesJobTest.php b/apps/files_sharing/tests/ExpireSharesJobTest.php
index 826efc5ed80..46b50c5fac4 100644
--- a/apps/files_sharing/tests/ExpireSharesJobTest.php
+++ b/apps/files_sharing/tests/ExpireSharesJobTest.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
diff --git a/apps/files_sharing/tests/External/ManagerTest.php b/apps/files_sharing/tests/External/ManagerTest.php
index 37319dd17b2..6756f91fb70 100644
--- a/apps/files_sharing/tests/External/ManagerTest.php
+++ b/apps/files_sharing/tests/External/ManagerTest.php
@@ -2,9 +2,11 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
- * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/files_sharing/tests/ExternalStorageTest.php b/apps/files_sharing/tests/ExternalStorageTest.php
index 1246b0edb98..f7345d25e08 100644
--- a/apps/files_sharing/tests/ExternalStorageTest.php
+++ b/apps/files_sharing/tests/ExternalStorageTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
diff --git a/apps/files_sharing/tests/GroupEtagPropagationTest.php b/apps/files_sharing/tests/GroupEtagPropagationTest.php
index e339983b404..206980659c7 100644
--- a/apps/files_sharing/tests/GroupEtagPropagationTest.php
+++ b/apps/files_sharing/tests/GroupEtagPropagationTest.php
@@ -3,8 +3,10 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
*
diff --git a/apps/files_sharing/tests/HelperTest.php b/apps/files_sharing/tests/HelperTest.php
index e1e73ee82c2..4585b7e7ab8 100644
--- a/apps/files_sharing/tests/HelperTest.php
+++ b/apps/files_sharing/tests/HelperTest.php
@@ -5,6 +5,7 @@
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/files_sharing/tests/Middleware/OCSShareAPIMiddlewareTest.php b/apps/files_sharing/tests/Middleware/OCSShareAPIMiddlewareTest.php
index 3b6257adf92..c260a65725d 100644
--- a/apps/files_sharing/tests/Middleware/OCSShareAPIMiddlewareTest.php
+++ b/apps/files_sharing/tests/Middleware/OCSShareAPIMiddlewareTest.php
@@ -1,5 +1,26 @@
<?php
-
+/**
+ *
+ *
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
namespace OCA\Files_Sharing\Tests\Middleware;
use OCA\Files_Sharing\Controller\ShareAPIController;
diff --git a/apps/files_sharing/tests/Middleware/ShareInfoMiddlewareTest.php b/apps/files_sharing/tests/Middleware/ShareInfoMiddlewareTest.php
index 7f81bcbaa51..cbac5c7bef5 100644
--- a/apps/files_sharing/tests/Middleware/ShareInfoMiddlewareTest.php
+++ b/apps/files_sharing/tests/Middleware/ShareInfoMiddlewareTest.php
@@ -1,5 +1,26 @@
<?php
-
+/**
+ *
+ *
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
namespace OCA\Files_Sharing\Tests\Middleware;
use OCA\Files_Sharing\Controller\ShareInfoController;
diff --git a/apps/files_sharing/tests/Middleware/SharingCheckMiddlewareTest.php b/apps/files_sharing/tests/Middleware/SharingCheckMiddlewareTest.php
index 8d7d42722b9..d8676547a76 100644
--- a/apps/files_sharing/tests/Middleware/SharingCheckMiddlewareTest.php
+++ b/apps/files_sharing/tests/Middleware/SharingCheckMiddlewareTest.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
diff --git a/apps/files_sharing/tests/Migration/SetPasswordColumnTest.php b/apps/files_sharing/tests/Migration/SetPasswordColumnTest.php
index 4ae9e428e8d..c4c78b04a23 100644
--- a/apps/files_sharing/tests/Migration/SetPasswordColumnTest.php
+++ b/apps/files_sharing/tests/Migration/SetPasswordColumnTest.php
@@ -2,11 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
- * @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
*
diff --git a/apps/files_sharing/tests/MountProviderTest.php b/apps/files_sharing/tests/MountProviderTest.php
index 68c62427e34..b521e109cf9 100644
--- a/apps/files_sharing/tests/MountProviderTest.php
+++ b/apps/files_sharing/tests/MountProviderTest.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Maxence Lange <maxence@nextcloud.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
diff --git a/apps/files_sharing/tests/SharedMountTest.php b/apps/files_sharing/tests/SharedMountTest.php
index 6f21bd3b92d..1eddbcb64f7 100644
--- a/apps/files_sharing/tests/SharedMountTest.php
+++ b/apps/files_sharing/tests/SharedMountTest.php
@@ -4,6 +4,7 @@
*
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
diff --git a/apps/files_sharing/tests/UpdaterTest.php b/apps/files_sharing/tests/UpdaterTest.php
index c01365a500a..c8d089f54b4 100644
--- a/apps/files_sharing/tests/UpdaterTest.php
+++ b/apps/files_sharing/tests/UpdaterTest.php
@@ -4,6 +4,7 @@
*
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
diff --git a/apps/files_trashbin/ajax/undelete.php b/apps/files_trashbin/ajax/undelete.php
index ba671325372..f7e0594cd8a 100644
--- a/apps/files_trashbin/ajax/undelete.php
+++ b/apps/files_trashbin/ajax/undelete.php
@@ -5,6 +5,7 @@
* @author Bart Visscher <bartv@thisnet.nl>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
diff --git a/apps/files_trashbin/appinfo/app.php b/apps/files_trashbin/appinfo/app.php
index d97f2cd84e5..ad0a4ecd69e 100644
--- a/apps/files_trashbin/appinfo/app.php
+++ b/apps/files_trashbin/appinfo/app.php
@@ -2,10 +2,10 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
- * @author Bart Visscher <bartv@thisnet.nl>
* @author Christopher Schäpers <kondou@ts.unde.re>
* @author Florin Peter <github@florin-peter.de>
- * @author Robin Appelman <robin@icewind.nl>
+ * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
+ * @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Victor Dubiniuk <dubiniuk@owncloud.com>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/files_trashbin/appinfo/routes.php b/apps/files_trashbin/appinfo/routes.php
index 5241bec742e..9243ee7e91c 100644
--- a/apps/files_trashbin/appinfo/routes.php
+++ b/apps/files_trashbin/appinfo/routes.php
@@ -5,7 +5,6 @@
*
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
*
diff --git a/apps/files_trashbin/l10n/es_EC.js b/apps/files_trashbin/l10n/es_EC.js
new file mode 100644
index 00000000000..24cc0e4083e
--- /dev/null
+++ b/apps/files_trashbin/l10n/es_EC.js
@@ -0,0 +1,21 @@
+OC.L10N.register(
+ "files_trashbin",
+ {
+ "Couldn't delete %s permanently" : "No fue posible eliminar %s permanentemente",
+ "Couldn't restore %s" : "No fue posible restaurar %s",
+ "Deleted files" : "Archivos borrados",
+ "Restore" : "Restaurar",
+ "Delete" : "Borrar",
+ "Delete permanently" : "Borrar permanentemente",
+ "Error" : "Error",
+ "This operation is forbidden" : "Esta opración está prohibida",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Este directorio no está disponible, por favor verifica las bitácoras o contacta al administrador",
+ "restored" : "restaurado",
+ "No deleted files" : "No hay archivos borrados",
+ "You will be able to recover deleted files from here" : "Podrás recuperar archivos borrados desde aquí",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Select all" : "Seleccionar todo",
+ "Name" : "Nombre",
+ "Deleted" : "Borrado"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_trashbin/l10n/es_EC.json b/apps/files_trashbin/l10n/es_EC.json
new file mode 100644
index 00000000000..3a539073e8b
--- /dev/null
+++ b/apps/files_trashbin/l10n/es_EC.json
@@ -0,0 +1,19 @@
+{ "translations": {
+ "Couldn't delete %s permanently" : "No fue posible eliminar %s permanentemente",
+ "Couldn't restore %s" : "No fue posible restaurar %s",
+ "Deleted files" : "Archivos borrados",
+ "Restore" : "Restaurar",
+ "Delete" : "Borrar",
+ "Delete permanently" : "Borrar permanentemente",
+ "Error" : "Error",
+ "This operation is forbidden" : "Esta opración está prohibida",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Este directorio no está disponible, por favor verifica las bitácoras o contacta al administrador",
+ "restored" : "restaurado",
+ "No deleted files" : "No hay archivos borrados",
+ "You will be able to recover deleted files from here" : "Podrás recuperar archivos borrados desde aquí",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Select all" : "Seleccionar todo",
+ "Name" : "Nombre",
+ "Deleted" : "Borrado"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files_trashbin/lib/BackgroundJob/ExpireTrash.php b/apps/files_trashbin/lib/BackgroundJob/ExpireTrash.php
index cd662b1fb5e..e19b7ce604f 100644
--- a/apps/files_trashbin/lib/BackgroundJob/ExpireTrash.php
+++ b/apps/files_trashbin/lib/BackgroundJob/ExpireTrash.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Victor Dubiniuk <dubiniuk@owncloud.com>
*
diff --git a/apps/files_trashbin/lib/Command/ExpireTrash.php b/apps/files_trashbin/lib/Command/ExpireTrash.php
index b016fdd6aeb..6b46fd9e626 100644
--- a/apps/files_trashbin/lib/Command/ExpireTrash.php
+++ b/apps/files_trashbin/lib/Command/ExpireTrash.php
@@ -1,8 +1,10 @@
<?php
/**
+ * @copyright Copyright (c) 2016, ownCloud GmbH.
+ *
+ * @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
- * @copyright Copyright (c) 2016, ownCloud GmbH.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/files_trashbin/lib/Controller/PreviewController.php b/apps/files_trashbin/lib/Controller/PreviewController.php
index ae3a106d627..8c3ff292b9f 100644
--- a/apps/files_trashbin/lib/Controller/PreviewController.php
+++ b/apps/files_trashbin/lib/Controller/PreviewController.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, Roeland Jago Douma <roeland@famdouma.nl>
*
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license GNU AGPL version 3 or any later version
diff --git a/apps/files_trashbin/lib/Events/MoveToTrashEvent.php b/apps/files_trashbin/lib/Events/MoveToTrashEvent.php
index 185f39f63cb..99b42507cec 100644
--- a/apps/files_trashbin/lib/Events/MoveToTrashEvent.php
+++ b/apps/files_trashbin/lib/Events/MoveToTrashEvent.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org>
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files_trashbin/lib/Helper.php b/apps/files_trashbin/lib/Helper.php
index a309d533e54..65407b8a56e 100644
--- a/apps/files_trashbin/lib/Helper.php
+++ b/apps/files_trashbin/lib/Helper.php
@@ -2,10 +2,13 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Victor Dubiniuk <dubiniuk@owncloud.com>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/files_trashbin/lib/Storage.php b/apps/files_trashbin/lib/Storage.php
index cb36b4604c1..1193d6ec561 100644
--- a/apps/files_trashbin/lib/Storage.php
+++ b/apps/files_trashbin/lib/Storage.php
@@ -2,7 +2,9 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Vincent Petry <pvince81@owncloud.com>
diff --git a/apps/files_trashbin/lib/Trashbin.php b/apps/files_trashbin/lib/Trashbin.php
index 0d336664e38..d61881ce3b1 100644
--- a/apps/files_trashbin/lib/Trashbin.php
+++ b/apps/files_trashbin/lib/Trashbin.php
@@ -4,9 +4,12 @@
*
* @author Bart Visscher <bartv@thisnet.nl>
* @author Bastien Ho <bastienho@urbancube.fr>
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Florin Peter <github@florin-peter.de>
- * @author Georg Ehrke <georg@owncloud.com>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Juan Pablo Villafáñez <jvillafanez@solidgear.es>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
@@ -15,7 +18,7 @@
* @author Robin McCorkell <robin@mccorkell.me.uk>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Sjors van der Pluijm <sjors@desjors.nl>
- * @author Stefan Weil <sw@weilnetz.de>
+ * @author Steven Bühner <buehner@me.com>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Victor Dubiniuk <dubiniuk@owncloud.com>
* @author Vincent Petry <pvince81@owncloud.com>
diff --git a/apps/files_trashbin/tests/BackgroundJob/ExpireTrashTest.php b/apps/files_trashbin/tests/BackgroundJob/ExpireTrashTest.php
index 4bf533194b4..882099efc99 100644
--- a/apps/files_trashbin/tests/BackgroundJob/ExpireTrashTest.php
+++ b/apps/files_trashbin/tests/BackgroundJob/ExpireTrashTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Victor Dubiniuk <dubiniuk@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/files_trashbin/tests/Command/CleanUpTest.php b/apps/files_trashbin/tests/Command/CleanUpTest.php
index d20ce761bf6..36b1ff10727 100644
--- a/apps/files_trashbin/tests/Command/CleanUpTest.php
+++ b/apps/files_trashbin/tests/Command/CleanUpTest.php
@@ -4,6 +4,7 @@
*
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/files_trashbin/tests/ExpirationTest.php b/apps/files_trashbin/tests/ExpirationTest.php
index 9d9f8ec027e..396fbdfb887 100644
--- a/apps/files_trashbin/tests/ExpirationTest.php
+++ b/apps/files_trashbin/tests/ExpirationTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Victor Dubiniuk <dubiniuk@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/files_trashbin/tests/StorageTest.php b/apps/files_trashbin/tests/StorageTest.php
index a05fd33f306..0e23ea6a3ba 100644
--- a/apps/files_trashbin/tests/StorageTest.php
+++ b/apps/files_trashbin/tests/StorageTest.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
diff --git a/apps/files_versions/appinfo/routes.php b/apps/files_versions/appinfo/routes.php
index 434ff9d26ac..5fe6eaaee14 100644
--- a/apps/files_versions/appinfo/routes.php
+++ b/apps/files_versions/appinfo/routes.php
@@ -3,12 +3,9 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
* @copyright Copyright (c) 2016, Roeland Jago Douma <roeland@famdouma.nl>
*
- * @author Björn Schießle <bjoern@schiessle.org>
- * @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Tom Needham <tom@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/files_versions/l10n/es_EC.js b/apps/files_versions/l10n/es_EC.js
new file mode 100644
index 00000000000..7cfb569dec7
--- /dev/null
+++ b/apps/files_versions/l10n/es_EC.js
@@ -0,0 +1,14 @@
+OC.L10N.register(
+ "files_versions",
+ {
+ "Could not revert: %s" : "No fue posible revertir: %s",
+ "Versions" : "Versiones",
+ "Failed to revert {file} to revision {timestamp}." : "Falla al revertir {file} a revisión {timestamp}.",
+ "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
+ "Restore" : "Restaurar",
+ "No earlier versions available" : "No hay versiones anteriores disponibles",
+ "More versions …" : "Más versiones ...",
+ "No versions available" : "No hay versiones disponibles",
+ "More versions..." : "Más versiones..."
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_versions/l10n/es_EC.json b/apps/files_versions/l10n/es_EC.json
new file mode 100644
index 00000000000..e346d38166f
--- /dev/null
+++ b/apps/files_versions/l10n/es_EC.json
@@ -0,0 +1,12 @@
+{ "translations": {
+ "Could not revert: %s" : "No fue posible revertir: %s",
+ "Versions" : "Versiones",
+ "Failed to revert {file} to revision {timestamp}." : "Falla al revertir {file} a revisión {timestamp}.",
+ "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
+ "Restore" : "Restaurar",
+ "No earlier versions available" : "No hay versiones anteriores disponibles",
+ "More versions …" : "Más versiones ...",
+ "No versions available" : "No hay versiones disponibles",
+ "More versions..." : "Más versiones..."
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files_versions/lib/BackgroundJob/ExpireVersions.php b/apps/files_versions/lib/BackgroundJob/ExpireVersions.php
index 89b8a966137..d69e5bb87ce 100644
--- a/apps/files_versions/lib/BackgroundJob/ExpireVersions.php
+++ b/apps/files_versions/lib/BackgroundJob/ExpireVersions.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Victor Dubiniuk <dubiniuk@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/files_versions/lib/Command/Expire.php b/apps/files_versions/lib/Command/Expire.php
index 794cedbac9a..fdb72c91887 100644
--- a/apps/files_versions/lib/Command/Expire.php
+++ b/apps/files_versions/lib/Command/Expire.php
@@ -5,6 +5,7 @@
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
*
diff --git a/apps/files_versions/lib/Command/ExpireVersions.php b/apps/files_versions/lib/Command/ExpireVersions.php
index e88ea1f7a02..09de0ad6d90 100644
--- a/apps/files_versions/lib/Command/ExpireVersions.php
+++ b/apps/files_versions/lib/Command/ExpireVersions.php
@@ -1,8 +1,10 @@
<?php
/**
+ * @copyright Copyright (c) 2016, ownCloud GmbH.
+ *
+ * @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
- * @copyright Copyright (c) 2016, ownCloud GmbH.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/files_versions/lib/Controller/PreviewController.php b/apps/files_versions/lib/Controller/PreviewController.php
index 7a7c024fb52..b8bf464fb3f 100644
--- a/apps/files_versions/lib/Controller/PreviewController.php
+++ b/apps/files_versions/lib/Controller/PreviewController.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, Roeland Jago Douma <roeland@famdouma.nl>
*
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license GNU AGPL version 3 or any later version
diff --git a/apps/files_versions/lib/Events/CreateVersionEvent.php b/apps/files_versions/lib/Events/CreateVersionEvent.php
index df18d3545f8..90d907147dd 100644
--- a/apps/files_versions/lib/Events/CreateVersionEvent.php
+++ b/apps/files_versions/lib/Events/CreateVersionEvent.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org>
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/files_versions/lib/Hooks.php b/apps/files_versions/lib/Hooks.php
index 1fdf1afef90..52dbf54b485 100644
--- a/apps/files_versions/lib/Hooks.php
+++ b/apps/files_versions/lib/Hooks.php
@@ -4,7 +4,9 @@
*
* @author Bart Visscher <bartv@thisnet.nl>
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
+ * @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
diff --git a/apps/files_versions/lib/Storage.php b/apps/files_versions/lib/Storage.php
index 25c64b89000..4c76c5340fa 100644
--- a/apps/files_versions/lib/Storage.php
+++ b/apps/files_versions/lib/Storage.php
@@ -8,13 +8,13 @@
* @author Björn Schießle <bjoern@schiessle.org>
* @author Carlos Damken <carlos@damken.com>
* @author Felix Moeller <mail@felixmoeller.de>
- * @author Georg Ehrke <georg@owncloud.com>
* @author Joas Schilling <coding@schilljs.com>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Victor Dubiniuk <dubiniuk@owncloud.com>
* @author Vincent Petry <pvince81@owncloud.com>
diff --git a/apps/files_versions/tests/Command/CleanupTest.php b/apps/files_versions/tests/Command/CleanupTest.php
index fe6c9caf25b..289c7123c24 100644
--- a/apps/files_versions/tests/Command/CleanupTest.php
+++ b/apps/files_versions/tests/Command/CleanupTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Björn Schießle <bjoern@schiessle.org>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/files_versions/tests/ExpirationTest.php b/apps/files_versions/tests/ExpirationTest.php
index 4e4f500d812..8cd288d75cc 100644
--- a/apps/files_versions/tests/ExpirationTest.php
+++ b/apps/files_versions/tests/ExpirationTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Victor Dubiniuk <dubiniuk@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/files_versions/tests/VersioningTest.php b/apps/files_versions/tests/VersioningTest.php
index 812a068f070..b35eb9a62c0 100644
--- a/apps/files_versions/tests/VersioningTest.php
+++ b/apps/files_versions/tests/VersioningTest.php
@@ -4,7 +4,7 @@
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Björn Schießle <bjoern@schiessle.org>
- * @author Georg Ehrke <georg@owncloud.com>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
* @author Joas Schilling <coding@schilljs.com>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Lukas Reschke <lukas@statuscode.ch>
diff --git a/apps/oauth2/l10n/es_EC.js b/apps/oauth2/l10n/es_EC.js
new file mode 100644
index 00000000000..ecad08fd552
--- /dev/null
+++ b/apps/oauth2/l10n/es_EC.js
@@ -0,0 +1,13 @@
+OC.L10N.register(
+ "oauth2",
+ {
+ "OAuth 2.0 clients" : "Clientes OAuth 2.0",
+ "OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0 le permite a los servicios externos solicitar acceso a %s.",
+ "Name" : "Nombre",
+ "Redirection URI" : "URI para redirección",
+ "Client Identifier" : "Identificador del cliente",
+ "Secret" : "Secreto",
+ "Add client" : "Agregar cliente",
+ "Add" : "Agregar"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/oauth2/l10n/es_EC.json b/apps/oauth2/l10n/es_EC.json
new file mode 100644
index 00000000000..5e42b16f40d
--- /dev/null
+++ b/apps/oauth2/l10n/es_EC.json
@@ -0,0 +1,11 @@
+{ "translations": {
+ "OAuth 2.0 clients" : "Clientes OAuth 2.0",
+ "OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0 le permite a los servicios externos solicitar acceso a %s.",
+ "Name" : "Nombre",
+ "Redirection URI" : "URI para redirección",
+ "Client Identifier" : "Identificador del cliente",
+ "Secret" : "Secreto",
+ "Add client" : "Agregar cliente",
+ "Add" : "Agregar"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/oauth2/l10n/zh_TW.js b/apps/oauth2/l10n/zh_TW.js
new file mode 100644
index 00000000000..2eda8ab0a98
--- /dev/null
+++ b/apps/oauth2/l10n/zh_TW.js
@@ -0,0 +1,13 @@
+OC.L10N.register(
+ "oauth2",
+ {
+ "OAuth 2.0 clients" : "OAuth 2.0 用戶端",
+ "OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0允許其他裝置存取 %s.",
+ "Name" : "名稱",
+ "Redirection URI" : "URI轉向",
+ "Client Identifier" : "用戶辨識",
+ "Secret" : "秘密",
+ "Add client" : "新增用戶",
+ "Add" : "新增"
+},
+"nplurals=1; plural=0;");
diff --git a/apps/oauth2/l10n/zh_TW.json b/apps/oauth2/l10n/zh_TW.json
new file mode 100644
index 00000000000..7bdcfd0833e
--- /dev/null
+++ b/apps/oauth2/l10n/zh_TW.json
@@ -0,0 +1,11 @@
+{ "translations": {
+ "OAuth 2.0 clients" : "OAuth 2.0 用戶端",
+ "OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0允許其他裝置存取 %s.",
+ "Name" : "名稱",
+ "Redirection URI" : "URI轉向",
+ "Client Identifier" : "用戶辨識",
+ "Secret" : "秘密",
+ "Add client" : "新增用戶",
+ "Add" : "新增"
+},"pluralForm" :"nplurals=1; plural=0;"
+} \ No newline at end of file
diff --git a/apps/provisioning_api/appinfo/routes.php b/apps/provisioning_api/appinfo/routes.php
index 81b3db2c1be..c4932ebb28b 100644
--- a/apps/provisioning_api/appinfo/routes.php
+++ b/apps/provisioning_api/appinfo/routes.php
@@ -2,12 +2,10 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
- * @author Lukas Reschke <lukas@statuscode.ch>
- * @author michag86 <micha_g@arcor.de>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Tom Needham <tom@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/provisioning_api/lib/AppInfo/Application.php b/apps/provisioning_api/lib/AppInfo/Application.php
index b1c257de689..b7a93d6fb13 100644
--- a/apps/provisioning_api/lib/AppInfo/Application.php
+++ b/apps/provisioning_api/lib/AppInfo/Application.php
@@ -1,5 +1,27 @@
<?php
-
+/**
+ *
+ *
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
namespace OCA\Provisioning_API\AppInfo;
use OC\AppFramework\Utility\SimpleContainer;
diff --git a/apps/provisioning_api/lib/Controller/AppConfigController.php b/apps/provisioning_api/lib/Controller/AppConfigController.php
index f710eda6529..0ca5e4e20a1 100644
--- a/apps/provisioning_api/lib/Controller/AppConfigController.php
+++ b/apps/provisioning_api/lib/Controller/AppConfigController.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/provisioning_api/lib/Controller/AppsController.php b/apps/provisioning_api/lib/Controller/AppsController.php
index d65b925cf7b..30062d94a44 100644
--- a/apps/provisioning_api/lib/Controller/AppsController.php
+++ b/apps/provisioning_api/lib/Controller/AppsController.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
diff --git a/apps/provisioning_api/lib/Controller/GroupsController.php b/apps/provisioning_api/lib/Controller/GroupsController.php
index e167c07582f..cb237d9791f 100644
--- a/apps/provisioning_api/lib/Controller/GroupsController.php
+++ b/apps/provisioning_api/lib/Controller/GroupsController.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
diff --git a/apps/provisioning_api/lib/Controller/UsersController.php b/apps/provisioning_api/lib/Controller/UsersController.php
index e165457a339..ffae68d5a95 100644
--- a/apps/provisioning_api/lib/Controller/UsersController.php
+++ b/apps/provisioning_api/lib/Controller/UsersController.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author michag86 <micha_g@arcor.de>
diff --git a/apps/provisioning_api/lib/Middleware/Exceptions/NotSubAdminException.php b/apps/provisioning_api/lib/Middleware/Exceptions/NotSubAdminException.php
index 007ea04db46..11ffb8b0903 100644
--- a/apps/provisioning_api/lib/Middleware/Exceptions/NotSubAdminException.php
+++ b/apps/provisioning_api/lib/Middleware/Exceptions/NotSubAdminException.php
@@ -1,5 +1,26 @@
<?php
-
+/**
+ *
+ *
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
namespace OCA\Provisioning_API\Middleware\Exceptions;
use OCP\AppFramework\Http;
diff --git a/apps/provisioning_api/lib/Middleware/ProvisioningApiMiddleware.php b/apps/provisioning_api/lib/Middleware/ProvisioningApiMiddleware.php
index e21f9b22878..4c7f7a654c8 100644
--- a/apps/provisioning_api/lib/Middleware/ProvisioningApiMiddleware.php
+++ b/apps/provisioning_api/lib/Middleware/ProvisioningApiMiddleware.php
@@ -1,5 +1,27 @@
<?php
-
+/**
+ *
+ *
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
namespace OCA\Provisioning_API\Middleware;
use OCA\Provisioning_API\Middleware\Exceptions\NotSubAdminException;
diff --git a/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php b/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php
index b7cb76c77c6..7f24ef5bcb3 100644
--- a/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php
+++ b/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/provisioning_api/tests/Controller/UsersControllerTest.php b/apps/provisioning_api/tests/Controller/UsersControllerTest.php
index e9d0a704f4f..ef47583e9df 100644
--- a/apps/provisioning_api/tests/Controller/UsersControllerTest.php
+++ b/apps/provisioning_api/tests/Controller/UsersControllerTest.php
@@ -3,6 +3,8 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
+ * @author Christoph Wurst <christoph@owncloud.com>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author michag86 <micha_g@arcor.de>
diff --git a/apps/sharebymail/l10n/el.js b/apps/sharebymail/l10n/el.js
index 952d5245546..1cca5b74fb9 100644
--- a/apps/sharebymail/l10n/el.js
+++ b/apps/sharebymail/l10n/el.js
@@ -18,6 +18,7 @@ OC.L10N.register(
"Password to access {file} was sent to you" : "Σας έχει αποσταλεί στο συνθηματικό για πρόσβαση {file}",
"Sharing %s failed, this item is already shared with %s" : "Διαμοιρασμός %s απέτυχε, αυτό το αντικείμενο είναι ήδη διαμοιρασμένο με %s",
"We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Δεν μπορούμε να σας στείλουμε αυτοδημιουργημένο συνθηματικό. Παρακαλούμε βάλτε μία έγκυρη διεύθυνση email στις προσωπικές σας ρυθμίσεις και προσπαθήστε ξανά.",
+ "Failed to send share by email" : "Αποτυχία αποστολής συνδέσμου διαμοιρασμού μέσω Ηλ.ταχυδρομείου",
"%s shared »%s« with you" : "%s διαμοιρασμένα »%s« με σένα",
"%s shared »%s« with you." : "%s διαμοιράστηκε »%s« με εσάς.",
"Click the button below to open it." : "Κάντε κλικ στο παρακάτω κουμπί για να το ανοίξετε.",
@@ -34,6 +35,7 @@ OC.L10N.register(
"You can choose a different password at any time in the share dialog." : "Μπορείτε να διαλέξετε ένα διαφορετικό συνθηματικό οποιαδήποτε στιγμή στον διάλογο διαμοιρασμού.",
"Could not find share" : "Αδυναμία εύρεσης κοινόχρηστου",
"Share by mail" : "Διαμοιρασμός με ηλεκτρονική αλληλογραφία",
+ "Allows users to share a personalized link to a file or folder by putting in an email address." : "Να επιτρέπεται οι χρήστες να στέλνουν εξατομικευμένο σύνδεσμο σε ένα αρχείο ή φάκελο μέσω mail.",
"Send password by mail" : "Αποστολή συνθηματικου με ηλεκτρονική αλληλογραφία",
"Enforce password protection" : "Επιβάλετε προστασία συνθηματικού",
"Failed to send share by E-mail" : "Αποτυχία αποστολής συνδέσμου διαμοιρασμού μέσω Ηλ.ταχυδρομείου",
diff --git a/apps/sharebymail/l10n/el.json b/apps/sharebymail/l10n/el.json
index f8d942c000f..432e4ca129a 100644
--- a/apps/sharebymail/l10n/el.json
+++ b/apps/sharebymail/l10n/el.json
@@ -16,6 +16,7 @@
"Password to access {file} was sent to you" : "Σας έχει αποσταλεί στο συνθηματικό για πρόσβαση {file}",
"Sharing %s failed, this item is already shared with %s" : "Διαμοιρασμός %s απέτυχε, αυτό το αντικείμενο είναι ήδη διαμοιρασμένο με %s",
"We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Δεν μπορούμε να σας στείλουμε αυτοδημιουργημένο συνθηματικό. Παρακαλούμε βάλτε μία έγκυρη διεύθυνση email στις προσωπικές σας ρυθμίσεις και προσπαθήστε ξανά.",
+ "Failed to send share by email" : "Αποτυχία αποστολής συνδέσμου διαμοιρασμού μέσω Ηλ.ταχυδρομείου",
"%s shared »%s« with you" : "%s διαμοιρασμένα »%s« με σένα",
"%s shared »%s« with you." : "%s διαμοιράστηκε »%s« με εσάς.",
"Click the button below to open it." : "Κάντε κλικ στο παρακάτω κουμπί για να το ανοίξετε.",
@@ -32,6 +33,7 @@
"You can choose a different password at any time in the share dialog." : "Μπορείτε να διαλέξετε ένα διαφορετικό συνθηματικό οποιαδήποτε στιγμή στον διάλογο διαμοιρασμού.",
"Could not find share" : "Αδυναμία εύρεσης κοινόχρηστου",
"Share by mail" : "Διαμοιρασμός με ηλεκτρονική αλληλογραφία",
+ "Allows users to share a personalized link to a file or folder by putting in an email address." : "Να επιτρέπεται οι χρήστες να στέλνουν εξατομικευμένο σύνδεσμο σε ένα αρχείο ή φάκελο μέσω mail.",
"Send password by mail" : "Αποστολή συνθηματικου με ηλεκτρονική αλληλογραφία",
"Enforce password protection" : "Επιβάλετε προστασία συνθηματικού",
"Failed to send share by E-mail" : "Αποτυχία αποστολής συνδέσμου διαμοιρασμού μέσω Ηλ.ταχυδρομείου",
diff --git a/apps/sharebymail/l10n/es_DO.js b/apps/sharebymail/l10n/es_DO.js
new file mode 100644
index 00000000000..92f61e8f63e
--- /dev/null
+++ b/apps/sharebymail/l10n/es_DO.js
@@ -0,0 +1,50 @@
+OC.L10N.register(
+ "sharebymail",
+ {
+ "Shared with %1$s" : "Compartido con %1$s",
+ "Shared with {email}" : "Compartido con {email}",
+ "Shared with %1$s by %2$s" : "Compartido con %1$s por %2$s",
+ "Shared with {email} by {actor}" : "Compartido con {email} por {actor}",
+ "Password for mail share sent to %1$s" : "La contraseña para el elemento compartido fue enviada a %1$s",
+ "Password for mail share sent to {email}" : "La contraseña para el elemento compartido fue enviada a {email}",
+ "Password for mail share sent to you" : "La contraseña para el elemento compartido se te ha enviado",
+ "You shared %1$s with %2$s by mail" : "Compartiste %1$s con %2$s por correo",
+ "You shared {file} with {email} by mail" : "Compartiste {file} con {email} por correo",
+ "%3$s shared %1$s with %2$s by mail" : "%3$s compartió %1$s con %2$s por correo ",
+ "{actor} shared {file} with {email} by mail" : "{actor} compartió {file} con {email} por correo",
+ "Password to access %1$s was sent to %2s" : "La contraseña para acceder %1$s fue enviada a %2s",
+ "Password to access {file} was sent to {email}" : "La contraseña para acceder {file} ha sido enviada a {email}",
+ "Password to access %1$s was sent to you" : "La contraseña para acceder %1$s se te ha enviado",
+ "Password to access {file} was sent to you" : "La contraseña para acceder {file} se te ha sido enviada",
+ "Sharing %s failed, this item is already shared with %s" : "Se presentó una falla al compartir %s, este elemento ya ha sido compartido con %s",
+ "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "No es posible enviarte la contraseña auto-generada. Por favor establece una dirección de correo electrónico váilida en tus configuraciones personales y vuelve a intentarlo.",
+ "Failed to send share by email" : "Se presentó una falla al enviar el elemento compartido por correo electrónico",
+ "%s shared »%s« with you" : "%s ha compartido »%s« contigo",
+ "%s shared »%s« with you." : "%s ha compartido »%s« contigo",
+ "Click the button below to open it." : "Haz click en el botón de abajo para abrirlo.",
+ "Open »%s«" : "Abrir »%s«",
+ "%s via %s" : "%s vía %s",
+ "%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s compartió »%s« contigo.\nDeberías haber recibido ya un correo por separado con la liga para accederlo. \n",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s compartió »%s« contigo. Ya deberías haber recibido un correo aparte con la liga para accederlo. ",
+ "Password to access »%s« shared to you by %s" : "Contraseña para acceder »%s« compartido contigo por %s ",
+ "Password to access »%s«" : "Contraseña para acceder »%s«",
+ "It is protected with the following password: %s" : "Está protegido con la siguiente contraseña: %s",
+ "You just shared »%s« with %s. The share was already send to the recipient. Due to the security policies defined by the administrator of %s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Acabas de compartir »%s« con %s. El elemento compartido ya ha sido enviado al destinatario. Debido a las políticas de seguridad definidas por el administrador de %s cada elelento compartido debe ser protegido por una contraseña y no se permite enviar la contraseña directamente al destinatario. Por lo tanto necesitas reenviar la contaseña manualmente al destinatario. ",
+ "Password to access »%s« shared with %s" : "La contraseña para acceder »%s« ha sido compartida con %s",
+ "This is the password: %s" : "Esta es la contraseña: %s",
+ "You can choose a different password at any time in the share dialog." : "Puedes elegir una contraseña diferente en cualquier momento en la ventana de diálogo de compartir. ",
+ "Could not find share" : "No fue posible encontrar el elemento compartido",
+ "Share by mail" : "Compartir por correo",
+ "Allows users to share a personalized link to a file or folder by putting in an email address." : "Le permite a los usuarios compartir una liga personalizada a un archivo o carpeta colocando una dirección de correo eletrónico. ",
+ "Send password by mail" : "La contraseña ha sido enviada por correo",
+ "Enforce password protection" : "Forzar protección con contraseña",
+ "Failed to send share by E-mail" : "Se presentó una falla al enviar el recurso compartido por correo electrónico",
+ "%s shared »%s« with you on behalf of %s" : "%s ha compartido »%s« contigo a nombre de %s",
+ "Failed to create the E-mail" : "Se presentó una falla al crear el correo electrónico",
+ "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Hola,\n\n%s ha compartido »%s« contigo a nombre de %s.\n\n%s\n",
+ "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Hola,\n\n%s ha compartido »%s« contigo.\n\n%s\n",
+ "Cheers!" : "¡Saludos!",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Hola,<br><br>%s ha compartido <a href=\"%s\">%s</a> contigo a nombre de %s.<br><br> ",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Hola, <br><br>%s ha compartido <a href=\"%s\">%s</a> contigo.<br><br> "
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/sharebymail/l10n/es_DO.json b/apps/sharebymail/l10n/es_DO.json
new file mode 100644
index 00000000000..43a4bc87eb2
--- /dev/null
+++ b/apps/sharebymail/l10n/es_DO.json
@@ -0,0 +1,48 @@
+{ "translations": {
+ "Shared with %1$s" : "Compartido con %1$s",
+ "Shared with {email}" : "Compartido con {email}",
+ "Shared with %1$s by %2$s" : "Compartido con %1$s por %2$s",
+ "Shared with {email} by {actor}" : "Compartido con {email} por {actor}",
+ "Password for mail share sent to %1$s" : "La contraseña para el elemento compartido fue enviada a %1$s",
+ "Password for mail share sent to {email}" : "La contraseña para el elemento compartido fue enviada a {email}",
+ "Password for mail share sent to you" : "La contraseña para el elemento compartido se te ha enviado",
+ "You shared %1$s with %2$s by mail" : "Compartiste %1$s con %2$s por correo",
+ "You shared {file} with {email} by mail" : "Compartiste {file} con {email} por correo",
+ "%3$s shared %1$s with %2$s by mail" : "%3$s compartió %1$s con %2$s por correo ",
+ "{actor} shared {file} with {email} by mail" : "{actor} compartió {file} con {email} por correo",
+ "Password to access %1$s was sent to %2s" : "La contraseña para acceder %1$s fue enviada a %2s",
+ "Password to access {file} was sent to {email}" : "La contraseña para acceder {file} ha sido enviada a {email}",
+ "Password to access %1$s was sent to you" : "La contraseña para acceder %1$s se te ha enviado",
+ "Password to access {file} was sent to you" : "La contraseña para acceder {file} se te ha sido enviada",
+ "Sharing %s failed, this item is already shared with %s" : "Se presentó una falla al compartir %s, este elemento ya ha sido compartido con %s",
+ "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "No es posible enviarte la contraseña auto-generada. Por favor establece una dirección de correo electrónico váilida en tus configuraciones personales y vuelve a intentarlo.",
+ "Failed to send share by email" : "Se presentó una falla al enviar el elemento compartido por correo electrónico",
+ "%s shared »%s« with you" : "%s ha compartido »%s« contigo",
+ "%s shared »%s« with you." : "%s ha compartido »%s« contigo",
+ "Click the button below to open it." : "Haz click en el botón de abajo para abrirlo.",
+ "Open »%s«" : "Abrir »%s«",
+ "%s via %s" : "%s vía %s",
+ "%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s compartió »%s« contigo.\nDeberías haber recibido ya un correo por separado con la liga para accederlo. \n",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s compartió »%s« contigo. Ya deberías haber recibido un correo aparte con la liga para accederlo. ",
+ "Password to access »%s« shared to you by %s" : "Contraseña para acceder »%s« compartido contigo por %s ",
+ "Password to access »%s«" : "Contraseña para acceder »%s«",
+ "It is protected with the following password: %s" : "Está protegido con la siguiente contraseña: %s",
+ "You just shared »%s« with %s. The share was already send to the recipient. Due to the security policies defined by the administrator of %s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Acabas de compartir »%s« con %s. El elemento compartido ya ha sido enviado al destinatario. Debido a las políticas de seguridad definidas por el administrador de %s cada elelento compartido debe ser protegido por una contraseña y no se permite enviar la contraseña directamente al destinatario. Por lo tanto necesitas reenviar la contaseña manualmente al destinatario. ",
+ "Password to access »%s« shared with %s" : "La contraseña para acceder »%s« ha sido compartida con %s",
+ "This is the password: %s" : "Esta es la contraseña: %s",
+ "You can choose a different password at any time in the share dialog." : "Puedes elegir una contraseña diferente en cualquier momento en la ventana de diálogo de compartir. ",
+ "Could not find share" : "No fue posible encontrar el elemento compartido",
+ "Share by mail" : "Compartir por correo",
+ "Allows users to share a personalized link to a file or folder by putting in an email address." : "Le permite a los usuarios compartir una liga personalizada a un archivo o carpeta colocando una dirección de correo eletrónico. ",
+ "Send password by mail" : "La contraseña ha sido enviada por correo",
+ "Enforce password protection" : "Forzar protección con contraseña",
+ "Failed to send share by E-mail" : "Se presentó una falla al enviar el recurso compartido por correo electrónico",
+ "%s shared »%s« with you on behalf of %s" : "%s ha compartido »%s« contigo a nombre de %s",
+ "Failed to create the E-mail" : "Se presentó una falla al crear el correo electrónico",
+ "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Hola,\n\n%s ha compartido »%s« contigo a nombre de %s.\n\n%s\n",
+ "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Hola,\n\n%s ha compartido »%s« contigo.\n\n%s\n",
+ "Cheers!" : "¡Saludos!",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Hola,<br><br>%s ha compartido <a href=\"%s\">%s</a> contigo a nombre de %s.<br><br> ",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Hola, <br><br>%s ha compartido <a href=\"%s\">%s</a> contigo.<br><br> "
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/sharebymail/l10n/es_EC.js b/apps/sharebymail/l10n/es_EC.js
new file mode 100644
index 00000000000..92f61e8f63e
--- /dev/null
+++ b/apps/sharebymail/l10n/es_EC.js
@@ -0,0 +1,50 @@
+OC.L10N.register(
+ "sharebymail",
+ {
+ "Shared with %1$s" : "Compartido con %1$s",
+ "Shared with {email}" : "Compartido con {email}",
+ "Shared with %1$s by %2$s" : "Compartido con %1$s por %2$s",
+ "Shared with {email} by {actor}" : "Compartido con {email} por {actor}",
+ "Password for mail share sent to %1$s" : "La contraseña para el elemento compartido fue enviada a %1$s",
+ "Password for mail share sent to {email}" : "La contraseña para el elemento compartido fue enviada a {email}",
+ "Password for mail share sent to you" : "La contraseña para el elemento compartido se te ha enviado",
+ "You shared %1$s with %2$s by mail" : "Compartiste %1$s con %2$s por correo",
+ "You shared {file} with {email} by mail" : "Compartiste {file} con {email} por correo",
+ "%3$s shared %1$s with %2$s by mail" : "%3$s compartió %1$s con %2$s por correo ",
+ "{actor} shared {file} with {email} by mail" : "{actor} compartió {file} con {email} por correo",
+ "Password to access %1$s was sent to %2s" : "La contraseña para acceder %1$s fue enviada a %2s",
+ "Password to access {file} was sent to {email}" : "La contraseña para acceder {file} ha sido enviada a {email}",
+ "Password to access %1$s was sent to you" : "La contraseña para acceder %1$s se te ha enviado",
+ "Password to access {file} was sent to you" : "La contraseña para acceder {file} se te ha sido enviada",
+ "Sharing %s failed, this item is already shared with %s" : "Se presentó una falla al compartir %s, este elemento ya ha sido compartido con %s",
+ "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "No es posible enviarte la contraseña auto-generada. Por favor establece una dirección de correo electrónico váilida en tus configuraciones personales y vuelve a intentarlo.",
+ "Failed to send share by email" : "Se presentó una falla al enviar el elemento compartido por correo electrónico",
+ "%s shared »%s« with you" : "%s ha compartido »%s« contigo",
+ "%s shared »%s« with you." : "%s ha compartido »%s« contigo",
+ "Click the button below to open it." : "Haz click en el botón de abajo para abrirlo.",
+ "Open »%s«" : "Abrir »%s«",
+ "%s via %s" : "%s vía %s",
+ "%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s compartió »%s« contigo.\nDeberías haber recibido ya un correo por separado con la liga para accederlo. \n",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s compartió »%s« contigo. Ya deberías haber recibido un correo aparte con la liga para accederlo. ",
+ "Password to access »%s« shared to you by %s" : "Contraseña para acceder »%s« compartido contigo por %s ",
+ "Password to access »%s«" : "Contraseña para acceder »%s«",
+ "It is protected with the following password: %s" : "Está protegido con la siguiente contraseña: %s",
+ "You just shared »%s« with %s. The share was already send to the recipient. Due to the security policies defined by the administrator of %s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Acabas de compartir »%s« con %s. El elemento compartido ya ha sido enviado al destinatario. Debido a las políticas de seguridad definidas por el administrador de %s cada elelento compartido debe ser protegido por una contraseña y no se permite enviar la contraseña directamente al destinatario. Por lo tanto necesitas reenviar la contaseña manualmente al destinatario. ",
+ "Password to access »%s« shared with %s" : "La contraseña para acceder »%s« ha sido compartida con %s",
+ "This is the password: %s" : "Esta es la contraseña: %s",
+ "You can choose a different password at any time in the share dialog." : "Puedes elegir una contraseña diferente en cualquier momento en la ventana de diálogo de compartir. ",
+ "Could not find share" : "No fue posible encontrar el elemento compartido",
+ "Share by mail" : "Compartir por correo",
+ "Allows users to share a personalized link to a file or folder by putting in an email address." : "Le permite a los usuarios compartir una liga personalizada a un archivo o carpeta colocando una dirección de correo eletrónico. ",
+ "Send password by mail" : "La contraseña ha sido enviada por correo",
+ "Enforce password protection" : "Forzar protección con contraseña",
+ "Failed to send share by E-mail" : "Se presentó una falla al enviar el recurso compartido por correo electrónico",
+ "%s shared »%s« with you on behalf of %s" : "%s ha compartido »%s« contigo a nombre de %s",
+ "Failed to create the E-mail" : "Se presentó una falla al crear el correo electrónico",
+ "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Hola,\n\n%s ha compartido »%s« contigo a nombre de %s.\n\n%s\n",
+ "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Hola,\n\n%s ha compartido »%s« contigo.\n\n%s\n",
+ "Cheers!" : "¡Saludos!",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Hola,<br><br>%s ha compartido <a href=\"%s\">%s</a> contigo a nombre de %s.<br><br> ",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Hola, <br><br>%s ha compartido <a href=\"%s\">%s</a> contigo.<br><br> "
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/sharebymail/l10n/es_EC.json b/apps/sharebymail/l10n/es_EC.json
new file mode 100644
index 00000000000..43a4bc87eb2
--- /dev/null
+++ b/apps/sharebymail/l10n/es_EC.json
@@ -0,0 +1,48 @@
+{ "translations": {
+ "Shared with %1$s" : "Compartido con %1$s",
+ "Shared with {email}" : "Compartido con {email}",
+ "Shared with %1$s by %2$s" : "Compartido con %1$s por %2$s",
+ "Shared with {email} by {actor}" : "Compartido con {email} por {actor}",
+ "Password for mail share sent to %1$s" : "La contraseña para el elemento compartido fue enviada a %1$s",
+ "Password for mail share sent to {email}" : "La contraseña para el elemento compartido fue enviada a {email}",
+ "Password for mail share sent to you" : "La contraseña para el elemento compartido se te ha enviado",
+ "You shared %1$s with %2$s by mail" : "Compartiste %1$s con %2$s por correo",
+ "You shared {file} with {email} by mail" : "Compartiste {file} con {email} por correo",
+ "%3$s shared %1$s with %2$s by mail" : "%3$s compartió %1$s con %2$s por correo ",
+ "{actor} shared {file} with {email} by mail" : "{actor} compartió {file} con {email} por correo",
+ "Password to access %1$s was sent to %2s" : "La contraseña para acceder %1$s fue enviada a %2s",
+ "Password to access {file} was sent to {email}" : "La contraseña para acceder {file} ha sido enviada a {email}",
+ "Password to access %1$s was sent to you" : "La contraseña para acceder %1$s se te ha enviado",
+ "Password to access {file} was sent to you" : "La contraseña para acceder {file} se te ha sido enviada",
+ "Sharing %s failed, this item is already shared with %s" : "Se presentó una falla al compartir %s, este elemento ya ha sido compartido con %s",
+ "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "No es posible enviarte la contraseña auto-generada. Por favor establece una dirección de correo electrónico váilida en tus configuraciones personales y vuelve a intentarlo.",
+ "Failed to send share by email" : "Se presentó una falla al enviar el elemento compartido por correo electrónico",
+ "%s shared »%s« with you" : "%s ha compartido »%s« contigo",
+ "%s shared »%s« with you." : "%s ha compartido »%s« contigo",
+ "Click the button below to open it." : "Haz click en el botón de abajo para abrirlo.",
+ "Open »%s«" : "Abrir »%s«",
+ "%s via %s" : "%s vía %s",
+ "%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s compartió »%s« contigo.\nDeberías haber recibido ya un correo por separado con la liga para accederlo. \n",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s compartió »%s« contigo. Ya deberías haber recibido un correo aparte con la liga para accederlo. ",
+ "Password to access »%s« shared to you by %s" : "Contraseña para acceder »%s« compartido contigo por %s ",
+ "Password to access »%s«" : "Contraseña para acceder »%s«",
+ "It is protected with the following password: %s" : "Está protegido con la siguiente contraseña: %s",
+ "You just shared »%s« with %s. The share was already send to the recipient. Due to the security policies defined by the administrator of %s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Acabas de compartir »%s« con %s. El elemento compartido ya ha sido enviado al destinatario. Debido a las políticas de seguridad definidas por el administrador de %s cada elelento compartido debe ser protegido por una contraseña y no se permite enviar la contraseña directamente al destinatario. Por lo tanto necesitas reenviar la contaseña manualmente al destinatario. ",
+ "Password to access »%s« shared with %s" : "La contraseña para acceder »%s« ha sido compartida con %s",
+ "This is the password: %s" : "Esta es la contraseña: %s",
+ "You can choose a different password at any time in the share dialog." : "Puedes elegir una contraseña diferente en cualquier momento en la ventana de diálogo de compartir. ",
+ "Could not find share" : "No fue posible encontrar el elemento compartido",
+ "Share by mail" : "Compartir por correo",
+ "Allows users to share a personalized link to a file or folder by putting in an email address." : "Le permite a los usuarios compartir una liga personalizada a un archivo o carpeta colocando una dirección de correo eletrónico. ",
+ "Send password by mail" : "La contraseña ha sido enviada por correo",
+ "Enforce password protection" : "Forzar protección con contraseña",
+ "Failed to send share by E-mail" : "Se presentó una falla al enviar el recurso compartido por correo electrónico",
+ "%s shared »%s« with you on behalf of %s" : "%s ha compartido »%s« contigo a nombre de %s",
+ "Failed to create the E-mail" : "Se presentó una falla al crear el correo electrónico",
+ "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Hola,\n\n%s ha compartido »%s« contigo a nombre de %s.\n\n%s\n",
+ "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Hola,\n\n%s ha compartido »%s« contigo.\n\n%s\n",
+ "Cheers!" : "¡Saludos!",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Hola,<br><br>%s ha compartido <a href=\"%s\">%s</a> contigo a nombre de %s.<br><br> ",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Hola, <br><br>%s ha compartido <a href=\"%s\">%s</a> contigo.<br><br> "
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/systemtags/appinfo/app.php b/apps/systemtags/appinfo/app.php
index 099ce7f9b95..e1c86939458 100644
--- a/apps/systemtags/appinfo/app.php
+++ b/apps/systemtags/appinfo/app.php
@@ -3,6 +3,9 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Jörn Friedrich Dreyer <jfd@butonic.de>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/systemtags/l10n/es_DO.js b/apps/systemtags/l10n/es_DO.js
new file mode 100644
index 00000000000..77f45fe1268
--- /dev/null
+++ b/apps/systemtags/l10n/es_DO.js
@@ -0,0 +1,58 @@
+OC.L10N.register(
+ "systemtags",
+ {
+ "Tags" : "Etiquetas",
+ "Update" : "Actualizar",
+ "Create" : "Crear",
+ "Select tag…" : "Seleccionar etiqueta...",
+ "Tagged files" : "Archivos etiquetados",
+ "Select tags to filter by" : "Selecciona las etiquetas del filtro",
+ "No tags found" : "No se encontraron etiquetas",
+ "Please select tags to filter by" : "Por favor selecciona las etiquetas del filtro",
+ "No files found for the selected tags" : "No se encontraron archivos para las etiquetas seleccionadas",
+ "Added system tag %1$s" : "Etiqueta del sistema %1$s agregada",
+ "Added system tag {systemtag}" : "Etiqueta del sistema {systemtag} agregada",
+ "%1$s added system tag %2$s" : "%1$s agregó la etiqueta del sistema %2$s",
+ "{actor} added system tag {systemtag}" : "{actor} agregó la etiqueta del sistema {systemtag}",
+ "Removed system tag %1$s" : "Etiqueta del sistema %1$s eliminada",
+ "Removed system tag {systemtag}" : "Eliminó la etiqueta del sistema {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$s eliminó la etiqueta del sistema %2$s",
+ "{actor} removed system tag {systemtag}" : "{actor} eliminó la etiqueta del sistema {systemtag}",
+ "You created system tag %1$s" : "Creaste la etiqueta del sistema %1$s",
+ "You created system tag {systemtag}" : "Creaste la etiqueta del sistema {systemtag}",
+ "%1$s created system tag %2$s" : "%1$s creo la etiqueta del sistema %2$s",
+ "{actor} created system tag {systemtag}" : "{actor} creó la etiqueta del sistema {systemtag}",
+ "You deleted system tag %1$s" : "Borraste la etiqueta del sistema %1$s",
+ "You deleted system tag {systemtag}" : "Borraste la etiqueta del sistema {systemtag}",
+ "%1$s deleted system tag %2$s" : "%1$s borró la etiqueta del sistema %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} borró la etiqueta del sistema {systemtag}",
+ "You updated system tag %2$s to %1$s" : "Actualizaste la etiqueta del sistema %2$s a %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Actualizaste la etiqueta del sistema {oldsystemtag} a {newsystemtag}",
+ "%1$s updated system tag %3$s to %2$s" : "%1$s actualizó la etiqueta del sistema %3$s a %2$s",
+ "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} actualizó la etiqueta del sistema {oldsystemtag} a {newsystemtag}",
+ "You added system tag %2$s to %1$s" : "Agregaste la etiqueta del sistema %2$s a %1$s",
+ "You added system tag {systemtag} to {file}" : "Agregaste la etiqueta del sistema {systemtag} a {file}",
+ "%1$s added system tag %3$s to %2$s" : "%1$s agregó la etiqueta del sistema %3$s a %2$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} agregó la etiqueta del sistema {systemtag} a {file}",
+ "You removed system tag %2$s from %1$s" : "Eliminaste la etiqueta del sistema %2$s de %1$s",
+ "You removed system tag {systemtag} from {file}" : "Eliminaste la etiqueta del sistema {systemtag} de {file}",
+ "%1$s removed system tag %3$s from %2$s" : "%1$s eliminó la etiqueta del sistema %3$s de %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} eliminó la etiqueta del sistema {systemtag} de {file}",
+ "%s (restricted)" : "%s (restringido)",
+ "%s (invisible)" : "%s (invisible) ",
+ "<strong>System tags</strong> for a file have been modified" : "Las <strong>etiquetas del sistema</strong> para un archivo han sido modificadas",
+ "Collaborative tags" : "Etiquetas colaborativas",
+ "Create and edit collaborative tags. These tags affect all users." : "Crear y editar etiquetas colaborativas. Estas etiquetas afectan a todos los usuarios. ",
+ "Select tag …" : "Seleccionar etiqueta ...",
+ "Name" : "Nombre",
+ "Delete" : "Borrar",
+ "Public" : "Público",
+ "Restricted" : "Restringido",
+ "Invisible" : "Invisible",
+ "Reset" : "Restaurar",
+ "No files in here" : "No hay archivos aquí",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Size" : "Tamaño",
+ "Modified" : "Modificado"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/systemtags/l10n/es_DO.json b/apps/systemtags/l10n/es_DO.json
new file mode 100644
index 00000000000..9a8e4adf3f8
--- /dev/null
+++ b/apps/systemtags/l10n/es_DO.json
@@ -0,0 +1,56 @@
+{ "translations": {
+ "Tags" : "Etiquetas",
+ "Update" : "Actualizar",
+ "Create" : "Crear",
+ "Select tag…" : "Seleccionar etiqueta...",
+ "Tagged files" : "Archivos etiquetados",
+ "Select tags to filter by" : "Selecciona las etiquetas del filtro",
+ "No tags found" : "No se encontraron etiquetas",
+ "Please select tags to filter by" : "Por favor selecciona las etiquetas del filtro",
+ "No files found for the selected tags" : "No se encontraron archivos para las etiquetas seleccionadas",
+ "Added system tag %1$s" : "Etiqueta del sistema %1$s agregada",
+ "Added system tag {systemtag}" : "Etiqueta del sistema {systemtag} agregada",
+ "%1$s added system tag %2$s" : "%1$s agregó la etiqueta del sistema %2$s",
+ "{actor} added system tag {systemtag}" : "{actor} agregó la etiqueta del sistema {systemtag}",
+ "Removed system tag %1$s" : "Etiqueta del sistema %1$s eliminada",
+ "Removed system tag {systemtag}" : "Eliminó la etiqueta del sistema {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$s eliminó la etiqueta del sistema %2$s",
+ "{actor} removed system tag {systemtag}" : "{actor} eliminó la etiqueta del sistema {systemtag}",
+ "You created system tag %1$s" : "Creaste la etiqueta del sistema %1$s",
+ "You created system tag {systemtag}" : "Creaste la etiqueta del sistema {systemtag}",
+ "%1$s created system tag %2$s" : "%1$s creo la etiqueta del sistema %2$s",
+ "{actor} created system tag {systemtag}" : "{actor} creó la etiqueta del sistema {systemtag}",
+ "You deleted system tag %1$s" : "Borraste la etiqueta del sistema %1$s",
+ "You deleted system tag {systemtag}" : "Borraste la etiqueta del sistema {systemtag}",
+ "%1$s deleted system tag %2$s" : "%1$s borró la etiqueta del sistema %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} borró la etiqueta del sistema {systemtag}",
+ "You updated system tag %2$s to %1$s" : "Actualizaste la etiqueta del sistema %2$s a %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Actualizaste la etiqueta del sistema {oldsystemtag} a {newsystemtag}",
+ "%1$s updated system tag %3$s to %2$s" : "%1$s actualizó la etiqueta del sistema %3$s a %2$s",
+ "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} actualizó la etiqueta del sistema {oldsystemtag} a {newsystemtag}",
+ "You added system tag %2$s to %1$s" : "Agregaste la etiqueta del sistema %2$s a %1$s",
+ "You added system tag {systemtag} to {file}" : "Agregaste la etiqueta del sistema {systemtag} a {file}",
+ "%1$s added system tag %3$s to %2$s" : "%1$s agregó la etiqueta del sistema %3$s a %2$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} agregó la etiqueta del sistema {systemtag} a {file}",
+ "You removed system tag %2$s from %1$s" : "Eliminaste la etiqueta del sistema %2$s de %1$s",
+ "You removed system tag {systemtag} from {file}" : "Eliminaste la etiqueta del sistema {systemtag} de {file}",
+ "%1$s removed system tag %3$s from %2$s" : "%1$s eliminó la etiqueta del sistema %3$s de %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} eliminó la etiqueta del sistema {systemtag} de {file}",
+ "%s (restricted)" : "%s (restringido)",
+ "%s (invisible)" : "%s (invisible) ",
+ "<strong>System tags</strong> for a file have been modified" : "Las <strong>etiquetas del sistema</strong> para un archivo han sido modificadas",
+ "Collaborative tags" : "Etiquetas colaborativas",
+ "Create and edit collaborative tags. These tags affect all users." : "Crear y editar etiquetas colaborativas. Estas etiquetas afectan a todos los usuarios. ",
+ "Select tag …" : "Seleccionar etiqueta ...",
+ "Name" : "Nombre",
+ "Delete" : "Borrar",
+ "Public" : "Público",
+ "Restricted" : "Restringido",
+ "Invisible" : "Invisible",
+ "Reset" : "Restaurar",
+ "No files in here" : "No hay archivos aquí",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Size" : "Tamaño",
+ "Modified" : "Modificado"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/systemtags/l10n/es_EC.js b/apps/systemtags/l10n/es_EC.js
new file mode 100644
index 00000000000..77f45fe1268
--- /dev/null
+++ b/apps/systemtags/l10n/es_EC.js
@@ -0,0 +1,58 @@
+OC.L10N.register(
+ "systemtags",
+ {
+ "Tags" : "Etiquetas",
+ "Update" : "Actualizar",
+ "Create" : "Crear",
+ "Select tag…" : "Seleccionar etiqueta...",
+ "Tagged files" : "Archivos etiquetados",
+ "Select tags to filter by" : "Selecciona las etiquetas del filtro",
+ "No tags found" : "No se encontraron etiquetas",
+ "Please select tags to filter by" : "Por favor selecciona las etiquetas del filtro",
+ "No files found for the selected tags" : "No se encontraron archivos para las etiquetas seleccionadas",
+ "Added system tag %1$s" : "Etiqueta del sistema %1$s agregada",
+ "Added system tag {systemtag}" : "Etiqueta del sistema {systemtag} agregada",
+ "%1$s added system tag %2$s" : "%1$s agregó la etiqueta del sistema %2$s",
+ "{actor} added system tag {systemtag}" : "{actor} agregó la etiqueta del sistema {systemtag}",
+ "Removed system tag %1$s" : "Etiqueta del sistema %1$s eliminada",
+ "Removed system tag {systemtag}" : "Eliminó la etiqueta del sistema {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$s eliminó la etiqueta del sistema %2$s",
+ "{actor} removed system tag {systemtag}" : "{actor} eliminó la etiqueta del sistema {systemtag}",
+ "You created system tag %1$s" : "Creaste la etiqueta del sistema %1$s",
+ "You created system tag {systemtag}" : "Creaste la etiqueta del sistema {systemtag}",
+ "%1$s created system tag %2$s" : "%1$s creo la etiqueta del sistema %2$s",
+ "{actor} created system tag {systemtag}" : "{actor} creó la etiqueta del sistema {systemtag}",
+ "You deleted system tag %1$s" : "Borraste la etiqueta del sistema %1$s",
+ "You deleted system tag {systemtag}" : "Borraste la etiqueta del sistema {systemtag}",
+ "%1$s deleted system tag %2$s" : "%1$s borró la etiqueta del sistema %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} borró la etiqueta del sistema {systemtag}",
+ "You updated system tag %2$s to %1$s" : "Actualizaste la etiqueta del sistema %2$s a %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Actualizaste la etiqueta del sistema {oldsystemtag} a {newsystemtag}",
+ "%1$s updated system tag %3$s to %2$s" : "%1$s actualizó la etiqueta del sistema %3$s a %2$s",
+ "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} actualizó la etiqueta del sistema {oldsystemtag} a {newsystemtag}",
+ "You added system tag %2$s to %1$s" : "Agregaste la etiqueta del sistema %2$s a %1$s",
+ "You added system tag {systemtag} to {file}" : "Agregaste la etiqueta del sistema {systemtag} a {file}",
+ "%1$s added system tag %3$s to %2$s" : "%1$s agregó la etiqueta del sistema %3$s a %2$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} agregó la etiqueta del sistema {systemtag} a {file}",
+ "You removed system tag %2$s from %1$s" : "Eliminaste la etiqueta del sistema %2$s de %1$s",
+ "You removed system tag {systemtag} from {file}" : "Eliminaste la etiqueta del sistema {systemtag} de {file}",
+ "%1$s removed system tag %3$s from %2$s" : "%1$s eliminó la etiqueta del sistema %3$s de %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} eliminó la etiqueta del sistema {systemtag} de {file}",
+ "%s (restricted)" : "%s (restringido)",
+ "%s (invisible)" : "%s (invisible) ",
+ "<strong>System tags</strong> for a file have been modified" : "Las <strong>etiquetas del sistema</strong> para un archivo han sido modificadas",
+ "Collaborative tags" : "Etiquetas colaborativas",
+ "Create and edit collaborative tags. These tags affect all users." : "Crear y editar etiquetas colaborativas. Estas etiquetas afectan a todos los usuarios. ",
+ "Select tag …" : "Seleccionar etiqueta ...",
+ "Name" : "Nombre",
+ "Delete" : "Borrar",
+ "Public" : "Público",
+ "Restricted" : "Restringido",
+ "Invisible" : "Invisible",
+ "Reset" : "Restaurar",
+ "No files in here" : "No hay archivos aquí",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Size" : "Tamaño",
+ "Modified" : "Modificado"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/systemtags/l10n/es_EC.json b/apps/systemtags/l10n/es_EC.json
new file mode 100644
index 00000000000..9a8e4adf3f8
--- /dev/null
+++ b/apps/systemtags/l10n/es_EC.json
@@ -0,0 +1,56 @@
+{ "translations": {
+ "Tags" : "Etiquetas",
+ "Update" : "Actualizar",
+ "Create" : "Crear",
+ "Select tag…" : "Seleccionar etiqueta...",
+ "Tagged files" : "Archivos etiquetados",
+ "Select tags to filter by" : "Selecciona las etiquetas del filtro",
+ "No tags found" : "No se encontraron etiquetas",
+ "Please select tags to filter by" : "Por favor selecciona las etiquetas del filtro",
+ "No files found for the selected tags" : "No se encontraron archivos para las etiquetas seleccionadas",
+ "Added system tag %1$s" : "Etiqueta del sistema %1$s agregada",
+ "Added system tag {systemtag}" : "Etiqueta del sistema {systemtag} agregada",
+ "%1$s added system tag %2$s" : "%1$s agregó la etiqueta del sistema %2$s",
+ "{actor} added system tag {systemtag}" : "{actor} agregó la etiqueta del sistema {systemtag}",
+ "Removed system tag %1$s" : "Etiqueta del sistema %1$s eliminada",
+ "Removed system tag {systemtag}" : "Eliminó la etiqueta del sistema {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$s eliminó la etiqueta del sistema %2$s",
+ "{actor} removed system tag {systemtag}" : "{actor} eliminó la etiqueta del sistema {systemtag}",
+ "You created system tag %1$s" : "Creaste la etiqueta del sistema %1$s",
+ "You created system tag {systemtag}" : "Creaste la etiqueta del sistema {systemtag}",
+ "%1$s created system tag %2$s" : "%1$s creo la etiqueta del sistema %2$s",
+ "{actor} created system tag {systemtag}" : "{actor} creó la etiqueta del sistema {systemtag}",
+ "You deleted system tag %1$s" : "Borraste la etiqueta del sistema %1$s",
+ "You deleted system tag {systemtag}" : "Borraste la etiqueta del sistema {systemtag}",
+ "%1$s deleted system tag %2$s" : "%1$s borró la etiqueta del sistema %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} borró la etiqueta del sistema {systemtag}",
+ "You updated system tag %2$s to %1$s" : "Actualizaste la etiqueta del sistema %2$s a %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Actualizaste la etiqueta del sistema {oldsystemtag} a {newsystemtag}",
+ "%1$s updated system tag %3$s to %2$s" : "%1$s actualizó la etiqueta del sistema %3$s a %2$s",
+ "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} actualizó la etiqueta del sistema {oldsystemtag} a {newsystemtag}",
+ "You added system tag %2$s to %1$s" : "Agregaste la etiqueta del sistema %2$s a %1$s",
+ "You added system tag {systemtag} to {file}" : "Agregaste la etiqueta del sistema {systemtag} a {file}",
+ "%1$s added system tag %3$s to %2$s" : "%1$s agregó la etiqueta del sistema %3$s a %2$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} agregó la etiqueta del sistema {systemtag} a {file}",
+ "You removed system tag %2$s from %1$s" : "Eliminaste la etiqueta del sistema %2$s de %1$s",
+ "You removed system tag {systemtag} from {file}" : "Eliminaste la etiqueta del sistema {systemtag} de {file}",
+ "%1$s removed system tag %3$s from %2$s" : "%1$s eliminó la etiqueta del sistema %3$s de %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} eliminó la etiqueta del sistema {systemtag} de {file}",
+ "%s (restricted)" : "%s (restringido)",
+ "%s (invisible)" : "%s (invisible) ",
+ "<strong>System tags</strong> for a file have been modified" : "Las <strong>etiquetas del sistema</strong> para un archivo han sido modificadas",
+ "Collaborative tags" : "Etiquetas colaborativas",
+ "Create and edit collaborative tags. These tags affect all users." : "Crear y editar etiquetas colaborativas. Estas etiquetas afectan a todos los usuarios. ",
+ "Select tag …" : "Seleccionar etiqueta ...",
+ "Name" : "Nombre",
+ "Delete" : "Borrar",
+ "Public" : "Público",
+ "Restricted" : "Restringido",
+ "Invisible" : "Invisible",
+ "Reset" : "Restaurar",
+ "No files in here" : "No hay archivos aquí",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Size" : "Tamaño",
+ "Modified" : "Modificado"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/systemtags/lib/Activity/Listener.php b/apps/systemtags/lib/Activity/Listener.php
index 0fb5d4c12be..766e08ee8c3 100644
--- a/apps/systemtags/lib/Activity/Listener.php
+++ b/apps/systemtags/lib/Activity/Listener.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
diff --git a/apps/systemtags/lib/Activity/Provider.php b/apps/systemtags/lib/Activity/Provider.php
index db7ff94fd16..3dd53deae0b 100644
--- a/apps/systemtags/lib/Activity/Provider.php
+++ b/apps/systemtags/lib/Activity/Provider.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/systemtags/lib/Activity/Setting.php b/apps/systemtags/lib/Activity/Setting.php
index 4cdb11b9c84..febb2c34432 100644
--- a/apps/systemtags/lib/Activity/Setting.php
+++ b/apps/systemtags/lib/Activity/Setting.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/systemtags/lib/Controller/LastUsedController.php b/apps/systemtags/lib/Controller/LastUsedController.php
index cbd149d75fb..d2f7d5c62a6 100644
--- a/apps/systemtags/lib/Controller/LastUsedController.php
+++ b/apps/systemtags/lib/Controller/LastUsedController.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/systemtags/lib/Settings/Admin.php b/apps/systemtags/lib/Settings/Admin.php
index 9e21dafed8b..2d892f17f13 100644
--- a/apps/systemtags/lib/Settings/Admin.php
+++ b/apps/systemtags/lib/Settings/Admin.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de>
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Joas Schilling <coding@schilljs.com>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/systemtags/tests/Settings/AdminTest.php b/apps/systemtags/tests/Settings/AdminTest.php
index d768ad86272..8b0472f2e9e 100644
--- a/apps/systemtags/tests/Settings/AdminTest.php
+++ b/apps/systemtags/tests/Settings/AdminTest.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
*
* @license GNU AGPL version 3 or any later version
diff --git a/apps/testing/appinfo/app.php b/apps/testing/appinfo/app.php
index 5dce74bf786..9b2f582f9d7 100644
--- a/apps/testing/appinfo/app.php
+++ b/apps/testing/appinfo/app.php
@@ -1,8 +1,10 @@
<?php
/**
+ * @copyright Copyright (c) 2016, ownCloud GmbH.
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
- * @copyright Copyright (c) 2016, ownCloud GmbH.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/testing/appinfo/routes.php b/apps/testing/appinfo/routes.php
index 3e5fda4fc14..549496aab32 100644
--- a/apps/testing/appinfo/routes.php
+++ b/apps/testing/appinfo/routes.php
@@ -3,6 +3,8 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/testing/clean_opcode_cache.php b/apps/testing/clean_opcode_cache.php
index d48d3131b70..d91bd84288b 100644
--- a/apps/testing/clean_opcode_cache.php
+++ b/apps/testing/clean_opcode_cache.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
*
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/testing/lib/AlternativeHomeUserBackend.php b/apps/testing/lib/AlternativeHomeUserBackend.php
index 1e86b0bc555..21511b6f6e3 100644
--- a/apps/testing/lib/AlternativeHomeUserBackend.php
+++ b/apps/testing/lib/AlternativeHomeUserBackend.php
@@ -1,8 +1,9 @@
<?php
/**
+ * @copyright Copyright (c) 2016, ownCloud GmbH.
+ *
* @author Vincent Petry <pvince81@owncloud.com>
*
- * @copyright Copyright (c) 2016, ownCloud GmbH.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/testing/lib/AppInfo/Application.php b/apps/testing/lib/AppInfo/Application.php
index 9d2b100e8b0..233af80d9fb 100644
--- a/apps/testing/lib/AppInfo/Application.php
+++ b/apps/testing/lib/AppInfo/Application.php
@@ -1,8 +1,10 @@
<?php
/**
+ * @copyright Copyright (c) 2016, ownCloud GmbH
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Vincent Petry <pvince81@owncloud.com>
*
- * @copyright Copyright (c) 2016, ownCloud GmbH
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
diff --git a/apps/testing/lib/Controller/ConfigController.php b/apps/testing/lib/Controller/ConfigController.php
index 7b3e73ab173..a7f7cc8a8bb 100644
--- a/apps/testing/lib/Controller/ConfigController.php
+++ b/apps/testing/lib/Controller/ConfigController.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/testing/lib/Controller/LockingController.php b/apps/testing/lib/Controller/LockingController.php
index 6056d9d5d7e..7b5c8cbf6c9 100644
--- a/apps/testing/lib/Controller/LockingController.php
+++ b/apps/testing/lib/Controller/LockingController.php
@@ -2,7 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
- * @author Joas Schilling <coding@schilljs.com>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/testing/lib/Controller/RateLimitTestController.php b/apps/testing/lib/Controller/RateLimitTestController.php
index c43d33e5335..6ee8dde7368 100644
--- a/apps/testing/lib/Controller/RateLimitTestController.php
+++ b/apps/testing/lib/Controller/RateLimitTestController.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
*
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/theming/appinfo/app.php b/apps/theming/appinfo/app.php
index 941df6f73df..3d4b993f7bc 100644
--- a/apps/theming/appinfo/app.php
+++ b/apps/theming/appinfo/app.php
@@ -4,6 +4,8 @@
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
* @author Bjoern Schiessle <bjoern@schiessle.org>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Julius Härtl <jus@bitgrid.net>
* @author Lukas Reschke <lukas@statuscode.ch>
*
* @license GNU AGPL version 3 or any later version
diff --git a/apps/theming/appinfo/routes.php b/apps/theming/appinfo/routes.php
index 530e13f53d4..a69ddc1a6c9 100644
--- a/apps/theming/appinfo/routes.php
+++ b/apps/theming/appinfo/routes.php
@@ -4,6 +4,9 @@
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
* @author Bjoern Schiessle <bjoern@schiessle.org>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Julius Haertl <jus@bitgrid.net>
+ * @author Julius Härtl <jus@bitgrid.net>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author oparoz <owncloud@interfasys.ch>
*
diff --git a/apps/theming/l10n/es_DO.js b/apps/theming/l10n/es_DO.js
new file mode 100644
index 00000000000..4f98160b142
--- /dev/null
+++ b/apps/theming/l10n/es_DO.js
@@ -0,0 +1,39 @@
+OC.L10N.register(
+ "theming",
+ {
+ "Loading preview…" : "Cargando vista previa...",
+ "Saved" : "Guardado",
+ "Admin" : "Administración",
+ "a safe home for all your data" : "un lugar seguro para todos tus datos",
+ "The given name is too long" : "El nombre dado es demasiado largo",
+ "The given web address is too long" : "La dirección web dada es demasiado larga",
+ "The given slogan is too long" : "El lema dado es demasiado largo",
+ "The given color is invalid" : "El color dado es inválido",
+ "There is no error, the file uploaded with success" : "No hay errores, el archivo se cargó exitosamente",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El archivo cargado excede el valor establecido en la directiva upload_max_filesize en el archivo php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo cargado excede el valor especificado de la directiva MAX_FILE_SIZE en la forma de HTML",
+ "The uploaded file was only partially uploaded" : "La carga del archivo solo se realizó parcialmente",
+ "No file was uploaded" : "No se cargó el archivo",
+ "Missing a temporary folder" : "Falta una carpeta temporal",
+ "Failed to write file to disk." : "Se presentó una falla al escribir el archivo en el disco. ",
+ "A PHP extension stopped the file upload." : "Una extensión de PHP detuvo la carga del archivo. ",
+ "No file uploaded" : "No hay archivos cargados",
+ "Unsupported image type" : "Tipo de imagen no soportado",
+ "You are already using a custom theme" : "Ya estás usando un tema personalizado",
+ "Theming" : "Tematizar",
+ "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "El tematizar hace posible personalizar facilmente la manera en que se ve tu instancia y clientes soportados. Esto será visible para todos los usuarios. ",
+ "Name" : "Nombre",
+ "Reset to default" : "Restablecer al predeterminado",
+ "Web address" : "Dirección web",
+ "Web address https://…" : "Dirección web https://...",
+ "Slogan" : "Lema",
+ "Color" : "Color",
+ "Logo" : "Logotipo",
+ "Upload new logo" : "Cargar nuevo logotipo",
+ "Login image" : "Imágen de inicio de sesión",
+ "Upload new login background" : "Cargar nueva imagen de fondo para inicio de sesión",
+ "Remove background image" : "Eliminar imagen de fondo",
+ "reset to default" : "restaurar a predeterminado",
+ "Log in image" : "Imagen de inicio de sesión"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/theming/l10n/es_DO.json b/apps/theming/l10n/es_DO.json
new file mode 100644
index 00000000000..866eb07f7fa
--- /dev/null
+++ b/apps/theming/l10n/es_DO.json
@@ -0,0 +1,37 @@
+{ "translations": {
+ "Loading preview…" : "Cargando vista previa...",
+ "Saved" : "Guardado",
+ "Admin" : "Administración",
+ "a safe home for all your data" : "un lugar seguro para todos tus datos",
+ "The given name is too long" : "El nombre dado es demasiado largo",
+ "The given web address is too long" : "La dirección web dada es demasiado larga",
+ "The given slogan is too long" : "El lema dado es demasiado largo",
+ "The given color is invalid" : "El color dado es inválido",
+ "There is no error, the file uploaded with success" : "No hay errores, el archivo se cargó exitosamente",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El archivo cargado excede el valor establecido en la directiva upload_max_filesize en el archivo php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo cargado excede el valor especificado de la directiva MAX_FILE_SIZE en la forma de HTML",
+ "The uploaded file was only partially uploaded" : "La carga del archivo solo se realizó parcialmente",
+ "No file was uploaded" : "No se cargó el archivo",
+ "Missing a temporary folder" : "Falta una carpeta temporal",
+ "Failed to write file to disk." : "Se presentó una falla al escribir el archivo en el disco. ",
+ "A PHP extension stopped the file upload." : "Una extensión de PHP detuvo la carga del archivo. ",
+ "No file uploaded" : "No hay archivos cargados",
+ "Unsupported image type" : "Tipo de imagen no soportado",
+ "You are already using a custom theme" : "Ya estás usando un tema personalizado",
+ "Theming" : "Tematizar",
+ "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "El tematizar hace posible personalizar facilmente la manera en que se ve tu instancia y clientes soportados. Esto será visible para todos los usuarios. ",
+ "Name" : "Nombre",
+ "Reset to default" : "Restablecer al predeterminado",
+ "Web address" : "Dirección web",
+ "Web address https://…" : "Dirección web https://...",
+ "Slogan" : "Lema",
+ "Color" : "Color",
+ "Logo" : "Logotipo",
+ "Upload new logo" : "Cargar nuevo logotipo",
+ "Login image" : "Imágen de inicio de sesión",
+ "Upload new login background" : "Cargar nueva imagen de fondo para inicio de sesión",
+ "Remove background image" : "Eliminar imagen de fondo",
+ "reset to default" : "restaurar a predeterminado",
+ "Log in image" : "Imagen de inicio de sesión"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/theming/l10n/es_EC.js b/apps/theming/l10n/es_EC.js
new file mode 100644
index 00000000000..4f98160b142
--- /dev/null
+++ b/apps/theming/l10n/es_EC.js
@@ -0,0 +1,39 @@
+OC.L10N.register(
+ "theming",
+ {
+ "Loading preview…" : "Cargando vista previa...",
+ "Saved" : "Guardado",
+ "Admin" : "Administración",
+ "a safe home for all your data" : "un lugar seguro para todos tus datos",
+ "The given name is too long" : "El nombre dado es demasiado largo",
+ "The given web address is too long" : "La dirección web dada es demasiado larga",
+ "The given slogan is too long" : "El lema dado es demasiado largo",
+ "The given color is invalid" : "El color dado es inválido",
+ "There is no error, the file uploaded with success" : "No hay errores, el archivo se cargó exitosamente",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El archivo cargado excede el valor establecido en la directiva upload_max_filesize en el archivo php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo cargado excede el valor especificado de la directiva MAX_FILE_SIZE en la forma de HTML",
+ "The uploaded file was only partially uploaded" : "La carga del archivo solo se realizó parcialmente",
+ "No file was uploaded" : "No se cargó el archivo",
+ "Missing a temporary folder" : "Falta una carpeta temporal",
+ "Failed to write file to disk." : "Se presentó una falla al escribir el archivo en el disco. ",
+ "A PHP extension stopped the file upload." : "Una extensión de PHP detuvo la carga del archivo. ",
+ "No file uploaded" : "No hay archivos cargados",
+ "Unsupported image type" : "Tipo de imagen no soportado",
+ "You are already using a custom theme" : "Ya estás usando un tema personalizado",
+ "Theming" : "Tematizar",
+ "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "El tematizar hace posible personalizar facilmente la manera en que se ve tu instancia y clientes soportados. Esto será visible para todos los usuarios. ",
+ "Name" : "Nombre",
+ "Reset to default" : "Restablecer al predeterminado",
+ "Web address" : "Dirección web",
+ "Web address https://…" : "Dirección web https://...",
+ "Slogan" : "Lema",
+ "Color" : "Color",
+ "Logo" : "Logotipo",
+ "Upload new logo" : "Cargar nuevo logotipo",
+ "Login image" : "Imágen de inicio de sesión",
+ "Upload new login background" : "Cargar nueva imagen de fondo para inicio de sesión",
+ "Remove background image" : "Eliminar imagen de fondo",
+ "reset to default" : "restaurar a predeterminado",
+ "Log in image" : "Imagen de inicio de sesión"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/theming/l10n/es_EC.json b/apps/theming/l10n/es_EC.json
new file mode 100644
index 00000000000..866eb07f7fa
--- /dev/null
+++ b/apps/theming/l10n/es_EC.json
@@ -0,0 +1,37 @@
+{ "translations": {
+ "Loading preview…" : "Cargando vista previa...",
+ "Saved" : "Guardado",
+ "Admin" : "Administración",
+ "a safe home for all your data" : "un lugar seguro para todos tus datos",
+ "The given name is too long" : "El nombre dado es demasiado largo",
+ "The given web address is too long" : "La dirección web dada es demasiado larga",
+ "The given slogan is too long" : "El lema dado es demasiado largo",
+ "The given color is invalid" : "El color dado es inválido",
+ "There is no error, the file uploaded with success" : "No hay errores, el archivo se cargó exitosamente",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El archivo cargado excede el valor establecido en la directiva upload_max_filesize en el archivo php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo cargado excede el valor especificado de la directiva MAX_FILE_SIZE en la forma de HTML",
+ "The uploaded file was only partially uploaded" : "La carga del archivo solo se realizó parcialmente",
+ "No file was uploaded" : "No se cargó el archivo",
+ "Missing a temporary folder" : "Falta una carpeta temporal",
+ "Failed to write file to disk." : "Se presentó una falla al escribir el archivo en el disco. ",
+ "A PHP extension stopped the file upload." : "Una extensión de PHP detuvo la carga del archivo. ",
+ "No file uploaded" : "No hay archivos cargados",
+ "Unsupported image type" : "Tipo de imagen no soportado",
+ "You are already using a custom theme" : "Ya estás usando un tema personalizado",
+ "Theming" : "Tematizar",
+ "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "El tematizar hace posible personalizar facilmente la manera en que se ve tu instancia y clientes soportados. Esto será visible para todos los usuarios. ",
+ "Name" : "Nombre",
+ "Reset to default" : "Restablecer al predeterminado",
+ "Web address" : "Dirección web",
+ "Web address https://…" : "Dirección web https://...",
+ "Slogan" : "Lema",
+ "Color" : "Color",
+ "Logo" : "Logotipo",
+ "Upload new logo" : "Cargar nuevo logotipo",
+ "Login image" : "Imágen de inicio de sesión",
+ "Upload new login background" : "Cargar nueva imagen de fondo para inicio de sesión",
+ "Remove background image" : "Eliminar imagen de fondo",
+ "reset to default" : "restaurar a predeterminado",
+ "Log in image" : "Imagen de inicio de sesión"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/theming/lib/Capabilities.php b/apps/theming/lib/Capabilities.php
index d94a65f21c1..b43779a27b5 100644
--- a/apps/theming/lib/Capabilities.php
+++ b/apps/theming/lib/Capabilities.php
@@ -2,7 +2,9 @@
/**
* @copyright Copyright (c) 2016, Joas Schilling <coding@schilljs.com>
*
+ * @author Jan-Christoph Borchardt <hey@jancborchardt.net>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Julius Härtl <jus@bitgrid.net>
*
* @license GNU AGPL version 3 or any later version
*
@@ -66,14 +68,15 @@ class Capabilities implements IPublicCapability {
*/
public function getCapabilities() {
$backgroundLogo = $this->config->getAppValue('theming', 'backgroundMime', false);
-
+ $color = $this->theming->getColorPrimary();
return [
'theming' => [
'name' => $this->theming->getName(),
'url' => $this->theming->getBaseUrl(),
'slogan' => $this->theming->getSlogan(),
- 'color' => $this->theming->getColorPrimary(),
- 'color-text' => $this->util->invertTextColor($this->theming->getColorPrimary()) ? '#000000' : '#FFFFFF',
+ 'color' => $color,
+ 'color-text' => $this->util->invertTextColor($color) ? '#000000' : '#FFFFFF',
+ 'color-element' => $this->util->elementColor($color),
'logo' => $this->url->getAbsoluteURL($this->theming->getLogo()),
'background' => $backgroundLogo === 'backgroundColor' ?
$this->theming->getColorPrimary() :
diff --git a/apps/theming/lib/Controller/IconController.php b/apps/theming/lib/Controller/IconController.php
index 5532a08c83c..7a5f76de6b6 100644
--- a/apps/theming/lib/Controller/IconController.php
+++ b/apps/theming/lib/Controller/IconController.php
@@ -2,7 +2,9 @@
/**
* @copyright Copyright (c) 2016 Julius Haertl <jus@bitgrid.net>
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Julius Haertl <jus@bitgrid.net>
+ * @author Julius Härtl <jus@bitgrid.net>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/theming/lib/Controller/ThemingController.php b/apps/theming/lib/Controller/ThemingController.php
index ccc2634ec14..b7777f1f907 100644
--- a/apps/theming/lib/Controller/ThemingController.php
+++ b/apps/theming/lib/Controller/ThemingController.php
@@ -3,10 +3,15 @@
* @copyright Copyright (c) 2016 Bjoern Schiessle <bjoern@schiessle.org>
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Bjoern Schiessle <bjoern@schiessle.org>
+ * @author Daniel Calviño Sánchez <danxuliu@gmail.com>
+ * @author Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Julius Haertl <jus@bitgrid.net>
+ * @author Julius Härtl <jus@bitgrid.net>
* @author Lukas Reschke <lukas@statuscode.ch>
- * @author oparoz <owncloud@interfasys.ch>
+ * @author Robin Appelman <robin@icewind.nl>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/theming/lib/IconBuilder.php b/apps/theming/lib/IconBuilder.php
index d0e26e110fc..83258341985 100644
--- a/apps/theming/lib/IconBuilder.php
+++ b/apps/theming/lib/IconBuilder.php
@@ -2,22 +2,24 @@
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
+ * @author Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @author Julius Haertl <jus@bitgrid.net>
* @author Julius Härtl <jus@bitgrid.net>
*
* @license GNU AGPL version 3 or any later version
*
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
*
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
diff --git a/apps/theming/lib/ImageManager.php b/apps/theming/lib/ImageManager.php
index 88e456a2969..14dba0d0742 100644
--- a/apps/theming/lib/ImageManager.php
+++ b/apps/theming/lib/ImageManager.php
@@ -2,22 +2,22 @@
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
- * @author Julius Härtl <jus@bitgrid.net>
+ * @author Julius Haertl <jus@bitgrid.net>
*
* @license GNU AGPL version 3 or any later version
*
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
*
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
diff --git a/apps/theming/lib/Migration/ThemingImages.php b/apps/theming/lib/Migration/ThemingImages.php
index f6f484be8b5..4f929746cb1 100644
--- a/apps/theming/lib/Migration/ThemingImages.php
+++ b/apps/theming/lib/Migration/ThemingImages.php
@@ -2,22 +2,22 @@
/**
* @copyright Copyright (c) 2017 Julius Härtl <jus@bitgrid.net>
*
- * @author Julius Härtl <jus@bitgrid.net>
+ * @author Julius Haertl <jus@bitgrid.net>
*
* @license GNU AGPL version 3 or any later version
*
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
*
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
diff --git a/apps/theming/lib/Settings/Admin.php b/apps/theming/lib/Settings/Admin.php
index c8074f386af..12f5dd2b8fa 100644
--- a/apps/theming/lib/Settings/Admin.php
+++ b/apps/theming/lib/Settings/Admin.php
@@ -3,6 +3,12 @@
* @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de>
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
+ * @author iamfool <praveenraonp@gmail.com>
+ * @author Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @author Julius Haertl <jus@bitgrid.net>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/theming/lib/Settings/Section.php b/apps/theming/lib/Settings/Section.php
index 6078743dead..9ec990ebe48 100644
--- a/apps/theming/lib/Settings/Section.php
+++ b/apps/theming/lib/Settings/Section.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de>
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Joas Schilling <coding@schilljs.com>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/theming/lib/ThemingDefaults.php b/apps/theming/lib/ThemingDefaults.php
index 6ee546d2630..3d756bdffc8 100644
--- a/apps/theming/lib/ThemingDefaults.php
+++ b/apps/theming/lib/ThemingDefaults.php
@@ -3,6 +3,17 @@
* @copyright Copyright (c) 2016 Bjoern Schiessle <bjoern@schiessle.org>
* @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
*
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
+ * @author Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @author Joachim Bauch <bauch@struktur.de>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Julius Haertl <jus@bitgrid.net>
+ * @author Julius Härtl <jus@bitgrid.net>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/theming/lib/Util.php b/apps/theming/lib/Util.php
index 83d8c7aae47..194b5eeb0d0 100644
--- a/apps/theming/lib/Util.php
+++ b/apps/theming/lib/Util.php
@@ -2,7 +2,9 @@
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Julius Haertl <jus@bitgrid.net>
+ * @author Julius Härtl <jus@bitgrid.net>
*
* @license GNU AGPL version 3 or any later version
*
@@ -79,9 +81,8 @@ class Util {
$l = $this->calculateLuminance($color);
if($l>0.8) {
return '#555555';
- } else {
- return $color;
}
+ return $color;
}
/**
diff --git a/apps/theming/tests/CapabilitiesTest.php b/apps/theming/tests/CapabilitiesTest.php
index 8ab7f6e2c7f..17fc253fa4f 100644
--- a/apps/theming/tests/CapabilitiesTest.php
+++ b/apps/theming/tests/CapabilitiesTest.php
@@ -2,6 +2,10 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Julius Härtl <jus@bitgrid.net>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
@@ -67,6 +71,7 @@ class CapabilitiesTest extends TestCase {
'slogan' => 'slogan',
'color' => '#FFFFFF',
'color-text' => '#000000',
+ 'color-element' => '#555555',
'logo' => 'http://absolute/logo',
'background' => 'http://absolute/background',
]],
@@ -76,6 +81,7 @@ class CapabilitiesTest extends TestCase {
'slogan' => 'slogan3',
'color' => '#01e4a0',
'color-text' => '#FFFFFF',
+ 'color-element' => '#01e4a0',
'logo' => 'http://localhost/logo5',
'background' => 'http://localhost/background6',
]],
@@ -85,6 +91,7 @@ class CapabilitiesTest extends TestCase {
'slogan' => 'slogan3',
'color' => '#000000',
'color-text' => '#FFFFFF',
+ 'color-element' => '#000000',
'logo' => 'http://localhost/logo5',
'background' => '#000000',
]],
diff --git a/apps/theming/tests/Controller/IconControllerTest.php b/apps/theming/tests/Controller/IconControllerTest.php
index ca1f7fe0ff7..d92677e1f84 100644
--- a/apps/theming/tests/Controller/IconControllerTest.php
+++ b/apps/theming/tests/Controller/IconControllerTest.php
@@ -2,22 +2,25 @@
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Julius Haertl <jus@bitgrid.net>
* @author Julius Härtl <jus@bitgrid.net>
+ * @author Morris Jobke <hey@morrisjobke.de>
*
* @license GNU AGPL version 3 or any later version
*
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
*
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Theming\Tests\Controller;
diff --git a/apps/theming/tests/Controller/ThemingControllerTest.php b/apps/theming/tests/Controller/ThemingControllerTest.php
index e964e886e5c..54b842bc4e8 100644
--- a/apps/theming/tests/Controller/ThemingControllerTest.php
+++ b/apps/theming/tests/Controller/ThemingControllerTest.php
@@ -2,9 +2,15 @@
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
+ * @author Daniel Calviño Sánchez <danxuliu@gmail.com>
+ * @author Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @author Joas Schilling <coding@schilljs.com>
* @author Julius Haertl <jus@bitgrid.net>
+ * @author Julius Härtl <jus@bitgrid.net>
* @author Lukas Reschke <lukas@statuscode.ch>
- * @author oparoz <owncloud@interfasys.ch>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/theming/tests/IconBuilderTest.php b/apps/theming/tests/IconBuilderTest.php
index 6821655eafe..f25f76a8180 100644
--- a/apps/theming/tests/IconBuilderTest.php
+++ b/apps/theming/tests/IconBuilderTest.php
@@ -2,22 +2,25 @@
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
+ * @author Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @author Julius Haertl <jus@bitgrid.net>
* @author Julius Härtl <jus@bitgrid.net>
+ * @author Morris Jobke <hey@morrisjobke.de>
*
* @license GNU AGPL version 3 or any later version
*
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
*
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Theming\Tests;
diff --git a/apps/theming/tests/ImageManagerTest.php b/apps/theming/tests/ImageManagerTest.php
index 65bcb4dbc06..6c0b31528fc 100644
--- a/apps/theming/tests/ImageManagerTest.php
+++ b/apps/theming/tests/ImageManagerTest.php
@@ -2,22 +2,23 @@
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
- * @author Julius Härtl <jus@bitgrid.net>
+ * @author Julius Haertl <jus@bitgrid.net>
+ * @author Morris Jobke <hey@morrisjobke.de>
*
* @license GNU AGPL version 3 or any later version
*
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
*
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Theming\Tests;
diff --git a/apps/theming/tests/Migration/ThemingImages.php b/apps/theming/tests/Migration/ThemingImages.php
index e15d0fd1bbc..a8d066c26f7 100644
--- a/apps/theming/tests/Migration/ThemingImages.php
+++ b/apps/theming/tests/Migration/ThemingImages.php
@@ -2,22 +2,22 @@
/**
* @copyright Copyright (c) 2017 Julius Härtl <jus@bitgrid.net>
*
- * @author Julius Härtl <jus@bitgrid.net>
+ * @author Julius Haertl <jus@bitgrid.net>
*
* @license GNU AGPL version 3 or any later version
*
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
*
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
diff --git a/apps/theming/tests/ServicesTest.php b/apps/theming/tests/ServicesTest.php
index 1e98e67841c..a46e28235f5 100644
--- a/apps/theming/tests/ServicesTest.php
+++ b/apps/theming/tests/ServicesTest.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/theming/tests/Settings/AdminTest.php b/apps/theming/tests/Settings/AdminTest.php
index fb55640e968..4f3c9a9faaa 100644
--- a/apps/theming/tests/Settings/AdminTest.php
+++ b/apps/theming/tests/Settings/AdminTest.php
@@ -2,7 +2,11 @@
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
+ * @author iamfool <praveenraonp@gmail.com>
+ * @author Jan-Christoph Borchardt <hey@jancborchardt.net>
+ * @author Julius Haertl <jus@bitgrid.net>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/theming/tests/Settings/SectionTest.php b/apps/theming/tests/Settings/SectionTest.php
index 90d1854aebf..09abf9e34f5 100644
--- a/apps/theming/tests/Settings/SectionTest.php
+++ b/apps/theming/tests/Settings/SectionTest.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
*
* @license GNU AGPL version 3 or any later version
diff --git a/apps/theming/tests/ThemingDefaultsTest.php b/apps/theming/tests/ThemingDefaultsTest.php
index abd85a612c9..1bc4dfc69dc 100644
--- a/apps/theming/tests/ThemingDefaultsTest.php
+++ b/apps/theming/tests/ThemingDefaultsTest.php
@@ -2,8 +2,14 @@
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
+ * @author Jan-Christoph Borchardt <hey@jancborchardt.net>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Julius Haertl <jus@bitgrid.net>
+ * @author Julius Härtl <jus@bitgrid.net>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/theming/tests/UtilTest.php b/apps/theming/tests/UtilTest.php
index d81c253f98a..94e4c9cbcc8 100644
--- a/apps/theming/tests/UtilTest.php
+++ b/apps/theming/tests/UtilTest.php
@@ -2,7 +2,9 @@
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Julius Haertl <jus@bitgrid.net>
+ * @author Julius Härtl <jus@bitgrid.net>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/twofactor_backupcodes/l10n/es_DO.js b/apps/twofactor_backupcodes/l10n/es_DO.js
new file mode 100644
index 00000000000..925894cb77d
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/es_DO.js
@@ -0,0 +1,18 @@
+OC.L10N.register(
+ "twofactor_backupcodes",
+ {
+ "Generate backup codes" : "Generar los códigos de respaldo",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Los códigos de respaldo han sido generados. Se han usado {{used}} de {{total}} códigos.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Estos son tus códigos de respaldo. Por favor resguárdalos y/o imprímelos ya que no podrás leerlos otra vez después.",
+ "Save backup codes" : "Guardar códigos de respaldo",
+ "Print backup codes" : "Imprimir códigos de respaldo",
+ "Regenerate backup codes" : "Regenerar códigos de respaldo",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
+ "An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
+ "Nextcloud backup codes" : "Códigos de respaldo de Nextcloud",
+ "You created two-factor backup codes for your account" : "Creaste códigos de respaldo de dos factores para tu cuenta",
+ "Backup code" : "Código de respaldo",
+ "Use backup code" : "Usa el código de respaldo",
+ "Second-factor backup codes" : "Códigos de respaldo del segundo factor"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/twofactor_backupcodes/l10n/es_DO.json b/apps/twofactor_backupcodes/l10n/es_DO.json
new file mode 100644
index 00000000000..3cfd05bcd37
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/es_DO.json
@@ -0,0 +1,16 @@
+{ "translations": {
+ "Generate backup codes" : "Generar los códigos de respaldo",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Los códigos de respaldo han sido generados. Se han usado {{used}} de {{total}} códigos.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Estos son tus códigos de respaldo. Por favor resguárdalos y/o imprímelos ya que no podrás leerlos otra vez después.",
+ "Save backup codes" : "Guardar códigos de respaldo",
+ "Print backup codes" : "Imprimir códigos de respaldo",
+ "Regenerate backup codes" : "Regenerar códigos de respaldo",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
+ "An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
+ "Nextcloud backup codes" : "Códigos de respaldo de Nextcloud",
+ "You created two-factor backup codes for your account" : "Creaste códigos de respaldo de dos factores para tu cuenta",
+ "Backup code" : "Código de respaldo",
+ "Use backup code" : "Usa el código de respaldo",
+ "Second-factor backup codes" : "Códigos de respaldo del segundo factor"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/twofactor_backupcodes/l10n/es_EC.js b/apps/twofactor_backupcodes/l10n/es_EC.js
new file mode 100644
index 00000000000..925894cb77d
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/es_EC.js
@@ -0,0 +1,18 @@
+OC.L10N.register(
+ "twofactor_backupcodes",
+ {
+ "Generate backup codes" : "Generar los códigos de respaldo",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Los códigos de respaldo han sido generados. Se han usado {{used}} de {{total}} códigos.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Estos son tus códigos de respaldo. Por favor resguárdalos y/o imprímelos ya que no podrás leerlos otra vez después.",
+ "Save backup codes" : "Guardar códigos de respaldo",
+ "Print backup codes" : "Imprimir códigos de respaldo",
+ "Regenerate backup codes" : "Regenerar códigos de respaldo",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
+ "An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
+ "Nextcloud backup codes" : "Códigos de respaldo de Nextcloud",
+ "You created two-factor backup codes for your account" : "Creaste códigos de respaldo de dos factores para tu cuenta",
+ "Backup code" : "Código de respaldo",
+ "Use backup code" : "Usa el código de respaldo",
+ "Second-factor backup codes" : "Códigos de respaldo del segundo factor"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/twofactor_backupcodes/l10n/es_EC.json b/apps/twofactor_backupcodes/l10n/es_EC.json
new file mode 100644
index 00000000000..3cfd05bcd37
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/es_EC.json
@@ -0,0 +1,16 @@
+{ "translations": {
+ "Generate backup codes" : "Generar los códigos de respaldo",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Los códigos de respaldo han sido generados. Se han usado {{used}} de {{total}} códigos.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Estos son tus códigos de respaldo. Por favor resguárdalos y/o imprímelos ya que no podrás leerlos otra vez después.",
+ "Save backup codes" : "Guardar códigos de respaldo",
+ "Print backup codes" : "Imprimir códigos de respaldo",
+ "Regenerate backup codes" : "Regenerar códigos de respaldo",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
+ "An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
+ "Nextcloud backup codes" : "Códigos de respaldo de Nextcloud",
+ "You created two-factor backup codes for your account" : "Creaste códigos de respaldo de dos factores para tu cuenta",
+ "Backup code" : "Código de respaldo",
+ "Use backup code" : "Usa el código de respaldo",
+ "Second-factor backup codes" : "Códigos de respaldo del segundo factor"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/updatenotification/appinfo/app.php b/apps/updatenotification/appinfo/app.php
index 3e966fd1276..fd1739bde55 100644
--- a/apps/updatenotification/appinfo/app.php
+++ b/apps/updatenotification/appinfo/app.php
@@ -4,6 +4,7 @@
*
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/updatenotification/l10n/es_DO.js b/apps/updatenotification/l10n/es_DO.js
new file mode 100644
index 00000000000..7753f5b5a04
--- /dev/null
+++ b/apps/updatenotification/l10n/es_DO.js
@@ -0,0 +1,28 @@
+OC.L10N.register(
+ "updatenotification",
+ {
+ "Update notifications" : "Actualizar notificaciones",
+ "Could not start updater, please try the manual update" : "No fue posible iniciar el actualizador, por favor intenta la actualización manual",
+ "{version} is available. Get more information on how to update." : "{version} está disponible. Obten más información de cómo actualizar. ",
+ "Channel updated" : "Canal actualizado",
+ "The update server could not be reached since %d days to check for new updates." : "El servidor de actualización no ha podido ser alcanzado desde %d días para verificar actualizaciones. ",
+ "Please check the Nextcloud and server log files for errors." : "Por favor verifica los archivos de bitacoras de Nextcloud y del servidor por errores. ",
+ "Update to %1$s is available." : "La actualización a %1$s está disponible. ",
+ "Update for %1$s to version %2$s is available." : "La actualización para %1$s a la versión %2$s está disponible.",
+ "Update for {app} to version %s is available." : "Actualización para {app} a la versión %s está disponible.",
+ "A new version is available: %s" : "Una nueva versión está disponible: %s",
+ "Open updater" : "Abrir actualizador",
+ "Download now" : "Descargar ahora",
+ "The update check is not yet finished. Please refresh the page." : "La verificación de actualización aún no termina. Por favor actualiza la página.",
+ "Your version is up to date." : "Tu verisón está actualizada.",
+ "Checked on %s" : "Verificado el %s",
+ "A non-default update server is in use to be checked for updates:" : "Un servidor de actualizaciones no-predeterminado está en uso para ser verficiado por actualizaciones:",
+ "Update channel:" : "Actualizar el canal:",
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Siempre puedes actualizar a una versión más reciente / canal experimental. Sin embargo nunca podrás desactualizar la versión a un canal más estable. ",
+ "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Nota que después una nueva publicación puede tomar algo de tiempo antes de que se muestre aquí. Distribuimos nuevas versiones para que sean distribuidas a través del tiempo para nuestros usuarios y algunas veces nos saltamos una versión cuando encontramos detalles.",
+ "Notify members of the following groups about available updates:" : "Notificar a los miembros de los siguientes grupos de las actualizaciones disponibles:",
+ "Only notification for app updates are available." : "Sólo se tienen disponibles notificaciones de actualizaciones de la aplicación.",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "El canal de actualización seleccionado hace que las notificaciones dedicadas al servidor sean obsoletas. ",
+ "The selected update channel does not support updates of the server." : "El canal de actualización seleccionado no soporta actualizaciones del servidor. "
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/es_DO.json b/apps/updatenotification/l10n/es_DO.json
new file mode 100644
index 00000000000..5dea8ca3eec
--- /dev/null
+++ b/apps/updatenotification/l10n/es_DO.json
@@ -0,0 +1,26 @@
+{ "translations": {
+ "Update notifications" : "Actualizar notificaciones",
+ "Could not start updater, please try the manual update" : "No fue posible iniciar el actualizador, por favor intenta la actualización manual",
+ "{version} is available. Get more information on how to update." : "{version} está disponible. Obten más información de cómo actualizar. ",
+ "Channel updated" : "Canal actualizado",
+ "The update server could not be reached since %d days to check for new updates." : "El servidor de actualización no ha podido ser alcanzado desde %d días para verificar actualizaciones. ",
+ "Please check the Nextcloud and server log files for errors." : "Por favor verifica los archivos de bitacoras de Nextcloud y del servidor por errores. ",
+ "Update to %1$s is available." : "La actualización a %1$s está disponible. ",
+ "Update for %1$s to version %2$s is available." : "La actualización para %1$s a la versión %2$s está disponible.",
+ "Update for {app} to version %s is available." : "Actualización para {app} a la versión %s está disponible.",
+ "A new version is available: %s" : "Una nueva versión está disponible: %s",
+ "Open updater" : "Abrir actualizador",
+ "Download now" : "Descargar ahora",
+ "The update check is not yet finished. Please refresh the page." : "La verificación de actualización aún no termina. Por favor actualiza la página.",
+ "Your version is up to date." : "Tu verisón está actualizada.",
+ "Checked on %s" : "Verificado el %s",
+ "A non-default update server is in use to be checked for updates:" : "Un servidor de actualizaciones no-predeterminado está en uso para ser verficiado por actualizaciones:",
+ "Update channel:" : "Actualizar el canal:",
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Siempre puedes actualizar a una versión más reciente / canal experimental. Sin embargo nunca podrás desactualizar la versión a un canal más estable. ",
+ "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Nota que después una nueva publicación puede tomar algo de tiempo antes de que se muestre aquí. Distribuimos nuevas versiones para que sean distribuidas a través del tiempo para nuestros usuarios y algunas veces nos saltamos una versión cuando encontramos detalles.",
+ "Notify members of the following groups about available updates:" : "Notificar a los miembros de los siguientes grupos de las actualizaciones disponibles:",
+ "Only notification for app updates are available." : "Sólo se tienen disponibles notificaciones de actualizaciones de la aplicación.",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "El canal de actualización seleccionado hace que las notificaciones dedicadas al servidor sean obsoletas. ",
+ "The selected update channel does not support updates of the server." : "El canal de actualización seleccionado no soporta actualizaciones del servidor. "
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/es_EC.js b/apps/updatenotification/l10n/es_EC.js
new file mode 100644
index 00000000000..7753f5b5a04
--- /dev/null
+++ b/apps/updatenotification/l10n/es_EC.js
@@ -0,0 +1,28 @@
+OC.L10N.register(
+ "updatenotification",
+ {
+ "Update notifications" : "Actualizar notificaciones",
+ "Could not start updater, please try the manual update" : "No fue posible iniciar el actualizador, por favor intenta la actualización manual",
+ "{version} is available. Get more information on how to update." : "{version} está disponible. Obten más información de cómo actualizar. ",
+ "Channel updated" : "Canal actualizado",
+ "The update server could not be reached since %d days to check for new updates." : "El servidor de actualización no ha podido ser alcanzado desde %d días para verificar actualizaciones. ",
+ "Please check the Nextcloud and server log files for errors." : "Por favor verifica los archivos de bitacoras de Nextcloud y del servidor por errores. ",
+ "Update to %1$s is available." : "La actualización a %1$s está disponible. ",
+ "Update for %1$s to version %2$s is available." : "La actualización para %1$s a la versión %2$s está disponible.",
+ "Update for {app} to version %s is available." : "Actualización para {app} a la versión %s está disponible.",
+ "A new version is available: %s" : "Una nueva versión está disponible: %s",
+ "Open updater" : "Abrir actualizador",
+ "Download now" : "Descargar ahora",
+ "The update check is not yet finished. Please refresh the page." : "La verificación de actualización aún no termina. Por favor actualiza la página.",
+ "Your version is up to date." : "Tu verisón está actualizada.",
+ "Checked on %s" : "Verificado el %s",
+ "A non-default update server is in use to be checked for updates:" : "Un servidor de actualizaciones no-predeterminado está en uso para ser verficiado por actualizaciones:",
+ "Update channel:" : "Actualizar el canal:",
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Siempre puedes actualizar a una versión más reciente / canal experimental. Sin embargo nunca podrás desactualizar la versión a un canal más estable. ",
+ "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Nota que después una nueva publicación puede tomar algo de tiempo antes de que se muestre aquí. Distribuimos nuevas versiones para que sean distribuidas a través del tiempo para nuestros usuarios y algunas veces nos saltamos una versión cuando encontramos detalles.",
+ "Notify members of the following groups about available updates:" : "Notificar a los miembros de los siguientes grupos de las actualizaciones disponibles:",
+ "Only notification for app updates are available." : "Sólo se tienen disponibles notificaciones de actualizaciones de la aplicación.",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "El canal de actualización seleccionado hace que las notificaciones dedicadas al servidor sean obsoletas. ",
+ "The selected update channel does not support updates of the server." : "El canal de actualización seleccionado no soporta actualizaciones del servidor. "
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/es_EC.json b/apps/updatenotification/l10n/es_EC.json
new file mode 100644
index 00000000000..5dea8ca3eec
--- /dev/null
+++ b/apps/updatenotification/l10n/es_EC.json
@@ -0,0 +1,26 @@
+{ "translations": {
+ "Update notifications" : "Actualizar notificaciones",
+ "Could not start updater, please try the manual update" : "No fue posible iniciar el actualizador, por favor intenta la actualización manual",
+ "{version} is available. Get more information on how to update." : "{version} está disponible. Obten más información de cómo actualizar. ",
+ "Channel updated" : "Canal actualizado",
+ "The update server could not be reached since %d days to check for new updates." : "El servidor de actualización no ha podido ser alcanzado desde %d días para verificar actualizaciones. ",
+ "Please check the Nextcloud and server log files for errors." : "Por favor verifica los archivos de bitacoras de Nextcloud y del servidor por errores. ",
+ "Update to %1$s is available." : "La actualización a %1$s está disponible. ",
+ "Update for %1$s to version %2$s is available." : "La actualización para %1$s a la versión %2$s está disponible.",
+ "Update for {app} to version %s is available." : "Actualización para {app} a la versión %s está disponible.",
+ "A new version is available: %s" : "Una nueva versión está disponible: %s",
+ "Open updater" : "Abrir actualizador",
+ "Download now" : "Descargar ahora",
+ "The update check is not yet finished. Please refresh the page." : "La verificación de actualización aún no termina. Por favor actualiza la página.",
+ "Your version is up to date." : "Tu verisón está actualizada.",
+ "Checked on %s" : "Verificado el %s",
+ "A non-default update server is in use to be checked for updates:" : "Un servidor de actualizaciones no-predeterminado está en uso para ser verficiado por actualizaciones:",
+ "Update channel:" : "Actualizar el canal:",
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Siempre puedes actualizar a una versión más reciente / canal experimental. Sin embargo nunca podrás desactualizar la versión a un canal más estable. ",
+ "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Nota que después una nueva publicación puede tomar algo de tiempo antes de que se muestre aquí. Distribuimos nuevas versiones para que sean distribuidas a través del tiempo para nuestros usuarios y algunas veces nos saltamos una versión cuando encontramos detalles.",
+ "Notify members of the following groups about available updates:" : "Notificar a los miembros de los siguientes grupos de las actualizaciones disponibles:",
+ "Only notification for app updates are available." : "Sólo se tienen disponibles notificaciones de actualizaciones de la aplicación.",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "El canal de actualización seleccionado hace que las notificaciones dedicadas al servidor sean obsoletas. ",
+ "The selected update channel does not support updates of the server." : "El canal de actualización seleccionado no soporta actualizaciones del servidor. "
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/updatenotification/lib/Controller/AdminController.php b/apps/updatenotification/lib/Controller/AdminController.php
index fd68a6dd962..9d2a5074a4a 100644
--- a/apps/updatenotification/lib/Controller/AdminController.php
+++ b/apps/updatenotification/lib/Controller/AdminController.php
@@ -2,8 +2,10 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
*
* @license AGPL-3.0
*
diff --git a/apps/updatenotification/lib/Notification/BackgroundJob.php b/apps/updatenotification/lib/Notification/BackgroundJob.php
index 9155b9d2556..08baa35664f 100644
--- a/apps/updatenotification/lib/Notification/BackgroundJob.php
+++ b/apps/updatenotification/lib/Notification/BackgroundJob.php
@@ -3,6 +3,8 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
*
* @license AGPL-3.0
*
diff --git a/apps/updatenotification/lib/Notification/Notifier.php b/apps/updatenotification/lib/Notification/Notifier.php
index 2fc1d36b0cb..cb7b89e01f5 100644
--- a/apps/updatenotification/lib/Notification/Notifier.php
+++ b/apps/updatenotification/lib/Notification/Notifier.php
@@ -3,7 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
- * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/updatenotification/lib/UpdateChecker.php b/apps/updatenotification/lib/UpdateChecker.php
index 040a6c3a6ac..ad76de56953 100644
--- a/apps/updatenotification/lib/UpdateChecker.php
+++ b/apps/updatenotification/lib/UpdateChecker.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
diff --git a/apps/updatenotification/tests/Controller/AdminControllerTest.php b/apps/updatenotification/tests/Controller/AdminControllerTest.php
index ebf044abffd..75588a1aec5 100644
--- a/apps/updatenotification/tests/Controller/AdminControllerTest.php
+++ b/apps/updatenotification/tests/Controller/AdminControllerTest.php
@@ -4,6 +4,7 @@
*
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
*
* @license AGPL-3.0
*
diff --git a/apps/updatenotification/tests/ResetTokenBackgroundJobTest.php b/apps/updatenotification/tests/ResetTokenBackgroundJobTest.php
index a52d46040cd..4309aed84bf 100644
--- a/apps/updatenotification/tests/ResetTokenBackgroundJobTest.php
+++ b/apps/updatenotification/tests/ResetTokenBackgroundJobTest.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/updatenotification/tests/UpdateCheckerTest.php b/apps/updatenotification/tests/UpdateCheckerTest.php
index c5c3034dd72..f7ed83047a6 100644
--- a/apps/updatenotification/tests/UpdateCheckerTest.php
+++ b/apps/updatenotification/tests/UpdateCheckerTest.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
diff --git a/apps/user_ldap/ajax/deleteConfiguration.php b/apps/user_ldap/ajax/deleteConfiguration.php
index 6115ae2faa5..220f4c13c4a 100644
--- a/apps/user_ldap/ajax/deleteConfiguration.php
+++ b/apps/user_ldap/ajax/deleteConfiguration.php
@@ -4,10 +4,10 @@
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Bart Visscher <bartv@thisnet.nl>
- * @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/user_ldap/ajax/getConfiguration.php b/apps/user_ldap/ajax/getConfiguration.php
index 34ac97f29e7..a6c3d975782 100644
--- a/apps/user_ldap/ajax/getConfiguration.php
+++ b/apps/user_ldap/ajax/getConfiguration.php
@@ -3,8 +3,8 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
- * @author Christopher Schäpers <kondou@ts.unde.re>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Juan Pablo Villafáñez <jvillafanez@solidgear.es>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
*
diff --git a/apps/user_ldap/ajax/getNewServerConfigPrefix.php b/apps/user_ldap/ajax/getNewServerConfigPrefix.php
index 536aab4bc87..d65e9add563 100644
--- a/apps/user_ldap/ajax/getNewServerConfigPrefix.php
+++ b/apps/user_ldap/ajax/getNewServerConfigPrefix.php
@@ -5,6 +5,7 @@
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/user_ldap/ajax/testConfiguration.php b/apps/user_ldap/ajax/testConfiguration.php
index d48a6be9382..1b33a025440 100644
--- a/apps/user_ldap/ajax/testConfiguration.php
+++ b/apps/user_ldap/ajax/testConfiguration.php
@@ -2,9 +2,11 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Allan Nordhøy <epost@anotheragency.no>
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Bart Visscher <bartv@thisnet.nl>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Juan Pablo Villafáñez <jvillafanez@solidgear.es>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
diff --git a/apps/user_ldap/ajax/wizard.php b/apps/user_ldap/ajax/wizard.php
index 60102c72b40..b38761b0f22 100644
--- a/apps/user_ldap/ajax/wizard.php
+++ b/apps/user_ldap/ajax/wizard.php
@@ -4,9 +4,12 @@
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Juan Pablo Villafáñez <jvillafanez@solidgear.es>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Roger Szabo <roger.szabo@web.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/user_ldap/appinfo/app.php b/apps/user_ldap/appinfo/app.php
index 5239e52234a..f371ef9efb3 100644
--- a/apps/user_ldap/appinfo/app.php
+++ b/apps/user_ldap/appinfo/app.php
@@ -3,13 +3,13 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
- * @author Bart Visscher <bartv@thisnet.nl>
- * @author Christopher Schäpers <kondou@ts.unde.re>
* @author Dominik Schmidt <dev@dominik-schmidt.de>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Juan Pablo Villafáñez <jvillafanez@solidgear.es>
* @author Morris Jobke <hey@morrisjobke.de>
- * @author Robin Appelman <robin@icewind.nl>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Roger Szabo <roger.szabo@web.de>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
*
* @license AGPL-3.0
*
@@ -27,6 +27,13 @@
*
*/
+\OC::$server->registerService('LDAPUserPluginManager', function() {
+ return new OCA\User_LDAP\UserPluginManager();
+});
+\OC::$server->registerService('LDAPGroupPluginManager', function() {
+ return new OCA\User_LDAP\GroupPluginManager();
+});
+
$helper = new \OCA\User_LDAP\Helper(\OC::$server->getConfig());
$configPrefixes = $helper->getServerConfigurationPrefixes(true);
if(count($configPrefixes) > 0) {
@@ -46,12 +53,19 @@ if(count($configPrefixes) > 0) {
});
$userSession = \OC::$server->getUserSession();
+ $userPluginManager = \OC::$server->query('LDAPUserPluginManager');
+ $groupPluginManager = \OC::$server->query('LDAPGroupPluginManager');
+
$userBackend = new OCA\User_LDAP\User_Proxy(
- $configPrefixes, $ldapWrapper, $ocConfig, $notificationManager, $userSession
+ $configPrefixes, $ldapWrapper, $ocConfig, $notificationManager, $userSession, $userPluginManager
);
- $groupBackend = new OCA\User_LDAP\Group_Proxy($configPrefixes, $ldapWrapper);
+ $groupBackend = new OCA\User_LDAP\Group_Proxy($configPrefixes, $ldapWrapper, $groupPluginManager);
// register user backend
OC_User::useBackend($userBackend);
+
+ // Hook to allow plugins to work on registered backends
+ OC::$server->getEventDispatcher()->dispatch('OCA\\User_LDAP\\User\\User::postLDAPBackendAdded');
+
\OC::$server->getGroupManager()->addBackend($groupBackend);
}
diff --git a/apps/user_ldap/appinfo/install.php b/apps/user_ldap/appinfo/install.php
index 09f9b412342..f0701c66455 100644
--- a/apps/user_ldap/appinfo/install.php
+++ b/apps/user_ldap/appinfo/install.php
@@ -4,7 +4,8 @@
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Christopher Schäpers <kondou@ts.unde.re>
- * @author Roger Szabo <roger.szabo@web.de>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author root <root@localhost.localdomain>
*
* @license AGPL-3.0
*
diff --git a/apps/user_ldap/appinfo/register_command.php b/apps/user_ldap/appinfo/register_command.php
index bd706e61f22..a9de74e1ec2 100644
--- a/apps/user_ldap/appinfo/register_command.php
+++ b/apps/user_ldap/appinfo/register_command.php
@@ -5,6 +5,9 @@
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Roger Szabo <roger.szabo@web.de>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
*
* @license AGPL-3.0
*
@@ -37,7 +40,8 @@ $uBackend = new User_Proxy(
new LDAP(),
$ocConfig,
\OC::$server->getNotificationManager(),
- \OC::$server->getUserSession()
+ \OC::$server->getUserSession(),
+ \OC::$server->query('LDAPUserPluginManager')
);
$deletedUsersIndex = new DeletedUsersIndex(
$ocConfig, $dbConnection, $userMapping
diff --git a/apps/user_ldap/appinfo/routes.php b/apps/user_ldap/appinfo/routes.php
index 39964838d48..c86e16eb8f9 100644
--- a/apps/user_ldap/appinfo/routes.php
+++ b/apps/user_ldap/appinfo/routes.php
@@ -2,8 +2,10 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roger Szabo <roger.szabo@web.de>
*
* @license AGPL-3.0
*
diff --git a/apps/user_ldap/appinfo/update.php b/apps/user_ldap/appinfo/update.php
index f6f7389dd5f..7c0adbc048e 100644
--- a/apps/user_ldap/appinfo/update.php
+++ b/apps/user_ldap/appinfo/update.php
@@ -1,8 +1,11 @@
<?php
/**
- *
* @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de)
*
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Roger Szabo <roger.szabo@web.de>
+ * @author root <root@localhost.localdomain>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/user_ldap/composer/composer/autoload_classmap.php b/apps/user_ldap/composer/composer/autoload_classmap.php
index 6558af00212..0962fe2c4eb 100644
--- a/apps/user_ldap/composer/composer/autoload_classmap.php
+++ b/apps/user_ldap/composer/composer/autoload_classmap.php
@@ -24,9 +24,13 @@ return array(
'OCA\\User_LDAP\\Exceptions\\ConstraintViolationException' => $baseDir . '/../lib/Exceptions/ConstraintViolationException.php',
'OCA\\User_LDAP\\Exceptions\\NotOnLDAP' => $baseDir . '/../lib/Exceptions/NotOnLDAP.php',
'OCA\\User_LDAP\\FilesystemHelper' => $baseDir . '/../lib/FilesystemHelper.php',
+ 'OCA\\User_LDAP\\GroupPluginManager' => $baseDir . '/../lib/GroupPluginManager.php',
'OCA\\User_LDAP\\Group_LDAP' => $baseDir . '/../lib/Group_LDAP.php',
'OCA\\User_LDAP\\Group_Proxy' => $baseDir . '/../lib/Group_Proxy.php',
'OCA\\User_LDAP\\Helper' => $baseDir . '/../lib/Helper.php',
+ 'OCA\\User_LDAP\\IGroupLDAP' => $baseDir . '/../lib/IGroupLDAP.php',
+ 'OCA\\User_LDAP\\ILDAPGroupPlugin' => $baseDir . '/../lib/ILDAPGroupPlugin.php',
+ 'OCA\\User_LDAP\\ILDAPUserPlugin' => $baseDir . '/../lib/ILDAPUserPlugin.php',
'OCA\\User_LDAP\\ILDAPWrapper' => $baseDir . '/../lib/ILDAPWrapper.php',
'OCA\\User_LDAP\\IUserLDAP' => $baseDir . '/../lib/IUserLDAP.php',
'OCA\\User_LDAP\\Jobs\\CleanUp' => $baseDir . '/../lib/Jobs/CleanUp.php',
@@ -47,6 +51,7 @@ return array(
'OCA\\User_LDAP\\Proxy' => $baseDir . '/../lib/Proxy.php',
'OCA\\User_LDAP\\Settings\\Admin' => $baseDir . '/../lib/Settings/Admin.php',
'OCA\\User_LDAP\\Settings\\Section' => $baseDir . '/../lib/Settings/Section.php',
+ 'OCA\\User_LDAP\\UserPluginManager' => $baseDir . '/../lib/UserPluginManager.php',
'OCA\\User_LDAP\\User\\DeletedUsersIndex' => $baseDir . '/../lib/User/DeletedUsersIndex.php',
'OCA\\User_LDAP\\User\\IUserTools' => $baseDir . '/../lib/User/IUserTools.php',
'OCA\\User_LDAP\\User\\Manager' => $baseDir . '/../lib/User/Manager.php',
diff --git a/apps/user_ldap/composer/composer/autoload_static.php b/apps/user_ldap/composer/composer/autoload_static.php
index f80900f7904..ece7dd69d27 100644
--- a/apps/user_ldap/composer/composer/autoload_static.php
+++ b/apps/user_ldap/composer/composer/autoload_static.php
@@ -39,9 +39,13 @@ class ComposerStaticInitUser_LDAP
'OCA\\User_LDAP\\Exceptions\\ConstraintViolationException' => __DIR__ . '/..' . '/../lib/Exceptions/ConstraintViolationException.php',
'OCA\\User_LDAP\\Exceptions\\NotOnLDAP' => __DIR__ . '/..' . '/../lib/Exceptions/NotOnLDAP.php',
'OCA\\User_LDAP\\FilesystemHelper' => __DIR__ . '/..' . '/../lib/FilesystemHelper.php',
+ 'OCA\\User_LDAP\\GroupPluginManager' => __DIR__ . '/..' . '/../lib/GroupPluginManager.php',
'OCA\\User_LDAP\\Group_LDAP' => __DIR__ . '/..' . '/../lib/Group_LDAP.php',
'OCA\\User_LDAP\\Group_Proxy' => __DIR__ . '/..' . '/../lib/Group_Proxy.php',
'OCA\\User_LDAP\\Helper' => __DIR__ . '/..' . '/../lib/Helper.php',
+ 'OCA\\User_LDAP\\IGroupLDAP' => __DIR__ . '/..' . '/../lib/IGroupLDAP.php',
+ 'OCA\\User_LDAP\\ILDAPGroupPlugin' => __DIR__ . '/..' . '/../lib/ILDAPGroupPlugin.php',
+ 'OCA\\User_LDAP\\ILDAPUserPlugin' => __DIR__ . '/..' . '/../lib/ILDAPUserPlugin.php',
'OCA\\User_LDAP\\ILDAPWrapper' => __DIR__ . '/..' . '/../lib/ILDAPWrapper.php',
'OCA\\User_LDAP\\IUserLDAP' => __DIR__ . '/..' . '/../lib/IUserLDAP.php',
'OCA\\User_LDAP\\Jobs\\CleanUp' => __DIR__ . '/..' . '/../lib/Jobs/CleanUp.php',
@@ -62,6 +66,7 @@ class ComposerStaticInitUser_LDAP
'OCA\\User_LDAP\\Proxy' => __DIR__ . '/..' . '/../lib/Proxy.php',
'OCA\\User_LDAP\\Settings\\Admin' => __DIR__ . '/..' . '/../lib/Settings/Admin.php',
'OCA\\User_LDAP\\Settings\\Section' => __DIR__ . '/..' . '/../lib/Settings/Section.php',
+ 'OCA\\User_LDAP\\UserPluginManager' => __DIR__ . '/..' . '/../lib/UserPluginManager.php',
'OCA\\User_LDAP\\User\\DeletedUsersIndex' => __DIR__ . '/..' . '/../lib/User/DeletedUsersIndex.php',
'OCA\\User_LDAP\\User\\IUserTools' => __DIR__ . '/..' . '/../lib/User/IUserTools.php',
'OCA\\User_LDAP\\User\\Manager' => __DIR__ . '/..' . '/../lib/User/Manager.php',
diff --git a/apps/user_ldap/l10n/es_DO.js b/apps/user_ldap/l10n/es_DO.js
new file mode 100644
index 00000000000..63d3d71e0a9
--- /dev/null
+++ b/apps/user_ldap/l10n/es_DO.js
@@ -0,0 +1,197 @@
+OC.L10N.register(
+ "user_ldap",
+ {
+ "Failed to clear the mappings." : "Se presentó una falla al borrar los mapeos.",
+ "Failed to delete the server configuration" : "Se presentó una falla al borrar la configuración del servidor",
+ "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ",
+ "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!",
+ "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.",
+ "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.",
+ "No action specified" : "No se ha especificado alguna acción",
+ "No configuration specified" : "No se ha especificado una configuración",
+ "No data specified" : "No se han especificado datos",
+ " Could not set configuration %s" : "No fue posible establecer la configuración %s",
+ "Action does not exist" : "La acción no existe",
+ "LDAP user and group backend" : "Backend de LDAP para usuario y grupo",
+ "Renewing …" : "Renovando ...",
+ "Very weak password" : "Contraseña muy debil",
+ "Weak password" : "Contraseña débil",
+ "So-so password" : "Contraseña aceptable",
+ "Good password" : "Buena contraseña",
+ "Strong password" : "Contraseña fuerte",
+ "The Base DN appears to be wrong" : "El DN Base parece estar incorrecto",
+ "Testing configuration…" : "Probando configuración... ",
+ "Configuration incorrect" : "Configuración Incorrecta",
+ "Configuration incomplete" : "Configuración incompleta",
+ "Configuration OK" : "Configuración correcta",
+ "Select groups" : "Seleccionar grupos",
+ "Select object classes" : "Seleccionar las clases de objeto",
+ "Please check the credentials, they seem to be wrong." : "Por favor verifica tus credenciales, al parecer están equivocadas.",
+ "Please specify the port, it could not be auto-detected." : "No fue posible auto-detectar el puerto, por favor especifícalo.",
+ "Base DN could not be auto-detected, please revise credentials, host and port." : "No fue posible auto detectar el DN Base, por favor verifica las credenciales, servidor y puerto.",
+ "Could not detect Base DN, please enter it manually." : "No fue posible detectar el DN Base, por favor ingreésalo manualmente.",
+ "{nthServer}. Server" : "{nthServer}. Servidor",
+ "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Por favor verifica.",
+ "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ",
+ " entries available within the provided Base DN" : "elementos disponibles dentro del DN Base proporcionado",
+ "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Por favor verifica la DN Base, así como las configuraciones de la conexión y las credenciales.",
+ "Do you really want to delete the current Server Configuration?" : "¿Realmente deseas eliminar la configuración actual del servidor?",
+ "Confirm Deletion" : "Confirmar el borrado",
+ "Mappings cleared successfully!" : "¡Los mapeos se borraron exitosamente!",
+ "Error while clearing the mappings." : "Se presentó un error al borrar los mapeos. ",
+ "Anonymous bind is not allowed. Please provide a User DN and Password." : "La vinculación anónima no está permitida. Por favor proporciona un Usuario DN y una Contaseña.",
+ "LDAP Operations error. Anonymous bind might not be allowed." : "Error de Operaciones LDAP. Las vinculaciones anónimas pueden no estar permitidas. ",
+ "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Se presentó una falla en el guardado. Por favor verifica que la base de datos esté operando. Vuelve a cargar antes de continuar. ",
+ "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Cambiar la modalidad habilitará las consultas automaticas de LDAP. Dependiendo del tamaño de su LDAP esto puede tomar algun tiempo. ¿Aún desea cambiar la modalidad?",
+ "Mode switch" : "Cambio de modo",
+ "Select attributes" : "Seleccionar atributos",
+ "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Usuario no encontrado. Por favor verifica tus atributos de inicio de sesión y tu usuario. Filtro aplicado (para copiar-y-pegar para una validación de línea de comando): <br/>",
+ "User found and settings verified." : "Usuario encontrado y configuraciones verificadas. ",
+ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ",
+ "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.",
+ "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ",
+ "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ",
+ "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.",
+ "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar",
+ "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.",
+ "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ",
+ "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña",
+ "Your password will expire tomorrow." : "Tu contraseña expirará mañana.",
+ "Your password will expire today." : "Tu contraseña expirará el día de hoy. ",
+ "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "],
+ "LDAP / AD integration" : "Integración con LDAP / AD",
+ "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"],
+ "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ",
+ "Could not find the desired feature" : "No fue posible encontrar la función deseada.",
+ "Invalid Host" : "Servidor inválido",
+ "Test Configuration" : "Probar configuración",
+ "Help" : "Ayuda",
+ "Groups meeting these criteria are available in %s:" : "Los grupos que cumplen con los siguientes criterios están disponibles en %s:",
+ "Only these object classes:" : "Sólo estas clases de objetos:",
+ "Only from these groups:" : "Sólo desde estos grupos:",
+ "Search groups" : "Buscar grupos",
+ "Available groups" : "Grupos disponibles",
+ "Selected groups" : "Grupos seleccionados",
+ "Edit LDAP Query" : "Editar consulta a LDAP",
+ "LDAP Filter:" : "Filtro de LDAP:",
+ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.",
+ "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos",
+ "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:",
+ "LDAP / AD Username:" : "Usuario LDAP / AD:",
+ "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ",
+ "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD",
+ "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ",
+ "Other Attributes:" : "Otros atributos:",
+ "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"",
+ "Test Loginname" : "Probar nombre de usuario",
+ "Verify settings" : "Verificar configuraciones ",
+ "1. Server" : "1. Servidor",
+ "%s. Server:" : "%s. Servidor:",
+ "Add a new configuration" : "Agregar una nueva configuración",
+ "Copy current configuration into new directory binding" : "Copiar la configuración actual a un nuevo directorio de vinculación",
+ "Delete the current configuration" : "Borrar la configuración actual",
+ "Host" : "Servidor",
+ "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Puedes omitir el protocolo, a menos que requiera SSL. Si es el caso, empieza con ldaps://",
+ "Port" : "Puerto",
+ "Detect Port" : "Detectar Puerto",
+ "User DN" : "DN del usuario",
+ "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "El DN del cliente del usuario con el que se vinculará, ejem. uid=agente,dc=ejemplo,dc=com. Para tener un acceso anónimo, deja el DN y la contraseña vacíos.",
+ "Password" : "Contraseña",
+ "For anonymous access, leave DN and Password empty." : "Para acceso anónimo, deja la contraseña y DN vacíos.",
+ "One Base DN per line" : "Un DN Base por línea",
+ "You can specify Base DN for users and groups in the Advanced tab" : "Puedes especificar el DN Base para usuarios y grupos en la pestaña Avanzado",
+ "Detect Base DN" : "Detectar DN Base",
+ "Test Base DN" : "Probar el DN Base",
+ "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita solicitudes automaticas de LDAP. Es mejor para ambientes más grandes pero requiere mayor conocimiento de LDAP. ",
+ "Manually enter LDAP filters (recommended for large directories)" : "Ingresar los filtros LDAP manualmente (recomendado para directorios grandes)",
+ "Listing and searching for users is constrained by these criteria:" : "Los enlistados y las busquedas para los usuarios están acotados por estos criterios:",
+ "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Las clases de objetos más comunes para usuarios son organizationalPerson, person, user, and inetOrgPerson. Si no estás seguro de cuál clase de objeto selecciónar, por favor consulta tu directorio admin.",
+ "The filter specifies which LDAP users shall have access to the %s instance." : "El filtro especifica cuáles usuarios LDAP tendrán acceso a la instancia %s.",
+ "Verify settings and count users" : "Verificar configuraciones y contar ususarios",
+ "Saving" : "Guardando",
+ "Back" : "Atrás",
+ "Continue" : "Continuar",
+ "Please renew your password." : "Por favor renueva tu contraseña.",
+ "An internal error occurred." : "Se presentó un error interno. ",
+ "Please try again or contact your administrator." : "Por favor inténtarlo de nuevo o contacta a tu administrador. ",
+ "Current password" : "Contraseña actual",
+ "New password" : "Nueva contraseña",
+ "Renew password" : "Renovar contraseña",
+ "Wrong password. Reset it?" : "Contraseña incorrecta. ¿Deseas restablecerla?",
+ "Wrong password." : "Contraseña incorrecta. ",
+ "Cancel" : "Cancelar",
+ "LDAP" : "LDAP",
+ "Server" : "Servidor",
+ "Users" : "Usuarios",
+ "Login Attributes" : "Atributos de Inicio de Sesión",
+ "Groups" : "Grupos",
+ "Expert" : "Experto",
+ "Advanced" : "Avanzado",
+ "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advertencia:</b> El módulo LDAP de PHP no está instalado, el backend no funcionará. Por favor solicita su instalación a tu administrador del sistema.",
+ "Connection Settings" : "Configuraciones de la conexión",
+ "Configuration Active" : "Configuracion Activa",
+ "When unchecked, this configuration will be skipped." : "Cuando no esté seleccionada, esta configuración será omitida.",
+ "Backup (Replica) Host" : "Servidor de copia de seguridad (Replica)",
+ "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Por favor proporciona un servidor de copia de seguridad opcional. Debe ser una réplica del servidor LDAP / AD principal.",
+ "Backup (Replica) Port" : "Puerto para copias de seguridad (Réplica)",
+ "Disable Main Server" : "Deshabilitar servidor principal",
+ "Only connect to the replica server." : "Sólo contectarse al servidor de réplica.",
+ "Turn off SSL certificate validation." : "Deshabilitar la validación del certificado SSL.",
+ "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "¡No se recomienda, úsalo únicamente para pruebas! Si la conexión sólo funciona con esta opción, importa el certificado SSL del servidor LDAP a tu servidor %s.",
+ "Cache Time-To-Live" : "Tiempo de vida del caché",
+ "in seconds. A change empties the cache." : "en segundos. Un cambio vacía la caché.",
+ "Directory Settings" : "Configuraciones del directorio",
+ "User Display Name Field" : "Campo de Usuario a desplegar",
+ "The LDAP attribute to use to generate the user's display name." : "El atributo LDAP a usar para generar el nombre del usuario a desplegar.",
+ "2nd User Display Name Field" : "2do Campo de Nombre a Desplegar del Usuario",
+ "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atributo LDAP puede ser agregado al nombre a despelegar entre corchetes. Ejemplos de resultados »John Doe (john.doe@example.org)«.",
+ "Base User Tree" : "Árbol de Usuario Base",
+ "One User Base DN per line" : "Un Usuario Base de DN por línea",
+ "User Search Attributes" : "Atributos de búsqueda de usuario",
+ "Optional; one attribute per line" : "Opcional; un atributo por línea",
+ "Group Display Name Field" : "Campo de Nombre de Grupo a Desplegar",
+ "The LDAP attribute to use to generate the groups's display name." : "El atributo LDAP a usar para generar el nombre para mostrar del grupo.",
+ "Base Group Tree" : "Árbol base de grupo",
+ "One Group Base DN per line" : "Un DN Base de Grupo por línea",
+ "Group Search Attributes" : "Atributos de Búsqueda de Grupo",
+ "Group-Member association" : "Asociación Grupo-Miembro",
+ "Dynamic Group Member URL" : "URL Dinámico de Miembro de Grupo ",
+ "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "El atributo de LDAP que, en objetos de grupo, contiene una URL de búsqueda LDAP que determina cuáles objetos pertenecen al grupo. (Un ajuste vacío deshabilita la funcionalidad de membrecía de grupo dinámica.)",
+ "Nested Groups" : "Grupos Anidados",
+ "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Cuando está activado, los grupos que contengan grupos están soportados. (Sólo funciona si el atributo de miembro de grupo contiene los DNs). ",
+ "Paging chunksize" : "Tamaño del chunk de paginación",
+ "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "El tamaño de chunk usado para las búsquedas con paginación de LDAP puede regresar resuldados volumniosos tales como enumeraciones de usuarios o grupos. (Establecerlo a 0 deshabilita las búsquedas con paginación en estos casos). ",
+ "Enable LDAP password changes per user" : "Habilitar cambio de contraseñas en LDAP por el usuario",
+ "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permitir que los usuarios LDAP puedan cambiar su contraseña y permitir a los Super Administradortes y Administradores de grupo cambiar la contraseña de sus usuarios LDAP. Únicamente funciona cuando la configuración de las poiíticas de control de acceso en el servidor LDAP está alineada. Como las contraseñas son enviadas en texto plano al servidor LDAP, se debe usar encripción en el transporte y del mismo modo se debe configurar el uso de funciones de resumen en el servidor LDAP",
+ "(New password is sent as plain text to LDAP)" : "(La nueva contraseña se envía como texto plano a LDAP)",
+ "Default password policy DN" : "DN de la política predeterminada de contraseñas",
+ "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "El DN de la política de contraseñas predeterminada que será usada para el manejo de expiración de contraseñas. Sólo funciona cuando está habilitado el cambio de contraseñas por el usuario y sólo está soportado para OpenLDAP. Déjalo en blanco para deshabilitar el manejo de expiración de contraseñas.",
+ "Special Attributes" : "Atributos Especiales",
+ "Quota Field" : "Campo de cuota",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Dejar en blanco para usar la cuota predeterminada del usuario. En caso contrario, por favor especifica el atributo LDAP / AD.",
+ "Quota Default" : "Cuota predeterminada",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Anular la cuota predeterminada para usuarios LDAP que no tienen una cuota establecida en el Campo Cuota. ",
+ "Email Field" : "Campo de correo electrónico",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ",
+ "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario",
+ "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Dejar vacío para el usuario (predeterminado). En caso contrario, especifica un atributo LDAP/AD.",
+ "Internal Username" : "Usuario interno",
+ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ",
+ "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:",
+ "Override UUID detection" : "Anular la detección UUID",
+ "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.",
+ "UUID Attribute for Users:" : "Atributo UUID para Usuarios:",
+ "UUID Attribute for Groups:" : "Atributo UUID para Grupos:",
+ "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP",
+ "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los usuario son usados para almacenar y asignar (meta) datos. Para poder identificar y reconocer con precisión a los usuarios, cada usuario LDAP contará con un Usuario interno. Esto requiere un mapeo del Usuario al usuario-LDAP. El Usuario creado se mapea al UUID del usuario LDAP. Adicionalmente el DN se guarda en caché para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, las modficaciones serán encontradas. El Usuario interno se usa en todos lados. Limpiar los mapeos dejará rastros en todos lados. ¡Limpiar los mapeos no es senible a la configuración, afecta a todas las configuraciones LDAP! Nunca borres las configuraciones en el ambiente de producción, sólo házlo en los ambientes de pruebas o de experimentación. ",
+ "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP",
+ "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP",
+ "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "El id %u del marcador de posición falta. Será reemplazado con el usuario al consultar LDAP / AD.",
+ "Verify settings and count groups" : "Verificar configuraciones y contar grupos",
+ "Add a new and blank configuration" : "Agregar una configuración nueva y en blanco",
+ "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Puedes omitir el protocolo, excepto si requieres SSL. En ese caso, empieza con ldaps://",
+ "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Advertencia:</b> Las aplicaciones user_ldap y user_webdavauth son incompatibles. Puedes expermientar comportamientos inesperados. Por favor solicita a tu administrador del sistema deshabilitar alguno de ellos.",
+ "in bytes" : "en bytes"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/es_DO.json b/apps/user_ldap/l10n/es_DO.json
new file mode 100644
index 00000000000..eefeb9a037f
--- /dev/null
+++ b/apps/user_ldap/l10n/es_DO.json
@@ -0,0 +1,195 @@
+{ "translations": {
+ "Failed to clear the mappings." : "Se presentó una falla al borrar los mapeos.",
+ "Failed to delete the server configuration" : "Se presentó una falla al borrar la configuración del servidor",
+ "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ",
+ "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!",
+ "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.",
+ "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.",
+ "No action specified" : "No se ha especificado alguna acción",
+ "No configuration specified" : "No se ha especificado una configuración",
+ "No data specified" : "No se han especificado datos",
+ " Could not set configuration %s" : "No fue posible establecer la configuración %s",
+ "Action does not exist" : "La acción no existe",
+ "LDAP user and group backend" : "Backend de LDAP para usuario y grupo",
+ "Renewing …" : "Renovando ...",
+ "Very weak password" : "Contraseña muy debil",
+ "Weak password" : "Contraseña débil",
+ "So-so password" : "Contraseña aceptable",
+ "Good password" : "Buena contraseña",
+ "Strong password" : "Contraseña fuerte",
+ "The Base DN appears to be wrong" : "El DN Base parece estar incorrecto",
+ "Testing configuration…" : "Probando configuración... ",
+ "Configuration incorrect" : "Configuración Incorrecta",
+ "Configuration incomplete" : "Configuración incompleta",
+ "Configuration OK" : "Configuración correcta",
+ "Select groups" : "Seleccionar grupos",
+ "Select object classes" : "Seleccionar las clases de objeto",
+ "Please check the credentials, they seem to be wrong." : "Por favor verifica tus credenciales, al parecer están equivocadas.",
+ "Please specify the port, it could not be auto-detected." : "No fue posible auto-detectar el puerto, por favor especifícalo.",
+ "Base DN could not be auto-detected, please revise credentials, host and port." : "No fue posible auto detectar el DN Base, por favor verifica las credenciales, servidor y puerto.",
+ "Could not detect Base DN, please enter it manually." : "No fue posible detectar el DN Base, por favor ingreésalo manualmente.",
+ "{nthServer}. Server" : "{nthServer}. Servidor",
+ "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Por favor verifica.",
+ "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ",
+ " entries available within the provided Base DN" : "elementos disponibles dentro del DN Base proporcionado",
+ "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Por favor verifica la DN Base, así como las configuraciones de la conexión y las credenciales.",
+ "Do you really want to delete the current Server Configuration?" : "¿Realmente deseas eliminar la configuración actual del servidor?",
+ "Confirm Deletion" : "Confirmar el borrado",
+ "Mappings cleared successfully!" : "¡Los mapeos se borraron exitosamente!",
+ "Error while clearing the mappings." : "Se presentó un error al borrar los mapeos. ",
+ "Anonymous bind is not allowed. Please provide a User DN and Password." : "La vinculación anónima no está permitida. Por favor proporciona un Usuario DN y una Contaseña.",
+ "LDAP Operations error. Anonymous bind might not be allowed." : "Error de Operaciones LDAP. Las vinculaciones anónimas pueden no estar permitidas. ",
+ "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Se presentó una falla en el guardado. Por favor verifica que la base de datos esté operando. Vuelve a cargar antes de continuar. ",
+ "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Cambiar la modalidad habilitará las consultas automaticas de LDAP. Dependiendo del tamaño de su LDAP esto puede tomar algun tiempo. ¿Aún desea cambiar la modalidad?",
+ "Mode switch" : "Cambio de modo",
+ "Select attributes" : "Seleccionar atributos",
+ "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Usuario no encontrado. Por favor verifica tus atributos de inicio de sesión y tu usuario. Filtro aplicado (para copiar-y-pegar para una validación de línea de comando): <br/>",
+ "User found and settings verified." : "Usuario encontrado y configuraciones verificadas. ",
+ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ",
+ "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.",
+ "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ",
+ "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ",
+ "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.",
+ "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar",
+ "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.",
+ "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ",
+ "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña",
+ "Your password will expire tomorrow." : "Tu contraseña expirará mañana.",
+ "Your password will expire today." : "Tu contraseña expirará el día de hoy. ",
+ "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "],
+ "LDAP / AD integration" : "Integración con LDAP / AD",
+ "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"],
+ "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ",
+ "Could not find the desired feature" : "No fue posible encontrar la función deseada.",
+ "Invalid Host" : "Servidor inválido",
+ "Test Configuration" : "Probar configuración",
+ "Help" : "Ayuda",
+ "Groups meeting these criteria are available in %s:" : "Los grupos que cumplen con los siguientes criterios están disponibles en %s:",
+ "Only these object classes:" : "Sólo estas clases de objetos:",
+ "Only from these groups:" : "Sólo desde estos grupos:",
+ "Search groups" : "Buscar grupos",
+ "Available groups" : "Grupos disponibles",
+ "Selected groups" : "Grupos seleccionados",
+ "Edit LDAP Query" : "Editar consulta a LDAP",
+ "LDAP Filter:" : "Filtro de LDAP:",
+ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.",
+ "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos",
+ "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:",
+ "LDAP / AD Username:" : "Usuario LDAP / AD:",
+ "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ",
+ "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD",
+ "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ",
+ "Other Attributes:" : "Otros atributos:",
+ "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"",
+ "Test Loginname" : "Probar nombre de usuario",
+ "Verify settings" : "Verificar configuraciones ",
+ "1. Server" : "1. Servidor",
+ "%s. Server:" : "%s. Servidor:",
+ "Add a new configuration" : "Agregar una nueva configuración",
+ "Copy current configuration into new directory binding" : "Copiar la configuración actual a un nuevo directorio de vinculación",
+ "Delete the current configuration" : "Borrar la configuración actual",
+ "Host" : "Servidor",
+ "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Puedes omitir el protocolo, a menos que requiera SSL. Si es el caso, empieza con ldaps://",
+ "Port" : "Puerto",
+ "Detect Port" : "Detectar Puerto",
+ "User DN" : "DN del usuario",
+ "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "El DN del cliente del usuario con el que se vinculará, ejem. uid=agente,dc=ejemplo,dc=com. Para tener un acceso anónimo, deja el DN y la contraseña vacíos.",
+ "Password" : "Contraseña",
+ "For anonymous access, leave DN and Password empty." : "Para acceso anónimo, deja la contraseña y DN vacíos.",
+ "One Base DN per line" : "Un DN Base por línea",
+ "You can specify Base DN for users and groups in the Advanced tab" : "Puedes especificar el DN Base para usuarios y grupos en la pestaña Avanzado",
+ "Detect Base DN" : "Detectar DN Base",
+ "Test Base DN" : "Probar el DN Base",
+ "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita solicitudes automaticas de LDAP. Es mejor para ambientes más grandes pero requiere mayor conocimiento de LDAP. ",
+ "Manually enter LDAP filters (recommended for large directories)" : "Ingresar los filtros LDAP manualmente (recomendado para directorios grandes)",
+ "Listing and searching for users is constrained by these criteria:" : "Los enlistados y las busquedas para los usuarios están acotados por estos criterios:",
+ "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Las clases de objetos más comunes para usuarios son organizationalPerson, person, user, and inetOrgPerson. Si no estás seguro de cuál clase de objeto selecciónar, por favor consulta tu directorio admin.",
+ "The filter specifies which LDAP users shall have access to the %s instance." : "El filtro especifica cuáles usuarios LDAP tendrán acceso a la instancia %s.",
+ "Verify settings and count users" : "Verificar configuraciones y contar ususarios",
+ "Saving" : "Guardando",
+ "Back" : "Atrás",
+ "Continue" : "Continuar",
+ "Please renew your password." : "Por favor renueva tu contraseña.",
+ "An internal error occurred." : "Se presentó un error interno. ",
+ "Please try again or contact your administrator." : "Por favor inténtarlo de nuevo o contacta a tu administrador. ",
+ "Current password" : "Contraseña actual",
+ "New password" : "Nueva contraseña",
+ "Renew password" : "Renovar contraseña",
+ "Wrong password. Reset it?" : "Contraseña incorrecta. ¿Deseas restablecerla?",
+ "Wrong password." : "Contraseña incorrecta. ",
+ "Cancel" : "Cancelar",
+ "LDAP" : "LDAP",
+ "Server" : "Servidor",
+ "Users" : "Usuarios",
+ "Login Attributes" : "Atributos de Inicio de Sesión",
+ "Groups" : "Grupos",
+ "Expert" : "Experto",
+ "Advanced" : "Avanzado",
+ "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advertencia:</b> El módulo LDAP de PHP no está instalado, el backend no funcionará. Por favor solicita su instalación a tu administrador del sistema.",
+ "Connection Settings" : "Configuraciones de la conexión",
+ "Configuration Active" : "Configuracion Activa",
+ "When unchecked, this configuration will be skipped." : "Cuando no esté seleccionada, esta configuración será omitida.",
+ "Backup (Replica) Host" : "Servidor de copia de seguridad (Replica)",
+ "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Por favor proporciona un servidor de copia de seguridad opcional. Debe ser una réplica del servidor LDAP / AD principal.",
+ "Backup (Replica) Port" : "Puerto para copias de seguridad (Réplica)",
+ "Disable Main Server" : "Deshabilitar servidor principal",
+ "Only connect to the replica server." : "Sólo contectarse al servidor de réplica.",
+ "Turn off SSL certificate validation." : "Deshabilitar la validación del certificado SSL.",
+ "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "¡No se recomienda, úsalo únicamente para pruebas! Si la conexión sólo funciona con esta opción, importa el certificado SSL del servidor LDAP a tu servidor %s.",
+ "Cache Time-To-Live" : "Tiempo de vida del caché",
+ "in seconds. A change empties the cache." : "en segundos. Un cambio vacía la caché.",
+ "Directory Settings" : "Configuraciones del directorio",
+ "User Display Name Field" : "Campo de Usuario a desplegar",
+ "The LDAP attribute to use to generate the user's display name." : "El atributo LDAP a usar para generar el nombre del usuario a desplegar.",
+ "2nd User Display Name Field" : "2do Campo de Nombre a Desplegar del Usuario",
+ "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atributo LDAP puede ser agregado al nombre a despelegar entre corchetes. Ejemplos de resultados »John Doe (john.doe@example.org)«.",
+ "Base User Tree" : "Árbol de Usuario Base",
+ "One User Base DN per line" : "Un Usuario Base de DN por línea",
+ "User Search Attributes" : "Atributos de búsqueda de usuario",
+ "Optional; one attribute per line" : "Opcional; un atributo por línea",
+ "Group Display Name Field" : "Campo de Nombre de Grupo a Desplegar",
+ "The LDAP attribute to use to generate the groups's display name." : "El atributo LDAP a usar para generar el nombre para mostrar del grupo.",
+ "Base Group Tree" : "Árbol base de grupo",
+ "One Group Base DN per line" : "Un DN Base de Grupo por línea",
+ "Group Search Attributes" : "Atributos de Búsqueda de Grupo",
+ "Group-Member association" : "Asociación Grupo-Miembro",
+ "Dynamic Group Member URL" : "URL Dinámico de Miembro de Grupo ",
+ "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "El atributo de LDAP que, en objetos de grupo, contiene una URL de búsqueda LDAP que determina cuáles objetos pertenecen al grupo. (Un ajuste vacío deshabilita la funcionalidad de membrecía de grupo dinámica.)",
+ "Nested Groups" : "Grupos Anidados",
+ "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Cuando está activado, los grupos que contengan grupos están soportados. (Sólo funciona si el atributo de miembro de grupo contiene los DNs). ",
+ "Paging chunksize" : "Tamaño del chunk de paginación",
+ "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "El tamaño de chunk usado para las búsquedas con paginación de LDAP puede regresar resuldados volumniosos tales como enumeraciones de usuarios o grupos. (Establecerlo a 0 deshabilita las búsquedas con paginación en estos casos). ",
+ "Enable LDAP password changes per user" : "Habilitar cambio de contraseñas en LDAP por el usuario",
+ "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permitir que los usuarios LDAP puedan cambiar su contraseña y permitir a los Super Administradortes y Administradores de grupo cambiar la contraseña de sus usuarios LDAP. Únicamente funciona cuando la configuración de las poiíticas de control de acceso en el servidor LDAP está alineada. Como las contraseñas son enviadas en texto plano al servidor LDAP, se debe usar encripción en el transporte y del mismo modo se debe configurar el uso de funciones de resumen en el servidor LDAP",
+ "(New password is sent as plain text to LDAP)" : "(La nueva contraseña se envía como texto plano a LDAP)",
+ "Default password policy DN" : "DN de la política predeterminada de contraseñas",
+ "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "El DN de la política de contraseñas predeterminada que será usada para el manejo de expiración de contraseñas. Sólo funciona cuando está habilitado el cambio de contraseñas por el usuario y sólo está soportado para OpenLDAP. Déjalo en blanco para deshabilitar el manejo de expiración de contraseñas.",
+ "Special Attributes" : "Atributos Especiales",
+ "Quota Field" : "Campo de cuota",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Dejar en blanco para usar la cuota predeterminada del usuario. En caso contrario, por favor especifica el atributo LDAP / AD.",
+ "Quota Default" : "Cuota predeterminada",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Anular la cuota predeterminada para usuarios LDAP que no tienen una cuota establecida en el Campo Cuota. ",
+ "Email Field" : "Campo de correo electrónico",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ",
+ "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario",
+ "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Dejar vacío para el usuario (predeterminado). En caso contrario, especifica un atributo LDAP/AD.",
+ "Internal Username" : "Usuario interno",
+ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ",
+ "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:",
+ "Override UUID detection" : "Anular la detección UUID",
+ "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.",
+ "UUID Attribute for Users:" : "Atributo UUID para Usuarios:",
+ "UUID Attribute for Groups:" : "Atributo UUID para Grupos:",
+ "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP",
+ "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los usuario son usados para almacenar y asignar (meta) datos. Para poder identificar y reconocer con precisión a los usuarios, cada usuario LDAP contará con un Usuario interno. Esto requiere un mapeo del Usuario al usuario-LDAP. El Usuario creado se mapea al UUID del usuario LDAP. Adicionalmente el DN se guarda en caché para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, las modficaciones serán encontradas. El Usuario interno se usa en todos lados. Limpiar los mapeos dejará rastros en todos lados. ¡Limpiar los mapeos no es senible a la configuración, afecta a todas las configuraciones LDAP! Nunca borres las configuraciones en el ambiente de producción, sólo házlo en los ambientes de pruebas o de experimentación. ",
+ "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP",
+ "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP",
+ "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "El id %u del marcador de posición falta. Será reemplazado con el usuario al consultar LDAP / AD.",
+ "Verify settings and count groups" : "Verificar configuraciones y contar grupos",
+ "Add a new and blank configuration" : "Agregar una configuración nueva y en blanco",
+ "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Puedes omitir el protocolo, excepto si requieres SSL. En ese caso, empieza con ldaps://",
+ "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Advertencia:</b> Las aplicaciones user_ldap y user_webdavauth son incompatibles. Puedes expermientar comportamientos inesperados. Por favor solicita a tu administrador del sistema deshabilitar alguno de ellos.",
+ "in bytes" : "en bytes"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/es_EC.js b/apps/user_ldap/l10n/es_EC.js
new file mode 100644
index 00000000000..63d3d71e0a9
--- /dev/null
+++ b/apps/user_ldap/l10n/es_EC.js
@@ -0,0 +1,197 @@
+OC.L10N.register(
+ "user_ldap",
+ {
+ "Failed to clear the mappings." : "Se presentó una falla al borrar los mapeos.",
+ "Failed to delete the server configuration" : "Se presentó una falla al borrar la configuración del servidor",
+ "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ",
+ "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!",
+ "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.",
+ "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.",
+ "No action specified" : "No se ha especificado alguna acción",
+ "No configuration specified" : "No se ha especificado una configuración",
+ "No data specified" : "No se han especificado datos",
+ " Could not set configuration %s" : "No fue posible establecer la configuración %s",
+ "Action does not exist" : "La acción no existe",
+ "LDAP user and group backend" : "Backend de LDAP para usuario y grupo",
+ "Renewing …" : "Renovando ...",
+ "Very weak password" : "Contraseña muy debil",
+ "Weak password" : "Contraseña débil",
+ "So-so password" : "Contraseña aceptable",
+ "Good password" : "Buena contraseña",
+ "Strong password" : "Contraseña fuerte",
+ "The Base DN appears to be wrong" : "El DN Base parece estar incorrecto",
+ "Testing configuration…" : "Probando configuración... ",
+ "Configuration incorrect" : "Configuración Incorrecta",
+ "Configuration incomplete" : "Configuración incompleta",
+ "Configuration OK" : "Configuración correcta",
+ "Select groups" : "Seleccionar grupos",
+ "Select object classes" : "Seleccionar las clases de objeto",
+ "Please check the credentials, they seem to be wrong." : "Por favor verifica tus credenciales, al parecer están equivocadas.",
+ "Please specify the port, it could not be auto-detected." : "No fue posible auto-detectar el puerto, por favor especifícalo.",
+ "Base DN could not be auto-detected, please revise credentials, host and port." : "No fue posible auto detectar el DN Base, por favor verifica las credenciales, servidor y puerto.",
+ "Could not detect Base DN, please enter it manually." : "No fue posible detectar el DN Base, por favor ingreésalo manualmente.",
+ "{nthServer}. Server" : "{nthServer}. Servidor",
+ "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Por favor verifica.",
+ "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ",
+ " entries available within the provided Base DN" : "elementos disponibles dentro del DN Base proporcionado",
+ "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Por favor verifica la DN Base, así como las configuraciones de la conexión y las credenciales.",
+ "Do you really want to delete the current Server Configuration?" : "¿Realmente deseas eliminar la configuración actual del servidor?",
+ "Confirm Deletion" : "Confirmar el borrado",
+ "Mappings cleared successfully!" : "¡Los mapeos se borraron exitosamente!",
+ "Error while clearing the mappings." : "Se presentó un error al borrar los mapeos. ",
+ "Anonymous bind is not allowed. Please provide a User DN and Password." : "La vinculación anónima no está permitida. Por favor proporciona un Usuario DN y una Contaseña.",
+ "LDAP Operations error. Anonymous bind might not be allowed." : "Error de Operaciones LDAP. Las vinculaciones anónimas pueden no estar permitidas. ",
+ "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Se presentó una falla en el guardado. Por favor verifica que la base de datos esté operando. Vuelve a cargar antes de continuar. ",
+ "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Cambiar la modalidad habilitará las consultas automaticas de LDAP. Dependiendo del tamaño de su LDAP esto puede tomar algun tiempo. ¿Aún desea cambiar la modalidad?",
+ "Mode switch" : "Cambio de modo",
+ "Select attributes" : "Seleccionar atributos",
+ "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Usuario no encontrado. Por favor verifica tus atributos de inicio de sesión y tu usuario. Filtro aplicado (para copiar-y-pegar para una validación de línea de comando): <br/>",
+ "User found and settings verified." : "Usuario encontrado y configuraciones verificadas. ",
+ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ",
+ "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.",
+ "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ",
+ "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ",
+ "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.",
+ "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar",
+ "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.",
+ "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ",
+ "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña",
+ "Your password will expire tomorrow." : "Tu contraseña expirará mañana.",
+ "Your password will expire today." : "Tu contraseña expirará el día de hoy. ",
+ "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "],
+ "LDAP / AD integration" : "Integración con LDAP / AD",
+ "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"],
+ "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ",
+ "Could not find the desired feature" : "No fue posible encontrar la función deseada.",
+ "Invalid Host" : "Servidor inválido",
+ "Test Configuration" : "Probar configuración",
+ "Help" : "Ayuda",
+ "Groups meeting these criteria are available in %s:" : "Los grupos que cumplen con los siguientes criterios están disponibles en %s:",
+ "Only these object classes:" : "Sólo estas clases de objetos:",
+ "Only from these groups:" : "Sólo desde estos grupos:",
+ "Search groups" : "Buscar grupos",
+ "Available groups" : "Grupos disponibles",
+ "Selected groups" : "Grupos seleccionados",
+ "Edit LDAP Query" : "Editar consulta a LDAP",
+ "LDAP Filter:" : "Filtro de LDAP:",
+ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.",
+ "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos",
+ "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:",
+ "LDAP / AD Username:" : "Usuario LDAP / AD:",
+ "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ",
+ "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD",
+ "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ",
+ "Other Attributes:" : "Otros atributos:",
+ "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"",
+ "Test Loginname" : "Probar nombre de usuario",
+ "Verify settings" : "Verificar configuraciones ",
+ "1. Server" : "1. Servidor",
+ "%s. Server:" : "%s. Servidor:",
+ "Add a new configuration" : "Agregar una nueva configuración",
+ "Copy current configuration into new directory binding" : "Copiar la configuración actual a un nuevo directorio de vinculación",
+ "Delete the current configuration" : "Borrar la configuración actual",
+ "Host" : "Servidor",
+ "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Puedes omitir el protocolo, a menos que requiera SSL. Si es el caso, empieza con ldaps://",
+ "Port" : "Puerto",
+ "Detect Port" : "Detectar Puerto",
+ "User DN" : "DN del usuario",
+ "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "El DN del cliente del usuario con el que se vinculará, ejem. uid=agente,dc=ejemplo,dc=com. Para tener un acceso anónimo, deja el DN y la contraseña vacíos.",
+ "Password" : "Contraseña",
+ "For anonymous access, leave DN and Password empty." : "Para acceso anónimo, deja la contraseña y DN vacíos.",
+ "One Base DN per line" : "Un DN Base por línea",
+ "You can specify Base DN for users and groups in the Advanced tab" : "Puedes especificar el DN Base para usuarios y grupos en la pestaña Avanzado",
+ "Detect Base DN" : "Detectar DN Base",
+ "Test Base DN" : "Probar el DN Base",
+ "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita solicitudes automaticas de LDAP. Es mejor para ambientes más grandes pero requiere mayor conocimiento de LDAP. ",
+ "Manually enter LDAP filters (recommended for large directories)" : "Ingresar los filtros LDAP manualmente (recomendado para directorios grandes)",
+ "Listing and searching for users is constrained by these criteria:" : "Los enlistados y las busquedas para los usuarios están acotados por estos criterios:",
+ "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Las clases de objetos más comunes para usuarios son organizationalPerson, person, user, and inetOrgPerson. Si no estás seguro de cuál clase de objeto selecciónar, por favor consulta tu directorio admin.",
+ "The filter specifies which LDAP users shall have access to the %s instance." : "El filtro especifica cuáles usuarios LDAP tendrán acceso a la instancia %s.",
+ "Verify settings and count users" : "Verificar configuraciones y contar ususarios",
+ "Saving" : "Guardando",
+ "Back" : "Atrás",
+ "Continue" : "Continuar",
+ "Please renew your password." : "Por favor renueva tu contraseña.",
+ "An internal error occurred." : "Se presentó un error interno. ",
+ "Please try again or contact your administrator." : "Por favor inténtarlo de nuevo o contacta a tu administrador. ",
+ "Current password" : "Contraseña actual",
+ "New password" : "Nueva contraseña",
+ "Renew password" : "Renovar contraseña",
+ "Wrong password. Reset it?" : "Contraseña incorrecta. ¿Deseas restablecerla?",
+ "Wrong password." : "Contraseña incorrecta. ",
+ "Cancel" : "Cancelar",
+ "LDAP" : "LDAP",
+ "Server" : "Servidor",
+ "Users" : "Usuarios",
+ "Login Attributes" : "Atributos de Inicio de Sesión",
+ "Groups" : "Grupos",
+ "Expert" : "Experto",
+ "Advanced" : "Avanzado",
+ "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advertencia:</b> El módulo LDAP de PHP no está instalado, el backend no funcionará. Por favor solicita su instalación a tu administrador del sistema.",
+ "Connection Settings" : "Configuraciones de la conexión",
+ "Configuration Active" : "Configuracion Activa",
+ "When unchecked, this configuration will be skipped." : "Cuando no esté seleccionada, esta configuración será omitida.",
+ "Backup (Replica) Host" : "Servidor de copia de seguridad (Replica)",
+ "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Por favor proporciona un servidor de copia de seguridad opcional. Debe ser una réplica del servidor LDAP / AD principal.",
+ "Backup (Replica) Port" : "Puerto para copias de seguridad (Réplica)",
+ "Disable Main Server" : "Deshabilitar servidor principal",
+ "Only connect to the replica server." : "Sólo contectarse al servidor de réplica.",
+ "Turn off SSL certificate validation." : "Deshabilitar la validación del certificado SSL.",
+ "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "¡No se recomienda, úsalo únicamente para pruebas! Si la conexión sólo funciona con esta opción, importa el certificado SSL del servidor LDAP a tu servidor %s.",
+ "Cache Time-To-Live" : "Tiempo de vida del caché",
+ "in seconds. A change empties the cache." : "en segundos. Un cambio vacía la caché.",
+ "Directory Settings" : "Configuraciones del directorio",
+ "User Display Name Field" : "Campo de Usuario a desplegar",
+ "The LDAP attribute to use to generate the user's display name." : "El atributo LDAP a usar para generar el nombre del usuario a desplegar.",
+ "2nd User Display Name Field" : "2do Campo de Nombre a Desplegar del Usuario",
+ "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atributo LDAP puede ser agregado al nombre a despelegar entre corchetes. Ejemplos de resultados »John Doe (john.doe@example.org)«.",
+ "Base User Tree" : "Árbol de Usuario Base",
+ "One User Base DN per line" : "Un Usuario Base de DN por línea",
+ "User Search Attributes" : "Atributos de búsqueda de usuario",
+ "Optional; one attribute per line" : "Opcional; un atributo por línea",
+ "Group Display Name Field" : "Campo de Nombre de Grupo a Desplegar",
+ "The LDAP attribute to use to generate the groups's display name." : "El atributo LDAP a usar para generar el nombre para mostrar del grupo.",
+ "Base Group Tree" : "Árbol base de grupo",
+ "One Group Base DN per line" : "Un DN Base de Grupo por línea",
+ "Group Search Attributes" : "Atributos de Búsqueda de Grupo",
+ "Group-Member association" : "Asociación Grupo-Miembro",
+ "Dynamic Group Member URL" : "URL Dinámico de Miembro de Grupo ",
+ "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "El atributo de LDAP que, en objetos de grupo, contiene una URL de búsqueda LDAP que determina cuáles objetos pertenecen al grupo. (Un ajuste vacío deshabilita la funcionalidad de membrecía de grupo dinámica.)",
+ "Nested Groups" : "Grupos Anidados",
+ "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Cuando está activado, los grupos que contengan grupos están soportados. (Sólo funciona si el atributo de miembro de grupo contiene los DNs). ",
+ "Paging chunksize" : "Tamaño del chunk de paginación",
+ "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "El tamaño de chunk usado para las búsquedas con paginación de LDAP puede regresar resuldados volumniosos tales como enumeraciones de usuarios o grupos. (Establecerlo a 0 deshabilita las búsquedas con paginación en estos casos). ",
+ "Enable LDAP password changes per user" : "Habilitar cambio de contraseñas en LDAP por el usuario",
+ "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permitir que los usuarios LDAP puedan cambiar su contraseña y permitir a los Super Administradortes y Administradores de grupo cambiar la contraseña de sus usuarios LDAP. Únicamente funciona cuando la configuración de las poiíticas de control de acceso en el servidor LDAP está alineada. Como las contraseñas son enviadas en texto plano al servidor LDAP, se debe usar encripción en el transporte y del mismo modo se debe configurar el uso de funciones de resumen en el servidor LDAP",
+ "(New password is sent as plain text to LDAP)" : "(La nueva contraseña se envía como texto plano a LDAP)",
+ "Default password policy DN" : "DN de la política predeterminada de contraseñas",
+ "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "El DN de la política de contraseñas predeterminada que será usada para el manejo de expiración de contraseñas. Sólo funciona cuando está habilitado el cambio de contraseñas por el usuario y sólo está soportado para OpenLDAP. Déjalo en blanco para deshabilitar el manejo de expiración de contraseñas.",
+ "Special Attributes" : "Atributos Especiales",
+ "Quota Field" : "Campo de cuota",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Dejar en blanco para usar la cuota predeterminada del usuario. En caso contrario, por favor especifica el atributo LDAP / AD.",
+ "Quota Default" : "Cuota predeterminada",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Anular la cuota predeterminada para usuarios LDAP que no tienen una cuota establecida en el Campo Cuota. ",
+ "Email Field" : "Campo de correo electrónico",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ",
+ "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario",
+ "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Dejar vacío para el usuario (predeterminado). En caso contrario, especifica un atributo LDAP/AD.",
+ "Internal Username" : "Usuario interno",
+ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ",
+ "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:",
+ "Override UUID detection" : "Anular la detección UUID",
+ "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.",
+ "UUID Attribute for Users:" : "Atributo UUID para Usuarios:",
+ "UUID Attribute for Groups:" : "Atributo UUID para Grupos:",
+ "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP",
+ "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los usuario son usados para almacenar y asignar (meta) datos. Para poder identificar y reconocer con precisión a los usuarios, cada usuario LDAP contará con un Usuario interno. Esto requiere un mapeo del Usuario al usuario-LDAP. El Usuario creado se mapea al UUID del usuario LDAP. Adicionalmente el DN se guarda en caché para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, las modficaciones serán encontradas. El Usuario interno se usa en todos lados. Limpiar los mapeos dejará rastros en todos lados. ¡Limpiar los mapeos no es senible a la configuración, afecta a todas las configuraciones LDAP! Nunca borres las configuraciones en el ambiente de producción, sólo házlo en los ambientes de pruebas o de experimentación. ",
+ "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP",
+ "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP",
+ "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "El id %u del marcador de posición falta. Será reemplazado con el usuario al consultar LDAP / AD.",
+ "Verify settings and count groups" : "Verificar configuraciones y contar grupos",
+ "Add a new and blank configuration" : "Agregar una configuración nueva y en blanco",
+ "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Puedes omitir el protocolo, excepto si requieres SSL. En ese caso, empieza con ldaps://",
+ "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Advertencia:</b> Las aplicaciones user_ldap y user_webdavauth son incompatibles. Puedes expermientar comportamientos inesperados. Por favor solicita a tu administrador del sistema deshabilitar alguno de ellos.",
+ "in bytes" : "en bytes"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/es_EC.json b/apps/user_ldap/l10n/es_EC.json
new file mode 100644
index 00000000000..eefeb9a037f
--- /dev/null
+++ b/apps/user_ldap/l10n/es_EC.json
@@ -0,0 +1,195 @@
+{ "translations": {
+ "Failed to clear the mappings." : "Se presentó una falla al borrar los mapeos.",
+ "Failed to delete the server configuration" : "Se presentó una falla al borrar la configuración del servidor",
+ "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ",
+ "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!",
+ "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.",
+ "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.",
+ "No action specified" : "No se ha especificado alguna acción",
+ "No configuration specified" : "No se ha especificado una configuración",
+ "No data specified" : "No se han especificado datos",
+ " Could not set configuration %s" : "No fue posible establecer la configuración %s",
+ "Action does not exist" : "La acción no existe",
+ "LDAP user and group backend" : "Backend de LDAP para usuario y grupo",
+ "Renewing …" : "Renovando ...",
+ "Very weak password" : "Contraseña muy debil",
+ "Weak password" : "Contraseña débil",
+ "So-so password" : "Contraseña aceptable",
+ "Good password" : "Buena contraseña",
+ "Strong password" : "Contraseña fuerte",
+ "The Base DN appears to be wrong" : "El DN Base parece estar incorrecto",
+ "Testing configuration…" : "Probando configuración... ",
+ "Configuration incorrect" : "Configuración Incorrecta",
+ "Configuration incomplete" : "Configuración incompleta",
+ "Configuration OK" : "Configuración correcta",
+ "Select groups" : "Seleccionar grupos",
+ "Select object classes" : "Seleccionar las clases de objeto",
+ "Please check the credentials, they seem to be wrong." : "Por favor verifica tus credenciales, al parecer están equivocadas.",
+ "Please specify the port, it could not be auto-detected." : "No fue posible auto-detectar el puerto, por favor especifícalo.",
+ "Base DN could not be auto-detected, please revise credentials, host and port." : "No fue posible auto detectar el DN Base, por favor verifica las credenciales, servidor y puerto.",
+ "Could not detect Base DN, please enter it manually." : "No fue posible detectar el DN Base, por favor ingreésalo manualmente.",
+ "{nthServer}. Server" : "{nthServer}. Servidor",
+ "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Por favor verifica.",
+ "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ",
+ " entries available within the provided Base DN" : "elementos disponibles dentro del DN Base proporcionado",
+ "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Por favor verifica la DN Base, así como las configuraciones de la conexión y las credenciales.",
+ "Do you really want to delete the current Server Configuration?" : "¿Realmente deseas eliminar la configuración actual del servidor?",
+ "Confirm Deletion" : "Confirmar el borrado",
+ "Mappings cleared successfully!" : "¡Los mapeos se borraron exitosamente!",
+ "Error while clearing the mappings." : "Se presentó un error al borrar los mapeos. ",
+ "Anonymous bind is not allowed. Please provide a User DN and Password." : "La vinculación anónima no está permitida. Por favor proporciona un Usuario DN y una Contaseña.",
+ "LDAP Operations error. Anonymous bind might not be allowed." : "Error de Operaciones LDAP. Las vinculaciones anónimas pueden no estar permitidas. ",
+ "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Se presentó una falla en el guardado. Por favor verifica que la base de datos esté operando. Vuelve a cargar antes de continuar. ",
+ "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Cambiar la modalidad habilitará las consultas automaticas de LDAP. Dependiendo del tamaño de su LDAP esto puede tomar algun tiempo. ¿Aún desea cambiar la modalidad?",
+ "Mode switch" : "Cambio de modo",
+ "Select attributes" : "Seleccionar atributos",
+ "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Usuario no encontrado. Por favor verifica tus atributos de inicio de sesión y tu usuario. Filtro aplicado (para copiar-y-pegar para una validación de línea de comando): <br/>",
+ "User found and settings verified." : "Usuario encontrado y configuraciones verificadas. ",
+ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ",
+ "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.",
+ "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ",
+ "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ",
+ "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.",
+ "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar",
+ "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.",
+ "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ",
+ "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña",
+ "Your password will expire tomorrow." : "Tu contraseña expirará mañana.",
+ "Your password will expire today." : "Tu contraseña expirará el día de hoy. ",
+ "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "],
+ "LDAP / AD integration" : "Integración con LDAP / AD",
+ "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"],
+ "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ",
+ "Could not find the desired feature" : "No fue posible encontrar la función deseada.",
+ "Invalid Host" : "Servidor inválido",
+ "Test Configuration" : "Probar configuración",
+ "Help" : "Ayuda",
+ "Groups meeting these criteria are available in %s:" : "Los grupos que cumplen con los siguientes criterios están disponibles en %s:",
+ "Only these object classes:" : "Sólo estas clases de objetos:",
+ "Only from these groups:" : "Sólo desde estos grupos:",
+ "Search groups" : "Buscar grupos",
+ "Available groups" : "Grupos disponibles",
+ "Selected groups" : "Grupos seleccionados",
+ "Edit LDAP Query" : "Editar consulta a LDAP",
+ "LDAP Filter:" : "Filtro de LDAP:",
+ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.",
+ "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos",
+ "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:",
+ "LDAP / AD Username:" : "Usuario LDAP / AD:",
+ "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ",
+ "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD",
+ "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ",
+ "Other Attributes:" : "Otros atributos:",
+ "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"",
+ "Test Loginname" : "Probar nombre de usuario",
+ "Verify settings" : "Verificar configuraciones ",
+ "1. Server" : "1. Servidor",
+ "%s. Server:" : "%s. Servidor:",
+ "Add a new configuration" : "Agregar una nueva configuración",
+ "Copy current configuration into new directory binding" : "Copiar la configuración actual a un nuevo directorio de vinculación",
+ "Delete the current configuration" : "Borrar la configuración actual",
+ "Host" : "Servidor",
+ "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Puedes omitir el protocolo, a menos que requiera SSL. Si es el caso, empieza con ldaps://",
+ "Port" : "Puerto",
+ "Detect Port" : "Detectar Puerto",
+ "User DN" : "DN del usuario",
+ "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "El DN del cliente del usuario con el que se vinculará, ejem. uid=agente,dc=ejemplo,dc=com. Para tener un acceso anónimo, deja el DN y la contraseña vacíos.",
+ "Password" : "Contraseña",
+ "For anonymous access, leave DN and Password empty." : "Para acceso anónimo, deja la contraseña y DN vacíos.",
+ "One Base DN per line" : "Un DN Base por línea",
+ "You can specify Base DN for users and groups in the Advanced tab" : "Puedes especificar el DN Base para usuarios y grupos en la pestaña Avanzado",
+ "Detect Base DN" : "Detectar DN Base",
+ "Test Base DN" : "Probar el DN Base",
+ "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita solicitudes automaticas de LDAP. Es mejor para ambientes más grandes pero requiere mayor conocimiento de LDAP. ",
+ "Manually enter LDAP filters (recommended for large directories)" : "Ingresar los filtros LDAP manualmente (recomendado para directorios grandes)",
+ "Listing and searching for users is constrained by these criteria:" : "Los enlistados y las busquedas para los usuarios están acotados por estos criterios:",
+ "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Las clases de objetos más comunes para usuarios son organizationalPerson, person, user, and inetOrgPerson. Si no estás seguro de cuál clase de objeto selecciónar, por favor consulta tu directorio admin.",
+ "The filter specifies which LDAP users shall have access to the %s instance." : "El filtro especifica cuáles usuarios LDAP tendrán acceso a la instancia %s.",
+ "Verify settings and count users" : "Verificar configuraciones y contar ususarios",
+ "Saving" : "Guardando",
+ "Back" : "Atrás",
+ "Continue" : "Continuar",
+ "Please renew your password." : "Por favor renueva tu contraseña.",
+ "An internal error occurred." : "Se presentó un error interno. ",
+ "Please try again or contact your administrator." : "Por favor inténtarlo de nuevo o contacta a tu administrador. ",
+ "Current password" : "Contraseña actual",
+ "New password" : "Nueva contraseña",
+ "Renew password" : "Renovar contraseña",
+ "Wrong password. Reset it?" : "Contraseña incorrecta. ¿Deseas restablecerla?",
+ "Wrong password." : "Contraseña incorrecta. ",
+ "Cancel" : "Cancelar",
+ "LDAP" : "LDAP",
+ "Server" : "Servidor",
+ "Users" : "Usuarios",
+ "Login Attributes" : "Atributos de Inicio de Sesión",
+ "Groups" : "Grupos",
+ "Expert" : "Experto",
+ "Advanced" : "Avanzado",
+ "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advertencia:</b> El módulo LDAP de PHP no está instalado, el backend no funcionará. Por favor solicita su instalación a tu administrador del sistema.",
+ "Connection Settings" : "Configuraciones de la conexión",
+ "Configuration Active" : "Configuracion Activa",
+ "When unchecked, this configuration will be skipped." : "Cuando no esté seleccionada, esta configuración será omitida.",
+ "Backup (Replica) Host" : "Servidor de copia de seguridad (Replica)",
+ "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Por favor proporciona un servidor de copia de seguridad opcional. Debe ser una réplica del servidor LDAP / AD principal.",
+ "Backup (Replica) Port" : "Puerto para copias de seguridad (Réplica)",
+ "Disable Main Server" : "Deshabilitar servidor principal",
+ "Only connect to the replica server." : "Sólo contectarse al servidor de réplica.",
+ "Turn off SSL certificate validation." : "Deshabilitar la validación del certificado SSL.",
+ "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "¡No se recomienda, úsalo únicamente para pruebas! Si la conexión sólo funciona con esta opción, importa el certificado SSL del servidor LDAP a tu servidor %s.",
+ "Cache Time-To-Live" : "Tiempo de vida del caché",
+ "in seconds. A change empties the cache." : "en segundos. Un cambio vacía la caché.",
+ "Directory Settings" : "Configuraciones del directorio",
+ "User Display Name Field" : "Campo de Usuario a desplegar",
+ "The LDAP attribute to use to generate the user's display name." : "El atributo LDAP a usar para generar el nombre del usuario a desplegar.",
+ "2nd User Display Name Field" : "2do Campo de Nombre a Desplegar del Usuario",
+ "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atributo LDAP puede ser agregado al nombre a despelegar entre corchetes. Ejemplos de resultados »John Doe (john.doe@example.org)«.",
+ "Base User Tree" : "Árbol de Usuario Base",
+ "One User Base DN per line" : "Un Usuario Base de DN por línea",
+ "User Search Attributes" : "Atributos de búsqueda de usuario",
+ "Optional; one attribute per line" : "Opcional; un atributo por línea",
+ "Group Display Name Field" : "Campo de Nombre de Grupo a Desplegar",
+ "The LDAP attribute to use to generate the groups's display name." : "El atributo LDAP a usar para generar el nombre para mostrar del grupo.",
+ "Base Group Tree" : "Árbol base de grupo",
+ "One Group Base DN per line" : "Un DN Base de Grupo por línea",
+ "Group Search Attributes" : "Atributos de Búsqueda de Grupo",
+ "Group-Member association" : "Asociación Grupo-Miembro",
+ "Dynamic Group Member URL" : "URL Dinámico de Miembro de Grupo ",
+ "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "El atributo de LDAP que, en objetos de grupo, contiene una URL de búsqueda LDAP que determina cuáles objetos pertenecen al grupo. (Un ajuste vacío deshabilita la funcionalidad de membrecía de grupo dinámica.)",
+ "Nested Groups" : "Grupos Anidados",
+ "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Cuando está activado, los grupos que contengan grupos están soportados. (Sólo funciona si el atributo de miembro de grupo contiene los DNs). ",
+ "Paging chunksize" : "Tamaño del chunk de paginación",
+ "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "El tamaño de chunk usado para las búsquedas con paginación de LDAP puede regresar resuldados volumniosos tales como enumeraciones de usuarios o grupos. (Establecerlo a 0 deshabilita las búsquedas con paginación en estos casos). ",
+ "Enable LDAP password changes per user" : "Habilitar cambio de contraseñas en LDAP por el usuario",
+ "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permitir que los usuarios LDAP puedan cambiar su contraseña y permitir a los Super Administradortes y Administradores de grupo cambiar la contraseña de sus usuarios LDAP. Únicamente funciona cuando la configuración de las poiíticas de control de acceso en el servidor LDAP está alineada. Como las contraseñas son enviadas en texto plano al servidor LDAP, se debe usar encripción en el transporte y del mismo modo se debe configurar el uso de funciones de resumen en el servidor LDAP",
+ "(New password is sent as plain text to LDAP)" : "(La nueva contraseña se envía como texto plano a LDAP)",
+ "Default password policy DN" : "DN de la política predeterminada de contraseñas",
+ "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "El DN de la política de contraseñas predeterminada que será usada para el manejo de expiración de contraseñas. Sólo funciona cuando está habilitado el cambio de contraseñas por el usuario y sólo está soportado para OpenLDAP. Déjalo en blanco para deshabilitar el manejo de expiración de contraseñas.",
+ "Special Attributes" : "Atributos Especiales",
+ "Quota Field" : "Campo de cuota",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Dejar en blanco para usar la cuota predeterminada del usuario. En caso contrario, por favor especifica el atributo LDAP / AD.",
+ "Quota Default" : "Cuota predeterminada",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Anular la cuota predeterminada para usuarios LDAP que no tienen una cuota establecida en el Campo Cuota. ",
+ "Email Field" : "Campo de correo electrónico",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ",
+ "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario",
+ "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Dejar vacío para el usuario (predeterminado). En caso contrario, especifica un atributo LDAP/AD.",
+ "Internal Username" : "Usuario interno",
+ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ",
+ "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:",
+ "Override UUID detection" : "Anular la detección UUID",
+ "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.",
+ "UUID Attribute for Users:" : "Atributo UUID para Usuarios:",
+ "UUID Attribute for Groups:" : "Atributo UUID para Grupos:",
+ "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP",
+ "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los usuario son usados para almacenar y asignar (meta) datos. Para poder identificar y reconocer con precisión a los usuarios, cada usuario LDAP contará con un Usuario interno. Esto requiere un mapeo del Usuario al usuario-LDAP. El Usuario creado se mapea al UUID del usuario LDAP. Adicionalmente el DN se guarda en caché para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, las modficaciones serán encontradas. El Usuario interno se usa en todos lados. Limpiar los mapeos dejará rastros en todos lados. ¡Limpiar los mapeos no es senible a la configuración, afecta a todas las configuraciones LDAP! Nunca borres las configuraciones en el ambiente de producción, sólo házlo en los ambientes de pruebas o de experimentación. ",
+ "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP",
+ "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP",
+ "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "El id %u del marcador de posición falta. Será reemplazado con el usuario al consultar LDAP / AD.",
+ "Verify settings and count groups" : "Verificar configuraciones y contar grupos",
+ "Add a new and blank configuration" : "Agregar una configuración nueva y en blanco",
+ "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Puedes omitir el protocolo, excepto si requieres SSL. En ese caso, empieza con ldaps://",
+ "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Advertencia:</b> Las aplicaciones user_ldap y user_webdavauth son incompatibles. Puedes expermientar comportamientos inesperados. Por favor solicita a tu administrador del sistema deshabilitar alguno de ellos.",
+ "in bytes" : "en bytes"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/user_ldap/lib/Access.php b/apps/user_ldap/lib/Access.php
index bbf07165090..89f401c4888 100644
--- a/apps/user_ldap/lib/Access.php
+++ b/apps/user_ldap/lib/Access.php
@@ -8,8 +8,10 @@
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Bart Visscher <bartv@thisnet.nl>
* @author Benjamin Diele <benjamin@diele.be>
+ * @author bline <scottbeck@gmail.com>
* @author Christopher Schäpers <kondou@ts.unde.re>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Juan Pablo Villafáñez <jvillafanez@solidgear.es>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Lorenzo M. Catucci <lorenzo@sancho.ccd.uniroma2.it>
* @author Lukas Reschke <lukas@statuscode.ch>
@@ -18,9 +20,10 @@
* @author Morris Jobke <hey@morrisjobke.de>
* @author Nicolas Grekas <nicolas.grekas@gmail.com>
* @author Ralph Krimmel <rkrimme1@gwdg.de>
- * @author Renaud Fortier <Renaud.Fortier@fsaa.ulaval.ca>
* @author Robin McCorkell <robin@mccorkell.me.uk>
* @author Roger Szabo <roger.szabo@web.de>
+ * @author root <root@localhost.localdomain>
+ * @author Victor Dubiniuk <dubiniuk@owncloud.com>
*
* @license AGPL-3.0
*
diff --git a/apps/user_ldap/lib/Command/Search.php b/apps/user_ldap/lib/Command/Search.php
index d348d5b31c9..ae61bfcd41c 100644
--- a/apps/user_ldap/lib/Command/Search.php
+++ b/apps/user_ldap/lib/Command/Search.php
@@ -4,7 +4,10 @@
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Juan Pablo Villafáñez <jvillafanez@solidgear.es>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
*
* @license AGPL-3.0
*
@@ -111,7 +114,7 @@ class Search extends Command {
$this->validateOffsetAndLimit($offset, $limit);
if($input->getOption('group')) {
- $proxy = new Group_Proxy($configPrefixes, $ldapWrapper);
+ $proxy = new Group_Proxy($configPrefixes, $ldapWrapper, \OC::$server->query('LDAPGroupPluginManager'));
$getMethod = 'getGroups';
$printID = false;
// convert the limit of groups to null. This will show all the groups available instead of
@@ -125,7 +128,8 @@ class Search extends Command {
$ldapWrapper,
$this->ocConfig,
\OC::$server->getNotificationManager(),
- \OC::$server->getUserSession()
+ \OC::$server->getUserSession(),
+ \OC::$server->query('LDAPUserPluginManager')
);
$getMethod = 'getDisplayNames';
$printID = true;
diff --git a/apps/user_ldap/lib/Command/SetConfig.php b/apps/user_ldap/lib/Command/SetConfig.php
index 5188bee1049..db656558efc 100644
--- a/apps/user_ldap/lib/Command/SetConfig.php
+++ b/apps/user_ldap/lib/Command/SetConfig.php
@@ -5,6 +5,7 @@
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/user_ldap/lib/Command/TestConfig.php b/apps/user_ldap/lib/Command/TestConfig.php
index cd3ecc26d2b..a385c892e1e 100644
--- a/apps/user_ldap/lib/Command/TestConfig.php
+++ b/apps/user_ldap/lib/Command/TestConfig.php
@@ -5,6 +5,7 @@
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/user_ldap/lib/Configuration.php b/apps/user_ldap/lib/Configuration.php
index c65e6e34e2c..bf8a9095a68 100644
--- a/apps/user_ldap/lib/Configuration.php
+++ b/apps/user_ldap/lib/Configuration.php
@@ -2,8 +2,8 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
- * @author Alexander Bergolth <leo@strike.wu.ac.at>
* @author Alex Weirig <alex.weirig@technolink.lu>
+ * @author Alexander Bergolth <leo@strike.wu.ac.at>
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
@@ -12,6 +12,8 @@
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin McCorkell <robin@mccorkell.me.uk>
* @author Roger Szabo <roger.szabo@web.de>
+ * @author Victor Dubiniuk <dubiniuk@owncloud.com>
+ * @author Xuanwo <xuanwo@yunify.com>
*
* @license AGPL-3.0
*
diff --git a/apps/user_ldap/lib/Connection.php b/apps/user_ldap/lib/Connection.php
index 9e84cbde35b..0f10874bc2f 100644
--- a/apps/user_ldap/lib/Connection.php
+++ b/apps/user_ldap/lib/Connection.php
@@ -4,6 +4,8 @@
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Bart Visscher <bartv@thisnet.nl>
+ * @author Brent Bloxam <brent.bloxam@gmail.com>
+ * @author Jarkko Lehtoranta <devel@jlranta.com>
* @author Joas Schilling <coding@schilljs.com>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Lukas Reschke <lukas@statuscode.ch>
@@ -11,7 +13,9 @@
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
- * @author Roger Szabo <roger.szabo@web.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author root <root@localhost.localdomain>
+ * @author Victor Dubiniuk <dubiniuk@owncloud.com>
* @author Xuanwo <xuanwo@yunify.com>
*
* @license AGPL-3.0
diff --git a/apps/user_ldap/lib/GroupPluginManager.php b/apps/user_ldap/lib/GroupPluginManager.php
new file mode 100644
index 00000000000..b3064f61a76
--- /dev/null
+++ b/apps/user_ldap/lib/GroupPluginManager.php
@@ -0,0 +1,169 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 EITA Cooperative (eita.org.br)
+ *
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\User_LDAP;
+
+use OCP\GroupInterface;
+
+class GroupPluginManager {
+
+ private $respondToActions = 0;
+
+ private $which = array(
+ GroupInterface::CREATE_GROUP => null,
+ GroupInterface::DELETE_GROUP => null,
+ GroupInterface::ADD_TO_GROUP => null,
+ GroupInterface::REMOVE_FROM_GROUP => null,
+ GroupInterface::COUNT_USERS => null,
+ GroupInterface::GROUP_DETAILS => null
+ );
+
+ /**
+ * @return int All implemented actions
+ */
+ public function getImplementedActions() {
+ return $this->respondToActions;
+ }
+
+ /**
+ * Registers a group plugin that may implement some actions, overriding User_LDAP's group actions.
+ * @param ILDAPGroupPlugin $plugin
+ */
+ public function register(ILDAPGroupPlugin $plugin) {
+ $respondToActions = $plugin->respondToActions();
+ $this->respondToActions |= $respondToActions;
+
+ foreach($this->which as $action => $v) {
+ if ((bool)($respondToActions & $action)) {
+ $this->which[$action] = $plugin;
+ \OC::$server->getLogger()->debug("Registered action ".$action." to plugin ".get_class($plugin), ['app' => 'user_ldap']);
+ }
+ }
+ }
+
+ /**
+ * Signal if there is a registered plugin that implements some given actions
+ * @param int $actions Actions defined in \OCP\GroupInterface, like GroupInterface::REMOVE_FROM_GROUP
+ * @return bool
+ */
+ public function implementsActions($actions) {
+ return ($actions & $this->respondToActions) == $actions;
+ }
+
+ /**
+ * Create a group
+ * @param string $gid Group Id
+ * @return string | null The group DN if group creation was successful.
+ * @throws \Exception
+ */
+ public function createGroup($gid) {
+ $plugin = $this->which[GroupInterface::CREATE_GROUP];
+
+ if ($plugin) {
+ return $plugin->createGroup($gid);
+ }
+ throw new \Exception('No plugin implements createGroup in this LDAP Backend.');
+ }
+
+ /**
+ * Delete a group
+ * @param string $gid Group Id of the group to delete
+ * @return bool
+ * @throws \Exception
+ */
+ public function deleteGroup($gid) {
+ $plugin = $this->which[GroupInterface::DELETE_GROUP];
+
+ if ($plugin) {
+ return $plugin->deleteGroup($gid);
+ }
+ throw new \Exception('No plugin implements deleteGroup in this LDAP Backend.');
+ }
+
+ /**
+ * Add a user to a group
+ * @param string $uid ID of the user to add to group
+ * @param string $gid ID of the group in which add the user
+ * @return bool
+ * @throws \Exception
+ *
+ * Adds a user to a group.
+ */
+ public function addToGroup($uid, $gid) {
+ $plugin = $this->which[GroupInterface::ADD_TO_GROUP];
+
+ if ($plugin) {
+ return $plugin->addToGroup($uid, $gid);
+ }
+ throw new \Exception('No plugin implements addToGroup in this LDAP Backend.');
+ }
+
+ /**
+ * Removes a user from a group
+ * @param string $uid ID of the user to remove from group
+ * @param string $gid ID of the group from which remove the user
+ * @return bool
+ * @throws \Exception
+ *
+ * removes the user from a group.
+ */
+ public function removeFromGroup($uid, $gid) {
+ $plugin = $this->which[GroupInterface::REMOVE_FROM_GROUP];
+
+ if ($plugin) {
+ return $plugin->removeFromGroup($uid, $gid);
+ }
+ throw new \Exception('No plugin implements removeFromGroup in this LDAP Backend.');
+ }
+
+ /**
+ * get the number of all users matching the search string in a group
+ * @param string $gid ID of the group
+ * @param string $search query string
+ * @return int|false
+ * @throws \Exception
+ */
+ public function countUsersInGroup($gid, $search = '') {
+ $plugin = $this->which[GroupInterface::COUNT_USERS];
+
+ if ($plugin) {
+ return $plugin->countUsersInGroup($gid,$search);
+ }
+ throw new \Exception('No plugin implements countUsersInGroup in this LDAP Backend.');
+ }
+
+ /**
+ * get an array with group details
+ * @param string $gid
+ * @return array|false
+ * @throws \Exception
+ */
+ public function getGroupDetails($gid) {
+ $plugin = $this->which[GroupInterface::GROUP_DETAILS];
+
+ if ($plugin) {
+ return $plugin->getGroupDetails($gid);
+ }
+ throw new \Exception('No plugin implements getGroupDetails in this LDAP Backend.');
+ }
+}
diff --git a/apps/user_ldap/lib/Group_LDAP.php b/apps/user_ldap/lib/Group_LDAP.php
index 55d31649f10..3faa96bc2b8 100644
--- a/apps/user_ldap/lib/Group_LDAP.php
+++ b/apps/user_ldap/lib/Group_LDAP.php
@@ -2,10 +2,11 @@
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
- * @author Alexander Bergolth <leo@strike.wu.ac.at>
* @author Alex Weirig <alex.weirig@technolink.lu>
+ * @author Alexander Bergolth <leo@strike.wu.ac.at>
* @author alexweirig <alex.weirig@technolink.lu>
* @author Andreas Fischer <bantu@owncloud.com>
+ * @author Andreas Pflug <dev@admin4.org>
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Bart Visscher <bartv@thisnet.nl>
* @author Christopher Schäpers <kondou@ts.unde.re>
@@ -17,7 +18,9 @@
* @author Robin McCorkell <robin@mccorkell.me.uk>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Victor Dubiniuk <dubiniuk@owncloud.com>
* @author Vincent Petry <pvince81@owncloud.com>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
* @author Xuanwo <xuanwo@yunify.com>
*
* @license AGPL-3.0
@@ -39,8 +42,9 @@
namespace OCA\User_LDAP;
use OC\Cache\CappedMemoryCache;
+use OCP\GroupInterface;
-class Group_LDAP extends BackendUtility implements \OCP\GroupInterface {
+class Group_LDAP extends BackendUtility implements \OCP\GroupInterface, IGroupLDAP {
protected $enabled = false;
/**
@@ -53,7 +57,10 @@ class Group_LDAP extends BackendUtility implements \OCP\GroupInterface {
*/
protected $cachedGroupsByMember;
- public function __construct(Access $access) {
+ /** @var GroupPluginManager */
+ protected $groupPluginManager;
+
+ public function __construct(Access $access, GroupPluginManager $groupPluginManager) {
parent::__construct($access);
$filter = $this->access->connection->ldapGroupFilter;
$gassoc = $this->access->connection->ldapGroupMemberAssocAttr;
@@ -63,6 +70,7 @@ class Group_LDAP extends BackendUtility implements \OCP\GroupInterface {
$this->cachedGroupMembers = new CappedMemoryCache();
$this->cachedGroupsByMember = new CappedMemoryCache();
+ $this->groupPluginManager = $groupPluginManager;
}
/**
@@ -860,6 +868,10 @@ class Group_LDAP extends BackendUtility implements \OCP\GroupInterface {
* @return int|bool
*/
public function countUsersInGroup($gid, $search = '') {
+ if ($this->groupPluginManager->implementsActions(GroupInterface::COUNT_USERS)) {
+ return $this->groupPluginManager->countUsersInGroup($gid, $search);
+ }
+
$cacheKey = 'countUsersInGroup-'.$gid.'-'.$search;
if(!$this->enabled || !$this->groupExists($gid)) {
return false;
@@ -1067,17 +1079,114 @@ class Group_LDAP extends BackendUtility implements \OCP\GroupInterface {
* @return boolean
*
* Returns the supported actions as int to be
- * compared with \OC\User\Backend::CREATE_USER etc.
+ * compared with GroupInterface::CREATE_GROUP etc.
*/
public function implementsActions($actions) {
- return (bool)(\OC\Group\Backend::COUNT_USERS & $actions);
+ return (bool)((GroupInterface::COUNT_USERS |
+ $this->groupPluginManager->getImplementedActions()) & $actions);
}
/**
* Return access for LDAP interaction.
* @return Access instance of Access for LDAP interaction
*/
- public function getLDAPAccess() {
+ public function getLDAPAccess($gid) {
return $this->access;
}
+
+ /**
+ * create a group
+ * @param string $gid
+ * @return bool
+ * @throws \Exception
+ */
+ public function createGroup($gid) {
+ if ($this->groupPluginManager->implementsActions(GroupInterface::CREATE_GROUP)) {
+ if ($dn = $this->groupPluginManager->createGroup($gid)) {
+ //updates group mapping
+ $this->access->dn2ocname($dn, $gid, false);
+ $this->access->connection->writeToCache("groupExists".$gid, true);
+ }
+ return $dn != null;
+ }
+ throw new \Exception('Could not create group in LDAP backend.');
+ }
+
+ /**
+ * delete a group
+ * @param string $gid gid of the group to delete
+ * @return bool
+ * @throws \Exception
+ */
+ public function deleteGroup($gid) {
+ if ($this->groupPluginManager->implementsActions(GroupInterface::DELETE_GROUP)) {
+ if ($ret = $this->groupPluginManager->deleteGroup($gid)) {
+ #delete group in nextcloud internal db
+ $this->access->getGroupMapper()->unmap($gid);
+ $this->access->connection->writeToCache("groupExists".$gid, false);
+ }
+ return $ret;
+ }
+ throw new \Exception('Could not delete group in LDAP backend.');
+ }
+
+ /**
+ * Add a user to a group
+ * @param string $uid Name of the user to add to group
+ * @param string $gid Name of the group in which add the user
+ * @return bool
+ * @throws \Exception
+ */
+ public function addToGroup($uid, $gid) {
+ if ($this->groupPluginManager->implementsActions(GroupInterface::ADD_TO_GROUP)) {
+ if ($ret = $this->groupPluginManager->addToGroup($uid, $gid)) {
+ $this->access->connection->clearCache();
+ }
+ return $ret;
+ }
+ throw new \Exception('Could not add user to group in LDAP backend.');
+ }
+
+ /**
+ * Removes a user from a group
+ * @param string $uid Name of the user to remove from group
+ * @param string $gid Name of the group from which remove the user
+ * @return bool
+ * @throws \Exception
+ */
+ public function removeFromGroup($uid, $gid) {
+ if ($this->groupPluginManager->implementsActions(GroupInterface::REMOVE_FROM_GROUP)) {
+ if ($ret = $this->groupPluginManager->removeFromGroup($uid, $gid)) {
+ $this->access->connection->clearCache();
+ }
+ return $ret;
+ }
+ throw new \Exception('Could not remove user from group in LDAP backend.');
+ }
+
+ /**
+ * Gets group details
+ * @param string $gid Name of the group
+ * @return array | false
+ * @throws \Exception
+ */
+ public function getGroupDetails($gid) {
+ if ($this->groupPluginManager->implementsActions(GroupInterface::GROUP_DETAILS)) {
+ return $this->groupPluginManager->getGroupDetails($gid);
+ }
+ throw new \Exception('Could not get group details in LDAP backend.');
+ }
+
+ /**
+ * Return LDAP connection resource from a cloned connection.
+ * The cloned connection needs to be closed manually.
+ * of the current access.
+ * @param string $gid
+ * @return resource of the LDAP connection
+ */
+ public function getNewLDAPConnection($gid) {
+ $connection = clone $this->access->getConnection();
+ return $connection->getConnectionResource();
+ }
+
}
diff --git a/apps/user_ldap/lib/Group_Proxy.php b/apps/user_ldap/lib/Group_Proxy.php
index e546c84a90c..ad3fba4092f 100644
--- a/apps/user_ldap/lib/Group_Proxy.php
+++ b/apps/user_ldap/lib/Group_Proxy.php
@@ -7,6 +7,7 @@
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
*
* @license AGPL-3.0
*
@@ -26,7 +27,7 @@
namespace OCA\User_LDAP;
-class Group_Proxy extends Proxy implements \OCP\GroupInterface {
+class Group_Proxy extends Proxy implements \OCP\GroupInterface, IGroupLDAP {
private $backends = array();
private $refBackend = null;
@@ -34,11 +35,11 @@ class Group_Proxy extends Proxy implements \OCP\GroupInterface {
* Constructor
* @param string[] $serverConfigPrefixes array containing the config Prefixes
*/
- public function __construct($serverConfigPrefixes, ILDAPWrapper $ldap) {
+ public function __construct($serverConfigPrefixes, ILDAPWrapper $ldap, GroupPluginManager $groupPluginManager) {
parent::__construct($ldap);
foreach($serverConfigPrefixes as $configPrefix) {
$this->backends[$configPrefix] =
- new \OCA\User_LDAP\Group_LDAP($this->getAccess($configPrefix));
+ new \OCA\User_LDAP\Group_LDAP($this->getAccess($configPrefix), $groupPluginManager);
if(is_null($this->refBackend)) {
$this->refBackend = &$this->backends[$configPrefix];
}
@@ -146,6 +147,51 @@ class Group_Proxy extends Proxy implements \OCP\GroupInterface {
}
/**
+ * @param string $gid
+ * @return bool
+ */
+ public function createGroup($gid) {
+ return $this->handleRequest(
+ $gid, 'createGroup', array($gid));
+ }
+
+ /**
+ * delete a group
+ * @param string $gid gid of the group to delete
+ * @return bool
+ */
+ public function deleteGroup($gid) {
+ return $this->handleRequest(
+ $gid, 'deleteGroup', array($gid));
+ }
+
+ /**
+ * Add a user to a group
+ * @param string $uid Name of the user to add to group
+ * @param string $gid Name of the group in which add the user
+ * @return bool
+ *
+ * Adds a user to a group.
+ */
+ public function addToGroup($uid, $gid) {
+ return $this->handleRequest(
+ $gid, 'addToGroup', array($uid, $gid));
+ }
+
+ /**
+ * Removes a user from a group
+ * @param string $uid Name of the user to remove from group
+ * @param string $gid Name of the group from which remove the user
+ * @return bool
+ *
+ * removes the user from a group.
+ */
+ public function removeFromGroup($uid, $gid) {
+ return $this->handleRequest(
+ $gid, 'removeFromGroup', array($uid, $gid));
+ }
+
+ /**
* returns the number of users in a group, who match the search term
* @param string $gid the internal group name
* @param string $search optional, a search string
@@ -157,6 +203,16 @@ class Group_Proxy extends Proxy implements \OCP\GroupInterface {
}
/**
+ * get an array with group details
+ * @param string $gid
+ * @return array|false
+ */
+ public function getGroupDetails($gid) {
+ return $this->handleRequest(
+ $gid, 'getGroupDetails', array($gid));
+ }
+
+ /**
* get a list of all groups
* @return string[] with group names
*
@@ -190,7 +246,7 @@ class Group_Proxy extends Proxy implements \OCP\GroupInterface {
* @return boolean
*
* Returns the supported actions as int to be
- * compared with \OC\User\Backend::CREATE_USER etc.
+ * compared with \OCP\GroupInterface::CREATE_GROUP etc.
*/
public function implementsActions($actions) {
//it's the same across all our user backends obviously
@@ -203,6 +259,17 @@ class Group_Proxy extends Proxy implements \OCP\GroupInterface {
* @return Access instance of Access for LDAP interaction
*/
public function getLDAPAccess($gid) {
- return $this->handleRequest($gid, 'getLDAPAccess', []);
+ return $this->handleRequest($gid, 'getLDAPAccess', [$gid]);
}
+
+ /**
+ * Return a new LDAP connection for the specified group.
+ * The connection needs to be closed manually.
+ * @param string $gid
+ * @return resource of the LDAP connection
+ */
+ public function getNewLDAPConnection($gid) {
+ return $this->handleRequest($gid, 'getNewLDAPConnection', array($gid));
+ }
+
}
diff --git a/apps/user_ldap/lib/Helper.php b/apps/user_ldap/lib/Helper.php
index 891ab7f0a3a..a433ea8e4a7 100644
--- a/apps/user_ldap/lib/Helper.php
+++ b/apps/user_ldap/lib/Helper.php
@@ -8,9 +8,12 @@
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Roger Szabo <roger.szabo@web.de>
+ * @author root <root@localhost.localdomain>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
- * @author Roger Szabo <roger.szabo@web.de>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
*
* @license AGPL-3.0
*
@@ -294,10 +297,12 @@ class Helper {
$ldapWrapper = new LDAP();
$ocConfig = \OC::$server->getConfig();
$notificationManager = \OC::$server->getNotificationManager();
+
$userSession = \OC::$server->getUserSession();
+ $userPluginManager = \OC::$server->query('LDAPUserPluginManager');
$userBackend = new User_Proxy(
- $configPrefixes, $ldapWrapper, $ocConfig, $notificationManager, $userSession
+ $configPrefixes, $ldapWrapper, $ocConfig, $notificationManager, $userSession, $userPluginManager
);
$uid = $userBackend->loginName2UserName($param['uid'] );
if($uid !== false) {
diff --git a/apps/user_ldap/lib/IGroupLDAP.php b/apps/user_ldap/lib/IGroupLDAP.php
new file mode 100644
index 00000000000..55dd60c16a2
--- /dev/null
+++ b/apps/user_ldap/lib/IGroupLDAP.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017, EITA Cooperative (eita.org.br)
+ *
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\User_LDAP;
+
+interface IGroupLDAP {
+
+ //Used by LDAPProvider
+
+ /**
+ * Return access for LDAP interaction.
+ * @param string $gid
+ * @return Access instance of Access for LDAP interaction
+ */
+ public function getLDAPAccess($gid);
+
+ /**
+ * Return a new LDAP connection for the specified group.
+ * @param string $gid
+ * @return resource of the LDAP connection
+ */
+ public function getNewLDAPConnection($gid);
+
+}
diff --git a/apps/user_ldap/lib/ILDAPGroupPlugin.php b/apps/user_ldap/lib/ILDAPGroupPlugin.php
new file mode 100644
index 00000000000..bdad1d7707b
--- /dev/null
+++ b/apps/user_ldap/lib/ILDAPGroupPlugin.php
@@ -0,0 +1,86 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 EITA Cooperative (eita.org.br)
+ *
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\User_LDAP;
+
+
+interface ILDAPGroupPlugin {
+
+ /**
+ * Check if plugin implements actions
+ * @return int
+ *
+ * Returns the supported actions as int to be
+ * compared with OC_GROUP_BACKEND_CREATE_GROUP etc.
+ */
+ public function respondToActions();
+
+ /**
+ * @param string $gid
+ * @return string|null The group DN if group creation was successful.
+ */
+ public function createGroup($gid);
+
+ /**
+ * delete a group
+ * @param string $gid gid of the group to delete
+ * @return bool
+ */
+ public function deleteGroup($gid);
+
+ /**
+ * Add a user to a group
+ * @param string $uid Name of the user to add to group
+ * @param string $gid Name of the group in which add the user
+ * @return bool
+ *
+ * Adds a user to a group.
+ */
+ public function addToGroup($uid, $gid);
+
+ /**
+ * Removes a user from a group
+ * @param string $uid Name of the user to remove from group
+ * @param string $gid Name of the group from which remove the user
+ * @return bool
+ *
+ * removes the user from a group.
+ */
+ public function removeFromGroup($uid, $gid);
+
+ /**
+ * get the number of all users matching the search string in a group
+ * @param string $gid
+ * @param string $search
+ * @return int|false
+ */
+ public function countUsersInGroup($gid, $search = '');
+
+ /**
+ * get an array with group details
+ * @param string $gid
+ * @return array|false
+ */
+ public function getGroupDetails($gid);
+
+}
diff --git a/apps/user_ldap/lib/ILDAPUserPlugin.php b/apps/user_ldap/lib/ILDAPUserPlugin.php
new file mode 100644
index 00000000000..9250830fc82
--- /dev/null
+++ b/apps/user_ldap/lib/ILDAPUserPlugin.php
@@ -0,0 +1,93 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 EITA Cooperative (eita.org.br)
+ *
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\User_LDAP;
+
+
+interface ILDAPUserPlugin {
+
+ /**
+ * Check if plugin implements actions
+ * @return int
+ *
+ * Returns the supported actions as int to be
+ * compared with OC_USER_BACKEND_CREATE_USER etc.
+ */
+ public function respondToActions();
+
+ /**
+ * Create a new user in LDAP Backend
+ *
+ * @param string $uid The UID of the user to create
+ * @param string $password The password of the new user
+ * @return bool
+ */
+ public function createUser($uid, $password);
+
+ /**
+ * Set password
+ *
+ * @param string $uid The username
+ * @param string $password The new password
+ * @return bool
+ *
+ * Change the password of a user
+ */
+ public function setPassword($uid, $password);
+
+ /**
+ * get the user's home directory
+ * @param string $uid the username
+ * @return boolean
+ */
+ public function getHome($uid);
+
+ /**
+ * get display name of the user
+ * @param string $uid user ID of the user
+ * @return string display name
+ */
+ public function getDisplayName($uid);
+
+ /**
+ * set display name of the user
+ * @param string $uid user ID of the user
+ * @param string $displayName new user's display name
+ * @return string display name
+ */
+ public function setDisplayName($uid, $displayName);
+
+ /**
+ * checks whether the user is allowed to change his avatar in Nextcloud
+ * @param string $uid the Nextcloud user name
+ * @return boolean either the user can or cannot
+ */
+ public function canChangeAvatar($uid);
+
+ /**
+ * Count the number of users
+ * @return int|bool
+ */
+ public function countUsers();
+
+}
diff --git a/apps/user_ldap/lib/ILDAPWrapper.php b/apps/user_ldap/lib/ILDAPWrapper.php
index 71dd60c3725..52919c48e5f 100644
--- a/apps/user_ldap/lib/ILDAPWrapper.php
+++ b/apps/user_ldap/lib/ILDAPWrapper.php
@@ -8,6 +8,8 @@
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Roger Szabo <roger.szabo@web.de>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
*
* @license AGPL-3.0
*
@@ -163,7 +165,7 @@ interface ILDAPWrapper {
* @return resource|false an LDAP search result resource, false on error
*/
public function search($link, $baseDN, $filter, $attr, $attrsOnly = 0, $limit = 0);
-
+
/**
* Replace the value of a userPassword by $password
* @param resource $link LDAP link resource
diff --git a/apps/user_ldap/lib/IUserLDAP.php b/apps/user_ldap/lib/IUserLDAP.php
index cb7d0138892..dcd9d938b29 100644
--- a/apps/user_ldap/lib/IUserLDAP.php
+++ b/apps/user_ldap/lib/IUserLDAP.php
@@ -1,8 +1,10 @@
<?php
/**
- *
* @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de)
*
+ * @author Roger Szabo <roger.szabo@web.de>
+ * @author root <root@localhost.localdomain>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/user_ldap/lib/Jobs/CleanUp.php b/apps/user_ldap/lib/Jobs/CleanUp.php
index 44e8f5469f1..849c30ecd65 100644
--- a/apps/user_ldap/lib/Jobs/CleanUp.php
+++ b/apps/user_ldap/lib/Jobs/CleanUp.php
@@ -5,6 +5,9 @@
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Roger Szabo <roger.szabo@web.de>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
*
* @license AGPL-3.0
*
@@ -100,7 +103,8 @@ class CleanUp extends TimedJob {
new LDAP(),
$this->ocConfig,
\OC::$server->getNotificationManager(),
- \OC::$server->getUserSession()
+ \OC::$server->getUserSession(),
+ \OC::$server->query('LDAPUserPluginManager')
);
}
diff --git a/apps/user_ldap/lib/Jobs/UpdateGroups.php b/apps/user_ldap/lib/Jobs/UpdateGroups.php
index 4c9a06a5f68..49b79f2d618 100644
--- a/apps/user_ldap/lib/Jobs/UpdateGroups.php
+++ b/apps/user_ldap/lib/Jobs/UpdateGroups.php
@@ -10,7 +10,11 @@
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Roger Szabo <roger.szabo@web.de>
+ * @author root <root@localhost.localdomain>
* @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
*
* @license AGPL-3.0
*
@@ -193,9 +197,9 @@ class UpdateGroups extends \OC\BackgroundJob\TimedJob {
$userMapper = new UserMapping($dbc);
$ldapAccess->setGroupMapper($groupMapper);
$ldapAccess->setUserMapper($userMapper);
- self::$groupBE = new \OCA\User_LDAP\Group_LDAP($ldapAccess);
+ self::$groupBE = new \OCA\User_LDAP\Group_LDAP($ldapAccess, \OC::$server->query('LDAPGroupPluginManager'));
} else {
- self::$groupBE = new \OCA\User_LDAP\Group_Proxy($configPrefixes, $ldapWrapper);
+ self::$groupBE = new \OCA\User_LDAP\Group_Proxy($configPrefixes, $ldapWrapper, \OC::$server->query('LDAPGroupPluginManager'));
}
return self::$groupBE;
diff --git a/apps/user_ldap/lib/LDAPProvider.php b/apps/user_ldap/lib/LDAPProvider.php
index bf8691006c6..94793980b39 100644
--- a/apps/user_ldap/lib/LDAPProvider.php
+++ b/apps/user_ldap/lib/LDAPProvider.php
@@ -1,8 +1,12 @@
<?php
/**
- *
* @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de)
*
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Roger Szabo <roger.szabo@web.de>
+ * @author root <root@localhost.localdomain>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
@@ -33,7 +37,8 @@ use OCA\User_LDAP\User\DeletedUsersIndex;
*/
class LDAPProvider implements ILDAPProvider, IDeletionFlagSupport {
- private $backend;
+ private $userBackend;
+ private $groupBackend;
private $logger;
private $helper;
private $deletedUsersIndex;
@@ -41,20 +46,36 @@ class LDAPProvider implements ILDAPProvider, IDeletionFlagSupport {
/**
* Create new LDAPProvider
* @param \OCP\IServerContainer $serverContainer
+ * @param Helper $helper
+ * @param DeletedUsersIndex $deletedUsersIndex
* @throws \Exception if user_ldap app was not enabled
*/
public function __construct(IServerContainer $serverContainer, Helper $helper, DeletedUsersIndex $deletedUsersIndex) {
$this->logger = $serverContainer->getLogger();
$this->helper = $helper;
$this->deletedUsersIndex = $deletedUsersIndex;
+ $userBackendFound = false;
+ $groupBackendFound = false;
foreach ($serverContainer->getUserManager()->getBackends() as $backend){
- $this->logger->debug('instance '.get_class($backend).' backend.', ['app' => 'user_ldap']);
+ $this->logger->debug('instance '.get_class($backend).' user backend.', ['app' => 'user_ldap']);
if ($backend instanceof IUserLDAP) {
- $this->backend = $backend;
- return;
+ $this->userBackend = $backend;
+ $userBackendFound = true;
+ break;
}
}
- throw new \Exception('To use the LDAPProvider, user_ldap app must be enabled');
+ foreach ($serverContainer->getGroupManager()->getBackends() as $backend){
+ $this->logger->debug('instance '.get_class($backend).' group backend.', ['app' => 'user_ldap']);
+ if ($backend instanceof IGroupLDAP) {
+ $this->groupBackend = $backend;
+ $groupBackendFound = true;
+ break;
+ }
+ }
+
+ if (!$userBackendFound or !$groupBackendFound) {
+ throw new \Exception('To use the LDAPProvider, user_ldap app must be enabled');
+ }
}
/**
@@ -64,16 +85,33 @@ class LDAPProvider implements ILDAPProvider, IDeletionFlagSupport {
* @throws \Exception if translation was unsuccessful
*/
public function getUserDN($uid) {
- if(!$this->backend->userExists($uid)){
+ if(!$this->userBackend->userExists($uid)){
throw new \Exception('User id not found in LDAP');
}
- $result = $this->backend->getLDAPAccess($uid)->username2dn($uid);
+ $result = $this->userBackend->getLDAPAccess($uid)->username2dn($uid);
if(!$result){
throw new \Exception('Translation to LDAP DN unsuccessful');
}
return $result;
}
-
+
+ /**
+ * Translate a group id to LDAP DN.
+ * @param string $gid group id
+ * @return string
+ * @throws \Exception
+ */
+ public function getGroupDN($gid) {
+ if(!$this->groupBackend->groupExists($gid)){
+ throw new \Exception('Group id not found in LDAP');
+ }
+ $result = $this->groupBackend->getLDAPAccess($gid)->groupname2dn($gid);
+ if(!$result){
+ throw new \Exception('Translation to LDAP DN unsuccessful');
+ }
+ return $result;
+ }
+
/**
* Translate a LDAP DN to an internal user name. If there is no mapping between
* the DN and the user name, a new one will be created.
@@ -82,7 +120,7 @@ class LDAPProvider implements ILDAPProvider, IDeletionFlagSupport {
* @throws \Exception if translation was unsuccessful
*/
public function getUserName($dn) {
- $result = $this->backend->dn2UserName($dn);
+ $result = $this->userBackend->dn2UserName($dn);
if(!$result){
throw new \Exception('Translation to internal user name unsuccessful');
}
@@ -115,10 +153,24 @@ class LDAPProvider implements ILDAPProvider, IDeletionFlagSupport {
* @throws \Exception if user id was not found in LDAP
*/
public function getLDAPConnection($uid) {
- if(!$this->backend->userExists($uid)){
+ if(!$this->userBackend->userExists($uid)){
throw new \Exception('User id not found in LDAP');
}
- return $this->backend->getNewLDAPConnection($uid);
+ return $this->userBackend->getNewLDAPConnection($uid);
+ }
+
+ /**
+ * Return a new LDAP connection resource for the specified user.
+ * The connection must be closed manually.
+ * @param string $gid group id
+ * @return resource of the LDAP connection
+ * @throws \Exception if group id was not found in LDAP
+ */
+ public function getGroupLDAPConnection($gid) {
+ if(!$this->groupBackend->groupExists($gid)){
+ throw new \Exception('Group id not found in LDAP');
+ }
+ return $this->groupBackend->getNewLDAPConnection($gid);
}
/**
@@ -128,10 +180,10 @@ class LDAPProvider implements ILDAPProvider, IDeletionFlagSupport {
* @throws \Exception if user id was not found in LDAP
*/
public function getLDAPBaseUsers($uid) {
- if(!$this->backend->userExists($uid)){
+ if(!$this->userBackend->userExists($uid)){
throw new \Exception('User id not found in LDAP');
}
- return $this->backend->getLDAPAccess($uid)->getConnection()->getConfiguration()['ldap_base_users'];
+ return $this->userBackend->getLDAPAccess($uid)->getConnection()->getConfiguration()['ldap_base_users'];
}
/**
@@ -141,10 +193,10 @@ class LDAPProvider implements ILDAPProvider, IDeletionFlagSupport {
* @throws \Exception if user id was not found in LDAP
*/
public function getLDAPBaseGroups($uid) {
- if(!$this->backend->userExists($uid)){
+ if(!$this->userBackend->userExists($uid)){
throw new \Exception('User id not found in LDAP');
}
- return $this->backend->getLDAPAccess($uid)->getConnection()->getConfiguration()['ldap_base_groups'];
+ return $this->userBackend->getLDAPAccess($uid)->getConnection()->getConfiguration()['ldap_base_groups'];
}
/**
@@ -153,10 +205,23 @@ class LDAPProvider implements ILDAPProvider, IDeletionFlagSupport {
* @throws \Exception if user id was not found in LDAP
*/
public function clearCache($uid) {
- if(!$this->backend->userExists($uid)){
+ if(!$this->userBackend->userExists($uid)){
throw new \Exception('User id not found in LDAP');
}
- $this->backend->getLDAPAccess($uid)->getConnection()->clearCache();
+ $this->userBackend->getLDAPAccess($uid)->getConnection()->clearCache();
+ }
+
+ /**
+ * Clear the cache if a cache is used, otherwise do nothing.
+ * Acts on the LDAP connection of a group
+ * @param string $gid group id
+ * @throws \Exception if user id was not found in LDAP
+ */
+ public function clearGroupCache($gid) {
+ if(!$this->groupBackend->groupExists($gid)){
+ throw new \Exception('Group id not found in LDAP');
+ }
+ $this->groupBackend->getLDAPAccess($gid)->getConnection()->clearCache();
}
/**
@@ -165,7 +230,7 @@ class LDAPProvider implements ILDAPProvider, IDeletionFlagSupport {
* @return bool whether the DN exists
*/
public function dnExists($dn) {
- $result = $this->backend->dn2UserName($dn);
+ $result = $this->userBackend->dn2UserName($dn);
return !$result ? false : true;
}
@@ -184,4 +249,44 @@ class LDAPProvider implements ILDAPProvider, IDeletionFlagSupport {
public function unflagRecord($uid) {
//do nothing
}
+
+ /**
+ * Get the LDAP attribute name for the user's display name
+ * @param string $uid user id
+ * @return string the display name field
+ * @throws \Exception if user id was not found in LDAP
+ */
+ public function getLDAPDisplayNameField($uid) {
+ if(!$this->userBackend->userExists($uid)){
+ throw new \Exception('User id not found in LDAP');
+ }
+ return $this->userBackend->getLDAPAccess($uid)->getConnection()->getConfiguration()['ldap_display_name'];
+ }
+
+ /**
+ * Get the LDAP attribute name for the email
+ * @param string $uid user id
+ * @return string the email field
+ * @throws \Exception if user id was not found in LDAP
+ */
+ public function getLDAPEmailField($uid) {
+ if(!$this->userBackend->userExists($uid)){
+ throw new \Exception('User id not found in LDAP');
+ }
+ return $this->userBackend->getLDAPAccess($uid)->getConnection()->getConfiguration()['ldap_email_attr'];
+ }
+
+ /**
+ * Get the LDAP type of association between users and groups
+ * @param string $gid group id
+ * @return string the configuration, one of: 'memberUid', 'uniqueMember', 'member', 'gidNumber'
+ * @throws \Exception if group id was not found in LDAP
+ */
+ public function getLDAPGroupMemberAssoc($gid) {
+ if(!$this->groupBackend->groupExists($gid)){
+ throw new \Exception('Group id not found in LDAP');
+ }
+ return $this->groupBackend->getLDAPAccess($gid)->getConnection()->getConfiguration()['ldap_group_member_assoc_attribute'];
+ }
+
}
diff --git a/apps/user_ldap/lib/LDAPProviderFactory.php b/apps/user_ldap/lib/LDAPProviderFactory.php
index f2915b43163..c57f996cde5 100644
--- a/apps/user_ldap/lib/LDAPProviderFactory.php
+++ b/apps/user_ldap/lib/LDAPProviderFactory.php
@@ -1,8 +1,11 @@
<?php
/**
- *
* @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de)
*
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Roger Szabo <roger.szabo@web.de>
+ * @author root <root@localhost.localdomain>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/user_ldap/lib/Migration/UUIDFixGroup.php b/apps/user_ldap/lib/Migration/UUIDFixGroup.php
index 9ea406efadf..7258029dfd1 100644
--- a/apps/user_ldap/lib/Migration/UUIDFixGroup.php
+++ b/apps/user_ldap/lib/Migration/UUIDFixGroup.php
@@ -3,6 +3,8 @@
* @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Roger Szabo <roger.szabo@web.de>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
*
* @license GNU AGPL version 3 or any later version
*
@@ -33,6 +35,7 @@ class UUIDFixGroup extends UUIDFix {
public function __construct(GroupMapping $mapper, LDAP $ldap, IConfig $config, Helper $helper) {
$this->mapper = $mapper;
$this->proxy = new User_Proxy($helper->getServerConfigurationPrefixes(true), $ldap, $config,
- \OC::$server->getNotificationManager(), \OC::$server->getUserSession());
+ \OC::$server->getNotificationManager(), \OC::$server->getUserSession(),
+ \OC::$server->query('LDAPUserPluginManager'));
}
}
diff --git a/apps/user_ldap/lib/Migration/UUIDFixUser.php b/apps/user_ldap/lib/Migration/UUIDFixUser.php
index ee1457dcccb..28765917ae0 100644
--- a/apps/user_ldap/lib/Migration/UUIDFixUser.php
+++ b/apps/user_ldap/lib/Migration/UUIDFixUser.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
*
* @license GNU AGPL version 3 or any later version
*
@@ -32,6 +33,7 @@ use OCP\IConfig;
class UUIDFixUser extends UUIDFix {
public function __construct(UserMapping $mapper, LDAP $ldap, IConfig $config, Helper $helper) {
$this->mapper = $mapper;
- $this->proxy = new Group_Proxy($helper->getServerConfigurationPrefixes(true), $ldap, $config);
+ $groupPluginManager = \OC::$server->query('LDAPGroupPluginManager');
+ $this->proxy = new Group_Proxy($helper->getServerConfigurationPrefixes(true), $ldap, $groupPluginManager);
}
}
diff --git a/apps/user_ldap/lib/Notification/Notifier.php b/apps/user_ldap/lib/Notification/Notifier.php
index 795d8d4c344..8c9d20c12dc 100644
--- a/apps/user_ldap/lib/Notification/Notifier.php
+++ b/apps/user_ldap/lib/Notification/Notifier.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2017 Roger Szabo <roger.szabo@web.de>
*
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Roger Szabo <roger.szabo@web.de>
*
* @license GNU AGPL version 3 or any later version
diff --git a/apps/user_ldap/lib/Proxy.php b/apps/user_ldap/lib/Proxy.php
index 305d2c4181b..ec075d761c5 100644
--- a/apps/user_ldap/lib/Proxy.php
+++ b/apps/user_ldap/lib/Proxy.php
@@ -10,6 +10,8 @@
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Roger Szabo <roger.szabo@web.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/user_ldap/lib/Settings/Admin.php b/apps/user_ldap/lib/Settings/Admin.php
index 32035128b64..33a86ad72d2 100644
--- a/apps/user_ldap/lib/Settings/Admin.php
+++ b/apps/user_ldap/lib/Settings/Admin.php
@@ -3,6 +3,8 @@
* @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de>
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/user_ldap/lib/Settings/Section.php b/apps/user_ldap/lib/Settings/Section.php
index 86d293d3879..0ff52160a97 100644
--- a/apps/user_ldap/lib/Settings/Section.php
+++ b/apps/user_ldap/lib/Settings/Section.php
@@ -3,6 +3,8 @@
* @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de>
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/user_ldap/lib/User/Manager.php b/apps/user_ldap/lib/User/Manager.php
index 743456d68e2..f04106b7fbf 100644
--- a/apps/user_ldap/lib/User/Manager.php
+++ b/apps/user_ldap/lib/User/Manager.php
@@ -6,6 +6,7 @@
* @author Joas Schilling <coding@schilljs.com>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roger Szabo <roger.szabo@web.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/user_ldap/lib/User/User.php b/apps/user_ldap/lib/User/User.php
index a46b0053b40..ed3ecedf227 100644
--- a/apps/user_ldap/lib/User/User.php
+++ b/apps/user_ldap/lib/User/User.php
@@ -4,10 +4,13 @@
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Juan Pablo Villafáñez <jvillafanez@solidgear.es>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
+ * @author Morris Jobke <hey@morrisjobke.de>
* @author Roger Szabo <roger.szabo@web.de>
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Victor Dubiniuk <dubiniuk@owncloud.com>
+ * @author Vincent Petry <pvince81@owncloud.com>
*
* @license AGPL-3.0
*
diff --git a/apps/user_ldap/lib/UserPluginManager.php b/apps/user_ldap/lib/UserPluginManager.php
new file mode 100644
index 00000000000..b3fda494022
--- /dev/null
+++ b/apps/user_ldap/lib/UserPluginManager.php
@@ -0,0 +1,210 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 EITA Cooperative (eita.org.br)
+ *
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\User_LDAP;
+
+use OC\User\Backend;
+
+class UserPluginManager {
+
+ public $test = false;
+
+ private $respondToActions = 0;
+
+ private $which = array(
+ Backend::CREATE_USER => null,
+ Backend::SET_PASSWORD => null,
+ Backend::GET_HOME => null,
+ Backend::GET_DISPLAYNAME => null,
+ Backend::SET_DISPLAYNAME => null,
+ Backend::PROVIDE_AVATAR => null,
+ Backend::COUNT_USERS => null,
+ 'deleteUser' => null
+ );
+
+ /**
+ * @return int All implemented actions, except for 'deleteUser'
+ */
+ public function getImplementedActions() {
+ return $this->respondToActions;
+ }
+
+ /**
+ * Registers a group plugin that may implement some actions, overriding User_LDAP's user actions.
+ *
+ * @param ILDAPUserPlugin $plugin
+ */
+ public function register(ILDAPUserPlugin $plugin) {
+ $respondToActions = $plugin->respondToActions();
+ $this->respondToActions |= $respondToActions;
+
+ foreach($this->which as $action => $v) {
+ if (is_int($action) && (bool)($respondToActions & $action)) {
+ $this->which[$action] = $plugin;
+ \OC::$server->getLogger()->debug("Registered action ".$action." to plugin ".get_class($plugin), ['app' => 'user_ldap']);
+ }
+ }
+ if (method_exists($plugin,'deleteUser')) {
+ $this->which['deleteUser'] = $plugin;
+ \OC::$server->getLogger()->debug("Registered action deleteUser to plugin ".get_class($plugin), ['app' => 'user_ldap']);
+ }
+ }
+
+ /**
+ * Signal if there is a registered plugin that implements some given actions
+ * @param int $actions Actions defined in \OC\User\Backend, like Backend::CREATE_USER
+ * @return bool
+ */
+ public function implementsActions($actions) {
+ return ($actions & $this->respondToActions) == $actions;
+ }
+
+ /**
+ * Create a new user in LDAP Backend
+ *
+ * @param string $username The username of the user to create
+ * @param string $password The password of the new user
+ * @return bool
+ * @throws \Exception
+ */
+ public function createUser($username, $password) {
+ $plugin = $this->which[Backend::CREATE_USER];
+
+ if ($plugin) {
+ return $plugin->createUser($username,$password);
+ }
+ throw new \Exception('No plugin implements createUser in this LDAP Backend.');
+ }
+
+ /**
+ * Change the password of a user*
+ * @param string $uid The username
+ * @param string $password The new password
+ * @return bool
+ * @throws \Exception
+ */
+ public function setPassword($uid, $password) {
+ $plugin = $this->which[Backend::SET_PASSWORD];
+
+ if ($plugin) {
+ return $plugin->setPassword($uid,$password);
+ }
+ throw new \Exception('No plugin implements setPassword in this LDAP Backend.');
+ }
+
+ /**
+ * checks whether the user is allowed to change his avatar in Nextcloud
+ * @param string $uid the Nextcloud user name
+ * @return boolean either the user can or cannot
+ * @throws \Exception
+ */
+ public function canChangeAvatar($uid) {
+ $plugin = $this->which[Backend::PROVIDE_AVATAR];
+
+ if ($plugin) {
+ return $plugin->canChangeAvatar($uid);
+ }
+ throw new \Exception('No plugin implements canChangeAvatar in this LDAP Backend.');
+ }
+
+ /**
+ * Get the user's home directory
+ * @param string $uid the username
+ * @return boolean
+ * @throws \Exception
+ */
+ public function getHome($uid) {
+ $plugin = $this->which[Backend::GET_HOME];
+
+ if ($plugin) {
+ return $plugin->getHome($uid);
+ }
+ throw new \Exception('No plugin implements getHome in this LDAP Backend.');
+ }
+
+ /**
+ * Get display name of the user
+ * @param string $uid user ID of the user
+ * @return string display name
+ * @throws \Exception
+ */
+ public function getDisplayName($uid) {
+ $plugin = $this->which[Backend::GET_DISPLAYNAME];
+
+ if ($plugin) {
+ return $plugin->getDisplayName($uid);
+ }
+ throw new \Exception('No plugin implements getDisplayName in this LDAP Backend.');
+ }
+
+ /**
+ * Set display name of the user
+ * @param string $uid user ID of the user
+ * @param string $displayName new user's display name
+ * @return string display name
+ * @throws \Exception
+ */
+ public function setDisplayName($uid, $displayName) {
+ $plugin = $this->which[Backend::SET_DISPLAYNAME];
+
+ if ($plugin) {
+ return $plugin->setDisplayName($uid, $displayName);
+ }
+ throw new \Exception('No plugin implements setDisplayName in this LDAP Backend.');
+ }
+
+ /**
+ * Count the number of users
+ * @return int|bool
+ * @throws \Exception
+ */
+ public function countUsers() {
+ $plugin = $this->which[Backend::COUNT_USERS];
+
+ if ($plugin) {
+ return $plugin->countUsers();
+ }
+ throw new \Exception('No plugin implements countUsers in this LDAP Backend.');
+ }
+
+ /**
+ * @return bool
+ */
+ public function canDeleteUser() {
+ return $this->which['deleteUser'] !== null;
+ }
+
+ /**
+ * @param $uid
+ * @return bool
+ * @throws \Exception
+ */
+ public function deleteUser($uid) {
+ $plugin = $this->which['deleteUser'];
+ if ($plugin) {
+ return $plugin->deleteUser($uid);
+ }
+ throw new \Exception('No plugin implements deleteUser in this LDAP Backend.');
+ }
+}
+
diff --git a/apps/user_ldap/lib/User_LDAP.php b/apps/user_ldap/lib/User_LDAP.php
index 0a9a1cfe4c2..ca157f69538 100644
--- a/apps/user_ldap/lib/User_LDAP.php
+++ b/apps/user_ldap/lib/User_LDAP.php
@@ -13,9 +13,12 @@
* @author Renaud Fortier <Renaud.Fortier@fsaa.ulaval.ca>
* @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Roger Szabo <roger.szabo@web.de>
+ * @author root <root@localhost.localdomain>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Tom Needham <tom@owncloud.com>
- * @author Roger Szabo <roger.szabo@web.de>
+ * @author Victor Dubiniuk <dubiniuk@owncloud.com>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
*
* @license AGPL-3.0
*
@@ -56,16 +59,20 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
/** @var string */
protected $currentUserInDeletionProcess;
+ /** @var UserPluginManager */
+ protected $userPluginManager;
+
/**
* @param Access $access
* @param \OCP\IConfig $ocConfig
* @param \OCP\Notification\IManager $notificationManager
* @param IUserSession $userSession
*/
- public function __construct(Access $access, IConfig $ocConfig, INotificationManager $notificationManager, IUserSession $userSession) {
+ public function __construct(Access $access, IConfig $ocConfig, INotificationManager $notificationManager, IUserSession $userSession, UserPluginManager $userPluginManager) {
parent::__construct($access);
$this->ocConfig = $ocConfig;
$this->notificationManager = $notificationManager;
+ $this->userPluginManager = $userPluginManager;
$this->registerHooks($userSession);
}
@@ -88,6 +95,10 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
* @return boolean either the user can or cannot
*/
public function canChangeAvatar($uid) {
+ if ($this->userPluginManager->implementsActions(Backend::PROVIDE_AVATAR)) {
+ return $this->userPluginManager->canChangeAvatar($uid);
+ }
+
$user = $this->access->userManager->get($uid);
if(!$user instanceof User) {
return false;
@@ -207,6 +218,10 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
* @return bool
*/
public function setPassword($uid, $password) {
+ if ($this->userPluginManager->implementsActions(Backend::SET_PASSWORD)) {
+ return $this->userPluginManager->setPassword($uid, $password);
+ }
+
$user = $this->access->userManager->get($uid);
if(!$user instanceof User) {
@@ -364,6 +379,10 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
* @return bool
*/
public function deleteUser($uid) {
+ if ($this->userPluginManager->canDeleteUser()) {
+ return $this->userPluginManager->deleteUser($uid);
+ }
+
$marked = $this->ocConfig->getUserValue($uid, 'user_ldap', 'isDeleted', 0);
if(intval($marked) === 0) {
\OC::$server->getLogger()->notice(
@@ -393,6 +412,10 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
return false;
}
+ if ($this->userPluginManager->implementsActions(Backend::GET_HOME)) {
+ return $this->userPluginManager->getHome($uid);
+ }
+
$cacheKey = 'getHome'.$uid;
$path = $this->access->connection->getFromCache($cacheKey);
if(!is_null($path)) {
@@ -425,6 +448,10 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
* @return string|false display name
*/
public function getDisplayName($uid) {
+ if ($this->userPluginManager->implementsActions(Backend::GET_DISPLAYNAME)) {
+ return $this->userPluginManager->getDisplayName($uid);
+ }
+
if(!$this->userExists($uid)) {
return false;
}
@@ -470,6 +497,19 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
}
/**
+ * set display name of the user
+ * @param string $uid user ID of the user
+ * @param string $displayName new display name of the user
+ * @return string|false display name
+ */
+ public function setDisplayName($uid, $displayName) {
+ if ($this->userPluginManager->implementsActions(Backend::SET_DISPLAYNAME)) {
+ return $this->userPluginManager->setDisplayName($uid, $displayName);
+ }
+ return false;
+ }
+
+ /**
* Get a list of all display names
*
* @param string $search
@@ -506,7 +546,8 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
| Backend::GET_DISPLAYNAME
| Backend::PROVIDE_AVATAR
| Backend::COUNT_USERS
- | ((intval($this->access->connection->turnOnPasswordChange) === 1)?(Backend::SET_PASSWORD):0))
+ | ((intval($this->access->connection->turnOnPasswordChange) === 1)?(Backend::SET_PASSWORD):0)
+ | $this->userPluginManager->getImplementedActions())
& $actions);
}
@@ -523,6 +564,10 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
* @return int|bool
*/
public function countUsers() {
+ if ($this->userPluginManager->implementsActions(Backend::COUNT_USERS)) {
+ return $this->userPluginManager->countUsers();
+ }
+
$filter = $this->access->getFilterForUserCount();
$cacheKey = 'countUsers-'.$filter;
if(!is_null($entries = $this->access->connection->getFromCache($cacheKey))) {
@@ -561,4 +606,18 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
$connection = clone $this->access->getConnection();
return $connection->getConnectionResource();
}
+
+ /**
+ * create new user
+ * @param string $username username of the new user
+ * @param string $password password of the new user
+ * @return bool was the user created?
+ */
+ public function createUser($username, $password) {
+ if ($this->userPluginManager->implementsActions(Backend::CREATE_USER)) {
+ return $this->userPluginManager->createUser($username, $password);
+ }
+ return false;
+ }
+
}
diff --git a/apps/user_ldap/lib/User_Proxy.php b/apps/user_ldap/lib/User_Proxy.php
index a25eb1bc621..ccc82760b02 100644
--- a/apps/user_ldap/lib/User_Proxy.php
+++ b/apps/user_ldap/lib/User_Proxy.php
@@ -8,8 +8,10 @@
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin McCorkell <robin@mccorkell.me.uk>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Roger Szabo <roger.szabo@web.de>
+ * @author root <root@localhost.localdomain>
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
*
* @license AGPL-3.0
*
@@ -48,11 +50,13 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface,
* @param IUserSession $userSession
*/
public function __construct(array $serverConfigPrefixes, ILDAPWrapper $ldap, IConfig $ocConfig,
- INotificationManager $notificationManager, IUserSession $userSession) {
+ INotificationManager $notificationManager, IUserSession $userSession,
+ UserPluginManager $userPluginManager) {
parent::__construct($ldap);
foreach($serverConfigPrefixes as $configPrefix) {
$this->backends[$configPrefix] =
- new User_LDAP($this->getAccess($configPrefix), $ocConfig, $notificationManager, $userSession);
+ new User_LDAP($this->getAccess($configPrefix), $ocConfig, $notificationManager, $userSession, $userPluginManager);
+
if(is_null($this->refBackend)) {
$this->refBackend = &$this->backends[$configPrefix];
}
@@ -233,12 +237,23 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface,
}
/**
+ * set display name of the user
+ *
+ * @param string $uid user ID of the user
+ * @param string $displayName new display name
+ * @return string display name
+ */
+ public function setDisplayName($uid, $displayName) {
+ return $this->handleRequest($uid, 'setDisplayName', array($uid, $displayName));
+ }
+
+ /**
* checks whether the user is allowed to change his avatar in Nextcloud
* @param string $uid the Nextcloud user name
* @return boolean either the user can or cannot
*/
public function canChangeAvatar($uid) {
- return $this->handleRequest($uid, 'canChangeAvatar', array($uid), true);
+ return $this->handleRequest($uid, 'canChangeAvatar', array($uid));
}
/**
@@ -322,4 +337,14 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface,
public function getNewLDAPConnection($uid) {
return $this->handleRequest($uid, 'getNewLDAPConnection', array($uid));
}
+
+ /**
+ * Creates a new user in LDAP
+ * @param $username
+ * @param $password
+ * @return bool
+ */
+ public function createUser($username, $password) {
+ return $this->handleRequest($username, 'createUser', array($username,$password));
+ }
}
diff --git a/apps/user_ldap/lib/Wizard.php b/apps/user_ldap/lib/Wizard.php
index 7376507d134..bf7c6bbeb93 100644
--- a/apps/user_ldap/lib/Wizard.php
+++ b/apps/user_ldap/lib/Wizard.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Alexander Bergolth <leo@strike.wu.ac.at>
+ * @author Allan Nordhøy <epost@anotheragency.no>
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Bart Visscher <bartv@thisnet.nl>
* @author Jean-Louis Dupond <jean-louis@dupond.be>
@@ -13,7 +14,9 @@
* @author Nicolas Grekas <nicolas.grekas@gmail.com>
* @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Stefan Weil <sw@weilnetz.de>
+ * @author Tobias Brunner <tobias@tobru.ch>
* @author Victor Dubiniuk <dubiniuk@owncloud.com>
* @author Xuanwo <xuanwo@yunify.com>
*
diff --git a/apps/user_ldap/tests/AccessTest.php b/apps/user_ldap/tests/AccessTest.php
index 85f0516dec2..22829f38c06 100644
--- a/apps/user_ldap/tests/AccessTest.php
+++ b/apps/user_ldap/tests/AccessTest.php
@@ -6,9 +6,14 @@
* @author Andreas Fischer <bantu@owncloud.com>
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Jörn Friedrich Dreyer <jfd@butonic.de>
+ * @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Roger Szabo <roger.szabo@web.de>
+ * @author root <root@localhost.localdomain>
* @author Thomas Müller <thomas.mueller@tmit.eu>
- * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Victor Dubiniuk <dubiniuk@owncloud.com>
*
* @license AGPL-3.0
*
diff --git a/apps/user_ldap/tests/ConnectionTest.php b/apps/user_ldap/tests/ConnectionTest.php
index 87ebc8d9ad3..c0f91d25d39 100644
--- a/apps/user_ldap/tests/ConnectionTest.php
+++ b/apps/user_ldap/tests/ConnectionTest.php
@@ -3,9 +3,12 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Jarkko Lehtoranta <devel@jlranta.com>
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Victor Dubiniuk <dubiniuk@owncloud.com>
*
* @license AGPL-3.0
*
diff --git a/apps/user_ldap/tests/GroupLDAPPluginTest.php b/apps/user_ldap/tests/GroupLDAPPluginTest.php
new file mode 100644
index 00000000000..9b13e37bc97
--- /dev/null
+++ b/apps/user_ldap/tests/GroupLDAPPluginTest.php
@@ -0,0 +1,248 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 EITA Cooperative (eita.org.br)
+ *
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\User_LDAP\Tests;
+
+
+use OCP\GroupInterface;
+use OCA\User_LDAP\GroupPluginManager;
+
+class GroupLDAPPluginTest extends \Test\TestCase {
+
+ /**
+ * @return GroupPluginManager
+ */
+ private function getGroupPluginManager() {
+ return new GroupPluginManager();
+ }
+
+ public function testImplementsActions() {
+ $pluginManager = $this->getGroupPluginManager();
+
+ $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPGroupPluginDummy')
+ ->setMethods(['respondToActions'])
+ ->getMock();
+
+ $plugin->expects($this->any())
+ ->method('respondToActions')
+ ->willReturn(GroupInterface::CREATE_GROUP);
+
+ $plugin2 = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPGroupPluginDummy')
+ ->setMethods(['respondToActions'])
+ ->getMock();
+
+ $plugin2->expects($this->any())
+ ->method('respondToActions')
+ ->willReturn(GroupInterface::ADD_TO_GROUP);
+
+ $pluginManager->register($plugin);
+ $pluginManager->register($plugin2);
+
+ $this->assertEquals($pluginManager->getImplementedActions(), GroupInterface::CREATE_GROUP | GroupInterface::ADD_TO_GROUP);
+ $this->assertTrue($pluginManager->implementsActions(GroupInterface::CREATE_GROUP));
+ $this->assertTrue($pluginManager->implementsActions(GroupInterface::ADD_TO_GROUP));
+ }
+
+ public function testCreateGroup() {
+ $pluginManager = $this->getGroupPluginManager();
+
+ $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPGroupPluginDummy')
+ ->setMethods(['respondToActions', 'createGroup'])
+ ->getMock();
+
+ $plugin->expects($this->any())
+ ->method('respondToActions')
+ ->willReturn(GroupInterface::CREATE_GROUP);
+
+ $plugin->expects($this->once())
+ ->method('createGroup')
+ ->with(
+ $this->equalTo('group')
+ );
+
+ $pluginManager->register($plugin);
+ $pluginManager->createGroup('group');
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage No plugin implements createGroup in this LDAP Backend.
+ */
+ public function testCreateGroupNotRegistered() {
+ $pluginManager = $this->getGroupPluginManager();
+ $pluginManager->createGroup('foo');
+ }
+
+ public function testDeleteGroup() {
+ $pluginManager = $this->getGroupPluginManager();
+
+ $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPGroupPluginDummy')
+ ->setMethods(['respondToActions', 'deleteGroup'])
+ ->getMock();
+
+ $plugin->expects($this->any())
+ ->method('respondToActions')
+ ->willReturn(GroupInterface::DELETE_GROUP);
+
+ $plugin->expects($this->once())
+ ->method('deleteGroup')
+ ->with(
+ $this->equalTo('group')
+ );
+
+ $pluginManager->register($plugin);
+ $pluginManager->deleteGroup('group');
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage No plugin implements deleteGroup in this LDAP Backend.
+ */
+ public function testDeleteGroupNotRegistered() {
+ $pluginManager = $this->getGroupPluginManager();
+ $pluginManager->deleteGroup('foo');
+ }
+
+ public function testAddToGroup() {
+ $pluginManager = $this->getGroupPluginManager();
+
+ $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPGroupPluginDummy')
+ ->setMethods(['respondToActions', 'addToGroup'])
+ ->getMock();
+
+ $plugin->expects($this->any())
+ ->method('respondToActions')
+ ->willReturn(GroupInterface::ADD_TO_GROUP);
+
+ $plugin->expects($this->once())
+ ->method('addToGroup')
+ ->with(
+ $this->equalTo('uid'),
+ $this->equalTo('gid')
+ );
+
+ $pluginManager->register($plugin);
+ $pluginManager->addToGroup('uid', 'gid');
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage No plugin implements addToGroup in this LDAP Backend.
+ */
+ public function testAddToGroupNotRegistered() {
+ $pluginManager = $this->getGroupPluginManager();
+ $pluginManager->addToGroup('foo', 'bar');
+ }
+
+ public function testRemoveFromGroup() {
+ $pluginManager = $this->getGroupPluginManager();
+
+ $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPGroupPluginDummy')
+ ->setMethods(['respondToActions', 'removeFromGroup'])
+ ->getMock();
+
+ $plugin->expects($this->any())
+ ->method('respondToActions')
+ ->willReturn(GroupInterface::REMOVE_FROM_GROUP);
+
+ $plugin->expects($this->once())
+ ->method('removeFromGroup')
+ ->with(
+ $this->equalTo('uid'),
+ $this->equalTo('gid')
+ );
+
+ $pluginManager->register($plugin);
+ $pluginManager->removeFromGroup('uid', 'gid');
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage No plugin implements removeFromGroup in this LDAP Backend.
+ */
+ public function testRemoveFromGroupNotRegistered() {
+ $pluginManager = $this->getGroupPluginManager();
+ $pluginManager->removeFromGroup('foo', 'bar');
+ }
+
+ public function testCountUsersInGroup() {
+ $pluginManager = $this->getGroupPluginManager();
+
+ $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPGroupPluginDummy')
+ ->setMethods(['respondToActions', 'countUsersInGroup'])
+ ->getMock();
+
+ $plugin->expects($this->any())
+ ->method('respondToActions')
+ ->willReturn(GroupInterface::COUNT_USERS);
+
+ $plugin->expects($this->once())
+ ->method('countUsersInGroup')
+ ->with(
+ $this->equalTo('gid'),
+ $this->equalTo('search')
+ );
+
+ $pluginManager->register($plugin);
+ $pluginManager->countUsersInGroup('gid', 'search');
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage No plugin implements countUsersInGroup in this LDAP Backend.
+ */
+ public function testCountUsersInGroupNotRegistered() {
+ $pluginManager = $this->getGroupPluginManager();
+ $pluginManager->countUsersInGroup('foo', 'bar');
+ }
+
+ public function testgetGroupDetails() {
+ $pluginManager = $this->getGroupPluginManager();
+
+ $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPGroupPluginDummy')
+ ->setMethods(['respondToActions', 'getGroupDetails'])
+ ->getMock();
+
+ $plugin->expects($this->any())
+ ->method('respondToActions')
+ ->willReturn(GroupInterface::GROUP_DETAILS);
+
+ $plugin->expects($this->once())
+ ->method('getGroupDetails')
+ ->with(
+ $this->equalTo('gid')
+ );
+
+ $pluginManager->register($plugin);
+ $pluginManager->getGroupDetails('gid');
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage No plugin implements getGroupDetails in this LDAP Backend.
+ */
+ public function testgetGroupDetailsNotRegistered() {
+ $pluginManager = $this->getGroupPluginManager();
+ $pluginManager->getGroupDetails('foo');
+ }
+}
diff --git a/apps/user_ldap/tests/Group_LDAPTest.php b/apps/user_ldap/tests/Group_LDAPTest.php
index 9b5216742fe..8eabf2d295a 100644
--- a/apps/user_ldap/tests/Group_LDAPTest.php
+++ b/apps/user_ldap/tests/Group_LDAPTest.php
@@ -7,8 +7,11 @@
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Victor Dubiniuk <dubiniuk@owncloud.com>
* @author Vincent Petry <pvince81@owncloud.com>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
* @author Xuanwo <xuanwo@yunify.com>
*
* @license AGPL-3.0
@@ -29,6 +32,7 @@
namespace OCA\User_LDAP\Tests;
+use OCP\GroupInterface;
use OCA\User_LDAP\Group_LDAP as GroupLDAP;
use OCA\User_LDAP\ILDAPWrapper;
@@ -69,6 +73,10 @@ class Group_LDAPTest extends \Test\TestCase {
return $access;
}
+ private function getPluginManagerMock() {
+ return $this->getMockBuilder('\OCA\User_LDAP\GroupPluginManager')->getMock();
+ }
+
private function enableGroups($access) {
$access->connection->expects($this->any())
->method('__get')
@@ -82,6 +90,7 @@ class Group_LDAPTest extends \Test\TestCase {
public function testCountEmptySearchString() {
$access = $this->getAccessMock();
+ $pluginManager = $this->getPluginManagerMock();
$this->enableGroups($access);
@@ -98,7 +107,7 @@ class Group_LDAPTest extends \Test\TestCase {
->method('countUsers')
->will($this->returnValue(2));
- $groupBackend = new GroupLDAP($access);
+ $groupBackend = new GroupLDAP($access, $pluginManager);
$users = $groupBackend->countUsersInGroup('group');
$this->assertSame(6, $users);
@@ -106,6 +115,7 @@ class Group_LDAPTest extends \Test\TestCase {
public function testCountWithSearchString() {
$access = $this->getAccessMock();
+ $pluginManager = $this->getPluginManagerMock();
$this->enableGroups($access);
@@ -137,14 +147,39 @@ class Group_LDAPTest extends \Test\TestCase {
return 'foobar' . \OCP\Util::generateRandomBytes(7);
}));
- $groupBackend = new GroupLDAP($access);
+ $groupBackend = new GroupLDAP($access,$pluginManager);
$users = $groupBackend->countUsersInGroup('group', '3');
$this->assertSame(2, $users);
}
+ public function testCountUsersWithPlugin() {
+ $pluginManager = $this->getMockBuilder('\OCA\User_LDAP\GroupPluginManager')
+ ->setMethods(['implementsActions','countUsersInGroup'])
+ ->getMock();
+
+ $pluginManager->expects($this->once())
+ ->method('implementsActions')
+ ->with(GroupInterface::COUNT_USERS)
+ ->willReturn(true);
+
+ $pluginManager->expects($this->once())
+ ->method('countUsersInGroup')
+ ->with('gid', 'search')
+ ->willReturn(42);
+
+ $ldap = new GroupLDAP(
+ $this->getAccessMock(),
+ $pluginManager
+ );
+
+ $this->assertEquals($ldap->countUsersInGroup('gid', 'search'),42);
+ }
+
public function testGidNumber2NameSuccess() {
$access = $this->getAccessMock();
+ $pluginManager = $this->getPluginManagerMock();
+
$this->enableGroups($access);
$userDN = 'cn=alice,cn=foo,dc=barfoo,dc=bar';
@@ -158,7 +193,7 @@ class Group_LDAPTest extends \Test\TestCase {
->with('cn=foo,dc=barfoo,dc=bar')
->will($this->returnValue('MyGroup'));
- $groupBackend = new GroupLDAP($access);
+ $groupBackend = new GroupLDAP($access, $pluginManager);
$group = $groupBackend->gidNumber2Name('3117', $userDN);
@@ -167,6 +202,8 @@ class Group_LDAPTest extends \Test\TestCase {
public function testGidNumberID2NameNoGroup() {
$access = $this->getAccessMock();
+ $pluginManager = $this->getPluginManagerMock();
+
$this->enableGroups($access);
$userDN = 'cn=alice,cn=foo,dc=barfoo,dc=bar';
@@ -178,7 +215,7 @@ class Group_LDAPTest extends \Test\TestCase {
$access->expects($this->never())
->method('dn2groupname');
- $groupBackend = new GroupLDAP($access);
+ $groupBackend = new GroupLDAP($access, $pluginManager);
$group = $groupBackend->gidNumber2Name('3117', $userDN);
@@ -187,6 +224,8 @@ class Group_LDAPTest extends \Test\TestCase {
public function testGidNumberID2NameNoName() {
$access = $this->getAccessMock();
+ $pluginManager = $this->getPluginManagerMock();
+
$this->enableGroups($access);
$userDN = 'cn=alice,cn=foo,dc=barfoo,dc=bar';
@@ -199,7 +238,7 @@ class Group_LDAPTest extends \Test\TestCase {
->method('dn2groupname')
->will($this->returnValue(false));
- $groupBackend = new GroupLDAP($access);
+ $groupBackend = new GroupLDAP($access, $pluginManager);
$group = $groupBackend->gidNumber2Name('3117', $userDN);
@@ -208,6 +247,8 @@ class Group_LDAPTest extends \Test\TestCase {
public function testGetEntryGidNumberValue() {
$access = $this->getAccessMock();
+ $pluginManager = $this->getPluginManagerMock();
+
$this->enableGroups($access);
$dn = 'cn=foobar,cn=foo,dc=barfoo,dc=bar';
@@ -218,7 +259,7 @@ class Group_LDAPTest extends \Test\TestCase {
->with($dn, $attr)
->will($this->returnValue(array('3117')));
- $groupBackend = new GroupLDAP($access);
+ $groupBackend = new GroupLDAP($access, $pluginManager);
$gid = $groupBackend->getGroupGidNumber($dn);
@@ -227,6 +268,8 @@ class Group_LDAPTest extends \Test\TestCase {
public function testGetEntryGidNumberNoValue() {
$access = $this->getAccessMock();
+ $pluginManager = $this->getPluginManagerMock();
+
$this->enableGroups($access);
$dn = 'cn=foobar,cn=foo,dc=barfoo,dc=bar';
@@ -237,7 +280,7 @@ class Group_LDAPTest extends \Test\TestCase {
->with($dn, $attr)
->will($this->returnValue(false));
- $groupBackend = new GroupLDAP($access);
+ $groupBackend = new GroupLDAP($access, $pluginManager);
$gid = $groupBackend->getGroupGidNumber($dn);
@@ -246,6 +289,8 @@ class Group_LDAPTest extends \Test\TestCase {
public function testPrimaryGroupID2NameSuccess() {
$access = $this->getAccessMock();
+ $pluginManager = $this->getPluginManagerMock();
+
$this->enableGroups($access);
$userDN = 'cn=alice,cn=foo,dc=barfoo,dc=bar';
@@ -264,7 +309,7 @@ class Group_LDAPTest extends \Test\TestCase {
->with('cn=foo,dc=barfoo,dc=bar')
->will($this->returnValue('MyGroup'));
- $groupBackend = new GroupLDAP($access);
+ $groupBackend = new GroupLDAP($access, $pluginManager);
$group = $groupBackend->primaryGroupID2Name('3117', $userDN);
@@ -273,6 +318,8 @@ class Group_LDAPTest extends \Test\TestCase {
public function testPrimaryGroupID2NameNoSID() {
$access = $this->getAccessMock();
+ $pluginManager = $this->getPluginManagerMock();
+
$this->enableGroups($access);
$userDN = 'cn=alice,cn=foo,dc=barfoo,dc=bar';
@@ -288,7 +335,7 @@ class Group_LDAPTest extends \Test\TestCase {
$access->expects($this->never())
->method('dn2groupname');
- $groupBackend = new GroupLDAP($access);
+ $groupBackend = new GroupLDAP($access, $pluginManager);
$group = $groupBackend->primaryGroupID2Name('3117', $userDN);
@@ -297,6 +344,8 @@ class Group_LDAPTest extends \Test\TestCase {
public function testPrimaryGroupID2NameNoGroup() {
$access = $this->getAccessMock();
+ $pluginManager = $this->getPluginManagerMock();
+
$this->enableGroups($access);
$userDN = 'cn=alice,cn=foo,dc=barfoo,dc=bar';
@@ -313,7 +362,7 @@ class Group_LDAPTest extends \Test\TestCase {
$access->expects($this->never())
->method('dn2groupname');
- $groupBackend = new GroupLDAP($access);
+ $groupBackend = new GroupLDAP($access, $pluginManager);
$group = $groupBackend->primaryGroupID2Name('3117', $userDN);
@@ -322,6 +371,8 @@ class Group_LDAPTest extends \Test\TestCase {
public function testPrimaryGroupID2NameNoName() {
$access = $this->getAccessMock();
+ $pluginManager = $this->getPluginManagerMock();
+
$this->enableGroups($access);
$userDN = 'cn=alice,cn=foo,dc=barfoo,dc=bar';
@@ -339,7 +390,7 @@ class Group_LDAPTest extends \Test\TestCase {
->method('dn2groupname')
->will($this->returnValue(false));
- $groupBackend = new GroupLDAP($access);
+ $groupBackend = new GroupLDAP($access, $pluginManager);
$group = $groupBackend->primaryGroupID2Name('3117', $userDN);
@@ -350,6 +401,8 @@ class Group_LDAPTest extends \Test\TestCase {
//tests getEntryGroupID via getGroupPrimaryGroupID
//which is basically identical to getUserPrimaryGroupIDs
$access = $this->getAccessMock();
+ $pluginManager = $this->getPluginManagerMock();
+
$this->enableGroups($access);
$dn = 'cn=foobar,cn=foo,dc=barfoo,dc=bar';
@@ -360,7 +413,7 @@ class Group_LDAPTest extends \Test\TestCase {
->with($dn, $attr)
->will($this->returnValue(array('3117')));
- $groupBackend = new GroupLDAP($access);
+ $groupBackend = new GroupLDAP($access, $pluginManager);
$gid = $groupBackend->getGroupPrimaryGroupID($dn);
@@ -371,6 +424,8 @@ class Group_LDAPTest extends \Test\TestCase {
//tests getEntryGroupID via getGroupPrimaryGroupID
//which is basically identical to getUserPrimaryGroupIDs
$access = $this->getAccessMock();
+ $pluginManager = $this->getPluginManagerMock();
+
$this->enableGroups($access);
$dn = 'cn=foobar,cn=foo,dc=barfoo,dc=bar';
@@ -381,7 +436,7 @@ class Group_LDAPTest extends \Test\TestCase {
->with($dn, $attr)
->will($this->returnValue(false));
- $groupBackend = new GroupLDAP($access);
+ $groupBackend = new GroupLDAP($access, $pluginManager);
$gid = $groupBackend->getGroupPrimaryGroupID($dn);
@@ -394,6 +449,8 @@ class Group_LDAPTest extends \Test\TestCase {
*/
public function testInGroupHitsUidGidCache() {
$access = $this->getAccessMock();
+ $pluginManager = $this->getPluginManagerMock();
+
$this->enableGroups($access);
$uid = 'someUser';
@@ -408,19 +465,21 @@ class Group_LDAPTest extends \Test\TestCase {
$access->expects($this->never())
->method('username2dn');
- $groupBackend = new GroupLDAP($access);
+ $groupBackend = new GroupLDAP($access, $pluginManager);
$groupBackend->inGroup($uid, $gid);
}
public function testGetGroupsWithOffset() {
$access = $this->getAccessMock();
+ $pluginManager = $this->getPluginManagerMock();
+
$this->enableGroups($access);
$access->expects($this->once())
->method('nextcloudGroupNames')
->will($this->returnValue(array('group1', 'group2')));
- $groupBackend = new GroupLDAP($access);
+ $groupBackend = new GroupLDAP($access, $pluginManager);
$groups = $groupBackend->getGroups('', 2, 2);
$this->assertSame(2, count($groups));
@@ -432,6 +491,8 @@ class Group_LDAPTest extends \Test\TestCase {
*/
public function testUsersInGroupPrimaryMembersOnly() {
$access = $this->getAccessMock();
+ $pluginManager = $this->getPluginManagerMock();
+
$this->enableGroups($access);
$access->connection->expects($this->any())
@@ -457,7 +518,7 @@ class Group_LDAPTest extends \Test\TestCase {
->method('nextcloudUserNames')
->willReturnOnConsecutiveCalls(['lisa', 'bart', 'kira', 'brad'], ['walle', 'dino', 'xenia']);
- $groupBackend = new GroupLDAP($access);
+ $groupBackend = new GroupLDAP($access, $pluginManager);
$users = $groupBackend->usersInGroup('foobar');
$this->assertSame(7, count($users));
@@ -469,6 +530,8 @@ class Group_LDAPTest extends \Test\TestCase {
*/
public function testUsersInGroupPrimaryAndUnixMembers() {
$access = $this->getAccessMock();
+ $pluginManager = $this->getPluginManagerMock();
+
$this->enableGroups($access);
$access->connection->expects($this->any())
@@ -492,7 +555,7 @@ class Group_LDAPTest extends \Test\TestCase {
->method('nextcloudUserNames')
->will($this->returnValue(array('lisa', 'bart', 'kira', 'brad')));
- $groupBackend = new GroupLDAP($access);
+ $groupBackend = new GroupLDAP($access, $pluginManager);
$users = $groupBackend->usersInGroup('foobar');
$this->assertSame(4, count($users));
@@ -504,6 +567,8 @@ class Group_LDAPTest extends \Test\TestCase {
*/
public function testCountUsersInGroupPrimaryMembersOnly() {
$access = $this->getAccessMock();
+ $pluginManager = $this->getPluginManagerMock();
+
$this->enableGroups($access);
$access->connection->expects($this->any())
@@ -527,7 +592,7 @@ class Group_LDAPTest extends \Test\TestCase {
->method('countUsers')
->will($this->returnValue(4));
- $groupBackend = new GroupLDAP($access);
+ $groupBackend = new GroupLDAP($access, $pluginManager);
$users = $groupBackend->countUsersInGroup('foobar');
$this->assertSame(4, $users);
@@ -535,6 +600,8 @@ class Group_LDAPTest extends \Test\TestCase {
public function testGetUserGroupsMemberOf() {
$access = $this->getAccessMock();
+ $pluginManager = $this->getPluginManagerMock();
+
$this->enableGroups($access);
$dn = 'cn=userX,dc=foobar';
@@ -558,7 +625,7 @@ class Group_LDAPTest extends \Test\TestCase {
->method('groupsMatchFilter')
->will($this->returnArgument(0));
- $groupBackend = new GroupLDAP($access);
+ $groupBackend = new GroupLDAP($access, $pluginManager);
$groups = $groupBackend->getUserGroups('userX');
$this->assertSame(2, count($groups));
@@ -566,6 +633,7 @@ class Group_LDAPTest extends \Test\TestCase {
public function testGetUserGroupsMemberOfDisabled() {
$access = $this->getAccessMock();
+ $pluginManager = $this->getPluginManagerMock();
$access->connection->expects($this->any())
->method('__get')
@@ -595,12 +663,13 @@ class Group_LDAPTest extends \Test\TestCase {
->method('nextcloudGroupNames')
->will($this->returnValue([]));
- $groupBackend = new GroupLDAP($access);
+ $groupBackend = new GroupLDAP($access, $pluginManager);
$groupBackend->getUserGroups('userX');
}
public function testGetGroupsByMember() {
$access = $this->getAccessMock();
+ $pluginManager = $this->getPluginManagerMock();
$access->connection->expects($this->any())
->method('__get')
@@ -646,11 +715,243 @@ class Group_LDAPTest extends \Test\TestCase {
->method('fetchListOfGroups')
->will($this->returnValue([$group1, $group2]));
- $groupBackend = new GroupLDAP($access);
+ $groupBackend = new GroupLDAP($access, $pluginManager);
$groups = $groupBackend->getUserGroups('userX');
$this->assertEquals(['group1', 'group2'], $groups);
$groupsAgain = $groupBackend->getUserGroups('userX');
$this->assertEquals(['group1', 'group2'], $groupsAgain);
}
+
+ public function testCreateGroupWithPlugin() {
+ $pluginManager = $this->getMockBuilder('\OCA\User_LDAP\GroupPluginManager')
+ ->setMethods(['implementsActions','createGroup'])
+ ->getMock();
+
+ $pluginManager->expects($this->once())
+ ->method('implementsActions')
+ ->with(GroupInterface::CREATE_GROUP)
+ ->willReturn(true);
+
+ $pluginManager->expects($this->once())
+ ->method('createGroup')
+ ->with('gid')
+ ->willReturn('result');
+
+ $ldap = new GroupLDAP(
+ $this->getAccessMock(),
+ $pluginManager
+ );
+
+ $this->assertEquals($ldap->createGroup('gid'),true);
+ }
+
+ /**
+ * @expectedException \Exception
+ */
+ public function testCreateGroupFailing() {
+ $pluginManager = $this->getMockBuilder('\OCA\User_LDAP\GroupPluginManager')
+ ->setMethods(['implementsActions', 'createGroup'])
+ ->getMock();
+
+ $pluginManager->expects($this->once())
+ ->method('implementsActions')
+ ->with(GroupInterface::CREATE_GROUP)
+ ->willReturn(false);
+
+ $ldap = new GroupLDAP(
+ $this->getAccessMock(),
+ $pluginManager
+ );
+
+ $ldap->createGroup('gid');
+ }
+
+ public function testDeleteGroupWithPlugin() {
+ $pluginManager = $this->getMockBuilder('\OCA\User_LDAP\GroupPluginManager')
+ ->setMethods(['implementsActions','deleteGroup'])
+ ->getMock();
+
+ $pluginManager->expects($this->once())
+ ->method('implementsActions')
+ ->with(GroupInterface::DELETE_GROUP)
+ ->willReturn(true);
+
+ $pluginManager->expects($this->once())
+ ->method('deleteGroup')
+ ->with('gid')
+ ->willReturn('result');
+
+ $access = $this->getAccessMock();
+
+ $mapper = $this->getMockBuilder('\OCA\User_LDAP\Mapping\GroupMapping')
+ ->setMethods(['unmap'])
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $access->expects($this->any())
+ ->method('getGroupMapper')
+ ->will($this->returnValue($mapper));
+
+ $ldap = new GroupLDAP(
+ $access,
+ $pluginManager
+ );
+
+ $this->assertEquals($ldap->deleteGroup('gid'),'result');
+ }
+
+ /**
+ * @expectedException \Exception
+ */
+ public function testDeleteGroupFailing() {
+ $pluginManager = $this->getMockBuilder('\OCA\User_LDAP\GroupPluginManager')
+ ->setMethods(['implementsActions', 'deleteGroup'])
+ ->getMock();
+
+ $pluginManager->expects($this->once())
+ ->method('implementsActions')
+ ->with(GroupInterface::DELETE_GROUP)
+ ->willReturn(false);
+
+ $ldap = new GroupLDAP(
+ $this->getAccessMock(),
+ $pluginManager
+ );
+
+ $ldap->deleteGroup('gid');
+ }
+
+ public function testAddToGroupWithPlugin() {
+ $pluginManager = $this->getMockBuilder('\OCA\User_LDAP\GroupPluginManager')
+ ->setMethods(['implementsActions','addToGroup'])
+ ->getMock();
+
+ $pluginManager->expects($this->once())
+ ->method('implementsActions')
+ ->with(GroupInterface::ADD_TO_GROUP)
+ ->willReturn(true);
+
+ $pluginManager->expects($this->once())
+ ->method('addToGroup')
+ ->with('uid', 'gid')
+ ->willReturn('result');
+
+ $ldap = new GroupLDAP(
+ $this->getAccessMock(),
+ $pluginManager
+ );
+
+ $this->assertEquals($ldap->addToGroup('uid', 'gid'),'result');
+ }
+
+ /**
+ * @expectedException \Exception
+ */
+ public function testAddToGroupFailing() {
+ $pluginManager = $this->getMockBuilder('\OCA\User_LDAP\GroupPluginManager')
+ ->setMethods(['implementsActions', 'addToGroup'])
+ ->getMock();
+
+ $pluginManager->expects($this->once())
+ ->method('implementsActions')
+ ->with(GroupInterface::ADD_TO_GROUP)
+ ->willReturn(false);
+
+ $ldap = new GroupLDAP(
+ $this->getAccessMock(),
+ $pluginManager
+ );
+
+ $ldap->addToGroup('uid', 'gid');
+ }
+
+ public function testRemoveFromGroupWithPlugin() {
+ $pluginManager = $this->getMockBuilder('\OCA\User_LDAP\GroupPluginManager')
+ ->setMethods(['implementsActions','removeFromGroup'])
+ ->getMock();
+
+ $pluginManager->expects($this->once())
+ ->method('implementsActions')
+ ->with(GroupInterface::REMOVE_FROM_GROUP)
+ ->willReturn(true);
+
+ $pluginManager->expects($this->once())
+ ->method('removeFromGroup')
+ ->with('uid', 'gid')
+ ->willReturn('result');
+
+ $ldap = new GroupLDAP(
+ $this->getAccessMock(),
+ $pluginManager
+ );
+
+ $this->assertEquals($ldap->removeFromGroup('uid', 'gid'),'result');
+ }
+
+ /**
+ * @expectedException \Exception
+ */
+ public function testRemoveFromGroupFailing() {
+ $pluginManager = $this->getMockBuilder('\OCA\User_LDAP\GroupPluginManager')
+ ->setMethods(['implementsActions', 'removeFromGroup'])
+ ->getMock();
+
+ $pluginManager->expects($this->once())
+ ->method('implementsActions')
+ ->with(GroupInterface::REMOVE_FROM_GROUP)
+ ->willReturn(false);
+
+ $ldap = new GroupLDAP(
+ $this->getAccessMock(),
+ $pluginManager
+ );
+
+ $ldap->removeFromGroup('uid', 'gid');
+ }
+
+ public function testGetGroupDetailsWithPlugin() {
+ $pluginManager = $this->getMockBuilder('\OCA\User_LDAP\GroupPluginManager')
+ ->setMethods(['implementsActions','getGroupDetails'])
+ ->getMock();
+
+ $pluginManager->expects($this->once())
+ ->method('implementsActions')
+ ->with(GroupInterface::GROUP_DETAILS)
+ ->willReturn(true);
+
+ $pluginManager->expects($this->once())
+ ->method('getGroupDetails')
+ ->with('gid')
+ ->willReturn('result');
+
+ $ldap = new GroupLDAP(
+ $this->getAccessMock(),
+ $pluginManager
+ );
+
+ $this->assertEquals($ldap->getGroupDetails('gid'),'result');
+ }
+
+ /**
+ * @expectedException \Exception
+ */
+ public function testGetGroupDetailsFailing() {
+ $pluginManager = $this->getMockBuilder('\OCA\User_LDAP\GroupPluginManager')
+ ->setMethods(['implementsActions', 'getGroupDetails'])
+ ->getMock();
+
+ $pluginManager->expects($this->once())
+ ->method('implementsActions')
+ ->with(GroupInterface::GROUP_DETAILS)
+ ->willReturn(false);
+
+ $ldap = new GroupLDAP(
+ $this->getAccessMock(),
+ $pluginManager
+ );
+
+ $ldap->getGroupDetails('gid');
+ }
+
}
diff --git a/apps/user_ldap/tests/HelperTest.php b/apps/user_ldap/tests/HelperTest.php
index ca0bbcc4e81..31d17cbaede 100644
--- a/apps/user_ldap/tests/HelperTest.php
+++ b/apps/user_ldap/tests/HelperTest.php
@@ -1,5 +1,26 @@
<?php
-
+/**
+ *
+ *
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
namespace OCA\User_LDAP\Tests;
diff --git a/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php b/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php
index 84e1e6b458a..3bc3699fbac 100644
--- a/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php
+++ b/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php
@@ -4,6 +4,9 @@
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author root <root@localhost.localdomain>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
*
* @license AGPL-3.0
*
@@ -68,6 +71,13 @@ abstract class AbstractIntegrationTest {
* the LDAP backend.
*/
public function init() {
+ \OC::$server->registerService('LDAPUserPluginManager', function() {
+ return new \OCA\User_LDAP\UserPluginManager();
+ });
+ \OC::$server->registerService('LDAPGroupPluginManager', function() {
+ return new \OCA\User_LDAP\GroupPluginManager();
+ });
+
$this->initLDAPWrapper();
$this->initConnection();
$this->initUserManager();
diff --git a/apps/user_ldap/tests/Integration/Bootstrap.php b/apps/user_ldap/tests/Integration/Bootstrap.php
index f52f1322171..46299098ab2 100644
--- a/apps/user_ldap/tests/Integration/Bootstrap.php
+++ b/apps/user_ldap/tests/Integration/Bootstrap.php
@@ -1,23 +1,23 @@
<?php
-
/**
* @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de>
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
*
- * @license AGPL-3.0
+ * @license GNU AGPL version 3 or any later version
*
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
diff --git a/apps/user_ldap/tests/Integration/ExceptionOnLostConnection.php b/apps/user_ldap/tests/Integration/ExceptionOnLostConnection.php
index 0dc80e87238..32dfb72d9c1 100644
--- a/apps/user_ldap/tests/Integration/ExceptionOnLostConnection.php
+++ b/apps/user_ldap/tests/Integration/ExceptionOnLostConnection.php
@@ -4,6 +4,7 @@
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
*
* @license AGPL-3.0
*
diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestAttributeDetection.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestAttributeDetection.php
index bd8e4bdd7a2..0238d68f59f 100644
--- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestAttributeDetection.php
+++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestAttributeDetection.php
@@ -3,6 +3,7 @@
* @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
*
* @license GNU AGPL version 3 or any later version
*
@@ -49,12 +50,12 @@ class IntegrationTestAttributeDetection extends AbstractIntegrationTest {
$groupMapper->clear();
$this->access->setGroupMapper($groupMapper);
- $userBackend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession());
+ $userBackend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->query('LDAPUserPluginManager'));
$userManager = \OC::$server->getUserManager();
$userManager->clearBackends();
$userManager->registerBackend($userBackend);
- $groupBackend = new Group_LDAP($this->access);
+ $groupBackend = new Group_LDAP($this->access, \OC::$server->query('LDAPGroupPluginManager'));
$groupManger = \OC::$server->getGroupManager();
$groupManger->clearBackends();
$groupManger->addBackend($groupBackend);
diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestFetchUsersByLoginName.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestFetchUsersByLoginName.php
index 95bfb99b65b..cab5f6196fd 100644
--- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestFetchUsersByLoginName.php
+++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestFetchUsersByLoginName.php
@@ -4,6 +4,7 @@
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
*
* @license AGPL-3.0
*
@@ -47,7 +48,7 @@ class IntegrationTestFetchUsersByLoginName extends AbstractIntegrationTest {
$this->mapping = new UserMapping(\OC::$server->getDatabaseConnection());
$this->mapping->clear();
$this->access->setUserMapper($this->mapping);
- $this->backend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession());
+ $this->backend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->query('LDAPUserPluginManager'));
}
/**
diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestPaging.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestPaging.php
index 3c8cf22bb5b..d54d001c4ad 100644
--- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestPaging.php
+++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestPaging.php
@@ -4,6 +4,7 @@
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
*
* @license AGPL-3.0
*
@@ -47,7 +48,7 @@ class IntegrationTestPaging extends AbstractIntegrationTest {
require(__DIR__ . '/../setup-scripts/createExplicitUsers.php');
parent::init();
- $this->backend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession());
+ $this->backend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->query('LDAPUserPluginManager'));
}
public function initConnection() {
diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestUserHome.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestUserHome.php
index 765cee00f91..9ee5a7efac2 100644
--- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestUserHome.php
+++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestUserHome.php
@@ -4,6 +4,9 @@
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Jörn Friedrich Dreyer <jfd@butonic.de>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
*
* @license AGPL-3.0
*
@@ -51,7 +54,7 @@ class IntegrationTestUserHome extends AbstractIntegrationTest {
$this->mapping = new UserMapping(\OC::$server->getDatabaseConnection());
$this->mapping->clear();
$this->access->setUserMapper($this->mapping);
- $this->backend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession());
+ $this->backend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->query('LDAPUserPluginManager'));
}
/**
diff --git a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserAvatar.php b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserAvatar.php
index 8c9e215edaa..599458a9721 100644
--- a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserAvatar.php
+++ b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserAvatar.php
@@ -5,7 +5,9 @@
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roger Szabo <roger.szabo@web.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
*
* @license AGPL-3.0
*
@@ -50,7 +52,7 @@ class IntegrationTestUserAvatar extends AbstractIntegrationTest {
$this->mapping = new UserMapping(\OC::$server->getDatabaseConnection());
$this->mapping->clear();
$this->access->setUserMapper($this->mapping);
- $userBackend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession());
+ $userBackend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->query('LDAPUserPluginManager'));
\OC_User::useBackend($userBackend);
}
diff --git a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserCleanUp.php b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserCleanUp.php
index ce81b9a26d6..0d072bcf973 100644
--- a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserCleanUp.php
+++ b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserCleanUp.php
@@ -3,7 +3,7 @@
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
- * @author Joas Schilling <coding@schilljs.com>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
*
* @license AGPL-3.0
*
@@ -46,7 +46,7 @@ class IntegrationTestUserCleanUp extends AbstractIntegrationTest {
$this->mapping->clear();
$this->access->setUserMapper($this->mapping);
- $userBackend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession());
+ $userBackend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->query('LDAPUserPluginManager'));
\OC_User::useBackend($userBackend);
}
diff --git a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php
index 1f5d16567f7..476bc8e7596 100644
--- a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php
+++ b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php
@@ -4,6 +4,7 @@
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
*
* @license AGPL-3.0
*
@@ -43,7 +44,7 @@ class IntegrationTestUserDisplayName extends AbstractIntegrationTest {
$this->mapping = new UserMapping(\OC::$server->getDatabaseConnection());
$this->mapping->clear();
$this->access->setUserMapper($this->mapping);
- $userBackend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession());
+ $userBackend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession(), \OC::$server->query('LDAPUserPluginManager'));
\OC_User::useBackend($userBackend);
}
diff --git a/apps/user_ldap/tests/Jobs/CleanUpTest.php b/apps/user_ldap/tests/Jobs/CleanUpTest.php
index 62cebcf328e..1f30af3a58a 100644
--- a/apps/user_ldap/tests/Jobs/CleanUpTest.php
+++ b/apps/user_ldap/tests/Jobs/CleanUpTest.php
@@ -5,6 +5,7 @@
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0
*
diff --git a/apps/user_ldap/tests/LDAPGroupPluginDummy.php b/apps/user_ldap/tests/LDAPGroupPluginDummy.php
new file mode 100644
index 00000000000..ac67b526571
--- /dev/null
+++ b/apps/user_ldap/tests/LDAPGroupPluginDummy.php
@@ -0,0 +1,59 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 EITA Cooperative (eita.org.br)
+ *
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\User_LDAP\Tests;
+
+
+use OCA\User_LDAP\ILDAPGroupPlugin;
+
+class LDAPGroupPluginDummy implements ILDAPGroupPlugin {
+
+
+ public function respondToActions() {
+ return null;
+ }
+
+ public function createGroup($gid) {
+ return null;
+ }
+
+ public function deleteGroup($gid) {
+ return null;
+ }
+
+ public function addToGroup($uid, $gid) {
+ return null;
+ }
+
+ public function removeFromGroup($uid, $gid) {
+ return null;
+ }
+
+ public function countUsersInGroup($gid, $search = '') {
+ return null;
+ }
+
+ public function getGroupDetails($gid) {
+ return null;
+ }
+}
diff --git a/apps/user_ldap/tests/LDAPProviderTest.php b/apps/user_ldap/tests/LDAPProviderTest.php
index 585e0df662b..f3a27dec2c4 100644
--- a/apps/user_ldap/tests/LDAPProviderTest.php
+++ b/apps/user_ldap/tests/LDAPProviderTest.php
@@ -1,8 +1,11 @@
<?php
/**
- *
* @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de)
*
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author root <root@localhost.localdomain>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
@@ -22,6 +25,8 @@
namespace OCA\User_LDAP\Tests;
+use OCA\User_LDAP\IGroupLDAP;
+use OCP\IConfig;
use OCP\IServerContainer;
use OCA\User_LDAP\IUserLDAP;
@@ -38,21 +43,57 @@ class LDAPProviderTest extends \Test\TestCase {
parent::setUp();
}
- private function getServerMock(IUserLDAP $backend) {
+ private function getServerMock(IUserLDAP $userBackend, IGroupLDAP $groupBackend) {
$server = $this->getMockBuilder('OC\Server')
- ->setMethods(['getUserManager', 'getBackends'])
+ ->setMethods(['getUserManager', 'getBackends', 'getGroupManager'])
->setConstructorArgs(['', new \OC\Config(\OC::$configDir)])
->getMock();
$server->expects($this->at(1))
->method('getBackends')
- ->willReturn([$backend]);
+ ->willReturn([$userBackend]);
+ $server->expects($this->any())
+ ->method('getUserManager')
+ ->willReturn($this->getUserManagerMock($userBackend));
+ $server->expects($this->any())
+ ->method('getGroupManager')
+ ->willReturn($this->getGroupManagerMock($groupBackend));
$server->expects($this->any())
->method($this->anything())
->willReturnSelf();
return $server;
}
+
+ private function getUserManagerMock(IUserLDAP $userBackend) {
+ $userManager = $this->getMockBuilder('OC\User\Manager')
+ ->setMethods(['getBackends'])
+ ->setConstructorArgs([$this->createMock(IConfig::class)])
+ ->getMock();
+ $userManager->expects($this->any())
+ ->method('getBackends')
+ ->willReturn([$userBackend]);
+ return $userManager;
+ }
+ private function getGroupManagerMock(IGroupLDAP $groupBackend) {
+ $groupManager = $this->getMockBuilder('OC\Group\Manager')
+ ->setMethods(['getBackends'])
+ ->disableOriginalConstructor()
+ ->getMock();
+ $groupManager->expects($this->any())
+ ->method('getBackends')
+ ->willReturn([$groupBackend]);
+ return $groupManager;
+ }
+
+ private function getDefaultGroupBackendMock() {
+ $groupBackend = $this->getMockBuilder('OCA\User_LDAP\Group_LDAP')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ return $groupBackend;
+ }
+
private function getLDAPProvider(IServerContainer $serverContainer) {
$factory = new \OCA\User_LDAP\LDAPProviderFactory($serverContainer);
return $factory->getLDAPProvider();
@@ -63,50 +104,100 @@ class LDAPProviderTest extends \Test\TestCase {
* @expectedExceptionMessage User id not found in LDAP
*/
public function testGetUserDNUserIDNotFound() {
- $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
->setMethods(['userExists'])
->disableOriginalConstructor()
->getMock();
- $backend->expects($this->any())->method('userExists')->willReturn(false);
+ $userBackend->expects($this->any())->method('userExists')->willReturn(false);
- $server = $this->getServerMock($backend);
+ $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock());
$ldapProvider = $this->getLDAPProvider($server);
$ldapProvider->getUserDN('nonexisting_user');
}
public function testGetUserDN() {
- $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
->setMethods(['userExists', 'getLDAPAccess', 'username2dn'])
->disableOriginalConstructor()
->getMock();
- $backend->expects($this->at(0))
+ $userBackend->expects($this->at(0))
->method('userExists')
->willReturn(true);
- $backend->expects($this->at(2))
+ $userBackend->expects($this->at(2))
->method('username2dn')
->willReturn('cn=existing_user,ou=Are Sufficient To,ou=Test,dc=example,dc=org');
- $backend->expects($this->any())
+ $userBackend->expects($this->any())
->method($this->anything())
->willReturnSelf();
- $server = $this->getServerMock($backend);
+ $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock());
$ldapProvider = $this->getLDAPProvider($server);
$this->assertEquals('cn=existing_user,ou=Are Sufficient To,ou=Test,dc=example,dc=org',
$ldapProvider->getUserDN('existing_user'));
}
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage Group id not found in LDAP
+ */
+ public function testGetGroupDNGroupIDNotFound() {
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $groupBackend = $this->getMockBuilder('OCA\User_LDAP\Group_LDAP')
+ ->setMethods(['groupExists'])
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $groupBackend->expects($this->any())->method('groupExists')->willReturn(false);
+
+ $server = $this->getServerMock($userBackend, $groupBackend);
+
+ $ldapProvider = $this->getLDAPProvider($server);
+ $ldapProvider->getGroupDN('nonexisting_group');
+ }
+
+ public function testGetGroupDN() {
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ ->setMethods(['userExists', 'getLDAPAccess', 'username2dn'])
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $groupBackend = $this->getMockBuilder('OCA\User_LDAP\Group_LDAP')
+ ->setMethods(['groupExists', 'getLDAPAccess', 'groupname2dn'])
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $groupBackend->expects($this->at(0))
+ ->method('groupExists')
+ ->willReturn(true);
+ $groupBackend->expects($this->at(2))
+ ->method('groupname2dn')
+ ->willReturn('cn=existing_group,ou=Are Sufficient To,ou=Test,dc=example,dc=org');
+ $groupBackend->expects($this->any())
+ ->method($this->anything())
+ ->willReturnSelf();
+
+ $server = $this->getServerMock($userBackend, $groupBackend);
+
+ $ldapProvider = $this->getLDAPProvider($server);
+ $this->assertEquals('cn=existing_group,ou=Are Sufficient To,ou=Test,dc=example,dc=org',
+ $ldapProvider->getGroupDN('existing_group'));
+ }
+
public function testGetUserName() {
- $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
->setMethods(['dn2UserName'])
->disableOriginalConstructor()
->getMock();
- $backend->expects($this->any())
+ $userBackend->expects($this->any())
->method('dn2UserName')
->willReturn('existing_user');
- $server = $this->getServerMock($backend);
+ $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock());
$ldapProvider = $this->getLDAPProvider($server);
$this->assertEquals('existing_user',
@@ -114,12 +205,12 @@ class LDAPProviderTest extends \Test\TestCase {
}
public function testDNasBaseParameter() {
- $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
->setMethods([])
->disableOriginalConstructor()
->getMock();
- $server = $this->getServerMock($backend);
+ $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock());
$helper = new \OCA\User_LDAP\Helper(\OC::$server->getConfig());
@@ -130,12 +221,12 @@ class LDAPProviderTest extends \Test\TestCase {
}
public function testSanitizeDN() {
- $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
->setMethods([])
->disableOriginalConstructor()
->getMock();
- $server = $this->getServerMock($backend);
+ $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock());
$helper = new \OCA\User_LDAP\Helper(\OC::$server->getConfig());
@@ -150,69 +241,115 @@ class LDAPProviderTest extends \Test\TestCase {
* @expectedExceptionMessage User id not found in LDAP
*/
public function testGetLDAPConnectionUserIDNotFound() {
- $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
->setMethods(['userExists'])
->disableOriginalConstructor()
->getMock();
- $backend->expects($this->any())->method('userExists')->willReturn(false);
+ $userBackend->expects($this->any())->method('userExists')->willReturn(false);
- $server = $this->getServerMock($backend);
+ $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock());
$ldapProvider = $this->getLDAPProvider($server);
$ldapProvider->getLDAPConnection('nonexisting_user');
}
public function testGetLDAPConnection() {
- $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
->setMethods(['userExists', 'getNewLDAPConnection'])
->disableOriginalConstructor()
->getMock();
- $backend->expects($this->any())
+ $userBackend->expects($this->any())
->method('userExists')
->willReturn(true);
- $backend->expects($this->any())
+ $userBackend->expects($this->any())
->method('getNewLDAPConnection')
->willReturn(true);
- $server = $this->getServerMock($backend);
+ $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock());
$ldapProvider = $this->getLDAPProvider($server);
$this->assertTrue($ldapProvider->getLDAPConnection('existing_user'));
}
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage Group id not found in LDAP
+ */
+ public function testGetGroupLDAPConnectionGroupIDNotFound() {
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $groupBackend = $this->getMockBuilder('OCA\User_LDAP\Group_LDAP')
+ ->setMethods(['groupExists'])
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $groupBackend->expects($this->any())->method('groupExists')->willReturn(false);
+
+ $server = $this->getServerMock($userBackend, $groupBackend);
+
+ $ldapProvider = $this->getLDAPProvider($server);
+ $ldapProvider->getGroupLDAPConnection('nonexisting_group');
+ }
+
+ public function testGetGroupLDAPConnection() {
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $groupBackend = $this->getMockBuilder('OCA\User_LDAP\Group_LDAP')
+ ->setMethods(['groupExists','getNewLDAPConnection'])
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $groupBackend->expects($this->any())
+ ->method('groupExists')
+ ->willReturn(true);
+
+ $groupBackend->expects($this->any())
+ ->method('getNewLDAPConnection')
+ ->willReturn(true);
+
+ $server = $this->getServerMock($userBackend, $groupBackend);
+
+ $ldapProvider = $this->getLDAPProvider($server);
+ $this->assertTrue($ldapProvider->getGroupLDAPConnection('existing_group'));
+ }
/**
* @expectedException \Exception
* @expectedExceptionMessage User id not found in LDAP
*/
public function testGetLDAPBaseUsersUserIDNotFound() {
- $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
->setMethods(['userExists'])
->disableOriginalConstructor()
->getMock();
- $backend->expects($this->any())->method('userExists')->willReturn(false);
+ $userBackend->expects($this->any())->method('userExists')->willReturn(false);
- $server = $this->getServerMock($backend);
+ $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock());
$ldapProvider = $this->getLDAPProvider($server);
$ldapProvider->getLDAPBaseUsers('nonexisting_user');
}
public function testGetLDAPBaseUsers() {
- $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
->setMethods(['userExists', 'getLDAPAccess', 'getConnection', 'getConfiguration'])
->disableOriginalConstructor()
->getMock();
- $backend->expects($this->at(0))
+ $userBackend->expects($this->at(0))
->method('userExists')
->willReturn(true);
- $backend->expects($this->at(3))
+ $userBackend->expects($this->at(3))
->method('getConfiguration')
->willReturn(array('ldap_base_users'=>'ou=users,dc=example,dc=org'));
- $backend->expects($this->any())
+ $userBackend->expects($this->any())
->method($this->anything())
->willReturnSelf();
- $server = $this->getServerMock($backend);
+ $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock());
$ldapProvider = $this->getLDAPProvider($server);
$this->assertEquals('ou=users,dc=example,dc=org', $ldapProvider->getLDAPBaseUsers('existing_user'));
@@ -223,34 +360,34 @@ class LDAPProviderTest extends \Test\TestCase {
* @expectedExceptionMessage User id not found in LDAP
*/
public function testGetLDAPBaseGroupsUserIDNotFound() {
- $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
->setMethods(['userExists'])
->disableOriginalConstructor()
->getMock();
- $backend->expects($this->any())->method('userExists')->willReturn(false);
+ $userBackend->expects($this->any())->method('userExists')->willReturn(false);
- $server = $this->getServerMock($backend);
+ $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock());
$ldapProvider = $this->getLDAPProvider($server);
$ldapProvider->getLDAPBaseGroups('nonexisting_user');
}
public function testGetLDAPBaseGroups() {
- $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
->setMethods(['userExists', 'getLDAPAccess', 'getConnection', 'getConfiguration'])
->disableOriginalConstructor()
->getMock();
- $backend->expects($this->at(0))
+ $userBackend->expects($this->at(0))
->method('userExists')
->willReturn(true);
- $backend->expects($this->at(3))
+ $userBackend->expects($this->at(3))
->method('getConfiguration')
->willReturn(array('ldap_base_groups'=>'ou=groups,dc=example,dc=org'));
- $backend->expects($this->any())
+ $userBackend->expects($this->any())
->method($this->anything())
->willReturnSelf();
- $server = $this->getServerMock($backend);
+ $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock());
$ldapProvider = $this->getLDAPProvider($server);
$this->assertEquals('ou=groups,dc=example,dc=org', $ldapProvider->getLDAPBaseGroups('existing_user'));
@@ -261,62 +398,107 @@ class LDAPProviderTest extends \Test\TestCase {
* @expectedExceptionMessage User id not found in LDAP
*/
public function testClearCacheUserIDNotFound() {
- $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
->setMethods(['userExists'])
->disableOriginalConstructor()
->getMock();
- $backend->expects($this->any())->method('userExists')->willReturn(false);
+ $userBackend->expects($this->any())->method('userExists')->willReturn(false);
- $server = $this->getServerMock($backend);
+ $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock());
$ldapProvider = $this->getLDAPProvider($server);
$ldapProvider->clearCache('nonexisting_user');
}
public function testClearCache() {
- $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
->setMethods(['userExists', 'getLDAPAccess', 'getConnection', 'clearCache'])
->disableOriginalConstructor()
->getMock();
- $backend->expects($this->at(0))
+ $userBackend->expects($this->at(0))
->method('userExists')
->willReturn(true);
- $backend->expects($this->at(3))
+ $userBackend->expects($this->at(3))
->method('clearCache')
->willReturn(true);
- $backend->expects($this->any())
+ $userBackend->expects($this->any())
->method($this->anything())
->willReturnSelf();
- $server = $this->getServerMock($backend);
+ $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock());
$ldapProvider = $this->getLDAPProvider($server);
$ldapProvider->clearCache('existing_user');
$this->assertTrue(TRUE);
}
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage Group id not found in LDAP
+ */
+ public function testClearGroupCacheGroupIDNotFound() {
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $groupBackend = $this->getMockBuilder('OCA\User_LDAP\Group_LDAP')
+ ->setMethods(['groupExists'])
+ ->disableOriginalConstructor()
+ ->getMock();
+ $groupBackend->expects($this->any())->method('groupExists')->willReturn(false);
+
+ $server = $this->getServerMock($userBackend, $groupBackend);
+
+ $ldapProvider = $this->getLDAPProvider($server);
+ $ldapProvider->clearGroupCache('nonexisting_group');
+ }
+
+ public function testClearGroupCache() {
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $groupBackend = $this->getMockBuilder('OCA\User_LDAP\Group_LDAP')
+ ->setMethods(['groupExists', 'getLDAPAccess', 'getConnection', 'clearCache'])
+ ->disableOriginalConstructor()
+ ->getMock();
+ $groupBackend->expects($this->at(0))
+ ->method('groupExists')
+ ->willReturn(true);
+ $groupBackend->expects($this->at(3))
+ ->method('clearCache')
+ ->willReturn(true);
+ $groupBackend->expects($this->any())
+ ->method($this->anything())
+ ->willReturnSelf();
+
+ $server = $this->getServerMock($userBackend, $groupBackend);
+
+ $ldapProvider = $this->getLDAPProvider($server);
+ $ldapProvider->clearGroupCache('existing_group');
+ $this->assertTrue(TRUE);
+ }
public function testDnExists() {
- $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
->setMethods(['dn2UserName'])
->disableOriginalConstructor()
->getMock();
- $backend->expects($this->any())
+ $userBackend->expects($this->any())
->method('dn2UserName')
->willReturn('existing_user');
- $server = $this->getServerMock($backend);
+ $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock());
$ldapProvider = $this->getLDAPProvider($server);
$this->assertTrue($ldapProvider->dnExists('cn=existing_user,ou=Are Sufficient To,ou=Test,dc=example,dc=org'));
}
public function testFlagRecord() {
- $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
->setMethods([])
->disableOriginalConstructor()
->getMock();
- $server = $this->getServerMock($backend);
+ $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock());
$ldapProvider = $this->getLDAPProvider($server);
$ldapProvider->flagRecord('existing_user');
@@ -324,15 +506,140 @@ class LDAPProviderTest extends \Test\TestCase {
}
public function testUnflagRecord() {
- $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
->setMethods([])
->disableOriginalConstructor()
->getMock();
- $server = $this->getServerMock($backend);
+ $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock());
$ldapProvider = $this->getLDAPProvider($server);
$ldapProvider->unflagRecord('existing_user');
$this->assertTrue(TRUE);
}
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage User id not found in LDAP
+ */
+ public function testGetLDAPDisplayNameFieldUserIDNotFound() {
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ ->setMethods(['userExists'])
+ ->disableOriginalConstructor()
+ ->getMock();
+ $userBackend->expects($this->any())->method('userExists')->willReturn(false);
+
+ $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock());
+
+ $ldapProvider = $this->getLDAPProvider($server);
+ $ldapProvider->getLDAPDisplayNameField('nonexisting_user');
+ }
+
+ public function testGetLDAPDisplayNameField() {
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ ->setMethods(['userExists', 'getLDAPAccess', 'getConnection', 'getConfiguration'])
+ ->disableOriginalConstructor()
+ ->getMock();
+ $userBackend->expects($this->at(0))
+ ->method('userExists')
+ ->willReturn(true);
+ $userBackend->expects($this->at(3))
+ ->method('getConfiguration')
+ ->willReturn(array('ldap_display_name'=>'displayName'));
+ $userBackend->expects($this->any())
+ ->method($this->anything())
+ ->willReturnSelf();
+
+ $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock());
+
+ $ldapProvider = $this->getLDAPProvider($server);
+ $this->assertEquals('displayName', $ldapProvider->getLDAPDisplayNameField('existing_user'));
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage User id not found in LDAP
+ */
+ public function testGetLDAPEmailFieldUserIDNotFound() {
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ ->setMethods(['userExists'])
+ ->disableOriginalConstructor()
+ ->getMock();
+ $userBackend->expects($this->any())->method('userExists')->willReturn(false);
+
+ $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock());
+
+ $ldapProvider = $this->getLDAPProvider($server);
+ $ldapProvider->getLDAPEmailField('nonexisting_user');
+ }
+
+ public function testGetLDAPEmailField() {
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ ->setMethods(['userExists', 'getLDAPAccess', 'getConnection', 'getConfiguration'])
+ ->disableOriginalConstructor()
+ ->getMock();
+ $userBackend->expects($this->at(0))
+ ->method('userExists')
+ ->willReturn(true);
+ $userBackend->expects($this->at(3))
+ ->method('getConfiguration')
+ ->willReturn(array('ldap_email_attr'=>'mail'));
+ $userBackend->expects($this->any())
+ ->method($this->anything())
+ ->willReturnSelf();
+
+ $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock());
+
+ $ldapProvider = $this->getLDAPProvider($server);
+ $this->assertEquals('mail', $ldapProvider->getLDAPEmailField('existing_user'));
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage Group id not found in LDAP
+ */
+ public function testGetLDAPGroupMemberAssocUserIDNotFound() {
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $groupBackend = $this->getMockBuilder('OCA\User_LDAP\Group_LDAP')
+ ->setMethods(['groupExists'])
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $groupBackend->expects($this->any())->method('groupExists')->willReturn(false);
+
+ $server = $this->getServerMock($userBackend, $groupBackend);
+
+ $ldapProvider = $this->getLDAPProvider($server);
+ $ldapProvider->getLDAPGroupMemberAssoc('nonexisting_group');
+ }
+
+ public function testgetLDAPGroupMemberAssoc() {
+ $userBackend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $groupBackend = $this->getMockBuilder('OCA\User_LDAP\Group_LDAP')
+ ->setMethods(['groupExists', 'getLDAPAccess', 'getConnection', 'getConfiguration'])
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $groupBackend->expects($this->at(0))
+ ->method('groupExists')
+ ->willReturn(true);
+ $groupBackend->expects($this->any())
+ ->method('getConfiguration')
+ ->willReturn(array('ldap_group_member_assoc_attribute'=>'assoc_type'));
+ $groupBackend->expects($this->any())
+ ->method($this->anything())
+ ->willReturnSelf();
+
+ $server = $this->getServerMock($userBackend, $groupBackend);
+
+ $ldapProvider = $this->getLDAPProvider($server);
+ $this->assertEquals('assoc_type', $ldapProvider->getLDAPGroupMemberAssoc('existing_group'));
+ }
+
}
diff --git a/apps/user_ldap/tests/LDAPTest.php b/apps/user_ldap/tests/LDAPTest.php
index 1ac8cef12de..8e181741b50 100644
--- a/apps/user_ldap/tests/LDAPTest.php
+++ b/apps/user_ldap/tests/LDAPTest.php
@@ -2,6 +2,8 @@
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
diff --git a/apps/user_ldap/tests/LDAPUserPluginDummy.php b/apps/user_ldap/tests/LDAPUserPluginDummy.php
new file mode 100644
index 00000000000..eb7029a6ef7
--- /dev/null
+++ b/apps/user_ldap/tests/LDAPUserPluginDummy.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 EITA Cooperative (eita.org.br)
+ *
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\User_LDAP\Tests;
+
+
+use OCA\User_LDAP\ILDAPUserPlugin;
+
+class LDAPUserPluginDummy implements ILDAPUserPlugin {
+
+ public function respondToActions() {
+ return null;
+ }
+
+ public function createUser($username, $password) {
+ return null;
+ }
+
+ public function setPassword($uid, $password) {
+ return null;
+ }
+
+ public function getHome($uid) {
+ return null;
+ }
+
+ public function getDisplayName($uid) {
+ return null;
+ }
+
+ public function setDisplayName($uid, $displayName) {
+ return null;
+ }
+
+ public function canChangeAvatar($uid) {
+ return null;
+ }
+
+ public function countUsers() {
+ return null;
+ }
+
+}
diff --git a/apps/user_ldap/tests/Mapping/AbstractMappingTest.php b/apps/user_ldap/tests/Mapping/AbstractMappingTest.php
index c9845bb31e5..d3d33a82da9 100644
--- a/apps/user_ldap/tests/Mapping/AbstractMappingTest.php
+++ b/apps/user_ldap/tests/Mapping/AbstractMappingTest.php
@@ -6,6 +6,7 @@
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Stefan Weil <sw@weilnetz.de>
*
* @license AGPL-3.0
diff --git a/apps/user_ldap/tests/Settings/AdminTest.php b/apps/user_ldap/tests/Settings/AdminTest.php
index 86234861536..8161896e719 100644
--- a/apps/user_ldap/tests/Settings/AdminTest.php
+++ b/apps/user_ldap/tests/Settings/AdminTest.php
@@ -3,6 +3,8 @@
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
* @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license GNU AGPL version 3 or any later version
*
diff --git a/apps/user_ldap/tests/Settings/SectionTest.php b/apps/user_ldap/tests/Settings/SectionTest.php
index 5f565e89933..65dff000af3 100644
--- a/apps/user_ldap/tests/Settings/SectionTest.php
+++ b/apps/user_ldap/tests/Settings/SectionTest.php
@@ -2,6 +2,7 @@
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
+ * @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
*
* @license GNU AGPL version 3 or any later version
diff --git a/apps/user_ldap/tests/User/ManagerTest.php b/apps/user_ldap/tests/User/ManagerTest.php
index 823081f1da2..da30b210b17 100644
--- a/apps/user_ldap/tests/User/ManagerTest.php
+++ b/apps/user_ldap/tests/User/ManagerTest.php
@@ -6,6 +6,8 @@
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Philippe Jung <phil.jung@free.fr>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Roger Szabo <roger.szabo@web.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license AGPL-3.0
diff --git a/apps/user_ldap/tests/User/UserTest.php b/apps/user_ldap/tests/User/UserTest.php
index b118a613e87..ede60fef5c0 100644
--- a/apps/user_ldap/tests/User/UserTest.php
+++ b/apps/user_ldap/tests/User/UserTest.php
@@ -4,8 +4,12 @@
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
+ * @author Juan Pablo Villafáñez <jvillafanez@solidgear.es>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Roger Szabo <roger.szabo@web.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Victor Dubiniuk <dubiniuk@owncloud.com>
*
* @license AGPL-3.0
*
diff --git a/apps/user_ldap/tests/UserLDAPPluginTest.php b/apps/user_ldap/tests/UserLDAPPluginTest.php
new file mode 100644
index 00000000000..1d7d2ee7c75
--- /dev/null
+++ b/apps/user_ldap/tests/UserLDAPPluginTest.php
@@ -0,0 +1,311 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 EITA Cooperative (eita.org.br)
+ *
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\User_LDAP\Tests;
+
+
+use OC\User\Backend;
+use OCA\User_LDAP\UserPluginManager;
+
+class UserLDAPPluginTest extends \Test\TestCase {
+
+ /**
+ * @return UserPluginManager
+ */
+ private function getUserPluginManager() {
+ return new UserPluginManager();
+ }
+
+ public function testImplementsActions() {
+ $pluginManager = $this->getUserPluginManager();
+
+ $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPUserPluginDummy')
+ ->setMethods(['respondToActions'])
+ ->getMock();
+
+ $plugin->expects($this->any())
+ ->method('respondToActions')
+ ->willReturn(Backend::CREATE_USER);
+
+ $plugin2 = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPUserPluginDummy')
+ ->setMethods(['respondToActions'])
+ ->getMock();
+
+ $plugin2->expects($this->any())
+ ->method('respondToActions')
+ ->willReturn(Backend::PROVIDE_AVATAR);
+
+ $pluginManager->register($plugin);
+ $pluginManager->register($plugin2);
+
+ $this->assertEquals($pluginManager->getImplementedActions(), Backend::CREATE_USER | Backend::PROVIDE_AVATAR);
+ $this->assertTrue($pluginManager->implementsActions(Backend::CREATE_USER));
+ $this->assertTrue($pluginManager->implementsActions(Backend::PROVIDE_AVATAR));
+ }
+
+ public function testCreateUser() {
+ $pluginManager = $this->getUserPluginManager();
+
+ $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPUserPluginDummy')
+ ->setMethods(['respondToActions', 'createUser'])
+ ->getMock();
+
+ $plugin->expects($this->any())
+ ->method('respondToActions')
+ ->willReturn(Backend::CREATE_USER);
+
+ $plugin->expects($this->once())
+ ->method('createUser')
+ ->with(
+ $this->equalTo('user'),
+ $this->equalTo('password')
+ );
+
+ $pluginManager->register($plugin);
+ $pluginManager->createUser('user', 'password');
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage No plugin implements createUser in this LDAP Backend.
+ */
+ public function testCreateUserNotRegistered() {
+ $pluginManager = $this->getUserPluginManager();
+ $pluginManager->createUser('foo','bar');
+ }
+
+ public function testSetPassword() {
+ $pluginManager = $this->getUserPluginManager();
+
+ $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPUserPluginDummy')
+ ->setMethods(['respondToActions', 'setPassword'])
+ ->getMock();
+
+ $plugin->expects($this->any())
+ ->method('respondToActions')
+ ->willReturn(Backend::SET_PASSWORD);
+
+ $plugin->expects($this->once())
+ ->method('setPassword')
+ ->with(
+ $this->equalTo('user'),
+ $this->equalTo('password')
+ );
+
+ $pluginManager->register($plugin);
+ $pluginManager->setPassword('user', 'password');
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage No plugin implements setPassword in this LDAP Backend.
+ */
+ public function testSetPasswordNotRegistered() {
+ $pluginManager = $this->getUserPluginManager();
+ $pluginManager->setPassword('foo','bar');
+ }
+
+ public function testGetHome() {
+ $pluginManager = $this->getUserPluginManager();
+
+ $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPUserPluginDummy')
+ ->setMethods(['respondToActions', 'getHome'])
+ ->getMock();
+
+ $plugin->expects($this->any())
+ ->method('respondToActions')
+ ->willReturn(Backend::GET_HOME);
+
+ $plugin->expects($this->once())
+ ->method('getHome')
+ ->with(
+ $this->equalTo('uid')
+ );
+
+ $pluginManager->register($plugin);
+ $pluginManager->getHome('uid');
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage No plugin implements getHome in this LDAP Backend.
+ */
+ public function testGetHomeNotRegistered() {
+ $pluginManager = $this->getUserPluginManager();
+ $pluginManager->getHome('foo');
+ }
+
+ public function testGetDisplayName() {
+ $pluginManager = $this->getUserPluginManager();
+
+ $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPUserPluginDummy')
+ ->setMethods(['respondToActions', 'getDisplayName'])
+ ->getMock();
+
+ $plugin->expects($this->any())
+ ->method('respondToActions')
+ ->willReturn(Backend::GET_DISPLAYNAME);
+
+ $plugin->expects($this->once())
+ ->method('getDisplayName')
+ ->with(
+ $this->equalTo('uid')
+ );
+
+ $pluginManager->register($plugin);
+ $pluginManager->getDisplayName('uid');
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage No plugin implements getDisplayName in this LDAP Backend.
+ */
+ public function testGetDisplayNameNotRegistered() {
+ $pluginManager = $this->getUserPluginManager();
+ $pluginManager->getDisplayName('foo');
+ }
+
+ public function testSetDisplayName() {
+ $pluginManager = $this->getUserPluginManager();
+
+ $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPUserPluginDummy')
+ ->setMethods(['respondToActions', 'setDisplayName'])
+ ->getMock();
+
+ $plugin->expects($this->any())
+ ->method('respondToActions')
+ ->willReturn(Backend::SET_DISPLAYNAME);
+
+ $plugin->expects($this->once())
+ ->method('setDisplayName')
+ ->with(
+ $this->equalTo('user'),
+ $this->equalTo('password')
+ );
+
+ $pluginManager->register($plugin);
+ $pluginManager->setDisplayName('user', 'password');
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage No plugin implements setDisplayName in this LDAP Backend.
+ */
+ public function testSetDisplayNameNotRegistered() {
+ $pluginManager = $this->getUserPluginManager();
+ $pluginManager->setDisplayName('foo', 'bar');
+ }
+
+ public function testCanChangeAvatar() {
+ $pluginManager = $this->getUserPluginManager();
+
+ $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPUserPluginDummy')
+ ->setMethods(['respondToActions', 'canChangeAvatar'])
+ ->getMock();
+
+ $plugin->expects($this->any())
+ ->method('respondToActions')
+ ->willReturn(Backend::PROVIDE_AVATAR);
+
+ $plugin->expects($this->once())
+ ->method('canChangeAvatar')
+ ->with(
+ $this->equalTo('uid')
+ );
+
+ $pluginManager->register($plugin);
+ $pluginManager->canChangeAvatar('uid');
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage No plugin implements canChangeAvatar in this LDAP Backend.
+ */
+ public function testCanChangeAvatarNotRegistered() {
+ $pluginManager = $this->getUserPluginManager();
+ $pluginManager->canChangeAvatar('foo');
+ }
+
+ public function testCountUsers() {
+ $pluginManager = $this->getUserPluginManager();
+
+ $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPUserPluginDummy')
+ ->setMethods(['respondToActions', 'countUsers'])
+ ->getMock();
+
+ $plugin->expects($this->any())
+ ->method('respondToActions')
+ ->willReturn(Backend::COUNT_USERS);
+
+ $plugin->expects($this->once())
+ ->method('countUsers');
+
+ $pluginManager->register($plugin);
+ $pluginManager->countUsers();
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage No plugin implements countUsers in this LDAP Backend.
+ */
+ public function testCountUsersNotRegistered() {
+ $pluginManager = $this->getUserPluginManager();
+ $pluginManager->countUsers();
+ }
+
+ public function testDeleteUser() {
+ $pluginManager = $this->getUserPluginManager();
+
+ $plugin = $this->getMockBuilder('OCA\User_LDAP\Tests\LDAPUserPluginDummy')
+ ->setMethods(['respondToActions', 'canDeleteUser','deleteUser'])
+ ->getMock();
+
+ $plugin->expects($this->any())
+ ->method('respondToActions')
+ ->willReturn(0);
+
+ $plugin->expects($this->any())
+ ->method('canDeleteUser')
+ ->willReturn(true);
+
+ $plugin->expects($this->once())
+ ->method('deleteUser')
+ ->with(
+ $this->equalTo('uid')
+ );
+
+ $this->assertFalse($pluginManager->canDeleteUser());
+ $pluginManager->register($plugin);
+ $this->assertTrue($pluginManager->canDeleteUser());
+ $pluginManager->deleteUser('uid');
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage No plugin implements deleteUser in this LDAP Backend.
+ */
+ public function testDeleteUserNotRegistered() {
+ $pluginManager = $this->getUserPluginManager();
+ $pluginManager->deleteUser('foo');
+ }
+}
diff --git a/apps/user_ldap/tests/User_LDAPTest.php b/apps/user_ldap/tests/User_LDAPTest.php
index 44bc55b4148..fbe9953bbb9 100644
--- a/apps/user_ldap/tests/User_LDAPTest.php
+++ b/apps/user_ldap/tests/User_LDAPTest.php
@@ -8,8 +8,10 @@
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin McCorkell <robin@mccorkell.me.uk>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Roger Szabo <roger.szabo@web.de>
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
*
* @license AGPL-3.0
*
@@ -29,6 +31,7 @@
namespace OCA\User_LDAP\Tests;
+use OC\User\Backend;
use OC\User\Session;
use OCA\User_LDAP\Access;
use OCA\User_LDAP\Connection;
@@ -119,6 +122,10 @@ class User_LDAPTest extends TestCase {
return $access;
}
+ private function getDefaultPluginManagerMock() {
+ return $this->getMockBuilder('\OCA\User_LDAP\UserPluginManager')->getMock();
+ }
+
private function prepareMockForUserExists(&$access) {
$access->expects($this->any())
->method('username2dn')
@@ -207,7 +214,8 @@ class User_LDAPTest extends TestCase {
$access = $this->getAccessMock();
$this->prepareAccessForCheckPassword($access);
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
\OC_User::useBackend($backend);
$result = $backend->checkPassword('roland', 'dt19');
@@ -218,7 +226,7 @@ class User_LDAPTest extends TestCase {
$access = $this->getAccessMock();
$this->prepareAccessForCheckPassword($access);
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
\OC_User::useBackend($backend);
$result = $backend->checkPassword('roland', 'wrong');
@@ -229,7 +237,7 @@ class User_LDAPTest extends TestCase {
$access = $this->getAccessMock();
$this->prepareAccessForCheckPassword($access);
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
\OC_User::useBackend($backend);
$result = $backend->checkPassword('mallory', 'evil');
@@ -244,7 +252,7 @@ class User_LDAPTest extends TestCase {
->method('username2dn')
->will($this->returnValue(false));
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
\OC_User::useBackend($backend);
$result = $backend->checkPassword('roland', 'dt19');
@@ -254,7 +262,7 @@ class User_LDAPTest extends TestCase {
public function testCheckPasswordPublicAPI() {
$access = $this->getAccessMock();
$this->prepareAccessForCheckPassword($access);
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
\OC_User::useBackend($backend);
$result = \OCP\User::checkPassword('roland', 'dt19');
@@ -264,7 +272,7 @@ class User_LDAPTest extends TestCase {
public function testCheckPasswordPublicAPIWrongPassword() {
$access = $this->getAccessMock();
$this->prepareAccessForCheckPassword($access);
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
\OC_User::useBackend($backend);
$result = \OCP\User::checkPassword('roland', 'wrong');
@@ -274,7 +282,7 @@ class User_LDAPTest extends TestCase {
public function testCheckPasswordPublicAPIWrongUser() {
$access = $this->getAccessMock();
$this->prepareAccessForCheckPassword($access);
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
\OC_User::useBackend($backend);
$result = \OCP\User::checkPassword('mallory', 'evil');
@@ -283,7 +291,7 @@ class User_LDAPTest extends TestCase {
public function testDeleteUserCancel() {
$access = $this->getAccessMock();
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$result = $backend->deleteUser('notme');
$this->assertFalse($result);
}
@@ -313,7 +321,7 @@ class User_LDAPTest extends TestCase {
->method('getOCName')
->willReturn($uid);
- $backend = new UserLDAP($access, $this->configMock, $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->configMock, $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$user = $this->createMock(IUser::class);
$user->expects($this->once())
@@ -326,6 +334,36 @@ class User_LDAPTest extends TestCase {
$this->assertSame($backend->getHome($uid), $home);
}
+ public function testDeleteUserWithPlugin() {
+ $pluginManager = $this->getMockBuilder('\OCA\User_LDAP\UserPluginManager')
+ ->setMethods(['canDeleteUser','deleteUser'])
+ ->getMock();
+
+ $pluginManager->expects($this->once())
+ ->method('canDeleteUser')
+ ->willReturn(true);
+
+ $pluginManager->expects($this->once())
+ ->method('deleteUser')
+ ->with('uid')
+ ->willReturn('result');
+
+ $access = $this->createMock(Access::class);
+ $config = $this->createMock(IConfig::class);
+ $noti = $this->createMock(INotificationManager::class);
+ $session = $this->createMock(Session::class);
+
+ $ldap = new User_LDAP(
+ $access,
+ $config,
+ $noti,
+ $session,
+ $pluginManager
+ );
+
+ $this->assertEquals($ldap->deleteUser('uid'),'result');
+ }
+
/**
* Prepares the Access mock for getUsers tests
* @param Access $access mock
@@ -381,7 +419,7 @@ class User_LDAPTest extends TestCase {
public function testGetUsersNoParam() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$result = $backend->getUsers();
$this->assertEquals(3, count($result));
@@ -390,7 +428,7 @@ class User_LDAPTest extends TestCase {
public function testGetUsersLimitOffset() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$result = $backend->getUsers('', 1, 2);
$this->assertEquals(1, count($result));
@@ -399,7 +437,7 @@ class User_LDAPTest extends TestCase {
public function testGetUsersLimitOffset2() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$result = $backend->getUsers('', 2, 1);
$this->assertEquals(2, count($result));
@@ -408,7 +446,7 @@ class User_LDAPTest extends TestCase {
public function testGetUsersSearchWithResult() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$result = $backend->getUsers('yo');
$this->assertEquals(2, count($result));
@@ -417,7 +455,7 @@ class User_LDAPTest extends TestCase {
public function testGetUsersSearchEmptyResult() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$result = $backend->getUsers('nix');
$this->assertEquals(0, count($result));
@@ -426,7 +464,7 @@ class User_LDAPTest extends TestCase {
public function testGetUsersViaAPINoParam() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
\OC_User::useBackend($backend);
$result = \OCP\User::getUsers();
@@ -436,7 +474,7 @@ class User_LDAPTest extends TestCase {
public function testGetUsersViaAPILimitOffset() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
\OC_User::useBackend($backend);
$result = \OCP\User::getUsers('', 1, 2);
@@ -446,7 +484,7 @@ class User_LDAPTest extends TestCase {
public function testGetUsersViaAPILimitOffset2() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
\OC_User::useBackend($backend);
$result = \OCP\User::getUsers('', 2, 1);
@@ -456,7 +494,7 @@ class User_LDAPTest extends TestCase {
public function testGetUsersViaAPISearchWithResult() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
\OC_User::useBackend($backend);
$result = \OCP\User::getUsers('yo');
@@ -466,7 +504,7 @@ class User_LDAPTest extends TestCase {
public function testGetUsersViaAPISearchEmptyResult() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
\OC_User::useBackend($backend);
$result = \OCP\User::getUsers('nix');
@@ -475,7 +513,7 @@ class User_LDAPTest extends TestCase {
public function testUserExists() {
$access = $this->getAccessMock();
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$this->prepareMockForUserExists($access);
$access->expects($this->any())
@@ -497,7 +535,7 @@ class User_LDAPTest extends TestCase {
*/
public function testUserExistsForDeleted() {
$access = $this->getAccessMock();
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$this->prepareMockForUserExists($access);
$access->expects($this->any())
@@ -515,7 +553,7 @@ class User_LDAPTest extends TestCase {
public function testUserExistsForNeverExisting() {
$access = $this->getAccessMock();
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$this->prepareMockForUserExists($access);
$access->expects($this->any())
@@ -534,7 +572,7 @@ class User_LDAPTest extends TestCase {
public function testUserExistsPublicAPI() {
$access = $this->getAccessMock();
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$this->prepareMockForUserExists($access);
\OC_User::useBackend($backend);
@@ -557,7 +595,7 @@ class User_LDAPTest extends TestCase {
*/
public function testUserExistsPublicAPIForDeleted() {
$access = $this->getAccessMock();
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$this->prepareMockForUserExists($access);
\OC_User::useBackend($backend);
@@ -576,7 +614,7 @@ class User_LDAPTest extends TestCase {
public function testUserExistsPublicAPIForNeverExisting() {
$access = $this->getAccessMock();
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$this->prepareMockForUserExists($access);
\OC_User::useBackend($backend);
@@ -596,7 +634,7 @@ class User_LDAPTest extends TestCase {
public function testDeleteUserExisting() {
$access = $this->getAccessMock();
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
//we do not support deleting existing users at all
$result = $backend->deleteUser('gunslinger');
@@ -607,7 +645,7 @@ class User_LDAPTest extends TestCase {
$access = $this->getAccessMock();
$config = $this->createMock(IConfig::class);
$noti = $this->createMock(INotificationManager::class);
- $backend = new UserLDAP($access, $config, $noti, $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $config, $noti, $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$this->prepareMockForUserExists($access);
$access->connection->expects($this->any())
@@ -643,7 +681,7 @@ class User_LDAPTest extends TestCase {
$access = $this->getAccessMock();
$config = $this->createMock(IConfig::class);
$noti = $this->createMock(INotificationManager::class);
- $backend = new UserLDAP($access, $config, $noti, $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $config, $noti, $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$this->prepareMockForUserExists($access);
$dataDir = \OC::$server->getConfig()->getSystemValue(
@@ -686,7 +724,7 @@ class User_LDAPTest extends TestCase {
*/
public function testGetHomeNoPath() {
$access = $this->getAccessMock();
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$this->prepareMockForUserExists($access);
$access->connection->expects($this->any())
@@ -719,7 +757,7 @@ class User_LDAPTest extends TestCase {
$uid = 'newyorker';
$access = $this->getAccessMock();
- $backend = new UserLDAP($access, $this->configMock, $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->configMock, $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$this->prepareMockForUserExists($access);
$access->connection->expects($this->any())
@@ -751,6 +789,43 @@ class User_LDAPTest extends TestCase {
$backend->getHome($uid);
}
+ public function testGetHomeWithPlugin() {
+ $pluginManager = $this->getMockBuilder('\OCA\User_LDAP\UserPluginManager')
+ ->setMethods(['implementsActions','getHome'])
+ ->getMock();
+
+ $pluginManager->expects($this->once())
+ ->method('implementsActions')
+ ->with(Backend::GET_HOME)
+ ->willReturn(true);
+
+ $pluginManager->expects($this->once())
+ ->method('getHome')
+ ->with('uid')
+ ->willReturn('result');
+
+ $access = $this->getAccessMock();
+ $config = $this->createMock(IConfig::class);
+ $noti = $this->createMock(INotificationManager::class);
+ $session = $this->createMock(Session::class);
+
+ $access->connection->expects($this->any())
+ ->method('getFromCache')
+ ->will($this->returnCallback(function($uid) {
+ return true;
+ }));
+
+ $ldap = new User_LDAP(
+ $access,
+ $config,
+ $noti,
+ $session,
+ $pluginManager
+ );
+
+ $this->assertEquals($ldap->getHome('uid'),'result');
+ }
+
private function prepareAccessForGetDisplayName(&$access) {
$access->connection->expects($this->any())
->method('__get')
@@ -792,7 +867,7 @@ class User_LDAPTest extends TestCase {
public function testGetDisplayName() {
$access = $this->getAccessMock();
$this->prepareAccessForGetDisplayName($access);
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$this->prepareMockForUserExists($access);
$access->connection->expects($this->any())
@@ -833,7 +908,7 @@ class User_LDAPTest extends TestCase {
}
}));
$this->prepareAccessForGetDisplayName($access);
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$this->prepareMockForUserExists($access);
$access->connection->expects($this->any())
@@ -853,6 +928,37 @@ class User_LDAPTest extends TestCase {
$this->assertEquals('newyorker', $result);
}
+ public function testGetDisplayNameWithPlugin() {
+ $pluginManager = $this->getMockBuilder('\OCA\User_LDAP\UserPluginManager')
+ ->setMethods(['implementsActions','getDisplayName'])
+ ->getMock();
+
+ $pluginManager->expects($this->once())
+ ->method('implementsActions')
+ ->with(Backend::GET_DISPLAYNAME)
+ ->willReturn(true);
+
+ $pluginManager->expects($this->once())
+ ->method('getDisplayName')
+ ->with('uid')
+ ->willReturn('result');
+
+ $access = $this->createMock(Access::class);
+ $config = $this->createMock(IConfig::class);
+ $noti = $this->createMock(INotificationManager::class);
+ $session = $this->createMock(Session::class);
+
+ $ldap = new User_LDAP(
+ $access,
+ $config,
+ $noti,
+ $session,
+ $pluginManager
+ );
+
+ $this->assertEquals($ldap->getDisplayName('uid'),'result');
+ }
+
//no test for getDisplayNames, because it just invokes getUsers and
//getDisplayName
@@ -863,7 +969,7 @@ class User_LDAPTest extends TestCase {
->method('countUsers')
->will($this->returnValue(5));
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$result = $backend->countUsers();
$this->assertEquals(5, $result);
@@ -876,12 +982,42 @@ class User_LDAPTest extends TestCase {
->method('countUsers')
->will($this->returnValue(false));
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$result = $backend->countUsers();
$this->assertFalse($result);
}
+ public function testCountUsersWithPlugin() {
+ $pluginManager = $this->getMockBuilder('\OCA\User_LDAP\UserPluginManager')
+ ->setMethods(['implementsActions','countUsers'])
+ ->getMock();
+
+ $pluginManager->expects($this->once())
+ ->method('implementsActions')
+ ->with(Backend::COUNT_USERS)
+ ->willReturn(true);
+
+ $pluginManager->expects($this->once())
+ ->method('countUsers')
+ ->willReturn(42);
+
+ $access = $this->createMock(Access::class);
+ $config = $this->createMock(IConfig::class);
+ $noti = $this->createMock(INotificationManager::class);
+ $session = $this->createMock(Session::class);
+
+ $ldap = new User_LDAP(
+ $access,
+ $config,
+ $noti,
+ $session,
+ $pluginManager
+ );
+
+ $this->assertEquals($ldap->countUsers(),42);
+ }
+
public function testLoginName2UserNameSuccess() {
$loginName = 'Alice';
$username = 'alice';
@@ -909,7 +1045,7 @@ class User_LDAPTest extends TestCase {
->method('writeToCache')
->with($this->equalTo('loginName2UserName-'.$loginName), $this->equalTo($username));
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$name = $backend->loginName2UserName($loginName);
$this->assertSame($username, $name);
@@ -938,7 +1074,7 @@ class User_LDAPTest extends TestCase {
->method('writeToCache')
->with($this->equalTo('loginName2UserName-'.$loginName), false);
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$name = $backend->loginName2UserName($loginName);
$this->assertSame(false, $name);
@@ -985,7 +1121,7 @@ class User_LDAPTest extends TestCase {
->method('getUserValue')
->willReturn(1);
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
$name = $backend->loginName2UserName($loginName);
$this->assertSame(false, $name);
@@ -1010,7 +1146,7 @@ class User_LDAPTest extends TestCase {
}
return null;
}));
-
+
$access->connection->expects($this->any())
->method('getFromCache')
->will($this->returnCallback(function($uid) {
@@ -1066,7 +1202,7 @@ class User_LDAPTest extends TestCase {
$access = $this->getAccessMock();
$this->prepareAccessForSetPassword($access);
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
\OC_User::useBackend($backend);
$this->assertTrue(\OC_User::setPassword('roland', 'dt'));
@@ -1076,7 +1212,7 @@ class User_LDAPTest extends TestCase {
$access = $this->getAccessMock();
$this->prepareAccessForSetPassword($access);
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
\OC_User::useBackend($backend);
$this->assertTrue(\OC_User::setPassword('roland', 'dt12234$'));
@@ -1086,7 +1222,7 @@ class User_LDAPTest extends TestCase {
$access = $this->getAccessMock();
$this->prepareAccessForSetPassword($access, false);
- $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+ $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class), $this->getDefaultPluginManagerMock());
\OC_User::useBackend($backend);
$this->assertFalse(\OC_User::setPassword('roland', 'dt12234$'));
@@ -1111,7 +1247,8 @@ class User_LDAPTest extends TestCase {
$access,
$config,
$noti,
- $userSession
+ $userSession,
+ $this->getDefaultPluginManagerMock()
);
$ldap->setPassword('NotExistingUser', 'Password');
}
@@ -1136,8 +1273,185 @@ class User_LDAPTest extends TestCase {
$access,
$config,
$noti,
- $userSession
+ $userSession,
+ $this->getDefaultPluginManagerMock()
);
$this->assertFalse($ldap->setPassword('NotExistingUser', 'Password'));
}
+
+ public function testSetPasswordWithPlugin() {
+ $pluginManager = $this->getMockBuilder('\OCA\User_LDAP\UserPluginManager')
+ ->setMethods(['implementsActions','setPassword'])
+ ->getMock();
+
+ $pluginManager->expects($this->once())
+ ->method('implementsActions')
+ ->with(Backend::SET_PASSWORD)
+ ->willReturn(true);
+
+ $pluginManager->expects($this->once())
+ ->method('setPassword')
+ ->with('uid','password')
+ ->willReturn('result');
+
+ $access = $this->createMock(Access::class);
+ $config = $this->createMock(IConfig::class);
+ $noti = $this->createMock(INotificationManager::class);
+ $session = $this->createMock(Session::class);
+
+ $ldap = new User_LDAP(
+ $access,
+ $config,
+ $noti,
+ $session,
+ $pluginManager
+ );
+
+ $this->assertEquals($ldap->setPassword('uid', 'password'),'result');
+ }
+
+ public function testCanChangeAvatarWithPlugin() {
+ $pluginManager = $this->getMockBuilder('\OCA\User_LDAP\UserPluginManager')
+ ->setMethods(['implementsActions','canChangeAvatar'])
+ ->getMock();
+
+ $pluginManager->expects($this->once())
+ ->method('implementsActions')
+ ->with(Backend::PROVIDE_AVATAR)
+ ->willReturn(true);
+
+ $pluginManager->expects($this->once())
+ ->method('canChangeAvatar')
+ ->with('uid')
+ ->willReturn('result');
+
+ $access = $this->createMock(Access::class);
+ $config = $this->createMock(IConfig::class);
+ $noti = $this->createMock(INotificationManager::class);
+ $session = $this->createMock(Session::class);
+
+ $ldap = new User_LDAP(
+ $access,
+ $config,
+ $noti,
+ $session,
+ $pluginManager
+ );
+
+ $this->assertEquals($ldap->canChangeAvatar('uid'),'result');
+ }
+
+ public function testSetDisplayNameWithPlugin() {
+ $pluginManager = $this->getMockBuilder('\OCA\User_LDAP\UserPluginManager')
+ ->setMethods(['implementsActions','setDisplayName'])
+ ->getMock();
+
+ $pluginManager->expects($this->once())
+ ->method('implementsActions')
+ ->with(Backend::SET_DISPLAYNAME)
+ ->willReturn(true);
+
+ $pluginManager->expects($this->once())
+ ->method('setDisplayName')
+ ->with('uid','displayName')
+ ->willReturn('result');
+
+ $access = $this->createMock(Access::class);
+ $config = $this->createMock(IConfig::class);
+ $noti = $this->createMock(INotificationManager::class);
+ $session = $this->createMock(Session::class);
+
+ $ldap = new User_LDAP(
+ $access,
+ $config,
+ $noti,
+ $session,
+ $pluginManager
+ );
+
+ $this->assertEquals($ldap->setDisplayName('uid', 'displayName'),'result');
+ }
+
+ public function testSetDisplayNameFailing() {
+ $pluginManager = $this->getMockBuilder('\OCA\User_LDAP\UserPluginManager')
+ ->setMethods(['implementsActions','setDisplayName'])
+ ->getMock();
+
+ $pluginManager->expects($this->once())
+ ->method('implementsActions')
+ ->with(Backend::SET_DISPLAYNAME)
+ ->willReturn(false);
+
+ $access = $this->createMock(Access::class);
+ $config = $this->createMock(IConfig::class);
+ $noti = $this->createMock(INotificationManager::class);
+ $session = $this->createMock(Session::class);
+
+ $ldap = new User_LDAP(
+ $access,
+ $config,
+ $noti,
+ $session,
+ $pluginManager
+ );
+
+ $this->assertFalse($ldap->setDisplayName('uid', 'displayName'));
+ }
+
+ public function testCreateUserWithPlugin() {
+ $pluginManager = $this->getMockBuilder('\OCA\User_LDAP\UserPluginManager')
+ ->setMethods(['implementsActions','createUser'])
+ ->getMock();
+
+ $pluginManager->expects($this->once())
+ ->method('implementsActions')
+ ->with(Backend::CREATE_USER)
+ ->willReturn(true);
+
+ $pluginManager->expects($this->once())
+ ->method('createUser')
+ ->with('uid','password')
+ ->willReturn('result');
+
+ $access = $this->createMock(Access::class);
+ $config = $this->createMock(IConfig::class);
+ $noti = $this->createMock(INotificationManager::class);
+ $session = $this->createMock(Session::class);
+
+ $ldap = new User_LDAP(
+ $access,
+ $config,
+ $noti,
+ $session,
+ $pluginManager
+ );
+
+ $this->assertEquals($ldap->createUser('uid', 'password'),'result');
+ }
+
+ public function testCreateUserFailing() {
+ $pluginManager = $this->getMockBuilder('\OCA\User_LDAP\UserPluginManager')
+ ->setMethods(['implementsActions', 'createUser'])
+ ->getMock();
+
+ $pluginManager->expects($this->once())
+ ->method('implementsActions')
+ ->with(Backend::CREATE_USER)
+ ->willReturn(false);
+
+ $access = $this->createMock(Access::class);
+ $config = $this->createMock(IConfig::class);
+ $noti = $this->createMock(INotificationManager::class);
+ $session = $this->createMock(Session::class);
+
+ $ldap = new User_LDAP(
+ $access,
+ $config,
+ $noti,
+ $session,
+ $pluginManager
+ );
+
+ $this->assertFalse($ldap->createUser('uid', 'password'));
+ }
}
diff --git a/apps/user_ldap/tests/User_ProxyTest.php b/apps/user_ldap/tests/User_ProxyTest.php
index 68b1e4428ca..126391401e5 100644
--- a/apps/user_ldap/tests/User_ProxyTest.php
+++ b/apps/user_ldap/tests/User_ProxyTest.php
@@ -2,6 +2,11 @@
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Roger Szabo <roger.szabo@web.de>
+ * @author Vinicius Cubas Brand <vinicius@eita.org.br>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
@@ -21,8 +26,10 @@
namespace OCA\User_LDAP\Tests;
+use OCA\User_LDAP\ILDAPUserPlugin;
use OCA\User_LDAP\ILDAPWrapper;
use OCA\User_LDAP\User_Proxy;
+use OCA\User_LDAP\UserPluginManager;
use OCP\IConfig;
use OCP\IUserSession;
use OCP\Notification\IManager as INotificationManager;
@@ -39,6 +46,8 @@ class User_ProxyTest extends TestCase {
private $userSession;
/** @var User_Proxy|\PHPUnit_Framework_MockObject_MockObject */
private $proxy;
+ /** @var UserPluginManager|\PHPUnit_Framework_MockObject_MockObject */
+ private $userPluginManager;
public function setUp() {
parent::setUp();
@@ -47,6 +56,7 @@ class User_ProxyTest extends TestCase {
$this->config = $this->createMock(IConfig::class);
$this->notificationManager = $this->createMock(INotificationManager::class);
$this->userSession = $this->createMock(IUserSession::class);
+ $this->userPluginManager = $this->createMock(UserPluginManager::class);
$this->proxy = $this->getMockBuilder(User_Proxy::class)
->setConstructorArgs([
[],
@@ -54,6 +64,7 @@ class User_ProxyTest extends TestCase {
$this->config,
$this->notificationManager,
$this->userSession,
+ $this->userPluginManager
])
->setMethods(['handleRequest'])
->getMock();
@@ -68,4 +79,23 @@ class User_ProxyTest extends TestCase {
$this->assertTrue($this->proxy->setPassword('MyUid', 'MyPassword'));
}
+
+ public function testSetDisplayName() {
+ $this->proxy
+ ->expects($this->once())
+ ->method('handleRequest')
+ ->with('MyUid', 'setDisplayName', ['MyUid', 'MyPassword'])
+ ->willReturn(true);
+
+ $this->assertTrue($this->proxy->setDisplayName('MyUid', 'MyPassword')); }
+
+ public function testCreateUser() {
+ $this->proxy
+ ->expects($this->once())
+ ->method('handleRequest')
+ ->with('MyUid', 'createUser', ['MyUid', 'MyPassword'])
+ ->willReturn(true);
+
+ $this->assertTrue($this->proxy->createUser('MyUid', 'MyPassword'));
+ }
}
diff --git a/apps/user_ldap/tests/WizardTest.php b/apps/user_ldap/tests/WizardTest.php
index 545d112338b..e7717aad37c 100644
--- a/apps/user_ldap/tests/WizardTest.php
+++ b/apps/user_ldap/tests/WizardTest.php
@@ -5,7 +5,9 @@
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Victor Dubiniuk <dubiniuk@owncloud.com>
* @author Viktor Szépe <viktor@szepe.net>
*
* @license AGPL-3.0
diff --git a/apps/workflowengine/l10n/es_DO.js b/apps/workflowengine/l10n/es_DO.js
new file mode 100644
index 00000000000..a67dbc8472f
--- /dev/null
+++ b/apps/workflowengine/l10n/es_DO.js
@@ -0,0 +1,73 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "Saved" : "Guardado",
+ "Saving failed:" : "Falla al guardar:",
+ "File MIME type" : "Tipo MIME del archivo",
+ "is" : "es",
+ "is not" : "no es",
+ "matches" : "coincide",
+ "does not match" : "No coincide",
+ "Example: {placeholder}" : "Ejemplo: {placeholder}",
+ "File size (upload)" : "Tamaño del archivo (carga)",
+ "less" : "menos",
+ "less or equals" : "menos o igual",
+ "greater or equals" : "mayor o igual",
+ "greater" : "mayor",
+ "File system tag" : "Etiqueta del sistema de archivos",
+ "is tagged with" : "está etiquetado con",
+ "is not tagged with" : "no está etiquetado con",
+ "Select tag…" : "Seleccionar etiqueta...",
+ "Request remote address" : "Solicitar dirección remota",
+ "matches IPv4" : "coincide con IPv4",
+ "does not match IPv4" : "no coincide con IPv4",
+ "matches IPv6" : "coincide con IPv6",
+ "does not match IPv6" : "no coincide con IPv6",
+ "Request time" : "Tiempo de la solicitud",
+ "between" : "entre",
+ "not between" : "no entre",
+ "Start" : "Inicio",
+ "End" : "Fin",
+ "Select timezone…" : "Selecciona la zona horaria...",
+ "Request URL" : "Solicitar URL",
+ "Predefined URLs" : "URLs predefinidos",
+ "Files WebDAV" : "Archivos WebDAV",
+ "Request user agent" : "Solicitar agente de usuario",
+ "Sync clients" : "Sincronizar clientes",
+ "Android client" : "Cliente Android",
+ "iOS client" : "Cliente iOS",
+ "Desktop client" : "Cliente de escritorio",
+ "User group membership" : "Membresia al grupo de usuarios",
+ "is member of" : "es miembro de",
+ "is not member of" : "no es miembro de",
+ "The given operator is invalid" : "El operador indicado es inválido",
+ "The given regular expression is invalid" : "La expresión regular indicada es inválida",
+ "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
+ "The given tag id is invalid" : "El id de la etiqueta es inválido",
+ "The given IP range is invalid" : "El rango de IP's es inválido",
+ "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
+ "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
+ "The given time span is invalid" : "El espacio de tiempo dado es inválido",
+ "The given start time is invalid" : "El tiempo inicial dado no es válido",
+ "The given end time is invalid" : "El tiempo final dado no es válido",
+ "The given group does not exist" : "El grupo dado no existe",
+ "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
+ "Operation #%s does not exist" : "La operación #%s no existe",
+ "Operation %s does not exist" : "La operación %s no existe",
+ "Operation %s is invalid" : "La operación %s es inválida",
+ "Check %s does not exist" : "La validación %s no existe",
+ "Check %s is invalid" : "La validación %s no es inválida",
+ "Check #%s does not exist" : "La validación #%s no existe",
+ "Workflow" : "Flujo de trabajo",
+ "Open documentation" : "Abrir la documentación",
+ "Add rule group" : "Agregar regla de grupo",
+ "Short rule description" : "Descripción corta de la regla",
+ "Add rule" : "Agregar regla",
+ "Reset" : "Restablecer",
+ "Save" : "Guardar",
+ "Saving…" : "Guardando...",
+ "Loading…" : "Cargando...",
+ "Successfully saved" : "Guardado exitosamente",
+ "File mime type" : "Tipo mime del archivo"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/es_DO.json b/apps/workflowengine/l10n/es_DO.json
new file mode 100644
index 00000000000..1ae425f4e19
--- /dev/null
+++ b/apps/workflowengine/l10n/es_DO.json
@@ -0,0 +1,71 @@
+{ "translations": {
+ "Saved" : "Guardado",
+ "Saving failed:" : "Falla al guardar:",
+ "File MIME type" : "Tipo MIME del archivo",
+ "is" : "es",
+ "is not" : "no es",
+ "matches" : "coincide",
+ "does not match" : "No coincide",
+ "Example: {placeholder}" : "Ejemplo: {placeholder}",
+ "File size (upload)" : "Tamaño del archivo (carga)",
+ "less" : "menos",
+ "less or equals" : "menos o igual",
+ "greater or equals" : "mayor o igual",
+ "greater" : "mayor",
+ "File system tag" : "Etiqueta del sistema de archivos",
+ "is tagged with" : "está etiquetado con",
+ "is not tagged with" : "no está etiquetado con",
+ "Select tag…" : "Seleccionar etiqueta...",
+ "Request remote address" : "Solicitar dirección remota",
+ "matches IPv4" : "coincide con IPv4",
+ "does not match IPv4" : "no coincide con IPv4",
+ "matches IPv6" : "coincide con IPv6",
+ "does not match IPv6" : "no coincide con IPv6",
+ "Request time" : "Tiempo de la solicitud",
+ "between" : "entre",
+ "not between" : "no entre",
+ "Start" : "Inicio",
+ "End" : "Fin",
+ "Select timezone…" : "Selecciona la zona horaria...",
+ "Request URL" : "Solicitar URL",
+ "Predefined URLs" : "URLs predefinidos",
+ "Files WebDAV" : "Archivos WebDAV",
+ "Request user agent" : "Solicitar agente de usuario",
+ "Sync clients" : "Sincronizar clientes",
+ "Android client" : "Cliente Android",
+ "iOS client" : "Cliente iOS",
+ "Desktop client" : "Cliente de escritorio",
+ "User group membership" : "Membresia al grupo de usuarios",
+ "is member of" : "es miembro de",
+ "is not member of" : "no es miembro de",
+ "The given operator is invalid" : "El operador indicado es inválido",
+ "The given regular expression is invalid" : "La expresión regular indicada es inválida",
+ "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
+ "The given tag id is invalid" : "El id de la etiqueta es inválido",
+ "The given IP range is invalid" : "El rango de IP's es inválido",
+ "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
+ "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
+ "The given time span is invalid" : "El espacio de tiempo dado es inválido",
+ "The given start time is invalid" : "El tiempo inicial dado no es válido",
+ "The given end time is invalid" : "El tiempo final dado no es válido",
+ "The given group does not exist" : "El grupo dado no existe",
+ "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
+ "Operation #%s does not exist" : "La operación #%s no existe",
+ "Operation %s does not exist" : "La operación %s no existe",
+ "Operation %s is invalid" : "La operación %s es inválida",
+ "Check %s does not exist" : "La validación %s no existe",
+ "Check %s is invalid" : "La validación %s no es inválida",
+ "Check #%s does not exist" : "La validación #%s no existe",
+ "Workflow" : "Flujo de trabajo",
+ "Open documentation" : "Abrir la documentación",
+ "Add rule group" : "Agregar regla de grupo",
+ "Short rule description" : "Descripción corta de la regla",
+ "Add rule" : "Agregar regla",
+ "Reset" : "Restablecer",
+ "Save" : "Guardar",
+ "Saving…" : "Guardando...",
+ "Loading…" : "Cargando...",
+ "Successfully saved" : "Guardado exitosamente",
+ "File mime type" : "Tipo mime del archivo"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/es_EC.js b/apps/workflowengine/l10n/es_EC.js
new file mode 100644
index 00000000000..a67dbc8472f
--- /dev/null
+++ b/apps/workflowengine/l10n/es_EC.js
@@ -0,0 +1,73 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "Saved" : "Guardado",
+ "Saving failed:" : "Falla al guardar:",
+ "File MIME type" : "Tipo MIME del archivo",
+ "is" : "es",
+ "is not" : "no es",
+ "matches" : "coincide",
+ "does not match" : "No coincide",
+ "Example: {placeholder}" : "Ejemplo: {placeholder}",
+ "File size (upload)" : "Tamaño del archivo (carga)",
+ "less" : "menos",
+ "less or equals" : "menos o igual",
+ "greater or equals" : "mayor o igual",
+ "greater" : "mayor",
+ "File system tag" : "Etiqueta del sistema de archivos",
+ "is tagged with" : "está etiquetado con",
+ "is not tagged with" : "no está etiquetado con",
+ "Select tag…" : "Seleccionar etiqueta...",
+ "Request remote address" : "Solicitar dirección remota",
+ "matches IPv4" : "coincide con IPv4",
+ "does not match IPv4" : "no coincide con IPv4",
+ "matches IPv6" : "coincide con IPv6",
+ "does not match IPv6" : "no coincide con IPv6",
+ "Request time" : "Tiempo de la solicitud",
+ "between" : "entre",
+ "not between" : "no entre",
+ "Start" : "Inicio",
+ "End" : "Fin",
+ "Select timezone…" : "Selecciona la zona horaria...",
+ "Request URL" : "Solicitar URL",
+ "Predefined URLs" : "URLs predefinidos",
+ "Files WebDAV" : "Archivos WebDAV",
+ "Request user agent" : "Solicitar agente de usuario",
+ "Sync clients" : "Sincronizar clientes",
+ "Android client" : "Cliente Android",
+ "iOS client" : "Cliente iOS",
+ "Desktop client" : "Cliente de escritorio",
+ "User group membership" : "Membresia al grupo de usuarios",
+ "is member of" : "es miembro de",
+ "is not member of" : "no es miembro de",
+ "The given operator is invalid" : "El operador indicado es inválido",
+ "The given regular expression is invalid" : "La expresión regular indicada es inválida",
+ "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
+ "The given tag id is invalid" : "El id de la etiqueta es inválido",
+ "The given IP range is invalid" : "El rango de IP's es inválido",
+ "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
+ "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
+ "The given time span is invalid" : "El espacio de tiempo dado es inválido",
+ "The given start time is invalid" : "El tiempo inicial dado no es válido",
+ "The given end time is invalid" : "El tiempo final dado no es válido",
+ "The given group does not exist" : "El grupo dado no existe",
+ "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
+ "Operation #%s does not exist" : "La operación #%s no existe",
+ "Operation %s does not exist" : "La operación %s no existe",
+ "Operation %s is invalid" : "La operación %s es inválida",
+ "Check %s does not exist" : "La validación %s no existe",
+ "Check %s is invalid" : "La validación %s no es inválida",
+ "Check #%s does not exist" : "La validación #%s no existe",
+ "Workflow" : "Flujo de trabajo",
+ "Open documentation" : "Abrir la documentación",
+ "Add rule group" : "Agregar regla de grupo",
+ "Short rule description" : "Descripción corta de la regla",
+ "Add rule" : "Agregar regla",
+ "Reset" : "Restablecer",
+ "Save" : "Guardar",
+ "Saving…" : "Guardando...",
+ "Loading…" : "Cargando...",
+ "Successfully saved" : "Guardado exitosamente",
+ "File mime type" : "Tipo mime del archivo"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/es_EC.json b/apps/workflowengine/l10n/es_EC.json
new file mode 100644
index 00000000000..1ae425f4e19
--- /dev/null
+++ b/apps/workflowengine/l10n/es_EC.json
@@ -0,0 +1,71 @@
+{ "translations": {
+ "Saved" : "Guardado",
+ "Saving failed:" : "Falla al guardar:",
+ "File MIME type" : "Tipo MIME del archivo",
+ "is" : "es",
+ "is not" : "no es",
+ "matches" : "coincide",
+ "does not match" : "No coincide",
+ "Example: {placeholder}" : "Ejemplo: {placeholder}",
+ "File size (upload)" : "Tamaño del archivo (carga)",
+ "less" : "menos",
+ "less or equals" : "menos o igual",
+ "greater or equals" : "mayor o igual",
+ "greater" : "mayor",
+ "File system tag" : "Etiqueta del sistema de archivos",
+ "is tagged with" : "está etiquetado con",
+ "is not tagged with" : "no está etiquetado con",
+ "Select tag…" : "Seleccionar etiqueta...",
+ "Request remote address" : "Solicitar dirección remota",
+ "matches IPv4" : "coincide con IPv4",
+ "does not match IPv4" : "no coincide con IPv4",
+ "matches IPv6" : "coincide con IPv6",
+ "does not match IPv6" : "no coincide con IPv6",
+ "Request time" : "Tiempo de la solicitud",
+ "between" : "entre",
+ "not between" : "no entre",
+ "Start" : "Inicio",
+ "End" : "Fin",
+ "Select timezone…" : "Selecciona la zona horaria...",
+ "Request URL" : "Solicitar URL",
+ "Predefined URLs" : "URLs predefinidos",
+ "Files WebDAV" : "Archivos WebDAV",
+ "Request user agent" : "Solicitar agente de usuario",
+ "Sync clients" : "Sincronizar clientes",
+ "Android client" : "Cliente Android",
+ "iOS client" : "Cliente iOS",
+ "Desktop client" : "Cliente de escritorio",
+ "User group membership" : "Membresia al grupo de usuarios",
+ "is member of" : "es miembro de",
+ "is not member of" : "no es miembro de",
+ "The given operator is invalid" : "El operador indicado es inválido",
+ "The given regular expression is invalid" : "La expresión regular indicada es inválida",
+ "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
+ "The given tag id is invalid" : "El id de la etiqueta es inválido",
+ "The given IP range is invalid" : "El rango de IP's es inválido",
+ "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
+ "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
+ "The given time span is invalid" : "El espacio de tiempo dado es inválido",
+ "The given start time is invalid" : "El tiempo inicial dado no es válido",
+ "The given end time is invalid" : "El tiempo final dado no es válido",
+ "The given group does not exist" : "El grupo dado no existe",
+ "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
+ "Operation #%s does not exist" : "La operación #%s no existe",
+ "Operation %s does not exist" : "La operación %s no existe",
+ "Operation %s is invalid" : "La operación %s es inválida",
+ "Check %s does not exist" : "La validación %s no existe",
+ "Check %s is invalid" : "La validación %s no es inválida",
+ "Check #%s does not exist" : "La validación #%s no existe",
+ "Workflow" : "Flujo de trabajo",
+ "Open documentation" : "Abrir la documentación",
+ "Add rule group" : "Agregar regla de grupo",
+ "Short rule description" : "Descripción corta de la regla",
+ "Add rule" : "Agregar regla",
+ "Reset" : "Restablecer",
+ "Save" : "Guardar",
+ "Saving…" : "Guardando...",
+ "Loading…" : "Cargando...",
+ "Successfully saved" : "Guardado exitosamente",
+ "File mime type" : "Tipo mime del archivo"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file