Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
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/composer/autoload.php7
-rw-r--r--apps/admin_audit/composer/composer.json13
-rw-r--r--apps/admin_audit/composer/composer/ClassLoader.php445
-rw-r--r--apps/admin_audit/composer/composer/LICENSE21
-rw-r--r--apps/admin_audit/composer/composer/autoload_classmap.php20
-rw-r--r--apps/admin_audit/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/admin_audit/composer/composer/autoload_psr4.php10
-rw-r--r--apps/admin_audit/composer/composer/autoload_real.php52
-rw-r--r--apps/admin_audit/composer/composer/autoload_static.php46
-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/.bowerrc3
-rw-r--r--apps/comments/appinfo/app.php3
-rw-r--r--apps/comments/appinfo/info.xml6
-rw-r--r--apps/comments/appinfo/routes.php5
-rw-r--r--apps/comments/composer/autoload.php7
-rw-r--r--apps/comments/composer/composer.json13
-rw-r--r--apps/comments/composer/composer/ClassLoader.php445
-rw-r--r--apps/comments/composer/composer/LICENSE21
-rw-r--r--apps/comments/composer/composer/autoload_classmap.php20
-rw-r--r--apps/comments/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/comments/composer/composer/autoload_psr4.php10
-rw-r--r--apps/comments/composer/composer/autoload_real.php52
-rw-r--r--apps/comments/composer/composer/autoload_static.php46
-rw-r--r--apps/comments/css/autocomplete.scss77
-rw-r--r--apps/comments/css/comments.css21
-rw-r--r--apps/comments/js/commentstabview.js310
-rw-r--r--apps/comments/js/merged.json4
-rw-r--r--apps/comments/js/vendor/At.js/dist/js/jquery.atwho.min.js1
-rw-r--r--apps/comments/js/vendor/Caret.js/dist/jquery.caret.min.js2
-rw-r--r--apps/comments/l10n/es_CO.js34
-rw-r--r--apps/comments/l10n/es_CO.json32
-rw-r--r--apps/comments/l10n/es_CR.js34
-rw-r--r--apps/comments/l10n/es_CR.json32
-rw-r--r--apps/comments/l10n/es_DO.js34
-rw-r--r--apps/comments/l10n/es_DO.json32
-rw-r--r--apps/comments/l10n/es_EC.js34
-rw-r--r--apps/comments/l10n/es_EC.json32
-rw-r--r--apps/comments/l10n/ka_GE.js29
-rw-r--r--apps/comments/l10n/ka_GE.json29
-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.php8
-rw-r--r--apps/comments/lib/Activity/Setting.php2
-rw-r--r--apps/comments/lib/AppInfo/Application.php25
-rw-r--r--apps/comments/lib/Collaboration/CommentersSorter.php115
-rw-r--r--apps/comments/lib/Controller/Notifications.php20
-rw-r--r--apps/comments/lib/EventHandler.php1
-rw-r--r--apps/comments/lib/JSSettingsHelper.php45
-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/Collaboration/CommentersSorterTest.php160
-rw-r--r--apps/comments/tests/Unit/Controller/NotificationsTest.php40
-rw-r--r--apps/comments/tests/Unit/JSSettingsHelperTest.php73
-rw-r--r--apps/comments/tests/Unit/Notification/ListenerTest.php21
-rw-r--r--apps/comments/tests/Unit/Notification/NotifierTest.php1
-rw-r--r--apps/comments/tests/js/commentstabviewSpec.js15
-rw-r--r--apps/dav/appinfo/app.php1
-rw-r--r--apps/dav/appinfo/info.xml6
-rw-r--r--apps/dav/appinfo/v1/caldav.php9
-rw-r--r--apps/dav/appinfo/v1/carddav.php4
-rw-r--r--apps/dav/appinfo/v1/webdav.php4
-rw-r--r--apps/dav/appinfo/v2/remote.php2
-rw-r--r--apps/dav/composer/autoload.php7
-rw-r--r--apps/dav/composer/composer.json13
-rw-r--r--apps/dav/composer/composer/ClassLoader.php445
-rw-r--r--apps/dav/composer/composer/LICENSE21
-rw-r--r--apps/dav/composer/composer/autoload_classmap.php145
-rw-r--r--apps/dav/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/dav/composer/composer/autoload_psr4.php10
-rw-r--r--apps/dav/composer/composer/autoload_real.php52
-rw-r--r--apps/dav/composer/composer/autoload_static.php171
-rw-r--r--apps/dav/js/settings-admin-caldav.js28
-rw-r--r--apps/dav/l10n/bg.js2
-rw-r--r--apps/dav/l10n/bg.json2
-rw-r--r--apps/dav/l10n/ca.js2
-rw-r--r--apps/dav/l10n/ca.json2
-rw-r--r--apps/dav/l10n/cs.js2
-rw-r--r--apps/dav/l10n/cs.json2
-rw-r--r--apps/dav/l10n/da.js7
-rw-r--r--apps/dav/l10n/da.json7
-rw-r--r--apps/dav/l10n/de.js17
-rw-r--r--apps/dav/l10n/de.json17
-rw-r--r--apps/dav/l10n/de_DE.js17
-rw-r--r--apps/dav/l10n/de_DE.json17
-rw-r--r--apps/dav/l10n/el.js2
-rw-r--r--apps/dav/l10n/el.json2
-rw-r--r--apps/dav/l10n/en_GB.js17
-rw-r--r--apps/dav/l10n/en_GB.json17
-rw-r--r--apps/dav/l10n/es.js17
-rw-r--r--apps/dav/l10n/es.json17
-rw-r--r--apps/dav/l10n/es_AR.js2
-rw-r--r--apps/dav/l10n/es_AR.json2
-rw-r--r--apps/dav/l10n/es_CO.js52
-rw-r--r--apps/dav/l10n/es_CO.json50
-rw-r--r--apps/dav/l10n/es_CR.js52
-rw-r--r--apps/dav/l10n/es_CR.json50
-rw-r--r--apps/dav/l10n/es_DO.js52
-rw-r--r--apps/dav/l10n/es_DO.json50
-rw-r--r--apps/dav/l10n/es_EC.js52
-rw-r--r--apps/dav/l10n/es_EC.json50
-rw-r--r--apps/dav/l10n/es_MX.js7
-rw-r--r--apps/dav/l10n/es_MX.json7
-rw-r--r--apps/dav/l10n/fi.js7
-rw-r--r--apps/dav/l10n/fi.json7
-rw-r--r--apps/dav/l10n/fr.js14
-rw-r--r--apps/dav/l10n/fr.json14
-rw-r--r--apps/dav/l10n/hu.js7
-rw-r--r--apps/dav/l10n/hu.json7
-rw-r--r--apps/dav/l10n/is.js7
-rw-r--r--apps/dav/l10n/is.json7
-rw-r--r--apps/dav/l10n/it.js17
-rw-r--r--apps/dav/l10n/it.json17
-rw-r--r--apps/dav/l10n/ka_GE.js62
-rw-r--r--apps/dav/l10n/ka_GE.json60
-rw-r--r--apps/dav/l10n/ko.js2
-rw-r--r--apps/dav/l10n/ko.json2
-rw-r--r--apps/dav/l10n/lt_LT.js2
-rw-r--r--apps/dav/l10n/lt_LT.json2
-rw-r--r--apps/dav/l10n/nb.js6
-rw-r--r--apps/dav/l10n/nb.json6
-rw-r--r--apps/dav/l10n/nl.js17
-rw-r--r--apps/dav/l10n/nl.json17
-rw-r--r--apps/dav/l10n/pl.js7
-rw-r--r--apps/dav/l10n/pl.json7
-rw-r--r--apps/dav/l10n/pt_BR.js17
-rw-r--r--apps/dav/l10n/pt_BR.json17
-rw-r--r--apps/dav/l10n/ro.js2
-rw-r--r--apps/dav/l10n/ro.json2
-rw-r--r--apps/dav/l10n/ru.js7
-rw-r--r--apps/dav/l10n/ru.json7
-rw-r--r--apps/dav/l10n/sk.js7
-rw-r--r--apps/dav/l10n/sk.json7
-rw-r--r--apps/dav/l10n/sq.js2
-rw-r--r--apps/dav/l10n/sq.json2
-rw-r--r--apps/dav/l10n/sr.js7
-rw-r--r--apps/dav/l10n/sr.json7
-rw-r--r--apps/dav/l10n/sv.js2
-rw-r--r--apps/dav/l10n/sv.json2
-rw-r--r--apps/dav/l10n/tr.js17
-rw-r--r--apps/dav/l10n/tr.json17
-rw-r--r--apps/dav/l10n/zh_CN.js2
-rw-r--r--apps/dav/l10n/zh_CN.json2
-rw-r--r--apps/dav/lib/AppInfo/Application.php5
-rw-r--r--apps/dav/lib/AppInfo/PluginManager.php172
-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.php69
-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.php30
-rw-r--r--apps/dav/lib/CalDAV/Activity/Provider/Calendar.php62
-rw-r--r--apps/dav/lib/CalDAV/Activity/Provider/Event.php32
-rw-r--r--apps/dav/lib/CalDAV/Activity/Provider/Todo.php36
-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.php25
-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.php54
-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.php12
-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.php4
-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.php21
-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.php25
-rw-r--r--apps/dav/lib/DAV/Sharing/Plugin.php1
-rw-r--r--apps/dav/lib/DAV/SystemPrincipalBackend.php3
-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/RootCollection.php19
-rw-r--r--apps/dav/lib/Server.php28
-rw-r--r--apps/dav/lib/Settings/CalDAVSettings.php68
-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/templates/settings-admin-caldav.php40
-rw-r--r--apps/dav/tests/unit/AppInfo/PluginManagerTest.php105
-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.php (renamed from apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php)17
-rw-r--r--apps/dav/tests/unit/CalDAV/Activity/BackendTest.php10
-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.php38
-rw-r--r--apps/dav/tests/unit/CalDAV/Activity/Setting/GenericTest.php2
-rw-r--r--apps/dav/tests/unit/CalDAV/CalDavBackendTest.php118
-rw-r--r--apps/dav/tests/unit/CalDAV/CalendarTest.php185
-rw-r--r--apps/dav/tests/unit/CalDAV/PluginTest.php2
-rw-r--r--apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php34
-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.php29
-rw-r--r--apps/dav/tests/unit/CalDAV/Schedule/IMipPluginTest.php105
-rw-r--r--apps/dav/tests/unit/CalDAV/Schedule/PluginTest.php2
-rw-r--r--apps/dav/tests/unit/CalDAV/Search/Request/CalendarSearchReportTest.php18
-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.php9
-rw-r--r--apps/dav/tests/unit/CardDAV/CardDavBackendTest.php52
-rw-r--r--apps/dav/tests/unit/CardDAV/ContactsManagerTest.php10
-rw-r--r--apps/dav/tests/unit/CardDAV/ConverterTest.php10
-rw-r--r--apps/dav/tests/unit/CardDAV/ImageExportPluginTest.php3
-rw-r--r--apps/dav/tests/unit/CardDAV/Sharing/PluginTest.php7
-rw-r--r--apps/dav/tests/unit/CardDAV/SyncServiceTest.php26
-rw-r--r--apps/dav/tests/unit/Comments/CommentsNodeTest.php39
-rw-r--r--apps/dav/tests/unit/Comments/CommentsPluginTest.php81
-rw-r--r--apps/dav/tests/unit/Comments/EntityCollectionTest.php30
-rw-r--r--apps/dav/tests/unit/Comments/EntityTypeCollectionTest.php17
-rw-r--r--apps/dav/tests/unit/Comments/RootCollectionTest.php16
-rw-r--r--apps/dav/tests/unit/Connector/PublicAuthTest.php25
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/AuthTest.php42
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/BearerAuthTest.php2
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/BlockLegacyClientPluginTest.php3
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/CommentsPropertiesPluginTest.php18
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/CopyEtagHeaderPluginTest.php7
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/CustomPropertiesBackendTest.php18
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php11
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/DummyGetResponsePluginTest.php12
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/ExceptionLoggerPluginTest.php1
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/FakeLockerPluginTest.php24
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/FileTest.php37
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php41
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php69
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/MaintenancePluginTest.php4
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/NodeTest.php23
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/ObjectTreeTest.php22
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/PrincipalTest.php1
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/QuotaPluginTest.php5
-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.php5
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTestCase.php4
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/SharesPluginTest.php41
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/TagsPluginTest.php30
-rw-r--r--apps/dav/tests/unit/DAV/BrowserErrorPagePluginTest.php6
-rw-r--r--apps/dav/tests/unit/DAV/GroupPrincipalTest.php1
-rw-r--r--apps/dav/tests/unit/DAV/HookManagerTest.php8
-rw-r--r--apps/dav/tests/unit/DAV/Sharing/PluginTest.php7
-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.php5
-rw-r--r--apps/dav/tests/unit/Settings/CalDAVSettingsTest.php58
-rw-r--r--apps/dav/tests/unit/SystemTag/SystemTagMappingNodeTest.php10
-rw-r--r--apps/dav/tests/unit/SystemTag/SystemTagNodeTest.php7
-rw-r--r--apps/dav/tests/unit/SystemTag/SystemTagPluginTest.php60
-rw-r--r--apps/dav/tests/unit/SystemTag/SystemTagsByIdCollectionTest.php13
-rw-r--r--apps/dav/tests/unit/SystemTag/SystemTagsObjectMappingCollectionTest.php10
-rw-r--r--apps/dav/tests/unit/SystemTag/SystemTagsObjectTypeCollectionTest.php20
-rw-r--r--apps/dav/tests/unit/Upload/AssemblyStreamTest.php7
-rw-r--r--apps/dav/tests/unit/Upload/FutureFileTest.php7
-rw-r--r--apps/encryption/appinfo/app.php1
-rw-r--r--apps/encryption/composer/autoload.php7
-rw-r--r--apps/encryption/composer/composer.json13
-rw-r--r--apps/encryption/composer/composer/ClassLoader.php445
-rw-r--r--apps/encryption/composer/composer/LICENSE21
-rw-r--r--apps/encryption/composer/composer/autoload_classmap.php36
-rw-r--r--apps/encryption/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/encryption/composer/composer/autoload_psr4.php10
-rw-r--r--apps/encryption/composer/composer/autoload_real.php52
-rw-r--r--apps/encryption/composer/composer/autoload_static.php62
-rw-r--r--apps/encryption/l10n/es_CO.js65
-rw-r--r--apps/encryption/l10n/es_CO.json63
-rw-r--r--apps/encryption/l10n/es_CR.js65
-rw-r--r--apps/encryption/l10n/es_CR.json63
-rw-r--r--apps/encryption/l10n/es_DO.js65
-rw-r--r--apps/encryption/l10n/es_DO.json63
-rw-r--r--apps/encryption/l10n/es_EC.js65
-rw-r--r--apps/encryption/l10n/es_EC.json63
-rw-r--r--apps/encryption/l10n/eu.js32
-rw-r--r--apps/encryption/l10n/eu.json32
-rw-r--r--apps/encryption/l10n/ka_GE.js65
-rw-r--r--apps/encryption/l10n/ka_GE.json63
-rw-r--r--apps/encryption/l10n/sr.js32
-rw-r--r--apps/encryption/l10n/sr.json32
-rw-r--r--apps/encryption/l10n/zh_TW.js7
-rw-r--r--apps/encryption/l10n/zh_TW.json7
-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.php23
-rw-r--r--apps/encryption/lib/KeyManager.php2
-rw-r--r--apps/encryption/lib/Migration.php9
-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.php15
-rw-r--r--apps/encryption/tests/Controller/RecoveryControllerTest.php13
-rw-r--r--apps/encryption/tests/Controller/SettingsControllerTest.php25
-rw-r--r--apps/encryption/tests/Controller/StatusControllerTest.php8
-rw-r--r--apps/encryption/tests/Crypto/CryptTest.php14
-rw-r--r--apps/encryption/tests/Crypto/DecryptAllTest.php11
-rw-r--r--apps/encryption/tests/Crypto/EncryptAllTest.php55
-rw-r--r--apps/encryption/tests/Crypto/EncryptionTest.php30
-rw-r--r--apps/encryption/tests/HookManagerTest.php9
-rw-r--r--apps/encryption/tests/Hooks/UserHooksTest.php36
-rw-r--r--apps/encryption/tests/KeyManagerTest.php36
-rw-r--r--apps/encryption/tests/MigrationTest.php22
-rw-r--r--apps/encryption/tests/RecoveryTest.php11
-rw-r--r--apps/encryption/tests/SessionTest.php2
-rw-r--r--apps/encryption/tests/Settings/AdminTest.php13
-rw-r--r--apps/encryption/tests/Users/SetupTest.php11
-rw-r--r--apps/encryption/tests/UtilTest.php12
-rw-r--r--apps/federatedfilesharing/appinfo/app.php2
-rw-r--r--apps/federatedfilesharing/appinfo/routes.php2
-rw-r--r--apps/federatedfilesharing/composer/autoload.php7
-rw-r--r--apps/federatedfilesharing/composer/composer.json13
-rw-r--r--apps/federatedfilesharing/composer/composer/ClassLoader.php445
-rw-r--r--apps/federatedfilesharing/composer/composer/LICENSE21
-rw-r--r--apps/federatedfilesharing/composer/composer/autoload_classmap.php21
-rw-r--r--apps/federatedfilesharing/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/federatedfilesharing/composer/composer/autoload_psr4.php10
-rw-r--r--apps/federatedfilesharing/composer/composer/autoload_real.php52
-rw-r--r--apps/federatedfilesharing/composer/composer/autoload_static.php47
-rw-r--r--apps/federatedfilesharing/l10n/es_CO.js58
-rw-r--r--apps/federatedfilesharing/l10n/es_CO.json56
-rw-r--r--apps/federatedfilesharing/l10n/es_CR.js58
-rw-r--r--apps/federatedfilesharing/l10n/es_CR.json56
-rw-r--r--apps/federatedfilesharing/l10n/es_DO.js58
-rw-r--r--apps/federatedfilesharing/l10n/es_DO.json56
-rw-r--r--apps/federatedfilesharing/l10n/es_EC.js58
-rw-r--r--apps/federatedfilesharing/l10n/es_EC.json56
-rw-r--r--apps/federatedfilesharing/l10n/fi.js1
-rw-r--r--apps/federatedfilesharing/l10n/fi.json1
-rw-r--r--apps/federatedfilesharing/l10n/hu.js8
-rw-r--r--apps/federatedfilesharing/l10n/hu.json8
-rw-r--r--apps/federatedfilesharing/l10n/ka_GE.js58
-rw-r--r--apps/federatedfilesharing/l10n/ka_GE.json56
-rw-r--r--apps/federatedfilesharing/l10n/ru.js10
-rw-r--r--apps/federatedfilesharing/l10n/ru.json10
-rw-r--r--apps/federatedfilesharing/l10n/sk.js58
-rw-r--r--apps/federatedfilesharing/l10n/sk.json56
-rw-r--r--apps/federatedfilesharing/l10n/sr.js44
-rw-r--r--apps/federatedfilesharing/l10n/sr.json44
-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.php7
-rw-r--r--apps/federatedfilesharing/tests/Controller/MountPublicLinkControllerTest.php15
-rw-r--r--apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php12
-rw-r--r--apps/federatedfilesharing/tests/FederatedShareProviderTest.php34
-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.php3
-rw-r--r--apps/federation/appinfo/routes.php2
-rw-r--r--apps/federation/composer/autoload.php7
-rw-r--r--apps/federation/composer/composer.json13
-rw-r--r--apps/federation/composer/composer/ClassLoader.php445
-rw-r--r--apps/federation/composer/composer/LICENSE21
-rw-r--r--apps/federation/composer/composer/autoload_classmap.php23
-rw-r--r--apps/federation/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/federation/composer/composer/autoload_psr4.php10
-rw-r--r--apps/federation/composer/composer/autoload_real.php52
-rw-r--r--apps/federation/composer/composer/autoload_static.php49
-rw-r--r--apps/federation/l10n/es_CO.js16
-rw-r--r--apps/federation/l10n/es_CO.json14
-rw-r--r--apps/federation/l10n/es_CR.js16
-rw-r--r--apps/federation/l10n/es_CR.json14
-rw-r--r--apps/federation/l10n/es_DO.js16
-rw-r--r--apps/federation/l10n/es_DO.json14
-rw-r--r--apps/federation/l10n/es_EC.js16
-rw-r--r--apps/federation/l10n/es_EC.json14
-rw-r--r--apps/federation/l10n/eu.js16
-rw-r--r--apps/federation/l10n/eu.json14
-rw-r--r--apps/federation/l10n/ka_GE.js16
-rw-r--r--apps/federation/l10n/ka_GE.json14
-rw-r--r--apps/federation/l10n/sk.js16
-rw-r--r--apps/federation/l10n/sk.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/composer/autoload.php7
-rw-r--r--apps/files/composer/composer.json13
-rw-r--r--apps/files/composer/composer/ClassLoader.php445
-rw-r--r--apps/files/composer/composer/LICENSE21
-rw-r--r--apps/files/composer/composer/autoload_classmap.php36
-rw-r--r--apps/files/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/files/composer/composer/autoload_psr4.php10
-rw-r--r--apps/files/composer/composer/autoload_real.php52
-rw-r--r--apps/files/composer/composer/autoload_static.php62
-rw-r--r--apps/files/css/files.scss194
-rw-r--r--apps/files/css/mobile.scss14
-rw-r--r--apps/files/css/upload.scss4
-rw-r--r--apps/files/js/detailsview.js18
-rw-r--r--apps/files/js/favoritesfilelist.js1
-rw-r--r--apps/files/js/fileactions.js13
-rw-r--r--apps/files/js/fileactionsmenu.js5
-rw-r--r--apps/files/js/filelist.js50
-rw-r--r--apps/files/js/files.js2
-rw-r--r--apps/files/js/tagsplugin.js75
-rw-r--r--apps/files/l10n/ca.js2
-rw-r--r--apps/files/l10n/ca.json2
-rw-r--r--apps/files/l10n/cs.js2
-rw-r--r--apps/files/l10n/cs.json2
-rw-r--r--apps/files/l10n/da.js6
-rw-r--r--apps/files/l10n/da.json6
-rw-r--r--apps/files/l10n/de.js6
-rw-r--r--apps/files/l10n/de.json6
-rw-r--r--apps/files/l10n/de_DE.js6
-rw-r--r--apps/files/l10n/de_DE.json6
-rw-r--r--apps/files/l10n/en_GB.js4
-rw-r--r--apps/files/l10n/en_GB.json4
-rw-r--r--apps/files/l10n/es.js4
-rw-r--r--apps/files/l10n/es.json4
-rw-r--r--apps/files/l10n/es_CO.js164
-rw-r--r--apps/files/l10n/es_CO.json162
-rw-r--r--apps/files/l10n/es_CR.js164
-rw-r--r--apps/files/l10n/es_CR.json162
-rw-r--r--apps/files/l10n/es_DO.js164
-rw-r--r--apps/files/l10n/es_DO.json162
-rw-r--r--apps/files/l10n/es_EC.js164
-rw-r--r--apps/files/l10n/es_EC.json162
-rw-r--r--apps/files/l10n/es_MX.js7
-rw-r--r--apps/files/l10n/es_MX.json7
-rw-r--r--apps/files/l10n/et_EE.js2
-rw-r--r--apps/files/l10n/et_EE.json2
-rw-r--r--apps/files/l10n/eu.js12
-rw-r--r--apps/files/l10n/eu.json12
-rw-r--r--apps/files/l10n/fi.js3
-rw-r--r--apps/files/l10n/fi.json3
-rw-r--r--apps/files/l10n/fr.js6
-rw-r--r--apps/files/l10n/fr.json6
-rw-r--r--apps/files/l10n/hu.js12
-rw-r--r--apps/files/l10n/hu.json12
-rw-r--r--apps/files/l10n/is.js5
-rw-r--r--apps/files/l10n/is.json5
-rw-r--r--apps/files/l10n/it.js4
-rw-r--r--apps/files/l10n/it.json4
-rw-r--r--apps/files/l10n/ja.js3
-rw-r--r--apps/files/l10n/ja.json3
-rw-r--r--apps/files/l10n/ka_GE.js150
-rw-r--r--apps/files/l10n/ka_GE.json150
-rw-r--r--apps/files/l10n/lt_LT.js2
-rw-r--r--apps/files/l10n/lt_LT.json2
-rw-r--r--apps/files/l10n/nb.js5
-rw-r--r--apps/files/l10n/nb.json5
-rw-r--r--apps/files/l10n/nl.js7
-rw-r--r--apps/files/l10n/nl.json7
-rw-r--r--apps/files/l10n/pl.js4
-rw-r--r--apps/files/l10n/pl.json4
-rw-r--r--apps/files/l10n/pt_BR.js4
-rw-r--r--apps/files/l10n/pt_BR.json4
-rw-r--r--apps/files/l10n/ru.js24
-rw-r--r--apps/files/l10n/ru.json24
-rw-r--r--apps/files/l10n/sk.js7
-rw-r--r--apps/files/l10n/sk.json7
-rw-r--r--apps/files/l10n/sl.js2
-rw-r--r--apps/files/l10n/sl.json2
-rw-r--r--apps/files/l10n/sr.js7
-rw-r--r--apps/files/l10n/sr.json7
-rw-r--r--apps/files/l10n/sv.js2
-rw-r--r--apps/files/l10n/sv.json2
-rw-r--r--apps/files/l10n/tr.js4
-rw-r--r--apps/files/l10n/tr.json4
-rw-r--r--apps/files/l10n/uk.js2
-rw-r--r--apps/files/l10n/uk.json2
-rw-r--r--apps/files/l10n/vi.js1
-rw-r--r--apps/files/l10n/vi.json1
-rw-r--r--apps/files/l10n/zh_CN.js3
-rw-r--r--apps/files/l10n/zh_CN.json3
-rw-r--r--apps/files/l10n/zh_TW.js12
-rw-r--r--apps/files/l10n/zh_TW.json12
-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/Scan.php2
-rw-r--r--apps/files/lib/Command/ScanAppData.php26
-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/templates/appnavigation.php2
-rw-r--r--apps/files/templates/list.php12
-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/Command/DeleteOrphanedFilesTest.php6
-rw-r--r--apps/files/tests/Controller/ApiControllerTest.php1
-rw-r--r--apps/files/tests/Controller/ViewControllerTest.php38
-rw-r--r--apps/files/tests/HelperTest.php1
-rw-r--r--apps/files/tests/Settings/AdminTest.php3
-rw-r--r--apps/files/tests/js/fileactionsmenuSpec.js28
-rw-r--r--apps/files/tests/js/filelistSpec.js34
-rw-r--r--apps/files/tests/js/tagspluginspec.js48
-rw-r--r--apps/files_external/ajax/oauth2.php5
-rw-r--r--apps/files_external/appinfo/app.php5
-rw-r--r--apps/files_external/js/settings.js2
-rw-r--r--apps/files_external/l10n/es_CO.js134
-rw-r--r--apps/files_external/l10n/es_CO.json132
-rw-r--r--apps/files_external/l10n/es_CR.js134
-rw-r--r--apps/files_external/l10n/es_CR.json132
-rw-r--r--apps/files_external/l10n/es_DO.js134
-rw-r--r--apps/files_external/l10n/es_DO.json132
-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/fi.js6
-rw-r--r--apps/files_external/l10n/fi.json6
-rw-r--r--apps/files_external/l10n/hu.js13
-rw-r--r--apps/files_external/l10n/hu.json13
-rw-r--r--apps/files_external/l10n/is.js2
-rw-r--r--apps/files_external/l10n/is.json2
-rw-r--r--apps/files_external/l10n/ja.js2
-rw-r--r--apps/files_external/l10n/ja.json2
-rw-r--r--apps/files_external/l10n/ka_GE.js121
-rw-r--r--apps/files_external/l10n/ka_GE.json121
-rw-r--r--apps/files_external/l10n/nl.js2
-rw-r--r--apps/files_external/l10n/nl.json2
-rw-r--r--apps/files_external/l10n/sk.js58
-rw-r--r--apps/files_external/l10n/sk.json58
-rw-r--r--apps/files_external/l10n/zh_CN.js2
-rw-r--r--apps/files_external/l10n/zh_CN.json2
-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.php13
-rw-r--r--apps/files_external/tests/Auth/Password/GlobalAuth.php1
-rw-r--r--apps/files_external/tests/Backend/BackendTest.php8
-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.php7
-rw-r--r--apps/files_external/tests/Controller/UserStoragesControllerTest.php1
-rw-r--r--apps/files_external/tests/FrontendDefinitionTraitTest.php14
-rw-r--r--apps/files_external/tests/Service/BackendServiceTest.php12
-rw-r--r--apps/files_external/tests/Service/StoragesServiceTest.php10
-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.php5
-rw-r--r--apps/files_external/tests/Storage/SmbTest.php1
-rw-r--r--apps/files_external/tests/StorageConfigTest.php10
-rw-r--r--apps/files_sharing/appinfo/app.php7
-rw-r--r--apps/files_sharing/appinfo/info.xml6
-rw-r--r--apps/files_sharing/appinfo/routes.php4
-rw-r--r--apps/files_sharing/composer/autoload.php7
-rw-r--r--apps/files_sharing/composer/composer.json13
-rw-r--r--apps/files_sharing/composer/composer/ClassLoader.php445
-rw-r--r--apps/files_sharing/composer/composer/LICENSE21
-rw-r--r--apps/files_sharing/composer/composer/autoload_classmap.php57
-rw-r--r--apps/files_sharing/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/files_sharing/composer/composer/autoload_psr4.php10
-rw-r--r--apps/files_sharing/composer/composer/autoload_real.php52
-rw-r--r--apps/files_sharing/composer/composer/autoload_static.php83
-rw-r--r--apps/files_sharing/css/mobile.scss13
-rw-r--r--apps/files_sharing/css/public.scss43
-rw-r--r--apps/files_sharing/css/sharetabview.scss29
-rw-r--r--apps/files_sharing/js/public.js24
-rw-r--r--apps/files_sharing/l10n/ast.js6
-rw-r--r--apps/files_sharing/l10n/ast.json6
-rw-r--r--apps/files_sharing/l10n/ca.js8
-rw-r--r--apps/files_sharing/l10n/ca.json8
-rw-r--r--apps/files_sharing/l10n/cs.js8
-rw-r--r--apps/files_sharing/l10n/cs.json8
-rw-r--r--apps/files_sharing/l10n/de.js8
-rw-r--r--apps/files_sharing/l10n/de.json8
-rw-r--r--apps/files_sharing/l10n/de_DE.js8
-rw-r--r--apps/files_sharing/l10n/de_DE.json8
-rw-r--r--apps/files_sharing/l10n/el.js8
-rw-r--r--apps/files_sharing/l10n/el.json8
-rw-r--r--apps/files_sharing/l10n/en_GB.js8
-rw-r--r--apps/files_sharing/l10n/en_GB.json8
-rw-r--r--apps/files_sharing/l10n/es.js8
-rw-r--r--apps/files_sharing/l10n/es.json8
-rw-r--r--apps/files_sharing/l10n/es_AR.js8
-rw-r--r--apps/files_sharing/l10n/es_AR.json8
-rw-r--r--apps/files_sharing/l10n/es_CO.js115
-rw-r--r--apps/files_sharing/l10n/es_CO.json113
-rw-r--r--apps/files_sharing/l10n/es_CR.js115
-rw-r--r--apps/files_sharing/l10n/es_CR.json113
-rw-r--r--apps/files_sharing/l10n/es_DO.js115
-rw-r--r--apps/files_sharing/l10n/es_DO.json113
-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/l10n/es_MX.js8
-rw-r--r--apps/files_sharing/l10n/es_MX.json8
-rw-r--r--apps/files_sharing/l10n/fi.js8
-rw-r--r--apps/files_sharing/l10n/fi.json8
-rw-r--r--apps/files_sharing/l10n/fr.js10
-rw-r--r--apps/files_sharing/l10n/fr.json10
-rw-r--r--apps/files_sharing/l10n/hu.js8
-rw-r--r--apps/files_sharing/l10n/hu.json8
-rw-r--r--apps/files_sharing/l10n/is.js8
-rw-r--r--apps/files_sharing/l10n/is.json8
-rw-r--r--apps/files_sharing/l10n/it.js8
-rw-r--r--apps/files_sharing/l10n/it.json8
-rw-r--r--apps/files_sharing/l10n/ja.js8
-rw-r--r--apps/files_sharing/l10n/ja.json8
-rw-r--r--apps/files_sharing/l10n/ka_GE.js108
-rw-r--r--apps/files_sharing/l10n/ka_GE.json108
-rw-r--r--apps/files_sharing/l10n/ko.js8
-rw-r--r--apps/files_sharing/l10n/ko.json8
-rw-r--r--apps/files_sharing/l10n/lt_LT.js8
-rw-r--r--apps/files_sharing/l10n/lt_LT.json8
-rw-r--r--apps/files_sharing/l10n/nb.js8
-rw-r--r--apps/files_sharing/l10n/nb.json8
-rw-r--r--apps/files_sharing/l10n/nl.js8
-rw-r--r--apps/files_sharing/l10n/nl.json8
-rw-r--r--apps/files_sharing/l10n/pl.js8
-rw-r--r--apps/files_sharing/l10n/pl.json8
-rw-r--r--apps/files_sharing/l10n/pt_BR.js8
-rw-r--r--apps/files_sharing/l10n/pt_BR.json8
-rw-r--r--apps/files_sharing/l10n/ru.js10
-rw-r--r--apps/files_sharing/l10n/ru.json10
-rw-r--r--apps/files_sharing/l10n/sk.js27
-rw-r--r--apps/files_sharing/l10n/sk.json27
-rw-r--r--apps/files_sharing/l10n/sq.js8
-rw-r--r--apps/files_sharing/l10n/sq.json8
-rw-r--r--apps/files_sharing/l10n/sr.js8
-rw-r--r--apps/files_sharing/l10n/sr.json8
-rw-r--r--apps/files_sharing/l10n/sv.js8
-rw-r--r--apps/files_sharing/l10n/sv.json8
-rw-r--r--apps/files_sharing/l10n/tr.js8
-rw-r--r--apps/files_sharing/l10n/tr.json8
-rw-r--r--apps/files_sharing/l10n/zh_CN.js8
-rw-r--r--apps/files_sharing/l10n/zh_CN.json8
-rw-r--r--apps/files_sharing/l10n/zh_TW.js8
-rw-r--r--apps/files_sharing/l10n/zh_TW.json8
-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/Collaboration/ShareRecipientSorter.php110
-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.php20
-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/templates/authenticate.php2
-rw-r--r--apps/files_sharing/templates/public.php55
-rw-r--r--apps/files_sharing/tests/ApiTest.php8
-rw-r--r--apps/files_sharing/tests/BackendTest.php1
-rw-r--r--apps/files_sharing/tests/CapabilitiesTest.php5
-rw-r--r--apps/files_sharing/tests/Collaboration/ShareRecipientSorterTest.php258
-rw-r--r--apps/files_sharing/tests/Command/CleanupRemoteStoragesTest.php10
-rw-r--r--apps/files_sharing/tests/Controller/ShareAPIControllerTest.php151
-rw-r--r--apps/files_sharing/tests/Controller/ShareControllerTest.php33
-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.php7
-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.php10
-rw-r--r--apps/files_sharing/tests/SharedMountTest.php1
-rw-r--r--apps/files_sharing/tests/UpdaterTest.php3
-rw-r--r--apps/files_sharing/tests/js/shareSpec.js12
-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/composer/autoload.php7
-rw-r--r--apps/files_trashbin/composer/composer.json13
-rw-r--r--apps/files_trashbin/composer/composer/ClassLoader.php445
-rw-r--r--apps/files_trashbin/composer/composer/LICENSE21
-rw-r--r--apps/files_trashbin/composer/composer/autoload_classmap.php23
-rw-r--r--apps/files_trashbin/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/files_trashbin/composer/composer/autoload_psr4.php10
-rw-r--r--apps/files_trashbin/composer/composer/autoload_real.php52
-rw-r--r--apps/files_trashbin/composer/composer/autoload_static.php49
-rw-r--r--apps/files_trashbin/l10n/es_CO.js21
-rw-r--r--apps/files_trashbin/l10n/es_CO.json19
-rw-r--r--apps/files_trashbin/l10n/es_CR.js21
-rw-r--r--apps/files_trashbin/l10n/es_CR.json19
-rw-r--r--apps/files_trashbin/l10n/es_DO.js21
-rw-r--r--apps/files_trashbin/l10n/es_DO.json19
-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/l10n/pt_PT.js2
-rw-r--r--apps/files_trashbin/l10n/pt_PT.json2
-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/Hooks.php6
-rw-r--r--apps/files_trashbin/lib/Storage.php2
-rw-r--r--apps/files_trashbin/lib/Trashbin.php7
-rw-r--r--apps/files_trashbin/templates/index.php10
-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.php6
-rw-r--r--apps/files_trashbin/tests/StorageTest.php8
-rw-r--r--apps/files_versions/appinfo/routes.php3
-rw-r--r--apps/files_versions/composer/autoload.php7
-rw-r--r--apps/files_versions/composer/composer.json13
-rw-r--r--apps/files_versions/composer/composer/ClassLoader.php445
-rw-r--r--apps/files_versions/composer/composer/LICENSE21
-rw-r--r--apps/files_versions/composer/composer/autoload_classmap.php20
-rw-r--r--apps/files_versions/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/files_versions/composer/composer/autoload_psr4.php10
-rw-r--r--apps/files_versions/composer/composer/autoload_real.php52
-rw-r--r--apps/files_versions/composer/composer/autoload_static.php46
-rw-r--r--apps/files_versions/l10n/es_CO.js14
-rw-r--r--apps/files_versions/l10n/es_CO.json12
-rw-r--r--apps/files_versions/l10n/es_CR.js14
-rw-r--r--apps/files_versions/l10n/es_CR.json12
-rw-r--r--apps/files_versions/l10n/es_DO.js14
-rw-r--r--apps/files_versions/l10n/es_DO.json12
-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/l10n/eu.js6
-rw-r--r--apps/files_versions/l10n/eu.json6
-rw-r--r--apps/files_versions/l10n/ka_GE.js8
-rw-r--r--apps/files_versions/l10n/ka_GE.json8
-rw-r--r--apps/files_versions/l10n/nb.js2
-rw-r--r--apps/files_versions/l10n/nb.json2
-rw-r--r--apps/files_versions/l10n/sk.js2
-rw-r--r--apps/files_versions/l10n/sk.json2
-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.php74
-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.php4
-rw-r--r--apps/files_versions/tests/VersioningTest.php4
-rw-r--r--apps/lookup_server_connector/composer/autoload.php7
-rw-r--r--apps/lookup_server_connector/composer/composer.json13
-rw-r--r--apps/lookup_server_connector/composer/composer/ClassLoader.php445
-rw-r--r--apps/lookup_server_connector/composer/composer/LICENSE21
-rw-r--r--apps/lookup_server_connector/composer/composer/autoload_classmap.php11
-rw-r--r--apps/lookup_server_connector/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/lookup_server_connector/composer/composer/autoload_psr4.php10
-rw-r--r--apps/lookup_server_connector/composer/composer/autoload_real.php52
-rw-r--r--apps/lookup_server_connector/composer/composer/autoload_static.php37
-rw-r--r--apps/oauth2/composer/autoload.php7
-rw-r--r--apps/oauth2/composer/composer.json13
-rw-r--r--apps/oauth2/composer/composer/ClassLoader.php445
-rw-r--r--apps/oauth2/composer/composer/LICENSE21
-rw-r--r--apps/oauth2/composer/composer/autoload_classmap.php19
-rw-r--r--apps/oauth2/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/oauth2/composer/composer/autoload_psr4.php10
-rw-r--r--apps/oauth2/composer/composer/autoload_real.php52
-rw-r--r--apps/oauth2/composer/composer/autoload_static.php45
-rw-r--r--apps/oauth2/l10n/es_CO.js13
-rw-r--r--apps/oauth2/l10n/es_CO.json11
-rw-r--r--apps/oauth2/l10n/es_CR.js13
-rw-r--r--apps/oauth2/l10n/es_CR.json11
-rw-r--r--apps/oauth2/l10n/es_DO.js13
-rw-r--r--apps/oauth2/l10n/es_DO.json11
-rw-r--r--apps/oauth2/l10n/es_EC.js13
-rw-r--r--apps/oauth2/l10n/es_EC.json11
-rw-r--r--apps/oauth2/l10n/hu.js13
-rw-r--r--apps/oauth2/l10n/hu.json11
-rw-r--r--apps/oauth2/l10n/sr.js13
-rw-r--r--apps/oauth2/l10n/sr.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/composer/autoload.php7
-rw-r--r--apps/provisioning_api/composer/composer.json13
-rw-r--r--apps/provisioning_api/composer/composer/ClassLoader.php445
-rw-r--r--apps/provisioning_api/composer/composer/LICENSE21
-rw-r--r--apps/provisioning_api/composer/composer/autoload_classmap.php16
-rw-r--r--apps/provisioning_api/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/provisioning_api/composer/composer/autoload_psr4.php10
-rw-r--r--apps/provisioning_api/composer/composer/autoload_real.php52
-rw-r--r--apps/provisioning_api/composer/composer/autoload_static.php42
-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/AppsControllerTest.php5
-rw-r--r--apps/provisioning_api/tests/Controller/GroupsControllerTest.php8
-rw-r--r--apps/provisioning_api/tests/Controller/UsersControllerTest.php148
-rw-r--r--apps/sharebymail/composer/autoload.php7
-rw-r--r--apps/sharebymail/composer/composer.json13
-rw-r--r--apps/sharebymail/composer/composer/ClassLoader.php445
-rw-r--r--apps/sharebymail/composer/composer/LICENSE21
-rw-r--r--apps/sharebymail/composer/composer/autoload_classmap.php16
-rw-r--r--apps/sharebymail/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/sharebymail/composer/composer/autoload_psr4.php10
-rw-r--r--apps/sharebymail/composer/composer/autoload_real.php52
-rw-r--r--apps/sharebymail/composer/composer/autoload_static.php42
-rw-r--r--apps/sharebymail/l10n/ca.js4
-rw-r--r--apps/sharebymail/l10n/ca.json4
-rw-r--r--apps/sharebymail/l10n/cs.js4
-rw-r--r--apps/sharebymail/l10n/cs.json4
-rw-r--r--apps/sharebymail/l10n/da.js4
-rw-r--r--apps/sharebymail/l10n/da.json4
-rw-r--r--apps/sharebymail/l10n/de.js4
-rw-r--r--apps/sharebymail/l10n/de.json4
-rw-r--r--apps/sharebymail/l10n/de_DE.js4
-rw-r--r--apps/sharebymail/l10n/de_DE.json4
-rw-r--r--apps/sharebymail/l10n/el.js6
-rw-r--r--apps/sharebymail/l10n/el.json6
-rw-r--r--apps/sharebymail/l10n/en_GB.js4
-rw-r--r--apps/sharebymail/l10n/en_GB.json4
-rw-r--r--apps/sharebymail/l10n/es.js4
-rw-r--r--apps/sharebymail/l10n/es.json4
-rw-r--r--apps/sharebymail/l10n/es_AR.js4
-rw-r--r--apps/sharebymail/l10n/es_AR.json4
-rw-r--r--apps/sharebymail/l10n/es_CO.js50
-rw-r--r--apps/sharebymail/l10n/es_CO.json48
-rw-r--r--apps/sharebymail/l10n/es_CR.js50
-rw-r--r--apps/sharebymail/l10n/es_CR.json48
-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/sharebymail/l10n/es_MX.js4
-rw-r--r--apps/sharebymail/l10n/es_MX.json4
-rw-r--r--apps/sharebymail/l10n/fr.js4
-rw-r--r--apps/sharebymail/l10n/fr.json4
-rw-r--r--apps/sharebymail/l10n/gl.js73
-rw-r--r--apps/sharebymail/l10n/gl.json73
-rw-r--r--apps/sharebymail/l10n/hu.js50
-rw-r--r--apps/sharebymail/l10n/hu.json48
-rw-r--r--apps/sharebymail/l10n/is.js4
-rw-r--r--apps/sharebymail/l10n/is.json4
-rw-r--r--apps/sharebymail/l10n/it.js4
-rw-r--r--apps/sharebymail/l10n/it.json4
-rw-r--r--apps/sharebymail/l10n/ja.js4
-rw-r--r--apps/sharebymail/l10n/ja.json4
-rw-r--r--apps/sharebymail/l10n/ko.js4
-rw-r--r--apps/sharebymail/l10n/ko.json4
-rw-r--r--apps/sharebymail/l10n/lt_LT.js4
-rw-r--r--apps/sharebymail/l10n/lt_LT.json4
-rw-r--r--apps/sharebymail/l10n/nb.js4
-rw-r--r--apps/sharebymail/l10n/nb.json4
-rw-r--r--apps/sharebymail/l10n/nl.js6
-rw-r--r--apps/sharebymail/l10n/nl.json6
-rw-r--r--apps/sharebymail/l10n/pl.js4
-rw-r--r--apps/sharebymail/l10n/pl.json4
-rw-r--r--apps/sharebymail/l10n/pt_BR.js4
-rw-r--r--apps/sharebymail/l10n/pt_BR.json4
-rw-r--r--apps/sharebymail/l10n/ru.js4
-rw-r--r--apps/sharebymail/l10n/ru.json4
-rw-r--r--apps/sharebymail/l10n/sq.js4
-rw-r--r--apps/sharebymail/l10n/sq.json4
-rw-r--r--apps/sharebymail/l10n/sr.js50
-rw-r--r--apps/sharebymail/l10n/sr.json48
-rw-r--r--apps/sharebymail/l10n/sv.js4
-rw-r--r--apps/sharebymail/l10n/sv.json4
-rw-r--r--apps/sharebymail/l10n/tr.js4
-rw-r--r--apps/sharebymail/l10n/tr.json4
-rw-r--r--apps/sharebymail/l10n/zh_CN.js4
-rw-r--r--apps/sharebymail/l10n/zh_CN.json4
-rw-r--r--apps/sharebymail/lib/ShareByMailProvider.php20
-rw-r--r--apps/sharebymail/tests/ShareByMailProviderTest.php52
-rw-r--r--apps/systemtags/appinfo/app.php3
-rw-r--r--apps/systemtags/composer/autoload.php7
-rw-r--r--apps/systemtags/composer/composer.json13
-rw-r--r--apps/systemtags/composer/composer/ClassLoader.php445
-rw-r--r--apps/systemtags/composer/composer/LICENSE21
-rw-r--r--apps/systemtags/composer/composer/autoload_classmap.php14
-rw-r--r--apps/systemtags/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/systemtags/composer/composer/autoload_psr4.php10
-rw-r--r--apps/systemtags/composer/composer/autoload_real.php52
-rw-r--r--apps/systemtags/composer/composer/autoload_static.php40
-rw-r--r--apps/systemtags/js/systemtagsfilelist.js3
-rw-r--r--apps/systemtags/l10n/es_CO.js58
-rw-r--r--apps/systemtags/l10n/es_CO.json56
-rw-r--r--apps/systemtags/l10n/es_CR.js58
-rw-r--r--apps/systemtags/l10n/es_CR.json56
-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/l10n/hu.js1
-rw-r--r--apps/systemtags/l10n/hu.json1
-rw-r--r--apps/systemtags/l10n/sr.js55
-rw-r--r--apps/systemtags/l10n/sr.json55
-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/composer/autoload.php7
-rw-r--r--apps/testing/composer/composer.json13
-rw-r--r--apps/testing/composer/composer/ClassLoader.php445
-rw-r--r--apps/testing/composer/composer/LICENSE21
-rw-r--r--apps/testing/composer/composer/autoload_classmap.php15
-rw-r--r--apps/testing/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/testing/composer/composer/autoload_psr4.php10
-rw-r--r--apps/testing/composer/composer/autoload_real.php52
-rw-r--r--apps/testing/composer/composer/autoload_static.php41
-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/css/settings-admin.css1
-rw-r--r--apps/theming/js/settings-admin.js2
-rw-r--r--apps/theming/l10n/da.js8
-rw-r--r--apps/theming/l10n/da.json8
-rw-r--r--apps/theming/l10n/de.js8
-rw-r--r--apps/theming/l10n/de.json8
-rw-r--r--apps/theming/l10n/de_DE.js8
-rw-r--r--apps/theming/l10n/de_DE.json8
-rw-r--r--apps/theming/l10n/en_GB.js8
-rw-r--r--apps/theming/l10n/en_GB.json8
-rw-r--r--apps/theming/l10n/es.js8
-rw-r--r--apps/theming/l10n/es.json8
-rw-r--r--apps/theming/l10n/es_CO.js39
-rw-r--r--apps/theming/l10n/es_CO.json37
-rw-r--r--apps/theming/l10n/es_CR.js39
-rw-r--r--apps/theming/l10n/es_CR.json37
-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/l10n/es_MX.js8
-rw-r--r--apps/theming/l10n/es_MX.json8
-rw-r--r--apps/theming/l10n/fi.js4
-rw-r--r--apps/theming/l10n/fi.json4
-rw-r--r--apps/theming/l10n/fr.js8
-rw-r--r--apps/theming/l10n/fr.json8
-rw-r--r--apps/theming/l10n/hu.js8
-rw-r--r--apps/theming/l10n/hu.json8
-rw-r--r--apps/theming/l10n/is.js8
-rw-r--r--apps/theming/l10n/is.json8
-rw-r--r--apps/theming/l10n/it.js8
-rw-r--r--apps/theming/l10n/it.json8
-rw-r--r--apps/theming/l10n/nb.js8
-rw-r--r--apps/theming/l10n/nb.json8
-rw-r--r--apps/theming/l10n/nl.js8
-rw-r--r--apps/theming/l10n/nl.json8
-rw-r--r--apps/theming/l10n/pl.js8
-rw-r--r--apps/theming/l10n/pl.json8
-rw-r--r--apps/theming/l10n/pt_BR.js8
-rw-r--r--apps/theming/l10n/pt_BR.json8
-rw-r--r--apps/theming/l10n/ru.js8
-rw-r--r--apps/theming/l10n/ru.json8
-rw-r--r--apps/theming/l10n/sr.js8
-rw-r--r--apps/theming/l10n/sr.json8
-rw-r--r--apps/theming/l10n/tr.js8
-rw-r--r--apps/theming/l10n/tr.json8
-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.php45
-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.php27
-rw-r--r--apps/theming/tests/Controller/ThemingControllerTest.php211
-rw-r--r--apps/theming/tests/IconBuilderTest.php25
-rw-r--r--apps/theming/tests/ImageManagerTest.php25
-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.php10
-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/composer/autoload.php7
-rw-r--r--apps/twofactor_backupcodes/composer/composer.json13
-rw-r--r--apps/twofactor_backupcodes/composer/composer/ClassLoader.php445
-rw-r--r--apps/twofactor_backupcodes/composer/composer/LICENSE21
-rw-r--r--apps/twofactor_backupcodes/composer/composer/autoload_classmap.php21
-rw-r--r--apps/twofactor_backupcodes/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/twofactor_backupcodes/composer/composer/autoload_psr4.php10
-rw-r--r--apps/twofactor_backupcodes/composer/composer/autoload_real.php52
-rw-r--r--apps/twofactor_backupcodes/composer/composer/autoload_static.php47
-rw-r--r--apps/twofactor_backupcodes/l10n/es_CO.js18
-rw-r--r--apps/twofactor_backupcodes/l10n/es_CO.json16
-rw-r--r--apps/twofactor_backupcodes/l10n/es_CR.js18
-rw-r--r--apps/twofactor_backupcodes/l10n/es_CR.json16
-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/twofactor_backupcodes/l10n/hu.js1
-rw-r--r--apps/twofactor_backupcodes/l10n/hu.json1
-rw-r--r--apps/twofactor_backupcodes/l10n/sr.js18
-rw-r--r--apps/twofactor_backupcodes/l10n/sr.json16
-rw-r--r--apps/updatenotification/appinfo/app.php1
-rw-r--r--apps/updatenotification/composer/autoload.php7
-rw-r--r--apps/updatenotification/composer/composer.json13
-rw-r--r--apps/updatenotification/composer/composer/ClassLoader.php445
-rw-r--r--apps/updatenotification/composer/composer/LICENSE21
-rw-r--r--apps/updatenotification/composer/composer/autoload_classmap.php15
-rw-r--r--apps/updatenotification/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/updatenotification/composer/composer/autoload_psr4.php10
-rw-r--r--apps/updatenotification/composer/composer/autoload_real.php52
-rw-r--r--apps/updatenotification/composer/composer/autoload_static.php41
-rw-r--r--apps/updatenotification/l10n/es_CO.js28
-rw-r--r--apps/updatenotification/l10n/es_CO.json26
-rw-r--r--apps/updatenotification/l10n/es_CR.js28
-rw-r--r--apps/updatenotification/l10n/es_CR.json26
-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/l10n/hu.js5
-rw-r--r--apps/updatenotification/l10n/hu.json5
-rw-r--r--apps/updatenotification/l10n/lt_LT.js1
-rw-r--r--apps/updatenotification/l10n/lt_LT.json1
-rw-r--r--apps/updatenotification/l10n/sr.js22
-rw-r--r--apps/updatenotification/l10n/sr.json22
-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/autoload.php7
-rw-r--r--apps/user_ldap/composer/composer.json13
-rw-r--r--apps/user_ldap/composer/composer/ClassLoader.php445
-rw-r--r--apps/user_ldap/composer/composer/LICENSE21
-rw-r--r--apps/user_ldap/composer/composer/autoload_classmap.php64
-rw-r--r--apps/user_ldap/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/user_ldap/composer/composer/autoload_psr4.php10
-rw-r--r--apps/user_ldap/composer/composer/autoload_real.php52
-rw-r--r--apps/user_ldap/composer/composer/autoload_static.php90
-rw-r--r--apps/user_ldap/l10n/es_CO.js197
-rw-r--r--apps/user_ldap/l10n/es_CO.json195
-rw-r--r--apps/user_ldap/l10n/es_CR.js197
-rw-r--r--apps/user_ldap/l10n/es_CR.json195
-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/l10n/lt_LT.js3
-rw-r--r--apps/user_ldap/l10n/lt_LT.json3
-rw-r--r--apps/user_ldap/l10n/sr.js104
-rw-r--r--apps/user_ldap/l10n/sr.json104
-rw-r--r--apps/user_ldap/lib/Access.php24
-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.php12
-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.php33
-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.php8
-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.php4
-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.php36
-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_CO.js73
-rw-r--r--apps/workflowengine/l10n/es_CO.json71
-rw-r--r--apps/workflowengine/l10n/es_CR.js73
-rw-r--r--apps/workflowengine/l10n/es_CR.json71
-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
-rw-r--r--apps/workflowengine/l10n/id.js24
-rw-r--r--apps/workflowengine/l10n/id.json24
-rw-r--r--apps/workflowengine/l10n/sr.js73
-rw-r--r--apps/workflowengine/l10n/sr.json71
-rw-r--r--apps/workflowengine/tests/Check/AbstractStringCheckTest.php3
-rw-r--r--apps/workflowengine/tests/Check/RequestRemoteAddressTest.php6
-rw-r--r--apps/workflowengine/tests/Check/RequestTimeTest.php3
1294 files changed, 33981 insertions, 2863 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/composer/autoload.php b/apps/admin_audit/composer/autoload.php
new file mode 100644
index 00000000000..7970e9ebe12
--- /dev/null
+++ b/apps/admin_audit/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitAdminAudit::getLoader();
diff --git a/apps/admin_audit/composer/composer.json b/apps/admin_audit/composer/composer.json
new file mode 100644
index 00000000000..ae9b104b697
--- /dev/null
+++ b/apps/admin_audit/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "AdminAudit"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\AdminAudit\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/admin_audit/composer/composer/ClassLoader.php b/apps/admin_audit/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/admin_audit/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/admin_audit/composer/composer/LICENSE b/apps/admin_audit/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/admin_audit/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/admin_audit/composer/composer/autoload_classmap.php b/apps/admin_audit/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..487e05172de
--- /dev/null
+++ b/apps/admin_audit/composer/composer/autoload_classmap.php
@@ -0,0 +1,20 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\AdminAudit\\Actions\\Action' => $baseDir . '/../lib/Actions/Action.php',
+ 'OCA\\AdminAudit\\Actions\\AppManagement' => $baseDir . '/../lib/Actions/AppManagement.php',
+ 'OCA\\AdminAudit\\Actions\\Auth' => $baseDir . '/../lib/Actions/Auth.php',
+ 'OCA\\AdminAudit\\Actions\\Console' => $baseDir . '/../lib/Actions/Console.php',
+ 'OCA\\AdminAudit\\Actions\\Files' => $baseDir . '/../lib/Actions/Files.php',
+ 'OCA\\AdminAudit\\Actions\\GroupManagement' => $baseDir . '/../lib/Actions/GroupManagement.php',
+ 'OCA\\AdminAudit\\Actions\\Sharing' => $baseDir . '/../lib/Actions/Sharing.php',
+ 'OCA\\AdminAudit\\Actions\\Trashbin' => $baseDir . '/../lib/Actions/Trashbin.php',
+ 'OCA\\AdminAudit\\Actions\\UserManagement' => $baseDir . '/../lib/Actions/UserManagement.php',
+ 'OCA\\AdminAudit\\Actions\\Versions' => $baseDir . '/../lib/Actions/Versions.php',
+ 'OCA\\AdminAudit\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+);
diff --git a/apps/admin_audit/composer/composer/autoload_namespaces.php b/apps/admin_audit/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/admin_audit/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/admin_audit/composer/composer/autoload_psr4.php b/apps/admin_audit/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..63a4845c93d
--- /dev/null
+++ b/apps/admin_audit/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\AdminAudit\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/admin_audit/composer/composer/autoload_real.php b/apps/admin_audit/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..1cbbc489538
--- /dev/null
+++ b/apps/admin_audit/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitAdminAudit
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitAdminAudit', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitAdminAudit', 'loadClassLoader'));
+
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitAdminAudit::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/admin_audit/composer/composer/autoload_static.php b/apps/admin_audit/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..b5f055de44e
--- /dev/null
+++ b/apps/admin_audit/composer/composer/autoload_static.php
@@ -0,0 +1,46 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitAdminAudit
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\AdminAudit\\' => 15,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\AdminAudit\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\AdminAudit\\Actions\\Action' => __DIR__ . '/..' . '/../lib/Actions/Action.php',
+ 'OCA\\AdminAudit\\Actions\\AppManagement' => __DIR__ . '/..' . '/../lib/Actions/AppManagement.php',
+ 'OCA\\AdminAudit\\Actions\\Auth' => __DIR__ . '/..' . '/../lib/Actions/Auth.php',
+ 'OCA\\AdminAudit\\Actions\\Console' => __DIR__ . '/..' . '/../lib/Actions/Console.php',
+ 'OCA\\AdminAudit\\Actions\\Files' => __DIR__ . '/..' . '/../lib/Actions/Files.php',
+ 'OCA\\AdminAudit\\Actions\\GroupManagement' => __DIR__ . '/..' . '/../lib/Actions/GroupManagement.php',
+ 'OCA\\AdminAudit\\Actions\\Sharing' => __DIR__ . '/..' . '/../lib/Actions/Sharing.php',
+ 'OCA\\AdminAudit\\Actions\\Trashbin' => __DIR__ . '/..' . '/../lib/Actions/Trashbin.php',
+ 'OCA\\AdminAudit\\Actions\\UserManagement' => __DIR__ . '/..' . '/../lib/Actions/UserManagement.php',
+ 'OCA\\AdminAudit\\Actions\\Versions' => __DIR__ . '/..' . '/../lib/Actions/Versions.php',
+ 'OCA\\AdminAudit\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitAdminAudit::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitAdminAudit::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitAdminAudit::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
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/.bowerrc b/apps/comments/.bowerrc
new file mode 100644
index 00000000000..faee1372545
--- /dev/null
+++ b/apps/comments/.bowerrc
@@ -0,0 +1,3 @@
+{
+ "directory": "js/vendor"
+} \ No newline at end of file
diff --git a/apps/comments/appinfo/app.php b/apps/comments/appinfo/app.php
index 067e01e47ef..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
@@ -27,6 +29,7 @@ $eventDispatcher->addListener(
function() {
\OCP\Util::addScript('oc-backbone-webdav');
\OCP\Util::addScript('comments', 'merged');
+ \OCP\Util::addStyle('comments', 'autocomplete');
\OCP\Util::addStyle('comments', 'comments');
}
);
diff --git a/apps/comments/appinfo/info.xml b/apps/comments/appinfo/info.xml
index b67def1fb9d..6fcfa4bd399 100644
--- a/apps/comments/appinfo/info.xml
+++ b/apps/comments/appinfo/info.xml
@@ -28,4 +28,10 @@
<provider>OCA\Comments\Activity\Provider</provider>
</providers>
</activity>
+
+ <collaboration>
+ <plugins>
+ <plugin type="autocomplete-sort">OCA\Comments\Collaboration\CommentersSorter</plugin>
+ </plugins>
+ </collaboration>
</info>
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/composer/autoload.php b/apps/comments/composer/autoload.php
new file mode 100644
index 00000000000..c974072d6b7
--- /dev/null
+++ b/apps/comments/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitComments::getLoader();
diff --git a/apps/comments/composer/composer.json b/apps/comments/composer/composer.json
new file mode 100644
index 00000000000..523394b5d8e
--- /dev/null
+++ b/apps/comments/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "Comments"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\Comments\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/comments/composer/composer/ClassLoader.php b/apps/comments/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/comments/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/comments/composer/composer/LICENSE b/apps/comments/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/comments/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/comments/composer/composer/autoload_classmap.php b/apps/comments/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..0000ab9081a
--- /dev/null
+++ b/apps/comments/composer/composer/autoload_classmap.php
@@ -0,0 +1,20 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Comments\\Activity\\Filter' => $baseDir . '/../lib/Activity/Filter.php',
+ 'OCA\\Comments\\Activity\\Listener' => $baseDir . '/../lib/Activity/Listener.php',
+ 'OCA\\Comments\\Activity\\Provider' => $baseDir . '/../lib/Activity/Provider.php',
+ 'OCA\\Comments\\Activity\\Setting' => $baseDir . '/../lib/Activity/Setting.php',
+ 'OCA\\Comments\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\Comments\\Collaboration\\CommentersSorter' => $baseDir . '/../lib/Collaboration/CommentersSorter.php',
+ 'OCA\\Comments\\Controller\\Notifications' => $baseDir . '/../lib/Controller/Notifications.php',
+ 'OCA\\Comments\\EventHandler' => $baseDir . '/../lib/EventHandler.php',
+ 'OCA\\Comments\\JSSettingsHelper' => $baseDir . '/../lib/JSSettingsHelper.php',
+ 'OCA\\Comments\\Notification\\Listener' => $baseDir . '/../lib/Notification/Listener.php',
+ 'OCA\\Comments\\Notification\\Notifier' => $baseDir . '/../lib/Notification/Notifier.php',
+);
diff --git a/apps/comments/composer/composer/autoload_namespaces.php b/apps/comments/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/comments/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/comments/composer/composer/autoload_psr4.php b/apps/comments/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..f30d722bf9e
--- /dev/null
+++ b/apps/comments/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Comments\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/comments/composer/composer/autoload_real.php b/apps/comments/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..1ce284f24f4
--- /dev/null
+++ b/apps/comments/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitComments
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitComments', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitComments', 'loadClassLoader'));
+
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitComments::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/comments/composer/composer/autoload_static.php b/apps/comments/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..662f77f89dc
--- /dev/null
+++ b/apps/comments/composer/composer/autoload_static.php
@@ -0,0 +1,46 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitComments
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\Comments\\' => 13,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\Comments\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\Comments\\Activity\\Filter' => __DIR__ . '/..' . '/../lib/Activity/Filter.php',
+ 'OCA\\Comments\\Activity\\Listener' => __DIR__ . '/..' . '/../lib/Activity/Listener.php',
+ 'OCA\\Comments\\Activity\\Provider' => __DIR__ . '/..' . '/../lib/Activity/Provider.php',
+ 'OCA\\Comments\\Activity\\Setting' => __DIR__ . '/..' . '/../lib/Activity/Setting.php',
+ 'OCA\\Comments\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\Comments\\Collaboration\\CommentersSorter' => __DIR__ . '/..' . '/../lib/Collaboration/CommentersSorter.php',
+ 'OCA\\Comments\\Controller\\Notifications' => __DIR__ . '/..' . '/../lib/Controller/Notifications.php',
+ 'OCA\\Comments\\EventHandler' => __DIR__ . '/..' . '/../lib/EventHandler.php',
+ 'OCA\\Comments\\JSSettingsHelper' => __DIR__ . '/..' . '/../lib/JSSettingsHelper.php',
+ 'OCA\\Comments\\Notification\\Listener' => __DIR__ . '/..' . '/../lib/Notification/Listener.php',
+ 'OCA\\Comments\\Notification\\Notifier' => __DIR__ . '/..' . '/../lib/Notification/Notifier.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitComments::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitComments::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitComments::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/comments/css/autocomplete.scss b/apps/comments/css/autocomplete.scss
new file mode 100644
index 00000000000..41695e08301
--- /dev/null
+++ b/apps/comments/css/autocomplete.scss
@@ -0,0 +1,77 @@
+/**
+ * based upon apps/comments/js/vendor/At.js/dist/css/jquery.atwho.css,
+ * only changed colors and font-weight
+ */
+
+.atwho-view {
+ position:absolute;
+ top: 0;
+ left: 0;
+ display: none;
+ margin-top: 18px;
+ background: $color-main-background;
+ color: $color-main-text;
+ border: 1px solid $color-border;
+ border-radius: $border-radius;
+ box-shadow: 0 0 5px $color-box-shadow;
+ min-width: 120px;
+ z-index: 11110 !important;
+}
+
+.atwho-view .atwho-header {
+ padding: 5px;
+ margin: 5px;
+ cursor: pointer;
+ border-bottom: solid 1px $color-border;
+ color: $color-main-text;
+ font-size: 11px;
+ font-weight: bold;
+}
+
+.atwho-view .atwho-header .small {
+ color: $color-main-text;
+ float: right;
+ padding-top: 2px;
+ margin-right: -5px;
+ font-size: 12px;
+ font-weight: normal;
+}
+
+.atwho-view .atwho-header:hover {
+ cursor: default;
+}
+
+.atwho-view .cur {
+ background: $color-primary;
+ color: $color-primary-text;
+}
+.atwho-view .cur small {
+ color: $color-primary-text;
+}
+.atwho-view strong {
+ color: $color-main-text;
+ font-weight: normal;
+}
+.atwho-view .cur strong {
+ color: $color-primary-text;
+ font-weight: normal;
+}
+.atwho-view ul {
+ /* width: 100px; */
+ list-style:none;
+ padding:0;
+ margin:auto;
+ max-height: 200px;
+ overflow-y: auto;
+}
+.atwho-view ul li {
+ display: block;
+ padding: 5px 10px;
+ border-bottom: 1px solid $color-border;
+ cursor: pointer;
+}
+.atwho-view small {
+ font-size: smaller;
+ color: $color-main-text;
+ font-weight: normal;
+}
diff --git a/apps/comments/css/comments.css b/apps/comments/css/comments.css
index 8423151cac8..09771b4e954 100644
--- a/apps/comments/css/comments.css
+++ b/apps/comments/css/comments.css
@@ -48,22 +48,30 @@
margin-right: 6px;
}
-#commentsTabView .newCommentForm textarea {
+#commentsTabView .newCommentForm div.message {
resize: none;
}
+#commentsTabView .newCommentForm div.message:empty:before {
+ content: attr(data-placeholder);
+ color: grey;
+}
+
#commentsTabView .comment {
position: relative;
margin-bottom: 30px;
}
-#commentsTabView .comment .avatar {
+#commentsTabView .comment .avatar,
+.atwho-view-ul * .avatar{
width: 32px;
height: 32px;
line-height: 32px;
}
-#commentsTabView .comment .message .avatar {
+#commentsTabView .comment .message .avatar,
+.atwho-view-ul * .avatar
+{
display: inline-block;
}
@@ -112,11 +120,16 @@
}
#commentsTabView .comments li .message .avatar-name-wrapper,
+.atwho-view-ul * .avatar-name-wrapper,
#commentsTabView .comment .authorRow {
position: relative;
cursor: pointer;
}
+.atwho-view-ul * .avatar-name-wrapper {
+ white-space: nowrap;
+}
+
#commentsTabView .comment .author,
#commentsTabView .comment .date {
opacity: .5;
@@ -164,8 +177,6 @@
#commentsTabView .message.error {
color: #e9322d;
border-color: #e9322d;
- -webkit-box-shadow: 0 0 6px #f8b9b7;
- -moz-box-shadow: 0 0 6px #f8b9b7;
box-shadow: 0 0 6px #f8b9b7;
}
diff --git a/apps/comments/js/commentstabview.js b/apps/comments/js/commentstabview.js
index 3a20604326b..7398a709421 100644
--- a/apps/comments/js/commentstabview.js
+++ b/apps/comments/js/commentstabview.js
@@ -30,7 +30,7 @@
'{{/if}}' +
' </div>' +
' <form class="newCommentForm">' +
- ' <textarea rows="1" class="message" placeholder="{{newMessagePlaceholder}}">{{message}}</textarea>' +
+ ' <div contentEditable="true" class="message" data-placeholder="{{newMessagePlaceholder}}">{{message}}</div>' +
' <input class="submit icon-confirm" type="submit" value="" />' +
'{{#if isEditMode}}' +
' <input class="cancel pull-right" type="button" value="{{cancelText}}" />' +
@@ -62,6 +62,7 @@
/** @lends OCA.Comments.CommentsTabView.prototype */ {
id: 'commentsTabView',
className: 'tab commentsTabView',
+ _autoCompleteData: undefined,
events: {
'submit .newCommentForm': '_onSubmitComment',
@@ -69,7 +70,11 @@
'click .action.edit': '_onClickEditComment',
'click .action.delete': '_onClickDeleteComment',
'click .cancel': '_onClickCloseComment',
- 'click .comment': '_onClickComment'
+ 'click .comment': '_onClickComment',
+ 'keyup div.message': '_onTextChange',
+ 'change div.message': '_onTextChange',
+ 'input div.message': '_onTextChange',
+ 'paste div.message': '_onPaste'
},
_commentMaxLength: 1000,
@@ -80,11 +85,12 @@
this.collection.on('request', this._onRequest, this);
this.collection.on('sync', this._onEndRequest, this);
this.collection.on('add', this._onAddModel, this);
+ this.collection.on('change:message', this._onChangeModel, this);
this._commentMaxThreshold = this._commentMaxLength * 0.9;
// TODO: error handling
- _.bindAll(this, '_onTypeComment');
+ _.bindAll(this, '_onTypeComment', '_initAutoComplete', '_onAutoComplete');
},
template: function(params) {
@@ -140,8 +146,10 @@
setFileInfo: function(fileInfo) {
if (fileInfo) {
this.model = fileInfo;
+
this.render();
- this.collection.setObjectId(fileInfo.id);
+ this._initAutoComplete($('#commentsTabView').find('.newCommentForm .message'));
+ this.collection.setObjectId(this.model.id);
// reset to first page
this.collection.reset([], {silent: true});
this.nextPage();
@@ -164,7 +172,85 @@
this.delegateEvents();
this.$el.find('.message').on('keydown input change', this._onTypeComment);
- autosize(this.$el.find('.newCommentRow textarea'))
+ autosize(this.$el.find('.newCommentRow .message'))
+ },
+
+ _initAutoComplete: function($target) {
+ var s = this;
+ var limit = 10;
+ if(!_.isUndefined(OC.appConfig.comments)) {
+ limit = OC.appConfig.comments.maxAutoCompleteResults;
+ }
+ $target.atwho({
+ at: '@',
+ limit: limit,
+ callbacks: {
+ remoteFilter: s._onAutoComplete,
+ highlighter: function (li) {
+ // misuse the highlighter callback to instead of
+ // highlighting loads the avatars.
+ var $li = $(li);
+ $li.find('.avatar').avatar(undefined, 32);
+ return $li;
+ },
+ sorter: function (q, items) { return items; }
+ },
+ displayTpl: '<li>'
+ + '<span class="avatar-name-wrapper">'
+ + '<div class="avatar" '
+ + 'data-username="${id}"' // for avatars
+ + ' data-user="${id}"' // for contactsmenu
+ + ' data-user-display-name="${label}"></div>'
+ + ' <strong>${label}</strong>'
+ + '</span></li>',
+ insertTpl: ''
+ + '<span class="avatar-name-wrapper">'
+ + '<div class="avatar" '
+ + 'data-username="${id}"' // for avatars
+ + ' data-user="${id}"' // for contactsmenu
+ + ' data-user-display-name="${label}"></div>'
+ + ' <strong>${label}</strong>'
+ + '</span>',
+ searchKey: "label"
+ });
+ $target.on('inserted.atwho', function (je, $el) {
+ s._postRenderItem(
+ // we need to pass the parent of the inserted element
+ // passing the whole comments form would re-apply and request
+ // avatars from the server
+ $(je.target).find(
+ 'div[data-username="' + $el.find('[data-username]').data('username') + '"]'
+ ).parent()
+ );
+ });
+ },
+
+ _onAutoComplete: function(query, callback) {
+ if(_.isEmpty(query)) {
+ return;
+ }
+ var s = this;
+ if(!_.isUndefined(this._autoCompleteRequestTimer)) {
+ clearTimeout(this._autoCompleteRequestTimer);
+ }
+ this._autoCompleteRequestTimer = _.delay(function() {
+ if(!_.isUndefined(this._autoCompleteRequestCall)) {
+ this._autoCompleteRequestCall.abort();
+ }
+ this._autoCompleteRequestCall = $.get(
+ OC.generateUrl('/autocomplete/get'),
+ {
+ search: query,
+ itemType: 'files',
+ itemId: s.model.get('id'),
+ sorter: 'commenters|share-recipients',
+ limit: OC.appConfig.comments.maxAutoCompleteResults
+ },
+ function (data) {
+ callback(data);
+ }
+ );
+ }, 400);
},
_formatItem: function(commentModel) {
@@ -215,15 +301,80 @@
}
},
+ /**
+ * takes care of post-rendering after a new comment was added to the
+ * collection
+ *
+ * @param model
+ * @param collection
+ * @param options
+ * @private
+ */
_onAddModel: function(model, collection, options) {
- var $el = $(this.commentTemplate(this._formatItem(model)));
+ // we need to render it immediately, to ensure that the right
+ // order of comments is kept on opening comments tab
+ var $comment = $(this.commentTemplate(this._formatItem(model)));
if (!_.isUndefined(options.at) && collection.length > 1) {
- this.$container.find('li').eq(options.at).before($el);
+ this.$container.find('li').eq(options.at).before($comment);
} else {
- this.$container.append($el);
+ this.$container.append($comment);
}
+ this._postRenderItem($comment);
+ $('#commentsTabView').find('.newCommentForm div.message').text('').prop('disabled', false);
+
+ // we need to update the model, because it consists of client data
+ // only, but the server might add meta data, e.g. about mentions
+ var oldMentions = model.get('mentions');
+ var self = this;
+ model.fetch({
+ success: function (model) {
+ if(_.isEqual(oldMentions, model.get('mentions'))) {
+ // don't attempt to render if unnecessary, avoids flickering
+ return;
+ }
+ var $updated = $(self.commentTemplate(self._formatItem(model)));
+ $comment.html($updated.html());
+ self._postRenderItem($comment);
+ }
+ })
- this._postRenderItem($el);
+ },
+
+ /**
+ * takes care of post-rendering after a new comment was edited
+ *
+ * @param model
+ * @private
+ */
+ _onChangeModel: function (model) {
+ if(model.get('message').trim() === model.previous('message').trim()) {
+ return;
+ }
+
+ var $form = this.$container.find('.comment[data-id="' + model.id + '"] form');
+ var $row = $form.closest('.comment');
+ var $target = $row.data('commentEl');
+ if(_.isUndefined($target)) {
+ // ignore noise – this is only set after editing a comment and hitting post
+ return;
+ }
+ var self = this;
+
+ // we need to update the model, because it consists of client data
+ // only, but the server might add meta data, e.g. about mentions
+ model.fetch({
+ success: function (model) {
+ $target.removeClass('hidden');
+ $row.remove();
+
+ var $message = $target.find('.message');
+ $message
+ .html(self._formatMessage(model.get('message'), model.get('mentions')))
+ .find('.avatar')
+ .each(function () { $(this).avatar(); });
+ self._postRenderItem($message);
+ }
+ });
},
_postRenderItem: function($el) {
@@ -240,6 +391,10 @@
}
var $message = $el.find('.message');
+ if($message.length === 0) {
+ // it is the case when writing a comment and mentioning a person
+ $message = $el;
+ }
this._postRenderMessage($message);
},
@@ -261,19 +416,15 @@
message = escapeHTML(message).replace(/\n/g, '<br/>');
for(var i in mentions) {
+ if(!mentions.hasOwnProperty(i)) {
+ return;
+ }
var mention = '@' + mentions[i].mentionId;
- var avatar = '<div class="avatar" '
- + 'data-user="' + _.escape(mentions[i].mentionId) + '"'
- +' data-user-display-name="'
- + _.escape(mentions[i].mentionDisplayName) + '"></div>';
-
// escape possible regex characters in the name
mention = mention.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
- var displayName = ''
- + '<span class="avatar-name-wrapper">'
- + avatar + ' <strong>'+ _.escape(mentions[i].mentionDisplayName)+'</strong>'
- + '</span>';
+
+ var displayName = this._composeHTMLMention(mentions[i].mentionId, mentions[i].mentionDisplayName);
// replace every mention either at the start of the input or after a whitespace
// followed by a non-word character.
@@ -284,10 +435,24 @@
}
);
}
-
return message;
},
+ _composeHTMLMention: function(uid, displayName) {
+ var avatar = '<div class="avatar" '
+ + 'data-username="' + _.escape(uid) + '"'
+ + ' data-user="' + _.escape(uid) + '"'
+ + ' data-user-display-name="'
+ + _.escape(displayName) + '"></div>';
+
+ return ''
+ + '<span class="atwho-inserted" contenteditable="false">'
+ + '<span class="avatar-name-wrapper">'
+ + avatar + ' <strong>'+ _.escape(displayName)+'</strong>'
+ + '</span>'
+ + '</span>';
+ },
+
nextPage: function() {
if (this._loading || !this.collection.hasMoreResults()) {
return;
@@ -310,14 +475,24 @@
// spawn form
$comment.after($formRow);
$formRow.data('commentEl', $comment);
- $formRow.find('textarea').on('keydown input change', this._onTypeComment);
+ $formRow.find('.message').on('keydown input change', this._onTypeComment);
// copy avatar element from original to avoid flickering
$formRow.find('.avatar:first').replaceWith($comment.find('.avatar:first').clone());
$formRow.find('.has-tooltip').tooltip();
+ var $message = $formRow.find('.message');
+ $message
+ .html(this._formatMessage(commentToEdit.get('message'), commentToEdit.get('mentions')))
+ .find('.avatar')
+ .each(function () { $(this).avatar(); });
+ this._postRenderItem($message);
+
// Enable autosize
- autosize($formRow.find('textarea'));
+ autosize($formRow.find('.message'));
+
+ // enable autocomplete
+ this._initAutoComplete($formRow.find('.message'));
return false;
},
@@ -393,48 +568,41 @@
},
/**
- * takes care of updating comment elements after submit (either new
+ * takes care of updating comment element states after submit (either new
* comment or edit).
*
* @param {OC.Backbone.Model} model
* @param {jQuery} $form
- * @param {string|undefined} commentId
* @private
*/
- _onSubmitSuccess: function(model, $form, commentId) {
- var self = this;
+ _onSubmitSuccess: function(model, $form) {
var $submit = $form.find('.submit');
var $loading = $form.find('.submitLoading');
- var $textArea = $form.find('.message');
- model.fetch({
- success: function(model) {
- $submit.removeClass('hidden');
- $loading.addClass('hidden');
- var $target;
-
- if(!_.isUndefined(commentId)) {
- var $row = $form.closest('.comment');
- $target = $row.data('commentEl');
- $target.removeClass('hidden');
- $row.remove();
- } else {
- $target = $('.commentsTabView .comments').find('li:first');
- $textArea.val('').prop('disabled', false);
- }
+ $submit.removeClass('hidden');
+ $loading.addClass('hidden');
+ },
- var $message = $target.find('.message');
- $message
- .html(self._formatMessage(model.get('message'), model.get('mentions')))
- .find('.avatar')
- .each(function () { $(this).avatar(); });
+ _commentBodyHTML2Plain: function($el) {
+ var $comment = $el.clone();
- self._postRenderMessage($message);
- },
- error: function () {
- self._onSubmitError($form, commentId);
- }
+ $comment.find('.avatar-name-wrapper').each(function () {
+ var $this = $(this);
+ var $inserted = $this.parent();
+ $inserted.html('@' + $this.find('.avatar').data('username'));
});
+
+ var oldHtml;
+ var html = $comment.html();
+ do {
+ // replace works one by one
+ oldHtml = html;
+ html = oldHtml.replace("<br>", "\n"); // preserve line breaks
+ console.warn(html)
+ } while(oldHtml !== html);
+ $comment.html(html);
+
+ return $comment.text();
},
_onSubmitComment: function(e) {
@@ -444,26 +612,27 @@
var currentUser = OC.getCurrentUser();
var $submit = $form.find('.submit');
var $loading = $form.find('.submitLoading');
- var $textArea = $form.find('.message');
- var message = $textArea.val().trim();
+ var $commentField = $form.find('.message');
+ var message = $commentField.text().trim();
e.preventDefault();
if (!message.length || message.length > this._commentMaxLength) {
return;
}
- $textArea.prop('disabled', true);
+ $commentField.prop('disabled', true);
$submit.addClass('hidden');
$loading.removeClass('hidden');
+ message = this._commentBodyHTML2Plain($commentField);
if (commentId) {
// edit mode
var comment = this.collection.get(commentId);
comment.save({
- message: $textArea.val()
+ message: message
}, {
success: function(model) {
- self._onSubmitSuccess(model, $form, commentId);
+ self._onSubmitSuccess(model, $form);
},
error: function() {
self._onSubmitError($form, commentId);
@@ -475,7 +644,7 @@
actorDisplayName: currentUser.displayName,
actorType: 'users',
verb: 'comment',
- message: $textArea.val(),
+ message: message,
creationDateTime: (new Date()).toUTCString()
}, {
at: 0,
@@ -485,7 +654,7 @@
self._onSubmitSuccess(model, $form);
},
error: function() {
- self._onSubmitError($form);
+ self._onSubmitError($form, undefined);
}
});
}
@@ -514,6 +683,31 @@
},
/**
+ * ensures the contenteditable div is really empty, when user removed
+ * all input, so that the placeholder will be shown again
+ *
+ * @private
+ */
+ _onTextChange: function() {
+ var $message = $('#commentsTabView').find('.newCommentForm div.message');
+ if(!$message.text().trim().length) {
+ $message.empty();
+ }
+ },
+
+ /**
+ * Limit pasting to plain text
+ *
+ * @param e
+ * @private
+ */
+ _onPaste: function (e) {
+ e.preventDefault();
+ var text = e.originalEvent.clipboardData.getData("text/plain");
+ document.execCommand('insertText', false, text);
+ },
+
+ /**
* Returns whether the given message is long and needs
* collapsing
*/
diff --git a/apps/comments/js/merged.json b/apps/comments/js/merged.json
index 66a63e88d17..0202c7ff55a 100644
--- a/apps/comments/js/merged.json
+++ b/apps/comments/js/merged.json
@@ -5,5 +5,7 @@
"commentsummarymodel.js",
"commentstabview.js",
"filesplugin.js",
- "activitytabviewplugin.js"
+ "activitytabviewplugin.js",
+ "vendor/Caret.js/dist/jquery.caret.min.js",
+ "vendor/At.js/dist/js/jquery.atwho.min.js"
]
diff --git a/apps/comments/js/vendor/At.js/dist/js/jquery.atwho.min.js b/apps/comments/js/vendor/At.js/dist/js/jquery.atwho.min.js
new file mode 100644
index 00000000000..d1e60152b4c
--- /dev/null
+++ b/apps/comments/js/vendor/At.js/dist/js/jquery.atwho.min.js
@@ -0,0 +1 @@
+!function(t,e){"function"==typeof define&&define.amd?define(["jquery"],function(t){return e(t)}):"object"==typeof exports?module.exports=e(require("jquery")):e(jQuery)}(this,function(t){var e,i;i={ESC:27,TAB:9,ENTER:13,CTRL:17,A:65,P:80,N:78,LEFT:37,UP:38,RIGHT:39,DOWN:40,BACKSPACE:8,SPACE:32},e={beforeSave:function(t){return r.arrayToDefaultHash(t)},matcher:function(t,e,i,n){var r,o,s,a,h;return t=t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),i&&(t="(?:^|\\s)"+t),r=decodeURI("%C3%80"),o=decodeURI("%C3%BF"),h=n?" ":"",a=new RegExp(t+"([A-Za-z"+r+"-"+o+"0-9_"+h+"'.+-]*)$|"+t+"([^\\x00-\\xff]*)$","gi"),s=a.exec(e),s?s[2]||s[1]:null},filter:function(t,e,i){var n,r,o,s;for(n=[],r=0,s=e.length;s>r;r++)o=e[r],~new String(o[i]).toLowerCase().indexOf(t.toLowerCase())&&n.push(o);return n},remoteFilter:null,sorter:function(t,e,i){var n,r,o,s;if(!t)return e;for(n=[],r=0,s=e.length;s>r;r++)o=e[r],o.atwho_order=new String(o[i]).toLowerCase().indexOf(t.toLowerCase()),o.atwho_order>-1&&n.push(o);return n.sort(function(t,e){return t.atwho_order-e.atwho_order})},tplEval:function(t,e){var i,n,r;r=t;try{return"string"!=typeof t&&(r=t(e)),r.replace(/\$\{([^\}]*)\}/g,function(t,i,n){return e[i]})}catch(n){return i=n,""}},highlighter:function(t,e){var i;return e?(i=new RegExp(">\\s*([^<]*?)("+e.replace("+","\\+")+")([^<]*)\\s*<","ig"),t.replace(i,function(t,e,i,n){return"> "+e+"<strong>"+i+"</strong>"+n+" <"})):t},beforeInsert:function(t,e,i){return t},beforeReposition:function(t){return t},afterMatchFailed:function(t,e){}};var n;n=function(){function e(e){this.currentFlag=null,this.controllers={},this.aliasMaps={},this.$inputor=t(e),this.setupRootElement(),this.listen()}return e.prototype.createContainer=function(e){var i;return null!=(i=this.$el)&&i.remove(),t(e.body).append(this.$el=t("<div class='atwho-container'></div>"))},e.prototype.setupRootElement=function(e,i){var n,r;if(null==i&&(i=!1),e)this.window=e.contentWindow,this.document=e.contentDocument||this.window.document,this.iframe=e;else{this.document=this.$inputor[0].ownerDocument,this.window=this.document.defaultView||this.document.parentWindow;try{this.iframe=this.window.frameElement}catch(r){if(n=r,this.iframe=null,t.fn.atwho.debug)throw new Error("iframe auto-discovery is failed.\nPlease use `setIframe` to set the target iframe manually.\n"+n)}}return this.createContainer((this.iframeAsRoot=i)?this.document:document)},e.prototype.controller=function(t){var e,i,n,r;if(this.aliasMaps[t])i=this.controllers[this.aliasMaps[t]];else{r=this.controllers;for(n in r)if(e=r[n],n===t){i=e;break}}return i?i:this.controllers[this.currentFlag]},e.prototype.setContextFor=function(t){return this.currentFlag=t,this},e.prototype.reg=function(t,e){var i,n;return n=(i=this.controllers)[t]||(i[t]=this.$inputor.is("[contentEditable]")?new l(this,t):new s(this,t)),e.alias&&(this.aliasMaps[e.alias]=t),n.init(e),this},e.prototype.listen=function(){return this.$inputor.on("compositionstart",function(t){return function(e){var i;return null!=(i=t.controller())&&i.view.hide(),t.isComposing=!0,null}}(this)).on("compositionend",function(t){return function(e){return t.isComposing=!1,setTimeout(function(e){return t.dispatch(e)}),null}}(this)).on("keyup.atwhoInner",function(t){return function(e){return t.onKeyup(e)}}(this)).on("keydown.atwhoInner",function(t){return function(e){return t.onKeydown(e)}}(this)).on("blur.atwhoInner",function(t){return function(e){var i;return(i=t.controller())?(i.expectedQueryCBId=null,i.view.hide(e,i.getOpt("displayTimeout"))):void 0}}(this)).on("click.atwhoInner",function(t){return function(e){return t.dispatch(e)}}(this)).on("scroll.atwhoInner",function(t){return function(){var e;return e=t.$inputor.scrollTop(),function(i){var n,r;return n=i.target.scrollTop,e!==n&&null!=(r=t.controller())&&r.view.hide(i),e=n,!0}}}(this)())},e.prototype.shutdown=function(){var t,e,i;i=this.controllers;for(t in i)e=i[t],e.destroy(),delete this.controllers[t];return this.$inputor.off(".atwhoInner"),this.$el.remove()},e.prototype.dispatch=function(t){var e,i,n,r;n=this.controllers,r=[];for(e in n)i=n[e],r.push(i.lookUp(t));return r},e.prototype.onKeyup=function(e){var n;switch(e.keyCode){case i.ESC:e.preventDefault(),null!=(n=this.controller())&&n.view.hide();break;case i.DOWN:case i.UP:case i.CTRL:case i.ENTER:t.noop();break;case i.P:case i.N:e.ctrlKey||this.dispatch(e);break;default:this.dispatch(e)}},e.prototype.onKeydown=function(e){var n,r;if(r=null!=(n=this.controller())?n.view:void 0,r&&r.visible())switch(e.keyCode){case i.ESC:e.preventDefault(),r.hide(e);break;case i.UP:e.preventDefault(),r.prev();break;case i.DOWN:e.preventDefault(),r.next();break;case i.P:if(!e.ctrlKey)return;e.preventDefault(),r.prev();break;case i.N:if(!e.ctrlKey)return;e.preventDefault(),r.next();break;case i.TAB:case i.ENTER:case i.SPACE:if(!r.visible())return;if(!this.controller().getOpt("spaceSelectsMatch")&&e.keyCode===i.SPACE)return;if(!this.controller().getOpt("tabSelectsMatch")&&e.keyCode===i.TAB)return;r.highlighted()?(e.preventDefault(),r.choose(e)):r.hide(e);break;default:t.noop()}},e}();var r,o=[].slice;r=function(){function i(e,i){this.app=e,this.at=i,this.$inputor=this.app.$inputor,this.id=this.$inputor[0].id||this.uid(),this.expectedQueryCBId=null,this.setting=null,this.query=null,this.pos=0,this.range=null,0===(this.$el=t("#atwho-ground-"+this.id,this.app.$el)).length&&this.app.$el.append(this.$el=t("<div id='atwho-ground-"+this.id+"'></div>")),this.model=new u(this),this.view=new c(this)}return i.prototype.uid=function(){return(Math.random().toString(16)+"000000000").substr(2,8)+(new Date).getTime()},i.prototype.init=function(e){return this.setting=t.extend({},this.setting||t.fn.atwho["default"],e),this.view.init(),this.model.reload(this.setting.data)},i.prototype.destroy=function(){return this.trigger("beforeDestroy"),this.model.destroy(),this.view.destroy(),this.$el.remove()},i.prototype.callDefault=function(){var i,n,r,s;s=arguments[0],i=2<=arguments.length?o.call(arguments,1):[];try{return e[s].apply(this,i)}catch(r){return n=r,t.error(n+" Or maybe At.js doesn't have function "+s)}},i.prototype.trigger=function(t,e){var i,n;return null==e&&(e=[]),e.push(this),i=this.getOpt("alias"),n=i?t+"-"+i+".atwho":t+".atwho",this.$inputor.trigger(n,e)},i.prototype.callbacks=function(t){return this.getOpt("callbacks")[t]||e[t]},i.prototype.getOpt=function(t,e){var i,n;try{return this.setting[t]}catch(n){return i=n,null}},i.prototype.insertContentFor=function(e){var i,n;return n=this.getOpt("insertTpl"),i=t.extend({},e.data("item-data"),{"atwho-at":this.at}),this.callbacks("tplEval").call(this,n,i,"onInsert")},i.prototype.renderView=function(t){var e;return e=this.getOpt("searchKey"),t=this.callbacks("sorter").call(this,this.query.text,t.slice(0,1001),e),this.view.render(t.slice(0,this.getOpt("limit")))},i.arrayToDefaultHash=function(e){var i,n,r,o;if(!t.isArray(e))return e;for(o=[],i=0,r=e.length;r>i;i++)n=e[i],t.isPlainObject(n)?o.push(n):o.push({name:n});return o},i.prototype.lookUp=function(t){var e,i;if((!t||"click"!==t.type||this.getOpt("lookUpOnClick"))&&(!this.getOpt("suspendOnComposing")||!this.app.isComposing))return(e=this.catchQuery(t))?(this.app.setContextFor(this.at),(i=this.getOpt("delay"))?this._delayLookUp(e,i):this._lookUp(e),e):(this.expectedQueryCBId=null,e)},i.prototype._delayLookUp=function(t,e){var i,n;return i=Date.now?Date.now():(new Date).getTime(),this.previousCallTime||(this.previousCallTime=i),n=e-(i-this.previousCallTime),n>0&&e>n?(this.previousCallTime=i,this._stopDelayedCall(),this.delayedCallTimeout=setTimeout(function(e){return function(){return e.previousCallTime=0,e.delayedCallTimeout=null,e._lookUp(t)}}(this),e)):(this._stopDelayedCall(),this.previousCallTime!==i&&(this.previousCallTime=0),this._lookUp(t))},i.prototype._stopDelayedCall=function(){return this.delayedCallTimeout?(clearTimeout(this.delayedCallTimeout),this.delayedCallTimeout=null):void 0},i.prototype._generateQueryCBId=function(){return{}},i.prototype._lookUp=function(e){var i;return i=function(t,e){return t===this.expectedQueryCBId?e&&e.length>0?this.renderView(this.constructor.arrayToDefaultHash(e)):this.view.hide():void 0},this.expectedQueryCBId=this._generateQueryCBId(),this.model.query(e.text,t.proxy(i,this,this.expectedQueryCBId))},i}();var s,a=function(t,e){function i(){this.constructor=t}for(var n in e)h.call(e,n)&&(t[n]=e[n]);return i.prototype=e.prototype,t.prototype=new i,t.__super__=e.prototype,t},h={}.hasOwnProperty;s=function(e){function i(){return i.__super__.constructor.apply(this,arguments)}return a(i,e),i.prototype.catchQuery=function(){var t,e,i,n,r,o,s;return e=this.$inputor.val(),t=this.$inputor.caret("pos",{iframe:this.app.iframe}),s=e.slice(0,t),r=this.callbacks("matcher").call(this,this.at,s,this.getOpt("startWithSpace"),this.getOpt("acceptSpaceBar")),n="string"==typeof r,n&&r.length<this.getOpt("minLen",0)?void 0:(n&&r.length<=this.getOpt("maxLen",20)?(o=t-r.length,i=o+r.length,this.pos=o,r={text:r,headPos:o,endPos:i},this.trigger("matched",[this.at,r.text])):(r=null,this.view.hide()),this.query=r)},i.prototype.rect=function(){var e,i,n;if(e=this.$inputor.caret("offset",this.pos-1,{iframe:this.app.iframe}))return this.app.iframe&&!this.app.iframeAsRoot&&(i=t(this.app.iframe).offset(),e.left+=i.left,e.top+=i.top),n=this.app.document.selection?0:2,{left:e.left,top:e.top,bottom:e.top+e.height+n}},i.prototype.insert=function(t,e){var i,n,r,o,s;return i=this.$inputor,n=i.val(),r=n.slice(0,Math.max(this.query.headPos-this.at.length,0)),o=""===(o=this.getOpt("suffix"))?o:o||" ",t+=o,s=""+r+t+n.slice(this.query.endPos||0),i.val(s),i.caret("pos",r.length+t.length,{iframe:this.app.iframe}),i.is(":focus")||i.focus(),i.change()},i}(r);var l,a=function(t,e){function i(){this.constructor=t}for(var n in e)h.call(e,n)&&(t[n]=e[n]);return i.prototype=e.prototype,t.prototype=new i,t.__super__=e.prototype,t},h={}.hasOwnProperty;l=function(e){function n(){return n.__super__.constructor.apply(this,arguments)}return a(n,e),n.prototype._getRange=function(){var t;return t=this.app.window.getSelection(),t.rangeCount>0?t.getRangeAt(0):void 0},n.prototype._setRange=function(e,i,n){return null==n&&(n=this._getRange()),n&&i?(i=t(i)[0],"after"===e?(n.setEndAfter(i),n.setStartAfter(i)):(n.setEndBefore(i),n.setStartBefore(i)),n.collapse(!1),this._clearRange(n)):void 0},n.prototype._clearRange=function(t){var e;return null==t&&(t=this._getRange()),e=this.app.window.getSelection(),null==this.ctrl_a_pressed?(e.removeAllRanges(),e.addRange(t)):void 0},n.prototype._movingEvent=function(t){var e;return"click"===t.type||(e=t.which)===i.RIGHT||e===i.LEFT||e===i.UP||e===i.DOWN},n.prototype._unwrap=function(e){var i;return e=t(e).unwrap().get(0),(i=e.nextSibling)&&i.nodeValue&&(e.nodeValue+=i.nodeValue,t(i).remove()),e},n.prototype.catchQuery=function(e){var n,r,o,s,a,h,l,u,c,p,f,d;if((d=this._getRange())&&d.collapsed){if(e.which===i.ENTER)return(r=t(d.startContainer).closest(".atwho-query")).contents().unwrap(),r.is(":empty")&&r.remove(),(r=t(".atwho-query",this.app.document)).text(r.text()).contents().last().unwrap(),void this._clearRange();if(/firefox/i.test(navigator.userAgent)){if(t(d.startContainer).is(this.$inputor))return void this._clearRange();e.which===i.BACKSPACE&&d.startContainer.nodeType===document.ELEMENT_NODE&&(c=d.startOffset-1)>=0?(o=d.cloneRange(),o.setStart(d.startContainer,c),t(o.cloneContents()).contents().last().is(".atwho-inserted")&&(a=t(d.startContainer).contents().get(c),this._setRange("after",t(a).contents().last()))):e.which===i.LEFT&&d.startContainer.nodeType===document.TEXT_NODE&&(n=t(d.startContainer.previousSibling),n.is(".atwho-inserted")&&0===d.startOffset&&this._setRange("after",n.contents().last()))}if(t(d.startContainer).closest(".atwho-inserted").addClass("atwho-query").siblings().removeClass("atwho-query"),(r=t(".atwho-query",this.app.document)).length>0&&r.is(":empty")&&0===r.text().length&&r.remove(),this._movingEvent(e)||r.removeClass("atwho-inserted"),r.length>0)switch(e.which){case i.LEFT:return this._setRange("before",r.get(0),d),void r.removeClass("atwho-query");case i.RIGHT:return this._setRange("after",r.get(0).nextSibling,d),void r.removeClass("atwho-query")}if(r.length>0&&(f=r.attr("data-atwho-at-query"))&&(r.empty().html(f).attr("data-atwho-at-query",null),this._setRange("after",r.get(0),d)),o=d.cloneRange(),o.setStart(d.startContainer,0),u=this.callbacks("matcher").call(this,this.at,o.toString(),this.getOpt("startWithSpace"),this.getOpt("acceptSpaceBar")),h="string"==typeof u,0===r.length&&h&&(s=d.startOffset-this.at.length-u.length)>=0&&(d.setStart(d.startContainer,s),r=t("<span/>",this.app.document).attr(this.getOpt("editableAtwhoQueryAttrs")).addClass("atwho-query"),d.surroundContents(r.get(0)),l=r.contents().last().get(0),l&&(/firefox/i.test(navigator.userAgent)?(d.setStart(l,l.length),d.setEnd(l,l.length),this._clearRange(d)):this._setRange("after",l,d))),!(h&&u.length<this.getOpt("minLen",0)))return h&&u.length<=this.getOpt("maxLen",20)?(p={text:u,el:r},this.trigger("matched",[this.at,p.text]),this.query=p):(this.view.hide(),this.query={el:r},r.text().indexOf(this.at)>=0&&(this._movingEvent(e)&&r.hasClass("atwho-inserted")?r.removeClass("atwho-query"):!1!==this.callbacks("afterMatchFailed").call(this,this.at,r)&&this._setRange("after",this._unwrap(r.text(r.text()).contents().first()))),null)}},n.prototype.rect=function(){var e,i,n;return n=this.query.el.offset(),n&&this.query.el[0].getClientRects().length?(this.app.iframe&&!this.app.iframeAsRoot&&(i=(e=t(this.app.iframe)).offset(),n.left+=i.left-this.$inputor.scrollLeft(),n.top+=i.top-this.$inputor.scrollTop()),n.bottom=n.top+this.query.el.height(),n):void 0},n.prototype.insert=function(t,e){var i,n,r,o,s;return this.$inputor.is(":focus")||this.$inputor.focus(),n=this.getOpt("functionOverrides"),n.insert?n.insert.call(this,t,e):(o=""===(o=this.getOpt("suffix"))?o:o||" ",i=e.data("item-data"),this.query.el.removeClass("atwho-query").addClass("atwho-inserted").html(t).attr("data-atwho-at-query",""+i["atwho-at"]+this.query.text).attr("contenteditable","false"),(r=this._getRange())&&(this.query.el.length&&r.setEndAfter(this.query.el[0]),r.collapse(!1),r.insertNode(s=this.app.document.createTextNode(""+o)),this._setRange("after",s,r)),this.$inputor.is(":focus")||this.$inputor.focus(),this.$inputor.change())},n}(r);var u;u=function(){function e(t){this.context=t,this.at=this.context.at,this.storage=this.context.$inputor}return e.prototype.destroy=function(){return this.storage.data(this.at,null)},e.prototype.saved=function(){return this.fetch()>0},e.prototype.query=function(t,e){var i,n,r;return n=this.fetch(),r=this.context.getOpt("searchKey"),n=this.context.callbacks("filter").call(this.context,t,n,r)||[],i=this.context.callbacks("remoteFilter"),n.length>0||!i&&0===n.length?e(n):i.call(this.context,t,e)},e.prototype.fetch=function(){return this.storage.data(this.at)||[]},e.prototype.save=function(t){return this.storage.data(this.at,this.context.callbacks("beforeSave").call(this.context,t||[]))},e.prototype.load=function(t){return!this.saved()&&t?this._load(t):void 0},e.prototype.reload=function(t){return this._load(t)},e.prototype._load=function(e){return"string"==typeof e?t.ajax(e,{dataType:"json"}).done(function(t){return function(e){return t.save(e)}}(this)):this.save(e)},e}();var c;c=function(){function e(e){this.context=e,this.$el=t("<div class='atwho-view'><ul class='atwho-view-ul'></ul></div>"),this.$elUl=this.$el.children(),this.timeoutID=null,this.context.$el.append(this.$el),this.bindEvent()}return e.prototype.init=function(){var t,e;return e=this.context.getOpt("alias")||this.context.at.charCodeAt(0),t=this.context.getOpt("headerTpl"),t&&1===this.$el.children().length&&this.$el.prepend(t),this.$el.attr({id:"at-view-"+e})},e.prototype.destroy=function(){return this.$el.remove()},e.prototype.bindEvent=function(){var e,i,n;return e=this.$el.find("ul"),i=0,n=0,e.on("mousemove.atwho-view","li",function(r){return function(r){var o;if((i!==r.clientX||n!==r.clientY)&&(i=r.clientX,n=r.clientY,o=t(r.currentTarget),!o.hasClass("cur")))return e.find(".cur").removeClass("cur"),o.addClass("cur")}}(this)).on("click.atwho-view","li",function(i){return function(n){return e.find(".cur").removeClass("cur"),t(n.currentTarget).addClass("cur"),i.choose(n),n.preventDefault()}}(this))},e.prototype.visible=function(){return t.expr.filters.visible(this.$el[0])},e.prototype.highlighted=function(){return this.$el.find(".cur").length>0},e.prototype.choose=function(t){var e,i;return(e=this.$el.find(".cur")).length&&(i=this.context.insertContentFor(e),this.context._stopDelayedCall(),this.context.insert(this.context.callbacks("beforeInsert").call(this.context,i,e,t),e),this.context.trigger("inserted",[e,t]),this.hide(t)),this.context.getOpt("hideWithoutSuffix")?this.stopShowing=!0:void 0},e.prototype.reposition=function(e){var i,n,r,o;return i=this.context.app.iframeAsRoot?this.context.app.window:window,e.bottom+this.$el.height()-t(i).scrollTop()>t(i).height()&&(e.bottom=e.top-this.$el.height()),e.left>(r=t(i).width()-this.$el.width()-5)&&(e.left=r),n={left:e.left,top:e.bottom},null!=(o=this.context.callbacks("beforeReposition"))&&o.call(this.context,n),this.$el.offset(n),this.context.trigger("reposition",[n])},e.prototype.next=function(){var t,e,i,n;return t=this.$el.find(".cur").removeClass("cur"),e=t.next(),e.length||(e=this.$el.find("li:first")),e.addClass("cur"),i=e[0],n=i.offsetTop+i.offsetHeight+(i.nextSibling?i.nextSibling.offsetHeight:0),this.scrollTop(Math.max(0,n-this.$el.height()))},e.prototype.prev=function(){var t,e,i,n;return t=this.$el.find(".cur").removeClass("cur"),i=t.prev(),i.length||(i=this.$el.find("li:last")),i.addClass("cur"),n=i[0],e=n.offsetTop+n.offsetHeight+(n.nextSibling?n.nextSibling.offsetHeight:0),this.scrollTop(Math.max(0,e-this.$el.height()))},e.prototype.scrollTop=function(t){var e;return e=this.context.getOpt("scrollDuration"),e?this.$elUl.animate({scrollTop:t},e):this.$elUl.scrollTop(t)},e.prototype.show=function(){var t;return this.stopShowing?void(this.stopShowing=!1):(this.visible()||(this.$el.show(),this.$el.scrollTop(0),this.context.trigger("shown")),(t=this.context.rect())?this.reposition(t):void 0)},e.prototype.hide=function(t,e){var i;if(this.visible())return isNaN(e)?(this.$el.hide(),this.context.trigger("hidden",[t])):(i=function(t){return function(){return t.hide()}}(this),clearTimeout(this.timeoutID),this.timeoutID=setTimeout(i,e))},e.prototype.render=function(e){var i,n,r,o,s,a,h;if(!(t.isArray(e)&&e.length>0))return void this.hide();for(this.$el.find("ul").empty(),n=this.$el.find("ul"),h=this.context.getOpt("displayTpl"),r=0,s=e.length;s>r;r++)o=e[r],o=t.extend({},o,{"atwho-at":this.context.at}),a=this.context.callbacks("tplEval").call(this.context,h,o,"onDisplay"),i=t(this.context.callbacks("highlighter").call(this.context,a,this.context.query.text)),i.data("item-data",o),n.append(i);return this.show(),this.context.getOpt("highlightFirst")?n.find("li:first").addClass("cur"):void 0},e}();var p;p={load:function(t,e){var i;return(i=this.controller(t))?i.model.load(e):void 0},isSelecting:function(){var t;return!!(null!=(t=this.controller())?t.view.visible():void 0)},hide:function(){var t;return null!=(t=this.controller())?t.view.hide():void 0},reposition:function(){var t;return(t=this.controller())?t.view.reposition(t.rect()):void 0},setIframe:function(t,e){return this.setupRootElement(t,e),null},run:function(){return this.dispatch()},destroy:function(){return this.shutdown(),this.$inputor.data("atwho",null)}},t.fn.atwho=function(e){var i,r;return i=arguments,r=null,this.filter('textarea, input, [contenteditable=""], [contenteditable=true]').each(function(){var o,s;return(s=(o=t(this)).data("atwho"))||o.data("atwho",s=new n(this)),"object"!=typeof e&&e?p[e]&&s?r=p[e].apply(s,Array.prototype.slice.call(i,1)):t.error("Method "+e+" does not exist on jQuery.atwho"):s.reg(e.at,e)}),null!=r?r:this},t.fn.atwho["default"]={at:void 0,alias:void 0,data:null,displayTpl:"<li>${name}</li>",insertTpl:"${atwho-at}${name}",headerTpl:null,callbacks:e,functionOverrides:{},searchKey:"name",suffix:void 0,hideWithoutSuffix:!1,startWithSpace:!0,acceptSpaceBar:!1,highlightFirst:!0,limit:5,maxLen:20,minLen:0,displayTimeout:300,delay:null,spaceSelectsMatch:!1,tabSelectsMatch:!0,editableAtwhoQueryAttrs:{},scrollDuration:150,suspendOnComposing:!0,lookUpOnClick:!0},t.fn.atwho.debug=!1}); \ No newline at end of file
diff --git a/apps/comments/js/vendor/Caret.js/dist/jquery.caret.min.js b/apps/comments/js/vendor/Caret.js/dist/jquery.caret.min.js
new file mode 100644
index 00000000000..a4d02eae247
--- /dev/null
+++ b/apps/comments/js/vendor/Caret.js/dist/jquery.caret.min.js
@@ -0,0 +1,2 @@
+/*! jquery.caret 2015-02-01 */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(c){return a.returnExportsGlobal=b(c)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){"use strict";var b,c,d,e,f,g,h,i,j,k,l;k="caret",b=function(){function b(a){this.$inputor=a,this.domInputor=this.$inputor[0]}return b.prototype.setPos=function(){return this.domInputor},b.prototype.getIEPosition=function(){return this.getPosition()},b.prototype.getPosition=function(){var a,b;return b=this.getOffset(),a=this.$inputor.offset(),b.left-=a.left,b.top-=a.top,b},b.prototype.getOldIEPos=function(){var a,b;return b=h.selection.createRange(),a=h.body.createTextRange(),a.moveToElementText(this.domInputor),a.setEndPoint("EndToEnd",b),a.text.length},b.prototype.getPos=function(){var a,b,c;return(c=this.range())?(a=c.cloneRange(),a.selectNodeContents(this.domInputor),a.setEnd(c.endContainer,c.endOffset),b=a.toString().length,a.detach(),b):h.selection?this.getOldIEPos():void 0},b.prototype.getOldIEOffset=function(){var a,b;return a=h.selection.createRange().duplicate(),a.moveStart("character",-1),b=a.getBoundingClientRect(),{height:b.bottom-b.top,left:b.left,top:b.top}},b.prototype.getOffset=function(){var b,c,d,e,f;return j.getSelection&&(d=this.range())?(d.endOffset-1>0&&d.endContainer===!this.domInputor&&(b=d.cloneRange(),b.setStart(d.endContainer,d.endOffset-1),b.setEnd(d.endContainer,d.endOffset),e=b.getBoundingClientRect(),c={height:e.height,left:e.left+e.width,top:e.top},b.detach()),c&&0!==(null!=c?c.height:void 0)||(b=d.cloneRange(),f=a(h.createTextNode("|")),b.insertNode(f[0]),b.selectNode(f[0]),e=b.getBoundingClientRect(),c={height:e.height,left:e.left,top:e.top},f.remove(),b.detach())):h.selection&&(c=this.getOldIEOffset()),c&&(c.top+=a(j).scrollTop(),c.left+=a(j).scrollLeft()),c},b.prototype.range=function(){var a;if(j.getSelection)return a=j.getSelection(),a.rangeCount>0?a.getRangeAt(0):null},b}(),c=function(){function b(a){this.$inputor=a,this.domInputor=this.$inputor[0]}return b.prototype.getIEPos=function(){var a,b,c,d,e,f,g;return b=this.domInputor,f=h.selection.createRange(),e=0,f&&f.parentElement()===b&&(d=b.value.replace(/\r\n/g,"\n"),c=d.length,g=b.createTextRange(),g.moveToBookmark(f.getBookmark()),a=b.createTextRange(),a.collapse(!1),e=g.compareEndPoints("StartToEnd",a)>-1?c:-g.moveStart("character",-c)),e},b.prototype.getPos=function(){return h.selection?this.getIEPos():this.domInputor.selectionStart},b.prototype.setPos=function(a){var b,c;return b=this.domInputor,h.selection?(c=b.createTextRange(),c.move("character",a),c.select()):b.setSelectionRange&&b.setSelectionRange(a,a),b},b.prototype.getIEOffset=function(a){var b,c,d,e;return c=this.domInputor.createTextRange(),a||(a=this.getPos()),c.move("character",a),d=c.boundingLeft,e=c.boundingTop,b=c.boundingHeight,{left:d,top:e,height:b}},b.prototype.getOffset=function(b){var c,d,e;return c=this.$inputor,h.selection?(d=this.getIEOffset(b),d.top+=a(j).scrollTop()+c.scrollTop(),d.left+=a(j).scrollLeft()+c.scrollLeft(),d):(d=c.offset(),e=this.getPosition(b),d={left:d.left+e.left-c.scrollLeft(),top:d.top+e.top-c.scrollTop(),height:e.height})},b.prototype.getPosition=function(a){var b,c,e,f,g,h,i;return b=this.$inputor,f=function(a){return a=a.replace(/<|>|`|"|&/g,"?").replace(/\r\n|\r|\n/g,"<br/>"),/firefox/i.test(navigator.userAgent)&&(a=a.replace(/\s/g,"&nbsp;")),a},void 0===a&&(a=this.getPos()),i=b.val().slice(0,a),e=b.val().slice(a),g="<span style='position: relative; display: inline;'>"+f(i)+"</span>",g+="<span id='caret' style='position: relative; display: inline;'>|</span>",g+="<span style='position: relative; display: inline;'>"+f(e)+"</span>",h=new d(b),c=h.create(g).rect()},b.prototype.getIEPosition=function(a){var b,c,d,e,f;return d=this.getIEOffset(a),c=this.$inputor.offset(),e=d.left-c.left,f=d.top-c.top,b=d.height,{left:e,top:f,height:b}},b}(),d=function(){function b(a){this.$inputor=a}return b.prototype.css_attr=["borderBottomWidth","borderLeftWidth","borderRightWidth","borderTopStyle","borderRightStyle","borderBottomStyle","borderLeftStyle","borderTopWidth","boxSizing","fontFamily","fontSize","fontWeight","height","letterSpacing","lineHeight","marginBottom","marginLeft","marginRight","marginTop","outlineWidth","overflow","overflowX","overflowY","paddingBottom","paddingLeft","paddingRight","paddingTop","textAlign","textOverflow","textTransform","whiteSpace","wordBreak","wordWrap"],b.prototype.mirrorCss=function(){var b,c=this;return b={position:"absolute",left:-9999,top:0,zIndex:-2e4},"TEXTAREA"===this.$inputor.prop("tagName")&&this.css_attr.push("width"),a.each(this.css_attr,function(a,d){return b[d]=c.$inputor.css(d)}),b},b.prototype.create=function(b){return this.$mirror=a("<div></div>"),this.$mirror.css(this.mirrorCss()),this.$mirror.html(b),this.$inputor.after(this.$mirror),this},b.prototype.rect=function(){var a,b,c;return a=this.$mirror.find("#caret"),b=a.position(),c={left:b.left,top:b.top,height:a.height()},this.$mirror.remove(),c},b}(),e={contentEditable:function(a){return!(!a[0].contentEditable||"true"!==a[0].contentEditable)}},g={pos:function(a){return a||0===a?this.setPos(a):this.getPos()},position:function(a){return h.selection?this.getIEPosition(a):this.getPosition(a)},offset:function(a){var b;return b=this.getOffset(a)}},h=null,j=null,i=null,l=function(a){var b;return(b=null!=a?a.iframe:void 0)?(i=b,j=b.contentWindow,h=b.contentDocument||j.document):(i=void 0,j=window,h=document)},f=function(a){var b;h=a[0].ownerDocument,j=h.defaultView||h.parentWindow;try{return i=j.frameElement}catch(c){b=c}},a.fn.caret=function(d,f,h){var i;return g[d]?(a.isPlainObject(f)?(l(f),f=void 0):l(h),i=e.contentEditable(this)?new b(this):new c(this),g[d].apply(i,[f])):a.error("Method "+d+" does not exist on jQuery.caret")},a.fn.caret.EditableCaret=b,a.fn.caret.InputCaret=c,a.fn.caret.Utils=e,a.fn.caret.apis=g}); \ No newline at end of file
diff --git a/apps/comments/l10n/es_CO.js b/apps/comments/l10n/es_CO.js
new file mode 100644
index 00000000000..e291a497795
--- /dev/null
+++ b/apps/comments/l10n/es_CO.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_CO.json b/apps/comments/l10n/es_CO.json
new file mode 100644
index 00000000000..1a9e2231489
--- /dev/null
+++ b/apps/comments/l10n/es_CO.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/l10n/es_CR.js b/apps/comments/l10n/es_CR.js
new file mode 100644
index 00000000000..e291a497795
--- /dev/null
+++ b/apps/comments/l10n/es_CR.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_CR.json b/apps/comments/l10n/es_CR.json
new file mode 100644
index 00000000000..1a9e2231489
--- /dev/null
+++ b/apps/comments/l10n/es_CR.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/l10n/es_DO.js b/apps/comments/l10n/es_DO.js
new file mode 100644
index 00000000000..e291a497795
--- /dev/null
+++ b/apps/comments/l10n/es_DO.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_DO.json b/apps/comments/l10n/es_DO.json
new file mode 100644
index 00000000000..1a9e2231489
--- /dev/null
+++ b/apps/comments/l10n/es_DO.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/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/l10n/ka_GE.js b/apps/comments/l10n/ka_GE.js
index 6eb6c73569b..69b8f03d7b8 100644
--- a/apps/comments/l10n/ka_GE.js
+++ b/apps/comments/l10n/ka_GE.js
@@ -1,7 +1,34 @@
OC.L10N.register(
"comments",
{
+ "Comments" : "კომენტარები",
+ "Unknown user" : "უცნობი მომხმარებელი",
+ "New comment …" : "ახალი კომენტარი ...",
+ "Delete comment" : "კომენტარის გაუქმება",
+ "Post" : "პოსტი",
"Cancel" : "უარყოფა",
- "Save" : "შენახვა"
+ "Edit comment" : "კომენტარის ცვლილება",
+ "[Deleted user]" : "[გაუქმებული მომხმარებელი]",
+ "No comments yet, start the conversation!" : "ჯერ კომენტარები არაა, დაიწყეთ საუბარი! ",
+ "More comments …" : "მეტი კომენტარი ...",
+ "Save" : "შენახვა",
+ "Allowed characters {count} of {max}" : "დაშვებული სიმბოლოები {count} {max}-იდან",
+ "Error occurred while retrieving comment with id {id}" : "კომენტარის id-ით {id}-ის მიღებისას წარმოიშვა შეცდომა",
+ "Error occurred while updating comment with id {id}" : "კომენტარის id-იდ {id}-ის ცვლილებისას წარმოიშვა შეცდომა",
+ "Error occurred while posting comment" : "კომენტარის გამოქვეყნებისას წარმოიშვა შეცდომა",
+ "_%n unread comment_::_%n unread comments_" : ["%n წაუკუთხავი კომენტარი"],
+ "Comment" : "კომენტარის დამატება",
+ "You commented" : "თქვენ გააკეთეთ კომენტარი",
+ "%1$s commented" : "%1$s-მა გააკეთა კომენტარი",
+ "{author} commented" : "{author}-მა გააკეთა კომენტარი",
+ "You commented on %1$s" : "თქვენ გააკეთეთ კომენტარი %1$s-ზე",
+ "You commented on {file}" : "თქვენ გააკეთეთ კომენტარი {file}-ზე",
+ "%1$s commented on %2$s" : "%1$s-მა გააკეთა კომენტარი %2$s-ზე",
+ "{author} commented on {file}" : "{author}-მა გააკეთა კომენტარი {file}-ზე",
+ "<strong>Comments</strong> for files" : "<strong>კომენტარები</strong> ფაილებზე",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "(ახლა) წაშლილმა მოხმარებელმა მოგიხსენიათ კომენტარში “%s”-ზე",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "(ახლა) წაშლილმა მოხმარებელმა მოგიხსენიათ კომენტარში ფაილზე \"{file}\"",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s გახსენათ კომენტარში “%2$s”-ზე",
+ "{user} mentioned you in a comment on “{file}”" : "{user} გახსენათ კომენტარში ფაილზე “{file}”"
},
"nplurals=1; plural=0;");
diff --git a/apps/comments/l10n/ka_GE.json b/apps/comments/l10n/ka_GE.json
index a70874ae50b..a9848c4e68c 100644
--- a/apps/comments/l10n/ka_GE.json
+++ b/apps/comments/l10n/ka_GE.json
@@ -1,5 +1,32 @@
{ "translations": {
+ "Comments" : "კომენტარები",
+ "Unknown user" : "უცნობი მომხმარებელი",
+ "New comment …" : "ახალი კომენტარი ...",
+ "Delete comment" : "კომენტარის გაუქმება",
+ "Post" : "პოსტი",
"Cancel" : "უარყოფა",
- "Save" : "შენახვა"
+ "Edit comment" : "კომენტარის ცვლილება",
+ "[Deleted user]" : "[გაუქმებული მომხმარებელი]",
+ "No comments yet, start the conversation!" : "ჯერ კომენტარები არაა, დაიწყეთ საუბარი! ",
+ "More comments …" : "მეტი კომენტარი ...",
+ "Save" : "შენახვა",
+ "Allowed characters {count} of {max}" : "დაშვებული სიმბოლოები {count} {max}-იდან",
+ "Error occurred while retrieving comment with id {id}" : "კომენტარის id-ით {id}-ის მიღებისას წარმოიშვა შეცდომა",
+ "Error occurred while updating comment with id {id}" : "კომენტარის id-იდ {id}-ის ცვლილებისას წარმოიშვა შეცდომა",
+ "Error occurred while posting comment" : "კომენტარის გამოქვეყნებისას წარმოიშვა შეცდომა",
+ "_%n unread comment_::_%n unread comments_" : ["%n წაუკუთხავი კომენტარი"],
+ "Comment" : "კომენტარის დამატება",
+ "You commented" : "თქვენ გააკეთეთ კომენტარი",
+ "%1$s commented" : "%1$s-მა გააკეთა კომენტარი",
+ "{author} commented" : "{author}-მა გააკეთა კომენტარი",
+ "You commented on %1$s" : "თქვენ გააკეთეთ კომენტარი %1$s-ზე",
+ "You commented on {file}" : "თქვენ გააკეთეთ კომენტარი {file}-ზე",
+ "%1$s commented on %2$s" : "%1$s-მა გააკეთა კომენტარი %2$s-ზე",
+ "{author} commented on {file}" : "{author}-მა გააკეთა კომენტარი {file}-ზე",
+ "<strong>Comments</strong> for files" : "<strong>კომენტარები</strong> ფაილებზე",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "(ახლა) წაშლილმა მოხმარებელმა მოგიხსენიათ კომენტარში “%s”-ზე",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "(ახლა) წაშლილმა მოხმარებელმა მოგიხსენიათ კომენტარში ფაილზე \"{file}\"",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s გახსენათ კომენტარში “%2$s”-ზე",
+ "{user} mentioned you in a comment on “{file}”" : "{user} გახსენათ კომენტარში ფაილზე “{file}”"
},"pluralForm" :"nplurals=1; plural=0;"
} \ 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 a691d7dd644..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
@@ -174,6 +176,12 @@ class Provider implements IProvider {
}
// Fix subjects from 12.0.3 and older
+ //
+ // Do NOT Remove unless necessary
+ // Removing this will break parsing of activities that were created on
+ // Nextcloud 12, so we should keep this as long as it's acceptable.
+ // Otherwise if people upgrade over multiple releases in a short period,
+ // they will get the dead entries in their stream.
return [
'actor' => $subjectParameters[0],
'fileId' => (int) $event->getObjectId(),
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 f168779cd0d..e60f0cbf36b 100644
--- a/apps/comments/lib/AppInfo/Application.php
+++ b/apps/comments/lib/AppInfo/Application.php
@@ -1,28 +1,32 @@
<?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;
use OCA\Comments\Controller\Notifications;
+use OCA\Comments\JSSettingsHelper;
use OCP\AppFramework\App;
+use OCP\Util;
class Application extends App {
@@ -31,5 +35,8 @@ class Application extends App {
$container = $this->getContainer();
$container->registerAlias('NotificationsController', Notifications::class);
+
+ $jsSettingsHelper = new JSSettingsHelper($container->getServer());
+ Util::connectHook('\OCP\Config', 'js', $jsSettingsHelper, 'extend');
}
}
diff --git a/apps/comments/lib/Collaboration/CommentersSorter.php b/apps/comments/lib/Collaboration/CommentersSorter.php
new file mode 100644
index 00000000000..b8bb745b3b8
--- /dev/null
+++ b/apps/comments/lib/Collaboration/CommentersSorter.php
@@ -0,0 +1,115 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.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\Comments\Collaboration;
+
+
+use OCP\Collaboration\AutoComplete\ISorter;
+use OCP\Comments\ICommentsManager;
+
+class CommentersSorter implements ISorter {
+
+ /** @var ICommentsManager */
+ private $commentsManager;
+
+ public function __construct(ICommentsManager $commentsManager) {
+ $this->commentsManager = $commentsManager;
+ }
+
+ public function getId() {
+ return 'commenters';
+ }
+
+ /**
+ * Sorts people who commented on the given item atop (descelating) of the
+ * others
+ *
+ * @param array $sortArray
+ * @param array $context
+ */
+ public function sort(array &$sortArray, array $context) {
+ $commenters = $this->retrieveCommentsInformation($context['itemType'], $context['itemId']);
+ if(count($commenters) === 0) {
+ return;
+ }
+
+ foreach ($sortArray as $type => &$byType) {
+ if(!isset($commenters[$type])) {
+ continue;
+ }
+
+ // at least on PHP 5.6 usort turned out to be not stable. So we add
+ // the current index to the value and compare it on a draw
+ $i = 0;
+ $workArray = array_map(function($element) use (&$i) {
+ return [$i++, $element];
+ }, $byType);
+
+ usort($workArray, function ($a, $b) use ($commenters, $type) {
+ $r = $this->compare($a[1], $b[1], $commenters[$type]);
+ if($r === 0) {
+ $r = $a[0] - $b[0];
+ }
+ return $r;
+ });
+
+ // and remove the index values again
+ $byType = array_column($workArray, 1);
+ }
+ }
+
+ /**
+ * @param $type
+ * @param $id
+ * @return array
+ */
+ protected function retrieveCommentsInformation($type, $id) {
+ $comments = $this->commentsManager->getForObject($type, $id);
+ if(count($comments) === 0) {
+ return [];
+ }
+
+ $actors = [];
+ foreach ($comments as $comment) {
+ if(!isset($actors[$comment->getActorType()])) {
+ $actors[$comment->getActorType()] = [];
+ }
+ if(!isset($actors[$comment->getActorType()][$comment->getActorId()])) {
+ $actors[$comment->getActorType()][$comment->getActorId()] = 1;
+ } else {
+ $actors[$comment->getActorType()][$comment->getActorId()]++;
+ }
+ }
+ return $actors;
+ }
+
+ protected function compare(array $a, array $b, array $commenters) {
+ $a = $a['value']['shareWith'];
+ $b = $b['value']['shareWith'];
+
+ $valueA = isset($commenters[$a]) ? $commenters[$a] : 0;
+ $valueB = isset($commenters[$b]) ? $commenters[$b] : 0;
+
+ return $valueB - $valueA;
+ }
+}
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/JSSettingsHelper.php b/apps/comments/lib/JSSettingsHelper.php
new file mode 100644
index 00000000000..dab68a48925
--- /dev/null
+++ b/apps/comments/lib/JSSettingsHelper.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.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\Comments;
+
+
+use OCP\IServerContainer;
+
+class JSSettingsHelper {
+ /** @var IServerContainer */
+ private $c;
+
+ public function __construct(IServerContainer $c) {
+ $this->c = $c;
+ }
+
+ public function extend(array $settings) {
+ $appConfig = json_decode($settings['array']['oc_appconfig'], true);
+
+ $value = (int)$this->c->getConfig()->getAppValue('comments', 'maxAutoCompleteResults', 10);
+ $appConfig['comments']['maxAutoCompleteResults'] = $value;
+
+ $settings['array']['oc_appconfig'] = json_encode($appConfig);
+ }
+}
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/Collaboration/CommentersSorterTest.php b/apps/comments/tests/Unit/Collaboration/CommentersSorterTest.php
new file mode 100644
index 00000000000..0cc3e3d4b61
--- /dev/null
+++ b/apps/comments/tests/Unit/Collaboration/CommentersSorterTest.php
@@ -0,0 +1,160 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.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\Comments\Tests\Unit\Collaboration;
+
+
+use OCA\Comments\Collaboration\CommentersSorter;
+use OCP\Comments\IComment;
+use OCP\Comments\ICommentsManager;
+use OCP\IConfig;
+use Test\TestCase;
+
+class CommentersSorterTest extends TestCase {
+ /** @var ICommentsManager|\PHPUnit_Framework_MockObject_MockObject */
+ protected $commentsManager;
+ /** @var CommentersSorter */
+ protected $sorter;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->commentsManager = $this->createMock(ICommentsManager::class);
+
+ $this->sorter = new CommentersSorter($this->commentsManager);
+ }
+
+ /**
+ * @dataProvider sortDataProvider
+ * @param $data
+ */
+ public function testSort($data) {
+ $commentMocks = [];
+ foreach($data['actors'] as $actorType => $actors) {
+ foreach ($actors as $actorId => $noOfComments) {
+ for($i=0;$i<$noOfComments;$i++) {
+ $mock = $this->createMock(IComment::class);
+ $mock->expects($this->atLeastOnce())
+ ->method('getActorType')
+ ->willReturn($actorType);
+ $mock->expects($this->atLeastOnce())
+ ->method('getActorId')
+ ->willReturn($actorId);
+ $commentMocks[] = $mock;
+ }
+ }
+ }
+
+ $this->commentsManager->expects($this->once())
+ ->method('getForObject')
+ ->willReturn($commentMocks);
+
+ $workArray = $data['input'];
+ $this->sorter->sort($workArray, ['itemType' => 'files', 'itemId' => '24']);
+
+ $this->assertEquals($data['expected'], $workArray);
+ }
+
+ public function sortDataProvider() {
+ return [[
+ [
+ #1 – sort properly and otherwise keep existing order
+ 'actors' => ['users' => ['celia' => 3, 'darius' => 7, 'faruk' => 5, 'gail' => 5], 'bots' => ['r2-d2' => 8]],
+ 'input' => [
+ 'users' =>
+ [
+ ['value' => ['shareWith' => 'alice']],
+ ['value' => ['shareWith' => 'bob']],
+ ['value' => ['shareWith' => 'celia']],
+ ['value' => ['shareWith' => 'darius']],
+ ['value' => ['shareWith' => 'elena']],
+ ['value' => ['shareWith' => 'faruk']],
+ ['value' => ['shareWith' => 'gail']],
+ ],
+ 'bots' => [
+ ['value' => ['shareWith' => 'c-3po']],
+ ['value' => ['shareWith' => 'r2-d2']],
+ ]
+ ],
+ 'expected' => [
+ 'users' =>
+ [
+ ['value' => ['shareWith' => 'darius']],
+ ['value' => ['shareWith' => 'faruk']],
+ ['value' => ['shareWith' => 'gail']],
+ ['value' => ['shareWith' => 'celia']],
+ ['value' => ['shareWith' => 'alice']],
+ ['value' => ['shareWith' => 'bob']],
+ ['value' => ['shareWith' => 'elena']],
+ ],
+ 'bots' => [
+ ['value' => ['shareWith' => 'r2-d2']],
+ ['value' => ['shareWith' => 'c-3po']],
+ ]
+ ],
+ ],
+ [
+ #2 – no commentors, input equals output
+ 'actors' => [],
+ 'input' => [
+ 'users' =>
+ [
+ ['value' => ['shareWith' => 'alice']],
+ ['value' => ['shareWith' => 'bob']],
+ ['value' => ['shareWith' => 'celia']],
+ ['value' => ['shareWith' => 'darius']],
+ ['value' => ['shareWith' => 'elena']],
+ ['value' => ['shareWith' => 'faruk']],
+ ['value' => ['shareWith' => 'gail']],
+ ],
+ 'bots' => [
+ ['value' => ['shareWith' => 'c-3po']],
+ ['value' => ['shareWith' => 'r2-d2']],
+ ]
+ ],
+ 'expected' => [
+ 'users' =>
+ [
+ ['value' => ['shareWith' => 'alice']],
+ ['value' => ['shareWith' => 'bob']],
+ ['value' => ['shareWith' => 'celia']],
+ ['value' => ['shareWith' => 'darius']],
+ ['value' => ['shareWith' => 'elena']],
+ ['value' => ['shareWith' => 'faruk']],
+ ['value' => ['shareWith' => 'gail']],
+ ],
+ 'bots' => [
+ ['value' => ['shareWith' => 'c-3po']],
+ ['value' => ['shareWith' => 'r2-d2']],
+ ]
+ ],
+ ],
+ [
+ #3 – no nothing
+ 'actors' => [],
+ 'input' => [],
+ 'expected' => [],
+ ],
+ ]];
+ }
+}
diff --git a/apps/comments/tests/Unit/Controller/NotificationsTest.php b/apps/comments/tests/Unit/Controller/NotificationsTest.php
index e887900a615..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
@@ -22,7 +24,17 @@
namespace OCA\Comments\Tests\Unit\Controller;
use OCA\Comments\Controller\Notifications;
+use OCP\Comments\IComment;
+use OCP\Comments\ICommentsManager;
use OCP\Comments\NotFoundException;
+use OCP\Files\Folder;
+use OCP\Files\Node;
+use OCP\IRequest;
+use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\IUserSession;
+use OCP\Notification\IManager;
+use OCP\Notification\INotification;
use Test\TestCase;
class NotificationsTest extends TestCase {
@@ -44,24 +56,24 @@ class NotificationsTest extends TestCase {
protected function setUp() {
parent::setUp();
- $this->commentsManager = $this->getMockBuilder('\OCP\Comments\ICommentsManager')->getMock();
- $this->folder = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
- $this->session = $this->getMockBuilder('\OCP\IUserSession')->getMock();
- $this->notificationManager = $this->getMockBuilder('\OCP\Notification\IManager')->getMock();
+ $this->commentsManager = $this->getMockBuilder(ICommentsManager::class)->getMock();
+ $this->folder = $this->getMockBuilder(Folder::class)->getMock();
+ $this->session = $this->getMockBuilder(IUserSession::class)->getMock();
+ $this->notificationManager = $this->getMockBuilder(IManager::class)->getMock();
$this->notificationsController = new Notifications(
'comments',
- $this->getMockBuilder('\OCP\IRequest')->getMock(),
+ $this->getMockBuilder(IRequest::class)->getMock(),
$this->commentsManager,
$this->folder,
- $this->getMockBuilder('\OCP\IURLGenerator')->getMock(),
+ $this->getMockBuilder(IURLGenerator::class)->getMock(),
$this->notificationManager,
$this->session
);
}
public function testViewSuccess() {
- $comment = $this->getMockBuilder('\OCP\Comments\IComment')->getMock();
+ $comment = $this->getMockBuilder(IComment::class)->getMock();
$comment->expects($this->any())
->method('getObjectType')
->will($this->returnValue('files'));
@@ -71,7 +83,7 @@ class NotificationsTest extends TestCase {
->with('42')
->will($this->returnValue($comment));
- $file = $this->getMockBuilder('\OCP\Files\Node')->getMock();
+ $file = $this->getMockBuilder(Node::class)->getMock();
$this->folder->expects($this->once())
->method('getById')
@@ -79,9 +91,9 @@ class NotificationsTest extends TestCase {
$this->session->expects($this->once())
->method('getUser')
- ->will($this->returnValue($this->getMockBuilder('\OCP\IUser')->getMock()));
+ ->will($this->returnValue($this->getMockBuilder(IUser::class)->getMock()));
- $notification = $this->getMockBuilder('\OCP\Notification\INotification')->getMock();
+ $notification = $this->getMockBuilder(INotification::class)->getMock();
$notification->expects($this->any())
->method($this->anything())
->will($this->returnValue($notification));
@@ -119,7 +131,7 @@ class NotificationsTest extends TestCase {
}
public function testViewNoFile() {
- $comment = $this->getMockBuilder('\OCP\Comments\IComment')->getMock();
+ $comment = $this->getMockBuilder(IComment::class)->getMock();
$comment->expects($this->any())
->method('getObjectType')
->will($this->returnValue('files'));
@@ -135,9 +147,9 @@ class NotificationsTest extends TestCase {
$this->session->expects($this->once())
->method('getUser')
- ->will($this->returnValue($this->getMockBuilder('\OCP\IUser')->getMock()));
+ ->will($this->returnValue($this->getMockBuilder(IUser::class)->getMock()));
- $notification = $this->getMockBuilder('\OCP\Notification\INotification')->getMock();
+ $notification = $this->getMockBuilder(INotification::class)->getMock();
$notification->expects($this->any())
->method($this->anything())
->will($this->returnValue($notification));
diff --git a/apps/comments/tests/Unit/JSSettingsHelperTest.php b/apps/comments/tests/Unit/JSSettingsHelperTest.php
new file mode 100644
index 00000000000..ad2f34c7aab
--- /dev/null
+++ b/apps/comments/tests/Unit/JSSettingsHelperTest.php
@@ -0,0 +1,73 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.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\Comments\Tests\Unit;
+
+use OCA\Comments\JSSettingsHelper;
+use OCP\IConfig;
+use OCP\IServerContainer;
+use Test\TestCase;
+
+class JSSettingsHelperTest extends TestCase {
+ /** @var IServerContainer|\PHPUnit_Framework_MockObject_MockObject */
+ protected $c;
+ /** @var JSSettingsHelper */
+ protected $helper;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->c = $this->createMock(IServerContainer::class);
+
+ $this->helper = new JSSettingsHelper($this->c);
+ }
+
+ public function testExtend() {
+ $config = $this->createMock(IConfig::class);
+ $config->expects($this->once())
+ ->method('getAppValue')
+ ->with('comments', 'maxAutoCompleteResults')
+ ->willReturn(13);
+
+ $this->c->expects($this->once())
+ ->method('getConfig')
+ ->willReturn($config);
+
+ $config = [
+ 'oc_appconfig' => json_encode([
+ 'anotherapp' => [
+ 'foo' => 'bar',
+ 'foobar' => true
+ ]
+ ])
+ ];
+
+ $this->helper->extend(['array' => &$config]);
+
+ $appConfig = json_decode($config['oc_appconfig'], true);
+ $this->assertTrue(isset($appConfig['comments']));
+ $this->assertTrue(isset($appConfig['anotherapp']));
+ $this->assertSame(2, count($appConfig['anotherapp']));
+ $this->assertSame(13, $appConfig['comments']['maxAutoCompleteResults']);
+ }
+}
diff --git a/apps/comments/tests/Unit/Notification/ListenerTest.php b/apps/comments/tests/Unit/Notification/ListenerTest.php
index ef84d1c60de..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
@@ -71,7 +74,7 @@ class ListenerTest extends TestCase {
*/
public function testEvaluate($eventType, $notificationMethod) {
/** @var IComment|\PHPUnit_Framework_MockObject_MockObject $comment */
- $comment = $this->getMockBuilder('\OCP\Comments\IComment')->getMock();
+ $comment = $this->getMockBuilder(IComment::class)->getMock();
$comment->expects($this->any())
->method('getObjectType')
->will($this->returnValue('files'));
@@ -90,7 +93,7 @@ class ListenerTest extends TestCase {
]);
/** @var CommentsEvent|\PHPUnit_Framework_MockObject_MockObject $event */
- $event = $this->getMockBuilder('\OCP\Comments\CommentsEvent')
+ $event = $this->getMockBuilder(CommentsEvent::class)
->disableOriginalConstructor()
->getMock();
$event->expects($this->once())
@@ -101,7 +104,7 @@ class ListenerTest extends TestCase {
->will($this->returnValue($eventType));
/** @var INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
- $notification = $this->getMockBuilder('\OCP\Notification\INotification')->getMock();
+ $notification = $this->getMockBuilder(INotification::class)->getMock();
$notification->expects($this->any())
->method($this->anything())
->will($this->returnValue($notification));
@@ -136,7 +139,7 @@ class ListenerTest extends TestCase {
*/
public function testEvaluateNoMentions($eventType) {
/** @var IComment|\PHPUnit_Framework_MockObject_MockObject $comment */
- $comment = $this->getMockBuilder('\OCP\Comments\IComment')->getMock();
+ $comment = $this->getMockBuilder(IComment::class)->getMock();
$comment->expects($this->any())
->method('getObjectType')
->will($this->returnValue('files'));
@@ -148,7 +151,7 @@ class ListenerTest extends TestCase {
->willReturn([]);
/** @var CommentsEvent|\PHPUnit_Framework_MockObject_MockObject $event */
- $event = $this->getMockBuilder('\OCP\Comments\CommentsEvent')
+ $event = $this->getMockBuilder(CommentsEvent::class)
->disableOriginalConstructor()
->getMock();
$event->expects($this->once())
@@ -173,7 +176,7 @@ class ListenerTest extends TestCase {
public function testEvaluateUserDoesNotExist() {
/** @var IComment|\PHPUnit_Framework_MockObject_MockObject $comment */
- $comment = $this->getMockBuilder('\OCP\Comments\IComment')->getMock();
+ $comment = $this->getMockBuilder(IComment::class)->getMock();
$comment->expects($this->any())
->method('getObjectType')
->will($this->returnValue('files'));
@@ -185,7 +188,7 @@ class ListenerTest extends TestCase {
->willReturn([[ 'type' => 'user', 'id' => 'foobar']]);
/** @var CommentsEvent|\PHPUnit_Framework_MockObject_MockObject $event */
- $event = $this->getMockBuilder('\OCP\Comments\CommentsEvent')
+ $event = $this->getMockBuilder(CommentsEvent::class)
->disableOriginalConstructor()
->getMock();
$event->expects($this->once())
@@ -196,7 +199,7 @@ class ListenerTest extends TestCase {
->will($this->returnValue(CommentsEvent::EVENT_ADD));
/** @var INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
- $notification = $this->getMockBuilder('\OCP\Notification\INotification')->getMock();
+ $notification = $this->getMockBuilder(INotification::class)->getMock();
$notification->expects($this->any())
->method($this->anything())
->will($this->returnValue($notification));
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/comments/tests/js/commentstabviewSpec.js b/apps/comments/tests/js/commentstabviewSpec.js
index 63a27956f9f..8b99ad081cd 100644
--- a/apps/comments/tests/js/commentstabviewSpec.js
+++ b/apps/comments/tests/js/commentstabviewSpec.js
@@ -157,7 +157,7 @@ describe('OCA.Comments.CommentsTabView tests', function() {
expect($comment.find('.avatar[data-user=macbeth] ~ .contactsmenu-popover').length).toEqual(1);
expect($comment.find('.avatar[data-user=banquo]').length).toEqual(1);
- expect($comment.find('.avatar-name-wrapper:last-child strong').text()).toEqual('Lord Banquo');
+ expect($comment.find('.avatar[data-user=banquo] ~ strong').text()).toEqual('Lord Banquo');
expect($comment.find('.avatar[data-user=banquo] ~ .contactsmenu-popover').length).toEqual(1);
});
@@ -239,7 +239,7 @@ describe('OCA.Comments.CommentsTabView tests', function() {
});
it('creates a new comment when clicking post button', function() {
- view.$el.find('.message').val('New message');
+ view.$el.find('.message').text('New message');
view.$el.find('form').submit();
expect(createStub.calledOnce).toEqual(true);
@@ -253,7 +253,7 @@ describe('OCA.Comments.CommentsTabView tests', function() {
});
});
it('creates a new comment with mentions when clicking post button', function() {
- view.$el.find('.message').val('New message @anotheruser');
+ view.$el.find('.message').text('New message @anotheruser');
view.$el.find('form').submit();
var createStubExpectedData = {
@@ -439,7 +439,7 @@ describe('OCA.Comments.CommentsTabView tests', function() {
var $formRow = view.$el.find('.newCommentRow.comment[data-id=1]');
expect($formRow.length).toEqual(1);
- $formRow.find('textarea').val('modified message');
+ $formRow.find('div.message').text('modified message');
$formRow.find('form').submit();
expect(saveStub.calledOnce).toEqual(true);
@@ -451,8 +451,9 @@ describe('OCA.Comments.CommentsTabView tests', function() {
// simulate the fact that save sets the attribute
model.set('message', 'modified\nmessage');
saveStub.yieldTo('success', model);
+ view.collection.get(model);
- expect(fetchStub.calledOnce).toEqual(true);
+ expect(fetchStub.called).toEqual(true);
fetchStub.yieldTo('success', model);
// original comment element is visible again
@@ -472,7 +473,7 @@ describe('OCA.Comments.CommentsTabView tests', function() {
var $formRow = view.$el.find('.newCommentRow.comment[data-id=3]');
expect($formRow.length).toEqual(1);
- $formRow.find('textarea').val('modified\nmessage @anotheruser');
+ $formRow.find('div.message').text('modified\nmessage @anotheruser');
$formRow.find('form').submit();
expect(saveStub.calledOnce).toEqual(true);
@@ -485,7 +486,7 @@ describe('OCA.Comments.CommentsTabView tests', function() {
model.set('message', 'modified\nmessage @anotheruser');
saveStub.yieldTo('success', model);
- expect(fetchStub.calledOnce).toEqual(true);
+ expect(fetchStub.called).toEqual(true);
// simulate the fact that fetch sets the attribute
model.set('mentions', {
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/info.xml b/apps/dav/appinfo/info.xml
index 9b500c9f300..0f97289ba37 100644
--- a/apps/dav/appinfo/info.xml
+++ b/apps/dav/appinfo/info.xml
@@ -5,7 +5,7 @@
<description>WebDAV endpoint</description>
<licence>AGPL</licence>
<author>owncloud.org</author>
- <version>1.4.4</version>
+ <version>1.4.5</version>
<default_enable/>
<types>
<filesystem/>
@@ -52,4 +52,8 @@
<provider>OCA\DAV\CalDAV\Activity\Provider\Todo</provider>
</providers>
</activity>
+
+ <settings>
+ <admin>OCA\DAV\Settings\CalDAVSettings</admin>
+ </settings>
</info>
diff --git a/apps/dav/appinfo/v1/caldav.php b/apps/dav/appinfo/v1/caldav.php
index bd9de775f44..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>
@@ -49,9 +50,10 @@ $db = \OC::$server->getDatabaseConnection();
$userManager = \OC::$server->getUserManager();
$random = \OC::$server->getSecureRandom();
$dispatcher = \OC::$server->getEventDispatcher();
-$calDavBackend = new CalDavBackend($db, $principalBackend, $userManager, $random, $dispatcher, true);
+$calDavBackend = new CalDavBackend($db, $principalBackend, $userManager, \OC::$server->getGroupManager(), $random, $dispatcher, true);
$debugging = \OC::$server->getConfig()->getSystemValue('debug', false);
+$sendInvitations = \OC::$server->getConfig()->getAppValue('dav', 'sendInvitations', 'yes') === 'yes';
// Root nodes
$principalCollection = new \Sabre\CalDAV\Principal\Collection($principalBackend);
@@ -84,7 +86,10 @@ if ($debugging) {
$server->addPlugin(new \Sabre\DAV\Sync\Plugin());
$server->addPlugin(new \Sabre\CalDAV\ICSExportPlugin());
$server->addPlugin(new \OCA\DAV\CalDAV\Schedule\Plugin());
-$server->addPlugin(new \OCA\DAV\CalDAV\Schedule\IMipPlugin( \OC::$server->getMailer(), \OC::$server->getLogger(), new \OC\AppFramework\Utility\TimeFactory()));
+
+if ($sendInvitations) {
+ $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 8dea6684742..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
@@ -48,7 +48,7 @@ $principalBackend = new Principal(
'principals/'
);
$db = \OC::$server->getDatabaseConnection();
-$cardDavBackend = new CardDavBackend($db, $principalBackend, \OC::$server->getUserManager(), \OC::$server->getEventDispatcher());
+$cardDavBackend = new CardDavBackend($db, $principalBackend, \OC::$server->getUserManager(), \OC::$server->getGroupManager(), \OC::$server->getEventDispatcher());
$debugging = \OC::$server->getConfig()->getSystemValue('debug', false);
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 3a00c8006ec..d692d973511 100644
--- a/apps/dav/appinfo/v2/remote.php
+++ b/apps/dav/appinfo/v2/remote.php
@@ -2,7 +2,9 @@
/**
* @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>
*
* @license AGPL-3.0
*
diff --git a/apps/dav/composer/autoload.php b/apps/dav/composer/autoload.php
new file mode 100644
index 00000000000..06b2e993e94
--- /dev/null
+++ b/apps/dav/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitDAV::getLoader();
diff --git a/apps/dav/composer/composer.json b/apps/dav/composer/composer.json
new file mode 100644
index 00000000000..e783ae8ad15
--- /dev/null
+++ b/apps/dav/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "DAV"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\DAV\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/dav/composer/composer/ClassLoader.php b/apps/dav/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/dav/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/dav/composer/composer/LICENSE b/apps/dav/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/dav/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/dav/composer/composer/autoload_classmap.php b/apps/dav/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..f29e3a7b293
--- /dev/null
+++ b/apps/dav/composer/composer/autoload_classmap.php
@@ -0,0 +1,145 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\DAV\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\DAV\\AppInfo\\PluginManager' => $baseDir . '/../lib/AppInfo/PluginManager.php',
+ 'OCA\\DAV\\Avatars\\AvatarHome' => $baseDir . '/../lib/Avatars/AvatarHome.php',
+ 'OCA\\DAV\\Avatars\\AvatarNode' => $baseDir . '/../lib/Avatars/AvatarNode.php',
+ 'OCA\\DAV\\Avatars\\RootCollection' => $baseDir . '/../lib/Avatars/RootCollection.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Backend' => $baseDir . '/../lib/CalDAV/Activity/Backend.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Filter\\Calendar' => $baseDir . '/../lib/CalDAV/Activity/Filter/Calendar.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Filter\\Todo' => $baseDir . '/../lib/CalDAV/Activity/Filter/Todo.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Provider\\Base' => $baseDir . '/../lib/CalDAV/Activity/Provider/Base.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Provider\\Calendar' => $baseDir . '/../lib/CalDAV/Activity/Provider/Calendar.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Provider\\Event' => $baseDir . '/../lib/CalDAV/Activity/Provider/Event.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Provider\\Todo' => $baseDir . '/../lib/CalDAV/Activity/Provider/Todo.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Setting\\Calendar' => $baseDir . '/../lib/CalDAV/Activity/Setting/Calendar.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Setting\\Event' => $baseDir . '/../lib/CalDAV/Activity/Setting/Event.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Setting\\Todo' => $baseDir . '/../lib/CalDAV/Activity/Setting/Todo.php',
+ 'OCA\\DAV\\CalDAV\\BirthdayService' => $baseDir . '/../lib/CalDAV/BirthdayService.php',
+ 'OCA\\DAV\\CalDAV\\CalDavBackend' => $baseDir . '/../lib/CalDAV/CalDavBackend.php',
+ 'OCA\\DAV\\CalDAV\\Calendar' => $baseDir . '/../lib/CalDAV/Calendar.php',
+ 'OCA\\DAV\\CalDAV\\CalendarHome' => $baseDir . '/../lib/CalDAV/CalendarHome.php',
+ 'OCA\\DAV\\CalDAV\\CalendarObject' => $baseDir . '/../lib/CalDAV/CalendarObject.php',
+ 'OCA\\DAV\\CalDAV\\CalendarRoot' => $baseDir . '/../lib/CalDAV/CalendarRoot.php',
+ 'OCA\\DAV\\CalDAV\\Plugin' => $baseDir . '/../lib/CalDAV/Plugin.php',
+ 'OCA\\DAV\\CalDAV\\PublicCalendar' => $baseDir . '/../lib/CalDAV/PublicCalendar.php',
+ 'OCA\\DAV\\CalDAV\\PublicCalendarObject' => $baseDir . '/../lib/CalDAV/PublicCalendarObject.php',
+ 'OCA\\DAV\\CalDAV\\PublicCalendarRoot' => $baseDir . '/../lib/CalDAV/PublicCalendarRoot.php',
+ 'OCA\\DAV\\CalDAV\\Publishing\\PublishPlugin' => $baseDir . '/../lib/CalDAV/Publishing/PublishPlugin.php',
+ 'OCA\\DAV\\CalDAV\\Publishing\\Xml\\Publisher' => $baseDir . '/../lib/CalDAV/Publishing/Xml/Publisher.php',
+ 'OCA\\DAV\\CalDAV\\Schedule\\IMipPlugin' => $baseDir . '/../lib/CalDAV/Schedule/IMipPlugin.php',
+ 'OCA\\DAV\\CalDAV\\Schedule\\Plugin' => $baseDir . '/../lib/CalDAV/Schedule/Plugin.php',
+ 'OCA\\DAV\\CalDAV\\Search\\SearchPlugin' => $baseDir . '/../lib/CalDAV/Search/SearchPlugin.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\CompFilter' => $baseDir . '/../lib/CalDAV/Search/Xml/Filter/CompFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\LimitFilter' => $baseDir . '/../lib/CalDAV/Search/Xml/Filter/LimitFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\OffsetFilter' => $baseDir . '/../lib/CalDAV/Search/Xml/Filter/OffsetFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\ParamFilter' => $baseDir . '/../lib/CalDAV/Search/Xml/Filter/ParamFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\PropFilter' => $baseDir . '/../lib/CalDAV/Search/Xml/Filter/PropFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\SearchTermFilter' => $baseDir . '/../lib/CalDAV/Search/Xml/Filter/SearchTermFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Request\\CalendarSearchReport' => $baseDir . '/../lib/CalDAV/Search/Xml/Request/CalendarSearchReport.php',
+ 'OCA\\DAV\\Capabilities' => $baseDir . '/../lib/Capabilities.php',
+ 'OCA\\DAV\\CardDAV\\AddressBook' => $baseDir . '/../lib/CardDAV/AddressBook.php',
+ 'OCA\\DAV\\CardDAV\\AddressBookImpl' => $baseDir . '/../lib/CardDAV/AddressBookImpl.php',
+ 'OCA\\DAV\\CardDAV\\AddressBookRoot' => $baseDir . '/../lib/CardDAV/AddressBookRoot.php',
+ 'OCA\\DAV\\CardDAV\\CardDavBackend' => $baseDir . '/../lib/CardDAV/CardDavBackend.php',
+ 'OCA\\DAV\\CardDAV\\ContactsManager' => $baseDir . '/../lib/CardDAV/ContactsManager.php',
+ 'OCA\\DAV\\CardDAV\\Converter' => $baseDir . '/../lib/CardDAV/Converter.php',
+ 'OCA\\DAV\\CardDAV\\ImageExportPlugin' => $baseDir . '/../lib/CardDAV/ImageExportPlugin.php',
+ 'OCA\\DAV\\CardDAV\\PhotoCache' => $baseDir . '/../lib/CardDAV/PhotoCache.php',
+ 'OCA\\DAV\\CardDAV\\Plugin' => $baseDir . '/../lib/CardDAV/Plugin.php',
+ 'OCA\\DAV\\CardDAV\\SyncJob' => $baseDir . '/../lib/CardDAV/SyncJob.php',
+ 'OCA\\DAV\\CardDAV\\SyncService' => $baseDir . '/../lib/CardDAV/SyncService.php',
+ 'OCA\\DAV\\CardDAV\\UserAddressBooks' => $baseDir . '/../lib/CardDAV/UserAddressBooks.php',
+ 'OCA\\DAV\\CardDAV\\Xml\\Groups' => $baseDir . '/../lib/CardDAV/Xml/Groups.php',
+ 'OCA\\DAV\\Command\\CreateAddressBook' => $baseDir . '/../lib/Command/CreateAddressBook.php',
+ 'OCA\\DAV\\Command\\CreateCalendar' => $baseDir . '/../lib/Command/CreateCalendar.php',
+ 'OCA\\DAV\\Command\\SyncBirthdayCalendar' => $baseDir . '/../lib/Command/SyncBirthdayCalendar.php',
+ 'OCA\\DAV\\Command\\SyncSystemAddressBook' => $baseDir . '/../lib/Command/SyncSystemAddressBook.php',
+ 'OCA\\DAV\\Comments\\CommentNode' => $baseDir . '/../lib/Comments/CommentNode.php',
+ 'OCA\\DAV\\Comments\\CommentsPlugin' => $baseDir . '/../lib/Comments/CommentsPlugin.php',
+ 'OCA\\DAV\\Comments\\EntityCollection' => $baseDir . '/../lib/Comments/EntityCollection.php',
+ 'OCA\\DAV\\Comments\\EntityTypeCollection' => $baseDir . '/../lib/Comments/EntityTypeCollection.php',
+ 'OCA\\DAV\\Comments\\RootCollection' => $baseDir . '/../lib/Comments/RootCollection.php',
+ 'OCA\\DAV\\Connector\\LegacyDAVACL' => $baseDir . '/../lib/Connector/LegacyDAVACL.php',
+ 'OCA\\DAV\\Connector\\PublicAuth' => $baseDir . '/../lib/Connector/PublicAuth.php',
+ 'OCA\\DAV\\Connector\\Sabre\\AppEnabledPlugin' => $baseDir . '/../lib/Connector/Sabre/AppEnabledPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Auth' => $baseDir . '/../lib/Connector/Sabre/Auth.php',
+ 'OCA\\DAV\\Connector\\Sabre\\BearerAuth' => $baseDir . '/../lib/Connector/Sabre/BearerAuth.php',
+ 'OCA\\DAV\\Connector\\Sabre\\BlockLegacyClientPlugin' => $baseDir . '/../lib/Connector/Sabre/BlockLegacyClientPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\CachingTree' => $baseDir . '/../lib/Connector/Sabre/CachingTree.php',
+ 'OCA\\DAV\\Connector\\Sabre\\ChecksumList' => $baseDir . '/../lib/Connector/Sabre/ChecksumList.php',
+ 'OCA\\DAV\\Connector\\Sabre\\CommentPropertiesPlugin' => $baseDir . '/../lib/Connector/Sabre/CommentPropertiesPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\CopyEtagHeaderPlugin' => $baseDir . '/../lib/Connector/Sabre/CopyEtagHeaderPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\CustomPropertiesBackend' => $baseDir . '/../lib/Connector/Sabre/CustomPropertiesBackend.php',
+ 'OCA\\DAV\\Connector\\Sabre\\DavAclPlugin' => $baseDir . '/../lib/Connector/Sabre/DavAclPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Directory' => $baseDir . '/../lib/Connector/Sabre/Directory.php',
+ 'OCA\\DAV\\Connector\\Sabre\\DummyGetResponsePlugin' => $baseDir . '/../lib/Connector/Sabre/DummyGetResponsePlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\ExceptionLoggerPlugin' => $baseDir . '/../lib/Connector/Sabre/ExceptionLoggerPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\EntityTooLarge' => $baseDir . '/../lib/Connector/Sabre/Exception/EntityTooLarge.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\FileLocked' => $baseDir . '/../lib/Connector/Sabre/Exception/FileLocked.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\Forbidden' => $baseDir . '/../lib/Connector/Sabre/Exception/Forbidden.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\InvalidPath' => $baseDir . '/../lib/Connector/Sabre/Exception/InvalidPath.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\PasswordLoginForbidden' => $baseDir . '/../lib/Connector/Sabre/Exception/PasswordLoginForbidden.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\UnsupportedMediaType' => $baseDir . '/../lib/Connector/Sabre/Exception/UnsupportedMediaType.php',
+ 'OCA\\DAV\\Connector\\Sabre\\FakeLockerPlugin' => $baseDir . '/../lib/Connector/Sabre/FakeLockerPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\File' => $baseDir . '/../lib/Connector/Sabre/File.php',
+ 'OCA\\DAV\\Connector\\Sabre\\FilesPlugin' => $baseDir . '/../lib/Connector/Sabre/FilesPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\FilesReportPlugin' => $baseDir . '/../lib/Connector/Sabre/FilesReportPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\LockPlugin' => $baseDir . '/../lib/Connector/Sabre/LockPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\MaintenancePlugin' => $baseDir . '/../lib/Connector/Sabre/MaintenancePlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Node' => $baseDir . '/../lib/Connector/Sabre/Node.php',
+ 'OCA\\DAV\\Connector\\Sabre\\ObjectTree' => $baseDir . '/../lib/Connector/Sabre/ObjectTree.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Principal' => $baseDir . '/../lib/Connector/Sabre/Principal.php',
+ 'OCA\\DAV\\Connector\\Sabre\\QuotaPlugin' => $baseDir . '/../lib/Connector/Sabre/QuotaPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Server' => $baseDir . '/../lib/Connector/Sabre/Server.php',
+ 'OCA\\DAV\\Connector\\Sabre\\ServerFactory' => $baseDir . '/../lib/Connector/Sabre/ServerFactory.php',
+ 'OCA\\DAV\\Connector\\Sabre\\ShareTypeList' => $baseDir . '/../lib/Connector/Sabre/ShareTypeList.php',
+ 'OCA\\DAV\\Connector\\Sabre\\SharesPlugin' => $baseDir . '/../lib/Connector/Sabre/SharesPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\TagList' => $baseDir . '/../lib/Connector/Sabre/TagList.php',
+ 'OCA\\DAV\\Connector\\Sabre\\TagsPlugin' => $baseDir . '/../lib/Connector/Sabre/TagsPlugin.php',
+ 'OCA\\DAV\\DAV\\CustomPropertiesBackend' => $baseDir . '/../lib/DAV/CustomPropertiesBackend.php',
+ 'OCA\\DAV\\DAV\\GroupPrincipalBackend' => $baseDir . '/../lib/DAV/GroupPrincipalBackend.php',
+ 'OCA\\DAV\\DAV\\PublicAuth' => $baseDir . '/../lib/DAV/PublicAuth.php',
+ 'OCA\\DAV\\DAV\\Sharing\\Backend' => $baseDir . '/../lib/DAV/Sharing/Backend.php',
+ 'OCA\\DAV\\DAV\\Sharing\\IShareable' => $baseDir . '/../lib/DAV/Sharing/IShareable.php',
+ 'OCA\\DAV\\DAV\\Sharing\\Plugin' => $baseDir . '/../lib/DAV/Sharing/Plugin.php',
+ 'OCA\\DAV\\DAV\\Sharing\\Xml\\Invite' => $baseDir . '/../lib/DAV/Sharing/Xml/Invite.php',
+ 'OCA\\DAV\\DAV\\Sharing\\Xml\\ShareRequest' => $baseDir . '/../lib/DAV/Sharing/Xml/ShareRequest.php',
+ 'OCA\\DAV\\DAV\\SystemPrincipalBackend' => $baseDir . '/../lib/DAV/SystemPrincipalBackend.php',
+ 'OCA\\DAV\\Files\\BrowserErrorPagePlugin' => $baseDir . '/../lib/Files/BrowserErrorPagePlugin.php',
+ 'OCA\\DAV\\Files\\FileSearchBackend' => $baseDir . '/../lib/Files/FileSearchBackend.php',
+ 'OCA\\DAV\\Files\\FilesHome' => $baseDir . '/../lib/Files/FilesHome.php',
+ 'OCA\\DAV\\Files\\RootCollection' => $baseDir . '/../lib/Files/RootCollection.php',
+ 'OCA\\DAV\\Files\\Sharing\\FilesDropPlugin' => $baseDir . '/../lib/Files/Sharing/FilesDropPlugin.php',
+ 'OCA\\DAV\\Files\\Sharing\\PublicLinkCheckPlugin' => $baseDir . '/../lib/Files/Sharing/PublicLinkCheckPlugin.php',
+ 'OCA\\DAV\\HookManager' => $baseDir . '/../lib/HookManager.php',
+ 'OCA\\DAV\\Migration\\BuildCalendarSearchIndex' => $baseDir . '/../lib/Migration/BuildCalendarSearchIndex.php',
+ 'OCA\\DAV\\Migration\\BuildCalendarSearchIndexBackgroundJob' => $baseDir . '/../lib/Migration/BuildCalendarSearchIndexBackgroundJob.php',
+ 'OCA\\DAV\\Migration\\CalDAVRemoveEmptyValue' => $baseDir . '/../lib/Migration/CalDAVRemoveEmptyValue.php',
+ 'OCA\\DAV\\Migration\\FixBirthdayCalendarComponent' => $baseDir . '/../lib/Migration/FixBirthdayCalendarComponent.php',
+ 'OCA\\DAV\\Migration\\Version1004Date20170825134824' => $baseDir . '/../lib/Migration/Version1004Date20170825134824.php',
+ 'OCA\\DAV\\Migration\\Version1004Date20170919104507' => $baseDir . '/../lib/Migration/Version1004Date20170919104507.php',
+ 'OCA\\DAV\\Migration\\Version1004Date20170924124212' => $baseDir . '/../lib/Migration/Version1004Date20170924124212.php',
+ 'OCA\\DAV\\Migration\\Version1004Date20170926103422' => $baseDir . '/../lib/Migration/Version1004Date20170926103422.php',
+ 'OCA\\DAV\\RootCollection' => $baseDir . '/../lib/RootCollection.php',
+ 'OCA\\DAV\\Server' => $baseDir . '/../lib/Server.php',
+ 'OCA\\DAV\\Settings\\CalDAVSettings' => $baseDir . '/../lib/Settings/CalDAVSettings.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagMappingNode' => $baseDir . '/../lib/SystemTag/SystemTagMappingNode.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagNode' => $baseDir . '/../lib/SystemTag/SystemTagNode.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagPlugin' => $baseDir . '/../lib/SystemTag/SystemTagPlugin.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagsByIdCollection' => $baseDir . '/../lib/SystemTag/SystemTagsByIdCollection.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagsObjectMappingCollection' => $baseDir . '/../lib/SystemTag/SystemTagsObjectMappingCollection.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagsObjectTypeCollection' => $baseDir . '/../lib/SystemTag/SystemTagsObjectTypeCollection.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagsRelationsCollection' => $baseDir . '/../lib/SystemTag/SystemTagsRelationsCollection.php',
+ 'OCA\\DAV\\Upload\\AssemblyStream' => $baseDir . '/../lib/Upload/AssemblyStream.php',
+ 'OCA\\DAV\\Upload\\FutureFile' => $baseDir . '/../lib/Upload/FutureFile.php',
+ 'OCA\\DAV\\Upload\\RootCollection' => $baseDir . '/../lib/Upload/RootCollection.php',
+ 'OCA\\DAV\\Upload\\UploadFolder' => $baseDir . '/../lib/Upload/UploadFolder.php',
+ 'OCA\\DAV\\Upload\\UploadHome' => $baseDir . '/../lib/Upload/UploadHome.php',
+);
diff --git a/apps/dav/composer/composer/autoload_namespaces.php b/apps/dav/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/dav/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/dav/composer/composer/autoload_psr4.php b/apps/dav/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..b37c184d6ef
--- /dev/null
+++ b/apps/dav/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\DAV\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/dav/composer/composer/autoload_real.php b/apps/dav/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..cd699e0b4fd
--- /dev/null
+++ b/apps/dav/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitDAV
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitDAV', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitDAV', 'loadClassLoader'));
+
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitDAV::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/dav/composer/composer/autoload_static.php b/apps/dav/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..412666a8aa7
--- /dev/null
+++ b/apps/dav/composer/composer/autoload_static.php
@@ -0,0 +1,171 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitDAV
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\DAV\\' => 8,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\DAV\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\DAV\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\DAV\\AppInfo\\PluginManager' => __DIR__ . '/..' . '/../lib/AppInfo/PluginManager.php',
+ 'OCA\\DAV\\Avatars\\AvatarHome' => __DIR__ . '/..' . '/../lib/Avatars/AvatarHome.php',
+ 'OCA\\DAV\\Avatars\\AvatarNode' => __DIR__ . '/..' . '/../lib/Avatars/AvatarNode.php',
+ 'OCA\\DAV\\Avatars\\RootCollection' => __DIR__ . '/..' . '/../lib/Avatars/RootCollection.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Backend' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Backend.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Filter\\Calendar' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Filter/Calendar.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Filter\\Todo' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Filter/Todo.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Provider\\Base' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Provider/Base.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Provider\\Calendar' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Provider/Calendar.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Provider\\Event' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Provider/Event.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Provider\\Todo' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Provider/Todo.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Setting\\Calendar' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Setting/Calendar.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Setting\\Event' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Setting/Event.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Setting\\Todo' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Setting/Todo.php',
+ 'OCA\\DAV\\CalDAV\\BirthdayService' => __DIR__ . '/..' . '/../lib/CalDAV/BirthdayService.php',
+ 'OCA\\DAV\\CalDAV\\CalDavBackend' => __DIR__ . '/..' . '/../lib/CalDAV/CalDavBackend.php',
+ 'OCA\\DAV\\CalDAV\\Calendar' => __DIR__ . '/..' . '/../lib/CalDAV/Calendar.php',
+ 'OCA\\DAV\\CalDAV\\CalendarHome' => __DIR__ . '/..' . '/../lib/CalDAV/CalendarHome.php',
+ 'OCA\\DAV\\CalDAV\\CalendarObject' => __DIR__ . '/..' . '/../lib/CalDAV/CalendarObject.php',
+ 'OCA\\DAV\\CalDAV\\CalendarRoot' => __DIR__ . '/..' . '/../lib/CalDAV/CalendarRoot.php',
+ 'OCA\\DAV\\CalDAV\\Plugin' => __DIR__ . '/..' . '/../lib/CalDAV/Plugin.php',
+ 'OCA\\DAV\\CalDAV\\PublicCalendar' => __DIR__ . '/..' . '/../lib/CalDAV/PublicCalendar.php',
+ 'OCA\\DAV\\CalDAV\\PublicCalendarObject' => __DIR__ . '/..' . '/../lib/CalDAV/PublicCalendarObject.php',
+ 'OCA\\DAV\\CalDAV\\PublicCalendarRoot' => __DIR__ . '/..' . '/../lib/CalDAV/PublicCalendarRoot.php',
+ 'OCA\\DAV\\CalDAV\\Publishing\\PublishPlugin' => __DIR__ . '/..' . '/../lib/CalDAV/Publishing/PublishPlugin.php',
+ 'OCA\\DAV\\CalDAV\\Publishing\\Xml\\Publisher' => __DIR__ . '/..' . '/../lib/CalDAV/Publishing/Xml/Publisher.php',
+ 'OCA\\DAV\\CalDAV\\Schedule\\IMipPlugin' => __DIR__ . '/..' . '/../lib/CalDAV/Schedule/IMipPlugin.php',
+ 'OCA\\DAV\\CalDAV\\Schedule\\Plugin' => __DIR__ . '/..' . '/../lib/CalDAV/Schedule/Plugin.php',
+ 'OCA\\DAV\\CalDAV\\Search\\SearchPlugin' => __DIR__ . '/..' . '/../lib/CalDAV/Search/SearchPlugin.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\CompFilter' => __DIR__ . '/..' . '/../lib/CalDAV/Search/Xml/Filter/CompFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\LimitFilter' => __DIR__ . '/..' . '/../lib/CalDAV/Search/Xml/Filter/LimitFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\OffsetFilter' => __DIR__ . '/..' . '/../lib/CalDAV/Search/Xml/Filter/OffsetFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\ParamFilter' => __DIR__ . '/..' . '/../lib/CalDAV/Search/Xml/Filter/ParamFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\PropFilter' => __DIR__ . '/..' . '/../lib/CalDAV/Search/Xml/Filter/PropFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\SearchTermFilter' => __DIR__ . '/..' . '/../lib/CalDAV/Search/Xml/Filter/SearchTermFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Request\\CalendarSearchReport' => __DIR__ . '/..' . '/../lib/CalDAV/Search/Xml/Request/CalendarSearchReport.php',
+ 'OCA\\DAV\\Capabilities' => __DIR__ . '/..' . '/../lib/Capabilities.php',
+ 'OCA\\DAV\\CardDAV\\AddressBook' => __DIR__ . '/..' . '/../lib/CardDAV/AddressBook.php',
+ 'OCA\\DAV\\CardDAV\\AddressBookImpl' => __DIR__ . '/..' . '/../lib/CardDAV/AddressBookImpl.php',
+ 'OCA\\DAV\\CardDAV\\AddressBookRoot' => __DIR__ . '/..' . '/../lib/CardDAV/AddressBookRoot.php',
+ 'OCA\\DAV\\CardDAV\\CardDavBackend' => __DIR__ . '/..' . '/../lib/CardDAV/CardDavBackend.php',
+ 'OCA\\DAV\\CardDAV\\ContactsManager' => __DIR__ . '/..' . '/../lib/CardDAV/ContactsManager.php',
+ 'OCA\\DAV\\CardDAV\\Converter' => __DIR__ . '/..' . '/../lib/CardDAV/Converter.php',
+ 'OCA\\DAV\\CardDAV\\ImageExportPlugin' => __DIR__ . '/..' . '/../lib/CardDAV/ImageExportPlugin.php',
+ 'OCA\\DAV\\CardDAV\\PhotoCache' => __DIR__ . '/..' . '/../lib/CardDAV/PhotoCache.php',
+ 'OCA\\DAV\\CardDAV\\Plugin' => __DIR__ . '/..' . '/../lib/CardDAV/Plugin.php',
+ 'OCA\\DAV\\CardDAV\\SyncJob' => __DIR__ . '/..' . '/../lib/CardDAV/SyncJob.php',
+ 'OCA\\DAV\\CardDAV\\SyncService' => __DIR__ . '/..' . '/../lib/CardDAV/SyncService.php',
+ 'OCA\\DAV\\CardDAV\\UserAddressBooks' => __DIR__ . '/..' . '/../lib/CardDAV/UserAddressBooks.php',
+ 'OCA\\DAV\\CardDAV\\Xml\\Groups' => __DIR__ . '/..' . '/../lib/CardDAV/Xml/Groups.php',
+ 'OCA\\DAV\\Command\\CreateAddressBook' => __DIR__ . '/..' . '/../lib/Command/CreateAddressBook.php',
+ 'OCA\\DAV\\Command\\CreateCalendar' => __DIR__ . '/..' . '/../lib/Command/CreateCalendar.php',
+ 'OCA\\DAV\\Command\\SyncBirthdayCalendar' => __DIR__ . '/..' . '/../lib/Command/SyncBirthdayCalendar.php',
+ 'OCA\\DAV\\Command\\SyncSystemAddressBook' => __DIR__ . '/..' . '/../lib/Command/SyncSystemAddressBook.php',
+ 'OCA\\DAV\\Comments\\CommentNode' => __DIR__ . '/..' . '/../lib/Comments/CommentNode.php',
+ 'OCA\\DAV\\Comments\\CommentsPlugin' => __DIR__ . '/..' . '/../lib/Comments/CommentsPlugin.php',
+ 'OCA\\DAV\\Comments\\EntityCollection' => __DIR__ . '/..' . '/../lib/Comments/EntityCollection.php',
+ 'OCA\\DAV\\Comments\\EntityTypeCollection' => __DIR__ . '/..' . '/../lib/Comments/EntityTypeCollection.php',
+ 'OCA\\DAV\\Comments\\RootCollection' => __DIR__ . '/..' . '/../lib/Comments/RootCollection.php',
+ 'OCA\\DAV\\Connector\\LegacyDAVACL' => __DIR__ . '/..' . '/../lib/Connector/LegacyDAVACL.php',
+ 'OCA\\DAV\\Connector\\PublicAuth' => __DIR__ . '/..' . '/../lib/Connector/PublicAuth.php',
+ 'OCA\\DAV\\Connector\\Sabre\\AppEnabledPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/AppEnabledPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Auth' => __DIR__ . '/..' . '/../lib/Connector/Sabre/Auth.php',
+ 'OCA\\DAV\\Connector\\Sabre\\BearerAuth' => __DIR__ . '/..' . '/../lib/Connector/Sabre/BearerAuth.php',
+ 'OCA\\DAV\\Connector\\Sabre\\BlockLegacyClientPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/BlockLegacyClientPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\CachingTree' => __DIR__ . '/..' . '/../lib/Connector/Sabre/CachingTree.php',
+ 'OCA\\DAV\\Connector\\Sabre\\ChecksumList' => __DIR__ . '/..' . '/../lib/Connector/Sabre/ChecksumList.php',
+ 'OCA\\DAV\\Connector\\Sabre\\CommentPropertiesPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/CommentPropertiesPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\CopyEtagHeaderPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/CopyEtagHeaderPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\CustomPropertiesBackend' => __DIR__ . '/..' . '/../lib/Connector/Sabre/CustomPropertiesBackend.php',
+ 'OCA\\DAV\\Connector\\Sabre\\DavAclPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/DavAclPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Directory' => __DIR__ . '/..' . '/../lib/Connector/Sabre/Directory.php',
+ 'OCA\\DAV\\Connector\\Sabre\\DummyGetResponsePlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/DummyGetResponsePlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\ExceptionLoggerPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/ExceptionLoggerPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\EntityTooLarge' => __DIR__ . '/..' . '/../lib/Connector/Sabre/Exception/EntityTooLarge.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\FileLocked' => __DIR__ . '/..' . '/../lib/Connector/Sabre/Exception/FileLocked.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\Forbidden' => __DIR__ . '/..' . '/../lib/Connector/Sabre/Exception/Forbidden.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\InvalidPath' => __DIR__ . '/..' . '/../lib/Connector/Sabre/Exception/InvalidPath.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\PasswordLoginForbidden' => __DIR__ . '/..' . '/../lib/Connector/Sabre/Exception/PasswordLoginForbidden.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\UnsupportedMediaType' => __DIR__ . '/..' . '/../lib/Connector/Sabre/Exception/UnsupportedMediaType.php',
+ 'OCA\\DAV\\Connector\\Sabre\\FakeLockerPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/FakeLockerPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\File' => __DIR__ . '/..' . '/../lib/Connector/Sabre/File.php',
+ 'OCA\\DAV\\Connector\\Sabre\\FilesPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/FilesPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\FilesReportPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/FilesReportPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\LockPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/LockPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\MaintenancePlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/MaintenancePlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Node' => __DIR__ . '/..' . '/../lib/Connector/Sabre/Node.php',
+ 'OCA\\DAV\\Connector\\Sabre\\ObjectTree' => __DIR__ . '/..' . '/../lib/Connector/Sabre/ObjectTree.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Principal' => __DIR__ . '/..' . '/../lib/Connector/Sabre/Principal.php',
+ 'OCA\\DAV\\Connector\\Sabre\\QuotaPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/QuotaPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Server' => __DIR__ . '/..' . '/../lib/Connector/Sabre/Server.php',
+ 'OCA\\DAV\\Connector\\Sabre\\ServerFactory' => __DIR__ . '/..' . '/../lib/Connector/Sabre/ServerFactory.php',
+ 'OCA\\DAV\\Connector\\Sabre\\ShareTypeList' => __DIR__ . '/..' . '/../lib/Connector/Sabre/ShareTypeList.php',
+ 'OCA\\DAV\\Connector\\Sabre\\SharesPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/SharesPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\TagList' => __DIR__ . '/..' . '/../lib/Connector/Sabre/TagList.php',
+ 'OCA\\DAV\\Connector\\Sabre\\TagsPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/TagsPlugin.php',
+ 'OCA\\DAV\\DAV\\CustomPropertiesBackend' => __DIR__ . '/..' . '/../lib/DAV/CustomPropertiesBackend.php',
+ 'OCA\\DAV\\DAV\\GroupPrincipalBackend' => __DIR__ . '/..' . '/../lib/DAV/GroupPrincipalBackend.php',
+ 'OCA\\DAV\\DAV\\PublicAuth' => __DIR__ . '/..' . '/../lib/DAV/PublicAuth.php',
+ 'OCA\\DAV\\DAV\\Sharing\\Backend' => __DIR__ . '/..' . '/../lib/DAV/Sharing/Backend.php',
+ 'OCA\\DAV\\DAV\\Sharing\\IShareable' => __DIR__ . '/..' . '/../lib/DAV/Sharing/IShareable.php',
+ 'OCA\\DAV\\DAV\\Sharing\\Plugin' => __DIR__ . '/..' . '/../lib/DAV/Sharing/Plugin.php',
+ 'OCA\\DAV\\DAV\\Sharing\\Xml\\Invite' => __DIR__ . '/..' . '/../lib/DAV/Sharing/Xml/Invite.php',
+ 'OCA\\DAV\\DAV\\Sharing\\Xml\\ShareRequest' => __DIR__ . '/..' . '/../lib/DAV/Sharing/Xml/ShareRequest.php',
+ 'OCA\\DAV\\DAV\\SystemPrincipalBackend' => __DIR__ . '/..' . '/../lib/DAV/SystemPrincipalBackend.php',
+ 'OCA\\DAV\\Files\\BrowserErrorPagePlugin' => __DIR__ . '/..' . '/../lib/Files/BrowserErrorPagePlugin.php',
+ 'OCA\\DAV\\Files\\FileSearchBackend' => __DIR__ . '/..' . '/../lib/Files/FileSearchBackend.php',
+ 'OCA\\DAV\\Files\\FilesHome' => __DIR__ . '/..' . '/../lib/Files/FilesHome.php',
+ 'OCA\\DAV\\Files\\RootCollection' => __DIR__ . '/..' . '/../lib/Files/RootCollection.php',
+ 'OCA\\DAV\\Files\\Sharing\\FilesDropPlugin' => __DIR__ . '/..' . '/../lib/Files/Sharing/FilesDropPlugin.php',
+ 'OCA\\DAV\\Files\\Sharing\\PublicLinkCheckPlugin' => __DIR__ . '/..' . '/../lib/Files/Sharing/PublicLinkCheckPlugin.php',
+ 'OCA\\DAV\\HookManager' => __DIR__ . '/..' . '/../lib/HookManager.php',
+ 'OCA\\DAV\\Migration\\BuildCalendarSearchIndex' => __DIR__ . '/..' . '/../lib/Migration/BuildCalendarSearchIndex.php',
+ 'OCA\\DAV\\Migration\\BuildCalendarSearchIndexBackgroundJob' => __DIR__ . '/..' . '/../lib/Migration/BuildCalendarSearchIndexBackgroundJob.php',
+ 'OCA\\DAV\\Migration\\CalDAVRemoveEmptyValue' => __DIR__ . '/..' . '/../lib/Migration/CalDAVRemoveEmptyValue.php',
+ 'OCA\\DAV\\Migration\\FixBirthdayCalendarComponent' => __DIR__ . '/..' . '/../lib/Migration/FixBirthdayCalendarComponent.php',
+ 'OCA\\DAV\\Migration\\Version1004Date20170825134824' => __DIR__ . '/..' . '/../lib/Migration/Version1004Date20170825134824.php',
+ 'OCA\\DAV\\Migration\\Version1004Date20170919104507' => __DIR__ . '/..' . '/../lib/Migration/Version1004Date20170919104507.php',
+ 'OCA\\DAV\\Migration\\Version1004Date20170924124212' => __DIR__ . '/..' . '/../lib/Migration/Version1004Date20170924124212.php',
+ 'OCA\\DAV\\Migration\\Version1004Date20170926103422' => __DIR__ . '/..' . '/../lib/Migration/Version1004Date20170926103422.php',
+ 'OCA\\DAV\\RootCollection' => __DIR__ . '/..' . '/../lib/RootCollection.php',
+ 'OCA\\DAV\\Server' => __DIR__ . '/..' . '/../lib/Server.php',
+ 'OCA\\DAV\\Settings\\CalDAVSettings' => __DIR__ . '/..' . '/../lib/Settings/CalDAVSettings.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagMappingNode' => __DIR__ . '/..' . '/../lib/SystemTag/SystemTagMappingNode.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagNode' => __DIR__ . '/..' . '/../lib/SystemTag/SystemTagNode.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagPlugin' => __DIR__ . '/..' . '/../lib/SystemTag/SystemTagPlugin.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagsByIdCollection' => __DIR__ . '/..' . '/../lib/SystemTag/SystemTagsByIdCollection.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagsObjectMappingCollection' => __DIR__ . '/..' . '/../lib/SystemTag/SystemTagsObjectMappingCollection.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagsObjectTypeCollection' => __DIR__ . '/..' . '/../lib/SystemTag/SystemTagsObjectTypeCollection.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagsRelationsCollection' => __DIR__ . '/..' . '/../lib/SystemTag/SystemTagsRelationsCollection.php',
+ 'OCA\\DAV\\Upload\\AssemblyStream' => __DIR__ . '/..' . '/../lib/Upload/AssemblyStream.php',
+ 'OCA\\DAV\\Upload\\FutureFile' => __DIR__ . '/..' . '/../lib/Upload/FutureFile.php',
+ 'OCA\\DAV\\Upload\\RootCollection' => __DIR__ . '/..' . '/../lib/Upload/RootCollection.php',
+ 'OCA\\DAV\\Upload\\UploadFolder' => __DIR__ . '/..' . '/../lib/Upload/UploadFolder.php',
+ 'OCA\\DAV\\Upload\\UploadHome' => __DIR__ . '/..' . '/../lib/Upload/UploadHome.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitDAV::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitDAV::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitDAV::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/dav/js/settings-admin-caldav.js b/apps/dav/js/settings-admin-caldav.js
new file mode 100644
index 00000000000..10eb89ab61d
--- /dev/null
+++ b/apps/dav/js/settings-admin-caldav.js
@@ -0,0 +1,28 @@
+/**
+ * @copyright 2017, Georg Ehrke <oc.list@georgehrke.com>
+ *
+ * @author Georg Ehrke <oc.list@georgehrke.com>
+ *
+ * @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/>.
+ *
+ */
+"use strict";
+
+$('#caldavSendInvitations').change(function() {
+ var val = $(this)[0].checked;
+
+ OCP.AppConfig.setValue('dav', 'sendInvitations', val ? 'yes' : 'no');
+});
diff --git a/apps/dav/l10n/bg.js b/apps/dav/l10n/bg.js
index 3f55af78124..85bbca23def 100644
--- a/apps/dav/l10n/bg.js
+++ b/apps/dav/l10n/bg.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Календар",
"Todos" : "Задачи",
+ "Personal" : "Личен",
"{actor} created calendar {calendar}" : "{actor} направи календар {calendar}",
"You created calendar {calendar}" : "Направихте календар {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} изтри календар {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Календарно <strong>събитие</strong> беше променено",
"A calendar <strong>todo</strong> was modified" : "Календарна <strong>задача</strong> беше променена",
"Contact birthdays" : "Рождени дни на контакти",
- "Personal" : "Личен",
"Contacts" : "Контакти",
"Technical details" : "Технически детайли",
"Remote Address: %s" : "Отдалечен адрес: %s",
diff --git a/apps/dav/l10n/bg.json b/apps/dav/l10n/bg.json
index 03238418d18..cac7c6af183 100644
--- a/apps/dav/l10n/bg.json
+++ b/apps/dav/l10n/bg.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Календар",
"Todos" : "Задачи",
+ "Personal" : "Личен",
"{actor} created calendar {calendar}" : "{actor} направи календар {calendar}",
"You created calendar {calendar}" : "Направихте календар {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} изтри календар {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "Календарно <strong>събитие</strong> беше променено",
"A calendar <strong>todo</strong> was modified" : "Календарна <strong>задача</strong> беше променена",
"Contact birthdays" : "Рождени дни на контакти",
- "Personal" : "Личен",
"Contacts" : "Контакти",
"Technical details" : "Технически детайли",
"Remote Address: %s" : "Отдалечен адрес: %s",
diff --git a/apps/dav/l10n/ca.js b/apps/dav/l10n/ca.js
index 1b176c5d506..d59b3d88fdd 100644
--- a/apps/dav/l10n/ca.js
+++ b/apps/dav/l10n/ca.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Calendari",
"Todos" : "Tots",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} ha creat el calendari {calendar}",
"You created calendar {calendar}" : "Vosté ha creat el calentari {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} ha esborrat el calendari {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "S'ha modificat un <strong> esdeveniment </strong> del calendari",
"A calendar <strong>todo</strong> was modified" : "<strong>Tot</strong> un calendari va ser modificat",
"Contact birthdays" : "Aniversaris dels contactes",
- "Personal" : "Personal",
"Contacts" : "Contactes",
"Technical details" : "Detalls tècnics",
"Remote Address: %s" : "Adreça remota: %s",
diff --git a/apps/dav/l10n/ca.json b/apps/dav/l10n/ca.json
index 7c30c4050a0..04fec606daf 100644
--- a/apps/dav/l10n/ca.json
+++ b/apps/dav/l10n/ca.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Calendari",
"Todos" : "Tots",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} ha creat el calendari {calendar}",
"You created calendar {calendar}" : "Vosté ha creat el calentari {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} ha esborrat el calendari {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "S'ha modificat un <strong> esdeveniment </strong> del calendari",
"A calendar <strong>todo</strong> was modified" : "<strong>Tot</strong> un calendari va ser modificat",
"Contact birthdays" : "Aniversaris dels contactes",
- "Personal" : "Personal",
"Contacts" : "Contactes",
"Technical details" : "Detalls tècnics",
"Remote Address: %s" : "Adreça remota: %s",
diff --git a/apps/dav/l10n/cs.js b/apps/dav/l10n/cs.js
index acd0b85b03f..5c1b1a2b0f2 100644
--- a/apps/dav/l10n/cs.js
+++ b/apps/dav/l10n/cs.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalendář",
"Todos" : "Úkoly",
+ "Personal" : "Osobní",
"{actor} created calendar {calendar}" : "{actor} vytvořil(a) kalendář {calendar}",
"You created calendar {calendar}" : "Vytvořil(a",
"{actor} deleted calendar {calendar}" : "{actor} smazal(a) kalendář {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "<strong>Událost</strong> v kalendáři byla změněna",
"A calendar <strong>todo</strong> was modified" : "<strong>Úkol</strong> v kalendáři byl změněn",
"Contact birthdays" : "Narozeniny kontaktů",
- "Personal" : "Osobní",
"Contacts" : "Kontakty",
"Technical details" : "Technické detaily",
"Remote Address: %s" : "Vzdálená adresa: %s",
diff --git a/apps/dav/l10n/cs.json b/apps/dav/l10n/cs.json
index c1a25b3401e..0b21caa829b 100644
--- a/apps/dav/l10n/cs.json
+++ b/apps/dav/l10n/cs.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalendář",
"Todos" : "Úkoly",
+ "Personal" : "Osobní",
"{actor} created calendar {calendar}" : "{actor} vytvořil(a) kalendář {calendar}",
"You created calendar {calendar}" : "Vytvořil(a",
"{actor} deleted calendar {calendar}" : "{actor} smazal(a) kalendář {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "<strong>Událost</strong> v kalendáři byla změněna",
"A calendar <strong>todo</strong> was modified" : "<strong>Úkol</strong> v kalendáři byl změněn",
"Contact birthdays" : "Narozeniny kontaktů",
- "Personal" : "Osobní",
"Contacts" : "Kontakty",
"Technical details" : "Technické detaily",
"Remote Address: %s" : "Vzdálená adresa: %s",
diff --git a/apps/dav/l10n/da.js b/apps/dav/l10n/da.js
index 868d906f58a..b26fcb51510 100644
--- a/apps/dav/l10n/da.js
+++ b/apps/dav/l10n/da.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalender",
"Todos" : "Opgaver",
+ "Personal" : "Personligt",
"{actor} created calendar {calendar}" : "{actor} oprettede kalenderen {calendar}",
"You created calendar {calendar}" : "Du oprettede kalenderen {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} sletede kalenderen {calendar}",
@@ -40,10 +41,12 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "En kalender <strong>begivenhed</strong> er blevet ændret",
"A calendar <strong>todo</strong> was modified" : "En kalender <strong>opgave</strong> blev ændret",
"Contact birthdays" : "Kontakt fødselsdag",
- "Personal" : "Personligt",
"Contacts" : "Kontakter",
"Technical details" : "Tekniske detaljer",
"Remote Address: %s" : "Fjernadresse: %s",
- "Request ID: %s" : "Forespørgsels-ID: %s"
+ "Request ID: %s" : "Forespørgsels-ID: %s",
+ "CalDAV server" : "CalDAV server",
+ "Send invitations to attendees" : "Send invitation til deltagere",
+ "Please make sure to properly set up the email settings above." : "Vær venligst sikker på at indstille email indstillingerne ovenover ordenligt."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/dav/l10n/da.json b/apps/dav/l10n/da.json
index 3d9b3800b70..be5aa72d05b 100644
--- a/apps/dav/l10n/da.json
+++ b/apps/dav/l10n/da.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalender",
"Todos" : "Opgaver",
+ "Personal" : "Personligt",
"{actor} created calendar {calendar}" : "{actor} oprettede kalenderen {calendar}",
"You created calendar {calendar}" : "Du oprettede kalenderen {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} sletede kalenderen {calendar}",
@@ -38,10 +39,12 @@
"A calendar <strong>event</strong> was modified" : "En kalender <strong>begivenhed</strong> er blevet ændret",
"A calendar <strong>todo</strong> was modified" : "En kalender <strong>opgave</strong> blev ændret",
"Contact birthdays" : "Kontakt fødselsdag",
- "Personal" : "Personligt",
"Contacts" : "Kontakter",
"Technical details" : "Tekniske detaljer",
"Remote Address: %s" : "Fjernadresse: %s",
- "Request ID: %s" : "Forespørgsels-ID: %s"
+ "Request ID: %s" : "Forespørgsels-ID: %s",
+ "CalDAV server" : "CalDAV server",
+ "Send invitations to attendees" : "Send invitation til deltagere",
+ "Please make sure to properly set up the email settings above." : "Vær venligst sikker på at indstille email indstillingerne ovenover ordenligt."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/dav/l10n/de.js b/apps/dav/l10n/de.js
index d3ba32be6f9..ff33426bb77 100644
--- a/apps/dav/l10n/de.js
+++ b/apps/dav/l10n/de.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalender",
"Todos" : "Aufgaben",
+ "Personal" : "Persönlich",
"{actor} created calendar {calendar}" : "{actor} hat den Kalender {calendar} erstellt",
"You created calendar {calendar}" : "Du hast den Kalender {calendar} erstellt",
"{actor} deleted calendar {calendar}" : "{actor} hat den Kalender {calendar} gelöscht",
@@ -40,10 +41,22 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Ein Kalender-<strong>Ereignis</strong> wurde bearbeitet",
"A calendar <strong>todo</strong> was modified" : "Eine Kalender-<strong>Aufgabe</strong> wurde bearbeitet",
"Contact birthdays" : "Geburtstage von Kontakten",
- "Personal" : "Persönlich",
+ "Invitation canceled" : "Einladung abgebrochen",
+ "Hello %s," : "Hallo %s,",
+ "The meeting »%s« with %s was canceled." : "Der Termin »%s« mit %s wurde abgesagt.",
+ "Invitation updated" : "Einladung aktualisiert",
+ "The meeting »%s« with %s was updated." : "Der Termin »%s« mit %s wurde aktualisiert.",
+ "%s invited you to »%s«" : "%s hat Dich zu »%s« eingeladen",
+ "When:" : "Wann:",
+ "Where:" : "Wo:",
+ "Description:" : "Beschreibung:",
+ "Link:" : "Link:",
"Contacts" : "Kontakte",
"Technical details" : "Technische Details",
"Remote Address: %s" : "Entfernte Adresse: %s",
- "Request ID: %s" : "Anfragekennung: %s"
+ "Request ID: %s" : "Anfragekennung: %s",
+ "CalDAV server" : "CalDAV-Server",
+ "Send invitations to attendees" : "Einladungen an die Teilnehmer versenden",
+ "Please make sure to properly set up the email settings above." : "Bitte sicherstellen, dass die E-Mail Einstellungen oben korrekt angegeben sind."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/dav/l10n/de.json b/apps/dav/l10n/de.json
index cc1ce2e388f..b0b4a8d9926 100644
--- a/apps/dav/l10n/de.json
+++ b/apps/dav/l10n/de.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalender",
"Todos" : "Aufgaben",
+ "Personal" : "Persönlich",
"{actor} created calendar {calendar}" : "{actor} hat den Kalender {calendar} erstellt",
"You created calendar {calendar}" : "Du hast den Kalender {calendar} erstellt",
"{actor} deleted calendar {calendar}" : "{actor} hat den Kalender {calendar} gelöscht",
@@ -38,10 +39,22 @@
"A calendar <strong>event</strong> was modified" : "Ein Kalender-<strong>Ereignis</strong> wurde bearbeitet",
"A calendar <strong>todo</strong> was modified" : "Eine Kalender-<strong>Aufgabe</strong> wurde bearbeitet",
"Contact birthdays" : "Geburtstage von Kontakten",
- "Personal" : "Persönlich",
+ "Invitation canceled" : "Einladung abgebrochen",
+ "Hello %s," : "Hallo %s,",
+ "The meeting »%s« with %s was canceled." : "Der Termin »%s« mit %s wurde abgesagt.",
+ "Invitation updated" : "Einladung aktualisiert",
+ "The meeting »%s« with %s was updated." : "Der Termin »%s« mit %s wurde aktualisiert.",
+ "%s invited you to »%s«" : "%s hat Dich zu »%s« eingeladen",
+ "When:" : "Wann:",
+ "Where:" : "Wo:",
+ "Description:" : "Beschreibung:",
+ "Link:" : "Link:",
"Contacts" : "Kontakte",
"Technical details" : "Technische Details",
"Remote Address: %s" : "Entfernte Adresse: %s",
- "Request ID: %s" : "Anfragekennung: %s"
+ "Request ID: %s" : "Anfragekennung: %s",
+ "CalDAV server" : "CalDAV-Server",
+ "Send invitations to attendees" : "Einladungen an die Teilnehmer versenden",
+ "Please make sure to properly set up the email settings above." : "Bitte sicherstellen, dass die E-Mail Einstellungen oben korrekt angegeben sind."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/dav/l10n/de_DE.js b/apps/dav/l10n/de_DE.js
index 8e36f62c49c..998b773c2a7 100644
--- a/apps/dav/l10n/de_DE.js
+++ b/apps/dav/l10n/de_DE.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalender",
"Todos" : "Aufgaben",
+ "Personal" : "Persönlich",
"{actor} created calendar {calendar}" : "{actor} hat den Kalender {calendar} erstellt",
"You created calendar {calendar}" : "Sie haben den Kalender {calendar} erstellt",
"{actor} deleted calendar {calendar}" : "{actor} hat den Kalender {calendar} gelöscht",
@@ -40,10 +41,22 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Ein Kalender-<strong>Ereignis</strong> wurde bearbeitet",
"A calendar <strong>todo</strong> was modified" : "Eine Kalender-<strong>Aufgabe</strong> wurde bearbeitet",
"Contact birthdays" : "Geburtstage von Kontakten",
- "Personal" : "Persönlich",
+ "Invitation canceled" : "Einladung abgebrochen",
+ "Hello %s," : "Hallo %s,",
+ "The meeting »%s« with %s was canceled." : "Der Termin »%s« mit %s wurde abgesagt.",
+ "Invitation updated" : "Einladung aktualisiert",
+ "The meeting »%s« with %s was updated." : "Der Termin »%s« mit %s wurde aktualisiert.",
+ "%s invited you to »%s«" : "%s hat Sie zu »%s« eingeladen",
+ "When:" : "Wann:",
+ "Where:" : "Wo:",
+ "Description:" : "Beschreibung:",
+ "Link:" : "Link:",
"Contacts" : "Kontakte",
"Technical details" : "Technische Details",
"Remote Address: %s" : "Entfernte Adresse: %s",
- "Request ID: %s" : "Anfragekennung: %s"
+ "Request ID: %s" : "Anfragekennung: %s",
+ "CalDAV server" : "CalDAV-Server",
+ "Send invitations to attendees" : "Einladungen an die Teilnehmer versenden",
+ "Please make sure to properly set up the email settings above." : "Stellen Sie sicher, dass die obigen E-Mail-Einstellungen korrekt sind."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/dav/l10n/de_DE.json b/apps/dav/l10n/de_DE.json
index 85320e551a7..b7516bee178 100644
--- a/apps/dav/l10n/de_DE.json
+++ b/apps/dav/l10n/de_DE.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalender",
"Todos" : "Aufgaben",
+ "Personal" : "Persönlich",
"{actor} created calendar {calendar}" : "{actor} hat den Kalender {calendar} erstellt",
"You created calendar {calendar}" : "Sie haben den Kalender {calendar} erstellt",
"{actor} deleted calendar {calendar}" : "{actor} hat den Kalender {calendar} gelöscht",
@@ -38,10 +39,22 @@
"A calendar <strong>event</strong> was modified" : "Ein Kalender-<strong>Ereignis</strong> wurde bearbeitet",
"A calendar <strong>todo</strong> was modified" : "Eine Kalender-<strong>Aufgabe</strong> wurde bearbeitet",
"Contact birthdays" : "Geburtstage von Kontakten",
- "Personal" : "Persönlich",
+ "Invitation canceled" : "Einladung abgebrochen",
+ "Hello %s," : "Hallo %s,",
+ "The meeting »%s« with %s was canceled." : "Der Termin »%s« mit %s wurde abgesagt.",
+ "Invitation updated" : "Einladung aktualisiert",
+ "The meeting »%s« with %s was updated." : "Der Termin »%s« mit %s wurde aktualisiert.",
+ "%s invited you to »%s«" : "%s hat Sie zu »%s« eingeladen",
+ "When:" : "Wann:",
+ "Where:" : "Wo:",
+ "Description:" : "Beschreibung:",
+ "Link:" : "Link:",
"Contacts" : "Kontakte",
"Technical details" : "Technische Details",
"Remote Address: %s" : "Entfernte Adresse: %s",
- "Request ID: %s" : "Anfragekennung: %s"
+ "Request ID: %s" : "Anfragekennung: %s",
+ "CalDAV server" : "CalDAV-Server",
+ "Send invitations to attendees" : "Einladungen an die Teilnehmer versenden",
+ "Please make sure to properly set up the email settings above." : "Stellen Sie sicher, dass die obigen E-Mail-Einstellungen korrekt sind."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/dav/l10n/el.js b/apps/dav/l10n/el.js
index 8565fc2ce39..f64c83d2aaf 100644
--- a/apps/dav/l10n/el.js
+++ b/apps/dav/l10n/el.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Ημερολόγιο",
"Todos" : "Εργασίες προς εκτέλεση",
+ "Personal" : "Προσωπικά",
"{actor} created calendar {calendar}" : "{actor} δημιουργήθηκε το ημερολόγιο {calendar}",
"You created calendar {calendar}" : "Δημιουργήσατε ημερολόγιο {ημερολόγιο}",
"{actor} deleted calendar {calendar}" : "{actor} διέγραψε το ημερολόγιο {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Τροποποιήθηκε ένα <strong>γεγονός</strong> του ημερολογίου",
"A calendar <strong>todo</strong> was modified" : "Ενός ημερολογίου η <strong>εκκρεμότητα</strong> τροποποιήθηκε",
"Contact birthdays" : "Γενέθλια επαφών",
- "Personal" : "Προσωπικά",
"Contacts" : "Επαφές",
"Technical details" : "Τεχνικές λεπτομέρειες",
"Remote Address: %s" : "Απομακρυσμένη Διεύθυνση: %s",
diff --git a/apps/dav/l10n/el.json b/apps/dav/l10n/el.json
index c0a3f5369dc..9f7a1ab9268 100644
--- a/apps/dav/l10n/el.json
+++ b/apps/dav/l10n/el.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Ημερολόγιο",
"Todos" : "Εργασίες προς εκτέλεση",
+ "Personal" : "Προσωπικά",
"{actor} created calendar {calendar}" : "{actor} δημιουργήθηκε το ημερολόγιο {calendar}",
"You created calendar {calendar}" : "Δημιουργήσατε ημερολόγιο {ημερολόγιο}",
"{actor} deleted calendar {calendar}" : "{actor} διέγραψε το ημερολόγιο {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "Τροποποιήθηκε ένα <strong>γεγονός</strong> του ημερολογίου",
"A calendar <strong>todo</strong> was modified" : "Ενός ημερολογίου η <strong>εκκρεμότητα</strong> τροποποιήθηκε",
"Contact birthdays" : "Γενέθλια επαφών",
- "Personal" : "Προσωπικά",
"Contacts" : "Επαφές",
"Technical details" : "Τεχνικές λεπτομέρειες",
"Remote Address: %s" : "Απομακρυσμένη Διεύθυνση: %s",
diff --git a/apps/dav/l10n/en_GB.js b/apps/dav/l10n/en_GB.js
index 6dd47179e37..94c9592316e 100644
--- a/apps/dav/l10n/en_GB.js
+++ b/apps/dav/l10n/en_GB.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Calendar",
"Todos" : "Todos",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} created calendar {calendar}",
"You created calendar {calendar}" : "You created calendar {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} deleted calendar {calendar}",
@@ -40,10 +41,22 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "A calendar <strong>event</strong> was modified",
"A calendar <strong>todo</strong> was modified" : "A calendar <strong>todo</strong> was modified",
"Contact birthdays" : "Contact birthdays",
- "Personal" : "Personal",
+ "Invitation canceled" : "Invitation canceled",
+ "Hello %s," : "Hello %s,",
+ "The meeting »%s« with %s was canceled." : "The meeting »%s« with %s was canceled.",
+ "Invitation updated" : "Invitation updated",
+ "The meeting »%s« with %s was updated." : "The meeting »%s« with %s was updated.",
+ "%s invited you to »%s«" : "%s invited you to »%s«",
+ "When:" : "When:",
+ "Where:" : "Where:",
+ "Description:" : "Description:",
+ "Link:" : "Link:",
"Contacts" : "Contacts",
"Technical details" : "Technical details",
"Remote Address: %s" : "Remote Address: %s",
- "Request ID: %s" : "Request ID: %s"
+ "Request ID: %s" : "Request ID: %s",
+ "CalDAV server" : "CalDAV server",
+ "Send invitations to attendees" : "Send invitations to attendees",
+ "Please make sure to properly set up the email settings above." : "Please make sure to properly set up the email settings above."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/dav/l10n/en_GB.json b/apps/dav/l10n/en_GB.json
index fb240965003..9b6a26cf0ed 100644
--- a/apps/dav/l10n/en_GB.json
+++ b/apps/dav/l10n/en_GB.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Calendar",
"Todos" : "Todos",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} created calendar {calendar}",
"You created calendar {calendar}" : "You created calendar {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} deleted calendar {calendar}",
@@ -38,10 +39,22 @@
"A calendar <strong>event</strong> was modified" : "A calendar <strong>event</strong> was modified",
"A calendar <strong>todo</strong> was modified" : "A calendar <strong>todo</strong> was modified",
"Contact birthdays" : "Contact birthdays",
- "Personal" : "Personal",
+ "Invitation canceled" : "Invitation canceled",
+ "Hello %s," : "Hello %s,",
+ "The meeting »%s« with %s was canceled." : "The meeting »%s« with %s was canceled.",
+ "Invitation updated" : "Invitation updated",
+ "The meeting »%s« with %s was updated." : "The meeting »%s« with %s was updated.",
+ "%s invited you to »%s«" : "%s invited you to »%s«",
+ "When:" : "When:",
+ "Where:" : "Where:",
+ "Description:" : "Description:",
+ "Link:" : "Link:",
"Contacts" : "Contacts",
"Technical details" : "Technical details",
"Remote Address: %s" : "Remote Address: %s",
- "Request ID: %s" : "Request ID: %s"
+ "Request ID: %s" : "Request ID: %s",
+ "CalDAV server" : "CalDAV server",
+ "Send invitations to attendees" : "Send invitations to attendees",
+ "Please make sure to properly set up the email settings above." : "Please make sure to properly set up the email settings above."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/dav/l10n/es.js b/apps/dav/l10n/es.js
index b518dfd0dfe..b2591b7dda9 100644
--- a/apps/dav/l10n/es.js
+++ b/apps/dav/l10n/es.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Calendario",
"Todos" : "Todos",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} creó el calendario {calendar}",
"You created calendar {calendar}" : "Usted creó el calendario {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} eliminó el calendario {calendar}",
@@ -40,10 +41,22 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Un <strong>evento</strong> del calendario fue modificado.",
"A calendar <strong>todo</strong> was modified" : "Una <strong>lista de tareas</strong> fue modificada",
"Contact birthdays" : "Cumpleaños del contacto",
- "Personal" : "Personal",
+ "Invitation canceled" : "Invitación cancelada",
+ "Hello %s," : "Hola, %s:",
+ "The meeting »%s« with %s was canceled." : "La reunión »%s« con %s se ha cancelado.",
+ "Invitation updated" : "Invitación actualizada",
+ "The meeting »%s« with %s was updated." : "La reunión »%s« con %s se ha actualizado.",
+ "%s invited you to »%s«" : "%s te ha invitado a »%s«",
+ "When:" : "Cuándo:",
+ "Where:" : "Dónde:",
+ "Description:" : "Descripción:",
+ "Link:" : "Enlace:",
"Contacts" : "Contactos",
"Technical details" : "Detalles técnicos",
"Remote Address: %s" : "Dirección remota: %s",
- "Request ID: %s" : "ID de la solicitud: %s"
+ "Request ID: %s" : "ID de la 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, asegúrate de que las configuraciones de correo de arriba son correctas"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/dav/l10n/es.json b/apps/dav/l10n/es.json
index 0503e24f25b..d114b339b13 100644
--- a/apps/dav/l10n/es.json
+++ b/apps/dav/l10n/es.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Calendario",
"Todos" : "Todos",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} creó el calendario {calendar}",
"You created calendar {calendar}" : "Usted creó el calendario {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} eliminó el calendario {calendar}",
@@ -38,10 +39,22 @@
"A calendar <strong>event</strong> was modified" : "Un <strong>evento</strong> del calendario fue modificado.",
"A calendar <strong>todo</strong> was modified" : "Una <strong>lista de tareas</strong> fue modificada",
"Contact birthdays" : "Cumpleaños del contacto",
- "Personal" : "Personal",
+ "Invitation canceled" : "Invitación cancelada",
+ "Hello %s," : "Hola, %s:",
+ "The meeting »%s« with %s was canceled." : "La reunión »%s« con %s se ha cancelado.",
+ "Invitation updated" : "Invitación actualizada",
+ "The meeting »%s« with %s was updated." : "La reunión »%s« con %s se ha actualizado.",
+ "%s invited you to »%s«" : "%s te ha invitado a »%s«",
+ "When:" : "Cuándo:",
+ "Where:" : "Dónde:",
+ "Description:" : "Descripción:",
+ "Link:" : "Enlace:",
"Contacts" : "Contactos",
"Technical details" : "Detalles técnicos",
"Remote Address: %s" : "Dirección remota: %s",
- "Request ID: %s" : "ID de la solicitud: %s"
+ "Request ID: %s" : "ID de la 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, asegúrate de que las configuraciones de correo de arriba son correctas"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/dav/l10n/es_AR.js b/apps/dav/l10n/es_AR.js
index d8753d65d34..7fac0070c8a 100644
--- a/apps/dav/l10n/es_AR.js
+++ b/apps/dav/l10n/es_AR.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Calendario",
"Todos" : "Pendientes",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} creó el calendario {calendar}",
"You created calendar {calendar}" : "Usted creó el calendario {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} borró el calendario {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"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",
- "Personal" : "Personal",
"Contacts" : "Contactos",
"Technical details" : "Detalles técnicos",
"Remote Address: %s" : "Dirección remota: %s",
diff --git a/apps/dav/l10n/es_AR.json b/apps/dav/l10n/es_AR.json
index 1eb8d35975c..542d1536fc7 100644
--- a/apps/dav/l10n/es_AR.json
+++ b/apps/dav/l10n/es_AR.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Calendario",
"Todos" : "Pendientes",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} creó el calendario {calendar}",
"You created calendar {calendar}" : "Usted creó el calendario {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} borró el calendario {calendar}",
@@ -38,7 +39,6 @@
"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",
- "Personal" : "Personal",
"Contacts" : "Contactos",
"Technical details" : "Detalles técnicos",
"Remote Address: %s" : "Dirección remota: %s",
diff --git a/apps/dav/l10n/es_CO.js b/apps/dav/l10n/es_CO.js
new file mode 100644
index 00000000000..433949bf30f
--- /dev/null
+++ b/apps/dav/l10n/es_CO.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_CO.json b/apps/dav/l10n/es_CO.json
new file mode 100644
index 00000000000..ea72915ea47
--- /dev/null
+++ b/apps/dav/l10n/es_CO.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/es_CR.js b/apps/dav/l10n/es_CR.js
new file mode 100644
index 00000000000..433949bf30f
--- /dev/null
+++ b/apps/dav/l10n/es_CR.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_CR.json b/apps/dav/l10n/es_CR.json
new file mode 100644
index 00000000000..ea72915ea47
--- /dev/null
+++ b/apps/dav/l10n/es_CR.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/es_DO.js b/apps/dav/l10n/es_DO.js
new file mode 100644
index 00000000000..433949bf30f
--- /dev/null
+++ b/apps/dav/l10n/es_DO.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_DO.json b/apps/dav/l10n/es_DO.json
new file mode 100644
index 00000000000..ea72915ea47
--- /dev/null
+++ b/apps/dav/l10n/es_DO.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/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/es_MX.js b/apps/dav/l10n/es_MX.js
index 496d5d582e2..433949bf30f 100644
--- a/apps/dav/l10n/es_MX.js
+++ b/apps/dav/l10n/es_MX.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"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}",
@@ -40,10 +41,12 @@ OC.L10N.register(
"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",
- "Personal" : "Personal",
"Contacts" : "Contactos",
"Technical details" : "Detalles técnicos",
"Remote Address: %s" : "Dirección remota: %s",
- "Request ID: %s" : "ID de solicitud: %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_MX.json b/apps/dav/l10n/es_MX.json
index eb87be0396b..ea72915ea47 100644
--- a/apps/dav/l10n/es_MX.json
+++ b/apps/dav/l10n/es_MX.json
@@ -1,6 +1,7 @@
{ "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}",
@@ -38,10 +39,12 @@
"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",
- "Personal" : "Personal",
"Contacts" : "Contactos",
"Technical details" : "Detalles técnicos",
"Remote Address: %s" : "Dirección remota: %s",
- "Request ID: %s" : "ID de solicitud: %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/fi.js b/apps/dav/l10n/fi.js
index b498fe40ad1..51e42b5d72e 100644
--- a/apps/dav/l10n/fi.js
+++ b/apps/dav/l10n/fi.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalenteri",
"Todos" : "Tehtävät",
+ "Personal" : "Henkilökohtainen",
"{actor} created calendar {calendar}" : "{actor} loi kalenterin {calendar}",
"You created calendar {calendar}" : "Loit kalenterin {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} poisti kalenterin {calendar}",
@@ -40,10 +41,12 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Kalenterin <strong>tapahtumaa</strong> on muokattu",
"A calendar <strong>todo</strong> was modified" : "Kalenterin <strong>tehtävää</strong> on muokattu",
"Contact birthdays" : "Yhteystietojen syntymäpäivät",
- "Personal" : "Henkilökohtainen",
"Contacts" : "Yhteystiedot",
"Technical details" : "Tekniset yksityiskohdat",
"Remote Address: %s" : "Etäosoite: %s",
- "Request ID: %s" : "Pyynnön tunniste: %s"
+ "Request ID: %s" : "Pyynnön tunniste: %s",
+ "CalDAV server" : "CalDAV-palvelin",
+ "Send invitations to attendees" : "Lähetä kutsut osallistujille",
+ "Please make sure to properly set up the email settings above." : "Varmista, että määrität sähköpostiasetukset oikein yläpuolelle. "
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/dav/l10n/fi.json b/apps/dav/l10n/fi.json
index 695752ebb06..6b3726a242e 100644
--- a/apps/dav/l10n/fi.json
+++ b/apps/dav/l10n/fi.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalenteri",
"Todos" : "Tehtävät",
+ "Personal" : "Henkilökohtainen",
"{actor} created calendar {calendar}" : "{actor} loi kalenterin {calendar}",
"You created calendar {calendar}" : "Loit kalenterin {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} poisti kalenterin {calendar}",
@@ -38,10 +39,12 @@
"A calendar <strong>event</strong> was modified" : "Kalenterin <strong>tapahtumaa</strong> on muokattu",
"A calendar <strong>todo</strong> was modified" : "Kalenterin <strong>tehtävää</strong> on muokattu",
"Contact birthdays" : "Yhteystietojen syntymäpäivät",
- "Personal" : "Henkilökohtainen",
"Contacts" : "Yhteystiedot",
"Technical details" : "Tekniset yksityiskohdat",
"Remote Address: %s" : "Etäosoite: %s",
- "Request ID: %s" : "Pyynnön tunniste: %s"
+ "Request ID: %s" : "Pyynnön tunniste: %s",
+ "CalDAV server" : "CalDAV-palvelin",
+ "Send invitations to attendees" : "Lähetä kutsut osallistujille",
+ "Please make sure to properly set up the email settings above." : "Varmista, että määrität sähköpostiasetukset oikein yläpuolelle. "
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/dav/l10n/fr.js b/apps/dav/l10n/fr.js
index b7ac0f6f476..4b52f383950 100644
--- a/apps/dav/l10n/fr.js
+++ b/apps/dav/l10n/fr.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Agenda",
"Todos" : "Tâches",
+ "Personal" : "Personnel",
"{actor} created calendar {calendar}" : "{actor} a créé l'agenda {calendar}",
"You created calendar {calendar}" : "Vous avez créé l'agenda {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} a supprimé l'agenda {calendar}",
@@ -40,10 +41,19 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Un <strong>événement</strong> de l'agenda a été modifié",
"A calendar <strong>todo</strong> was modified" : "Une <strong>liste de tâches</strong> de l'agenda a été modifiée",
"Contact birthdays" : "Anniversaires des contacts",
- "Personal" : "Personnel",
+ "Invitation canceled" : "Invitation annulée",
+ "Hello %s," : "Bonjour %s,",
+ "Invitation updated" : "Invitation mise à jour",
+ "When:" : "Quand :",
+ "Where:" : "Où :",
+ "Description:" : "Description :",
+ "Link:" : "Lien :",
"Contacts" : "Contacts",
"Technical details" : "Détails techniques",
"Remote Address: %s" : "Adresse distante : %s",
- "Request ID: %s" : "ID de la requête : %s"
+ "Request ID: %s" : "ID de la requête : %s",
+ "CalDAV server" : "Serveur CalDAV",
+ "Send invitations to attendees" : "Envoyer des invitations aux participants",
+ "Please make sure to properly set up the email settings above." : "Merci de vérifier d'avoir correctement configuré les paramètres de courriel ci-dessus"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/dav/l10n/fr.json b/apps/dav/l10n/fr.json
index ffe94009f03..6c59bcd537f 100644
--- a/apps/dav/l10n/fr.json
+++ b/apps/dav/l10n/fr.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Agenda",
"Todos" : "Tâches",
+ "Personal" : "Personnel",
"{actor} created calendar {calendar}" : "{actor} a créé l'agenda {calendar}",
"You created calendar {calendar}" : "Vous avez créé l'agenda {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} a supprimé l'agenda {calendar}",
@@ -38,10 +39,19 @@
"A calendar <strong>event</strong> was modified" : "Un <strong>événement</strong> de l'agenda a été modifié",
"A calendar <strong>todo</strong> was modified" : "Une <strong>liste de tâches</strong> de l'agenda a été modifiée",
"Contact birthdays" : "Anniversaires des contacts",
- "Personal" : "Personnel",
+ "Invitation canceled" : "Invitation annulée",
+ "Hello %s," : "Bonjour %s,",
+ "Invitation updated" : "Invitation mise à jour",
+ "When:" : "Quand :",
+ "Where:" : "Où :",
+ "Description:" : "Description :",
+ "Link:" : "Lien :",
"Contacts" : "Contacts",
"Technical details" : "Détails techniques",
"Remote Address: %s" : "Adresse distante : %s",
- "Request ID: %s" : "ID de la requête : %s"
+ "Request ID: %s" : "ID de la requête : %s",
+ "CalDAV server" : "Serveur CalDAV",
+ "Send invitations to attendees" : "Envoyer des invitations aux participants",
+ "Please make sure to properly set up the email settings above." : "Merci de vérifier d'avoir correctement configuré les paramètres de courriel ci-dessus"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/dav/l10n/hu.js b/apps/dav/l10n/hu.js
index 85c3bc641ff..e1d8a950d02 100644
--- a/apps/dav/l10n/hu.js
+++ b/apps/dav/l10n/hu.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Naptár",
"Todos" : "Teendők",
+ "Personal" : "Személyes",
"{actor} created calendar {calendar}" : "{actor} létrehozta a naptárt: {calendar}",
"You created calendar {calendar}" : "Létrehoztad a naptárt: {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} törölte a naptárt: {calendar}",
@@ -40,10 +41,12 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Egy naptár <strong>esemény</strong> megváltozott",
"A calendar <strong>todo</strong> was modified" : "Egy naptár <strong>teendő</strong> megváltozott",
"Contact birthdays" : "Születésnapok",
- "Personal" : "Személyes",
"Contacts" : "Névjegyek",
"Technical details" : "Technikai adatok",
"Remote Address: %s" : "Távoli cím: %s",
- "Request ID: %s" : "Kérelem azonosító: %s"
+ "Request ID: %s" : "Kérelem azonosító: %s",
+ "CalDAV server" : "CalDAV szerver",
+ "Send invitations to attendees" : "Meghívó küldése a résztvevőknek",
+ "Please make sure to properly set up the email settings above." : "Győződj meg róla, hogy a fenti e-mail beállítások helyesek."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/dav/l10n/hu.json b/apps/dav/l10n/hu.json
index f84e4c4fce3..f1fd00091dd 100644
--- a/apps/dav/l10n/hu.json
+++ b/apps/dav/l10n/hu.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Naptár",
"Todos" : "Teendők",
+ "Personal" : "Személyes",
"{actor} created calendar {calendar}" : "{actor} létrehozta a naptárt: {calendar}",
"You created calendar {calendar}" : "Létrehoztad a naptárt: {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} törölte a naptárt: {calendar}",
@@ -38,10 +39,12 @@
"A calendar <strong>event</strong> was modified" : "Egy naptár <strong>esemény</strong> megváltozott",
"A calendar <strong>todo</strong> was modified" : "Egy naptár <strong>teendő</strong> megváltozott",
"Contact birthdays" : "Születésnapok",
- "Personal" : "Személyes",
"Contacts" : "Névjegyek",
"Technical details" : "Technikai adatok",
"Remote Address: %s" : "Távoli cím: %s",
- "Request ID: %s" : "Kérelem azonosító: %s"
+ "Request ID: %s" : "Kérelem azonosító: %s",
+ "CalDAV server" : "CalDAV szerver",
+ "Send invitations to attendees" : "Meghívó küldése a résztvevőknek",
+ "Please make sure to properly set up the email settings above." : "Győződj meg róla, hogy a fenti e-mail beállítások helyesek."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/dav/l10n/is.js b/apps/dav/l10n/is.js
index 79b4275068a..f333a74f7a6 100644
--- a/apps/dav/l10n/is.js
+++ b/apps/dav/l10n/is.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Dagatal",
"Todos" : "Verkþættir",
+ "Personal" : "Einka",
"{actor} created calendar {calendar}" : "{actor} bjó til dagatalið {calendar}",
"You created calendar {calendar}" : "Þú bjóst til dagatalið {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} eyddi dagatalinu {calendar}",
@@ -40,10 +41,12 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "<strong>Atburði</strong> dagatals var breytt",
"A calendar <strong>todo</strong> was modified" : "<strong>Verkefnalista</strong> dagatals var breytt",
"Contact birthdays" : "Afmælisdagar tengiliðar",
- "Personal" : "Einka",
"Contacts" : "Tengiliðir",
"Technical details" : "Tæknilegar upplýsingar",
"Remote Address: %s" : "Fjartengt vistfang: %s",
- "Request ID: %s" : "Beiðni um auðkenni: %s"
+ "Request ID: %s" : "Beiðni um auðkenni: %s",
+ "CalDAV server" : "CalDAV-þjónn",
+ "Send invitations to attendees" : "Senda boð til þátttakenda",
+ "Please make sure to properly set up the email settings above." : "Gakktu úr skugga um að tölvupóststillingarnar hér fyrir ofan séu réttar."
},
"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);");
diff --git a/apps/dav/l10n/is.json b/apps/dav/l10n/is.json
index aba5a88917f..13763d56f63 100644
--- a/apps/dav/l10n/is.json
+++ b/apps/dav/l10n/is.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Dagatal",
"Todos" : "Verkþættir",
+ "Personal" : "Einka",
"{actor} created calendar {calendar}" : "{actor} bjó til dagatalið {calendar}",
"You created calendar {calendar}" : "Þú bjóst til dagatalið {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} eyddi dagatalinu {calendar}",
@@ -38,10 +39,12 @@
"A calendar <strong>event</strong> was modified" : "<strong>Atburði</strong> dagatals var breytt",
"A calendar <strong>todo</strong> was modified" : "<strong>Verkefnalista</strong> dagatals var breytt",
"Contact birthdays" : "Afmælisdagar tengiliðar",
- "Personal" : "Einka",
"Contacts" : "Tengiliðir",
"Technical details" : "Tæknilegar upplýsingar",
"Remote Address: %s" : "Fjartengt vistfang: %s",
- "Request ID: %s" : "Beiðni um auðkenni: %s"
+ "Request ID: %s" : "Beiðni um auðkenni: %s",
+ "CalDAV server" : "CalDAV-þjónn",
+ "Send invitations to attendees" : "Senda boð til þátttakenda",
+ "Please make sure to properly set up the email settings above." : "Gakktu úr skugga um að tölvupóststillingarnar hér fyrir ofan séu réttar."
},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"
} \ No newline at end of file
diff --git a/apps/dav/l10n/it.js b/apps/dav/l10n/it.js
index e58d3bd107f..774f4f3f3ad 100644
--- a/apps/dav/l10n/it.js
+++ b/apps/dav/l10n/it.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Calendario",
"Todos" : "Cose da fare",
+ "Personal" : "Personale",
"{actor} created calendar {calendar}" : "{actor} ha creato il calendario {calendar}",
"You created calendar {calendar}" : "Hai creato il calendario {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} ha eliminato il calendario {calendar}",
@@ -40,10 +41,22 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Un <strong>evento</strong> del calendario è stato modificato",
"A calendar <strong>todo</strong> was modified" : "Una <strong>cosa da fare</strong> del calendario è stata modificata",
"Contact birthdays" : "Date di nascita dei contatti",
- "Personal" : "Personale",
+ "Invitation canceled" : "Invito annullato",
+ "Hello %s," : "Ciao %s,",
+ "The meeting »%s« with %s was canceled." : "L'incontro «%s» con %s è stato annullato.",
+ "Invitation updated" : "Invito aggiornato",
+ "The meeting »%s« with %s was updated." : "L'incontro «%s» con %s è stato aggiornato.",
+ "%s invited you to »%s«" : "%s ti ha invitato a «%s»",
+ "When:" : "Quando:",
+ "Where:" : "Dove:",
+ "Description:" : "Descrizione:",
+ "Link:" : "Collegamento:",
"Contacts" : "Contatti",
"Technical details" : "Dettagli tecnici",
"Remote Address: %s" : "Indirizzo remoto: %s",
- "Request ID: %s" : "ID richiesta: %s"
+ "Request ID: %s" : "ID richiesta: %s",
+ "CalDAV server" : "Server CalDAV",
+ "Send invitations to attendees" : "Invia gli inviti ai partecipanti",
+ "Please make sure to properly set up the email settings above." : "Assicurati di configurare correttamente le impostazioni di posta sopra."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/dav/l10n/it.json b/apps/dav/l10n/it.json
index 1f71eed7aff..d97311464cf 100644
--- a/apps/dav/l10n/it.json
+++ b/apps/dav/l10n/it.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Calendario",
"Todos" : "Cose da fare",
+ "Personal" : "Personale",
"{actor} created calendar {calendar}" : "{actor} ha creato il calendario {calendar}",
"You created calendar {calendar}" : "Hai creato il calendario {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} ha eliminato il calendario {calendar}",
@@ -38,10 +39,22 @@
"A calendar <strong>event</strong> was modified" : "Un <strong>evento</strong> del calendario è stato modificato",
"A calendar <strong>todo</strong> was modified" : "Una <strong>cosa da fare</strong> del calendario è stata modificata",
"Contact birthdays" : "Date di nascita dei contatti",
- "Personal" : "Personale",
+ "Invitation canceled" : "Invito annullato",
+ "Hello %s," : "Ciao %s,",
+ "The meeting »%s« with %s was canceled." : "L'incontro «%s» con %s è stato annullato.",
+ "Invitation updated" : "Invito aggiornato",
+ "The meeting »%s« with %s was updated." : "L'incontro «%s» con %s è stato aggiornato.",
+ "%s invited you to »%s«" : "%s ti ha invitato a «%s»",
+ "When:" : "Quando:",
+ "Where:" : "Dove:",
+ "Description:" : "Descrizione:",
+ "Link:" : "Collegamento:",
"Contacts" : "Contatti",
"Technical details" : "Dettagli tecnici",
"Remote Address: %s" : "Indirizzo remoto: %s",
- "Request ID: %s" : "ID richiesta: %s"
+ "Request ID: %s" : "ID richiesta: %s",
+ "CalDAV server" : "Server CalDAV",
+ "Send invitations to attendees" : "Invia gli inviti ai partecipanti",
+ "Please make sure to properly set up the email settings above." : "Assicurati di configurare correttamente le impostazioni di posta sopra."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/dav/l10n/ka_GE.js b/apps/dav/l10n/ka_GE.js
new file mode 100644
index 00000000000..2093bb43659
--- /dev/null
+++ b/apps/dav/l10n/ka_GE.js
@@ -0,0 +1,62 @@
+OC.L10N.register(
+ "dav",
+ {
+ "Calendar" : "კალენდარი",
+ "Todos" : "შესასრულებელი დავალებები",
+ "Personal" : "პირადი",
+ "{actor} created calendar {calendar}" : "{actor}-მა შექმნა კალენდარი {calendar}",
+ "You created calendar {calendar}" : "თქვენ შექმენით {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor}-მა გააუქმა კალენდარი {calendar}",
+ "You deleted calendar {calendar}" : "თქვენ გააუქმეთ კალენდარი {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor}-მა განაახლა კალენდარი {calendar}",
+ "You updated calendar {calendar}" : "თქვენ განაახლეთ კალენდარი {calendar}",
+ "{actor} shared calendar {calendar} with you" : "{actor}-მა თქვენთან გააზიარა კალენდარი {calendar}",
+ "You shared calendar {calendar} with {user}" : "თქვენ გააზიარეთ კალენდარი {calendar} {user}-თან",
+ "{actor} shared calendar {calendar} with {user}" : "{actor}-მა გააზიარა {calendar} {user}-თან",
+ "{actor} unshared calendar {calendar} from you" : "{actor} თქვენთან შეწყვიტა კალენდრის {calendar}-ის გაზიარება",
+ "You unshared calendar {calendar} from {user}" : "თქვენ შეწყვიტეთ კალენდრის {calendar} გაზიარება {user}-თან",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor}-მა შეწყვიტა კალენდრის {calendar} გაზიარება {user}-თან",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor}-მა შეწყვიტა კალენდრის {calendar} გაზიარება",
+ "You shared calendar {calendar} with group {group}" : "თქვენ გააზიარეთ კალენდარი {calendar} ჯგუფთან {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor}-მა გააზიარა {calendar} ჯგუფთან {group}",
+ "You unshared calendar {calendar} from group {group}" : "თქვენ შეწყვიტეთ კალენდრის {calendar} გაზიარება ჯგუფთან {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} შეწყვიტა კალენდრის გაზიარება {calendar} ჯგუფთან {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor}-მა შექმნა მოვლენა {event} კალენდარში {calendar}",
+ "You created event {event} in calendar {calendar}" : "თქვენ შექმენით მოვლენა {event} კალენდარში {calendar}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor}-მა გააუქმა მოვლენა {event} კალენდარში {calendar}",
+ "You deleted event {event} from calendar {calendar}" : "თქვენ გააუქმეთ მოვლენა {event} კალენდარში {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor}-მა განაახლა მოვლენა {event} კალენდარში {calendar}",
+ "You updated event {event} in calendar {calendar}" : "თქვენ განაახლეთ მოვლენა {event} კალენდარში {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor}-მა შექმნა შესასრულებელი დავალება {todo} სიაში {calendar}",
+ "You created todo {todo} in list {calendar}" : "თქვენ შექმენით შესასრულებელი დავალება {todo} სიაში {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor}-მა გააუქმა შესასრულებელი დავალება {todo} სიიდან {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "თქვენ გააუქმეთ შესასრულებელი დავალება {todo} სიიდან {calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor}-მა განაახლა შესასრულებელი დავალება {todo} სიაში {calendar}",
+ "You updated todo {todo} in list {calendar}" : "თქვენ განაახლეთ შესასრულებელი დავალება {todo} in list {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} დაასრულა შესასრულებელი დავალება {todo} სიაში {calendar}",
+ "You solved todo {todo} in list {calendar}" : "თქვენ დაასრულეთ შესასრულებელი დავალება {todo} სიაში {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor}-მა ხელახლა გახსნა შესასრულებელი დავალება {todo} სიაში {calendar}",
+ "You reopened todo {todo} in list {calendar}" : "თქვენ ხელახლა გახსენით შესასრულებელი დავალება {todo} სიაში {calendar}",
+ "A <strong>calendar</strong> was modified" : "<strong>კალენდარი</strong> შეიცვალა",
+ "A calendar <strong>event</strong> was modified" : "კალენდრის <strong>მოვლენა</strong> შეიცვალა",
+ "A calendar <strong>todo</strong> was modified" : "კალენდრის <strong>შესასრულებელი დავალება</strong> შეიცვალა",
+ "Contact birthdays" : "კონტაქტების დაბადების დღეები",
+ "Invitation canceled" : "მოწვევა გაუქმდა",
+ "Hello %s," : "გამარჯობა %s,",
+ "The meeting »%s« with %s was canceled." : "შეხვედრა »%s« %s-სთან გაუქმდა.",
+ "Invitation updated" : "მოწვევა განახლდა",
+ "The meeting »%s« with %s was updated." : "შეხვედრა »%s« %s-სთან განახლდა.",
+ "%s invited you to »%s«" : "%s-მ დაგპატიჟათ რომ »%s«",
+ "When:" : "როდის:",
+ "Where:" : "სად:",
+ "Description:" : "აღწერა:",
+ "Link:" : "ბმულები:",
+ "Contacts" : "კონტაქტები",
+ "Technical details" : "ტექნიკური დეტალები",
+ "Remote Address: %s" : "დისტანციური მისამართი: %s",
+ "Request ID: %s" : "მოთხოვნის ID: %s",
+ "CalDAV server" : "CalDAV სერვერი",
+ "Send invitations to attendees" : "გაუგზავნეთ მოწვევა დამსწრეებს",
+ "Please make sure to properly set up the email settings above." : "გთხოვთ დაამოწმოთ რომ სწორად აყენებთ ზემოთ მოცემულ ელ-ფოსტის პარამეტრებს."
+},
+"nplurals=1; plural=0;");
diff --git a/apps/dav/l10n/ka_GE.json b/apps/dav/l10n/ka_GE.json
new file mode 100644
index 00000000000..1424d45f94c
--- /dev/null
+++ b/apps/dav/l10n/ka_GE.json
@@ -0,0 +1,60 @@
+{ "translations": {
+ "Calendar" : "კალენდარი",
+ "Todos" : "შესასრულებელი დავალებები",
+ "Personal" : "პირადი",
+ "{actor} created calendar {calendar}" : "{actor}-მა შექმნა კალენდარი {calendar}",
+ "You created calendar {calendar}" : "თქვენ შექმენით {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor}-მა გააუქმა კალენდარი {calendar}",
+ "You deleted calendar {calendar}" : "თქვენ გააუქმეთ კალენდარი {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor}-მა განაახლა კალენდარი {calendar}",
+ "You updated calendar {calendar}" : "თქვენ განაახლეთ კალენდარი {calendar}",
+ "{actor} shared calendar {calendar} with you" : "{actor}-მა თქვენთან გააზიარა კალენდარი {calendar}",
+ "You shared calendar {calendar} with {user}" : "თქვენ გააზიარეთ კალენდარი {calendar} {user}-თან",
+ "{actor} shared calendar {calendar} with {user}" : "{actor}-მა გააზიარა {calendar} {user}-თან",
+ "{actor} unshared calendar {calendar} from you" : "{actor} თქვენთან შეწყვიტა კალენდრის {calendar}-ის გაზიარება",
+ "You unshared calendar {calendar} from {user}" : "თქვენ შეწყვიტეთ კალენდრის {calendar} გაზიარება {user}-თან",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor}-მა შეწყვიტა კალენდრის {calendar} გაზიარება {user}-თან",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor}-მა შეწყვიტა კალენდრის {calendar} გაზიარება",
+ "You shared calendar {calendar} with group {group}" : "თქვენ გააზიარეთ კალენდარი {calendar} ჯგუფთან {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor}-მა გააზიარა {calendar} ჯგუფთან {group}",
+ "You unshared calendar {calendar} from group {group}" : "თქვენ შეწყვიტეთ კალენდრის {calendar} გაზიარება ჯგუფთან {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} შეწყვიტა კალენდრის გაზიარება {calendar} ჯგუფთან {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor}-მა შექმნა მოვლენა {event} კალენდარში {calendar}",
+ "You created event {event} in calendar {calendar}" : "თქვენ შექმენით მოვლენა {event} კალენდარში {calendar}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor}-მა გააუქმა მოვლენა {event} კალენდარში {calendar}",
+ "You deleted event {event} from calendar {calendar}" : "თქვენ გააუქმეთ მოვლენა {event} კალენდარში {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor}-მა განაახლა მოვლენა {event} კალენდარში {calendar}",
+ "You updated event {event} in calendar {calendar}" : "თქვენ განაახლეთ მოვლენა {event} კალენდარში {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor}-მა შექმნა შესასრულებელი დავალება {todo} სიაში {calendar}",
+ "You created todo {todo} in list {calendar}" : "თქვენ შექმენით შესასრულებელი დავალება {todo} სიაში {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor}-მა გააუქმა შესასრულებელი დავალება {todo} სიიდან {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "თქვენ გააუქმეთ შესასრულებელი დავალება {todo} სიიდან {calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor}-მა განაახლა შესასრულებელი დავალება {todo} სიაში {calendar}",
+ "You updated todo {todo} in list {calendar}" : "თქვენ განაახლეთ შესასრულებელი დავალება {todo} in list {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} დაასრულა შესასრულებელი დავალება {todo} სიაში {calendar}",
+ "You solved todo {todo} in list {calendar}" : "თქვენ დაასრულეთ შესასრულებელი დავალება {todo} სიაში {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor}-მა ხელახლა გახსნა შესასრულებელი დავალება {todo} სიაში {calendar}",
+ "You reopened todo {todo} in list {calendar}" : "თქვენ ხელახლა გახსენით შესასრულებელი დავალება {todo} სიაში {calendar}",
+ "A <strong>calendar</strong> was modified" : "<strong>კალენდარი</strong> შეიცვალა",
+ "A calendar <strong>event</strong> was modified" : "კალენდრის <strong>მოვლენა</strong> შეიცვალა",
+ "A calendar <strong>todo</strong> was modified" : "კალენდრის <strong>შესასრულებელი დავალება</strong> შეიცვალა",
+ "Contact birthdays" : "კონტაქტების დაბადების დღეები",
+ "Invitation canceled" : "მოწვევა გაუქმდა",
+ "Hello %s," : "გამარჯობა %s,",
+ "The meeting »%s« with %s was canceled." : "შეხვედრა »%s« %s-სთან გაუქმდა.",
+ "Invitation updated" : "მოწვევა განახლდა",
+ "The meeting »%s« with %s was updated." : "შეხვედრა »%s« %s-სთან განახლდა.",
+ "%s invited you to »%s«" : "%s-მ დაგპატიჟათ რომ »%s«",
+ "When:" : "როდის:",
+ "Where:" : "სად:",
+ "Description:" : "აღწერა:",
+ "Link:" : "ბმულები:",
+ "Contacts" : "კონტაქტები",
+ "Technical details" : "ტექნიკური დეტალები",
+ "Remote Address: %s" : "დისტანციური მისამართი: %s",
+ "Request ID: %s" : "მოთხოვნის ID: %s",
+ "CalDAV server" : "CalDAV სერვერი",
+ "Send invitations to attendees" : "გაუგზავნეთ მოწვევა დამსწრეებს",
+ "Please make sure to properly set up the email settings above." : "გთხოვთ დაამოწმოთ რომ სწორად აყენებთ ზემოთ მოცემულ ელ-ფოსტის პარამეტრებს."
+},"pluralForm" :"nplurals=1; plural=0;"
+} \ No newline at end of file
diff --git a/apps/dav/l10n/ko.js b/apps/dav/l10n/ko.js
index af429509986..81a01556fbf 100644
--- a/apps/dav/l10n/ko.js
+++ b/apps/dav/l10n/ko.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "달력",
"Todos" : "할 일",
+ "Personal" : "개인",
"{actor} created calendar {calendar}" : "{actor} 님이 달력 {calendar}을(를) 생성함",
"You created calendar {calendar}" : "달력 {calendar}을(를) 생성함",
"{actor} deleted calendar {calendar}" : "{actor} 님이 달력 {calendar}을(를) 삭제함",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "달력 <strong>행사</strong>가 수정됨",
"A calendar <strong>todo</strong> was modified" : "달력의 <strong>할 일</strong>이 수정됨",
"Contact birthdays" : "연락처에 등록된 생일",
- "Personal" : "개인",
"Contacts" : "연락처",
"Technical details" : "기술 정보",
"Remote Address: %s" : "원격 주소: %s",
diff --git a/apps/dav/l10n/ko.json b/apps/dav/l10n/ko.json
index 7731c7140ae..e397a73b4b3 100644
--- a/apps/dav/l10n/ko.json
+++ b/apps/dav/l10n/ko.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "달력",
"Todos" : "할 일",
+ "Personal" : "개인",
"{actor} created calendar {calendar}" : "{actor} 님이 달력 {calendar}을(를) 생성함",
"You created calendar {calendar}" : "달력 {calendar}을(를) 생성함",
"{actor} deleted calendar {calendar}" : "{actor} 님이 달력 {calendar}을(를) 삭제함",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "달력 <strong>행사</strong>가 수정됨",
"A calendar <strong>todo</strong> was modified" : "달력의 <strong>할 일</strong>이 수정됨",
"Contact birthdays" : "연락처에 등록된 생일",
- "Personal" : "개인",
"Contacts" : "연락처",
"Technical details" : "기술 정보",
"Remote Address: %s" : "원격 주소: %s",
diff --git a/apps/dav/l10n/lt_LT.js b/apps/dav/l10n/lt_LT.js
index 7fc97309154..ec20bcf7bc8 100644
--- a/apps/dav/l10n/lt_LT.js
+++ b/apps/dav/l10n/lt_LT.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalendorius",
"Todos" : "Užduotys",
+ "Personal" : "Asmeniniai",
"{actor} created calendar {calendar}" : "{actor} sukūrė kalendorių {calendar}",
"You created calendar {calendar}" : "Jūs sukūrėte kalendorių {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} ištrynė kalendorių {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Kalendoriaus <strong>įvykis</strong> buvo pakeistas",
"A calendar <strong>todo</strong> was modified" : "Kalendoriaus <strong>užduotis</strong> buvo pakeista",
"Contact birthdays" : "Kontaktų gimtadieniai",
- "Personal" : "Asmeniniai",
"Contacts" : "Kontaktai",
"Technical details" : "Techninė informacija",
"Remote Address: %s" : "Nuotolinis adresas: %s",
diff --git a/apps/dav/l10n/lt_LT.json b/apps/dav/l10n/lt_LT.json
index e328eef4362..c0a8e43c7b8 100644
--- a/apps/dav/l10n/lt_LT.json
+++ b/apps/dav/l10n/lt_LT.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalendorius",
"Todos" : "Užduotys",
+ "Personal" : "Asmeniniai",
"{actor} created calendar {calendar}" : "{actor} sukūrė kalendorių {calendar}",
"You created calendar {calendar}" : "Jūs sukūrėte kalendorių {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} ištrynė kalendorių {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "Kalendoriaus <strong>įvykis</strong> buvo pakeistas",
"A calendar <strong>todo</strong> was modified" : "Kalendoriaus <strong>užduotis</strong> buvo pakeista",
"Contact birthdays" : "Kontaktų gimtadieniai",
- "Personal" : "Asmeniniai",
"Contacts" : "Kontaktai",
"Technical details" : "Techninė informacija",
"Remote Address: %s" : "Nuotolinis adresas: %s",
diff --git a/apps/dav/l10n/nb.js b/apps/dav/l10n/nb.js
index ae4959ba0df..4a207c3cd57 100644
--- a/apps/dav/l10n/nb.js
+++ b/apps/dav/l10n/nb.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalender",
"Todos" : "Gjøremål",
+ "Personal" : "Personlig",
"{actor} created calendar {calendar}" : "{actor} opprettet kalenderen {calendar}",
"You created calendar {calendar}" : "Du opprettet kalenderen {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} slettet kalenderen {calendar}",
@@ -40,10 +41,11 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "En kalender <strong>hendelse</strong> ble endret",
"A calendar <strong>todo</strong> was modified" : "En kalende <strong>gjøremål</strong> ble endret",
"Contact birthdays" : "Kontakters fødelsdag",
- "Personal" : "Personlig",
"Contacts" : "Kontakter",
"Technical details" : "Tekniske detaljer",
"Remote Address: %s" : "Ekstern adresse: %s",
- "Request ID: %s" : "Forespørsel ID: %s"
+ "Request ID: %s" : "Forespørsel ID: %s",
+ "CalDAV server" : "DalDAV-tjener",
+ "Send invitations to attendees" : "Send invitasjoner til oppmøtte"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/dav/l10n/nb.json b/apps/dav/l10n/nb.json
index 81fcad6f830..80ddcab2b58 100644
--- a/apps/dav/l10n/nb.json
+++ b/apps/dav/l10n/nb.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalender",
"Todos" : "Gjøremål",
+ "Personal" : "Personlig",
"{actor} created calendar {calendar}" : "{actor} opprettet kalenderen {calendar}",
"You created calendar {calendar}" : "Du opprettet kalenderen {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} slettet kalenderen {calendar}",
@@ -38,10 +39,11 @@
"A calendar <strong>event</strong> was modified" : "En kalender <strong>hendelse</strong> ble endret",
"A calendar <strong>todo</strong> was modified" : "En kalende <strong>gjøremål</strong> ble endret",
"Contact birthdays" : "Kontakters fødelsdag",
- "Personal" : "Personlig",
"Contacts" : "Kontakter",
"Technical details" : "Tekniske detaljer",
"Remote Address: %s" : "Ekstern adresse: %s",
- "Request ID: %s" : "Forespørsel ID: %s"
+ "Request ID: %s" : "Forespørsel ID: %s",
+ "CalDAV server" : "DalDAV-tjener",
+ "Send invitations to attendees" : "Send invitasjoner til oppmøtte"
},"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 15ad9285bd1..8289d726a63 100644
--- a/apps/dav/l10n/nl.js
+++ b/apps/dav/l10n/nl.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalender",
"Todos" : "Te doen",
+ "Personal" : "Persoonlijk",
"{actor} created calendar {calendar}" : "{actor} creëerde agenda {calendar}",
"You created calendar {calendar}" : "Jij creëerde agenda {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} verwijderde agenda {calendar}",
@@ -40,10 +41,22 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Een agenda <strong>gebeurtenis</strong> is aangepast",
"A calendar <strong>todo</strong> was modified" : "Een agenda <strong>Te doen</strong> was aangepast",
"Contact birthdays" : "Verjaardagen",
- "Personal" : "Persoonlijk",
+ "Invitation canceled" : "Uitnodiging geannuleerd",
+ "Hello %s," : "Hallo %s,",
+ "The meeting »%s« with %s was canceled." : "De vergadering »%s« met %s is geannuleerd.",
+ "Invitation updated" : "Uitnodiging bijgewerkt",
+ "The meeting »%s« with %s was updated." : "De vergadering »%s« met %s is bijgewerkt.",
+ "%s invited you to »%s«" : "%s heeft je uitgenodigd voor »%s«",
+ "When:" : "Wanneer:",
+ "Where:" : "Waar:",
+ "Description:" : "Omschrijving:",
+ "Link:" : "Link:",
"Contacts" : "Contactpersonen",
"Technical details" : "Technische details",
"Remote Address: %s" : "Extern adres: %s",
- "Request ID: %s" : "Aanvraag-ID: %s"
+ "Request ID: %s" : "Aanvraag-ID: %s",
+ "CalDAV server" : "CalDAV server",
+ "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 e3a4071be02..7c96d226dd6 100644
--- a/apps/dav/l10n/nl.json
+++ b/apps/dav/l10n/nl.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalender",
"Todos" : "Te doen",
+ "Personal" : "Persoonlijk",
"{actor} created calendar {calendar}" : "{actor} creëerde agenda {calendar}",
"You created calendar {calendar}" : "Jij creëerde agenda {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} verwijderde agenda {calendar}",
@@ -38,10 +39,22 @@
"A calendar <strong>event</strong> was modified" : "Een agenda <strong>gebeurtenis</strong> is aangepast",
"A calendar <strong>todo</strong> was modified" : "Een agenda <strong>Te doen</strong> was aangepast",
"Contact birthdays" : "Verjaardagen",
- "Personal" : "Persoonlijk",
+ "Invitation canceled" : "Uitnodiging geannuleerd",
+ "Hello %s," : "Hallo %s,",
+ "The meeting »%s« with %s was canceled." : "De vergadering »%s« met %s is geannuleerd.",
+ "Invitation updated" : "Uitnodiging bijgewerkt",
+ "The meeting »%s« with %s was updated." : "De vergadering »%s« met %s is bijgewerkt.",
+ "%s invited you to »%s«" : "%s heeft je uitgenodigd voor »%s«",
+ "When:" : "Wanneer:",
+ "Where:" : "Waar:",
+ "Description:" : "Omschrijving:",
+ "Link:" : "Link:",
"Contacts" : "Contactpersonen",
"Technical details" : "Technische details",
"Remote Address: %s" : "Extern adres: %s",
- "Request ID: %s" : "Aanvraag-ID: %s"
+ "Request ID: %s" : "Aanvraag-ID: %s",
+ "CalDAV server" : "CalDAV server",
+ "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/l10n/pl.js b/apps/dav/l10n/pl.js
index 09366c978ce..e371260fb5f 100644
--- a/apps/dav/l10n/pl.js
+++ b/apps/dav/l10n/pl.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalendarz",
"Todos" : "Zadania",
+ "Personal" : "Osobiste",
"{actor} created calendar {calendar}" : "{actor} utworzył/-a kalendarz {calendar}",
"You created calendar {calendar}" : "Utworzyłeś/-aś kalendarz {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} usunął/-ęła kalendarz {calendar} .",
@@ -40,10 +41,12 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "<strong>Zdarzenie</strong> kalendarza zostało zmodyfikowane",
"A calendar <strong>todo</strong> was modified" : "Kalendarz <strong>zadań</strong> został zmieniony",
"Contact birthdays" : "Urodziny kontaktu",
- "Personal" : "Osobiste",
"Contacts" : "Kontakty",
"Technical details" : "Szczegóły techniczne",
"Remote Address: %s" : "Adres zdalny: %s",
- "Request ID: %s" : "ID żądania: %s"
+ "Request ID: %s" : "ID żądania: %s",
+ "CalDAV server" : "Serwer CalDAV",
+ "Send invitations to attendees" : "Wyślij uczestnikom zaproszenia",
+ "Please make sure to properly set up the email settings above." : "Upewnij się, że dobrze skonfigurowano powyżej ustawienia poczty e-mail."
},
"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);");
diff --git a/apps/dav/l10n/pl.json b/apps/dav/l10n/pl.json
index ec4af482118..9d707baedd2 100644
--- a/apps/dav/l10n/pl.json
+++ b/apps/dav/l10n/pl.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalendarz",
"Todos" : "Zadania",
+ "Personal" : "Osobiste",
"{actor} created calendar {calendar}" : "{actor} utworzył/-a kalendarz {calendar}",
"You created calendar {calendar}" : "Utworzyłeś/-aś kalendarz {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} usunął/-ęła kalendarz {calendar} .",
@@ -38,10 +39,12 @@
"A calendar <strong>event</strong> was modified" : "<strong>Zdarzenie</strong> kalendarza zostało zmodyfikowane",
"A calendar <strong>todo</strong> was modified" : "Kalendarz <strong>zadań</strong> został zmieniony",
"Contact birthdays" : "Urodziny kontaktu",
- "Personal" : "Osobiste",
"Contacts" : "Kontakty",
"Technical details" : "Szczegóły techniczne",
"Remote Address: %s" : "Adres zdalny: %s",
- "Request ID: %s" : "ID żądania: %s"
+ "Request ID: %s" : "ID żądania: %s",
+ "CalDAV server" : "Serwer CalDAV",
+ "Send invitations to attendees" : "Wyślij uczestnikom zaproszenia",
+ "Please make sure to properly set up the email settings above." : "Upewnij się, że dobrze skonfigurowano powyżej ustawienia poczty e-mail."
},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/dav/l10n/pt_BR.js b/apps/dav/l10n/pt_BR.js
index bafe878a8d7..1737fd663e6 100644
--- a/apps/dav/l10n/pt_BR.js
+++ b/apps/dav/l10n/pt_BR.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Calendário",
"Todos" : "Tarefas",
+ "Personal" : "Pessoal",
"{actor} created calendar {calendar}" : "{actor} criou o calendário {calendar}",
"You created calendar {calendar}" : "Você criou o calendário {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} excluiu o calendário {calendar}",
@@ -40,10 +41,22 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Um <strong>evento</strong> do calendário foi modificado",
"A calendar <strong>todo</strong> was modified" : "Uma <strong>tarefa</strong> do calendário foi modificada",
"Contact birthdays" : "Aniversário dos contatos",
- "Personal" : "Pessoal",
+ "Invitation canceled" : "Convite cancelado",
+ "Hello %s," : "Olá %s,",
+ "The meeting »%s« with %s was canceled." : "A reunião »%s« com %s foi cancelada.",
+ "Invitation updated" : "Convite atualizado",
+ "The meeting »%s« with %s was updated." : "A reunião »%s« com %s foi atualizada..",
+ "%s invited you to »%s«" : "%s convidou você para »%s«",
+ "When:" : "Quando:",
+ "Where:" : "Onde:",
+ "Description:" : "Descrição:",
+ "Link:" : "Link:",
"Contacts" : "Contatos",
"Technical details" : "Detalhes técnicos",
"Remote Address: %s" : "Endereço remoto: %s",
- "Request ID: %s" : "ID do solicitante: %s"
+ "Request ID: %s" : "ID do solicitante: %s",
+ "CalDAV server" : "Servidor CalDAV",
+ "Send invitations to attendees" : "Envie convites aos participantes",
+ "Please make sure to properly set up the email settings above." : "Certifique-se de configurar corretamente o email acima."
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/dav/l10n/pt_BR.json b/apps/dav/l10n/pt_BR.json
index d434ef77752..87451665534 100644
--- a/apps/dav/l10n/pt_BR.json
+++ b/apps/dav/l10n/pt_BR.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Calendário",
"Todos" : "Tarefas",
+ "Personal" : "Pessoal",
"{actor} created calendar {calendar}" : "{actor} criou o calendário {calendar}",
"You created calendar {calendar}" : "Você criou o calendário {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} excluiu o calendário {calendar}",
@@ -38,10 +39,22 @@
"A calendar <strong>event</strong> was modified" : "Um <strong>evento</strong> do calendário foi modificado",
"A calendar <strong>todo</strong> was modified" : "Uma <strong>tarefa</strong> do calendário foi modificada",
"Contact birthdays" : "Aniversário dos contatos",
- "Personal" : "Pessoal",
+ "Invitation canceled" : "Convite cancelado",
+ "Hello %s," : "Olá %s,",
+ "The meeting »%s« with %s was canceled." : "A reunião »%s« com %s foi cancelada.",
+ "Invitation updated" : "Convite atualizado",
+ "The meeting »%s« with %s was updated." : "A reunião »%s« com %s foi atualizada..",
+ "%s invited you to »%s«" : "%s convidou você para »%s«",
+ "When:" : "Quando:",
+ "Where:" : "Onde:",
+ "Description:" : "Descrição:",
+ "Link:" : "Link:",
"Contacts" : "Contatos",
"Technical details" : "Detalhes técnicos",
"Remote Address: %s" : "Endereço remoto: %s",
- "Request ID: %s" : "ID do solicitante: %s"
+ "Request ID: %s" : "ID do solicitante: %s",
+ "CalDAV server" : "Servidor CalDAV",
+ "Send invitations to attendees" : "Envie convites aos participantes",
+ "Please make sure to properly set up the email settings above." : "Certifique-se de configurar corretamente o email acima."
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/dav/l10n/ro.js b/apps/dav/l10n/ro.js
index 9f3f2fbf72f..4c506608244 100644
--- a/apps/dav/l10n/ro.js
+++ b/apps/dav/l10n/ro.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Calendar",
"Todos" : "De făcut",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} a creat calendarul {calendar}",
"You created calendar {calendar}" : "Ai creat calendarul {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} a șters calendarul {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Un <strong>eveniment</strong> din calendar a fost modificat",
"A calendar <strong>todo</strong> was modified" : "O <strong>listă</strong> din calendar a fost modificată",
"Contact birthdays" : "Zile de naștere ale persoanelor de contact",
- "Personal" : "Personal",
"Contacts" : "Persoane de contact",
"Technical details" : "Detalii tehnice",
"Remote Address: %s" : "Adresă la distanță: %s",
diff --git a/apps/dav/l10n/ro.json b/apps/dav/l10n/ro.json
index f93f03bd4dd..f98340b4c29 100644
--- a/apps/dav/l10n/ro.json
+++ b/apps/dav/l10n/ro.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Calendar",
"Todos" : "De făcut",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} a creat calendarul {calendar}",
"You created calendar {calendar}" : "Ai creat calendarul {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} a șters calendarul {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "Un <strong>eveniment</strong> din calendar a fost modificat",
"A calendar <strong>todo</strong> was modified" : "O <strong>listă</strong> din calendar a fost modificată",
"Contact birthdays" : "Zile de naștere ale persoanelor de contact",
- "Personal" : "Personal",
"Contacts" : "Persoane de contact",
"Technical details" : "Detalii tehnice",
"Remote Address: %s" : "Adresă la distanță: %s",
diff --git a/apps/dav/l10n/ru.js b/apps/dav/l10n/ru.js
index e6749e7fb1b..fb515a5c4f6 100644
--- a/apps/dav/l10n/ru.js
+++ b/apps/dav/l10n/ru.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Календарь",
"Todos" : "Задачи",
+ "Personal" : "Личное",
"{actor} created calendar {calendar}" : "{actor} создал календарь {calendar}",
"You created calendar {calendar}" : "Вы создали календарь {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} удалил календарь {calendar}",
@@ -40,10 +41,12 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "<strong>Событие</strong> календаря была изменена",
"A calendar <strong>todo</strong> was modified" : "<strong>Задача</strong> календаря была изменена",
"Contact birthdays" : "Дни рождения контакта",
- "Personal" : "Личное",
"Contacts" : "Контакты",
"Technical details" : "Технические подробности",
"Remote Address: %s" : "Удаленный адрес: %s",
- "Request ID: %s" : "ID запроса: %s"
+ "Request ID: %s" : "ID запроса: %s",
+ "CalDAV server" : "CalDAV сервер",
+ "Send invitations to attendees" : "Отправить приглашения",
+ "Please make sure to properly set up the email settings above." : "Пожалуйста проверьте правильность настройки почты выше."
},
"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");
diff --git a/apps/dav/l10n/ru.json b/apps/dav/l10n/ru.json
index 538be85207e..dbd0a712276 100644
--- a/apps/dav/l10n/ru.json
+++ b/apps/dav/l10n/ru.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Календарь",
"Todos" : "Задачи",
+ "Personal" : "Личное",
"{actor} created calendar {calendar}" : "{actor} создал календарь {calendar}",
"You created calendar {calendar}" : "Вы создали календарь {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} удалил календарь {calendar}",
@@ -38,10 +39,12 @@
"A calendar <strong>event</strong> was modified" : "<strong>Событие</strong> календаря была изменена",
"A calendar <strong>todo</strong> was modified" : "<strong>Задача</strong> календаря была изменена",
"Contact birthdays" : "Дни рождения контакта",
- "Personal" : "Личное",
"Contacts" : "Контакты",
"Technical details" : "Технические подробности",
"Remote Address: %s" : "Удаленный адрес: %s",
- "Request ID: %s" : "ID запроса: %s"
+ "Request ID: %s" : "ID запроса: %s",
+ "CalDAV server" : "CalDAV сервер",
+ "Send invitations to attendees" : "Отправить приглашения",
+ "Please make sure to properly set up the email settings above." : "Пожалуйста проверьте правильность настройки почты выше."
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/dav/l10n/sk.js b/apps/dav/l10n/sk.js
index 2e1fc5d3699..1eeee8b6e6c 100644
--- a/apps/dav/l10n/sk.js
+++ b/apps/dav/l10n/sk.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalendár",
"Todos" : "Úlohy",
+ "Personal" : "Osobné",
"{actor} created calendar {calendar}" : "[actor] vytvoril kalendár [calendar]",
"You created calendar {calendar}" : "Vytvorili ste kalendár [calendar]",
"{actor} deleted calendar {calendar}" : "[actor] zmazal kalendár [calendar]",
@@ -40,10 +41,12 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "<strong>Udalosť</strong> v kalendári bola upravená",
"A calendar <strong>todo</strong> was modified" : "<>",
"Contact birthdays" : "Narodeniny kontaktu",
- "Personal" : "Osobné",
"Contacts" : "Kontakty",
"Technical details" : "Technické podrobnosti",
"Remote Address: %s" : "Vzdialená adresa: %s",
- "Request ID: %s" : "ID požiadavky: %s"
+ "Request ID: %s" : "ID požiadavky: %s",
+ "CalDAV server" : "Server CalDAV",
+ "Send invitations to attendees" : "Odoslanie pozvánok účastníkom",
+ "Please make sure to properly set up the email settings above." : "Uistite sa, že máte správne nastavené vyššie uvedené nastavenia e-mailu."
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/dav/l10n/sk.json b/apps/dav/l10n/sk.json
index cac08a2ca42..d21f92e6f07 100644
--- a/apps/dav/l10n/sk.json
+++ b/apps/dav/l10n/sk.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalendár",
"Todos" : "Úlohy",
+ "Personal" : "Osobné",
"{actor} created calendar {calendar}" : "[actor] vytvoril kalendár [calendar]",
"You created calendar {calendar}" : "Vytvorili ste kalendár [calendar]",
"{actor} deleted calendar {calendar}" : "[actor] zmazal kalendár [calendar]",
@@ -38,10 +39,12 @@
"A calendar <strong>event</strong> was modified" : "<strong>Udalosť</strong> v kalendári bola upravená",
"A calendar <strong>todo</strong> was modified" : "<>",
"Contact birthdays" : "Narodeniny kontaktu",
- "Personal" : "Osobné",
"Contacts" : "Kontakty",
"Technical details" : "Technické podrobnosti",
"Remote Address: %s" : "Vzdialená adresa: %s",
- "Request ID: %s" : "ID požiadavky: %s"
+ "Request ID: %s" : "ID požiadavky: %s",
+ "CalDAV server" : "Server CalDAV",
+ "Send invitations to attendees" : "Odoslanie pozvánok účastníkom",
+ "Please make sure to properly set up the email settings above." : "Uistite sa, že máte správne nastavené vyššie uvedené nastavenia e-mailu."
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/dav/l10n/sq.js b/apps/dav/l10n/sq.js
index 2ced2eddcbf..ecb7f350e09 100644
--- a/apps/dav/l10n/sq.js
+++ b/apps/dav/l10n/sq.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalendar",
"Todos" : "Për tu bërë",
+ "Personal" : "Personale",
"{actor} created calendar {calendar}" : "{aktori} krijoi kalendarin {kalendarin}",
"You created calendar {calendar}" : "Ju krijuat kalendarin {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} fshiu kalendarin {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Një <strong>event</strong> në kalendar u modifikua",
"A calendar <strong>todo</strong> was modified" : "Një kalendar <strong>todo<strong> u modifikua",
"Contact birthdays" : "Ditëlindjet e kontakteve",
- "Personal" : "Personale",
"Contacts" : "Kontaktet",
"Technical details" : "Detaje teknike",
"Remote Address: %s" : "Adresa remote: %s",
diff --git a/apps/dav/l10n/sq.json b/apps/dav/l10n/sq.json
index dea2472fa16..981ace9d18a 100644
--- a/apps/dav/l10n/sq.json
+++ b/apps/dav/l10n/sq.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalendar",
"Todos" : "Për tu bërë",
+ "Personal" : "Personale",
"{actor} created calendar {calendar}" : "{aktori} krijoi kalendarin {kalendarin}",
"You created calendar {calendar}" : "Ju krijuat kalendarin {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} fshiu kalendarin {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "Një <strong>event</strong> në kalendar u modifikua",
"A calendar <strong>todo</strong> was modified" : "Një kalendar <strong>todo<strong> u modifikua",
"Contact birthdays" : "Ditëlindjet e kontakteve",
- "Personal" : "Personale",
"Contacts" : "Kontaktet",
"Technical details" : "Detaje teknike",
"Remote Address: %s" : "Adresa remote: %s",
diff --git a/apps/dav/l10n/sr.js b/apps/dav/l10n/sr.js
index ad84267ebf5..90cb6003b8c 100644
--- a/apps/dav/l10n/sr.js
+++ b/apps/dav/l10n/sr.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Календар",
"Todos" : "Подсетници",
+ "Personal" : "Лично",
"{actor} created calendar {calendar}" : "{actor} је направио календар {calendar}",
"You created calendar {calendar}" : "Креирали сте календар {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} је обрисао календар {calendar}",
@@ -40,10 +41,12 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "<strong>Догађај</strong> из календара је измењен",
"A calendar <strong>todo</strong> was modified" : "<strong>Подсетник</strong> из календара је измењен",
"Contact birthdays" : "Рођендани контаката",
- "Personal" : "Лично",
"Contacts" : "Контакти",
"Technical details" : "Технички детаљи",
"Remote Address: %s" : "Удаљена адреса: %s",
- "Request ID: %s" : "ИД захтева: %s"
+ "Request ID: %s" : "ИД захтева: %s",
+ "CalDAV server" : "CalDAV сервер",
+ "Send invitations to attendees" : "Пошаљи позивницу учесницима",
+ "Please make sure to properly set up the email settings above." : "Пазите да правилно подесите поставке е-поште изнад."
},
"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/dav/l10n/sr.json b/apps/dav/l10n/sr.json
index 613f034614b..45b02431c7e 100644
--- a/apps/dav/l10n/sr.json
+++ b/apps/dav/l10n/sr.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Календар",
"Todos" : "Подсетници",
+ "Personal" : "Лично",
"{actor} created calendar {calendar}" : "{actor} је направио календар {calendar}",
"You created calendar {calendar}" : "Креирали сте календар {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} је обрисао календар {calendar}",
@@ -38,10 +39,12 @@
"A calendar <strong>event</strong> was modified" : "<strong>Догађај</strong> из календара је измењен",
"A calendar <strong>todo</strong> was modified" : "<strong>Подсетник</strong> из календара је измењен",
"Contact birthdays" : "Рођендани контаката",
- "Personal" : "Лично",
"Contacts" : "Контакти",
"Technical details" : "Технички детаљи",
"Remote Address: %s" : "Удаљена адреса: %s",
- "Request ID: %s" : "ИД захтева: %s"
+ "Request ID: %s" : "ИД захтева: %s",
+ "CalDAV server" : "CalDAV сервер",
+ "Send invitations to attendees" : "Пошаљи позивницу учесницима",
+ "Please make sure to properly set up the email settings above." : "Пазите да правилно подесите поставке е-поште изнад."
},"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/dav/l10n/sv.js b/apps/dav/l10n/sv.js
index 25cd0d797c8..aa8765c7dc9 100644
--- a/apps/dav/l10n/sv.js
+++ b/apps/dav/l10n/sv.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalender",
"Todos" : "Uppgifter",
+ "Personal" : "Privat",
"{actor} created calendar {calendar}" : "{actor} skapade kalender {calendar}",
"You created calendar {calendar}" : "Du skapade kalender {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} raderade kalender {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "En kalender-<strong>händelse</strong> modifierades",
"A calendar <strong>todo</strong> was modified" : "En kalender <strong>uppgift</strong> modifierades",
"Contact birthdays" : "Födelsedagar",
- "Personal" : "Privat",
"Contacts" : "Kontakter",
"Technical details" : "Tekniska detaljer",
"Remote Address: %s" : "Extern adress: %s",
diff --git a/apps/dav/l10n/sv.json b/apps/dav/l10n/sv.json
index ba76ca55329..0c06957dcfd 100644
--- a/apps/dav/l10n/sv.json
+++ b/apps/dav/l10n/sv.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalender",
"Todos" : "Uppgifter",
+ "Personal" : "Privat",
"{actor} created calendar {calendar}" : "{actor} skapade kalender {calendar}",
"You created calendar {calendar}" : "Du skapade kalender {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} raderade kalender {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "En kalender-<strong>händelse</strong> modifierades",
"A calendar <strong>todo</strong> was modified" : "En kalender <strong>uppgift</strong> modifierades",
"Contact birthdays" : "Födelsedagar",
- "Personal" : "Privat",
"Contacts" : "Kontakter",
"Technical details" : "Tekniska detaljer",
"Remote Address: %s" : "Extern adress: %s",
diff --git a/apps/dav/l10n/tr.js b/apps/dav/l10n/tr.js
index e292cfa7d59..ff8d82d04ac 100644
--- a/apps/dav/l10n/tr.js
+++ b/apps/dav/l10n/tr.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Takvim",
"Todos" : "Yapılacak İşler",
+ "Personal" : "Kişisel",
"{actor} created calendar {calendar}" : "{actor}, {calendar} takvimini ekledi",
"You created calendar {calendar}" : "{calendar} takvimini eklediniz",
"{actor} deleted calendar {calendar}" : "{actor}, {calendar} takvimini sildi",
@@ -40,10 +41,22 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Bir takvim <strong>etkinliği</strong> düzenlendi",
"A calendar <strong>todo</strong> was modified" : "Bir takvim <strong>yapılacak işi</strong> düzenlendi",
"Contact birthdays" : "Kişi doğum günleri",
- "Personal" : "Kişisel",
+ "Invitation canceled" : "Çağrı iptal edildi",
+ "Hello %s," : "Merhaba %s,",
+ "The meeting »%s« with %s was canceled." : "Bu »%s« görüşmesi %s ile yapılacakken iptal edildi.",
+ "Invitation updated" : "Çağrı güncellendi",
+ "The meeting »%s« with %s was updated." : "Bu »%s« görüşmesi %s ile yapılacakken güncellendi.",
+ "%s invited you to »%s«" : "%s sizi şu görüşmeye çağırdı »%s«",
+ "When:" : "Zaman:",
+ "Where:" : "Yer:",
+ "Description:" : "Açıklama:",
+ "Link:" : "Bağlantı:",
"Contacts" : "Kişiler",
"Technical details" : "Teknik ayrıntılar",
"Remote Address: %s" : "Uzak Adres: %s",
- "Request ID: %s" : "İstek Kodu: %s"
+ "Request ID: %s" : "İstek Kodu: %s",
+ "CalDAV server" : "CalDAV sunucusu",
+ "Send invitations to attendees" : "Katılımcılara çağrıları gönder",
+ "Please make sure to properly set up the email settings above." : "Lütfen yukarıdaki e-posta ayarlarını doğru olarak yaptığınızdan emin olun."
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/dav/l10n/tr.json b/apps/dav/l10n/tr.json
index f189e713ec5..5900486b703 100644
--- a/apps/dav/l10n/tr.json
+++ b/apps/dav/l10n/tr.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Takvim",
"Todos" : "Yapılacak İşler",
+ "Personal" : "Kişisel",
"{actor} created calendar {calendar}" : "{actor}, {calendar} takvimini ekledi",
"You created calendar {calendar}" : "{calendar} takvimini eklediniz",
"{actor} deleted calendar {calendar}" : "{actor}, {calendar} takvimini sildi",
@@ -38,10 +39,22 @@
"A calendar <strong>event</strong> was modified" : "Bir takvim <strong>etkinliği</strong> düzenlendi",
"A calendar <strong>todo</strong> was modified" : "Bir takvim <strong>yapılacak işi</strong> düzenlendi",
"Contact birthdays" : "Kişi doğum günleri",
- "Personal" : "Kişisel",
+ "Invitation canceled" : "Çağrı iptal edildi",
+ "Hello %s," : "Merhaba %s,",
+ "The meeting »%s« with %s was canceled." : "Bu »%s« görüşmesi %s ile yapılacakken iptal edildi.",
+ "Invitation updated" : "Çağrı güncellendi",
+ "The meeting »%s« with %s was updated." : "Bu »%s« görüşmesi %s ile yapılacakken güncellendi.",
+ "%s invited you to »%s«" : "%s sizi şu görüşmeye çağırdı »%s«",
+ "When:" : "Zaman:",
+ "Where:" : "Yer:",
+ "Description:" : "Açıklama:",
+ "Link:" : "Bağlantı:",
"Contacts" : "Kişiler",
"Technical details" : "Teknik ayrıntılar",
"Remote Address: %s" : "Uzak Adres: %s",
- "Request ID: %s" : "İstek Kodu: %s"
+ "Request ID: %s" : "İstek Kodu: %s",
+ "CalDAV server" : "CalDAV sunucusu",
+ "Send invitations to attendees" : "Katılımcılara çağrıları gönder",
+ "Please make sure to properly set up the email settings above." : "Lütfen yukarıdaki e-posta ayarlarını doğru olarak yaptığınızdan emin olun."
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/dav/l10n/zh_CN.js b/apps/dav/l10n/zh_CN.js
index 049c0e2b542..e0ee9015402 100644
--- a/apps/dav/l10n/zh_CN.js
+++ b/apps/dav/l10n/zh_CN.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "日历",
"Todos" : "待办事项",
+ "Personal" : "个人",
"{actor} created calendar {calendar}" : "{actor} 创建了日历 {calendar}",
"You created calendar {calendar}" : "您创建的日历 {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} 删除了日历 {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "日历中<strong>事件</strong>已经修改",
"A calendar <strong>todo</strong> was modified" : "列表中<strong>待办事项</strong>已经修改",
"Contact birthdays" : "联系人生日",
- "Personal" : "个人",
"Contacts" : "联系人",
"Technical details" : "技术细节",
"Remote Address: %s" : "远程地址: %s",
diff --git a/apps/dav/l10n/zh_CN.json b/apps/dav/l10n/zh_CN.json
index 7e215d624d2..30419409556 100644
--- a/apps/dav/l10n/zh_CN.json
+++ b/apps/dav/l10n/zh_CN.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "日历",
"Todos" : "待办事项",
+ "Personal" : "个人",
"{actor} created calendar {calendar}" : "{actor} 创建了日历 {calendar}",
"You created calendar {calendar}" : "您创建的日历 {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} 删除了日历 {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "日历中<strong>事件</strong>已经修改",
"A calendar <strong>todo</strong> was modified" : "列表中<strong>待办事项</strong>已经修改",
"Contact birthdays" : "联系人生日",
- "Personal" : "个人",
"Contacts" : "联系人",
"Technical details" : "技术细节",
"Remote Address: %s" : "远程地址: %s",
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
new file mode 100644
index 00000000000..59b03f54fd0
--- /dev/null
+++ b/apps/dav/lib/AppInfo/PluginManager.php
@@ -0,0 +1,172 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016, ownCloud GmbH.
+ *
+ * @author Julius Härtl <jus@bitgrid.net>
+ * @author Vincent Petry <pvince81@owncloud.com>
+ *
+ * @license AGPL-3.0
+ *
+ * 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 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, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+namespace OCA\DAV\AppInfo;
+
+use OCP\App\IAppManager;
+use OC\ServerContainer;
+use OCP\AppFramework\QueryException;
+
+/**
+ * Manager for DAV plugins from apps, used to register them
+ * to the Sabre server.
+ */
+class PluginManager {
+
+ /**
+ * @var ServerContainer
+ */
+ private $container;
+
+ /**
+ * @var IAppManager
+ */
+ private $appManager;
+
+ /**
+ * App plugins
+ *
+ * @var array
+ */
+ private $plugins = null;
+
+ /**
+ * App collections
+ *
+ * @var array
+ */
+ private $collections = null;
+
+ /**
+ * Contstruct a PluginManager
+ *
+ * @param ServerContainer $container server container for resolving plugin classes
+ * @param IAppManager $appManager app manager to loading apps and their info
+ */
+ public function __construct(ServerContainer $container, IAppManager $appManager) {
+ $this->container = $container;
+ $this->appManager = $appManager;
+ }
+
+ /**
+ * Returns an array of app-registered plugins
+ *
+ * @return array
+ */
+ public function getAppPlugins() {
+ if (null === $this->plugins) {
+ $this->populate();
+ }
+ return $this->plugins;
+ }
+
+ /**
+ * Returns an array of app-registered collections
+ *
+ * @return array
+ */
+ public function getAppCollections() {
+ if (null === $this->collections) {
+ $this->populate();
+ }
+ return $this->collections;
+ }
+
+ /**
+ * Retrieve plugin and collection list and populate attributes
+ */
+ private function populate() {
+ $this->plugins = [];
+ $this->collections = [];
+ foreach ($this->appManager->getInstalledApps() as $app) {
+ // load plugins and collections from info.xml
+ $info = $this->appManager->getAppInfo($app);
+ if (!isset($info['types']) || !in_array('dav', $info['types'], true)) {
+ continue;
+ }
+ // FIXME: switch to public API once available
+ // load app to make sure its classes are available
+ \OC_App::loadApp($app);
+ $this->loadSabrePluginsFromInfoXml($this->extractPluginList($info));
+ $this->loadSabreCollectionsFromInfoXml($this->extractCollectionList($info));
+ }
+ }
+
+ private function extractPluginList(array $array) {
+ if (isset($array['sabre']) && is_array($array['sabre'])) {
+ if (isset($array['sabre']['plugins']) && is_array($array['sabre']['plugins'])) {
+ if (isset($array['sabre']['plugins']['plugin'])) {
+ $items = $array['sabre']['plugins']['plugin'];
+ if (!is_array($items)) {
+ $items = [$items];
+ }
+ return $items;
+ }
+ }
+ }
+ return [];
+ }
+
+ private function extractCollectionList(array $array) {
+ if (isset($array['sabre']) && is_array($array['sabre'])) {
+ if (isset($array['sabre']['collections']) && is_array($array['sabre']['collections'])) {
+ if (isset($array['sabre']['collections']['collection'])) {
+ $items = $array['sabre']['collections']['collection'];
+ if (!is_array($items)) {
+ $items = [$items];
+ }
+ return $items;
+ }
+ }
+ }
+ return [];
+ }
+
+ private function loadSabrePluginsFromInfoXml(array $plugins) {
+ foreach ($plugins as $plugin) {
+ try {
+ $this->plugins[] = $this->container->query($plugin);
+ } catch (QueryException $e) {
+ if (class_exists($plugin)) {
+ $this->plugins[] = new $plugin();
+ } else {
+ throw new \Exception("Sabre plugin class '$plugin' is unknown and could not be loaded");
+ }
+ }
+ }
+ }
+
+ private function loadSabreCollectionsFromInfoXml(array $collections) {
+ foreach ($collections as $collection) {
+ try {
+ $this->collections[] = $this->container->query($collection);
+ } catch (QueryException $e) {
+ if (class_exists($collection)) {
+ $this->collections[] = new $collection();
+ } else {
+ throw new \Exception("Sabre collection class '$collection' is unknown and could not be loaded");
+ }
+ }
+ }
+ }
+
+}
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 f8cc82407fd..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
@@ -135,8 +138,12 @@ class Backend {
->setSubject(
$user === $currentUser ? $action . '_self' : $action,
[
- $currentUser,
- $calendarData['{DAV:}displayname'],
+ 'actor' => $currentUser,
+ 'calendar' => [
+ 'id' => (int) $calendarData['id'],
+ 'uri' => $calendarData['uri'],
+ 'name' => $calendarData['{DAV:}displayname'],
+ ],
]
);
$this->activityManager->publish($event);
@@ -187,8 +194,13 @@ class Backend {
if ($owner !== $principal[2]) {
$parameters = [
- $principal[2],
- $calendarData['{DAV:}displayname'],
+ 'actor' => $event->getAuthor(),
+ 'calendar' => [
+ 'id' => (int) $calendarData['id'],
+ 'uri' => $calendarData['uri'],
+ 'name' => $calendarData['{DAV:}displayname'],
+ ],
+ 'user' => $principal[2],
];
if ($owner === $event->getAuthor()) {
@@ -201,7 +213,6 @@ class Backend {
$this->activityManager->publish($event);
$subject = Calendar::SUBJECT_UNSHARE_USER . '_by';
- $parameters[] = $event->getAuthor();
}
$event->setAffectedUser($owner)
@@ -212,8 +223,13 @@ class Backend {
$this->triggerActivityGroup($principal[2], $event, $calendarData, Calendar::SUBJECT_UNSHARE_USER);
$parameters = [
- $principal[2],
- $calendarData['{DAV:}displayname'],
+ 'actor' => $event->getAuthor(),
+ 'calendar' => [
+ 'id' => (int) $calendarData['id'],
+ 'uri' => $calendarData['uri'],
+ 'name' => $calendarData['{DAV:}displayname'],
+ ],
+ 'group' => $principal[2],
];
if ($owner === $event->getAuthor()) {
@@ -224,7 +240,6 @@ class Backend {
$this->activityManager->publish($event);
$subject = Calendar::SUBJECT_UNSHARE_GROUP . '_by';
- $parameters[] = $event->getAuthor();
}
$event->setAffectedUser($owner)
@@ -250,8 +265,13 @@ class Backend {
if ($owner !== $principal[2]) {
$parameters = [
- $principal[2],
- $calendarData['{DAV:}displayname'],
+ 'actor' => $event->getAuthor(),
+ 'calendar' => [
+ 'id' => (int) $calendarData['id'],
+ 'uri' => $calendarData['uri'],
+ 'name' => $calendarData['{DAV:}displayname'],
+ ],
+ 'user' => $principal[2],
];
if ($owner === $event->getAuthor()) {
@@ -262,7 +282,6 @@ class Backend {
$this->activityManager->publish($event);
$subject = Calendar::SUBJECT_SHARE_USER . '_by';
- $parameters[] = $event->getAuthor();
}
$event->setAffectedUser($owner)
@@ -273,8 +292,13 @@ class Backend {
$this->triggerActivityGroup($principal[2], $event, $calendarData, Calendar::SUBJECT_SHARE_USER);
$parameters = [
- $principal[2],
- $calendarData['{DAV:}displayname'],
+ 'actor' => $event->getAuthor(),
+ 'calendar' => [
+ 'id' => (int) $calendarData['id'],
+ 'uri' => $calendarData['uri'],
+ 'name' => $calendarData['{DAV:}displayname'],
+ ],
+ 'group' => $principal[2],
];
if ($owner === $event->getAuthor()) {
@@ -285,7 +309,6 @@ class Backend {
$this->activityManager->publish($event);
$subject = Calendar::SUBJECT_SHARE_GROUP . '_by';
- $parameters[] = $event->getAuthor();
}
$event->setAffectedUser($owner)
@@ -347,8 +370,12 @@ class Backend {
->setSubject(
$user === $event->getAuthor() && $subjectSelf ? $subjectSelf : $subject,
[
- $event->getAuthor(),
- $properties['{DAV:}displayname'],
+ 'actor' => $event->getAuthor(),
+ 'calendar' => [
+ 'id' => (int) $properties['id'],
+ 'uri' => $properties['uri'],
+ 'name' => $properties['{DAV:}displayname'],
+ ],
]
);
@@ -401,9 +428,13 @@ class Backend {
->setSubject(
$user === $currentUser ? $action . '_self' : $action,
[
- $currentUser,
- $calendarData['{DAV:}displayname'],
- [
+ 'actor' => $event->getAuthor(),
+ 'calendar' => [
+ 'id' => (int) $calendarData['id'],
+ 'uri' => $calendarData['uri'],
+ 'name' => $calendarData['{DAV:}displayname'],
+ ],
+ 'object' => [
'id' => $object['id'],
'name' => $object['name'],
],
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 72fdd681b8a..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
@@ -21,8 +23,10 @@
namespace OCA\DAV\CalDAV\Activity\Provider;
+use OCA\DAV\CalDAV\CalDavBackend;
use OCP\Activity\IEvent;
use OCP\Activity\IProvider;
+use OCP\IL10N;
use OCP\IUser;
use OCP\IUserManager;
@@ -64,7 +68,7 @@ abstract class Base implements IProvider {
protected function generateObjectParameter($eventData) {
if (!is_array($eventData) || !isset($eventData['id']) || !isset($eventData['name'])) {
throw new \InvalidArgumentException();
- };
+ }
return [
'type' => 'calendar-event',
@@ -74,11 +78,33 @@ abstract class Base implements IProvider {
}
/**
+ * @param array $data
+ * @param IL10N $l
+ * @return array
+ */
+ protected function generateCalendarParameter($data, IL10N $l) {
+ if ($data['uri'] === CalDavBackend::PERSONAL_CALENDAR_URI &&
+ $data['name'] === CalDavBackend::PERSONAL_CALENDAR_NAME) {
+ return [
+ 'type' => 'calendar',
+ 'id' => $data['id'],
+ 'name' => $l->t('Personal'),
+ ];
+ }
+
+ return [
+ 'type' => 'calendar',
+ 'id' => $data['id'],
+ 'name' => $data['name'],
+ ];
+ }
+
+ /**
* @param int $id
* @param string $name
* @return array
*/
- protected function generateCalendarParameter($id, $name) {
+ protected function generateLegacyCalendarParameter($id, $name) {
return [
'type' => 'calendar',
'id' => $id,
diff --git a/apps/dav/lib/CalDAV/Activity/Provider/Calendar.php b/apps/dav/lib/CalDAV/Activity/Provider/Calendar.php
index 36d425ecf63..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
@@ -156,6 +158,56 @@ class Calendar extends Base {
$subject = $event->getSubject();
$parameters = $event->getSubjectParameters();
+ // Nextcloud 13+
+ if (isset($parameters['calendar'])) {
+ switch ($subject) {
+ case self::SUBJECT_ADD:
+ case self::SUBJECT_ADD . '_self':
+ case self::SUBJECT_DELETE:
+ case self::SUBJECT_DELETE . '_self':
+ case self::SUBJECT_UPDATE:
+ case self::SUBJECT_UPDATE . '_self':
+ case self::SUBJECT_SHARE_USER:
+ case self::SUBJECT_UNSHARE_USER:
+ case self::SUBJECT_UNSHARE_USER . '_self':
+ return [
+ 'actor' => $this->generateUserParameter($parameters['actor']),
+ 'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
+ ];
+ case self::SUBJECT_SHARE_USER . '_you':
+ case self::SUBJECT_UNSHARE_USER . '_you':
+ return [
+ 'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
+ 'user' => $this->generateUserParameter($parameters['user']),
+ ];
+ case self::SUBJECT_SHARE_USER . '_by':
+ case self::SUBJECT_UNSHARE_USER . '_by':
+ return [
+ 'actor' => $this->generateUserParameter($parameters['actor']),
+ 'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
+ 'user' => $this->generateUserParameter($parameters['user']),
+ ];
+ case self::SUBJECT_SHARE_GROUP . '_you':
+ case self::SUBJECT_UNSHARE_GROUP . '_you':
+ return [
+ 'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
+ 'group' => $this->generateGroupParameter($parameters['group']),
+ ];
+ case self::SUBJECT_SHARE_GROUP . '_by':
+ case self::SUBJECT_UNSHARE_GROUP . '_by':
+ return [
+ 'actor' => $this->generateUserParameter($parameters['actor']),
+ 'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
+ 'group' => $this->generateGroupParameter($parameters['group']),
+ ];
+ }
+ }
+
+ // Legacy - Do NOT Remove unless necessary
+ // Removing this will break parsing of activities that were created on
+ // Nextcloud 12, so we should keep this as long as it's acceptable.
+ // Otherwise if people upgrade over multiple releases in a short period,
+ // they will get the dead entries in their stream.
switch ($subject) {
case self::SUBJECT_ADD:
case self::SUBJECT_ADD . '_self':
@@ -168,32 +220,32 @@ class Calendar extends Base {
case self::SUBJECT_UNSHARE_USER . '_self':
return [
'actor' => $this->generateUserParameter($parameters[0]),
- 'calendar' => $this->generateCalendarParameter((int)$event->getObjectId(), $parameters[1]),
+ 'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
];
case self::SUBJECT_SHARE_USER . '_you':
case self::SUBJECT_UNSHARE_USER . '_you':
return [
'user' => $this->generateUserParameter($parameters[0]),
- 'calendar' => $this->generateCalendarParameter((int)$event->getObjectId(), $parameters[1]),
+ 'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
];
case self::SUBJECT_SHARE_USER . '_by':
case self::SUBJECT_UNSHARE_USER . '_by':
return [
'user' => $this->generateUserParameter($parameters[0]),
- 'calendar' => $this->generateCalendarParameter((int)$event->getObjectId(), $parameters[1]),
+ 'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
'actor' => $this->generateUserParameter($parameters[2]),
];
case self::SUBJECT_SHARE_GROUP . '_you':
case self::SUBJECT_UNSHARE_GROUP . '_you':
return [
'group' => $this->generateGroupParameter($parameters[0]),
- 'calendar' => $this->generateCalendarParameter((int)$event->getObjectId(), $parameters[1]),
+ 'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
];
case self::SUBJECT_SHARE_GROUP . '_by':
case self::SUBJECT_UNSHARE_GROUP . '_by':
return [
'group' => $this->generateGroupParameter($parameters[0]),
- 'calendar' => $this->generateCalendarParameter((int)$event->getObjectId(), $parameters[1]),
+ 'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
'actor' => $this->generateUserParameter($parameters[2]),
];
}
diff --git a/apps/dav/lib/CalDAV/Activity/Provider/Event.php b/apps/dav/lib/CalDAV/Activity/Provider/Event.php
index 2c2e3d01c28..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
@@ -118,20 +120,46 @@ class Event extends Base {
$subject = $event->getSubject();
$parameters = $event->getSubjectParameters();
+ // Nextcloud 13+
+ if (isset($parameters['calendar'])) {
+ switch ($subject) {
+ case self::SUBJECT_OBJECT_ADD . '_event':
+ case self::SUBJECT_OBJECT_DELETE . '_event':
+ case self::SUBJECT_OBJECT_UPDATE . '_event':
+ return [
+ 'actor' => $this->generateUserParameter($parameters['actor']),
+ 'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
+ 'event' => $this->generateObjectParameter($parameters['object']),
+ ];
+ case self::SUBJECT_OBJECT_ADD . '_event_self':
+ case self::SUBJECT_OBJECT_DELETE . '_event_self':
+ case self::SUBJECT_OBJECT_UPDATE . '_event_self':
+ return [
+ 'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
+ 'event' => $this->generateObjectParameter($parameters['object']),
+ ];
+ }
+ }
+
+ // Legacy - Do NOT Remove unless necessary
+ // Removing this will break parsing of activities that were created on
+ // Nextcloud 12, so we should keep this as long as it's acceptable.
+ // Otherwise if people upgrade over multiple releases in a short period,
+ // they will get the dead entries in their stream.
switch ($subject) {
case self::SUBJECT_OBJECT_ADD . '_event':
case self::SUBJECT_OBJECT_DELETE . '_event':
case self::SUBJECT_OBJECT_UPDATE . '_event':
return [
'actor' => $this->generateUserParameter($parameters[0]),
- 'calendar' => $this->generateCalendarParameter((int)$event->getObjectId(), $parameters[1]),
+ 'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
'event' => $this->generateObjectParameter($parameters[2]),
];
case self::SUBJECT_OBJECT_ADD . '_event_self':
case self::SUBJECT_OBJECT_DELETE . '_event_self':
case self::SUBJECT_OBJECT_UPDATE . '_event_self':
return [
- 'calendar' => $this->generateCalendarParameter((int)$event->getObjectId(), $parameters[1]),
+ 'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
'event' => $this->generateObjectParameter($parameters[2]),
];
}
diff --git a/apps/dav/lib/CalDAV/Activity/Provider/Todo.php b/apps/dav/lib/CalDAV/Activity/Provider/Todo.php
index a665caa0e6a..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
@@ -87,6 +89,36 @@ class Todo extends Event {
$subject = $event->getSubject();
$parameters = $event->getSubjectParameters();
+ // Nextcloud 13+
+ if (isset($parameters['calendar'])) {
+ switch ($subject) {
+ case self::SUBJECT_OBJECT_ADD . '_todo':
+ case self::SUBJECT_OBJECT_DELETE . '_todo':
+ case self::SUBJECT_OBJECT_UPDATE . '_todo':
+ case self::SUBJECT_OBJECT_UPDATE . '_todo_completed':
+ case self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action':
+ return [
+ 'actor' => $this->generateUserParameter($parameters['actor']),
+ 'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
+ 'todo' => $this->generateObjectParameter($parameters['object']),
+ ];
+ case self::SUBJECT_OBJECT_ADD . '_todo_self':
+ case self::SUBJECT_OBJECT_DELETE . '_todo_self':
+ case self::SUBJECT_OBJECT_UPDATE . '_todo_self':
+ case self::SUBJECT_OBJECT_UPDATE . '_todo_completed_self':
+ case self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action_self':
+ return [
+ 'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
+ 'todo' => $this->generateObjectParameter($parameters['object']),
+ ];
+ }
+ }
+
+ // Legacy - Do NOT Remove unless necessary
+ // Removing this will break parsing of activities that were created on
+ // Nextcloud 12, so we should keep this as long as it's acceptable.
+ // Otherwise if people upgrade over multiple releases in a short period,
+ // they will get the dead entries in their stream.
switch ($subject) {
case self::SUBJECT_OBJECT_ADD . '_todo':
case self::SUBJECT_OBJECT_DELETE . '_todo':
@@ -95,7 +127,7 @@ class Todo extends Event {
case self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action':
return [
'actor' => $this->generateUserParameter($parameters[0]),
- 'calendar' => $this->generateCalendarParameter((int)$event->getObjectId(), $parameters[1]),
+ 'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
'todo' => $this->generateObjectParameter($parameters[2]),
];
case self::SUBJECT_OBJECT_ADD . '_todo_self':
@@ -104,7 +136,7 @@ class Todo extends Event {
case self::SUBJECT_OBJECT_UPDATE . '_todo_completed_self':
case self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action_self':
return [
- 'calendar' => $this->generateCalendarParameter((int)$event->getObjectId(), $parameters[1]),
+ 'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
'todo' => $this->generateObjectParameter($parameters[2]),
];
}
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 83ef06f29e1..9505a00ea55 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
*
@@ -32,6 +36,7 @@ use OCP\DB\QueryBuilder\IQueryBuilder;
use OCA\DAV\Connector\Sabre\Principal;
use OCA\DAV\DAV\Sharing\Backend;
use OCP\IDBConnection;
+use OCP\IGroupManager;
use OCP\IUser;
use OCP\IUserManager;
use OCP\Security\ISecureRandom;
@@ -158,6 +163,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
* @param IDBConnection $db
* @param Principal $principalBackend
* @param IUserManager $userManager
+ * @param IGroupManager $groupManager
* @param ISecureRandom $random
* @param EventDispatcherInterface $dispatcher
* @param bool $legacyEndpoint
@@ -165,13 +171,14 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
public function __construct(IDBConnection $db,
Principal $principalBackend,
IUserManager $userManager,
+ IGroupManager $groupManager,
ISecureRandom $random,
EventDispatcherInterface $dispatcher,
$legacyEndpoint = false) {
$this->db = $db;
$this->principalBackend = $principalBackend;
$this->userManager = $userManager;
- $this->sharingBackend = new Backend($this->db, $principalBackend, 'calendar');
+ $this->sharingBackend = new Backend($this->db, $this->userManager, $groupManager, $principalBackend, 'calendar');
$this->random = $random;
$this->dispatcher = $dispatcher;
$this->legacyEndpoint = $legacyEndpoint;
@@ -954,6 +961,20 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
function createCalendarObject($calendarId, $objectUri, $calendarData) {
$extraData = $this->getDenormalizedData($calendarData);
+ $q = $this->db->getQueryBuilder();
+ $q->select($q->createFunction('COUNT(*)'))
+ ->from('calendarobjects')
+ ->where($q->expr()->eq('calendarid', $q->createNamedParameter($calendarId)))
+ ->andWhere($q->expr()->eq('uid', $q->createNamedParameter($extraData['uid'])));
+
+ $result = $q->execute();
+ $count = (int) $result->fetchColumn();
+ $result->closeCursor();
+
+ if ($count !== 0) {
+ throw new \Sabre\DAV\Exception\BadRequest('Calendar object with uid already exists in this calendar collection.');
+ }
+
$query = $this->db->getQueryBuilder();
$query->insert('calendarobjects')
->values([
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 86aa2c98e8d..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
*
@@ -37,10 +37,24 @@ class CalendarObject extends \Sabre\CalDAV\CalendarObject {
*/
function get() {
$data = parent::get();
- if ($this->isShared() && $this->objectData['classification'] === CalDavBackend::CLASSIFICATION_CONFIDENTIAL) {
- return $this->createConfidentialObject($data);
+
+ if (!$this->isShared()) {
+ return $data;
+ }
+
+ $vObject = Reader::read($data);
+
+ // remove VAlarms if calendar is shared read-only
+ if (!$this->canWrite()) {
+ $this->removeVAlarms($vObject);
}
- return $data;
+
+ // shows as busy if event is declared confidential
+ if ($this->objectData['classification'] === CalDavBackend::CLASSIFICATION_CONFIDENTIAL) {
+ $this->createConfidentialObject($vObject);
+ }
+
+ return $vObject->serialize();
}
protected function isShared() {
@@ -52,13 +66,10 @@ class CalendarObject extends \Sabre\CalDAV\CalendarObject {
}
/**
- * @param string $calData
- * @return string
+ * @param Component\VCalendar $vObject
+ * @return void
*/
- private static function createConfidentialObject($calData) {
-
- $vObject = Reader::read($calData);
-
+ private static function createConfidentialObject(Component\VCalendar $vObject) {
/** @var Component $vElement */
$vElement = null;
if(isset($vObject->VEVENT)) {
@@ -92,8 +103,27 @@ class CalendarObject extends \Sabre\CalDAV\CalendarObject {
}
}
}
-
- return $vObject->serialize();
}
+ /**
+ * @param Component\VCalendar $vObject
+ * @return void
+ */
+ private function removeVAlarms(Component\VCalendar $vObject) {
+ $subcomponents = $vObject->getComponents();
+
+ foreach($subcomponents as $subcomponent) {
+ unset($subcomponent->VALARM);
+ }
+ }
+
+ /**
+ * @return bool
+ */
+ private function canWrite() {
+ if (isset($this->calendarInfo['{http://owncloud.org/ns}read-only'])) {
+ return !$this->calendarInfo['{http://owncloud.org/ns}read-only'];
+ }
+ return true;
+ }
}
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 2e4acad6dfe..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
@@ -33,6 +38,7 @@ use OCP\DB\QueryBuilder\IQueryBuilder;
use OCA\DAV\DAV\Sharing\Backend;
use OCA\DAV\DAV\Sharing\IShareable;
use OCP\IDBConnection;
+use OCP\IGroupManager;
use OCP\IUser;
use OCP\IUserManager;
use PDO;
@@ -88,17 +94,19 @@ class CardDavBackend implements BackendInterface, SyncSupport {
* @param IDBConnection $db
* @param Principal $principalBackend
* @param IUserManager $userManager
+ * @param IGroupManager $groupManager
* @param EventDispatcherInterface $dispatcher
*/
public function __construct(IDBConnection $db,
Principal $principalBackend,
IUserManager $userManager,
+ IGroupManager $groupManager,
EventDispatcherInterface $dispatcher) {
$this->db = $db;
$this->principalBackend = $principalBackend;
$this->userManager = $userManager;
$this->dispatcher = $dispatcher;
- $this->sharingBackend = new Backend($this->db, $principalBackend, 'addressbook');
+ $this->sharingBackend = new Backend($this->db, $this->userManager, $groupManager, $principalBackend, 'addressbook');
}
/**
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 24990352fab..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
@@ -79,7 +81,7 @@ class CreateCalendar extends Command {
$dispatcher = \OC::$server->getEventDispatcher();
$name = $input->getArgument('name');
- $caldav = new CalDavBackend($this->dbConnection, $principalBackend, $this->userManager, $random, $dispatcher);
+ $caldav = new CalDavBackend($this->dbConnection, $principalBackend, $this->userManager, $this->groupManager, $random, $dispatcher);
$caldav->createCalendar("principals/users/$user", $name, []);
}
}
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 ca2195fc65a..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>
@@ -27,28 +26,34 @@
namespace OCA\DAV\Connector\Sabre;
+use OCA\DAV\Connector\Sabre\Exception\PasswordLoginForbidden;
+use OCP\Files\StorageNotAvailableException;
use OCP\ILogger;
+use Sabre\DAV\Exception\Forbidden;
+use Sabre\DAV\Exception\NotAuthenticated;
+use Sabre\DAV\Exception\NotFound;
+use Sabre\DAV\Exception\PreconditionFailed;
use Sabre\DAV\Exception\ServiceUnavailable;
class ExceptionLoggerPlugin extends \Sabre\DAV\ServerPlugin {
protected $nonFatalExceptions = [
- 'Sabre\DAV\Exception\NotAuthenticated' => true,
+ NotAuthenticated::class => true,
// If tokenauth can throw this exception (which is basically as
// NotAuthenticated. So not fatal.
- 'OCA\DAV\Connector\Sabre\Exception\PasswordLoginForbidden' => true,
+ PasswordLoginForbidden::class => true,
// the sync client uses this to find out whether files exist,
// so it is not always an error, log it as debug
- 'Sabre\DAV\Exception\NotFound' => true,
+ NotFound::class => true,
// this one mostly happens when the same file is uploaded at
// exactly the same time from two clients, only one client
// wins, the second one gets "Precondition failed"
- 'Sabre\DAV\Exception\PreconditionFailed' => true,
+ PreconditionFailed::class => true,
// forbidden can be expected when trying to upload to
// read-only folders for example
- 'Sabre\DAV\Exception\Forbidden' => true,
+ Forbidden::class => true,
// Happens when an external storage or federated share is temporarily
// not available
- 'Sabre\DAV\Exception\StorageNotAvailableException' => true,
+ StorageNotAvailableException::class => true,
];
/** @var string */
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 6cc5e3b6f50..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
@@ -26,11 +27,17 @@ namespace OCA\DAV\DAV\Sharing;
use OCA\DAV\Connector\Sabre\Principal;
use OCP\IDBConnection;
+use OCP\IGroupManager;
+use OCP\IUserManager;
class Backend {
/** @var IDBConnection */
private $db;
+ /** @var IUserManager */
+ private $userManager;
+ /** @var IGroupManager */
+ private $groupManager;
/** @var Principal */
private $principalBackend;
/** @var string */
@@ -42,11 +49,15 @@ class Backend {
/**
* @param IDBConnection $db
+ * @param IUserManager $userManager
+ * @param IGroupManager $groupManager
* @param Principal $principalBackend
* @param string $resourceType
*/
- public function __construct(IDBConnection $db, Principal $principalBackend, $resourceType) {
+ public function __construct(IDBConnection $db, IUserManager $userManager, IGroupManager $groupManager, Principal $principalBackend, $resourceType) {
$this->db = $db;
+ $this->userManager = $userManager;
+ $this->groupManager = $groupManager;
$this->principalBackend = $principalBackend;
$this->resourceType = $resourceType;
}
@@ -81,6 +92,18 @@ class Backend {
return;
}
+ $principal = explode('/', $parts[1], 3);
+ if (count($principal) !== 3 || $principal[0] !== 'principals' || !in_array($principal[1], ['users', 'groups'], true)) {
+ // Invalid principal
+ return;
+ }
+
+ if (($principal[1] === 'users' && !$this->userManager->userExists($principal[2])) ||
+ ($principal[1] === 'groups' && !$this->groupManager->groupExists($principal[2]))) {
+ // User or group does not exist
+ return;
+ }
+
// remove the share if it already exists
$this->unshare($shareable, $element['href']);
$access = self::ACCESS_READ;
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 8c19e92499d..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
@@ -163,7 +164,7 @@ class SystemPrincipalBackend extends AbstractBackend {
* @return array
*/
function getGroupMembership($principal) {
- list($prefix, $name) = \Sabre\Uri\split($principal);
+ list($prefix, ) = \Sabre\Uri\split($principal);
if ($prefix === 'principals/system') {
$principal = $this->getPrincipalByPath($principal);
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/RootCollection.php b/apps/dav/lib/RootCollection.php
index a243ec6d00a..e4ba1f2c02a 100644
--- a/apps/dav/lib/RootCollection.php
+++ b/apps/dav/lib/RootCollection.php
@@ -41,15 +41,14 @@ class RootCollection extends SimpleCollection {
$config = \OC::$server->getConfig();
$random = \OC::$server->getSecureRandom();
$userManager = \OC::$server->getUserManager();
+ $groupManager = \OC::$server->getGroupManager();
$db = \OC::$server->getDatabaseConnection();
$dispatcher = \OC::$server->getEventDispatcher();
$userPrincipalBackend = new Principal(
$userManager,
- \OC::$server->getGroupManager()
- );
- $groupPrincipalBackend = new GroupPrincipalBackend(
- \OC::$server->getGroupManager()
+ $groupManager
);
+ $groupPrincipalBackend = new GroupPrincipalBackend($groupManager);
// as soon as debug mode is enabled we allow listing of principals
$disableListing = !$config->getSystemValue('debug', false);
@@ -62,7 +61,7 @@ class RootCollection extends SimpleCollection {
$systemPrincipals->disableListing = $disableListing;
$filesCollection = new Files\RootCollection($userPrincipalBackend, 'principals/users');
$filesCollection->disableListing = $disableListing;
- $caldavBackend = new CalDavBackend($db, $userPrincipalBackend, $userManager, $random, $dispatcher);
+ $caldavBackend = new CalDavBackend($db, $userPrincipalBackend, $userManager, $groupManager, $random, $dispatcher);
$calendarRoot = new CalendarRoot($userPrincipalBackend, $caldavBackend, 'principals/users');
$calendarRoot->disableListing = $disableListing;
$publicCalendarRoot = new PublicCalendarRoot($caldavBackend);
@@ -71,28 +70,28 @@ class RootCollection extends SimpleCollection {
$systemTagCollection = new SystemTag\SystemTagsByIdCollection(
\OC::$server->getSystemTagManager(),
\OC::$server->getUserSession(),
- \OC::$server->getGroupManager()
+ $groupManager
);
$systemTagRelationsCollection = new SystemTag\SystemTagsRelationsCollection(
\OC::$server->getSystemTagManager(),
\OC::$server->getSystemTagObjectMapper(),
\OC::$server->getUserSession(),
- \OC::$server->getGroupManager(),
+ $groupManager,
\OC::$server->getEventDispatcher()
);
$commentsCollection = new Comments\RootCollection(
\OC::$server->getCommentsManager(),
- \OC::$server->getUserManager(),
+ $userManager,
\OC::$server->getUserSession(),
\OC::$server->getEventDispatcher(),
\OC::$server->getLogger()
);
- $usersCardDavBackend = new CardDavBackend($db, $userPrincipalBackend, \OC::$server->getUserManager(), $dispatcher);
+ $usersCardDavBackend = new CardDavBackend($db, $userPrincipalBackend, $userManager, $groupManager, $dispatcher);
$usersAddressBookRoot = new AddressBookRoot($userPrincipalBackend, $usersCardDavBackend, 'principals/users');
$usersAddressBookRoot->disableListing = $disableListing;
- $systemCardDavBackend = new CardDavBackend($db, $userPrincipalBackend, \OC::$server->getUserManager(), $dispatcher);
+ $systemCardDavBackend = new CardDavBackend($db, $userPrincipalBackend, $userManager, $groupManager, $dispatcher);
$systemAddressBookRoot = new AddressBookRoot(new SystemPrincipalBackend(), $systemCardDavBackend, 'principals/system');
$systemAddressBookRoot->disableListing = $disableListing;
diff --git a/apps/dav/lib/Server.php b/apps/dav/lib/Server.php
index 6f3ab3971ef..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>
*
@@ -55,8 +59,8 @@ use OCP\SabrePluginEvent;
use Sabre\CardDAV\VCFExportPlugin;
use Sabre\DAV\Auth\Plugin;
use OCA\DAV\Connector\Sabre\TagsPlugin;
-use Sabre\HTTP\Auth\Bearer;
use SearchDAV\DAV\SearchPlugin;
+use OCA\DAV\AppInfo\PluginManager;
class Server {
@@ -76,6 +80,8 @@ class Server {
$mailer = \OC::$server->getMailer();
$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));
@@ -137,7 +143,9 @@ class Server {
$this->server->addPlugin(new \OCA\DAV\CalDAV\Plugin());
$this->server->addPlugin(new \Sabre\CalDAV\ICSExportPlugin());
$this->server->addPlugin(new \OCA\DAV\CalDAV\Schedule\Plugin());
- $this->server->addPlugin(new IMipPlugin($mailer, $logger, $timezone));
+ if ($sendInvitations) {
+ $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());
$this->server->addPlugin(new DAV\Sharing\Plugin($authBackend, \OC::$server->getRequest()));
@@ -184,7 +192,7 @@ class Server {
}
// wait with registering these until auth is handled and the filesystem is setup
- $this->server->on('beforeMethod', function () {
+ $this->server->on('beforeMethod', function () use ($root) {
// custom properties plugin must be the last one
$userSession = \OC::$server->getUserSession();
$user = $userSession->getUser();
@@ -252,6 +260,18 @@ class Server {
)));
}
}
+
+ // register plugins from apps
+ $pluginManager = new PluginManager(
+ \OC::$server,
+ \OC::$server->getAppManager()
+ );
+ foreach ($pluginManager->getAppPlugins() as $appPlugin) {
+ $this->server->addPlugin($appPlugin);
+ }
+ foreach ($pluginManager->getAppCollections() as $appCollection) {
+ $root->addChild($appCollection);
+ }
});
}
diff --git a/apps/dav/lib/Settings/CalDAVSettings.php b/apps/dav/lib/Settings/CalDAVSettings.php
new file mode 100644
index 00000000000..1c85d19432c
--- /dev/null
+++ b/apps/dav/lib/Settings/CalDAVSettings.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * @copyright 2017, Georg Ehrke <oc.list@georgehrke.com>
+ *
+ * @author Georg Ehrke <oc.list@georgehrke.com>
+ *
+ * @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\Settings;
+
+use OCP\AppFramework\Http\TemplateResponse;
+use OCP\IConfig;
+use OCP\Settings\ISettings;
+
+class CalDAVSettings implements ISettings {
+
+ /** @var IConfig */
+ private $config;
+
+ /**
+ * CalDAVSettings constructor.
+ *
+ * @param IConfig $config
+ */
+ public function __construct(IConfig $config) {
+ $this->config = $config;
+ }
+
+ /**
+ * @return TemplateResponse
+ */
+ public function getForm() {
+ $parameters = [
+ 'send_invitations' => $this->config->getAppValue('dav', 'sendInvitations', 'yes'),
+ ];
+
+ return new TemplateResponse('dav', 'settings-admin-caldav', $parameters);
+ }
+
+ /**
+ * @return string
+ */
+ public function getSection() {
+ return 'additional';
+ }
+
+ /**
+ * @return int
+ */
+ public function getPriority() {
+ return 20;
+ }
+}
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/templates/settings-admin-caldav.php b/apps/dav/templates/settings-admin-caldav.php
new file mode 100644
index 00000000000..8dbe5b38412
--- /dev/null
+++ b/apps/dav/templates/settings-admin-caldav.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * @copyright 2017, Georg Ehrke <oc.list@georgehrke.com>
+ *
+ * @author Georg Ehrke <oc.list@georgehrke.com>
+ *
+ * @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/>.
+ *
+ */
+
+script('dav', [
+ 'settings-admin-caldav'
+]);
+
+/** @var \OCP\IL10N $l */
+/** @var array $_ */
+?>
+<form id="CalDAV" class="section">
+ <h2><?php p($l->t('CalDAV server')); ?></h2>
+ <p>
+ <input type="checkbox" name="caldav_send_invitations" id="caldavSendInvitations" class="checkbox"
+ <?php ($_['send_invitations'] === 'yes') ? print_unescaped('checked="checked"') : null ?>/>
+ <label for="caldavSendInvitations"><?php p($l->t('Send invitations to attendees')); ?></label>
+ <br>
+ <em><?php p($l->t('Please make sure to properly set up the email settings above.')); ?></em>
+ </p>
+</form>
diff --git a/apps/dav/tests/unit/AppInfo/PluginManagerTest.php b/apps/dav/tests/unit/AppInfo/PluginManagerTest.php
new file mode 100644
index 00000000000..89c972acd26
--- /dev/null
+++ b/apps/dav/tests/unit/AppInfo/PluginManagerTest.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016, ownCloud GmbH.
+ *
+ * @author Vincent Petry <pvince81@owncloud.com>
+ *
+ * @license AGPL-3.0
+ *
+ * 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 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, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\DAV\Tests\unit\AppInfo;
+
+use Test\TestCase;
+use OCP\App\IAppManager;
+use OC\ServerContainer;
+use OCA\DAV\AppInfo\PluginManager;
+
+/**
+ * Class PluginManagerTest
+ *
+ * @package OCA\DAV\Tests\Unit\AppInfo
+ */
+class PluginManagerTest extends TestCase {
+ public function test() {
+ $server = $this->createMock(ServerContainer::class);
+
+
+ $appManager = $this->createMock(IAppManager::class);
+ $appManager->method('getInstalledApps')
+ ->willReturn(['adavapp', 'adavapp2']);
+
+ $appInfo1 = [
+ 'types' => ['dav'],
+ 'sabre' => [
+ 'plugins' => [
+ 'plugin' => [
+ '\OCA\DAV\ADavApp\PluginOne',
+ '\OCA\DAV\ADavApp\PluginTwo',
+ ],
+ ],
+ 'collections' => [
+ 'collection' => [
+ '\OCA\DAV\ADavApp\CollectionOne',
+ '\OCA\DAV\ADavApp\CollectionTwo',
+ ]
+ ],
+ ],
+ ];
+ $appInfo2 = [
+ 'types' => ['logging', 'dav'],
+ 'sabre' => [
+ 'plugins' => [
+ 'plugin' => '\OCA\DAV\ADavApp2\PluginOne',
+ ],
+ 'collections' => [
+ 'collection' => '\OCA\DAV\ADavApp2\CollectionOne',
+ ],
+ ],
+ ];
+
+ $appManager->method('getAppInfo')
+ ->will($this->returnValueMap([
+ ['adavapp', $appInfo1],
+ ['adavapp2', $appInfo2],
+ ]));
+
+ $pluginManager = new PluginManager($server, $appManager);
+
+ $server->method('query')
+ ->will($this->returnValueMap([
+ ['\OCA\DAV\ADavApp\PluginOne', 'dummyplugin1'],
+ ['\OCA\DAV\ADavApp\PluginTwo', 'dummyplugin2'],
+ ['\OCA\DAV\ADavApp\CollectionOne', 'dummycollection1'],
+ ['\OCA\DAV\ADavApp\CollectionTwo', 'dummycollection2'],
+ ['\OCA\DAV\ADavApp2\PluginOne', 'dummy2plugin1'],
+ ['\OCA\DAV\ADavApp2\CollectionOne', 'dummy2collection1'],
+ ]));
+
+ $expectedPlugins = [
+ 'dummyplugin1',
+ 'dummyplugin2',
+ 'dummy2plugin1',
+ ];
+ $expectedCollections = [
+ 'dummycollection1',
+ 'dummycollection2',
+ 'dummy2collection1',
+ ];
+
+ $this->assertEquals($expectedPlugins, $pluginManager->getAppPlugins());
+ $this->assertEquals($expectedCollections, $pluginManager->getAppCollections());
+ }
+}
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/AbstractCalDavBackendTest.php b/apps/dav/tests/unit/CalDAV/AbstractCalDavBackend.php
index a7bf4432c64..90bf860b24d 100644
--- a/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.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
@@ -24,6 +27,7 @@ namespace OCA\DAV\Tests\unit\CalDAV;
use OCA\DAV\CalDAV\CalDavBackend;
use OCA\DAV\Connector\Sabre\Principal;
+use OCP\IGroupManager;
use OCP\IUserManager;
use OCP\Security\ISecureRandom;
use Sabre\CalDAV\Xml\Property\SupportedCalendarComponentSet;
@@ -37,7 +41,7 @@ use Test\TestCase;
*
* @package OCA\DAV\Tests\unit\CalDAV
*/
-abstract class AbstractCalDavBackendTest extends TestCase {
+abstract class AbstractCalDavBackend extends TestCase {
/** @var CalDavBackend */
protected $backend;
@@ -46,6 +50,8 @@ abstract class AbstractCalDavBackendTest extends TestCase {
protected $principal;
/** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
protected $userManager;
+ /** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */
+ protected $groupManager;
/** @var EventDispatcherInterface|\PHPUnit_Framework_MockObject_MockObject */
protected $dispatcher;
@@ -61,8 +67,9 @@ abstract class AbstractCalDavBackendTest extends TestCase {
parent::setUp();
$this->userManager = $this->createMock(IUserManager::class);
+ $this->groupManager = $this->createMock(IGroupManager::class);
$this->dispatcher = $this->createMock(EventDispatcherInterface::class);
- $this->principal = $this->getMockBuilder('OCA\DAV\Connector\Sabre\Principal')
+ $this->principal = $this->getMockBuilder(Principal::class)
->disableOriginalConstructor()
->setMethods(['getPrincipalByPath', 'getGroupMembership'])
->getMock();
@@ -77,7 +84,7 @@ abstract class AbstractCalDavBackendTest extends TestCase {
$db = \OC::$server->getDatabaseConnection();
$this->random = \OC::$server->getSecureRandom();
- $this->backend = new CalDavBackend($db, $this->principal, $this->userManager, $this->random, $this->dispatcher);
+ $this->backend = new CalDavBackend($db, $this->principal, $this->userManager, $this->groupManager, $this->random, $this->dispatcher);
$this->cleanUpBackend();
}
@@ -133,13 +140,15 @@ abstract class AbstractCalDavBackendTest extends TestCase {
protected function createEvent($calendarId, $start = '20130912T130000Z', $end = '20130912T140000Z') {
+ $randomPart = self::getUniqueID();
+
$calData = <<<EOD
BEGIN:VCALENDAR
VERSION:2.0
PRODID:ownCloud Calendar
BEGIN:VEVENT
CREATED;VALUE=DATE-TIME:20130910T125139Z
-UID:47d15e3ec8
+UID:47d15e3ec8-$randomPart
LAST-MODIFIED;VALUE=DATE-TIME:20130910T125139Z
DTSTAMP;VALUE=DATE-TIME:20130910T125139Z
SUMMARY:Test Event
diff --git a/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php b/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php
index d8d15e8f1f7..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
@@ -108,11 +110,13 @@ class BackendTest extends TestCase {
[Calendar::SUBJECT_ADD, [
'principaluri' => 'principal/user/admin',
'id' => 42,
+ 'uri' => 'this-uri',
'{DAV:}displayname' => 'Name of calendar',
], [], [], '', 'admin', null, ['admin']],
[Calendar::SUBJECT_ADD, [
'principaluri' => 'principal/user/admin',
'id' => 42,
+ 'uri' => 'this-uri',
'{DAV:}displayname' => 'Name of calendar',
], [], [], 'test2', 'test2', null, ['admin']],
@@ -122,17 +126,20 @@ class BackendTest extends TestCase {
[Calendar::SUBJECT_UPDATE, [
'principaluri' => 'principal/user/admin',
'id' => 42,
+ 'uri' => 'this-uri',
'{DAV:}displayname' => 'Name of calendar',
], ['shares'], [], '', 'admin', null, ['admin']],
// Visible change
[Calendar::SUBJECT_UPDATE, [
'principaluri' => 'principal/user/admin',
'id' => 42,
+ 'uri' => 'this-uri',
'{DAV:}displayname' => 'Name of calendar',
], ['shares'], ['{DAV:}displayname' => 'Name'], '', 'admin', ['user1'], ['user1', 'admin']],
[Calendar::SUBJECT_UPDATE, [
'principaluri' => 'principal/user/admin',
'id' => 42,
+ 'uri' => 'this-uri',
'{DAV:}displayname' => 'Name of calendar',
], ['shares'], ['{DAV:}displayname' => 'Name'], 'test2', 'test2', ['user1'], ['user1', 'admin']],
@@ -141,16 +148,19 @@ class BackendTest extends TestCase {
[Calendar::SUBJECT_DELETE, [
'principaluri' => 'principal/user/admin',
'id' => 42,
+ 'uri' => 'this-uri',
'{DAV:}displayname' => 'Name of calendar',
], ['shares'], [], '', 'admin', [], ['admin']],
[Calendar::SUBJECT_DELETE, [
'principaluri' => 'principal/user/admin',
'id' => 42,
+ 'uri' => 'this-uri',
'{DAV:}displayname' => 'Name of calendar',
], ['shares'], [], '', 'admin', ['user1'], ['user1', 'admin']],
[Calendar::SUBJECT_DELETE, [
'principaluri' => 'principal/user/admin',
'id' => 42,
+ 'uri' => 'this-uri',
'{DAV:}displayname' => 'Name of calendar',
], ['shares'], [], 'test2', 'test2', ['user1'], ['user1', 'admin']],
];
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 85eb439f100..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
@@ -24,6 +26,7 @@ namespace OCA\DAV\Tests\unit\CalDAV\Activity\Provider;
use OCA\DAV\CalDAV\Activity\Provider\Base;
use OCP\Activity\IEvent;
use OCP\Activity\IProvider;
+use OCP\IL10N;
use OCP\IUser;
use OCP\IUserManager;
use Test\TestCase;
@@ -113,22 +116,51 @@ class BaseTest extends TestCase {
public function dataGenerateCalendarParameter() {
return [
+ [['id' => 23, 'uri' => 'foo', 'name' => 'bar'], 'bar'],
+ [['id' => 42, 'uri' => 'foo', 'name' => 'Personal'], 'Personal'],
+ [['id' => 42, 'uri' => 'personal', 'name' => 'bar'], 'bar'],
+ [['id' => 42, 'uri' => 'personal', 'name' => 'Personal'], 't(Personal)'],
+ ];
+ }
+
+ /**
+ * @dataProvider dataGenerateCalendarParameter
+ * @param array $data
+ * @param string $name
+ */
+ public function testGenerateCalendarParameter(array $data, $name) {
+ $l = $this->createMock(IL10N::class);
+ $l->expects($this->any())
+ ->method('t')
+ ->willReturnCallback(function($string, $args) {
+ return 't(' . vsprintf($string, $args) . ')';
+ });
+
+ $this->assertEquals([
+ 'type' => 'calendar',
+ 'id' => $data['id'],
+ 'name' => $name,
+ ], $this->invokePrivate($this->provider, 'generateCalendarParameter', [$data, $l]));
+ }
+
+ public function dataGenerateLegacyCalendarParameter() {
+ return [
[23, 'c1'],
[42, 'c2'],
];
}
/**
- * @dataProvider dataGenerateCalendarParameter
+ * @dataProvider dataGenerateLegacyCalendarParameter
* @param int $id
* @param string $name
*/
- public function testGenerateCalendarParameter($id, $name) {
+ public function testGenerateLegacyCalendarParameter($id, $name) {
$this->assertEquals([
'type' => 'calendar',
'id' => $id,
'name' => $name,
- ], $this->invokePrivate($this->provider, 'generateCalendarParameter', [$id, $name]));
+ ], $this->invokePrivate($this->provider, 'generateLegacyCalendarParameter', [$id, $name]));
}
public function dataGenerateGroupParameter() {
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 fa298282d7e..fae2156a6b4 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
*
@@ -42,7 +43,7 @@ use Sabre\DAVACL\IACL;
*
* @package OCA\DAV\Tests\unit\CalDAV
*/
-class CalDavBackendTest extends AbstractCalDavBackendTest {
+class CalDavBackendTest extends AbstractCalDavBackend {
public function testCalendarOperations() {
@@ -130,6 +131,14 @@ class CalDavBackendTest extends AbstractCalDavBackendTest {
return vsprintf($text, $parameters);
}));
+ $this->userManager->expects($this->any())
+ ->method('userExists')
+ ->willReturn(true);
+
+ $this->groupManager->expects($this->any())
+ ->method('groupExists')
+ ->willReturn(true);
+
$calendarId = $this->createTestCalendar();
$calendars = $this->backend->getCalendarsForUser(self::UNIT_TEST_USER);
$this->assertCount(1, $calendars);
@@ -266,18 +275,49 @@ EOD;
$this->assertCount(0, $calendarObjects);
}
+ /**
+ * @expectedException \Sabre\DAV\Exception\BadRequest
+ * @expectedExceptionMessage Calendar object with uid already exists in this calendar collection.
+ */
+ public function testMultipleCalendarObjectsWithSameUID() {
+ $calendarId = $this->createTestCalendar();
+
+ $calData = <<<'EOD'
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:ownCloud Calendar
+BEGIN:VEVENT
+CREATED;VALUE=DATE-TIME:20130910T125139Z
+UID:47d15e3ec8-1
+LAST-MODIFIED;VALUE=DATE-TIME:20130910T125139Z
+DTSTAMP;VALUE=DATE-TIME:20130910T125139Z
+SUMMARY:Test Event
+DTSTART;VALUE=DATE-TIME:20130912T130000Z
+DTEND;VALUE=DATE-TIME:20130912T140000Z
+CLASS:PUBLIC
+END:VEVENT
+END:VCALENDAR
+EOD;
+
+ $uri0 = static::getUniqueID('event');
+ $uri1 = static::getUniqueID('event');
+ $this->backend->createCalendarObject($calendarId, $uri0, $calData);
+ $this->backend->createCalendarObject($calendarId, $uri1, $calData);
+ }
+
public function testMultiCalendarObjects() {
$calendarId = $this->createTestCalendar();
// create an event
- $calData = <<<'EOD'
+ $calData = [];
+ $calData[] = <<<'EOD'
BEGIN:VCALENDAR
VERSION:2.0
PRODID:ownCloud Calendar
BEGIN:VEVENT
CREATED;VALUE=DATE-TIME:20130910T125139Z
-UID:47d15e3ec8
+UID:47d15e3ec8-1
LAST-MODIFIED;VALUE=DATE-TIME:20130910T125139Z
DTSTAMP;VALUE=DATE-TIME:20130910T125139Z
SUMMARY:Test Event
@@ -287,21 +327,56 @@ CLASS:PUBLIC
END:VEVENT
END:VCALENDAR
EOD;
+
+ $calData[] = <<<'EOD'
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:ownCloud Calendar
+BEGIN:VEVENT
+CREATED;VALUE=DATE-TIME:20130910T125139Z
+UID:47d15e3ec8-2
+LAST-MODIFIED;VALUE=DATE-TIME:20130910T125139Z
+DTSTAMP;VALUE=DATE-TIME:20130910T125139Z
+SUMMARY:Test Event
+DTSTART;VALUE=DATE-TIME:20130912T130000Z
+DTEND;VALUE=DATE-TIME:20130912T140000Z
+CLASS:PUBLIC
+END:VEVENT
+END:VCALENDAR
+EOD;
+
+ $calData[] = <<<'EOD'
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:ownCloud Calendar
+BEGIN:VEVENT
+CREATED;VALUE=DATE-TIME:20130910T125139Z
+UID:47d15e3ec8-3
+LAST-MODIFIED;VALUE=DATE-TIME:20130910T125139Z
+DTSTAMP;VALUE=DATE-TIME:20130910T125139Z
+SUMMARY:Test Event
+DTSTART;VALUE=DATE-TIME:20130912T130000Z
+DTEND;VALUE=DATE-TIME:20130912T140000Z
+CLASS:PUBLIC
+END:VEVENT
+END:VCALENDAR
+EOD;
+
$uri0 = static::getUniqueID('card');
$this->dispatcher->expects($this->at(0))
->method('dispatch')
->with('\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject');
- $this->backend->createCalendarObject($calendarId, $uri0, $calData);
+ $this->backend->createCalendarObject($calendarId, $uri0, $calData[0]);
$uri1 = static::getUniqueID('card');
$this->dispatcher->expects($this->at(0))
->method('dispatch')
->with('\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject');
- $this->backend->createCalendarObject($calendarId, $uri1, $calData);
+ $this->backend->createCalendarObject($calendarId, $uri1, $calData[1]);
$uri2 = static::getUniqueID('card');
$this->dispatcher->expects($this->at(0))
->method('dispatch')
->with('\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject');
- $this->backend->createCalendarObject($calendarId, $uri2, $calData);
+ $this->backend->createCalendarObject($calendarId, $uri2, $calData[2]);
// get all the cards
$calendarObjects = $this->backend->getCalendarObjects($calendarId);
@@ -317,9 +392,15 @@ EOD;
$this->assertArrayHasKey('etag', $card);
$this->assertArrayHasKey('size', $card);
$this->assertArrayHasKey('classification', $card);
- $this->assertEquals($calData, $card['calendardata']);
}
+ usort($calendarObjects, function($a, $b) {
+ return $a['id'] - $b['id'];
+ });
+
+ $this->assertEquals($calData[1], $calendarObjects[0]['calendardata']);
+ $this->assertEquals($calData[2], $calendarObjects[1]['calendardata']);
+
// delete the card
$this->dispatcher->expects($this->at(0))
->method('dispatch')
@@ -362,7 +443,26 @@ EOD;
public function testGetCalendarObjectByUID() {
$calendarId = $this->createTestCalendar();
- $this->createEvent($calendarId, '20130912T130000Z', '20130912T140000Z');
+ $uri = static::getUniqueID('calobj');
+ $calData = <<<'EOD'
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:ownCloud Calendar
+BEGIN:VEVENT
+CREATED;VALUE=DATE-TIME:20130910T125139Z
+UID:47d15e3ec8
+LAST-MODIFIED;VALUE=DATE-TIME:20130910T125139Z
+DTSTAMP;VALUE=DATE-TIME:20130910T125139Z
+SUMMARY:Test Event
+DTSTART;VALUE=DATE-TIME:20130912T130000Z
+DTEND;VALUE=DATE-TIME:20130912T140000Z
+CLASS:PUBLIC
+END:VEVENT
+END:VCALENDAR
+EOD;
+
+
+ $this->backend->createCalendarObject($calendarId, $uri, $calData);
$co = $this->backend->getCalendarObjectByUID(self::UNIT_TEST_USER, '47d15e3ec8');
$this->assertNotNull($co);
diff --git a/apps/dav/tests/unit/CalDAV/CalendarTest.php b/apps/dav/tests/unit/CalDAV/CalendarTest.php
index d9ea25b268c..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
@@ -38,7 +41,7 @@ class CalendarTest extends TestCase {
public function setUp() {
parent::setUp();
- $this->l10n = $this->getMockBuilder('\OCP\IL10N')
+ $this->l10n = $this->getMockBuilder(IL10N::class)
->disableOriginalConstructor()->getMock();
$this->l10n
->expects($this->any())
@@ -381,4 +384,184 @@ EOD;
[2, true]
];
}
+
+ public function testRemoveVAlarms() {
+ $publicObjectData = <<<EOD
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Nextcloud calendar v1.5.6
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+CREATED:20171022T125130
+DTSTAMP:20171022T125130
+LAST-MODIFIED:20171022T125130
+UID:PPL24TH8UGOWE94XET87ER
+SUMMARY:Foo bar blub
+CLASS:PUBLIC
+STATUS:CONFIRMED
+DTSTART;VALUE=DATE:20171024
+DTEND;VALUE=DATE:20171025
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER:-PT15M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+
+EOD;
+
+ $confidentialObjectData = <<<EOD
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Nextcloud calendar v1.5.6
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+CREATED:20171022T125130
+DTSTAMP:20171022T125130
+LAST-MODIFIED:20171022T125130
+UID:PPL24TH8UGOWE94XET87ER
+SUMMARY:Foo bar blub
+CLASS:CONFIDENTIAL
+STATUS:CONFIRMED
+DTSTART;VALUE=DATE:20171024
+DTEND;VALUE=DATE:20171025
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER:-PT15M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+
+EOD;
+
+ $publicObjectDataWithoutVAlarm = <<<EOD
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Nextcloud calendar v1.5.6
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+CREATED:20171022T125130
+DTSTAMP:20171022T125130
+LAST-MODIFIED:20171022T125130
+UID:PPL24TH8UGOWE94XET87ER
+SUMMARY:Foo bar blub
+CLASS:PUBLIC
+STATUS:CONFIRMED
+DTSTART;VALUE=DATE:20171024
+DTEND;VALUE=DATE:20171025
+END:VEVENT
+END:VCALENDAR
+
+EOD;
+
+ $confidentialObjectCleaned = <<<EOD
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Nextcloud calendar v1.5.6
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+CREATED:20171022T125130
+UID:PPL24TH8UGOWE94XET87ER
+SUMMARY:Busy
+CLASS:CONFIDENTIAL
+DTSTART;VALUE=DATE:20171024
+DTEND;VALUE=DATE:20171025
+END:VEVENT
+END:VCALENDAR
+
+EOD;
+
+
+
+ $publicObject = ['uri' => 'event-0',
+ 'classification' => CalDavBackend::CLASSIFICATION_PUBLIC,
+ 'calendardata' => $publicObjectData];
+
+ $confidentialObject = ['uri' => 'event-1',
+ 'classification' => CalDavBackend::CLASSIFICATION_CONFIDENTIAL,
+ 'calendardata' => $confidentialObjectData];
+
+ /** @var \PHPUnit_Framework_MockObject_MockObject | CalDavBackend $backend */
+ $backend = $this->createMock(CalDavBackend::class);
+ $backend->expects($this->any())
+ ->method('getCalendarObjects')
+ ->willReturn([$publicObject, $confidentialObject]);
+
+ $backend->expects($this->any())
+ ->method('getMultipleCalendarObjects')
+ ->with(666, ['event-0', 'event-1'])
+ ->willReturn([$publicObject, $confidentialObject]);
+
+ $backend->expects($this->any())
+ ->method('getCalendarObject')
+ ->will($this->returnCallback(function($cId, $uri) use($publicObject, $confidentialObject) {
+ switch($uri) {
+ case 'event-0':
+ return $publicObject;
+
+ case 'event-1':
+ return $confidentialObject;
+
+ default:
+ throw new \Exception('unexpected uri');
+ }
+ }));
+
+ $backend->expects($this->any())
+ ->method('applyShareAcl')
+ ->willReturnArgument(1);
+
+ $calendarInfoOwner = [
+ '{http://owncloud.org/ns}owner-principal' => 'user1',
+ 'principaluri' => 'user1',
+ 'id' => 666,
+ 'uri' => 'cal',
+ ];
+ $calendarInfoSharedRW = [
+ '{http://owncloud.org/ns}owner-principal' => 'user1',
+ 'principaluri' => 'user2',
+ 'id' => 666,
+ 'uri' => 'cal',
+ ];
+ $calendarInfoSharedRO = [
+ '{http://owncloud.org/ns}owner-principal' => 'user1',
+ '{http://owncloud.org/ns}read-only' => true,
+ 'principaluri' => 'user2',
+ 'id' => 666,
+ 'uri' => 'cal',
+ ];
+
+ $ownerCalendar = new Calendar($backend, $calendarInfoOwner, $this->l10n);
+ $rwCalendar = new Calendar($backend, $calendarInfoSharedRW, $this->l10n);
+ $roCalendar = new Calendar($backend, $calendarInfoSharedRO, $this->l10n);
+
+ $this->assertEquals(count($ownerCalendar->getChildren()), 2);
+ $this->assertEquals(count($rwCalendar->getChildren()), 2);
+ $this->assertEquals(count($roCalendar->getChildren()), 2);
+
+ // calendar data shall not be altered for the owner
+ $this->assertEquals($ownerCalendar->getChild('event-0')->get(), $publicObjectData);
+ $this->assertEquals($ownerCalendar->getChild('event-1')->get(), $confidentialObjectData);
+
+ // valarms shall not be removed for read-write shares
+ $this->assertEquals(
+ $this->fixLinebreak($rwCalendar->getChild('event-0')->get()),
+ $this->fixLinebreak($publicObjectData));
+ $this->assertEquals(
+ $this->fixLinebreak($rwCalendar->getChild('event-1')->get()),
+ $this->fixLinebreak($confidentialObjectCleaned));
+
+ // valarms shall be removed for read-only shares
+ $this->assertEquals(
+ $this->fixLinebreak($roCalendar->getChild('event-0')->get()),
+ $this->fixLinebreak($publicObjectDataWithoutVAlarm));
+ $this->assertEquals(
+ $this->fixLinebreak($roCalendar->getChild('event-1')->get()),
+ $this->fixLinebreak($confidentialObjectCleaned));
+
+ }
+
+ private function fixLinebreak($str) {
+ return preg_replace('~(*BSR_ANYCRLF)\R~', "\r\n", $str);
+ }
}
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 eb9f9cd10d7..82f4161c206 100644
--- a/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php
+++ b/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php
@@ -1,10 +1,36 @@
<?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;
use OCA\DAV\CalDAV\PublicCalendar;
use OCA\DAV\Connector\Sabre\Principal;
+use OCP\IGroupManager;
use OCP\IL10N;
use OCA\DAV\CalDAV\CalDavBackend;
use OCA\DAV\CalDAV\PublicCalendarRoot;
@@ -33,6 +59,8 @@ class PublicCalendarRootTest extends TestCase {
private $principal;
/** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
protected $userManager;
+ /** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */
+ protected $groupManager;
/** @var ISecureRandom */
private $random;
@@ -43,6 +71,7 @@ class PublicCalendarRootTest extends TestCase {
$db = \OC::$server->getDatabaseConnection();
$this->principal = $this->createMock('OCA\DAV\Connector\Sabre\Principal');
$this->userManager = $this->createMock(IUserManager::class);
+ $this->groupManager = $this->createMock(IGroupManager::class);
$this->random = \OC::$server->getSecureRandom();
$dispatcher = $this->createMock(EventDispatcherInterface::class);
@@ -54,13 +83,14 @@ class PublicCalendarRootTest extends TestCase {
$db,
$this->principal,
$this->userManager,
+ $this->groupManager,
$this->random,
$dispatcher
);
$this->publicCalendarRoot = new PublicCalendarRoot($this->backend);
- $this->l10n = $this->getMockBuilder('\OCP\IL10N')
+ $this->l10n = $this->getMockBuilder(IL10N::class)
->disableOriginalConstructor()->getMock();
}
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 69de507dac5..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;
@@ -29,14 +50,14 @@ class PluginTest extends TestCase {
public function setUp() {
parent::setUp();
- $this->config = $this->getMockBuilder('\OCP\IConfig')->
+ $this->config = $this->getMockBuilder(IConfig::class)->
disableOriginalConstructor()->
getMock();
$this->config->expects($this->any())->method('getSystemValue')
->with($this->equalTo('secret'))
->willReturn('mysecret');
- $this->urlGenerator = $this->getMockBuilder('OCP\IURLGenerator')->
+ $this->urlGenerator = $this->getMockBuilder(IURLGenerator::class)->
disableOriginalConstructor()->
getMock();
@@ -46,7 +67,7 @@ class PluginTest extends TestCase {
$root = new SimpleCollection('calendars');
$this->server = new Server($root);
/** @var SimpleCollection $node */
- $this->book = $this->getMockBuilder('OCA\DAV\CalDAV\Calendar')->
+ $this->book = $this->getMockBuilder(Calendar::class)->
disableOriginalConstructor()->
getMock();
$this->book->method('getName')->willReturn('cal1');
diff --git a/apps/dav/tests/unit/CalDAV/Schedule/IMipPluginTest.php b/apps/dav/tests/unit/CalDAV/Schedule/IMipPluginTest.php
index 56eb00406da..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('OC\Mail\Mailer')->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('OC\Log')->disableOriginalConstructor()->getMock();
+ $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('OC\Mail\Mailer')->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('OC\Log')->disableOriginalConstructor()->getMock();
+ $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,33 +134,53 @@ 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('OC\Mail\Mailer')->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 {
$mailer->expects($this->never())->method('send');
}
/** @var ILogger | \PHPUnit_Framework_MockObject_MockObject $logger */
- $logger = $this->getMockBuilder('OC\Log')->disableOriginalConstructor()->getMock();
+ $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 20bac8aa9f5..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/>.
*
*/
@@ -199,7 +201,7 @@ XML;
</nc:calendar-search>
XML;
- $result = $this->parse($xml);
+ $this->parse($xml);
}
/**
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 132fa4796db..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
@@ -33,7 +34,7 @@ class AddressBookTest extends TestCase {
public function testDelete() {
/** @var \PHPUnit_Framework_MockObject_MockObject | CardDavBackend $backend */
- $backend = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend')->disableOriginalConstructor()->getMock();
+ $backend = $this->getMockBuilder(CardDavBackend::class)->disableOriginalConstructor()->getMock();
$backend->expects($this->once())->method('updateShares');
$backend->expects($this->any())->method('getShares')->willReturn([
['href' => 'principal:user2']
@@ -55,7 +56,7 @@ class AddressBookTest extends TestCase {
*/
public function testDeleteFromGroup() {
/** @var \PHPUnit_Framework_MockObject_MockObject | CardDavBackend $backend */
- $backend = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend')->disableOriginalConstructor()->getMock();
+ $backend = $this->getMockBuilder(CardDavBackend::class)->disableOriginalConstructor()->getMock();
$backend->expects($this->never())->method('updateShares');
$backend->expects($this->any())->method('getShares')->willReturn([
['href' => 'principal:group2']
@@ -77,7 +78,7 @@ class AddressBookTest extends TestCase {
*/
public function testPropPatch() {
/** @var \PHPUnit_Framework_MockObject_MockObject | CardDavBackend $backend */
- $backend = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend')->disableOriginalConstructor()->getMock();
+ $backend = $this->getMockBuilder(CardDavBackend::class)->disableOriginalConstructor()->getMock();
$calendarInfo = [
'{http://owncloud.org/ns}owner-principal' => 'user1',
'{DAV:}displayname' => 'Test address book',
@@ -95,7 +96,7 @@ class AddressBookTest extends TestCase {
*/
public function testAcl($expectsWrite, $readOnlyValue, $hasOwnerSet) {
/** @var \PHPUnit_Framework_MockObject_MockObject | CardDavBackend $backend */
- $backend = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend')->disableOriginalConstructor()->getMock();
+ $backend = $this->getMockBuilder(CardDavBackend::class)->disableOriginalConstructor()->getMock();
$backend->expects($this->any())->method('applyShareAcl')->willReturnArgument(1);
$calendarInfo = [
'{DAV:}displayname' => 'Test address book',
diff --git a/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php b/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php
index 8ca7e8a33b1..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
@@ -33,6 +37,7 @@ use OCA\DAV\CardDAV\CardDavBackend;
use OCA\DAV\Connector\Sabre\Principal;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IDBConnection;
+use OCP\IGroupManager;
use OCP\IL10N;
use OCP\IUserManager;
use Sabre\DAV\PropPatch;
@@ -60,6 +65,9 @@ class CardDavBackendTest extends TestCase {
/** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
private $userManager;
+ /** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */
+ private $groupManager;
+
/** @var EventDispatcherInterface|\PHPUnit_Framework_MockObject_MockObject */
private $dispatcher;
@@ -80,7 +88,8 @@ class CardDavBackendTest extends TestCase {
parent::setUp();
$this->userManager = $this->createMock(IUserManager::class);
- $this->principal = $this->getMockBuilder('OCA\DAV\Connector\Sabre\Principal')
+ $this->groupManager = $this->createMock(IGroupManager::class);
+ $this->principal = $this->getMockBuilder(Principal::class)
->disableOriginalConstructor()
->setMethods(['getPrincipalByPath', 'getGroupMembership'])
->getMock();
@@ -96,7 +105,7 @@ class CardDavBackendTest extends TestCase {
$this->db = \OC::$server->getDatabaseConnection();
- $this->backend = new CardDavBackend($this->db, $this->principal, $this->userManager, $this->dispatcher);
+ $this->backend = new CardDavBackend($this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher);
// start every test with a empty cards_properties and cards table
$query = $this->db->getQueryBuilder();
$query->delete('cards_properties')->execute();
@@ -154,6 +163,14 @@ class CardDavBackendTest extends TestCase {
public function testAddressBookSharing() {
+ $this->userManager->expects($this->any())
+ ->method('userExists')
+ ->willReturn(true);
+
+ $this->groupManager->expects($this->any())
+ ->method('groupExists')
+ ->willReturn(true);
+
$this->backend->createAddressBook(self::UNIT_TEST_USER, 'Example', []);
$books = $this->backend->getAddressBooksForUser(self::UNIT_TEST_USER);
$this->assertEquals(1, count($books));
@@ -180,7 +197,7 @@ class CardDavBackendTest extends TestCase {
/** @var CardDavBackend | \PHPUnit_Framework_MockObject_MockObject $backend */
$backend = $this->getMockBuilder(CardDavBackend::class)
- ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->dispatcher])
+ ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher])
->setMethods(['updateProperties', 'purgeProperties'])->getMock();
// create a new address book
@@ -253,7 +270,7 @@ class CardDavBackendTest extends TestCase {
public function testMultiCard() {
$this->backend = $this->getMockBuilder(CardDavBackend::class)
- ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->dispatcher])
+ ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher])
->setMethods(['updateProperties'])->getMock();
// create a new address book
@@ -299,7 +316,7 @@ class CardDavBackendTest extends TestCase {
public function testDeleteWithoutCard() {
$this->backend = $this->getMockBuilder(CardDavBackend::class)
- ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->dispatcher])
+ ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher])
->setMethods([
'getCardId',
'addChange',
@@ -339,7 +356,7 @@ class CardDavBackendTest extends TestCase {
public function testSyncSupport() {
$this->backend = $this->getMockBuilder(CardDavBackend::class)
- ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->dispatcher])
+ ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher])
->setMethods(['updateProperties'])->getMock();
// create a new address book
@@ -362,32 +379,41 @@ class CardDavBackendTest extends TestCase {
}
public function testSharing() {
+
+ $this->userManager->expects($this->any())
+ ->method('userExists')
+ ->willReturn(true);
+
+ $this->groupManager->expects($this->any())
+ ->method('groupExists')
+ ->willReturn(true);
+
$this->backend->createAddressBook(self::UNIT_TEST_USER, 'Example', []);
$books = $this->backend->getAddressBooksForUser(self::UNIT_TEST_USER);
$this->assertEquals(1, count($books));
$l = $this->createMock(IL10N::class);
$exampleBook = new AddressBook($this->backend, $books[0], $l);
- $this->backend->updateShares($exampleBook, [['href' => 'principal:principals/best-friend']], []);
+ $this->backend->updateShares($exampleBook, [['href' => 'principal:' . self::UNIT_TEST_USER1]], []);
$shares = $this->backend->getShares($exampleBook->getResourceId());
$this->assertEquals(1, count($shares));
// adding the same sharee again has no effect
- $this->backend->updateShares($exampleBook, [['href' => 'principal:principals/best-friend']], []);
+ $this->backend->updateShares($exampleBook, [['href' => 'principal:' . self::UNIT_TEST_USER1]], []);
$shares = $this->backend->getShares($exampleBook->getResourceId());
$this->assertEquals(1, count($shares));
- $books = $this->backend->getAddressBooksForUser('principals/best-friend');
+ $books = $this->backend->getAddressBooksForUser(self::UNIT_TEST_USER1);
$this->assertEquals(1, count($books));
- $this->backend->updateShares($exampleBook, [], ['principal:principals/best-friend']);
+ $this->backend->updateShares($exampleBook, [], ['principal:' . self::UNIT_TEST_USER1]);
$shares = $this->backend->getShares($exampleBook->getResourceId());
$this->assertEquals(0, count($shares));
- $books = $this->backend->getAddressBooksForUser('principals/best-friend');
+ $books = $this->backend->getAddressBooksForUser(self::UNIT_TEST_USER1);
$this->assertEquals(0, count($books));
}
@@ -398,7 +424,7 @@ class CardDavBackendTest extends TestCase {
$cardId = 2;
$backend = $this->getMockBuilder(CardDavBackend::class)
- ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->dispatcher])
+ ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher])
->setMethods(['getCardId'])->getMock();
$backend->expects($this->any())->method('getCardId')->willReturn($cardId);
diff --git a/apps/dav/tests/unit/CardDAV/ContactsManagerTest.php b/apps/dav/tests/unit/CardDAV/ContactsManagerTest.php
index a6f0384cc38..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
@@ -28,16 +29,17 @@ use OCA\DAV\CardDAV\CardDavBackend;
use OCA\DAV\CardDAV\ContactsManager;
use OCP\Contacts\IManager;
use OCP\IL10N;
+use OCP\IURLGenerator;
use Test\TestCase;
class ContactsManagerTest extends TestCase {
public function test() {
/** @var IManager | \PHPUnit_Framework_MockObject_MockObject $cm */
- $cm = $this->getMockBuilder('OCP\Contacts\IManager')->disableOriginalConstructor()->getMock();
+ $cm = $this->getMockBuilder(IManager::class)->disableOriginalConstructor()->getMock();
$cm->expects($this->exactly(2))->method('registerAddressBook');
- $urlGenerator = $this->getMockBuilder('OCP\IUrlGenerator')->disableOriginalConstructor()->getMock();
+ $urlGenerator = $this->getMockBuilder(IURLGenerator::class)->disableOriginalConstructor()->getMock();
/** @var CardDavBackend | \PHPUnit_Framework_MockObject_MockObject $backEnd */
- $backEnd = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend')->disableOriginalConstructor()->getMock();
+ $backEnd = $this->getMockBuilder(CardDavBackend::class)->disableOriginalConstructor()->getMock();
$backEnd->method('getAddressBooksForUser')->willReturn([
['{DAV:}displayname' => 'Test address book', 'uri' => 'default'],
]);
diff --git a/apps/dav/tests/unit/CardDAV/ConverterTest.php b/apps/dav/tests/unit/CardDAV/ConverterTest.php
index 39853cfd5c8..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>
*
@@ -46,15 +48,15 @@ class ConverterTest extends TestCase {
public function setUp() {
parent::setUp();
- $this->databaseConnection = $this->getMockBuilder('OCP\IDBConnection')->getMock();
- $this->eventDispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcher')
+ $this->databaseConnection = $this->getMockBuilder(IDBConnection::class)->getMock();
+ $this->eventDispatcher = $this->getMockBuilder(EventDispatcher::class)
->disableOriginalConstructor()->getMock();
- $this->accountManager = $this->getMockBuilder('OC\Accounts\AccountManager')
+ $this->accountManager = $this->getMockBuilder(AccountManager::class)
->disableOriginalConstructor()->getMock();
}
public function getAccountManager(IUser $user) {
- $accountManager = $this->getMockBuilder('OC\Accounts\AccountManager')
+ $accountManager = $this->getMockBuilder(AccountManager::class)
->disableOriginalConstructor()->getMock();
$accountManager->expects($this->any())->method('getUser')->willReturn(
[
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 00049075865..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
@@ -47,17 +48,17 @@ class PluginTest extends TestCase {
parent::setUp();
/** @var Auth | \PHPUnit_Framework_MockObject_MockObject $authBackend */
- $authBackend = $this->getMockBuilder('OCA\DAV\Connector\Sabre\Auth')->disableOriginalConstructor()->getMock();
+ $authBackend = $this->getMockBuilder(Auth::class)->disableOriginalConstructor()->getMock();
$authBackend->method('isDavAuthenticated')->willReturn(true);
/** @var IRequest $request */
- $request = $this->getMockBuilder('OCP\IRequest')->disableOriginalConstructor()->getMock();
+ $request = $this->getMockBuilder(IRequest::class)->disableOriginalConstructor()->getMock();
$this->plugin = new Plugin($authBackend, $request);
$root = new SimpleCollection('root');
$this->server = new \Sabre\DAV\Server($root);
/** @var SimpleCollection $node */
- $this->book = $this->getMockBuilder('OCA\DAV\DAV\Sharing\IShareable')->disableOriginalConstructor()->getMock();
+ $this->book = $this->getMockBuilder(IShareable::class)->disableOriginalConstructor()->getMock();
$this->book->method('getName')->willReturn('addressbook1.vcf');
$root->addChild($this->book);
$this->plugin->initialize($this->server);
diff --git a/apps/dav/tests/unit/CardDAV/SyncServiceTest.php b/apps/dav/tests/unit/CardDAV/SyncServiceTest.php
index 32f8a2424b1..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>
*
@@ -28,6 +29,7 @@ namespace OCA\DAV\Tests\unit\CardDAV;
use OC\Accounts\AccountManager;
use OCA\DAV\CardDAV\CardDavBackend;
use OCA\DAV\CardDAV\SyncService;
+use OCP\ILogger;
use OCP\IUser;
use OCP\IUserManager;
use Test\TestCase;
@@ -75,17 +77,17 @@ class SyncServiceTest extends TestCase {
$backend->expects($this->at(1))->method('getAddressBooksByUri')->willReturn([]);
/** @var IUserManager $userManager */
- $userManager = $this->getMockBuilder('OCP\IUserManager')->disableOriginalConstructor()->getMock();
- $logger = $this->getMockBuilder('OCP\ILogger')->disableOriginalConstructor()->getMock();
- $accountManager = $this->getMockBuilder('OC\Accounts\AccountManager')->disableOriginalConstructor()->getMock();
+ $userManager = $this->getMockBuilder(IUserManager::class)->disableOriginalConstructor()->getMock();
+ $logger = $this->getMockBuilder(ILogger::class)->disableOriginalConstructor()->getMock();
+ $accountManager = $this->getMockBuilder(AccountManager::class)->disableOriginalConstructor()->getMock();
$ss = new SyncService($backend, $userManager, $logger, $accountManager);
- $book = $ss->ensureSystemAddressBookExists('principals/users/adam', 'contacts', []);
+ $ss->ensureSystemAddressBookExists('principals/users/adam', 'contacts', []);
}
public function testUpdateAndDeleteUser() {
/** @var CardDavBackend | \PHPUnit_Framework_MockObject_MockObject $backend */
$backend = $this->getMockBuilder(CardDavBackend::class)->disableOriginalConstructor()->getMock();
- $logger = $this->getMockBuilder('OCP\ILogger')->disableOriginalConstructor()->getMock();
+ $logger = $this->getMockBuilder(ILogger::class)->disableOriginalConstructor()->getMock();
$backend->expects($this->once())->method('createCard');
$backend->expects($this->once())->method('updateCard');
@@ -96,15 +98,15 @@ class SyncServiceTest extends TestCase {
]);
/** @var IUserManager | \PHPUnit_Framework_MockObject_MockObject $userManager */
- $userManager = $this->getMockBuilder('OCP\IUserManager')->disableOriginalConstructor()->getMock();
+ $userManager = $this->getMockBuilder(IUserManager::class)->disableOriginalConstructor()->getMock();
/** @var IUser | \PHPUnit_Framework_MockObject_MockObject $user */
- $user = $this->getMockBuilder('OCP\IUser')->disableOriginalConstructor()->getMock();
+ $user = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$user->method('getBackendClassName')->willReturn('unittest');
$user->method('getUID')->willReturn('test-user');
$user->method('getCloudId')->willReturn('cloudId');
$user->method('getDisplayName')->willReturn('test-user');
- $accountManager = $this->getMockBuilder('OC\Accounts\AccountManager')->disableOriginalConstructor()->getMock();
+ $accountManager = $this->getMockBuilder(AccountManager::class)->disableOriginalConstructor()->getMock();
$accountManager->expects($this->any())->method('getUser')
->willReturn([
AccountManager::PROPERTY_DISPLAYNAME =>
@@ -174,9 +176,9 @@ class SyncServiceTest extends TestCase {
* @return SyncService|\PHPUnit_Framework_MockObject_MockObject
*/
private function getSyncServiceMock($backend, $response) {
- $userManager = $this->getMockBuilder('OCP\IUserManager')->disableOriginalConstructor()->getMock();
- $logger = $this->getMockBuilder('OCP\ILogger')->disableOriginalConstructor()->getMock();
- $accountManager = $this->getMockBuilder('OC\Accounts\AccountManager')->disableOriginalConstructor()->getMock();
+ $userManager = $this->getMockBuilder(IUserManager::class)->disableOriginalConstructor()->getMock();
+ $logger = $this->getMockBuilder(ILogger::class)->disableOriginalConstructor()->getMock();
+ $accountManager = $this->getMockBuilder(AccountManager::class)->disableOriginalConstructor()->getMock();
/** @var SyncService | \PHPUnit_Framework_MockObject_MockObject $ss */
$ss = $this->getMockBuilder(SyncService::class)
->setMethods(['ensureSystemAddressBookExists', 'requestSyncReport', 'download', 'getCertPath'])
diff --git a/apps/dav/tests/unit/Comments/CommentsNodeTest.php b/apps/dav/tests/unit/Comments/CommentsNodeTest.php
index 226aa57598c..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>
*
@@ -26,8 +27,14 @@
namespace OCA\DAV\Tests\unit\Comments;
use OCA\DAV\Comments\CommentNode;
+use OCP\Comments\IComment;
use OCP\Comments\ICommentsManager;
use OCP\Comments\MessageTooLongException;
+use OCP\ILogger;
+use OCP\IUser;
+use OCP\IUserManager;
+use OCP\IUserSession;
+use Sabre\DAV\PropPatch;
class CommentsNodeTest extends \Test\TestCase {
@@ -43,19 +50,19 @@ class CommentsNodeTest extends \Test\TestCase {
public function setUp() {
parent::setUp();
- $this->commentsManager = $this->getMockBuilder('\OCP\Comments\ICommentsManager')
+ $this->commentsManager = $this->getMockBuilder(ICommentsManager::class)
->disableOriginalConstructor()
->getMock();
- $this->comment = $this->getMockBuilder('\OCP\Comments\IComment')
+ $this->comment = $this->getMockBuilder(IComment::class)
->disableOriginalConstructor()
->getMock();
- $this->userManager = $this->getMockBuilder('\OCP\IUserManager')
+ $this->userManager = $this->getMockBuilder(IUserManager::class)
->disableOriginalConstructor()
->getMock();
- $this->userSession = $this->getMockBuilder('\OCP\IUserSession')
+ $this->userSession = $this->getMockBuilder(IUserSession::class)
->disableOriginalConstructor()
->getMock();
- $this->logger = $this->getMockBuilder('\OCP\ILogger')
+ $this->logger = $this->getMockBuilder(ILogger::class)
->disableOriginalConstructor()
->getMock();
@@ -69,7 +76,7 @@ class CommentsNodeTest extends \Test\TestCase {
}
public function testDelete() {
- $user = $this->getMockBuilder('\OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -104,7 +111,7 @@ class CommentsNodeTest extends \Test\TestCase {
* @expectedException \Sabre\DAV\Exception\Forbidden
*/
public function testDeleteForbidden() {
- $user = $this->getMockBuilder('\OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -156,7 +163,7 @@ class CommentsNodeTest extends \Test\TestCase {
public function testUpdateComment() {
$msg = 'Hello Earth';
- $user = $this->getMockBuilder('\OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -188,13 +195,13 @@ class CommentsNodeTest extends \Test\TestCase {
}
/**
- * @expectedException Exception
+ * @expectedException \Exception
* @expectedExceptionMessage buh!
*/
public function testUpdateCommentLogException() {
$msg = null;
- $user = $this->getMockBuilder('\OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -233,7 +240,7 @@ class CommentsNodeTest extends \Test\TestCase {
* @expectedExceptionMessage Message exceeds allowed character limit of
*/
public function testUpdateCommentMessageTooLongException() {
- $user = $this->getMockBuilder('\OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -273,7 +280,7 @@ class CommentsNodeTest extends \Test\TestCase {
public function testUpdateForbiddenByUser() {
$msg = 'HaXX0r';
- $user = $this->getMockBuilder('\OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -308,7 +315,7 @@ class CommentsNodeTest extends \Test\TestCase {
public function testUpdateForbiddenByType() {
$msg = 'HaXX0r';
- $user = $this->getMockBuilder('\OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -356,7 +363,7 @@ class CommentsNodeTest extends \Test\TestCase {
}
public function testPropPatch() {
- $propPatch = $this->getMockBuilder('Sabre\DAV\PropPatch')
+ $propPatch = $this->getMockBuilder(PropPatch::class)
->disableOriginalConstructor()
->getMock();
@@ -461,7 +468,7 @@ class CommentsNodeTest extends \Test\TestCase {
->method('getObjectId')
->will($this->returnValue($expected[$ns . 'objectId']));
- $user = $this->getMockBuilder('\OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$user->expects($this->once())
@@ -515,7 +522,7 @@ class CommentsNodeTest extends \Test\TestCase {
$this->userSession->expects($this->once())
->method('getUser')
->will($this->returnValue(
- $this->getMockBuilder('\OCP\IUser')
+ $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock()
));
diff --git a/apps/dav/tests/unit/Comments/CommentsPluginTest.php b/apps/dav/tests/unit/Comments/CommentsPluginTest.php
index 265afad96c3..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>
*
@@ -27,19 +28,27 @@ namespace OCA\DAV\Tests\unit\Comments;
use OC\Comments\Comment;
use OCA\DAV\Comments\CommentsPlugin as CommentsPluginImplementation;
+use OCA\DAV\Comments\EntityCollection;
use OCP\Comments\IComment;
+use OCP\Comments\ICommentsManager;
+use OCP\IUser;
+use OCP\IUserSession;
+use Sabre\DAV\INode;
+use Sabre\DAV\Tree;
+use Sabre\HTTP\RequestInterface;
+use Sabre\HTTP\ResponseInterface;
class CommentsPluginTest extends \Test\TestCase {
/** @var \Sabre\DAV\Server */
private $server;
- /** @var \Sabre\DAV\Tree */
+ /** @var Tree */
private $tree;
- /** @var \OCP\Comments\ICommentsManager */
+ /** @var ICommentsManager */
private $commentsManager;
- /** @var \OCP\IUserSession */
+ /** @var IUserSession */
private $userSession;
/** @var CommentsPluginImplementation */
@@ -47,7 +56,7 @@ class CommentsPluginTest extends \Test\TestCase {
public function setUp() {
parent::setUp();
- $this->tree = $this->getMockBuilder('\Sabre\DAV\Tree')
+ $this->tree = $this->getMockBuilder(Tree::class)
->disableOriginalConstructor()
->getMock();
@@ -56,10 +65,10 @@ class CommentsPluginTest extends \Test\TestCase {
->setMethods(['getRequestUri'])
->getMock();
- $this->commentsManager = $this->getMockBuilder('\OCP\Comments\ICommentsManager')
+ $this->commentsManager = $this->getMockBuilder(ICommentsManager::class)
->disableOriginalConstructor()
->getMock();
- $this->userSession = $this->getMockBuilder('\OCP\IUserSession')
+ $this->userSession = $this->getMockBuilder(IUserSession::class)
->disableOriginalConstructor()
->getMock();
@@ -85,14 +94,14 @@ class CommentsPluginTest extends \Test\TestCase {
$requestData = json_encode($commentData);
- $user = $this->getMockBuilder('OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$user->expects($this->once())
->method('getUID')
->will($this->returnValue('alice'));
- $node = $this->getMockBuilder('\OCA\DAV\Comments\EntityCollection')
+ $node = $this->getMockBuilder(EntityCollection::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->once())
@@ -124,11 +133,11 @@ class CommentsPluginTest extends \Test\TestCase {
->with('/' . $path)
->will($this->returnValue($node));
- $request = $this->getMockBuilder('Sabre\HTTP\RequestInterface')
+ $request = $this->getMockBuilder(RequestInterface::class)
->disableOriginalConstructor()
->getMock();
- $response = $this->getMockBuilder('Sabre\HTTP\ResponseInterface')
+ $response = $this->getMockBuilder(ResponseInterface::class)
->disableOriginalConstructor()
->getMock();
@@ -181,13 +190,13 @@ class CommentsPluginTest extends \Test\TestCase {
$path = 'comments/files/666';
- $user = $this->getMockBuilder('OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$user->expects($this->never())
->method('getUID');
- $node = $this->getMockBuilder('\OCA\DAV\Comments\EntityCollection')
+ $node = $this->getMockBuilder(EntityCollection::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->never())
@@ -210,11 +219,11 @@ class CommentsPluginTest extends \Test\TestCase {
->with('/' . $path)
->will($this->throwException(new \Sabre\DAV\Exception\NotFound()));
- $request = $this->getMockBuilder('Sabre\HTTP\RequestInterface')
+ $request = $this->getMockBuilder(RequestInterface::class)
->disableOriginalConstructor()
->getMock();
- $response = $this->getMockBuilder('Sabre\HTTP\ResponseInterface')
+ $response = $this->getMockBuilder(ResponseInterface::class)
->disableOriginalConstructor()
->getMock();
@@ -265,13 +274,13 @@ class CommentsPluginTest extends \Test\TestCase {
$requestData = json_encode($commentData);
- $user = $this->getMockBuilder('OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$user->expects($this->never())
->method('getUID');
- $node = $this->getMockBuilder('\OCA\DAV\Comments\EntityCollection')
+ $node = $this->getMockBuilder(EntityCollection::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->once())
@@ -296,11 +305,11 @@ class CommentsPluginTest extends \Test\TestCase {
->with('/' . $path)
->will($this->returnValue($node));
- $request = $this->getMockBuilder('Sabre\HTTP\RequestInterface')
+ $request = $this->getMockBuilder(RequestInterface::class)
->disableOriginalConstructor()
->getMock();
- $response = $this->getMockBuilder('Sabre\HTTP\ResponseInterface')
+ $response = $this->getMockBuilder(ResponseInterface::class)
->disableOriginalConstructor()
->getMock();
@@ -353,13 +362,13 @@ class CommentsPluginTest extends \Test\TestCase {
$requestData = json_encode($commentData);
- $user = $this->getMockBuilder('OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$user->expects($this->never())
->method('getUID');
- $node = $this->getMockBuilder('\OCA\DAV\Comments\EntityCollection')
+ $node = $this->getMockBuilder(EntityCollection::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->once())
@@ -384,11 +393,11 @@ class CommentsPluginTest extends \Test\TestCase {
->with('/' . $path)
->will($this->returnValue($node));
- $request = $this->getMockBuilder('Sabre\HTTP\RequestInterface')
+ $request = $this->getMockBuilder(RequestInterface::class)
->disableOriginalConstructor()
->getMock();
- $response = $this->getMockBuilder('Sabre\HTTP\ResponseInterface')
+ $response = $this->getMockBuilder(ResponseInterface::class)
->disableOriginalConstructor()
->getMock();
@@ -443,14 +452,14 @@ class CommentsPluginTest extends \Test\TestCase {
$requestData = json_encode($commentData);
- $user = $this->getMockBuilder('OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$user->expects($this->once())
->method('getUID')
->will($this->returnValue('alice'));
- $node = $this->getMockBuilder('\OCA\DAV\Comments\EntityCollection')
+ $node = $this->getMockBuilder(EntityCollection::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->once())
@@ -478,11 +487,11 @@ class CommentsPluginTest extends \Test\TestCase {
->with('/' . $path)
->will($this->returnValue($node));
- $request = $this->getMockBuilder('Sabre\HTTP\RequestInterface')
+ $request = $this->getMockBuilder(RequestInterface::class)
->disableOriginalConstructor()
->getMock();
- $response = $this->getMockBuilder('Sabre\HTTP\ResponseInterface')
+ $response = $this->getMockBuilder(ResponseInterface::class)
->disableOriginalConstructor()
->getMock();
@@ -537,14 +546,14 @@ class CommentsPluginTest extends \Test\TestCase {
$requestData = json_encode($commentData);
- $user = $this->getMockBuilder('OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$user->expects($this->once())
->method('getUID')
->will($this->returnValue('alice'));
- $node = $this->getMockBuilder('\OCA\DAV\Comments\EntityCollection')
+ $node = $this->getMockBuilder(EntityCollection::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->once())
@@ -575,11 +584,11 @@ class CommentsPluginTest extends \Test\TestCase {
->with('/' . $path)
->will($this->returnValue($node));
- $request = $this->getMockBuilder('Sabre\HTTP\RequestInterface')
+ $request = $this->getMockBuilder(RequestInterface::class)
->disableOriginalConstructor()
->getMock();
- $response = $this->getMockBuilder('Sabre\HTTP\ResponseInterface')
+ $response = $this->getMockBuilder(ResponseInterface::class)
->disableOriginalConstructor()
->getMock();
@@ -617,7 +626,7 @@ class CommentsPluginTest extends \Test\TestCase {
->method('getNodeForPath')
->with('/' . $path)
->will($this->returnValue(
- $this->getMockBuilder('\Sabre\DAV\INode')
+ $this->getMockBuilder(INode::class)
->disableOriginalConstructor()
->getMock()
));
@@ -640,7 +649,7 @@ class CommentsPluginTest extends \Test\TestCase {
->method('getNodeForPath')
->with('/' . $path)
->will($this->returnValue(
- $this->getMockBuilder('\Sabre\DAV\INode')
+ $this->getMockBuilder(INode::class)
->disableOriginalConstructor()
->getMock()
));
@@ -671,7 +680,7 @@ class CommentsPluginTest extends \Test\TestCase {
]
];
- $node = $this->getMockBuilder('\OCA\DAV\Comments\EntityCollection')
+ $node = $this->getMockBuilder(EntityCollection::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->once())
@@ -679,7 +688,7 @@ class CommentsPluginTest extends \Test\TestCase {
->with(5, 10, null)
->will($this->returnValue([]));
- $response = $this->getMockBuilder('Sabre\HTTP\ResponseInterface')
+ $response = $this->getMockBuilder(ResponseInterface::class)
->disableOriginalConstructor()
->getMock();
@@ -726,7 +735,7 @@ class CommentsPluginTest extends \Test\TestCase {
]
];
- $node = $this->getMockBuilder('\OCA\DAV\Comments\EntityCollection')
+ $node = $this->getMockBuilder(EntityCollection::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->once())
@@ -734,7 +743,7 @@ class CommentsPluginTest extends \Test\TestCase {
->with(5, 10, new \DateTime($parameters[2]['value']))
->will($this->returnValue([]));
- $response = $this->getMockBuilder('Sabre\HTTP\ResponseInterface')
+ $response = $this->getMockBuilder(ResponseInterface::class)
->disableOriginalConstructor()
->getMock();
diff --git a/apps/dav/tests/unit/Comments/EntityCollectionTest.php b/apps/dav/tests/unit/Comments/EntityCollectionTest.php
index c4e343d49d4..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
@@ -24,32 +25,39 @@
namespace OCA\DAV\Tests\unit\Comments;
+use OCA\DAV\Comments\EntityCollection;
+use OCP\Comments\IComment;
+use OCP\Comments\ICommentsManager;
+use OCP\ILogger;
+use OCP\IUserManager;
+use OCP\IUserSession;
+
class EntityCollectionTest extends \Test\TestCase {
/** @var \OCP\Comments\ICommentsManager|\PHPUnit_Framework_MockObject_MockObject */
protected $commentsManager;
- /** @var \OCP\IUserManager|\PHPUnit_Framework_MockObject_MockObject */
+ /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
protected $userManager;
- /** @var \OCP\ILogger|\PHPUnit_Framework_MockObject_MockObject */
+ /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */
protected $logger;
- /** @var \OCA\DAV\Comments\EntityCollection */
+ /** @var EntityCollection */
protected $collection;
- /** @var \OCP\IUserSession|\PHPUnit_Framework_MockObject_MockObject */
+ /** @var IUserSession|\PHPUnit_Framework_MockObject_MockObject */
protected $userSession;
public function setUp() {
parent::setUp();
- $this->commentsManager = $this->getMockBuilder('\OCP\Comments\ICommentsManager')
+ $this->commentsManager = $this->getMockBuilder(ICommentsManager::class)
->disableOriginalConstructor()
->getMock();
- $this->userManager = $this->getMockBuilder('\OCP\IUserManager')
+ $this->userManager = $this->getMockBuilder(IUserManager::class)
->disableOriginalConstructor()
->getMock();
- $this->userSession = $this->getMockBuilder('\OCP\IUserSession')
+ $this->userSession = $this->getMockBuilder(IUserSession::class)
->disableOriginalConstructor()
->getMock();
- $this->logger = $this->getMockBuilder('\OCP\ILogger')
+ $this->logger = $this->getMockBuilder(ILogger::class)
->disableOriginalConstructor()
->getMock();
@@ -72,7 +80,7 @@ class EntityCollectionTest extends \Test\TestCase {
->method('get')
->with('55')
->will($this->returnValue(
- $this->getMockBuilder('\OCP\Comments\IComment')
+ $this->getMockBuilder(IComment::class)
->disableOriginalConstructor()
->getMock()
));
@@ -98,7 +106,7 @@ class EntityCollectionTest extends \Test\TestCase {
->method('getForObject')
->with('files', '19')
->will($this->returnValue([
- $this->getMockBuilder('\OCP\Comments\IComment')
+ $this->getMockBuilder(IComment::class)
->disableOriginalConstructor()
->getMock()
]));
@@ -115,7 +123,7 @@ class EntityCollectionTest extends \Test\TestCase {
->method('getForObject')
->with('files', '19', 5, 15, $dt)
->will($this->returnValue([
- $this->getMockBuilder('\OCP\Comments\IComment')
+ $this->getMockBuilder(IComment::class)
->disableOriginalConstructor()
->getMock()
]));
diff --git a/apps/dav/tests/unit/Comments/EntityTypeCollectionTest.php b/apps/dav/tests/unit/Comments/EntityTypeCollectionTest.php
index 17c4f70fa7f..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
@@ -25,10 +26,14 @@
namespace OCA\DAV\Tests\unit\Comments;
use OCA\DAV\Comments\EntityCollection as EntityCollectionImplemantation;
+use OCP\Comments\ICommentsManager;
+use OCP\ILogger;
+use OCP\IUserManager;
+use OCP\IUserSession;
class EntityTypeCollectionTest extends \Test\TestCase {
- /** @var \OCP\Comments\ICommentsManager|\PHPUnit_Framework_MockObject_MockObject */
+ /** @var ICommentsManager|\PHPUnit_Framework_MockObject_MockObject */
protected $commentsManager;
/** @var \OCP\IUserManager|\PHPUnit_Framework_MockObject_MockObject */
protected $userManager;
@@ -36,7 +41,7 @@ class EntityTypeCollectionTest extends \Test\TestCase {
protected $logger;
/** @var \OCA\DAV\Comments\EntityTypeCollection */
protected $collection;
- /** @var \OCP\IUserSession|\PHPUnit_Framework_MockObject_MockObject */
+ /** @var IUserSession|\PHPUnit_Framework_MockObject_MockObject */
protected $userSession;
protected $childMap = [];
@@ -44,16 +49,16 @@ class EntityTypeCollectionTest extends \Test\TestCase {
public function setUp() {
parent::setUp();
- $this->commentsManager = $this->getMockBuilder('\OCP\Comments\ICommentsManager')
+ $this->commentsManager = $this->getMockBuilder(ICommentsManager::class)
->disableOriginalConstructor()
->getMock();
- $this->userManager = $this->getMockBuilder('\OCP\IUserManager')
+ $this->userManager = $this->getMockBuilder(IUserManager::class)
->disableOriginalConstructor()
->getMock();
- $this->userSession = $this->getMockBuilder('\OCP\IUserSession')
+ $this->userSession = $this->getMockBuilder(IUserSession::class)
->disableOriginalConstructor()
->getMock();
- $this->logger = $this->getMockBuilder('\OCP\ILogger')
+ $this->logger = $this->getMockBuilder(ILogger::class)
->disableOriginalConstructor()
->getMock();
diff --git a/apps/dav/tests/unit/Comments/RootCollectionTest.php b/apps/dav/tests/unit/Comments/RootCollectionTest.php
index 95afc42a912..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
@@ -26,6 +27,11 @@ namespace OCA\DAV\Tests\unit\Comments;
use OCA\DAV\Comments\EntityTypeCollection as EntityTypeCollectionImplementation;
use OCP\Comments\CommentsEntityEvent;
+use OCP\Comments\ICommentsManager;
+use OCP\ILogger;
+use OCP\IUser;
+use OCP\IUserManager;
+use OCP\IUserSession;
use Symfony\Component\EventDispatcher\EventDispatcher;
class RootCollectionTest extends \Test\TestCase {
@@ -48,21 +54,21 @@ class RootCollectionTest extends \Test\TestCase {
public function setUp() {
parent::setUp();
- $this->user = $this->getMockBuilder('\OCP\IUser')
+ $this->user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
- $this->commentsManager = $this->getMockBuilder('\OCP\Comments\ICommentsManager')
+ $this->commentsManager = $this->getMockBuilder(ICommentsManager::class)
->disableOriginalConstructor()
->getMock();
- $this->userManager = $this->getMockBuilder('\OCP\IUserManager')
+ $this->userManager = $this->getMockBuilder(IUserManager::class)
->disableOriginalConstructor()
->getMock();
- $this->userSession = $this->getMockBuilder('\OCP\IUserSession')
+ $this->userSession = $this->getMockBuilder(IUserSession::class)
->disableOriginalConstructor()
->getMock();
$this->dispatcher = new EventDispatcher();
- $this->logger = $this->getMockBuilder('\OCP\ILogger')
+ $this->logger = $this->getMockBuilder(ILogger::class)
->disableOriginalConstructor()
->getMock();
diff --git a/apps/dav/tests/unit/Connector/PublicAuthTest.php b/apps/dav/tests/unit/Connector/PublicAuthTest.php
index 41cfc0f8ceb..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>
*
@@ -28,6 +30,7 @@ use OCP\IRequest;
use OCP\ISession;
use OCP\Share\Exceptions\ShareNotFound;
use OCP\Share\IManager;
+use OCP\Share\IShare;
/**
* Class PublicAuthTest
@@ -53,13 +56,13 @@ class PublicAuthTest extends \Test\TestCase {
protected function setUp() {
parent::setUp();
- $this->session = $this->getMockBuilder('\OCP\ISession')
+ $this->session = $this->getMockBuilder(ISession::class)
->disableOriginalConstructor()
->getMock();
- $this->request = $this->getMockBuilder('\OCP\IRequest')
+ $this->request = $this->getMockBuilder(IRequest::class)
->disableOriginalConstructor()
->getMock();
- $this->shareManager = $this->getMockBuilder('\OCP\Share\IManager')
+ $this->shareManager = $this->getMockBuilder(IManager::class)
->disableOriginalConstructor()
->getMock();
@@ -94,7 +97,7 @@ class PublicAuthTest extends \Test\TestCase {
}
public function testShareNoPassword() {
- $share = $this->getMockBuilder('OCP\Share\IShare')
+ $share = $this->getMockBuilder(IShare::class)
->disableOriginalConstructor()
->getMock();
$share->method('getPassword')->willReturn(null);
@@ -109,7 +112,7 @@ class PublicAuthTest extends \Test\TestCase {
}
public function testSharePasswordFancyShareType() {
- $share = $this->getMockBuilder('OCP\Share\IShare')
+ $share = $this->getMockBuilder(IShare::class)
->disableOriginalConstructor()
->getMock();
$share->method('getPassword')->willReturn('password');
@@ -126,7 +129,7 @@ class PublicAuthTest extends \Test\TestCase {
public function testSharePasswordRemote() {
- $share = $this->getMockBuilder('OCP\Share\IShare')
+ $share = $this->getMockBuilder(IShare::class)
->disableOriginalConstructor()
->getMock();
$share->method('getPassword')->willReturn('password');
@@ -142,7 +145,7 @@ class PublicAuthTest extends \Test\TestCase {
}
public function testSharePasswordLinkValidPassword() {
- $share = $this->getMockBuilder('OCP\Share\IShare')
+ $share = $this->getMockBuilder(IShare::class)
->disableOriginalConstructor()
->getMock();
$share->method('getPassword')->willReturn('password');
@@ -164,7 +167,7 @@ class PublicAuthTest extends \Test\TestCase {
}
public function testSharePasswordMailValidPassword() {
- $share = $this->getMockBuilder('OCP\Share\IShare')
+ $share = $this->getMockBuilder(IShare::class)
->disableOriginalConstructor()
->getMock();
$share->method('getPassword')->willReturn('password');
@@ -186,7 +189,7 @@ class PublicAuthTest extends \Test\TestCase {
}
public function testSharePasswordLinkValidSession() {
- $share = $this->getMockBuilder('OCP\Share\IShare')
+ $share = $this->getMockBuilder(IShare::class)
->disableOriginalConstructor()
->getMock();
$share->method('getPassword')->willReturn('password');
@@ -212,7 +215,7 @@ class PublicAuthTest extends \Test\TestCase {
}
public function testSharePasswordLinkInvalidSession() {
- $share = $this->getMockBuilder('OCP\Share\IShare')
+ $share = $this->getMockBuilder(IShare::class)
->disableOriginalConstructor()
->getMock();
$share->method('getPassword')->willReturn('password');
@@ -239,7 +242,7 @@ class PublicAuthTest extends \Test\TestCase {
public function testSharePasswordMailInvalidSession() {
- $share = $this->getMockBuilder('OCP\Share\IShare')
+ $share = $this->getMockBuilder(IShare::class)
->disableOriginalConstructor()
->getMock();
$share->method('getPassword')->willReturn('password');
diff --git a/apps/dav/tests/unit/Connector/Sabre/AuthTest.php b/apps/dav/tests/unit/Connector/Sabre/AuthTest.php
index dfcb7939799..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>
@@ -34,6 +35,7 @@ use OC\User\Session;
use OCP\IRequest;
use OCP\ISession;
use OCP\IUser;
+use Sabre\DAV\Server;
use Sabre\HTTP\RequestInterface;
use Sabre\HTTP\ResponseInterface;
use Test\TestCase;
@@ -60,16 +62,16 @@ class AuthTest extends TestCase {
public function setUp() {
parent::setUp();
- $this->session = $this->getMockBuilder('\OCP\ISession')
+ $this->session = $this->getMockBuilder(ISession::class)
->disableOriginalConstructor()->getMock();
- $this->userSession = $this->getMockBuilder('\OC\User\Session')
+ $this->userSession = $this->getMockBuilder(Session::class)
->disableOriginalConstructor()->getMock();
- $this->request = $this->getMockBuilder('\OCP\IRequest')
+ $this->request = $this->getMockBuilder(IRequest::class)
->disableOriginalConstructor()->getMock();
- $this->twoFactorManager = $this->getMockBuilder('\OC\Authentication\TwoFactorAuth\Manager')
+ $this->twoFactorManager = $this->getMockBuilder(Manager::class)
->disableOriginalConstructor()
->getMock();
- $this->throttler = $this->getMockBuilder('\OC\Security\Bruteforce\Throttler')
+ $this->throttler = $this->getMockBuilder(Throttler::class)
->disableOriginalConstructor()
->getMock();
$this->auth = new \OCA\DAV\Connector\Sabre\Auth(
@@ -112,7 +114,7 @@ class AuthTest extends TestCase {
}
public function testValidateUserPassOfAlreadyDAVAuthenticatedUser() {
- $user = $this->getMockBuilder('\OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$user->expects($this->exactly(2))
@@ -139,7 +141,7 @@ class AuthTest extends TestCase {
}
public function testValidateUserPassOfInvalidDAVAuthenticatedUser() {
- $user = $this->getMockBuilder('\OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$user->expects($this->once())
@@ -166,7 +168,7 @@ class AuthTest extends TestCase {
}
public function testValidateUserPassOfInvalidDAVAuthenticatedUserWithValidPassword() {
- $user = $this->getMockBuilder('\OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$user->expects($this->exactly(3))
@@ -258,7 +260,7 @@ class AuthTest extends TestCase {
->method('get')
->with('AUTHENTICATED_TO_DAV_BACKEND')
->will($this->returnValue(null));
- $user = $this->getMockBuilder('\OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$user->expects($this->any())
@@ -310,7 +312,7 @@ class AuthTest extends TestCase {
->method('get')
->with('AUTHENTICATED_TO_DAV_BACKEND')
->will($this->returnValue('LoggedInUser'));
- $user = $this->getMockBuilder('\OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$user->expects($this->any())
@@ -360,7 +362,7 @@ class AuthTest extends TestCase {
->method('get')
->with('AUTHENTICATED_TO_DAV_BACKEND')
->will($this->returnValue('LoggedInUser'));
- $user = $this->getMockBuilder('\OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$user->expects($this->any())
@@ -414,7 +416,7 @@ class AuthTest extends TestCase {
->method('get')
->with('AUTHENTICATED_TO_DAV_BACKEND')
->will($this->returnValue('AnotherUser'));
- $user = $this->getMockBuilder('\OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$user->expects($this->any())
@@ -460,7 +462,7 @@ class AuthTest extends TestCase {
->method('get')
->with('AUTHENTICATED_TO_DAV_BACKEND')
->will($this->returnValue(null));
- $user = $this->getMockBuilder('\OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$user->expects($this->any())
@@ -494,7 +496,7 @@ class AuthTest extends TestCase {
->method('get')
->with('AUTHENTICATED_TO_DAV_BACKEND')
->will($this->returnValue(null));
- $user = $this->getMockBuilder('\OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$user->expects($this->any())
@@ -529,7 +531,7 @@ class AuthTest extends TestCase {
->method('get')
->with('AUTHENTICATED_TO_DAV_BACKEND')
->will($this->returnValue(null));
- $user = $this->getMockBuilder('\OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$user->expects($this->any())
@@ -549,7 +551,7 @@ class AuthTest extends TestCase {
}
public function testAuthenticateNoBasicAuthenticateHeadersProvided() {
- $server = $this->getMockBuilder('\Sabre\DAV\Server')
+ $server = $this->getMockBuilder(Server::class)
->disableOriginalConstructor()
->getMock();
$server->httpRequest = $this->getMockBuilder(RequestInterface::class)
@@ -597,7 +599,7 @@ class AuthTest extends TestCase {
->disableOriginalConstructor()
->getMock();
/** @var IUser */
- $user = $this->getMockBuilder('OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$user->method('getUID')->willReturn('MyTestUser');
@@ -630,7 +632,7 @@ class AuthTest extends TestCase {
}
public function testAuthenticateValidCredentials() {
- $server = $this->getMockBuilder('\Sabre\DAV\Server')
+ $server = $this->getMockBuilder(Server::class)
->disableOriginalConstructor()
->getMock();
$server->httpRequest = $this->getMockBuilder(RequestInterface::class)
@@ -654,7 +656,7 @@ class AuthTest extends TestCase {
->method('logClientIn')
->with('username', 'password')
->will($this->returnValue(true));
- $user = $this->getMockBuilder('\OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$user->expects($this->exactly(3))
@@ -669,7 +671,7 @@ class AuthTest extends TestCase {
}
public function testAuthenticateInvalidCredentials() {
- $server = $this->getMockBuilder('\Sabre\DAV\Server')
+ $server = $this->getMockBuilder(Server::class)
->disableOriginalConstructor()
->getMock();
$server->httpRequest = $this->getMockBuilder(RequestInterface::class)
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 eb1689089a4..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>
*
@@ -44,7 +45,7 @@ class BlockLegacyClientPluginTest extends TestCase {
public function setUp() {
parent::setUp();
- $this->config = $this->getMockBuilder('\OCP\IConfig')
+ $this->config = $this->getMockBuilder(IConfig::class)
->disableOriginalConstructor()
->getMock();
$this->blockLegacyClientVersionPlugin = new BlockLegacyClientPlugin($this->config);
diff --git a/apps/dav/tests/unit/Connector/Sabre/CommentsPropertiesPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/CommentsPropertiesPluginTest.php
index 13e10476a41..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
@@ -25,6 +26,11 @@
namespace OCA\DAV\Tests\unit\Connector\Sabre;
use \OCA\DAV\Connector\Sabre\CommentPropertiesPlugin as CommentPropertiesPluginImplementation;
+use OCA\DAV\Connector\Sabre\File;
+use OCP\Comments\ICommentsManager;
+use OCP\IUser;
+use OCP\IUserSession;
+use Sabre\DAV\PropFind;
class CommentsPropertiesPluginTest extends \Test\TestCase {
@@ -37,10 +43,10 @@ class CommentsPropertiesPluginTest extends \Test\TestCase {
public function setUp() {
parent::setUp();
- $this->commentsManager = $this->getMockBuilder('\OCP\Comments\ICommentsManager')
+ $this->commentsManager = $this->getMockBuilder(ICommentsManager::class)
->disableOriginalConstructor()
->getMock();
- $this->userSession = $this->getMockBuilder('\OCP\IUserSession')
+ $this->userSession = $this->getMockBuilder(IUserSession::class)
->disableOriginalConstructor()
->getMock();
@@ -73,7 +79,7 @@ class CommentsPropertiesPluginTest extends \Test\TestCase {
* @param $expectedSuccessful
*/
public function testHandleGetProperties($node, $expectedSuccessful) {
- $propFind = $this->getMockBuilder('\Sabre\DAV\PropFind')
+ $propFind = $this->getMockBuilder(PropFind::class)
->disableOriginalConstructor()
->getMock();
@@ -103,7 +109,7 @@ class CommentsPropertiesPluginTest extends \Test\TestCase {
* @param $expectedHref
*/
public function testGetCommentsLink($baseUri, $fid, $expectedHref) {
- $node = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\File')
+ $node = $this->getMockBuilder(File::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->any())
@@ -121,7 +127,7 @@ class CommentsPropertiesPluginTest extends \Test\TestCase {
public function userProvider() {
return [
[
- $this->getMockBuilder('\OCP\IUser')
+ $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock()
],
@@ -134,7 +140,7 @@ class CommentsPropertiesPluginTest extends \Test\TestCase {
* @param $user
*/
public function testGetUnreadCount($user) {
- $node = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\File')
+ $node = $this->getMockBuilder(File::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->any())
diff --git a/apps/dav/tests/unit/Connector/Sabre/CopyEtagHeaderPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/CopyEtagHeaderPluginTest.php
index 773d5d7f98b..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>
*
@@ -24,7 +25,9 @@
namespace OCA\DAV\Tests\unit\Connector\Sabre;
use OCA\DAV\Connector\Sabre\CopyEtagHeaderPlugin;
+use OCA\DAV\Connector\Sabre\File;
use Sabre\DAV\Server;
+use Sabre\DAV\Tree;
use Test\TestCase;
/**
@@ -68,13 +71,13 @@ class CopyEtagHeaderPluginTest extends TestCase {
}
public function testAfterMove() {
- $node = $this->getMockBuilder('OCA\DAV\Connector\Sabre\File')
+ $node = $this->getMockBuilder(File::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->once())
->method('getETag')
->willReturn('123456');
- $tree = $this->getMockBuilder('Sabre\DAV\Tree')
+ $tree = $this->getMockBuilder(Tree::class)
->disableOriginalConstructor()
->getMock();
$tree->expects($this->once())
diff --git a/apps/dav/tests/unit/Connector/Sabre/CustomPropertiesBackendTest.php b/apps/dav/tests/unit/Connector/Sabre/CustomPropertiesBackendTest.php
index f0f4caa07a0..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>
@@ -31,6 +32,11 @@ namespace OCA\DAV\Tests\unit\Connector\Sabre;
* See the COPYING-README file.
*/
+use OCA\DAV\Connector\Sabre\Directory;
+use OCA\DAV\Connector\Sabre\File;
+use OCP\IUser;
+use Sabre\DAV\Tree;
+
/**
* Class CustomPropertiesBackend
*
@@ -63,13 +69,13 @@ class CustomPropertiesBackendTest extends \Test\TestCase {
public function setUp() {
parent::setUp();
$this->server = new \Sabre\DAV\Server();
- $this->tree = $this->getMockBuilder('\Sabre\DAV\Tree')
+ $this->tree = $this->getMockBuilder(Tree::class)
->disableOriginalConstructor()
->getMock();
$userId = $this->getUniqueID('testcustompropertiesuser');
- $this->user = $this->getMockBuilder('\OCP\IUser')
+ $this->user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$this->user->expects($this->any())
@@ -175,7 +181,7 @@ class CustomPropertiesBackendTest extends \Test\TestCase {
* Test setting/getting properties
*/
public function testSetGetPropertiesForFile() {
- $node = $this->createTestNode('\OCA\DAV\Connector\Sabre\File');
+ $node = $this->createTestNode(File::class);
$this->tree->expects($this->any())
->method('getNodeForPath')
->with('/dummypath')
@@ -207,9 +213,9 @@ class CustomPropertiesBackendTest extends \Test\TestCase {
* Test getting properties from directory
*/
public function testGetPropertiesForDirectory() {
- $rootNode = $this->createTestNode('\OCA\DAV\Connector\Sabre\Directory');
+ $rootNode = $this->createTestNode(Directory::class);
- $nodeSub = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\File')
+ $nodeSub = $this->getMockBuilder(File::class)
->disableOriginalConstructor()
->getMock();
$nodeSub->expects($this->any())
@@ -291,7 +297,7 @@ class CustomPropertiesBackendTest extends \Test\TestCase {
* Test delete property
*/
public function testDeleteProperty() {
- $node = $this->createTestNode('\OCA\DAV\Connector\Sabre\File');
+ $node = $this->createTestNode(File::class);
$this->tree->expects($this->any())
->method('getNodeForPath')
->with('/dummypath')
diff --git a/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php b/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php
index f27f67b0aae..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>
*
@@ -26,6 +26,7 @@
namespace OCA\DAV\Tests\Unit\Connector\Sabre;
+use OC\Files\Storage\Wrapper\Quota;
use OCP\Files\ForbiddenException;
use OC\Files\FileInfo;
use OCA\DAV\Connector\Sabre\Directory;
@@ -179,10 +180,10 @@ class DirectoryTest extends \Test\TestCase {
}
public function testGetChildren() {
- $info1 = $this->getMockBuilder('OC\Files\FileInfo')
+ $info1 = $this->getMockBuilder(FileInfo::class)
->disableOriginalConstructor()
->getMock();
- $info2 = $this->getMockBuilder('OC\Files\FileInfo')
+ $info2 = $this->getMockBuilder(FileInfo::class)
->disableOriginalConstructor()
->getMock();
$info1->expects($this->any())
@@ -269,7 +270,7 @@ class DirectoryTest extends \Test\TestCase {
}
public function testGetQuotaInfoUnlimited() {
- $storage = $this->getMockBuilder('\OC\Files\Storage\Wrapper\Quota')
+ $storage = $this->getMockBuilder(Quota::class)
->disableOriginalConstructor()
->getMock();
@@ -300,7 +301,7 @@ class DirectoryTest extends \Test\TestCase {
}
public function testGetQuotaInfoSpecific() {
- $storage = $this->getMockBuilder('\OC\Files\Storage\Wrapper\Quota')
+ $storage = $this->getMockBuilder(Quota::class)
->disableOriginalConstructor()
->getMock();
diff --git a/apps/dav/tests/unit/Connector/Sabre/DummyGetResponsePluginTest.php b/apps/dav/tests/unit/Connector/Sabre/DummyGetResponsePluginTest.php
index 1c2e249e8c0..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>
*
@@ -26,6 +27,9 @@
namespace OCA\DAV\Tests\unit\Connector\Sabre;
use OCA\DAV\Connector\Sabre\DummyGetResponsePlugin;
+use Sabre\DAV\Server;
+use Sabre\HTTP\RequestInterface;
+use Sabre\HTTP\ResponseInterface;
use Test\TestCase;
/**
@@ -44,8 +48,8 @@ class DummyGetResponsePluginTest extends TestCase {
}
public function testInitialize() {
- /** @var \Sabre\DAV\Server $server */
- $server = $this->getMockBuilder('\Sabre\DAV\Server')
+ /** @var Server $server */
+ $server = $this->getMockBuilder(Server::class)
->disableOriginalConstructor()
->getMock();
$server
@@ -59,11 +63,11 @@ class DummyGetResponsePluginTest extends TestCase {
public function testHttpGet() {
/** @var \Sabre\HTTP\RequestInterface $request */
- $request = $this->getMockBuilder('\Sabre\HTTP\RequestInterface')
+ $request = $this->getMockBuilder(RequestInterface::class)
->disableOriginalConstructor()
->getMock();
/** @var \Sabre\HTTP\ResponseInterface $response */
- $response = $server = $this->getMockBuilder('\Sabre\HTTP\ResponseInterface')
+ $response = $server = $this->getMockBuilder(ResponseInterface::class)
->disableOriginalConstructor()
->getMock();
$response
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 abf6e5cf182..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>
*
@@ -25,7 +26,12 @@
namespace OCA\DAV\Tests\unit\Connector\Sabre;
use OCA\DAV\Connector\Sabre\FakeLockerPlugin;
+use Sabre\DAV\INode;
+use Sabre\DAV\PropFind;
+use Sabre\DAV\Server;
+use Sabre\HTTP\RequestInterface;
use Sabre\HTTP\Response;
+use Sabre\HTTP\ResponseInterface;
use Test\TestCase;
/**
@@ -43,8 +49,8 @@ class FakeLockerPluginTest extends TestCase {
}
public function testInitialize() {
- /** @var \Sabre\DAV\Server $server */
- $server = $this->getMockBuilder('\Sabre\DAV\Server')
+ /** @var Server $server */
+ $server = $this->getMockBuilder(Server::class)
->disableOriginalConstructor()
->getMock();
$server
@@ -83,10 +89,10 @@ class FakeLockerPluginTest extends TestCase {
}
public function testPropFind() {
- $propFind = $this->getMockBuilder('\Sabre\DAV\PropFind')
+ $propFind = $this->getMockBuilder(PropFind::class)
->disableOriginalConstructor()
->getMock();
- $node = $this->getMockBuilder('\Sabre\DAV\INode')
+ $node = $this->getMockBuilder(INode::class)
->disableOriginalConstructor()
->getMock();
@@ -143,7 +149,7 @@ class FakeLockerPluginTest extends TestCase {
* @param array $expected
*/
public function testValidateTokens(array $input, array $expected) {
- $request = $this->getMockBuilder('\Sabre\HTTP\RequestInterface')
+ $request = $this->getMockBuilder(RequestInterface::class)
->disableOriginalConstructor()
->getMock();
$this->fakeLockerPlugin->validateTokens($request, $input);
@@ -151,11 +157,11 @@ class FakeLockerPluginTest extends TestCase {
}
public function testFakeLockProvider() {
- $request = $this->getMockBuilder('\Sabre\HTTP\RequestInterface')
+ $request = $this->getMockBuilder(RequestInterface::class)
->disableOriginalConstructor()
->getMock();
$response = new Response();
- $server = $this->getMockBuilder('\Sabre\DAV\Server')
+ $server = $this->getMockBuilder(Server::class)
->getMock();
$this->fakeLockerPlugin->initialize($server);
@@ -171,10 +177,10 @@ class FakeLockerPluginTest extends TestCase {
}
public function testFakeUnlockProvider() {
- $request = $this->getMockBuilder('\Sabre\HTTP\RequestInterface')
+ $request = $this->getMockBuilder(RequestInterface::class)
->disableOriginalConstructor()
->getMock();
- $response = $this->getMockBuilder('\Sabre\HTTP\ResponseInterface')
+ $response = $this->getMockBuilder(ResponseInterface::class)
->disableOriginalConstructor()
->getMock();
diff --git a/apps/dav/tests/unit/Connector/Sabre/FileTest.php b/apps/dav/tests/unit/Connector/Sabre/FileTest.php
index e2666d0de27..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>
@@ -27,7 +28,9 @@
namespace OCA\DAV\Tests\unit\Connector\Sabre;
use OC\Files\Storage\Local;
+use OC\Files\View;
use OCP\Files\ForbiddenException;
+use OCP\Files\Storage;
use Test\HookHelper;
use OC\Files\Filesystem;
use OCP\Lock\ILockingProvider;
@@ -70,7 +73,7 @@ class FileTest extends \Test\TestCase {
}
private function getMockStorage() {
- $storage = $this->getMockBuilder('\OCP\Files\Storage')
+ $storage = $this->getMockBuilder(Storage::class)
->disableOriginalConstructor()
->getMock();
$storage->expects($this->any())
@@ -151,12 +154,12 @@ class FileTest extends \Test\TestCase {
*/
public function testSimplePutFails($thrownException, $expectedException, $checkPreviousClass = true) {
// setup
- $storage = $this->getMockBuilder('\OC\Files\Storage\Local')
+ $storage = $this->getMockBuilder(Local::class)
->setMethods(['fopen'])
->setConstructorArgs([['datadir' => \OC::$server->getTempManager()->getTemporaryFolder()]])
->getMock();
\OC\Files\Filesystem::mount($storage, [], $this->user . '/');
- $view = $this->getMockBuilder('\OC\Files\View')
+ $view = $this->getMockBuilder(View::class)
->setMethods(['getRelativePath', 'resolvePath'])
->getMock();
$view->expects($this->atLeastOnce())
@@ -210,12 +213,12 @@ class FileTest extends \Test\TestCase {
*/
public function testChunkedPutFails($thrownException, $expectedException, $checkPreviousClass = false) {
// setup
- $storage = $this->getMockBuilder('\OC\Files\Storage\Local')
+ $storage = $this->getMockBuilder(Local::class)
->setMethods(['fopen'])
->setConstructorArgs([['datadir' => \OC::$server->getTempManager()->getTemporaryFolder()]])
->getMock();
\OC\Files\Filesystem::mount($storage, [], $this->user . '/');
- $view = $this->getMockBuilder('\OC\Files\View')
+ $view = $this->getMockBuilder(View::class)
->setMethods(['getRelativePath', 'resolvePath'])
->getMock();
$view->expects($this->atLeastOnce())
@@ -535,7 +538,7 @@ class FileTest extends \Test\TestCase {
*/
public function testSimplePutFailsSizeCheck() {
// setup
- $view = $this->getMockBuilder('\OC\Files\View')
+ $view = $this->getMockBuilder(View::class)
->setMethods(['rename', 'getRelativePath', 'filesize'])
->getMock();
$view->expects($this->any())
@@ -653,7 +656,7 @@ class FileTest extends \Test\TestCase {
*/
public function testSimplePutInvalidChars() {
// setup
- $view = $this->getMockBuilder('\OC\Files\View')
+ $view = $this->getMockBuilder(View::class)
->setMethods(['getRelativePath'])
->getMock();
$view->expects($this->any())
@@ -690,7 +693,7 @@ class FileTest extends \Test\TestCase {
*/
public function testSetNameInvalidChars() {
// setup
- $view = $this->getMockBuilder('\OC\Files\View')
+ $view = $this->getMockBuilder(View::class)
->setMethods(['getRelativePath'])
->getMock();
@@ -709,7 +712,7 @@ class FileTest extends \Test\TestCase {
*/
public function testUploadAbort() {
// setup
- $view = $this->getMockBuilder('\OC\Files\View')
+ $view = $this->getMockBuilder(View::class)
->setMethods(['rename', 'getRelativePath', 'filesize'])
->getMock();
$view->expects($this->any())
@@ -755,7 +758,7 @@ class FileTest extends \Test\TestCase {
*/
public function testDeleteWhenAllowed() {
// setup
- $view = $this->getMockBuilder('\OC\Files\View')
+ $view = $this->getMockBuilder(View::class)
->getMock();
$view->expects($this->once())
@@ -777,7 +780,7 @@ class FileTest extends \Test\TestCase {
*/
public function testDeleteThrowsWhenDeletionNotAllowed() {
// setup
- $view = $this->getMockBuilder('\OC\Files\View')
+ $view = $this->getMockBuilder(View::class)
->getMock();
$info = new \OC\Files\FileInfo('/test.txt', $this->getMockStorage(), null, array(
@@ -795,7 +798,7 @@ class FileTest extends \Test\TestCase {
*/
public function testDeleteThrowsWhenDeletionFailed() {
// setup
- $view = $this->getMockBuilder('\OC\Files\View')
+ $view = $this->getMockBuilder(View::class)
->getMock();
// but fails
@@ -818,7 +821,7 @@ class FileTest extends \Test\TestCase {
*/
public function testDeleteThrowsWhenDeletionThrows() {
// setup
- $view = $this->getMockBuilder('\OC\Files\View')
+ $view = $this->getMockBuilder(View::class)
->getMock();
// but fails
@@ -880,7 +883,7 @@ class FileTest extends \Test\TestCase {
$wasLockedPre = false;
$wasLockedPost = false;
- $eventHandler = $this->getMockBuilder('\stdclass')
+ $eventHandler = $this->getMockBuilder(\stdclass::class)
->setMethods(['writeCallback', 'postWriteCallback'])
->getMock();
@@ -968,7 +971,7 @@ class FileTest extends \Test\TestCase {
* @expectedException \Sabre\DAV\Exception\ServiceUnavailable
*/
public function testGetFopenFails() {
- $view = $this->getMockBuilder('\OC\Files\View')
+ $view = $this->getMockBuilder(View::class)
->setMethods(['fopen'])
->getMock();
$view->expects($this->atLeastOnce())
@@ -988,7 +991,7 @@ class FileTest extends \Test\TestCase {
* @expectedException \OCA\DAV\Connector\Sabre\Exception\Forbidden
*/
public function testGetFopenThrows() {
- $view = $this->getMockBuilder('\OC\Files\View')
+ $view = $this->getMockBuilder(View::class)
->setMethods(['fopen'])
->getMock();
$view->expects($this->atLeastOnce())
@@ -1008,7 +1011,7 @@ class FileTest extends \Test\TestCase {
* @expectedException \Sabre\DAV\Exception\NotFound
*/
public function testGetThrowsIfNoPermission() {
- $view = $this->getMockBuilder('\OC\Files\View')
+ $view = $this->getMockBuilder(View::class)
->setMethods(['fopen'])
->getMock();
$view->expects($this->never())
diff --git a/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php
index 885f3c23c24..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>
@@ -25,10 +28,18 @@
*/
namespace OCA\DAV\Tests\unit\Connector\Sabre;
+use OC\User\User;
+use OCA\DAV\Connector\Sabre\File;
use OCA\DAV\Connector\Sabre\FilesPlugin;
+use OCA\DAV\Connector\Sabre\Node;
use OCP\Files\StorageNotAvailableException;
+use OCP\IConfig;
+use OCP\IPreview;
+use OCP\IRequest;
use Sabre\DAV\PropFind;
use Sabre\DAV\PropPatch;
+use Sabre\DAV\Server;
+use Sabre\DAV\Tree;
use Sabre\HTTP\RequestInterface;
use Sabre\HTTP\ResponseInterface;
use Test\TestCase;
@@ -87,20 +98,20 @@ class FilesPluginTest extends TestCase {
public function setUp() {
parent::setUp();
- $this->server = $this->getMockBuilder('\Sabre\DAV\Server')
+ $this->server = $this->getMockBuilder(Server::class)
->disableOriginalConstructor()
->getMock();
- $this->tree = $this->getMockBuilder('\Sabre\DAV\Tree')
+ $this->tree = $this->getMockBuilder(Tree::class)
->disableOriginalConstructor()
->getMock();
- $this->config = $this->createMock('\OCP\IConfig');
+ $this->config = $this->createMock(IConfig::class);
$this->config->expects($this->any())->method('getSystemValue')
->with($this->equalTo('data-fingerprint'), $this->equalTo(''))
->willReturn('my_fingerprint');
- $this->request = $this->getMockBuilder('\OCP\IRequest')
+ $this->request = $this->getMockBuilder(IRequest::class)
->disableOriginalConstructor()
->getMock();
- $this->previewManager = $this->getMockBuilder('\OCP\IPreview')
+ $this->previewManager = $this->getMockBuilder(IPreview::class)
->disableOriginalConstructor()
->getMock();
@@ -182,7 +193,7 @@ class FilesPluginTest extends TestCase {
0
);
- $user = $this->getMockBuilder('\OC\User\User')
+ $user = $this->getMockBuilder(User::class)
->disableOriginalConstructor()->getMock();
$user
->expects($this->once())
@@ -245,7 +256,7 @@ class FilesPluginTest extends TestCase {
$this->plugin = new FilesPlugin(
$this->tree,
$this->config,
- $this->getMockBuilder('\OCP\IRequest')
+ $this->getMockBuilder(IRequest::class)
->disableOriginalConstructor()
->getMock(),
$this->previewManager,
@@ -311,7 +322,7 @@ class FilesPluginTest extends TestCase {
public function testGetPropertiesForRootDirectory() {
/** @var \OCA\DAV\Connector\Sabre\Directory | \PHPUnit_Framework_MockObject_MockObject $node */
- $node = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\Directory')
+ $node = $this->getMockBuilder(Directory::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->any())->method('getPath')->willReturn('/');
@@ -347,7 +358,7 @@ class FilesPluginTest extends TestCase {
// $this->expectException(\Sabre\DAV\Exception\NotFound::class);
/** @var \OCA\DAV\Connector\Sabre\Directory|\PHPUnit_Framework_MockObject_MockObject $node */
- $node = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\Directory')
+ $node = $this->getMockBuilder(Directory::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->any())->method('getPath')->willReturn('/');
@@ -451,14 +462,14 @@ class FilesPluginTest extends TestCase {
* @expectedExceptionMessage FolderA/test.txt cannot be deleted
*/
public function testMoveSrcNotDeletable() {
- $fileInfoFolderATestTXT = $this->getMockBuilder('\OCP\Files\FileInfo')
+ $fileInfoFolderATestTXT = $this->getMockBuilder(FileInfo::class)
->disableOriginalConstructor()
->getMock();
$fileInfoFolderATestTXT->expects($this->once())
->method('isDeletable')
->willReturn(false);
- $node = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\Node')
+ $node = $this->getMockBuilder(Node::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->once())
@@ -472,14 +483,14 @@ class FilesPluginTest extends TestCase {
}
public function testMoveSrcDeletable() {
- $fileInfoFolderATestTXT = $this->getMockBuilder('\OCP\Files\FileInfo')
+ $fileInfoFolderATestTXT = $this->getMockBuilder(FileInfo::class)
->disableOriginalConstructor()
->getMock();
$fileInfoFolderATestTXT->expects($this->once())
->method('isDeletable')
->willReturn(true);
- $node = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\Node')
+ $node = $this->getMockBuilder(Node::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->once())
@@ -497,7 +508,7 @@ class FilesPluginTest extends TestCase {
* @expectedExceptionMessage FolderA/test.txt does not exist
*/
public function testMoveSrcNotExist() {
- $node = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\Node')
+ $node = $this->getMockBuilder(Node::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->once())
@@ -539,7 +550,7 @@ class FilesPluginTest extends TestCase {
->method('getPath')
->will($this->returnValue('test/somefile.xml'));
- $node = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\File')
+ $node = $this->getMockBuilder(File::class)
->disableOriginalConstructor()
->getMock();
$node
diff --git a/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php
index 3ca131dbf6f..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>
*
@@ -24,10 +26,16 @@
namespace OCA\DAV\Tests\unit\Connector\Sabre;
+use OCA\DAV\Connector\Sabre\Directory;
use OCA\DAV\Connector\Sabre\FilesReportPlugin as FilesReportPluginImplementation;
+use OCP\Files\File;
+use OCP\IConfig;
use OCP\IPreview;
+use OCP\IRequest;
use OCP\ITagManager;
+use OCP\IUser;
use OCP\IUserSession;
+use OCP\SystemTag\ISystemTag;
use OCP\SystemTag\ISystemTagObjectMapper;
use OC\Files\View;
use OCP\Files\Folder;
@@ -35,6 +43,9 @@ use OCP\IGroupManager;
use OCP\SystemTag\ISystemTagManager;
use OCP\ITags;
use OCP\Files\FileInfo;
+use Sabre\DAV\INode;
+use Sabre\DAV\Tree;
+use Sabre\HTTP\ResponseInterface;
class FilesReportPluginTest extends \Test\TestCase {
/** @var \Sabre\DAV\Server|\PHPUnit_Framework_MockObject_MockObject */
@@ -72,11 +83,11 @@ class FilesReportPluginTest extends \Test\TestCase {
public function setUp() {
parent::setUp();
- $this->tree = $this->getMockBuilder('\Sabre\DAV\Tree')
+ $this->tree = $this->getMockBuilder(Tree::class)
->disableOriginalConstructor()
->getMock();
- $this->view = $this->getMockBuilder('\OC\Files\View')
+ $this->view = $this->getMockBuilder(View::class)
->disableOriginalConstructor()
->getMock();
@@ -89,15 +100,15 @@ class FilesReportPluginTest extends \Test\TestCase {
->method('getBaseUri')
->will($this->returnValue('http://example.com/owncloud/remote.php/dav'));
- $this->groupManager = $this->getMockBuilder('\OCP\IGroupManager')
+ $this->groupManager = $this->getMockBuilder(IGroupManager::class)
->disableOriginalConstructor()
->getMock();
- $this->userFolder = $this->getMockBuilder('\OCP\Files\Folder')
+ $this->userFolder = $this->getMockBuilder(Folder::class)
->disableOriginalConstructor()
->getMock();
- $this->previewManager = $this->getMockBuilder('\OCP\IPreview')
+ $this->previewManager = $this->getMockBuilder(IPreview::class)
->disableOriginalConstructor()
->getMock();
@@ -111,7 +122,7 @@ class FilesReportPluginTest extends \Test\TestCase {
->with('files')
->will($this->returnValue($this->privateTags));
- $user = $this->getMockBuilder('\OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$user->expects($this->any())
@@ -140,7 +151,7 @@ class FilesReportPluginTest extends \Test\TestCase {
->method('getNodeForPath')
->with('/' . $path)
->will($this->returnValue(
- $this->getMockBuilder('\Sabre\DAV\INode')
+ $this->getMockBuilder(INode::class)
->disableOriginalConstructor()
->getMock()
));
@@ -160,7 +171,7 @@ class FilesReportPluginTest extends \Test\TestCase {
->method('getNodeForPath')
->with('/' . $path)
->will($this->returnValue(
- $this->getMockBuilder('\Sabre\DAV\INode')
+ $this->getMockBuilder(INode::class)
->disableOriginalConstructor()
->getMock()
));
@@ -206,11 +217,11 @@ class FilesReportPluginTest extends \Test\TestCase {
->with('456', 'files')
->will($this->returnValue(['111', '222', '333']));
- $reportTargetNode = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\Directory')
+ $reportTargetNode = $this->getMockBuilder(Directory::class)
->disableOriginalConstructor()
->getMock();
- $response = $this->getMockBuilder('Sabre\HTTP\ResponseInterface')
+ $response = $this->getMockBuilder(ResponseInterface::class)
->disableOriginalConstructor()
->getMock();
@@ -230,10 +241,10 @@ class FilesReportPluginTest extends \Test\TestCase {
->with('/' . $path)
->will($this->returnValue($reportTargetNode));
- $filesNode1 = $this->getMockBuilder('\OCP\Files\Folder')
+ $filesNode1 = $this->getMockBuilder(Folder::class)
->disableOriginalConstructor()
->getMock();
- $filesNode2 = $this->getMockBuilder('\OCP\Files\File')
+ $filesNode2 = $this->getMockBuilder(File::class)
->disableOriginalConstructor()
->getMock();
@@ -256,21 +267,21 @@ class FilesReportPluginTest extends \Test\TestCase {
}
public function testFindNodesByFileIdsRoot() {
- $filesNode1 = $this->getMockBuilder('\OCP\Files\Folder')
+ $filesNode1 = $this->getMockBuilder(Folder::class)
->disableOriginalConstructor()
->getMock();
$filesNode1->expects($this->once())
->method('getName')
->will($this->returnValue('first node'));
- $filesNode2 = $this->getMockBuilder('\OCP\Files\File')
+ $filesNode2 = $this->getMockBuilder(File::class)
->disableOriginalConstructor()
->getMock();
$filesNode2->expects($this->once())
->method('getName')
->will($this->returnValue('second node'));
- $reportTargetNode = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\Directory')
+ $reportTargetNode = $this->getMockBuilder(Directory::class)
->disableOriginalConstructor()
->getMock();
$reportTargetNode->expects($this->any())
@@ -297,21 +308,21 @@ class FilesReportPluginTest extends \Test\TestCase {
}
public function testFindNodesByFileIdsSubDir() {
- $filesNode1 = $this->getMockBuilder('\OCP\Files\Folder')
+ $filesNode1 = $this->getMockBuilder(Folder::class)
->disableOriginalConstructor()
->getMock();
$filesNode1->expects($this->once())
->method('getName')
->will($this->returnValue('first node'));
- $filesNode2 = $this->getMockBuilder('\OCP\Files\File')
+ $filesNode2 = $this->getMockBuilder(File::class)
->disableOriginalConstructor()
->getMock();
$filesNode2->expects($this->once())
->method('getName')
->will($this->returnValue('second node'));
- $reportTargetNode = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\Directory')
+ $reportTargetNode = $this->getMockBuilder(Directory::class)
->disableOriginalConstructor()
->getMock();
$reportTargetNode->expects($this->any())
@@ -319,7 +330,7 @@ class FilesReportPluginTest extends \Test\TestCase {
->will($this->returnValue('/sub1/sub2'));
- $subNode = $this->getMockBuilder('\OCP\Files\Folder')
+ $subNode = $this->getMockBuilder(Folder::class)
->disableOriginalConstructor()
->getMock();
@@ -353,10 +364,10 @@ class FilesReportPluginTest extends \Test\TestCase {
$fileInfo = $this->createMock(FileInfo::class);
$fileInfo->method('isReadable')->willReturn(true);
- $node1 = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\Directory')
+ $node1 = $this->getMockBuilder(Directory::class)
->disableOriginalConstructor()
->getMock();
- $node2 = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\File')
+ $node2 = $this->getMockBuilder(\OCA\DAV\Connector\Sabre\File::class)
->disableOriginalConstructor()
->getMock();
@@ -378,7 +389,7 @@ class FilesReportPluginTest extends \Test\TestCase {
->will($this->returnValue('/sub/node2'));
$node2->method('getFileInfo')->willReturn($fileInfo);
- $config = $this->getMockBuilder('\OCP\IConfig')
+ $config = $this->getMockBuilder(IConfig::class)
->disableOriginalConstructor()
->getMock();
@@ -386,7 +397,7 @@ class FilesReportPluginTest extends \Test\TestCase {
new \OCA\DAV\Connector\Sabre\FilesPlugin(
$this->tree,
$config,
- $this->getMockBuilder('\OCP\IRequest')
+ $this->getMockBuilder(IRequest::class)
->disableOriginalConstructor()
->getMock(),
$this->previewManager
@@ -542,7 +553,7 @@ class FilesReportPluginTest extends \Test\TestCase {
->method('isAdmin')
->will($this->returnValue(true));
- $tag1 = $this->getMockBuilder('\OCP\SystemTag\ISystemTag')
+ $tag1 = $this->getMockBuilder(ISystemTag::class)
->disableOriginalConstructor()
->getMock();
$tag1->expects($this->any())
@@ -552,7 +563,7 @@ class FilesReportPluginTest extends \Test\TestCase {
->method('isUserVisible')
->will($this->returnValue(true));
- $tag2 = $this->getMockBuilder('\OCP\SystemTag\ISystemTag')
+ $tag2 = $this->getMockBuilder(ISystemTag::class)
->disableOriginalConstructor()
->getMock();
$tag2->expects($this->any())
@@ -591,7 +602,7 @@ class FilesReportPluginTest extends \Test\TestCase {
->method('isAdmin')
->will($this->returnValue(false));
- $tag1 = $this->getMockBuilder('\OCP\SystemTag\ISystemTag')
+ $tag1 = $this->getMockBuilder(ISystemTag::class)
->disableOriginalConstructor()
->getMock();
$tag1->expects($this->any())
@@ -601,7 +612,7 @@ class FilesReportPluginTest extends \Test\TestCase {
->method('isUserVisible')
->will($this->returnValue(true));
- $tag2 = $this->getMockBuilder('\OCP\SystemTag\ISystemTag')
+ $tag2 = $this->getMockBuilder(ISystemTag::class)
->disableOriginalConstructor()
->getMock();
$tag2->expects($this->any())
@@ -629,7 +640,7 @@ class FilesReportPluginTest extends \Test\TestCase {
->method('isAdmin')
->will($this->returnValue(false));
- $tag1 = $this->getMockBuilder('\OCP\SystemTag\ISystemTag')
+ $tag1 = $this->getMockBuilder(ISystemTag::class)
->disableOriginalConstructor()
->getMock();
$tag1->expects($this->any())
@@ -639,7 +650,7 @@ class FilesReportPluginTest extends \Test\TestCase {
->method('isUserVisible')
->will($this->returnValue(true));
- $tag2 = $this->getMockBuilder('\OCP\SystemTag\ISystemTag')
+ $tag2 = $this->getMockBuilder(ISystemTag::class)
->disableOriginalConstructor()
->getMock();
$tag2->expects($this->any())
diff --git a/apps/dav/tests/unit/Connector/Sabre/MaintenancePluginTest.php b/apps/dav/tests/unit/Connector/Sabre/MaintenancePluginTest.php
index 43c32299523..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
@@ -42,7 +42,7 @@ class MaintenancePluginTest extends TestCase {
public function setUp() {
parent::setUp();
- $this->config = $this->getMockBuilder('\OCP\IConfig')->getMock();
+ $this->config = $this->getMockBuilder(IConfig::class)->getMock();
$this->maintenancePlugin = new MaintenancePlugin($this->config);
}
diff --git a/apps/dav/tests/unit/Connector/Sabre/NodeTest.php b/apps/dav/tests/unit/Connector/Sabre/NodeTest.php
index 0aa3fe6101d..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>
@@ -25,6 +26,12 @@
*/
namespace OCA\DAV\Tests\unit\Connector\Sabre;
+use OC\Files\FileInfo;
+use OC\Files\View;
+use OCP\Files\Mount\IMountPoint;
+use OCP\Files\Storage;
+use OCP\Share\IManager;
+use OCP\Share\IShare;
/**
* Class NodeTest
@@ -51,7 +58,7 @@ class NodeTest extends \Test\TestCase {
* @dataProvider davPermissionsProvider
*/
public function testDavPermissions($permissions, $type, $shared, $mounted, $expected) {
- $info = $this->getMockBuilder('\OC\Files\FileInfo')
+ $info = $this->getMockBuilder(FileInfo::class)
->disableOriginalConstructor()
->setMethods(array('getPermissions', 'isShared', 'isMounted', 'getType'))
->getMock();
@@ -67,7 +74,7 @@ class NodeTest extends \Test\TestCase {
$info->expects($this->any())
->method('getType')
->will($this->returnValue($type));
- $view = $this->getMockBuilder('\OC\Files\View')
+ $view = $this->getMockBuilder(View::class)
->disableOriginalConstructor()
->getMock();
@@ -119,17 +126,17 @@ class NodeTest extends \Test\TestCase {
* @dataProvider sharePermissionsProvider
*/
public function testSharePermissions($type, $user, $permissions, $expected) {
- $storage = $this->getMockBuilder('\OCP\Files\Storage')
+ $storage = $this->getMockBuilder(Storage::class)
->disableOriginalConstructor()
->getMock();
$storage->method('getPermissions')->willReturn($permissions);
- $mountpoint = $this->getMockBuilder('\OCP\Files\Mount\IMountPoint')
+ $mountpoint = $this->getMockBuilder(IMountPoint::class)
->disableOriginalConstructor()
->getMock();
$mountpoint->method('getMountPoint')->willReturn('myPath');
- $shareManager = $this->getMockBuilder('OCP\Share\IManager')->disableOriginalConstructor()->getMock();
- $share = $this->getMockBuilder('OCP\Share\IShare')->disableOriginalConstructor()->getMock();
+ $shareManager = $this->getMockBuilder(IManager::class)->disableOriginalConstructor()->getMock();
+ $share = $this->getMockBuilder(IShare::class)->disableOriginalConstructor()->getMock();
if ($user === null) {
$shareManager->expects($this->never())->method('getShareByToken');
@@ -140,7 +147,7 @@ class NodeTest extends \Test\TestCase {
$share->expects($this->once())->method('getPermissions')->willReturn($permissions);
}
- $info = $this->getMockBuilder('\OC\Files\FileInfo')
+ $info = $this->getMockBuilder(FileInfo::class)
->disableOriginalConstructor()
->setMethods(['getStorage', 'getType', 'getMountPoint'])
->getMock();
@@ -149,7 +156,7 @@ class NodeTest extends \Test\TestCase {
$info->method('getType')->willReturn($type);
$info->method('getMountPoint')->willReturn($mountpoint);
- $view = $this->getMockBuilder('\OC\Files\View')
+ $view = $this->getMockBuilder(View::class)
->disableOriginalConstructor()
->getMock();
diff --git a/apps/dav/tests/unit/Connector/Sabre/ObjectTreeTest.php b/apps/dav/tests/unit/Connector/Sabre/ObjectTreeTest.php
index 53f60bd0f1c..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>
@@ -31,6 +30,7 @@ namespace OCA\DAV\Tests\unit\Connector\Sabre;
use OC\Files\FileInfo;
use OC\Files\Filesystem;
+use OC\Files\Mount\Manager;
use OC\Files\Storage\Temporary;
use OC\Files\View;
use OCA\DAV\Connector\Sabre\Directory;
@@ -156,16 +156,16 @@ class ObjectTreeTest extends \Test\TestCase {
$_SERVER['HTTP_OC_CHUNKED'] = true;
}
- $rootNode = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\Directory')
+ $rootNode = $this->getMockBuilder(Directory::class)
->disableOriginalConstructor()
->getMock();
- $mountManager = $this->getMockBuilder('\OC\Files\Mount\Manager')
+ $mountManager = $this->getMockBuilder(Manager::class)
->disableOriginalConstructor()
->getMock();
- $view = $this->getMockBuilder('\OC\Files\View')
+ $view = $this->getMockBuilder(View::class)
->disableOriginalConstructor()
->getMock();
- $fileInfo = $this->getMockBuilder('\OCP\Files\FileInfo')
+ $fileInfo = $this->getMockBuilder(FileInfo::class)
->disableOriginalConstructor()
->getMock();
$fileInfo->expects($this->once())
@@ -275,7 +275,7 @@ class ObjectTreeTest extends \Test\TestCase {
$storage = new Temporary([]);
- $view = $this->getMockBuilder('\OC\Files\View')
+ $view = $this->getMockBuilder(View::class)
->setMethods(['resolvePath'])
->getMock();
$view->expects($this->once())
@@ -284,10 +284,10 @@ class ObjectTreeTest extends \Test\TestCase {
return [$storage, ltrim($path, '/')];
}));
- $rootNode = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\Directory')
+ $rootNode = $this->getMockBuilder(Directory::class)
->disableOriginalConstructor()
->getMock();
- $mountManager = $this->getMockBuilder('\OC\Files\Mount\Manager')
+ $mountManager = $this->getMockBuilder(Manager::class)
->getMock();
$tree = new \OCA\DAV\Connector\Sabre\ObjectTree();
@@ -302,7 +302,7 @@ class ObjectTreeTest extends \Test\TestCase {
$storage = new Temporary([]);
- $view = $this->getMockBuilder('\OC\Files\View')
+ $view = $this->getMockBuilder(View::class)
->setMethods(['resolvePath'])
->getMock();
$view->expects($this->any())
@@ -311,10 +311,10 @@ class ObjectTreeTest extends \Test\TestCase {
return [$storage, ltrim($path, '/')];
}));
- $rootNode = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\Directory')
+ $rootNode = $this->getMockBuilder(Directory::class)
->disableOriginalConstructor()
->getMock();
- $mountManager = $this->getMockBuilder('\OC\Files\Mount\Manager')
+ $mountManager = $this->getMockBuilder(Manager::class)
->getMock();
$tree = new \OCA\DAV\Connector\Sabre\ObjectTree();
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 d29080539e6..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>
@@ -176,7 +177,7 @@ class QuotaPluginTest extends TestCase {
public function testCheckQuotaChunkedOk($quota, $chunkTotalSize, $headers) {
$this->init($quota, 'sub/test.txt');
- $mockChunking = $this->getMockBuilder('\OC_FileChunking')
+ $mockChunking = $this->getMockBuilder(\OC_FileChunking::class)
->disableOriginalConstructor()
->getMock();
$mockChunking->expects($this->once())
@@ -212,7 +213,7 @@ class QuotaPluginTest extends TestCase {
public function testCheckQuotaChunkedFail($quota, $chunkTotalSize, $headers) {
$this->init($quota, 'sub/test.txt');
- $mockChunking = $this->getMockBuilder('\OC_FileChunking')
+ $mockChunking = $this->getMockBuilder(\OC_FileChunking::class)
->disableOriginalConstructor()
->getMock();
$mockChunking->expects($this->once())
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 3f3bf16a422..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>
*
@@ -24,6 +25,8 @@
namespace OCA\DAV\Tests\unit\Connector\Sabre\RequestTest;
+use OCP\IConfig;
+
/**
* Class PartFileInRootUploadTest
*
@@ -34,7 +37,7 @@ namespace OCA\DAV\Tests\unit\Connector\Sabre\RequestTest;
class PartFileInRootUploadTest extends UploadTest {
protected function setUp() {
$config = \OC::$server->getConfig();
- $mockConfig = $this->getMockBuilder('\OCP\IConfig')
+ $mockConfig = $this->getMockBuilder(IConfig::class)
->disableOriginalConstructor()
->getMock();
$mockConfig->expects($this->any())
diff --git a/apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTestCase.php b/apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTestCase.php
index 58a729e18ec..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>
@@ -29,6 +30,7 @@ namespace OCA\DAV\Tests\unit\Connector\Sabre\RequestTest;
use OCA\DAV\Connector\Sabre\Server;
use OCA\DAV\Connector\Sabre\ServerFactory;
use OC\Files\View;
+use OCP\IRequest;
use Sabre\HTTP\Request;
use Test\TestCase;
use Test\Traits\MountProviderTrait;
@@ -62,7 +64,7 @@ abstract class RequestTestCase extends TestCase {
\OC::$server->getUserSession(),
\OC::$server->getMountManager(),
\OC::$server->getTagManager(),
- $this->getMockBuilder('\OCP\IRequest')
+ $this->getMockBuilder(IRequest::class)
->disableOriginalConstructor()
->getMock(),
\OC::$server->getPreviewManager()
diff --git a/apps/dav/tests/unit/Connector/Sabre/SharesPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/SharesPluginTest.php
index 2b4a886050a..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>
*
@@ -23,6 +26,16 @@
*/
namespace OCA\DAV\Tests\unit\Connector\Sabre;
+use OCA\DAV\Connector\Sabre\Directory;
+use OCA\DAV\Connector\Sabre\File;
+use OCA\DAV\Connector\Sabre\Node;
+use OCP\Files\Folder;
+use OCP\IUser;
+use OCP\IUserSession;
+use OCP\Share\IManager;
+use OCP\Share\IShare;
+use Sabre\DAV\Tree;
+
class SharesPluginTest extends \Test\TestCase {
const SHARETYPES_PROPERTYNAME = \OCA\DAV\Connector\Sabre\SharesPlugin::SHARETYPES_PROPERTYNAME;
@@ -55,26 +68,26 @@ class SharesPluginTest extends \Test\TestCase {
public function setUp() {
parent::setUp();
$this->server = new \Sabre\DAV\Server();
- $this->tree = $this->getMockBuilder('\Sabre\DAV\Tree')
+ $this->tree = $this->getMockBuilder(Tree::class)
->disableOriginalConstructor()
->getMock();
- $this->shareManager = $this->getMockBuilder('\OCP\Share\IManager')
+ $this->shareManager = $this->getMockBuilder(IManager::class)
->disableOriginalConstructor()
->getMock();
- $user = $this->getMockBuilder('\OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$user->expects($this->once())
->method('getUID')
->will($this->returnValue('user1'));
- $userSession = $this->getMockBuilder('\OCP\IUserSession')
+ $userSession = $this->getMockBuilder(IUserSession::class)
->disableOriginalConstructor()
->getMock();
$userSession->expects($this->once())
->method('getUser')
->will($this->returnValue($user));
- $this->userFolder = $this->getMockBuilder('\OCP\Files\Folder')
+ $this->userFolder = $this->getMockBuilder(Folder::class)
->disableOriginalConstructor()
->getMock();
@@ -91,7 +104,7 @@ class SharesPluginTest extends \Test\TestCase {
* @dataProvider sharesGetPropertiesDataProvider
*/
public function testGetProperties($shareTypes) {
- $sabreNode = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\Node')
+ $sabreNode = $this->getMockBuilder(Node::class)
->disableOriginalConstructor()
->getMock();
$sabreNode->expects($this->any())
@@ -102,7 +115,7 @@ class SharesPluginTest extends \Test\TestCase {
->will($this->returnValue('/subdir'));
// node API nodes
- $node = $this->getMockBuilder('\OCP\Files\Folder')
+ $node = $this->getMockBuilder(Folder::class)
->disableOriginalConstructor()
->getMock();
@@ -149,7 +162,7 @@ class SharesPluginTest extends \Test\TestCase {
* @dataProvider sharesGetPropertiesDataProvider
*/
public function testPreloadThenGetProperties($shareTypes) {
- $sabreNode1 = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\File')
+ $sabreNode1 = $this->getMockBuilder(File::class)
->disableOriginalConstructor()
->getMock();
$sabreNode1->expects($this->any())
@@ -157,7 +170,7 @@ class SharesPluginTest extends \Test\TestCase {
->will($this->returnValue(111));
$sabreNode1->expects($this->any())
->method('getPath');
- $sabreNode2 = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\File')
+ $sabreNode2 = $this->getMockBuilder(File::class)
->disableOriginalConstructor()
->getMock();
$sabreNode2->expects($this->any())
@@ -167,7 +180,7 @@ class SharesPluginTest extends \Test\TestCase {
->method('getPath')
->will($this->returnValue('/subdir/foo'));
- $sabreNode = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\Directory')
+ $sabreNode = $this->getMockBuilder(Directory::class)
->disableOriginalConstructor()
->getMock();
$sabreNode->expects($this->any())
@@ -181,19 +194,19 @@ class SharesPluginTest extends \Test\TestCase {
->will($this->returnValue('/subdir'));
// node API nodes
- $node = $this->getMockBuilder('\OCP\Files\Folder')
+ $node = $this->getMockBuilder(Folder::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->any())
->method('getId')
->will($this->returnValue(123));
- $node1 = $this->getMockBuilder('\OCP\Files\File')
+ $node1 = $this->getMockBuilder(File::class)
->disableOriginalConstructor()
->getMock();
$node1->expects($this->any())
->method('getId')
->will($this->returnValue(111));
- $node2 = $this->getMockBuilder('\OCP\Files\File')
+ $node2 = $this->getMockBuilder(File::class)
->disableOriginalConstructor()
->getMock();
$node2->expects($this->any())
@@ -206,7 +219,7 @@ class SharesPluginTest extends \Test\TestCase {
->will($this->returnValue($node));
$dummyShares = array_map(function($type) {
- $share = $this->getMockBuilder('\OCP\Share\IShare')->getMock();
+ $share = $this->getMockBuilder(IShare::class)->getMock();
$share->expects($this->any())
->method('getShareType')
->will($this->returnValue($type));
diff --git a/apps/dav/tests/unit/Connector/Sabre/TagsPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/TagsPluginTest.php
index 9189a73f77f..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>
@@ -24,6 +25,13 @@
*/
namespace OCA\DAV\Tests\unit\Connector\Sabre;
+use OCA\DAV\Connector\Sabre\Directory;
+use OCA\DAV\Connector\Sabre\File;
+use OCA\DAV\Connector\Sabre\Node;
+use OCP\ITagManager;
+use OCP\ITags;
+use Sabre\DAV\Tree;
+
/**
* Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or
@@ -42,7 +50,7 @@ class TagsPluginTest extends \Test\TestCase {
private $server;
/**
- * @var \Sabre\DAV\Tree
+ * @var Tree
*/
private $tree;
@@ -64,13 +72,13 @@ class TagsPluginTest extends \Test\TestCase {
public function setUp() {
parent::setUp();
$this->server = new \Sabre\DAV\Server();
- $this->tree = $this->getMockBuilder('\Sabre\DAV\Tree')
+ $this->tree = $this->getMockBuilder(Tree::class)
->disableOriginalConstructor()
->getMock();
- $this->tagger = $this->getMockBuilder('\OCP\ITags')
+ $this->tagger = $this->getMockBuilder(ITags::class)
->disableOriginalConstructor()
->getMock();
- $this->tagManager = $this->getMockBuilder('\OCP\ITagManager')
+ $this->tagManager = $this->getMockBuilder(ITagManager::class)
->disableOriginalConstructor()
->getMock();
$this->tagManager->expects($this->any())
@@ -85,7 +93,7 @@ class TagsPluginTest extends \Test\TestCase {
* @dataProvider tagsGetPropertiesDataProvider
*/
public function testGetProperties($tags, $requestedProperties, $expectedProperties) {
- $node = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\Node')
+ $node = $this->getMockBuilder(Node::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->any())
@@ -124,13 +132,13 @@ class TagsPluginTest extends \Test\TestCase {
* @dataProvider tagsGetPropertiesDataProvider
*/
public function testPreloadThenGetProperties($tags, $requestedProperties, $expectedProperties) {
- $node1 = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\File')
+ $node1 = $this->getMockBuilder(File::class)
->disableOriginalConstructor()
->getMock();
$node1->expects($this->any())
->method('getId')
->will($this->returnValue(111));
- $node2 = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\File')
+ $node2 = $this->getMockBuilder(File::class)
->disableOriginalConstructor()
->getMock();
$node2->expects($this->any())
@@ -145,7 +153,7 @@ class TagsPluginTest extends \Test\TestCase {
$expectedCallCount = 1;
}
- $node = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\Directory')
+ $node = $this->getMockBuilder(Directory::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->any())
@@ -260,7 +268,7 @@ class TagsPluginTest extends \Test\TestCase {
public function testUpdateTags() {
// this test will replace the existing tags "tagremove" with "tag1" and "tag2"
// and keep "tagkeep"
- $node = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\Node')
+ $node = $this->getMockBuilder(Node::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->any())
@@ -311,7 +319,7 @@ class TagsPluginTest extends \Test\TestCase {
}
public function testUpdateTagsFromScratch() {
- $node = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\Node')
+ $node = $this->getMockBuilder(Node::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->any())
@@ -359,7 +367,7 @@ class TagsPluginTest extends \Test\TestCase {
public function testUpdateFav() {
// this test will replace the existing tags "tagremove" with "tag1" and "tag2"
// and keep "tagkeep"
- $node = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\Node')
+ $node = $this->getMockBuilder(Node::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->any())
diff --git a/apps/dav/tests/unit/DAV/BrowserErrorPagePluginTest.php b/apps/dav/tests/unit/DAV/BrowserErrorPagePluginTest.php
index cdeaceefedf..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
@@ -26,6 +27,7 @@ namespace OCA\DAV\Tests\unit\DAV;
use OCA\DAV\Files\BrowserErrorPagePlugin;
use PHPUnit_Framework_MockObject_MockObject;
use Sabre\DAV\Exception\NotFound;
+use Sabre\HTTP\Response;
class BrowserErrorPagePluginTest extends \Test\TestCase {
@@ -36,13 +38,13 @@ class BrowserErrorPagePluginTest extends \Test\TestCase {
*/
public function test($expectedCode, $exception) {
/** @var BrowserErrorPagePlugin | PHPUnit_Framework_MockObject_MockObject $plugin */
- $plugin = $this->getMockBuilder('OCA\DAV\Files\BrowserErrorPagePlugin')->setMethods(['sendResponse', 'generateBody'])->getMock();
+ $plugin = $this->getMockBuilder(BrowserErrorPagePlugin::class)->setMethods(['sendResponse', 'generateBody'])->getMock();
$plugin->expects($this->once())->method('generateBody')->willReturn(':boom:');
$plugin->expects($this->once())->method('sendResponse');
/** @var \Sabre\DAV\Server | PHPUnit_Framework_MockObject_MockObject $server */
$server = $this->getMockBuilder('Sabre\DAV\Server')->disableOriginalConstructor()->getMock();
$server->expects($this->once())->method('on');
- $httpResponse = $this->getMockBuilder('Sabre\HTTP\Response')->disableOriginalConstructor()->getMock();
+ $httpResponse = $this->getMockBuilder(Response::class)->disableOriginalConstructor()->getMock();
$httpResponse->expects($this->once())->method('addHeaders');
$httpResponse->expects($this->once())->method('setStatus')->with($expectedCode);
$httpResponse->expects($this->once())->method('setBody')->with(':boom:');
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 a78ffea5af4..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
@@ -42,7 +48,7 @@ class HookManagerTest extends TestCase {
public function setUp() {
parent::setUp();
- $this->eventDispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcher')->disableOriginalConstructor()->getMock();
+ $this->eventDispatcher = $this->getMockBuilder(EventDispatcher::class)->disableOriginalConstructor()->getMock();
$this->l10n = $this->createMock(IL10N::class);
$this->l10n
->expects($this->any())
diff --git a/apps/dav/tests/unit/DAV/Sharing/PluginTest.php b/apps/dav/tests/unit/DAV/Sharing/PluginTest.php
index c4dae96e52f..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
@@ -47,17 +48,17 @@ class PluginTest extends TestCase {
parent::setUp();
/** @var Auth | \PHPUnit_Framework_MockObject_MockObject $authBackend */
- $authBackend = $this->getMockBuilder('OCA\DAV\Connector\Sabre\Auth')->disableOriginalConstructor()->getMock();
+ $authBackend = $this->getMockBuilder(Auth::class)->disableOriginalConstructor()->getMock();
$authBackend->method('isDavAuthenticated')->willReturn(true);
/** @var IRequest $request */
- $request = $this->getMockBuilder('OCP\IRequest')->disableOriginalConstructor()->getMock();
+ $request = $this->getMockBuilder(IRequest::class)->disableOriginalConstructor()->getMock();
$this->plugin = new Plugin($authBackend, $request);
$root = new SimpleCollection('root');
$this->server = new \Sabre\DAV\Server($root);
/** @var SimpleCollection $node */
- $this->book = $this->getMockBuilder('OCA\DAV\DAV\Sharing\IShareable')->
+ $this->book = $this->getMockBuilder(IShareable::class)->
disableOriginalConstructor()->
getMock();
$this->book->method('getName')->willReturn('addressbook1.vcf');
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 19e75c7b24e..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
*
@@ -26,6 +27,7 @@ namespace OCA\DAV\Tests\unit;
use OCA\DAV\Server;
use OCP\IRequest;
+use OCA\DAV\AppInfo\PluginManager;
/**
* Class ServerTest
@@ -38,8 +40,7 @@ class ServerTest extends \Test\TestCase {
public function test() {
/** @var IRequest $r */
- $r = $this->getMockBuilder('\OCP\IRequest')
- ->disableOriginalConstructor()->getMock();
+ $r = $this->createMock(IRequest::class);
$s = new Server($r, '/');
$this->assertInstanceOf('OCA\DAV\Server', $s);
}
diff --git a/apps/dav/tests/unit/Settings/CalDAVSettingsTest.php b/apps/dav/tests/unit/Settings/CalDAVSettingsTest.php
new file mode 100644
index 00000000000..8ee58107487
--- /dev/null
+++ b/apps/dav/tests/unit/Settings/CalDAVSettingsTest.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * @copyright 2017, Georg Ehrke <oc.list@georgehrke.com>
+ *
+ * @author Georg Ehrke <oc.list@georgehrke.com>
+ *
+ * @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\DAV\Settings;
+
+use OCA\DAV\Settings\CalDAVSettings;
+use OCP\IConfig;
+use Test\TestCase;
+
+class CalDAVSettingsTest extends TestCase {
+
+ /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */
+ private $config;
+
+ /** @var CalDAVSettings */
+ private $settings;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->config = $this->createMock(IConfig::class);
+ $this->settings = new CalDAVSettings($this->config);
+ }
+
+ public function testGetForm() {
+ $result = $this->settings->getForm();
+
+ $this->assertInstanceOf('OCP\AppFramework\Http\TemplateResponse', $result);
+ }
+
+ public function testGetSection() {
+ $this->assertEquals('additional', $this->settings->getSection());
+ }
+
+ public function testGetPriority() {
+ $this->assertEquals(20, $this->settings->getPriority());
+ }
+}
diff --git a/apps/dav/tests/unit/SystemTag/SystemTagMappingNodeTest.php b/apps/dav/tests/unit/SystemTag/SystemTagMappingNodeTest.php
index 1831210546d..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>
*
@@ -25,6 +26,9 @@
namespace OCA\DAV\Tests\unit\SystemTag;
use OC\SystemTag\SystemTag;
+use OCP\IUser;
+use OCP\SystemTag\ISystemTagManager;
+use OCP\SystemTag\ISystemTagObjectMapper;
use OCP\SystemTag\TagNotFoundException;
use OCP\SystemTag\ISystemTag;
@@ -48,11 +52,11 @@ class SystemTagMappingNodeTest extends \Test\TestCase {
protected function setUp() {
parent::setUp();
- $this->tagManager = $this->getMockBuilder('\OCP\SystemTag\ISystemTagManager')
+ $this->tagManager = $this->getMockBuilder(ISystemTagManager::class)
->getMock();
- $this->tagMapper = $this->getMockBuilder('\OCP\SystemTag\ISystemTagObjectMapper')
+ $this->tagMapper = $this->getMockBuilder(ISystemTagObjectMapper::class)
->getMock();
- $this->user = $this->getMockBuilder('\OCP\IUser')
+ $this->user = $this->getMockBuilder(IUser::class)
->getMock();
}
diff --git a/apps/dav/tests/unit/SystemTag/SystemTagNodeTest.php b/apps/dav/tests/unit/SystemTag/SystemTagNodeTest.php
index 3722bd9d25a..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>
*
@@ -26,6 +27,8 @@ namespace OCA\DAV\Tests\unit\SystemTag;
use OC\SystemTag\SystemTag;
+use OCP\IUser;
+use OCP\SystemTag\ISystemTagManager;
use OCP\SystemTag\TagNotFoundException;
use OCP\SystemTag\TagAlreadyExistsException;
use OCP\SystemTag\ISystemTag;
@@ -46,9 +49,9 @@ class SystemTagNodeTest extends \Test\TestCase {
protected function setUp() {
parent::setUp();
- $this->tagManager = $this->getMockBuilder('\OCP\SystemTag\ISystemTagManager')
+ $this->tagManager = $this->getMockBuilder(ISystemTagManager::class)
->getMock();
- $this->user = $this->getMockBuilder('\OCP\IUser')
+ $this->user = $this->getMockBuilder(IUser::class)
->getMock();
}
diff --git a/apps/dav/tests/unit/SystemTag/SystemTagPluginTest.php b/apps/dav/tests/unit/SystemTag/SystemTagPluginTest.php
index fcfa528ac64..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>
*
@@ -27,11 +28,18 @@
namespace OCA\DAV\Tests\unit\SystemTag;
use OC\SystemTag\SystemTag;
+use OCA\DAV\SystemTag\SystemTagNode;
+use OCA\DAV\SystemTag\SystemTagsByIdCollection;
+use OCA\DAV\SystemTag\SystemTagsObjectMappingCollection;
use OCP\IGroupManager;
use OCP\IUserSession;
+use OCP\SystemTag\ISystemTagManager;
use OCP\SystemTag\TagAlreadyExistsException;
use OCP\IUser;
use OCP\SystemTag\ISystemTag;
+use Sabre\DAV\Tree;
+use Sabre\HTTP\RequestInterface;
+use Sabre\HTTP\ResponseInterface;
class SystemTagPluginTest extends \Test\TestCase {
@@ -79,19 +87,19 @@ class SystemTagPluginTest extends \Test\TestCase {
public function setUp() {
parent::setUp();
- $this->tree = $this->getMockBuilder('\Sabre\DAV\Tree')
+ $this->tree = $this->getMockBuilder(Tree::class)
->disableOriginalConstructor()
->getMock();
$this->server = new \Sabre\DAV\Server($this->tree);
- $this->tagManager = $this->getMockBuilder('\OCP\SystemTag\ISystemTagManager')
+ $this->tagManager = $this->getMockBuilder(ISystemTagManager::class)
->getMock();
- $this->groupManager = $this->getMockBuilder('\OCP\IGroupManager')
+ $this->groupManager = $this->getMockBuilder(IGroupManager::class)
->getMock();
- $this->user = $this->getMockBuilder('\OCP\IUser')
+ $this->user = $this->getMockBuilder(IUser::class)
->getMock();
- $this->userSession = $this->getMockBuilder('\OCP\IUserSession')
+ $this->userSession = $this->getMockBuilder(IUserSession::class)
->getMock();
$this->userSession
->expects($this->any())
@@ -189,7 +197,7 @@ class SystemTagPluginTest extends \Test\TestCase {
->with('admin')
->willReturn(true);
- $node = $this->getMockBuilder('\OCA\DAV\SystemTag\SystemTagNode')
+ $node = $this->getMockBuilder(SystemTagNode::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->any())
@@ -244,7 +252,7 @@ class SystemTagPluginTest extends \Test\TestCase {
->with('admin')
->willReturn(false);
- $node = $this->getMockBuilder('\OCA\DAV\SystemTag\SystemTagNode')
+ $node = $this->getMockBuilder(SystemTagNode::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->any())
@@ -279,7 +287,7 @@ class SystemTagPluginTest extends \Test\TestCase {
->with('admin')
->willReturn(true);
- $node = $this->getMockBuilder('\OCA\DAV\SystemTag\SystemTagNode')
+ $node = $this->getMockBuilder(SystemTagNode::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->any())
@@ -337,7 +345,7 @@ class SystemTagPluginTest extends \Test\TestCase {
->with('admin')
->willReturn(false);
- $node = $this->getMockBuilder('\OCA\DAV\SystemTag\SystemTagNode')
+ $node = $this->getMockBuilder(SystemTagNode::class)
->disableOriginalConstructor()
->getMock();
$node->expects($this->any())
@@ -400,7 +408,7 @@ class SystemTagPluginTest extends \Test\TestCase {
}
$requestData = json_encode($requestData);
- $node = $this->getMockBuilder('\OCA\DAV\SystemTag\SystemTagsByIdCollection')
+ $node = $this->getMockBuilder(SystemTagsByIdCollection::class)
->disableOriginalConstructor()
->getMock();
$this->tagManager->expects($this->never())
@@ -413,10 +421,10 @@ class SystemTagPluginTest extends \Test\TestCase {
->with('/systemtags')
->will($this->returnValue($node));
- $request = $this->getMockBuilder('Sabre\HTTP\RequestInterface')
+ $request = $this->getMockBuilder(RequestInterface::class)
->disableOriginalConstructor()
->getMock();
- $response = $this->getMockBuilder('Sabre\HTTP\ResponseInterface')
+ $response = $this->getMockBuilder(ResponseInterface::class)
->disableOriginalConstructor()
->getMock();
@@ -445,7 +453,7 @@ class SystemTagPluginTest extends \Test\TestCase {
'userAssignable' => true,
]);
- $node = $this->getMockBuilder('\OCA\DAV\SystemTag\SystemTagsByIdCollection')
+ $node = $this->getMockBuilder(SystemTagsByIdCollection::class)
->disableOriginalConstructor()
->getMock();
$this->tagManager->expects($this->once())
@@ -458,10 +466,10 @@ class SystemTagPluginTest extends \Test\TestCase {
->with('/systemtags')
->will($this->returnValue($node));
- $request = $this->getMockBuilder('Sabre\HTTP\RequestInterface')
+ $request = $this->getMockBuilder(RequestInterface::class)
->disableOriginalConstructor()
->getMock();
- $response = $this->getMockBuilder('Sabre\HTTP\ResponseInterface')
+ $response = $this->getMockBuilder(ResponseInterface::class)
->disableOriginalConstructor()
->getMock();
@@ -522,7 +530,7 @@ class SystemTagPluginTest extends \Test\TestCase {
}
$requestData = json_encode($requestData);
- $node = $this->getMockBuilder('\OCA\DAV\SystemTag\SystemTagsByIdCollection')
+ $node = $this->getMockBuilder(SystemTagsByIdCollection::class)
->disableOriginalConstructor()
->getMock();
$this->tagManager->expects($this->once())
@@ -545,10 +553,10 @@ class SystemTagPluginTest extends \Test\TestCase {
->with('/systemtags')
->will($this->returnValue($node));
- $request = $this->getMockBuilder('Sabre\HTTP\RequestInterface')
+ $request = $this->getMockBuilder(RequestInterface::class)
->disableOriginalConstructor()
->getMock();
- $response = $this->getMockBuilder('Sabre\HTTP\ResponseInterface')
+ $response = $this->getMockBuilder(ResponseInterface::class)
->disableOriginalConstructor()
->getMock();
@@ -601,7 +609,7 @@ class SystemTagPluginTest extends \Test\TestCase {
'userAssignable' => false,
]);
- $node = $this->getMockBuilder('\OCA\DAV\SystemTag\SystemTagsObjectMappingCollection')
+ $node = $this->getMockBuilder(SystemTagsObjectMappingCollection::class)
->disableOriginalConstructor()
->getMock();
@@ -619,10 +627,10 @@ class SystemTagPluginTest extends \Test\TestCase {
->method('createFile')
->with(1);
- $request = $this->getMockBuilder('Sabre\HTTP\RequestInterface')
+ $request = $this->getMockBuilder(RequestInterface::class)
->disableOriginalConstructor()
->getMock();
- $response = $this->getMockBuilder('Sabre\HTTP\ResponseInterface')
+ $response = $this->getMockBuilder(ResponseInterface::class)
->disableOriginalConstructor()
->getMock();
@@ -654,7 +662,7 @@ class SystemTagPluginTest extends \Test\TestCase {
* @expectedException \Sabre\DAV\Exception\NotFound
*/
public function testCreateTagToUnknownNode() {
- $node = $this->getMockBuilder('\OCA\DAV\SystemTag\SystemTagsObjectMappingCollection')
+ $node = $this->getMockBuilder(SystemTagsObjectMappingCollection::class)
->disableOriginalConstructor()
->getMock();
@@ -668,10 +676,10 @@ class SystemTagPluginTest extends \Test\TestCase {
$node->expects($this->never())
->method('createFile');
- $request = $this->getMockBuilder('Sabre\HTTP\RequestInterface')
+ $request = $this->getMockBuilder(RequestInterface::class)
->disableOriginalConstructor()
->getMock();
- $response = $this->getMockBuilder('Sabre\HTTP\ResponseInterface')
+ $response = $this->getMockBuilder(ResponseInterface::class)
->disableOriginalConstructor()
->getMock();
@@ -715,10 +723,10 @@ class SystemTagPluginTest extends \Test\TestCase {
->with('/systemtags')
->will($this->returnValue($node));
- $request = $this->getMockBuilder('Sabre\HTTP\RequestInterface')
+ $request = $this->getMockBuilder(RequestInterface::class)
->disableOriginalConstructor()
->getMock();
- $response = $this->getMockBuilder('Sabre\HTTP\ResponseInterface')
+ $response = $this->getMockBuilder(ResponseInterface::class)
->disableOriginalConstructor()
->getMock();
diff --git a/apps/dav/tests/unit/SystemTag/SystemTagsByIdCollectionTest.php b/apps/dav/tests/unit/SystemTag/SystemTagsByIdCollectionTest.php
index 73431393071..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>
*
@@ -26,6 +27,10 @@ namespace OCA\DAV\Tests\unit\SystemTag;
use OC\SystemTag\SystemTag;
+use OCP\IGroupManager;
+use OCP\IUser;
+use OCP\IUserSession;
+use OCP\SystemTag\ISystemTagManager;
use OCP\SystemTag\TagNotFoundException;
class SystemTagsByIdCollectionTest extends \Test\TestCase {
@@ -43,22 +48,22 @@ class SystemTagsByIdCollectionTest extends \Test\TestCase {
protected function setUp() {
parent::setUp();
- $this->tagManager = $this->getMockBuilder('\OCP\SystemTag\ISystemTagManager')
+ $this->tagManager = $this->getMockBuilder(ISystemTagManager::class)
->getMock();
}
public function getNode($isAdmin = true) {
- $this->user = $this->getMockBuilder('\OCP\IUser')
+ $this->user = $this->getMockBuilder(IUser::class)
->getMock();
$this->user->expects($this->any())
->method('getUID')
->will($this->returnValue('testuser'));
- $userSession = $this->getMockBuilder('\OCP\IUserSession')
+ $userSession = $this->getMockBuilder(IUserSession::class)
->getMock();
$userSession->expects($this->any())
->method('getUser')
->will($this->returnValue($this->user));
- $groupManager = $this->getMockBuilder('\OCP\IGroupManager')
+ $groupManager = $this->getMockBuilder(IGroupManager::class)
->getMock();
$groupManager->expects($this->any())
->method('isAdmin')
diff --git a/apps/dav/tests/unit/SystemTag/SystemTagsObjectMappingCollectionTest.php b/apps/dav/tests/unit/SystemTag/SystemTagsObjectMappingCollectionTest.php
index 9aa35c2ab24..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>
*
@@ -26,6 +27,9 @@ namespace OCA\DAV\Tests\unit\SystemTag;
use OC\SystemTag\SystemTag;
+use OCP\IUser;
+use OCP\SystemTag\ISystemTagManager;
+use OCP\SystemTag\ISystemTagObjectMapper;
use OCP\SystemTag\TagNotFoundException;
class SystemTagsObjectMappingCollectionTest extends \Test\TestCase {
@@ -48,12 +52,12 @@ class SystemTagsObjectMappingCollectionTest extends \Test\TestCase {
protected function setUp() {
parent::setUp();
- $this->tagManager = $this->getMockBuilder('\OCP\SystemTag\ISystemTagManager')
+ $this->tagManager = $this->getMockBuilder(ISystemTagManager::class)
->getMock();
- $this->tagMapper = $this->getMockBuilder('\OCP\SystemTag\ISystemTagObjectMapper')
+ $this->tagMapper = $this->getMockBuilder(ISystemTagObjectMapper::class)
->getMock();
- $this->user = $this->getMockBuilder('\OCP\IUser')
+ $this->user = $this->getMockBuilder(IUser::class)
->getMock();
}
diff --git a/apps/dav/tests/unit/SystemTag/SystemTagsObjectTypeCollectionTest.php b/apps/dav/tests/unit/SystemTag/SystemTagsObjectTypeCollectionTest.php
index 0c065d3451a..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>
*
@@ -24,6 +25,13 @@
namespace OCA\DAV\Tests\unit\SystemTag;
+use OCP\Files\Folder;
+use OCP\IGroupManager;
+use OCP\IUser;
+use OCP\IUserSession;
+use OCP\SystemTag\ISystemTagManager;
+use OCP\SystemTag\ISystemTagObjectMapper;
+
class SystemTagsObjectTypeCollectionTest extends \Test\TestCase {
/**
@@ -49,29 +57,29 @@ class SystemTagsObjectTypeCollectionTest extends \Test\TestCase {
protected function setUp() {
parent::setUp();
- $this->tagManager = $this->getMockBuilder('\OCP\SystemTag\ISystemTagManager')
+ $this->tagManager = $this->getMockBuilder(ISystemTagManager::class)
->getMock();
- $this->tagMapper = $this->getMockBuilder('\OCP\SystemTag\ISystemTagObjectMapper')
+ $this->tagMapper = $this->getMockBuilder(ISystemTagObjectMapper::class)
->getMock();
- $user = $this->getMockBuilder('\OCP\IUser')
+ $user = $this->getMockBuilder(IUser::class)
->getMock();
$user->expects($this->any())
->method('getUID')
->will($this->returnValue('testuser'));
- $userSession = $this->getMockBuilder('\OCP\IUserSession')
+ $userSession = $this->getMockBuilder(IUserSession::class)
->getMock();
$userSession->expects($this->any())
->method('getUser')
->will($this->returnValue($user));
- $groupManager = $this->getMockBuilder('\OCP\IGroupManager')
+ $groupManager = $this->getMockBuilder(IGroupManager::class)
->getMock();
$groupManager->expects($this->any())
->method('isAdmin')
->with('testuser')
->will($this->returnValue(true));
- $this->userFolder = $this->getMockBuilder('\OCP\Files\Folder')
+ $this->userFolder = $this->getMockBuilder(Folder::class)
->getMock();
$userFolder = $this->userFolder;
diff --git a/apps/dav/tests/unit/Upload/AssemblyStreamTest.php b/apps/dav/tests/unit/Upload/AssemblyStreamTest.php
index 69ee52299e9..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
*
@@ -23,6 +26,8 @@
*/
namespace OCA\DAV\Tests\unit\Upload;
+use Sabre\DAV\File;
+
class AssemblyStreamTest extends \Test\TestCase {
/**
@@ -120,7 +125,7 @@ class AssemblyStreamTest extends \Test\TestCase {
}
private function buildNode($name, $data) {
- $node = $this->getMockBuilder('\Sabre\DAV\File')
+ $node = $this->getMockBuilder(File::class)
->setMethods(['getName', 'get', 'getSize'])
->getMockForAbstractClass();
diff --git a/apps/dav/tests/unit/Upload/FutureFileTest.php b/apps/dav/tests/unit/Upload/FutureFileTest.php
index d94f14ab097..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
@@ -23,6 +24,8 @@
*/
namespace OCA\DAV\Tests\unit\Upload;
+use OCA\DAV\Connector\Sabre\Directory;
+
class FutureFileTest extends \Test\TestCase {
public function testGetContentType() {
@@ -57,7 +60,7 @@ class FutureFileTest extends \Test\TestCase {
}
public function testDelete() {
- $d = $this->getMockBuilder('OCA\DAV\Connector\Sabre\Directory')
+ $d = $this->getMockBuilder(Directory::class)
->disableOriginalConstructor()
->setMethods(['delete'])
->getMock();
@@ -89,7 +92,7 @@ class FutureFileTest extends \Test\TestCase {
* @return \OCA\DAV\Upload\FutureFile
*/
private function mockFutureFile() {
- $d = $this->getMockBuilder('OCA\DAV\Connector\Sabre\Directory')
+ $d = $this->getMockBuilder(Directory::class)
->disableOriginalConstructor()
->setMethods(['getETag', 'getLastModified', 'getChildren'])
->getMock();
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/composer/autoload.php b/apps/encryption/composer/autoload.php
new file mode 100644
index 00000000000..52febf19470
--- /dev/null
+++ b/apps/encryption/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitEncryption::getLoader();
diff --git a/apps/encryption/composer/composer.json b/apps/encryption/composer/composer.json
new file mode 100644
index 00000000000..5b38c9dc683
--- /dev/null
+++ b/apps/encryption/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "Encryption"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\Encryption\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/encryption/composer/composer/ClassLoader.php b/apps/encryption/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/encryption/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/encryption/composer/composer/LICENSE b/apps/encryption/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/encryption/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/encryption/composer/composer/autoload_classmap.php b/apps/encryption/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..7ab0056cc8c
--- /dev/null
+++ b/apps/encryption/composer/composer/autoload_classmap.php
@@ -0,0 +1,36 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Encryption\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\Encryption\\Command\\DisableMasterKey' => $baseDir . '/../lib/Command/DisableMasterKey.php',
+ 'OCA\\Encryption\\Command\\EnableMasterKey' => $baseDir . '/../lib/Command/EnableMasterKey.php',
+ 'OCA\\Encryption\\Command\\MigrateKeys' => $baseDir . '/../lib/Command/MigrateKeys.php',
+ 'OCA\\Encryption\\Controller\\RecoveryController' => $baseDir . '/../lib/Controller/RecoveryController.php',
+ 'OCA\\Encryption\\Controller\\SettingsController' => $baseDir . '/../lib/Controller/SettingsController.php',
+ 'OCA\\Encryption\\Controller\\StatusController' => $baseDir . '/../lib/Controller/StatusController.php',
+ 'OCA\\Encryption\\Crypto\\Crypt' => $baseDir . '/../lib/Crypto/Crypt.php',
+ 'OCA\\Encryption\\Crypto\\DecryptAll' => $baseDir . '/../lib/Crypto/DecryptAll.php',
+ 'OCA\\Encryption\\Crypto\\EncryptAll' => $baseDir . '/../lib/Crypto/EncryptAll.php',
+ 'OCA\\Encryption\\Crypto\\Encryption' => $baseDir . '/../lib/Crypto/Encryption.php',
+ 'OCA\\Encryption\\Exceptions\\MultiKeyDecryptException' => $baseDir . '/../lib/Exceptions/MultiKeyDecryptException.php',
+ 'OCA\\Encryption\\Exceptions\\MultiKeyEncryptException' => $baseDir . '/../lib/Exceptions/MultiKeyEncryptException.php',
+ 'OCA\\Encryption\\Exceptions\\PrivateKeyMissingException' => $baseDir . '/../lib/Exceptions/PrivateKeyMissingException.php',
+ 'OCA\\Encryption\\Exceptions\\PublicKeyMissingException' => $baseDir . '/../lib/Exceptions/PublicKeyMissingException.php',
+ 'OCA\\Encryption\\HookManager' => $baseDir . '/../lib/HookManager.php',
+ 'OCA\\Encryption\\Hooks\\Contracts\\IHook' => $baseDir . '/../lib/Hooks/Contracts/IHook.php',
+ 'OCA\\Encryption\\Hooks\\UserHooks' => $baseDir . '/../lib/Hooks/UserHooks.php',
+ 'OCA\\Encryption\\KeyManager' => $baseDir . '/../lib/KeyManager.php',
+ 'OCA\\Encryption\\Migration' => $baseDir . '/../lib/Migration.php',
+ 'OCA\\Encryption\\Migration\\SetMasterKeyStatus' => $baseDir . '/../lib/Migration/SetMasterKeyStatus.php',
+ 'OCA\\Encryption\\Recovery' => $baseDir . '/../lib/Recovery.php',
+ 'OCA\\Encryption\\Session' => $baseDir . '/../lib/Session.php',
+ 'OCA\\Encryption\\Settings\\Admin' => $baseDir . '/../lib/Settings/Admin.php',
+ 'OCA\\Encryption\\Settings\\Personal' => $baseDir . '/../lib/Settings/Personal.php',
+ 'OCA\\Encryption\\Users\\Setup' => $baseDir . '/../lib/Users/Setup.php',
+ 'OCA\\Encryption\\Util' => $baseDir . '/../lib/Util.php',
+);
diff --git a/apps/encryption/composer/composer/autoload_namespaces.php b/apps/encryption/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/encryption/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/encryption/composer/composer/autoload_psr4.php b/apps/encryption/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..6baeba923d6
--- /dev/null
+++ b/apps/encryption/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Encryption\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/encryption/composer/composer/autoload_real.php b/apps/encryption/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..fae90387a09
--- /dev/null
+++ b/apps/encryption/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitEncryption
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitEncryption', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitEncryption', 'loadClassLoader'));
+
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitEncryption::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/encryption/composer/composer/autoload_static.php b/apps/encryption/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..b3ec7c52fe8
--- /dev/null
+++ b/apps/encryption/composer/composer/autoload_static.php
@@ -0,0 +1,62 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitEncryption
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\Encryption\\' => 15,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\Encryption\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\Encryption\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\Encryption\\Command\\DisableMasterKey' => __DIR__ . '/..' . '/../lib/Command/DisableMasterKey.php',
+ 'OCA\\Encryption\\Command\\EnableMasterKey' => __DIR__ . '/..' . '/../lib/Command/EnableMasterKey.php',
+ 'OCA\\Encryption\\Command\\MigrateKeys' => __DIR__ . '/..' . '/../lib/Command/MigrateKeys.php',
+ 'OCA\\Encryption\\Controller\\RecoveryController' => __DIR__ . '/..' . '/../lib/Controller/RecoveryController.php',
+ 'OCA\\Encryption\\Controller\\SettingsController' => __DIR__ . '/..' . '/../lib/Controller/SettingsController.php',
+ 'OCA\\Encryption\\Controller\\StatusController' => __DIR__ . '/..' . '/../lib/Controller/StatusController.php',
+ 'OCA\\Encryption\\Crypto\\Crypt' => __DIR__ . '/..' . '/../lib/Crypto/Crypt.php',
+ 'OCA\\Encryption\\Crypto\\DecryptAll' => __DIR__ . '/..' . '/../lib/Crypto/DecryptAll.php',
+ 'OCA\\Encryption\\Crypto\\EncryptAll' => __DIR__ . '/..' . '/../lib/Crypto/EncryptAll.php',
+ 'OCA\\Encryption\\Crypto\\Encryption' => __DIR__ . '/..' . '/../lib/Crypto/Encryption.php',
+ 'OCA\\Encryption\\Exceptions\\MultiKeyDecryptException' => __DIR__ . '/..' . '/../lib/Exceptions/MultiKeyDecryptException.php',
+ 'OCA\\Encryption\\Exceptions\\MultiKeyEncryptException' => __DIR__ . '/..' . '/../lib/Exceptions/MultiKeyEncryptException.php',
+ 'OCA\\Encryption\\Exceptions\\PrivateKeyMissingException' => __DIR__ . '/..' . '/../lib/Exceptions/PrivateKeyMissingException.php',
+ 'OCA\\Encryption\\Exceptions\\PublicKeyMissingException' => __DIR__ . '/..' . '/../lib/Exceptions/PublicKeyMissingException.php',
+ 'OCA\\Encryption\\HookManager' => __DIR__ . '/..' . '/../lib/HookManager.php',
+ 'OCA\\Encryption\\Hooks\\Contracts\\IHook' => __DIR__ . '/..' . '/../lib/Hooks/Contracts/IHook.php',
+ 'OCA\\Encryption\\Hooks\\UserHooks' => __DIR__ . '/..' . '/../lib/Hooks/UserHooks.php',
+ 'OCA\\Encryption\\KeyManager' => __DIR__ . '/..' . '/../lib/KeyManager.php',
+ 'OCA\\Encryption\\Migration' => __DIR__ . '/..' . '/../lib/Migration.php',
+ 'OCA\\Encryption\\Migration\\SetMasterKeyStatus' => __DIR__ . '/..' . '/../lib/Migration/SetMasterKeyStatus.php',
+ 'OCA\\Encryption\\Recovery' => __DIR__ . '/..' . '/../lib/Recovery.php',
+ 'OCA\\Encryption\\Session' => __DIR__ . '/..' . '/../lib/Session.php',
+ 'OCA\\Encryption\\Settings\\Admin' => __DIR__ . '/..' . '/../lib/Settings/Admin.php',
+ 'OCA\\Encryption\\Settings\\Personal' => __DIR__ . '/..' . '/../lib/Settings/Personal.php',
+ 'OCA\\Encryption\\Users\\Setup' => __DIR__ . '/..' . '/../lib/Users/Setup.php',
+ 'OCA\\Encryption\\Util' => __DIR__ . '/..' . '/../lib/Util.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitEncryption::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitEncryption::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitEncryption::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/encryption/l10n/es_CO.js b/apps/encryption/l10n/es_CO.js
new file mode 100644
index 00000000000..424b1f9313f
--- /dev/null
+++ b/apps/encryption/l10n/es_CO.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_CO.json b/apps/encryption/l10n/es_CO.json
new file mode 100644
index 00000000000..dabe0c4c41f
--- /dev/null
+++ b/apps/encryption/l10n/es_CO.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/es_CR.js b/apps/encryption/l10n/es_CR.js
new file mode 100644
index 00000000000..424b1f9313f
--- /dev/null
+++ b/apps/encryption/l10n/es_CR.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_CR.json b/apps/encryption/l10n/es_CR.json
new file mode 100644
index 00000000000..dabe0c4c41f
--- /dev/null
+++ b/apps/encryption/l10n/es_CR.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/es_DO.js b/apps/encryption/l10n/es_DO.js
new file mode 100644
index 00000000000..424b1f9313f
--- /dev/null
+++ b/apps/encryption/l10n/es_DO.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_DO.json b/apps/encryption/l10n/es_DO.json
new file mode 100644
index 00000000000..dabe0c4c41f
--- /dev/null
+++ b/apps/encryption/l10n/es_DO.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/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/eu.js b/apps/encryption/l10n/eu.js
index 1c8bdf4fa04..8a256e2de16 100644
--- a/apps/encryption/l10n/eu.js
+++ b/apps/encryption/l10n/eu.js
@@ -8,23 +8,48 @@ OC.L10N.register(
"Could not enable recovery key. Please check your recovery key password!" : "Ezin da berreskuratze gako gaitu. Egiaztatu berreskuratze gako pasahitza!",
"Recovery key successfully disabled" : "Berreskuratze gakoa behar bezala desgaitu da",
"Could not disable recovery key. Please check your recovery key password!" : "Ezin da berreskuratze gako desgaitu. Egiaztatu berreskuratze gako pasahitza!",
+ "Missing parameters" : "Parametroak faltan",
"Please provide the old recovery password" : "Mesedez sartu berreskuratze pasahitz zaharra",
"Please provide a new recovery password" : "Mesedez sartu berreskuratze pasahitz berria",
"Please repeat the new recovery password" : "Mesedez errepikatu berreskuratze pasahitz berria",
"Password successfully changed." : "Pasahitza behar bezala aldatu da.",
"Could not change the password. Maybe the old password was not correct." : "Ezin izan da pasahitza aldatu. Agian pasahitz zaharra okerrekoa da.",
+ "Recovery Key disabled" : "Berreskuratze gakoa desgaituta",
+ "Recovery Key enabled" : "Berreskuratze gakoa gaituta",
+ "Could not enable the recovery key, please try again or contact your administrator" : "Ezin da berreskuratze gakoa gaitu, saia zaitez berriz mesedez edo zureadministratzailearekin kontaktuan jarri",
"Could not update the private key password." : "Ezin izan da gako pribatu pasahitza eguneratu. ",
"The old password was not correct, please try again." : "Pasahitz zaharra ez da egokia. Mesedez, saiatu berriro.",
"The current log-in password was not correct, please try again." : "Oraingo pasahitza ez da egokia. Mesedez, saiatu berriro.",
"Private key password successfully updated." : "Gako pasahitz pribatu behar bezala eguneratu da.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Enkriptazio aplikaziorako gako pribatu okerra. Mesedez eguneratu zure gako pribatuaren pasahitza zure ezarpen pertsonaletan zure enkriptatuko fitxategietarako sarrera berreskuratzeko.",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Enkriptazio aplikazioa gaituta dago baina zure gakoak ez daude konfiguratuta, mesedez saioa bukatu eta berriro hasi",
+ "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" : "Zure enkriptatze gakoak enkriptatze zaharretik (ownCloud <=8.0) berrira migratubehar duzu. 'occ encryption:migrate' exekuta ezazu mesedez, edo zure administratzailearekin kontaktuan jar zaitez",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Enkriptazio aplikaziorako gako pribatu desegokia. Zure gako pribatuaren pasahitza eguneratuezarpen pertsonaletan, enkriptatutako fitxategiak berriz atzitu nahi badituzu",
+ "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "Enkriptazioa app-a gaituta dago, baina zure gakoak ez dira hasieratu. Saiotikirten eta berriz sartu, mesedez",
+ "Please enable server side encryption in the admin settings in order to use the encryption module." : "Enkriptazio modulua erabili ahal izateko zerbitzariaren aldean enkriptazioagaitu administrazio ezarpenetan",
+ "Encryption app is enabled and ready" : "Enkriptazioa app-a gaituta eta martxan dago",
+ "Bad Signature" : "Sinadura ezegokia",
+ "Missing Signature" : "Sinadura falta da",
+ "one-time password for server-side-encryption" : "aldi bateko pasahitzak zerbitzari-aldeko enkriptaziorako",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ezin izan da fitxategi hau deszifratu, ziurrenik elkarbanatutako fitxategi bat da. Mesdez, eskatu fitxategiaren jabeari fitxategia zurekin berriz elkarbana dezan.",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ezin da fitxategi hau irakurri, ziur aski partekatutako fitxategia izango da. Fitxategiaren jabeari berriz partekatzeko eska iezaiozu",
+ "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" : "Kaixo\n\nadministradoreak zerbitzari-aldeko enkriptazioa gaitu du. Zure fitxategiak '%s' pasahitza erabiliz enkriptatuko dira.\n\nWeb interfazea saioa hasi, 'oinarrizko enkripazio modulua' atalera joan zaitez eta pasahitza eguneratu. Hortarako pasahitz zaharra 'pasahitz zaharra' atalean sartu eta zure oraingo pasahitza",
"The share will expire on %s." : "Elkarbanaketa %s-n iraungiko da.",
"Cheers!" : "Ongi izan!",
+ "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>" : "Kaixo<br><br>administradoreak zerbitzari-aldeko enkriptazioa gaitu du. Zure fitxategiak '%s' pasahitza erabiliz enkriptatuko dira.\n\nWeb interfazea saioa hasi, 'oinarrizko enkripazio modulua' atalera joan zaitez eta pasahitza eguneratu. Hortarako pasahitz zaharra 'pasahitz zaharra' atalean sartu eta zure oraingo pasahitza",
+ "Default encryption module" : "Defektuzko enkriptazio modulua",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Enkriptazio app-a gaituta dago baina zure gakoak ez dira hasieratu, mesedez saiotik irteneta berriz sar zaitez",
+ "Encrypt the home storage" : "Etxe-biltegia enkriptatu",
+ "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Aukera hau gaituz gero biltegi orokorreko fitxategi guztiak enkriptatuko dirabestela kanpo biltegian daudenak bakarrik enkriptatuko dira",
+ "Enable recovery key" : "Berreskuratze gakoa gaitu",
+ "Disable recovery key" : "Berreskuratze gakoa desgaitu",
+ "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." : "Berreskuratze gakoa fitxategiak enkriptatzeko gako extra bat da.Erabiltzailearen fitxategiak berreskuratzea baimentzen du bere pasahitzagalduz gero.",
"Recovery key password" : "Berreskuratze gako pasahitza",
+ "Repeat recovery key password" : "Berreskuratze gakoaren pasahitza errepikatu",
"Change recovery key password:" : "Aldatu berreskuratze gako pasahitza:",
+ "Old recovery key password" : "Berreskuratze gako zaharraren pasahitza",
+ "New recovery key password" : "Berreskuratze gako berriaren pasahitza",
+ "Repeat new recovery key password" : "Berreskuratze gakoaren pasahitz berria errepikatu",
"Change Password" : "Aldatu Pasahitza",
+ "Basic encryption module" : "Oinarrizko enkriptazio modulua",
"Your private key password no longer matches your log-in password." : "Zure gako pasahitza pribatua ez da dagoeneko bat etortzen zure sartzeko pasahitzarekin.",
"Set your old private key password to your current log-in password:" : "Ezarri zure gako pasahitz zaharra orain duzun sartzeko pasahitzan:",
" If you don't remember your old password you can ask your administrator to recover your files." : "Ez baduzu zure pasahitz zaharra gogoratzen eskatu zure administratzaileari zure fitxategiak berreskuratzeko.",
@@ -34,6 +59,7 @@ OC.L10N.register(
"Enable password recovery:" : "Gaitu pasahitzaren berreskuratzea:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Aukera hau gaituz zure enkriptatutako fitxategiak berreskuratu ahal izango dituzu pasahitza galtzekotan",
"Enabled" : "Gaitua",
- "Disabled" : "Ez-gaitua"
+ "Disabled" : "Ez-gaitua",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Enkriptazio aplikazioa gaituta dago baina zure gakoak ez daude konfiguratuta, mesedez saioa bukatu eta berriro hasi"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/encryption/l10n/eu.json b/apps/encryption/l10n/eu.json
index 0c07ebd477f..e684651f837 100644
--- a/apps/encryption/l10n/eu.json
+++ b/apps/encryption/l10n/eu.json
@@ -6,23 +6,48 @@
"Could not enable recovery key. Please check your recovery key password!" : "Ezin da berreskuratze gako gaitu. Egiaztatu berreskuratze gako pasahitza!",
"Recovery key successfully disabled" : "Berreskuratze gakoa behar bezala desgaitu da",
"Could not disable recovery key. Please check your recovery key password!" : "Ezin da berreskuratze gako desgaitu. Egiaztatu berreskuratze gako pasahitza!",
+ "Missing parameters" : "Parametroak faltan",
"Please provide the old recovery password" : "Mesedez sartu berreskuratze pasahitz zaharra",
"Please provide a new recovery password" : "Mesedez sartu berreskuratze pasahitz berria",
"Please repeat the new recovery password" : "Mesedez errepikatu berreskuratze pasahitz berria",
"Password successfully changed." : "Pasahitza behar bezala aldatu da.",
"Could not change the password. Maybe the old password was not correct." : "Ezin izan da pasahitza aldatu. Agian pasahitz zaharra okerrekoa da.",
+ "Recovery Key disabled" : "Berreskuratze gakoa desgaituta",
+ "Recovery Key enabled" : "Berreskuratze gakoa gaituta",
+ "Could not enable the recovery key, please try again or contact your administrator" : "Ezin da berreskuratze gakoa gaitu, saia zaitez berriz mesedez edo zureadministratzailearekin kontaktuan jarri",
"Could not update the private key password." : "Ezin izan da gako pribatu pasahitza eguneratu. ",
"The old password was not correct, please try again." : "Pasahitz zaharra ez da egokia. Mesedez, saiatu berriro.",
"The current log-in password was not correct, please try again." : "Oraingo pasahitza ez da egokia. Mesedez, saiatu berriro.",
"Private key password successfully updated." : "Gako pasahitz pribatu behar bezala eguneratu da.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Enkriptazio aplikaziorako gako pribatu okerra. Mesedez eguneratu zure gako pribatuaren pasahitza zure ezarpen pertsonaletan zure enkriptatuko fitxategietarako sarrera berreskuratzeko.",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Enkriptazio aplikazioa gaituta dago baina zure gakoak ez daude konfiguratuta, mesedez saioa bukatu eta berriro hasi",
+ "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" : "Zure enkriptatze gakoak enkriptatze zaharretik (ownCloud <=8.0) berrira migratubehar duzu. 'occ encryption:migrate' exekuta ezazu mesedez, edo zure administratzailearekin kontaktuan jar zaitez",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Enkriptazio aplikaziorako gako pribatu desegokia. Zure gako pribatuaren pasahitza eguneratuezarpen pertsonaletan, enkriptatutako fitxategiak berriz atzitu nahi badituzu",
+ "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "Enkriptazioa app-a gaituta dago, baina zure gakoak ez dira hasieratu. Saiotikirten eta berriz sartu, mesedez",
+ "Please enable server side encryption in the admin settings in order to use the encryption module." : "Enkriptazio modulua erabili ahal izateko zerbitzariaren aldean enkriptazioagaitu administrazio ezarpenetan",
+ "Encryption app is enabled and ready" : "Enkriptazioa app-a gaituta eta martxan dago",
+ "Bad Signature" : "Sinadura ezegokia",
+ "Missing Signature" : "Sinadura falta da",
+ "one-time password for server-side-encryption" : "aldi bateko pasahitzak zerbitzari-aldeko enkriptaziorako",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ezin izan da fitxategi hau deszifratu, ziurrenik elkarbanatutako fitxategi bat da. Mesdez, eskatu fitxategiaren jabeari fitxategia zurekin berriz elkarbana dezan.",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ezin da fitxategi hau irakurri, ziur aski partekatutako fitxategia izango da. Fitxategiaren jabeari berriz partekatzeko eska iezaiozu",
+ "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" : "Kaixo\n\nadministradoreak zerbitzari-aldeko enkriptazioa gaitu du. Zure fitxategiak '%s' pasahitza erabiliz enkriptatuko dira.\n\nWeb interfazea saioa hasi, 'oinarrizko enkripazio modulua' atalera joan zaitez eta pasahitza eguneratu. Hortarako pasahitz zaharra 'pasahitz zaharra' atalean sartu eta zure oraingo pasahitza",
"The share will expire on %s." : "Elkarbanaketa %s-n iraungiko da.",
"Cheers!" : "Ongi izan!",
+ "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>" : "Kaixo<br><br>administradoreak zerbitzari-aldeko enkriptazioa gaitu du. Zure fitxategiak '%s' pasahitza erabiliz enkriptatuko dira.\n\nWeb interfazea saioa hasi, 'oinarrizko enkripazio modulua' atalera joan zaitez eta pasahitza eguneratu. Hortarako pasahitz zaharra 'pasahitz zaharra' atalean sartu eta zure oraingo pasahitza",
+ "Default encryption module" : "Defektuzko enkriptazio modulua",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Enkriptazio app-a gaituta dago baina zure gakoak ez dira hasieratu, mesedez saiotik irteneta berriz sar zaitez",
+ "Encrypt the home storage" : "Etxe-biltegia enkriptatu",
+ "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Aukera hau gaituz gero biltegi orokorreko fitxategi guztiak enkriptatuko dirabestela kanpo biltegian daudenak bakarrik enkriptatuko dira",
+ "Enable recovery key" : "Berreskuratze gakoa gaitu",
+ "Disable recovery key" : "Berreskuratze gakoa desgaitu",
+ "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." : "Berreskuratze gakoa fitxategiak enkriptatzeko gako extra bat da.Erabiltzailearen fitxategiak berreskuratzea baimentzen du bere pasahitzagalduz gero.",
"Recovery key password" : "Berreskuratze gako pasahitza",
+ "Repeat recovery key password" : "Berreskuratze gakoaren pasahitza errepikatu",
"Change recovery key password:" : "Aldatu berreskuratze gako pasahitza:",
+ "Old recovery key password" : "Berreskuratze gako zaharraren pasahitza",
+ "New recovery key password" : "Berreskuratze gako berriaren pasahitza",
+ "Repeat new recovery key password" : "Berreskuratze gakoaren pasahitz berria errepikatu",
"Change Password" : "Aldatu Pasahitza",
+ "Basic encryption module" : "Oinarrizko enkriptazio modulua",
"Your private key password no longer matches your log-in password." : "Zure gako pasahitza pribatua ez da dagoeneko bat etortzen zure sartzeko pasahitzarekin.",
"Set your old private key password to your current log-in password:" : "Ezarri zure gako pasahitz zaharra orain duzun sartzeko pasahitzan:",
" If you don't remember your old password you can ask your administrator to recover your files." : "Ez baduzu zure pasahitz zaharra gogoratzen eskatu zure administratzaileari zure fitxategiak berreskuratzeko.",
@@ -32,6 +57,7 @@
"Enable password recovery:" : "Gaitu pasahitzaren berreskuratzea:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Aukera hau gaituz zure enkriptatutako fitxategiak berreskuratu ahal izango dituzu pasahitza galtzekotan",
"Enabled" : "Gaitua",
- "Disabled" : "Ez-gaitua"
+ "Disabled" : "Ez-gaitua",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Enkriptazio aplikazioa gaituta dago baina zure gakoak ez daude konfiguratuta, mesedez saioa bukatu eta berriro hasi"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/encryption/l10n/ka_GE.js b/apps/encryption/l10n/ka_GE.js
new file mode 100644
index 00000000000..3797a12d54f
--- /dev/null
+++ b/apps/encryption/l10n/ka_GE.js
@@ -0,0 +1,65 @@
+OC.L10N.register(
+ "encryption",
+ {
+ "Missing recovery key password" : "აღდგენის გასაღების პაროლი არამყოფია",
+ "Please repeat the recovery key password" : "გთხოვთ გაიმეოროთ აღდგენის გასაღების პაროლი",
+ "Repeated recovery key password does not match the provided recovery key password" : "გამეორებული არდგენის გასაღების პაროლი არ ემთხვევა მოწოდებულ აღდგენის გასაღების პაროლს",
+ "Recovery key successfully enabled" : "აღდგენის გასაღები წარმატებით ამოქმედდა",
+ "Could not enable recovery key. Please check your recovery key password!" : "აღდგენის გასაღები ვერ ამოქმედდა. გთხოვთ დაამოწმოთ აღდგენის გასაღების პაროლი!",
+ "Recovery key successfully disabled" : "აღდგენის გასაღები წარმატებით გაითიშა",
+ "Could not disable recovery key. Please check your recovery key password!" : "აღდგენის გასაღები ვერ გაითისა. გთხოვთ დაამოწმოთ აღდგენის გასაღების პაროლი!",
+ "Missing parameters" : "პარამეტრები აკლია",
+ "Please provide the old recovery password" : "გთხოვთ მიუთითოთ აღდგენის ძველი პაროლი",
+ "Please provide a new recovery password" : "გთხოვთ მიუთითოთ აღდგენის ახალი პაროლი",
+ "Please repeat the new recovery password" : "გთხოვთ გაიმეორთ ახალი აღდგენის პაროლი",
+ "Password successfully changed." : "პაროლი წარმატებით შეიცვალა.",
+ "Could not change the password. Maybe the old password was not correct." : "პაროლის ცვლილება ვერ მოხერხდა. შეიძლება ძველი პაროლი არასწორია",
+ "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." : "პირადი გასაღების პაროლი ვერ განახლდა.",
+ "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" : "საჭიროა შიფრაციის ძველი გასაღებების მიგრაცია (ownCloud <= 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\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>",
+ "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" : "ამ არჩევნის ამოქმედება დაშიფრავს ყველა ფაილს, რომელიც განთავსებულია მთავარ საცავში, სხვა შემთხვევაში მოხოლოდ ექსტერნალურ საცავში არსებული ფაილები იქნებიან დაშიფრულნი",
+ "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." : "აღდგენის გასაღები დამატებითი შიფრაციის გასაღებია, რომელიც გამოიყენება ფაილების დასაშიფრად. ეს იძლევა მომხმარებლის ფაილის აღდგენის უფლებას, იმ შემთხვევაში თუ მას დაავიწყდება პაროლი.",
+ "Recovery key password" : "აღდგენის გასაღების პაროლი",
+ "Repeat recovery key password" : "გაიმეორეთ აღდგენის გასაღების პაროლი",
+ "Change recovery key password:" : "შეცვალეთ აღდგენის გასაღების პაროლი:",
+ "Old recovery key password" : "ძველი აღდგენის გასაღების პაროლი",
+ "New recovery key password" : "ახალი აღდგენის გასაღების პაროლი",
+ "Repeat new recovery key password" : "გაიმეორეთ ახალი აღდგენის გასაღების პაროლი",
+ "Change Password" : "შეცვალეთ პაროლ",
+ "Basic encryption module" : "მარტივი შიფრაციის მოდული",
+ "Your private key password no longer matches your log-in password." : "თქვენი პირადი გასაღების პაროლი აღარ ემთხვევა ლოგინის პაროლს.",
+ "Set your old private key password to your current log-in password:" : "დააყენეთ თქვენი ძველი პირადი გასაღების პაროლი ამჟამინდელ ლოგინის პაროლზე:",
+ " If you don't remember your old password you can ask your administrator to recover your files." : "თუ არ გახსოვთ თქვენი ძველი პაროლი შეგიძლიათ მათი აღდგენა სთხოვოთ ადმინისტრატორს.",
+ "Old log-in password" : "ძველი ლოგინის პაროლი",
+ "Current log-in password" : "ამჟამინდელი ლოგინის პაროლ",
+ "Update Private Key Password" : "განაახლეთ პირადი გასაღების პაროლ",
+ "Enable password recovery:" : "აამოქმედეთ პაროლის აღდგენა:",
+ "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "ამ არჩევნის ამოქმედება, პაროლის დაკარგვის შემთხვევაში, საშუალებას მოგცემთ ახლიდან მოპოვოთ წვდომა თქვენს დაშიფრულ ფაილებზე",
+ "Enabled" : "მოქმედია",
+ "Disabled" : "არაა მოქმედი",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "შიფრაციის აპლიკაცია მოქმედია, თუმცა თქვენი გასაღებები არაა ინიციალიზირებული, გთხოვთ გახვიდეთ და ახლიდან გაიაროთ ავტორიზაცია."
+},
+"nplurals=1; plural=0;");
diff --git a/apps/encryption/l10n/ka_GE.json b/apps/encryption/l10n/ka_GE.json
new file mode 100644
index 00000000000..89cdccac034
--- /dev/null
+++ b/apps/encryption/l10n/ka_GE.json
@@ -0,0 +1,63 @@
+{ "translations": {
+ "Missing recovery key password" : "აღდგენის გასაღების პაროლი არამყოფია",
+ "Please repeat the recovery key password" : "გთხოვთ გაიმეოროთ აღდგენის გასაღების პაროლი",
+ "Repeated recovery key password does not match the provided recovery key password" : "გამეორებული არდგენის გასაღების პაროლი არ ემთხვევა მოწოდებულ აღდგენის გასაღების პაროლს",
+ "Recovery key successfully enabled" : "აღდგენის გასაღები წარმატებით ამოქმედდა",
+ "Could not enable recovery key. Please check your recovery key password!" : "აღდგენის გასაღები ვერ ამოქმედდა. გთხოვთ დაამოწმოთ აღდგენის გასაღების პაროლი!",
+ "Recovery key successfully disabled" : "აღდგენის გასაღები წარმატებით გაითიშა",
+ "Could not disable recovery key. Please check your recovery key password!" : "აღდგენის გასაღები ვერ გაითისა. გთხოვთ დაამოწმოთ აღდგენის გასაღების პაროლი!",
+ "Missing parameters" : "პარამეტრები აკლია",
+ "Please provide the old recovery password" : "გთხოვთ მიუთითოთ აღდგენის ძველი პაროლი",
+ "Please provide a new recovery password" : "გთხოვთ მიუთითოთ აღდგენის ახალი პაროლი",
+ "Please repeat the new recovery password" : "გთხოვთ გაიმეორთ ახალი აღდგენის პაროლი",
+ "Password successfully changed." : "პაროლი წარმატებით შეიცვალა.",
+ "Could not change the password. Maybe the old password was not correct." : "პაროლის ცვლილება ვერ მოხერხდა. შეიძლება ძველი პაროლი არასწორია",
+ "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." : "პირადი გასაღების პაროლი ვერ განახლდა.",
+ "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" : "საჭიროა შიფრაციის ძველი გასაღებების მიგრაცია (ownCloud <= 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\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>",
+ "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" : "ამ არჩევნის ამოქმედება დაშიფრავს ყველა ფაილს, რომელიც განთავსებულია მთავარ საცავში, სხვა შემთხვევაში მოხოლოდ ექსტერნალურ საცავში არსებული ფაილები იქნებიან დაშიფრულნი",
+ "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." : "აღდგენის გასაღები დამატებითი შიფრაციის გასაღებია, რომელიც გამოიყენება ფაილების დასაშიფრად. ეს იძლევა მომხმარებლის ფაილის აღდგენის უფლებას, იმ შემთხვევაში თუ მას დაავიწყდება პაროლი.",
+ "Recovery key password" : "აღდგენის გასაღების პაროლი",
+ "Repeat recovery key password" : "გაიმეორეთ აღდგენის გასაღების პაროლი",
+ "Change recovery key password:" : "შეცვალეთ აღდგენის გასაღების პაროლი:",
+ "Old recovery key password" : "ძველი აღდგენის გასაღების პაროლი",
+ "New recovery key password" : "ახალი აღდგენის გასაღების პაროლი",
+ "Repeat new recovery key password" : "გაიმეორეთ ახალი აღდგენის გასაღების პაროლი",
+ "Change Password" : "შეცვალეთ პაროლ",
+ "Basic encryption module" : "მარტივი შიფრაციის მოდული",
+ "Your private key password no longer matches your log-in password." : "თქვენი პირადი გასაღების პაროლი აღარ ემთხვევა ლოგინის პაროლს.",
+ "Set your old private key password to your current log-in password:" : "დააყენეთ თქვენი ძველი პირადი გასაღების პაროლი ამჟამინდელ ლოგინის პაროლზე:",
+ " If you don't remember your old password you can ask your administrator to recover your files." : "თუ არ გახსოვთ თქვენი ძველი პაროლი შეგიძლიათ მათი აღდგენა სთხოვოთ ადმინისტრატორს.",
+ "Old log-in password" : "ძველი ლოგინის პაროლი",
+ "Current log-in password" : "ამჟამინდელი ლოგინის პაროლ",
+ "Update Private Key Password" : "განაახლეთ პირადი გასაღების პაროლ",
+ "Enable password recovery:" : "აამოქმედეთ პაროლის აღდგენა:",
+ "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "ამ არჩევნის ამოქმედება, პაროლის დაკარგვის შემთხვევაში, საშუალებას მოგცემთ ახლიდან მოპოვოთ წვდომა თქვენს დაშიფრულ ფაილებზე",
+ "Enabled" : "მოქმედია",
+ "Disabled" : "არაა მოქმედი",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "შიფრაციის აპლიკაცია მოქმედია, თუმცა თქვენი გასაღებები არაა ინიციალიზირებული, გთხოვთ გახვიდეთ და ახლიდან გაიაროთ ავტორიზაცია."
+},"pluralForm" :"nplurals=1; plural=0;"
+} \ 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/l10n/zh_TW.js b/apps/encryption/l10n/zh_TW.js
index ed09e5f7968..93fe93de726 100644
--- a/apps/encryption/l10n/zh_TW.js
+++ b/apps/encryption/l10n/zh_TW.js
@@ -22,6 +22,10 @@ OC.L10N.register(
"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" : "您需要搬移您的加密鑰匙從舊版的加密 (ownCloud <= 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" : "一次性密碼用於伺服器端的加密",
@@ -31,6 +35,8 @@ OC.L10N.register(
"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>加密,請從網頁登入,到 'basic encryption module' 設置您的個人設定並透過更新加密密碼,將這個組密碼設定在 'old log-in password' 以及您的目前登入密碼<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" : "請啟用這個功能以用來加密主要儲存空間的檔案,否則只有再外部儲存的檔案會加密",
"Enable recovery key" : "啟用還原金鑰",
@@ -43,6 +49,7 @@ OC.L10N.register(
"New recovery key password" : "新的還原金鑰密碼",
"Repeat new recovery key password" : "再輸入新的還原金鑰密碼一次",
"Change Password" : "變更密碼",
+ "Basic encryption module" : "基本加密模組",
"Your private key password no longer matches your log-in password." : "您的私人金鑰密碼不符合您的登入密碼",
"Set your old private key password to your current log-in password:" : "設定您的舊私人金鑰密碼到您現在的登入密碼:",
" If you don't remember your old password you can ask your administrator to recover your files." : "如果您忘記舊密碼,可以請求管理員協助取回檔案。",
diff --git a/apps/encryption/l10n/zh_TW.json b/apps/encryption/l10n/zh_TW.json
index 28ef2eeab62..545a78efdda 100644
--- a/apps/encryption/l10n/zh_TW.json
+++ b/apps/encryption/l10n/zh_TW.json
@@ -20,6 +20,10 @@
"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" : "您需要搬移您的加密鑰匙從舊版的加密 (ownCloud <= 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" : "一次性密碼用於伺服器端的加密",
@@ -29,6 +33,8 @@
"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>加密,請從網頁登入,到 'basic encryption module' 設置您的個人設定並透過更新加密密碼,將這個組密碼設定在 'old log-in password' 以及您的目前登入密碼<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" : "請啟用這個功能以用來加密主要儲存空間的檔案,否則只有再外部儲存的檔案會加密",
"Enable recovery key" : "啟用還原金鑰",
@@ -41,6 +47,7 @@
"New recovery key password" : "新的還原金鑰密碼",
"Repeat new recovery key password" : "再輸入新的還原金鑰密碼一次",
"Change Password" : "變更密碼",
+ "Basic encryption module" : "基本加密模組",
"Your private key password no longer matches your log-in password." : "您的私人金鑰密碼不符合您的登入密碼",
"Set your old private key password to your current log-in password:" : "設定您的舊私人金鑰密碼到您現在的登入密碼:",
" If you don't remember your old password you can ask your administrator to recover your files." : "如果您忘記舊密碼,可以請求管理員協助取回檔案。",
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 e0826e2c7e3..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
@@ -170,11 +172,6 @@ class UserHooks implements IHook {
* @return boolean|null
*/
public function login($params) {
-
- if (!App::isEnabled('encryption')) {
- return true;
- }
-
// ensure filesystem is loaded
if (!\OC\Files\Filesystem::$loaded) {
$this->setupFS($params['uid']);
@@ -200,10 +197,7 @@ class UserHooks implements IHook {
* @param array $params
*/
public function postCreateUser($params) {
-
- if (App::isEnabled('encryption')) {
- $this->userSetup->setupUser($params['uid'], $params['password']);
- }
+ $this->userSetup->setupUser($params['uid'], $params['password']);
}
/**
@@ -213,17 +207,12 @@ class UserHooks implements IHook {
* @note This method should never be called for users using client side encryption
*/
public function postDeleteUser($params) {
-
- if (App::isEnabled('encryption')) {
- $this->keyManager->deletePublicKey($params['uid']);
- }
+ $this->keyManager->deletePublicKey($params['uid']);
}
public function prePasswordReset($params) {
- if (App::isEnabled('encryption')) {
- $user = $params['uid'];
- self::$passwordResetUsers[$user] = true;
- }
+ $user = $params['uid'];
+ self::$passwordResetUsers[$user] = true;
}
public function postPasswordReset($params) {
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 7f4acbb68d4..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
@@ -26,6 +27,7 @@ namespace OCA\Encryption;
use OC\Files\View;
+use OCP\App\IAppManager;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\ILogger;
@@ -43,6 +45,8 @@ class Migration {
private $logger;
/** @var string*/
protected $installedVersion;
+ /** @var IAppManager */
+ protected $appManager;
/**
* @param IConfig $config
@@ -50,7 +54,7 @@ class Migration {
* @param IDBConnection $connection
* @param ILogger $logger
*/
- public function __construct(IConfig $config, View $view, IDBConnection $connection, ILogger $logger) {
+ public function __construct(IConfig $config, View $view, IDBConnection $connection, ILogger $logger, IAppManager $appManager) {
$this->view = $view;
$this->view->disableCacheUpdate();
$this->connection = $connection;
@@ -58,6 +62,7 @@ class Migration {
$this->config = $config;
$this->logger = $logger;
$this->installedVersion = $this->config->getAppValue('files_encryption', 'installed_version', '-1');
+ $this->appManager = $appManager;
}
public function finalCleanUp() {
@@ -137,7 +142,7 @@ class Migration {
$path = '/files_encryption/keys';
$this->renameFileKeys($user, $path);
$trashPath = '/files_trashbin/keys';
- if (\OC_App::isEnabled('files_trashbin') && $this->view->is_dir($user . '/' . $trashPath)) {
+ if ($this->appManager->isEnabledForUser('files_trashbin') && $this->view->is_dir($user . '/' . $trashPath)) {
$this->renameFileKeys($user, $trashPath, true);
$this->view->deleteAll($trashPath);
}
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 75d5fa3d5e7..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
*
@@ -27,6 +28,10 @@ namespace OCA\Encryption\Tests\Command;
use OCA\Encryption\Command\EnableMasterKey;
use OCA\Encryption\Util;
+use OCP\IConfig;
+use Symfony\Component\Console\Helper\QuestionHelper;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
use Test\TestCase;
class TestEnableMasterKey extends TestCase {
@@ -52,15 +57,15 @@ class TestEnableMasterKey extends TestCase {
public function setUp() {
parent::setUp();
- $this->util = $this->getMockBuilder('OCA\Encryption\Util')
+ $this->util = $this->getMockBuilder(Util::class)
->disableOriginalConstructor()->getMock();
- $this->config = $this->getMockBuilder('OCP\IConfig')
+ $this->config = $this->getMockBuilder(IConfig::class)
->disableOriginalConstructor()->getMock();
- $this->questionHelper = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper')
+ $this->questionHelper = $this->getMockBuilder(QuestionHelper::class)
->disableOriginalConstructor()->getMock();
- $this->output = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface')
+ $this->output = $this->getMockBuilder(OutputInterface::class)
->disableOriginalConstructor()->getMock();
- $this->input = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')
+ $this->input = $this->getMockBuilder(InputInterface::class)
->disableOriginalConstructor()->getMock();
$this->enableMasterKey = new EnableMasterKey($this->util, $this->config, $this->questionHelper);
diff --git a/apps/encryption/tests/Controller/RecoveryControllerTest.php b/apps/encryption/tests/Controller/RecoveryControllerTest.php
index fd1b0663b49..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
*
@@ -26,7 +27,11 @@ namespace OCA\Encryption\Tests\Controller;
use OCA\Encryption\Controller\RecoveryController;
+use OCA\Encryption\Recovery;
use OCP\AppFramework\Http;
+use OCP\IConfig;
+use OCP\IL10N;
+use OCP\IRequest;
use Test\TestCase;
class RecoveryControllerTest extends TestCase {
@@ -151,15 +156,15 @@ class RecoveryControllerTest extends TestCase {
protected function setUp() {
parent::setUp();
- $this->requestMock = $this->getMockBuilder('OCP\IRequest')
+ $this->requestMock = $this->getMockBuilder(IRequest::class)
->disableOriginalConstructor()
->getMock();
- $this->configMock = $this->getMockBuilder('OCP\IConfig')
+ $this->configMock = $this->getMockBuilder(IConfig::class)
->disableOriginalConstructor()
->getMock();
- $this->l10nMock = $this->getMockBuilder('OCP\IL10N')
+ $this->l10nMock = $this->getMockBuilder(IL10N::class)
->disableOriginalConstructor()
->getMock();
@@ -168,7 +173,7 @@ class RecoveryControllerTest extends TestCase {
->method('t')
->willReturnArgument(0);
- $this->recoveryMock = $this->getMockBuilder('OCA\Encryption\Recovery')
+ $this->recoveryMock = $this->getMockBuilder(Recovery::class)
->disableOriginalConstructor()
->getMock();
diff --git a/apps/encryption/tests/Controller/SettingsControllerTest.php b/apps/encryption/tests/Controller/SettingsControllerTest.php
index 4f3e09687e3..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
*
@@ -24,9 +26,16 @@
namespace OCA\Encryption\Tests\Controller;
use OCA\Encryption\Controller\SettingsController;
+use OCA\Encryption\Crypto\Crypt;
+use OCA\Encryption\KeyManager;
use OCA\Encryption\Session;
+use OCA\Encryption\Util;
use OCP\AppFramework\Http;
+use OCP\IL10N;
use OCP\IRequest;
+use OCP\ISession;
+use OCP\IUserManager;
+use OCP\IUserSession;
use Test\TestCase;
class SettingsControllerTest extends TestCase {
@@ -67,7 +76,7 @@ class SettingsControllerTest extends TestCase {
$this->requestMock = $this->createMock(IRequest::class);
- $this->l10nMock = $this->getMockBuilder('OCP\IL10N')
+ $this->l10nMock = $this->getMockBuilder(IL10N::class)
->disableOriginalConstructor()->getMock();
$this->l10nMock->expects($this->any())
@@ -76,16 +85,16 @@ class SettingsControllerTest extends TestCase {
return $message;
}));
- $this->userManagerMock = $this->getMockBuilder('OCP\IUserManager')
+ $this->userManagerMock = $this->getMockBuilder(IUserManager::class)
->disableOriginalConstructor()->getMock();
- $this->keyManagerMock = $this->getMockBuilder('OCA\Encryption\KeyManager')
+ $this->keyManagerMock = $this->getMockBuilder(KeyManager::class)
->disableOriginalConstructor()->getMock();
- $this->cryptMock = $this->getMockBuilder('OCA\Encryption\Crypto\Crypt')
+ $this->cryptMock = $this->getMockBuilder(Crypt::class)
->disableOriginalConstructor()->getMock();
- $this->userSessionMock = $this->getMockBuilder('OCP\IUserSession')
+ $this->userSessionMock = $this->getMockBuilder(IUserSession::class)
->disableOriginalConstructor()
->setMethods([
'isLoggedIn',
@@ -98,7 +107,7 @@ class SettingsControllerTest extends TestCase {
])
->getMock();
- $this->ocSessionMock = $this->getMockBuilder('OCP\ISession')->disableOriginalConstructor()->getMock();
+ $this->ocSessionMock = $this->getMockBuilder(ISession::class)->disableOriginalConstructor()->getMock();
$this->userSessionMock->expects($this->any())
->method('getUID')
@@ -108,10 +117,10 @@ class SettingsControllerTest extends TestCase {
->method($this->anything())
->will($this->returnSelf());
- $this->sessionMock = $this->getMockBuilder('OCA\Encryption\Session')
+ $this->sessionMock = $this->getMockBuilder(Session::class)
->disableOriginalConstructor()->getMock();
- $this->utilMock = $this->getMockBuilder('OCA\Encryption\Util')
+ $this->utilMock = $this->getMockBuilder(Util::class)
->disableOriginalConstructor()
->getMock();
diff --git a/apps/encryption/tests/Controller/StatusControllerTest.php b/apps/encryption/tests/Controller/StatusControllerTest.php
index ee0f7b2661c..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
*
@@ -28,6 +31,7 @@ namespace OCA\Encryption\Tests\Controller;
use OCA\Encryption\Controller\StatusController;
use OCA\Encryption\Session;
use OCP\Encryption\IManager;
+use OCP\IL10N;
use OCP\IRequest;
use Test\TestCase;
@@ -52,11 +56,11 @@ class StatusControllerTest extends TestCase {
parent::setUp();
- $this->sessionMock = $this->getMockBuilder('OCA\Encryption\Session')
+ $this->sessionMock = $this->getMockBuilder(Session::class)
->disableOriginalConstructor()->getMock();
$this->requestMock = $this->createMock(IRequest::class);
- $this->l10nMock = $this->getMockBuilder('OCP\IL10N')
+ $this->l10nMock = $this->getMockBuilder(IL10N::class)
->disableOriginalConstructor()->getMock();
$this->l10nMock->expects($this->any())
->method('t')
diff --git a/apps/encryption/tests/Crypto/CryptTest.php b/apps/encryption/tests/Crypto/CryptTest.php
index 3c226ed94ab..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
*
@@ -27,7 +30,10 @@ namespace OCA\Encryption\Tests\Crypto;
use OCA\Encryption\Crypto\Crypt;
+use OCP\IConfig;
use OCP\IL10N;
+use OCP\ILogger;
+use OCP\IUserSession;
use Test\TestCase;
class CryptTest extends TestCase {
@@ -51,16 +57,16 @@ class CryptTest extends TestCase {
public function setUp() {
parent::setUp();
- $this->logger = $this->getMockBuilder('OCP\ILogger')
+ $this->logger = $this->getMockBuilder(ILogger::class)
->disableOriginalConstructor()
->getMock();
$this->logger->expects($this->any())
->method('warning')
->willReturn(true);
- $this->userSession = $this->getMockBuilder('OCP\IUserSession')
+ $this->userSession = $this->getMockBuilder(IUserSession::class)
->disableOriginalConstructor()
->getMock();
- $this->config = $this->getMockBuilder('OCP\IConfig')
+ $this->config = $this->getMockBuilder(IConfig::class)
->disableOriginalConstructor()
->getMock();
$this->l = $this->createMock(IL10N::class);
@@ -389,7 +395,7 @@ class CryptTest extends TestCase {
*/
public function testDecryptPrivateKey($header, $privateKey, $expectedCipher, $isValidKey, $expected) {
/** @var \OCA\Encryption\Crypto\Crypt | \PHPUnit_Framework_MockObject_MockObject $crypt */
- $crypt = $this->getMockBuilder('OCA\Encryption\Crypto\Crypt')
+ $crypt = $this->getMockBuilder(Crypt::class)
->setConstructorArgs(
[
$this->logger,
diff --git a/apps/encryption/tests/Crypto/DecryptAllTest.php b/apps/encryption/tests/Crypto/DecryptAllTest.php
index fdef37adc84..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
*
@@ -56,15 +57,15 @@ class DecryptAllTest extends TestCase {
public function setUp() {
parent::setUp();
- $this->util = $this->getMockBuilder('OCA\Encryption\Util')
+ $this->util = $this->getMockBuilder(Util::class)
->disableOriginalConstructor()->getMock();
- $this->keyManager = $this->getMockBuilder('OCA\Encryption\KeyManager')
+ $this->keyManager = $this->getMockBuilder(KeyManager::class)
->disableOriginalConstructor()->getMock();
- $this->crypt = $this->getMockBuilder('OCA\Encryption\Crypto\Crypt')
+ $this->crypt = $this->getMockBuilder(Crypt::class)
->disableOriginalConstructor()->getMock();
- $this->session = $this->getMockBuilder('OCA\Encryption\Session')
+ $this->session = $this->getMockBuilder(Session::class)
->disableOriginalConstructor()->getMock();
- $this->questionHelper = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper')
+ $this->questionHelper = $this->getMockBuilder(QuestionHelper::class)
->disableOriginalConstructor()->getMock();
$this->instance = new DecryptAll(
diff --git a/apps/encryption/tests/Crypto/EncryptAllTest.php b/apps/encryption/tests/Crypto/EncryptAllTest.php
index df8401c15b2..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
*
@@ -25,8 +28,22 @@
namespace OCA\Encryption\Tests\Crypto;
+use OC\Files\View;
use OCA\Encryption\Crypto\EncryptAll;
+use OCA\Encryption\KeyManager;
+use OCA\Encryption\Users\Setup;
+use OCA\Encryption\Util;
+use OCP\IConfig;
+use OCP\IL10N;
+use OCP\IUserManager;
+use OCP\Mail\IMailer;
+use OCP\Security\ISecureRandom;
+use OCP\UserInterface;
use Symfony\Component\Console\Formatter\OutputFormatterInterface;
+use Symfony\Component\Console\Helper\ProgressBar;
+use Symfony\Component\Console\Helper\QuestionHelper;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
use Test\TestCase;
class EncryptAllTest extends TestCase {
@@ -75,29 +92,29 @@ class EncryptAllTest extends TestCase {
function setUp() {
parent::setUp();
- $this->setupUser = $this->getMockBuilder('OCA\Encryption\Users\Setup')
+ $this->setupUser = $this->getMockBuilder(Setup::class)
->disableOriginalConstructor()->getMock();
- $this->keyManager = $this->getMockBuilder('OCA\Encryption\KeyManager')
+ $this->keyManager = $this->getMockBuilder(KeyManager::class)
->disableOriginalConstructor()->getMock();
- $this->util = $this->getMockBuilder('OCA\Encryption\Util')
+ $this->util = $this->getMockBuilder(Util::class)
->disableOriginalConstructor()->getMock();
- $this->userManager = $this->getMockBuilder('OCP\IUserManager')
+ $this->userManager = $this->getMockBuilder(IUserManager::class)
->disableOriginalConstructor()->getMock();
- $this->view = $this->getMockBuilder('OC\Files\View')
+ $this->view = $this->getMockBuilder(View::class)
->disableOriginalConstructor()->getMock();
- $this->config = $this->getMockBuilder('OCP\IConfig')
+ $this->config = $this->getMockBuilder(IConfig::class)
->disableOriginalConstructor()->getMock();
- $this->mailer = $this->getMockBuilder('OCP\Mail\IMailer')
+ $this->mailer = $this->getMockBuilder(IMailer::class)
->disableOriginalConstructor()->getMock();
- $this->l = $this->getMockBuilder('OCP\IL10N')
+ $this->l = $this->getMockBuilder(IL10N::class)
->disableOriginalConstructor()->getMock();
- $this->questionHelper = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper')
+ $this->questionHelper = $this->getMockBuilder(QuestionHelper::class)
->disableOriginalConstructor()->getMock();
- $this->inputInterface = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')
+ $this->inputInterface = $this->getMockBuilder(InputInterface::class)
->disableOriginalConstructor()->getMock();
- $this->outputInterface = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface')
+ $this->outputInterface = $this->getMockBuilder(OutputInterface::class)
->disableOriginalConstructor()->getMock();
- $this->userInterface = $this->getMockBuilder('OCP\UserInterface')
+ $this->userInterface = $this->getMockBuilder(UserInterface::class)
->disableOriginalConstructor()->getMock();
@@ -107,7 +124,7 @@ class EncryptAllTest extends TestCase {
$this->userManager->expects($this->any())->method('getBackends')->willReturn([$this->userInterface]);
$this->userInterface->expects($this->any())->method('getUsers')->willReturn(['user1', 'user2']);
- $this->secureRandom = $this->getMockBuilder('OCP\Security\ISecureRandom')->disableOriginalConstructor()->getMock();
+ $this->secureRandom = $this->getMockBuilder(ISecureRandom::class)->disableOriginalConstructor()->getMock();
$this->secureRandom->expects($this->any())->method('getMediumStrengthGenerator')->willReturn($this->secureRandom);
$this->secureRandom->expects($this->any())->method('getLowStrengthGenerator')->willReturn($this->secureRandom);
$this->secureRandom->expects($this->any())->method('generate')->willReturn('12345678');
@@ -129,7 +146,7 @@ class EncryptAllTest extends TestCase {
public function testEncryptAll() {
/** @var EncryptAll | \PHPUnit_Framework_MockObject_MockObject $encryptAll */
- $encryptAll = $this->getMockBuilder('OCA\Encryption\Crypto\EncryptAll')
+ $encryptAll = $this->getMockBuilder(EncryptAll::class)
->setConstructorArgs(
[
$this->setupUser,
@@ -158,7 +175,7 @@ class EncryptAllTest extends TestCase {
public function testEncryptAllWithMasterKey() {
/** @var EncryptAll | \PHPUnit_Framework_MockObject_MockObject $encryptAll */
- $encryptAll = $this->getMockBuilder('OCA\Encryption\Crypto\EncryptAll')
+ $encryptAll = $this->getMockBuilder(EncryptAll::class)
->setConstructorArgs(
[
$this->setupUser,
@@ -188,7 +205,7 @@ class EncryptAllTest extends TestCase {
public function testCreateKeyPairs() {
/** @var EncryptAll | \PHPUnit_Framework_MockObject_MockObject $encryptAll */
- $encryptAll = $this->getMockBuilder('OCA\Encryption\Crypto\EncryptAll')
+ $encryptAll = $this->getMockBuilder(EncryptAll::class)
->setConstructorArgs(
[
$this->setupUser,
@@ -237,7 +254,7 @@ class EncryptAllTest extends TestCase {
public function testEncryptAllUsersFiles() {
/** @var EncryptAll | \PHPUnit_Framework_MockObject_MockObject $encryptAll */
- $encryptAll = $this->getMockBuilder('OCA\Encryption\Crypto\EncryptAll')
+ $encryptAll = $this->getMockBuilder(EncryptAll::class)
->setConstructorArgs(
[
$this->setupUser,
@@ -270,7 +287,7 @@ class EncryptAllTest extends TestCase {
public function testEncryptUsersFiles() {
/** @var EncryptAll | \PHPUnit_Framework_MockObject_MockObject $encryptAll */
- $encryptAll = $this->getMockBuilder('OCA\Encryption\Crypto\EncryptAll')
+ $encryptAll = $this->getMockBuilder(EncryptAll::class)
->setConstructorArgs(
[
$this->setupUser,
@@ -318,7 +335,7 @@ class EncryptAllTest extends TestCase {
$encryptAll->expects($this->at(1))->method('encryptFile')->with('/user1/files/bar');
$encryptAll->expects($this->at(2))->method('encryptFile')->with('/user1/files/foo/subfile');
- $progressBar = $this->getMockBuilder('Symfony\Component\Console\Helper\ProgressBar')
+ $progressBar = $this->getMockBuilder(ProgressBar::class)
->disableOriginalConstructor()->getMock();
$this->invokePrivate($encryptAll, 'encryptUsersFiles', ['user1', $progressBar, '']);
diff --git a/apps/encryption/tests/Crypto/EncryptionTest.php b/apps/encryption/tests/Crypto/EncryptionTest.php
index 7e074a5b9e8..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
*
@@ -23,7 +26,16 @@
namespace OCA\Encryption\Tests\Crypto;
+use OCA\Encryption\Crypto\Crypt;
+use OCA\Encryption\Crypto\DecryptAll;
+use OCA\Encryption\Crypto\EncryptAll;
use OCA\Encryption\Exceptions\PublicKeyMissingException;
+use OCA\Encryption\KeyManager;
+use OCA\Encryption\Session;
+use OCA\Encryption\Util;
+use OCP\Files\Storage;
+use OCP\IL10N;
+use OCP\ILogger;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Test\TestCase;
@@ -64,30 +76,30 @@ class EncryptionTest extends TestCase {
public function setUp() {
parent::setUp();
- $this->storageMock = $this->getMockBuilder('OCP\Files\Storage')
+ $this->storageMock = $this->getMockBuilder(Storage::class)
->disableOriginalConstructor()->getMock();
- $this->cryptMock = $this->getMockBuilder('OCA\Encryption\Crypto\Crypt')
+ $this->cryptMock = $this->getMockBuilder(Crypt::class)
->disableOriginalConstructor()
->getMock();
- $this->utilMock = $this->getMockBuilder('OCA\Encryption\Util')
+ $this->utilMock = $this->getMockBuilder(Util::class)
->disableOriginalConstructor()
->getMock();
- $this->keyManagerMock = $this->getMockBuilder('OCA\Encryption\KeyManager')
+ $this->keyManagerMock = $this->getMockBuilder(KeyManager::class)
->disableOriginalConstructor()
->getMock();
- $this->sessionMock = $this->getMockBuilder('OCA\Encryption\Session')
+ $this->sessionMock = $this->getMockBuilder(Session::class)
->disableOriginalConstructor()
->getMock();
- $this->encryptAllMock = $this->getMockBuilder('OCA\Encryption\Crypto\EncryptAll')
+ $this->encryptAllMock = $this->getMockBuilder(EncryptAll::class)
->disableOriginalConstructor()
->getMock();
- $this->decryptAllMock = $this->getMockBuilder('OCA\Encryption\Crypto\DecryptAll')
+ $this->decryptAllMock = $this->getMockBuilder(DecryptAll::class)
->disableOriginalConstructor()
->getMock();
- $this->loggerMock = $this->getMockBuilder('OCP\ILogger')
+ $this->loggerMock = $this->getMockBuilder(ILogger::class)
->disableOriginalConstructor()
->getMock();
- $this->l10nMock = $this->getMockBuilder('OCP\IL10N')
+ $this->l10nMock = $this->getMockBuilder(IL10N::class)
->disableOriginalConstructor()
->getMock();
$this->l10nMock->expects($this->any())
diff --git a/apps/encryption/tests/HookManagerTest.php b/apps/encryption/tests/HookManagerTest.php
index c5e5487dba5..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
*
@@ -26,6 +28,7 @@ namespace OCA\Encryption\Tests;
use OCA\Encryption\HookManager;
+use OCA\Encryption\Hooks\Contracts\IHook;
use OCP\IConfig;
use Test\TestCase;
@@ -41,8 +44,8 @@ class HookManagerTest extends TestCase {
*/
public function testRegisterHookWithArray() {
self::$instance->registerHook([
- $this->getMockBuilder('OCA\Encryption\Hooks\Contracts\IHook')->disableOriginalConstructor()->getMock(),
- $this->getMockBuilder('OCA\Encryption\Hooks\Contracts\IHook')->disableOriginalConstructor()->getMock(),
+ $this->getMockBuilder(IHook::class)->disableOriginalConstructor()->getMock(),
+ $this->getMockBuilder(IHook::class)->disableOriginalConstructor()->getMock(),
$this->createMock(IConfig::class)
]);
@@ -66,7 +69,7 @@ class HookManagerTest extends TestCase {
*
*/
public function testRegisterHooksWithInstance() {
- $mock = $this->getMockBuilder('OCA\Encryption\Hooks\Contracts\IHook')->disableOriginalConstructor()->getMock();
+ $mock = $this->getMockBuilder(IHook::class)->disableOriginalConstructor()->getMock();
/** @var \OCA\Encryption\Hooks\Contracts\IHook $mock */
self::$instance->registerHook($mock);
diff --git a/apps/encryption/tests/Hooks/UserHooksTest.php b/apps/encryption/tests/Hooks/UserHooksTest.php
index f9477e3e038..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
*
@@ -29,8 +32,15 @@ namespace OCA\Encryption\Tests\Hooks;
use OCA\Encryption\Crypto\Crypt;
use OCA\Encryption\Hooks\UserHooks;
+use OCA\Encryption\KeyManager;
+use OCA\Encryption\Recovery;
+use OCA\Encryption\Session;
+use OCA\Encryption\Users\Setup;
+use OCA\Encryption\Util;
use OCP\ILogger;
use OCP\IUser;
+use OCP\IUserManager;
+use OCP\IUserSession;
use Test\TestCase;
/**
@@ -151,7 +161,7 @@ class UserHooksTest extends TestCase {
public function testPreSetPassphrase($canChange) {
/** @var UserHooks | \PHPUnit_Framework_MockObject_MockObject $instance */
- $instance = $this->getMockBuilder('OCA\Encryption\Hooks\UserHooks')
+ $instance = $this->getMockBuilder(UserHooks::class)
->setConstructorArgs(
[
$this->keyManagerMock,
@@ -230,7 +240,7 @@ class UserHooksTest extends TestCase {
->willReturnOnConsecutiveCalls(true, false);
- $this->instance = $this->getMockBuilder('OCA\Encryption\Hooks\UserHooks')
+ $this->instance = $this->getMockBuilder(UserHooks::class)
->setConstructorArgs(
[
$this->keyManagerMock,
@@ -291,7 +301,7 @@ class UserHooksTest extends TestCase {
->method('getPrivateKey')
->willReturn(true);
- $userSessionMock = $this->getMockBuilder('OCP\IUserSession')
+ $userSessionMock = $this->getMockBuilder(IUserSession::class)
->disableOriginalConstructor()
->getMock();
@@ -302,7 +312,7 @@ class UserHooksTest extends TestCase {
->with('testUser')
->willReturn(false);
- $userHooks = $this->getMockBuilder('OCA\Encryption\Hooks\UserHooks')
+ $userHooks = $this->getMockBuilder(UserHooks::class)
->setConstructorArgs(
[
$this->keyManagerMock,
@@ -324,17 +334,17 @@ class UserHooksTest extends TestCase {
protected function setUp() {
parent::setUp();
$this->loggerMock = $this->createMock(ILogger::class);
- $this->keyManagerMock = $this->getMockBuilder('OCA\Encryption\KeyManager')
+ $this->keyManagerMock = $this->getMockBuilder(KeyManager::class)
->disableOriginalConstructor()
->getMock();
- $this->userManagerMock = $this->getMockBuilder('OCP\IUserManager')
+ $this->userManagerMock = $this->getMockBuilder(IUserManager::class)
->disableOriginalConstructor()
->getMock();
- $this->userSetupMock = $this->getMockBuilder('OCA\Encryption\Users\Setup')
+ $this->userSetupMock = $this->getMockBuilder(Setup::class)
->disableOriginalConstructor()
->getMock();
- $this->userSessionMock = $this->getMockBuilder('OCP\IUserSession')
+ $this->userSessionMock = $this->getMockBuilder(IUserSession::class)
->disableOriginalConstructor()
->setMethods([
'isLoggedIn',
@@ -353,18 +363,18 @@ class UserHooksTest extends TestCase {
->method($this->anything())
->will($this->returnSelf());
- $utilMock = $this->getMockBuilder('OCA\Encryption\Util')
+ $utilMock = $this->getMockBuilder(Util::class)
->disableOriginalConstructor()
->getMock();
- $sessionMock = $this->getMockBuilder('OCA\Encryption\Session')
+ $sessionMock = $this->getMockBuilder(Session::class)
->disableOriginalConstructor()
->getMock();
- $this->cryptMock = $this->getMockBuilder('OCA\Encryption\Crypto\Crypt')
+ $this->cryptMock = $this->getMockBuilder(Crypt::class)
->disableOriginalConstructor()
->getMock();
- $recoveryMock = $this->getMockBuilder('OCA\Encryption\Recovery')
+ $recoveryMock = $this->getMockBuilder(Recovery::class)
->disableOriginalConstructor()
->getMock();
@@ -373,7 +383,7 @@ class UserHooksTest extends TestCase {
$this->utilMock = $utilMock;
$this->utilMock->expects($this->any())->method('isMasterKeyEnabled')->willReturn(false);
- $this->instance = $this->getMockBuilder('OCA\Encryption\Hooks\UserHooks')
+ $this->instance = $this->getMockBuilder(UserHooks::class)
->setConstructorArgs(
[
$this->keyManagerMock,
diff --git a/apps/encryption/tests/KeyManagerTest.php b/apps/encryption/tests/KeyManagerTest.php
index a8441427a2c..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
*
@@ -27,9 +31,15 @@
namespace OCA\Encryption\Tests;
+use OC\Files\FileInfo;
+use OC\Files\View;
+use OCA\Encryption\Crypto\Crypt;
use OCA\Encryption\KeyManager;
use OCA\Encryption\Session;
+use OCA\Encryption\Util;
use OCP\Encryption\Keys\IStorage;
+use OCP\Files\Cache\ICache;
+use OCP\Files\Storage;
use OCP\IConfig;
use OCP\ILogger;
use OCP\IUserSession;
@@ -74,7 +84,7 @@ class KeyManagerTest extends TestCase {
$this->userId = 'user1';
$this->systemKeyId = 'systemKeyId';
$this->keyStorageMock = $this->createMock(IStorage::class);
- $this->cryptMock = $this->getMockBuilder('OCA\Encryption\Crypto\Crypt')
+ $this->cryptMock = $this->getMockBuilder(Crypt::class)
->disableOriginalConstructor()
->getMock();
$this->configMock = $this->createMock(IConfig::class);
@@ -82,11 +92,11 @@ class KeyManagerTest extends TestCase {
->method('getAppValue')
->willReturn($this->systemKeyId);
$this->userMock = $this->createMock(IUserSession::class);
- $this->sessionMock = $this->getMockBuilder('OCA\Encryption\Session')
+ $this->sessionMock = $this->getMockBuilder(Session::class)
->disableOriginalConstructor()
->getMock();
$this->logMock = $this->createMock(ILogger::class);
- $this->utilMock = $this->getMockBuilder('OCA\Encryption\Util')
+ $this->utilMock = $this->getMockBuilder(Util::class)
->disableOriginalConstructor()
->getMock();
@@ -251,7 +261,7 @@ class KeyManagerTest extends TestCase {
public function testInit($useMasterKey) {
/** @var \OCA\Encryption\KeyManager|\PHPUnit_Framework_MockObject_MockObject $instance */
- $instance = $this->getMockBuilder('OCA\Encryption\KeyManager')
+ $instance = $this->getMockBuilder(KeyManager::class)
->setConstructorArgs(
[
$this->keyStorageMock,
@@ -544,7 +554,7 @@ class KeyManagerTest extends TestCase {
public function testValidateMasterKey($masterKey) {
/** @var \OCA\Encryption\KeyManager | \PHPUnit_Framework_MockObject_MockObject $instance */
- $instance = $this->getMockBuilder('OCA\Encryption\KeyManager')
+ $instance = $this->getMockBuilder(KeyManager::class)
->setConstructorArgs(
[
$this->keyStorageMock,
@@ -592,7 +602,7 @@ class KeyManagerTest extends TestCase {
}
public function testGetVersionWithoutFileInfo() {
- $view = $this->getMockBuilder('\\OC\\Files\\View')
+ $view = $this->getMockBuilder(View::class)
->disableOriginalConstructor()->getMock();
$view->expects($this->once())
->method('getFileInfo')
@@ -604,9 +614,9 @@ class KeyManagerTest extends TestCase {
}
public function testGetVersionWithFileInfo() {
- $view = $this->getMockBuilder('\\OC\\Files\\View')
+ $view = $this->getMockBuilder(View::class)
->disableOriginalConstructor()->getMock();
- $fileInfo = $this->getMockBuilder('\\OC\\Files\\FileInfo')
+ $fileInfo = $this->getMockBuilder(FileInfo::class)
->disableOriginalConstructor()->getMock();
$fileInfo->expects($this->once())
->method('getEncryptedVersion')
@@ -621,19 +631,19 @@ class KeyManagerTest extends TestCase {
}
public function testSetVersionWithFileInfo() {
- $view = $this->getMockBuilder('\\OC\\Files\\View')
+ $view = $this->getMockBuilder(View::class)
->disableOriginalConstructor()->getMock();
- $cache = $this->getMockBuilder('\\OCP\\Files\\Cache\\ICache')
+ $cache = $this->getMockBuilder(ICache::class)
->disableOriginalConstructor()->getMock();
$cache->expects($this->once())
->method('update')
->with(123, ['encrypted' => 5, 'encryptedVersion' => 5]);
- $storage = $this->getMockBuilder('\\OCP\\Files\\Storage')
+ $storage = $this->getMockBuilder(Storage::class)
->disableOriginalConstructor()->getMock();
$storage->expects($this->once())
->method('getCache')
->willReturn($cache);
- $fileInfo = $this->getMockBuilder('\\OC\\Files\\FileInfo')
+ $fileInfo = $this->getMockBuilder(FileInfo::class)
->disableOriginalConstructor()->getMock();
$fileInfo->expects($this->once())
->method('getStorage')
@@ -651,7 +661,7 @@ class KeyManagerTest extends TestCase {
}
public function testSetVersionWithoutFileInfo() {
- $view = $this->getMockBuilder('\\OC\\Files\\View')
+ $view = $this->getMockBuilder(View::class)
->disableOriginalConstructor()->getMock();
$view->expects($this->once())
->method('getFileInfo')
diff --git a/apps/encryption/tests/MigrationTest.php b/apps/encryption/tests/MigrationTest.php
index 595d7f12067..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>
*
@@ -25,6 +26,7 @@
namespace OCA\Encryption\Tests;
+use OC\Files\View;
use OCA\Encryption\Migration;
use OCP\ILogger;
@@ -68,7 +70,7 @@ class MigrationTest extends \Test\TestCase {
public function setUp() {
- $this->logger = $this->getMockBuilder('\OCP\ILogger')->disableOriginalConstructor()->getMock();
+ $this->logger = $this->getMockBuilder(ILogger::class)->disableOriginalConstructor()->getMock();
$this->view = new \OC\Files\View();
$this->moduleId = \OCA\Encryption\Crypto\Encryption::ID;
}
@@ -203,13 +205,14 @@ class MigrationTest extends \Test\TestCase {
$this->createDummySystemWideKeys();
/** @var \PHPUnit_Framework_MockObject_MockObject|\OCA\Encryption\Migration $m */
- $m = $this->getMockBuilder('OCA\Encryption\Migration')
+ $m = $this->getMockBuilder(Migration::class)
->setConstructorArgs(
[
\OC::$server->getConfig(),
new \OC\Files\View(),
\OC::$server->getDatabaseConnection(),
- $this->logger
+ $this->logger,
+ \OC::$server->getAppManager()
]
)->setMethods(['getSystemMountPoints'])->getMock();
@@ -366,7 +369,7 @@ class MigrationTest extends \Test\TestCase {
public function testUpdateDB() {
$this->prepareDB();
- $m = new Migration(\OC::$server->getConfig(), new \OC\Files\View(), \OC::$server->getDatabaseConnection(), $this->logger);
+ $m = new Migration(\OC::$server->getConfig(), new \OC\Files\View(), \OC::$server->getDatabaseConnection(), $this->logger, \OC::$server->getAppManager());
$this->invokePrivate($m, 'installedVersion', ['0.7']);
$m->updateDB();
@@ -386,7 +389,7 @@ class MigrationTest extends \Test\TestCase {
$config->setAppValue('encryption', 'publicShareKeyId', 'wrong_share_id');
$config->setUserValue(self::TEST_ENCRYPTION_MIGRATION_USER1, 'encryption', 'recoverKeyEnabled', '9');
- $m = new Migration(\OC::$server->getConfig(), new \OC\Files\View(), \OC::$server->getDatabaseConnection(), $this->logger);
+ $m = new Migration(\OC::$server->getConfig(), new \OC\Files\View(), \OC::$server->getDatabaseConnection(), $this->logger, \OC::$server->getAppManager());
$this->invokePrivate($m, 'installedVersion', ['0.7']);
$m->updateDB();
@@ -455,7 +458,7 @@ class MigrationTest extends \Test\TestCase {
*/
public function testUpdateFileCache() {
$this->prepareFileCache();
- $m = new Migration(\OC::$server->getConfig(), new \OC\Files\View(), \OC::$server->getDatabaseConnection(), $this->logger);
+ $m = new Migration(\OC::$server->getConfig(), new \OC\Files\View(), \OC::$server->getDatabaseConnection(), $this->logger, \OC::$server->getAppManager());
$this->invokePrivate($m, 'installedVersion', ['0.7']);
self::invokePrivate($m, 'updateFileCache');
@@ -523,17 +526,18 @@ class MigrationTest extends \Test\TestCase {
*/
public function testGetTargetDir($user, $keyPath, $filename, $trash, $systemMounts, $expected) {
- $view = $this->getMockBuilder('\OC\Files\View')
+ $view = $this->getMockBuilder(View::class)
->disableOriginalConstructor()->getMock();
$view->expects($this->any())->method('file_exists')->willReturn(true);
- $m = $this->getMockBuilder('OCA\Encryption\Migration')
+ $m = $this->getMockBuilder(Migration::class)
->setConstructorArgs(
[
\OC::$server->getConfig(),
$view,
\OC::$server->getDatabaseConnection(),
- $this->logger
+ $this->logger,
+ \OC::$server->getAppManager()
]
)->setMethods(['getSystemMountPoints'])->getMock();
diff --git a/apps/encryption/tests/RecoveryTest.php b/apps/encryption/tests/RecoveryTest.php
index d73b5d48c91..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
*
@@ -28,10 +30,13 @@ namespace OCA\Encryption\Tests;
use OC\Files\View;
+use OCA\Encryption\Crypto\Crypt;
+use OCA\Encryption\KeyManager;
use OCA\Encryption\Recovery;
use OCP\Encryption\IFile;
use OCP\Encryption\Keys\IStorage;
use OCP\IConfig;
+use OCP\IUserSession;
use OCP\Security\ISecureRandom;
use Test\TestCase;
@@ -253,7 +258,7 @@ class RecoveryTest extends TestCase {
parent::setUp();
- $this->userSessionMock = $this->getMockBuilder('OCP\IUserSession')
+ $this->userSessionMock = $this->getMockBuilder(IUserSession::class)
->disableOriginalConstructor()
->setMethods([
'isLoggedIn',
@@ -271,10 +276,10 @@ class RecoveryTest extends TestCase {
->method($this->anything())
->will($this->returnSelf());
- $this->cryptMock = $this->getMockBuilder('OCA\Encryption\Crypto\Crypt')->disableOriginalConstructor()->getMock();
+ $this->cryptMock = $this->getMockBuilder(Crypt::class)->disableOriginalConstructor()->getMock();
/** @var \OCP\Security\ISecureRandom $randomMock */
$randomMock = $this->createMock(ISecureRandom::class);
- $this->keyManagerMock = $this->getMockBuilder('OCA\Encryption\KeyManager')->disableOriginalConstructor()->getMock();
+ $this->keyManagerMock = $this->getMockBuilder(KeyManager::class)->disableOriginalConstructor()->getMock();
$this->configMock = $this->createMock(IConfig::class);
/** @var \OCP\Encryption\Keys\IStorage $keyStorageMock */
$keyStorageMock = $this->createMock(IStorage::class);
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 93896585dad..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
*
@@ -52,12 +53,12 @@ class AdminTest extends TestCase {
public function setUp() {
parent::setUp();
- $this->l = $this->getMockBuilder('\OCP\IL10N')->getMock();
- $this->logger = $this->getMockBuilder('\OCP\ILogger')->getMock();
- $this->userSession = $this->getMockBuilder('\OCP\IUserSession')->getMock();
- $this->config = $this->getMockBuilder('\OCP\IConfig')->getMock();
- $this->userManager = $this->getMockBuilder('\OCP\IUserManager')->getMock();
- $this->session = $this->getMockBuilder('\OCP\ISession')->getMock();
+ $this->l = $this->getMockBuilder(IL10N::class)->getMock();
+ $this->logger = $this->getMockBuilder(ILogger::class)->getMock();
+ $this->userSession = $this->getMockBuilder(IUserSession::class)->getMock();
+ $this->config = $this->getMockBuilder(IConfig::class)->getMock();
+ $this->userManager = $this->getMockBuilder(IUserManager::class)->getMock();
+ $this->session = $this->getMockBuilder(ISession::class)->getMock();
$this->admin = new Admin(
$this->l,
diff --git a/apps/encryption/tests/Users/SetupTest.php b/apps/encryption/tests/Users/SetupTest.php
index 9e856861046..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
*
@@ -26,8 +28,11 @@
namespace OCA\Encryption\Tests\Users;
+use OCA\Encryption\Crypto\Crypt;
+use OCA\Encryption\KeyManager;
use OCA\Encryption\Users\Setup;
use OCP\ILogger;
+use OCP\IUserSession;
use Test\TestCase;
class SetupTest extends TestCase {
@@ -47,14 +52,14 @@ class SetupTest extends TestCase {
protected function setUp() {
parent::setUp();
$logMock = $this->createMock(ILogger::class);
- $userSessionMock = $this->getMockBuilder('OCP\IUserSession')
+ $userSessionMock = $this->getMockBuilder(IUserSession::class)
->disableOriginalConstructor()
->getMock();
- $this->cryptMock = $this->getMockBuilder('OCA\Encryption\Crypto\Crypt')
+ $this->cryptMock = $this->getMockBuilder(Crypt::class)
->disableOriginalConstructor()
->getMock();
- $this->keyManagerMock = $this->getMockBuilder('OCA\Encryption\KeyManager')
+ $this->keyManagerMock = $this->getMockBuilder(KeyManager::class)
->disableOriginalConstructor()
->getMock();
diff --git a/apps/encryption/tests/UtilTest.php b/apps/encryption/tests/UtilTest.php
index 40fc5537251..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
*
@@ -27,11 +30,14 @@ namespace OCA\Encryption\Tests;
use OC\Files\View;
+use OCA\Encryption\Crypto\Crypt;
use OCA\Encryption\Util;
use OCP\Files\Mount\IMountPoint;
+use OCP\Files\Storage;
use OCP\IConfig;
use OCP\ILogger;
use OCP\IUserManager;
+use OCP\IUserSession;
use Test\TestCase;
class UtilTest extends TestCase {
@@ -80,13 +86,13 @@ class UtilTest extends TestCase {
$this->userManagerMock = $this->createMock(IUserManager::class);
/** @var \OCA\Encryption\Crypto\Crypt $cryptMock */
- $cryptMock = $this->getMockBuilder('OCA\Encryption\Crypto\Crypt')
+ $cryptMock = $this->getMockBuilder(Crypt::class)
->disableOriginalConstructor()
->getMock();
/** @var \OCP\ILogger $loggerMock */
$loggerMock = $this->createMock(ILogger::class);
/** @var \OCP\IUserSession|\PHPUnit_Framework_MockObject_MockObject $userSessionMock */
- $userSessionMock = $this->getMockBuilder('OCP\IUserSession')
+ $userSessionMock = $this->getMockBuilder(IUserSession::class)
->disableOriginalConstructor()
->setMethods([
'isLoggedIn',
@@ -205,7 +211,7 @@ class UtilTest extends TestCase {
}
public function testGetStorage() {
- $return = $this->getMockBuilder('OC\Files\Storage\Storage')
+ $return = $this->getMockBuilder(Storage::class)
->disableOriginalConstructor()
->getMock();
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/composer/autoload.php b/apps/federatedfilesharing/composer/autoload.php
new file mode 100644
index 00000000000..5273607f74a
--- /dev/null
+++ b/apps/federatedfilesharing/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitFederatedFileSharing::getLoader();
diff --git a/apps/federatedfilesharing/composer/composer.json b/apps/federatedfilesharing/composer/composer.json
new file mode 100644
index 00000000000..3cb32db12f2
--- /dev/null
+++ b/apps/federatedfilesharing/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "FederatedFileSharing"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\FederatedFileSharing\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/federatedfilesharing/composer/composer/ClassLoader.php b/apps/federatedfilesharing/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/federatedfilesharing/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/federatedfilesharing/composer/composer/LICENSE b/apps/federatedfilesharing/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/federatedfilesharing/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/federatedfilesharing/composer/composer/autoload_classmap.php b/apps/federatedfilesharing/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..387ea8bee3a
--- /dev/null
+++ b/apps/federatedfilesharing/composer/composer/autoload_classmap.php
@@ -0,0 +1,21 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\FederatedFileSharing\\AddressHandler' => $baseDir . '/../lib/AddressHandler.php',
+ 'OCA\\FederatedFileSharing\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\FederatedFileSharing\\BackgroundJob\\RetryJob' => $baseDir . '/../lib/BackgroundJob/RetryJob.php',
+ 'OCA\\FederatedFileSharing\\Controller\\MountPublicLinkController' => $baseDir . '/../lib/Controller/MountPublicLinkController.php',
+ 'OCA\\FederatedFileSharing\\Controller\\RequestHandlerController' => $baseDir . '/../lib/Controller/RequestHandlerController.php',
+ 'OCA\\FederatedFileSharing\\FederatedShareProvider' => $baseDir . '/../lib/FederatedShareProvider.php',
+ 'OCA\\FederatedFileSharing\\Notifications' => $baseDir . '/../lib/Notifications.php',
+ 'OCA\\FederatedFileSharing\\Notifier' => $baseDir . '/../lib/Notifier.php',
+ 'OCA\\FederatedFileSharing\\Settings\\Admin' => $baseDir . '/../lib/Settings/Admin.php',
+ 'OCA\\FederatedFileSharing\\Settings\\Personal' => $baseDir . '/../lib/Settings/Personal.php',
+ 'OCA\\FederatedFileSharing\\Settings\\PersonalSection' => $baseDir . '/../lib/Settings/PersonalSection.php',
+ 'OCA\\FederatedFileSharing\\TokenHandler' => $baseDir . '/../lib/TokenHandler.php',
+);
diff --git a/apps/federatedfilesharing/composer/composer/autoload_namespaces.php b/apps/federatedfilesharing/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/federatedfilesharing/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/federatedfilesharing/composer/composer/autoload_psr4.php b/apps/federatedfilesharing/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..7f2217448ff
--- /dev/null
+++ b/apps/federatedfilesharing/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\FederatedFileSharing\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/federatedfilesharing/composer/composer/autoload_real.php b/apps/federatedfilesharing/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..bdc3ad006ae
--- /dev/null
+++ b/apps/federatedfilesharing/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitFederatedFileSharing
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitFederatedFileSharing', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitFederatedFileSharing', 'loadClassLoader'));
+
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitFederatedFileSharing::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/federatedfilesharing/composer/composer/autoload_static.php b/apps/federatedfilesharing/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..95b8775384c
--- /dev/null
+++ b/apps/federatedfilesharing/composer/composer/autoload_static.php
@@ -0,0 +1,47 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitFederatedFileSharing
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\FederatedFileSharing\\' => 25,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\FederatedFileSharing\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\FederatedFileSharing\\AddressHandler' => __DIR__ . '/..' . '/../lib/AddressHandler.php',
+ 'OCA\\FederatedFileSharing\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\FederatedFileSharing\\BackgroundJob\\RetryJob' => __DIR__ . '/..' . '/../lib/BackgroundJob/RetryJob.php',
+ 'OCA\\FederatedFileSharing\\Controller\\MountPublicLinkController' => __DIR__ . '/..' . '/../lib/Controller/MountPublicLinkController.php',
+ 'OCA\\FederatedFileSharing\\Controller\\RequestHandlerController' => __DIR__ . '/..' . '/../lib/Controller/RequestHandlerController.php',
+ 'OCA\\FederatedFileSharing\\FederatedShareProvider' => __DIR__ . '/..' . '/../lib/FederatedShareProvider.php',
+ 'OCA\\FederatedFileSharing\\Notifications' => __DIR__ . '/..' . '/../lib/Notifications.php',
+ 'OCA\\FederatedFileSharing\\Notifier' => __DIR__ . '/..' . '/../lib/Notifier.php',
+ 'OCA\\FederatedFileSharing\\Settings\\Admin' => __DIR__ . '/..' . '/../lib/Settings/Admin.php',
+ 'OCA\\FederatedFileSharing\\Settings\\Personal' => __DIR__ . '/..' . '/../lib/Settings/Personal.php',
+ 'OCA\\FederatedFileSharing\\Settings\\PersonalSection' => __DIR__ . '/..' . '/../lib/Settings/PersonalSection.php',
+ 'OCA\\FederatedFileSharing\\TokenHandler' => __DIR__ . '/..' . '/../lib/TokenHandler.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitFederatedFileSharing::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitFederatedFileSharing::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitFederatedFileSharing::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/federatedfilesharing/l10n/es_CO.js b/apps/federatedfilesharing/l10n/es_CO.js
new file mode 100644
index 00000000000..c4be26868c2
--- /dev/null
+++ b/apps/federatedfilesharing/l10n/es_CO.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_CO.json b/apps/federatedfilesharing/l10n/es_CO.json
new file mode 100644
index 00000000000..29ee41a77e4
--- /dev/null
+++ b/apps/federatedfilesharing/l10n/es_CO.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/l10n/es_CR.js b/apps/federatedfilesharing/l10n/es_CR.js
new file mode 100644
index 00000000000..c4be26868c2
--- /dev/null
+++ b/apps/federatedfilesharing/l10n/es_CR.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_CR.json b/apps/federatedfilesharing/l10n/es_CR.json
new file mode 100644
index 00000000000..29ee41a77e4
--- /dev/null
+++ b/apps/federatedfilesharing/l10n/es_CR.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/l10n/es_DO.js b/apps/federatedfilesharing/l10n/es_DO.js
new file mode 100644
index 00000000000..c4be26868c2
--- /dev/null
+++ b/apps/federatedfilesharing/l10n/es_DO.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_DO.json b/apps/federatedfilesharing/l10n/es_DO.json
new file mode 100644
index 00000000000..29ee41a77e4
--- /dev/null
+++ b/apps/federatedfilesharing/l10n/es_DO.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/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/l10n/fi.js b/apps/federatedfilesharing/l10n/fi.js
index 7f71f5a27bb..04916189ac4 100644
--- a/apps/federatedfilesharing/l10n/fi.js
+++ b/apps/federatedfilesharing/l10n/fi.js
@@ -16,6 +16,7 @@ OC.L10N.register(
"Server to server sharing is not enabled on this server" : "Palvelimien kesken jakaminen ei ole käytössä tällä palvelimella",
"Couldn't establish a federated share." : "Ei voinut muodostaa federoitua jakoa.",
"Couldn't establish a federated share, maybe the password was wrong." : "Ei voinut muodostaa federoitua jakoa. Ehkä salasana oli väärin.",
+ "Federated Share request sent, you will receive an invitation. Check your notifications." : "Federoidun jakamisen pyyntö lähetetty, saat kutsun. Tarkista ilmoitukset.",
"The mountpoint name contains invalid characters." : "Liitospisteen nimi sisältää virheellisiä merkkejä.",
"Not allowed to create a federated share with the owner." : "Omistajan kanssa ei ole sallittua luoda federoitua jakoa.",
"Invalid or untrusted SSL certificate" : "Virheellinen tai ei-luotettu SSL-varmenne",
diff --git a/apps/federatedfilesharing/l10n/fi.json b/apps/federatedfilesharing/l10n/fi.json
index 7aac33281e5..1952efd7506 100644
--- a/apps/federatedfilesharing/l10n/fi.json
+++ b/apps/federatedfilesharing/l10n/fi.json
@@ -14,6 +14,7 @@
"Server to server sharing is not enabled on this server" : "Palvelimien kesken jakaminen ei ole käytössä tällä palvelimella",
"Couldn't establish a federated share." : "Ei voinut muodostaa federoitua jakoa.",
"Couldn't establish a federated share, maybe the password was wrong." : "Ei voinut muodostaa federoitua jakoa. Ehkä salasana oli väärin.",
+ "Federated Share request sent, you will receive an invitation. Check your notifications." : "Federoidun jakamisen pyyntö lähetetty, saat kutsun. Tarkista ilmoitukset.",
"The mountpoint name contains invalid characters." : "Liitospisteen nimi sisältää virheellisiä merkkejä.",
"Not allowed to create a federated share with the owner." : "Omistajan kanssa ei ole sallittua luoda federoitua jakoa.",
"Invalid or untrusted SSL certificate" : "Virheellinen tai ei-luotettu SSL-varmenne",
diff --git a/apps/federatedfilesharing/l10n/hu.js b/apps/federatedfilesharing/l10n/hu.js
index f30ba37b29e..a99bb21c4f5 100644
--- a/apps/federatedfilesharing/l10n/hu.js
+++ b/apps/federatedfilesharing/l10n/hu.js
@@ -16,11 +16,13 @@ OC.L10N.register(
"Server to server sharing is not enabled on this server" : "A kiszolgálók közötti megosztás nincs engedélyezve ezen a kiszolgálón",
"Couldn't establish a federated share." : "Egy egyesített megosztás nem hozható létre.",
"Couldn't establish a federated share, maybe the password was wrong." : "Egy egyesített megosztás nem hozható létre, lehet hogy nem megfelelő a jelszó.",
+ "Federated Share request sent, you will receive an invitation. Check your notifications." : "Egyesített megosztási kérés elküldve, kapni fogsz egy meghívót. Ellenőrizd az értesítéseidet.",
"The mountpoint name contains invalid characters." : "A csatolási pont neve érvénytelen karaktereket tartalmaz ",
"Not allowed to create a federated share with the owner." : "A tulajdonossal nem lehet egyesített megosztást létrehozni.",
"Invalid or untrusted SSL certificate" : "Érvénytelen vagy nem megbízható az SSL tanúsítvány",
"Could not authenticate to remote share, password might be wrong" : "Nem sikerült az azonosítás a távoli megosztáshoz. Lehet, hogy rossz a jelszó.",
"Storage not valid" : "A tároló nem érvényes",
+ "Federated share added" : "Egyesített megosztás hozzáadva",
"Couldn't add remote share" : "Távoli megosztás nem adható hozzá",
"Sharing %s failed, because this item is already shared with %s" : "%s megosztása nem sikerült, mert ez már meg van osztva vele: %s",
"Not allowed to create a federated share with the same user" : "Azonos felhasználóval nem lehet létrehozni egyesített megosztást",
@@ -35,16 +37,22 @@ OC.L10N.register(
"Decline" : "Elutasítás",
"Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Ossza meg velem az #Nextcloud Egyesített Felhő Azonosító segítségével, lásd %s",
"Share with me through my #Nextcloud Federated Cloud ID" : "Ossza meg velem az #Nextcloud Egyesített Felhő Azonosító segítségével ",
+ "Sharing" : "Megosztás",
"Federated Cloud Sharing" : "Megosztás Egyesített Felhőben",
"Open documentation" : "Dokumentáció megnyitása",
+ "Adjust how people can share between servers." : "A szerverek közti megosztási lehetőségek beállítása",
"Allow users on this server to send shares to other servers" : "Engedélyezze ezen szerver felhasználóinak, hogy fájlokat osszanak meg más szerverekkel.",
"Allow users on this server to receive shares from other servers" : "Engedélyezze ezen szerver felhasználóinak, hogy megosztásokat fogadjanak más szerverektől",
"Search global and public address book for users" : "Felhasználók keresése a globális és a nyilvános névjegyekben",
+ "Allow users to publish their data to a global and public address book" : "Minden felhasználó a közös adattárolót és névjegyzéket használja",
"Federated Cloud" : "Egyesített felhő",
+ "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" : "Bárkivel megoszthatsz aki Nextcloud-ot, ownCloud-ot vagy Pydio-t használ! Csak add meg az egységesített megosztási azonosítójukat a megosztási ablakban. Valahogy így néz ki: person@cloud.example.com",
"Your Federated Cloud ID:" : "Egyesített felhő azonosító:",
+ "Share it so your friends can share files with you:" : "Oszd meg, hogy a barátaid is megoszthassanak veled fájlokat:",
"Add to your website" : "Adja hozzá saját weboldalához",
"Share with me via Nextcloud" : "Ossza meg velem Nextcloud-on keresztül",
"HTML Code:" : "HTML kód:",
+ "Search global and public address book for users and let local users publish their data" : "A központi és nyilvános névjegyzék keresése a felhasználóknak és a helyi felhasználók is hozzáadhatnak",
"Share it:" : "Oszd meg:"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/federatedfilesharing/l10n/hu.json b/apps/federatedfilesharing/l10n/hu.json
index c8d717e11d7..e77b17ef7de 100644
--- a/apps/federatedfilesharing/l10n/hu.json
+++ b/apps/federatedfilesharing/l10n/hu.json
@@ -14,11 +14,13 @@
"Server to server sharing is not enabled on this server" : "A kiszolgálók közötti megosztás nincs engedélyezve ezen a kiszolgálón",
"Couldn't establish a federated share." : "Egy egyesített megosztás nem hozható létre.",
"Couldn't establish a federated share, maybe the password was wrong." : "Egy egyesített megosztás nem hozható létre, lehet hogy nem megfelelő a jelszó.",
+ "Federated Share request sent, you will receive an invitation. Check your notifications." : "Egyesített megosztási kérés elküldve, kapni fogsz egy meghívót. Ellenőrizd az értesítéseidet.",
"The mountpoint name contains invalid characters." : "A csatolási pont neve érvénytelen karaktereket tartalmaz ",
"Not allowed to create a federated share with the owner." : "A tulajdonossal nem lehet egyesített megosztást létrehozni.",
"Invalid or untrusted SSL certificate" : "Érvénytelen vagy nem megbízható az SSL tanúsítvány",
"Could not authenticate to remote share, password might be wrong" : "Nem sikerült az azonosítás a távoli megosztáshoz. Lehet, hogy rossz a jelszó.",
"Storage not valid" : "A tároló nem érvényes",
+ "Federated share added" : "Egyesített megosztás hozzáadva",
"Couldn't add remote share" : "Távoli megosztás nem adható hozzá",
"Sharing %s failed, because this item is already shared with %s" : "%s megosztása nem sikerült, mert ez már meg van osztva vele: %s",
"Not allowed to create a federated share with the same user" : "Azonos felhasználóval nem lehet létrehozni egyesített megosztást",
@@ -33,16 +35,22 @@
"Decline" : "Elutasítás",
"Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Ossza meg velem az #Nextcloud Egyesített Felhő Azonosító segítségével, lásd %s",
"Share with me through my #Nextcloud Federated Cloud ID" : "Ossza meg velem az #Nextcloud Egyesített Felhő Azonosító segítségével ",
+ "Sharing" : "Megosztás",
"Federated Cloud Sharing" : "Megosztás Egyesített Felhőben",
"Open documentation" : "Dokumentáció megnyitása",
+ "Adjust how people can share between servers." : "A szerverek közti megosztási lehetőségek beállítása",
"Allow users on this server to send shares to other servers" : "Engedélyezze ezen szerver felhasználóinak, hogy fájlokat osszanak meg más szerverekkel.",
"Allow users on this server to receive shares from other servers" : "Engedélyezze ezen szerver felhasználóinak, hogy megosztásokat fogadjanak más szerverektől",
"Search global and public address book for users" : "Felhasználók keresése a globális és a nyilvános névjegyekben",
+ "Allow users to publish their data to a global and public address book" : "Minden felhasználó a közös adattárolót és névjegyzéket használja",
"Federated Cloud" : "Egyesített felhő",
+ "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" : "Bárkivel megoszthatsz aki Nextcloud-ot, ownCloud-ot vagy Pydio-t használ! Csak add meg az egységesített megosztási azonosítójukat a megosztási ablakban. Valahogy így néz ki: person@cloud.example.com",
"Your Federated Cloud ID:" : "Egyesített felhő azonosító:",
+ "Share it so your friends can share files with you:" : "Oszd meg, hogy a barátaid is megoszthassanak veled fájlokat:",
"Add to your website" : "Adja hozzá saját weboldalához",
"Share with me via Nextcloud" : "Ossza meg velem Nextcloud-on keresztül",
"HTML Code:" : "HTML kód:",
+ "Search global and public address book for users and let local users publish their data" : "A központi és nyilvános névjegyzék keresése a felhasználóknak és a helyi felhasználók is hozzáadhatnak",
"Share it:" : "Oszd meg:"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/federatedfilesharing/l10n/ka_GE.js b/apps/federatedfilesharing/l10n/ka_GE.js
new file mode 100644
index 00000000000..2f6963d3675
--- /dev/null
+++ b/apps/federatedfilesharing/l10n/ka_GE.js
@@ -0,0 +1,58 @@
+OC.L10N.register(
+ "federatedfilesharing",
+ {
+ "Federated sharing" : "ფედერალიზირებული გაზიარება",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "გსურთ დაამატოთ {owner}@{remote}-ის დისტანცური გაზიარება {name}?",
+ "Remote share" : "დისტანციური გაზიარება",
+ "Remote share password" : "დისტანციური გაზიარების პაროლი",
+ "Cancel" : "გაუქმება",
+ "Add remote share" : "დისტანციური გაზიარების დამატება",
+ "Copy" : "კოპირება",
+ "Copied!" : "კოპირებულია!",
+ "Not supported!" : "არაა მხარდაჭერილი!",
+ "Press ⌘-C to copy." : "კოპირებისთვის დააჭირეთ ⌘-C.",
+ "Press Ctrl-C to copy." : "კოპირებისთვის დააჭირეთ Ctrl-C-ს.",
+ "Invalid Federated Cloud ID" : "არასწორი ფედერალიზირებული ქლაუდ ID",
+ "Server to server sharing is not enabled on this server" : "ამ სერვერზე სერვერიდან სერვერზე გაზიარება არაა ჩართული",
+ "Couldn't establish a federated share." : "ფედერალიზირებული გაზიარება ვერ დამყარდა.",
+ "Couldn't establish a federated share, maybe the password was wrong." : "ფედერალიზირებული გაზიარება ვერ დამყარდა, შეისაძლოა პაროლი არ იყოს მართებული.",
+ "Federated Share request sent, you will receive an invitation. Check your notifications." : "ფედერალიზირებული გაზიარების მოთხოვნა გაიგზავნა, თქვენ მიიღებთ მოწვევას. შეამოწმეთ თქვენი შეტყობინებები.",
+ "The mountpoint name contains invalid characters." : "დამონტაჟების წერტილის სახელი შეიცავს არასწორ სიმბოლოებს.",
+ "Not allowed to create a federated share with the owner." : "მფლობელთან ფედერალიზირებული გაზიარების შექმნა არაა ნებადართული.",
+ "Invalid or untrusted SSL certificate" : "არასწორი ან არასანდო SSL სერტიფიკატი",
+ "Could not authenticate to remote share, password might be wrong" : "დისტანციურ გაზიარებასთან აუტენტიფიკაცია არ მოხერხდა, შესაძლოა პაროლი იყოს არასწორი",
+ "Storage not valid" : "საცავი არაა სწორი",
+ "Federated share added" : "ფედერალიზირებული გაზიარება დაემატა",
+ "Couldn't add remote share" : "ფედერალიზირებული გაზიარება ვერ დაემატა",
+ "Sharing %s failed, because this item is already shared with %s" : "%s-ს გაზიარება არ მოხერხდა, ეს ობიექტი %s-სთან უკვე გაზიარებულია",
+ "Not allowed to create a federated share with the same user" : "იმავე მომხმარებელთან ფედერალიზირებული გაზიარება ვერ შეიქმნება",
+ "File is already shared with %s" : "ფაილი უკვე გაზიარებულია %s-თან",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "%s-ის გაზიარება ვერ მოხერხდა, ვერ ვოპოვეთ %s, ალბათ სერვერი ახლა მიუწვდომელია ან იყენებს თავის ხელმოწერილ სერტიფიკატს.",
+ "Could not find share" : "გაზიარება ვერ იქნა ნაპოვნი",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "თქვენ მიიღეთ \"%3$s\" როგორც დისტანციური გაზიარება %1$s-სგან (სახელით %2$s)",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "თქვენ მიიღეთ გაზიარება {share} როგორც დისტანციური გაზიარება {user}-სგან (სახელით {behalf})",
+ "You received \"%3$s\" as a remote share from %1$s" : "თქვენ მიიღეთ \"%3$s\" როგორც დისტანციური გაზიარება %1$s-სგან",
+ "You received {share} as a remote share from {user}" : "თქვენ მიიღეთ {share} როგორც დისტანციური გაზიარება {user}-სგან",
+ "Accept" : "მიღება",
+ "Decline" : "უარყოფა",
+ "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "გააზიარეთ ჩემთან ჩემი #Nextcloud-ის ფედერალიზირებული ქლაუდ ID-ის მეშვეობით, იხილეთ %s",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "გააზიარეთ ჩემთან ჩემი #Nextcloud-ის ფედერალიზირებული ქლაუდ ID-ის მეშვეობით",
+ "Sharing" : "გაზიარება",
+ "Federated Cloud Sharing" : "ფედერალიზირებული ქლაუდ გაზიარება",
+ "Open documentation" : "ღია დოკუმენტაცია",
+ "Adjust how people can share between servers." : "განაგეთ თუ როგორ შეუძლიათ ადამიანებს სერვერებს შორის მოახდინონ გაზიარება.",
+ "Allow users on this server to send shares to other servers" : "დართეთ ნება მომხმარებლებს ამ სერვერზე გააგზავნონ გაზიარებები სხვა სერვერებთან",
+ "Allow users on this server to receive shares from other servers" : "დართეთ ნება მომხმარებლებს ამ სერვერზე მიიღონ გაზიარებები სხვა სერვერებიდან",
+ "Search global and public address book for users" : "მოძებნეთ გლობალური და ღია მომხმარებლების მისამართების წიგნები",
+ "Allow users to publish their data to a global and public address book" : "დართეთ ნება მომხმარებლებს გამოაქყვეყნონ მათი მონაცემები გლობალურ და საზოგადო მისამართების წიგნებში",
+ "Federated Cloud" : "ფედერალიზირებული ქლაუდი",
+ "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" : "შეგიძლიათ გაუზიაროთ ნებისმიერ ადამიანს ვინც იყენებს Nextcloud-ს, ownCloud-ს ან Pydio!-ს უბრალოდ მოათავსეთ მათი ფედერალიზირებული ქლაუდ ID-ები გაზიარების დიალოგში. ის გამოიყურება როგოც person@cloud.example.com",
+ "Your Federated Cloud ID:" : "თქვენი ფედერალიზირებული ქლაუდ ID:",
+ "Share it so your friends can share files with you:" : "გააზიარეთ, რომ თქვენმა მეგობრებმაც შეზლონ ფაილების გაზიარება თქვენთან:",
+ "Add to your website" : "საიტზე დამატება",
+ "Share with me via Nextcloud" : "გამიზიარე Nextcloud-ის მეშვეობით",
+ "HTML Code:" : "HTML კოდი:",
+ "Search global and public address book for users and let local users publish their data" : "მოიძიეთ გლობალური და ღია მისამართების წიგნები მომხმარებლებისთვის და მიეცით უფლება ლოკალურ მომხმარებლებს გააზიარონ საკუთარი მონაცემები",
+ "Share it:" : "გააზიარე ეს:"
+},
+"nplurals=1; plural=0;");
diff --git a/apps/federatedfilesharing/l10n/ka_GE.json b/apps/federatedfilesharing/l10n/ka_GE.json
new file mode 100644
index 00000000000..b3828a150a0
--- /dev/null
+++ b/apps/federatedfilesharing/l10n/ka_GE.json
@@ -0,0 +1,56 @@
+{ "translations": {
+ "Federated sharing" : "ფედერალიზირებული გაზიარება",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "გსურთ დაამატოთ {owner}@{remote}-ის დისტანცური გაზიარება {name}?",
+ "Remote share" : "დისტანციური გაზიარება",
+ "Remote share password" : "დისტანციური გაზიარების პაროლი",
+ "Cancel" : "გაუქმება",
+ "Add remote share" : "დისტანციური გაზიარების დამატება",
+ "Copy" : "კოპირება",
+ "Copied!" : "კოპირებულია!",
+ "Not supported!" : "არაა მხარდაჭერილი!",
+ "Press ⌘-C to copy." : "კოპირებისთვის დააჭირეთ ⌘-C.",
+ "Press Ctrl-C to copy." : "კოპირებისთვის დააჭირეთ Ctrl-C-ს.",
+ "Invalid Federated Cloud ID" : "არასწორი ფედერალიზირებული ქლაუდ ID",
+ "Server to server sharing is not enabled on this server" : "ამ სერვერზე სერვერიდან სერვერზე გაზიარება არაა ჩართული",
+ "Couldn't establish a federated share." : "ფედერალიზირებული გაზიარება ვერ დამყარდა.",
+ "Couldn't establish a federated share, maybe the password was wrong." : "ფედერალიზირებული გაზიარება ვერ დამყარდა, შეისაძლოა პაროლი არ იყოს მართებული.",
+ "Federated Share request sent, you will receive an invitation. Check your notifications." : "ფედერალიზირებული გაზიარების მოთხოვნა გაიგზავნა, თქვენ მიიღებთ მოწვევას. შეამოწმეთ თქვენი შეტყობინებები.",
+ "The mountpoint name contains invalid characters." : "დამონტაჟების წერტილის სახელი შეიცავს არასწორ სიმბოლოებს.",
+ "Not allowed to create a federated share with the owner." : "მფლობელთან ფედერალიზირებული გაზიარების შექმნა არაა ნებადართული.",
+ "Invalid or untrusted SSL certificate" : "არასწორი ან არასანდო SSL სერტიფიკატი",
+ "Could not authenticate to remote share, password might be wrong" : "დისტანციურ გაზიარებასთან აუტენტიფიკაცია არ მოხერხდა, შესაძლოა პაროლი იყოს არასწორი",
+ "Storage not valid" : "საცავი არაა სწორი",
+ "Federated share added" : "ფედერალიზირებული გაზიარება დაემატა",
+ "Couldn't add remote share" : "ფედერალიზირებული გაზიარება ვერ დაემატა",
+ "Sharing %s failed, because this item is already shared with %s" : "%s-ს გაზიარება არ მოხერხდა, ეს ობიექტი %s-სთან უკვე გაზიარებულია",
+ "Not allowed to create a federated share with the same user" : "იმავე მომხმარებელთან ფედერალიზირებული გაზიარება ვერ შეიქმნება",
+ "File is already shared with %s" : "ფაილი უკვე გაზიარებულია %s-თან",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "%s-ის გაზიარება ვერ მოხერხდა, ვერ ვოპოვეთ %s, ალბათ სერვერი ახლა მიუწვდომელია ან იყენებს თავის ხელმოწერილ სერტიფიკატს.",
+ "Could not find share" : "გაზიარება ვერ იქნა ნაპოვნი",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "თქვენ მიიღეთ \"%3$s\" როგორც დისტანციური გაზიარება %1$s-სგან (სახელით %2$s)",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "თქვენ მიიღეთ გაზიარება {share} როგორც დისტანციური გაზიარება {user}-სგან (სახელით {behalf})",
+ "You received \"%3$s\" as a remote share from %1$s" : "თქვენ მიიღეთ \"%3$s\" როგორც დისტანციური გაზიარება %1$s-სგან",
+ "You received {share} as a remote share from {user}" : "თქვენ მიიღეთ {share} როგორც დისტანციური გაზიარება {user}-სგან",
+ "Accept" : "მიღება",
+ "Decline" : "უარყოფა",
+ "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "გააზიარეთ ჩემთან ჩემი #Nextcloud-ის ფედერალიზირებული ქლაუდ ID-ის მეშვეობით, იხილეთ %s",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "გააზიარეთ ჩემთან ჩემი #Nextcloud-ის ფედერალიზირებული ქლაუდ ID-ის მეშვეობით",
+ "Sharing" : "გაზიარება",
+ "Federated Cloud Sharing" : "ფედერალიზირებული ქლაუდ გაზიარება",
+ "Open documentation" : "ღია დოკუმენტაცია",
+ "Adjust how people can share between servers." : "განაგეთ თუ როგორ შეუძლიათ ადამიანებს სერვერებს შორის მოახდინონ გაზიარება.",
+ "Allow users on this server to send shares to other servers" : "დართეთ ნება მომხმარებლებს ამ სერვერზე გააგზავნონ გაზიარებები სხვა სერვერებთან",
+ "Allow users on this server to receive shares from other servers" : "დართეთ ნება მომხმარებლებს ამ სერვერზე მიიღონ გაზიარებები სხვა სერვერებიდან",
+ "Search global and public address book for users" : "მოძებნეთ გლობალური და ღია მომხმარებლების მისამართების წიგნები",
+ "Allow users to publish their data to a global and public address book" : "დართეთ ნება მომხმარებლებს გამოაქყვეყნონ მათი მონაცემები გლობალურ და საზოგადო მისამართების წიგნებში",
+ "Federated Cloud" : "ფედერალიზირებული ქლაუდი",
+ "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" : "შეგიძლიათ გაუზიაროთ ნებისმიერ ადამიანს ვინც იყენებს Nextcloud-ს, ownCloud-ს ან Pydio!-ს უბრალოდ მოათავსეთ მათი ფედერალიზირებული ქლაუდ ID-ები გაზიარების დიალოგში. ის გამოიყურება როგოც person@cloud.example.com",
+ "Your Federated Cloud ID:" : "თქვენი ფედერალიზირებული ქლაუდ ID:",
+ "Share it so your friends can share files with you:" : "გააზიარეთ, რომ თქვენმა მეგობრებმაც შეზლონ ფაილების გაზიარება თქვენთან:",
+ "Add to your website" : "საიტზე დამატება",
+ "Share with me via Nextcloud" : "გამიზიარე Nextcloud-ის მეშვეობით",
+ "HTML Code:" : "HTML კოდი:",
+ "Search global and public address book for users and let local users publish their data" : "მოიძიეთ გლობალური და ღია მისამართების წიგნები მომხმარებლებისთვის და მიეცით უფლება ლოკალურ მომხმარებლებს გააზიარონ საკუთარი მონაცემები",
+ "Share it:" : "გააზიარე ეს:"
+},"pluralForm" :"nplurals=1; plural=0;"
+} \ No newline at end of file
diff --git a/apps/federatedfilesharing/l10n/ru.js b/apps/federatedfilesharing/l10n/ru.js
index 24931800c9b..16443874c29 100644
--- a/apps/federatedfilesharing/l10n/ru.js
+++ b/apps/federatedfilesharing/l10n/ru.js
@@ -27,12 +27,12 @@ OC.L10N.register(
"Sharing %s failed, because this item is already shared with %s" : "Не удалось поделиться «%s», пользователю%s уже предоставлен доступ к этому элементу",
"Not allowed to create a federated share with the same user" : "Не допускается создание федеративного общего ресурса с тем же пользователем",
"File is already shared with %s" : "Доступ к файлу уже предоставлен %s",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Не удалось поделиться «%s», не удалось найти %s, возможно, сервер не доступен или использует само-подписанный сертификат.",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Не удалось поделиться «%s», не удалось найти %s, возможно, сервер недоступен или использует самоподписанный сертификат.",
"Could not find share" : "Не удалось найти общий ресурс",
"You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Вы получили «%3$s» в качестве удалённого ресурса из %1$s (от имени %2$s)",
"You received {share} as a remote share from {user} (on behalf of {behalf})" : "Вы получили «{share}» в качестве удалённого ресурса от {user} (от имени {behalf})",
"You received \"%3$s\" as a remote share from %1$s" : "Вы получили «%3$s» в качестве удалённого ресурса из %1$s",
- "You received {share} as a remote share from {user}" : "Вы получили «{share}» в качестве удалённого ресурса от {user}",
+ "You received {share} as a remote share from {user}" : "Вы получили {share} в качестве удалённого ресурса от {user}",
"Accept" : "Принять",
"Decline" : "Отклонить",
"Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Поделитесь со мной через мой #Nextcloud ID в федерации облачных хранилищ, смотрите %s",
@@ -44,15 +44,15 @@ OC.L10N.register(
"Allow users on this server to send shares to other servers" : "Разрешить пользователям делиться с пользователями других серверов",
"Allow users on this server to receive shares from other servers" : "Разрешить пользователям использовать общие ресурсы с других серверов",
"Search global and public address book for users" : "Искать пользователей в глобальной и открытой адресной книге",
- "Allow users to publish their data to a global and public address book" : "Резрешить пользователям публиковать свои данные в глобальной и общедосупной адресной книге",
+ "Allow users to publish their data to a global and public address book" : "Разрешить пользователям публиковать свои данные в глобальной и общедоступной адресной книге",
"Federated Cloud" : "Федерация облачных хранилищ",
"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" : "Можно поделиться с любым пользователем Nextcloud, ownCloud или Pydio! Просто введите его идентификатор федеративного облачного хранилища в диалоге предоставления общего доступа. Идентификатор указывается в виде «person@cloud.example.com».",
"Your Federated Cloud ID:" : "Ваш ID в федерации облачных хранилищ:",
- "Share it so your friends can share files with you:" : "Сообщите его друзьям, что бы они могли поделиться с вами файлами:",
+ "Share it so your friends can share files with you:" : "Сообщите его друзьям, чтобы они могли поделиться с вами файлами:",
"Add to your website" : "Добавить к себе на сайт",
"Share with me via Nextcloud" : "Поделитесь со мной через Nextcloud",
"HTML Code:" : "HTML код:",
- "Search global and public address book for users and let local users publish their data" : "Поиск пользователей в глобальной и общедоступной адресной книге и резрешение публикации своих данных локальным пользователям ",
+ "Search global and public address book for users and let local users publish their data" : "Поиск пользователей в глобальной и общедоступной адресной книге и разрешение публикации своих данных локальным пользователям ",
"Share it:" : "Поделиться:"
},
"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");
diff --git a/apps/federatedfilesharing/l10n/ru.json b/apps/federatedfilesharing/l10n/ru.json
index f4bf96db775..b54c38a5339 100644
--- a/apps/federatedfilesharing/l10n/ru.json
+++ b/apps/federatedfilesharing/l10n/ru.json
@@ -25,12 +25,12 @@
"Sharing %s failed, because this item is already shared with %s" : "Не удалось поделиться «%s», пользователю%s уже предоставлен доступ к этому элементу",
"Not allowed to create a federated share with the same user" : "Не допускается создание федеративного общего ресурса с тем же пользователем",
"File is already shared with %s" : "Доступ к файлу уже предоставлен %s",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Не удалось поделиться «%s», не удалось найти %s, возможно, сервер не доступен или использует само-подписанный сертификат.",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Не удалось поделиться «%s», не удалось найти %s, возможно, сервер недоступен или использует самоподписанный сертификат.",
"Could not find share" : "Не удалось найти общий ресурс",
"You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Вы получили «%3$s» в качестве удалённого ресурса из %1$s (от имени %2$s)",
"You received {share} as a remote share from {user} (on behalf of {behalf})" : "Вы получили «{share}» в качестве удалённого ресурса от {user} (от имени {behalf})",
"You received \"%3$s\" as a remote share from %1$s" : "Вы получили «%3$s» в качестве удалённого ресурса из %1$s",
- "You received {share} as a remote share from {user}" : "Вы получили «{share}» в качестве удалённого ресурса от {user}",
+ "You received {share} as a remote share from {user}" : "Вы получили {share} в качестве удалённого ресурса от {user}",
"Accept" : "Принять",
"Decline" : "Отклонить",
"Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Поделитесь со мной через мой #Nextcloud ID в федерации облачных хранилищ, смотрите %s",
@@ -42,15 +42,15 @@
"Allow users on this server to send shares to other servers" : "Разрешить пользователям делиться с пользователями других серверов",
"Allow users on this server to receive shares from other servers" : "Разрешить пользователям использовать общие ресурсы с других серверов",
"Search global and public address book for users" : "Искать пользователей в глобальной и открытой адресной книге",
- "Allow users to publish their data to a global and public address book" : "Резрешить пользователям публиковать свои данные в глобальной и общедосупной адресной книге",
+ "Allow users to publish their data to a global and public address book" : "Разрешить пользователям публиковать свои данные в глобальной и общедоступной адресной книге",
"Federated Cloud" : "Федерация облачных хранилищ",
"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" : "Можно поделиться с любым пользователем Nextcloud, ownCloud или Pydio! Просто введите его идентификатор федеративного облачного хранилища в диалоге предоставления общего доступа. Идентификатор указывается в виде «person@cloud.example.com».",
"Your Federated Cloud ID:" : "Ваш ID в федерации облачных хранилищ:",
- "Share it so your friends can share files with you:" : "Сообщите его друзьям, что бы они могли поделиться с вами файлами:",
+ "Share it so your friends can share files with you:" : "Сообщите его друзьям, чтобы они могли поделиться с вами файлами:",
"Add to your website" : "Добавить к себе на сайт",
"Share with me via Nextcloud" : "Поделитесь со мной через Nextcloud",
"HTML Code:" : "HTML код:",
- "Search global and public address book for users and let local users publish their data" : "Поиск пользователей в глобальной и общедоступной адресной книге и резрешение публикации своих данных локальным пользователям ",
+ "Search global and public address book for users and let local users publish their data" : "Поиск пользователей в глобальной и общедоступной адресной книге и разрешение публикации своих данных локальным пользователям ",
"Share it:" : "Поделиться:"
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/federatedfilesharing/l10n/sk.js b/apps/federatedfilesharing/l10n/sk.js
new file mode 100644
index 00000000000..7877da712e8
--- /dev/null
+++ b/apps/federatedfilesharing/l10n/sk.js
@@ -0,0 +1,58 @@
+OC.L10N.register(
+ "federatedfilesharing",
+ {
+ "Federated sharing" : "Združené sprístupňovanie",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Chcete pridať vzdialené úložisko {name} patriace používateľovi {owner}@{remote}?",
+ "Remote share" : "Vzdialené úložisko",
+ "Remote share password" : "Heslo k vzdialenému úložisku",
+ "Cancel" : "Zrušiť",
+ "Add remote share" : "Pridať vzdialené úložisko",
+ "Copy" : "Kopírovať",
+ "Copied!" : "Skopírované!",
+ "Not supported!" : "Nie je podporované!",
+ "Press ⌘-C to copy." : "Stlač ⌘-C pre skopírovanie.",
+ "Press Ctrl-C to copy." : "Stlač Ctrl-C pre skopírovanie.",
+ "Invalid Federated Cloud ID" : "Neplatné združené Cloud ID",
+ "Server to server sharing is not enabled on this server" : "Sprístupňovanie server-server nie je na tomto serveri povolené",
+ "Couldn't establish a federated share." : "Nepodarilo sa nadviazať združené zdieľanie",
+ "Couldn't establish a federated share, maybe the password was wrong." : "Nepodarilo sa nadviazať združené zdieľanie, možno je nesprávne heslo.",
+ "Federated Share request sent, you will receive an invitation. Check your notifications." : "Požiadavka na združené zdieľanie bola odoslaná, obdržíte pozvánku. Skontrolujte oznámenia.",
+ "The mountpoint name contains invalid characters." : "Meno prípojného bodu obsahuje neplatné znaky.",
+ "Not allowed to create a federated share with the owner." : "Nie je povolené vytvárať združené zdieľanie s vlastníkom.",
+ "Invalid or untrusted SSL certificate" : "Neplatný alebo nedôveryhodný certifikát SSL",
+ "Could not authenticate to remote share, password might be wrong" : "Nie je možné overiť vo vzdialenom úložisku, heslo môže byť nesprávne",
+ "Storage not valid" : "Neplatné úložisko",
+ "Federated share added" : "Združené sprístupnenie pridané",
+ "Couldn't add remote share" : "Nedá sa pridať vzdialené sprístupnenie",
+ "Sharing %s failed, because this item is already shared with %s" : "Sprístupnenie %s zlyhalo, pretože táto položka už je prístupná pre %s",
+ "Not allowed to create a federated share with the same user" : "Nie je možné vytvoriť združené sprístupnenie so sebou samým",
+ "File is already shared with %s" : "Súbor je už sprístupnený používateľovi %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Zdieľanie %s zlyhalo, %s sa nepodarilo nájsť, server nie je pravdepodobne dostupný alebo používa vlastnoručne podpísaný certifikát.",
+ "Could not find share" : "Nebolo možné nájsť sprístupnenie",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Obdržali ste \"%3$s\" ako vzdialené zdieľanie od %1$s (v mene %2$s) ",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Obdržali ste {share} ako vzdialené zdieľanie od {user} (v mene {behalf})",
+ "You received \"%3$s\" as a remote share from %1$s" : "Obdržali ste \"%3$s\" ako vzdialené zdieľanie od %1$s",
+ "You received {share} as a remote share from {user}" : "Obdržali ste {share} ako vzdialené zdieľanie od {user}",
+ "Accept" : "Schváliť",
+ "Decline" : "Odmietnuť",
+ "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Sprístupnite mi obsah prostredníctvom môjho #Nextcloud Federated Cloud ID, viac na %s",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "Sprístupnite mi obsah prostredníctvom môjho #Nextcloud Federated Cloud ID",
+ "Sharing" : "Sprístupnenie",
+ "Federated Cloud Sharing" : "Sprístupnenie prostredníctvom Federated Cloud",
+ "Open documentation" : "Otvoriť dokumentáciu",
+ "Adjust how people can share between servers." : "Nastavte ako môžu ľudia medzi sebou zdieľať servery.",
+ "Allow users on this server to send shares to other servers" : "Povoliť používateľom z tohto servera sprístupňovať obsah na iných serveroch",
+ "Allow users on this server to receive shares from other servers" : "Povoliť používateľom z tohto servera sprístupňovanie obsahu z iných serverov",
+ "Search global and public address book for users" : "Vyhľadávať používateľov v globálnom a verejnom adresári kontaktov",
+ "Allow users to publish their data to a global and public address book" : "Povoliť používateľom publikovanie ich dát do globálneho a verejného adresára",
+ "Federated Cloud" : "Združený Cloud",
+ "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" : "Môžete zdieľať s kýmkoľvek kto používa Nextcloud, ownCloud alebo Pydio! Len zadajte ich združené Cloud ID v dialógu pre zdieľanie. Vyzerá podobne ako person@cloud.example.com",
+ "Your Federated Cloud ID:" : "Vaše združené Cloud ID",
+ "Share it so your friends can share files with you:" : "Zdieľajte to, aby mohli vaši priatelia zdieľať súbory s vami:",
+ "Add to your website" : "Pridať na svoju webstránku",
+ "Share with me via Nextcloud" : "Sprístupnené cez Nextcloud",
+ "HTML Code:" : "HTML kód:",
+ "Search global and public address book for users and let local users publish their data" : "Vyhľadávať používateľog v globálnom a verejnom adresári a umožniť miestnym používateľom publikovať ich dáta",
+ "Share it:" : "Sprístupniť:"
+},
+"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/federatedfilesharing/l10n/sk.json b/apps/federatedfilesharing/l10n/sk.json
new file mode 100644
index 00000000000..9d94d89eb5e
--- /dev/null
+++ b/apps/federatedfilesharing/l10n/sk.json
@@ -0,0 +1,56 @@
+{ "translations": {
+ "Federated sharing" : "Združené sprístupňovanie",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Chcete pridať vzdialené úložisko {name} patriace používateľovi {owner}@{remote}?",
+ "Remote share" : "Vzdialené úložisko",
+ "Remote share password" : "Heslo k vzdialenému úložisku",
+ "Cancel" : "Zrušiť",
+ "Add remote share" : "Pridať vzdialené úložisko",
+ "Copy" : "Kopírovať",
+ "Copied!" : "Skopírované!",
+ "Not supported!" : "Nie je podporované!",
+ "Press ⌘-C to copy." : "Stlač ⌘-C pre skopírovanie.",
+ "Press Ctrl-C to copy." : "Stlač Ctrl-C pre skopírovanie.",
+ "Invalid Federated Cloud ID" : "Neplatné združené Cloud ID",
+ "Server to server sharing is not enabled on this server" : "Sprístupňovanie server-server nie je na tomto serveri povolené",
+ "Couldn't establish a federated share." : "Nepodarilo sa nadviazať združené zdieľanie",
+ "Couldn't establish a federated share, maybe the password was wrong." : "Nepodarilo sa nadviazať združené zdieľanie, možno je nesprávne heslo.",
+ "Federated Share request sent, you will receive an invitation. Check your notifications." : "Požiadavka na združené zdieľanie bola odoslaná, obdržíte pozvánku. Skontrolujte oznámenia.",
+ "The mountpoint name contains invalid characters." : "Meno prípojného bodu obsahuje neplatné znaky.",
+ "Not allowed to create a federated share with the owner." : "Nie je povolené vytvárať združené zdieľanie s vlastníkom.",
+ "Invalid or untrusted SSL certificate" : "Neplatný alebo nedôveryhodný certifikát SSL",
+ "Could not authenticate to remote share, password might be wrong" : "Nie je možné overiť vo vzdialenom úložisku, heslo môže byť nesprávne",
+ "Storage not valid" : "Neplatné úložisko",
+ "Federated share added" : "Združené sprístupnenie pridané",
+ "Couldn't add remote share" : "Nedá sa pridať vzdialené sprístupnenie",
+ "Sharing %s failed, because this item is already shared with %s" : "Sprístupnenie %s zlyhalo, pretože táto položka už je prístupná pre %s",
+ "Not allowed to create a federated share with the same user" : "Nie je možné vytvoriť združené sprístupnenie so sebou samým",
+ "File is already shared with %s" : "Súbor je už sprístupnený používateľovi %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Zdieľanie %s zlyhalo, %s sa nepodarilo nájsť, server nie je pravdepodobne dostupný alebo používa vlastnoručne podpísaný certifikát.",
+ "Could not find share" : "Nebolo možné nájsť sprístupnenie",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Obdržali ste \"%3$s\" ako vzdialené zdieľanie od %1$s (v mene %2$s) ",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Obdržali ste {share} ako vzdialené zdieľanie od {user} (v mene {behalf})",
+ "You received \"%3$s\" as a remote share from %1$s" : "Obdržali ste \"%3$s\" ako vzdialené zdieľanie od %1$s",
+ "You received {share} as a remote share from {user}" : "Obdržali ste {share} ako vzdialené zdieľanie od {user}",
+ "Accept" : "Schváliť",
+ "Decline" : "Odmietnuť",
+ "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Sprístupnite mi obsah prostredníctvom môjho #Nextcloud Federated Cloud ID, viac na %s",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "Sprístupnite mi obsah prostredníctvom môjho #Nextcloud Federated Cloud ID",
+ "Sharing" : "Sprístupnenie",
+ "Federated Cloud Sharing" : "Sprístupnenie prostredníctvom Federated Cloud",
+ "Open documentation" : "Otvoriť dokumentáciu",
+ "Adjust how people can share between servers." : "Nastavte ako môžu ľudia medzi sebou zdieľať servery.",
+ "Allow users on this server to send shares to other servers" : "Povoliť používateľom z tohto servera sprístupňovať obsah na iných serveroch",
+ "Allow users on this server to receive shares from other servers" : "Povoliť používateľom z tohto servera sprístupňovanie obsahu z iných serverov",
+ "Search global and public address book for users" : "Vyhľadávať používateľov v globálnom a verejnom adresári kontaktov",
+ "Allow users to publish their data to a global and public address book" : "Povoliť používateľom publikovanie ich dát do globálneho a verejného adresára",
+ "Federated Cloud" : "Združený Cloud",
+ "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" : "Môžete zdieľať s kýmkoľvek kto používa Nextcloud, ownCloud alebo Pydio! Len zadajte ich združené Cloud ID v dialógu pre zdieľanie. Vyzerá podobne ako person@cloud.example.com",
+ "Your Federated Cloud ID:" : "Vaše združené Cloud ID",
+ "Share it so your friends can share files with you:" : "Zdieľajte to, aby mohli vaši priatelia zdieľať súbory s vami:",
+ "Add to your website" : "Pridať na svoju webstránku",
+ "Share with me via Nextcloud" : "Sprístupnené cez Nextcloud",
+ "HTML Code:" : "HTML kód:",
+ "Search global and public address book for users and let local users publish their data" : "Vyhľadávať používateľog v globálnom a verejnom adresári a umožniť miestnym používateľom publikovať ich dáta",
+ "Share it:" : "Sprístupniť:"
+},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
+} \ No newline at end of file
diff --git a/apps/federatedfilesharing/l10n/sr.js b/apps/federatedfilesharing/l10n/sr.js
index 0cbb6abf78f..be041737963 100644
--- a/apps/federatedfilesharing/l10n/sr.js
+++ b/apps/federatedfilesharing/l10n/sr.js
@@ -2,17 +2,57 @@ OC.L10N.register(
"federatedfilesharing",
{
"Federated sharing" : "Здружено дељење",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Да ли желите да додате удаљено дељење {name} од {owner}@{remote}?",
+ "Remote share" : "Удаљено дељење",
+ "Remote share password" : "Лозинка удаљеног дељења",
+ "Cancel" : "Одустани",
+ "Add remote share" : "Додај удаљено дељење",
+ "Copy" : "Копирај",
+ "Copied!" : "Копирано!",
+ "Not supported!" : "Није подржано!",
+ "Press ⌘-C to copy." : "Притисните ⌘-C за копирање.",
+ "Press Ctrl-C to copy." : "Притисните Ctrl-C за копирање.",
"Invalid Federated Cloud ID" : "Неисправан ИД Здруженог облака",
+ "Server to server sharing is not enabled on this server" : "Сервер-сервер дељење није подржано на овом серверу",
+ "Couldn't establish a federated share." : "Не могу да успоставим здружено дељење.",
+ "Couldn't establish a federated share, maybe the password was wrong." : "Не могу да успоставим здружено дељење, можда лозинка не ваља.",
+ "Federated Share request sent, you will receive an invitation. Check your notifications." : "Послат захтев за здружено дељење, добићете позивницу. Проверавајте обавештења.",
+ "The mountpoint name contains invalid characters." : "Име тачке монтирања садржи неисправне карактере.",
+ "Not allowed to create a federated share with the owner." : "Није дозвољено да направите здружено дељење са власником.",
+ "Invalid or untrusted SSL certificate" : "Неисправан или SSL сертификат без поверења",
+ "Could not authenticate to remote share, password might be wrong" : "Удаљено дељење не може да провери Ваш идентитет, можда лозинка није исправна",
+ "Storage not valid" : "Складиште није исправно",
+ "Federated share added" : "Здружено дељење додато",
+ "Couldn't add remote share" : "Не могу да додам удаљено дељење",
"Sharing %s failed, because this item is already shared with %s" : "Дељење %s није успело зато што се ова ставка већ дели са %s",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Дељење %s није успело, није могуће пронаћи %s, можда сервер тренутно није доступан.",
+ "Not allowed to create a federated share with the same user" : "Није дозвољено да се направи здружено дељење са истим корисником",
+ "File is already shared with %s" : "Фајл је већ дељен са %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Дељење %s није успело, не могу да нађем %s, можда сервер тренутно није доступан или користи самопотписани сертификат.",
+ "Could not find share" : "Не могу да пронађем дељење",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Примили сте \"%3$s\" као удаљено дељење од %1$s (у име %2$s)",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Примили сте {share} као удаљено дељење од {user} (у име {behalf})",
+ "You received \"%3$s\" as a remote share from %1$s" : "Примили сте \"%3$s\" као удаљено дељење од %1$s",
+ "You received {share} as a remote share from {user}" : "Примили сте {share} као удаљено дељење од {user}",
"Accept" : "Прихвати",
"Decline" : "Одбиј",
+ "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Дели са мном преко мог #Некстклауд Здруженог облака, види %s",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "Дели са мном преко мог #Некстклауд Здруженог облака",
+ "Sharing" : "Дељење",
"Federated Cloud Sharing" : "Здружено дељење у облаку",
"Open documentation" : "Отвори документацију",
+ "Adjust how people can share between servers." : "Подеси како људи деле фајлове између сервера.",
"Allow users on this server to send shares to other servers" : "Дозвољава корисницима овог сервера да шаљу дељења на друге сервере",
"Allow users on this server to receive shares from other servers" : "Дозвољава корисницима овог сервера да примају дељења са других сервера",
+ "Search global and public address book for users" : "Тражи кориснике и у глобалним и јавним именицима",
+ "Allow users to publish their data to a global and public address book" : "Дозволи корисницима да објаве своје податке у јавне и глобалне именике",
"Federated Cloud" : "Здружени облак",
+ "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" : "Можете делите ствари са било ким ко користи Некстклауд, Оунклауд или Пидио. Само унесите њихов ИД Здруженог Облака у дијалог за дељење. ИД изгледа нешто попут person@cloud.example.com",
"Your Federated Cloud ID:" : "ИД вашег здруженог облака:",
- "HTML Code:" : "ХТМЛ кôд:"
+ "Share it so your friends can share files with you:" : "Поделите да би Ваши пријатељи могли да деле са Вама:",
+ "Add to your website" : "Додај на свој веб сајт",
+ "Share with me via Nextcloud" : "Дели са мном преко Некстклауда",
+ "HTML Code:" : "ХТМЛ кôд:",
+ "Search global and public address book for users and let local users publish their data" : "Претражи кориснике у глобалним и јавним именицима и дозволи да локални корисници објављују њихове податке",
+ "Share it:" : "Дели:"
},
"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/federatedfilesharing/l10n/sr.json b/apps/federatedfilesharing/l10n/sr.json
index c5355e6ac6e..de872b01541 100644
--- a/apps/federatedfilesharing/l10n/sr.json
+++ b/apps/federatedfilesharing/l10n/sr.json
@@ -1,16 +1,56 @@
{ "translations": {
"Federated sharing" : "Здружено дељење",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Да ли желите да додате удаљено дељење {name} од {owner}@{remote}?",
+ "Remote share" : "Удаљено дељење",
+ "Remote share password" : "Лозинка удаљеног дељења",
+ "Cancel" : "Одустани",
+ "Add remote share" : "Додај удаљено дељење",
+ "Copy" : "Копирај",
+ "Copied!" : "Копирано!",
+ "Not supported!" : "Није подржано!",
+ "Press ⌘-C to copy." : "Притисните ⌘-C за копирање.",
+ "Press Ctrl-C to copy." : "Притисните Ctrl-C за копирање.",
"Invalid Federated Cloud ID" : "Неисправан ИД Здруженог облака",
+ "Server to server sharing is not enabled on this server" : "Сервер-сервер дељење није подржано на овом серверу",
+ "Couldn't establish a federated share." : "Не могу да успоставим здружено дељење.",
+ "Couldn't establish a federated share, maybe the password was wrong." : "Не могу да успоставим здружено дељење, можда лозинка не ваља.",
+ "Federated Share request sent, you will receive an invitation. Check your notifications." : "Послат захтев за здружено дељење, добићете позивницу. Проверавајте обавештења.",
+ "The mountpoint name contains invalid characters." : "Име тачке монтирања садржи неисправне карактере.",
+ "Not allowed to create a federated share with the owner." : "Није дозвољено да направите здружено дељење са власником.",
+ "Invalid or untrusted SSL certificate" : "Неисправан или SSL сертификат без поверења",
+ "Could not authenticate to remote share, password might be wrong" : "Удаљено дељење не може да провери Ваш идентитет, можда лозинка није исправна",
+ "Storage not valid" : "Складиште није исправно",
+ "Federated share added" : "Здружено дељење додато",
+ "Couldn't add remote share" : "Не могу да додам удаљено дељење",
"Sharing %s failed, because this item is already shared with %s" : "Дељење %s није успело зато што се ова ставка већ дели са %s",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Дељење %s није успело, није могуће пронаћи %s, можда сервер тренутно није доступан.",
+ "Not allowed to create a federated share with the same user" : "Није дозвољено да се направи здружено дељење са истим корисником",
+ "File is already shared with %s" : "Фајл је већ дељен са %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Дељење %s није успело, не могу да нађем %s, можда сервер тренутно није доступан или користи самопотписани сертификат.",
+ "Could not find share" : "Не могу да пронађем дељење",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Примили сте \"%3$s\" као удаљено дељење од %1$s (у име %2$s)",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Примили сте {share} као удаљено дељење од {user} (у име {behalf})",
+ "You received \"%3$s\" as a remote share from %1$s" : "Примили сте \"%3$s\" као удаљено дељење од %1$s",
+ "You received {share} as a remote share from {user}" : "Примили сте {share} као удаљено дељење од {user}",
"Accept" : "Прихвати",
"Decline" : "Одбиј",
+ "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Дели са мном преко мог #Некстклауд Здруженог облака, види %s",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "Дели са мном преко мог #Некстклауд Здруженог облака",
+ "Sharing" : "Дељење",
"Federated Cloud Sharing" : "Здружено дељење у облаку",
"Open documentation" : "Отвори документацију",
+ "Adjust how people can share between servers." : "Подеси како људи деле фајлове између сервера.",
"Allow users on this server to send shares to other servers" : "Дозвољава корисницима овог сервера да шаљу дељења на друге сервере",
"Allow users on this server to receive shares from other servers" : "Дозвољава корисницима овог сервера да примају дељења са других сервера",
+ "Search global and public address book for users" : "Тражи кориснике и у глобалним и јавним именицима",
+ "Allow users to publish their data to a global and public address book" : "Дозволи корисницима да објаве своје податке у јавне и глобалне именике",
"Federated Cloud" : "Здружени облак",
+ "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" : "Можете делите ствари са било ким ко користи Некстклауд, Оунклауд или Пидио. Само унесите њихов ИД Здруженог Облака у дијалог за дељење. ИД изгледа нешто попут person@cloud.example.com",
"Your Federated Cloud ID:" : "ИД вашег здруженог облака:",
- "HTML Code:" : "ХТМЛ кôд:"
+ "Share it so your friends can share files with you:" : "Поделите да би Ваши пријатељи могли да деле са Вама:",
+ "Add to your website" : "Додај на свој веб сајт",
+ "Share with me via Nextcloud" : "Дели са мном преко Некстклауда",
+ "HTML Code:" : "ХТМЛ кôд:",
+ "Search global and public address book for users and let local users publish their data" : "Претражи кориснике у глобалним и јавним именицима и дозволи да локални корисници објављују њихове податке",
+ "Share it:" : "Дели:"
},"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/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 6d215d40156..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
@@ -47,9 +50,9 @@ class AddressHandlerTest extends \Test\TestCase {
public function setUp() {
parent::setUp();
- $this->urlGenerator = $this->getMockBuilder('OCP\IURLGenerator')
+ $this->urlGenerator = $this->getMockBuilder(IURLGenerator::class)
->getMock();
- $this->il10n = $this->getMockBuilder('OCP\IL10N')
+ $this->il10n = $this->getMockBuilder(IL10N::class)
->getMock();
$this->cloudIdManager = new CloudIdManager();
diff --git a/apps/federatedfilesharing/tests/Controller/MountPublicLinkControllerTest.php b/apps/federatedfilesharing/tests/Controller/MountPublicLinkControllerTest.php
index 7714ff4731c..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
*
@@ -35,6 +37,7 @@ use OCP\Federation\ICloudIdManager;
use OCP\Files\IRootFolder;
use OCP\Http\Client\IClientService;
use OCP\IL10N;
+use OCP\IRequest;
use OCP\ISession;
use OCP\IUserManager;
use OCP\IUserSession;
@@ -85,18 +88,18 @@ class MountPublicLinkControllerTest extends \Test\TestCase {
public function setUp() {
parent::setUp();
- $this->request = $this->getMockBuilder('OCP\IRequest')->disableOriginalConstructor()->getMock();
+ $this->request = $this->getMockBuilder(IRequest::class)->disableOriginalConstructor()->getMock();
$this->federatedShareProvider = $this->getMockBuilder('OCA\FederatedFileSharing\FederatedShareProvider')
->disableOriginalConstructor()->getMock();
- $this->shareManager = $this->getMockBuilder('OCP\Share\IManager')->disableOriginalConstructor()->getMock();
+ $this->shareManager = $this->getMockBuilder(IManager::class)->disableOriginalConstructor()->getMock();
$this->addressHandler = $this->getMockBuilder('OCA\FederatedFileSharing\AddressHandler')
->disableOriginalConstructor()->getMock();
$this->rootFolder = $this->getMockBuilder('OCP\Files\IRootFolder')->disableOriginalConstructor()->getMock();
- $this->userManager = $this->getMockBuilder('OCP\IUserManager')->disableOriginalConstructor()->getMock();
+ $this->userManager = $this->getMockBuilder(IUserManager::class)->disableOriginalConstructor()->getMock();
$this->share = new \OC\Share20\Share($this->rootFolder, $this->userManager);
- $this->session = $this->getMockBuilder('OCP\ISession')->disableOriginalConstructor()->getMock();
- $this->l10n = $this->getMockBuilder('OCP\IL10N')->disableOriginalConstructor()->getMock();
- $this->userSession = $this->getMockBuilder('OCP\IUserSession')->disableOriginalConstructor()->getMock();
+ $this->session = $this->getMockBuilder(ISession::class)->disableOriginalConstructor()->getMock();
+ $this->l10n = $this->getMockBuilder(IL10N::class)->disableOriginalConstructor()->getMock();
+ $this->userSession = $this->getMockBuilder(IUserSession::class)->disableOriginalConstructor()->getMock();
$this->clientService = $this->getMockBuilder('OCP\Http\Client\IClientService')->disableOriginalConstructor()->getMock();
$this->cloudIdManager = new CloudIdManager();
diff --git a/apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php b/apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php
index d57b2cb207f..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
@@ -29,13 +31,13 @@ namespace OCA\FederatedFileSharing\Tests;
use OC\Federation\CloudIdManager;
use OC\Files\Filesystem;
-use OCA\FederatedFileSharing\DiscoveryManager;
use OCA\FederatedFileSharing\FederatedShareProvider;
use OCA\FederatedFileSharing\Controller\RequestHandlerController;
use OCP\Federation\ICloudIdManager;
use OCP\Http\Client\IClient;
use OCP\Http\Client\IClientService;
use OCP\Http\Client\IResponse;
+use OCP\IConfig;
use OCP\IUserManager;
use OCP\Share\IShare;
@@ -83,14 +85,14 @@ class RequestHandlerControllerTest extends TestCase {
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
\OC\Share\Share::registerBackend('test', 'Test\Share\Backend');
- $config = $this->getMockBuilder('\OCP\IConfig')
+ $config = $this->getMockBuilder(IConfig::class)
->disableOriginalConstructor()->getMock();
- $clientService = $this->getMockBuilder('\OCP\Http\Client\IClientService')->getMock();
+ $clientService = $this->getMockBuilder(IClientService::class)->getMock();
$httpHelperMock = $this->getMockBuilder('\OC\HTTPHelper')
->setConstructorArgs([$config, $clientService])
->getMock();
$httpHelperMock->expects($this->any())->method('post')->with($this->anything())->will($this->returnValue(true));
- $this->share = $this->getMockBuilder('\OCP\Share\IShare')->getMock();
+ $this->share = $this->getMockBuilder(IShare::class)->getMock();
$this->federatedShareProvider = $this->getMockBuilder('OCA\FederatedFileSharing\FederatedShareProvider')
->disableOriginalConstructor()->getMock();
$this->federatedShareProvider->expects($this->any())
@@ -104,7 +106,7 @@ class RequestHandlerControllerTest extends TestCase {
->disableOriginalConstructor()->getMock();
$this->addressHandler = $this->getMockBuilder('OCA\FederatedFileSharing\AddressHandler')
->disableOriginalConstructor()->getMock();
- $this->userManager = $this->getMockBuilder('OCP\IUserManager')->getMock();
+ $this->userManager = $this->getMockBuilder(IUserManager::class)->getMock();
$this->cloudIdManager = new CloudIdManager();
diff --git a/apps/federatedfilesharing/tests/FederatedShareProviderTest.php b/apps/federatedfilesharing/tests/FederatedShareProviderTest.php
index 3ecd8162cad..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>
*
@@ -31,6 +34,7 @@ use OCA\FederatedFileSharing\FederatedShareProvider;
use OCA\FederatedFileSharing\Notifications;
use OCA\FederatedFileSharing\TokenHandler;
use OCP\Federation\ICloudIdManager;
+use OCP\Files\File;
use OCP\Files\IRootFolder;
use OCP\IConfig;
use OCP\IDBConnection;
@@ -87,15 +91,15 @@ class FederatedShareProviderTest extends \Test\TestCase {
$this->tokenHandler = $this->getMockBuilder('OCA\FederatedFileSharing\TokenHandler')
->disableOriginalConstructor()
->getMock();
- $this->l = $this->getMockBuilder('OCP\IL10N')->getMock();
+ $this->l = $this->getMockBuilder(IL10N::class)->getMock();
$this->l->method('t')
->will($this->returnCallback(function($text, $parameters = []) {
return vsprintf($text, $parameters);
}));
- $this->logger = $this->getMockBuilder('OCP\ILogger')->getMock();
+ $this->logger = $this->getMockBuilder(ILogger::class)->getMock();
$this->rootFolder = $this->getMockBuilder('OCP\Files\IRootFolder')->getMock();
- $this->config = $this->getMockBuilder('OCP\IConfig')->getMock();
- $this->userManager = $this->getMockBuilder('OCP\IUserManager')->getMock();
+ $this->config = $this->getMockBuilder(IConfig::class)->getMock();
+ $this->userManager = $this->getMockBuilder(IUserManager::class)->getMock();
//$this->addressHandler = new AddressHandler(\OC::$server->getURLGenerator(), $this->l);
$this->addressHandler = $this->getMockBuilder('OCA\FederatedFileSharing\AddressHandler')->disableOriginalConstructor()->getMock();
$this->cloudIdManager = new CloudIdManager();
@@ -129,7 +133,7 @@ class FederatedShareProviderTest extends \Test\TestCase {
public function testCreate() {
$share = $this->shareManager->newShare();
- $node = $this->getMockBuilder('\OCP\Files\File')->getMock();
+ $node = $this->getMockBuilder(File::class)->getMock();
$node->method('getId')->willReturn(42);
$node->method('getName')->willReturn('myFile');
@@ -200,7 +204,7 @@ class FederatedShareProviderTest extends \Test\TestCase {
public function testCreateCouldNotFindServer() {
$share = $this->shareManager->newShare();
- $node = $this->getMockBuilder('\OCP\Files\File')->getMock();
+ $node = $this->getMockBuilder(File::class)->getMock();
$node->method('getId')->willReturn(42);
$node->method('getName')->willReturn('myFile');
@@ -256,7 +260,7 @@ class FederatedShareProviderTest extends \Test\TestCase {
public function testCreateException() {
$share = $this->shareManager->newShare();
- $node = $this->getMockBuilder('\OCP\Files\File')->getMock();
+ $node = $this->getMockBuilder(File::class)->getMock();
$node->method('getId')->willReturn(42);
$node->method('getName')->willReturn('myFile');
@@ -312,7 +316,7 @@ class FederatedShareProviderTest extends \Test\TestCase {
public function testCreateShareWithSelf() {
$share = $this->shareManager->newShare();
- $node = $this->getMockBuilder('\OCP\Files\File')->getMock();
+ $node = $this->getMockBuilder(File::class)->getMock();
$node->method('getId')->willReturn(42);
$node->method('getName')->willReturn('myFile');
@@ -351,7 +355,7 @@ class FederatedShareProviderTest extends \Test\TestCase {
public function testCreateAlreadyShared() {
$share = $this->shareManager->newShare();
- $node = $this->getMockBuilder('\OCP\Files\File')->getMock();
+ $node = $this->getMockBuilder(File::class)->getMock();
$node->method('getId')->willReturn(42);
$node->method('getName')->willReturn('myFile');
@@ -419,7 +423,7 @@ class FederatedShareProviderTest extends \Test\TestCase {
$share = $this->shareManager->newShare();
- $node = $this->getMockBuilder('\OCP\Files\File')->getMock();
+ $node = $this->getMockBuilder(File::class)->getMock();
$node->method('getId')->willReturn(42);
$node->method('getName')->willReturn('myFile');
@@ -476,7 +480,7 @@ class FederatedShareProviderTest extends \Test\TestCase {
}
public function testGetSharedBy() {
- $node = $this->getMockBuilder('\OCP\Files\File')->getMock();
+ $node = $this->getMockBuilder(File::class)->getMock();
$node->method('getId')->willReturn(42);
$node->method('getName')->willReturn('myFile');
@@ -517,7 +521,7 @@ class FederatedShareProviderTest extends \Test\TestCase {
}
public function testGetSharedByWithNode() {
- $node = $this->getMockBuilder('\OCP\Files\File')->getMock();
+ $node = $this->getMockBuilder(File::class)->getMock();
$node->method('getId')->willReturn(42);
$node->method('getName')->willReturn('myFile');
@@ -536,7 +540,7 @@ class FederatedShareProviderTest extends \Test\TestCase {
->setNode($node);
$this->provider->create($share);
- $node2 = $this->getMockBuilder('\OCP\Files\File')->getMock();
+ $node2 = $this->getMockBuilder(File::class)->getMock();
$node2->method('getId')->willReturn(43);
$node2->method('getName')->willReturn('myOtherFile');
@@ -555,7 +559,7 @@ class FederatedShareProviderTest extends \Test\TestCase {
}
public function testGetSharedByWithReshares() {
- $node = $this->getMockBuilder('\OCP\Files\File')->getMock();
+ $node = $this->getMockBuilder(File::class)->getMock();
$node->method('getId')->willReturn(42);
$node->method('getName')->willReturn('myFile');
@@ -588,7 +592,7 @@ class FederatedShareProviderTest extends \Test\TestCase {
}
public function testGetSharedByWithLimit() {
- $node = $this->getMockBuilder('\OCP\Files\File')->getMock();
+ $node = $this->getMockBuilder(File::class)->getMock();
$node->method('getId')->willReturn(42);
$node->method('getName')->willReturn('myFile');
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 10e5fc5df51..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
@@ -42,7 +43,7 @@ class TokenHandlerTest extends \Test\TestCase {
public function setUp() {
parent::setUp();
- $this->secureRandom = $this->getMockBuilder('OCP\Security\ISecureRandom')->getMock();
+ $this->secureRandom = $this->getMockBuilder(ISecureRandom::class)->getMock();
$this->tokenHandler = new TokenHandler($this->secureRandom);
}
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/composer/autoload.php b/apps/federation/composer/autoload.php
new file mode 100644
index 00000000000..45677794dd0
--- /dev/null
+++ b/apps/federation/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitFederation::getLoader();
diff --git a/apps/federation/composer/composer.json b/apps/federation/composer/composer.json
new file mode 100644
index 00000000000..2c9a66b242c
--- /dev/null
+++ b/apps/federation/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "Federation"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\Federation\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/federation/composer/composer/ClassLoader.php b/apps/federation/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/federation/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/federation/composer/composer/LICENSE b/apps/federation/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/federation/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/federation/composer/composer/autoload_classmap.php b/apps/federation/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..8274bf45240
--- /dev/null
+++ b/apps/federation/composer/composer/autoload_classmap.php
@@ -0,0 +1,23 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Federation\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\Federation\\BackgroundJob\\GetSharedSecret' => $baseDir . '/../lib/BackgroundJob/GetSharedSecret.php',
+ 'OCA\\Federation\\BackgroundJob\\RequestSharedSecret' => $baseDir . '/../lib/BackgroundJob/RequestSharedSecret.php',
+ 'OCA\\Federation\\Command\\SyncFederationAddressBooks' => $baseDir . '/../lib/Command/SyncFederationAddressBooks.php',
+ 'OCA\\Federation\\Controller\\OCSAuthAPIController' => $baseDir . '/../lib/Controller/OCSAuthAPIController.php',
+ 'OCA\\Federation\\Controller\\SettingsController' => $baseDir . '/../lib/Controller/SettingsController.php',
+ 'OCA\\Federation\\DAV\\FedAuth' => $baseDir . '/../lib/DAV/FedAuth.php',
+ 'OCA\\Federation\\DbHandler' => $baseDir . '/../lib/DbHandler.php',
+ 'OCA\\Federation\\Hooks' => $baseDir . '/../lib/Hooks.php',
+ 'OCA\\Federation\\Middleware\\AddServerMiddleware' => $baseDir . '/../lib/Middleware/AddServerMiddleware.php',
+ 'OCA\\Federation\\Settings\\Admin' => $baseDir . '/../lib/Settings/Admin.php',
+ 'OCA\\Federation\\SyncFederationAddressBooks' => $baseDir . '/../lib/SyncFederationAddressBooks.php',
+ 'OCA\\Federation\\SyncJob' => $baseDir . '/../lib/SyncJob.php',
+ 'OCA\\Federation\\TrustedServers' => $baseDir . '/../lib/TrustedServers.php',
+);
diff --git a/apps/federation/composer/composer/autoload_namespaces.php b/apps/federation/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/federation/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/federation/composer/composer/autoload_psr4.php b/apps/federation/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..d815aedf125
--- /dev/null
+++ b/apps/federation/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Federation\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/federation/composer/composer/autoload_real.php b/apps/federation/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..f2906437fdb
--- /dev/null
+++ b/apps/federation/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitFederation
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitFederation', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitFederation', 'loadClassLoader'));
+
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitFederation::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/federation/composer/composer/autoload_static.php b/apps/federation/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..e005986b9f9
--- /dev/null
+++ b/apps/federation/composer/composer/autoload_static.php
@@ -0,0 +1,49 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitFederation
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\Federation\\' => 15,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\Federation\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\Federation\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\Federation\\BackgroundJob\\GetSharedSecret' => __DIR__ . '/..' . '/../lib/BackgroundJob/GetSharedSecret.php',
+ 'OCA\\Federation\\BackgroundJob\\RequestSharedSecret' => __DIR__ . '/..' . '/../lib/BackgroundJob/RequestSharedSecret.php',
+ 'OCA\\Federation\\Command\\SyncFederationAddressBooks' => __DIR__ . '/..' . '/../lib/Command/SyncFederationAddressBooks.php',
+ 'OCA\\Federation\\Controller\\OCSAuthAPIController' => __DIR__ . '/..' . '/../lib/Controller/OCSAuthAPIController.php',
+ 'OCA\\Federation\\Controller\\SettingsController' => __DIR__ . '/..' . '/../lib/Controller/SettingsController.php',
+ 'OCA\\Federation\\DAV\\FedAuth' => __DIR__ . '/..' . '/../lib/DAV/FedAuth.php',
+ 'OCA\\Federation\\DbHandler' => __DIR__ . '/..' . '/../lib/DbHandler.php',
+ 'OCA\\Federation\\Hooks' => __DIR__ . '/..' . '/../lib/Hooks.php',
+ 'OCA\\Federation\\Middleware\\AddServerMiddleware' => __DIR__ . '/..' . '/../lib/Middleware/AddServerMiddleware.php',
+ 'OCA\\Federation\\Settings\\Admin' => __DIR__ . '/..' . '/../lib/Settings/Admin.php',
+ 'OCA\\Federation\\SyncFederationAddressBooks' => __DIR__ . '/..' . '/../lib/SyncFederationAddressBooks.php',
+ 'OCA\\Federation\\SyncJob' => __DIR__ . '/..' . '/../lib/SyncJob.php',
+ 'OCA\\Federation\\TrustedServers' => __DIR__ . '/..' . '/../lib/TrustedServers.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitFederation::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitFederation::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitFederation::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/federation/l10n/es_CO.js b/apps/federation/l10n/es_CO.js
new file mode 100644
index 00000000000..f67269dab94
--- /dev/null
+++ b/apps/federation/l10n/es_CO.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_CO.json b/apps/federation/l10n/es_CO.json
new file mode 100644
index 00000000000..4e87e62726f
--- /dev/null
+++ b/apps/federation/l10n/es_CO.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/l10n/es_CR.js b/apps/federation/l10n/es_CR.js
new file mode 100644
index 00000000000..f67269dab94
--- /dev/null
+++ b/apps/federation/l10n/es_CR.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_CR.json b/apps/federation/l10n/es_CR.json
new file mode 100644
index 00000000000..4e87e62726f
--- /dev/null
+++ b/apps/federation/l10n/es_CR.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/l10n/es_DO.js b/apps/federation/l10n/es_DO.js
new file mode 100644
index 00000000000..f67269dab94
--- /dev/null
+++ b/apps/federation/l10n/es_DO.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_DO.json b/apps/federation/l10n/es_DO.json
new file mode 100644
index 00000000000..4e87e62726f
--- /dev/null
+++ b/apps/federation/l10n/es_DO.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/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/l10n/eu.js b/apps/federation/l10n/eu.js
new file mode 100644
index 00000000000..d64821f858f
--- /dev/null
+++ b/apps/federation/l10n/eu.js
@@ -0,0 +1,16 @@
+OC.L10N.register(
+ "federation",
+ {
+ "Added to the list of trusted servers" : "Zerbitzari fidagarrien zerrendara gehituta",
+ "Server is already in the list of trusted servers." : "Zerbitzaria fidagarrien zerrendan dago iada",
+ "No server to federate with found" : "Ez da federatzeko zerbitzaririk topatu",
+ "Could not add server" : "Ezin da zerbitzaria gehitu",
+ "Trusted servers" : "Zerbitzari fidagarriak",
+ "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." : "Federazioaren bidez fidagarriak diren zerbitzariekin erabiltzaileen informazioa elkartrukatzeko aukeraematen du. Adibidez, kanpo erabiltzaileak automatikoki betetzeko erabil daiteke, federazio partekatuarentzako",
+ "Add server automatically once a federated share was created successfully" : "Zerbitzaria automatikoki gehitu federatutako partekatze bat ondo sortzen denean",
+ "+ Add trusted server" : "+ Zerbitzari fidagarria gehitu",
+ "Trusted server" : "Zerbitzari fidagarria",
+ "Add" : "Gehitu",
+ "Federation" : "Federazioa"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/federation/l10n/eu.json b/apps/federation/l10n/eu.json
new file mode 100644
index 00000000000..86bdba1dc9d
--- /dev/null
+++ b/apps/federation/l10n/eu.json
@@ -0,0 +1,14 @@
+{ "translations": {
+ "Added to the list of trusted servers" : "Zerbitzari fidagarrien zerrendara gehituta",
+ "Server is already in the list of trusted servers." : "Zerbitzaria fidagarrien zerrendan dago iada",
+ "No server to federate with found" : "Ez da federatzeko zerbitzaririk topatu",
+ "Could not add server" : "Ezin da zerbitzaria gehitu",
+ "Trusted servers" : "Zerbitzari fidagarriak",
+ "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." : "Federazioaren bidez fidagarriak diren zerbitzariekin erabiltzaileen informazioa elkartrukatzeko aukeraematen du. Adibidez, kanpo erabiltzaileak automatikoki betetzeko erabil daiteke, federazio partekatuarentzako",
+ "Add server automatically once a federated share was created successfully" : "Zerbitzaria automatikoki gehitu federatutako partekatze bat ondo sortzen denean",
+ "+ Add trusted server" : "+ Zerbitzari fidagarria gehitu",
+ "Trusted server" : "Zerbitzari fidagarria",
+ "Add" : "Gehitu",
+ "Federation" : "Federazioa"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/federation/l10n/ka_GE.js b/apps/federation/l10n/ka_GE.js
new file mode 100644
index 00000000000..c58d846f758
--- /dev/null
+++ b/apps/federation/l10n/ka_GE.js
@@ -0,0 +1,16 @@
+OC.L10N.register(
+ "federation",
+ {
+ "Added to the list of trusted servers" : "დაემატა სანდო სერვერების სიას",
+ "Server is already in the list of trusted servers." : "სერვერი უკვე დაცული სერვერების სიაშია.",
+ "No server to federate with found" : "სერვერი რომელთანაც შედგება ფედერალიზირება არ იქნა ნაპოვნი",
+ "Could not add server" : "სერვერის დამატება ვერ მოხერხდა",
+ "Trusted servers" : "სანდო სერვერები",
+ "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." : "ფედერალიზაცია იძლევა საშუალებას დაუკავშირდეთ სხვა დაცულ სერვერებს და გაცვალოთ მომხმარებლის დირექტორია. მაგალითისთვის ეს გამოყენებულ იქნება რომ მოხდეს ექსტერნალური მომხმარებლების ფედერალური გაზიარებისთვის ავტო-დასრულება.",
+ "Add server automatically once a federated share was created successfully" : "სერვერის ავტომატურად დამატება, როდესაც ფედერალიზირებული გაზიარება წარმატებით შეიქმნება",
+ "+ Add trusted server" : "+ სანდო სერვერის დამატება",
+ "Trusted server" : "სანდო სერვერი",
+ "Add" : "დამატება",
+ "Federation" : "ფედერაცია"
+},
+"nplurals=1; plural=0;");
diff --git a/apps/federation/l10n/ka_GE.json b/apps/federation/l10n/ka_GE.json
new file mode 100644
index 00000000000..5b929351305
--- /dev/null
+++ b/apps/federation/l10n/ka_GE.json
@@ -0,0 +1,14 @@
+{ "translations": {
+ "Added to the list of trusted servers" : "დაემატა სანდო სერვერების სიას",
+ "Server is already in the list of trusted servers." : "სერვერი უკვე დაცული სერვერების სიაშია.",
+ "No server to federate with found" : "სერვერი რომელთანაც შედგება ფედერალიზირება არ იქნა ნაპოვნი",
+ "Could not add server" : "სერვერის დამატება ვერ მოხერხდა",
+ "Trusted servers" : "სანდო სერვერები",
+ "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." : "ფედერალიზაცია იძლევა საშუალებას დაუკავშირდეთ სხვა დაცულ სერვერებს და გაცვალოთ მომხმარებლის დირექტორია. მაგალითისთვის ეს გამოყენებულ იქნება რომ მოხდეს ექსტერნალური მომხმარებლების ფედერალური გაზიარებისთვის ავტო-დასრულება.",
+ "Add server automatically once a federated share was created successfully" : "სერვერის ავტომატურად დამატება, როდესაც ფედერალიზირებული გაზიარება წარმატებით შეიქმნება",
+ "+ Add trusted server" : "+ სანდო სერვერის დამატება",
+ "Trusted server" : "სანდო სერვერი",
+ "Add" : "დამატება",
+ "Federation" : "ფედერაცია"
+},"pluralForm" :"nplurals=1; plural=0;"
+} \ No newline at end of file
diff --git a/apps/federation/l10n/sk.js b/apps/federation/l10n/sk.js
new file mode 100644
index 00000000000..ebf28b6fa34
--- /dev/null
+++ b/apps/federation/l10n/sk.js
@@ -0,0 +1,16 @@
+OC.L10N.register(
+ "federation",
+ {
+ "Added to the list of trusted servers" : "Pridané do zoznamu dôveryhodných serverov",
+ "Server is already in the list of trusted servers." : "Server sa už nachádza v zozname dôveryhodných serverov",
+ "No server to federate with found" : "Server pre združenie sa nenašiel",
+ "Could not add server" : "Nebolo možné pridať server",
+ "Trusted servers" : "Dôveryhodné servery",
+ "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." : "Združovanie vám umožňuje sa pripojiť k iným dôveryhodným serverom za účelom výmeny adresára používateľov. Používa sa to napr. pre automatické doplňovanie používateľov pri združenom zdieľaní.",
+ "Add server automatically once a federated share was created successfully" : "Pridať server automaticky akonáhle je úspešne vytvorené združené zdieľanie",
+ "+ Add trusted server" : "Pridať dôveryhodný server",
+ "Trusted server" : "Dôveryhodný server",
+ "Add" : "Pridať",
+ "Federation" : "Združovanie"
+},
+"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/federation/l10n/sk.json b/apps/federation/l10n/sk.json
new file mode 100644
index 00000000000..119f2b121fa
--- /dev/null
+++ b/apps/federation/l10n/sk.json
@@ -0,0 +1,14 @@
+{ "translations": {
+ "Added to the list of trusted servers" : "Pridané do zoznamu dôveryhodných serverov",
+ "Server is already in the list of trusted servers." : "Server sa už nachádza v zozname dôveryhodných serverov",
+ "No server to federate with found" : "Server pre združenie sa nenašiel",
+ "Could not add server" : "Nebolo možné pridať server",
+ "Trusted servers" : "Dôveryhodné servery",
+ "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." : "Združovanie vám umožňuje sa pripojiť k iným dôveryhodným serverom za účelom výmeny adresára používateľov. Používa sa to napr. pre automatické doplňovanie používateľov pri združenom zdieľaní.",
+ "Add server automatically once a federated share was created successfully" : "Pridať server automaticky akonáhle je úspešne vytvorené združené zdieľanie",
+ "+ Add trusted server" : "Pridať dôveryhodný server",
+ "Trusted server" : "Dôveryhodný server",
+ "Add" : "Pridať",
+ "Federation" : "Združovanie"
+},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
+} \ 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/composer/autoload.php b/apps/files/composer/autoload.php
new file mode 100644
index 00000000000..3aa13fa515d
--- /dev/null
+++ b/apps/files/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitFiles::getLoader();
diff --git a/apps/files/composer/composer.json b/apps/files/composer/composer.json
new file mode 100644
index 00000000000..3412d9507b2
--- /dev/null
+++ b/apps/files/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "Files"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\Files\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/files/composer/composer/ClassLoader.php b/apps/files/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/files/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/files/composer/composer/LICENSE b/apps/files/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/files/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/files/composer/composer/autoload_classmap.php b/apps/files/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..d184702cfa2
--- /dev/null
+++ b/apps/files/composer/composer/autoload_classmap.php
@@ -0,0 +1,36 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Files\\Activity\\FavoriteProvider' => $baseDir . '/../lib/Activity/FavoriteProvider.php',
+ 'OCA\\Files\\Activity\\Filter\\Favorites' => $baseDir . '/../lib/Activity/Filter/Favorites.php',
+ 'OCA\\Files\\Activity\\Filter\\FileChanges' => $baseDir . '/../lib/Activity/Filter/FileChanges.php',
+ 'OCA\\Files\\Activity\\Helper' => $baseDir . '/../lib/Activity/Helper.php',
+ 'OCA\\Files\\Activity\\Provider' => $baseDir . '/../lib/Activity/Provider.php',
+ 'OCA\\Files\\Activity\\Settings\\FavoriteAction' => $baseDir . '/../lib/Activity/Settings/FavoriteAction.php',
+ 'OCA\\Files\\Activity\\Settings\\FileChanged' => $baseDir . '/../lib/Activity/Settings/FileChanged.php',
+ 'OCA\\Files\\Activity\\Settings\\FileCreated' => $baseDir . '/../lib/Activity/Settings/FileCreated.php',
+ 'OCA\\Files\\Activity\\Settings\\FileDeleted' => $baseDir . '/../lib/Activity/Settings/FileDeleted.php',
+ 'OCA\\Files\\Activity\\Settings\\FileFavorite' => $baseDir . '/../lib/Activity/Settings/FileFavorite.php',
+ 'OCA\\Files\\Activity\\Settings\\FileRestored' => $baseDir . '/../lib/Activity/Settings/FileRestored.php',
+ 'OCA\\Files\\App' => $baseDir . '/../lib/App.php',
+ 'OCA\\Files\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\Files\\BackgroundJob\\CleanupFileLocks' => $baseDir . '/../lib/BackgroundJob/CleanupFileLocks.php',
+ 'OCA\\Files\\BackgroundJob\\DeleteOrphanedItems' => $baseDir . '/../lib/BackgroundJob/DeleteOrphanedItems.php',
+ 'OCA\\Files\\BackgroundJob\\ScanFiles' => $baseDir . '/../lib/BackgroundJob/ScanFiles.php',
+ 'OCA\\Files\\Capabilities' => $baseDir . '/../lib/Capabilities.php',
+ 'OCA\\Files\\Command\\DeleteOrphanedFiles' => $baseDir . '/../lib/Command/DeleteOrphanedFiles.php',
+ 'OCA\\Files\\Command\\Scan' => $baseDir . '/../lib/Command/Scan.php',
+ 'OCA\\Files\\Command\\ScanAppData' => $baseDir . '/../lib/Command/ScanAppData.php',
+ 'OCA\\Files\\Command\\TransferOwnership' => $baseDir . '/../lib/Command/TransferOwnership.php',
+ 'OCA\\Files\\Controller\\ApiController' => $baseDir . '/../lib/Controller/ApiController.php',
+ 'OCA\\Files\\Controller\\SettingsController' => $baseDir . '/../lib/Controller/SettingsController.php',
+ 'OCA\\Files\\Controller\\ViewController' => $baseDir . '/../lib/Controller/ViewController.php',
+ 'OCA\\Files\\Helper' => $baseDir . '/../lib/Helper.php',
+ 'OCA\\Files\\Service\\TagService' => $baseDir . '/../lib/Service/TagService.php',
+ 'OCA\\Files\\Settings\\Admin' => $baseDir . '/../lib/Settings/Admin.php',
+);
diff --git a/apps/files/composer/composer/autoload_namespaces.php b/apps/files/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/files/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/files/composer/composer/autoload_psr4.php b/apps/files/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..c4f95a2b150
--- /dev/null
+++ b/apps/files/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Files\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/files/composer/composer/autoload_real.php b/apps/files/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..fe9ef0b02ae
--- /dev/null
+++ b/apps/files/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitFiles
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitFiles', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitFiles', 'loadClassLoader'));
+
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitFiles::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/files/composer/composer/autoload_static.php b/apps/files/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..44094c6a34c
--- /dev/null
+++ b/apps/files/composer/composer/autoload_static.php
@@ -0,0 +1,62 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitFiles
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\Files\\' => 10,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\Files\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\Files\\Activity\\FavoriteProvider' => __DIR__ . '/..' . '/../lib/Activity/FavoriteProvider.php',
+ 'OCA\\Files\\Activity\\Filter\\Favorites' => __DIR__ . '/..' . '/../lib/Activity/Filter/Favorites.php',
+ 'OCA\\Files\\Activity\\Filter\\FileChanges' => __DIR__ . '/..' . '/../lib/Activity/Filter/FileChanges.php',
+ 'OCA\\Files\\Activity\\Helper' => __DIR__ . '/..' . '/../lib/Activity/Helper.php',
+ 'OCA\\Files\\Activity\\Provider' => __DIR__ . '/..' . '/../lib/Activity/Provider.php',
+ 'OCA\\Files\\Activity\\Settings\\FavoriteAction' => __DIR__ . '/..' . '/../lib/Activity/Settings/FavoriteAction.php',
+ 'OCA\\Files\\Activity\\Settings\\FileChanged' => __DIR__ . '/..' . '/../lib/Activity/Settings/FileChanged.php',
+ 'OCA\\Files\\Activity\\Settings\\FileCreated' => __DIR__ . '/..' . '/../lib/Activity/Settings/FileCreated.php',
+ 'OCA\\Files\\Activity\\Settings\\FileDeleted' => __DIR__ . '/..' . '/../lib/Activity/Settings/FileDeleted.php',
+ 'OCA\\Files\\Activity\\Settings\\FileFavorite' => __DIR__ . '/..' . '/../lib/Activity/Settings/FileFavorite.php',
+ 'OCA\\Files\\Activity\\Settings\\FileRestored' => __DIR__ . '/..' . '/../lib/Activity/Settings/FileRestored.php',
+ 'OCA\\Files\\App' => __DIR__ . '/..' . '/../lib/App.php',
+ 'OCA\\Files\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\Files\\BackgroundJob\\CleanupFileLocks' => __DIR__ . '/..' . '/../lib/BackgroundJob/CleanupFileLocks.php',
+ 'OCA\\Files\\BackgroundJob\\DeleteOrphanedItems' => __DIR__ . '/..' . '/../lib/BackgroundJob/DeleteOrphanedItems.php',
+ 'OCA\\Files\\BackgroundJob\\ScanFiles' => __DIR__ . '/..' . '/../lib/BackgroundJob/ScanFiles.php',
+ 'OCA\\Files\\Capabilities' => __DIR__ . '/..' . '/../lib/Capabilities.php',
+ 'OCA\\Files\\Command\\DeleteOrphanedFiles' => __DIR__ . '/..' . '/../lib/Command/DeleteOrphanedFiles.php',
+ 'OCA\\Files\\Command\\Scan' => __DIR__ . '/..' . '/../lib/Command/Scan.php',
+ 'OCA\\Files\\Command\\ScanAppData' => __DIR__ . '/..' . '/../lib/Command/ScanAppData.php',
+ 'OCA\\Files\\Command\\TransferOwnership' => __DIR__ . '/..' . '/../lib/Command/TransferOwnership.php',
+ 'OCA\\Files\\Controller\\ApiController' => __DIR__ . '/..' . '/../lib/Controller/ApiController.php',
+ 'OCA\\Files\\Controller\\SettingsController' => __DIR__ . '/..' . '/../lib/Controller/SettingsController.php',
+ 'OCA\\Files\\Controller\\ViewController' => __DIR__ . '/..' . '/../lib/Controller/ViewController.php',
+ 'OCA\\Files\\Helper' => __DIR__ . '/..' . '/../lib/Helper.php',
+ 'OCA\\Files\\Service\\TagService' => __DIR__ . '/..' . '/../lib/Service/TagService.php',
+ 'OCA\\Files\\Settings\\Admin' => __DIR__ . '/..' . '/../lib/Settings/Admin.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitFiles::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitFiles::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitFiles::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/files/css/files.scss b/apps/files/css/files.scss
index 7c2d3b0bb1c..d1405517f13 100644
--- a/apps/files/css/files.scss
+++ b/apps/files/css/files.scss
@@ -34,8 +34,6 @@
.newFileMenu .error, #fileList .error {
color: $color-error;
border-color: $color-error;
- -webkit-box-shadow: 0 0 6px #f8b9b7;
- -moz-box-shadow: 0 0 6px #f8b9b7;
box-shadow: 0 0 6px #f8b9b7;
}
@@ -232,9 +230,6 @@ table th#headerName {
position: relative;
height: 50px;
}
-.has-favorites #headerName-container {
- padding-left: 50px;
-}
table th#headerSize, table td.filesize {
text-align: right;
@@ -296,7 +291,12 @@ table td.filename a.name {
line-height: 50px;
padding: 0;
}
-table td.filename label.icon-loading-small {
+table td.filename .thumbnail-wrapper {
+ position: absolute;
+ width: 50px;
+ height: 50px;
+}
+table td.filename .thumbnail-wrapper.icon-loading-small {
&:after {
z-index: 10;
}
@@ -308,10 +308,10 @@ table td.filename .thumbnail {
display: inline-block;
width: 32px;
height: 32px;
+ background-size: 32px;
margin-left: 9px;
margin-top: 9px;
cursor: pointer;
- float: left;
position: absolute;
z-index: 4;
}
@@ -321,12 +321,9 @@ table td.filename input.filename {
margin-left: 48px;
cursor: text;
}
-.has-favorites table td.filename input.filename {
- margin-left: 52px;
-}
table td.filename a, table td.login, table td.logout, table td.download, table td.upload, table td.create, table td.delete { padding:3px 8px 8px 3px; }
-table td.filename .nametext, .uploadtext, .modified, .column-last>span:first-child { float:left; padding:15px 0; }
+table td.filename .nametext, .modified, .column-last>span:first-child { float:left; padding:15px 0; }
.modified, .column-last>span:first-child {
position: relative;
@@ -338,22 +335,23 @@ table td.filename .nametext, .uploadtext, .modified, .column-last>span:first-chi
/* TODO fix usability bug (accidental file/folder selection) */
table td.filename .nametext {
position: absolute;
- left: 55px;
padding: 0;
+ padding-left: 55px;
overflow: hidden;
text-overflow: ellipsis;
width: 70%;
max-width: 800px;
height: 100%;
+ z-index: 10;
+}
+table td.filename .uploadtext {
+ position: absolute;
+ left: 55px;
}
/* ellipsis on file names */
table td.filename .nametext .innernametext {
max-width: calc(100% - 100px) !important;
}
-.has-favorites #fileList td.filename a.name {
- left: 50px;
- margin-right: 50px;
-}
.hide-hidden-files #fileList tr.hidden-file,
.hide-hidden-files #fileList tr.hidden-file.dragging {
@@ -439,49 +437,27 @@ table td.filename .uploadtext {
opacity: .5;
}
+table td.selection {
+ padding: 0;
+}
+
/* File checkboxes */
-#fileList tr td.filename>.selectCheckBox + label:before {
- opacity: 0;
- position: absolute;
- bottom: 4px;
- right: 0;
- z-index: 10;
+#fileList tr td.selection>.selectCheckBox + label:before {
+ opacity: 0.3;
}
-/* Show checkbox when hovering, checked, or selected */
-#fileList tr:hover td.filename>.selectCheckBox + label:before,
-#fileList tr:focus td.filename>.selectCheckBox + label:before,
-#fileList tr td.filename>.selectCheckBox:checked + label:before,
-#fileList tr.selected td.filename>.selectCheckBox + label:before {
+/* Show checkbox with full opacity when hovering, checked, or selected */
+#fileList tr:hover td.selection>.selectCheckBox + label:before,
+#fileList tr:focus td.selection>.selectCheckBox + label:before,
+#fileList tr td.selection>.selectCheckBox:checked + label:before,
+#fileList tr.selected td.selection>.selectCheckBox + label:before {
opacity: 1;
}
/* Use label to have bigger clickable size for checkbox */
-#fileList tr td.filename>.selectCheckBox + label,
-.select-all + label {
- background-position: 30px 30px;
- height: 50px;
- position: absolute;
- width: 50px;
- z-index: 5;
-}
-#fileList tr td.filename>.selectCheckBox {
- /* sometimes checkbox height is bigger (KDE/Qt), so setting to absolute
- * to prevent it to increase the height */
- position: absolute;
- z-index: 10;
-}
+#fileList tr td.selection>.selectCheckBox + label,
.select-all + label {
- top: 0;
-}
-.select-all + label:before {
- position: absolute;
- top: 18px;
- left: 18px;
- z-index: 10;
-}
-.has-favorites .select-all {
- left: 68px;
+ padding: 16px;
}
#fileList tr td.filename {
@@ -502,10 +478,11 @@ table td.filename .uploadtext {
display: inline-block;
float: left;
}
-#fileList tr td.filename .action-favorite {
+#fileList tr td.filename .favorite-mark {
+ position: absolute;
display: block;
- float: left;
- width: 30px;
+ top: -6px;
+ right: -6px;
line-height: 100%;
text-align: center;
}
@@ -516,6 +493,7 @@ table td.filename .uploadtext {
.fileactions {
position: absolute;
right: 0;
+ z-index: 50;
}
.busy .fileactions, .busy .action {
@@ -569,42 +547,49 @@ a.action > img {
margin-bottom: -1px;
}
-#fileList a.action {
- display: inline;
- padding: 17px 8px;
- line-height: 50px;
- opacity: 0;
-}
-#fileList a.action.action-share {
- padding: 17px 14px;
-}
-
-#fileList a.action.action-menu {
- padding-top: 17px;
- padding-bottom: 17px;
- padding-left: 14px;
- padding-right: 14px;
-}
-
-#fileList a.action,
-#fileList a.action.no-permission:hover,
-#fileList a.action.no-permission:focus,
-/* also enforce the low opacity for disabled links that are hovered/focused */
-#fileList a.action.disabled:hover,
-#fileList a.action.disabled:focus,
-#fileList a.action.disabled img {
- opacity: .3;
-}
-
-#fileList a.action.disabled.action-download,
-#fileList a.action.disabled.action-download:hover,
-#fileList a.action.disabled.action-download:focus,
-#fileList a.action:hover,
-#fileList a.action:focus,
-#fileList .fileActionsMenu a.action,
-/* show share action of shared items darker to distinguish from non-shared */
-#fileList a.action.action-share.shared-style {
- opacity: .7;
+#fileList td a {
+ a.action {
+ display: inline;
+ padding: 17px 8px;
+ line-height: 50px;
+ opacity: .3;
+ &.action-share {
+ padding: 17px 14px;
+ .avatar {
+ display: inline-block;
+ vertical-align: middle;
+ }
+ }
+ &.action-menu {
+ padding-top: 17px;
+ padding-bottom: 17px;
+ padding-left: 14px;
+ padding-right: 14px;
+ }
+ &.no-permission {
+ &:hover, &:focus {
+ opacity: .3;
+ }
+ }
+ &.disabled {
+ &:hover, &:focus,
+ img {
+ opacity: .3;
+ }
+ &.action-download {
+ opacity: .7;
+ &:hover, &:focus {
+ opacity: .7;
+ }
+ }
+ }
+ &:hover, &:focus {
+ opacity: .7;
+ }
+ }
+ .fileActionsMenu a.action, a.action.action-share.shared-style {
+ opacity: .7;
+ }
}
// Ellipsize long sharer names
@@ -613,11 +598,15 @@ a.action > img {
max-width: 70px;
overflow: hidden;
text-overflow: ellipsis;
- vertical-align: bottom;
- padding-left: 6px;
+ vertical-align: middle;
+ margin-left: 6px;
+}
+
+#fileList .remoteAddress .userDomain {
+ margin-left: 0 !important;
}
-#fileList .action.action-favorite.permanent {
+#fileList .favorite-mark.permanent {
opacity: 1;
}
@@ -661,9 +650,6 @@ table tr.summary td {
.summary .info {
margin-left: 40px;
}
-.has-favorites .summary .info {
- margin-left: 90px;
-}
table.dragshadow {
width:auto;
@@ -716,12 +702,24 @@ table.dragshadow td.size {
#filestable .filename .action .icon,
#filestable .selectedActions a .icon,
+#filestable .filename .favorite-mark .icon,
#controls .actions .button .icon {
display: inline-block;
vertical-align: middle;
background-size: 16px 16px;
}
+#filestable .filename .favorite-mark {
+ // Override default icons to always hide the star icon and always show the
+ // starred icon even when hovered or focused.
+ & .icon-star {
+ background-image: none;
+ }
+ & .icon-starred {
+ background-image: url('../../../core/img/actions/starred.svg?v=1');
+ }
+}
+
#filestable .filename .action .icon.hidden,
#filestable .selectedActions a .icon.hidden,
#controls .actions .button .icon.hidden {
@@ -744,7 +742,7 @@ table.dragshadow td.size {
.canDrop,
#filestable tbody tr.canDrop {
- background-color: rgba(255, 255, 140, 1);
+ background-color: rgba(255, 255, 140, 1);
}
@@ -757,7 +755,7 @@ table.dragshadow td.size {
.quota-container {
height: 5px;
- border-radius: 3px;
+ border-radius: $border-radius;
div {
height: 100%;
diff --git a/apps/files/css/mobile.scss b/apps/files/css/mobile.scss
index eefc92c816b..12c9e4fa2d3 100644
--- a/apps/files/css/mobile.scss
+++ b/apps/files/css/mobile.scss
@@ -24,10 +24,6 @@ table td.date {
table td {
padding: 0;
}
-/* and accordingly fix left margin of file list summary on mobile */
-.summary .info {
- margin-left: 105px;
-}
/* remove shift for multiselect bar to account for missing navigation */
table.multiselect thead {
@@ -50,12 +46,6 @@ table td.filename .nametext {
#fileList a.action-share span:not(.icon) {
display: none !important;
}
-#fileList a.action.action-favorite {
- opacity: .7 !important;
-}
-#fileList a.action.action-favorite {
- opacity: .3 !important;
-}
/* ellipsis on file names */
table td.filename .nametext .innernametext {
@@ -64,10 +54,6 @@ table td.filename .nametext .innernametext {
/* proper notification area for multi line messages */
#notification-container {
- display: -webkit-box;
- display: -moz-box;
- display: -ms-flexbox;
- display: -webkit-flex;
display: flex;
}
diff --git a/apps/files/css/upload.scss b/apps/files/css/upload.scss
index 4685b20d43a..5263a4b0e03 100644
--- a/apps/files/css/upload.scss
+++ b/apps/files/css/upload.scss
@@ -1,6 +1,4 @@
#upload {
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
box-sizing: border-box;
height: 36px;
width: 39px;
@@ -26,8 +24,6 @@
.file_upload_form { display:inline; float:left; margin:0; padding:0; cursor:pointer; overflow:visible; }
#uploadprogresswrapper, #uploadprogresswrapper * {
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
box-sizing: border-box;
}
diff --git a/apps/files/js/detailsview.js b/apps/files/js/detailsview.js
index a896e84fdc0..7bfc3d5ad7b 100644
--- a/apps/files/js/detailsview.js
+++ b/apps/files/js/detailsview.js
@@ -78,9 +78,6 @@
this._detailFileInfoViews = [];
this._dirty = true;
-
- // uncomment to add some dummy tabs for testing
- //this._addTestTabs();
},
_onClose: function(event) {
@@ -102,21 +99,6 @@
this.selectTab(tabId);
},
- _addTestTabs: function() {
- for (var j = 0; j < 2; j++) {
- var testView = new OCA.Files.DetailTabView({id: 'testtab' + j});
- testView.index = j;
- testView.getLabel = function() { return 'Test tab ' + this.index; };
- testView.render = function() {
- this.$el.empty();
- for (var i = 0; i < 100; i++) {
- this.$el.append('<div>Test tab ' + this.index + ' row ' + i + '</div>');
- }
- };
- this._tabViews.push(testView);
- }
- },
-
template: function(vars) {
if (!this._template) {
this._template = Handlebars.compile(TEMPLATE);
diff --git a/apps/files/js/favoritesfilelist.js b/apps/files/js/favoritesfilelist.js
index 4c2cf3ce818..8c9c125d0a1 100644
--- a/apps/files/js/favoritesfilelist.js
+++ b/apps/files/js/favoritesfilelist.js
@@ -66,7 +66,6 @@ $(document).ready(function() {
},
reload: function() {
- var tagName = OC.TAG_FAVORITE;
this.showMask();
if (this._reloadCall) {
this._reloadCall.abort();
diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js
index 3da9b06b0d3..0f320c8b3c7 100644
--- a/apps/files/js/fileactions.js
+++ b/apps/files/js/fileactions.js
@@ -706,7 +706,7 @@
* @property {String} mime mime type
* @property {int} permissions permissions
* @property {(Function|String)} icon icon path to the icon or function that returns it (deprecated, use iconClass instead)
- * @property {(Function|String)} iconClass class name of the icon (recommended for theming)
+ * @property {(String|OCA.Files.FileActions~iconClassFunction)} iconClass class name of the icon (recommended for theming)
* @property {OCA.Files.FileActions~renderActionFunction} [render] optional rendering function
* @property {OCA.Files.FileActions~actionHandler} actionHandler action handler function
*/
@@ -746,6 +746,17 @@
*/
/**
+ * Icon class function for actions.
+ * The function returns the icon class of the action using
+ * the given context information.
+ *
+ * @callback OCA.Files.FileActions~iconClassFunction
+ * @param {String} fileName name of the file on which the action must be performed
+ * @param {OCA.Files.FileActionContext} context action context
+ * @return {String} icon class
+ */
+
+ /**
* Action handler function for file actions
*
* @callback OCA.Files.FileActions~actionHandler
diff --git a/apps/files/js/fileactionsmenu.js b/apps/files/js/fileactionsmenu.js
index 45d2bd83049..b8022f13734 100644
--- a/apps/files/js/fileactionsmenu.js
+++ b/apps/files/js/fileactionsmenu.js
@@ -115,6 +115,11 @@
item = _.extend({}, item);
item.displayName = item.displayName(self._context);
}
+ if (_.isFunction(item.iconClass)) {
+ var fileName = self._context.$file.attr('data-file');
+ item = _.extend({}, item);
+ item.iconClass = item.iconClass(fileName, self._context);
+ }
return item;
});
items = items.sort(function(actionA, actionB) {
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index cc23ac73979..4790afcf4d0 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -332,7 +332,7 @@
this.$fileList.on('click','td.filename>a.name, td.filesize, td.date', _.bind(this._onClickFile, this));
- this.$fileList.on('change', 'td.filename>.selectCheckBox', _.bind(this._onClickFileCheckbox, this));
+ this.$fileList.on('change', 'td.selection>.selectCheckBox', _.bind(this._onClickFileCheckbox, this));
this.$el.on('show', _.bind(this._onShow, this));
this.$el.on('urlChanged', _.bind(this._onUrlChanged, this));
this.$el.find('.select-all').click(_.bind(this._onClickSelectAll, this));
@@ -593,7 +593,7 @@
* @param {bool} state true to select, false to deselect
*/
_selectFileEl: function($tr, state, showDetailsView) {
- var $checkbox = $tr.find('td.filename>.selectCheckBox');
+ var $checkbox = $tr.find('td.selection>.selectCheckBox');
var oldData = !!this._selectedFiles[$tr.data('id')];
var data;
$checkbox.prop('checked', state);
@@ -649,7 +649,7 @@
else {
this._lastChecked = $tr;
}
- var $checkbox = $tr.find('td.filename>.selectCheckBox');
+ var $checkbox = $tr.find('td.selection>.selectCheckBox');
this._selectFileEl($tr, !$checkbox.prop('checked'));
this.updateSelectionSummary();
} else {
@@ -704,7 +704,7 @@
*/
_onClickSelectAll: function(e) {
var checked = $(e.target).prop('checked');
- this.$fileList.find('td.filename>.selectCheckBox').prop('checked', checked)
+ this.$fileList.find('td.selection>.selectCheckBox').prop('checked', checked)
.closest('tr').toggleClass('selected', checked);
this._selectedFiles = {};
this._selectionSummary.clear();
@@ -1063,6 +1063,13 @@
this.$fileList.empty();
+ if (this._allowSelection) {
+ // The results table, which has no selection column, checks
+ // whether the main table has a selection column or not in order
+ // to align its contents with those of the main table.
+ this.$el.addClass('has-selection');
+ }
+
// clear "Select all" checkbox
this.$el.find('.select-all').prop('checked', false);
@@ -1192,6 +1199,20 @@
path = this.getCurrentDirectory();
}
+ // selection td
+ if (this._allowSelection) {
+ td = $('<td class="selection"></td>');
+
+ td.append(
+ '<input id="select-' + this.id + '-' + fileData.id +
+ '" type="checkbox" class="selectCheckBox checkbox"/><label for="select-' + this.id + '-' + fileData.id + '">' +
+ '<span class="hidden-visually">' + t('files', 'Select') + '</span>' +
+ '</label>'
+ );
+
+ tr.append(td);
+ }
+
// filename td
td = $('<td class="filename"></td>');
@@ -1203,22 +1224,13 @@
else {
linkUrl = this.getDownloadUrl(name, path, type === 'dir');
}
- if (this._allowSelection) {
- td.append(
- '<input id="select-' + this.id + '-' + fileData.id +
- '" type="checkbox" class="selectCheckBox checkbox"/><label for="select-' + this.id + '-' + fileData.id + '">' +
- '<div class="thumbnail" style="background-image:url(' + icon + '); background-size: 32px;"></div>' +
- '<span class="hidden-visually">' + t('files', 'Select') + '</span>' +
- '</label>'
- );
- } else {
- td.append('<div class="thumbnail" style="background-image:url(' + icon + '); background-size: 32px;"></div>');
- }
var linkElem = $('<a></a>').attr({
"class": "name",
"href": linkUrl
});
+ linkElem.append('<div class="thumbnail-wrapper"><div class="thumbnail" style="background-image:url(' + icon + ');"></div></div>');
+
// from here work on the display name
name = fileData.displayName || name;
@@ -1673,6 +1685,7 @@
// close sidebar
this._updateDetailsView(null);
}
+ this._setCurrentDir(this.getCurrentDirectory(), false);
var callBack = this.reloadCallback.bind(this);
return this._reloadCall.then(callBack, callBack);
},
@@ -2614,6 +2627,13 @@
*/
_createSummary: function() {
var $tr = $('<tr class="summary"></tr>');
+
+ if (this._allowSelection) {
+ // Dummy column for selection, as all rows must have the same
+ // number of columns.
+ $tr.append('<td></td>');
+ }
+
this.$el.find('tfoot').append($tr);
return new OCA.Files.FileSummary($tr, {config: this._filesConfig});
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/js/tagsplugin.js b/apps/files/js/tagsplugin.js
index 9bd20be4bf8..747a7245a56 100644
--- a/apps/files/js/tagsplugin.js
+++ b/apps/files/js/tagsplugin.js
@@ -17,12 +17,12 @@
PROPERTY_FAVORITE: '{' + OC.Files.Client.NS_OWNCLOUD + '}favorite'
});
- var TEMPLATE_FAVORITE_ACTION =
- '<a href="#" ' +
- 'class="action action-favorite {{#isFavorite}}permanent{{/isFavorite}}">' +
+ var TEMPLATE_FAVORITE_MARK =
+ '<div ' +
+ 'class="favorite-mark {{#isFavorite}}permanent{{/isFavorite}}">' +
'<span class="icon {{iconClass}}" />' +
'<span class="hidden-visually">{{altText}}</span>' +
- '</a>';
+ '</div>';
/**
* Returns the icon class for the matching state
@@ -42,24 +42,24 @@
*/
function renderStar(state) {
if (!this._template) {
- this._template = Handlebars.compile(TEMPLATE_FAVORITE_ACTION);
+ this._template = Handlebars.compile(TEMPLATE_FAVORITE_MARK);
}
return this._template({
isFavorite: state,
- altText: state ? t('files', 'Favorited') : t('files', 'Favorite'),
+ altText: state ? t('files', 'Favorited') : t('files', 'Not favorited'),
iconClass: getStarIconClass(state)
});
}
/**
- * Toggle star icon on action element
+ * Toggle star icon on favorite mark element
*
- * @param {Object} action element
+ * @param {Object} $favoriteMarkEl favorite mark element
* @param {boolean} state true if starred, false otherwise
*/
- function toggleStar($actionEl, state) {
- $actionEl.removeClass('icon-star icon-starred').addClass(getStarIconClass(state));
- $actionEl.toggleClass('permanent', state);
+ function toggleStar($favoriteMarkEl, state) {
+ $favoriteMarkEl.removeClass('icon-star icon-starred').addClass(getStarIconClass(state));
+ $favoriteMarkEl.toggleClass('permanent', state);
}
OCA.Files = OCA.Files || {};
@@ -67,8 +67,9 @@
/**
* @namespace OCA.Files.TagsPlugin
*
- * Extends the file actions and file list to include a favorite action icon
- * and addition "data-tags" and "data-favorite" attributes.
+ * Extends the file actions and file list to include a favorite mark icon
+ * and a favorite action in the file actions menu; it also adds "data-tags"
+ * and "data-favorite" attributes to file elements.
*/
OCA.Files.TagsPlugin = {
name: 'Tags',
@@ -84,22 +85,38 @@
_extendFileActions: function(fileActions) {
var self = this;
- // register "star" action
+
fileActions.registerAction({
name: 'Favorite',
- displayName: t('files', 'Favorite'),
+ displayName: function(context) {
+ var $file = context.$file;
+ var isFavorite = $file.data('favorite') === true;
+
+ if (isFavorite) {
+ return t('files', 'Remove from favorites');
+ }
+
+ // As it is currently not possible to provide a context for
+ // the i18n strings "Add to favorites" was used instead of
+ // "Favorite" to remove the ambiguity between verb and noun
+ // when it is translated.
+ return t('files', 'Add to favorites');
+ },
mime: 'all',
+ order: -100,
permissions: OC.PERMISSION_READ,
- type: OCA.Files.FileActions.TYPE_INLINE,
- render: function(actionSpec, isDefault, context) {
+ iconClass: function(fileName, context) {
var $file = context.$file;
var isFavorite = $file.data('favorite') === true;
- var $icon = $(renderStar(isFavorite));
- $file.find('td:first>.favorite').replaceWith($icon);
- return $icon;
+
+ if (isFavorite) {
+ return 'icon-star-dark';
+ }
+
+ return 'icon-starred';
},
actionHandler: function(fileName, context) {
- var $actionEl = context.$file.find('.action-favorite');
+ var $favoriteMarkEl = context.$file.find('.favorite-mark');
var $file = context.$file;
var fileInfo = context.fileList.files[$file.index()];
var dir = context.dir || context.fileList.getCurrentDirectory();
@@ -118,14 +135,14 @@
}
// pre-toggle the star
- toggleStar($actionEl, !isFavorite);
+ toggleStar($favoriteMarkEl, !isFavorite);
context.fileInfoModel.trigger('busy', context.fileInfoModel, true);
self.applyFileTags(
dir + '/' + fileName,
tags,
- $actionEl,
+ $favoriteMarkEl,
isFavorite
).then(function(result) {
context.fileInfoModel.trigger('busy', context.fileInfoModel, false);
@@ -145,17 +162,19 @@
_extendFileList: function(fileList) {
// extend row prototype
- fileList.$el.addClass('has-favorites');
var oldCreateRow = fileList._createRow;
fileList._createRow = function(fileData) {
var $tr = oldCreateRow.apply(this, arguments);
+ var isFavorite = false;
if (fileData.tags) {
$tr.attr('data-tags', fileData.tags.join('|'));
if (fileData.tags.indexOf(OC.TAG_FAVORITE) >= 0) {
$tr.attr('data-favorite', true);
+ isFavorite = true;
}
}
- $tr.find('td:first').prepend('<div class="favorite"></div>');
+ var $icon = $(renderStar(isFavorite));
+ $tr.find('td.filename .thumbnail').append($icon);
return $tr;
};
var oldElementToFile = fileList.elementToFile;
@@ -215,10 +234,10 @@
*
* @param {String} fileName path to the file or folder to tag
* @param {Array.<String>} tagNames array of tag names
- * @param {Object} $actionEl element
+ * @param {Object} $favoriteMarkEl favorite mark element
* @param {boolean} isFavorite Was the item favorited before
*/
- applyFileTags: function(fileName, tagNames, $actionEl, isFavorite) {
+ applyFileTags: function(fileName, tagNames, $favoriteMarkEl, isFavorite) {
var encodedPath = OC.encodePath(fileName);
while (encodedPath[0] === '/') {
encodedPath = encodedPath.substr(1);
@@ -238,7 +257,7 @@
message = ': ' + response.responseJSON.message;
}
OC.Notification.show(t('files', 'An error occurred while trying to update the tags' + message), {type: 'error'});
- toggleStar($actionEl, isFavorite);
+ toggleStar($favoriteMarkEl, isFavorite);
});
}
};
diff --git a/apps/files/l10n/ca.js b/apps/files/l10n/ca.js
index f4bb7455e75..a23ea0d5ff2 100644
--- a/apps/files/l10n/ca.js
+++ b/apps/files/l10n/ca.js
@@ -16,7 +16,6 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "No hi ha prou espai lliure, està carregant {size1} però només pot {size2}",
"Target folder \"{dir}\" does not exist any more" : "La carpeta objectiu \"{dir}\" ja no existeix",
"Not enough free space" : "Espai lliure insuficient",
- "Uploading …" : "S'està carregant",
"…" : ".....",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
"Actions" : "Accions",
@@ -123,7 +122,6 @@ OC.L10N.register(
"Show hidden files" : "Mostra els fitxers ocults",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Utilitzeu aquesta adreça per <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">accedir als vostres fitxers a través de WebDAV</a>",
- "Uploading @" : "S'està carregant @",
"No files in here" : "No hi ha arxius",
"Upload some content or sync with your devices!" : "Pugi continguts o sincronitzi els seus dispositius.",
"No entries found in this folder" : "No hi ha entrades en aquesta carpeta",
diff --git a/apps/files/l10n/ca.json b/apps/files/l10n/ca.json
index 13beefbf4b1..aad9cb3b39d 100644
--- a/apps/files/l10n/ca.json
+++ b/apps/files/l10n/ca.json
@@ -14,7 +14,6 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "No hi ha prou espai lliure, està carregant {size1} però només pot {size2}",
"Target folder \"{dir}\" does not exist any more" : "La carpeta objectiu \"{dir}\" ja no existeix",
"Not enough free space" : "Espai lliure insuficient",
- "Uploading …" : "S'està carregant",
"…" : ".....",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
"Actions" : "Accions",
@@ -121,7 +120,6 @@
"Show hidden files" : "Mostra els fitxers ocults",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Utilitzeu aquesta adreça per <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">accedir als vostres fitxers a través de WebDAV</a>",
- "Uploading @" : "S'està carregant @",
"No files in here" : "No hi ha arxius",
"Upload some content or sync with your devices!" : "Pugi continguts o sincronitzi els seus dispositius.",
"No entries found in this folder" : "No hi ha entrades en aquesta carpeta",
diff --git a/apps/files/l10n/cs.js b/apps/files/l10n/cs.js
index 6105c3e1163..e165e5a1580 100644
--- a/apps/files/l10n/cs.js
+++ b/apps/files/l10n/cs.js
@@ -16,7 +16,6 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Není dostatek místa pro uložení, velikost souboru je {size1}, zbývá pouze {size2}",
"Target folder \"{dir}\" does not exist any more" : "Cílový adresář \"{dir}\" již neexistuje",
"Not enough free space" : "Nedostatek volného prostoru",
- "Uploading …" : "Nahrávám...",
"…" : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} z {totalSize} ({bitrate})",
"Actions" : "Činnosti",
@@ -123,7 +122,6 @@ OC.L10N.register(
"Show hidden files" : "Zobrazit skryté soubory",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Použijte tuto adresu pro <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">přístup ke svým Souborům přes WebDAV</a>",
- "Uploading @" : "Nahrávám @",
"No files in here" : "Žádné soubory",
"Upload some content or sync with your devices!" : "Nahrajte nějaký obsah nebo synchronizujte se svými přístroji!",
"No entries found in this folder" : "V tomto adresáři nebylo nic nalezeno",
diff --git a/apps/files/l10n/cs.json b/apps/files/l10n/cs.json
index ed7dfac05e0..b48c6610553 100644
--- a/apps/files/l10n/cs.json
+++ b/apps/files/l10n/cs.json
@@ -14,7 +14,6 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Není dostatek místa pro uložení, velikost souboru je {size1}, zbývá pouze {size2}",
"Target folder \"{dir}\" does not exist any more" : "Cílový adresář \"{dir}\" již neexistuje",
"Not enough free space" : "Nedostatek volného prostoru",
- "Uploading …" : "Nahrávám...",
"…" : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} z {totalSize} ({bitrate})",
"Actions" : "Činnosti",
@@ -121,7 +120,6 @@
"Show hidden files" : "Zobrazit skryté soubory",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Použijte tuto adresu pro <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">přístup ke svým Souborům přes WebDAV</a>",
- "Uploading @" : "Nahrávám @",
"No files in here" : "Žádné soubory",
"Upload some content or sync with your devices!" : "Nahrajte nějaký obsah nebo synchronizujte se svými přístroji!",
"No entries found in this folder" : "V tomto adresáři nebylo nic nalezeno",
diff --git a/apps/files/l10n/da.js b/apps/files/l10n/da.js
index b8f4515cf74..ee70b6a15cd 100644
--- a/apps/files/l10n/da.js
+++ b/apps/files/l10n/da.js
@@ -16,7 +16,7 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Der er ikke tilstrækkeligt friplads. Du uplaoder {size1} men der er kun {size2} tilbage",
"Target folder \"{dir}\" does not exist any more" : "Destinations mappen \"{dir}\" eksistere ikke længere",
"Not enough free space" : "Ikke nok fri plads",
- "Uploading …" : "Uploader...",
+ "Uploading …" : "Uploader ...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} af {totalSize} ({bitrate})",
"Actions" : "Handlinger",
@@ -77,6 +77,9 @@ OC.L10N.register(
"Favorite" : "Foretrukken",
"New folder" : "Ny Mappe",
"Upload file" : "Upload fil",
+ "Not favorited" : "Ingen foretrukne",
+ "Remove from favorites" : "Fjern fra favoritter",
+ "Add to favorites" : "Tilføj til favoritter",
"An error occurred while trying to update the tags" : "Der opstod en fejl under forsøg på at opdatere mærkerne",
"Added to favorites" : "Tilføjet til favoritter",
"Removed from favorites" : "Fjernet fra favoritter",
@@ -123,7 +126,6 @@ OC.L10N.register(
"Show hidden files" : "Vis skjulte filer",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Brug denne adresse til at <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">tilgå dine filer via WebDAV</a>",
- "Uploading @" : "Uploader @",
"Cancel upload" : "Annuller upload ",
"No files in here" : "Her er ingen filer",
"Upload some content or sync with your devices!" : "Overfør indhold eller synkronisér med dine enheder!",
diff --git a/apps/files/l10n/da.json b/apps/files/l10n/da.json
index 7e5e35de51e..aed0a9b9715 100644
--- a/apps/files/l10n/da.json
+++ b/apps/files/l10n/da.json
@@ -14,7 +14,7 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Der er ikke tilstrækkeligt friplads. Du uplaoder {size1} men der er kun {size2} tilbage",
"Target folder \"{dir}\" does not exist any more" : "Destinations mappen \"{dir}\" eksistere ikke længere",
"Not enough free space" : "Ikke nok fri plads",
- "Uploading …" : "Uploader...",
+ "Uploading …" : "Uploader ...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} af {totalSize} ({bitrate})",
"Actions" : "Handlinger",
@@ -75,6 +75,9 @@
"Favorite" : "Foretrukken",
"New folder" : "Ny Mappe",
"Upload file" : "Upload fil",
+ "Not favorited" : "Ingen foretrukne",
+ "Remove from favorites" : "Fjern fra favoritter",
+ "Add to favorites" : "Tilføj til favoritter",
"An error occurred while trying to update the tags" : "Der opstod en fejl under forsøg på at opdatere mærkerne",
"Added to favorites" : "Tilføjet til favoritter",
"Removed from favorites" : "Fjernet fra favoritter",
@@ -121,7 +124,6 @@
"Show hidden files" : "Vis skjulte filer",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Brug denne adresse til at <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">tilgå dine filer via WebDAV</a>",
- "Uploading @" : "Uploader @",
"Cancel upload" : "Annuller upload ",
"No files in here" : "Her er ingen filer",
"Upload some content or sync with your devices!" : "Overfør indhold eller synkronisér med dine enheder!",
diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js
index 166166316ab..ca73ab73357 100644
--- a/apps/files/l10n/de.js
+++ b/apps/files/l10n/de.js
@@ -16,7 +16,7 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nicht genügend freier Speicherplatz, Du möchtest{size1} hochladen, es sind jedoch nur noch {size2} verfügbar.",
"Target folder \"{dir}\" does not exist any more" : "Ziel-Verzeichnis \"{dir}\" existiert nicht mehr",
"Not enough free space" : "Nicht genügend freier Speicherplatz",
- "Uploading …" : "Lade hoch…",
+ "Uploading …" : "Lade hoch...",
"…" : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} von {totalSize} ({bitrate})",
"Actions" : "Aktionen",
@@ -77,6 +77,9 @@ OC.L10N.register(
"Favorite" : "Favorit",
"New folder" : "Neuer Ordner",
"Upload file" : "Datei hochladen",
+ "Not favorited" : "Nicht favorisiert",
+ "Remove from favorites" : "Von Favoriten entfernen",
+ "Add to favorites" : "Zu den Favoriten hinzufügen",
"An error occurred while trying to update the tags" : "Es ist ein Fehler beim Aktualisieren der Tags aufgetreten",
"Added to favorites" : "Zu den Favoriten hinzugefügt",
"Removed from favorites" : "Aus den Favoriten entfernt",
@@ -123,7 +126,6 @@ OC.L10N.register(
"Show hidden files" : "Versteckte Dateien anzeigen",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Diese Adresse benutzen, um <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">über WebDAV auf Deine Dateien zuzugreifen</a>",
- "Uploading @" : "Lade @ hoch",
"Cancel upload" : "Hochladen abbrechen",
"No files in here" : "Keine Dateien vorhanden",
"Upload some content or sync with your devices!" : "Inhalte hochladen oder mit deinen Geräten synchronisieren!",
diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json
index f520dc86f13..0fa4becb1a9 100644
--- a/apps/files/l10n/de.json
+++ b/apps/files/l10n/de.json
@@ -14,7 +14,7 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nicht genügend freier Speicherplatz, Du möchtest{size1} hochladen, es sind jedoch nur noch {size2} verfügbar.",
"Target folder \"{dir}\" does not exist any more" : "Ziel-Verzeichnis \"{dir}\" existiert nicht mehr",
"Not enough free space" : "Nicht genügend freier Speicherplatz",
- "Uploading …" : "Lade hoch…",
+ "Uploading …" : "Lade hoch...",
"…" : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} von {totalSize} ({bitrate})",
"Actions" : "Aktionen",
@@ -75,6 +75,9 @@
"Favorite" : "Favorit",
"New folder" : "Neuer Ordner",
"Upload file" : "Datei hochladen",
+ "Not favorited" : "Nicht favorisiert",
+ "Remove from favorites" : "Von Favoriten entfernen",
+ "Add to favorites" : "Zu den Favoriten hinzufügen",
"An error occurred while trying to update the tags" : "Es ist ein Fehler beim Aktualisieren der Tags aufgetreten",
"Added to favorites" : "Zu den Favoriten hinzugefügt",
"Removed from favorites" : "Aus den Favoriten entfernt",
@@ -121,7 +124,6 @@
"Show hidden files" : "Versteckte Dateien anzeigen",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Diese Adresse benutzen, um <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">über WebDAV auf Deine Dateien zuzugreifen</a>",
- "Uploading @" : "Lade @ hoch",
"Cancel upload" : "Hochladen abbrechen",
"No files in here" : "Keine Dateien vorhanden",
"Upload some content or sync with your devices!" : "Inhalte hochladen oder mit deinen Geräten synchronisieren!",
diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js
index 91bf5dba7a5..12eec37f13c 100644
--- a/apps/files/l10n/de_DE.js
+++ b/apps/files/l10n/de_DE.js
@@ -16,7 +16,7 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nicht genügend freier Speicherplatz, Sie möchten {size1} hochladen, es sind jedoch nur noch {size2} verfügbar.",
"Target folder \"{dir}\" does not exist any more" : "Ziel-Verzeichnis \"{dir}\" existiert nicht mehr",
"Not enough free space" : "Nicht genügend freier Speicherplatz",
- "Uploading …" : "Lade hoch…",
+ "Uploading …" : "Lade hoch...",
"…" : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} von {totalSize} ({bitrate})",
"Actions" : "Aktionen",
@@ -77,6 +77,9 @@ OC.L10N.register(
"Favorite" : "Favorit",
"New folder" : "Neuer Ordner",
"Upload file" : "Datei hochladen",
+ "Not favorited" : "Nicht favorisiert",
+ "Remove from favorites" : "Von Favoriten entfernen",
+ "Add to favorites" : "Zu den Favoriten hinzufügen",
"An error occurred while trying to update the tags" : "Es ist ein Fehler beim Aktualisieren der Tags aufgetreten",
"Added to favorites" : "Zu den Favoriten hinzugefügt",
"Removed from favorites" : "Aus den Favoriten entfernt",
@@ -123,7 +126,6 @@ OC.L10N.register(
"Show hidden files" : "Versteckte Dateien anzeigen",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Benutzen Sie diese Adresse, um <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">via WebDAV auf Ihre Dateien zuzugreifen</a>",
- "Uploading @" : "Lade @ hoch",
"Cancel upload" : "Hochladen abbrechen",
"No files in here" : "Keine Dateien vorhanden",
"Upload some content or sync with your devices!" : "Laden Sie Inhalte hoch oder synchronisieren Sie mit Ihren Geräten!",
diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json
index dcb310ae707..346562edbe9 100644
--- a/apps/files/l10n/de_DE.json
+++ b/apps/files/l10n/de_DE.json
@@ -14,7 +14,7 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nicht genügend freier Speicherplatz, Sie möchten {size1} hochladen, es sind jedoch nur noch {size2} verfügbar.",
"Target folder \"{dir}\" does not exist any more" : "Ziel-Verzeichnis \"{dir}\" existiert nicht mehr",
"Not enough free space" : "Nicht genügend freier Speicherplatz",
- "Uploading …" : "Lade hoch…",
+ "Uploading …" : "Lade hoch...",
"…" : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} von {totalSize} ({bitrate})",
"Actions" : "Aktionen",
@@ -75,6 +75,9 @@
"Favorite" : "Favorit",
"New folder" : "Neuer Ordner",
"Upload file" : "Datei hochladen",
+ "Not favorited" : "Nicht favorisiert",
+ "Remove from favorites" : "Von Favoriten entfernen",
+ "Add to favorites" : "Zu den Favoriten hinzufügen",
"An error occurred while trying to update the tags" : "Es ist ein Fehler beim Aktualisieren der Tags aufgetreten",
"Added to favorites" : "Zu den Favoriten hinzugefügt",
"Removed from favorites" : "Aus den Favoriten entfernt",
@@ -121,7 +124,6 @@
"Show hidden files" : "Versteckte Dateien anzeigen",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Benutzen Sie diese Adresse, um <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">via WebDAV auf Ihre Dateien zuzugreifen</a>",
- "Uploading @" : "Lade @ hoch",
"Cancel upload" : "Hochladen abbrechen",
"No files in here" : "Keine Dateien vorhanden",
"Upload some content or sync with your devices!" : "Laden Sie Inhalte hoch oder synchronisieren Sie mit Ihren Geräten!",
diff --git a/apps/files/l10n/en_GB.js b/apps/files/l10n/en_GB.js
index b7a8dca505d..89a1bdda6b9 100644
--- a/apps/files/l10n/en_GB.js
+++ b/apps/files/l10n/en_GB.js
@@ -77,6 +77,9 @@ OC.L10N.register(
"Favorite" : "Favourite",
"New folder" : "New folder",
"Upload file" : "Upload file",
+ "Not favorited" : "Not favourited",
+ "Remove from favorites" : "Remove from favourites",
+ "Add to favorites" : "Add to favourites",
"An error occurred while trying to update the tags" : "An error occurred whilst trying to update the tags",
"Added to favorites" : "Added to favourites",
"Removed from favorites" : "Removed from favourites",
@@ -123,7 +126,6 @@ OC.L10N.register(
"Show hidden files" : "Show hidden files",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>",
- "Uploading @" : "Uploading @",
"Cancel upload" : "Cancel upload",
"No files in here" : "No files in here",
"Upload some content or sync with your devices!" : "Upload some content or sync with your devices!",
diff --git a/apps/files/l10n/en_GB.json b/apps/files/l10n/en_GB.json
index 0d93f91e4cc..f0c1aff46d3 100644
--- a/apps/files/l10n/en_GB.json
+++ b/apps/files/l10n/en_GB.json
@@ -75,6 +75,9 @@
"Favorite" : "Favourite",
"New folder" : "New folder",
"Upload file" : "Upload file",
+ "Not favorited" : "Not favourited",
+ "Remove from favorites" : "Remove from favourites",
+ "Add to favorites" : "Add to favourites",
"An error occurred while trying to update the tags" : "An error occurred whilst trying to update the tags",
"Added to favorites" : "Added to favourites",
"Removed from favorites" : "Removed from favourites",
@@ -121,7 +124,6 @@
"Show hidden files" : "Show hidden files",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>",
- "Uploading @" : "Uploading @",
"Cancel upload" : "Cancel upload",
"No files in here" : "No files in here",
"Upload some content or sync with your devices!" : "Upload some content or sync with your devices!",
diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js
index cc6a73fdf7f..40955586567 100644
--- a/apps/files/l10n/es.js
+++ b/apps/files/l10n/es.js
@@ -77,6 +77,9 @@ OC.L10N.register(
"Favorite" : "Favorito",
"New folder" : "Nueva carpeta",
"Upload file" : "Subir archivo",
+ "Not favorited" : "No marcado como favorito",
+ "Remove from favorites" : "Eliminar de favoritos",
+ "Add to favorites" : "Añadir a favoritos",
"An error occurred while trying to update the tags" : "Se produjo un error al tratar de actualizar las etiquetas",
"Added to favorites" : "Agregado a favoritos",
"Removed from favorites" : "Borrado de favoritos",
@@ -123,7 +126,6 @@ OC.L10N.register(
"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 mediante WebDAV</a>",
- "Uploading @" : "Subiendo a ",
"Cancel upload" : "Cancelar subida",
"No files in here" : "Aquí no hay archivos",
"Upload some content or sync with your devices!" : "¡Suba contenidos o sincronice sus dispositivos!",
diff --git a/apps/files/l10n/es.json b/apps/files/l10n/es.json
index 6f5cca13a7a..76ca1811364 100644
--- a/apps/files/l10n/es.json
+++ b/apps/files/l10n/es.json
@@ -75,6 +75,9 @@
"Favorite" : "Favorito",
"New folder" : "Nueva carpeta",
"Upload file" : "Subir archivo",
+ "Not favorited" : "No marcado como favorito",
+ "Remove from favorites" : "Eliminar de favoritos",
+ "Add to favorites" : "Añadir a favoritos",
"An error occurred while trying to update the tags" : "Se produjo un error al tratar de actualizar las etiquetas",
"Added to favorites" : "Agregado a favoritos",
"Removed from favorites" : "Borrado de favoritos",
@@ -121,7 +124,6 @@
"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 mediante WebDAV</a>",
- "Uploading @" : "Subiendo a ",
"Cancel upload" : "Cancelar subida",
"No files in here" : "Aquí no hay archivos",
"Upload some content or sync with your devices!" : "¡Suba contenidos o sincronice sus dispositivos!",
diff --git a/apps/files/l10n/es_CO.js b/apps/files/l10n/es_CO.js
new file mode 100644
index 00000000000..ce1f5db9667
--- /dev/null
+++ b/apps/files/l10n/es_CO.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_CO.json b/apps/files/l10n/es_CO.json
new file mode 100644
index 00000000000..cabba647c0e
--- /dev/null
+++ b/apps/files/l10n/es_CO.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/es_CR.js b/apps/files/l10n/es_CR.js
new file mode 100644
index 00000000000..ce1f5db9667
--- /dev/null
+++ b/apps/files/l10n/es_CR.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_CR.json b/apps/files/l10n/es_CR.json
new file mode 100644
index 00000000000..cabba647c0e
--- /dev/null
+++ b/apps/files/l10n/es_CR.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/es_DO.js b/apps/files/l10n/es_DO.js
new file mode 100644
index 00000000000..ce1f5db9667
--- /dev/null
+++ b/apps/files/l10n/es_DO.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_DO.json b/apps/files/l10n/es_DO.json
new file mode 100644
index 00000000000..cabba647c0e
--- /dev/null
+++ b/apps/files/l10n/es_DO.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/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/es_MX.js b/apps/files/l10n/es_MX.js
index d04c8c5b39d..ce1f5db9667 100644
--- a/apps/files/l10n/es_MX.js
+++ b/apps/files/l10n/es_MX.js
@@ -16,7 +16,7 @@ OC.L10N.register(
"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 ...",
+ "Uploading …" : "Cargando...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
"Actions" : "Acciones",
@@ -77,6 +77,9 @@ OC.L10N.register(
"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",
@@ -123,7 +126,7 @@ OC.L10N.register(
"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>",
- "Uploading @" : "Actualizando @",
+ "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",
diff --git a/apps/files/l10n/es_MX.json b/apps/files/l10n/es_MX.json
index 3e43fba5c45..cabba647c0e 100644
--- a/apps/files/l10n/es_MX.json
+++ b/apps/files/l10n/es_MX.json
@@ -14,7 +14,7 @@
"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 ...",
+ "Uploading …" : "Cargando...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
"Actions" : "Acciones",
@@ -75,6 +75,9 @@
"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",
@@ -121,7 +124,7 @@
"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>",
- "Uploading @" : "Actualizando @",
+ "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",
diff --git a/apps/files/l10n/et_EE.js b/apps/files/l10n/et_EE.js
index 74b386761ca..ee01092fb64 100644
--- a/apps/files/l10n/et_EE.js
+++ b/apps/files/l10n/et_EE.js
@@ -16,7 +16,6 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Pole piisavalt vaba ruumi. Sa laadid üles {size1}, kuid ainult {size2} on saadaval.",
"Target folder \"{dir}\" does not exist any more" : "Kausta \"{dir}\" pole enam olemas",
"Not enough free space" : "Pole piisavalt vaba ruumi",
- "Uploading …" : "Üleslaadminie ...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize}/{loadedSize} ({bitrate})",
"Actions" : "Tegevused",
@@ -118,7 +117,6 @@ OC.L10N.register(
"Show hidden files" : "Näita peidetud faile",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Kasuta seda aadressi, et <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">oma failidele WebDAV kaudu ligi pääseda</a>",
- "Uploading @" : "Üleslaadimine @",
"No files in here" : "Siin ei ole faile",
"Upload some content or sync with your devices!" : "Laadi sisu üles või süngi oma seadmetega!",
"No entries found in this folder" : "Selles kaustast ei leitud kirjeid",
diff --git a/apps/files/l10n/et_EE.json b/apps/files/l10n/et_EE.json
index b1489a9a214..30af89aa3e3 100644
--- a/apps/files/l10n/et_EE.json
+++ b/apps/files/l10n/et_EE.json
@@ -14,7 +14,6 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Pole piisavalt vaba ruumi. Sa laadid üles {size1}, kuid ainult {size2} on saadaval.",
"Target folder \"{dir}\" does not exist any more" : "Kausta \"{dir}\" pole enam olemas",
"Not enough free space" : "Pole piisavalt vaba ruumi",
- "Uploading …" : "Üleslaadminie ...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize}/{loadedSize} ({bitrate})",
"Actions" : "Tegevused",
@@ -116,7 +115,6 @@
"Show hidden files" : "Näita peidetud faile",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Kasuta seda aadressi, et <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">oma failidele WebDAV kaudu ligi pääseda</a>",
- "Uploading @" : "Üleslaadimine @",
"No files in here" : "Siin ei ole faile",
"Upload some content or sync with your devices!" : "Laadi sisu üles või süngi oma seadmetega!",
"No entries found in this folder" : "Selles kaustast ei leitud kirjeid",
diff --git a/apps/files/l10n/eu.js b/apps/files/l10n/eu.js
index 10777541bdd..af69bc93958 100644
--- a/apps/files/l10n/eu.js
+++ b/apps/files/l10n/eu.js
@@ -16,12 +16,13 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ez dago leku nahikorik, zu {size1} igotzen ari zara baina bakarrik {size2} libre dago",
"Target folder \"{dir}\" does not exist any more" : "\"{dir}\" karpeta ez du gehiago existitzen",
"Not enough free space" : "Ez dago nahiko leku librea",
- "Uploading …" : "Igotzen …",
+ "Uploading …" : "Igotzen...",
"…" : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} of {totalSize} ({bitrate})",
"Actions" : "Ekintzak",
"Download" : "Deskargatu",
"Rename" : "Berrizendatu",
+ "Move or copy" : "Mugitu edo kopiatu",
"Target folder" : "Xede karpeta",
"Delete" : "Ezabatu",
"Disconnect storage" : "Deskonektatu biltegia",
@@ -36,6 +37,10 @@ OC.L10N.register(
"This directory is unavailable, please check the logs or contact the administrator" : "Direktorio hau ez dago erabilgarri, begira itzazu erregistroa edo administratzailearekin harremanetan jarri",
"Could not move \"{file}\", target exists" : "Ezin da \"{file}\" mugitu, helburuan existitzen da jadanik",
"Could not move \"{file}\"" : "Ezin da mugitu \"{file}\"",
+ "Could not copy \"{file}\", target exists" : "Ezin da \"{file}\" kopiatu; helburuan existitzen da",
+ "Could not copy \"{file}\"" : "Ezin da \"{file}\" kopiatu",
+ "Copied {origin} inside {destination}" : "{origin} {destination} barruan kopiatu da",
+ "Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} eta {nbfiles} beste fitxategiak {destination}-en kopiatu dira",
"{newName} already exists" : "{newName} existitzen da dagoeneko",
"Could not rename \"{fileName}\", it does not exist any more" : "Ezin izan da \"{fileName}\" berrizendatu, ez da existitzen",
"The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "\"{targetName}\" izena dagoeneko dago erabilita \"{dir}\" karpetan. Mesedez, beste bat aukeratu.",
@@ -72,6 +77,9 @@ OC.L10N.register(
"Favorite" : "Gogokoa",
"New folder" : "Karpeta berria",
"Upload file" : "Igo fitxategia",
+ "Not favorited" : "Ez da gogokoa",
+ "Remove from favorites" : "Gogokoetatik kenduta",
+ "Add to favorites" : "Gogokoetara gehitu",
"An error occurred while trying to update the tags" : "Errore bat gertatu da etiketak eguneratzerakoan",
"Added to favorites" : "Gogokoetan gehitu da",
"Removed from favorites" : "Gogokoetatik kendu da",
@@ -118,7 +126,7 @@ OC.L10N.register(
"Show hidden files" : "Erakutsi ezkutuko fitxategiak",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Erabili helbide hau <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">WebDAV bidez zure fitxategietara sartzeko </a> ",
- "Uploading @" : "Igotzen @",
+ "Cancel upload" : "Igoera bertan behera utzita",
"No files in here" : "Ez dago fitxategirik hemen",
"Upload some content or sync with your devices!" : "Igo edukiren bat edo sinkronizatu zure gailuekin!",
"No entries found in this folder" : "Ez da sarrerarik aurkitu karpeta honetan",
diff --git a/apps/files/l10n/eu.json b/apps/files/l10n/eu.json
index d3dbffe1cd7..151eed97867 100644
--- a/apps/files/l10n/eu.json
+++ b/apps/files/l10n/eu.json
@@ -14,12 +14,13 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ez dago leku nahikorik, zu {size1} igotzen ari zara baina bakarrik {size2} libre dago",
"Target folder \"{dir}\" does not exist any more" : "\"{dir}\" karpeta ez du gehiago existitzen",
"Not enough free space" : "Ez dago nahiko leku librea",
- "Uploading …" : "Igotzen …",
+ "Uploading …" : "Igotzen...",
"…" : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} of {totalSize} ({bitrate})",
"Actions" : "Ekintzak",
"Download" : "Deskargatu",
"Rename" : "Berrizendatu",
+ "Move or copy" : "Mugitu edo kopiatu",
"Target folder" : "Xede karpeta",
"Delete" : "Ezabatu",
"Disconnect storage" : "Deskonektatu biltegia",
@@ -34,6 +35,10 @@
"This directory is unavailable, please check the logs or contact the administrator" : "Direktorio hau ez dago erabilgarri, begira itzazu erregistroa edo administratzailearekin harremanetan jarri",
"Could not move \"{file}\", target exists" : "Ezin da \"{file}\" mugitu, helburuan existitzen da jadanik",
"Could not move \"{file}\"" : "Ezin da mugitu \"{file}\"",
+ "Could not copy \"{file}\", target exists" : "Ezin da \"{file}\" kopiatu; helburuan existitzen da",
+ "Could not copy \"{file}\"" : "Ezin da \"{file}\" kopiatu",
+ "Copied {origin} inside {destination}" : "{origin} {destination} barruan kopiatu da",
+ "Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} eta {nbfiles} beste fitxategiak {destination}-en kopiatu dira",
"{newName} already exists" : "{newName} existitzen da dagoeneko",
"Could not rename \"{fileName}\", it does not exist any more" : "Ezin izan da \"{fileName}\" berrizendatu, ez da existitzen",
"The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "\"{targetName}\" izena dagoeneko dago erabilita \"{dir}\" karpetan. Mesedez, beste bat aukeratu.",
@@ -70,6 +75,9 @@
"Favorite" : "Gogokoa",
"New folder" : "Karpeta berria",
"Upload file" : "Igo fitxategia",
+ "Not favorited" : "Ez da gogokoa",
+ "Remove from favorites" : "Gogokoetatik kenduta",
+ "Add to favorites" : "Gogokoetara gehitu",
"An error occurred while trying to update the tags" : "Errore bat gertatu da etiketak eguneratzerakoan",
"Added to favorites" : "Gogokoetan gehitu da",
"Removed from favorites" : "Gogokoetatik kendu da",
@@ -116,7 +124,7 @@
"Show hidden files" : "Erakutsi ezkutuko fitxategiak",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Erabili helbide hau <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">WebDAV bidez zure fitxategietara sartzeko </a> ",
- "Uploading @" : "Igotzen @",
+ "Cancel upload" : "Igoera bertan behera utzita",
"No files in here" : "Ez dago fitxategirik hemen",
"Upload some content or sync with your devices!" : "Igo edukiren bat edo sinkronizatu zure gailuekin!",
"No entries found in this folder" : "Ez da sarrerarik aurkitu karpeta honetan",
diff --git a/apps/files/l10n/fi.js b/apps/files/l10n/fi.js
index 98e91b172a4..3edbbc8ba14 100644
--- a/apps/files/l10n/fi.js
+++ b/apps/files/l10n/fi.js
@@ -16,7 +16,6 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ei riittävästi vapaata tilaa. Lähetyksesi koko on {size1}, mutta vain {size2} on jäljellä",
"Target folder \"{dir}\" does not exist any more" : "Kohdekansio \"{dir}\" ei ole enää olemassa",
"Not enough free space" : "Ei tarpeeksi vapaata tilaa",
- "Uploading …" : "Lähetetään…",
"…" : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize}/{totalSize} ({bitrate})",
"Actions" : "Toiminnot",
@@ -121,7 +120,7 @@ OC.L10N.register(
"Show hidden files" : "Näytä piilotetut tiedostot",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Käytä tätä osoitetta <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">päästäksesi tiedostoihisi WebDAV-liittymän kautta</a>",
- "Uploading @" : "Lähetetään @",
+ "Cancel upload" : "Perus lähetys",
"No files in here" : "Täällä ei ole tiedostoja",
"Upload some content or sync with your devices!" : "Lähetä tiedostoja tai synkronoi sisältö laitteidesi kanssa!",
"No entries found in this folder" : "Ei kohteita tässä kansiossa",
diff --git a/apps/files/l10n/fi.json b/apps/files/l10n/fi.json
index 3148ed7f29b..54fe53b85ab 100644
--- a/apps/files/l10n/fi.json
+++ b/apps/files/l10n/fi.json
@@ -14,7 +14,6 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ei riittävästi vapaata tilaa. Lähetyksesi koko on {size1}, mutta vain {size2} on jäljellä",
"Target folder \"{dir}\" does not exist any more" : "Kohdekansio \"{dir}\" ei ole enää olemassa",
"Not enough free space" : "Ei tarpeeksi vapaata tilaa",
- "Uploading …" : "Lähetetään…",
"…" : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize}/{totalSize} ({bitrate})",
"Actions" : "Toiminnot",
@@ -119,7 +118,7 @@
"Show hidden files" : "Näytä piilotetut tiedostot",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Käytä tätä osoitetta <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">päästäksesi tiedostoihisi WebDAV-liittymän kautta</a>",
- "Uploading @" : "Lähetetään @",
+ "Cancel upload" : "Perus lähetys",
"No files in here" : "Täällä ei ole tiedostoja",
"Upload some content or sync with your devices!" : "Lähetä tiedostoja tai synkronoi sisältö laitteidesi kanssa!",
"No entries found in this folder" : "Ei kohteita tässä kansiossa",
diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js
index 0111a0d02dc..ee0e05e70fd 100644
--- a/apps/files/l10n/fr.js
+++ b/apps/files/l10n/fr.js
@@ -16,7 +16,7 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Espace libre insuffisant : vous tentez d'envoyer {size1} mais seulement {size2} sont disponibles",
"Target folder \"{dir}\" does not exist any more" : "Le dossier cible « {dir} » n'existe plus",
"Not enough free space" : "Espace disponible insuffisant",
- "Uploading …" : "Téléversement...",
+ "Uploading …" : "Téléversement en cours...",
"…" : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} sur {totalSize} ({bitrate})",
"Actions" : "Actions",
@@ -77,6 +77,9 @@ 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",
"Added to favorites" : "Ajouté aux favoris",
"Removed from favorites" : "Retiré des favoris",
@@ -123,7 +126,6 @@ OC.L10N.register(
"Show hidden files" : "Afficher les fichiers cachés",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Utilisez cette adresse pour <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">accéder à vos fichiers par WebDAV</a>",
- "Uploading @" : "Envoi en cours @",
"Cancel upload" : "Annuler le téléversement",
"No files in here" : "Aucun fichier",
"Upload some content or sync with your devices!" : "Déposez du contenu ou synchronisez vos appareils !",
diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json
index 0cc1f32c479..990624b07f6 100644
--- a/apps/files/l10n/fr.json
+++ b/apps/files/l10n/fr.json
@@ -14,7 +14,7 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Espace libre insuffisant : vous tentez d'envoyer {size1} mais seulement {size2} sont disponibles",
"Target folder \"{dir}\" does not exist any more" : "Le dossier cible « {dir} » n'existe plus",
"Not enough free space" : "Espace disponible insuffisant",
- "Uploading …" : "Téléversement...",
+ "Uploading …" : "Téléversement en cours...",
"…" : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} sur {totalSize} ({bitrate})",
"Actions" : "Actions",
@@ -75,6 +75,9 @@
"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",
"Added to favorites" : "Ajouté aux favoris",
"Removed from favorites" : "Retiré des favoris",
@@ -121,7 +124,6 @@
"Show hidden files" : "Afficher les fichiers cachés",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Utilisez cette adresse pour <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">accéder à vos fichiers par WebDAV</a>",
- "Uploading @" : "Envoi en cours @",
"Cancel upload" : "Annuler le téléversement",
"No files in here" : "Aucun fichier",
"Upload some content or sync with your devices!" : "Déposez du contenu ou synchronisez vos appareils !",
diff --git a/apps/files/l10n/hu.js b/apps/files/l10n/hu.js
index 820cfda7754..0c770e4a1db 100644
--- a/apps/files/l10n/hu.js
+++ b/apps/files/l10n/hu.js
@@ -16,12 +16,13 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nincs elég szabad hely. A feltöltés mérete {size1}, de csak ennyi hely van: {size2}.",
"Target folder \"{dir}\" does not exist any more" : "A cél mappa már nem létezik: \"{dir}\"",
"Not enough free space" : "Nincs elég szabad hely",
- "Uploading …" : "Feltöltés ...",
+ "Uploading …" : "Feltöltés...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} / {totalSize} ({bitrate})",
"Actions" : "Műveletek",
"Download" : "Letöltés",
"Rename" : "Átnevezés",
+ "Move or copy" : "Mozgatás vagy másolás",
"Target folder" : "Cél mappa",
"Delete" : "Törlés",
"Disconnect storage" : "Tároló leválasztása",
@@ -36,6 +37,10 @@ OC.L10N.register(
"This directory is unavailable, please check the logs or contact the administrator" : "Ez a könyvtár nem elérhető, kérem nézze meg a naplófájlokat vagy keresse az adminisztrátort",
"Could not move \"{file}\", target exists" : "{file} fájl nem áthelyezhető, mert a cél már létezik",
"Could not move \"{file}\"" : "{file} fájl nem áthelyezhető",
+ "Could not copy \"{file}\", target exists" : "Nem sikerült \"{file}\" másolása, a cél már létezik",
+ "Could not copy \"{file}\"" : "\"{file}\" másolása sikertelen",
+ "Copied {origin} inside {destination}" : "{origin} átmásolva ide: {destination}",
+ "Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} és {nbfiles} egyéb fájl átmásolva ide: {destination}",
"{newName} already exists" : "{newName} már létezik",
"Could not rename \"{fileName}\", it does not exist any more" : "Nem átnevezhető erre: {fileName}, mert már nem létezik",
"The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "{targetName} már használatban van ebben a mappában: {dir}. Kérjük, válassz másik nevet.",
@@ -72,6 +77,9 @@ OC.L10N.register(
"Favorite" : "Kedvenc",
"New folder" : "Új mappa",
"Upload file" : "Fájl feltöltés",
+ "Not favorited" : "Nincs a kedvencek között",
+ "Remove from favorites" : "Eltávolítás a kedvencekből",
+ "Add to favorites" : "Hozzáadás a kedvencekhez",
"An error occurred while trying to update the tags" : "Hiba történt, miközben megpróbálta frissíteni a címkéket",
"Added to favorites" : "Hozzáadva a kedvencekhez",
"Removed from favorites" : "Eltávolítva a kedvencekből",
@@ -118,7 +126,7 @@ OC.L10N.register(
"Show hidden files" : "Rejtett fájlok megjelenítése",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Használja ezt a címet <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">a Fájlok eléréséhez WebDAV-on keresztül</a>.",
- "Uploading @" : "Feltöltés @",
+ "Cancel upload" : "Feltöltés megszakítása",
"No files in here" : "Itt nincsenek fájlok",
"Upload some content or sync with your devices!" : "Tölts fel néhány tartalmat, vagy szinkronizálj az eszközöddel!",
"No entries found in this folder" : "Nincsenek bejegyzések ebben a mappában",
diff --git a/apps/files/l10n/hu.json b/apps/files/l10n/hu.json
index 2122c818250..9e7d724c06e 100644
--- a/apps/files/l10n/hu.json
+++ b/apps/files/l10n/hu.json
@@ -14,12 +14,13 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nincs elég szabad hely. A feltöltés mérete {size1}, de csak ennyi hely van: {size2}.",
"Target folder \"{dir}\" does not exist any more" : "A cél mappa már nem létezik: \"{dir}\"",
"Not enough free space" : "Nincs elég szabad hely",
- "Uploading …" : "Feltöltés ...",
+ "Uploading …" : "Feltöltés...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} / {totalSize} ({bitrate})",
"Actions" : "Műveletek",
"Download" : "Letöltés",
"Rename" : "Átnevezés",
+ "Move or copy" : "Mozgatás vagy másolás",
"Target folder" : "Cél mappa",
"Delete" : "Törlés",
"Disconnect storage" : "Tároló leválasztása",
@@ -34,6 +35,10 @@
"This directory is unavailable, please check the logs or contact the administrator" : "Ez a könyvtár nem elérhető, kérem nézze meg a naplófájlokat vagy keresse az adminisztrátort",
"Could not move \"{file}\", target exists" : "{file} fájl nem áthelyezhető, mert a cél már létezik",
"Could not move \"{file}\"" : "{file} fájl nem áthelyezhető",
+ "Could not copy \"{file}\", target exists" : "Nem sikerült \"{file}\" másolása, a cél már létezik",
+ "Could not copy \"{file}\"" : "\"{file}\" másolása sikertelen",
+ "Copied {origin} inside {destination}" : "{origin} átmásolva ide: {destination}",
+ "Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} és {nbfiles} egyéb fájl átmásolva ide: {destination}",
"{newName} already exists" : "{newName} már létezik",
"Could not rename \"{fileName}\", it does not exist any more" : "Nem átnevezhető erre: {fileName}, mert már nem létezik",
"The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "{targetName} már használatban van ebben a mappában: {dir}. Kérjük, válassz másik nevet.",
@@ -70,6 +75,9 @@
"Favorite" : "Kedvenc",
"New folder" : "Új mappa",
"Upload file" : "Fájl feltöltés",
+ "Not favorited" : "Nincs a kedvencek között",
+ "Remove from favorites" : "Eltávolítás a kedvencekből",
+ "Add to favorites" : "Hozzáadás a kedvencekhez",
"An error occurred while trying to update the tags" : "Hiba történt, miközben megpróbálta frissíteni a címkéket",
"Added to favorites" : "Hozzáadva a kedvencekhez",
"Removed from favorites" : "Eltávolítva a kedvencekből",
@@ -116,7 +124,7 @@
"Show hidden files" : "Rejtett fájlok megjelenítése",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Használja ezt a címet <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">a Fájlok eléréséhez WebDAV-on keresztül</a>.",
- "Uploading @" : "Feltöltés @",
+ "Cancel upload" : "Feltöltés megszakítása",
"No files in here" : "Itt nincsenek fájlok",
"Upload some content or sync with your devices!" : "Tölts fel néhány tartalmat, vagy szinkronizálj az eszközöddel!",
"No entries found in this folder" : "Nincsenek bejegyzések ebben a mappában",
diff --git a/apps/files/l10n/is.js b/apps/files/l10n/is.js
index d1254091676..65256f1548f 100644
--- a/apps/files/l10n/is.js
+++ b/apps/files/l10n/is.js
@@ -77,6 +77,9 @@ OC.L10N.register(
"Favorite" : "Eftirlæti",
"New folder" : "Ný mappa",
"Upload file" : "Senda inn skrá",
+ "Not favorited" : "Ekki í eftirlætum",
+ "Remove from favorites" : "Fjarlægja úr eftirlætum",
+ "Add to favorites" : "Bæta í eftirlæti",
"An error occurred while trying to update the tags" : "Villa kom upp við að reyna að uppfæra merkin",
"Added to favorites" : "Bætt í eftirlæti",
"Removed from favorites" : "Fjarlægt úr eftirlætum",
@@ -123,7 +126,7 @@ OC.L10N.register(
"Show hidden files" : "Sýna faldar skrár",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Notaðu þetta vistfang til að <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">nálgast skrárnar þínar með WebDAV</a>",
- "Uploading @" : "Sendi inn @",
+ "Cancel upload" : "Hætta við innsendingu",
"No files in here" : "Engar skrár hér",
"Upload some content or sync with your devices!" : "Sendu inn eitthvað efni eða samstilltu við tækin þín!",
"No entries found in this folder" : "Engar skrár fundust í þessari möppu",
diff --git a/apps/files/l10n/is.json b/apps/files/l10n/is.json
index 80c56f26ce4..29b8d7eb79a 100644
--- a/apps/files/l10n/is.json
+++ b/apps/files/l10n/is.json
@@ -75,6 +75,9 @@
"Favorite" : "Eftirlæti",
"New folder" : "Ný mappa",
"Upload file" : "Senda inn skrá",
+ "Not favorited" : "Ekki í eftirlætum",
+ "Remove from favorites" : "Fjarlægja úr eftirlætum",
+ "Add to favorites" : "Bæta í eftirlæti",
"An error occurred while trying to update the tags" : "Villa kom upp við að reyna að uppfæra merkin",
"Added to favorites" : "Bætt í eftirlæti",
"Removed from favorites" : "Fjarlægt úr eftirlætum",
@@ -121,7 +124,7 @@
"Show hidden files" : "Sýna faldar skrár",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Notaðu þetta vistfang til að <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">nálgast skrárnar þínar með WebDAV</a>",
- "Uploading @" : "Sendi inn @",
+ "Cancel upload" : "Hætta við innsendingu",
"No files in here" : "Engar skrár hér",
"Upload some content or sync with your devices!" : "Sendu inn eitthvað efni eða samstilltu við tækin þín!",
"No entries found in this folder" : "Engar skrár fundust í þessari möppu",
diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js
index e4d742f9183..8b92a250be1 100644
--- a/apps/files/l10n/it.js
+++ b/apps/files/l10n/it.js
@@ -77,6 +77,9 @@ OC.L10N.register(
"Favorite" : "Preferito",
"New folder" : "Nuova cartella",
"Upload file" : "Carica file",
+ "Not favorited" : "Non preferito",
+ "Remove from favorites" : "Rimuovi dai preferiti",
+ "Add to favorites" : "Aggiungi ai preferiti",
"An error occurred while trying to update the tags" : "Si è verificato un errore durante il tentativo di aggiornare le etichette",
"Added to favorites" : "Aggiunto ai preferiti",
"Removed from favorites" : "Rimosso dai preferiti",
@@ -123,7 +126,6 @@ OC.L10N.register(
"Show hidden files" : "Mostra i file nascosti",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Utilizza questo indirizzo per <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">accedere ai tuoi file con WebDAV</a>",
- "Uploading @" : "Caricamento @",
"Cancel upload" : "Annulla caricamento",
"No files in here" : "Qui non c'è alcun file",
"Upload some content or sync with your devices!" : "Carica alcuni contenuti o sincronizza con i tuoi dispositivi!",
diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json
index 3a2e5425646..53d0f106fa5 100644
--- a/apps/files/l10n/it.json
+++ b/apps/files/l10n/it.json
@@ -75,6 +75,9 @@
"Favorite" : "Preferito",
"New folder" : "Nuova cartella",
"Upload file" : "Carica file",
+ "Not favorited" : "Non preferito",
+ "Remove from favorites" : "Rimuovi dai preferiti",
+ "Add to favorites" : "Aggiungi ai preferiti",
"An error occurred while trying to update the tags" : "Si è verificato un errore durante il tentativo di aggiornare le etichette",
"Added to favorites" : "Aggiunto ai preferiti",
"Removed from favorites" : "Rimosso dai preferiti",
@@ -121,7 +124,6 @@
"Show hidden files" : "Mostra i file nascosti",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Utilizza questo indirizzo per <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">accedere ai tuoi file con WebDAV</a>",
- "Uploading @" : "Caricamento @",
"Cancel upload" : "Annulla caricamento",
"No files in here" : "Qui non c'è alcun file",
"Upload some content or sync with your devices!" : "Carica alcuni contenuti o sincronizza con i tuoi dispositivi!",
diff --git a/apps/files/l10n/ja.js b/apps/files/l10n/ja.js
index 3b6ab721ab1..dd4b96aaf3a 100644
--- a/apps/files/l10n/ja.js
+++ b/apps/files/l10n/ja.js
@@ -20,6 +20,7 @@ OC.L10N.register(
"Actions" : "アクション",
"Download" : "ダウンロード",
"Rename" : "名前の変更",
+ "Move or copy" : "移動またはコピー",
"Target folder" : "対象フォルダー",
"Delete" : "削除",
"Disconnect storage" : "ストレージを切断する",
@@ -34,6 +35,8 @@ OC.L10N.register(
"This directory is unavailable, please check the logs or contact the administrator" : "このディレクトリは利用できません。ログを確認するか管理者に問い合わせてください。",
"Could not move \"{file}\", target exists" : "ターゲットが存在するため,ファイル \"{file}\"を移動できませんでした",
"Could not move \"{file}\"" : "\"{file}\" を移動できませんでした",
+ "Could not copy \"{file}\", target exists" : "ターゲットが存在するため,ファイル \"{file}\"をコピーできませんでした",
+ "Could not copy \"{file}\"" : "\"{file}\"をコピーできませんでした",
"{newName} already exists" : "{newName} はすでに存在します",
"Could not rename \"{fileName}\", it does not exist any more" : "ファイルが存在しないため,\"{fileName}\"の名前変更ができませんでした",
"The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "\"{targetName}\" はフォルダー \"{dir}\" ですでに使われています。別の名前を選択してください。",
diff --git a/apps/files/l10n/ja.json b/apps/files/l10n/ja.json
index 100d473f70d..58f16fa2c23 100644
--- a/apps/files/l10n/ja.json
+++ b/apps/files/l10n/ja.json
@@ -18,6 +18,7 @@
"Actions" : "アクション",
"Download" : "ダウンロード",
"Rename" : "名前の変更",
+ "Move or copy" : "移動またはコピー",
"Target folder" : "対象フォルダー",
"Delete" : "削除",
"Disconnect storage" : "ストレージを切断する",
@@ -32,6 +33,8 @@
"This directory is unavailable, please check the logs or contact the administrator" : "このディレクトリは利用できません。ログを確認するか管理者に問い合わせてください。",
"Could not move \"{file}\", target exists" : "ターゲットが存在するため,ファイル \"{file}\"を移動できませんでした",
"Could not move \"{file}\"" : "\"{file}\" を移動できませんでした",
+ "Could not copy \"{file}\", target exists" : "ターゲットが存在するため,ファイル \"{file}\"をコピーできませんでした",
+ "Could not copy \"{file}\"" : "\"{file}\"をコピーできませんでした",
"{newName} already exists" : "{newName} はすでに存在します",
"Could not rename \"{fileName}\", it does not exist any more" : "ファイルが存在しないため,\"{fileName}\"の名前変更ができませんでした",
"The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "\"{targetName}\" はフォルダー \"{dir}\" ですでに使われています。別の名前を選択してください。",
diff --git a/apps/files/l10n/ka_GE.js b/apps/files/l10n/ka_GE.js
index 510b1db25eb..c4ec1db62ab 100644
--- a/apps/files/l10n/ka_GE.js
+++ b/apps/files/l10n/ka_GE.js
@@ -1,50 +1,164 @@
OC.L10N.register(
"files",
{
+ "Storage is temporarily not available" : "საცავი დროებით ხელმიუწვდომელია",
+ "Storage invalid" : "საცავი არასწორია",
"Unknown error" : "უცნობი შეცდომა",
- "No file was uploaded. Unknown error" : "ფაილი არ აიტვირთა. უცნობი შეცდომა",
- "There is no error, the file uploaded with success" : "ჭოცდომა არ დაფიქსირდა, ფაილი წარმატებით აიტვირთა",
- "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "ატვირთული ფაილი აჭარბებს upload_max_filesize დირექტივას php.ini ფაილში",
- "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "ატვირთული ფაილი აჭარბებს MAX_FILE_SIZE დირექტივას, რომელიც მითითებულია HTML ფორმაში",
- "The uploaded file was only partially uploaded" : "ატვირთული ფაილი მხოლოდ ნაწილობრივ აიტვირთა",
- "No file was uploaded" : "ფაილი არ აიტვირთა",
- "Missing a temporary folder" : "დროებითი საქაღალდე არ არსებობს",
- "Failed to write to disk" : "შეცდომა დისკზე ჩაწერისას",
- "Not enough storage available" : "საცავში საკმარისი ადგილი არ არის",
- "Invalid directory." : "დაუშვებელი დირექტორია.",
- "Files" : "ფაილები",
+ "All files" : "ყველა ფაილი",
+ "Recent" : "ახალი",
+ "File could not be found" : "ფაილი ვერ იქნა ნაპოვნი",
"Home" : "სახლი",
"Close" : "დახურვა",
- "Favorites" : "ფავორიტები",
+ "Favorites" : "რჩეულები",
+ "Could not create folder \"{dir}\"" : "დირექტორია \"{dir}\" ვერ შეიქმნა",
"Upload cancelled." : "ატვირთვა შეჩერებულ იქნა.",
- "Uploading..." : "მიმდინარეობს ატვირთვა...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "მიმდინარეობს ფაილის ატვირთვა. სხვა გვერდზე გადასვლა გამოიწვევს ატვირთვის შეჩერებას",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "შეუძლებელია {filename}-ის ატვირთვა, რადგანაც ის დირექტორიაა ან გააჩნია 0 ბაიტი",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "არასაკმარისი თავისუფალი სივრცე, თქვენ ტვირთავთ {size1}-ს, მაგრამ მხოლოდ {size2}-ია დარჩენილი",
+ "Target folder \"{dir}\" does not exist any more" : "დანიშნულების დირექტორია \"{dir}\" აღარ არსებობს",
+ "Not enough free space" : "არასაკმარისი თავისუფალი სივრცე",
+ "Uploading …" : "იტვირთება ...",
+ "…" : "...",
+ "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} სულ {totalSize}-დან ({bitrate})",
"Actions" : "მოქმედებები",
"Download" : "ჩამოტვირთვა",
"Rename" : "გადარქმევა",
+ "Move or copy" : "გადაიტანეთ ან დააკოპირეთ",
+ "Target folder" : "დანიშნულების დირექტორია",
"Delete" : "წაშლა",
+ "Disconnect storage" : "საცავის გათიშვა",
"Unshare" : "გაუზიარებადი",
+ "Could not load info for file \"{file}\"" : "ფაილზე \"{file}\" ინფორმაცია ვერ ჩაიტვირთა",
+ "Files" : "ფაილები",
"Details" : "დეტალური ინფორმაცია",
+ "Select" : "არჩევა",
"Pending" : "მოცდის რეჟიმში",
+ "Unable to determine date" : "თარიღის დადგენა შეუძლებელია",
+ "This operation is forbidden" : "ეს ოპერაცია აკრძალულია",
+ "This directory is unavailable, please check the logs or contact the administrator" : "დირექტორია ხელმიუწვდომელია, გთოხვთ შეამოწმოთ ლოგები ან დაუკავშირდეთ ადმინისტრატორს",
+ "Could not move \"{file}\", target exists" : "\"{file}\"-ის გადატანა ვერ მოხერხდა, დანიშნულება არსებობს",
+ "Could not move \"{file}\"" : "\"{file\"} ის გადატანა ვერ მოხერხდა",
+ "Could not copy \"{file}\", target exists" : "\"{file}\"-ის კოპირება ვერ მოხერხდა, დანიშნულება არსებობს",
+ "Could not copy \"{file}\"" : "\"{file\"} ის კოპირება ვერ მოხერხდა",
+ "Copied {origin} inside {destination}" : "დაკოპირდა {origin} {destionation}-ში",
+ "Copied {origin} and {nbfiles} other files inside {destination}" : "დაკოპირდა {origin} და {nbfiles} სხვა ფაილი {destionation}-ში",
+ "{newName} already exists" : "{newName} უკვე არსებობს",
+ "Could not rename \"{fileName}\", it does not exist any more" : "\"{fileName}\" სახელი ვერ შეეცვალა, ის აღარ არსებობს",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "სახელი \"{targetName}\" დირექტორია \"{dir}\"-ში უკვე გამოყენებულია. გთხოვთ აირჩიოთ სხვა სახელი.",
+ "Could not rename \"{fileName}\"" : "ფაილს \"{fileName}\" სახელი ვერ შეეცვალა",
+ "Could not create file \"{file}\"" : "ფაილი \"{file}\" ვერ შეიქმნა",
+ "Could not create file \"{file}\" because it already exists" : "ფაილი \"{file}\" ვერ შეიქმნა, ის უკვე არსებობს",
+ "Could not create folder \"{dir}\" because it already exists" : "დირექტორია \"{dir}\" ვერ შეიქმნა, ის უკვე არსებობს",
+ "Error deleting file \"{fileName}\"." : "ფიალის \"{fileName}\" წაშლისას წარმოიქმნა შეცდომა.",
+ "No search results in other folders for {tag}{filter}{endtag}" : "ძიების შედეგები სხვა დირექტორიებში {tag}{filter}{endtag} არაა",
"Name" : "სახელი",
"Size" : "ზომა",
"Modified" : "შეცვლილია",
+ "_%n folder_::_%n folders_" : ["%n დირექტორია"],
+ "_%n file_::_%n files_" : ["%n ფაილი"],
+ "{dirs} and {files}" : "{dirs} და {files}",
+ "_including %n hidden_::_including %n hidden_" : ["%n დამალულის ჩათვლით"],
+ "You don’t have permission to upload or create files here" : "აქ ფაილების შექმნის ან ატვირთვის უფლება არ გაქვთ",
+ "_Uploading %n file_::_Uploading %n files_" : ["ვტვირთავთ %n ფაილს"],
"New" : "ახალი",
+ "\"{name}\" is an invalid file name." : "\"{name}\" არასწორი ფაილის სახელია.",
"File name cannot be empty." : "ფაილის სახელი არ შეიძლება იყოს ცარიელი.",
+ "\"{name}\" is not an allowed filetype" : "\"{name}\" არაა დაშვებული ფაილის ტიპი",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner}-ის საცავი სავსეა, ფაილები მეტი ვეღარ განახლდება/სინქრონიზირდება!",
"Your storage is full, files can not be updated or synced anymore!" : "თქვენი საცავი გადაივსო. ფაილების განახლება და სინქრონიზირება ვერ მოხერხდება!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner}-ის საცავი თითქმის სავსეა ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "თქვენი საცავი თითქმის გადაივსო ({usedSpacePercent}%)",
- "Favorite" : "ფავორიტი",
- "Folder" : "საქაღალდე",
+ "_matches '{filter}'_::_match '{filter}'_" : ["ემთხვევა '{filter}'-ს"],
+ "View in folder" : "ჩვენება დირექტორიაში",
+ "Copied!" : "დაკოპირდა!",
+ "Copy direct link (only works for users who have access to this file/folder)" : "დააკოპირეთ პირდაპირი ბმული (მუშაობს მომხმარებლებისთვის, რომელთაც გააჩნიათ წვდომა ამ ფაილის/დირექტორიის მიმართ)",
+ "Path" : "მისამართი",
+ "_%n byte_::_%n bytes_" : ["%n ბაიტი"],
+ "Favorited" : "დამატებულია რჩეულებში",
+ "Favorite" : "რჩეული",
"New folder" : "ახალი ფოლდერი",
- "Upload" : "ატვირთვა",
+ "Upload file" : "ფაილის ატვირთვა",
+ "Not favorited" : "არაა დამატებული რჩეულებში",
+ "Remove from favorites" : "რჩეულებიდან მოშორება",
+ "Add to favorites" : "რჩეულებში დამატება",
+ "An error occurred while trying to update the tags" : "ტეგების განახლების მცდელობისას წარმოიშვა შეცდომა",
+ "Added to favorites" : "დაემატა რჩეულებში",
+ "Removed from favorites" : "ამოიშალა რჩეულებიდან",
+ "You added {file} to your favorites" : "თქვენ დაამატეთ {file}-ი რჩეულებში",
+ "You removed {file} from your favorites" : "თქვენ ამოშალეთ {file}-ი თქვენი რჩეული ფაილებიდან",
+ "File changes" : "ფაილის ცვლილებები",
+ "Created by {user}" : "შექმნა {user}-მა",
+ "Changed by {user}" : "შეცვალა {user}-მა",
+ "Deleted by {user}" : "წაშალა {user}-მა",
+ "Restored by {user}" : "აღადგინა {user}-მა",
+ "Renamed by {user}" : "სახელი გადაარქვა {user}-მა",
+ "Moved by {user}" : "გადაიტანა {user}-მა",
+ "\"remote user\"" : "\"დისტანციური მომხმარებელი\"",
+ "You created {file}" : "თქვენ შექმენით {file}",
+ "{user} created {file}" : "{user}-მა შექმნა {file}",
+ "{file} was created in a public folder" : "{file} შეიქმნა საზოგადო დირექტორიაში",
+ "You changed {file}" : "თქვენ შეცვალეთ {file}-ი",
+ "{user} changed {file}" : "{user}-მა შეცვალა {file}-ი",
+ "You deleted {file}" : "თქვენ წაშალეთ {file}-ი",
+ "{user} deleted {file}" : "{user}-მა წაშალა {file}-ი",
+ "You restored {file}" : "თქვენ აღადგინეთ {file}-ი",
+ "{user} restored {file}" : "{user}-მა განაახლა {file}",
+ "You renamed {oldfile} to {newfile}" : "თქვენ გადაარქვით სახელი {oldfile}-ს {newfile}-ზე",
+ "{user} renamed {oldfile} to {newfile}" : "{user}-მა გადაარქვა სახელი {oldfile}-ს {newfile}-ზე",
+ "You moved {oldfile} to {newfile}" : "თქვენ გადაიტანეთ {oldfile} {newfile}-ად",
+ "{user} moved {oldfile} to {newfile}" : "{user}-მა გადაიტანა {oldfile} {newfile}-ად",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "ყველა ფაილი დაემატა ან ამოიშალა<strong>რჩეულებიდან</strong>",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "ფაილს ან დირექტორის <strong>გადაერქვა სახელი</strong> ან <strong>შეიცვალა</strong>",
+ "A new file or folder has been <strong>created</strong>" : "ახალი ფაილი ან დირექტორია <strong>შეიქმნა</strong>",
+ "A file or folder has been <strong>deleted</strong>" : "ფაილი ან დირექტორია <strong>გაუქმდა</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "დაუწესეთ <strong>რჩეული ფაილების</strong> შექმნის და ცვლილებების შეტყობინებებს ლიმიტი <em>(მხოლოდ ნაკადი)</em>",
+ "A file or folder has been <strong>restored</strong>" : "ფაილი ან დირექტორია <strong>აღდგენილ იქნა</strong>",
+ "Unlimited" : "ულიმიტო",
+ "Upload (max. %s)" : "ატვირთვა (მაქს. %s)",
"File handling" : "ფაილის დამუშავება",
"Maximum upload size" : "მაქსიმუმ ატვირთის ზომა",
"max. possible: " : "მაქს. შესაძლებელი:",
"Save" : "შენახვა",
+ "With PHP-FPM it might take 5 minutes for changes to be applied." : "PHP-FPM-ით ცვლილებების შენახვამ შეიძლება გასტანოს 5 წუთი.",
+ "Missing permissions to edit from here." : "არასაკმარისი უფლებები აქედან შეცვლისათვის.",
+ "%s of %s used" : "%s სულ %s-დან მოხმარებულია",
+ "%s used" : "%s მოხმარებულია",
"Settings" : "პარამეტრები",
+ "Show hidden files" : "დამალული ფაილების ჩვენება",
"WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "გამოიყენეთ ეს მისამართი რომ <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">წვდომა იქოინოთ თქვენს ფაილებთან WebDAV-ით</a>",
+ "Cancel upload" : "ატვირთვის შეჩერება",
+ "No files in here" : "აქ ფაილები არაა",
+ "Upload some content or sync with your devices!" : "ატვირთეთ რამე ან მოახდინეთ სინქრონიზაცია თქვენს მოწყობილობებთან!",
+ "No entries found in this folder" : "ამ დირექტორიაში შენატანები ვერ იქნა ნაპოვნი",
+ "Select all" : "ყველას არჩევა",
"Upload too large" : "ასატვირთი ფაილი ძალიან დიდია",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "ფაილის ზომა რომლის ატვირთვასაც თქვენ აპირებთ, აჭარბებს სერვერზე დაშვებულ მაქსიმუმს.",
- "Text file" : "ტექსტური ფაილი"
+ "No favorites yet" : "ჯერ რჩეულები არაა",
+ "Files and folders you mark as favorite will show up here" : "აქ გამოჩნდებიან ფაილები და დირექტორიები, რომლებსაც მონიშნავთ რჩეულებად",
+ "Shared with you" : "გაზიარდა შენთან",
+ "Shared with others" : "გაზიარდა სხვებთან",
+ "Shared by link" : "გაზიარდა ბმულით",
+ "Tags" : "ტეგები",
+ "Deleted files" : "გაუქმებული ფაილები",
+ "Text file" : "ტექსტური ფაილი",
+ "New text file.txt" : "ახალი ტექსტი file.txt",
+ "Uploading..." : "მიმდინარეობს ატვირთვა...",
+ "..." : "...",
+ "_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["დარჩა {hours}:{minutes}:{seconds} საათი"],
+ "{hours}:{minutes}h" : "{hours}:{minutes}სთ",
+ "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["დარჩა {minutes}:{seconds} წუთი"],
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}წთ",
+ "_{seconds} second left_::_{seconds} seconds left_" : ["დარჩა {seconds} წამი"],
+ "{seconds}s" : "{seconds}წმ",
+ "Any moment now..." : "ნებისმიერ მომენტში...",
+ "Soon..." : "მალე...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "მიმდინარეობს ფაილის ატვირთვა. სხვა გვერდზე გადასვლა გამოიწვევს ატვირთვის შეჩერებას",
+ "Move" : "გადატანა",
+ "Copy local link" : "ლოკალური ბმულის კოპირება",
+ "Folder" : "დირექტორია",
+ "Upload" : "ატვირთვა",
+ "A new file or folder has been <strong>deleted</strong>" : "ახალი ფაილი ან დირექტორია <strong>გაუქმდა</strong>",
+ "A new file or folder has been <strong>restored</strong>" : "ახალი ფაილი ან დირექტორია <strong>აღდგენილ იქნა</strong>",
+ "No favorites" : "რჩეულები არაა"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/ka_GE.json b/apps/files/l10n/ka_GE.json
index 55cc188305b..9031ff4b9b2 100644
--- a/apps/files/l10n/ka_GE.json
+++ b/apps/files/l10n/ka_GE.json
@@ -1,48 +1,162 @@
{ "translations": {
+ "Storage is temporarily not available" : "საცავი დროებით ხელმიუწვდომელია",
+ "Storage invalid" : "საცავი არასწორია",
"Unknown error" : "უცნობი შეცდომა",
- "No file was uploaded. Unknown error" : "ფაილი არ აიტვირთა. უცნობი შეცდომა",
- "There is no error, the file uploaded with success" : "ჭოცდომა არ დაფიქსირდა, ფაილი წარმატებით აიტვირთა",
- "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "ატვირთული ფაილი აჭარბებს upload_max_filesize დირექტივას php.ini ფაილში",
- "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "ატვირთული ფაილი აჭარბებს MAX_FILE_SIZE დირექტივას, რომელიც მითითებულია HTML ფორმაში",
- "The uploaded file was only partially uploaded" : "ატვირთული ფაილი მხოლოდ ნაწილობრივ აიტვირთა",
- "No file was uploaded" : "ფაილი არ აიტვირთა",
- "Missing a temporary folder" : "დროებითი საქაღალდე არ არსებობს",
- "Failed to write to disk" : "შეცდომა დისკზე ჩაწერისას",
- "Not enough storage available" : "საცავში საკმარისი ადგილი არ არის",
- "Invalid directory." : "დაუშვებელი დირექტორია.",
- "Files" : "ფაილები",
+ "All files" : "ყველა ფაილი",
+ "Recent" : "ახალი",
+ "File could not be found" : "ფაილი ვერ იქნა ნაპოვნი",
"Home" : "სახლი",
"Close" : "დახურვა",
- "Favorites" : "ფავორიტები",
+ "Favorites" : "რჩეულები",
+ "Could not create folder \"{dir}\"" : "დირექტორია \"{dir}\" ვერ შეიქმნა",
"Upload cancelled." : "ატვირთვა შეჩერებულ იქნა.",
- "Uploading..." : "მიმდინარეობს ატვირთვა...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "მიმდინარეობს ფაილის ატვირთვა. სხვა გვერდზე გადასვლა გამოიწვევს ატვირთვის შეჩერებას",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "შეუძლებელია {filename}-ის ატვირთვა, რადგანაც ის დირექტორიაა ან გააჩნია 0 ბაიტი",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "არასაკმარისი თავისუფალი სივრცე, თქვენ ტვირთავთ {size1}-ს, მაგრამ მხოლოდ {size2}-ია დარჩენილი",
+ "Target folder \"{dir}\" does not exist any more" : "დანიშნულების დირექტორია \"{dir}\" აღარ არსებობს",
+ "Not enough free space" : "არასაკმარისი თავისუფალი სივრცე",
+ "Uploading …" : "იტვირთება ...",
+ "…" : "...",
+ "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} სულ {totalSize}-დან ({bitrate})",
"Actions" : "მოქმედებები",
"Download" : "ჩამოტვირთვა",
"Rename" : "გადარქმევა",
+ "Move or copy" : "გადაიტანეთ ან დააკოპირეთ",
+ "Target folder" : "დანიშნულების დირექტორია",
"Delete" : "წაშლა",
+ "Disconnect storage" : "საცავის გათიშვა",
"Unshare" : "გაუზიარებადი",
+ "Could not load info for file \"{file}\"" : "ფაილზე \"{file}\" ინფორმაცია ვერ ჩაიტვირთა",
+ "Files" : "ფაილები",
"Details" : "დეტალური ინფორმაცია",
+ "Select" : "არჩევა",
"Pending" : "მოცდის რეჟიმში",
+ "Unable to determine date" : "თარიღის დადგენა შეუძლებელია",
+ "This operation is forbidden" : "ეს ოპერაცია აკრძალულია",
+ "This directory is unavailable, please check the logs or contact the administrator" : "დირექტორია ხელმიუწვდომელია, გთოხვთ შეამოწმოთ ლოგები ან დაუკავშირდეთ ადმინისტრატორს",
+ "Could not move \"{file}\", target exists" : "\"{file}\"-ის გადატანა ვერ მოხერხდა, დანიშნულება არსებობს",
+ "Could not move \"{file}\"" : "\"{file\"} ის გადატანა ვერ მოხერხდა",
+ "Could not copy \"{file}\", target exists" : "\"{file}\"-ის კოპირება ვერ მოხერხდა, დანიშნულება არსებობს",
+ "Could not copy \"{file}\"" : "\"{file\"} ის კოპირება ვერ მოხერხდა",
+ "Copied {origin} inside {destination}" : "დაკოპირდა {origin} {destionation}-ში",
+ "Copied {origin} and {nbfiles} other files inside {destination}" : "დაკოპირდა {origin} და {nbfiles} სხვა ფაილი {destionation}-ში",
+ "{newName} already exists" : "{newName} უკვე არსებობს",
+ "Could not rename \"{fileName}\", it does not exist any more" : "\"{fileName}\" სახელი ვერ შეეცვალა, ის აღარ არსებობს",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "სახელი \"{targetName}\" დირექტორია \"{dir}\"-ში უკვე გამოყენებულია. გთხოვთ აირჩიოთ სხვა სახელი.",
+ "Could not rename \"{fileName}\"" : "ფაილს \"{fileName}\" სახელი ვერ შეეცვალა",
+ "Could not create file \"{file}\"" : "ფაილი \"{file}\" ვერ შეიქმნა",
+ "Could not create file \"{file}\" because it already exists" : "ფაილი \"{file}\" ვერ შეიქმნა, ის უკვე არსებობს",
+ "Could not create folder \"{dir}\" because it already exists" : "დირექტორია \"{dir}\" ვერ შეიქმნა, ის უკვე არსებობს",
+ "Error deleting file \"{fileName}\"." : "ფიალის \"{fileName}\" წაშლისას წარმოიქმნა შეცდომა.",
+ "No search results in other folders for {tag}{filter}{endtag}" : "ძიების შედეგები სხვა დირექტორიებში {tag}{filter}{endtag} არაა",
"Name" : "სახელი",
"Size" : "ზომა",
"Modified" : "შეცვლილია",
+ "_%n folder_::_%n folders_" : ["%n დირექტორია"],
+ "_%n file_::_%n files_" : ["%n ფაილი"],
+ "{dirs} and {files}" : "{dirs} და {files}",
+ "_including %n hidden_::_including %n hidden_" : ["%n დამალულის ჩათვლით"],
+ "You don’t have permission to upload or create files here" : "აქ ფაილების შექმნის ან ატვირთვის უფლება არ გაქვთ",
+ "_Uploading %n file_::_Uploading %n files_" : ["ვტვირთავთ %n ფაილს"],
"New" : "ახალი",
+ "\"{name}\" is an invalid file name." : "\"{name}\" არასწორი ფაილის სახელია.",
"File name cannot be empty." : "ფაილის სახელი არ შეიძლება იყოს ცარიელი.",
+ "\"{name}\" is not an allowed filetype" : "\"{name}\" არაა დაშვებული ფაილის ტიპი",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner}-ის საცავი სავსეა, ფაილები მეტი ვეღარ განახლდება/სინქრონიზირდება!",
"Your storage is full, files can not be updated or synced anymore!" : "თქვენი საცავი გადაივსო. ფაილების განახლება და სინქრონიზირება ვერ მოხერხდება!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner}-ის საცავი თითქმის სავსეა ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "თქვენი საცავი თითქმის გადაივსო ({usedSpacePercent}%)",
- "Favorite" : "ფავორიტი",
- "Folder" : "საქაღალდე",
+ "_matches '{filter}'_::_match '{filter}'_" : ["ემთხვევა '{filter}'-ს"],
+ "View in folder" : "ჩვენება დირექტორიაში",
+ "Copied!" : "დაკოპირდა!",
+ "Copy direct link (only works for users who have access to this file/folder)" : "დააკოპირეთ პირდაპირი ბმული (მუშაობს მომხმარებლებისთვის, რომელთაც გააჩნიათ წვდომა ამ ფაილის/დირექტორიის მიმართ)",
+ "Path" : "მისამართი",
+ "_%n byte_::_%n bytes_" : ["%n ბაიტი"],
+ "Favorited" : "დამატებულია რჩეულებში",
+ "Favorite" : "რჩეული",
"New folder" : "ახალი ფოლდერი",
- "Upload" : "ატვირთვა",
+ "Upload file" : "ფაილის ატვირთვა",
+ "Not favorited" : "არაა დამატებული რჩეულებში",
+ "Remove from favorites" : "რჩეულებიდან მოშორება",
+ "Add to favorites" : "რჩეულებში დამატება",
+ "An error occurred while trying to update the tags" : "ტეგების განახლების მცდელობისას წარმოიშვა შეცდომა",
+ "Added to favorites" : "დაემატა რჩეულებში",
+ "Removed from favorites" : "ამოიშალა რჩეულებიდან",
+ "You added {file} to your favorites" : "თქვენ დაამატეთ {file}-ი რჩეულებში",
+ "You removed {file} from your favorites" : "თქვენ ამოშალეთ {file}-ი თქვენი რჩეული ფაილებიდან",
+ "File changes" : "ფაილის ცვლილებები",
+ "Created by {user}" : "შექმნა {user}-მა",
+ "Changed by {user}" : "შეცვალა {user}-მა",
+ "Deleted by {user}" : "წაშალა {user}-მა",
+ "Restored by {user}" : "აღადგინა {user}-მა",
+ "Renamed by {user}" : "სახელი გადაარქვა {user}-მა",
+ "Moved by {user}" : "გადაიტანა {user}-მა",
+ "\"remote user\"" : "\"დისტანციური მომხმარებელი\"",
+ "You created {file}" : "თქვენ შექმენით {file}",
+ "{user} created {file}" : "{user}-მა შექმნა {file}",
+ "{file} was created in a public folder" : "{file} შეიქმნა საზოგადო დირექტორიაში",
+ "You changed {file}" : "თქვენ შეცვალეთ {file}-ი",
+ "{user} changed {file}" : "{user}-მა შეცვალა {file}-ი",
+ "You deleted {file}" : "თქვენ წაშალეთ {file}-ი",
+ "{user} deleted {file}" : "{user}-მა წაშალა {file}-ი",
+ "You restored {file}" : "თქვენ აღადგინეთ {file}-ი",
+ "{user} restored {file}" : "{user}-მა განაახლა {file}",
+ "You renamed {oldfile} to {newfile}" : "თქვენ გადაარქვით სახელი {oldfile}-ს {newfile}-ზე",
+ "{user} renamed {oldfile} to {newfile}" : "{user}-მა გადაარქვა სახელი {oldfile}-ს {newfile}-ზე",
+ "You moved {oldfile} to {newfile}" : "თქვენ გადაიტანეთ {oldfile} {newfile}-ად",
+ "{user} moved {oldfile} to {newfile}" : "{user}-მა გადაიტანა {oldfile} {newfile}-ად",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "ყველა ფაილი დაემატა ან ამოიშალა<strong>რჩეულებიდან</strong>",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "ფაილს ან დირექტორის <strong>გადაერქვა სახელი</strong> ან <strong>შეიცვალა</strong>",
+ "A new file or folder has been <strong>created</strong>" : "ახალი ფაილი ან დირექტორია <strong>შეიქმნა</strong>",
+ "A file or folder has been <strong>deleted</strong>" : "ფაილი ან დირექტორია <strong>გაუქმდა</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "დაუწესეთ <strong>რჩეული ფაილების</strong> შექმნის და ცვლილებების შეტყობინებებს ლიმიტი <em>(მხოლოდ ნაკადი)</em>",
+ "A file or folder has been <strong>restored</strong>" : "ფაილი ან დირექტორია <strong>აღდგენილ იქნა</strong>",
+ "Unlimited" : "ულიმიტო",
+ "Upload (max. %s)" : "ატვირთვა (მაქს. %s)",
"File handling" : "ფაილის დამუშავება",
"Maximum upload size" : "მაქსიმუმ ატვირთის ზომა",
"max. possible: " : "მაქს. შესაძლებელი:",
"Save" : "შენახვა",
+ "With PHP-FPM it might take 5 minutes for changes to be applied." : "PHP-FPM-ით ცვლილებების შენახვამ შეიძლება გასტანოს 5 წუთი.",
+ "Missing permissions to edit from here." : "არასაკმარისი უფლებები აქედან შეცვლისათვის.",
+ "%s of %s used" : "%s სულ %s-დან მოხმარებულია",
+ "%s used" : "%s მოხმარებულია",
"Settings" : "პარამეტრები",
+ "Show hidden files" : "დამალული ფაილების ჩვენება",
"WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "გამოიყენეთ ეს მისამართი რომ <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">წვდომა იქოინოთ თქვენს ფაილებთან WebDAV-ით</a>",
+ "Cancel upload" : "ატვირთვის შეჩერება",
+ "No files in here" : "აქ ფაილები არაა",
+ "Upload some content or sync with your devices!" : "ატვირთეთ რამე ან მოახდინეთ სინქრონიზაცია თქვენს მოწყობილობებთან!",
+ "No entries found in this folder" : "ამ დირექტორიაში შენატანები ვერ იქნა ნაპოვნი",
+ "Select all" : "ყველას არჩევა",
"Upload too large" : "ასატვირთი ფაილი ძალიან დიდია",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "ფაილის ზომა რომლის ატვირთვასაც თქვენ აპირებთ, აჭარბებს სერვერზე დაშვებულ მაქსიმუმს.",
- "Text file" : "ტექსტური ფაილი"
+ "No favorites yet" : "ჯერ რჩეულები არაა",
+ "Files and folders you mark as favorite will show up here" : "აქ გამოჩნდებიან ფაილები და დირექტორიები, რომლებსაც მონიშნავთ რჩეულებად",
+ "Shared with you" : "გაზიარდა შენთან",
+ "Shared with others" : "გაზიარდა სხვებთან",
+ "Shared by link" : "გაზიარდა ბმულით",
+ "Tags" : "ტეგები",
+ "Deleted files" : "გაუქმებული ფაილები",
+ "Text file" : "ტექსტური ფაილი",
+ "New text file.txt" : "ახალი ტექსტი file.txt",
+ "Uploading..." : "მიმდინარეობს ატვირთვა...",
+ "..." : "...",
+ "_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["დარჩა {hours}:{minutes}:{seconds} საათი"],
+ "{hours}:{minutes}h" : "{hours}:{minutes}სთ",
+ "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["დარჩა {minutes}:{seconds} წუთი"],
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}წთ",
+ "_{seconds} second left_::_{seconds} seconds left_" : ["დარჩა {seconds} წამი"],
+ "{seconds}s" : "{seconds}წმ",
+ "Any moment now..." : "ნებისმიერ მომენტში...",
+ "Soon..." : "მალე...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "მიმდინარეობს ფაილის ატვირთვა. სხვა გვერდზე გადასვლა გამოიწვევს ატვირთვის შეჩერებას",
+ "Move" : "გადატანა",
+ "Copy local link" : "ლოკალური ბმულის კოპირება",
+ "Folder" : "დირექტორია",
+ "Upload" : "ატვირთვა",
+ "A new file or folder has been <strong>deleted</strong>" : "ახალი ფაილი ან დირექტორია <strong>გაუქმდა</strong>",
+ "A new file or folder has been <strong>restored</strong>" : "ახალი ფაილი ან დირექტორია <strong>აღდგენილ იქნა</strong>",
+ "No favorites" : "რჩეულები არაა"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/lt_LT.js b/apps/files/l10n/lt_LT.js
index 2395bad8d7b..5910d8e9e52 100644
--- a/apps/files/l10n/lt_LT.js
+++ b/apps/files/l10n/lt_LT.js
@@ -16,7 +16,6 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nepakanka laisvos vietos. Jūs bandote įkelti {size1} dydžio bylą, bet liko tik {size2} vietos",
"Target folder \"{dir}\" does not exist any more" : "Paskirties aplanko \"{dir}\" daugiau nebėra",
"Not enough free space" : "Trūksta laisvos vietos",
- "Uploading …" : "Įkeliama ...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} iš {totalSize} ({bitrate})",
"Actions" : "Veiksmai",
@@ -118,7 +117,6 @@ OC.L10N.register(
"Show hidden files" : "Rodyti paslėptus failus",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Naudokite šį adresą <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\"> norėdami pasiekti failus per WebDAV</a>",
- "Uploading @" : "Įkeliama @",
"No files in here" : "Čia nėra failų",
"Upload some content or sync with your devices!" : "Įkelkite kokį nors turinį, arba sinchronizuokite su savo įrenginiais!",
"No entries found in this folder" : "Nerasta įrašų šiame aplanke",
diff --git a/apps/files/l10n/lt_LT.json b/apps/files/l10n/lt_LT.json
index d2d320380d1..c8d94929051 100644
--- a/apps/files/l10n/lt_LT.json
+++ b/apps/files/l10n/lt_LT.json
@@ -14,7 +14,6 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nepakanka laisvos vietos. Jūs bandote įkelti {size1} dydžio bylą, bet liko tik {size2} vietos",
"Target folder \"{dir}\" does not exist any more" : "Paskirties aplanko \"{dir}\" daugiau nebėra",
"Not enough free space" : "Trūksta laisvos vietos",
- "Uploading …" : "Įkeliama ...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} iš {totalSize} ({bitrate})",
"Actions" : "Veiksmai",
@@ -116,7 +115,6 @@
"Show hidden files" : "Rodyti paslėptus failus",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Naudokite šį adresą <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\"> norėdami pasiekti failus per WebDAV</a>",
- "Uploading @" : "Įkeliama @",
"No files in here" : "Čia nėra failų",
"Upload some content or sync with your devices!" : "Įkelkite kokį nors turinį, arba sinchronizuokite su savo įrenginiais!",
"No entries found in this folder" : "Nerasta įrašų šiame aplanke",
diff --git a/apps/files/l10n/nb.js b/apps/files/l10n/nb.js
index 0363627955f..d37c9e00df4 100644
--- a/apps/files/l10n/nb.js
+++ b/apps/files/l10n/nb.js
@@ -16,7 +16,6 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ikke nok ledig plass. Du laster opp size1} men bare {size2} er ledig",
"Target folder \"{dir}\" does not exist any more" : "Målmappen \"{dir}\" finnes ikke lenger",
"Not enough free space" : "Ikke nok ledig diskplass",
- "Uploading …" : "Laster opp…",
"…" : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} av {totalSize} ({bitrate})",
"Actions" : "Handlinger",
@@ -77,6 +76,9 @@ OC.L10N.register(
"Favorite" : "Gjør til favoritt",
"New folder" : "Ny mappe",
"Upload file" : "Last opp fil",
+ "Not favorited" : "Ikke i favoritter",
+ "Remove from favorites" : "Fjern fra favoritter",
+ "Add to favorites" : "Legg til i favoritter",
"An error occurred while trying to update the tags" : "En feil oppstod under oppdatering av merkelappene",
"Added to favorites" : "Lagt til i favoritter",
"Removed from favorites" : "Fjernet fra favoritter",
@@ -123,7 +125,6 @@ OC.L10N.register(
"Show hidden files" : "Vis skjulte filer",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Bruk adressen <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">for å få tilgang til WebDAV</a>",
- "Uploading @" : "Laster opp @",
"Cancel upload" : "Avbryt opplasting",
"No files in here" : "Ingen filer her",
"Upload some content or sync with your devices!" : "Last opp noe innhold eller synkroniser med enhetene dine!",
diff --git a/apps/files/l10n/nb.json b/apps/files/l10n/nb.json
index 239793a7e70..dc1937bd0f5 100644
--- a/apps/files/l10n/nb.json
+++ b/apps/files/l10n/nb.json
@@ -14,7 +14,6 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ikke nok ledig plass. Du laster opp size1} men bare {size2} er ledig",
"Target folder \"{dir}\" does not exist any more" : "Målmappen \"{dir}\" finnes ikke lenger",
"Not enough free space" : "Ikke nok ledig diskplass",
- "Uploading …" : "Laster opp…",
"…" : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} av {totalSize} ({bitrate})",
"Actions" : "Handlinger",
@@ -75,6 +74,9 @@
"Favorite" : "Gjør til favoritt",
"New folder" : "Ny mappe",
"Upload file" : "Last opp fil",
+ "Not favorited" : "Ikke i favoritter",
+ "Remove from favorites" : "Fjern fra favoritter",
+ "Add to favorites" : "Legg til i favoritter",
"An error occurred while trying to update the tags" : "En feil oppstod under oppdatering av merkelappene",
"Added to favorites" : "Lagt til i favoritter",
"Removed from favorites" : "Fjernet fra favoritter",
@@ -121,7 +123,6 @@
"Show hidden files" : "Vis skjulte filer",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Bruk adressen <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">for å få tilgang til WebDAV</a>",
- "Uploading @" : "Laster opp @",
"Cancel upload" : "Avbryt opplasting",
"No files in here" : "Ingen filer her",
"Upload some content or sync with your devices!" : "Last opp noe innhold eller synkroniser med enhetene dine!",
diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js
index 6bb95a1a00e..5461b88999a 100644
--- a/apps/files/l10n/nl.js
+++ b/apps/files/l10n/nl.js
@@ -16,7 +16,7 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Niet genoeg vrije ruimte. Je uploadt {size1}, maar er is slechts {size2} beschikbaar",
"Target folder \"{dir}\" does not exist any more" : "Doelmap \"{dir}\" bestaat niet meer",
"Not enough free space" : "Onvoldoende vrije ruimte",
- "Uploading …" : "Uploaden ...",
+ "Uploading …" : "Uploaden …",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} van {totalSize} ({bitrate})",
"Actions" : "Acties",
@@ -77,6 +77,9 @@ OC.L10N.register(
"Favorite" : "Favoriet",
"New folder" : "Nieuwe map",
"Upload file" : "Bestand uploaden",
+ "Not favorited" : "Niet in favorieten",
+ "Remove from favorites" : "Verwijder van favorieten",
+ "Add to favorites" : "Aan favorieten toevoegen",
"An error occurred while trying to update the tags" : "Er trad een fout op bij jouw poging om de markeringen bij te werken",
"Added to favorites" : "Toevoegen aan favorieten",
"Removed from favorites" : "Verwijderen uit favorieten",
@@ -123,7 +126,7 @@ OC.L10N.register(
"Show hidden files" : "Verborgen bestanden tonen",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Gebruik deze link <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">om je bestanden via WebDAV te benaderen</a>",
- "Uploading @" : "Uploaden @",
+ "Cancel upload" : "Stop upload",
"No files in here" : "Hier geen bestanden",
"Upload some content or sync with your devices!" : "Upload je inhoud of synchroniseer met je apparaten!",
"No entries found in this folder" : "Niets",
diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json
index efda557da81..bf02491b393 100644
--- a/apps/files/l10n/nl.json
+++ b/apps/files/l10n/nl.json
@@ -14,7 +14,7 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Niet genoeg vrije ruimte. Je uploadt {size1}, maar er is slechts {size2} beschikbaar",
"Target folder \"{dir}\" does not exist any more" : "Doelmap \"{dir}\" bestaat niet meer",
"Not enough free space" : "Onvoldoende vrije ruimte",
- "Uploading …" : "Uploaden ...",
+ "Uploading …" : "Uploaden …",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} van {totalSize} ({bitrate})",
"Actions" : "Acties",
@@ -75,6 +75,9 @@
"Favorite" : "Favoriet",
"New folder" : "Nieuwe map",
"Upload file" : "Bestand uploaden",
+ "Not favorited" : "Niet in favorieten",
+ "Remove from favorites" : "Verwijder van favorieten",
+ "Add to favorites" : "Aan favorieten toevoegen",
"An error occurred while trying to update the tags" : "Er trad een fout op bij jouw poging om de markeringen bij te werken",
"Added to favorites" : "Toevoegen aan favorieten",
"Removed from favorites" : "Verwijderen uit favorieten",
@@ -121,7 +124,7 @@
"Show hidden files" : "Verborgen bestanden tonen",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Gebruik deze link <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">om je bestanden via WebDAV te benaderen</a>",
- "Uploading @" : "Uploaden @",
+ "Cancel upload" : "Stop upload",
"No files in here" : "Hier geen bestanden",
"Upload some content or sync with your devices!" : "Upload je inhoud of synchroniseer met je apparaten!",
"No entries found in this folder" : "Niets",
diff --git a/apps/files/l10n/pl.js b/apps/files/l10n/pl.js
index 1d11928c27a..9d298be0e2a 100644
--- a/apps/files/l10n/pl.js
+++ b/apps/files/l10n/pl.js
@@ -77,6 +77,9 @@ OC.L10N.register(
"Favorite" : "Ulubione",
"New folder" : "Nowy folder",
"Upload file" : "Wyślij plik",
+ "Not favorited" : "Wyłączone z ulubionych",
+ "Remove from favorites" : "Usuń z ulubionych",
+ "Add to favorites" : "Dodaj do ulubionych",
"An error occurred while trying to update the tags" : "Wystąpił błąd podczas aktualizacji tagów",
"Added to favorites" : "Dodano do ulubionych",
"Removed from favorites" : "Usunięto z ulubionych",
@@ -123,7 +126,6 @@ OC.L10N.register(
"Show hidden files" : "Pokaż ukryte pliki",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Użyj tego adresu aby uzyskać <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dostęp do swoich plików poprzez WebDAV</a>",
- "Uploading @" : "Wysyłanie",
"Cancel upload" : "Anuluj wysyłanie",
"No files in here" : "Brak plików",
"Upload some content or sync with your devices!" : "Wgraj coś, albo wykonaj synchronizację ze swoimi urządzeniami.",
diff --git a/apps/files/l10n/pl.json b/apps/files/l10n/pl.json
index 91fe2b1c44d..38986e0cd27 100644
--- a/apps/files/l10n/pl.json
+++ b/apps/files/l10n/pl.json
@@ -75,6 +75,9 @@
"Favorite" : "Ulubione",
"New folder" : "Nowy folder",
"Upload file" : "Wyślij plik",
+ "Not favorited" : "Wyłączone z ulubionych",
+ "Remove from favorites" : "Usuń z ulubionych",
+ "Add to favorites" : "Dodaj do ulubionych",
"An error occurred while trying to update the tags" : "Wystąpił błąd podczas aktualizacji tagów",
"Added to favorites" : "Dodano do ulubionych",
"Removed from favorites" : "Usunięto z ulubionych",
@@ -121,7 +124,6 @@
"Show hidden files" : "Pokaż ukryte pliki",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Użyj tego adresu aby uzyskać <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dostęp do swoich plików poprzez WebDAV</a>",
- "Uploading @" : "Wysyłanie",
"Cancel upload" : "Anuluj wysyłanie",
"No files in here" : "Brak plików",
"Upload some content or sync with your devices!" : "Wgraj coś, albo wykonaj synchronizację ze swoimi urządzeniami.",
diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js
index ab8f1c14afb..ea38f68d6b0 100644
--- a/apps/files/l10n/pt_BR.js
+++ b/apps/files/l10n/pt_BR.js
@@ -77,6 +77,9 @@ OC.L10N.register(
"Favorite" : "Favorito",
"New folder" : "Nova pasta",
"Upload file" : "Enviar arquivo",
+ "Not favorited" : "Sem favoritos",
+ "Remove from favorites" : "Excluir dos favoritos",
+ "Add to favorites" : "Adicionar aos favoritos",
"An error occurred while trying to update the tags" : "Ocorreu um erro enquanto tentava atualizar as etiquetas",
"Added to favorites" : "Adicionado aos favoritos",
"Removed from favorites" : "Excluído dos favoritos",
@@ -123,7 +126,6 @@ OC.L10N.register(
"Show hidden files" : "Mostrar arquivos ocultos",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Use este endereço <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">para acessar seus arquivos via WebDAV</a>",
- "Uploading @" : "Enviando @",
"Cancel upload" : "Cancelar envio",
"No files in here" : "Nenhum arquivo aqui",
"Upload some content or sync with your devices!" : "Envie algum conteúdo ou sincronize com seus dispositivos!",
diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json
index c551e03a978..26fafd4c5d8 100644
--- a/apps/files/l10n/pt_BR.json
+++ b/apps/files/l10n/pt_BR.json
@@ -75,6 +75,9 @@
"Favorite" : "Favorito",
"New folder" : "Nova pasta",
"Upload file" : "Enviar arquivo",
+ "Not favorited" : "Sem favoritos",
+ "Remove from favorites" : "Excluir dos favoritos",
+ "Add to favorites" : "Adicionar aos favoritos",
"An error occurred while trying to update the tags" : "Ocorreu um erro enquanto tentava atualizar as etiquetas",
"Added to favorites" : "Adicionado aos favoritos",
"Removed from favorites" : "Excluído dos favoritos",
@@ -121,7 +124,6 @@
"Show hidden files" : "Mostrar arquivos ocultos",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Use este endereço <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">para acessar seus arquivos via WebDAV</a>",
- "Uploading @" : "Enviando @",
"Cancel upload" : "Cancelar envio",
"No files in here" : "Nenhum arquivo aqui",
"Upload some content or sync with your devices!" : "Envie algum conteúdo ou sincronize com seus dispositivos!",
diff --git a/apps/files/l10n/ru.js b/apps/files/l10n/ru.js
index 1455ed2abd3..b56de035d15 100644
--- a/apps/files/l10n/ru.js
+++ b/apps/files/l10n/ru.js
@@ -12,11 +12,11 @@ OC.L10N.register(
"Favorites" : "Избранные",
"Could not create folder \"{dir}\"" : "Невозможно создать каталог «{dir}»",
"Upload cancelled." : "Выгрузка отменена.",
- "Unable to upload {filename} as it is a directory or has 0 bytes" : "Невозможно выгрузить «{filename}», так как это либо каталог, либо файл нулевого размера",
- "Not enough free space, you are uploading {size1} but only {size2} is left" : "Недостаточно свободного места, вы выгружаете {size1}, но только {size2} доступно",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "Невозможно загрузить «{filename}», так как это либо каталог, либо файл нулевого размера",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "Недостаточно свободного места, вы загружаете {size1}, но только {size2} доступно",
"Target folder \"{dir}\" does not exist any more" : "Целевой каталог «{dir}» более не существует",
"Not enough free space" : "Недостаточно свободного места",
- "Uploading …" : "Выгрузка...",
+ "Uploading …" : "Загрузка...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} из {totalSize} ({bitrate})",
"Actions" : "Действия",
@@ -58,7 +58,7 @@ OC.L10N.register(
"{dirs} and {files}" : "{dirs} и {files}",
"_including %n hidden_::_including %n hidden_" : ["включая %n скрытый","включая %n скрытых","включая %n скрытых","включая %n скрытых"],
"You don’t have permission to upload or create files here" : "У вас нет разрешений на создание или загрузку файлов в эту папку.",
- "_Uploading %n file_::_Uploading %n files_" : ["Выгружа%nется файл","Выгружаются %n файла","Выгружаются %n файлов","Выгружаются %n файлов"],
+ "_Uploading %n file_::_Uploading %n files_" : ["Выгружа%nется файл","Выгружаются %n файла","Выгружаются %n файлов","Загружаются %n файлов"],
"New" : "Новый",
"\"{name}\" is an invalid file name." : "«{name}» — недопустимое имя файла.",
"File name cannot be empty." : "Имя файла не может быть пустым.",
@@ -76,7 +76,10 @@ OC.L10N.register(
"Favorited" : "Избранное",
"Favorite" : "Добавить в избранное",
"New folder" : "Новый каталог",
- "Upload file" : "Выгрузить файл",
+ "Upload file" : "Зарузить файл",
+ "Not favorited" : "Не избранное",
+ "Remove from favorites" : "Удалить из избранных",
+ "Add to favorites" : "Добавить в избранное",
"An error occurred while trying to update the tags" : "Во время обновления тегов возникла ошибка",
"Added to favorites" : "Добавлено в избранное",
"Removed from favorites" : "Удалено из избранного",
@@ -110,9 +113,9 @@ OC.L10N.register(
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Ограничить уведомления о создании и изменении ваших <strong>избранных файлов</strong> <em>(отображать только в приложении события)</em>",
"A file or folder has been <strong>restored</strong>" : "Файл или каталог был <strong>восстановлен</strong>",
"Unlimited" : "Неограничено",
- "Upload (max. %s)" : "Выгрузка (максимум %s)",
+ "Upload (max. %s)" : "Загрузка (максимум %s)",
"File handling" : "Управление файлами",
- "Maximum upload size" : "Максимальный размер выгружаемого файла",
+ "Maximum upload size" : "Максимальный размер загружаемого файла",
"max. possible: " : "макс. возможно: ",
"Save" : "Сохранить",
"With PHP-FPM it might take 5 minutes for changes to be applied." : "В режиме PHP-FPM применение изменений может занять до 5 минут.",
@@ -123,8 +126,7 @@ OC.L10N.register(
"Show hidden files" : "Показывать скрытые файлы",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Используйте этот адрес <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">для доступа по WebDAV</a>",
- "Uploading @" : "Выгрузка @",
- "Cancel upload" : "Отменить выгрузку",
+ "Cancel upload" : "Отменить загрузку",
"No files in here" : "Здесь нет файлов",
"Upload some content or sync with your devices!" : "Загрузите что-нибудь или синхронизируйте со своими устройствами!",
"No entries found in this folder" : "В этом каталоге ничего не найдено",
@@ -140,7 +142,7 @@ OC.L10N.register(
"Deleted files" : "Корзина",
"Text file" : "Текстовый файл",
"New text file.txt" : "Новый текстовый файл.txt",
- "Uploading..." : "Выгрузка...",
+ "Uploading..." : "Загрузка...",
"..." : "...",
"_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["Остался {hours}:{minutes}:{seconds} час","Осталось {hours}:{minutes}:{seconds} часа","Осталось {hours}:{minutes}:{seconds} часов","Осталось {hours}:{minutes}:{seconds} часов"],
"{hours}:{minutes}h" : "{hours}:{minutes}ч",
@@ -150,7 +152,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}с",
"Any moment now..." : "В любой момент...",
"Soon..." : "Скоро...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Выполняется передача файла. Покинув страницу, вы прервёте выгрузку.",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Выполняется передача файла. Покинув страницу, вы прервёте загрузку.",
"Move" : "Перенести",
"Copy local link" : "Скопировать локальную ссылку",
"Folder" : "Каталог",
diff --git a/apps/files/l10n/ru.json b/apps/files/l10n/ru.json
index 20bbb1d2e31..53c74b50f6f 100644
--- a/apps/files/l10n/ru.json
+++ b/apps/files/l10n/ru.json
@@ -10,11 +10,11 @@
"Favorites" : "Избранные",
"Could not create folder \"{dir}\"" : "Невозможно создать каталог «{dir}»",
"Upload cancelled." : "Выгрузка отменена.",
- "Unable to upload {filename} as it is a directory or has 0 bytes" : "Невозможно выгрузить «{filename}», так как это либо каталог, либо файл нулевого размера",
- "Not enough free space, you are uploading {size1} but only {size2} is left" : "Недостаточно свободного места, вы выгружаете {size1}, но только {size2} доступно",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "Невозможно загрузить «{filename}», так как это либо каталог, либо файл нулевого размера",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "Недостаточно свободного места, вы загружаете {size1}, но только {size2} доступно",
"Target folder \"{dir}\" does not exist any more" : "Целевой каталог «{dir}» более не существует",
"Not enough free space" : "Недостаточно свободного места",
- "Uploading …" : "Выгрузка...",
+ "Uploading …" : "Загрузка...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} из {totalSize} ({bitrate})",
"Actions" : "Действия",
@@ -56,7 +56,7 @@
"{dirs} and {files}" : "{dirs} и {files}",
"_including %n hidden_::_including %n hidden_" : ["включая %n скрытый","включая %n скрытых","включая %n скрытых","включая %n скрытых"],
"You don’t have permission to upload or create files here" : "У вас нет разрешений на создание или загрузку файлов в эту папку.",
- "_Uploading %n file_::_Uploading %n files_" : ["Выгружа%nется файл","Выгружаются %n файла","Выгружаются %n файлов","Выгружаются %n файлов"],
+ "_Uploading %n file_::_Uploading %n files_" : ["Выгружа%nется файл","Выгружаются %n файла","Выгружаются %n файлов","Загружаются %n файлов"],
"New" : "Новый",
"\"{name}\" is an invalid file name." : "«{name}» — недопустимое имя файла.",
"File name cannot be empty." : "Имя файла не может быть пустым.",
@@ -74,7 +74,10 @@
"Favorited" : "Избранное",
"Favorite" : "Добавить в избранное",
"New folder" : "Новый каталог",
- "Upload file" : "Выгрузить файл",
+ "Upload file" : "Зарузить файл",
+ "Not favorited" : "Не избранное",
+ "Remove from favorites" : "Удалить из избранных",
+ "Add to favorites" : "Добавить в избранное",
"An error occurred while trying to update the tags" : "Во время обновления тегов возникла ошибка",
"Added to favorites" : "Добавлено в избранное",
"Removed from favorites" : "Удалено из избранного",
@@ -108,9 +111,9 @@
"Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Ограничить уведомления о создании и изменении ваших <strong>избранных файлов</strong> <em>(отображать только в приложении события)</em>",
"A file or folder has been <strong>restored</strong>" : "Файл или каталог был <strong>восстановлен</strong>",
"Unlimited" : "Неограничено",
- "Upload (max. %s)" : "Выгрузка (максимум %s)",
+ "Upload (max. %s)" : "Загрузка (максимум %s)",
"File handling" : "Управление файлами",
- "Maximum upload size" : "Максимальный размер выгружаемого файла",
+ "Maximum upload size" : "Максимальный размер загружаемого файла",
"max. possible: " : "макс. возможно: ",
"Save" : "Сохранить",
"With PHP-FPM it might take 5 minutes for changes to be applied." : "В режиме PHP-FPM применение изменений может занять до 5 минут.",
@@ -121,8 +124,7 @@
"Show hidden files" : "Показывать скрытые файлы",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Используйте этот адрес <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">для доступа по WebDAV</a>",
- "Uploading @" : "Выгрузка @",
- "Cancel upload" : "Отменить выгрузку",
+ "Cancel upload" : "Отменить загрузку",
"No files in here" : "Здесь нет файлов",
"Upload some content or sync with your devices!" : "Загрузите что-нибудь или синхронизируйте со своими устройствами!",
"No entries found in this folder" : "В этом каталоге ничего не найдено",
@@ -138,7 +140,7 @@
"Deleted files" : "Корзина",
"Text file" : "Текстовый файл",
"New text file.txt" : "Новый текстовый файл.txt",
- "Uploading..." : "Выгрузка...",
+ "Uploading..." : "Загрузка...",
"..." : "...",
"_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["Остался {hours}:{minutes}:{seconds} час","Осталось {hours}:{minutes}:{seconds} часа","Осталось {hours}:{minutes}:{seconds} часов","Осталось {hours}:{minutes}:{seconds} часов"],
"{hours}:{minutes}h" : "{hours}:{minutes}ч",
@@ -148,7 +150,7 @@
"{seconds}s" : "{seconds}с",
"Any moment now..." : "В любой момент...",
"Soon..." : "Скоро...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Выполняется передача файла. Покинув страницу, вы прервёте выгрузку.",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Выполняется передача файла. Покинув страницу, вы прервёте загрузку.",
"Move" : "Перенести",
"Copy local link" : "Скопировать локальную ссылку",
"Folder" : "Каталог",
diff --git a/apps/files/l10n/sk.js b/apps/files/l10n/sk.js
index 640c6a477d9..b103172e819 100644
--- a/apps/files/l10n/sk.js
+++ b/apps/files/l10n/sk.js
@@ -16,7 +16,7 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nie je dostatok voľného miesta, chcete nahrať {size1} ale k dispozíciji je len {size2}",
"Target folder \"{dir}\" does not exist any more" : "Cieľový priečinok \"{dir}\" už neexistuje",
"Not enough free space" : "Nedostatok voľného miesta",
- "Uploading …" : "Nahráva sa ...",
+ "Uploading …" : "Nahrávanie...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} z {totalSize} ({bitrate})",
"Actions" : "Akcie",
@@ -77,6 +77,9 @@ OC.L10N.register(
"Favorite" : "Obľúbené",
"New folder" : "Nový priečinok",
"Upload file" : "Nahrať súbor",
+ "Not favorited" : "Nie je obľúbený",
+ "Remove from favorites" : "Odstrániť z obľúbených",
+ "Add to favorites" : "Pridať do obľúbených",
"An error occurred while trying to update the tags" : "Pri pokuse o aktualizáciu štítkov došlo k chybe",
"Added to favorites" : "Pridané do obľúbených",
"Removed from favorites" : "Odstránené z obľúbených",
@@ -123,7 +126,7 @@ OC.L10N.register(
"Show hidden files" : "Zobraziť skryté súbory",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Použi túto adresu pre <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">prístup ku svojím súborom cez WebDAV</a>",
- "Uploading @" : "Nahráva sa @",
+ "Cancel upload" : "Zrušiť nahrávanie",
"No files in here" : "Nie sú tu žiadne súbory",
"Upload some content or sync with your devices!" : "Nahrajte nejaký obsah alebo synchronizujte zo svojimi zariadeniami!",
"No entries found in this folder" : "V tomto priečinku nebolo nič nájdené",
diff --git a/apps/files/l10n/sk.json b/apps/files/l10n/sk.json
index 7d66eaad059..5947e0b1dca 100644
--- a/apps/files/l10n/sk.json
+++ b/apps/files/l10n/sk.json
@@ -14,7 +14,7 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nie je dostatok voľného miesta, chcete nahrať {size1} ale k dispozíciji je len {size2}",
"Target folder \"{dir}\" does not exist any more" : "Cieľový priečinok \"{dir}\" už neexistuje",
"Not enough free space" : "Nedostatok voľného miesta",
- "Uploading …" : "Nahráva sa ...",
+ "Uploading …" : "Nahrávanie...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} z {totalSize} ({bitrate})",
"Actions" : "Akcie",
@@ -75,6 +75,9 @@
"Favorite" : "Obľúbené",
"New folder" : "Nový priečinok",
"Upload file" : "Nahrať súbor",
+ "Not favorited" : "Nie je obľúbený",
+ "Remove from favorites" : "Odstrániť z obľúbených",
+ "Add to favorites" : "Pridať do obľúbených",
"An error occurred while trying to update the tags" : "Pri pokuse o aktualizáciu štítkov došlo k chybe",
"Added to favorites" : "Pridané do obľúbených",
"Removed from favorites" : "Odstránené z obľúbených",
@@ -121,7 +124,7 @@
"Show hidden files" : "Zobraziť skryté súbory",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Použi túto adresu pre <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">prístup ku svojím súborom cez WebDAV</a>",
- "Uploading @" : "Nahráva sa @",
+ "Cancel upload" : "Zrušiť nahrávanie",
"No files in here" : "Nie sú tu žiadne súbory",
"Upload some content or sync with your devices!" : "Nahrajte nejaký obsah alebo synchronizujte zo svojimi zariadeniami!",
"No entries found in this folder" : "V tomto priečinku nebolo nič nájdené",
diff --git a/apps/files/l10n/sl.js b/apps/files/l10n/sl.js
index cedf0bfc2b5..28a97a6cdb3 100644
--- a/apps/files/l10n/sl.js
+++ b/apps/files/l10n/sl.js
@@ -16,7 +16,6 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Na voljo ni dovolj prostora. Velikost poslane datoteke je {size1}, na voljo pa je je {size2}.",
"Target folder \"{dir}\" does not exist any more" : "Ciljna mapa \"{dir}\" ne obstaja več",
"Not enough free space" : "Ni dovolj prostora",
- "Uploading …" : "Nalaganje",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} od {totalSize} ({bitrate})",
"Actions" : "Dejanja",
@@ -119,7 +118,6 @@ OC.L10N.register(
"Show hidden files" : "Pokaži skrite datoteke",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Uporabite naslov <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\"> za dostop do datotek prek sistema WebDAV</a>.",
- "Uploading @" : "Nalaganje @",
"Cancel upload" : "Prekini nalaganje",
"No files in here" : "V mapi ni datotek",
"Upload some content or sync with your devices!" : "Uvozite vsebino ali pa omogočite usklajevanje z napravami!",
diff --git a/apps/files/l10n/sl.json b/apps/files/l10n/sl.json
index a10d6ac1d91..c5dd2eb6e29 100644
--- a/apps/files/l10n/sl.json
+++ b/apps/files/l10n/sl.json
@@ -14,7 +14,6 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Na voljo ni dovolj prostora. Velikost poslane datoteke je {size1}, na voljo pa je je {size2}.",
"Target folder \"{dir}\" does not exist any more" : "Ciljna mapa \"{dir}\" ne obstaja več",
"Not enough free space" : "Ni dovolj prostora",
- "Uploading …" : "Nalaganje",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} od {totalSize} ({bitrate})",
"Actions" : "Dejanja",
@@ -117,7 +116,6 @@
"Show hidden files" : "Pokaži skrite datoteke",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Uporabite naslov <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\"> za dostop do datotek prek sistema WebDAV</a>.",
- "Uploading @" : "Nalaganje @",
"Cancel upload" : "Prekini nalaganje",
"No files in here" : "V mapi ni datotek",
"Upload some content or sync with your devices!" : "Uvozite vsebino ali pa omogočite usklajevanje z napravami!",
diff --git a/apps/files/l10n/sr.js b/apps/files/l10n/sr.js
index add1c3615d6..62d72d56d45 100644
--- a/apps/files/l10n/sr.js
+++ b/apps/files/l10n/sr.js
@@ -16,7 +16,7 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Нема простора. Отпремате {size1} али само {size2} је преостало",
"Target folder \"{dir}\" does not exist any more" : "Одредишна фасцикла \"{dir}\" више не постоји",
"Not enough free space" : "Нема довољно слободног места",
- "Uploading …" : "Отпремам …",
+ "Uploading …" : "Отпремам…",
"…" : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} од {totalSize} ({bitrate})",
"Actions" : "Радње",
@@ -77,6 +77,9 @@ OC.L10N.register(
"Favorite" : "Омиљени",
"New folder" : "Нова фасцикла",
"Upload file" : "Отпреми фајл",
+ "Not favorited" : "Није омиљено",
+ "Remove from favorites" : "Избаци из омиљених",
+ "Add to favorites" : "Додај у омиљене",
"An error occurred while trying to update the tags" : "Дошло је до грешке при покушају ажурирања ознака",
"Added to favorites" : "Додато у омиљено",
"Removed from favorites" : "Избачено из омиљених",
@@ -123,7 +126,7 @@ OC.L10N.register(
"Show hidden files" : "Прикажи скривене фајлове",
"WebDAV" : "ВебДАВ",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Користи ову адресу да <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">приступате Вашим фајловима преко ВебДАВа</a>",
- "Uploading @" : "Отпремам @",
+ "Cancel upload" : "Откажи отпремање",
"No files in here" : "Овде нема фајлова",
"Upload some content or sync with your devices!" : "Отпремите неки садржај или синхронизујте са вашим уређајима!",
"No entries found in this folder" : "Нема ничега у овој фасцикли",
diff --git a/apps/files/l10n/sr.json b/apps/files/l10n/sr.json
index dac49d86f33..190e3045496 100644
--- a/apps/files/l10n/sr.json
+++ b/apps/files/l10n/sr.json
@@ -14,7 +14,7 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Нема простора. Отпремате {size1} али само {size2} је преостало",
"Target folder \"{dir}\" does not exist any more" : "Одредишна фасцикла \"{dir}\" више не постоји",
"Not enough free space" : "Нема довољно слободног места",
- "Uploading …" : "Отпремам …",
+ "Uploading …" : "Отпремам…",
"…" : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} од {totalSize} ({bitrate})",
"Actions" : "Радње",
@@ -75,6 +75,9 @@
"Favorite" : "Омиљени",
"New folder" : "Нова фасцикла",
"Upload file" : "Отпреми фајл",
+ "Not favorited" : "Није омиљено",
+ "Remove from favorites" : "Избаци из омиљених",
+ "Add to favorites" : "Додај у омиљене",
"An error occurred while trying to update the tags" : "Дошло је до грешке при покушају ажурирања ознака",
"Added to favorites" : "Додато у омиљено",
"Removed from favorites" : "Избачено из омиљених",
@@ -121,7 +124,7 @@
"Show hidden files" : "Прикажи скривене фајлове",
"WebDAV" : "ВебДАВ",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Користи ову адресу да <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">приступате Вашим фајловима преко ВебДАВа</a>",
- "Uploading @" : "Отпремам @",
+ "Cancel upload" : "Откажи отпремање",
"No files in here" : "Овде нема фајлова",
"Upload some content or sync with your devices!" : "Отпремите неки садржај или синхронизујте са вашим уређајима!",
"No entries found in this folder" : "Нема ничега у овој фасцикли",
diff --git a/apps/files/l10n/sv.js b/apps/files/l10n/sv.js
index ef6e091ecc7..43515856b89 100644
--- a/apps/files/l10n/sv.js
+++ b/apps/files/l10n/sv.js
@@ -16,7 +16,6 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Inte tillräckligt med ledigt utrymme, du laddar upp {size1} men endast {size2} finns kvar.",
"Target folder \"{dir}\" does not exist any more" : "Målmapp \"{dir}\" existerar inte mer",
"Not enough free space" : "Inte tillräckligt med ledigt utrymme",
- "Uploading …" : "Laddar upp ...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} av {totalSize} ({bitrate})",
"Actions" : "Åtgärder",
@@ -123,7 +122,6 @@ OC.L10N.register(
"Show hidden files" : "Visa dolda filer",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Använd den här adressen för att <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">komma åt dina filer via WebDAV</a>",
- "Uploading @" : "Laddar upp @",
"Cancel upload" : "Avbryt uppladdning",
"No files in here" : "Inga filer kunde hittas",
"Upload some content or sync with your devices!" : "Ladda upp innehåll eller synkronisera med dina enheter!",
diff --git a/apps/files/l10n/sv.json b/apps/files/l10n/sv.json
index 88b6d108dcb..a3cc329f71b 100644
--- a/apps/files/l10n/sv.json
+++ b/apps/files/l10n/sv.json
@@ -14,7 +14,6 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Inte tillräckligt med ledigt utrymme, du laddar upp {size1} men endast {size2} finns kvar.",
"Target folder \"{dir}\" does not exist any more" : "Målmapp \"{dir}\" existerar inte mer",
"Not enough free space" : "Inte tillräckligt med ledigt utrymme",
- "Uploading …" : "Laddar upp ...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} av {totalSize} ({bitrate})",
"Actions" : "Åtgärder",
@@ -121,7 +120,6 @@
"Show hidden files" : "Visa dolda filer",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Använd den här adressen för att <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">komma åt dina filer via WebDAV</a>",
- "Uploading @" : "Laddar upp @",
"Cancel upload" : "Avbryt uppladdning",
"No files in here" : "Inga filer kunde hittas",
"Upload some content or sync with your devices!" : "Ladda upp innehåll eller synkronisera med dina enheter!",
diff --git a/apps/files/l10n/tr.js b/apps/files/l10n/tr.js
index d5ee46c53b8..b7116cbbd8b 100644
--- a/apps/files/l10n/tr.js
+++ b/apps/files/l10n/tr.js
@@ -77,6 +77,9 @@ OC.L10N.register(
"Favorite" : "Sık kullanılanlara ekle",
"New folder" : "Yeni klasör",
"Upload file" : "Dosya yükle",
+ "Not favorited" : "Sık kullanılanlarda değil",
+ "Remove from favorites" : "Sık kullanılanlardan kaldır",
+ "Add to favorites" : "Sık kullanılanlara ekle",
"An error occurred while trying to update the tags" : "Etiketler güncellenirken bir sorun çıktı",
"Added to favorites" : "Sık kullanılanlara eklendi",
"Removed from favorites" : "Sık kullanılanlardan çıkarıldı",
@@ -123,7 +126,6 @@ OC.L10N.register(
"Show hidden files" : "Gizli dosyaları görüntüle",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Dosyalarınıza WebDAV üzerinden erişmek için <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">bu adresi kullanın</a>",
- "Uploading @" : "Yükleniyor @",
"Cancel upload" : "Yüklemeyi iptal et",
"No files in here" : "Burada herhangi bir dosya yok",
"Upload some content or sync with your devices!" : "Bir şeyler yükleyin ya da aygıtlarınızla eşitleyin!",
diff --git a/apps/files/l10n/tr.json b/apps/files/l10n/tr.json
index b63f114f80a..efd609da063 100644
--- a/apps/files/l10n/tr.json
+++ b/apps/files/l10n/tr.json
@@ -75,6 +75,9 @@
"Favorite" : "Sık kullanılanlara ekle",
"New folder" : "Yeni klasör",
"Upload file" : "Dosya yükle",
+ "Not favorited" : "Sık kullanılanlarda değil",
+ "Remove from favorites" : "Sık kullanılanlardan kaldır",
+ "Add to favorites" : "Sık kullanılanlara ekle",
"An error occurred while trying to update the tags" : "Etiketler güncellenirken bir sorun çıktı",
"Added to favorites" : "Sık kullanılanlara eklendi",
"Removed from favorites" : "Sık kullanılanlardan çıkarıldı",
@@ -121,7 +124,6 @@
"Show hidden files" : "Gizli dosyaları görüntüle",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Dosyalarınıza WebDAV üzerinden erişmek için <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">bu adresi kullanın</a>",
- "Uploading @" : "Yükleniyor @",
"Cancel upload" : "Yüklemeyi iptal et",
"No files in here" : "Burada herhangi bir dosya yok",
"Upload some content or sync with your devices!" : "Bir şeyler yükleyin ya da aygıtlarınızla eşitleyin!",
diff --git a/apps/files/l10n/uk.js b/apps/files/l10n/uk.js
index a24c058ce53..451f6adfe65 100644
--- a/apps/files/l10n/uk.js
+++ b/apps/files/l10n/uk.js
@@ -16,7 +16,6 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Недостатньо вільного місця, ви вивантажуєте {size1}, а залишилося лише {size2}",
"Target folder \"{dir}\" does not exist any more" : "Теки призначення \"{dir}\" більше не існує.",
"Not enough free space" : "Недостатньо вільного місця",
- "Uploading …" : "Вивантаження...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} з {totalSize} ({bitrate})",
"Actions" : "Дії",
@@ -118,7 +117,6 @@ OC.L10N.register(
"Show hidden files" : "Показати приховані файли",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Використайте цю адресу для <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">доступу через WebDAV</a>",
- "Uploading @" : "Вивантаження @",
"No files in here" : "Тут немає файлів",
"Upload some content or sync with your devices!" : "Вивантажте щось або синхронізуйте з пристроями!",
"No entries found in this folder" : "В цій теці нічого немає",
diff --git a/apps/files/l10n/uk.json b/apps/files/l10n/uk.json
index dd4b04e1e73..1d14e89de2d 100644
--- a/apps/files/l10n/uk.json
+++ b/apps/files/l10n/uk.json
@@ -14,7 +14,6 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Недостатньо вільного місця, ви вивантажуєте {size1}, а залишилося лише {size2}",
"Target folder \"{dir}\" does not exist any more" : "Теки призначення \"{dir}\" більше не існує.",
"Not enough free space" : "Недостатньо вільного місця",
- "Uploading …" : "Вивантаження...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} з {totalSize} ({bitrate})",
"Actions" : "Дії",
@@ -116,7 +115,6 @@
"Show hidden files" : "Показати приховані файли",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Використайте цю адресу для <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">доступу через WebDAV</a>",
- "Uploading @" : "Вивантаження @",
"No files in here" : "Тут немає файлів",
"Upload some content or sync with your devices!" : "Вивантажте щось або синхронізуйте з пристроями!",
"No entries found in this folder" : "В цій теці нічого немає",
diff --git a/apps/files/l10n/vi.js b/apps/files/l10n/vi.js
index 34c9c79b5a7..426c52d3d8b 100644
--- a/apps/files/l10n/vi.js
+++ b/apps/files/l10n/vi.js
@@ -16,7 +16,6 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Không đủ dung lượng trống, bạn đang tải {size1} nhưng chỉ còn {size2} trống",
"Target folder \"{dir}\" does not exist any more" : "Thư mục đích \"{dir}\" không còn tồn tại",
"Not enough free space" : "Không đủ dung lượng trống",
- "Uploading …" : "Đang tải lên …",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} trong tổng số {totalSize} ({bitrate})",
"Actions" : "Actions",
"Download" : "Tải về",
diff --git a/apps/files/l10n/vi.json b/apps/files/l10n/vi.json
index 5bf200eb0a0..09e81edb376 100644
--- a/apps/files/l10n/vi.json
+++ b/apps/files/l10n/vi.json
@@ -14,7 +14,6 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Không đủ dung lượng trống, bạn đang tải {size1} nhưng chỉ còn {size2} trống",
"Target folder \"{dir}\" does not exist any more" : "Thư mục đích \"{dir}\" không còn tồn tại",
"Not enough free space" : "Không đủ dung lượng trống",
- "Uploading …" : "Đang tải lên …",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} trong tổng số {totalSize} ({bitrate})",
"Actions" : "Actions",
"Download" : "Tải về",
diff --git a/apps/files/l10n/zh_CN.js b/apps/files/l10n/zh_CN.js
index 84bf822b471..3efe7b5443c 100644
--- a/apps/files/l10n/zh_CN.js
+++ b/apps/files/l10n/zh_CN.js
@@ -16,7 +16,6 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "可用空间不足,您上传的文件大小为 {size1} ,但可用空间仅剩 {size2}",
"Target folder \"{dir}\" does not exist any more" : "目标目录 \"{dir}\" 不存在",
"Not enough free space" : "可用空间不足",
- "Uploading …" : "正在上传...",
"…" : "undefined",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} / {totalSize} ({bitrate})",
"Actions" : "操作",
@@ -123,7 +122,7 @@ OC.L10N.register(
"Show hidden files" : "显示隐藏文件",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "使用这个地址 <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">通过 WebDAV 访问您的文件</a>",
- "Uploading @" : "上传中",
+ "Cancel upload" : "取消上传",
"No files in here" : "无文件",
"Upload some content or sync with your devices!" : "上传或从您的设备中同步!",
"No entries found in this folder" : "文件夹中无项目",
diff --git a/apps/files/l10n/zh_CN.json b/apps/files/l10n/zh_CN.json
index 42a8ea92093..185635f9a51 100644
--- a/apps/files/l10n/zh_CN.json
+++ b/apps/files/l10n/zh_CN.json
@@ -14,7 +14,6 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "可用空间不足,您上传的文件大小为 {size1} ,但可用空间仅剩 {size2}",
"Target folder \"{dir}\" does not exist any more" : "目标目录 \"{dir}\" 不存在",
"Not enough free space" : "可用空间不足",
- "Uploading …" : "正在上传...",
"…" : "undefined",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} / {totalSize} ({bitrate})",
"Actions" : "操作",
@@ -121,7 +120,7 @@
"Show hidden files" : "显示隐藏文件",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "使用这个地址 <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">通过 WebDAV 访问您的文件</a>",
- "Uploading @" : "上传中",
+ "Cancel upload" : "取消上传",
"No files in here" : "无文件",
"Upload some content or sync with your devices!" : "上传或从您的设备中同步!",
"No entries found in this folder" : "文件夹中无项目",
diff --git a/apps/files/l10n/zh_TW.js b/apps/files/l10n/zh_TW.js
index 154fa2ca816..d6051f1307f 100644
--- a/apps/files/l10n/zh_TW.js
+++ b/apps/files/l10n/zh_TW.js
@@ -22,6 +22,7 @@ OC.L10N.register(
"Actions" : "動作",
"Download" : "下載",
"Rename" : "重新命名",
+ "Move or copy" : "移動或複製",
"Target folder" : "目標資料夾",
"Delete" : "刪除",
"Disconnect storage" : "斷開儲存空間連接",
@@ -36,6 +37,8 @@ OC.L10N.register(
"This directory is unavailable, please check the logs or contact the administrator" : "這個目錄無法存取,請檢查伺服器記錄檔或聯絡管理員",
"Could not move \"{file}\", target exists" : "無法移動 \"{file}\",目標已經存在",
"Could not move \"{file}\"" : "無法移動 \"{file}\"",
+ "Could not copy \"{file}\", target exists" : "無法複製\"{file}\",目標已存在",
+ "Could not copy \"{file}\"" : "無法複製\"{file}\"",
"{newName} already exists" : "{newName} 已經存在",
"Could not rename \"{fileName}\", it does not exist any more" : "無法命名檔案 \"{fileName}\",因為此檔案已經不存在",
"The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "此名稱 \"{targetName}\" 在這資料夾 \"{dir}\" 已經被使用。請重新選擇不同的名稱",
@@ -72,9 +75,12 @@ OC.L10N.register(
"Favorite" : "我的最愛",
"New folder" : "新資料夾",
"Upload file" : "上傳檔案",
+ "Not favorited" : "未加入至最愛",
+ "Remove from favorites" : "從最愛中移除",
+ "Add to favorites" : "添加到最愛",
"An error occurred while trying to update the tags" : "更新標籤時發生錯誤",
- "Added to favorites" : "添加到最愛",
- "Removed from favorites" : "從最愛移除",
+ "Added to favorites" : "已添加到最愛",
+ "Removed from favorites" : "已從最愛中移除",
"You added {file} to your favorites" : "你已添加 {file} 至最愛",
"You removed {file} from your favorites" : "你已移除 {file} 從最愛",
"File changes" : "檔案更動",
@@ -118,7 +124,7 @@ OC.L10N.register(
"Show hidden files" : "顯示隱藏檔",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "使用這個位址來<a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">使用 WebDAV 存取檔案</a>",
- "Uploading @" : "正在上傳 @",
+ "Cancel upload" : "取消上傳",
"No files in here" : "沒有任何檔案",
"Upload some content or sync with your devices!" : "在您的裝置中同步或上傳一些內容",
"No entries found in this folder" : "在此資料夾中沒有任何項目",
diff --git a/apps/files/l10n/zh_TW.json b/apps/files/l10n/zh_TW.json
index 13502ecc950..45cfeb15b6f 100644
--- a/apps/files/l10n/zh_TW.json
+++ b/apps/files/l10n/zh_TW.json
@@ -20,6 +20,7 @@
"Actions" : "動作",
"Download" : "下載",
"Rename" : "重新命名",
+ "Move or copy" : "移動或複製",
"Target folder" : "目標資料夾",
"Delete" : "刪除",
"Disconnect storage" : "斷開儲存空間連接",
@@ -34,6 +35,8 @@
"This directory is unavailable, please check the logs or contact the administrator" : "這個目錄無法存取,請檢查伺服器記錄檔或聯絡管理員",
"Could not move \"{file}\", target exists" : "無法移動 \"{file}\",目標已經存在",
"Could not move \"{file}\"" : "無法移動 \"{file}\"",
+ "Could not copy \"{file}\", target exists" : "無法複製\"{file}\",目標已存在",
+ "Could not copy \"{file}\"" : "無法複製\"{file}\"",
"{newName} already exists" : "{newName} 已經存在",
"Could not rename \"{fileName}\", it does not exist any more" : "無法命名檔案 \"{fileName}\",因為此檔案已經不存在",
"The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "此名稱 \"{targetName}\" 在這資料夾 \"{dir}\" 已經被使用。請重新選擇不同的名稱",
@@ -70,9 +73,12 @@
"Favorite" : "我的最愛",
"New folder" : "新資料夾",
"Upload file" : "上傳檔案",
+ "Not favorited" : "未加入至最愛",
+ "Remove from favorites" : "從最愛中移除",
+ "Add to favorites" : "添加到最愛",
"An error occurred while trying to update the tags" : "更新標籤時發生錯誤",
- "Added to favorites" : "添加到最愛",
- "Removed from favorites" : "從最愛移除",
+ "Added to favorites" : "已添加到最愛",
+ "Removed from favorites" : "已從最愛中移除",
"You added {file} to your favorites" : "你已添加 {file} 至最愛",
"You removed {file} from your favorites" : "你已移除 {file} 從最愛",
"File changes" : "檔案更動",
@@ -116,7 +122,7 @@
"Show hidden files" : "顯示隱藏檔",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "使用這個位址來<a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">使用 WebDAV 存取檔案</a>",
- "Uploading @" : "正在上傳 @",
+ "Cancel upload" : "取消上傳",
"No files in here" : "沒有任何檔案",
"Upload some content or sync with your devices!" : "在您的裝置中同步或上傳一些內容",
"No entries found in this folder" : "在此資料夾中沒有任何項目",
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/Scan.php b/apps/files/lib/Command/Scan.php
index d81beb0eaf3..4026af2db79 100644
--- a/apps/files/lib/Command/Scan.php
+++ b/apps/files/lib/Command/Scan.php
@@ -322,7 +322,7 @@ class Scan extends Base {
* @return string
*/
protected function formatExecTime() {
- list($secs, $tens) = explode('.', sprintf("%.1f", ($this->execTime)));
+ list($secs, ) = explode('.', sprintf("%.1f", ($this->execTime)));
# if you want to have microseconds add this: . '.' . $tens;
return date('H:i:s', $secs);
diff --git a/apps/files/lib/Command/ScanAppData.php b/apps/files/lib/Command/ScanAppData.php
index 7212717ee40..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;
@@ -240,7 +260,7 @@ class ScanAppData extends Base {
* @return string
*/
protected function formatExecTime() {
- list($secs, $tens) = explode('.', sprintf("%.1f", ($this->execTime)));
+ list($secs, ) = explode('.', sprintf("%.1f", ($this->execTime)));
# if you want to have microseconds add this: . '.' . $tens;
return date('H:i:s', $secs);
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/templates/appnavigation.php b/apps/files/templates/appnavigation.php
index f3bf0334b55..955cd03a019 100644
--- a/apps/files/templates/appnavigation.php
+++ b/apps/files/templates/appnavigation.php
@@ -24,7 +24,7 @@
} ?></p>
<div class="quota-container">
<progress value="<?php p($_['usage_relative']); ?>" max="100"
- <?php if($_['usage_relative'] > 80): ?> class="quota-warning" <?php endif; ?>></progress>
+ <?php if($_['usage_relative'] > 80): ?> class="warn" <?php endif; ?>></progress>
</div>
</a>
</li>
diff --git a/apps/files/templates/list.php b/apps/files/templates/list.php
index 46bd9351e39..92f64a52a28 100644
--- a/apps/files/templates/list.php
+++ b/apps/files/templates/list.php
@@ -2,7 +2,7 @@
<div class="actions creatable hidden">
<div id="uploadprogresswrapper">
<div id="uploadprogressbar">
- <em class="label outer" style="display:none"><span class="desktop"><?php p($l->t('Uploading @'));?></span><span class="mobile"><?php p($l->t('…'));?></span></em>
+ <em class="label outer" style="display:none"><span class="desktop"><?php p($l->t('Uploading …'));?></span><span class="mobile"><?php p($l->t('…'));?></span></em>
</div>
<button class="stop icon-close" style="display:none">
<span class="hidden-visually"><?php p($l->t('Cancel upload')) ?></span>
@@ -41,12 +41,14 @@
<table id="filestable" data-allow-public-upload="<?php p($_['publicUploadEnabled'])?>" data-preview-x="32" data-preview-y="32">
<thead>
<tr>
+ <th id="headerSelection" class="hidden column-selection">
+ <input type="checkbox" id="select_all_files" class="select-all checkbox"/>
+ <label for="select_all_files">
+ <span class="hidden-visually"><?php p($l->t('Select all'))?></span>
+ </label>
+ </th>
<th id='headerName' class="hidden column-name">
<div id="headerName-container">
- <input type="checkbox" id="select_all_files" class="select-all checkbox"/>
- <label for="select_all_files">
- <span class="hidden-visually"><?php p($l->t('Select all'))?></span>
- </label>
<a class="name sort columntitle" data-sort="name"><span><?php p($l->t( 'Name' )); ?></span><span class="sort-indicator"></span></a>
<span id="selectedActionsList" class="selectedActions">
<a href="" class="copy-move">
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/Command/DeleteOrphanedFilesTest.php b/apps/files/tests/Command/DeleteOrphanedFilesTest.php
index 32c8d628a80..8c48b9feca7 100644
--- a/apps/files/tests/Command/DeleteOrphanedFilesTest.php
+++ b/apps/files/tests/Command/DeleteOrphanedFilesTest.php
@@ -27,6 +27,8 @@ namespace OCA\Files\Tests\Command;
use OC\Files\View;
use OCA\Files\Command\DeleteOrphanedFiles;
use OCP\Files\StorageNotAvailableException;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
use Test\TestCase;
/**
@@ -87,10 +89,10 @@ class DeleteOrphanedFilesTest extends TestCase {
* Test clearing orphaned files
*/
public function testClearFiles() {
- $input = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')
+ $input = $this->getMockBuilder(InputInterface::class)
->disableOriginalConstructor()
->getMock();
- $output = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface')
+ $output = $this->getMockBuilder(OutputInterface::class)
->disableOriginalConstructor()
->getMock();
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 007335b948d..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
@@ -27,6 +31,8 @@ namespace OCA\Files\Tests\Controller;
use OCA\Files\Controller\ViewController;
use OCP\AppFramework\Http;
+use OCP\Files\File;
+use OCP\Files\Folder;
use OCP\Files\IRootFolder;
use OCP\IUser;
use OCP\Template;
@@ -68,14 +74,14 @@ class ViewControllerTest extends TestCase {
public function setUp() {
parent::setUp();
- $this->request = $this->getMockBuilder('\OCP\IRequest')->getMock();
- $this->urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')->getMock();
- $this->l10n = $this->getMockBuilder('\OCP\IL10N')->getMock();
- $this->config = $this->getMockBuilder('\OCP\IConfig')->getMock();
+ $this->request = $this->getMockBuilder(IRequest::class)->getMock();
+ $this->urlGenerator = $this->getMockBuilder(IURLGenerator::class)->getMock();
+ $this->l10n = $this->getMockBuilder(IL10N::class)->getMock();
+ $this->config = $this->getMockBuilder(IConfig::class)->getMock();
$this->eventDispatcher = $this->getMockBuilder('\Symfony\Component\EventDispatcher\EventDispatcherInterface')->getMock();
- $this->userSession = $this->getMockBuilder('\OCP\IUserSession')->getMock();
+ $this->userSession = $this->getMockBuilder(IUserSession::class)->getMock();
$this->appManager = $this->getMockBuilder('\OCP\App\IAppManager')->getMock();
- $this->user = $this->getMockBuilder('\OCP\IUser')->getMock();
+ $this->user = $this->getMockBuilder(IUser::class)->getMock();
$this->user->expects($this->any())
->method('getUID')
->will($this->returnValue('testuser1'));
@@ -281,12 +287,12 @@ class ViewControllerTest extends TestCase {
}
public function testShowFileRouteWithFolder() {
- $node = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $node = $this->getMockBuilder(Folder::class)->getMock();
$node->expects($this->once())
->method('getPath')
->will($this->returnValue('/testuser1/files/test/sub'));
- $baseFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $baseFolder = $this->getMockBuilder(Folder::class)->getMock();
$this->rootFolder->expects($this->once())
->method('getUserFolder')
@@ -313,19 +319,19 @@ class ViewControllerTest extends TestCase {
}
public function testShowFileRouteWithFile() {
- $parentNode = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $parentNode = $this->getMockBuilder(Folder::class)->getMock();
$parentNode->expects($this->once())
->method('getPath')
->will($this->returnValue('testuser1/files/test'));
- $baseFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $baseFolder = $this->getMockBuilder(Folder::class)->getMock();
$this->rootFolder->expects($this->once())
->method('getUserFolder')
->with('testuser1')
->will($this->returnValue($baseFolder));
- $node = $this->getMockBuilder('\OCP\Files\File')->getMock();
+ $node = $this->getMockBuilder(File::class)->getMock();
$node->expects($this->once())
->method('getParent')
->will($this->returnValue($parentNode));
@@ -353,7 +359,7 @@ class ViewControllerTest extends TestCase {
}
public function testShowFileRouteWithInvalidFileId() {
- $baseFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $baseFolder = $this->getMockBuilder(Folder::class)->getMock();
$this->rootFolder->expects($this->once())
->method('getUserFolder')
->with('testuser1')
@@ -380,13 +386,13 @@ class ViewControllerTest extends TestCase {
->with('files_trashbin')
->will($this->returnValue(true));
- $parentNode = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $parentNode = $this->getMockBuilder(Folder::class)->getMock();
$parentNode->expects($this->once())
->method('getPath')
->will($this->returnValue('testuser1/files_trashbin/files/test.d1462861890/sub'));
- $baseFolderFiles = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
- $baseFolderTrash = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $baseFolderFiles = $this->getMockBuilder(Folder::class)->getMock();
+ $baseFolderTrash = $this->getMockBuilder(Folder::class)->getMock();
$this->rootFolder->expects($this->at(0))
->method('getUserFolder')
@@ -402,7 +408,7 @@ class ViewControllerTest extends TestCase {
->with(123)
->will($this->returnValue([]));
- $node = $this->getMockBuilder('\OCP\Files\File')->getMock();
+ $node = $this->getMockBuilder(File::class)->getMock();
$node->expects($this->once())
->method('getParent')
->will($this->returnValue($parentNode));
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 1ab8a992879..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
*
@@ -41,7 +42,7 @@ class AdminTest extends TestCase {
public function setUp() {
parent::setUp();
$this->iniGetWrapper = $this->getMockBuilder('\bantu\IniGetWrapper\IniGetWrapper')->disableOriginalConstructor()->getMock();
- $this->request = $this->getMockBuilder('\OCP\IRequest')->getMock();
+ $this->request = $this->getMockBuilder(IRequest::class)->getMock();
$this->admin = new Admin(
$this->iniGetWrapper,
$this->request
diff --git a/apps/files/tests/js/fileactionsmenuSpec.js b/apps/files/tests/js/fileactionsmenuSpec.js
index 3028db2b3ac..926516b3043 100644
--- a/apps/files/tests/js/fileactionsmenuSpec.js
+++ b/apps/files/tests/js/fileactionsmenuSpec.js
@@ -205,6 +205,34 @@ describe('OCA.Files.FileActionsMenu tests', function() {
expect(displayNameStub.calledWith(menuContext)).toEqual(true);
expect(menu.$el.find('a[data-action=Something]').text()).toEqual('Test');
});
+ it('uses plain iconClass', function() {
+ fileActions.registerAction({
+ name: 'Something',
+ mime: 'text/plain',
+ permissions: OC.PERMISSION_ALL,
+ iconClass: 'test'
+ });
+
+ menu.render();
+
+ expect(menu.$el.find('a[data-action=Something]').children('span.icon').hasClass('test')).toEqual(true);
+ });
+ it('calls iconClass function', function() {
+ var iconClassStub = sinon.stub().returns('test');
+
+ fileActions.registerAction({
+ name: 'Something',
+ mime: 'text/plain',
+ permissions: OC.PERMISSION_ALL,
+ iconClass: iconClassStub
+ });
+
+ menu.render();
+
+ expect(iconClassStub.calledOnce).toEqual(true);
+ expect(iconClassStub.calledWith(menuContext.$file.attr('data-file'), menuContext)).toEqual(true);
+ expect(menu.$el.find('a[data-action=Something]').children('span.icon').hasClass('test')).toEqual(true);
+ });
});
describe('action handler', function() {
diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js
index 836a5e5ce71..8bb188e3602 100644
--- a/apps/files/tests/js/filelistSpec.js
+++ b/apps/files/tests/js/filelistSpec.js
@@ -712,8 +712,14 @@ describe('OCA.Files.FileList tests', function() {
fileList.add(testFiles[i], {silent: true});
}
+ $tr = fileList.findFileEl('One.txt');
+ expect($tr.find('a.name').css('display')).not.toEqual('none');
+
// trigger rename prompt
fileList.rename('One.txt');
+
+ expect($tr.find('a.name').css('display')).toEqual('none');
+
$input = fileList.$fileList.find('input.filename');
$input.val('Two.jpg');
@@ -735,12 +741,12 @@ describe('OCA.Files.FileList tests', function() {
$tr = fileList.findFileEl('One.txt');
expect($tr.length).toEqual(1);
expect($tr.find('a .nametext').text().trim()).toEqual('One.txt');
- expect($tr.find('a.name').is(':visible')).toEqual(true);
+ expect($tr.find('a.name').css('display')).not.toEqual('none');
$tr = fileList.findFileEl('Two.jpg');
expect($tr.length).toEqual(1);
expect($tr.find('a .nametext').text().trim()).toEqual('Two.jpg');
- expect($tr.find('a.name').is(':visible')).toEqual(true);
+ expect($tr.find('a.name').css('display')).not.toEqual('none');
// input and form are gone
expect(fileList.$fileList.find('input.filename').length).toEqual(0);
@@ -750,7 +756,7 @@ describe('OCA.Files.FileList tests', function() {
doRename();
expect(fileList.findFileEl('Tu_after_three.txt').find('.thumbnail').parent().attr('class'))
- .toEqual('icon-loading-small');
+ .toContain('icon-loading-small');
deferredRename.reject(409);
@@ -838,7 +844,7 @@ describe('OCA.Files.FileList tests', function() {
fileList.move('One.txt', '/somedir');
expect(fileList.findFileEl('One.txt').find('.thumbnail').parent().attr('class'))
- .toEqual('icon-loading-small');
+ .toContain('icon-loading-small');
expect(moveStub.calledOnce).toEqual(true);
@@ -935,7 +941,7 @@ describe('OCA.Files.FileList tests', function() {
fileList.copy('One.txt', '/somedir');
expect(fileList.findFileEl('One.txt').find('.thumbnail').parent().attr('class'))
- .toEqual('icon-loading-small');
+ .toContain('icon-loading-small');
expect(copyStub.calledOnce).toEqual(true);
@@ -1621,7 +1627,9 @@ describe('OCA.Files.FileList tests', function() {
var setDirSpy = sinon.spy(fileList.breadcrumb, 'setDirectory');
fileList.changeDirectory('/anothersubdir');
deferredList.resolve(200, [testRoot].concat(testFiles));
- expect(fileList.breadcrumb.setDirectory.calledOnce).toEqual(true);
+ // twice because setDirectory gets called by _setCurrentDir which
+ // gets called directly by changeDirectory and via reload()
+ expect(fileList.breadcrumb.setDirectory.calledTwice).toEqual(true);
expect(fileList.breadcrumb.setDirectory.calledWith('/anothersubdir')).toEqual(true);
setDirSpy.restore();
getFolderContentsStub.restore();
@@ -1741,7 +1749,7 @@ describe('OCA.Files.FileList tests', function() {
it('Selects a file when clicking its checkbox', function() {
var $tr = fileList.findFileEl('One.txt');
expect($tr.find('input:checkbox').prop('checked')).toEqual(false);
- $tr.find('td.filename input:checkbox').click();
+ $tr.find('td.selection input:checkbox').click();
expect($tr.find('input:checkbox').prop('checked')).toEqual(true);
});
@@ -1779,7 +1787,7 @@ describe('OCA.Files.FileList tests', function() {
var $tr = fileList.findFileEl('One.txt');
var $tr2 = fileList.findFileEl('Three.pdf');
var e;
- $tr.find('td.filename input:checkbox').click();
+ $tr.find('td.selection input:checkbox').click();
e = new $.Event('click');
e.shiftKey = true;
$tr2.find('td.filename .name').trigger(e);
@@ -1797,7 +1805,7 @@ describe('OCA.Files.FileList tests', function() {
var $tr = fileList.findFileEl('One.txt');
var $tr2 = fileList.findFileEl('Three.pdf');
var e;
- $tr2.find('td.filename input:checkbox').click();
+ $tr2.find('td.selection input:checkbox').click();
e = new $.Event('click');
e.shiftKey = true;
$tr.find('td.filename .name').trigger(e);
@@ -1813,13 +1821,13 @@ describe('OCA.Files.FileList tests', function() {
});
it('Selecting all files will automatically check "select all" checkbox', function() {
expect($('.select-all').prop('checked')).toEqual(false);
- $('#fileList tr td.filename input:checkbox').click();
+ $('#fileList tr td.selection input:checkbox').click();
expect($('.select-all').prop('checked')).toEqual(true);
});
it('Selecting all files on the first visible page will not automatically check "select all" checkbox', function() {
fileList.setFiles(generateFiles(0, 41));
expect($('.select-all').prop('checked')).toEqual(false);
- $('#fileList tr td.filename input:checkbox').click();
+ $('#fileList tr td.selection input:checkbox').click();
expect($('.select-all').prop('checked')).toEqual(false);
});
it('Selecting all files also selects hidden files when invisible', function() {
@@ -1831,7 +1839,7 @@ describe('OCA.Files.FileList tests', function() {
size: 150
}));
$('.select-all').click();
- expect($tr.find('td.filename input:checkbox').prop('checked')).toEqual(true);
+ expect($tr.find('td.selection input:checkbox').prop('checked')).toEqual(true);
expect(_.pluck(fileList.getSelectedFiles(), 'name')).toContain('.hidden');
});
it('Clicking "select all" will select/deselect all files', function() {
@@ -3150,7 +3158,7 @@ describe('OCA.Files.FileList tests', function() {
fileList.showFileBusyState('Two.jpg', true);
expect($tr.hasClass('busy')).toEqual(true);
expect($tr.find('.thumbnail').parent().attr('class'))
- .toEqual('icon-loading-small');
+ .toContain('icon-loading-small');
fileList.showFileBusyState('Two.jpg', false);
diff --git a/apps/files/tests/js/tagspluginspec.js b/apps/files/tests/js/tagspluginspec.js
index a4efc08aa53..363a8bb0e19 100644
--- a/apps/files/tests/js/tagspluginspec.js
+++ b/apps/files/tests/js/tagspluginspec.js
@@ -49,39 +49,39 @@ describe('OCA.Files.TagsPlugin tests', function() {
describe('Favorites icon', function() {
it('renders favorite icon and extra data', function() {
- var $action, $tr;
+ var $favoriteMark, $tr;
fileList.setFiles(testFiles);
$tr = fileList.$el.find('tbody tr:first');
- $action = $tr.find('.action-favorite');
- expect($action.length).toEqual(1);
- expect($action.hasClass('permanent')).toEqual(false);
+ $favoriteMark = $tr.find('.favorite-mark');
+ expect($favoriteMark.length).toEqual(1);
+ expect($favoriteMark.hasClass('permanent')).toEqual(false);
expect($tr.attr('data-tags').split('|')).toEqual(['tag1', 'tag2']);
expect($tr.attr('data-favorite')).not.toBeDefined();
});
it('renders permanent favorite icon and extra data', function() {
- var $action, $tr;
+ var $favoriteMark, $tr;
testFiles[0].tags.push(OC.TAG_FAVORITE);
fileList.setFiles(testFiles);
$tr = fileList.$el.find('tbody tr:first');
- $action = $tr.find('.action-favorite');
- expect($action.length).toEqual(1);
- expect($action.hasClass('permanent')).toEqual(true);
+ $favoriteMark = $tr.find('.favorite-mark');
+ expect($favoriteMark.length).toEqual(1);
+ expect($favoriteMark.hasClass('permanent')).toEqual(true);
expect($tr.attr('data-tags').split('|')).toEqual(['tag1', 'tag2', OC.TAG_FAVORITE]);
expect($tr.attr('data-favorite')).toEqual('true');
});
- it('adds has-favorites class on table', function() {
- expect(fileList.$el.hasClass('has-favorites')).toEqual(true);
- });
});
describe('Applying tags', function() {
- it('sends request to server and updates icon', function() {
+ it('through FileActionsMenu sends request to server and updates icon', function() {
var request;
fileList.setFiles(testFiles);
var $tr = fileList.findFileEl('One.txt');
- var $action = $tr.find('.action-favorite');
- $action.click();
+ var $favoriteMark = $tr.find('.favorite-mark');
+ var $showMenuAction = $tr.find('.action-menu');
+ $showMenuAction.click();
+ var $favoriteActionInMenu = $tr.find('.fileActionsMenu .action-favorite');
+ $favoriteActionInMenu.click();
expect(fakeServer.requests.length).toEqual(1);
request = fakeServer.requests[0];
@@ -94,15 +94,21 @@ describe('OCA.Files.TagsPlugin tests', function() {
// re-read the element as it was re-inserted
$tr = fileList.findFileEl('One.txt');
- $action = $tr.find('.action-favorite');
+ $favoriteMark = $tr.find('.favorite-mark');
+ $showMenuAction = $tr.find('.action-menu');
expect($tr.attr('data-favorite')).toEqual('true');
expect($tr.attr('data-tags').split('|')).toEqual(['tag1', 'tag2', 'tag3', OC.TAG_FAVORITE]);
expect(fileList.files[0].tags).toEqual(['tag1', 'tag2', 'tag3', OC.TAG_FAVORITE]);
- expect($action.find('.icon').hasClass('icon-star')).toEqual(false);
- expect($action.find('.icon').hasClass('icon-starred')).toEqual(true);
+ expect($favoriteMark.find('.icon').hasClass('icon-star')).toEqual(false);
+ expect($favoriteMark.find('.icon').hasClass('icon-starred')).toEqual(true);
- $action.click();
+ // show again the menu and get the new action, as the menu was
+ // closed and removed (and with it, the previous action) when that
+ // action was clicked
+ $showMenuAction.click();
+ $favoriteActionInMenu = $tr.find('.fileActionsMenu .action-favorite');
+ $favoriteActionInMenu.click();
expect(fakeServer.requests.length).toEqual(2);
request = fakeServer.requests[1];
@@ -115,13 +121,13 @@ describe('OCA.Files.TagsPlugin tests', function() {
// re-read the element as it was re-inserted
$tr = fileList.findFileEl('One.txt');
- $action = $tr.find('.action-favorite');
+ $favoriteMark = $tr.find('.favorite-mark');
expect($tr.attr('data-favorite')).toBeFalsy();
expect($tr.attr('data-tags').split('|')).toEqual(['tag1', 'tag2', 'tag3']);
expect(fileList.files[0].tags).toEqual(['tag1', 'tag2', 'tag3']);
- expect($action.find('.icon').hasClass('icon-star')).toEqual(true);
- expect($action.find('.icon').hasClass('icon-starred')).toEqual(false);
+ expect($favoriteMark.find('.icon').hasClass('icon-star')).toEqual(true);
+ expect($favoriteMark.find('.icon').hasClass('icon-starred')).toEqual(false);
});
});
describe('elementToFile', function() {
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/js/settings.js b/apps/files_external/js/settings.js
index 0003dbf0f75..cb9b7ad6822 100644
--- a/apps/files_external/js/settings.js
+++ b/apps/files_external/js/settings.js
@@ -1134,7 +1134,7 @@ MountConfigListView.prototype = _.extend({
storage: this.mountPoint
}), t('files_external', 'Delete storage?'), function(confirm) {
if (confirm) {
- this.updateStatus($tr, StorageConfig.Status.IN_PROGRESS);
+ self.updateStatus($tr, StorageConfig.Status.IN_PROGRESS);
storage.destroy({
success: function () {
diff --git a/apps/files_external/l10n/es_CO.js b/apps/files_external/l10n/es_CO.js
new file mode 100644
index 00000000000..720a7c663d2
--- /dev/null
+++ b/apps/files_external/l10n/es_CO.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_CO.json b/apps/files_external/l10n/es_CO.json
new file mode 100644
index 00000000000..59b9db811b3
--- /dev/null
+++ b/apps/files_external/l10n/es_CO.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/es_CR.js b/apps/files_external/l10n/es_CR.js
new file mode 100644
index 00000000000..720a7c663d2
--- /dev/null
+++ b/apps/files_external/l10n/es_CR.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_CR.json b/apps/files_external/l10n/es_CR.json
new file mode 100644
index 00000000000..59b9db811b3
--- /dev/null
+++ b/apps/files_external/l10n/es_CR.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/es_DO.js b/apps/files_external/l10n/es_DO.js
new file mode 100644
index 00000000000..720a7c663d2
--- /dev/null
+++ b/apps/files_external/l10n/es_DO.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_DO.json b/apps/files_external/l10n/es_DO.json
new file mode 100644
index 00000000000..59b9db811b3
--- /dev/null
+++ b/apps/files_external/l10n/es_DO.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/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/fi.js b/apps/files_external/l10n/fi.js
index ef9e732a23a..3015ada9ac1 100644
--- a/apps/files_external/l10n/fi.js
+++ b/apps/files_external/l10n/fi.js
@@ -14,15 +14,19 @@ OC.L10N.register(
"(group)" : "(ryhmä)",
"Compatibility with Mac NFD encoding (slow)" : "Yhteensopivuus Mac NFD -enkoodauksen kanssa (hidas)",
"Admin defined" : "Ylläpitäjän määrittämä",
+ "Are you sure you want to delete this external storage" : "Haluatko varmasti poistaa tämän erillisen tallennustilan",
+ "Delete storage?" : "Poistetaanko tallennustila?",
"Saved" : "Tallennettu",
"Saving..." : "Tallennetaan...",
"Save" : "Tallenna",
"Empty response from the server" : "Tyhjä vastaus palvelimelta",
+ "Couldn't access. Please log out and in again to activate this mount point" : "Käyttö ei onnistunut. Kirjaudu ulos ja takaisin sisään aktivoidaksesi tämän liitoskohdan",
"Couldn't get the information from the remote server: {code} {type}" : "Tietojen saaminen etäpalvelimelta epäonnistui: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "Erillisten liitospisteiden listauksen noutaminen epäonnistui: {type}",
"There was an error with message: " : "Tapahtui virhe viestillä:",
"External mount error" : "Ulkoinen liitosvirhe",
"external-storage" : "ulkoinen taltio",
+ "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "Ei voitu noutaa listaa Windows-verkkoasemien liitoskohdista: tyhjä vastaus palvelimelta",
"Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Jotkin määritetyt erilliset liitospisteet eivät ole yhdistettynä. Napsauta punaisia rivejä saadaksesi lisätietoja",
"Please enter the credentials for the {mount} mount" : "Anna kirjautumistiedot liitokselle {mount}",
"Username" : "Käyttäjätunnus",
@@ -34,7 +38,7 @@ OC.L10N.register(
"Invalid backend or authentication mechanism class" : "Virheellinen tietovarasto tai tunnistautumismekanismin luokka",
"Invalid mount point" : "Virheellinen liitoskohta",
"Objectstore forbidden" : "Objektimuisti estetty",
- "Invalid storage backend \"%s\"" : "Virheellinen tietovarasto \"%s\"",
+ "Invalid storage backend \"%s\"" : "Virheellinen tallennustilan taustaosa \"%s\"",
"Not permitted to use backend \"%s\"" : "Ei lupaa käyttää tietovarastoa \"%s\"",
"Not permitted to use authentication mechanism \"%s\"" : "Ei lupaa käyttää tunnistautumismekanismia \"%s\"",
"Unsatisfied backend parameters" : "Riittämättömät tietovaraston parametrit",
diff --git a/apps/files_external/l10n/fi.json b/apps/files_external/l10n/fi.json
index 07db79a2a7f..a4372667eb1 100644
--- a/apps/files_external/l10n/fi.json
+++ b/apps/files_external/l10n/fi.json
@@ -12,15 +12,19 @@
"(group)" : "(ryhmä)",
"Compatibility with Mac NFD encoding (slow)" : "Yhteensopivuus Mac NFD -enkoodauksen kanssa (hidas)",
"Admin defined" : "Ylläpitäjän määrittämä",
+ "Are you sure you want to delete this external storage" : "Haluatko varmasti poistaa tämän erillisen tallennustilan",
+ "Delete storage?" : "Poistetaanko tallennustila?",
"Saved" : "Tallennettu",
"Saving..." : "Tallennetaan...",
"Save" : "Tallenna",
"Empty response from the server" : "Tyhjä vastaus palvelimelta",
+ "Couldn't access. Please log out and in again to activate this mount point" : "Käyttö ei onnistunut. Kirjaudu ulos ja takaisin sisään aktivoidaksesi tämän liitoskohdan",
"Couldn't get the information from the remote server: {code} {type}" : "Tietojen saaminen etäpalvelimelta epäonnistui: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "Erillisten liitospisteiden listauksen noutaminen epäonnistui: {type}",
"There was an error with message: " : "Tapahtui virhe viestillä:",
"External mount error" : "Ulkoinen liitosvirhe",
"external-storage" : "ulkoinen taltio",
+ "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "Ei voitu noutaa listaa Windows-verkkoasemien liitoskohdista: tyhjä vastaus palvelimelta",
"Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Jotkin määritetyt erilliset liitospisteet eivät ole yhdistettynä. Napsauta punaisia rivejä saadaksesi lisätietoja",
"Please enter the credentials for the {mount} mount" : "Anna kirjautumistiedot liitokselle {mount}",
"Username" : "Käyttäjätunnus",
@@ -32,7 +36,7 @@
"Invalid backend or authentication mechanism class" : "Virheellinen tietovarasto tai tunnistautumismekanismin luokka",
"Invalid mount point" : "Virheellinen liitoskohta",
"Objectstore forbidden" : "Objektimuisti estetty",
- "Invalid storage backend \"%s\"" : "Virheellinen tietovarasto \"%s\"",
+ "Invalid storage backend \"%s\"" : "Virheellinen tallennustilan taustaosa \"%s\"",
"Not permitted to use backend \"%s\"" : "Ei lupaa käyttää tietovarastoa \"%s\"",
"Not permitted to use authentication mechanism \"%s\"" : "Ei lupaa käyttää tunnistautumismekanismia \"%s\"",
"Unsatisfied backend parameters" : "Riittämättömät tietovaraston parametrit",
diff --git a/apps/files_external/l10n/hu.js b/apps/files_external/l10n/hu.js
index 07441f60739..81eddd893a0 100644
--- a/apps/files_external/l10n/hu.js
+++ b/apps/files_external/l10n/hu.js
@@ -14,15 +14,19 @@ OC.L10N.register(
"(group)" : "(csoport)",
"Compatibility with Mac NFD encoding (slow)" : "Kompatibilitás a Mac NFD kódolással (lassú)",
"Admin defined" : "Adminisztrátor definiálva",
+ "Are you sure you want to delete this external storage" : "Biztosan törlöd ezt a külső tárolót",
+ "Delete storage?" : "Tároló törlése?",
"Saved" : "Elmentve",
"Saving..." : "Mentés...",
"Save" : "Mentés",
"Empty response from the server" : "Üres válasz a szervertől",
+ "Couldn't access. Please log out and in again to activate this mount point" : "Nem hozzáférhető. Kérjük lépj ki és be ismét a csatolási pont aktiválásához",
"Couldn't get the information from the remote server: {code} {type}" : "Nem sikerült lekérdezni az információkat a távoli szerverről: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "Nem lehet letölteni a külső csatolási pontok listáját: {type}",
"There was an error with message: " : "Hiba történt ezzel az üzenettel:",
"External mount error" : "Külső csatolási hiba",
"external-storage" : "külső tároló",
+ "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "A Windows megosztások listája nem begyűjthető: üres válasz a szervertől",
"Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Néhány beállított külső csatolási pont nincs kapcsolatban. További információkért kattints a piros sor(ok)ra.",
"Please enter the credentials for the {mount} mount" : "Kérlek add meg a következő csatolás azonosítóit: {mount}",
"Username" : "Felhasználónév",
@@ -30,9 +34,18 @@ OC.L10N.register(
"Credentials saved" : "Azonosítók mentve",
"Credentials saving failed" : "Azonosítók mentése sikertelen",
"Credentials required" : "Azonosító szükséges",
+ "Storage with ID \"%d\" not found" : "A(z) \"%d\" azonosítójú tároló nincs meg",
+ "Invalid backend or authentication mechanism class" : "Érvénytelen háttér vagy autentikációs mechanizmus osztály",
"Invalid mount point" : "Érvénytelen csatolási pont",
+ "Objectstore forbidden" : "Objektumtár tiltott",
+ "Invalid storage backend \"%s\"" : "Érvénytelen háttértár kezelő \"%s\"",
+ "Not permitted to use backend \"%s\"" : "A(z) \"%s\" háttér használata nem engedélyezett",
+ "Not permitted to use authentication mechanism \"%s\"" : "Nem engedélyezett a \"%s\" autentikációs mechanizmus használata",
+ "Unsatisfied backend parameters" : "Elégtelen háttér adatok",
+ "Unsatisfied authentication mechanism parameters" : "Elégtelen autentikációs mechanizmus paraméterek",
"Insufficient data: %s" : "Nem elegendő adat: %s",
"%s" : "%s",
+ "Storage with ID \"%d\" is not user editable" : "A(z) \"%d\" azonosítójú tároló nem szerkeszthető a felhasználók által",
"Access key" : "Hozzáférési kulcs",
"Secret key" : "Titkos kulcs",
"Builtin" : "Beépített",
diff --git a/apps/files_external/l10n/hu.json b/apps/files_external/l10n/hu.json
index dad54b8c4f9..f05459b00b9 100644
--- a/apps/files_external/l10n/hu.json
+++ b/apps/files_external/l10n/hu.json
@@ -12,15 +12,19 @@
"(group)" : "(csoport)",
"Compatibility with Mac NFD encoding (slow)" : "Kompatibilitás a Mac NFD kódolással (lassú)",
"Admin defined" : "Adminisztrátor definiálva",
+ "Are you sure you want to delete this external storage" : "Biztosan törlöd ezt a külső tárolót",
+ "Delete storage?" : "Tároló törlése?",
"Saved" : "Elmentve",
"Saving..." : "Mentés...",
"Save" : "Mentés",
"Empty response from the server" : "Üres válasz a szervertől",
+ "Couldn't access. Please log out and in again to activate this mount point" : "Nem hozzáférhető. Kérjük lépj ki és be ismét a csatolási pont aktiválásához",
"Couldn't get the information from the remote server: {code} {type}" : "Nem sikerült lekérdezni az információkat a távoli szerverről: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "Nem lehet letölteni a külső csatolási pontok listáját: {type}",
"There was an error with message: " : "Hiba történt ezzel az üzenettel:",
"External mount error" : "Külső csatolási hiba",
"external-storage" : "külső tároló",
+ "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "A Windows megosztások listája nem begyűjthető: üres válasz a szervertől",
"Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Néhány beállított külső csatolási pont nincs kapcsolatban. További információkért kattints a piros sor(ok)ra.",
"Please enter the credentials for the {mount} mount" : "Kérlek add meg a következő csatolás azonosítóit: {mount}",
"Username" : "Felhasználónév",
@@ -28,9 +32,18 @@
"Credentials saved" : "Azonosítók mentve",
"Credentials saving failed" : "Azonosítók mentése sikertelen",
"Credentials required" : "Azonosító szükséges",
+ "Storage with ID \"%d\" not found" : "A(z) \"%d\" azonosítójú tároló nincs meg",
+ "Invalid backend or authentication mechanism class" : "Érvénytelen háttér vagy autentikációs mechanizmus osztály",
"Invalid mount point" : "Érvénytelen csatolási pont",
+ "Objectstore forbidden" : "Objektumtár tiltott",
+ "Invalid storage backend \"%s\"" : "Érvénytelen háttértár kezelő \"%s\"",
+ "Not permitted to use backend \"%s\"" : "A(z) \"%s\" háttér használata nem engedélyezett",
+ "Not permitted to use authentication mechanism \"%s\"" : "Nem engedélyezett a \"%s\" autentikációs mechanizmus használata",
+ "Unsatisfied backend parameters" : "Elégtelen háttér adatok",
+ "Unsatisfied authentication mechanism parameters" : "Elégtelen autentikációs mechanizmus paraméterek",
"Insufficient data: %s" : "Nem elegendő adat: %s",
"%s" : "%s",
+ "Storage with ID \"%d\" is not user editable" : "A(z) \"%d\" azonosítójú tároló nem szerkeszthető a felhasználók által",
"Access key" : "Hozzáférési kulcs",
"Secret key" : "Titkos kulcs",
"Builtin" : "Beépített",
diff --git a/apps/files_external/l10n/is.js b/apps/files_external/l10n/is.js
index 025e61daa7b..d0dcfd219d5 100644
--- a/apps/files_external/l10n/is.js
+++ b/apps/files_external/l10n/is.js
@@ -14,6 +14,8 @@ OC.L10N.register(
"(group)" : "(hópur)",
"Compatibility with Mac NFD encoding (slow)" : "Samhæfni við Mac NFD kóðun (hægvirkt)",
"Admin defined" : "Skilgreindur kerfisstjóri",
+ "Are you sure you want to delete this external storage" : "Ertu viss um að þú viljir eyða þessari ytri geymslu?",
+ "Delete storage?" : "Eyða geymslu?",
"Saved" : "Vistað",
"Saving..." : "Er að vista ...",
"Save" : "Vista",
diff --git a/apps/files_external/l10n/is.json b/apps/files_external/l10n/is.json
index 410a33ded3e..fa7957f3c23 100644
--- a/apps/files_external/l10n/is.json
+++ b/apps/files_external/l10n/is.json
@@ -12,6 +12,8 @@
"(group)" : "(hópur)",
"Compatibility with Mac NFD encoding (slow)" : "Samhæfni við Mac NFD kóðun (hægvirkt)",
"Admin defined" : "Skilgreindur kerfisstjóri",
+ "Are you sure you want to delete this external storage" : "Ertu viss um að þú viljir eyða þessari ytri geymslu?",
+ "Delete storage?" : "Eyða geymslu?",
"Saved" : "Vistað",
"Saving..." : "Er að vista ...",
"Save" : "Vista",
diff --git a/apps/files_external/l10n/ja.js b/apps/files_external/l10n/ja.js
index ddd23c5e668..d1f6d723235 100644
--- a/apps/files_external/l10n/ja.js
+++ b/apps/files_external/l10n/ja.js
@@ -14,6 +14,8 @@ OC.L10N.register(
"(group)" : "(グループ)",
"Compatibility with Mac NFD encoding (slow)" : "Mac NFD エンコード互換 (遅い)",
"Admin defined" : "管理者設定済",
+ "Are you sure you want to delete this external storage" : "この外部ストレージを本当に削除しますか?",
+ "Delete storage?" : "ストレージを削除しますか?",
"Saved" : "保存されました",
"Saving..." : "保存中...",
"Save" : "保存",
diff --git a/apps/files_external/l10n/ja.json b/apps/files_external/l10n/ja.json
index c76ba6fb797..8c78d89c958 100644
--- a/apps/files_external/l10n/ja.json
+++ b/apps/files_external/l10n/ja.json
@@ -12,6 +12,8 @@
"(group)" : "(グループ)",
"Compatibility with Mac NFD encoding (slow)" : "Mac NFD エンコード互換 (遅い)",
"Admin defined" : "管理者設定済",
+ "Are you sure you want to delete this external storage" : "この外部ストレージを本当に削除しますか?",
+ "Delete storage?" : "ストレージを削除しますか?",
"Saved" : "保存されました",
"Saving..." : "保存中...",
"Save" : "保存",
diff --git a/apps/files_external/l10n/ka_GE.js b/apps/files_external/l10n/ka_GE.js
index 46fcbd6238c..1e71be87453 100644
--- a/apps/files_external/l10n/ka_GE.js
+++ b/apps/files_external/l10n/ka_GE.js
@@ -1,27 +1,134 @@
OC.L10N.register(
"files_external",
{
- "External storage" : "ექსტერნალ საცავი",
+ "External storages" : "გარე საცავები",
"Personal" : "პირადი",
- "Grant access" : "დაშვების მინიჭება",
+ "System" : "სისტემა",
+ "Grant access" : "წვდომის მინიჭება",
+ "Error configuring OAuth1" : "OAuth1-ის კონფიგურირებისას წარმოიშვა შეცდომა",
+ "Please provide a valid app key and secret." : "გთხოვთ უზრუნველყოთ სწორი აპლიკაციის გასაღები და საიდუმლო.",
+ "Error configuring OAuth2" : "OAuth2-ის კონფიგურირებისას წარმოიშვა შეცდომა",
+ "Generate keys" : "გასაღებების გენერირება",
+ "Error generating key pair" : "გასაღების წყვილის გენერირებისას წარმოიშვა შეცდომა",
+ "All users. Type to select user or group." : "ყველა მომხმარებელი. მოხმარებლის ან ჯგუფის ასარჩევად დაიწყეთ ბეჭდვა .",
+ "(group)" : "(ჯგუფი)",
+ "Compatibility with Mac NFD encoding (slow)" : "Mac NFD-სთან თავსებადობა (ნელი)",
+ "Admin defined" : "ადმინისტრატორი მითითებულია",
+ "Are you sure you want to delete this external storage" : "დარწმუნებული ხართ რომ გსურთ ამ გარე საცავის გაუქმება?",
+ "Delete storage?" : "გავაუქმოთ საცავი?",
+ "Saved" : "შენახულია",
+ "Saving..." : "ინახება...",
+ "Save" : "შენახვა",
+ "Empty response from the server" : "სერვერმა დააბრუნა ცარიელი პასუხი",
+ "Couldn't access. Please log out and in again to activate this mount point" : "წვდომა ვერ მოხერხდა. ამ მონტაჟის წერტილის გასააქტიურებლად გთხოვთ გახვიდეთ და ახლიდან გაიაროთ ავტორიზაცია.",
+ "Couldn't get the information from the remote server: {code} {type}" : "დისტანციური სერვერიდან ინფორმაციის მოპოვება ვერ მოხერხდა: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "გარე მონტაჟის წერტილების სიის მოპოვება ვერ მოხერხდა: {type}",
+ "There was an error with message: " : "წარმოიშვა შეცდომა წერილით:",
+ "External mount error" : "გარე მონტაჟის შეცდომა",
+ "external-storage" : "გარე-საცავი",
+ "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "Windows-ის ქსელის დრაივის მონტაჯის წერტილების სიის მოპოვება ვერ მოხერხდა: ცარიელი პასუხი სერვერიდან",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "ზოგი კონფიგურირებული გარე მონტაჟის წერიტილი არაა დაკავშირებული. მეტი ინფორმაციისთვის გთხოვთ დააწკაპუნოთ წითელ რიგებს.",
+ "Please enter the credentials for the {mount} mount" : "გთხოვთ მონტაჟისთვის {mount} შეიყვანოთ მონაცემები",
"Username" : "მომხმარებლის სახელი",
"Password" : "პაროლი",
- "Save" : "შენახვა",
- "None" : "არა",
+ "Credentials saved" : "მონაცემები შენახულია",
+ "Credentials saving failed" : "მონაცემების შენახვა ვერ მოხერხდა",
+ "Credentials required" : "მონაცემები საჭიროა",
+ "Storage with ID \"%d\" not found" : "საცავი ID-ით \"%d\" ვერ იქნა ნაპოვნი",
+ "Invalid backend or authentication mechanism class" : "არასწორი ბექენდი ან აუტენტიფიკაციის მექანიზმის კლასი",
+ "Invalid mount point" : "არასწორი მონტაჟის წერტილი",
+ "Objectstore forbidden" : "ობიექტსტორი აკრძალულია",
+ "Invalid storage backend \"%s\"" : "არასწორი საცავის ბექენდი \"%s\"",
+ "Not permitted to use backend \"%s\"" : "ბექენის \"%s\" გამოყენება არაა ნებადართული",
+ "Not permitted to use authentication mechanism \"%s\"" : "აუტენტიკაციის მექანიზმის \"%s\"-ს გამოყენება არაა ნებადართული",
+ "Unsatisfied backend parameters" : "ბექენიდს პარამეტრები არადამაკმაყოფილებელია",
+ "Unsatisfied authentication mechanism parameters" : "აუტენტიფიკაციის მექნიზმის პარამეტრები არადამაკმაყოფილებელია",
+ "Insufficient data: %s" : "არასაკმარისი მონაცემები: %s",
+ "%s" : "%s",
+ "Storage with ID \"%d\" is not user editable" : "საცავი ID-ით \"%d\" არაა მომხმარებლისთვის შეცვლადი",
+ "Access key" : "წვდომის გასაღები",
+ "Secret key" : "საიდუმლო გასაღები",
+ "Builtin" : "ჩაშენებული",
+ "None" : "არც ერთი",
+ "OAuth1" : "OAuth1",
+ "App key" : "აპლიკაციის გასაღები",
+ "App secret" : "აპლიკაციის საიდუმლო",
+ "OAuth2" : "OAuth2",
+ "Client ID" : "კლიენტის ID",
+ "Client secret" : "კლიენტის საიდუმლო",
+ "OpenStack" : "OpenStack",
+ "Tenant name" : "მოიჯარის სახელ",
+ "Identity endpoint URL" : "იდენტობის საბოლოო-წერტილის URL",
+ "Rackspace" : "Rackspace",
"API key" : "API გასაღები",
+ "Global credentials" : "გლობალური მონაცემები",
+ "Log-in credentials, save in database" : "ლოგინის მონაცემები, შენახვა მონაცემთა ბაზაში",
+ "Username and password" : "მომხმარებელი და პაროლი",
+ "Log-in credentials, save in session" : "ლოგინის მონაცემები, შენახვა სესიაში",
+ "User entered, store in database" : "შეყვანილი მომხმარებელი, შენახვა მონაცემთა ბაზაში",
+ "RSA public key" : "RSA ღია გასაღები",
+ "Public key" : "ღია გასაღები",
+ "Amazon S3" : "Amazon S3",
+ "Bucket" : "ხაპია",
+ "Hostname" : "ჰოსტი",
"Port" : "პორტი",
"Region" : "რეგიონი",
+ "Enable SSL" : "SSL-ის ამოქმედება",
+ "Enable Path Style" : "ბილიკის სტილის ამოქმედება",
"WebDAV" : "WebDAV",
"URL" : "URL",
+ "Remote subfolder" : "დისტანციური ქვე-დირექტორია",
+ "Secure https://" : "დაცული https://",
+ "FTP" : "FTP",
"Host" : "ჰოსტი",
+ "Secure ftps://" : "დაცული ftps://",
+ "Local" : "ლოკალური",
"Location" : "ადგილმდებარეობა",
- "ownCloud" : "ownCloud–ი",
+ "Nextcloud" : "Nextcloud-ი",
+ "SFTP" : "SFTP",
+ "Root" : "Root",
+ "SFTP with secret key login" : "SFTP საიდუმლო გასაღების ლოგინით",
+ "SMB / CIFS" : "SMB / CIFS",
"Share" : "გაზიარება",
+ "Domain" : "დომენი",
+ "SMB / CIFS using OC login" : "SMB / CIFS OC ლოგინით",
+ "Username as share" : "მომხმარებლის სახელი გაზიარებად",
+ "OpenStack Object Storage" : "OpenStack ობიექტ საცავი",
+ "Service name" : "სერვისის სახელ",
+ "Request timeout (seconds)" : "მოთხოვნის დროის ამოწურვა (წამები)",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "cURL-ის მხარდაჭერა PHP-ში არაა მოქდენი ან დაყენებული. %s-ის მონტაჟი ვერ ხერხდება. გთხოვთ სთხოვოთ თქვენი სისტემის ადმინისტრატორს მისი დაყენება.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "FTP-ს მხარდაჭერა PHP-ში არაა მოქმედი ან დაყენებული. %s-ის მონტაჟი ვერ ხერხდება. გთხოვთ სთხოვოთ თქვენი სისტემის ადმინისტრატორს მისი დაყენება.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"1 %s\" არაა დაყენებული. %s-ის მონტაჟი ვერ ხერხდება. გთხოვთ სთხოვოთ თქვენი სისტემის ადმინისტრატორს მისი დაყენება.",
+ "No external storage configured" : "გარე საცავი არაა კონფიგურირებული",
+ "You can add external storages in the personal settings" : "გარე საცავები შეგიძლიათ დაამატოთ პირად პარამეტრებში",
"Name" : "სახელი",
- "External Storage" : "ექსტერნალ საცავი",
+ "Storage type" : "საცავის სახეობა",
+ "Scope" : "ფარგლები",
+ "Enable encryption" : "შიფრაციის ამოქმედება",
+ "Enable previews" : "პრევიუების ამოქმედება",
+ "Enable sharing" : "გაზიარების ამოქმედება",
+ "Check for changes" : "ცვლილებების შემოწმება",
+ "Never" : "არასდროს",
+ "Once every direct access" : "ყოველთვის პირდაპირი წვდომისას",
"Folder name" : "ფოლდერის სახელი",
+ "External storage" : "ექსტერნალ საცავი",
+ "Authentication" : "აუტენტიფიკაცია",
"Configuration" : "კონფიგურაცია",
+ "Available for" : "ხელმისაწვდომია რომ",
"Add storage" : "საცავის დამატება",
- "Delete" : "წაშლა"
+ "Advanced settings" : "დამატებითი პარამეტრები",
+ "Delete" : "წაშლა",
+ "Allow users to mount external storage" : "მივცეთ მომხმარებლებს გარე საცავის მონტაჟის უფლება",
+ "Allow users to mount the following external storage" : "მივცეთ მომხმარებლებს შემდეგი გარე საცავების მონტაჟის უფლება",
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "მოთხოვნის ტოკენების მიღება ვერ მოხერხდა. დარწმუნდით რომ თქვენი აპლიკაციის გასარღები და საიდუმლო სწორია.",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "მოთხოვნის ტოკენების მიღება ვერ მოხერხდა. დარწმუნდით რომ თქვენი აპლიკაციის გასარღები და საიდუმლო სწორია.",
+ "Step 1 failed. Exception: %s" : "ნაბიჯი 1 ჩაიშალა. გამონაკლისი: %s",
+ "Step 2 failed. Exception: %s" : "ნაბიჯი 2 ჩაიშალა. გამონაკლისი: %s",
+ "Dropbox App Configuration" : "Dropbox აპლიკაციის კონფიგურაცია",
+ "Google Drive App Configuration" : "Google Drive აპლიკაციის კონფიგურაცია",
+ "Storage with id \"%i\" not found" : "საცავი ID-ით \"%i\" ვერ იქნა ნაპოვნი",
+ "Storage with id \"%i\" is not user editable" : "საცავი ID-ით \"%i\" არაა მომხმარებლისთვის შეცვლადი",
+ "Dropbox" : "Dropbox-ი",
+ "Google Drive" : "Google Drive-ი"
},
"nplurals=1; plural=0;");
diff --git a/apps/files_external/l10n/ka_GE.json b/apps/files_external/l10n/ka_GE.json
index 08f0d76d0fb..92c47b8047b 100644
--- a/apps/files_external/l10n/ka_GE.json
+++ b/apps/files_external/l10n/ka_GE.json
@@ -1,25 +1,132 @@
{ "translations": {
- "External storage" : "ექსტერნალ საცავი",
+ "External storages" : "გარე საცავები",
"Personal" : "პირადი",
- "Grant access" : "დაშვების მინიჭება",
+ "System" : "სისტემა",
+ "Grant access" : "წვდომის მინიჭება",
+ "Error configuring OAuth1" : "OAuth1-ის კონფიგურირებისას წარმოიშვა შეცდომა",
+ "Please provide a valid app key and secret." : "გთხოვთ უზრუნველყოთ სწორი აპლიკაციის გასაღები და საიდუმლო.",
+ "Error configuring OAuth2" : "OAuth2-ის კონფიგურირებისას წარმოიშვა შეცდომა",
+ "Generate keys" : "გასაღებების გენერირება",
+ "Error generating key pair" : "გასაღების წყვილის გენერირებისას წარმოიშვა შეცდომა",
+ "All users. Type to select user or group." : "ყველა მომხმარებელი. მოხმარებლის ან ჯგუფის ასარჩევად დაიწყეთ ბეჭდვა .",
+ "(group)" : "(ჯგუფი)",
+ "Compatibility with Mac NFD encoding (slow)" : "Mac NFD-სთან თავსებადობა (ნელი)",
+ "Admin defined" : "ადმინისტრატორი მითითებულია",
+ "Are you sure you want to delete this external storage" : "დარწმუნებული ხართ რომ გსურთ ამ გარე საცავის გაუქმება?",
+ "Delete storage?" : "გავაუქმოთ საცავი?",
+ "Saved" : "შენახულია",
+ "Saving..." : "ინახება...",
+ "Save" : "შენახვა",
+ "Empty response from the server" : "სერვერმა დააბრუნა ცარიელი პასუხი",
+ "Couldn't access. Please log out and in again to activate this mount point" : "წვდომა ვერ მოხერხდა. ამ მონტაჟის წერტილის გასააქტიურებლად გთხოვთ გახვიდეთ და ახლიდან გაიაროთ ავტორიზაცია.",
+ "Couldn't get the information from the remote server: {code} {type}" : "დისტანციური სერვერიდან ინფორმაციის მოპოვება ვერ მოხერხდა: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "გარე მონტაჟის წერტილების სიის მოპოვება ვერ მოხერხდა: {type}",
+ "There was an error with message: " : "წარმოიშვა შეცდომა წერილით:",
+ "External mount error" : "გარე მონტაჟის შეცდომა",
+ "external-storage" : "გარე-საცავი",
+ "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "Windows-ის ქსელის დრაივის მონტაჯის წერტილების სიის მოპოვება ვერ მოხერხდა: ცარიელი პასუხი სერვერიდან",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "ზოგი კონფიგურირებული გარე მონტაჟის წერიტილი არაა დაკავშირებული. მეტი ინფორმაციისთვის გთხოვთ დააწკაპუნოთ წითელ რიგებს.",
+ "Please enter the credentials for the {mount} mount" : "გთხოვთ მონტაჟისთვის {mount} შეიყვანოთ მონაცემები",
"Username" : "მომხმარებლის სახელი",
"Password" : "პაროლი",
- "Save" : "შენახვა",
- "None" : "არა",
+ "Credentials saved" : "მონაცემები შენახულია",
+ "Credentials saving failed" : "მონაცემების შენახვა ვერ მოხერხდა",
+ "Credentials required" : "მონაცემები საჭიროა",
+ "Storage with ID \"%d\" not found" : "საცავი ID-ით \"%d\" ვერ იქნა ნაპოვნი",
+ "Invalid backend or authentication mechanism class" : "არასწორი ბექენდი ან აუტენტიფიკაციის მექანიზმის კლასი",
+ "Invalid mount point" : "არასწორი მონტაჟის წერტილი",
+ "Objectstore forbidden" : "ობიექტსტორი აკრძალულია",
+ "Invalid storage backend \"%s\"" : "არასწორი საცავის ბექენდი \"%s\"",
+ "Not permitted to use backend \"%s\"" : "ბექენის \"%s\" გამოყენება არაა ნებადართული",
+ "Not permitted to use authentication mechanism \"%s\"" : "აუტენტიკაციის მექანიზმის \"%s\"-ს გამოყენება არაა ნებადართული",
+ "Unsatisfied backend parameters" : "ბექენიდს პარამეტრები არადამაკმაყოფილებელია",
+ "Unsatisfied authentication mechanism parameters" : "აუტენტიფიკაციის მექნიზმის პარამეტრები არადამაკმაყოფილებელია",
+ "Insufficient data: %s" : "არასაკმარისი მონაცემები: %s",
+ "%s" : "%s",
+ "Storage with ID \"%d\" is not user editable" : "საცავი ID-ით \"%d\" არაა მომხმარებლისთვის შეცვლადი",
+ "Access key" : "წვდომის გასაღები",
+ "Secret key" : "საიდუმლო გასაღები",
+ "Builtin" : "ჩაშენებული",
+ "None" : "არც ერთი",
+ "OAuth1" : "OAuth1",
+ "App key" : "აპლიკაციის გასაღები",
+ "App secret" : "აპლიკაციის საიდუმლო",
+ "OAuth2" : "OAuth2",
+ "Client ID" : "კლიენტის ID",
+ "Client secret" : "კლიენტის საიდუმლო",
+ "OpenStack" : "OpenStack",
+ "Tenant name" : "მოიჯარის სახელ",
+ "Identity endpoint URL" : "იდენტობის საბოლოო-წერტილის URL",
+ "Rackspace" : "Rackspace",
"API key" : "API გასაღები",
+ "Global credentials" : "გლობალური მონაცემები",
+ "Log-in credentials, save in database" : "ლოგინის მონაცემები, შენახვა მონაცემთა ბაზაში",
+ "Username and password" : "მომხმარებელი და პაროლი",
+ "Log-in credentials, save in session" : "ლოგინის მონაცემები, შენახვა სესიაში",
+ "User entered, store in database" : "შეყვანილი მომხმარებელი, შენახვა მონაცემთა ბაზაში",
+ "RSA public key" : "RSA ღია გასაღები",
+ "Public key" : "ღია გასაღები",
+ "Amazon S3" : "Amazon S3",
+ "Bucket" : "ხაპია",
+ "Hostname" : "ჰოსტი",
"Port" : "პორტი",
"Region" : "რეგიონი",
+ "Enable SSL" : "SSL-ის ამოქმედება",
+ "Enable Path Style" : "ბილიკის სტილის ამოქმედება",
"WebDAV" : "WebDAV",
"URL" : "URL",
+ "Remote subfolder" : "დისტანციური ქვე-დირექტორია",
+ "Secure https://" : "დაცული https://",
+ "FTP" : "FTP",
"Host" : "ჰოსტი",
+ "Secure ftps://" : "დაცული ftps://",
+ "Local" : "ლოკალური",
"Location" : "ადგილმდებარეობა",
- "ownCloud" : "ownCloud–ი",
+ "Nextcloud" : "Nextcloud-ი",
+ "SFTP" : "SFTP",
+ "Root" : "Root",
+ "SFTP with secret key login" : "SFTP საიდუმლო გასაღების ლოგინით",
+ "SMB / CIFS" : "SMB / CIFS",
"Share" : "გაზიარება",
+ "Domain" : "დომენი",
+ "SMB / CIFS using OC login" : "SMB / CIFS OC ლოგინით",
+ "Username as share" : "მომხმარებლის სახელი გაზიარებად",
+ "OpenStack Object Storage" : "OpenStack ობიექტ საცავი",
+ "Service name" : "სერვისის სახელ",
+ "Request timeout (seconds)" : "მოთხოვნის დროის ამოწურვა (წამები)",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "cURL-ის მხარდაჭერა PHP-ში არაა მოქდენი ან დაყენებული. %s-ის მონტაჟი ვერ ხერხდება. გთხოვთ სთხოვოთ თქვენი სისტემის ადმინისტრატორს მისი დაყენება.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "FTP-ს მხარდაჭერა PHP-ში არაა მოქმედი ან დაყენებული. %s-ის მონტაჟი ვერ ხერხდება. გთხოვთ სთხოვოთ თქვენი სისტემის ადმინისტრატორს მისი დაყენება.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"1 %s\" არაა დაყენებული. %s-ის მონტაჟი ვერ ხერხდება. გთხოვთ სთხოვოთ თქვენი სისტემის ადმინისტრატორს მისი დაყენება.",
+ "No external storage configured" : "გარე საცავი არაა კონფიგურირებული",
+ "You can add external storages in the personal settings" : "გარე საცავები შეგიძლიათ დაამატოთ პირად პარამეტრებში",
"Name" : "სახელი",
- "External Storage" : "ექსტერნალ საცავი",
+ "Storage type" : "საცავის სახეობა",
+ "Scope" : "ფარგლები",
+ "Enable encryption" : "შიფრაციის ამოქმედება",
+ "Enable previews" : "პრევიუების ამოქმედება",
+ "Enable sharing" : "გაზიარების ამოქმედება",
+ "Check for changes" : "ცვლილებების შემოწმება",
+ "Never" : "არასდროს",
+ "Once every direct access" : "ყოველთვის პირდაპირი წვდომისას",
"Folder name" : "ფოლდერის სახელი",
+ "External storage" : "ექსტერნალ საცავი",
+ "Authentication" : "აუტენტიფიკაცია",
"Configuration" : "კონფიგურაცია",
+ "Available for" : "ხელმისაწვდომია რომ",
"Add storage" : "საცავის დამატება",
- "Delete" : "წაშლა"
+ "Advanced settings" : "დამატებითი პარამეტრები",
+ "Delete" : "წაშლა",
+ "Allow users to mount external storage" : "მივცეთ მომხმარებლებს გარე საცავის მონტაჟის უფლება",
+ "Allow users to mount the following external storage" : "მივცეთ მომხმარებლებს შემდეგი გარე საცავების მონტაჟის უფლება",
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "მოთხოვნის ტოკენების მიღება ვერ მოხერხდა. დარწმუნდით რომ თქვენი აპლიკაციის გასარღები და საიდუმლო სწორია.",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "მოთხოვნის ტოკენების მიღება ვერ მოხერხდა. დარწმუნდით რომ თქვენი აპლიკაციის გასარღები და საიდუმლო სწორია.",
+ "Step 1 failed. Exception: %s" : "ნაბიჯი 1 ჩაიშალა. გამონაკლისი: %s",
+ "Step 2 failed. Exception: %s" : "ნაბიჯი 2 ჩაიშალა. გამონაკლისი: %s",
+ "Dropbox App Configuration" : "Dropbox აპლიკაციის კონფიგურაცია",
+ "Google Drive App Configuration" : "Google Drive აპლიკაციის კონფიგურაცია",
+ "Storage with id \"%i\" not found" : "საცავი ID-ით \"%i\" ვერ იქნა ნაპოვნი",
+ "Storage with id \"%i\" is not user editable" : "საცავი ID-ით \"%i\" არაა მომხმარებლისთვის შეცვლადი",
+ "Dropbox" : "Dropbox-ი",
+ "Google Drive" : "Google Drive-ი"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/nl.js b/apps/files_external/l10n/nl.js
index b8e262085ee..65438628a79 100644
--- a/apps/files_external/l10n/nl.js
+++ b/apps/files_external/l10n/nl.js
@@ -14,6 +14,8 @@ OC.L10N.register(
"(group)" : "(groep)",
"Compatibility with Mac NFD encoding (slow)" : "Compatibiliteit met Mac NFD encoding (traag)",
"Admin defined" : "Beheerder gedefinieerd",
+ "Are you sure you want to delete this external storage" : "Weet je zeker dat je de externe opslag wilt verwijderen?",
+ "Delete storage?" : "Opslag verwijderen?",
"Saved" : "Bewaard",
"Saving..." : "Bewaren...",
"Save" : "Bewaren",
diff --git a/apps/files_external/l10n/nl.json b/apps/files_external/l10n/nl.json
index d92ccc5c325..ed16cd13df3 100644
--- a/apps/files_external/l10n/nl.json
+++ b/apps/files_external/l10n/nl.json
@@ -12,6 +12,8 @@
"(group)" : "(groep)",
"Compatibility with Mac NFD encoding (slow)" : "Compatibiliteit met Mac NFD encoding (traag)",
"Admin defined" : "Beheerder gedefinieerd",
+ "Are you sure you want to delete this external storage" : "Weet je zeker dat je de externe opslag wilt verwijderen?",
+ "Delete storage?" : "Opslag verwijderen?",
"Saved" : "Bewaard",
"Saving..." : "Bewaren...",
"Save" : "Bewaren",
diff --git a/apps/files_external/l10n/sk.js b/apps/files_external/l10n/sk.js
index a288544ce45..a37d4961abf 100644
--- a/apps/files_external/l10n/sk.js
+++ b/apps/files_external/l10n/sk.js
@@ -1,28 +1,40 @@
OC.L10N.register(
"files_external",
{
- "Fetching request tokens failed. Verify that your app key and secret are correct." : "Sťahovanie tokenov požiadavky zlyhalo. Overte prosím, či je aplikačný kľúč a heslo (secret) zadané správne.",
- "Fetching access tokens failed. Verify that your app key and secret are correct." : "Sťahovanie prístupových tokenov zlyhalo. Overte prosím, či je aplikačný kľúč a heslo (secret) zadané správne.",
- "Please provide a valid app key and secret." : "Zadajte prosím platný aplikačný kľúč a heslo (secret).",
- "Step 1 failed. Exception: %s" : "Krok 1 zlyhal. Výnimka: %s",
- "Step 2 failed. Exception: %s" : "Krok 2 zlyhal. Výnimka: %s",
- "External storage" : "Externé úložisko",
- "Dropbox App Configuration" : "Nastavenie Dropbox aplikácie",
- "Google Drive App Configuration" : "Nastavenie Google Drive aplikácie",
+ "External storages" : "Externé úložiská",
"Personal" : "Osobné",
"System" : "Systém",
"Grant access" : "Povoliť prístup",
"Error configuring OAuth1" : "Chyba konfigurovania OAuth1",
+ "Please provide a valid app key and secret." : "Zadajte prosím platný aplikačný kľúč a heslo (secret).",
"Error configuring OAuth2" : "Chyba konfigurovania OAuth2",
"Generate keys" : "Vytvoriť kľúče",
"Error generating key pair" : "Chyba pri vytváraní dvojice kľúčov",
"All users. Type to select user or group." : "Všetci používatelia. Začnite písať pre výber používateľa alebo skupinu.",
"(group)" : "(skupina)",
+ "Compatibility with Mac NFD encoding (slow)" : "Kompatibilita s Mac NFD enkódovaním (pomalé)",
+ "Admin defined" : "Nastavené správcom",
+ "Are you sure you want to delete this external storage" : "Naozaj chcete zmazať toto externé úložisko?",
+ "Delete storage?" : "Zmazať externé úložisko?",
"Saved" : "Uložené",
+ "Saving..." : "Ukladá sa...",
"Save" : "Uložiť",
+ "Empty response from the server" : "Prázdna odpoveď zo servera",
+ "Couldn't access. Please log out and in again to activate this mount point" : "Nedá sa pripojiť. Pre aktiváciu tohto prípojného bodu sa prosím odhláste a znovu prihláste",
+ "Couldn't get the information from the remote server: {code} {type}" : "Zo vzdialeného servera sa nedá získať informácia: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "Nedá sa získať zoznam externých prípojných bodov: {type}",
+ "There was an error with message: " : "Nastala chyba s týmto hlásením:",
+ "External mount error" : "Chyba externého úložiska",
+ "external-storage" : "external-storage",
+ "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "Nedá sa získať zoznam sieťových úložísk systému Windows: prázdna odpoveď zo servera",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Niektoré z nastavených externých úložísk nie sú pripojené. Pre viac informácií kliknite na červenú šípku(y)",
+ "Please enter the credentials for the {mount} mount" : "Zadajte prosím prihlasovacie údaje k prípojnému bodu {mount}",
"Username" : "Používateľské meno",
"Password" : "Heslo",
- "Storage with id \"%i\" not found" : "Úložisko s ID \"%i\" sa nenašlo",
+ "Credentials saved" : "Prihlasovacie údaje uložené",
+ "Credentials saving failed" : "Uloženie prihlasovacích údajov zlyhalo",
+ "Credentials required" : "Vyžadované prihlasovacie údaje",
+ "Storage with ID \"%d\" not found" : "Úložisko s ID \"%d\" sa nenašlo",
"Invalid backend or authentication mechanism class" : "Neplatný backend, prípadne trieda mechanizmu autentifikácie",
"Invalid mount point" : "Chybný prípojný bod",
"Objectstore forbidden" : "Objectstore je zakáazaný",
@@ -31,6 +43,9 @@ OC.L10N.register(
"Not permitted to use authentication mechanism \"%s\"" : "Nie je povolené použiť autentifikačný mechanizmus \"%s\"",
"Unsatisfied backend parameters" : "Nedostatočné parametre backendu",
"Unsatisfied authentication mechanism parameters" : "Nedostatočné parametre autentifikačného mechanizmu",
+ "Insufficient data: %s" : "Nedostatočné dáta: %s",
+ "%s" : "%s",
+ "Storage with ID \"%d\" is not user editable" : "Úložisko s ID \"%d\" nie je upraviteľné používateľmi",
"Access key" : "Prístupový kľúč",
"Secret key" : "Tajný kľúč",
"Builtin" : "Vstavaný",
@@ -47,7 +62,10 @@ OC.L10N.register(
"Rackspace" : "Rackspace",
"API key" : "API kľúč",
"Global credentials" : "Globálne oprávnenia",
+ "Log-in credentials, save in database" : "Prihlasovacie údaje, ukladať v databáze",
"Username and password" : "Meno a heslo",
+ "Log-in credentials, save in session" : "Prihlasovacie údaje, ukladať do relácie",
+ "User entered, store in database" : "Používateľ zadaný, uložiť v databáze",
"RSA public key" : "RSA verejný kľúč",
"Public key" : "Verejný kľúč",
"Amazon S3" : "Amazon S3",
@@ -61,15 +79,15 @@ OC.L10N.register(
"URL" : "URL",
"Remote subfolder" : "Vzdialený podpriečinok",
"Secure https://" : "Zabezpečené https://",
- "Dropbox" : "Dropbox",
"FTP" : "FTP",
"Host" : "Hostiteľ",
"Secure ftps://" : "Zabezpečené ftps://",
- "Google Drive" : "Google Drive",
"Local" : "Lokálny",
"Location" : "Umiestnenie",
+ "Nextcloud" : "Nextcloud",
"SFTP" : "SFTP",
"Root" : "Root",
+ "SFTP with secret key login" : "SFTP prihlásenie s tajným kľúčom",
"SMB / CIFS" : "SMB / CIFS",
"Share" : "Sprístupniť",
"Domain" : "Doména",
@@ -78,6 +96,9 @@ OC.L10N.register(
"OpenStack Object Storage" : "OpenStack Object Storage",
"Service name" : "Názov služby",
"Request timeout (seconds)" : "Timeout požiadavky (s)",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Nie je povolená alebo nainštalovaná cURL podpora v PHP. Pripojenie %s nie je možné. Požiadajte svojho správcu, aby doplnil podporu.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Nie je povolená alebo nainštalovaná FTP podpora v PHP. Pripojenie %s nie je možné. Požiadajte svojho správcu, aby doplnil podporu.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Nie je nainštalované \"%s\". Pripojenie %s nie je možné. Požiadajte svojho správcu o inštaláciu.",
"No external storage configured" : "Žiadne externé úložisko nie je nakonfigurované",
"You can add external storages in the personal settings" : "Externé úložisko je možné pridať v osobných nastaveniach",
"Name" : "Názov",
@@ -85,16 +106,29 @@ OC.L10N.register(
"Scope" : "Rozsah",
"Enable encryption" : "Povoliť šifrovanie",
"Enable previews" : "Povoliť náhľady",
+ "Enable sharing" : "Povoliť sprístupňovanie",
"Check for changes" : "Zisťovať zmeny",
"Never" : "Nikdy",
"Once every direct access" : "S každým priamym prístupom",
"Folder name" : "Názov priečinka",
+ "External storage" : "Externé úložisko",
"Authentication" : "Autentifikácia",
"Configuration" : "Nastavenia",
"Available for" : "K dispozícii pre",
"Add storage" : "Pridať úložisko",
"Advanced settings" : "Rozšírené nastavenia",
"Delete" : "Zmazať",
- "Allow users to mount the following external storage" : "Povoliť používateľom pripojiť tieto externé úložiská"
+ "Allow users to mount external storage" : "Povoliť používateľom pripojiť externé úložiská",
+ "Allow users to mount the following external storage" : "Povoliť používateľom pripojiť tieto externé úložiská",
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "Sťahovanie tokenov požiadavky zlyhalo. Overte prosím, či je aplikačný kľúč a heslo (secret) zadané správne.",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Sťahovanie prístupových tokenov zlyhalo. Overte prosím, či je aplikačný kľúč a heslo (secret) zadané správne.",
+ "Step 1 failed. Exception: %s" : "Krok 1 zlyhal. Výnimka: %s",
+ "Step 2 failed. Exception: %s" : "Krok 2 zlyhal. Výnimka: %s",
+ "Dropbox App Configuration" : "Nastavenie Dropbox aplikácie",
+ "Google Drive App Configuration" : "Nastavenie Google Drive aplikácie",
+ "Storage with id \"%i\" not found" : "Úložisko s ID \"%i\" sa nenašlo",
+ "Storage with id \"%i\" is not user editable" : "Úložisko s id \"%i\" používatelia nemôžu upravovať",
+ "Dropbox" : "Dropbox",
+ "Google Drive" : "Google Drive"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/files_external/l10n/sk.json b/apps/files_external/l10n/sk.json
index 24592565e8e..c1b71b21204 100644
--- a/apps/files_external/l10n/sk.json
+++ b/apps/files_external/l10n/sk.json
@@ -1,26 +1,38 @@
{ "translations": {
- "Fetching request tokens failed. Verify that your app key and secret are correct." : "Sťahovanie tokenov požiadavky zlyhalo. Overte prosím, či je aplikačný kľúč a heslo (secret) zadané správne.",
- "Fetching access tokens failed. Verify that your app key and secret are correct." : "Sťahovanie prístupových tokenov zlyhalo. Overte prosím, či je aplikačný kľúč a heslo (secret) zadané správne.",
- "Please provide a valid app key and secret." : "Zadajte prosím platný aplikačný kľúč a heslo (secret).",
- "Step 1 failed. Exception: %s" : "Krok 1 zlyhal. Výnimka: %s",
- "Step 2 failed. Exception: %s" : "Krok 2 zlyhal. Výnimka: %s",
- "External storage" : "Externé úložisko",
- "Dropbox App Configuration" : "Nastavenie Dropbox aplikácie",
- "Google Drive App Configuration" : "Nastavenie Google Drive aplikácie",
+ "External storages" : "Externé úložiská",
"Personal" : "Osobné",
"System" : "Systém",
"Grant access" : "Povoliť prístup",
"Error configuring OAuth1" : "Chyba konfigurovania OAuth1",
+ "Please provide a valid app key and secret." : "Zadajte prosím platný aplikačný kľúč a heslo (secret).",
"Error configuring OAuth2" : "Chyba konfigurovania OAuth2",
"Generate keys" : "Vytvoriť kľúče",
"Error generating key pair" : "Chyba pri vytváraní dvojice kľúčov",
"All users. Type to select user or group." : "Všetci používatelia. Začnite písať pre výber používateľa alebo skupinu.",
"(group)" : "(skupina)",
+ "Compatibility with Mac NFD encoding (slow)" : "Kompatibilita s Mac NFD enkódovaním (pomalé)",
+ "Admin defined" : "Nastavené správcom",
+ "Are you sure you want to delete this external storage" : "Naozaj chcete zmazať toto externé úložisko?",
+ "Delete storage?" : "Zmazať externé úložisko?",
"Saved" : "Uložené",
+ "Saving..." : "Ukladá sa...",
"Save" : "Uložiť",
+ "Empty response from the server" : "Prázdna odpoveď zo servera",
+ "Couldn't access. Please log out and in again to activate this mount point" : "Nedá sa pripojiť. Pre aktiváciu tohto prípojného bodu sa prosím odhláste a znovu prihláste",
+ "Couldn't get the information from the remote server: {code} {type}" : "Zo vzdialeného servera sa nedá získať informácia: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "Nedá sa získať zoznam externých prípojných bodov: {type}",
+ "There was an error with message: " : "Nastala chyba s týmto hlásením:",
+ "External mount error" : "Chyba externého úložiska",
+ "external-storage" : "external-storage",
+ "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "Nedá sa získať zoznam sieťových úložísk systému Windows: prázdna odpoveď zo servera",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Niektoré z nastavených externých úložísk nie sú pripojené. Pre viac informácií kliknite na červenú šípku(y)",
+ "Please enter the credentials for the {mount} mount" : "Zadajte prosím prihlasovacie údaje k prípojnému bodu {mount}",
"Username" : "Používateľské meno",
"Password" : "Heslo",
- "Storage with id \"%i\" not found" : "Úložisko s ID \"%i\" sa nenašlo",
+ "Credentials saved" : "Prihlasovacie údaje uložené",
+ "Credentials saving failed" : "Uloženie prihlasovacích údajov zlyhalo",
+ "Credentials required" : "Vyžadované prihlasovacie údaje",
+ "Storage with ID \"%d\" not found" : "Úložisko s ID \"%d\" sa nenašlo",
"Invalid backend or authentication mechanism class" : "Neplatný backend, prípadne trieda mechanizmu autentifikácie",
"Invalid mount point" : "Chybný prípojný bod",
"Objectstore forbidden" : "Objectstore je zakáazaný",
@@ -29,6 +41,9 @@
"Not permitted to use authentication mechanism \"%s\"" : "Nie je povolené použiť autentifikačný mechanizmus \"%s\"",
"Unsatisfied backend parameters" : "Nedostatočné parametre backendu",
"Unsatisfied authentication mechanism parameters" : "Nedostatočné parametre autentifikačného mechanizmu",
+ "Insufficient data: %s" : "Nedostatočné dáta: %s",
+ "%s" : "%s",
+ "Storage with ID \"%d\" is not user editable" : "Úložisko s ID \"%d\" nie je upraviteľné používateľmi",
"Access key" : "Prístupový kľúč",
"Secret key" : "Tajný kľúč",
"Builtin" : "Vstavaný",
@@ -45,7 +60,10 @@
"Rackspace" : "Rackspace",
"API key" : "API kľúč",
"Global credentials" : "Globálne oprávnenia",
+ "Log-in credentials, save in database" : "Prihlasovacie údaje, ukladať v databáze",
"Username and password" : "Meno a heslo",
+ "Log-in credentials, save in session" : "Prihlasovacie údaje, ukladať do relácie",
+ "User entered, store in database" : "Používateľ zadaný, uložiť v databáze",
"RSA public key" : "RSA verejný kľúč",
"Public key" : "Verejný kľúč",
"Amazon S3" : "Amazon S3",
@@ -59,15 +77,15 @@
"URL" : "URL",
"Remote subfolder" : "Vzdialený podpriečinok",
"Secure https://" : "Zabezpečené https://",
- "Dropbox" : "Dropbox",
"FTP" : "FTP",
"Host" : "Hostiteľ",
"Secure ftps://" : "Zabezpečené ftps://",
- "Google Drive" : "Google Drive",
"Local" : "Lokálny",
"Location" : "Umiestnenie",
+ "Nextcloud" : "Nextcloud",
"SFTP" : "SFTP",
"Root" : "Root",
+ "SFTP with secret key login" : "SFTP prihlásenie s tajným kľúčom",
"SMB / CIFS" : "SMB / CIFS",
"Share" : "Sprístupniť",
"Domain" : "Doména",
@@ -76,6 +94,9 @@
"OpenStack Object Storage" : "OpenStack Object Storage",
"Service name" : "Názov služby",
"Request timeout (seconds)" : "Timeout požiadavky (s)",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Nie je povolená alebo nainštalovaná cURL podpora v PHP. Pripojenie %s nie je možné. Požiadajte svojho správcu, aby doplnil podporu.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Nie je povolená alebo nainštalovaná FTP podpora v PHP. Pripojenie %s nie je možné. Požiadajte svojho správcu, aby doplnil podporu.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Nie je nainštalované \"%s\". Pripojenie %s nie je možné. Požiadajte svojho správcu o inštaláciu.",
"No external storage configured" : "Žiadne externé úložisko nie je nakonfigurované",
"You can add external storages in the personal settings" : "Externé úložisko je možné pridať v osobných nastaveniach",
"Name" : "Názov",
@@ -83,16 +104,29 @@
"Scope" : "Rozsah",
"Enable encryption" : "Povoliť šifrovanie",
"Enable previews" : "Povoliť náhľady",
+ "Enable sharing" : "Povoliť sprístupňovanie",
"Check for changes" : "Zisťovať zmeny",
"Never" : "Nikdy",
"Once every direct access" : "S každým priamym prístupom",
"Folder name" : "Názov priečinka",
+ "External storage" : "Externé úložisko",
"Authentication" : "Autentifikácia",
"Configuration" : "Nastavenia",
"Available for" : "K dispozícii pre",
"Add storage" : "Pridať úložisko",
"Advanced settings" : "Rozšírené nastavenia",
"Delete" : "Zmazať",
- "Allow users to mount the following external storage" : "Povoliť používateľom pripojiť tieto externé úložiská"
+ "Allow users to mount external storage" : "Povoliť používateľom pripojiť externé úložiská",
+ "Allow users to mount the following external storage" : "Povoliť používateľom pripojiť tieto externé úložiská",
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "Sťahovanie tokenov požiadavky zlyhalo. Overte prosím, či je aplikačný kľúč a heslo (secret) zadané správne.",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Sťahovanie prístupových tokenov zlyhalo. Overte prosím, či je aplikačný kľúč a heslo (secret) zadané správne.",
+ "Step 1 failed. Exception: %s" : "Krok 1 zlyhal. Výnimka: %s",
+ "Step 2 failed. Exception: %s" : "Krok 2 zlyhal. Výnimka: %s",
+ "Dropbox App Configuration" : "Nastavenie Dropbox aplikácie",
+ "Google Drive App Configuration" : "Nastavenie Google Drive aplikácie",
+ "Storage with id \"%i\" not found" : "Úložisko s ID \"%i\" sa nenašlo",
+ "Storage with id \"%i\" is not user editable" : "Úložisko s id \"%i\" používatelia nemôžu upravovať",
+ "Dropbox" : "Dropbox",
+ "Google Drive" : "Google Drive"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/zh_CN.js b/apps/files_external/l10n/zh_CN.js
index 2eac6e70ad9..83aea82084c 100644
--- a/apps/files_external/l10n/zh_CN.js
+++ b/apps/files_external/l10n/zh_CN.js
@@ -14,6 +14,8 @@ OC.L10N.register(
"(group)" : "(分组)",
"Compatibility with Mac NFD encoding (slow)" : "兼用 Mac NFD 编码 (慢)",
"Admin defined" : "管理员定义",
+ "Are you sure you want to delete this external storage" : "是否要删除该外部存储",
+ "Delete storage?" : "删除存储?",
"Saved" : "已保存",
"Saving..." : "正在保存...",
"Save" : "保存",
diff --git a/apps/files_external/l10n/zh_CN.json b/apps/files_external/l10n/zh_CN.json
index 9883dfa7a90..95705cc41dc 100644
--- a/apps/files_external/l10n/zh_CN.json
+++ b/apps/files_external/l10n/zh_CN.json
@@ -12,6 +12,8 @@
"(group)" : "(分组)",
"Compatibility with Mac NFD encoding (slow)" : "兼用 Mac NFD 编码 (慢)",
"Admin defined" : "管理员定义",
+ "Are you sure you want to delete this external storage" : "是否要删除该外部存储",
+ "Delete storage?" : "删除存储?",
"Saved" : "已保存",
"Saving..." : "正在保存...",
"Save" : "保存",
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 5d635a5036a..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
@@ -22,10 +23,14 @@
namespace OCA\Files_External\Tests\Auth;
+use OCA\Files_External\Lib\Auth\AuthMechanism;
+use OCA\Files_External\Lib\Backend\Backend;
+use OCA\Files_External\Lib\StorageConfig;
+
class AuthMechanismTest extends \Test\TestCase {
public function testJsonSerialization() {
- $mechanism = $this->getMockBuilder('\OCA\Files_External\Lib\Auth\AuthMechanism')
+ $mechanism = $this->getMockBuilder(AuthMechanism::class)
->setMethods(['jsonSerializeDefinition'])
->getMock();
$mechanism->expects($this->once())
@@ -52,7 +57,7 @@ class AuthMechanismTest extends \Test\TestCase {
* @dataProvider validateStorageProvider
*/
public function testValidateStorage($expectedSuccess, $scheme, $definitionSuccess) {
- $mechanism = $this->getMockBuilder('\OCA\Files_External\Lib\Auth\AuthMechanism')
+ $mechanism = $this->getMockBuilder(AuthMechanism::class)
->setMethods(['validateStorageDefinition'])
->getMock();
$mechanism->expects($this->atMost(1))
@@ -61,14 +66,14 @@ class AuthMechanismTest extends \Test\TestCase {
$mechanism->setScheme($scheme);
- $backend = $this->getMockBuilder('\OCA\Files_External\Lib\Backend\Backend')
+ $backend = $this->getMockBuilder(Backend::class)
->disableOriginalConstructor()
->getMock();
$backend->expects($this->once())
->method('getAuthSchemes')
->willReturn(['scheme' => true, 'foobar' => true]);
- $storageConfig = $this->getMockBuilder('\OCA\Files_External\Lib\StorageConfig')
+ $storageConfig = $this->getMockBuilder(StorageConfig::class)
->disableOriginalConstructor()
->getMock();
$storageConfig->expects($this->once())
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 762b9f4c0e8..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
@@ -23,11 +24,12 @@
namespace OCA\Files_External\Tests\Backend;
use \OCA\Files_External\Lib\Backend\Backend;
+use OCA\Files_External\Lib\StorageConfig;
class BackendTest extends \Test\TestCase {
public function testJsonSerialization() {
- $backend = $this->getMockBuilder('\OCA\Files_External\Lib\Backend\Backend')
+ $backend = $this->getMockBuilder(Backend::class)
->setMethods(['jsonSerializeDefinition'])
->getMock();
$backend->expects($this->once())
@@ -59,14 +61,14 @@ class BackendTest extends \Test\TestCase {
* @dataProvider validateStorageProvider
*/
public function testValidateStorage($expectedSuccess, $definitionSuccess) {
- $backend = $this->getMockBuilder('\OCA\Files_External\Lib\Backend\Backend')
+ $backend = $this->getMockBuilder(Backend::class)
->setMethods(['validateStorageDefinition'])
->getMock();
$backend->expects($this->atMost(1))
->method('validateStorageDefinition')
->willReturn($definitionSuccess);
- $storageConfig = $this->getMockBuilder('\OCA\Files_External\Lib\StorageConfig')
+ $storageConfig = $this->getMockBuilder(StorageConfig::class)
->disableOriginalConstructor()
->getMock();
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 35a055e6be5..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>
*
@@ -23,6 +24,8 @@
*/
namespace OCA\Files_External\Tests\Controller;
+use OCA\Files_External\Lib\Auth\AuthMechanism;
+use OCA\Files_External\Lib\Backend\Backend;
use \OCP\AppFramework\Http;
use \OCA\Files_External\Controller\GlobalStoragesController;
@@ -54,7 +57,7 @@ abstract class StoragesControllerTest extends \Test\TestCase {
* @return \OCA\Files_External\Lib\Backend\Backend
*/
protected function getBackendMock($class = '\OCA\Files_External\Lib\Backend\SMB', $storageClass = '\OCA\Files_External\Lib\Storage\SMB') {
- $backend = $this->getMockBuilder('\OCA\Files_External\Lib\Backend\Backend')
+ $backend = $this->getMockBuilder(Backend::class)
->disableOriginalConstructor()
->getMock();
$backend->method('getStorageClass')
@@ -68,7 +71,7 @@ abstract class StoragesControllerTest extends \Test\TestCase {
* @return \OCA\Files_External\Lib\Auth\AuthMechanism
*/
protected function getAuthMechMock($scheme = 'null', $class = '\OCA\Files_External\Lib\Auth\NullMechanism') {
- $authMech = $this->getMockBuilder('\OCA\Files_External\Lib\Auth\AuthMechanism')
+ $authMech = $this->getMockBuilder(AuthMechanism::class)
->disableOriginalConstructor()
->getMock();
$authMech->method('getScheme')
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 7efc7c66586..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>
*
@@ -23,10 +24,13 @@
namespace OCA\Files_External\Tests;
+use OCA\Files_External\Lib\DefinitionParameter;
+use OCA\Files_External\Lib\StorageConfig;
+
class FrontendDefinitionTraitTest extends \Test\TestCase {
public function testJsonSerialization() {
- $param = $this->getMockBuilder('\OCA\Files_External\Lib\DefinitionParameter')
+ $param = $this->getMockBuilder(DefinitionParameter::class)
->disableOriginalConstructor()
->getMock();
$param->method('getName')->willReturn('foo');
@@ -60,7 +64,7 @@ class FrontendDefinitionTraitTest extends \Test\TestCase {
public function testValidateStorage($expectedSuccess, $params) {
$backendParams = [];
foreach ($params as $name => $valid) {
- $param = $this->getMockBuilder('\OCA\Files_External\Lib\DefinitionParameter')
+ $param = $this->getMockBuilder(DefinitionParameter::class)
->disableOriginalConstructor()
->getMock();
$param->method('getName')
@@ -73,7 +77,7 @@ class FrontendDefinitionTraitTest extends \Test\TestCase {
$backendParams[] = $param;
}
- $storageConfig = $this->getMockBuilder('\OCA\Files_External\Lib\StorageConfig')
+ $storageConfig = $this->getMockBuilder(StorageConfig::class)
->disableOriginalConstructor()
->getMock();
$storageConfig->expects($this->any())
@@ -90,7 +94,7 @@ class FrontendDefinitionTraitTest extends \Test\TestCase {
}
public function testValidateStorageSet() {
- $param = $this->getMockBuilder('\OCA\Files_External\Lib\DefinitionParameter')
+ $param = $this->getMockBuilder(DefinitionParameter::class)
->disableOriginalConstructor()
->getMock();
$param->method('getName')
@@ -102,7 +106,7 @@ class FrontendDefinitionTraitTest extends \Test\TestCase {
return true;
}));
- $storageConfig = $this->getMockBuilder('\OCA\Files_External\Lib\StorageConfig')
+ $storageConfig = $this->getMockBuilder(StorageConfig::class)
->disableOriginalConstructor()
->getMock();
$storageConfig->expects($this->once())
diff --git a/apps/files_external/tests/Service/BackendServiceTest.php b/apps/files_external/tests/Service/BackendServiceTest.php
index cbb25579e11..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
*
@@ -21,6 +23,8 @@
*/
namespace OCA\Files_External\Tests\Service;
+use OCA\Files_External\Lib\Auth\AuthMechanism;
+use OCA\Files_External\Lib\Backend\Backend;
use OCA\Files_External\Lib\Config\IAuthMechanismProvider;
use OCA\Files_External\Lib\Config\IBackendProvider;
use \OCA\Files_External\Service\BackendService;
@@ -46,7 +50,7 @@ class BackendServiceTest extends \Test\TestCase {
* @return \OCA\Files_External\Lib\Backend\Backend
*/
protected function getBackendMock($class) {
- $backend = $this->getMockBuilder('\OCA\Files_External\Lib\Backend\Backend')
+ $backend = $this->getMockBuilder(Backend::class)
->disableOriginalConstructor()
->getMock();
$backend->method('getIdentifier')->will($this->returnValue('identifier:'.$class));
@@ -60,7 +64,7 @@ class BackendServiceTest extends \Test\TestCase {
* @return \OCA\Files_External\Lib\Auth\AuthMechanism
*/
protected function getAuthMechanismMock($class) {
- $backend = $this->getMockBuilder('\OCA\Files_External\Lib\Auth\AuthMechanism')
+ $backend = $this->getMockBuilder(AuthMechanism::class)
->disableOriginalConstructor()
->getMock();
$backend->method('getIdentifier')->will($this->returnValue('identifier:'.$class));
@@ -73,7 +77,7 @@ class BackendServiceTest extends \Test\TestCase {
$backend = $this->getBackendMock('\Foo\Bar');
- $backendAlias = $this->getMockBuilder('\OCA\Files_External\Lib\Backend\Backend')
+ $backendAlias = $this->getMockBuilder(Backend::class)
->disableOriginalConstructor()
->getMock();
$backendAlias->method('getIdentifierAliases')
@@ -175,7 +179,7 @@ class BackendServiceTest extends \Test\TestCase {
->method('removeVisibility')
->with(BackendService::VISIBILITY_PERSONAL);
- $backendAlias = $this->getMockBuilder('\OCA\Files_External\Lib\Backend\Backend')
+ $backendAlias = $this->getMockBuilder(Backend::class)
->disableOriginalConstructor()
->getMock();
$backendAlias->method('getIdentifierAliases')
diff --git a/apps/files_external/tests/Service/StoragesServiceTest.php b/apps/files_external/tests/Service/StoragesServiceTest.php
index 056a03d24c8..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
@@ -27,7 +29,9 @@ namespace OCA\Files_External\Tests\Service;
use \OC\Files\Filesystem;
+use OCA\Files_External\Lib\Auth\AuthMechanism;
use OCA\Files_External\Lib\Auth\InvalidAuth;
+use OCA\Files_External\Lib\Backend\Backend;
use OCA\Files_External\Lib\Backend\InvalidBackend;
use OCA\Files_External\NotFoundException;
use OCA\Files_External\Lib\StorageConfig;
@@ -179,7 +183,7 @@ abstract class StoragesServiceTest extends \Test\TestCase {
}
protected function getBackendMock($class = '\OCA\Files_External\Lib\Backend\SMB', $storageClass = '\OCA\Files_External\Lib\Storage\SMB') {
- $backend = $this->getMockBuilder('\OCA\Files_External\Lib\Backend\Backend')
+ $backend = $this->getMockBuilder(Backend::class)
->disableOriginalConstructor()
->getMock();
$backend->method('getStorageClass')
@@ -190,7 +194,7 @@ abstract class StoragesServiceTest extends \Test\TestCase {
}
protected function getAuthMechMock($scheme = 'null', $class = '\OCA\Files_External\Lib\Auth\NullMechanism') {
- $authMech = $this->getMockBuilder('\OCA\Files_External\Lib\Auth\AuthMechanism')
+ $authMech = $this->getMockBuilder(AuthMechanism::class)
->disableOriginalConstructor()
->getMock();
$authMech->method('getScheme')
@@ -204,7 +208,7 @@ abstract class StoragesServiceTest extends \Test\TestCase {
/**
* Creates a StorageConfig instance based on array data
*
- * @param array data
+ * @param array $data
*
* @return StorageConfig storage config instance
*/
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 ee501b1270b..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
*
@@ -38,8 +39,8 @@ class SectionTest extends TestCase {
public function setUp() {
parent::setUp();
- $this->urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')->disableOriginalConstructor()->getMock();
- $this->l = $this->getMockBuilder('\OCP\IL10N')->disableOriginalConstructor()->getMock();
+ $this->urlGenerator = $this->getMockBuilder(IURLGenerator::class)->disableOriginalConstructor()->getMock();
+ $this->l = $this->getMockBuilder(IL10N::class)->disableOriginalConstructor()->getMock();
$this->section = new Section(
$this->urlGenerator,
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 96d4fda5050..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>
*
@@ -25,15 +26,18 @@
namespace OCA\Files_External\Tests;
+use OCA\Files_External\Lib\Auth\AuthMechanism;
+use OCA\Files_External\Lib\Backend\Backend;
+use OCA\Files_External\Lib\DefinitionParameter;
use OCA\Files_External\Lib\StorageConfig;
class StorageConfigTest extends \Test\TestCase {
public function testJsonSerialization() {
- $backend = $this->getMockBuilder('\OCA\Files_External\Lib\Backend\Backend')
+ $backend = $this->getMockBuilder(Backend::class)
->disableOriginalConstructor()
->getMock();
- $parameter = $this->getMockBuilder('\OCA\Files_External\Lib\DefinitionParameter')
+ $parameter = $this->getMockBuilder(DefinitionParameter::class)
->disableOriginalConstructor()
->getMock();
$parameter
@@ -47,7 +51,7 @@ class StorageConfigTest extends \Test\TestCase {
$backend->method('getIdentifier')
->willReturn('storage::identifier');
- $authMech = $this->getMockBuilder('\OCA\Files_External\Lib\Auth\AuthMechanism')
+ $authMech = $this->getMockBuilder(AuthMechanism::class)
->disableOriginalConstructor()
->getMock();
$authMech->method('getIdentifier')
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/info.xml b/apps/files_sharing/appinfo/info.xml
index f4119a55972..e98d29aeb8a 100644
--- a/apps/files_sharing/appinfo/info.xml
+++ b/apps/files_sharing/appinfo/info.xml
@@ -59,4 +59,10 @@ Turning the feature off removes shared files and folders on the server for all s
<step>OCA\Files_Sharing\Migration\SetPasswordColumn</step>
</post-migration>
</repair-steps>
+
+ <collaboration>
+ <plugins>
+ <plugin type="autocomplete-sort">OCA\Files_Sharing\Collaboration\ShareRecipientSorter</plugin>
+ </plugins>
+ </collaboration>
</info>
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/composer/autoload.php b/apps/files_sharing/composer/autoload.php
new file mode 100644
index 00000000000..0aa77c00af9
--- /dev/null
+++ b/apps/files_sharing/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitFiles_Sharing::getLoader();
diff --git a/apps/files_sharing/composer/composer.json b/apps/files_sharing/composer/composer.json
new file mode 100644
index 00000000000..d500819ff82
--- /dev/null
+++ b/apps/files_sharing/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "Files_Sharing"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\Files_Sharing\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/files_sharing/composer/composer/ClassLoader.php b/apps/files_sharing/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/files_sharing/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/files_sharing/composer/composer/LICENSE b/apps/files_sharing/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/files_sharing/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/files_sharing/composer/composer/autoload_classmap.php b/apps/files_sharing/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..a68db3421b6
--- /dev/null
+++ b/apps/files_sharing/composer/composer/autoload_classmap.php
@@ -0,0 +1,57 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Files_Sharing\\Activity\\Filter' => $baseDir . '/../lib/Activity/Filter.php',
+ 'OCA\\Files_Sharing\\Activity\\Providers\\Base' => $baseDir . '/../lib/Activity/Providers/Base.php',
+ 'OCA\\Files_Sharing\\Activity\\Providers\\Downloads' => $baseDir . '/../lib/Activity/Providers/Downloads.php',
+ 'OCA\\Files_Sharing\\Activity\\Providers\\Groups' => $baseDir . '/../lib/Activity/Providers/Groups.php',
+ 'OCA\\Files_Sharing\\Activity\\Providers\\PublicLinks' => $baseDir . '/../lib/Activity/Providers/PublicLinks.php',
+ 'OCA\\Files_Sharing\\Activity\\Providers\\RemoteShares' => $baseDir . '/../lib/Activity/Providers/RemoteShares.php',
+ 'OCA\\Files_Sharing\\Activity\\Providers\\Users' => $baseDir . '/../lib/Activity/Providers/Users.php',
+ 'OCA\\Files_Sharing\\Activity\\Settings\\PublicLinks' => $baseDir . '/../lib/Activity/Settings/PublicLinks.php',
+ 'OCA\\Files_Sharing\\Activity\\Settings\\RemoteShare' => $baseDir . '/../lib/Activity/Settings/RemoteShare.php',
+ 'OCA\\Files_Sharing\\Activity\\Settings\\Shared' => $baseDir . '/../lib/Activity/Settings/Shared.php',
+ 'OCA\\Files_Sharing\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\Files_Sharing\\Cache' => $baseDir . '/../lib/Cache.php',
+ 'OCA\\Files_Sharing\\Capabilities' => $baseDir . '/../lib/Capabilities.php',
+ 'OCA\\Files_Sharing\\Collaboration\\ShareRecipientSorter' => $baseDir . '/../lib/Collaboration/ShareRecipientSorter.php',
+ 'OCA\\Files_Sharing\\Command\\CleanupRemoteStorages' => $baseDir . '/../lib/Command/CleanupRemoteStorages.php',
+ 'OCA\\Files_Sharing\\Controller\\ExternalSharesController' => $baseDir . '/../lib/Controller/ExternalSharesController.php',
+ 'OCA\\Files_Sharing\\Controller\\PublicPreviewController' => $baseDir . '/../lib/Controller/PublicPreviewController.php',
+ 'OCA\\Files_Sharing\\Controller\\RemoteController' => $baseDir . '/../lib/Controller/RemoteController.php',
+ 'OCA\\Files_Sharing\\Controller\\ShareAPIController' => $baseDir . '/../lib/Controller/ShareAPIController.php',
+ 'OCA\\Files_Sharing\\Controller\\ShareController' => $baseDir . '/../lib/Controller/ShareController.php',
+ 'OCA\\Files_Sharing\\Controller\\ShareInfoController' => $baseDir . '/../lib/Controller/ShareInfoController.php',
+ 'OCA\\Files_Sharing\\Controller\\ShareesAPIController' => $baseDir . '/../lib/Controller/ShareesAPIController.php',
+ 'OCA\\Files_Sharing\\DeleteOrphanedSharesJob' => $baseDir . '/../lib/DeleteOrphanedSharesJob.php',
+ 'OCA\\Files_Sharing\\Exceptions\\BrokenPath' => $baseDir . '/../lib/Exceptions/BrokenPath.php',
+ 'OCA\\Files_Sharing\\Exceptions\\S2SException' => $baseDir . '/../lib/Exceptions/S2SException.php',
+ 'OCA\\Files_Sharing\\ExpireSharesJob' => $baseDir . '/../lib/ExpireSharesJob.php',
+ 'OCA\\Files_Sharing\\External\\Cache' => $baseDir . '/../lib/External/Cache.php',
+ 'OCA\\Files_Sharing\\External\\Manager' => $baseDir . '/../lib/External/Manager.php',
+ 'OCA\\Files_Sharing\\External\\Mount' => $baseDir . '/../lib/External/Mount.php',
+ 'OCA\\Files_Sharing\\External\\MountProvider' => $baseDir . '/../lib/External/MountProvider.php',
+ 'OCA\\Files_Sharing\\External\\Scanner' => $baseDir . '/../lib/External/Scanner.php',
+ 'OCA\\Files_Sharing\\External\\Storage' => $baseDir . '/../lib/External/Storage.php',
+ 'OCA\\Files_Sharing\\External\\Watcher' => $baseDir . '/../lib/External/Watcher.php',
+ 'OCA\\Files_Sharing\\Helper' => $baseDir . '/../lib/Helper.php',
+ 'OCA\\Files_Sharing\\Hooks' => $baseDir . '/../lib/Hooks.php',
+ 'OCA\\Files_Sharing\\ISharedStorage' => $baseDir . '/../lib/ISharedStorage.php',
+ 'OCA\\Files_Sharing\\Middleware\\OCSShareAPIMiddleware' => $baseDir . '/../lib/Middleware/OCSShareAPIMiddleware.php',
+ 'OCA\\Files_Sharing\\Middleware\\ShareInfoMiddleware' => $baseDir . '/../lib/Middleware/ShareInfoMiddleware.php',
+ 'OCA\\Files_Sharing\\Middleware\\SharingCheckMiddleware' => $baseDir . '/../lib/Middleware/SharingCheckMiddleware.php',
+ 'OCA\\Files_Sharing\\Migration\\OwncloudGuestShareType' => $baseDir . '/../lib/Migration/OwncloudGuestShareType.php',
+ 'OCA\\Files_Sharing\\Migration\\SetPasswordColumn' => $baseDir . '/../lib/Migration/SetPasswordColumn.php',
+ 'OCA\\Files_Sharing\\MountProvider' => $baseDir . '/../lib/MountProvider.php',
+ 'OCA\\Files_Sharing\\Scanner' => $baseDir . '/../lib/Scanner.php',
+ 'OCA\\Files_Sharing\\ShareBackend\\File' => $baseDir . '/../lib/ShareBackend/File.php',
+ 'OCA\\Files_Sharing\\ShareBackend\\Folder' => $baseDir . '/../lib/ShareBackend/Folder.php',
+ 'OCA\\Files_Sharing\\SharedMount' => $baseDir . '/../lib/SharedMount.php',
+ 'OCA\\Files_Sharing\\SharedStorage' => $baseDir . '/../lib/SharedStorage.php',
+ 'OCA\\Files_Sharing\\Updater' => $baseDir . '/../lib/Updater.php',
+);
diff --git a/apps/files_sharing/composer/composer/autoload_namespaces.php b/apps/files_sharing/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/files_sharing/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/files_sharing/composer/composer/autoload_psr4.php b/apps/files_sharing/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..9fb758e4059
--- /dev/null
+++ b/apps/files_sharing/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Files_Sharing\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/files_sharing/composer/composer/autoload_real.php b/apps/files_sharing/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..504c701247f
--- /dev/null
+++ b/apps/files_sharing/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitFiles_Sharing
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitFiles_Sharing', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitFiles_Sharing', 'loadClassLoader'));
+
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitFiles_Sharing::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/files_sharing/composer/composer/autoload_static.php b/apps/files_sharing/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..328d6aca01d
--- /dev/null
+++ b/apps/files_sharing/composer/composer/autoload_static.php
@@ -0,0 +1,83 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitFiles_Sharing
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\Files_Sharing\\' => 18,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\Files_Sharing\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\Files_Sharing\\Activity\\Filter' => __DIR__ . '/..' . '/../lib/Activity/Filter.php',
+ 'OCA\\Files_Sharing\\Activity\\Providers\\Base' => __DIR__ . '/..' . '/../lib/Activity/Providers/Base.php',
+ 'OCA\\Files_Sharing\\Activity\\Providers\\Downloads' => __DIR__ . '/..' . '/../lib/Activity/Providers/Downloads.php',
+ 'OCA\\Files_Sharing\\Activity\\Providers\\Groups' => __DIR__ . '/..' . '/../lib/Activity/Providers/Groups.php',
+ 'OCA\\Files_Sharing\\Activity\\Providers\\PublicLinks' => __DIR__ . '/..' . '/../lib/Activity/Providers/PublicLinks.php',
+ 'OCA\\Files_Sharing\\Activity\\Providers\\RemoteShares' => __DIR__ . '/..' . '/../lib/Activity/Providers/RemoteShares.php',
+ 'OCA\\Files_Sharing\\Activity\\Providers\\Users' => __DIR__ . '/..' . '/../lib/Activity/Providers/Users.php',
+ 'OCA\\Files_Sharing\\Activity\\Settings\\PublicLinks' => __DIR__ . '/..' . '/../lib/Activity/Settings/PublicLinks.php',
+ 'OCA\\Files_Sharing\\Activity\\Settings\\RemoteShare' => __DIR__ . '/..' . '/../lib/Activity/Settings/RemoteShare.php',
+ 'OCA\\Files_Sharing\\Activity\\Settings\\Shared' => __DIR__ . '/..' . '/../lib/Activity/Settings/Shared.php',
+ 'OCA\\Files_Sharing\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\Files_Sharing\\Cache' => __DIR__ . '/..' . '/../lib/Cache.php',
+ 'OCA\\Files_Sharing\\Capabilities' => __DIR__ . '/..' . '/../lib/Capabilities.php',
+ 'OCA\\Files_Sharing\\Collaboration\\ShareRecipientSorter' => __DIR__ . '/..' . '/../lib/Collaboration/ShareRecipientSorter.php',
+ 'OCA\\Files_Sharing\\Command\\CleanupRemoteStorages' => __DIR__ . '/..' . '/../lib/Command/CleanupRemoteStorages.php',
+ 'OCA\\Files_Sharing\\Controller\\ExternalSharesController' => __DIR__ . '/..' . '/../lib/Controller/ExternalSharesController.php',
+ 'OCA\\Files_Sharing\\Controller\\PublicPreviewController' => __DIR__ . '/..' . '/../lib/Controller/PublicPreviewController.php',
+ 'OCA\\Files_Sharing\\Controller\\RemoteController' => __DIR__ . '/..' . '/../lib/Controller/RemoteController.php',
+ 'OCA\\Files_Sharing\\Controller\\ShareAPIController' => __DIR__ . '/..' . '/../lib/Controller/ShareAPIController.php',
+ 'OCA\\Files_Sharing\\Controller\\ShareController' => __DIR__ . '/..' . '/../lib/Controller/ShareController.php',
+ 'OCA\\Files_Sharing\\Controller\\ShareInfoController' => __DIR__ . '/..' . '/../lib/Controller/ShareInfoController.php',
+ 'OCA\\Files_Sharing\\Controller\\ShareesAPIController' => __DIR__ . '/..' . '/../lib/Controller/ShareesAPIController.php',
+ 'OCA\\Files_Sharing\\DeleteOrphanedSharesJob' => __DIR__ . '/..' . '/../lib/DeleteOrphanedSharesJob.php',
+ 'OCA\\Files_Sharing\\Exceptions\\BrokenPath' => __DIR__ . '/..' . '/../lib/Exceptions/BrokenPath.php',
+ 'OCA\\Files_Sharing\\Exceptions\\S2SException' => __DIR__ . '/..' . '/../lib/Exceptions/S2SException.php',
+ 'OCA\\Files_Sharing\\ExpireSharesJob' => __DIR__ . '/..' . '/../lib/ExpireSharesJob.php',
+ 'OCA\\Files_Sharing\\External\\Cache' => __DIR__ . '/..' . '/../lib/External/Cache.php',
+ 'OCA\\Files_Sharing\\External\\Manager' => __DIR__ . '/..' . '/../lib/External/Manager.php',
+ 'OCA\\Files_Sharing\\External\\Mount' => __DIR__ . '/..' . '/../lib/External/Mount.php',
+ 'OCA\\Files_Sharing\\External\\MountProvider' => __DIR__ . '/..' . '/../lib/External/MountProvider.php',
+ 'OCA\\Files_Sharing\\External\\Scanner' => __DIR__ . '/..' . '/../lib/External/Scanner.php',
+ 'OCA\\Files_Sharing\\External\\Storage' => __DIR__ . '/..' . '/../lib/External/Storage.php',
+ 'OCA\\Files_Sharing\\External\\Watcher' => __DIR__ . '/..' . '/../lib/External/Watcher.php',
+ 'OCA\\Files_Sharing\\Helper' => __DIR__ . '/..' . '/../lib/Helper.php',
+ 'OCA\\Files_Sharing\\Hooks' => __DIR__ . '/..' . '/../lib/Hooks.php',
+ 'OCA\\Files_Sharing\\ISharedStorage' => __DIR__ . '/..' . '/../lib/ISharedStorage.php',
+ 'OCA\\Files_Sharing\\Middleware\\OCSShareAPIMiddleware' => __DIR__ . '/..' . '/../lib/Middleware/OCSShareAPIMiddleware.php',
+ 'OCA\\Files_Sharing\\Middleware\\ShareInfoMiddleware' => __DIR__ . '/..' . '/../lib/Middleware/ShareInfoMiddleware.php',
+ 'OCA\\Files_Sharing\\Middleware\\SharingCheckMiddleware' => __DIR__ . '/..' . '/../lib/Middleware/SharingCheckMiddleware.php',
+ 'OCA\\Files_Sharing\\Migration\\OwncloudGuestShareType' => __DIR__ . '/..' . '/../lib/Migration/OwncloudGuestShareType.php',
+ 'OCA\\Files_Sharing\\Migration\\SetPasswordColumn' => __DIR__ . '/..' . '/../lib/Migration/SetPasswordColumn.php',
+ 'OCA\\Files_Sharing\\MountProvider' => __DIR__ . '/..' . '/../lib/MountProvider.php',
+ 'OCA\\Files_Sharing\\Scanner' => __DIR__ . '/..' . '/../lib/Scanner.php',
+ 'OCA\\Files_Sharing\\ShareBackend\\File' => __DIR__ . '/..' . '/../lib/ShareBackend/File.php',
+ 'OCA\\Files_Sharing\\ShareBackend\\Folder' => __DIR__ . '/..' . '/../lib/ShareBackend/Folder.php',
+ 'OCA\\Files_Sharing\\SharedMount' => __DIR__ . '/..' . '/../lib/SharedMount.php',
+ 'OCA\\Files_Sharing\\SharedStorage' => __DIR__ . '/..' . '/../lib/SharedStorage.php',
+ 'OCA\\Files_Sharing\\Updater' => __DIR__ . '/..' . '/../lib/Updater.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitFiles_Sharing::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitFiles_Sharing::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitFiles_Sharing::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/files_sharing/css/mobile.scss b/apps/files_sharing/css/mobile.scss
index 8e58aa439c6..56f57d53263 100644
--- a/apps/files_sharing/css/mobile.scss
+++ b/apps/files_sharing/css/mobile.scss
@@ -5,11 +5,6 @@
position: absolute !important;
}
-/* hide text of download button, only show icon */
-#download-text {
- display: none;
-}
-
/* hide size and date columns */
table th#headerSize,
table td.filesize,
@@ -51,5 +46,13 @@ table td.filename .nametext {
text-overflow: ellipsis;
}
+// Hide Download label of 3-dot-menu on public share pages
+.share-menutoggle-text {
+ display: none;
+}
+#header .menutoggle {
+ padding-right: 14px;
+ background-position: center;
+}
}
diff --git a/apps/files_sharing/css/public.scss b/apps/files_sharing/css/public.scss
index 652d36f77db..51c2bc9f4ce 100644
--- a/apps/files_sharing/css/public.scss
+++ b/apps/files_sharing/css/public.scss
@@ -1,6 +1,14 @@
#content {
height: initial;
- min-height: calc(100vh - 120px);
+ min-height: calc(100vh - 160px);
+}
+
+#header .menutoggle {
+ padding: 14px;
+ padding-right: 40px;
+ background-position: right 15px center;
+ color: $color-primary-text;
+ cursor: pointer;
}
/* force layout to make sure the content element's height matches its contents' height */
@@ -78,12 +86,6 @@ thead {
margin: 0;
}
-
-.directDownload,
-.directLink {
- margin-bottom: 20px;
-}
-
/* keep long file names in one line to not overflow download button on mobile */
.directDownload #downloadFile {
white-space: nowrap;
@@ -95,14 +97,17 @@ thead {
margin-right: auto;
}
-.directLink label {
- font-weight: normal;
+.download-size {
opacity: .5;
}
-.directLink input {
- margin-left: 5px;
- width: 300px;
- max-width: 90%;
+
+#directLink-container {
+ flex-wrap: wrap;
+}
+
+#directLink {
+ margin-left: 30px;
+ flex-basis: 100%;
}
/* header buttons */
@@ -125,11 +130,11 @@ thead {
/* within #save */
#save .save-form {
position: relative;
+ margin-right: -10px;
}
#remote_address {
width: 200px;
-
margin-right: 4px;
height: 31px;
}
@@ -138,10 +143,9 @@ thead {
position: absolute;
background-color: transparent;
border: none;
- margin: 2px 4px !important;
- right: 7px;
- top: -8px;
- height: 30px;
+ margin: 0;
+ right: 0px;
+ height: 40px;
}
#public-upload .avatardiv {
@@ -220,6 +224,7 @@ thead {
position: relative;
top: -10px;
font-weight: 300;
- font-size: 12px;
+ font-size: 11px;
+ opacity: .57;
margin-top: 10px;
}
diff --git a/apps/files_sharing/css/sharetabview.scss b/apps/files_sharing/css/sharetabview.scss
index cb2bb463352..4d07e547e86 100644
--- a/apps/files_sharing/css/sharetabview.scss
+++ b/apps/files_sharing/css/sharetabview.scss
@@ -41,17 +41,6 @@
padding: 18px 0 18px 36px;
}
-/* fix clickable area because in the share tab popover the label is inside the actual menu item*/
-#shareWithList .popovermenu .shareOption {
- padding-right: 0 !important;
-}
-/* fix clickable area because in the share tab popover the label is inside the actual menu item*/
-.shareTabView .popovermenu label {
- width: 100%;
- display: inline-block;
- padding: 0 10px 0 0 !important;
-}
-
.shareTabView label {
white-space: nowrap;
}
@@ -90,29 +79,16 @@
align-items: center;
}
-#shareWithList .unshare img, #shareWithList .showCruds img {
+#shareWithList .unshare img {
vertical-align: text-bottom; /* properly align icons */
}
-#shareWithList .sharingOptionsGroup .icon-more {
+#shareWithList .sharingOptionsGroup > a .icon {
padding: 7px;
vertical-align: middle;
opacity: .5;
}
-#shareWithList .shareOption.menuitem > label:before {
- /* Checkboxes positionning */
- margin: 0 12px !important;
-}
-
-#shareWithList .unshare {
- padding: 1px 6px;
- vertical-align: text-bottom;
-}
-#shareWithList .unshare .icon {
- vertical-align: text-top;
-}
-
#shareWithList .sharingOptionsGroup .popovermenu:after {
right: 3px;
}
@@ -138,7 +114,6 @@
.shareTabView .icon-loading-small {
display: inline-block;
z-index: 1;
- margin-right: 4px;
vertical-align: text-top;
}
diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js
index 1407737d007..2142dec1218 100644
--- a/apps/files_sharing/js/public.js
+++ b/apps/files_sharing/js/public.js
@@ -116,7 +116,9 @@ OCA.Sharing.PublicApp = {
scalingup: 0
};
- var img = $('<img class="publicpreview" alt="">');
+ var imgcontainer = $('<a href="' + $('#previewURL').val()
+ + '" target="_blank"><img class="publicpreview" alt=""></a>');
+ var img = imgcontainer.find('.publicpreview');
img.css({
'max-width': previewWidth,
'max-height': previewHeight
@@ -128,7 +130,7 @@ OCA.Sharing.PublicApp = {
if (mimetype === 'image/gif' &&
(maxGifSize === -1 || fileSize <= (maxGifSize * 1024 * 1024))) {
img.attr('src', $('#downloadURL').val());
- img.appendTo('#imgframe');
+ imgcontainer.appendTo('#imgframe');
} else if (mimetype.substr(0, mimetype.indexOf('/')) === 'text' && window.btoa) {
// Undocumented Url to public WebDAV endpoint
var url = parent.location.protocol + '//' + location.host + OC.linkTo('', 'public.php/webdav');
@@ -145,11 +147,11 @@ OCA.Sharing.PublicApp = {
mimetype.substr(0, mimetype.indexOf('/')) === 'image' &&
mimetype !== 'image/svg+xml') {
img.attr('src', OC.filePath('files_sharing', 'ajax', 'publicpreview.php') + '?' + OC.buildQueryString(params));
- img.appendTo('#imgframe');
+ imgcontainer.appendTo('#imgframe');
} else if (mimetype.substr(0, mimetype.indexOf('/')) !== 'video') {
img.attr('src', OC.Util.replaceSVGIcon(mimetypeIcon));
img.attr('width', 128);
- img.appendTo('#imgframe');
+ imgcontainer.appendTo('#imgframe');
}
else if (previewSupported === 'true') {
$('#imgframe > video').attr('poster', OC.filePath('files_sharing', 'ajax', 'publicpreview.php') + '?' + OC.buildQueryString(params));
@@ -424,4 +426,18 @@ $(document).ready(function () {
return App.fileList.generatePreviewUrl(urlSpec);
};
}
+
+ $('#share-menutoggle').click(function() {
+ $('#share-menu').toggleClass('open');
+ });
+});
+
+
+$(document).mouseup(function(e) {
+ var container = $('#share-menu');
+
+ // if the target of the click isn't the container nor a descendant of the container
+ if (!container.is(e.target) && container.has(e.target).length === 0) {
+ container.removeClass('open');
+ }
});
diff --git a/apps/files_sharing/l10n/ast.js b/apps/files_sharing/l10n/ast.js
index d6a92367d91..df59201feb3 100644
--- a/apps/files_sharing/l10n/ast.js
+++ b/apps/files_sharing/l10n/ast.js
@@ -64,7 +64,6 @@ OC.L10N.register(
"Could not lock path" : "Nun pudo bloquiase'l camín",
"Can't change permissions for public share links" : "Nun puen camudase los permisos pa los enllaces de comparticiones públiques",
"Cannot increase permissions" : "Nun puen aumentase los permisos",
- "%s is publicly shared" : "%s compartióse públicamente",
"Share API is disabled" : "L'API de compartición ta desactivada",
"This share is password-protected" : "Esta compartición tien contraseña protexida",
"The password is wrong. Try again." : "La contraseña ye incorreuta. Inténtalo otra vegada.",
@@ -80,10 +79,11 @@ OC.L10N.register(
"sharing is disabled" : "la compartición ta deshabilitada",
"For more info, please ask the person who sent this link." : "Pa más información, entrúga-y a la persona qu'unvió esti enllaz",
"Download" : "Baxar",
- "Download %s" : "Descargar %s",
"Direct link" : "Enllaz direutu",
+ "Download %s" : "Descargar %s",
"Select or drop files" : "Esbilla o suelta ficheros",
"Uploading files…" : "Xubiendo ficheros...",
- "Uploaded files:" : "Ficheros xubíos:"
+ "Uploaded files:" : "Ficheros xubíos:",
+ "%s is publicly shared" : "%s compartióse públicamente"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/ast.json b/apps/files_sharing/l10n/ast.json
index a9f7d7393e0..33b4aa40e43 100644
--- a/apps/files_sharing/l10n/ast.json
+++ b/apps/files_sharing/l10n/ast.json
@@ -62,7 +62,6 @@
"Could not lock path" : "Nun pudo bloquiase'l camín",
"Can't change permissions for public share links" : "Nun puen camudase los permisos pa los enllaces de comparticiones públiques",
"Cannot increase permissions" : "Nun puen aumentase los permisos",
- "%s is publicly shared" : "%s compartióse públicamente",
"Share API is disabled" : "L'API de compartición ta desactivada",
"This share is password-protected" : "Esta compartición tien contraseña protexida",
"The password is wrong. Try again." : "La contraseña ye incorreuta. Inténtalo otra vegada.",
@@ -78,10 +77,11 @@
"sharing is disabled" : "la compartición ta deshabilitada",
"For more info, please ask the person who sent this link." : "Pa más información, entrúga-y a la persona qu'unvió esti enllaz",
"Download" : "Baxar",
- "Download %s" : "Descargar %s",
"Direct link" : "Enllaz direutu",
+ "Download %s" : "Descargar %s",
"Select or drop files" : "Esbilla o suelta ficheros",
"Uploading files…" : "Xubiendo ficheros...",
- "Uploaded files:" : "Ficheros xubíos:"
+ "Uploaded files:" : "Ficheros xubíos:",
+ "%s is publicly shared" : "%s compartióse públicamente"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/ca.js b/apps/files_sharing/l10n/ca.js
index 63d9a8399d9..51594ee5e5f 100644
--- a/apps/files_sharing/l10n/ca.js
+++ b/apps/files_sharing/l10n/ca.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "S'ha donat un paràmetre d'actualització incorrecte o no",
"Can't change permissions for public share links" : "No es poden canviar els permisos per als enllaços compartits públics",
"Cannot increase permissions" : "No es poden augmentar els permisos",
- "%s is publicly shared" : "%s es publica públicament",
"Share API is disabled" : "L'API compartida està desactivada",
"This share is password-protected" : "Aquest compartit està protegit amb contrasenya",
"The password is wrong. Try again." : "la contrasenya és incorrecta. Intenteu-ho de nou.",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "s'ha desactivat la compartició",
"For more info, please ask the person who sent this link." : "Per més informació contacteu amb qui us ha enviat l'enllaç.",
"shared by %s" : "compartit per %s",
- "Add to your Nextcloud" : "Afegeix al teu NextCloud",
"Download" : "Baixa",
- "Download %s" : "Baixa %s",
"Direct link" : "Enllaç directe",
+ "Add to your Nextcloud" : "Afegeix al teu NextCloud",
+ "Download %s" : "Baixa %s",
"Upload files to %s" : "Carrega fitxers a %s",
"Select or drop files" : "Selecciona o deixa anar els fitxers",
"Uploading files…" : "Pujant arxius...",
- "Uploaded files:" : "Arxius pujats:"
+ "Uploaded files:" : "Arxius pujats:",
+ "%s is publicly shared" : "%s es publica públicament"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/ca.json b/apps/files_sharing/l10n/ca.json
index e04d1c72556..1e85996c6c8 100644
--- a/apps/files_sharing/l10n/ca.json
+++ b/apps/files_sharing/l10n/ca.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "S'ha donat un paràmetre d'actualització incorrecte o no",
"Can't change permissions for public share links" : "No es poden canviar els permisos per als enllaços compartits públics",
"Cannot increase permissions" : "No es poden augmentar els permisos",
- "%s is publicly shared" : "%s es publica públicament",
"Share API is disabled" : "L'API compartida està desactivada",
"This share is password-protected" : "Aquest compartit està protegit amb contrasenya",
"The password is wrong. Try again." : "la contrasenya és incorrecta. Intenteu-ho de nou.",
@@ -101,13 +100,14 @@
"sharing is disabled" : "s'ha desactivat la compartició",
"For more info, please ask the person who sent this link." : "Per més informació contacteu amb qui us ha enviat l'enllaç.",
"shared by %s" : "compartit per %s",
- "Add to your Nextcloud" : "Afegeix al teu NextCloud",
"Download" : "Baixa",
- "Download %s" : "Baixa %s",
"Direct link" : "Enllaç directe",
+ "Add to your Nextcloud" : "Afegeix al teu NextCloud",
+ "Download %s" : "Baixa %s",
"Upload files to %s" : "Carrega fitxers a %s",
"Select or drop files" : "Selecciona o deixa anar els fitxers",
"Uploading files…" : "Pujant arxius...",
- "Uploaded files:" : "Arxius pujats:"
+ "Uploaded files:" : "Arxius pujats:",
+ "%s is publicly shared" : "%s es publica públicament"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/cs.js b/apps/files_sharing/l10n/cs.js
index 208db495aaa..400ea07acb0 100644
--- a/apps/files_sharing/l10n/cs.js
+++ b/apps/files_sharing/l10n/cs.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "Chyba nebo žádná aktualizace dle zadaných parametrů",
"Can't change permissions for public share links" : "Nelze změnit oprávnění pro veřejně sdílené odkazy",
"Cannot increase permissions" : "Nelze navýšit oprávnění",
- "%s is publicly shared" : "%s je veřejně sdílen",
"Share API is disabled" : "Sdílení API je zakázané",
"This share is password-protected" : "Toto sdílení je chráněno heslem",
"The password is wrong. Try again." : "Heslo není správné. Zkuste to znovu.",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "sdílení je zakázané",
"For more info, please ask the person who sent this link." : "Pro více informací kontaktujte osobu, která vám zaslala tento odkaz.",
"shared by %s" : "Sdílel %s",
- "Add to your Nextcloud" : "Přidat do Nextcloud",
"Download" : "Stáhnout",
- "Download %s" : "Stáhnout %s",
"Direct link" : "Přímý odkaz",
+ "Add to your Nextcloud" : "Přidat do Nextcloud",
+ "Download %s" : "Stáhnout %s",
"Upload files to %s" : "Nahrát soubory do %s",
"Select or drop files" : "Vyberte nebo přetáhněte soubory",
"Uploading files…" : "Probíhá nahrávání souborů...",
- "Uploaded files:" : "Nahrané soubory:"
+ "Uploaded files:" : "Nahrané soubory:",
+ "%s is publicly shared" : "%s je veřejně sdílen"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/files_sharing/l10n/cs.json b/apps/files_sharing/l10n/cs.json
index 939e9c671c1..9f2a1ecb86e 100644
--- a/apps/files_sharing/l10n/cs.json
+++ b/apps/files_sharing/l10n/cs.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "Chyba nebo žádná aktualizace dle zadaných parametrů",
"Can't change permissions for public share links" : "Nelze změnit oprávnění pro veřejně sdílené odkazy",
"Cannot increase permissions" : "Nelze navýšit oprávnění",
- "%s is publicly shared" : "%s je veřejně sdílen",
"Share API is disabled" : "Sdílení API je zakázané",
"This share is password-protected" : "Toto sdílení je chráněno heslem",
"The password is wrong. Try again." : "Heslo není správné. Zkuste to znovu.",
@@ -101,13 +100,14 @@
"sharing is disabled" : "sdílení je zakázané",
"For more info, please ask the person who sent this link." : "Pro více informací kontaktujte osobu, která vám zaslala tento odkaz.",
"shared by %s" : "Sdílel %s",
- "Add to your Nextcloud" : "Přidat do Nextcloud",
"Download" : "Stáhnout",
- "Download %s" : "Stáhnout %s",
"Direct link" : "Přímý odkaz",
+ "Add to your Nextcloud" : "Přidat do Nextcloud",
+ "Download %s" : "Stáhnout %s",
"Upload files to %s" : "Nahrát soubory do %s",
"Select or drop files" : "Vyberte nebo přetáhněte soubory",
"Uploading files…" : "Probíhá nahrávání souborů...",
- "Uploaded files:" : "Nahrané soubory:"
+ "Uploaded files:" : "Nahrané soubory:",
+ "%s is publicly shared" : "%s je veřejně sdílen"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js
index 2765042613a..7b1ca064ebb 100644
--- a/apps/files_sharing/l10n/de.js
+++ b/apps/files_sharing/l10n/de.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "Es wurde ein falscher oder kein Updateparameter angegeben",
"Can't change permissions for public share links" : "Berechtigungen für öffentlich freigegebene Links konnten nicht geändert werden",
"Cannot increase permissions" : "Berechtigungen können nicht erhöht werden",
- "%s is publicly shared" : "%s ist öffentlich geteilt",
"Share API is disabled" : "Teilen-API ist deaktivert",
"This share is password-protected" : "Freigabe ist passwortgeschützt",
"The password is wrong. Try again." : "Das Passwort ist falsch. Versuche es erneut.",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "Teilen ist deaktiviert",
"For more info, please ask the person who sent this link." : "Um nähere Informationen zu erhalten, wende dich bitte an die Person, die dir diesen Link geschickt hat.",
"shared by %s" : "von %s geteilt",
- "Add to your Nextcloud" : "Zu Deiner Nextcloud hinzufügen",
"Download" : "Herunterladen",
- "Download %s" : "Download %s",
"Direct link" : "Direkter Link",
+ "Add to your Nextcloud" : "Zu Deiner Nextcloud hinzufügen",
+ "Download %s" : "Download %s",
"Upload files to %s" : "Dateien für %s hochladen",
"Select or drop files" : "Dateien auswählen oder hierher ziehen",
"Uploading files…" : "Dateien werden hochgeladen…",
- "Uploaded files:" : "Hochgeladene Dateien: "
+ "Uploaded files:" : "Hochgeladene Dateien: ",
+ "%s is publicly shared" : "%s ist öffentlich geteilt"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json
index ec497346c84..df0fff47e27 100644
--- a/apps/files_sharing/l10n/de.json
+++ b/apps/files_sharing/l10n/de.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "Es wurde ein falscher oder kein Updateparameter angegeben",
"Can't change permissions for public share links" : "Berechtigungen für öffentlich freigegebene Links konnten nicht geändert werden",
"Cannot increase permissions" : "Berechtigungen können nicht erhöht werden",
- "%s is publicly shared" : "%s ist öffentlich geteilt",
"Share API is disabled" : "Teilen-API ist deaktivert",
"This share is password-protected" : "Freigabe ist passwortgeschützt",
"The password is wrong. Try again." : "Das Passwort ist falsch. Versuche es erneut.",
@@ -101,13 +100,14 @@
"sharing is disabled" : "Teilen ist deaktiviert",
"For more info, please ask the person who sent this link." : "Um nähere Informationen zu erhalten, wende dich bitte an die Person, die dir diesen Link geschickt hat.",
"shared by %s" : "von %s geteilt",
- "Add to your Nextcloud" : "Zu Deiner Nextcloud hinzufügen",
"Download" : "Herunterladen",
- "Download %s" : "Download %s",
"Direct link" : "Direkter Link",
+ "Add to your Nextcloud" : "Zu Deiner Nextcloud hinzufügen",
+ "Download %s" : "Download %s",
"Upload files to %s" : "Dateien für %s hochladen",
"Select or drop files" : "Dateien auswählen oder hierher ziehen",
"Uploading files…" : "Dateien werden hochgeladen…",
- "Uploaded files:" : "Hochgeladene Dateien: "
+ "Uploaded files:" : "Hochgeladene Dateien: ",
+ "%s is publicly shared" : "%s ist öffentlich geteilt"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/de_DE.js b/apps/files_sharing/l10n/de_DE.js
index cadb95af32d..a9b99fc1309 100644
--- a/apps/files_sharing/l10n/de_DE.js
+++ b/apps/files_sharing/l10n/de_DE.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "Es wurde ein falscher oder kein Updateparameter angegeben",
"Can't change permissions for public share links" : "Berechtigungen für öffentlich freigegebene Links konnten nicht geändert werden",
"Cannot increase permissions" : "Berechtigungen können nicht erhöht werden",
- "%s is publicly shared" : "%s ist öffentlich geteilt",
"Share API is disabled" : "Teilen-API ist deaktivert",
"This share is password-protected" : "Freigabe ist passwortgeschützt",
"The password is wrong. Try again." : "Das Passwort ist falsch. Bitte versuchen Sie es erneut.",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "Teilen ist deaktiviert",
"For more info, please ask the person who sent this link." : "Um nähere Informationen zu erhalten, wenden Sie sich bitte an die Person, die Ihnen diesen Link geschickt hat.",
"shared by %s" : "von %s geteilt",
- "Add to your Nextcloud" : "Zu Ihrer Nextcloud hinzufügen",
"Download" : "Herunterladen",
- "Download %s" : "Download %s",
"Direct link" : "Direkter Link",
+ "Add to your Nextcloud" : "Zu Ihrer Nextcloud hinzufügen",
+ "Download %s" : "Download %s",
"Upload files to %s" : "Dateien für %s hochladen",
"Select or drop files" : "Dateien auswählen oder hierher ziehen",
"Uploading files…" : "Dateien werden hochgeladen…",
- "Uploaded files:" : "Hochgeladene Dateien: "
+ "Uploaded files:" : "Hochgeladene Dateien: ",
+ "%s is publicly shared" : "%s ist öffentlich geteilt"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/de_DE.json b/apps/files_sharing/l10n/de_DE.json
index 8fdd54aad47..bc67d9fe3f6 100644
--- a/apps/files_sharing/l10n/de_DE.json
+++ b/apps/files_sharing/l10n/de_DE.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "Es wurde ein falscher oder kein Updateparameter angegeben",
"Can't change permissions for public share links" : "Berechtigungen für öffentlich freigegebene Links konnten nicht geändert werden",
"Cannot increase permissions" : "Berechtigungen können nicht erhöht werden",
- "%s is publicly shared" : "%s ist öffentlich geteilt",
"Share API is disabled" : "Teilen-API ist deaktivert",
"This share is password-protected" : "Freigabe ist passwortgeschützt",
"The password is wrong. Try again." : "Das Passwort ist falsch. Bitte versuchen Sie es erneut.",
@@ -101,13 +100,14 @@
"sharing is disabled" : "Teilen ist deaktiviert",
"For more info, please ask the person who sent this link." : "Um nähere Informationen zu erhalten, wenden Sie sich bitte an die Person, die Ihnen diesen Link geschickt hat.",
"shared by %s" : "von %s geteilt",
- "Add to your Nextcloud" : "Zu Ihrer Nextcloud hinzufügen",
"Download" : "Herunterladen",
- "Download %s" : "Download %s",
"Direct link" : "Direkter Link",
+ "Add to your Nextcloud" : "Zu Ihrer Nextcloud hinzufügen",
+ "Download %s" : "Download %s",
"Upload files to %s" : "Dateien für %s hochladen",
"Select or drop files" : "Dateien auswählen oder hierher ziehen",
"Uploading files…" : "Dateien werden hochgeladen…",
- "Uploaded files:" : "Hochgeladene Dateien: "
+ "Uploaded files:" : "Hochgeladene Dateien: ",
+ "%s is publicly shared" : "%s ist öffentlich geteilt"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/el.js b/apps/files_sharing/l10n/el.js
index 0ab18490214..0ca8ebf285d 100644
--- a/apps/files_sharing/l10n/el.js
+++ b/apps/files_sharing/l10n/el.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "Λάθος ή καμία παράμετρος αναβάθμισης δεν δόθηκε",
"Can't change permissions for public share links" : "Δεν μπορούμε να αλλάξουμε δικαιώματα για δημόσια διαμοιρασμένους συνδέσμους",
"Cannot increase permissions" : "Δεν μπορούμε να αυξήσουμε δικαιώματα",
- "%s is publicly shared" : "%s είναι δημόσια διαμοιρασμένο",
"Share API is disabled" : "API διαμοιρασμού είναι απενεργοποιημένο",
"This share is password-protected" : "Αυτός ο κοινόχρηστος φάκελος προστατεύεται με κωδικό",
"The password is wrong. Try again." : "Εσφαλμένος κωδικός πρόσβασης. Προσπαθήστε ξανά.",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "ο διαμοιρασμός απενεργοποιήθηκε",
"For more info, please ask the person who sent this link." : "Για περισσότερες πληροφορίες, παρακαλώ ρωτήστε το άτομο που σας έστειλε αυτόν τον σύνδεσμο.",
"shared by %s" : "Διαμοιράστηκε από 1 %s",
- "Add to your Nextcloud" : "Προσθήκη στο Nextcloud σου",
"Download" : "Λήψη",
- "Download %s" : "Λήψη %s",
"Direct link" : "Άμεσος σύνδεσμος",
+ "Add to your Nextcloud" : "Προσθήκη στο Nextcloud σου",
+ "Download %s" : "Λήψη %s",
"Upload files to %s" : "Αποστολή αρχείων σε %s",
"Select or drop files" : "Επιλέξτε ή ρίξτε αρχεία",
"Uploading files…" : "Αποστολή αρχείων ...",
- "Uploaded files:" : "Αποστολή αρχείων:"
+ "Uploaded files:" : "Αποστολή αρχείων:",
+ "%s is publicly shared" : "%s είναι δημόσια διαμοιρασμένο"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/el.json b/apps/files_sharing/l10n/el.json
index 4d3594a4193..aa70d6689c5 100644
--- a/apps/files_sharing/l10n/el.json
+++ b/apps/files_sharing/l10n/el.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "Λάθος ή καμία παράμετρος αναβάθμισης δεν δόθηκε",
"Can't change permissions for public share links" : "Δεν μπορούμε να αλλάξουμε δικαιώματα για δημόσια διαμοιρασμένους συνδέσμους",
"Cannot increase permissions" : "Δεν μπορούμε να αυξήσουμε δικαιώματα",
- "%s is publicly shared" : "%s είναι δημόσια διαμοιρασμένο",
"Share API is disabled" : "API διαμοιρασμού είναι απενεργοποιημένο",
"This share is password-protected" : "Αυτός ο κοινόχρηστος φάκελος προστατεύεται με κωδικό",
"The password is wrong. Try again." : "Εσφαλμένος κωδικός πρόσβασης. Προσπαθήστε ξανά.",
@@ -101,13 +100,14 @@
"sharing is disabled" : "ο διαμοιρασμός απενεργοποιήθηκε",
"For more info, please ask the person who sent this link." : "Για περισσότερες πληροφορίες, παρακαλώ ρωτήστε το άτομο που σας έστειλε αυτόν τον σύνδεσμο.",
"shared by %s" : "Διαμοιράστηκε από 1 %s",
- "Add to your Nextcloud" : "Προσθήκη στο Nextcloud σου",
"Download" : "Λήψη",
- "Download %s" : "Λήψη %s",
"Direct link" : "Άμεσος σύνδεσμος",
+ "Add to your Nextcloud" : "Προσθήκη στο Nextcloud σου",
+ "Download %s" : "Λήψη %s",
"Upload files to %s" : "Αποστολή αρχείων σε %s",
"Select or drop files" : "Επιλέξτε ή ρίξτε αρχεία",
"Uploading files…" : "Αποστολή αρχείων ...",
- "Uploaded files:" : "Αποστολή αρχείων:"
+ "Uploaded files:" : "Αποστολή αρχείων:",
+ "%s is publicly shared" : "%s είναι δημόσια διαμοιρασμένο"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/en_GB.js b/apps/files_sharing/l10n/en_GB.js
index 2ff10000c58..b179dc6be47 100644
--- a/apps/files_sharing/l10n/en_GB.js
+++ b/apps/files_sharing/l10n/en_GB.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "Wrong or no update parameter given",
"Can't change permissions for public share links" : "Can't change permissions for public share links",
"Cannot increase permissions" : "Cannot increase permissions",
- "%s is publicly shared" : "%s is publicly shared",
"Share API is disabled" : "Share API is disabled",
"This share is password-protected" : "This share is password-protected",
"The password is wrong. Try again." : "The password is wrong. Try again.",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "sharing is disabled",
"For more info, please ask the person who sent this link." : "For more info, please ask the person who sent this link.",
"shared by %s" : "shared by %s",
- "Add to your Nextcloud" : "Add to your Nextcloud",
"Download" : "Download",
- "Download %s" : "Download %s",
"Direct link" : "Direct link",
+ "Add to your Nextcloud" : "Add to your Nextcloud",
+ "Download %s" : "Download %s",
"Upload files to %s" : "Upload files to %s",
"Select or drop files" : "Select or drop files",
"Uploading files…" : "Uploading files…",
- "Uploaded files:" : "Uploaded files:"
+ "Uploaded files:" : "Uploaded files:",
+ "%s is publicly shared" : "%s is publicly shared"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/en_GB.json b/apps/files_sharing/l10n/en_GB.json
index b2cf0284eb8..6584ef966fc 100644
--- a/apps/files_sharing/l10n/en_GB.json
+++ b/apps/files_sharing/l10n/en_GB.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "Wrong or no update parameter given",
"Can't change permissions for public share links" : "Can't change permissions for public share links",
"Cannot increase permissions" : "Cannot increase permissions",
- "%s is publicly shared" : "%s is publicly shared",
"Share API is disabled" : "Share API is disabled",
"This share is password-protected" : "This share is password-protected",
"The password is wrong. Try again." : "The password is wrong. Try again.",
@@ -101,13 +100,14 @@
"sharing is disabled" : "sharing is disabled",
"For more info, please ask the person who sent this link." : "For more info, please ask the person who sent this link.",
"shared by %s" : "shared by %s",
- "Add to your Nextcloud" : "Add to your Nextcloud",
"Download" : "Download",
- "Download %s" : "Download %s",
"Direct link" : "Direct link",
+ "Add to your Nextcloud" : "Add to your Nextcloud",
+ "Download %s" : "Download %s",
"Upload files to %s" : "Upload files to %s",
"Select or drop files" : "Select or drop files",
"Uploading files…" : "Uploading files…",
- "Uploaded files:" : "Uploaded files:"
+ "Uploaded files:" : "Uploaded files:",
+ "%s is publicly shared" : "%s is publicly shared"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/es.js b/apps/files_sharing/l10n/es.js
index eebcbc5803b..aa8e28805aa 100644
--- a/apps/files_sharing/l10n/es.js
+++ b/apps/files_sharing/l10n/es.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "No se ha suministrado un parametro correcto",
"Can't change permissions for public share links" : "No se pueden cambiar los permisos para los enlaces de recursos compartidos públicos",
"Cannot increase permissions" : "No es posible aumentar permisos",
- "%s is publicly shared" : "%s ha sido compartido",
"Share API is disabled" : "El API de compartir está deshabilitado",
"This share is password-protected" : "Este elemento compartido está protegido por contraseña",
"The password is wrong. Try again." : "La contraseña introducida es errónea. Inténtelo de nuevo.",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "compartir está desactivado",
"For more info, please ask the person who sent this link." : "Para mayor información, contacte a la persona que le envió el enlace.",
"shared by %s" : "compartido por %s",
- "Add to your Nextcloud" : "Añadir a tu Nextcloud",
"Download" : "Descargar",
- "Download %s" : "Descargar %s",
"Direct link" : "Enlace directo",
+ "Add to your Nextcloud" : "Añadir a tu Nextcloud",
+ "Download %s" : "Descargar %s",
"Upload files to %s" : "Subir archivos a %s",
"Select or drop files" : "Seleccione o arrastre y suelte archivos",
"Uploading files…" : "Subiendo archivos...",
- "Uploaded files:" : "Archivos subidos:"
+ "Uploaded files:" : "Archivos subidos:",
+ "%s is publicly shared" : "%s ha sido compartido"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/es.json b/apps/files_sharing/l10n/es.json
index cb0baf25c65..e23fb37c490 100644
--- a/apps/files_sharing/l10n/es.json
+++ b/apps/files_sharing/l10n/es.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "No se ha suministrado un parametro correcto",
"Can't change permissions for public share links" : "No se pueden cambiar los permisos para los enlaces de recursos compartidos públicos",
"Cannot increase permissions" : "No es posible aumentar permisos",
- "%s is publicly shared" : "%s ha sido compartido",
"Share API is disabled" : "El API de compartir está deshabilitado",
"This share is password-protected" : "Este elemento compartido está protegido por contraseña",
"The password is wrong. Try again." : "La contraseña introducida es errónea. Inténtelo de nuevo.",
@@ -101,13 +100,14 @@
"sharing is disabled" : "compartir está desactivado",
"For more info, please ask the person who sent this link." : "Para mayor información, contacte a la persona que le envió el enlace.",
"shared by %s" : "compartido por %s",
- "Add to your Nextcloud" : "Añadir a tu Nextcloud",
"Download" : "Descargar",
- "Download %s" : "Descargar %s",
"Direct link" : "Enlace directo",
+ "Add to your Nextcloud" : "Añadir a tu Nextcloud",
+ "Download %s" : "Descargar %s",
"Upload files to %s" : "Subir archivos a %s",
"Select or drop files" : "Seleccione o arrastre y suelte archivos",
"Uploading files…" : "Subiendo archivos...",
- "Uploaded files:" : "Archivos subidos:"
+ "Uploaded files:" : "Archivos subidos:",
+ "%s is publicly shared" : "%s ha sido compartido"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/es_AR.js b/apps/files_sharing/l10n/es_AR.js
index 5ad72ce67cb..9857cd41ead 100644
--- a/apps/files_sharing/l10n/es_AR.js
+++ b/apps/files_sharing/l10n/es_AR.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "El parametro de actualización esta erróneo o faltante",
"Can't change permissions for public share links" : "No es posible cambiar los permisos para links públicos compartidas",
"Cannot increase permissions" : "No es posible incrementar los permisos",
- "%s is publicly shared" : "%s está compartido públicamente",
"Share API is disabled" : "El API para compartir está deshabilitado",
"This share is password-protected" : "Este elemento compartido esta protegido con contraseña",
"The password is wrong. Try again." : "La contraseña es incorrecta. Favor de intentarlo de nuevo.",
@@ -102,13 +101,14 @@ OC.L10N.register(
"the link expired" : "el link expiró",
"sharing is disabled" : "compartir está deshabilitado",
"For more info, please ask the person who sent this link." : "Para mayores informes, contacte a la persona que le envió este link.",
- "Add to your Nextcloud" : "Agregar a su Nextcloud",
"Download" : "Descargar",
- "Download %s" : "Descargar %s",
"Direct link" : "Link directa",
+ "Add to your Nextcloud" : "Agregar a su Nextcloud",
+ "Download %s" : "Descargar %s",
"Upload files to %s" : "Cargar archivos a %s",
"Select or drop files" : "Seleccione o suelte los archivos",
"Uploading files…" : "Cargando archivos...",
- "Uploaded files:" : "Archivos cargados:"
+ "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_AR.json b/apps/files_sharing/l10n/es_AR.json
index a3d2a4f389b..3adcc360168 100644
--- a/apps/files_sharing/l10n/es_AR.json
+++ b/apps/files_sharing/l10n/es_AR.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "El parametro de actualización esta erróneo o faltante",
"Can't change permissions for public share links" : "No es posible cambiar los permisos para links públicos compartidas",
"Cannot increase permissions" : "No es posible incrementar los permisos",
- "%s is publicly shared" : "%s está compartido públicamente",
"Share API is disabled" : "El API para compartir está deshabilitado",
"This share is password-protected" : "Este elemento compartido esta protegido con contraseña",
"The password is wrong. Try again." : "La contraseña es incorrecta. Favor de intentarlo de nuevo.",
@@ -100,13 +99,14 @@
"the link expired" : "el link expiró",
"sharing is disabled" : "compartir está deshabilitado",
"For more info, please ask the person who sent this link." : "Para mayores informes, contacte a la persona que le envió este link.",
- "Add to your Nextcloud" : "Agregar a su Nextcloud",
"Download" : "Descargar",
- "Download %s" : "Descargar %s",
"Direct link" : "Link directa",
+ "Add to your Nextcloud" : "Agregar a su Nextcloud",
+ "Download %s" : "Descargar %s",
"Upload files to %s" : "Cargar archivos a %s",
"Select or drop files" : "Seleccione o suelte los archivos",
"Uploading files…" : "Cargando archivos...",
- "Uploaded files:" : "Archivos cargados:"
+ "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/l10n/es_CO.js b/apps/files_sharing/l10n/es_CO.js
new file mode 100644
index 00000000000..620d498f604
--- /dev/null
+++ b/apps/files_sharing/l10n/es_CO.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_CO.json b/apps/files_sharing/l10n/es_CO.json
new file mode 100644
index 00000000000..43064dfb9c5
--- /dev/null
+++ b/apps/files_sharing/l10n/es_CO.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/l10n/es_CR.js b/apps/files_sharing/l10n/es_CR.js
new file mode 100644
index 00000000000..620d498f604
--- /dev/null
+++ b/apps/files_sharing/l10n/es_CR.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_CR.json b/apps/files_sharing/l10n/es_CR.json
new file mode 100644
index 00000000000..43064dfb9c5
--- /dev/null
+++ b/apps/files_sharing/l10n/es_CR.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/l10n/es_DO.js b/apps/files_sharing/l10n/es_DO.js
new file mode 100644
index 00000000000..620d498f604
--- /dev/null
+++ b/apps/files_sharing/l10n/es_DO.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_DO.json b/apps/files_sharing/l10n/es_DO.json
new file mode 100644
index 00000000000..43064dfb9c5
--- /dev/null
+++ b/apps/files_sharing/l10n/es_DO.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/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/l10n/es_MX.js b/apps/files_sharing/l10n/es_MX.js
index 19c5f21cb2b..620d498f604 100644
--- a/apps/files_sharing/l10n/es_MX.js
+++ b/apps/files_sharing/l10n/es_MX.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"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",
- "%s is publicly shared" : "%s está compartido públicamente",
"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.",
@@ -103,13 +102,14 @@ OC.L10N.register(
"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",
- "Add to your Nextcloud" : "Agregar a tu Nextcloud",
"Download" : "Descargar",
- "Download %s" : "Descargar %s",
"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:"
+ "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_MX.json b/apps/files_sharing/l10n/es_MX.json
index db2aaef0063..43064dfb9c5 100644
--- a/apps/files_sharing/l10n/es_MX.json
+++ b/apps/files_sharing/l10n/es_MX.json
@@ -85,7 +85,6 @@
"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",
- "%s is publicly shared" : "%s está compartido públicamente",
"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.",
@@ -101,13 +100,14 @@
"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",
- "Add to your Nextcloud" : "Agregar a tu Nextcloud",
"Download" : "Descargar",
- "Download %s" : "Descargar %s",
"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:"
+ "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/l10n/fi.js b/apps/files_sharing/l10n/fi.js
index 32b1f43b9b2..23f4d2247da 100644
--- a/apps/files_sharing/l10n/fi.js
+++ b/apps/files_sharing/l10n/fi.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "Päivitettävä parametri puuttuu tai on väärin",
"Can't change permissions for public share links" : "Julkisten jakolinkkien käyttöoikeuksia ei voi muuttaa",
"Cannot increase permissions" : "Oikeuksien lisääminen ei onnistu",
- "%s is publicly shared" : "%s on julkisesti jaettu",
"Share API is disabled" : "Jakamisrajapinta on poistettu käytöstä",
"This share is password-protected" : "Tämä jako on suojattu salasanalla",
"The password is wrong. Try again." : "Väärä salasana. Yritä uudelleen.",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "jakaminen on poistettu käytöstä",
"For more info, please ask the person who sent this link." : "Kysy lisätietoja henkilöltä, jolta sait linkin.",
"shared by %s" : "%s jakama",
- "Add to your Nextcloud" : "Lisää Nextcloudiisi",
"Download" : "Lataa",
- "Download %s" : "Lataa %s",
"Direct link" : "Suora linkki",
+ "Add to your Nextcloud" : "Lisää Nextcloudiisi",
+ "Download %s" : "Lataa %s",
"Upload files to %s" : "Lähetä tiedostoja käyttäjälle %s",
"Select or drop files" : "Valitse tai pudota tiedostoja",
"Uploading files…" : "Lähetetään tiedostoja…",
- "Uploaded files:" : "Lähetetyt tiedostot:"
+ "Uploaded files:" : "Lähetetyt tiedostot:",
+ "%s is publicly shared" : "%s on julkisesti jaettu"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/fi.json b/apps/files_sharing/l10n/fi.json
index 71dc15dd740..4c8535e9e2c 100644
--- a/apps/files_sharing/l10n/fi.json
+++ b/apps/files_sharing/l10n/fi.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "Päivitettävä parametri puuttuu tai on väärin",
"Can't change permissions for public share links" : "Julkisten jakolinkkien käyttöoikeuksia ei voi muuttaa",
"Cannot increase permissions" : "Oikeuksien lisääminen ei onnistu",
- "%s is publicly shared" : "%s on julkisesti jaettu",
"Share API is disabled" : "Jakamisrajapinta on poistettu käytöstä",
"This share is password-protected" : "Tämä jako on suojattu salasanalla",
"The password is wrong. Try again." : "Väärä salasana. Yritä uudelleen.",
@@ -101,13 +100,14 @@
"sharing is disabled" : "jakaminen on poistettu käytöstä",
"For more info, please ask the person who sent this link." : "Kysy lisätietoja henkilöltä, jolta sait linkin.",
"shared by %s" : "%s jakama",
- "Add to your Nextcloud" : "Lisää Nextcloudiisi",
"Download" : "Lataa",
- "Download %s" : "Lataa %s",
"Direct link" : "Suora linkki",
+ "Add to your Nextcloud" : "Lisää Nextcloudiisi",
+ "Download %s" : "Lataa %s",
"Upload files to %s" : "Lähetä tiedostoja käyttäjälle %s",
"Select or drop files" : "Valitse tai pudota tiedostoja",
"Uploading files…" : "Lähetetään tiedostoja…",
- "Uploaded files:" : "Lähetetyt tiedostot:"
+ "Uploaded files:" : "Lähetetyt tiedostot:",
+ "%s is publicly shared" : "%s on julkisesti jaettu"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js
index 793546e34f4..9eaae938c7a 100644
--- a/apps/files_sharing/l10n/fr.js
+++ b/apps/files_sharing/l10n/fr.js
@@ -77,7 +77,7 @@ OC.L10N.register(
"Public link sharing is disabled by the administrator" : "Le partage de lien public a été désactivé par l'administrateur",
"Public upload disabled by the administrator" : "Téléversement public désactivé par l'administrateur",
"Public upload is only possible for publicly shared folders" : "Le téléversement public est possible uniquement pour les dossiers partagés publiquement",
- "Invalid date, date format must be YYYY-MM-DD" : "Date invalide, le format doit être YYYY-MM-DD",
+ "Invalid date, date format must be YYYY-MM-DD" : "Date non valide, le format doit être DD/MM/YYYY",
"Sharing %s failed because the back end does not allow shares from type %s" : "Le partage %s a échoué parce que l'infrastructure n'autorise pas les partages du type %s",
"You cannot share to a Circle if the app is not enabled" : "Vous ne pouvez pas partager au Cercle si l'application n'est pas activée",
"Please specify a valid circle" : "Veuillez entrer un cercle valide",
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "Mauvais ou aucun paramètre donné ",
"Can't change permissions for public share links" : "Impossible de changer les permissions pour les liens de partage public",
"Cannot increase permissions" : "Impossible d'augmenter les permissions",
- "%s is publicly shared" : "%s a été partagé publiquement",
"Share API is disabled" : "l'API de partage est désactivée",
"This share is password-protected" : "Ce partage est protégé par un mot de passe",
"The password is wrong. Try again." : "Le mot de passe est incorrect. Veuillez réessayer.",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "le partage est désactivé",
"For more info, please ask the person who sent this link." : "Pour plus d'informations, veuillez contacter la personne qui a envoyé ce lien.",
"shared by %s" : "partagé par %s",
- "Add to your Nextcloud" : "Ajouter à votre Nextcloud",
"Download" : "Télécharger",
- "Download %s" : "Télécharger %s",
"Direct link" : "Lien direct",
+ "Add to your Nextcloud" : "Ajouter à votre Nextcloud",
+ "Download %s" : "Télécharger %s",
"Upload files to %s" : "Téléversement des fichiers vers %s",
"Select or drop files" : "Sélectionner ou glisser-déposer vos fichiers",
"Uploading files…" : "Téléversement des fichiers...",
- "Uploaded files:" : "Fichiers téléversés :"
+ "Uploaded files:" : "Fichiers téléversés :",
+ "%s is publicly shared" : "%s a été partagé publiquement"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json
index b0768a3d3f9..b4a3434f0ea 100644
--- a/apps/files_sharing/l10n/fr.json
+++ b/apps/files_sharing/l10n/fr.json
@@ -75,7 +75,7 @@
"Public link sharing is disabled by the administrator" : "Le partage de lien public a été désactivé par l'administrateur",
"Public upload disabled by the administrator" : "Téléversement public désactivé par l'administrateur",
"Public upload is only possible for publicly shared folders" : "Le téléversement public est possible uniquement pour les dossiers partagés publiquement",
- "Invalid date, date format must be YYYY-MM-DD" : "Date invalide, le format doit être YYYY-MM-DD",
+ "Invalid date, date format must be YYYY-MM-DD" : "Date non valide, le format doit être DD/MM/YYYY",
"Sharing %s failed because the back end does not allow shares from type %s" : "Le partage %s a échoué parce que l'infrastructure n'autorise pas les partages du type %s",
"You cannot share to a Circle if the app is not enabled" : "Vous ne pouvez pas partager au Cercle si l'application n'est pas activée",
"Please specify a valid circle" : "Veuillez entrer un cercle valide",
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "Mauvais ou aucun paramètre donné ",
"Can't change permissions for public share links" : "Impossible de changer les permissions pour les liens de partage public",
"Cannot increase permissions" : "Impossible d'augmenter les permissions",
- "%s is publicly shared" : "%s a été partagé publiquement",
"Share API is disabled" : "l'API de partage est désactivée",
"This share is password-protected" : "Ce partage est protégé par un mot de passe",
"The password is wrong. Try again." : "Le mot de passe est incorrect. Veuillez réessayer.",
@@ -101,13 +100,14 @@
"sharing is disabled" : "le partage est désactivé",
"For more info, please ask the person who sent this link." : "Pour plus d'informations, veuillez contacter la personne qui a envoyé ce lien.",
"shared by %s" : "partagé par %s",
- "Add to your Nextcloud" : "Ajouter à votre Nextcloud",
"Download" : "Télécharger",
- "Download %s" : "Télécharger %s",
"Direct link" : "Lien direct",
+ "Add to your Nextcloud" : "Ajouter à votre Nextcloud",
+ "Download %s" : "Télécharger %s",
"Upload files to %s" : "Téléversement des fichiers vers %s",
"Select or drop files" : "Sélectionner ou glisser-déposer vos fichiers",
"Uploading files…" : "Téléversement des fichiers...",
- "Uploaded files:" : "Fichiers téléversés :"
+ "Uploaded files:" : "Fichiers téléversés :",
+ "%s is publicly shared" : "%s a été partagé publiquement"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/hu.js b/apps/files_sharing/l10n/hu.js
index 7f3562e926e..9705d709fa6 100644
--- a/apps/files_sharing/l10n/hu.js
+++ b/apps/files_sharing/l10n/hu.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "Hibás vagy üres frissítési paraméter",
"Can't change permissions for public share links" : "Nem lehet módosítani a nyilvános megosztási hivatkozások jogosultságait",
"Cannot increase permissions" : "Nem lehet növelni az engedélyeket",
- "%s is publicly shared" : "%s nyilvánosan megosztva",
"Share API is disabled" : "Megosztás API letiltva",
"This share is password-protected" : "Ez egy jelszóval védett megosztás",
"The password is wrong. Try again." : "A megadott jelszó nem megfelelő. Próbálja újra!",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "letiltásra került a megosztás",
"For more info, please ask the person who sent this link." : "További információért fordulj ahhoz, aki ezt a linket küldte neked!",
"shared by %s" : "megosztotta %s",
- "Add to your Nextcloud" : "Add hozzá a Nextcloudodhoz",
"Download" : "Letöltés",
- "Download %s" : "%s letöltése",
"Direct link" : "Közvetlen hivatkozás",
+ "Add to your Nextcloud" : "Add hozzá a Nextcloudodhoz",
+ "Download %s" : "%s letöltése",
"Upload files to %s" : "Fájlok felöltése ide: %s",
"Select or drop files" : "Válassz ki vagy dobj ide fájlokat",
"Uploading files…" : "Fájlok feltöltése...",
- "Uploaded files:" : "Felöltött fájlok:"
+ "Uploaded files:" : "Felöltött fájlok:",
+ "%s is publicly shared" : "%s nyilvánosan megosztva"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/hu.json b/apps/files_sharing/l10n/hu.json
index fd33448f39b..628741239dd 100644
--- a/apps/files_sharing/l10n/hu.json
+++ b/apps/files_sharing/l10n/hu.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "Hibás vagy üres frissítési paraméter",
"Can't change permissions for public share links" : "Nem lehet módosítani a nyilvános megosztási hivatkozások jogosultságait",
"Cannot increase permissions" : "Nem lehet növelni az engedélyeket",
- "%s is publicly shared" : "%s nyilvánosan megosztva",
"Share API is disabled" : "Megosztás API letiltva",
"This share is password-protected" : "Ez egy jelszóval védett megosztás",
"The password is wrong. Try again." : "A megadott jelszó nem megfelelő. Próbálja újra!",
@@ -101,13 +100,14 @@
"sharing is disabled" : "letiltásra került a megosztás",
"For more info, please ask the person who sent this link." : "További információért fordulj ahhoz, aki ezt a linket küldte neked!",
"shared by %s" : "megosztotta %s",
- "Add to your Nextcloud" : "Add hozzá a Nextcloudodhoz",
"Download" : "Letöltés",
- "Download %s" : "%s letöltése",
"Direct link" : "Közvetlen hivatkozás",
+ "Add to your Nextcloud" : "Add hozzá a Nextcloudodhoz",
+ "Download %s" : "%s letöltése",
"Upload files to %s" : "Fájlok felöltése ide: %s",
"Select or drop files" : "Válassz ki vagy dobj ide fájlokat",
"Uploading files…" : "Fájlok feltöltése...",
- "Uploaded files:" : "Felöltött fájlok:"
+ "Uploaded files:" : "Felöltött fájlok:",
+ "%s is publicly shared" : "%s nyilvánosan megosztva"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/is.js b/apps/files_sharing/l10n/is.js
index a3380250098..1a30960d8e6 100644
--- a/apps/files_sharing/l10n/is.js
+++ b/apps/files_sharing/l10n/is.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "Rangt eða ekkert uppfærsluviðfang gefið",
"Can't change permissions for public share links" : "Ekki tókst að breyta aðgangsheimildum fyrir opinbera deilingartengla",
"Cannot increase permissions" : "Get ekki aukið aðgangsheimildir",
- "%s is publicly shared" : "%s er deilt opinberlega",
"Share API is disabled" : "Deilingar-API er óvirkt",
"This share is password-protected" : "Þessi sameign er varin með lykilorði",
"The password is wrong. Try again." : "Lykilorðið er rangt. Reyndu aftur.",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "slökkt er á skráadeilingu",
"For more info, please ask the person who sent this link." : "Til að vita meira skaltu hafa samband við þann sem sendi þér þennan tengil.",
"shared by %s" : "Deilt af %s",
- "Add to your Nextcloud" : "Bæta í þitt eigið Nextcloud",
"Download" : "Niðurhal",
- "Download %s" : "Sækja %s",
"Direct link" : "Beinn tengill",
+ "Add to your Nextcloud" : "Bæta í þitt eigið Nextcloud",
+ "Download %s" : "Sækja %s",
"Upload files to %s" : "Senda inn skrár á %s",
"Select or drop files" : "Veldu eða slepptu skrám",
"Uploading files…" : "Sendi inn skrár…",
- "Uploaded files:" : "Innsendar skrár:"
+ "Uploaded files:" : "Innsendar skrár:",
+ "%s is publicly shared" : "%s er deilt opinberlega"
},
"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);");
diff --git a/apps/files_sharing/l10n/is.json b/apps/files_sharing/l10n/is.json
index ec2ceeb231e..95756d1b509 100644
--- a/apps/files_sharing/l10n/is.json
+++ b/apps/files_sharing/l10n/is.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "Rangt eða ekkert uppfærsluviðfang gefið",
"Can't change permissions for public share links" : "Ekki tókst að breyta aðgangsheimildum fyrir opinbera deilingartengla",
"Cannot increase permissions" : "Get ekki aukið aðgangsheimildir",
- "%s is publicly shared" : "%s er deilt opinberlega",
"Share API is disabled" : "Deilingar-API er óvirkt",
"This share is password-protected" : "Þessi sameign er varin með lykilorði",
"The password is wrong. Try again." : "Lykilorðið er rangt. Reyndu aftur.",
@@ -101,13 +100,14 @@
"sharing is disabled" : "slökkt er á skráadeilingu",
"For more info, please ask the person who sent this link." : "Til að vita meira skaltu hafa samband við þann sem sendi þér þennan tengil.",
"shared by %s" : "Deilt af %s",
- "Add to your Nextcloud" : "Bæta í þitt eigið Nextcloud",
"Download" : "Niðurhal",
- "Download %s" : "Sækja %s",
"Direct link" : "Beinn tengill",
+ "Add to your Nextcloud" : "Bæta í þitt eigið Nextcloud",
+ "Download %s" : "Sækja %s",
"Upload files to %s" : "Senda inn skrár á %s",
"Select or drop files" : "Veldu eða slepptu skrám",
"Uploading files…" : "Sendi inn skrár…",
- "Uploaded files:" : "Innsendar skrár:"
+ "Uploaded files:" : "Innsendar skrár:",
+ "%s is publicly shared" : "%s er deilt opinberlega"
},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/it.js b/apps/files_sharing/l10n/it.js
index 3f2a9a968d7..8285964c9ad 100644
--- a/apps/files_sharing/l10n/it.js
+++ b/apps/files_sharing/l10n/it.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "Parametro fornito non valido o non di aggiornamento",
"Can't change permissions for public share links" : "Impossibile cambiare i permessi per i collegamenti di condivisione pubblici",
"Cannot increase permissions" : "Impossibile aumentare i permessi",
- "%s is publicly shared" : "%s è condiviso pubblicamente",
"Share API is disabled" : "API di condivisione disabilitate",
"This share is password-protected" : "Questa condivisione è protetta da password",
"The password is wrong. Try again." : "La password è errata. Prova ancora.",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "la condivisione è disabilitata",
"For more info, please ask the person who sent this link." : "Per ulteriori informazioni, chiedi alla persona che ti ha inviato il collegamento.",
"shared by %s" : "condiviso da %s",
- "Add to your Nextcloud" : "Aggiungi al tuo Nextcloud",
"Download" : "Scarica",
- "Download %s" : "Scarica %s",
"Direct link" : "Collegamento diretto",
+ "Add to your Nextcloud" : "Aggiungi al tuo Nextcloud",
+ "Download %s" : "Scarica %s",
"Upload files to %s" : "Carica file su %s",
"Select or drop files" : "Seleziona o deseleziona file",
"Uploading files…" : "Caricamento file in corso...",
- "Uploaded files:" : "File caricati:"
+ "Uploaded files:" : "File caricati:",
+ "%s is publicly shared" : "%s è condiviso pubblicamente"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json
index e45ada6a57e..01725c8b2c3 100644
--- a/apps/files_sharing/l10n/it.json
+++ b/apps/files_sharing/l10n/it.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "Parametro fornito non valido o non di aggiornamento",
"Can't change permissions for public share links" : "Impossibile cambiare i permessi per i collegamenti di condivisione pubblici",
"Cannot increase permissions" : "Impossibile aumentare i permessi",
- "%s is publicly shared" : "%s è condiviso pubblicamente",
"Share API is disabled" : "API di condivisione disabilitate",
"This share is password-protected" : "Questa condivisione è protetta da password",
"The password is wrong. Try again." : "La password è errata. Prova ancora.",
@@ -101,13 +100,14 @@
"sharing is disabled" : "la condivisione è disabilitata",
"For more info, please ask the person who sent this link." : "Per ulteriori informazioni, chiedi alla persona che ti ha inviato il collegamento.",
"shared by %s" : "condiviso da %s",
- "Add to your Nextcloud" : "Aggiungi al tuo Nextcloud",
"Download" : "Scarica",
- "Download %s" : "Scarica %s",
"Direct link" : "Collegamento diretto",
+ "Add to your Nextcloud" : "Aggiungi al tuo Nextcloud",
+ "Download %s" : "Scarica %s",
"Upload files to %s" : "Carica file su %s",
"Select or drop files" : "Seleziona o deseleziona file",
"Uploading files…" : "Caricamento file in corso...",
- "Uploaded files:" : "File caricati:"
+ "Uploaded files:" : "File caricati:",
+ "%s is publicly shared" : "%s è condiviso pubblicamente"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/ja.js b/apps/files_sharing/l10n/ja.js
index ed7cc80a913..f105aad2035 100644
--- a/apps/files_sharing/l10n/ja.js
+++ b/apps/files_sharing/l10n/ja.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "間違っている、もしくはパラメータが更新されていません",
"Can't change permissions for public share links" : "URLリンク共有のパーミッションを変更できません",
"Cannot increase permissions" : "パーミッションを追加できません",
- "%s is publicly shared" : "%s が公開共有されました",
"Share API is disabled" : "共有APIが無効です。",
"This share is password-protected" : "この共有はパスワードで保護されています",
"The password is wrong. Try again." : "パスワードが間違っています。再試行してください。",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "共有は無効になっています",
"For more info, please ask the person who sent this link." : "不明な点は、こちらのリンクの提供者に確認をお願いします。",
"shared by %s" : "%s が共有",
- "Add to your Nextcloud" : "あなたのNextcloudに追加",
"Download" : "ダウンロード",
- "Download %s" : "%s をダウンロード",
"Direct link" : "リンク",
+ "Add to your Nextcloud" : "あなたのNextcloudに追加",
+ "Download %s" : "%s をダウンロード",
"Upload files to %s" : "%s にファイルをアップロード",
"Select or drop files" : "ファイルを選択するか、ドラッグ&ドロップしてください",
"Uploading files…" : "ファイルをアップロード中...",
- "Uploaded files:" : "アップロード済ファイル:"
+ "Uploaded files:" : "アップロード済ファイル:",
+ "%s is publicly shared" : "%s が公開共有されました"
},
"nplurals=1; plural=0;");
diff --git a/apps/files_sharing/l10n/ja.json b/apps/files_sharing/l10n/ja.json
index d4d54e9423d..33861a19427 100644
--- a/apps/files_sharing/l10n/ja.json
+++ b/apps/files_sharing/l10n/ja.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "間違っている、もしくはパラメータが更新されていません",
"Can't change permissions for public share links" : "URLリンク共有のパーミッションを変更できません",
"Cannot increase permissions" : "パーミッションを追加できません",
- "%s is publicly shared" : "%s が公開共有されました",
"Share API is disabled" : "共有APIが無効です。",
"This share is password-protected" : "この共有はパスワードで保護されています",
"The password is wrong. Try again." : "パスワードが間違っています。再試行してください。",
@@ -101,13 +100,14 @@
"sharing is disabled" : "共有は無効になっています",
"For more info, please ask the person who sent this link." : "不明な点は、こちらのリンクの提供者に確認をお願いします。",
"shared by %s" : "%s が共有",
- "Add to your Nextcloud" : "あなたのNextcloudに追加",
"Download" : "ダウンロード",
- "Download %s" : "%s をダウンロード",
"Direct link" : "リンク",
+ "Add to your Nextcloud" : "あなたのNextcloudに追加",
+ "Download %s" : "%s をダウンロード",
"Upload files to %s" : "%s にファイルをアップロード",
"Select or drop files" : "ファイルを選択するか、ドラッグ&ドロップしてください",
"Uploading files…" : "ファイルをアップロード中...",
- "Uploaded files:" : "アップロード済ファイル:"
+ "Uploaded files:" : "アップロード済ファイル:",
+ "%s is publicly shared" : "%s が公開共有されました"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/ka_GE.js b/apps/files_sharing/l10n/ka_GE.js
index adeb048e89d..79766584668 100644
--- a/apps/files_sharing/l10n/ka_GE.js
+++ b/apps/files_sharing/l10n/ka_GE.js
@@ -1,11 +1,115 @@
OC.L10N.register(
"files_sharing",
{
- "Cancel" : "უარყოფა",
+ "Shared with you" : "თქვენთან გაზიარებული",
+ "Shared with others" : "სხვასთან გაზიარებული",
+ "Shared by link" : "ბმულით გაზიარებული",
+ "Nothing shared with you yet" : "თქვენთან ჯერ არაფერია გაზიარებული",
+ "Files and folders others share with you will show up here" : "აქ გამოჩნდება ფაილები და დირექტორიები რომლებსაც სხვები თქვენთნ აზიარებენ",
+ "Nothing shared yet" : "ჯერ არაფერი გაზიარებულა",
+ "Files and folders you share will show up here" : "აქ გამოჩნდება ფაილები და დირექტორიები რომლებსაც აზიარებთ თქვენ",
+ "No shared links" : "გაზიარებული ბმულები არაა",
+ "Files and folders you share by link will show up here" : "აქ გამოჩნდება ფაილები და დირექტორიები რომლებსაც ბმულით აზიარებთ თქვენ",
+ "You can upload into this folder" : "შეგიძლიათ ატვირთოთ ამ დირექტორიაში",
+ "No compatible server found at {remote}" : "თავსებადი სერვერი {remote}-ზე ვერ იქნა ნაპოვნი",
+ "Invalid server URL" : "არასწორი სერვერის URL",
+ "Failed to add the public link to your Nextcloud" : "საზოგადო ბმულის დამატება თქვენს Nextcloud-ზე ვერ მოხერხდა",
+ "Share" : "გაზიარება",
+ "No expiration date set" : "გაუქმების თარიღი არაა დაყენებული",
"Shared by" : "აზიარებს",
"Sharing" : "გაზიარება",
+ "File shares" : "ფაილის გაზიარებები",
+ "Downloaded via public link" : "გადმოწერილია საზოგადო ბმულით",
+ "Downloaded by {email}" : "გადმოწერა {email}-მ",
+ "{file} downloaded via public link" : "{file} გადმოწერილია საზოგადო ბმულით",
+ "{email} downloaded {file}" : "{email}-მა გადმოწერა {file}",
+ "Shared with group {group}" : "გაზიარებულია ჯგუფთან {group}",
+ "Removed share for group {group}" : "გაზიარება {group}-თან შეწყდა",
+ "{actor} shared with group {group}" : "{actor}-მა გააზიარა ჯგუფთან {group}",
+ "{actor} removed share for group {group}" : "{actor}-მა შეწყვიტა გაზიარება ჯგუფთან {group}",
+ "You shared {file} with group {group}" : "თქვენ გააზიარეთ {file} ჯგუფთან {group}",
+ "You removed group {group} from {file}" : "თქვენ მოაშორეთ ჯგუფი {group} ფაილს {file}",
+ "{actor} shared {file} with group {group}" : "{actor}-მა გააზიარა ფაილი {file} ჯგუფთან {group}",
+ "{actor} removed group {group} from {file}" : "{actor}-მა მოაშორა ჯგუფი {group} ფაილს {file}",
+ "Shared as public link" : "გააზიარა როგორც საზოგადო ბმული",
+ "Removed public link" : "გააუქმა საზოგადო ბმული",
+ "Public link expired" : "საზოგადო ბმულს გაუვიდა ვადა",
+ "{actor} shared as public link" : "{actor}-მა გააზიარა საზოგადო ბმულად",
+ "{actor} removed public link" : "{actor}-მა გააუქმა საზოგადო ბმული",
+ "Public link of {actor} expired" : "{actor}-ის საზოგადო ბმულს გაუვიდა ვადა",
+ "You shared {file} as public link" : "თქვენ საზოგადო ბმულის სახით გააზიარეთ {file}",
+ "You removed public link for {file}" : "თქვენ გააუქმეთ საზოგადო ბმული ფაილისთვის {file}",
+ "Public link expired for {file}" : "საზოგადო ბმულს ფაილისთვის {file} გაუვიდა ვადა",
+ "{actor} shared {file} as public link" : "{actor}-მა საზოგადო ბმულის სახით გააზიარა {file}",
+ "{actor} removed public link for {file}" : "{actor}-მა გააუქმა საზოგადო ბმული ფაილისთვის {file}",
+ "Public link of {actor} for {file} expired" : "{actor}-ის საზოგადო ბმულს ფაილზე {file} გაუვიდა ვადა",
+ "{user} accepted the remote share" : "{user}-მა მიიღო დისტანციური გაზიარება",
+ "{user} declined the remote share" : "{user}-მა უარყო დისტანციური გაზიარება",
+ "You received a new remote share {file} from {user}" : "თქვენ მიიღეთ ახალი დისტანციური გაზიარება {file} მომხმარებლისგან {user}",
+ "{user} accepted the remote share of {file}" : "{user}-მა მიიღო დისტანციური გაზიარება ფაილზე {file}",
+ "{user} declined the remote share of {file}" : "{user}-მა უარყო დისტანციური გაზიარება ფალზე {file}",
+ "{user} unshared {file} from you" : "{user}-მა შეწყვიტა ფაილის {file} გაზიარება თქვენთან",
+ "Shared with {user}" : "გაზიარებული {user}-თან",
+ "Removed share for {user}" : "შეწყდა გაზიარება {user}-თან",
+ "{actor} shared with {user}" : "{actor}-გააზიარა {user}-თან",
+ "{actor} removed share for {user}" : "{actor}-მა შეწყვიტა გაზიარება {user}-თან",
+ "Shared by {actor}" : "გააზიარა {actor}-მა",
+ "{actor} removed share" : "{actor}-მა შეწყვიტა გაზიარება",
+ "You shared {file} with {user}" : "თქვენ გააზიარეთ ფაილი {file} მომხმარებელთან {user}",
+ "You removed {user} from {file}" : "თქვენ ჩამოაშორეთ მომხმარებელი {user} ფაილს {file}",
+ "{actor} shared {file} with {user}" : "{actor}-მა გააზიარა ფაილი {file} მომხმარებელთან {user}",
+ "{actor} removed {user} from {file}" : "{actor}-მა ჩამოაშორა მომხმარებელი {user} ფაილს {file}",
+ "{actor} shared {file} with you" : "{actor}-მა თქვენთან გააზიარა {file}",
+ "{actor} removed you from {file}" : "{actor} ჩამოგაშორათ ფაილს {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "ელ-ფოსტით ან საზოგადო ბმულით გაზიარბული ფაილი ან დირექტორია <strong>გადმოწერილ იქნა</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "ფაილი ან დირექტორია გაზიარდა <strong>სხვა სერვერიდან</strong>",
+ "A file or folder has been <strong>shared</strong>" : "ფაილი ან დირექტორია <strong>გაზიარებულ იქნა</strong>",
+ "Wrong share ID, share doesn't exist" : "არასწორი გაზიარების ID, გაზიარება არ არსებობს",
+ "could not delete share" : "გაზიარების გაუქმება ვერ მოხერხდა",
+ "Could not delete share" : "გაზიარების გაუქმება ვერ მოხერხდა",
+ "Please specify a file or folder path" : "გთხოვთ მიუთითოთ ფაილის ან დირექტორიის მისამართი",
+ "Wrong path, file/folder doesn't exist" : "არასწორი მისამართი, ფაილი/დირქტორია არ არსებობს",
+ "Could not create share" : "გაზიარება ვერ შეიქმნა",
+ "invalid permissions" : "არასწორი უფლებები",
+ "Please specify a valid user" : "გთხოვთ მიუთითოთ სწორი მომხმარებელი",
+ "Group sharing is disabled by the administrator" : "ჯგუფური გაზიარება ადმინისტრატორის მიერ არაა ამოქმედებული",
+ "Please specify a valid group" : "გთხოვთ მიუთითოთ სწორი ჯგუფი",
+ "Public link sharing is disabled by the administrator" : "საზოგადი ბმულად გაზიარება ადმინისტრატორის მიერ არაა ამოქმდებეული",
+ "Public upload disabled by the administrator" : "საზოგადო ატვირთვა ადმინისტრატორის მიერ არაა ამოქმედებული",
+ "Public upload is only possible for publicly shared folders" : "საზოგადო ატვირთვა შესაძლებელია მხოლოდ საზოგადოდ გაზიარებულ დირექტორიებზე",
+ "Invalid date, date format must be YYYY-MM-DD" : "არასწორი თარიღი, თარიღის ფორმატი უნდა იყოს წწწწ-თთ-დდ",
+ "Sharing %s failed because the back end does not allow shares from type %s" : "გაზიარება %s არ მოხერხდა, რადგანაც ბექენდი არ იღებს გაზიარებებს ტიპით %s",
+ "You cannot share to a Circle if the app is not enabled" : "წრეს ვერ გაუზიარებთ თუ აპლიკაცია არაა მოქმედი",
+ "Please specify a valid circle" : "გთხოვთ მიუთითოთ სწორი წრე",
+ "Unknown share type" : "ამოუცნობი გაზიარების სახეობა",
+ "Not a directory" : "არაა დირექტორია",
+ "Could not lock path" : "მისამართი ვერ ჩაიკეტა",
+ "Wrong or no update parameter given" : "არასწორი ან განახლების პარამეტრის არარსებობა",
+ "Can't change permissions for public share links" : "უფლებები საზოგადოდ გაზიარებულ ბმულზე ვერ შეიცვალა",
+ "Cannot increase permissions" : "უფლებების გაზრდა ვერ მოხერხდა",
+ "Share API is disabled" : "გაზიარების API არაა მოქმედი",
+ "This share is password-protected" : "ეს გაზიარება დაცულია პაროლით",
+ "The password is wrong. Try again." : "პაროლი არასწორია. სცადეთ ახლიდან",
"Password" : "პაროლი",
+ "No entries found in this folder" : "ამ დირექტორიაშ შენატანები ვერ მოიძებნა",
"Name" : "სახელი",
- "Download" : "ჩამოტვირთვა"
+ "Share time" : "გაზიარების დრო",
+ "Expiration date" : "გაუქმების თარიღი",
+ "Sorry, this link doesn’t seem to work anymore." : "ბოდიში, ეს ბმული აღარ მოქმედებს.",
+ "Reasons might be:" : "შესაძლო მიზეზებია:",
+ "the item was removed" : "ობიექტი გაუქმდა",
+ "the link expired" : "ბმულს ვადა გაუვიდა",
+ "sharing is disabled" : "გაზიარება არაა მოქმედი",
+ "For more info, please ask the person who sent this link." : "მეტი ინფრმაციისთვის, გთხოვთ ჰკითხოთ ადამიანს ვინც გამოგიგზავნათ ეს ბმული.",
+ "shared by %s" : "გააზიარა %s-მა",
+ "Download" : "ჩამოტვირთვა",
+ "Direct link" : "პირდაპირი ბმული",
+ "Add to your Nextcloud" : "თქვენს Nextcloud-ში დამატება",
+ "Download %s" : "%s-ის გადმოწერა",
+ "Upload files to %s" : "ფაილების ატვირთვა %s-ში",
+ "Select or drop files" : "აირჩიეთ ან გადმოიტანეთ ფაილები",
+ "Uploading files…" : "ფაილების ატვირთვა...",
+ "Uploaded files:" : "ფაილების ატვირთვა:",
+ "%s is publicly shared" : "%s საზოგადოდ გაზიარებულია"
},
"nplurals=1; plural=0;");
diff --git a/apps/files_sharing/l10n/ka_GE.json b/apps/files_sharing/l10n/ka_GE.json
index 5660d3b1a9d..0fcd0a17912 100644
--- a/apps/files_sharing/l10n/ka_GE.json
+++ b/apps/files_sharing/l10n/ka_GE.json
@@ -1,9 +1,113 @@
{ "translations": {
- "Cancel" : "უარყოფა",
+ "Shared with you" : "თქვენთან გაზიარებული",
+ "Shared with others" : "სხვასთან გაზიარებული",
+ "Shared by link" : "ბმულით გაზიარებული",
+ "Nothing shared with you yet" : "თქვენთან ჯერ არაფერია გაზიარებული",
+ "Files and folders others share with you will show up here" : "აქ გამოჩნდება ფაილები და დირექტორიები რომლებსაც სხვები თქვენთნ აზიარებენ",
+ "Nothing shared yet" : "ჯერ არაფერი გაზიარებულა",
+ "Files and folders you share will show up here" : "აქ გამოჩნდება ფაილები და დირექტორიები რომლებსაც აზიარებთ თქვენ",
+ "No shared links" : "გაზიარებული ბმულები არაა",
+ "Files and folders you share by link will show up here" : "აქ გამოჩნდება ფაილები და დირექტორიები რომლებსაც ბმულით აზიარებთ თქვენ",
+ "You can upload into this folder" : "შეგიძლიათ ატვირთოთ ამ დირექტორიაში",
+ "No compatible server found at {remote}" : "თავსებადი სერვერი {remote}-ზე ვერ იქნა ნაპოვნი",
+ "Invalid server URL" : "არასწორი სერვერის URL",
+ "Failed to add the public link to your Nextcloud" : "საზოგადო ბმულის დამატება თქვენს Nextcloud-ზე ვერ მოხერხდა",
+ "Share" : "გაზიარება",
+ "No expiration date set" : "გაუქმების თარიღი არაა დაყენებული",
"Shared by" : "აზიარებს",
"Sharing" : "გაზიარება",
+ "File shares" : "ფაილის გაზიარებები",
+ "Downloaded via public link" : "გადმოწერილია საზოგადო ბმულით",
+ "Downloaded by {email}" : "გადმოწერა {email}-მ",
+ "{file} downloaded via public link" : "{file} გადმოწერილია საზოგადო ბმულით",
+ "{email} downloaded {file}" : "{email}-მა გადმოწერა {file}",
+ "Shared with group {group}" : "გაზიარებულია ჯგუფთან {group}",
+ "Removed share for group {group}" : "გაზიარება {group}-თან შეწყდა",
+ "{actor} shared with group {group}" : "{actor}-მა გააზიარა ჯგუფთან {group}",
+ "{actor} removed share for group {group}" : "{actor}-მა შეწყვიტა გაზიარება ჯგუფთან {group}",
+ "You shared {file} with group {group}" : "თქვენ გააზიარეთ {file} ჯგუფთან {group}",
+ "You removed group {group} from {file}" : "თქვენ მოაშორეთ ჯგუფი {group} ფაილს {file}",
+ "{actor} shared {file} with group {group}" : "{actor}-მა გააზიარა ფაილი {file} ჯგუფთან {group}",
+ "{actor} removed group {group} from {file}" : "{actor}-მა მოაშორა ჯგუფი {group} ფაილს {file}",
+ "Shared as public link" : "გააზიარა როგორც საზოგადო ბმული",
+ "Removed public link" : "გააუქმა საზოგადო ბმული",
+ "Public link expired" : "საზოგადო ბმულს გაუვიდა ვადა",
+ "{actor} shared as public link" : "{actor}-მა გააზიარა საზოგადო ბმულად",
+ "{actor} removed public link" : "{actor}-მა გააუქმა საზოგადო ბმული",
+ "Public link of {actor} expired" : "{actor}-ის საზოგადო ბმულს გაუვიდა ვადა",
+ "You shared {file} as public link" : "თქვენ საზოგადო ბმულის სახით გააზიარეთ {file}",
+ "You removed public link for {file}" : "თქვენ გააუქმეთ საზოგადო ბმული ფაილისთვის {file}",
+ "Public link expired for {file}" : "საზოგადო ბმულს ფაილისთვის {file} გაუვიდა ვადა",
+ "{actor} shared {file} as public link" : "{actor}-მა საზოგადო ბმულის სახით გააზიარა {file}",
+ "{actor} removed public link for {file}" : "{actor}-მა გააუქმა საზოგადო ბმული ფაილისთვის {file}",
+ "Public link of {actor} for {file} expired" : "{actor}-ის საზოგადო ბმულს ფაილზე {file} გაუვიდა ვადა",
+ "{user} accepted the remote share" : "{user}-მა მიიღო დისტანციური გაზიარება",
+ "{user} declined the remote share" : "{user}-მა უარყო დისტანციური გაზიარება",
+ "You received a new remote share {file} from {user}" : "თქვენ მიიღეთ ახალი დისტანციური გაზიარება {file} მომხმარებლისგან {user}",
+ "{user} accepted the remote share of {file}" : "{user}-მა მიიღო დისტანციური გაზიარება ფაილზე {file}",
+ "{user} declined the remote share of {file}" : "{user}-მა უარყო დისტანციური გაზიარება ფალზე {file}",
+ "{user} unshared {file} from you" : "{user}-მა შეწყვიტა ფაილის {file} გაზიარება თქვენთან",
+ "Shared with {user}" : "გაზიარებული {user}-თან",
+ "Removed share for {user}" : "შეწყდა გაზიარება {user}-თან",
+ "{actor} shared with {user}" : "{actor}-გააზიარა {user}-თან",
+ "{actor} removed share for {user}" : "{actor}-მა შეწყვიტა გაზიარება {user}-თან",
+ "Shared by {actor}" : "გააზიარა {actor}-მა",
+ "{actor} removed share" : "{actor}-მა შეწყვიტა გაზიარება",
+ "You shared {file} with {user}" : "თქვენ გააზიარეთ ფაილი {file} მომხმარებელთან {user}",
+ "You removed {user} from {file}" : "თქვენ ჩამოაშორეთ მომხმარებელი {user} ფაილს {file}",
+ "{actor} shared {file} with {user}" : "{actor}-მა გააზიარა ფაილი {file} მომხმარებელთან {user}",
+ "{actor} removed {user} from {file}" : "{actor}-მა ჩამოაშორა მომხმარებელი {user} ფაილს {file}",
+ "{actor} shared {file} with you" : "{actor}-მა თქვენთან გააზიარა {file}",
+ "{actor} removed you from {file}" : "{actor} ჩამოგაშორათ ფაილს {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "ელ-ფოსტით ან საზოგადო ბმულით გაზიარბული ფაილი ან დირექტორია <strong>გადმოწერილ იქნა</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "ფაილი ან დირექტორია გაზიარდა <strong>სხვა სერვერიდან</strong>",
+ "A file or folder has been <strong>shared</strong>" : "ფაილი ან დირექტორია <strong>გაზიარებულ იქნა</strong>",
+ "Wrong share ID, share doesn't exist" : "არასწორი გაზიარების ID, გაზიარება არ არსებობს",
+ "could not delete share" : "გაზიარების გაუქმება ვერ მოხერხდა",
+ "Could not delete share" : "გაზიარების გაუქმება ვერ მოხერხდა",
+ "Please specify a file or folder path" : "გთხოვთ მიუთითოთ ფაილის ან დირექტორიის მისამართი",
+ "Wrong path, file/folder doesn't exist" : "არასწორი მისამართი, ფაილი/დირქტორია არ არსებობს",
+ "Could not create share" : "გაზიარება ვერ შეიქმნა",
+ "invalid permissions" : "არასწორი უფლებები",
+ "Please specify a valid user" : "გთხოვთ მიუთითოთ სწორი მომხმარებელი",
+ "Group sharing is disabled by the administrator" : "ჯგუფური გაზიარება ადმინისტრატორის მიერ არაა ამოქმედებული",
+ "Please specify a valid group" : "გთხოვთ მიუთითოთ სწორი ჯგუფი",
+ "Public link sharing is disabled by the administrator" : "საზოგადი ბმულად გაზიარება ადმინისტრატორის მიერ არაა ამოქმდებეული",
+ "Public upload disabled by the administrator" : "საზოგადო ატვირთვა ადმინისტრატორის მიერ არაა ამოქმედებული",
+ "Public upload is only possible for publicly shared folders" : "საზოგადო ატვირთვა შესაძლებელია მხოლოდ საზოგადოდ გაზიარებულ დირექტორიებზე",
+ "Invalid date, date format must be YYYY-MM-DD" : "არასწორი თარიღი, თარიღის ფორმატი უნდა იყოს წწწწ-თთ-დდ",
+ "Sharing %s failed because the back end does not allow shares from type %s" : "გაზიარება %s არ მოხერხდა, რადგანაც ბექენდი არ იღებს გაზიარებებს ტიპით %s",
+ "You cannot share to a Circle if the app is not enabled" : "წრეს ვერ გაუზიარებთ თუ აპლიკაცია არაა მოქმედი",
+ "Please specify a valid circle" : "გთხოვთ მიუთითოთ სწორი წრე",
+ "Unknown share type" : "ამოუცნობი გაზიარების სახეობა",
+ "Not a directory" : "არაა დირექტორია",
+ "Could not lock path" : "მისამართი ვერ ჩაიკეტა",
+ "Wrong or no update parameter given" : "არასწორი ან განახლების პარამეტრის არარსებობა",
+ "Can't change permissions for public share links" : "უფლებები საზოგადოდ გაზიარებულ ბმულზე ვერ შეიცვალა",
+ "Cannot increase permissions" : "უფლებების გაზრდა ვერ მოხერხდა",
+ "Share API is disabled" : "გაზიარების API არაა მოქმედი",
+ "This share is password-protected" : "ეს გაზიარება დაცულია პაროლით",
+ "The password is wrong. Try again." : "პაროლი არასწორია. სცადეთ ახლიდან",
"Password" : "პაროლი",
+ "No entries found in this folder" : "ამ დირექტორიაშ შენატანები ვერ მოიძებნა",
"Name" : "სახელი",
- "Download" : "ჩამოტვირთვა"
+ "Share time" : "გაზიარების დრო",
+ "Expiration date" : "გაუქმების თარიღი",
+ "Sorry, this link doesn’t seem to work anymore." : "ბოდიში, ეს ბმული აღარ მოქმედებს.",
+ "Reasons might be:" : "შესაძლო მიზეზებია:",
+ "the item was removed" : "ობიექტი გაუქმდა",
+ "the link expired" : "ბმულს ვადა გაუვიდა",
+ "sharing is disabled" : "გაზიარება არაა მოქმედი",
+ "For more info, please ask the person who sent this link." : "მეტი ინფრმაციისთვის, გთხოვთ ჰკითხოთ ადამიანს ვინც გამოგიგზავნათ ეს ბმული.",
+ "shared by %s" : "გააზიარა %s-მა",
+ "Download" : "ჩამოტვირთვა",
+ "Direct link" : "პირდაპირი ბმული",
+ "Add to your Nextcloud" : "თქვენს Nextcloud-ში დამატება",
+ "Download %s" : "%s-ის გადმოწერა",
+ "Upload files to %s" : "ფაილების ატვირთვა %s-ში",
+ "Select or drop files" : "აირჩიეთ ან გადმოიტანეთ ფაილები",
+ "Uploading files…" : "ფაილების ატვირთვა...",
+ "Uploaded files:" : "ფაილების ატვირთვა:",
+ "%s is publicly shared" : "%s საზოგადოდ გაზიარებულია"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/ko.js b/apps/files_sharing/l10n/ko.js
index c3ebc005855..aad92ab9ef6 100644
--- a/apps/files_sharing/l10n/ko.js
+++ b/apps/files_sharing/l10n/ko.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "업데이트 인자가 잘못되었거나 지정되지 않았음",
"Can't change permissions for public share links" : "공개 공유 링크의 권한을 변경할 수 없음",
"Cannot increase permissions" : "권한을 늘릴 수 없음",
- "%s is publicly shared" : "%s이(가) 공개 공유됨",
"Share API is disabled" : "공유 API가 비활성화됨",
"This share is password-protected" : "이 공유는 암호로 보호되어 있습니다",
"The password is wrong. Try again." : "암호가 잘못되었습니다. 다시 입력해 주십시오.",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "공유가 비활성화됨",
"For more info, please ask the person who sent this link." : "자세한 정보는 링크를 보낸 사람에게 문의하십시오.",
"shared by %s" : "%s에 의해 공유됨",
- "Add to your Nextcloud" : "내 Nextcloud에 추가",
"Download" : "다운로드",
- "Download %s" : "%s 다운로드",
"Direct link" : "직접 링크",
+ "Add to your Nextcloud" : "내 Nextcloud에 추가",
+ "Download %s" : "%s 다운로드",
"Upload files to %s" : "%s에 파일 업로드",
"Select or drop files" : "파일을 선택하거나 끌어다 놓기",
"Uploading files…" : "파일 업로드 중…",
- "Uploaded files:" : "업로드한 파일:"
+ "Uploaded files:" : "업로드한 파일:",
+ "%s is publicly shared" : "%s이(가) 공개 공유됨"
},
"nplurals=1; plural=0;");
diff --git a/apps/files_sharing/l10n/ko.json b/apps/files_sharing/l10n/ko.json
index adaa166da8e..d60145d5faf 100644
--- a/apps/files_sharing/l10n/ko.json
+++ b/apps/files_sharing/l10n/ko.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "업데이트 인자가 잘못되었거나 지정되지 않았음",
"Can't change permissions for public share links" : "공개 공유 링크의 권한을 변경할 수 없음",
"Cannot increase permissions" : "권한을 늘릴 수 없음",
- "%s is publicly shared" : "%s이(가) 공개 공유됨",
"Share API is disabled" : "공유 API가 비활성화됨",
"This share is password-protected" : "이 공유는 암호로 보호되어 있습니다",
"The password is wrong. Try again." : "암호가 잘못되었습니다. 다시 입력해 주십시오.",
@@ -101,13 +100,14 @@
"sharing is disabled" : "공유가 비활성화됨",
"For more info, please ask the person who sent this link." : "자세한 정보는 링크를 보낸 사람에게 문의하십시오.",
"shared by %s" : "%s에 의해 공유됨",
- "Add to your Nextcloud" : "내 Nextcloud에 추가",
"Download" : "다운로드",
- "Download %s" : "%s 다운로드",
"Direct link" : "직접 링크",
+ "Add to your Nextcloud" : "내 Nextcloud에 추가",
+ "Download %s" : "%s 다운로드",
"Upload files to %s" : "%s에 파일 업로드",
"Select or drop files" : "파일을 선택하거나 끌어다 놓기",
"Uploading files…" : "파일 업로드 중…",
- "Uploaded files:" : "업로드한 파일:"
+ "Uploaded files:" : "업로드한 파일:",
+ "%s is publicly shared" : "%s이(가) 공개 공유됨"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/lt_LT.js b/apps/files_sharing/l10n/lt_LT.js
index 1cca70a2c5f..d4826d8aaaf 100644
--- a/apps/files_sharing/l10n/lt_LT.js
+++ b/apps/files_sharing/l10n/lt_LT.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "Neperduoti atnaujinimo parametrai",
"Can't change permissions for public share links" : "Negalima keisti leidimų viešai bendrinamoms nuorodoms",
"Cannot increase permissions" : "Negalima pridėti papildomų leidimų",
- "%s is publicly shared" : "%s yra bendrinamas viešai",
"Share API is disabled" : "Bendrinimo API yra išjungtas",
"This share is password-protected" : "Turinys apsaugotas slaptažodžiu",
"The password is wrong. Try again." : "Slaptažodis neteisingas. Bandykite dar kartą.",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "dalinimasis yra išjungtas",
"For more info, please ask the person who sent this link." : "Dėl tikslesnės informacijos susisiekite su asmeniu atsiuntusiu nuorodą.",
"shared by %s" : "pasidalino %s",
- "Add to your Nextcloud" : "Pridėti į jūsų NextCloud",
"Download" : "Atsisiųsti",
- "Download %s" : "Atsisiųsti %s",
"Direct link" : "Tiesioginė nuoroda",
+ "Add to your Nextcloud" : "Pridėti į jūsų NextCloud",
+ "Download %s" : "Atsisiųsti %s",
"Upload files to %s" : "Įkelti duomenis į %s",
"Select or drop files" : "Pasirinkite arba vilkite failus",
"Uploading files…" : "Įkeliami failai…",
- "Uploaded files:" : "Įkelti failai:"
+ "Uploaded files:" : "Įkelti failai:",
+ "%s is publicly shared" : "%s yra bendrinamas viešai"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files_sharing/l10n/lt_LT.json b/apps/files_sharing/l10n/lt_LT.json
index 6f09a84cda2..2f82d3586bf 100644
--- a/apps/files_sharing/l10n/lt_LT.json
+++ b/apps/files_sharing/l10n/lt_LT.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "Neperduoti atnaujinimo parametrai",
"Can't change permissions for public share links" : "Negalima keisti leidimų viešai bendrinamoms nuorodoms",
"Cannot increase permissions" : "Negalima pridėti papildomų leidimų",
- "%s is publicly shared" : "%s yra bendrinamas viešai",
"Share API is disabled" : "Bendrinimo API yra išjungtas",
"This share is password-protected" : "Turinys apsaugotas slaptažodžiu",
"The password is wrong. Try again." : "Slaptažodis neteisingas. Bandykite dar kartą.",
@@ -101,13 +100,14 @@
"sharing is disabled" : "dalinimasis yra išjungtas",
"For more info, please ask the person who sent this link." : "Dėl tikslesnės informacijos susisiekite su asmeniu atsiuntusiu nuorodą.",
"shared by %s" : "pasidalino %s",
- "Add to your Nextcloud" : "Pridėti į jūsų NextCloud",
"Download" : "Atsisiųsti",
- "Download %s" : "Atsisiųsti %s",
"Direct link" : "Tiesioginė nuoroda",
+ "Add to your Nextcloud" : "Pridėti į jūsų NextCloud",
+ "Download %s" : "Atsisiųsti %s",
"Upload files to %s" : "Įkelti duomenis į %s",
"Select or drop files" : "Pasirinkite arba vilkite failus",
"Uploading files…" : "Įkeliami failai…",
- "Uploaded files:" : "Įkelti failai:"
+ "Uploaded files:" : "Įkelti failai:",
+ "%s is publicly shared" : "%s yra bendrinamas viešai"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/nb.js b/apps/files_sharing/l10n/nb.js
index 493dccb6054..8541f92d474 100644
--- a/apps/files_sharing/l10n/nb.js
+++ b/apps/files_sharing/l10n/nb.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "Feil eller ingen parametre for oppdatering er angitt",
"Can't change permissions for public share links" : "Kan ikke endre rettigheter for offentlige lenker",
"Cannot increase permissions" : "Kan ikke øke tillatelser",
- "%s is publicly shared" : "%s er delt offentlig",
"Share API is disabled" : "Deling API er deaktivert",
"This share is password-protected" : "Denne delingen er passordbeskyttet",
"The password is wrong. Try again." : "Passordet er feil. Prøv på nytt.",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "deling er avskrudd",
"For more info, please ask the person who sent this link." : "For mer informasjon, spør personen som sendte lenken.",
"shared by %s" : "delt av %s",
- "Add to your Nextcloud" : "Legg til i din Nextcloud",
"Download" : "Last ned",
- "Download %s" : "Last ned %s",
"Direct link" : "Direkte lenke",
+ "Add to your Nextcloud" : "Legg til i din Nextcloud",
+ "Download %s" : "Last ned %s",
"Upload files to %s" : "Last opp filer til %s",
"Select or drop files" : "Velg eller slipp filer",
"Uploading files…" : "Laster opp filer...",
- "Uploaded files:" : "Opplastede filer:"
+ "Uploaded files:" : "Opplastede filer:",
+ "%s is publicly shared" : "%s er delt offentlig"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/nb.json b/apps/files_sharing/l10n/nb.json
index 32e0d0eadb7..b2d107be8a9 100644
--- a/apps/files_sharing/l10n/nb.json
+++ b/apps/files_sharing/l10n/nb.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "Feil eller ingen parametre for oppdatering er angitt",
"Can't change permissions for public share links" : "Kan ikke endre rettigheter for offentlige lenker",
"Cannot increase permissions" : "Kan ikke øke tillatelser",
- "%s is publicly shared" : "%s er delt offentlig",
"Share API is disabled" : "Deling API er deaktivert",
"This share is password-protected" : "Denne delingen er passordbeskyttet",
"The password is wrong. Try again." : "Passordet er feil. Prøv på nytt.",
@@ -101,13 +100,14 @@
"sharing is disabled" : "deling er avskrudd",
"For more info, please ask the person who sent this link." : "For mer informasjon, spør personen som sendte lenken.",
"shared by %s" : "delt av %s",
- "Add to your Nextcloud" : "Legg til i din Nextcloud",
"Download" : "Last ned",
- "Download %s" : "Last ned %s",
"Direct link" : "Direkte lenke",
+ "Add to your Nextcloud" : "Legg til i din Nextcloud",
+ "Download %s" : "Last ned %s",
"Upload files to %s" : "Last opp filer til %s",
"Select or drop files" : "Velg eller slipp filer",
"Uploading files…" : "Laster opp filer...",
- "Uploaded files:" : "Opplastede filer:"
+ "Uploaded files:" : "Opplastede filer:",
+ "%s is publicly shared" : "%s er delt offentlig"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/nl.js b/apps/files_sharing/l10n/nl.js
index 42dca7a41f6..e9d07a4999b 100644
--- a/apps/files_sharing/l10n/nl.js
+++ b/apps/files_sharing/l10n/nl.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "Verkeerde of geen update parameter opgegeven",
"Can't change permissions for public share links" : "Kan rechten voor openbaar gedeelde links niet wijzigen",
"Cannot increase permissions" : "Kan de rechten niet verruimen",
- "%s is publicly shared" : "%s is openbaar gedeeld",
"Share API is disabled" : "Delen API is uitgeschakeld",
"This share is password-protected" : "Deze gedeelde folder is met een wachtwoord beveiligd",
"The password is wrong. Try again." : "Wachtwoord ongeldig. Probeer het nogmaals.",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "delen is uitgeschakeld",
"For more info, please ask the person who sent this link." : "Voor meer informatie, neem contact op met de persoon die u deze link heeft gestuurd.",
"shared by %s" : "Gedeeld door %s",
- "Add to your Nextcloud" : "Toevoegen aan je Nextcloud",
"Download" : "Downloaden",
- "Download %s" : "Download %s",
"Direct link" : "Directe link",
+ "Add to your Nextcloud" : "Toevoegen aan je Nextcloud",
+ "Download %s" : "Download %s",
"Upload files to %s" : "Upload bestanden naar %s",
"Select or drop files" : "Selecteer of leg bestanden neer",
"Uploading files…" : "Uploaden bestanden...",
- "Uploaded files:" : "Geüploade bestanden"
+ "Uploaded files:" : "Geüploade bestanden",
+ "%s is publicly shared" : "%s is openbaar gedeeld"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/nl.json b/apps/files_sharing/l10n/nl.json
index 669018c1f4f..d2faa20d31b 100644
--- a/apps/files_sharing/l10n/nl.json
+++ b/apps/files_sharing/l10n/nl.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "Verkeerde of geen update parameter opgegeven",
"Can't change permissions for public share links" : "Kan rechten voor openbaar gedeelde links niet wijzigen",
"Cannot increase permissions" : "Kan de rechten niet verruimen",
- "%s is publicly shared" : "%s is openbaar gedeeld",
"Share API is disabled" : "Delen API is uitgeschakeld",
"This share is password-protected" : "Deze gedeelde folder is met een wachtwoord beveiligd",
"The password is wrong. Try again." : "Wachtwoord ongeldig. Probeer het nogmaals.",
@@ -101,13 +100,14 @@
"sharing is disabled" : "delen is uitgeschakeld",
"For more info, please ask the person who sent this link." : "Voor meer informatie, neem contact op met de persoon die u deze link heeft gestuurd.",
"shared by %s" : "Gedeeld door %s",
- "Add to your Nextcloud" : "Toevoegen aan je Nextcloud",
"Download" : "Downloaden",
- "Download %s" : "Download %s",
"Direct link" : "Directe link",
+ "Add to your Nextcloud" : "Toevoegen aan je Nextcloud",
+ "Download %s" : "Download %s",
"Upload files to %s" : "Upload bestanden naar %s",
"Select or drop files" : "Selecteer of leg bestanden neer",
"Uploading files…" : "Uploaden bestanden...",
- "Uploaded files:" : "Geüploade bestanden"
+ "Uploaded files:" : "Geüploade bestanden",
+ "%s is publicly shared" : "%s is openbaar gedeeld"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/pl.js b/apps/files_sharing/l10n/pl.js
index 8d44b31d755..049d7410cf1 100644
--- a/apps/files_sharing/l10n/pl.js
+++ b/apps/files_sharing/l10n/pl.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "Brakujący lub błędny parametr aktualizacji",
"Can't change permissions for public share links" : "Nie można zmienić uprawnień dla publicznych udziałów",
"Cannot increase permissions" : "Nie można zwiększyć uprawnień",
- "%s is publicly shared" : "%s jest publicznie dostępny",
"Share API is disabled" : "API udostępniania jest wyłączone",
"This share is password-protected" : "Udostępniony folder chroniony jest hasłem",
"The password is wrong. Try again." : "To hasło jest niewłaściwe. Spróbuj ponownie.",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "udostępnianie jest wyłączone",
"For more info, please ask the person who sent this link." : "Aby uzyskać więcej informacji proszę poprosić osobę, która wysłał ten link.",
"shared by %s" : "udostępnione przez %s",
- "Add to your Nextcloud" : "Dodaj do swojego Nextcloud",
"Download" : "Pobierz",
- "Download %s" : "Pobierz %s",
"Direct link" : "Bezpośredni link",
+ "Add to your Nextcloud" : "Dodaj do swojego Nextcloud",
+ "Download %s" : "Pobierz %s",
"Upload files to %s" : "Prześlij pliki do %s",
"Select or drop files" : "Wybierz lub upuść pliki",
"Uploading files…" : "Wysyłanie plików...",
- "Uploaded files:" : "Wysłane pliki:"
+ "Uploaded files:" : "Wysłane pliki:",
+ "%s is publicly shared" : "%s jest publicznie dostępny"
},
"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);");
diff --git a/apps/files_sharing/l10n/pl.json b/apps/files_sharing/l10n/pl.json
index 373735af142..39ff1e2523c 100644
--- a/apps/files_sharing/l10n/pl.json
+++ b/apps/files_sharing/l10n/pl.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "Brakujący lub błędny parametr aktualizacji",
"Can't change permissions for public share links" : "Nie można zmienić uprawnień dla publicznych udziałów",
"Cannot increase permissions" : "Nie można zwiększyć uprawnień",
- "%s is publicly shared" : "%s jest publicznie dostępny",
"Share API is disabled" : "API udostępniania jest wyłączone",
"This share is password-protected" : "Udostępniony folder chroniony jest hasłem",
"The password is wrong. Try again." : "To hasło jest niewłaściwe. Spróbuj ponownie.",
@@ -101,13 +100,14 @@
"sharing is disabled" : "udostępnianie jest wyłączone",
"For more info, please ask the person who sent this link." : "Aby uzyskać więcej informacji proszę poprosić osobę, która wysłał ten link.",
"shared by %s" : "udostępnione przez %s",
- "Add to your Nextcloud" : "Dodaj do swojego Nextcloud",
"Download" : "Pobierz",
- "Download %s" : "Pobierz %s",
"Direct link" : "Bezpośredni link",
+ "Add to your Nextcloud" : "Dodaj do swojego Nextcloud",
+ "Download %s" : "Pobierz %s",
"Upload files to %s" : "Prześlij pliki do %s",
"Select or drop files" : "Wybierz lub upuść pliki",
"Uploading files…" : "Wysyłanie plików...",
- "Uploaded files:" : "Wysłane pliki:"
+ "Uploaded files:" : "Wysłane pliki:",
+ "%s is publicly shared" : "%s jest publicznie dostępny"
},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js
index 2fe130a548a..098a3ed6804 100644
--- a/apps/files_sharing/l10n/pt_BR.js
+++ b/apps/files_sharing/l10n/pt_BR.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "O parâmetro da atualização fornecido está errado ou não existe",
"Can't change permissions for public share links" : "Não foi possível alterar as permissões para links de compartilhamento público",
"Cannot increase permissions" : "Não foi possível aumentar as permissões",
- "%s is publicly shared" : "%s está compartilhado publicamente",
"Share API is disabled" : "O compartilhamento de API está desabilitado.",
"This share is password-protected" : "Este compartilhamento é protegido por senha",
"The password is wrong. Try again." : "Senha incorreta. Tente novamente.",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "o compartilhamento está desativado",
"For more info, please ask the person who sent this link." : "Para mais informações, pergunte à pessoa que lhe enviou o link.",
"shared by %s" : "compartilhado por %s",
- "Add to your Nextcloud" : "Adicionar ao seu Nextcloud",
"Download" : "Baixar",
- "Download %s" : "Baixar %s",
"Direct link" : "Link direto",
+ "Add to your Nextcloud" : "Adicionar ao seu Nextcloud",
+ "Download %s" : "Baixar %s",
"Upload files to %s" : "Enviar arquivos para %s",
"Select or drop files" : "Selecione ou solte arquivos",
"Uploading files…" : "Enviando arquivos...",
- "Uploaded files:" : "Arquivos enviados:"
+ "Uploaded files:" : "Arquivos enviados:",
+ "%s is publicly shared" : "%s está compartilhado publicamente"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json
index 66419d9393f..8ab8a7cd1b2 100644
--- a/apps/files_sharing/l10n/pt_BR.json
+++ b/apps/files_sharing/l10n/pt_BR.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "O parâmetro da atualização fornecido está errado ou não existe",
"Can't change permissions for public share links" : "Não foi possível alterar as permissões para links de compartilhamento público",
"Cannot increase permissions" : "Não foi possível aumentar as permissões",
- "%s is publicly shared" : "%s está compartilhado publicamente",
"Share API is disabled" : "O compartilhamento de API está desabilitado.",
"This share is password-protected" : "Este compartilhamento é protegido por senha",
"The password is wrong. Try again." : "Senha incorreta. Tente novamente.",
@@ -101,13 +100,14 @@
"sharing is disabled" : "o compartilhamento está desativado",
"For more info, please ask the person who sent this link." : "Para mais informações, pergunte à pessoa que lhe enviou o link.",
"shared by %s" : "compartilhado por %s",
- "Add to your Nextcloud" : "Adicionar ao seu Nextcloud",
"Download" : "Baixar",
- "Download %s" : "Baixar %s",
"Direct link" : "Link direto",
+ "Add to your Nextcloud" : "Adicionar ao seu Nextcloud",
+ "Download %s" : "Baixar %s",
"Upload files to %s" : "Enviar arquivos para %s",
"Select or drop files" : "Selecione ou solte arquivos",
"Uploading files…" : "Enviando arquivos...",
- "Uploaded files:" : "Arquivos enviados:"
+ "Uploaded files:" : "Arquivos enviados:",
+ "%s is publicly shared" : "%s está compartilhado publicamente"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/ru.js b/apps/files_sharing/l10n/ru.js
index 2ee1fe2b5f8..7b8ac52ad5d 100644
--- a/apps/files_sharing/l10n/ru.js
+++ b/apps/files_sharing/l10n/ru.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "Параметр для изменения неправилен или не задан",
"Can't change permissions for public share links" : "Для общедоступных ссылок изменение прав невозможно",
"Cannot increase permissions" : "Нельзя увеличить права",
- "%s is publicly shared" : "%s опубликован ",
"Share API is disabled" : "API общего доступа отключён",
"This share is password-protected" : "Общий ресурс защищен паролем",
"The password is wrong. Try again." : "Неверный пароль. Попробуйте еще раз.",
@@ -96,20 +95,21 @@ OC.L10N.register(
"Name" : "Имя",
"Share time" : "Дата публикации",
"Expiration date" : "Дата истечения",
- "Sorry, this link doesn’t seem to work anymore." : "Эта ссылка устарела и более не действительна.",
+ "Sorry, this link doesn’t seem to work anymore." : "Похоже, эта ссылка больше не работает.",
"Reasons might be:" : "Причиной может быть:",
"the item was removed" : "объект был удалён",
"the link expired" : "срок действия ссылки истёк",
"sharing is disabled" : "общий доступ отключён",
"For more info, please ask the person who sent this link." : "Для получения дополнительной информации, свяжитесь с тем, кто отправил вам эту ссылку.",
"shared by %s" : "начато %s",
- "Add to your Nextcloud" : "Добавить к вашему Nextcloud",
"Download" : "Скачать",
- "Download %s" : "Скачать %s",
"Direct link" : "Прямая ссылка",
+ "Add to your Nextcloud" : "Добавить к вашему Nextcloud",
+ "Download %s" : "Скачать %s",
"Upload files to %s" : "Загрузка файлов пользователю %s",
"Select or drop files" : "Выберите или перетащите файлы",
"Uploading files…" : "Загрузка файлов...",
- "Uploaded files:" : "Загруженные файлы:"
+ "Uploaded files:" : "Загруженные файлы:",
+ "%s is publicly shared" : "%s опубликован "
},
"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");
diff --git a/apps/files_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json
index 669ce8fcd0f..0153a00dcac 100644
--- a/apps/files_sharing/l10n/ru.json
+++ b/apps/files_sharing/l10n/ru.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "Параметр для изменения неправилен или не задан",
"Can't change permissions for public share links" : "Для общедоступных ссылок изменение прав невозможно",
"Cannot increase permissions" : "Нельзя увеличить права",
- "%s is publicly shared" : "%s опубликован ",
"Share API is disabled" : "API общего доступа отключён",
"This share is password-protected" : "Общий ресурс защищен паролем",
"The password is wrong. Try again." : "Неверный пароль. Попробуйте еще раз.",
@@ -94,20 +93,21 @@
"Name" : "Имя",
"Share time" : "Дата публикации",
"Expiration date" : "Дата истечения",
- "Sorry, this link doesn’t seem to work anymore." : "Эта ссылка устарела и более не действительна.",
+ "Sorry, this link doesn’t seem to work anymore." : "Похоже, эта ссылка больше не работает.",
"Reasons might be:" : "Причиной может быть:",
"the item was removed" : "объект был удалён",
"the link expired" : "срок действия ссылки истёк",
"sharing is disabled" : "общий доступ отключён",
"For more info, please ask the person who sent this link." : "Для получения дополнительной информации, свяжитесь с тем, кто отправил вам эту ссылку.",
"shared by %s" : "начато %s",
- "Add to your Nextcloud" : "Добавить к вашему Nextcloud",
"Download" : "Скачать",
- "Download %s" : "Скачать %s",
"Direct link" : "Прямая ссылка",
+ "Add to your Nextcloud" : "Добавить к вашему Nextcloud",
+ "Download %s" : "Скачать %s",
"Upload files to %s" : "Загрузка файлов пользователю %s",
"Select or drop files" : "Выберите или перетащите файлы",
"Uploading files…" : "Загрузка файлов...",
- "Uploaded files:" : "Загруженные файлы:"
+ "Uploaded files:" : "Загруженные файлы:",
+ "%s is publicly shared" : "%s опубликован "
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/sk.js b/apps/files_sharing/l10n/sk.js
index b7d260ca332..7652b6fd917 100644
--- a/apps/files_sharing/l10n/sk.js
+++ b/apps/files_sharing/l10n/sk.js
@@ -34,6 +34,25 @@ OC.L10N.register(
"Shared as public link" : "Sprístupnené ako verejný odkaz",
"Removed public link" : "Verejný odkaz odstránený",
"Public link expired" : "Verejnému odkazu vypršala platnosť",
+ "{actor} shared as public link" : "{actor} sprístupnil ako verejný odkaz",
+ "{actor} removed public link" : "{actor} odstránil verejný odkaz",
+ "Public link of {actor} expired" : "Verejný odkaz {actor} vypršal",
+ "You shared {file} as public link" : "Sprístupnili ste súbor {file} ako verejný odkaz",
+ "You removed public link for {file}" : "Odstránili ste verejný odkaz pre {file}",
+ "Public link expired for {file}" : "Verejný odkaz pre {file} vypršal",
+ "{actor} shared {file} as public link" : "{actor} sprístupnil {file} ako verejný odkaz",
+ "{actor} removed public link for {file}" : "{actor} odstránil verejný odkaz pre {file}",
+ "Public link of {actor} for {file} expired" : "Verejný odkaz používateľa {actor} pre {file} vypršal",
+ "{user} accepted the remote share" : "používateľ {user} prijal vzdialené sprístupnenie",
+ "{user} declined the remote share" : "používateľ {user} odmietol vzdialené sprístupnenie",
+ "You received a new remote share {file} from {user}" : "Obdržali ste nové vzdialené zdieľanie súboru {file} používateľom {user}",
+ "{user} accepted the remote share of {file}" : "používateľ {user} prijal vzdialené sprístupnenie súboru {file}",
+ "{user} declined the remote share of {file}" : "používateľ {user} odmietol vzdialené spristupnenie súboru {file} ",
+ "{user} unshared {file} from you" : "používateľ {user} vám už nesprístupňuje súbor {file}",
+ "Shared with {user}" : "Zdieľané s {user}",
+ "Removed share for {user}" : "Odstránené sprístupnenie pre používateľa {user}",
+ "{actor} shared with {user}" : "{actor} zdieľal s {user}",
+ "{actor} removed share for {user}" : "{actor} odstránil sprístupnenie pre používateľa {user}",
"Shared by {actor}" : "Sprístupnil {actor}",
"{actor} removed share" : "{actor} zrušil sprístupnenie",
"You shared {file} with {user}" : "Sprístupnili ste {file} používateľovi {user}",
@@ -68,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "Zlý alebo žiadny zadaný parameter aktualizácie",
"Can't change permissions for public share links" : "Nemožno zmeniť oprávnenia pre verejné sprístupnené odkazy",
"Cannot increase permissions" : "Nie je možné navýšiť oprávnenia",
- "%s is publicly shared" : "%s je sprístupnené verejne",
"Share API is disabled" : "API pre sprístupňovanie je zakázané",
"This share is password-protected" : "Táto položka je chránené heslom",
"The password is wrong. Try again." : "Heslo je chybné. Skúste to znova.",
@@ -84,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "sprístupňovanie je zakázané",
"For more info, please ask the person who sent this link." : "Pre viac informácií kontaktujte osobu, ktorá vám poslala tento odkaz.",
"shared by %s" : "Sprístupnil %s",
- "Add to your Nextcloud" : "Pridať do svojho Nextcloud",
"Download" : "Sťahovanie",
- "Download %s" : "Stiahnuť %s",
"Direct link" : "Priama linka",
+ "Add to your Nextcloud" : "Pridať do svojho Nextcloud",
+ "Download %s" : "Stiahnuť %s",
"Upload files to %s" : "Nahrať súbory do %s",
"Select or drop files" : "Vyberte alebo položte súbory",
"Uploading files…" : "Nahrávanie súborov...",
- "Uploaded files:" : "Nahrané súbory..."
+ "Uploaded files:" : "Nahrané súbory...",
+ "%s is publicly shared" : "%s je sprístupnené verejne"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/files_sharing/l10n/sk.json b/apps/files_sharing/l10n/sk.json
index 7d88a4efd20..22988f09db2 100644
--- a/apps/files_sharing/l10n/sk.json
+++ b/apps/files_sharing/l10n/sk.json
@@ -32,6 +32,25 @@
"Shared as public link" : "Sprístupnené ako verejný odkaz",
"Removed public link" : "Verejný odkaz odstránený",
"Public link expired" : "Verejnému odkazu vypršala platnosť",
+ "{actor} shared as public link" : "{actor} sprístupnil ako verejný odkaz",
+ "{actor} removed public link" : "{actor} odstránil verejný odkaz",
+ "Public link of {actor} expired" : "Verejný odkaz {actor} vypršal",
+ "You shared {file} as public link" : "Sprístupnili ste súbor {file} ako verejný odkaz",
+ "You removed public link for {file}" : "Odstránili ste verejný odkaz pre {file}",
+ "Public link expired for {file}" : "Verejný odkaz pre {file} vypršal",
+ "{actor} shared {file} as public link" : "{actor} sprístupnil {file} ako verejný odkaz",
+ "{actor} removed public link for {file}" : "{actor} odstránil verejný odkaz pre {file}",
+ "Public link of {actor} for {file} expired" : "Verejný odkaz používateľa {actor} pre {file} vypršal",
+ "{user} accepted the remote share" : "používateľ {user} prijal vzdialené sprístupnenie",
+ "{user} declined the remote share" : "používateľ {user} odmietol vzdialené sprístupnenie",
+ "You received a new remote share {file} from {user}" : "Obdržali ste nové vzdialené zdieľanie súboru {file} používateľom {user}",
+ "{user} accepted the remote share of {file}" : "používateľ {user} prijal vzdialené sprístupnenie súboru {file}",
+ "{user} declined the remote share of {file}" : "používateľ {user} odmietol vzdialené spristupnenie súboru {file} ",
+ "{user} unshared {file} from you" : "používateľ {user} vám už nesprístupňuje súbor {file}",
+ "Shared with {user}" : "Zdieľané s {user}",
+ "Removed share for {user}" : "Odstránené sprístupnenie pre používateľa {user}",
+ "{actor} shared with {user}" : "{actor} zdieľal s {user}",
+ "{actor} removed share for {user}" : "{actor} odstránil sprístupnenie pre používateľa {user}",
"Shared by {actor}" : "Sprístupnil {actor}",
"{actor} removed share" : "{actor} zrušil sprístupnenie",
"You shared {file} with {user}" : "Sprístupnili ste {file} používateľovi {user}",
@@ -66,7 +85,6 @@
"Wrong or no update parameter given" : "Zlý alebo žiadny zadaný parameter aktualizácie",
"Can't change permissions for public share links" : "Nemožno zmeniť oprávnenia pre verejné sprístupnené odkazy",
"Cannot increase permissions" : "Nie je možné navýšiť oprávnenia",
- "%s is publicly shared" : "%s je sprístupnené verejne",
"Share API is disabled" : "API pre sprístupňovanie je zakázané",
"This share is password-protected" : "Táto položka je chránené heslom",
"The password is wrong. Try again." : "Heslo je chybné. Skúste to znova.",
@@ -82,13 +100,14 @@
"sharing is disabled" : "sprístupňovanie je zakázané",
"For more info, please ask the person who sent this link." : "Pre viac informácií kontaktujte osobu, ktorá vám poslala tento odkaz.",
"shared by %s" : "Sprístupnil %s",
- "Add to your Nextcloud" : "Pridať do svojho Nextcloud",
"Download" : "Sťahovanie",
- "Download %s" : "Stiahnuť %s",
"Direct link" : "Priama linka",
+ "Add to your Nextcloud" : "Pridať do svojho Nextcloud",
+ "Download %s" : "Stiahnuť %s",
"Upload files to %s" : "Nahrať súbory do %s",
"Select or drop files" : "Vyberte alebo položte súbory",
"Uploading files…" : "Nahrávanie súborov...",
- "Uploaded files:" : "Nahrané súbory..."
+ "Uploaded files:" : "Nahrané súbory...",
+ "%s is publicly shared" : "%s je sprístupnené verejne"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/sq.js b/apps/files_sharing/l10n/sq.js
index 492dae82a91..baa6b3e8438 100644
--- a/apps/files_sharing/l10n/sq.js
+++ b/apps/files_sharing/l10n/sq.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "Ose u dha parametër i gabuar përditësimesh, pse s’u dha fare ",
"Can't change permissions for public share links" : "S’mund të ndryshohen lejet për lidhje ndarjesh publike",
"Cannot increase permissions" : "S’mund të fuqizohen lejet",
- "%s is publicly shared" : "%s është ndarë publikisht",
"Share API is disabled" : "API i ndarjeve është çaktivizuar",
"This share is password-protected" : "Kjo pjesë është e mbrojtur me fjalëkalim",
"The password is wrong. Try again." : "Fjalëkalimi është i gabuar. Riprovoni.",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "ndarjet janë çaktivizuar",
"For more info, please ask the person who sent this link." : "Për më shumë të dhëna, ju lutemi, pyetni personin që ju dërgoi këtë lidhje.",
"shared by %s" : "ndarë nga %s",
- "Add to your Nextcloud" : "Shtojeni tek Nextcloud-i juaj",
"Download" : "Shkarko",
- "Download %s" : "Shkarko %s",
"Direct link" : "Lidhje e drejtpërdrejtë",
+ "Add to your Nextcloud" : "Shtojeni tek Nextcloud-i juaj",
+ "Download %s" : "Shkarko %s",
"Upload files to %s" : "Ngrako skedarët tek %s",
"Select or drop files" : "Përzgjidh ose hiq skedarët",
"Uploading files…" : "Skedarët po ngarkohen...",
- "Uploaded files:" : "Skedarët e ngarkuar:"
+ "Uploaded files:" : "Skedarët e ngarkuar:",
+ "%s is publicly shared" : "%s është ndarë publikisht"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/sq.json b/apps/files_sharing/l10n/sq.json
index 26c6b213cef..c0c98e1b046 100644
--- a/apps/files_sharing/l10n/sq.json
+++ b/apps/files_sharing/l10n/sq.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "Ose u dha parametër i gabuar përditësimesh, pse s’u dha fare ",
"Can't change permissions for public share links" : "S’mund të ndryshohen lejet për lidhje ndarjesh publike",
"Cannot increase permissions" : "S’mund të fuqizohen lejet",
- "%s is publicly shared" : "%s është ndarë publikisht",
"Share API is disabled" : "API i ndarjeve është çaktivizuar",
"This share is password-protected" : "Kjo pjesë është e mbrojtur me fjalëkalim",
"The password is wrong. Try again." : "Fjalëkalimi është i gabuar. Riprovoni.",
@@ -101,13 +100,14 @@
"sharing is disabled" : "ndarjet janë çaktivizuar",
"For more info, please ask the person who sent this link." : "Për më shumë të dhëna, ju lutemi, pyetni personin që ju dërgoi këtë lidhje.",
"shared by %s" : "ndarë nga %s",
- "Add to your Nextcloud" : "Shtojeni tek Nextcloud-i juaj",
"Download" : "Shkarko",
- "Download %s" : "Shkarko %s",
"Direct link" : "Lidhje e drejtpërdrejtë",
+ "Add to your Nextcloud" : "Shtojeni tek Nextcloud-i juaj",
+ "Download %s" : "Shkarko %s",
"Upload files to %s" : "Ngrako skedarët tek %s",
"Select or drop files" : "Përzgjidh ose hiq skedarët",
"Uploading files…" : "Skedarët po ngarkohen...",
- "Uploaded files:" : "Skedarët e ngarkuar:"
+ "Uploaded files:" : "Skedarët e ngarkuar:",
+ "%s is publicly shared" : "%s është ndarë publikisht"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/sr.js b/apps/files_sharing/l10n/sr.js
index e32d442e938..c456e7b7a71 100644
--- a/apps/files_sharing/l10n/sr.js
+++ b/apps/files_sharing/l10n/sr.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "Погрешан или ненаведен параметер",
"Can't change permissions for public share links" : "Не могу се променити привилегије за јавно доступне везе",
"Cannot increase permissions" : "Не могу да повећам привилегије",
- "%s is publicly shared" : "%s је јавно дељен",
"Share API is disabled" : "API за дељене је искључен",
"This share is password-protected" : "Дељење је заштићено лозинком",
"The password is wrong. Try again." : "Лозинка је погрешна. Покушајте поново.",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "дељење је искључено",
"For more info, please ask the person who sent this link." : "За више информација, питајте особу која вам је послала везу.",
"shared by %s" : "поделио %s",
- "Add to your Nextcloud" : "Додајте у свој облак",
"Download" : "Преузми",
- "Download %s" : "Преузми %s",
"Direct link" : "Директна веза",
+ "Add to your Nextcloud" : "Додајте у свој облак",
+ "Download %s" : "Преузми %s",
"Upload files to %s" : "Отпремите фајлове на%s",
"Select or drop files" : "Одаберите или превуците фајлове",
"Uploading files…" : "Отпремам фајлове…",
- "Uploaded files:" : "Отпремљени фајлови:"
+ "Uploaded files:" : "Отпремљени фајлови:",
+ "%s is publicly shared" : "%s је јавно дељен"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files_sharing/l10n/sr.json b/apps/files_sharing/l10n/sr.json
index e352b892848..f2a61d654c8 100644
--- a/apps/files_sharing/l10n/sr.json
+++ b/apps/files_sharing/l10n/sr.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "Погрешан или ненаведен параметер",
"Can't change permissions for public share links" : "Не могу се променити привилегије за јавно доступне везе",
"Cannot increase permissions" : "Не могу да повећам привилегије",
- "%s is publicly shared" : "%s је јавно дељен",
"Share API is disabled" : "API за дељене је искључен",
"This share is password-protected" : "Дељење је заштићено лозинком",
"The password is wrong. Try again." : "Лозинка је погрешна. Покушајте поново.",
@@ -101,13 +100,14 @@
"sharing is disabled" : "дељење је искључено",
"For more info, please ask the person who sent this link." : "За више информација, питајте особу која вам је послала везу.",
"shared by %s" : "поделио %s",
- "Add to your Nextcloud" : "Додајте у свој облак",
"Download" : "Преузми",
- "Download %s" : "Преузми %s",
"Direct link" : "Директна веза",
+ "Add to your Nextcloud" : "Додајте у свој облак",
+ "Download %s" : "Преузми %s",
"Upload files to %s" : "Отпремите фајлове на%s",
"Select or drop files" : "Одаберите или превуците фајлове",
"Uploading files…" : "Отпремам фајлове…",
- "Uploaded files:" : "Отпремљени фајлови:"
+ "Uploaded files:" : "Отпремљени фајлови:",
+ "%s is publicly shared" : "%s је јавно дељен"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/sv.js b/apps/files_sharing/l10n/sv.js
index cd2659ed221..e79c78787d5 100644
--- a/apps/files_sharing/l10n/sv.js
+++ b/apps/files_sharing/l10n/sv.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "Fel eller ingen uppdateringsparameter angiven",
"Can't change permissions for public share links" : "Det går inte att ändra behörigheterna för offentliga länkar",
"Cannot increase permissions" : "Kan inte utöka behörigheter",
- "%s is publicly shared" : "%s är offentligt delad",
"Share API is disabled" : "Delning av API är inaktiverad",
"This share is password-protected" : "Den här delningen är lösenordsskyddad",
"The password is wrong. Try again." : "Lösenordet är fel. Försök igen.",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "delning är inaktiverat",
"For more info, please ask the person who sent this link." : "För mer information, kontakta den person som skickade den här länken.",
"shared by %s" : "delad av %s",
- "Add to your Nextcloud" : "Lägg till i molnet",
"Download" : "Ladda ned",
- "Download %s" : "Ladda ned %s",
"Direct link" : "Direktlänk",
+ "Add to your Nextcloud" : "Lägg till i molnet",
+ "Download %s" : "Ladda ned %s",
"Upload files to %s" : "Ladda upp filer till %s",
"Select or drop files" : "Välj eller dra filer hit",
"Uploading files…" : "Laddar upp filer...",
- "Uploaded files:" : "Uppladdade filer:"
+ "Uploaded files:" : "Uppladdade filer:",
+ "%s is publicly shared" : "%s är offentligt delad"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/sv.json b/apps/files_sharing/l10n/sv.json
index 507f79ed25a..4a7875b5103 100644
--- a/apps/files_sharing/l10n/sv.json
+++ b/apps/files_sharing/l10n/sv.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "Fel eller ingen uppdateringsparameter angiven",
"Can't change permissions for public share links" : "Det går inte att ändra behörigheterna för offentliga länkar",
"Cannot increase permissions" : "Kan inte utöka behörigheter",
- "%s is publicly shared" : "%s är offentligt delad",
"Share API is disabled" : "Delning av API är inaktiverad",
"This share is password-protected" : "Den här delningen är lösenordsskyddad",
"The password is wrong. Try again." : "Lösenordet är fel. Försök igen.",
@@ -101,13 +100,14 @@
"sharing is disabled" : "delning är inaktiverat",
"For more info, please ask the person who sent this link." : "För mer information, kontakta den person som skickade den här länken.",
"shared by %s" : "delad av %s",
- "Add to your Nextcloud" : "Lägg till i molnet",
"Download" : "Ladda ned",
- "Download %s" : "Ladda ned %s",
"Direct link" : "Direktlänk",
+ "Add to your Nextcloud" : "Lägg till i molnet",
+ "Download %s" : "Ladda ned %s",
"Upload files to %s" : "Ladda upp filer till %s",
"Select or drop files" : "Välj eller dra filer hit",
"Uploading files…" : "Laddar upp filer...",
- "Uploaded files:" : "Uppladdade filer:"
+ "Uploaded files:" : "Uppladdade filer:",
+ "%s is publicly shared" : "%s är offentligt delad"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/tr.js b/apps/files_sharing/l10n/tr.js
index 8a46cb8a5e8..524333922e3 100644
--- a/apps/files_sharing/l10n/tr.js
+++ b/apps/files_sharing/l10n/tr.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "Parametre yanlış ya da herhangi bir parametre belirtilmemiş",
"Can't change permissions for public share links" : "Herkese açık paylaşılan bağlantıların erişim hakları değiştirilemez",
"Cannot increase permissions" : "Erişim izinleri yükseltilemez",
- "%s is publicly shared" : "%s herkese açık olarak paylaşıldı",
"Share API is disabled" : "Paylaşım API arayüzü devre dışı",
"This share is password-protected" : "Bu paylaşım parola korumalı",
"The password is wrong. Try again." : "Parola yanlış. Yeniden deneyin.",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "paylaşım devre dışı bırakılmış",
"For more info, please ask the person who sent this link." : "Ayrıntılı bilgi almak için bu bağlantıyı aldığınız kişi ile görüşün.",
"shared by %s" : "%s tarafından paylaşıldı",
- "Add to your Nextcloud" : "Nextcloud hesabınıza ekleyin",
"Download" : "İndir",
- "Download %s" : "%s İndir",
"Direct link" : "Doğrudan bağlantı",
+ "Add to your Nextcloud" : "Nextcloud hesabınıza ekleyin",
+ "Download %s" : "%s İndir",
"Upload files to %s" : "Dosyaları %s konumuna yükle",
"Select or drop files" : "Dosyaları seçin ya da sürükleyip bırakın",
"Uploading files…" : "Dosyalar yükleniyor...",
- "Uploaded files:" : "Yüklenmiş dosyalar:"
+ "Uploaded files:" : "Yüklenmiş dosyalar:",
+ "%s is publicly shared" : "%s herkese açık olarak paylaşıldı"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files_sharing/l10n/tr.json b/apps/files_sharing/l10n/tr.json
index f028cc1811e..b0754cb52a2 100644
--- a/apps/files_sharing/l10n/tr.json
+++ b/apps/files_sharing/l10n/tr.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "Parametre yanlış ya da herhangi bir parametre belirtilmemiş",
"Can't change permissions for public share links" : "Herkese açık paylaşılan bağlantıların erişim hakları değiştirilemez",
"Cannot increase permissions" : "Erişim izinleri yükseltilemez",
- "%s is publicly shared" : "%s herkese açık olarak paylaşıldı",
"Share API is disabled" : "Paylaşım API arayüzü devre dışı",
"This share is password-protected" : "Bu paylaşım parola korumalı",
"The password is wrong. Try again." : "Parola yanlış. Yeniden deneyin.",
@@ -101,13 +100,14 @@
"sharing is disabled" : "paylaşım devre dışı bırakılmış",
"For more info, please ask the person who sent this link." : "Ayrıntılı bilgi almak için bu bağlantıyı aldığınız kişi ile görüşün.",
"shared by %s" : "%s tarafından paylaşıldı",
- "Add to your Nextcloud" : "Nextcloud hesabınıza ekleyin",
"Download" : "İndir",
- "Download %s" : "%s İndir",
"Direct link" : "Doğrudan bağlantı",
+ "Add to your Nextcloud" : "Nextcloud hesabınıza ekleyin",
+ "Download %s" : "%s İndir",
"Upload files to %s" : "Dosyaları %s konumuna yükle",
"Select or drop files" : "Dosyaları seçin ya da sürükleyip bırakın",
"Uploading files…" : "Dosyalar yükleniyor...",
- "Uploaded files:" : "Yüklenmiş dosyalar:"
+ "Uploaded files:" : "Yüklenmiş dosyalar:",
+ "%s is publicly shared" : "%s herkese açık olarak paylaşıldı"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/zh_CN.js b/apps/files_sharing/l10n/zh_CN.js
index 3074385056c..2cedc0e2d7b 100644
--- a/apps/files_sharing/l10n/zh_CN.js
+++ b/apps/files_sharing/l10n/zh_CN.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "错误或没有更新参数给出",
"Can't change permissions for public share links" : "不能改变公共分享链接权限",
"Cannot increase permissions" : "不能增加权限",
- "%s is publicly shared" : "%s 是公开共享",
"Share API is disabled" : "共享 API 已被禁用",
"This share is password-protected" : "这是一个密码保护的共享",
"The password is wrong. Try again." : "用户名或密码错误!请重试",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "分享已禁用",
"For more info, please ask the person who sent this link." : "欲知详情,请联系发给你链接的人。",
"shared by %s" : "共享者 %s",
- "Add to your Nextcloud" : "添加到你的 Nextcloud",
"Download" : "下载",
- "Download %s" : "下载 %s",
"Direct link" : "直接链接",
+ "Add to your Nextcloud" : "添加到你的 Nextcloud",
+ "Download %s" : "下载 %s",
"Upload files to %s" : "上传文件到 %s",
"Select or drop files" : "选择或删除文件",
"Uploading files…" : "上传文件 … ",
- "Uploaded files:" : "上传的文件: "
+ "Uploaded files:" : "上传的文件: ",
+ "%s is publicly shared" : "%s 是公开共享"
},
"nplurals=1; plural=0;");
diff --git a/apps/files_sharing/l10n/zh_CN.json b/apps/files_sharing/l10n/zh_CN.json
index 0a541badcc8..2f83b8d0fdc 100644
--- a/apps/files_sharing/l10n/zh_CN.json
+++ b/apps/files_sharing/l10n/zh_CN.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "错误或没有更新参数给出",
"Can't change permissions for public share links" : "不能改变公共分享链接权限",
"Cannot increase permissions" : "不能增加权限",
- "%s is publicly shared" : "%s 是公开共享",
"Share API is disabled" : "共享 API 已被禁用",
"This share is password-protected" : "这是一个密码保护的共享",
"The password is wrong. Try again." : "用户名或密码错误!请重试",
@@ -101,13 +100,14 @@
"sharing is disabled" : "分享已禁用",
"For more info, please ask the person who sent this link." : "欲知详情,请联系发给你链接的人。",
"shared by %s" : "共享者 %s",
- "Add to your Nextcloud" : "添加到你的 Nextcloud",
"Download" : "下载",
- "Download %s" : "下载 %s",
"Direct link" : "直接链接",
+ "Add to your Nextcloud" : "添加到你的 Nextcloud",
+ "Download %s" : "下载 %s",
"Upload files to %s" : "上传文件到 %s",
"Select or drop files" : "选择或删除文件",
"Uploading files…" : "上传文件 … ",
- "Uploaded files:" : "上传的文件: "
+ "Uploaded files:" : "上传的文件: ",
+ "%s is publicly shared" : "%s 是公开共享"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/zh_TW.js b/apps/files_sharing/l10n/zh_TW.js
index cff1b2fbb9e..ff6fbbcb0b2 100644
--- a/apps/files_sharing/l10n/zh_TW.js
+++ b/apps/files_sharing/l10n/zh_TW.js
@@ -87,7 +87,6 @@ OC.L10N.register(
"Wrong or no update parameter given" : "更新參數不正確或未提供",
"Can't change permissions for public share links" : "無法由公開分享的連結變更權限",
"Cannot increase permissions" : "無法增加權限",
- "%s is publicly shared" : "%s 是被公然分享的",
"Share API is disabled" : "分享 API 已停用",
"This share is password-protected" : "這個分享有密碼保護",
"The password is wrong. Try again." : "請檢查您的密碼並再試一次",
@@ -103,13 +102,14 @@ OC.L10N.register(
"sharing is disabled" : "分享功能已停用",
"For more info, please ask the person who sent this link." : "請詢問告訴您此連結的人以瞭解更多",
"shared by %s" : "分享自 %s",
- "Add to your Nextcloud" : "加入到您的 Nextcloud",
"Download" : "下載",
- "Download %s" : "下載 %s",
"Direct link" : "直接連結",
+ "Add to your Nextcloud" : "加入到您的 Nextcloud",
+ "Download %s" : "下載 %s",
"Upload files to %s" : "上傳檔案到 %s",
"Select or drop files" : "選擇或拖曳檔案至此",
"Uploading files…" : "上傳檔案中…",
- "Uploaded files:" : "已上傳的檔案:"
+ "Uploaded files:" : "已上傳的檔案:",
+ "%s is publicly shared" : "%s 是被公然分享的"
},
"nplurals=1; plural=0;");
diff --git a/apps/files_sharing/l10n/zh_TW.json b/apps/files_sharing/l10n/zh_TW.json
index 73a4a49e8df..4b7c0f05d7b 100644
--- a/apps/files_sharing/l10n/zh_TW.json
+++ b/apps/files_sharing/l10n/zh_TW.json
@@ -85,7 +85,6 @@
"Wrong or no update parameter given" : "更新參數不正確或未提供",
"Can't change permissions for public share links" : "無法由公開分享的連結變更權限",
"Cannot increase permissions" : "無法增加權限",
- "%s is publicly shared" : "%s 是被公然分享的",
"Share API is disabled" : "分享 API 已停用",
"This share is password-protected" : "這個分享有密碼保護",
"The password is wrong. Try again." : "請檢查您的密碼並再試一次",
@@ -101,13 +100,14 @@
"sharing is disabled" : "分享功能已停用",
"For more info, please ask the person who sent this link." : "請詢問告訴您此連結的人以瞭解更多",
"shared by %s" : "分享自 %s",
- "Add to your Nextcloud" : "加入到您的 Nextcloud",
"Download" : "下載",
- "Download %s" : "下載 %s",
"Direct link" : "直接連結",
+ "Add to your Nextcloud" : "加入到您的 Nextcloud",
+ "Download %s" : "下載 %s",
"Upload files to %s" : "上傳檔案到 %s",
"Select or drop files" : "選擇或拖曳檔案至此",
"Uploading files…" : "上傳檔案中…",
- "Uploaded files:" : "已上傳的檔案:"
+ "Uploaded files:" : "已上傳的檔案:",
+ "%s is publicly shared" : "%s 是被公然分享的"
},"pluralForm" :"nplurals=1; plural=0;"
} \ 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/Collaboration/ShareRecipientSorter.php b/apps/files_sharing/lib/Collaboration/ShareRecipientSorter.php
new file mode 100644
index 00000000000..db213398118
--- /dev/null
+++ b/apps/files_sharing/lib/Collaboration/ShareRecipientSorter.php
@@ -0,0 +1,110 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.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\Files_Sharing\Collaboration;
+
+
+use OCP\Collaboration\AutoComplete\ISorter;
+use OCP\Files\Folder;
+use OCP\Files\IRootFolder;
+use OCP\Files\Node;
+use OCP\IUserSession;
+use OCP\Share\IManager;
+
+class ShareRecipientSorter implements ISorter {
+
+ /** @var IManager */
+ private $shareManager;
+ /** @var Folder */
+ private $rootFolder;
+ /** @var IUserSession */
+ private $userSession;
+
+ public function __construct(IManager $shareManager, IRootFolder $rootFolder, IUserSession $userSession) {
+ $this->shareManager = $shareManager;
+ $this->rootFolder = $rootFolder;
+ $this->userSession = $userSession;
+ }
+
+ public function getId() {
+ return 'share-recipients';
+ }
+
+ public function sort(array &$sortArray, array $context) {
+ // let's be tolerant. Comments uses "files" by default, other usages are often singular
+ if($context['itemType'] !== 'files' && $context['itemType'] !== 'file') {
+ return;
+ }
+ $user = $this->userSession->getUser();
+ if($user === null) {
+ return;
+ }
+ $userFolder = $this->rootFolder->getUserFolder($user->getUID());
+ /** @var Node[] $nodes */
+ $nodes = $userFolder->getById((int)$context['itemId']);
+ if(count($nodes) === 0) {
+ return;
+ }
+ $al = $this->shareManager->getAccessList($nodes[0]);
+
+ foreach ($sortArray as $type => &$byType) {
+ if(!isset($al[$type]) || !is_array($al[$type])) {
+ continue;
+ }
+
+ // at least on PHP 5.6 usort turned out to be not stable. So we add
+ // the current index to the value and compare it on a draw
+ $i = 0;
+ $workArray = array_map(function($element) use (&$i) {
+ return [$i++, $element];
+ }, $byType);
+
+ usort($workArray, function ($a, $b) use ($al, $type) {
+ $result = $this->compare($a[1], $b[1], $al[$type]);
+ if($result === 0) {
+ $result = $a[0] - $b[0];
+ }
+ return $result;
+ });
+
+ // and remove the index values again
+ $byType = array_column($workArray, 1);
+ }
+ }
+
+ /**
+ * @param array $a
+ * @param array $b
+ * @param array $al
+ * @return int
+ */
+ protected function compare(array $a, array $b, array $al) {
+ $a = $a['value']['shareWith'];
+ $b = $b['value']['shareWith'];
+
+ $valueA = (int)in_array($a, $al, true);
+ $valueB = (int)in_array($b, $al, true);
+
+ return $valueB - $valueA;
+ }
+}
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 a7cf1a78971..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
@@ -373,15 +376,20 @@ class ShareController extends Controller {
$shareTmpl['previewMaxY'] = $this->config->getSystemValue('preview_max_y', 1024);
$shareTmpl['disclaimer'] = $this->config->getAppValue('core', 'shareapi_public_link_disclaimertext', null);
$shareTmpl['previewURL'] = $shareTmpl['downloadURL'];
+ $ogPreview = '';
if ($shareTmpl['previewSupported']) {
$shareTmpl['previewImage'] = $this->urlGenerator->linkToRouteAbsolute( 'files_sharing.PublicPreview.getPreview',
['x' => 200, 'y' => 200, 'file' => $shareTmpl['directory_path'], 't' => $shareTmpl['dirToken']]);
+ $ogPreview = $shareTmpl['previewImage'];
+
// We just have direct previews for image files
if ($share->getNode()->getMimePart() === 'image') {
$shareTmpl['previewURL'] = $this->urlGenerator->linkToRouteAbsolute('files_sharing.publicpreview.directLink', ['token' => $token]);
+ $ogPreview = $shareTmpl['previewURL'];
}
} else {
$shareTmpl['previewImage'] = $this->urlGenerator->getAbsoluteURL($this->urlGenerator->imagePath('core', 'favicon-fb.png'));
+ $ogPreview = $shareTmpl['previewImage'];
}
// Load files we need
@@ -406,12 +414,12 @@ class ShareController extends Controller {
}
// OpenGraph Support: http://ogp.me/
- \OCP\Util::addHeader('meta', ['property' => "og:title", 'content' => $this->defaults->getName() . ($this->defaults->getSlogan() !== '' ? ' - ' . $this->defaults->getSlogan() : '')]);
- \OCP\Util::addHeader('meta', ['property' => "og:description", 'content' => $this->l10n->t('%s is publicly shared', [$shareTmpl['filename']])]);
+ \OCP\Util::addHeader('meta', ['property' => "og:title", 'content' => $shareTmpl['filename']]);
+ \OCP\Util::addHeader('meta', ['property' => "og:description", 'content' => $this->defaults->getName() . ($this->defaults->getSlogan() !== '' ? ' - ' . $this->defaults->getSlogan() : '')]);
\OCP\Util::addHeader('meta', ['property' => "og:site_name", 'content' => $this->defaults->getName()]);
\OCP\Util::addHeader('meta', ['property' => "og:url", 'content' => $shareTmpl['shareUrl']]);
\OCP\Util::addHeader('meta', ['property' => "og:type", 'content' => "object"]);
- \OCP\Util::addHeader('meta', ['property' => "og:image", 'content' => $shareTmpl['previewImage']]);
+ \OCP\Util::addHeader('meta', ['property' => "og:image", 'content' => $ogPreview]);
$this->eventDispatcher->dispatch('OCA\Files_Sharing::loadAdditionalScripts');
@@ -458,6 +466,10 @@ class ShareController extends Controller {
if ($files_list === null) {
$files_list = [$files];
}
+ // Just in case $files is a single int like '1234'
+ if (!is_array($files_list)) {
+ $files_list = [$files_list];
+ }
}
$userFolder = $this->rootFolder->getUserFolder($share->getShareOwner());
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/templates/authenticate.php b/apps/files_sharing/templates/authenticate.php
index d9f19bbb579..20e200ef1ca 100644
--- a/apps/files_sharing/templates/authenticate.php
+++ b/apps/files_sharing/templates/authenticate.php
@@ -17,7 +17,7 @@
<input type="hidden" name="requesttoken" value="<?php p($_['requesttoken']) ?>" />
<input type="password" name="password" id="password"
placeholder="<?php p($l->t('Password')); ?>" value=""
- autocomplete="off" autocapitalize="off" autocorrect="off"
+ autocomplete="new-password" autocapitalize="off" autocorrect="off"
autofocus />
<input type="submit" id="password-submit"
class="svg icon-confirm input-button-inline" value="" disabled="disabled" />
diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php
index 8bbb53fa4e0..5417809b908 100644
--- a/apps/files_sharing/templates/public.php
+++ b/apps/files_sharing/templates/public.php
@@ -16,6 +16,7 @@
<input type="hidden" id="isPublic" name="isPublic" value="1">
<input type="hidden" name="dir" value="<?php p($_['dir']) ?>" id="dir">
<input type="hidden" name="downloadURL" value="<?php p($_['downloadURL']) ?>" id="downloadURL">
+<input type="hidden" name="previewURL" value="<?php p($_['previewURL']) ?>" id="previewURL">
<input type="hidden" name="sharingToken" value="<?php p($_['sharingToken']) ?>" id="sharingToken">
<input type="hidden" name="filename" value="<?php p($_['filename']) ?>" id="filename">
<input type="hidden" name="mimetype" value="<?php p($_['mimetype']) ?>" id="mimetype">
@@ -48,22 +49,38 @@ $maxUploadFilesize = min($upload_max_filesize, $post_max_size);
</div>
<div class="header-right">
- <?php if (!isset($_['hideFileList']) || (isset($_['hideFileList']) && $_['hideFileList'] === false)) {
- if ($_['server2serversharing']) {
- ?>
- <span id="save" data-protected="<?php p($_['protected']) ?>"
- data-owner-display-name="<?php p($_['displayName']) ?>" data-owner="<?php p($_['owner']) ?>" data-name="<?php p($_['filename']) ?>">
- <button id="save-button"><?php p($l->t('Add to your Nextcloud')) ?></button>
- <form class="save-form hidden" action="#">
- <input type="text" id="remote_address" placeholder="user@yourNextcloud.org"/>
- <button id="save-button-confirm" class="icon-confirm svg" disabled></button>
- </form>
- </span>
- <?php } ?>
- <a href="<?php p($_['downloadURL']); ?>" id="download" class="button">
- <span class="icon icon-download"></span>
- <span id="download-text"><?php p($l->t('Download'))?></span>
- </a>
+ <?php if (!isset($_['hideFileList']) || (isset($_['hideFileList']) && $_['hideFileList'] === false)) { ?>
+ <a href="#" id="share-menutoggle" class="menutoggle icon-more-white"><span class="share-menutoggle-text"><?php p($l->t('Download')) ?></span></a>
+ <div id="share-menu" class="popovermenu menu">
+ <ul>
+ <li>
+ <a href="<?php p($_['downloadURL']); ?>" id="download">
+ <span class="icon icon-download"></span>
+ <?php p($l->t('Download'))?>&nbsp;<span class="download-size">(<?php p($_['fileSize']) ?>)</span>
+ </a>
+ </li>
+ <li>
+ <a href="#" id="directLink-container">
+ <span class="icon icon-public"></span>
+ <label for="directLink"><?php p($l->t('Direct link')) ?></label>
+ <input id="directLink" type="text" readonly value="<?php p($_['previewURL']); ?>">
+ </a>
+ </li>
+ <?php if ($_['server2serversharing']) { ?>
+ <li>
+ <a href="#" id="save" data-protected="<?php p($_['protected']) ?>"
+ data-owner-display-name="<?php p($_['displayName']) ?>" data-owner="<?php p($_['owner']) ?>" data-name="<?php p($_['filename']) ?>">
+ <span class="icon icon-external"></span>
+ <span id="save-button"><?php p($l->t('Add to your Nextcloud')) ?></span>
+ <form class="save-form hidden" action="#">
+ <input type="text" id="remote_address" placeholder="user@yourNextcloud.org"/>
+ <button id="save-button-confirm" class="icon-confirm svg" disabled></button>
+ </form>
+ </a>
+ </li>
+ <?php } ?>
+ </ul>
+ </div>
<?php } ?>
</div>
</div></header>
@@ -84,16 +101,14 @@ $maxUploadFilesize = min($upload_max_filesize, $post_max_size);
<!-- Preview frame is filled via JS to support SVG images for modern browsers -->
<div id="imgframe"></div>
<?php endif; ?>
+ <?php if ($_['previewURL'] === $_['downloadURL']): ?>
<div class="directDownload">
<a href="<?php p($_['downloadURL']); ?>" id="downloadFile" class="button">
<span class="icon icon-download"></span>
<?php p($l->t('Download %s', array($_['filename'])))?> (<?php p($_['fileSize']) ?>)
</a>
</div>
- <div class="directLink">
- <label for="directLink"><?php p($l->t('Direct link')) ?></label>
- <input id="directLink" type="text" readonly value="<?php p($_['previewURL']); ?>">
- </div>
+ <?php endif; ?>
<?php endif; ?>
</div>
</div>
diff --git a/apps/files_sharing/tests/ApiTest.php b/apps/files_sharing/tests/ApiTest.php
index 1b629f66a81..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>
@@ -35,6 +37,8 @@ use OCP\AppFramework\OCS\OCSBadRequestException;
use OCP\AppFramework\OCS\OCSException;
use OCP\AppFramework\OCS\OCSForbiddenException;
use OCP\AppFramework\OCS\OCSNotFoundException;
+use OCP\IL10N;
+use OCP\IRequest;
/**
* Class ApiTest
@@ -96,7 +100,7 @@ class ApiTest extends TestCase {
* @return \OCA\Files_Sharing\Controller\ShareAPIController
*/
private function createOCS($userId) {
- $l = $this->getMockBuilder('\OCP\IL10N')->getMock();
+ $l = $this->getMockBuilder(IL10N::class)->getMock();
$l->method('t')
->will($this->returnCallback(function($text, $parameters = []) {
return vsprintf($text, $parameters);
@@ -104,7 +108,7 @@ class ApiTest extends TestCase {
return new ShareAPIController(
self::APP_NAME,
- $this->getMockBuilder('OCP\IRequest')->getMock(),
+ $this->getMockBuilder(IRequest::class)->getMock(),
$this->shareManager,
\OC::$server->getGroupManager(),
\OC::$server->getUserManager(),
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 1747bbc4ed2..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>
*
@@ -24,6 +26,7 @@
namespace OCA\Files_Sharing\Tests;
use OCA\Files_Sharing\Capabilities;
+use OCP\IConfig;
/**
@@ -54,7 +57,7 @@ class CapabilitiesTest extends \Test\TestCase {
* @return string[]
*/
private function getResults(array $map) {
- $config = $this->getMockBuilder('\OCP\IConfig')->disableOriginalConstructor()->getMock();
+ $config = $this->getMockBuilder(IConfig::class)->disableOriginalConstructor()->getMock();
$config->method('getAppValue')->will($this->returnValueMap($map));
$cap = new Capabilities($config);
$result = $this->getFilesSharingPart($cap->getCapabilities());
diff --git a/apps/files_sharing/tests/Collaboration/ShareRecipientSorterTest.php b/apps/files_sharing/tests/Collaboration/ShareRecipientSorterTest.php
new file mode 100644
index 00000000000..8f516788761
--- /dev/null
+++ b/apps/files_sharing/tests/Collaboration/ShareRecipientSorterTest.php
@@ -0,0 +1,258 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.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\Files_Sharing\Tests\Collaboration;
+
+
+use OCA\Files_Sharing\Collaboration\ShareRecipientSorter;
+use OCP\Files\Folder;
+use OCP\Files\IRootFolder;
+use OCP\Files\Node;
+use OCP\IUser;
+use OCP\IUserSession;
+use OCP\Share\IManager;
+use Test\TestCase;
+
+class ShareRecipientSorterTest extends TestCase {
+ /** @var IManager|\PHPUnit_Framework_MockObject_MockObject */
+ protected $shareManager;
+ /** @var IRootFolder|\PHPUnit_Framework_MockObject_MockObject */
+ protected $rootFolder;
+ /** @var IUserSession|\PHPUnit_Framework_MockObject_MockObject */
+ protected $userSession;
+ /** @var ShareRecipientSorter */
+ protected $sorter;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->shareManager = $this->createMock(IManager::class);
+ $this->rootFolder = $this->createMock(IRootFolder::class);
+ $this->userSession = $this->createMock(IUserSession::class);
+
+ $this->sorter = new ShareRecipientSorter($this->shareManager, $this->rootFolder, $this->userSession);
+ }
+
+ /**
+ * @dataProvider sortDataProvider
+ * @param $data
+ */
+ public function testSort($data) {
+ $node = $this->createMock(Node::class);
+
+ /** @var Folder|\PHPUnit_Framework_MockObject_MockObject $folder */
+ $folder = $this->createMock(Folder::class);
+ $this->rootFolder->expects($this->any())
+ ->method('getUserFolder')
+ ->willReturn($folder);
+
+ $user = $this->createMock(IUser::class);
+ $user->expects($this->any())
+ ->method('getUID')
+ ->willReturn('yvonne');
+
+ $this->userSession->expects($this->once())
+ ->method('getUser')
+ ->willReturn($user);
+
+ if ($data['context']['itemType'] === 'files') {
+ $folder->expects($this->once())
+ ->method('getById')
+ ->with($data['context']['itemId'])
+ ->willReturn([$node]);
+
+ $this->shareManager->expects($this->once())
+ ->method('getAccessList')
+ ->with($node)
+ ->willReturn($data['accessList']);
+ } else {
+ $folder->expects($this->never())
+ ->method('getById');
+ $this->shareManager->expects($this->never())
+ ->method('getAccessList');
+ }
+
+ $workArray = $data['input'];
+ $this->sorter->sort($workArray, $data['context']);
+
+ $this->assertEquals($data['expected'], $workArray);
+ }
+
+ public function testSortNoNodes() {
+ /** @var Folder|\PHPUnit_Framework_MockObject_MockObject $folder */
+ $folder = $this->createMock(Folder::class);
+ $this->rootFolder->expects($this->any())
+ ->method('getUserFolder')
+ ->willReturn($folder);
+
+ $folder->expects($this->once())
+ ->method('getById')
+ ->willReturn([]);
+
+ $user = $this->createMock(IUser::class);
+ $user->expects($this->any())
+ ->method('getUID')
+ ->willReturn('yvonne');
+
+ $this->userSession->expects($this->once())
+ ->method('getUser')
+ ->willReturn($user);
+
+ $this->shareManager->expects($this->never())
+ ->method('getAccessList');
+
+ $originalArray = [
+ 'users' => [
+ ['value' => ['shareWith' => 'alice']],
+ ['value' => ['shareWith' => 'bob']],
+ ]
+ ];
+ $workArray = $originalArray;
+ $this->sorter->sort($workArray, ['itemType' => 'files', 'itemId' => 404]);
+
+ $this->assertEquals($originalArray, $workArray);
+ }
+
+ public function sortDataProvider() {
+ return [[
+ [
+ #0 – sort properly and otherwise keep existing order
+ 'context' => ['itemType' => 'files', 'itemId' => 42],
+ 'accessList' => ['users' => ['celia', 'darius', 'faruk', 'gail'], 'bots' => ['r2-d2']],
+ 'input' => [
+ 'users' =>
+ [
+ ['value' => ['shareWith' => 'alice']],
+ ['value' => ['shareWith' => 'bob']],
+ ['value' => ['shareWith' => 'celia']],
+ ['value' => ['shareWith' => 'darius']],
+ ['value' => ['shareWith' => 'elena']],
+ ['value' => ['shareWith' => 'faruk']],
+ ['value' => ['shareWith' => 'gail']],
+ ],
+ 'bots' => [
+ ['value' => ['shareWith' => 'c-3po']],
+ ['value' => ['shareWith' => 'r2-d2']],
+ ]
+ ],
+ 'expected' => [
+ 'users' =>
+ [
+ ['value' => ['shareWith' => 'celia']],
+ ['value' => ['shareWith' => 'darius']],
+ ['value' => ['shareWith' => 'faruk']],
+ ['value' => ['shareWith' => 'gail']],
+ ['value' => ['shareWith' => 'alice']],
+ ['value' => ['shareWith' => 'bob']],
+ ['value' => ['shareWith' => 'elena']],
+ ],
+ 'bots' => [
+ ['value' => ['shareWith' => 'r2-d2']],
+ ['value' => ['shareWith' => 'c-3po']],
+ ]
+ ],
+ ],
+ [
+ #1 – no recipients
+ 'context' => ['itemType' => 'files', 'itemId' => 42],
+ 'accessList' => ['users' => false],
+ 'input' => [
+ 'users' =>
+ [
+ ['value' => ['shareWith' => 'alice']],
+ ['value' => ['shareWith' => 'bob']],
+ ['value' => ['shareWith' => 'celia']],
+ ['value' => ['shareWith' => 'darius']],
+ ['value' => ['shareWith' => 'elena']],
+ ['value' => ['shareWith' => 'faruk']],
+ ['value' => ['shareWith' => 'gail']],
+ ],
+ 'bots' => [
+ ['value' => ['shareWith' => 'c-3po']],
+ ['value' => ['shareWith' => 'r2-d2']],
+ ]
+ ],
+ 'expected' => [
+ 'users' =>
+ [
+ ['value' => ['shareWith' => 'alice']],
+ ['value' => ['shareWith' => 'bob']],
+ ['value' => ['shareWith' => 'celia']],
+ ['value' => ['shareWith' => 'darius']],
+ ['value' => ['shareWith' => 'elena']],
+ ['value' => ['shareWith' => 'faruk']],
+ ['value' => ['shareWith' => 'gail']],
+ ],
+ 'bots' => [
+ ['value' => ['shareWith' => 'c-3po']],
+ ['value' => ['shareWith' => 'r2-d2']],
+ ]
+ ],
+ ],
+ [
+ #2 – unsupported item type
+ 'context' => ['itemType' => 'announcements', 'itemId' => 42],
+ 'accessList' => null, // not needed
+ 'input' => [
+ 'users' =>
+ [
+ ['value' => ['shareWith' => 'alice']],
+ ['value' => ['shareWith' => 'bob']],
+ ['value' => ['shareWith' => 'celia']],
+ ['value' => ['shareWith' => 'darius']],
+ ['value' => ['shareWith' => 'elena']],
+ ['value' => ['shareWith' => 'faruk']],
+ ['value' => ['shareWith' => 'gail']],
+ ],
+ 'bots' => [
+ ['value' => ['shareWith' => 'c-3po']],
+ ['value' => ['shareWith' => 'r2-d2']],
+ ]
+ ],
+ 'expected' => [
+ 'users' =>
+ [
+ ['value' => ['shareWith' => 'alice']],
+ ['value' => ['shareWith' => 'bob']],
+ ['value' => ['shareWith' => 'celia']],
+ ['value' => ['shareWith' => 'darius']],
+ ['value' => ['shareWith' => 'elena']],
+ ['value' => ['shareWith' => 'faruk']],
+ ['value' => ['shareWith' => 'gail']],
+ ],
+ 'bots' => [
+ ['value' => ['shareWith' => 'c-3po']],
+ ['value' => ['shareWith' => 'r2-d2']],
+ ]
+ ],
+ ],
+ [
+ #3 – no nothing
+ 'context' => ['itemType' => 'files', 'itemId' => 42],
+ 'accessList' => [],
+ 'input' => [],
+ 'expected' => [],
+ ],
+ ]];
+ }
+}
diff --git a/apps/files_sharing/tests/Command/CleanupRemoteStoragesTest.php b/apps/files_sharing/tests/Command/CleanupRemoteStoragesTest.php
index 827fcc15797..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
@@ -22,6 +24,8 @@
namespace OCA\Files_Sharing\Tests\Command;
use OCA\Files_Sharing\Command\CleanupRemoteStorages;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
use Test\TestCase;
/**
@@ -158,10 +162,10 @@ class CleanupRemoteStoragesTest extends TestCase {
* Test cleanup of orphaned storages
*/
public function testCleanup() {
- $input = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')
+ $input = $this->getMockBuilder(InputInterface::class)
->disableOriginalConstructor()
->getMock();
- $output = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface')
+ $output = $this->getMockBuilder(OutputInterface::class)
->disableOriginalConstructor()
->getMock();
diff --git a/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php b/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php
index 45134df36b7..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
@@ -25,7 +28,9 @@ namespace OCA\Files_Sharing\Tests\Controller;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCS\OCSNotFoundException;
+use OCP\Files\File;
use OCP\Files\Folder;
+use OCP\Files\Storage;
use OCP\IL10N;
use OCA\Files_Sharing\Controller\ShareAPIController;
use OCP\Files\NotFoundException;
@@ -156,7 +161,7 @@ class ShareAPIControllerTest extends TestCase {
}
public function testDeleteShare() {
- $node = $this->getMockBuilder('\OCP\Files\File')->getMock();
+ $node = $this->getMockBuilder(File::class)->getMock();
$share = $this->newShare();
$share->setSharedBy($this->currentUser)
@@ -187,7 +192,7 @@ class ShareAPIControllerTest extends TestCase {
* @expectedExceptionMessage could not delete share
*/
public function testDeleteShareLocked() {
- $node = $this->getMockBuilder('\OCP\Files\File')->getMock();
+ $node = $this->getMockBuilder(File::class)->getMock();
$share = $this->newShare();
$share->setSharedBy($this->currentUser)
@@ -228,7 +233,7 @@ class ShareAPIControllerTest extends TestCase {
public function createShare($id, $shareType, $sharedWith, $sharedBy, $shareOwner, $path, $permissions,
$shareTime, $expiration, $parent, $target, $mail_send, $token=null,
$password=null) {
- $share = $this->getMockBuilder('\OCP\Share\IShare')->getMock();
+ $share = $this->getMockBuilder(IShare::class)->getMock();
$share->method('getId')->willReturn($id);
$share->method('getShareType')->willReturn($shareType);
$share->method('getSharedWith')->willReturn($sharedWith);
@@ -262,7 +267,7 @@ class ShareAPIControllerTest extends TestCase {
->getMock();
$cache->method('getNumericStorageId')->willReturn(101);
- $storage = $this->getMockBuilder('OC\Files\Storage\Storage')
+ $storage = $this->getMockBuilder(Storage::class)
->disableOriginalConstructor()
->getMock();
$storage->method('getId')->willReturn('STORAGE');
@@ -464,15 +469,15 @@ class ShareAPIControllerTest extends TestCase {
->method('linkToRouteAbsolute')
->willReturn('url');
- $initiator = $this->getMockBuilder('OCP\IUser')->getMock();
+ $initiator = $this->getMockBuilder(IUser::class)->getMock();
$initiator->method('getUID')->willReturn('initiatorId');
$initiator->method('getDisplayName')->willReturn('initiatorDisplay');
- $owner = $this->getMockBuilder('OCP\IUser')->getMock();
+ $owner = $this->getMockBuilder(IUser::class)->getMock();
$owner->method('getUID')->willReturn('ownerId');
$owner->method('getDisplayName')->willReturn('ownerDisplay');
- $user = $this->getMockBuilder('OCP\IUser')->getMock();
+ $user = $this->getMockBuilder(IUser::class)->getMock();
$user->method('getUID')->willReturn('userId');
$user->method('getDisplayName')->willReturn('userDisplay');
@@ -511,25 +516,25 @@ class ShareAPIControllerTest extends TestCase {
}
public function testCanAccessShare() {
- $share = $this->getMockBuilder('OCP\Share\IShare')->getMock();
+ $share = $this->getMockBuilder(IShare::class)->getMock();
$share->method('getShareOwner')->willReturn($this->currentUser);
$this->assertTrue($this->invokePrivate($this->ocs, 'canAccessShare', [$share]));
- $share = $this->getMockBuilder('OCP\Share\IShare')->getMock();
+ $share = $this->getMockBuilder(IShare::class)->getMock();
$share->method('getSharedBy')->willReturn($this->currentUser);
$this->assertTrue($this->invokePrivate($this->ocs, 'canAccessShare', [$share]));
- $share = $this->getMockBuilder('OCP\Share\IShare')->getMock();
+ $share = $this->getMockBuilder(IShare::class)->getMock();
$share->method('getShareType')->willReturn(\OCP\Share::SHARE_TYPE_USER);
$share->method('getSharedWith')->willReturn($this->currentUser);
$this->assertTrue($this->invokePrivate($this->ocs, 'canAccessShare', [$share]));
- $share = $this->getMockBuilder('OCP\Share\IShare')->getMock();
+ $share = $this->getMockBuilder(IShare::class)->getMock();
$share->method('getShareType')->willReturn(\OCP\Share::SHARE_TYPE_USER);
- $share->method('getSharedWith')->willReturn($this->getMockBuilder('OCP\IUser')->getMock());
+ $share->method('getSharedWith')->willReturn($this->getMockBuilder(IUser::class)->getMock());
$this->assertFalse($this->invokePrivate($this->ocs, 'canAccessShare', [$share]));
- $share = $this->getMockBuilder('OCP\Share\IShare')->getMock();
+ $share = $this->getMockBuilder(IShare::class)->getMock();
$share->method('getShareType')->willReturn(\OCP\Share::SHARE_TYPE_GROUP);
$share->method('getSharedWith')->willReturn('group');
@@ -579,7 +584,7 @@ class ShareAPIControllerTest extends TestCase {
* @expectedExceptionMessage Wrong path, file/folder doesn't exist
*/
public function testCreateShareInvalidPath() {
- $userFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $userFolder = $this->getMockBuilder(Folder::class)->getMock();
$this->rootFolder->expects($this->once())
->method('getUserFolder')
->with('currentUser')
@@ -601,13 +606,13 @@ class ShareAPIControllerTest extends TestCase {
$share = $this->newShare();
$this->shareManager->method('newShare')->willReturn($share);
- $userFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $userFolder = $this->getMockBuilder(Folder::class)->getMock();
$this->rootFolder->expects($this->once())
->method('getUserFolder')
->with('currentUser')
->willReturn($userFolder);
- $path = $this->getMockBuilder('\OCP\Files\File')->getMock();
+ $path = $this->getMockBuilder(File::class)->getMock();
$userFolder->expects($this->once())
->method('get')
->with('valid-path')
@@ -628,14 +633,14 @@ class ShareAPIControllerTest extends TestCase {
$share = $this->newShare();
$this->shareManager->method('newShare')->willReturn($share);
- $userFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $userFolder = $this->getMockBuilder(Folder::class)->getMock();
$this->rootFolder->expects($this->once())
->method('getUserFolder')
->with('currentUser')
->willReturn($userFolder);
- $path = $this->getMockBuilder('\OCP\Files\File')->getMock();
- $storage = $this->getMockBuilder('OCP\Files\Storage')->getMock();
+ $path = $this->getMockBuilder(File::class)->getMock();
+ $storage = $this->getMockBuilder(Storage::class)->getMock();
$storage->method('instanceOfStorage')
->with('OCA\Files_Sharing\External\Storage')
->willReturn(false);
@@ -660,14 +665,14 @@ class ShareAPIControllerTest extends TestCase {
$share = $this->newShare();
$this->shareManager->method('newShare')->willReturn($share);
- $userFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $userFolder = $this->getMockBuilder(Folder::class)->getMock();
$this->rootFolder->expects($this->once())
->method('getUserFolder')
->with('currentUser')
->willReturn($userFolder);
- $path = $this->getMockBuilder('\OCP\Files\File')->getMock();
- $storage = $this->getMockBuilder('OCP\Files\Storage')->getMock();
+ $path = $this->getMockBuilder(File::class)->getMock();
+ $storage = $this->getMockBuilder(Storage::class)->getMock();
$storage->method('instanceOfStorage')
->with('OCA\Files_Sharing\External\Storage')
->willReturn(false);
@@ -705,14 +710,14 @@ class ShareAPIControllerTest extends TestCase {
])->setMethods(['formatShare'])
->getMock();
- $userFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $userFolder = $this->getMockBuilder(Folder::class)->getMock();
$this->rootFolder->expects($this->once())
->method('getUserFolder')
->with('currentUser')
->willReturn($userFolder);
- $path = $this->getMockBuilder('\OCP\Files\File')->getMock();
- $storage = $this->getMockBuilder('OCP\Files\Storage')->getMock();
+ $path = $this->getMockBuilder(File::class)->getMock();
+ $storage = $this->getMockBuilder(Storage::class)->getMock();
$storage->method('instanceOfStorage')
->with('OCA\Files_Sharing\External\Storage')
->willReturn(false);
@@ -759,14 +764,14 @@ class ShareAPIControllerTest extends TestCase {
$this->shareManager->method('createShare')->will($this->returnArgument(0));
$this->shareManager->method('allowGroupSharing')->willReturn(true);
- $userFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $userFolder = $this->getMockBuilder(Folder::class)->getMock();
$this->rootFolder->expects($this->once())
->method('getUserFolder')
->with('currentUser')
->willReturn($userFolder);
- $path = $this->getMockBuilder('\OCP\Files\File')->getMock();
- $storage = $this->getMockBuilder('OCP\Files\Storage')->getMock();
+ $path = $this->getMockBuilder(File::class)->getMock();
+ $storage = $this->getMockBuilder(Storage::class)->getMock();
$storage->method('instanceOfStorage')
->with('OCA\Files_Sharing\External\Storage')
->willReturn(false);
@@ -811,14 +816,14 @@ class ShareAPIControllerTest extends TestCase {
['shareWith', null, 'validGroup'],
]));
- $userFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $userFolder = $this->getMockBuilder(Folder::class)->getMock();
$this->rootFolder->expects($this->once())
->method('getUserFolder')
->with('currentUser')
->willReturn($userFolder);
- $path = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
- $storage = $this->getMockBuilder('OCP\Files\Storage')->getMock();
+ $path = $this->getMockBuilder(Folder::class)->getMock();
+ $storage = $this->getMockBuilder(Storage::class)->getMock();
$storage->method('instanceOfStorage')
->with('OCA\Files_Sharing\External\Storage')
->willReturn(false);
@@ -863,14 +868,14 @@ class ShareAPIControllerTest extends TestCase {
$share = $this->newShare();
$this->shareManager->method('newShare')->willReturn($share);
- $userFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $userFolder = $this->getMockBuilder(Folder::class)->getMock();
$this->rootFolder->expects($this->once())
->method('getUserFolder')
->with('currentUser')
->willReturn($userFolder);
- $path = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
- $storage = $this->getMockBuilder('OCP\Files\Storage')->getMock();
+ $path = $this->getMockBuilder(Folder::class)->getMock();
+ $storage = $this->getMockBuilder(Storage::class)->getMock();
$storage->method('instanceOfStorage')
->with('OCA\Files_Sharing\External\Storage')
->willReturn(false);
@@ -901,8 +906,8 @@ class ShareAPIControllerTest extends TestCase {
['shareType', '-1', \OCP\Share::SHARE_TYPE_LINK],
]));
- $path = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
- $storage = $this->getMockBuilder('OCP\Files\Storage')->getMock();
+ $path = $this->getMockBuilder(Folder::class)->getMock();
+ $storage = $this->getMockBuilder(Storage::class)->getMock();
$storage->method('instanceOfStorage')
->with('OCA\Files_Sharing\External\Storage')
->willReturn(false);
@@ -920,8 +925,8 @@ class ShareAPIControllerTest extends TestCase {
* @expectedExceptionMessage Public upload disabled by the administrator
*/
public function testCreateShareLinkNoPublicUpload() {
- $path = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
- $storage = $this->getMockBuilder('OCP\Files\Storage')->getMock();
+ $path = $this->getMockBuilder(Folder::class)->getMock();
+ $storage = $this->getMockBuilder(Storage::class)->getMock();
$storage->method('instanceOfStorage')
->with('OCA\Files_Sharing\External\Storage')
->willReturn(false);
@@ -940,8 +945,8 @@ class ShareAPIControllerTest extends TestCase {
* @expectedExceptionMessage Public upload is only possible for publicly shared folders
*/
public function testCreateShareLinkPublicUploadFile() {
- $path = $this->getMockBuilder('\OCP\Files\File')->getMock();
- $storage = $this->getMockBuilder('OCP\Files\Storage')->getMock();
+ $path = $this->getMockBuilder(File::class)->getMock();
+ $storage = $this->getMockBuilder(Storage::class)->getMock();
$storage->method('instanceOfStorage')
->with('OCA\Files_Sharing\External\Storage')
->willReturn(false);
@@ -959,8 +964,8 @@ class ShareAPIControllerTest extends TestCase {
public function testCreateShareLinkPublicUploadFolder() {
$ocs = $this->mockFormatShare();
- $path = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
- $storage = $this->getMockBuilder('OCP\Files\Storage')->getMock();
+ $path = $this->getMockBuilder(Folder::class)->getMock();
+ $storage = $this->getMockBuilder(Storage::class)->getMock();
$storage->method('instanceOfStorage')
->with('OCA\Files_Sharing\External\Storage')
->willReturn(false);
@@ -993,8 +998,8 @@ class ShareAPIControllerTest extends TestCase {
public function testCreateShareLinkPassword() {
$ocs = $this->mockFormatShare();
- $path = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
- $storage = $this->getMockBuilder('OCP\Files\Storage')->getMock();
+ $path = $this->getMockBuilder(Folder::class)->getMock();
+ $storage = $this->getMockBuilder(Storage::class)->getMock();
$storage->method('instanceOfStorage')
->with('OCA\Files_Sharing\External\Storage')
->willReturn(false);
@@ -1037,8 +1042,8 @@ class ShareAPIControllerTest extends TestCase {
['password', '', ''],
]));
- $path = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
- $storage = $this->getMockBuilder('OCP\Files\Storage')->getMock();
+ $path = $this->getMockBuilder(Folder::class)->getMock();
+ $storage = $this->getMockBuilder(Storage::class)->getMock();
$storage->method('instanceOfStorage')
->with('OCA\Files_Sharing\External\Storage')
->willReturn(false);
@@ -1078,8 +1083,8 @@ class ShareAPIControllerTest extends TestCase {
public function testCreateShareInvalidExpireDate() {
$ocs = $this->mockFormatShare();
- $path = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
- $storage = $this->getMockBuilder('OCP\Files\Storage')->getMock();
+ $path = $this->getMockBuilder(Folder::class)->getMock();
+ $storage = $this->getMockBuilder(Storage::class)->getMock();
$storage->method('instanceOfStorage')
->with('OCA\Files_Sharing\External\Storage')
->willReturn(false);
@@ -1117,14 +1122,14 @@ class ShareAPIControllerTest extends TestCase {
])->setMethods(['formatShare'])
->getMock();
- $userFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $userFolder = $this->getMockBuilder(Folder::class)->getMock();
$this->rootFolder->expects($this->once())
->method('getUserFolder')
->with('currentUser')
->willReturn($userFolder);
- $path = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
- $storage = $this->getMockBuilder('OCP\Files\Storage')->getMock();
+ $path = $this->getMockBuilder(Folder::class)->getMock();
+ $storage = $this->getMockBuilder(Storage::class)->getMock();
$storage->method('instanceOfStorage')
->with('OCA\Files_Sharing\External\Storage')
->willReturn(true);
@@ -1153,7 +1158,7 @@ class ShareAPIControllerTest extends TestCase {
* @expectedExceptionMessage Wrong share ID, share doesn't exist
*/
public function testUpdateShareCantAccess() {
- $node = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $node = $this->getMockBuilder(Folder::class)->getMock();
$share = $this->newShare();
$share->setNode($node);
@@ -1171,7 +1176,7 @@ class ShareAPIControllerTest extends TestCase {
* @expectedExceptionMessage Wrong or no update parameter given
*/
public function testUpdateNoParametersLink() {
- $node = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $node = $this->getMockBuilder(Folder::class)->getMock();
$share = $this->newShare();
$share->setPermissions(\OCP\Constants::PERMISSION_ALL)
->setSharedBy($this->currentUser)
@@ -1192,7 +1197,7 @@ class ShareAPIControllerTest extends TestCase {
* @expectedExceptionMessage Wrong or no update parameter given
*/
public function testUpdateNoParametersOther() {
- $node = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $node = $this->getMockBuilder(Folder::class)->getMock();
$share = $this->newShare();
$share->setPermissions(\OCP\Constants::PERMISSION_ALL)
->setSharedBy($this->currentUser)
@@ -1248,7 +1253,7 @@ class ShareAPIControllerTest extends TestCase {
public function testUpdateLinkShareSet() {
$ocs = $this->mockFormatShare();
- $folder = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $folder = $this->getMockBuilder(Folder::class)->getMock();
$share = \OC::$server->getShareManager()->newShare();
$share->setPermissions(\OCP\Constants::PERMISSION_ALL)
@@ -1286,7 +1291,7 @@ class ShareAPIControllerTest extends TestCase {
public function testUpdateLinkShareEnablePublicUpload($permissions, $publicUpload, $expireDate, $password) {
$ocs = $this->mockFormatShare();
- $folder = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $folder = $this->getMockBuilder(Folder::class)->getMock();
$share = \OC::$server->getShareManager()->newShare();
$share->setPermissions(\OCP\Constants::PERMISSION_ALL)
@@ -1321,7 +1326,7 @@ class ShareAPIControllerTest extends TestCase {
public function testUpdateLinkShareInvalidDate() {
$ocs = $this->mockFormatShare();
- $folder = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $folder = $this->getMockBuilder(Folder::class)->getMock();
$share = \OC::$server->getShareManager()->newShare();
$share->setPermissions(\OCP\Constants::PERMISSION_ALL)
@@ -1359,7 +1364,7 @@ class ShareAPIControllerTest extends TestCase {
public function testUpdateLinkSharePublicUploadNotAllowed($permissions, $publicUpload, $expireDate, $password) {
$ocs = $this->mockFormatShare();
- $folder = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $folder = $this->getMockBuilder(Folder::class)->getMock();
$share = \OC::$server->getShareManager()->newShare();
$share->setPermissions(\OCP\Constants::PERMISSION_ALL)
@@ -1380,7 +1385,7 @@ class ShareAPIControllerTest extends TestCase {
public function testUpdateLinkSharePublicUploadOnFile() {
$ocs = $this->mockFormatShare();
- $file = $this->getMockBuilder('\OCP\Files\File')->getMock();
+ $file = $this->getMockBuilder(File::class)->getMock();
$share = \OC::$server->getShareManager()->newShare();
$share->setPermissions(\OCP\Constants::PERMISSION_ALL)
@@ -1400,7 +1405,7 @@ class ShareAPIControllerTest extends TestCase {
$date = new \DateTime('2000-01-01');
$date->setTime(0,0,0);
- $node = $this->getMockBuilder('\OCP\Files\File')->getMock();
+ $node = $this->getMockBuilder(File::class)->getMock();
$share = $this->newShare();
$share->setPermissions(\OCP\Constants::PERMISSION_ALL)
->setSharedBy($this->currentUser)
@@ -1434,7 +1439,7 @@ class ShareAPIControllerTest extends TestCase {
public function testUpdateLinkShareExpireDateDoesNotChangeOther() {
$ocs = $this->mockFormatShare();
- $node = $this->getMockBuilder('\OCP\Files\File')->getMock();
+ $node = $this->getMockBuilder(File::class)->getMock();
$share = $this->newShare();
$share->setPermissions(\OCP\Constants::PERMISSION_ALL)
->setSharedBy($this->currentUser)
@@ -1473,7 +1478,7 @@ class ShareAPIControllerTest extends TestCase {
$date = new \DateTime('2000-01-01');
- $folder = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $folder = $this->getMockBuilder(Folder::class)->getMock();
$share = \OC::$server->getShareManager()->newShare();
$share->setPermissions(\OCP\Constants::PERMISSION_ALL)
@@ -1510,7 +1515,7 @@ class ShareAPIControllerTest extends TestCase {
$date = new \DateTime('2000-01-01');
- $folder = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $folder = $this->getMockBuilder(Folder::class)->getMock();
$share = \OC::$server->getShareManager()->newShare();
$share->setPermissions(\OCP\Constants::PERMISSION_ALL)
@@ -1546,7 +1551,7 @@ class ShareAPIControllerTest extends TestCase {
$date = new \DateTime('2000-01-01');
- $folder = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $folder = $this->getMockBuilder(Folder::class)->getMock();
$share = \OC::$server->getShareManager()->newShare();
$share->setPermissions(\OCP\Constants::PERMISSION_ALL)
@@ -1580,7 +1585,7 @@ class ShareAPIControllerTest extends TestCase {
public function testUpdateOtherPermissions() {
$ocs = $this->mockFormatShare();
- $file = $this->getMockBuilder('\OCP\Files\File')->getMock();
+ $file = $this->getMockBuilder(File::class)->getMock();
$share = \OC::$server->getShareManager()->newShare();
$share->setPermissions(\OCP\Constants::PERMISSION_ALL)
@@ -1750,9 +1755,9 @@ class ShareAPIControllerTest extends TestCase {
}
public function dataFormatShare() {
- $file = $this->getMockBuilder('\OCP\Files\File')->getMock();
- $folder = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
- $parent = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
+ $file = $this->getMockBuilder(File::class)->getMock();
+ $folder = $this->getMockBuilder(Folder::class)->getMock();
+ $parent = $this->getMockBuilder(Folder::class)->getMock();
$file->method('getMimeType')->willReturn('myMimeType');
$folder->method('getMimeType')->willReturn('myFolderMimeType');
@@ -1769,18 +1774,18 @@ class ShareAPIControllerTest extends TestCase {
$cache = $this->getMockBuilder('OCP\Files\Cache\ICache')->getMock();
$cache->method('getNumericStorageId')->willReturn(100);
- $storage = $this->getMockBuilder('\OCP\Files\Storage')->getMock();
+ $storage = $this->getMockBuilder(Storage::class)->getMock();
$storage->method('getId')->willReturn('storageId');
$storage->method('getCache')->willReturn($cache);
$file->method('getStorage')->willReturn($storage);
$folder->method('getStorage')->willReturn($storage);
- $owner = $this->getMockBuilder('\OCP\IUser')->getMock();
+ $owner = $this->getMockBuilder(IUser::class)->getMock();
$owner->method('getDisplayName')->willReturn('ownerDN');
- $initiator = $this->getMockBuilder('\OCP\IUser')->getMock();
+ $initiator = $this->getMockBuilder(IUser::class)->getMock();
$initiator->method('getDisplayName')->willReturn('initiatorDN');
- $recipient = $this->getMockBuilder('\OCP\IUser')->getMock();
+ $recipient = $this->getMockBuilder(IUser::class)->getMock();
$recipient->method('getDisplayName')->willReturn('recipientDN');
$result = [];
diff --git a/apps/files_sharing/tests/Controller/ShareControllerTest.php b/apps/files_sharing/tests/Controller/ShareControllerTest.php
index 7a017b5e3b7..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>
@@ -35,6 +35,12 @@ use OC\Files\Filesystem;
use OCA\FederatedFileSharing\FederatedShareProvider;
use OCA\Files_Sharing\Controller\ShareController;
use OCP\AppFramework\Http\DataResponse;
+use OCP\IConfig;
+use OCP\IL10N;
+use OCP\ILogger;
+use OCP\IPreview;
+use OCP\IRequest;
+use OCP\IUser;
use OCP\Share\Exceptions\ShareNotFound;
use OCP\AppFramework\Http\NotFoundResponse;
use OCP\AppFramework\Http\RedirectResponse;
@@ -43,6 +49,7 @@ use OCP\ISession;
use OCP\IUserManager;
use OCP\Security\ISecureRandom;
use OCP\IURLGenerator;
+use OCP\Share\IShare;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
/**
@@ -83,11 +90,11 @@ class ShareControllerTest extends \Test\TestCase {
$this->appName = 'files_sharing';
$this->shareManager = $this->getMockBuilder('\OC\Share20\Manager')->disableOriginalConstructor()->getMock();
- $this->urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')->getMock();
- $this->session = $this->getMockBuilder('\OCP\ISession')->getMock();
- $this->previewManager = $this->getMockBuilder('\OCP\IPreview')->getMock();
- $this->config = $this->getMockBuilder('\OCP\IConfig')->getMock();
- $this->userManager = $this->getMockBuilder('\OCP\IUserManager')->getMock();
+ $this->urlGenerator = $this->getMockBuilder(IURLGenerator::class)->getMock();
+ $this->session = $this->getMockBuilder(ISession::class)->getMock();
+ $this->previewManager = $this->getMockBuilder(IPreview::class)->getMock();
+ $this->config = $this->getMockBuilder(IConfig::class)->getMock();
+ $this->userManager = $this->getMockBuilder(IUserManager::class)->getMock();
$this->federatedShareProvider = $this->getMockBuilder('OCA\FederatedFileSharing\FederatedShareProvider')
->disableOriginalConstructor()->getMock();
$this->federatedShareProvider->expects($this->any())
@@ -98,11 +105,11 @@ class ShareControllerTest extends \Test\TestCase {
$this->shareController = new \OCA\Files_Sharing\Controller\ShareController(
$this->appName,
- $this->getMockBuilder('\OCP\IRequest')->getMock(),
+ $this->getMockBuilder(IRequest::class)->getMock(),
$this->config,
$this->urlGenerator,
$this->userManager,
- $this->getMockBuilder('\OCP\ILogger')->getMock(),
+ $this->getMockBuilder(ILogger::class)->getMock(),
$this->getMockBuilder('\OCP\Activity\IManager')->getMock(),
$this->shareManager,
$this->session,
@@ -110,7 +117,7 @@ class ShareControllerTest extends \Test\TestCase {
$this->getMockBuilder('\OCP\Files\IRootFolder')->getMock(),
$this->federatedShareProvider,
$this->eventDispatcher,
- $this->getMockBuilder('\OCP\IL10N')->getMock(),
+ $this->getMockBuilder(IL10N::class)->getMock(),
$this->getMockBuilder('\OCP\Defaults')->getMock()
);
@@ -320,7 +327,7 @@ class ShareControllerTest extends \Test\TestCase {
public function testShowShare() {
- $owner = $this->getMockBuilder('OCP\IUser')->getMock();
+ $owner = $this->getMockBuilder(IUser::class)->getMock();
$owner->method('getDisplayName')->willReturn('ownerDisplay');
$owner->method('getUID')->willReturn('ownerUID');
@@ -412,7 +419,7 @@ class ShareControllerTest extends \Test\TestCase {
* @expectedException \OCP\Files\NotFoundException
*/
public function testShowShareInvalid() {
- $owner = $this->getMockBuilder('OCP\IUser')->getMock();
+ $owner = $this->getMockBuilder(IUser::class)->getMock();
$owner->method('getDisplayName')->willReturn('ownerDisplay');
$owner->method('getUID')->willReturn('ownerUID');
@@ -457,7 +464,7 @@ class ShareControllerTest extends \Test\TestCase {
}
public function testDownloadShare() {
- $share = $this->getMockBuilder('\OCP\Share\IShare')->getMock();
+ $share = $this->getMockBuilder(IShare::class)->getMock();
$share->method('getPassword')->willReturn('password');
$share
->expects($this->once())
@@ -482,7 +489,7 @@ class ShareControllerTest extends \Test\TestCase {
}
public function testDownloadShareWithCreateOnlyShare() {
- $share = $this->getMockBuilder('\OCP\Share\IShare')->getMock();
+ $share = $this->getMockBuilder(IShare::class)->getMock();
$share->method('getPassword')->willReturn('password');
$share
->expects($this->once())
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 9f60261c203..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
@@ -27,7 +29,6 @@ namespace OCA\Files_Sharing\Tests\External;
use OC\Federation\CloudIdManager;
use OC\Files\Storage\StorageFactory;
-use OCA\FederatedFileSharing\DiscoveryManager;
use OCA\Files_Sharing\External\Manager;
use OCA\Files_Sharing\External\MountProvider;
use OCA\Files_Sharing\Tests\TestCase;
@@ -68,7 +69,7 @@ class ManagerTest extends TestCase {
$this->createUser($this->uid, '');
$this->user = \OC::$server->getUserManager()->get($this->uid);
$this->mountManager = new \OC\Files\Mount\Manager();
- $this->clientService = $this->getMockBuilder('\OCP\Http\Client\IClientService')
+ $this->clientService = $this->getMockBuilder(IClientService::class)
->disableOriginalConstructor()->getMock();
$this->manager = new Manager(
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 04476987a32..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>
@@ -60,11 +62,11 @@ class MountProviderTest extends \Test\TestCase {
public function setUp() {
parent::setUp();
- $this->config = $this->getMockBuilder('OCP\IConfig')->getMock();
- $this->user = $this->getMockBuilder('OCP\IUser')->getMock();
+ $this->config = $this->getMockBuilder(IConfig::class)->getMock();
+ $this->user = $this->getMockBuilder(IUser::class)->getMock();
$this->loader = $this->getMockBuilder('OCP\Files\Storage\IStorageFactory')->getMock();
- $this->shareManager = $this->getMockBuilder('\OCP\Share\IManager')->getMock();
- $this->logger = $this->getMockBuilder('\OCP\ILogger')->getMock();
+ $this->shareManager = $this->getMockBuilder(IManager::class)->getMock();
+ $this->logger = $this->getMockBuilder(ILogger::class)->getMock();
$this->provider = new MountProvider($this->config, $this->shareManager, $this->logger);
}
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 63000152b5a..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>
@@ -70,7 +71,7 @@ class UpdaterTest extends TestCase {
* that the mount point doesn't end up at the trash bin
*/
public function testDeleteParentFolder() {
- $status = \OC_App::isEnabled('files_trashbin');
+ $status = \OC::$server->getAppManager()->isEnabledForUser('files_trashbin');
(new \OC_App())->enable('files_trashbin');
diff --git a/apps/files_sharing/tests/js/shareSpec.js b/apps/files_sharing/tests/js/shareSpec.js
index ea2f427df75..5b0a78c9c64 100644
--- a/apps/files_sharing/tests/js/shareSpec.js
+++ b/apps/files_sharing/tests/js/shareSpec.js
@@ -145,7 +145,7 @@ describe('OCA.Sharing.Util tests', function() {
}]);
$tr = fileList.$el.find('tbody tr:first');
$action = $tr.find('.action-share');
- expect($action.find('>span').text().trim()).toEqual('User One');
+ expect($action.find('>span').text().trim()).toEqual('Shared by User One');
expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg');
@@ -166,7 +166,7 @@ describe('OCA.Sharing.Util tests', function() {
}]);
$tr = fileList.$el.find('tbody tr:first');
$action = $tr.find('.action-share');
- expect($action.find('>span').text().trim()).toEqual('Shared with User One, User Two');
+ expect($action.text().trim()).toEqual('Shared with User One Shared with User Two');
expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg');
@@ -273,7 +273,7 @@ describe('OCA.Sharing.Util tests', function() {
expect($tr.attr('data-share-recipients')).toEqual('Group One, Group Two, User One, User Two');
- expect($action.find('>span').text().trim()).toEqual('Shared with Group One, Group Two, User One, User Two');
+ expect($action.text().trim()).toEqual('Shared with Group One Shared with Group Two Shared with User One Shared with User Two');
expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
});
@@ -306,7 +306,7 @@ describe('OCA.Sharing.Util tests', function() {
expect($tr.attr('data-share-recipients')).toEqual('User One, User Three, User Two');
- expect($action.find('>span').text().trim()).toEqual('Shared with User One, User Three, User Two');
+ expect($action.text().trim()).toEqual('Shared with User One Shared with User Three Shared with User Two');
expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
});
@@ -362,7 +362,7 @@ describe('OCA.Sharing.Util tests', function() {
expect($tr.attr('data-share-recipients')).toEqual('User Two');
- expect($action.find('>span').text().trim()).toEqual('User One');
+ expect($action.find('>span').text().trim()).toEqual('Shared by User One');
expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
});
@@ -393,7 +393,7 @@ describe('OCA.Sharing.Util tests', function() {
expect($tr.attr('data-share-recipients')).not.toBeDefined();
- expect($action.find('>span').text().trim()).toEqual('User One');
+ expect($action.find('>span').text().trim()).toEqual('Shared by User One');
expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
});
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/composer/autoload.php b/apps/files_trashbin/composer/autoload.php
new file mode 100644
index 00000000000..ae6d572163f
--- /dev/null
+++ b/apps/files_trashbin/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitFiles_Trashbin::getLoader();
diff --git a/apps/files_trashbin/composer/composer.json b/apps/files_trashbin/composer/composer.json
new file mode 100644
index 00000000000..c43b78e83ea
--- /dev/null
+++ b/apps/files_trashbin/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "Files_Trashbin"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\Files_Trashbin\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/files_trashbin/composer/composer/ClassLoader.php b/apps/files_trashbin/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/files_trashbin/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/files_trashbin/composer/composer/LICENSE b/apps/files_trashbin/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/files_trashbin/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/files_trashbin/composer/composer/autoload_classmap.php b/apps/files_trashbin/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..2e58c7b1c6c
--- /dev/null
+++ b/apps/files_trashbin/composer/composer/autoload_classmap.php
@@ -0,0 +1,23 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Files_Trashbin\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\Files_Trashbin\\BackgroundJob\\ExpireTrash' => $baseDir . '/../lib/BackgroundJob/ExpireTrash.php',
+ 'OCA\\Files_Trashbin\\Capabilities' => $baseDir . '/../lib/Capabilities.php',
+ 'OCA\\Files_Trashbin\\Command\\CleanUp' => $baseDir . '/../lib/Command/CleanUp.php',
+ 'OCA\\Files_Trashbin\\Command\\Expire' => $baseDir . '/../lib/Command/Expire.php',
+ 'OCA\\Files_Trashbin\\Command\\ExpireTrash' => $baseDir . '/../lib/Command/ExpireTrash.php',
+ 'OCA\\Files_Trashbin\\Controller\\PreviewController' => $baseDir . '/../lib/Controller/PreviewController.php',
+ 'OCA\\Files_Trashbin\\Events\\MoveToTrashEvent' => $baseDir . '/../lib/Events/MoveToTrashEvent.php',
+ 'OCA\\Files_Trashbin\\Exceptions\\CopyRecursiveException' => $baseDir . '/../lib/Exceptions/CopyRecursiveException.php',
+ 'OCA\\Files_Trashbin\\Expiration' => $baseDir . '/../lib/Expiration.php',
+ 'OCA\\Files_Trashbin\\Helper' => $baseDir . '/../lib/Helper.php',
+ 'OCA\\Files_Trashbin\\Hooks' => $baseDir . '/../lib/Hooks.php',
+ 'OCA\\Files_Trashbin\\Storage' => $baseDir . '/../lib/Storage.php',
+ 'OCA\\Files_Trashbin\\Trashbin' => $baseDir . '/../lib/Trashbin.php',
+);
diff --git a/apps/files_trashbin/composer/composer/autoload_namespaces.php b/apps/files_trashbin/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/files_trashbin/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/files_trashbin/composer/composer/autoload_psr4.php b/apps/files_trashbin/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..f7585c671e1
--- /dev/null
+++ b/apps/files_trashbin/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Files_Trashbin\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/files_trashbin/composer/composer/autoload_real.php b/apps/files_trashbin/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..b2abf10922c
--- /dev/null
+++ b/apps/files_trashbin/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitFiles_Trashbin
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitFiles_Trashbin', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitFiles_Trashbin', 'loadClassLoader'));
+
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitFiles_Trashbin::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/files_trashbin/composer/composer/autoload_static.php b/apps/files_trashbin/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..01520e2d14d
--- /dev/null
+++ b/apps/files_trashbin/composer/composer/autoload_static.php
@@ -0,0 +1,49 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitFiles_Trashbin
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\Files_Trashbin\\' => 19,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\Files_Trashbin\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\Files_Trashbin\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\Files_Trashbin\\BackgroundJob\\ExpireTrash' => __DIR__ . '/..' . '/../lib/BackgroundJob/ExpireTrash.php',
+ 'OCA\\Files_Trashbin\\Capabilities' => __DIR__ . '/..' . '/../lib/Capabilities.php',
+ 'OCA\\Files_Trashbin\\Command\\CleanUp' => __DIR__ . '/..' . '/../lib/Command/CleanUp.php',
+ 'OCA\\Files_Trashbin\\Command\\Expire' => __DIR__ . '/..' . '/../lib/Command/Expire.php',
+ 'OCA\\Files_Trashbin\\Command\\ExpireTrash' => __DIR__ . '/..' . '/../lib/Command/ExpireTrash.php',
+ 'OCA\\Files_Trashbin\\Controller\\PreviewController' => __DIR__ . '/..' . '/../lib/Controller/PreviewController.php',
+ 'OCA\\Files_Trashbin\\Events\\MoveToTrashEvent' => __DIR__ . '/..' . '/../lib/Events/MoveToTrashEvent.php',
+ 'OCA\\Files_Trashbin\\Exceptions\\CopyRecursiveException' => __DIR__ . '/..' . '/../lib/Exceptions/CopyRecursiveException.php',
+ 'OCA\\Files_Trashbin\\Expiration' => __DIR__ . '/..' . '/../lib/Expiration.php',
+ 'OCA\\Files_Trashbin\\Helper' => __DIR__ . '/..' . '/../lib/Helper.php',
+ 'OCA\\Files_Trashbin\\Hooks' => __DIR__ . '/..' . '/../lib/Hooks.php',
+ 'OCA\\Files_Trashbin\\Storage' => __DIR__ . '/..' . '/../lib/Storage.php',
+ 'OCA\\Files_Trashbin\\Trashbin' => __DIR__ . '/..' . '/../lib/Trashbin.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitFiles_Trashbin::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitFiles_Trashbin::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitFiles_Trashbin::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/files_trashbin/l10n/es_CO.js b/apps/files_trashbin/l10n/es_CO.js
new file mode 100644
index 00000000000..24cc0e4083e
--- /dev/null
+++ b/apps/files_trashbin/l10n/es_CO.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_CO.json b/apps/files_trashbin/l10n/es_CO.json
new file mode 100644
index 00000000000..3a539073e8b
--- /dev/null
+++ b/apps/files_trashbin/l10n/es_CO.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/l10n/es_CR.js b/apps/files_trashbin/l10n/es_CR.js
new file mode 100644
index 00000000000..24cc0e4083e
--- /dev/null
+++ b/apps/files_trashbin/l10n/es_CR.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_CR.json b/apps/files_trashbin/l10n/es_CR.json
new file mode 100644
index 00000000000..3a539073e8b
--- /dev/null
+++ b/apps/files_trashbin/l10n/es_CR.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/l10n/es_DO.js b/apps/files_trashbin/l10n/es_DO.js
new file mode 100644
index 00000000000..24cc0e4083e
--- /dev/null
+++ b/apps/files_trashbin/l10n/es_DO.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_DO.json b/apps/files_trashbin/l10n/es_DO.json
new file mode 100644
index 00000000000..3a539073e8b
--- /dev/null
+++ b/apps/files_trashbin/l10n/es_DO.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/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/l10n/pt_PT.js b/apps/files_trashbin/l10n/pt_PT.js
index 7f0f658e9b0..fbf84019251 100644
--- a/apps/files_trashbin/l10n/pt_PT.js
+++ b/apps/files_trashbin/l10n/pt_PT.js
@@ -9,7 +9,7 @@ OC.L10N.register(
"Delete permanently" : "Eliminar permanentemente",
"Error" : "Erro",
"This operation is forbidden" : "Esta operação é proibida",
- "This directory is unavailable, please check the logs or contact the administrator" : "Esta diretoria está indisponível, por favor, verifique os registos ou contacte o administrador",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Esta pasta não está disponível, por favor, verifique os registos ou contacte o administrador",
"restored" : "Restaurado",
"No deleted files" : "Sem ficheiros eliminados",
"You will be able to recover deleted files from here" : "Poderá recuperar ficheiros eliminados a partir daqui",
diff --git a/apps/files_trashbin/l10n/pt_PT.json b/apps/files_trashbin/l10n/pt_PT.json
index 541a4b72f3c..d4fe15313f9 100644
--- a/apps/files_trashbin/l10n/pt_PT.json
+++ b/apps/files_trashbin/l10n/pt_PT.json
@@ -7,7 +7,7 @@
"Delete permanently" : "Eliminar permanentemente",
"Error" : "Erro",
"This operation is forbidden" : "Esta operação é proibida",
- "This directory is unavailable, please check the logs or contact the administrator" : "Esta diretoria está indisponível, por favor, verifique os registos ou contacte o administrador",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Esta pasta não está disponível, por favor, verifique os registos ou contacte o administrador",
"restored" : "Restaurado",
"No deleted files" : "Sem ficheiros eliminados",
"You will be able to recover deleted files from here" : "Poderá recuperar ficheiros eliminados a partir daqui",
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/Hooks.php b/apps/files_trashbin/lib/Hooks.php
index eb585aa051c..036294cc144 100644
--- a/apps/files_trashbin/lib/Hooks.php
+++ b/apps/files_trashbin/lib/Hooks.php
@@ -39,10 +39,8 @@ class Hooks {
* to remove the used space for the trash bin stored in the database
*/
public static function deleteUser_hook($params) {
- if( \OCP\App::isEnabled('files_trashbin') ) {
- $uid = $params['uid'];
- Trashbin::deleteUser($uid);
- }
+ $uid = $params['uid'];
+ Trashbin::deleteUser($uid);
}
public static function post_write_hook($params) {
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/templates/index.php b/apps/files_trashbin/templates/index.php
index c3f0304d408..b3ebca2867b 100644
--- a/apps/files_trashbin/templates/index.php
+++ b/apps/files_trashbin/templates/index.php
@@ -21,12 +21,14 @@
<table id="filestable">
<thead>
<tr>
+ <th id="headerSelection" class="hidden column-selection">
+ <input type="checkbox" id="select_all_trash" class="select-all checkbox"/>
+ <label for="select_all_trash">
+ <span class="hidden-visually"><?php p($l->t('Select all'))?></span>
+ </label>
+ </th>
<th id='headerName' class="hidden column-name">
<div id="headerName-container">
- <input type="checkbox" id="select_all_trash" class="select-all checkbox"/>
- <label for="select_all_trash">
- <span class="hidden-visually"><?php p($l->t('Select all'))?></span>
- </label>
<a class="name sort columntitle" data-sort="name"><span><?php p($l->t( 'Name' )); ?></span><span class="sort-indicator"></span></a>
<span id="selectedActionsList" class='selectedActions'>
<a href="" class="undelete">
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 86c9d21fe57..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
@@ -23,6 +24,7 @@
use OCA\Files_Trashbin\Expiration;
use \OCA\Files_Trashbin\Tests;
+use OCP\IConfig;
class ExpirationTest extends \Test\TestCase {
const SECONDS_PER_DAY = 86400; //60*60*24
@@ -200,10 +202,10 @@ class ExpirationTest extends \Test\TestCase {
/**
*
* @param string $returnValue
- * @return \OCP\IConfig
+ * @return IConfig
*/
private function getMockedConfig($returnValue){
- $mockedConfig = $this->getMockBuilder('\OCP\IConfig')
+ $mockedConfig = $this->getMockBuilder(IConfig::class)
->disableOriginalConstructor()
->setMethods(
[
diff --git a/apps/files_trashbin/tests/StorageTest.php b/apps/files_trashbin/tests/StorageTest.php
index 2e3ddf2e6bf..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>
@@ -37,6 +38,7 @@ use OCP\Files\Cache\ICache;
use OCP\Files\IRootFolder;
use OCP\Files\Node;
use OCP\ILogger;
+use OCP\IUserManager;
use Symfony\Component\EventDispatcher\EventDispatcher;
/**
@@ -530,19 +532,19 @@ class StorageTest extends \Test\TestCase {
*/
public function testShouldMoveToTrash($mountPoint, $path, $userExists, $appDisablesTrash, $expected) {
$fileID = 1;
- $cache = $this->getMock(ICache::class);
+ $cache = $this->createMock(ICache::class);
$cache->expects($this->any())->method('getId')->willReturn($fileID);
$tmpStorage = $this->getMockBuilder('\OC\Files\Storage\Temporary')
->disableOriginalConstructor()->getMock($cache);
$tmpStorage->expects($this->any())->method('getCache')->willReturn($cache);
- $userManager = $this->getMockBuilder('OCP\IUserManager')
+ $userManager = $this->getMockBuilder(IUserManager::class)
->disableOriginalConstructor()->getMock();
$userManager->expects($this->any())
->method('userExists')->willReturn($userExists);
$logger = $this->getMockBuilder(ILogger::class)->getMock();
$eventDispatcher = $this->getMockBuilder(EventDispatcher::class)
->disableOriginalConstructor()->getMock();
- $rootFolder = $this->getMock(IRootFolder::class);
+ $rootFolder = $this->createMock(IRootFolder::class);
$node = $this->getMockBuilder(Node::class)->disableOriginalConstructor()->getMock();
$event = $this->getMockBuilder(MoveToTrashEvent::class)->disableOriginalConstructor()->getMock();
$event->expects($this->any())->method('shouldMoveToTrashBin')->willReturn(!$appDisablesTrash);
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/composer/autoload.php b/apps/files_versions/composer/autoload.php
new file mode 100644
index 00000000000..7bb72360fba
--- /dev/null
+++ b/apps/files_versions/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitFiles_Versions::getLoader();
diff --git a/apps/files_versions/composer/composer.json b/apps/files_versions/composer/composer.json
new file mode 100644
index 00000000000..fdad5a69ddb
--- /dev/null
+++ b/apps/files_versions/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "Files_Versions"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\Files_Versions\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/files_versions/composer/composer/ClassLoader.php b/apps/files_versions/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/files_versions/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/files_versions/composer/composer/LICENSE b/apps/files_versions/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/files_versions/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/files_versions/composer/composer/autoload_classmap.php b/apps/files_versions/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..05dad7f7c5f
--- /dev/null
+++ b/apps/files_versions/composer/composer/autoload_classmap.php
@@ -0,0 +1,20 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Files_Versions\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\Files_Versions\\BackgroundJob\\ExpireVersions' => $baseDir . '/../lib/BackgroundJob/ExpireVersions.php',
+ 'OCA\\Files_Versions\\Capabilities' => $baseDir . '/../lib/Capabilities.php',
+ 'OCA\\Files_Versions\\Command\\CleanUp' => $baseDir . '/../lib/Command/CleanUp.php',
+ 'OCA\\Files_Versions\\Command\\Expire' => $baseDir . '/../lib/Command/Expire.php',
+ 'OCA\\Files_Versions\\Command\\ExpireVersions' => $baseDir . '/../lib/Command/ExpireVersions.php',
+ 'OCA\\Files_Versions\\Controller\\PreviewController' => $baseDir . '/../lib/Controller/PreviewController.php',
+ 'OCA\\Files_Versions\\Events\\CreateVersionEvent' => $baseDir . '/../lib/Events/CreateVersionEvent.php',
+ 'OCA\\Files_Versions\\Expiration' => $baseDir . '/../lib/Expiration.php',
+ 'OCA\\Files_Versions\\Hooks' => $baseDir . '/../lib/Hooks.php',
+ 'OCA\\Files_Versions\\Storage' => $baseDir . '/../lib/Storage.php',
+);
diff --git a/apps/files_versions/composer/composer/autoload_namespaces.php b/apps/files_versions/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/files_versions/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/files_versions/composer/composer/autoload_psr4.php b/apps/files_versions/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..09bc4395cfd
--- /dev/null
+++ b/apps/files_versions/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Files_Versions\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/files_versions/composer/composer/autoload_real.php b/apps/files_versions/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..8479a1f199b
--- /dev/null
+++ b/apps/files_versions/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitFiles_Versions
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitFiles_Versions', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitFiles_Versions', 'loadClassLoader'));
+
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitFiles_Versions::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/files_versions/composer/composer/autoload_static.php b/apps/files_versions/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..9ac3b049030
--- /dev/null
+++ b/apps/files_versions/composer/composer/autoload_static.php
@@ -0,0 +1,46 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitFiles_Versions
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\Files_Versions\\' => 19,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\Files_Versions\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\Files_Versions\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\Files_Versions\\BackgroundJob\\ExpireVersions' => __DIR__ . '/..' . '/../lib/BackgroundJob/ExpireVersions.php',
+ 'OCA\\Files_Versions\\Capabilities' => __DIR__ . '/..' . '/../lib/Capabilities.php',
+ 'OCA\\Files_Versions\\Command\\CleanUp' => __DIR__ . '/..' . '/../lib/Command/CleanUp.php',
+ 'OCA\\Files_Versions\\Command\\Expire' => __DIR__ . '/..' . '/../lib/Command/Expire.php',
+ 'OCA\\Files_Versions\\Command\\ExpireVersions' => __DIR__ . '/..' . '/../lib/Command/ExpireVersions.php',
+ 'OCA\\Files_Versions\\Controller\\PreviewController' => __DIR__ . '/..' . '/../lib/Controller/PreviewController.php',
+ 'OCA\\Files_Versions\\Events\\CreateVersionEvent' => __DIR__ . '/..' . '/../lib/Events/CreateVersionEvent.php',
+ 'OCA\\Files_Versions\\Expiration' => __DIR__ . '/..' . '/../lib/Expiration.php',
+ 'OCA\\Files_Versions\\Hooks' => __DIR__ . '/..' . '/../lib/Hooks.php',
+ 'OCA\\Files_Versions\\Storage' => __DIR__ . '/..' . '/../lib/Storage.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitFiles_Versions::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitFiles_Versions::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitFiles_Versions::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/files_versions/l10n/es_CO.js b/apps/files_versions/l10n/es_CO.js
new file mode 100644
index 00000000000..7cfb569dec7
--- /dev/null
+++ b/apps/files_versions/l10n/es_CO.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_CO.json b/apps/files_versions/l10n/es_CO.json
new file mode 100644
index 00000000000..e346d38166f
--- /dev/null
+++ b/apps/files_versions/l10n/es_CO.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/l10n/es_CR.js b/apps/files_versions/l10n/es_CR.js
new file mode 100644
index 00000000000..7cfb569dec7
--- /dev/null
+++ b/apps/files_versions/l10n/es_CR.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_CR.json b/apps/files_versions/l10n/es_CR.json
new file mode 100644
index 00000000000..e346d38166f
--- /dev/null
+++ b/apps/files_versions/l10n/es_CR.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/l10n/es_DO.js b/apps/files_versions/l10n/es_DO.js
new file mode 100644
index 00000000000..7cfb569dec7
--- /dev/null
+++ b/apps/files_versions/l10n/es_DO.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_DO.json b/apps/files_versions/l10n/es_DO.json
new file mode 100644
index 00000000000..e346d38166f
--- /dev/null
+++ b/apps/files_versions/l10n/es_DO.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/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/l10n/eu.js b/apps/files_versions/l10n/eu.js
index bae93e00f6b..2a6bafa1cf8 100644
--- a/apps/files_versions/l10n/eu.js
+++ b/apps/files_versions/l10n/eu.js
@@ -5,7 +5,9 @@ OC.L10N.register(
"Versions" : "Bertsioak",
"Failed to revert {file} to revision {timestamp}." : "Errore bat izan da {fitxategia} {timestamp} bertsiora leheneratzean.",
"Restore" : "Berrezarri",
- "More versions..." : "Bertsio gehiago...",
- "No other versions available" : "Ez dago bertsio gehiago eskuragarri"
+ "No earlier versions available" : "Ez dago aurreko bertsiorik",
+ "More versions …" : "Bertsio gehiago...",
+ "No versions available" : "Ez dago bertsiorik eskuragarri",
+ "More versions..." : "Bertsio gehiago..."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_versions/l10n/eu.json b/apps/files_versions/l10n/eu.json
index 70cf27f6562..c79af7797c8 100644
--- a/apps/files_versions/l10n/eu.json
+++ b/apps/files_versions/l10n/eu.json
@@ -3,7 +3,9 @@
"Versions" : "Bertsioak",
"Failed to revert {file} to revision {timestamp}." : "Errore bat izan da {fitxategia} {timestamp} bertsiora leheneratzean.",
"Restore" : "Berrezarri",
- "More versions..." : "Bertsio gehiago...",
- "No other versions available" : "Ez dago bertsio gehiago eskuragarri"
+ "No earlier versions available" : "Ez dago aurreko bertsiorik",
+ "More versions …" : "Bertsio gehiago...",
+ "No versions available" : "Ez dago bertsiorik eskuragarri",
+ "More versions..." : "Bertsio gehiago..."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_versions/l10n/ka_GE.js b/apps/files_versions/l10n/ka_GE.js
index d958b4f4dee..56be9c02887 100644
--- a/apps/files_versions/l10n/ka_GE.js
+++ b/apps/files_versions/l10n/ka_GE.js
@@ -3,6 +3,12 @@ OC.L10N.register(
{
"Could not revert: %s" : "ვერ მოხერხდა უკან დაბრუნება: %s",
"Versions" : "ვერსიები",
- "Restore" : "აღდგენა"
+ "Failed to revert {file} to revision {timestamp}." : "ფაილის {file} დაბრუნება რევიზიაზე {timestamp} ვერ ხერხდება.",
+ "_%n byte_::_%n bytes_" : ["%n ბაიტი"],
+ "Restore" : "აღდგენა",
+ "No earlier versions available" : "წინა ვერსიები ხელმისაწვდომი არაა",
+ "More versions …" : "მეტი ვერსიები ...",
+ "No versions available" : "ვერსიები ხელმიუწვდომელია",
+ "More versions..." : "მეტი ვერსიები..."
},
"nplurals=1; plural=0;");
diff --git a/apps/files_versions/l10n/ka_GE.json b/apps/files_versions/l10n/ka_GE.json
index a3b2d0344de..4c359623070 100644
--- a/apps/files_versions/l10n/ka_GE.json
+++ b/apps/files_versions/l10n/ka_GE.json
@@ -1,6 +1,12 @@
{ "translations": {
"Could not revert: %s" : "ვერ მოხერხდა უკან დაბრუნება: %s",
"Versions" : "ვერსიები",
- "Restore" : "აღდგენა"
+ "Failed to revert {file} to revision {timestamp}." : "ფაილის {file} დაბრუნება რევიზიაზე {timestamp} ვერ ხერხდება.",
+ "_%n byte_::_%n bytes_" : ["%n ბაიტი"],
+ "Restore" : "აღდგენა",
+ "No earlier versions available" : "წინა ვერსიები ხელმისაწვდომი არაა",
+ "More versions …" : "მეტი ვერსიები ...",
+ "No versions available" : "ვერსიები ხელმიუწვდომელია",
+ "More versions..." : "მეტი ვერსიები..."
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_versions/l10n/nb.js b/apps/files_versions/l10n/nb.js
index 14bdd10a893..40eecd966c3 100644
--- a/apps/files_versions/l10n/nb.js
+++ b/apps/files_versions/l10n/nb.js
@@ -4,7 +4,7 @@ OC.L10N.register(
"Could not revert: %s" : "Klarte ikke å tilbakeføre: %s",
"Versions" : "Versjoner",
"Failed to revert {file} to revision {timestamp}." : "Klarte ikke å tilbakeføre {file} til revisjon {timestamp}.",
- "_%n byte_::_%n bytes_" : ["%n Byte","%n Byte"],
+ "_%n byte_::_%n bytes_" : ["%n byte","%n byte"],
"Restore" : "Gjenopprett",
"No earlier versions available" : "Ingen tidligere versjoner tilgjengelige",
"More versions …" : "Flere versjoner…",
diff --git a/apps/files_versions/l10n/nb.json b/apps/files_versions/l10n/nb.json
index acbba4d379c..479d4037ec8 100644
--- a/apps/files_versions/l10n/nb.json
+++ b/apps/files_versions/l10n/nb.json
@@ -2,7 +2,7 @@
"Could not revert: %s" : "Klarte ikke å tilbakeføre: %s",
"Versions" : "Versjoner",
"Failed to revert {file} to revision {timestamp}." : "Klarte ikke å tilbakeføre {file} til revisjon {timestamp}.",
- "_%n byte_::_%n bytes_" : ["%n Byte","%n Byte"],
+ "_%n byte_::_%n bytes_" : ["%n byte","%n byte"],
"Restore" : "Gjenopprett",
"No earlier versions available" : "Ingen tidligere versjoner tilgjengelige",
"More versions …" : "Flere versjoner…",
diff --git a/apps/files_versions/l10n/sk.js b/apps/files_versions/l10n/sk.js
index b851f680f4f..41c13cd4c18 100644
--- a/apps/files_versions/l10n/sk.js
+++ b/apps/files_versions/l10n/sk.js
@@ -6,6 +6,8 @@ OC.L10N.register(
"Failed to revert {file} to revision {timestamp}." : "Zlyhalo obnovenie súboru {file} na verziu {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n bajt","%n bajtov","%n bajtov"],
"Restore" : "Obnoviť",
+ "No earlier versions available" : "Nie sú dostupné predchádzajúce verzie",
+ "More versions …" : "Viac verzií ...",
"No versions available" : "Žiadne verzie nie sú dostupné",
"More versions..." : "Viac verzií..."
},
diff --git a/apps/files_versions/l10n/sk.json b/apps/files_versions/l10n/sk.json
index 8efc13112a7..c66d5b0c7c0 100644
--- a/apps/files_versions/l10n/sk.json
+++ b/apps/files_versions/l10n/sk.json
@@ -4,6 +4,8 @@
"Failed to revert {file} to revision {timestamp}." : "Zlyhalo obnovenie súboru {file} na verziu {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n bajt","%n bajtov","%n bajtov"],
"Restore" : "Obnoviť",
+ "No earlier versions available" : "Nie sú dostupné predchádzajúce verzie",
+ "More versions …" : "Viac verzií ...",
"No versions available" : "Žiadne verzie nie sú dostupné",
"More versions..." : "Viac verzií..."
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
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 a9ebb153eff..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>
@@ -54,12 +56,9 @@ class Hooks {
* listen to write event.
*/
public static function write_hook( $params ) {
-
- if (\OCP\App::isEnabled('files_versions')) {
- $path = $params[\OC\Files\Filesystem::signal_param_path];
- if($path !== '') {
- Storage::store($path);
- }
+ $path = $params[\OC\Files\Filesystem::signal_param_path];
+ if($path !== '') {
+ Storage::store($path);
}
}
@@ -72,12 +71,9 @@ class Hooks {
* cleanup the versions directory if the actual file gets deleted
*/
public static function remove_hook($params) {
-
- if (\OCP\App::isEnabled('files_versions')) {
- $path = $params[\OC\Files\Filesystem::signal_param_path];
- if($path !== '') {
- Storage::delete($path);
- }
+ $path = $params[\OC\Files\Filesystem::signal_param_path];
+ if($path !== '') {
+ Storage::delete($path);
}
}
@@ -100,13 +96,10 @@ class Hooks {
* of the stored versions along the actual file
*/
public static function rename_hook($params) {
-
- if (\OCP\App::isEnabled('files_versions')) {
- $oldpath = $params['oldpath'];
- $newpath = $params['newpath'];
- if($oldpath !== '' && $newpath !== '') {
- Storage::renameOrCopy($oldpath, $newpath, 'rename');
- }
+ $oldpath = $params['oldpath'];
+ $newpath = $params['newpath'];
+ if($oldpath !== '' && $newpath !== '') {
+ Storage::renameOrCopy($oldpath, $newpath, 'rename');
}
}
@@ -118,13 +111,10 @@ class Hooks {
* the stored versions to the new location
*/
public static function copy_hook($params) {
-
- if (\OCP\App::isEnabled('files_versions')) {
- $oldpath = $params['oldpath'];
- $newpath = $params['newpath'];
- if($oldpath !== '' && $newpath !== '') {
- Storage::renameOrCopy($oldpath, $newpath, 'copy');
- }
+ $oldpath = $params['oldpath'];
+ $newpath = $params['newpath'];
+ if($oldpath !== '' && $newpath !== '') {
+ Storage::renameOrCopy($oldpath, $newpath, 'copy');
}
}
@@ -137,25 +127,21 @@ class Hooks {
*
*/
public static function pre_renameOrCopy_hook($params) {
- if (\OCP\App::isEnabled('files_versions')) {
-
- // if we rename a movable mount point, then the versions don't have
- // to be renamed
- $absOldPath = \OC\Files\Filesystem::normalizePath('/' . \OCP\User::getUser() . '/files' . $params['oldpath']);
- $manager = \OC\Files\Filesystem::getMountManager();
- $mount = $manager->find($absOldPath);
- $internalPath = $mount->getInternalPath($absOldPath);
- if ($internalPath === '' and $mount instanceof \OC\Files\Mount\MoveableMount) {
- return;
- }
-
- $view = new \OC\Files\View(\OCP\User::getUser() . '/files');
- if ($view->file_exists($params['newpath'])) {
- Storage::store($params['newpath']);
- } else {
- Storage::setSourcePathAndUser($params['oldpath']);
- }
+ // if we rename a movable mount point, then the versions don't have
+ // to be renamed
+ $absOldPath = \OC\Files\Filesystem::normalizePath('/' . \OCP\User::getUser() . '/files' . $params['oldpath']);
+ $manager = \OC\Files\Filesystem::getMountManager();
+ $mount = $manager->find($absOldPath);
+ $internalPath = $mount->getInternalPath($absOldPath);
+ if ($internalPath === '' and $mount instanceof \OC\Files\Mount\MoveableMount) {
+ return;
+ }
+ $view = new \OC\Files\View(\OCP\User::getUser() . '/files');
+ if ($view->file_exists($params['newpath'])) {
+ Storage::store($params['newpath']);
+ } else {
+ Storage::setSourcePathAndUser($params['oldpath']);
}
}
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 7fe6b279b9a..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
@@ -24,6 +25,7 @@
namespace OCA\Files_Versions\Tests;
use \OCA\Files_Versions\Expiration;
+use OCP\IConfig;
class ExpirationTest extends \Test\TestCase {
const SECONDS_PER_DAY = 86400; //60*60*24
@@ -172,7 +174,7 @@ class ExpirationTest extends \Test\TestCase {
* @return \OCP\IConfig
*/
private function getMockedConfig($returnValue){
- $mockedConfig = $this->getMockBuilder('\OCP\IConfig')
+ $mockedConfig = $this->getMockBuilder(IConfig::class)
->disableOriginalConstructor()
->setMethods(
[
diff --git a/apps/files_versions/tests/VersioningTest.php b/apps/files_versions/tests/VersioningTest.php
index 4cd202113dd..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>
@@ -682,7 +682,7 @@ class VersioningTest extends \Test\TestCase {
return;
}
- $eventHandler = $this->getMockBuilder('\stdclass')
+ $eventHandler = $this->getMockBuilder(\stdclass::class)
->setMethods(['callback'])
->getMock();
diff --git a/apps/lookup_server_connector/composer/autoload.php b/apps/lookup_server_connector/composer/autoload.php
new file mode 100644
index 00000000000..ab8f4ce80ff
--- /dev/null
+++ b/apps/lookup_server_connector/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitLookupServerConnector::getLoader();
diff --git a/apps/lookup_server_connector/composer/composer.json b/apps/lookup_server_connector/composer/composer.json
new file mode 100644
index 00000000000..5ff3be7e18b
--- /dev/null
+++ b/apps/lookup_server_connector/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "LookupServerConnector"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\LookupServerConnector\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/lookup_server_connector/composer/composer/ClassLoader.php b/apps/lookup_server_connector/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/lookup_server_connector/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/lookup_server_connector/composer/composer/LICENSE b/apps/lookup_server_connector/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/lookup_server_connector/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/lookup_server_connector/composer/composer/autoload_classmap.php b/apps/lookup_server_connector/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..110eff058ff
--- /dev/null
+++ b/apps/lookup_server_connector/composer/composer/autoload_classmap.php
@@ -0,0 +1,11 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\LookupServerConnector\\BackgroundJobs\\RetryJob' => $baseDir . '/../lib/BackgroundJobs/RetryJob.php',
+ 'OCA\\LookupServerConnector\\UpdateLookupServer' => $baseDir . '/../lib/UpdateLookupServer.php',
+);
diff --git a/apps/lookup_server_connector/composer/composer/autoload_namespaces.php b/apps/lookup_server_connector/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/lookup_server_connector/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/lookup_server_connector/composer/composer/autoload_psr4.php b/apps/lookup_server_connector/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..1532b4d9c52
--- /dev/null
+++ b/apps/lookup_server_connector/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\LookupServerConnector\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/lookup_server_connector/composer/composer/autoload_real.php b/apps/lookup_server_connector/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..92627f9dfaa
--- /dev/null
+++ b/apps/lookup_server_connector/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitLookupServerConnector
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitLookupServerConnector', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitLookupServerConnector', 'loadClassLoader'));
+
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitLookupServerConnector::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/lookup_server_connector/composer/composer/autoload_static.php b/apps/lookup_server_connector/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..07aca539b3f
--- /dev/null
+++ b/apps/lookup_server_connector/composer/composer/autoload_static.php
@@ -0,0 +1,37 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitLookupServerConnector
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\LookupServerConnector\\' => 26,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\LookupServerConnector\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\LookupServerConnector\\BackgroundJobs\\RetryJob' => __DIR__ . '/..' . '/../lib/BackgroundJobs/RetryJob.php',
+ 'OCA\\LookupServerConnector\\UpdateLookupServer' => __DIR__ . '/..' . '/../lib/UpdateLookupServer.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitLookupServerConnector::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitLookupServerConnector::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitLookupServerConnector::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/oauth2/composer/autoload.php b/apps/oauth2/composer/autoload.php
new file mode 100644
index 00000000000..276dedf42c2
--- /dev/null
+++ b/apps/oauth2/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitOAuth2::getLoader();
diff --git a/apps/oauth2/composer/composer.json b/apps/oauth2/composer/composer.json
new file mode 100644
index 00000000000..95fe2e1604e
--- /dev/null
+++ b/apps/oauth2/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "OAuth2"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\OAuth2\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/oauth2/composer/composer/ClassLoader.php b/apps/oauth2/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/oauth2/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/oauth2/composer/composer/LICENSE b/apps/oauth2/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/oauth2/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/oauth2/composer/composer/autoload_classmap.php b/apps/oauth2/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..97c8098caa3
--- /dev/null
+++ b/apps/oauth2/composer/composer/autoload_classmap.php
@@ -0,0 +1,19 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\OAuth2\\Controller\\LoginRedirectorController' => $baseDir . '/../lib/Controller/LoginRedirectorController.php',
+ 'OCA\\OAuth2\\Controller\\OauthApiController' => $baseDir . '/../lib/Controller/OauthApiController.php',
+ 'OCA\\OAuth2\\Controller\\SettingsController' => $baseDir . '/../lib/Controller/SettingsController.php',
+ 'OCA\\OAuth2\\Db\\AccessToken' => $baseDir . '/../lib/Db/AccessToken.php',
+ 'OCA\\OAuth2\\Db\\AccessTokenMapper' => $baseDir . '/../lib/Db/AccessTokenMapper.php',
+ 'OCA\\OAuth2\\Db\\Client' => $baseDir . '/../lib/Db/Client.php',
+ 'OCA\\OAuth2\\Db\\ClientMapper' => $baseDir . '/../lib/Db/ClientMapper.php',
+ 'OCA\\OAuth2\\Exceptions\\AccessTokenNotFoundException' => $baseDir . '/../lib/Exceptions/AccessTokenNotFoundException.php',
+ 'OCA\\OAuth2\\Exceptions\\ClientNotFoundException' => $baseDir . '/../lib/Exceptions/ClientNotFoundException.php',
+ 'OCA\\OAuth2\\Settings\\Admin' => $baseDir . '/../lib/Settings/Admin.php',
+);
diff --git a/apps/oauth2/composer/composer/autoload_namespaces.php b/apps/oauth2/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/oauth2/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/oauth2/composer/composer/autoload_psr4.php b/apps/oauth2/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..1164638c634
--- /dev/null
+++ b/apps/oauth2/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\OAuth2\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/oauth2/composer/composer/autoload_real.php b/apps/oauth2/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..855ff3261b3
--- /dev/null
+++ b/apps/oauth2/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitOAuth2
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitOAuth2', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitOAuth2', 'loadClassLoader'));
+
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitOAuth2::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/oauth2/composer/composer/autoload_static.php b/apps/oauth2/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..ec48d6d0ce0
--- /dev/null
+++ b/apps/oauth2/composer/composer/autoload_static.php
@@ -0,0 +1,45 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitOAuth2
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\OAuth2\\' => 11,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\OAuth2\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\OAuth2\\Controller\\LoginRedirectorController' => __DIR__ . '/..' . '/../lib/Controller/LoginRedirectorController.php',
+ 'OCA\\OAuth2\\Controller\\OauthApiController' => __DIR__ . '/..' . '/../lib/Controller/OauthApiController.php',
+ 'OCA\\OAuth2\\Controller\\SettingsController' => __DIR__ . '/..' . '/../lib/Controller/SettingsController.php',
+ 'OCA\\OAuth2\\Db\\AccessToken' => __DIR__ . '/..' . '/../lib/Db/AccessToken.php',
+ 'OCA\\OAuth2\\Db\\AccessTokenMapper' => __DIR__ . '/..' . '/../lib/Db/AccessTokenMapper.php',
+ 'OCA\\OAuth2\\Db\\Client' => __DIR__ . '/..' . '/../lib/Db/Client.php',
+ 'OCA\\OAuth2\\Db\\ClientMapper' => __DIR__ . '/..' . '/../lib/Db/ClientMapper.php',
+ 'OCA\\OAuth2\\Exceptions\\AccessTokenNotFoundException' => __DIR__ . '/..' . '/../lib/Exceptions/AccessTokenNotFoundException.php',
+ 'OCA\\OAuth2\\Exceptions\\ClientNotFoundException' => __DIR__ . '/..' . '/../lib/Exceptions/ClientNotFoundException.php',
+ 'OCA\\OAuth2\\Settings\\Admin' => __DIR__ . '/..' . '/../lib/Settings/Admin.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitOAuth2::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitOAuth2::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitOAuth2::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/oauth2/l10n/es_CO.js b/apps/oauth2/l10n/es_CO.js
new file mode 100644
index 00000000000..ecad08fd552
--- /dev/null
+++ b/apps/oauth2/l10n/es_CO.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_CO.json b/apps/oauth2/l10n/es_CO.json
new file mode 100644
index 00000000000..5e42b16f40d
--- /dev/null
+++ b/apps/oauth2/l10n/es_CO.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/es_CR.js b/apps/oauth2/l10n/es_CR.js
new file mode 100644
index 00000000000..ecad08fd552
--- /dev/null
+++ b/apps/oauth2/l10n/es_CR.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_CR.json b/apps/oauth2/l10n/es_CR.json
new file mode 100644
index 00000000000..5e42b16f40d
--- /dev/null
+++ b/apps/oauth2/l10n/es_CR.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/es_DO.js b/apps/oauth2/l10n/es_DO.js
new file mode 100644
index 00000000000..ecad08fd552
--- /dev/null
+++ b/apps/oauth2/l10n/es_DO.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_DO.json b/apps/oauth2/l10n/es_DO.json
new file mode 100644
index 00000000000..5e42b16f40d
--- /dev/null
+++ b/apps/oauth2/l10n/es_DO.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/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/hu.js b/apps/oauth2/l10n/hu.js
new file mode 100644
index 00000000000..48747669a31
--- /dev/null
+++ b/apps/oauth2/l10n/hu.js
@@ -0,0 +1,13 @@
+OC.L10N.register(
+ "oauth2",
+ {
+ "OAuth 2.0 clients" : "OAuth 2.0 kliensek",
+ "OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0 megengedi külső szolgáltatásoknak, hogy hozzáférést kérjenek ehhez: %s.",
+ "Name" : "Név",
+ "Redirection URI" : "Átirányítési URI",
+ "Client Identifier" : "Ügyfél azonosító",
+ "Secret" : "Titok",
+ "Add client" : "Ügyfél hozzáadás",
+ "Add" : "Hozzáadás"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/oauth2/l10n/hu.json b/apps/oauth2/l10n/hu.json
new file mode 100644
index 00000000000..c69fbb0fcd8
--- /dev/null
+++ b/apps/oauth2/l10n/hu.json
@@ -0,0 +1,11 @@
+{ "translations": {
+ "OAuth 2.0 clients" : "OAuth 2.0 kliensek",
+ "OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0 megengedi külső szolgáltatásoknak, hogy hozzáférést kérjenek ehhez: %s.",
+ "Name" : "Név",
+ "Redirection URI" : "Átirányítési URI",
+ "Client Identifier" : "Ügyfél azonosító",
+ "Secret" : "Titok",
+ "Add client" : "Ügyfél hozzáadás",
+ "Add" : "Hozzáadás"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/oauth2/l10n/sr.js b/apps/oauth2/l10n/sr.js
new file mode 100644
index 00000000000..17bf401136d
--- /dev/null
+++ b/apps/oauth2/l10n/sr.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" : "Адреса за преусмеравање",
+ "Client Identifier" : "Идентификација клијента",
+ "Secret" : "Тајна",
+ "Add client" : "Додај клијента",
+ "Add" : "Додај"
+},
+"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/oauth2/l10n/sr.json b/apps/oauth2/l10n/sr.json
new file mode 100644
index 00000000000..ce91adc6253
--- /dev/null
+++ b/apps/oauth2/l10n/sr.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" : "Адреса за преусмеравање",
+ "Client Identifier" : "Идентификација клијента",
+ "Secret" : "Тајна",
+ "Add client" : "Додај клијента",
+ "Add" : "Додај"
+},"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/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/composer/autoload.php b/apps/provisioning_api/composer/autoload.php
new file mode 100644
index 00000000000..9734ee42b19
--- /dev/null
+++ b/apps/provisioning_api/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitProvisioning_API::getLoader();
diff --git a/apps/provisioning_api/composer/composer.json b/apps/provisioning_api/composer/composer.json
new file mode 100644
index 00000000000..ea2a43abc8e
--- /dev/null
+++ b/apps/provisioning_api/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "Provisioning_API"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\Provisioning_API\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/provisioning_api/composer/composer/ClassLoader.php b/apps/provisioning_api/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/provisioning_api/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/provisioning_api/composer/composer/LICENSE b/apps/provisioning_api/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/provisioning_api/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/provisioning_api/composer/composer/autoload_classmap.php b/apps/provisioning_api/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..1ae8ef27d03
--- /dev/null
+++ b/apps/provisioning_api/composer/composer/autoload_classmap.php
@@ -0,0 +1,16 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Provisioning_API\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\Provisioning_API\\Controller\\AppConfigController' => $baseDir . '/../lib/Controller/AppConfigController.php',
+ 'OCA\\Provisioning_API\\Controller\\AppsController' => $baseDir . '/../lib/Controller/AppsController.php',
+ 'OCA\\Provisioning_API\\Controller\\GroupsController' => $baseDir . '/../lib/Controller/GroupsController.php',
+ 'OCA\\Provisioning_API\\Controller\\UsersController' => $baseDir . '/../lib/Controller/UsersController.php',
+ 'OCA\\Provisioning_API\\Middleware\\Exceptions\\NotSubAdminException' => $baseDir . '/../lib/Middleware/Exceptions/NotSubAdminException.php',
+ 'OCA\\Provisioning_API\\Middleware\\ProvisioningApiMiddleware' => $baseDir . '/../lib/Middleware/ProvisioningApiMiddleware.php',
+);
diff --git a/apps/provisioning_api/composer/composer/autoload_namespaces.php b/apps/provisioning_api/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/provisioning_api/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/provisioning_api/composer/composer/autoload_psr4.php b/apps/provisioning_api/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..46b5eb003d5
--- /dev/null
+++ b/apps/provisioning_api/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Provisioning_API\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/provisioning_api/composer/composer/autoload_real.php b/apps/provisioning_api/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..c55cebd2f63
--- /dev/null
+++ b/apps/provisioning_api/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitProvisioning_API
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitProvisioning_API', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitProvisioning_API', 'loadClassLoader'));
+
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitProvisioning_API::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/provisioning_api/composer/composer/autoload_static.php b/apps/provisioning_api/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..950a851eae9
--- /dev/null
+++ b/apps/provisioning_api/composer/composer/autoload_static.php
@@ -0,0 +1,42 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitProvisioning_API
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\Provisioning_API\\' => 21,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\Provisioning_API\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\Provisioning_API\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\Provisioning_API\\Controller\\AppConfigController' => __DIR__ . '/..' . '/../lib/Controller/AppConfigController.php',
+ 'OCA\\Provisioning_API\\Controller\\AppsController' => __DIR__ . '/..' . '/../lib/Controller/AppsController.php',
+ 'OCA\\Provisioning_API\\Controller\\GroupsController' => __DIR__ . '/..' . '/../lib/Controller/GroupsController.php',
+ 'OCA\\Provisioning_API\\Controller\\UsersController' => __DIR__ . '/..' . '/../lib/Controller/UsersController.php',
+ 'OCA\\Provisioning_API\\Middleware\\Exceptions\\NotSubAdminException' => __DIR__ . '/..' . '/../lib/Middleware/Exceptions/NotSubAdminException.php',
+ 'OCA\\Provisioning_API\\Middleware\\ProvisioningApiMiddleware' => __DIR__ . '/..' . '/../lib/Middleware/ProvisioningApiMiddleware.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitProvisioning_API::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitProvisioning_API::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitProvisioning_API::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
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/AppsControllerTest.php b/apps/provisioning_api/tests/Controller/AppsControllerTest.php
index c891433258f..7bd20e4233f 100644
--- a/apps/provisioning_api/tests/Controller/AppsControllerTest.php
+++ b/apps/provisioning_api/tests/Controller/AppsControllerTest.php
@@ -28,10 +28,9 @@
namespace OCA\Provisioning_API\Tests\Controller;
-use OC\OCSClient;
use OCA\Provisioning_API\Controller\AppsController;
-use OCP\API;
use OCP\App\IAppManager;
+use OCP\IRequest;
use OCP\IUserSession;
/**
@@ -56,7 +55,7 @@ class AppsControllerTest extends \OCA\Provisioning_API\Tests\TestCase {
$this->groupManager = \OC::$server->getGroupManager();
$this->userSession = \OC::$server->getUserSession();
- $request = $this->getMockBuilder('OCP\IRequest')
+ $request = $this->getMockBuilder(IRequest::class)
->disableOriginalConstructor()
->getMock();
diff --git a/apps/provisioning_api/tests/Controller/GroupsControllerTest.php b/apps/provisioning_api/tests/Controller/GroupsControllerTest.php
index 344f1fe6352..cd3dae79336 100644
--- a/apps/provisioning_api/tests/Controller/GroupsControllerTest.php
+++ b/apps/provisioning_api/tests/Controller/GroupsControllerTest.php
@@ -29,6 +29,8 @@ namespace OCA\Provisioning_API\Tests\Controller;
use OCA\Provisioning_API\Controller\GroupsController;
use OCP\IGroupManager;
use OCP\ILogger;
+use OCP\IRequest;
+use OCP\IUser;
use OCP\IUserSession;
class GroupsControllerTest extends \Test\TestCase {
@@ -56,10 +58,10 @@ class GroupsControllerTest extends \Test\TestCase {
->method('getSubAdmin')
->willReturn($this->subAdminManager);
- $this->userSession = $this->getMockBuilder('OCP\IUserSession')
+ $this->userSession = $this->getMockBuilder(IUserSession::class)
->disableOriginalConstructor()
->getMock();
- $request = $this->getMockBuilder('OCP\IRequest')
+ $request = $this->getMockBuilder(IRequest::class)
->disableOriginalConstructor()
->getMock();
@@ -91,7 +93,7 @@ class GroupsControllerTest extends \Test\TestCase {
* @return \OCP\IUser|\PHPUnit_Framework_MockObject_MockObject
*/
private function createUser($uid) {
- $user = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $user = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$user
->method('getUID')
->willReturn($uid);
diff --git a/apps/provisioning_api/tests/Controller/UsersControllerTest.php b/apps/provisioning_api/tests/Controller/UsersControllerTest.php
index 692b94556c5..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>
@@ -1128,12 +1130,12 @@ class UsersControllerTest extends TestCase {
}
public function testEditUserAdminUserSelfEditChangeValidQuota() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->any())
->method('getUID')
->will($this->returnValue('UID'));
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetUser->expects($this->once())
->method('setQuota')
->with('2.9 MB');
@@ -1166,12 +1168,12 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionMessage Invalid quota value ABC
*/
public function testEditUserAdminUserSelfEditChangeInvalidQuota() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->any())
->method('getUID')
->will($this->returnValue('UID'));
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$this->userSession
->expects($this->once())
->method('getUser')
@@ -1195,12 +1197,12 @@ class UsersControllerTest extends TestCase {
}
public function testEditUserAdminUserEditChangeValidQuota() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->any())
->method('getUID')
->will($this->returnValue('admin'));
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetUser->expects($this->once())
->method('setQuota')
->with('2.9 MB');
@@ -1413,12 +1415,12 @@ class UsersControllerTest extends TestCase {
}
public function testEditUserSubadminUserAccessible() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->any())
->method('getUID')
->will($this->returnValue('subadmin'));
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetUser->expects($this->once())
->method('setQuota')
->with('2.9 MB');
@@ -1456,12 +1458,12 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionCode 997
*/
public function testEditUserSubadminUserInaccessible() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->any())
->method('getUID')
->will($this->returnValue('subadmin'));
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$this->userSession
->expects($this->once())
->method('getUser')
@@ -1496,7 +1498,7 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionCode 101
*/
public function testDeleteUserNotExistingUser() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->any())
->method('getUID')
@@ -1519,12 +1521,12 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionCode 101
*/
public function testDeleteUserSelf() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->any())
->method('getUID')
->will($this->returnValue('UID'));
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetUser
->expects($this->once())
->method('getUID')
@@ -1543,12 +1545,12 @@ class UsersControllerTest extends TestCase {
}
public function testDeleteSuccessfulUserAsAdmin() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->any())
->method('getUID')
->will($this->returnValue('admin'));
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetUser
->expects($this->once())
->method('getUID')
@@ -1580,12 +1582,12 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionCode 101
*/
public function testDeleteUnsuccessfulUserAsAdmin() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->any())
->method('getUID')
->will($this->returnValue('admin'));
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetUser
->expects($this->once())
->method('getUID')
@@ -1613,12 +1615,12 @@ class UsersControllerTest extends TestCase {
}
public function testDeleteSuccessfulUserAsSubadmin() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->any())
->method('getUID')
->will($this->returnValue('subadmin'));
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetUser
->expects($this->once())
->method('getUID')
@@ -1661,12 +1663,12 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionCode 101
*/
public function testDeleteUnsuccessfulUserAsSubadmin() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->any())
->method('getUID')
->will($this->returnValue('subadmin'));
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetUser
->expects($this->once())
->method('getUID')
@@ -1709,12 +1711,12 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionCode 997
*/
public function testDeleteUserAsSubAdminAndUserIsNotAccessible() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->any())
->method('getUID')
->will($this->returnValue('subadmin'));
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetUser
->expects($this->once())
->method('getUID')
@@ -1753,7 +1755,7 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionCode 998
*/
public function testGetUsersGroupsTargetUserNotExisting() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$this->userSession
->expects($this->once())
->method('getUser')
@@ -1763,12 +1765,12 @@ class UsersControllerTest extends TestCase {
}
public function testGetUsersGroupsSelfTargetted() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->once())
->method('getUID')
->will($this->returnValue('UserToLookup'));
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetUser
->expects($this->once())
->method('getUID')
@@ -1792,12 +1794,12 @@ class UsersControllerTest extends TestCase {
}
public function testGetUsersGroupsForAdminUser() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->exactly(2))
->method('getUID')
->will($this->returnValue('admin'));
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetUser
->expects($this->once())
->method('getUID')
@@ -1826,12 +1828,12 @@ class UsersControllerTest extends TestCase {
}
public function testGetUsersGroupsForSubAdminUserAndUserIsAccessible() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->exactly(2))
->method('getUID')
->will($this->returnValue('subadmin'));
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetUser
->expects($this->once())
->method('getUID')
@@ -1890,12 +1892,12 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionCode 997
*/
public function testGetUsersGroupsForSubAdminUserAndUserIsInaccessible() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->exactly(2))
->method('getUID')
->will($this->returnValue('subadmin'));
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetUser
->expects($this->once())
->method('getUID')
@@ -2108,7 +2110,7 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionCode 101
*/
public function testRemoveFromGroupWithNoTargetGroup() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$this->userSession
->expects($this->once())
->method('getUser')
@@ -2122,7 +2124,7 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionCode 101
*/
public function testRemoveFromGroupWithEmptyTargetGroup() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$this->userSession
->expects($this->once())
->method('getUser')
@@ -2136,7 +2138,7 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionCode 102
*/
public function testRemoveFromGroupWithNotExistingTargetGroup() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$this->userSession
->expects($this->once())
->method('getUser')
@@ -2155,7 +2157,7 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionCode 103
*/
public function testRemoveFromGroupWithNotExistingTargetUser() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
$this->userSession
->expects($this->once())
@@ -2180,12 +2182,12 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionCode 104
*/
public function testRemoveFromGroupWithoutPermission() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->once())
->method('getUID')
->will($this->returnValue('unauthorizedUser'));
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
$this->userSession
->expects($this->once())
@@ -2222,12 +2224,12 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionMessage Cannot remove yourself from the admin group
*/
public function testRemoveFromGroupAsAdminFromAdmin() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->any())
->method('getUID')
->will($this->returnValue('admin'));
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetUser
->expects($this->once())
->method('getUID')
@@ -2272,12 +2274,12 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionMessage Cannot remove yourself from this group as you are a SubAdmin
*/
public function testRemoveFromGroupAsSubAdminFromSubAdmin() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->any())
->method('getUID')
->will($this->returnValue('subadmin'));
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetUser
->expects($this->once())
->method('getUID')
@@ -2327,12 +2329,12 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionMessage Cannot remove user from this group as this is the only remaining group you are a SubAdmin of
*/
public function testRemoveFromGroupAsSubAdminFromLastSubAdminGroup() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->any())
->method('getUID')
->will($this->returnValue('subadmin'));
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
$targetGroup
->expects($this->any())
@@ -2384,12 +2386,12 @@ class UsersControllerTest extends TestCase {
}
public function testRemoveFromGroupSuccessful() {
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->any())
->method('getUID')
->will($this->returnValue('admin'));
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
$this->userSession
->expects($this->once())
@@ -2446,7 +2448,7 @@ class UsersControllerTest extends TestCase {
*/
public function testAddSubAdminWithNotExistingTargetGroup() {
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$this->userManager
->expects($this->once())
->method('get')
@@ -2467,7 +2469,7 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionMessage Cannot create subadmins for admin group
*/
public function testAddSubAdminToAdminGroup() {
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
$targetGroup
->expects($this->once())
@@ -2488,7 +2490,7 @@ class UsersControllerTest extends TestCase {
}
public function testAddSubAdminTwice() {
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
$this->userManager
->expects($this->once())
@@ -2516,7 +2518,7 @@ class UsersControllerTest extends TestCase {
}
public function testAddSubAdminSuccessful() {
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
$this->userManager
->expects($this->once())
@@ -2554,7 +2556,7 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionMessage Unknown error occurred
*/
public function testAddSubAdminUnsuccessful() {
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
$this->userManager
->expects($this->once())
@@ -2607,7 +2609,7 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionMessage Group does not exist
*/
public function testRemoveSubAdminNotExistingTargetGroup() {
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$this->userManager
->expects($this->once())
->method('get')
@@ -2629,7 +2631,7 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionMessage User is not a subadmin of this group
*/
public function testRemoveSubAdminFromNotASubadmin() {
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
$this->userManager
->expects($this->once())
@@ -2657,7 +2659,7 @@ class UsersControllerTest extends TestCase {
}
public function testRemoveSubAdminSuccessful() {
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
$this->userManager
->expects($this->once())
@@ -2695,7 +2697,7 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionMessage Unknown error occurred
*/
public function testRemoveSubAdminUnsuccessful() {
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
$this->userManager
->expects($this->once())
@@ -2743,7 +2745,7 @@ class UsersControllerTest extends TestCase {
}
public function testGetUserSubAdminGroupsWithGroups() {
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
$targetGroup
->expects($this->once())
@@ -2775,7 +2777,7 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionMessage Unknown error occurred
*/
public function testGetUserSubAdminGroupsWithoutGroups() {
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$this->userManager
->expects($this->once())
->method('get')
@@ -2797,7 +2799,7 @@ class UsersControllerTest extends TestCase {
}
public function testEnableUser() {
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetUser->expects($this->once())
->method('setEnabled')
->with(true);
@@ -2806,7 +2808,7 @@ class UsersControllerTest extends TestCase {
->method('get')
->with('RequestedUser')
->will($this->returnValue($targetUser));
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->exactly(2))
->method('getUID')
@@ -2824,7 +2826,7 @@ class UsersControllerTest extends TestCase {
}
public function testDisableUser() {
- $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetUser->expects($this->once())
->method('setEnabled')
->with(false);
@@ -2833,7 +2835,7 @@ class UsersControllerTest extends TestCase {
->method('get')
->with('RequestedUser')
->will($this->returnValue($targetUser));
- $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock();
+ $loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->exactly(2))
->method('getUID')
@@ -2974,14 +2976,14 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionCode 997
*/
public function testResendWelcomeMessageAsSubAdminAndUserIsNotAccessible() {
- $loggedInUser = $this->getMockBuilder('OCP\IUser')
+ $loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$loggedInUser
->expects($this->exactly(1))
->method('getUID')
->will($this->returnValue('subadmin'));
- $targetUser = $this->getMockBuilder('OCP\IUser')
+ $targetUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$this->userSession
@@ -3020,10 +3022,10 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionMessage Email address not available
*/
public function testResendWelcomeMessageNoEmail() {
- $loggedInUser = $this->getMockBuilder('OCP\IUser')
+ $loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
- $targetUser = $this->getMockBuilder('OCP\IUser')
+ $targetUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$this->userSession
@@ -3061,10 +3063,10 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionMessage Email address not available
*/
public function testResendWelcomeMessageNullEmail() {
- $loggedInUser = $this->getMockBuilder('OCP\IUser')
+ $loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
- $targetUser = $this->getMockBuilder('OCP\IUser')
+ $targetUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$this->userSession
@@ -3097,10 +3099,10 @@ class UsersControllerTest extends TestCase {
}
public function testResendWelcomeMessageSuccess() {
- $loggedInUser = $this->getMockBuilder('OCP\IUser')
+ $loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
- $targetUser = $this->getMockBuilder('OCP\IUser')
+ $targetUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$targetUser
@@ -3167,10 +3169,10 @@ class UsersControllerTest extends TestCase {
}
public function testResendWelcomeMessageSuccessWithFallbackLanguage() {
- $loggedInUser = $this->getMockBuilder('OCP\IUser')
+ $loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
- $targetUser = $this->getMockBuilder('OCP\IUser')
+ $targetUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$targetUser
@@ -3242,10 +3244,10 @@ class UsersControllerTest extends TestCase {
* @expectedExceptionMessage Sending email failed
*/
public function testResendWelcomeMessageFailed() {
- $loggedInUser = $this->getMockBuilder('OCP\IUser')
+ $loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
- $targetUser = $this->getMockBuilder('OCP\IUser')
+ $targetUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$targetUser
diff --git a/apps/sharebymail/composer/autoload.php b/apps/sharebymail/composer/autoload.php
new file mode 100644
index 00000000000..da43a4ff256
--- /dev/null
+++ b/apps/sharebymail/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitShareByMail::getLoader();
diff --git a/apps/sharebymail/composer/composer.json b/apps/sharebymail/composer/composer.json
new file mode 100644
index 00000000000..3e7359c114a
--- /dev/null
+++ b/apps/sharebymail/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "ShareByMail"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\ShareByMail\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/sharebymail/composer/composer/ClassLoader.php b/apps/sharebymail/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/sharebymail/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/sharebymail/composer/composer/LICENSE b/apps/sharebymail/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/sharebymail/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/sharebymail/composer/composer/autoload_classmap.php b/apps/sharebymail/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..0df9428d7b0
--- /dev/null
+++ b/apps/sharebymail/composer/composer/autoload_classmap.php
@@ -0,0 +1,16 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\ShareByMail\\Activity' => $baseDir . '/../lib/Activity.php',
+ 'OCA\\ShareByMail\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\ShareByMail\\Capabilities' => $baseDir . '/../lib/Capabilities.php',
+ 'OCA\\ShareByMail\\Settings' => $baseDir . '/../lib/Settings.php',
+ 'OCA\\ShareByMail\\Settings\\Admin' => $baseDir . '/../lib/Settings/Admin.php',
+ 'OCA\\ShareByMail\\Settings\\SettingsManager' => $baseDir . '/../lib/Settings/SettingsManager.php',
+ 'OCA\\ShareByMail\\ShareByMailProvider' => $baseDir . '/../lib/ShareByMailProvider.php',
+);
diff --git a/apps/sharebymail/composer/composer/autoload_namespaces.php b/apps/sharebymail/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/sharebymail/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/sharebymail/composer/composer/autoload_psr4.php b/apps/sharebymail/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..15fee669450
--- /dev/null
+++ b/apps/sharebymail/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\ShareByMail\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/sharebymail/composer/composer/autoload_real.php b/apps/sharebymail/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..b03d256defe
--- /dev/null
+++ b/apps/sharebymail/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitShareByMail
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitShareByMail', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitShareByMail', 'loadClassLoader'));
+
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitShareByMail::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/sharebymail/composer/composer/autoload_static.php b/apps/sharebymail/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..273da60be64
--- /dev/null
+++ b/apps/sharebymail/composer/composer/autoload_static.php
@@ -0,0 +1,42 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitShareByMail
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\ShareByMail\\' => 16,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\ShareByMail\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\ShareByMail\\Activity' => __DIR__ . '/..' . '/../lib/Activity.php',
+ 'OCA\\ShareByMail\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\ShareByMail\\Capabilities' => __DIR__ . '/..' . '/../lib/Capabilities.php',
+ 'OCA\\ShareByMail\\Settings' => __DIR__ . '/..' . '/../lib/Settings.php',
+ 'OCA\\ShareByMail\\Settings\\Admin' => __DIR__ . '/..' . '/../lib/Settings/Admin.php',
+ 'OCA\\ShareByMail\\Settings\\SettingsManager' => __DIR__ . '/..' . '/../lib/Settings/SettingsManager.php',
+ 'OCA\\ShareByMail\\ShareByMailProvider' => __DIR__ . '/..' . '/../lib/ShareByMailProvider.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitShareByMail::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitShareByMail::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitShareByMail::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/sharebymail/l10n/ca.js b/apps/sharebymail/l10n/ca.js
index 0783846acb7..a80a7519582 100644
--- a/apps/sharebymail/l10n/ca.js
+++ b/apps/sharebymail/l10n/ca.js
@@ -23,12 +23,12 @@ OC.L10N.register(
"Click the button below to open it." : "Feu clic al botó següent per obrir-lo.",
"Open »%s«" : "Obert »%s«",
"%s via %s" : "%svia%s",
- "Password to access »%s« shared to you by %s" : "Contrasenya d'accés »%s« compartida per vostè %s",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%scompartit »%s« amb tu. Heu d'haver rebut un correu independent amb un enllaç per accedir-hi.",
+ "Password to access »%s« shared to you by %s" : "Contrasenya d'accés »%s« compartida per vostè %s",
"Password to access »%s«" : "Contrasenya d'accés »%s«",
"It is protected with the following password: %s" : "Està protegit amb la següent contrasenya: %s",
- "Password to access »%s« shared with %s" : "Contrasenya d'accés »%s« compartit amb %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." : "Acabeu de compartir »%s« amb %s. La part ja s'ha enviat al destinatari. A causa de les polítiques de seguretat definides per l'administrador de %scada acció, ha de ser protegit per contrasenya i no es permet enviar la contrasenya directament al destinatari. Per tant, heu de reenviar la contrasenya manualment al destinatari.",
+ "Password to access »%s« shared with %s" : "Contrasenya d'accés »%s« compartit amb %s",
"This is the password: %s" : "Aquesta és la contrasenya:%s",
"You can choose a different password at any time in the share dialog." : "Podeu triar una contrasenya diferent en qualsevol moment al diàleg d'accions.",
"Could not find share" : "No s'ha pogut trobar la compartició",
diff --git a/apps/sharebymail/l10n/ca.json b/apps/sharebymail/l10n/ca.json
index c5254f91fd0..6e0981ab4e3 100644
--- a/apps/sharebymail/l10n/ca.json
+++ b/apps/sharebymail/l10n/ca.json
@@ -21,12 +21,12 @@
"Click the button below to open it." : "Feu clic al botó següent per obrir-lo.",
"Open »%s«" : "Obert »%s«",
"%s via %s" : "%svia%s",
- "Password to access »%s« shared to you by %s" : "Contrasenya d'accés »%s« compartida per vostè %s",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%scompartit »%s« amb tu. Heu d'haver rebut un correu independent amb un enllaç per accedir-hi.",
+ "Password to access »%s« shared to you by %s" : "Contrasenya d'accés »%s« compartida per vostè %s",
"Password to access »%s«" : "Contrasenya d'accés »%s«",
"It is protected with the following password: %s" : "Està protegit amb la següent contrasenya: %s",
- "Password to access »%s« shared with %s" : "Contrasenya d'accés »%s« compartit amb %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." : "Acabeu de compartir »%s« amb %s. La part ja s'ha enviat al destinatari. A causa de les polítiques de seguretat definides per l'administrador de %scada acció, ha de ser protegit per contrasenya i no es permet enviar la contrasenya directament al destinatari. Per tant, heu de reenviar la contrasenya manualment al destinatari.",
+ "Password to access »%s« shared with %s" : "Contrasenya d'accés »%s« compartit amb %s",
"This is the password: %s" : "Aquesta és la contrasenya:%s",
"You can choose a different password at any time in the share dialog." : "Podeu triar una contrasenya diferent en qualsevol moment al diàleg d'accions.",
"Could not find share" : "No s'ha pogut trobar la compartició",
diff --git a/apps/sharebymail/l10n/cs.js b/apps/sharebymail/l10n/cs.js
index e3231c6a65a..b2cbfa08f41 100644
--- a/apps/sharebymail/l10n/cs.js
+++ b/apps/sharebymail/l10n/cs.js
@@ -24,13 +24,13 @@ OC.L10N.register(
"Click the button below to open it." : "Pro otevření kliknětena tlačítko níže.",
"Open »%s«" : "Otevřít »%s«",
"%s via %s" : "%s přes %s",
- "Password to access »%s« shared to you by %s" : "Heslo pro přístup k »%s« (vám nasdílel(a) %s)",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s s vámi sdílel(a) %s.",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s s vámi sdílel(a) »%s«. Již jste měli dostat e-mail s přístupovými údaji.",
+ "Password to access »%s« shared to you by %s" : "Heslo pro přístup k »%s« (vám nasdílel(a) %s)",
"Password to access »%s«" : "Heslo pro přístup k »%s«",
"It is protected with the following password: %s" : "Je chráněn následujícím heslem: %s",
- "Password to access »%s« shared with %s" : "Heslo pro přístup k »%s« sdíleno s %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." : "Právě jste s »%s» nasdílel(a) %s. Sdílení bylo již příjemci zasláno. Kvůli bezpečnostní politice nastavené administrátorem %s musí být každé sdílení chráněno heslem a toto heslo nemůže být příjemci zasláno přímo. Kvůli tomu ho budete muset manuálně přeposlat.",
+ "Password to access »%s« shared with %s" : "Heslo pro přístup k »%s« sdíleno s %s",
"This is the password: %s" : "Toto je heslo: %s",
"You can choose a different password at any time in the share dialog." : "V dialogu sdílení můžete kdykoliv vybrat jiné heslo.",
"Could not find share" : "Nelze nalézt sdílení",
diff --git a/apps/sharebymail/l10n/cs.json b/apps/sharebymail/l10n/cs.json
index 7758949bd0f..80b4476b45d 100644
--- a/apps/sharebymail/l10n/cs.json
+++ b/apps/sharebymail/l10n/cs.json
@@ -22,13 +22,13 @@
"Click the button below to open it." : "Pro otevření kliknětena tlačítko níže.",
"Open »%s«" : "Otevřít »%s«",
"%s via %s" : "%s přes %s",
- "Password to access »%s« shared to you by %s" : "Heslo pro přístup k »%s« (vám nasdílel(a) %s)",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s s vámi sdílel(a) %s.",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s s vámi sdílel(a) »%s«. Již jste měli dostat e-mail s přístupovými údaji.",
+ "Password to access »%s« shared to you by %s" : "Heslo pro přístup k »%s« (vám nasdílel(a) %s)",
"Password to access »%s«" : "Heslo pro přístup k »%s«",
"It is protected with the following password: %s" : "Je chráněn následujícím heslem: %s",
- "Password to access »%s« shared with %s" : "Heslo pro přístup k »%s« sdíleno s %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." : "Právě jste s »%s» nasdílel(a) %s. Sdílení bylo již příjemci zasláno. Kvůli bezpečnostní politice nastavené administrátorem %s musí být každé sdílení chráněno heslem a toto heslo nemůže být příjemci zasláno přímo. Kvůli tomu ho budete muset manuálně přeposlat.",
+ "Password to access »%s« shared with %s" : "Heslo pro přístup k »%s« sdíleno s %s",
"This is the password: %s" : "Toto je heslo: %s",
"You can choose a different password at any time in the share dialog." : "V dialogu sdílení můžete kdykoliv vybrat jiné heslo.",
"Could not find share" : "Nelze nalézt sdílení",
diff --git a/apps/sharebymail/l10n/da.js b/apps/sharebymail/l10n/da.js
index d37a907e5a2..cd9584039bf 100644
--- a/apps/sharebymail/l10n/da.js
+++ b/apps/sharebymail/l10n/da.js
@@ -24,13 +24,13 @@ OC.L10N.register(
"Click the button below to open it." : "Klik på knappen nedenunder for at åbne.",
"Open »%s«" : "Åbn »%s«",
"%s via %s" : "%s via %s",
- "Password to access »%s« shared to you by %s" : "Kodeord for adgang til »%s« delt med dig af %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s delte »%s« med dig.\nDu burde allerede have modtaget en email med et link til at tilgå det.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s delte »%s« med dig.\nDu burde allerede have modtaget en email med et link til at tilgå det.",
+ "Password to access »%s« shared to you by %s" : "Kodeord for adgang til »%s« delt med dig af %s",
"Password to access »%s«" : "Kodeord for adgang til »%s«",
"It is protected with the following password: %s" : "Det er beskyttet af følgende kodeord: %s",
- "Password to access »%s« shared with %s" : "Password for adgang til »%s« delt med dig af %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." : "Du har delt »%s« med %s. Delingen er allerede sendt til modtageren. Pga. sikkerhedsretninger der er lavet af administratoren af %s hver deling skal beskyttes af et password og det er ikke tilladt at sende passwordet direkte til modtageren. Derfor skal du give passwordet til modtageren manuelt.",
+ "Password to access »%s« shared with %s" : "Password for adgang til »%s« delt med dig af %s",
"This is the password: %s" : "Dette password er: %s",
"You can choose a different password at any time in the share dialog." : "Du kan til enhver tid vælge et andet password i delings dialogen.",
"Could not find share" : "Kan ikke finde deling",
diff --git a/apps/sharebymail/l10n/da.json b/apps/sharebymail/l10n/da.json
index 046d4436386..77a40542d31 100644
--- a/apps/sharebymail/l10n/da.json
+++ b/apps/sharebymail/l10n/da.json
@@ -22,13 +22,13 @@
"Click the button below to open it." : "Klik på knappen nedenunder for at åbne.",
"Open »%s«" : "Åbn »%s«",
"%s via %s" : "%s via %s",
- "Password to access »%s« shared to you by %s" : "Kodeord for adgang til »%s« delt med dig af %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s delte »%s« med dig.\nDu burde allerede have modtaget en email med et link til at tilgå det.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s delte »%s« med dig.\nDu burde allerede have modtaget en email med et link til at tilgå det.",
+ "Password to access »%s« shared to you by %s" : "Kodeord for adgang til »%s« delt med dig af %s",
"Password to access »%s«" : "Kodeord for adgang til »%s«",
"It is protected with the following password: %s" : "Det er beskyttet af følgende kodeord: %s",
- "Password to access »%s« shared with %s" : "Password for adgang til »%s« delt med dig af %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." : "Du har delt »%s« med %s. Delingen er allerede sendt til modtageren. Pga. sikkerhedsretninger der er lavet af administratoren af %s hver deling skal beskyttes af et password og det er ikke tilladt at sende passwordet direkte til modtageren. Derfor skal du give passwordet til modtageren manuelt.",
+ "Password to access »%s« shared with %s" : "Password for adgang til »%s« delt med dig af %s",
"This is the password: %s" : "Dette password er: %s",
"You can choose a different password at any time in the share dialog." : "Du kan til enhver tid vælge et andet password i delings dialogen.",
"Could not find share" : "Kan ikke finde deling",
diff --git a/apps/sharebymail/l10n/de.js b/apps/sharebymail/l10n/de.js
index ed08ebf76bf..ad26d8f1c5a 100644
--- a/apps/sharebymail/l10n/de.js
+++ b/apps/sharebymail/l10n/de.js
@@ -24,13 +24,13 @@ OC.L10N.register(
"Click the button below to open it." : "Klicke zum Öffnen auf die untere Schaltfläche",
"Open »%s«" : "Öffne »%s«",
"%s via %s" : "%s via %s",
- "Password to access »%s« shared to you by %s" : "Das Passwort zum Zugriff auf %s wurde durch %s mit Dir geteilt.",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s hat »%s« mit Dir geteilt.\nDu solltest eine weitere E-Mail mit dem Link für den Zugriff erhalten haben.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s hat »%s« mit Dir geteilt. Du solltest schon eine E-Mail mit einem Link erhalten haben um darauf zu zugreifen. ",
+ "Password to access »%s« shared to you by %s" : "Das Passwort zum Zugriff auf %s wurde durch %s mit Dir geteilt.",
"Password to access »%s«" : "Passwort um auf »%s« zu zugreifen",
"It is protected with the following password: %s" : "Dies ist mit dem folgendem Passwort geschützt: %s",
- "Password to access »%s« shared with %s" : "Passwort für den Zugriff auf %s, geteilt mit %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." : "Du hast »%s« mit %s geteilt. Die Freigabe wurde an den Empfenger gesandt. Aufgrund der Sicherheits-Richtlinien die vom Administrator von %svorgegeben wurden, benötigt jede Freigabe einen Passwortschutz und es ist nicht zulässig, ein Passwort direkt an den Empfänger zu versenden. Aus diesem Grund musst Du das Passwort selbst an den Empfänger senden.",
+ "Password to access »%s« shared with %s" : "Passwort für den Zugriff auf %s, geteilt mit %s",
"This is the password: %s" : "Das Passwort lautet: %s",
"You can choose a different password at any time in the share dialog." : "Im Teilen-Dialog kannst Du jederzeit ein anderes Passwort wählen.",
"Could not find share" : "Freigabe konnte nicht gefunden werden",
diff --git a/apps/sharebymail/l10n/de.json b/apps/sharebymail/l10n/de.json
index 367699482d9..64c6ac197ea 100644
--- a/apps/sharebymail/l10n/de.json
+++ b/apps/sharebymail/l10n/de.json
@@ -22,13 +22,13 @@
"Click the button below to open it." : "Klicke zum Öffnen auf die untere Schaltfläche",
"Open »%s«" : "Öffne »%s«",
"%s via %s" : "%s via %s",
- "Password to access »%s« shared to you by %s" : "Das Passwort zum Zugriff auf %s wurde durch %s mit Dir geteilt.",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s hat »%s« mit Dir geteilt.\nDu solltest eine weitere E-Mail mit dem Link für den Zugriff erhalten haben.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s hat »%s« mit Dir geteilt. Du solltest schon eine E-Mail mit einem Link erhalten haben um darauf zu zugreifen. ",
+ "Password to access »%s« shared to you by %s" : "Das Passwort zum Zugriff auf %s wurde durch %s mit Dir geteilt.",
"Password to access »%s«" : "Passwort um auf »%s« zu zugreifen",
"It is protected with the following password: %s" : "Dies ist mit dem folgendem Passwort geschützt: %s",
- "Password to access »%s« shared with %s" : "Passwort für den Zugriff auf %s, geteilt mit %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." : "Du hast »%s« mit %s geteilt. Die Freigabe wurde an den Empfenger gesandt. Aufgrund der Sicherheits-Richtlinien die vom Administrator von %svorgegeben wurden, benötigt jede Freigabe einen Passwortschutz und es ist nicht zulässig, ein Passwort direkt an den Empfänger zu versenden. Aus diesem Grund musst Du das Passwort selbst an den Empfänger senden.",
+ "Password to access »%s« shared with %s" : "Passwort für den Zugriff auf %s, geteilt mit %s",
"This is the password: %s" : "Das Passwort lautet: %s",
"You can choose a different password at any time in the share dialog." : "Im Teilen-Dialog kannst Du jederzeit ein anderes Passwort wählen.",
"Could not find share" : "Freigabe konnte nicht gefunden werden",
diff --git a/apps/sharebymail/l10n/de_DE.js b/apps/sharebymail/l10n/de_DE.js
index b078e0be43c..1aa24570027 100644
--- a/apps/sharebymail/l10n/de_DE.js
+++ b/apps/sharebymail/l10n/de_DE.js
@@ -24,13 +24,13 @@ OC.L10N.register(
"Click the button below to open it." : "Klicken Sie zum Öffnen auf die untere Schaltfläche",
"Open »%s«" : "Öffne »%s«",
"%s via %s" : "%s via %s",
- "Password to access »%s« shared to you by %s" : "Das Passwort zum Zugriff auf %s wurde durch %s mit Ihnen geteilt.",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s hat »%s« mit Ihnen geteilt.\nSie sollten eine weitere E-Mail mit dem Link für den Zugriff erhalten haben.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s hat »%s« mit Ihnen geteilt. Sie sollten schon eine E-Mail mit einem Link erhalten haben um darauf zu zugreifen. ",
+ "Password to access »%s« shared to you by %s" : "Das Passwort zum Zugriff auf %s wurde durch %s mit Ihnen geteilt.",
"Password to access »%s«" : "Passwort um auf »%s« zu zugreifen",
"It is protected with the following password: %s" : "Dies ist mit dem folgendem Passwort geschützt: %s",
- "Password to access »%s« shared with %s" : "Passwort für den Zugriff auf %s, geteilt mit %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." : "Sie haben »%s« mit %s geteilt. Die Freigabe wurde an den Empfenger gesandt. Aufgrund der Sicherheits-Richtlinien die vom Administrator von %svorgegeben wurden, benötigt jede Freigabe einen Passwortschutz und es ist nicht zulässig, ein Passwort direkt an den Empfänger zu versenden. Aus diesem Grund müssen Sie Passwort selbst an den Empfänger senden.",
+ "Password to access »%s« shared with %s" : "Passwort für den Zugriff auf %s, geteilt mit %s",
"This is the password: %s" : "Das Passwort lautet: %s",
"You can choose a different password at any time in the share dialog." : "Im Teilen-Dialog können Sie jederzeit ein anderes Passwort wählen.",
"Could not find share" : "Freigabe konnte nicht gefunden werden",
diff --git a/apps/sharebymail/l10n/de_DE.json b/apps/sharebymail/l10n/de_DE.json
index 62aeb5df736..6cc73b38876 100644
--- a/apps/sharebymail/l10n/de_DE.json
+++ b/apps/sharebymail/l10n/de_DE.json
@@ -22,13 +22,13 @@
"Click the button below to open it." : "Klicken Sie zum Öffnen auf die untere Schaltfläche",
"Open »%s«" : "Öffne »%s«",
"%s via %s" : "%s via %s",
- "Password to access »%s« shared to you by %s" : "Das Passwort zum Zugriff auf %s wurde durch %s mit Ihnen geteilt.",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s hat »%s« mit Ihnen geteilt.\nSie sollten eine weitere E-Mail mit dem Link für den Zugriff erhalten haben.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s hat »%s« mit Ihnen geteilt. Sie sollten schon eine E-Mail mit einem Link erhalten haben um darauf zu zugreifen. ",
+ "Password to access »%s« shared to you by %s" : "Das Passwort zum Zugriff auf %s wurde durch %s mit Ihnen geteilt.",
"Password to access »%s«" : "Passwort um auf »%s« zu zugreifen",
"It is protected with the following password: %s" : "Dies ist mit dem folgendem Passwort geschützt: %s",
- "Password to access »%s« shared with %s" : "Passwort für den Zugriff auf %s, geteilt mit %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." : "Sie haben »%s« mit %s geteilt. Die Freigabe wurde an den Empfenger gesandt. Aufgrund der Sicherheits-Richtlinien die vom Administrator von %svorgegeben wurden, benötigt jede Freigabe einen Passwortschutz und es ist nicht zulässig, ein Passwort direkt an den Empfänger zu versenden. Aus diesem Grund müssen Sie Passwort selbst an den Empfänger senden.",
+ "Password to access »%s« shared with %s" : "Passwort für den Zugriff auf %s, geteilt mit %s",
"This is the password: %s" : "Das Passwort lautet: %s",
"You can choose a different password at any time in the share dialog." : "Im Teilen-Dialog können Sie jederzeit ein anderes Passwort wählen.",
"Could not find share" : "Freigabe konnte nicht gefunden werden",
diff --git a/apps/sharebymail/l10n/el.js b/apps/sharebymail/l10n/el.js
index 2661f7d11f5..1cca5b74fb9 100644
--- a/apps/sharebymail/l10n/el.js
+++ b/apps/sharebymail/l10n/el.js
@@ -18,22 +18,24 @@ 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." : "Κάντε κλικ στο παρακάτω κουμπί για να το ανοίξετε.",
"Open »%s«" : "Ανοίξτε »%s«",
"%s via %s" : "%s μέσω %s",
- "Password to access »%s« shared to you by %s" : "Συνθηματικό για πρόσβαση στο »%s« διαμοιράστηκε μαζί σας μέσω %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s διαμοιράστηκε »%s« με εσάς.\nΘα πρέπει να έχετε ήδη λάβει ένα ξεχωριστό mail με έναν σύνδεσμο με πρόσβαση σε αυτό.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s διαμοιράστηκε »%s« με εσάς. Θα πρέπει να έχετε ήδη λάβει ένα ξεχωριστό mail με έναν σύνδεσμο με πρόσβαση σε αυτό.",
+ "Password to access »%s« shared to you by %s" : "Συνθηματικό για πρόσβαση στο »%s« διαμοιράστηκε μαζί σας μέσω %s",
"Password to access »%s«" : "Συνθηματικό για πρόσβαση στο »%s«",
"It is protected with the following password: %s" : "Είναι προστατευμένο με το ακόλουθο συνθηματικό: %s",
- "Password to access »%s« shared with %s" : "Συνθηματικό για πρόσβαση στο »%s« διαμοιράστηκε με %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." : "Έχετε μόλις διαμοιραστεί »%s« με %s. Ο διαμοιρασμός έχει ήδη σταλθεί στον παραλήπτη. Βάση των πολιτικών ασφαλείας που έχουν ορισθεί από τον διαχειριστή του %s ο κάθε διαμοιρασμός χρειάζεται να προστατεύεται από ένα συνθηματικό και δεν επιτρέπετε να σταλθεί το συνθηματικό απευθείας στον παραλήπτη. Επομένως χρειάζεται να προωθήσετε το συνθηματικό χειροκίνητα στον παραλήπτη.",
+ "Password to access »%s« shared with %s" : "Συνθηματικό για πρόσβαση στο »%s« διαμοιράστηκε με %s",
"This is the password: %s" : "Αυτό είναι το συνθηματικό: %s",
"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 e2f80276367..432e4ca129a 100644
--- a/apps/sharebymail/l10n/el.json
+++ b/apps/sharebymail/l10n/el.json
@@ -16,22 +16,24 @@
"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." : "Κάντε κλικ στο παρακάτω κουμπί για να το ανοίξετε.",
"Open »%s«" : "Ανοίξτε »%s«",
"%s via %s" : "%s μέσω %s",
- "Password to access »%s« shared to you by %s" : "Συνθηματικό για πρόσβαση στο »%s« διαμοιράστηκε μαζί σας μέσω %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s διαμοιράστηκε »%s« με εσάς.\nΘα πρέπει να έχετε ήδη λάβει ένα ξεχωριστό mail με έναν σύνδεσμο με πρόσβαση σε αυτό.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s διαμοιράστηκε »%s« με εσάς. Θα πρέπει να έχετε ήδη λάβει ένα ξεχωριστό mail με έναν σύνδεσμο με πρόσβαση σε αυτό.",
+ "Password to access »%s« shared to you by %s" : "Συνθηματικό για πρόσβαση στο »%s« διαμοιράστηκε μαζί σας μέσω %s",
"Password to access »%s«" : "Συνθηματικό για πρόσβαση στο »%s«",
"It is protected with the following password: %s" : "Είναι προστατευμένο με το ακόλουθο συνθηματικό: %s",
- "Password to access »%s« shared with %s" : "Συνθηματικό για πρόσβαση στο »%s« διαμοιράστηκε με %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." : "Έχετε μόλις διαμοιραστεί »%s« με %s. Ο διαμοιρασμός έχει ήδη σταλθεί στον παραλήπτη. Βάση των πολιτικών ασφαλείας που έχουν ορισθεί από τον διαχειριστή του %s ο κάθε διαμοιρασμός χρειάζεται να προστατεύεται από ένα συνθηματικό και δεν επιτρέπετε να σταλθεί το συνθηματικό απευθείας στον παραλήπτη. Επομένως χρειάζεται να προωθήσετε το συνθηματικό χειροκίνητα στον παραλήπτη.",
+ "Password to access »%s« shared with %s" : "Συνθηματικό για πρόσβαση στο »%s« διαμοιράστηκε με %s",
"This is the password: %s" : "Αυτό είναι το συνθηματικό: %s",
"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/en_GB.js b/apps/sharebymail/l10n/en_GB.js
index 51de9bcd3e3..463c28fa631 100644
--- a/apps/sharebymail/l10n/en_GB.js
+++ b/apps/sharebymail/l10n/en_GB.js
@@ -24,13 +24,13 @@ OC.L10N.register(
"Click the button below to open it." : "Click the button below to open it.",
"Open »%s«" : "Open »%s«",
"%s via %s" : "%s via %s",
- "Password to access »%s« shared to you by %s" : "Password to access »%s« shared to you by %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s shared »%s« with you. You should have already received a separate mail with a link to access it.",
+ "Password to access »%s« shared to you by %s" : "Password to access »%s« shared to you by %s",
"Password to access »%s«" : "Password to access »%s«",
"It is protected with the following password: %s" : "It is protected with the following password: %s",
- "Password to access »%s« shared with %s" : "Password to access »%s« shared with %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." : "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.",
+ "Password to access »%s« shared with %s" : "Password to access »%s« shared with %s",
"This is the password: %s" : "This is the password: %s",
"You can choose a different password at any time in the share dialog." : "You can choose a different password at any time in the share dialog.",
"Could not find share" : "Could not find share",
diff --git a/apps/sharebymail/l10n/en_GB.json b/apps/sharebymail/l10n/en_GB.json
index 8ba45b8fa2c..5b9d653745c 100644
--- a/apps/sharebymail/l10n/en_GB.json
+++ b/apps/sharebymail/l10n/en_GB.json
@@ -22,13 +22,13 @@
"Click the button below to open it." : "Click the button below to open it.",
"Open »%s«" : "Open »%s«",
"%s via %s" : "%s via %s",
- "Password to access »%s« shared to you by %s" : "Password to access »%s« shared to you by %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s shared »%s« with you. You should have already received a separate mail with a link to access it.",
+ "Password to access »%s« shared to you by %s" : "Password to access »%s« shared to you by %s",
"Password to access »%s«" : "Password to access »%s«",
"It is protected with the following password: %s" : "It is protected with the following password: %s",
- "Password to access »%s« shared with %s" : "Password to access »%s« shared with %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." : "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.",
+ "Password to access »%s« shared with %s" : "Password to access »%s« shared with %s",
"This is the password: %s" : "This is the password: %s",
"You can choose a different password at any time in the share dialog." : "You can choose a different password at any time in the share dialog.",
"Could not find share" : "Could not find share",
diff --git a/apps/sharebymail/l10n/es.js b/apps/sharebymail/l10n/es.js
index f205576ac9c..3f01dc6f3fe 100644
--- a/apps/sharebymail/l10n/es.js
+++ b/apps/sharebymail/l10n/es.js
@@ -24,13 +24,13 @@ OC.L10N.register(
"Click the button below to open it." : "Haga click en el botón debajo para abrirlo.",
"Open »%s«" : "Abrir »%s«",
"%s via %s" : "%s por %s",
- "Password to access »%s« shared to you by %s" : "Contraseña para acceder »%s« compartido con usted por %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 un enlace para acceder.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s compartió »%s« con usted. Debería haber recibido un mensaje de correo separado con un enlace para abrirlo.",
+ "Password to access »%s« shared to you by %s" : "Contraseña para acceder »%s« compartido con usted 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",
- "Password to access »%s« shared with %s" : "Se ha compartido con %s una contraseña para acceder 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." : "Usted acaba de compartir »%s« con %s. El recurso compartido ya fue enviado al destinatario. Debido a las reglas de seguridad definadas por el administrador de %s cada recurso compartido necesita ser protegido por una contraseña y no esta permitido que usted mande la contraseña directamente al destinatario. Por eso, usted necesita mandar la contraseña manualmente al destinatario.",
+ "Password to access »%s« shared with %s" : "Se ha compartido con %s una contraseña para acceder a »%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 el diálogo de compartir.",
"Could not find share" : "No se pudo encontrar el recurso compartido",
diff --git a/apps/sharebymail/l10n/es.json b/apps/sharebymail/l10n/es.json
index 126ec78cbf2..1faa382564d 100644
--- a/apps/sharebymail/l10n/es.json
+++ b/apps/sharebymail/l10n/es.json
@@ -22,13 +22,13 @@
"Click the button below to open it." : "Haga click en el botón debajo para abrirlo.",
"Open »%s«" : "Abrir »%s«",
"%s via %s" : "%s por %s",
- "Password to access »%s« shared to you by %s" : "Contraseña para acceder »%s« compartido con usted por %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 un enlace para acceder.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s compartió »%s« con usted. Debería haber recibido un mensaje de correo separado con un enlace para abrirlo.",
+ "Password to access »%s« shared to you by %s" : "Contraseña para acceder »%s« compartido con usted 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",
- "Password to access »%s« shared with %s" : "Se ha compartido con %s una contraseña para acceder 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." : "Usted acaba de compartir »%s« con %s. El recurso compartido ya fue enviado al destinatario. Debido a las reglas de seguridad definadas por el administrador de %s cada recurso compartido necesita ser protegido por una contraseña y no esta permitido que usted mande la contraseña directamente al destinatario. Por eso, usted necesita mandar la contraseña manualmente al destinatario.",
+ "Password to access »%s« shared with %s" : "Se ha compartido con %s una contraseña para acceder a »%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 el diálogo de compartir.",
"Could not find share" : "No se pudo encontrar el recurso compartido",
diff --git a/apps/sharebymail/l10n/es_AR.js b/apps/sharebymail/l10n/es_AR.js
index 14cc043d919..f2fa571d1cd 100644
--- a/apps/sharebymail/l10n/es_AR.js
+++ b/apps/sharebymail/l10n/es_AR.js
@@ -24,13 +24,13 @@ OC.L10N.register(
"Click the button below to open it." : "Haga click en el botón de abajo para abrirlo.",
"Open »%s«" : "Abrir »%s«",
"%s via %s" : "%s vía %s",
- "Password to access »%s« shared to you by %s" : "Contraseña para acceder »%s« compartido con usted por %s ",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s compartió »%s« con usted.\nDebería haber recibido ya un correo por separado con el link 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« con usted. Ya debería haber recibido un correo aparte con el link para accederlo. ",
+ "Password to access »%s« shared to you by %s" : "Contraseña para acceder »%s« compartido con usted 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",
- "Password to access »%s« shared with %s" : "La contraseña para acceder »%s« ha sido compartida con %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." : "Usted compartió »%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 necesita 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." : "Puede 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",
diff --git a/apps/sharebymail/l10n/es_AR.json b/apps/sharebymail/l10n/es_AR.json
index 4b27cbe5782..d7c9861e44b 100644
--- a/apps/sharebymail/l10n/es_AR.json
+++ b/apps/sharebymail/l10n/es_AR.json
@@ -22,13 +22,13 @@
"Click the button below to open it." : "Haga click en el botón de abajo para abrirlo.",
"Open »%s«" : "Abrir »%s«",
"%s via %s" : "%s vía %s",
- "Password to access »%s« shared to you by %s" : "Contraseña para acceder »%s« compartido con usted por %s ",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s compartió »%s« con usted.\nDebería haber recibido ya un correo por separado con el link 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« con usted. Ya debería haber recibido un correo aparte con el link para accederlo. ",
+ "Password to access »%s« shared to you by %s" : "Contraseña para acceder »%s« compartido con usted 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",
- "Password to access »%s« shared with %s" : "La contraseña para acceder »%s« ha sido compartida con %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." : "Usted compartió »%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 necesita 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." : "Puede 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",
diff --git a/apps/sharebymail/l10n/es_CO.js b/apps/sharebymail/l10n/es_CO.js
new file mode 100644
index 00000000000..92f61e8f63e
--- /dev/null
+++ b/apps/sharebymail/l10n/es_CO.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_CO.json b/apps/sharebymail/l10n/es_CO.json
new file mode 100644
index 00000000000..43a4bc87eb2
--- /dev/null
+++ b/apps/sharebymail/l10n/es_CO.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_CR.js b/apps/sharebymail/l10n/es_CR.js
new file mode 100644
index 00000000000..92f61e8f63e
--- /dev/null
+++ b/apps/sharebymail/l10n/es_CR.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_CR.json b/apps/sharebymail/l10n/es_CR.json
new file mode 100644
index 00000000000..43a4bc87eb2
--- /dev/null
+++ b/apps/sharebymail/l10n/es_CR.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_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/sharebymail/l10n/es_MX.js b/apps/sharebymail/l10n/es_MX.js
index 9dc5ee4b55d..92f61e8f63e 100644
--- a/apps/sharebymail/l10n/es_MX.js
+++ b/apps/sharebymail/l10n/es_MX.js
@@ -24,13 +24,13 @@ OC.L10N.register(
"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",
- "Password to access »%s« shared to you by %s" : "Contraseña para acceder »%s« compartido contigo por %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",
- "Password to access »%s« shared with %s" : "La contraseña para acceder »%s« ha sido compartida con %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",
diff --git a/apps/sharebymail/l10n/es_MX.json b/apps/sharebymail/l10n/es_MX.json
index 3cc7b9a4899..43a4bc87eb2 100644
--- a/apps/sharebymail/l10n/es_MX.json
+++ b/apps/sharebymail/l10n/es_MX.json
@@ -22,13 +22,13 @@
"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",
- "Password to access »%s« shared to you by %s" : "Contraseña para acceder »%s« compartido contigo por %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",
- "Password to access »%s« shared with %s" : "La contraseña para acceder »%s« ha sido compartida con %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",
diff --git a/apps/sharebymail/l10n/fr.js b/apps/sharebymail/l10n/fr.js
index 8a022b5afcd..d823ae21cf2 100644
--- a/apps/sharebymail/l10n/fr.js
+++ b/apps/sharebymail/l10n/fr.js
@@ -24,13 +24,13 @@ OC.L10N.register(
"Click the button below to open it." : "Cliquez sur le bouton ci-dessous pour l'ouvrir.",
"Open »%s«" : "Ouvrir «%s»",
"%s via %s" : "%s via %s",
- "Password to access »%s« shared to you by %s" : "Mot de passe pour accèder à «%s» partagé par %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s a partagé «%s» avec vous.\nVous avez normalement déjà reçu un autre email avec un lien pour y accéder.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s a partagé «%s» avec vous. Vous avez normalement déjà reçu un autre email avec un lien pour y accéder.",
+ "Password to access »%s« shared to you by %s" : "Mot de passe pour accèder à «%s» partagé par %s",
"Password to access »%s«" : "Mot de passe pour accèder à «%s»",
"It is protected with the following password: %s" : "Il est protégé avec le mot de passe suivant : %s",
- "Password to access »%s« shared with %s" : "Mot de passe pour accèder à «%s» partagé avec %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." : "Vous venez de partager «%s» avec %s. Le partage a déjà été envoyé au destinataire. En raison de la politique de sécurité définie par l'administrateur de %s, chaque partage a besoin d'être protégé par mot de passe et il n'est pas autorisé d'envoyer le mot de passe directement au destinataire. C'est pourquoi vous devez transmettre le mot de passe manuellement au destinataire.",
+ "Password to access »%s« shared with %s" : "Mot de passe pour accèder à «%s» partagé avec %s",
"This is the password: %s" : "Voici le mot de passe : %s",
"You can choose a different password at any time in the share dialog." : "Vous pouvez choisir un mot de passe différent à n'importe quel moment dans la boîte de dialogue de partage.",
"Could not find share" : "Impossible de trouver le partage",
diff --git a/apps/sharebymail/l10n/fr.json b/apps/sharebymail/l10n/fr.json
index 98f14cdb717..ed1df58468b 100644
--- a/apps/sharebymail/l10n/fr.json
+++ b/apps/sharebymail/l10n/fr.json
@@ -22,13 +22,13 @@
"Click the button below to open it." : "Cliquez sur le bouton ci-dessous pour l'ouvrir.",
"Open »%s«" : "Ouvrir «%s»",
"%s via %s" : "%s via %s",
- "Password to access »%s« shared to you by %s" : "Mot de passe pour accèder à «%s» partagé par %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s a partagé «%s» avec vous.\nVous avez normalement déjà reçu un autre email avec un lien pour y accéder.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s a partagé «%s» avec vous. Vous avez normalement déjà reçu un autre email avec un lien pour y accéder.",
+ "Password to access »%s« shared to you by %s" : "Mot de passe pour accèder à «%s» partagé par %s",
"Password to access »%s«" : "Mot de passe pour accèder à «%s»",
"It is protected with the following password: %s" : "Il est protégé avec le mot de passe suivant : %s",
- "Password to access »%s« shared with %s" : "Mot de passe pour accèder à «%s» partagé avec %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." : "Vous venez de partager «%s» avec %s. Le partage a déjà été envoyé au destinataire. En raison de la politique de sécurité définie par l'administrateur de %s, chaque partage a besoin d'être protégé par mot de passe et il n'est pas autorisé d'envoyer le mot de passe directement au destinataire. C'est pourquoi vous devez transmettre le mot de passe manuellement au destinataire.",
+ "Password to access »%s« shared with %s" : "Mot de passe pour accèder à «%s» partagé avec %s",
"This is the password: %s" : "Voici le mot de passe : %s",
"You can choose a different password at any time in the share dialog." : "Vous pouvez choisir un mot de passe différent à n'importe quel moment dans la boîte de dialogue de partage.",
"Could not find share" : "Impossible de trouver le partage",
diff --git a/apps/sharebymail/l10n/gl.js b/apps/sharebymail/l10n/gl.js
index d1f8c55ebad..bac9c912b40 100644
--- a/apps/sharebymail/l10n/gl.js
+++ b/apps/sharebymail/l10n/gl.js
@@ -1,50 +1,49 @@
OC.L10N.register(
"sharebymail",
{
- "Shared with %1$s" : "Compartido con %1$s",
+ "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}Compartido con {email} por {actor}",
- "Password for mail share sent to %1$s" : "Enviouse un contrasinal para compartir por correo a %1$s",
- "Password for mail share sent to {email}" : "Enviouse un contrasinal para compartir por correo a {email}",
- "Password for mail share sent to you" : "Envióuselle un contrasinal para compartir por correo",
+ "Shared with %1$s by %2$s" : "Compartido con %1$spor %2$s",
+ "Shared with {email} by {actor}" : "Compartido con {email} por {actor}",
+ "Password for mail share sent to %1$s" : "Contrasinal para compartir por correo enviada a %1$s",
+ "Password for mail share sent to {email}" : "Contrasinal para compartir por correo enviada a {email}",
+ "Password for mail share sent to you" : "Contrasinal para compartir por correo enviada a tí mesmo",
"You shared %1$s with %2$s by mail" : "Compartiu %1$s con %2$s por correo",
"You shared {file} with {email} by mail" : "Compartiu {file} con {email} por correo",
- "%3$s shared %1$s with %2$s by mail" : "%3$s compartiu %1$s con %2$s por correo",
+ "%3$s shared %1$s with %2$s by mail" : "%3$s compartido %1$scon %2$s por correo",
"{actor} shared {file} with {email} by mail" : "{actor} compartiu {file} con {email} por correo",
- "Password to access %1$s was sent to %2s" : "Envióuselle a %2s un contrasinal para acceder a %1$s",
- "Password to access {file} was sent to {email}" : "Envióuselle a {email} un contrasinal para acceder a {file}",
- "Password to access %1$s was sent to you" : "Envióuselle a vostede un correo para acceder a %1$s",
- "Password to access {file} was sent to you" : "Envióuselle a vostede un correo para acceder a {file}",
- "Sharing %s failed, this item is already shared with %s" : "Fallou a compartición de %s, este elemento xa está 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." : "Non é posíbel enviarlle o contrasinal xerado automaticamente. Estabeleza un enderezo de correo correcto nos seus axustes persoais e ténteo de novo.",
- "Failed to send share by email" : "Fallou o envío do recurso compartido por correo",
- "%s shared »%s« with you" : "%s compartiu «%s» con vostede",
- "%s shared »%s« with you." : "%s compartiu «%s» con vostede.",
- "Click the button below to open it." : "Prema no botón de embaixo para abrilo.",
- "Open »%s«" : "Abrir «%s»",
+ "Password to access %1$s was sent to %2s" : "Contrasinal para acceder a %1$s foi enviada a %2s",
+ "Password to access {file} was sent to {email}" : "Contrasinal para acceder a {file} foi enviada a {email}",
+ "Password to access %1$s was sent to you" : "Contrasinal para acceder a %1$s foi enviada a tí mesmo",
+ "Password to access {file} was sent to you" : "Contrasinal para acceder a {file} foi enviada a tí mesmo",
+ "Sharing %s failed, this item is already shared with %s" : "Compartir %s fallou, este obxecto xa está 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." : "Non podemos enviarte o contrasinal auto-xenerado. Por favor indica unha dirección de correo válida nas túas preferencias persoais e proba de novo.",
+ "Failed to send share by email" : "Fallou ó envío para compartir por correo",
+ "%s shared »%s« with you" : "%s compartiu »%s« contigo",
+ "%s shared »%s« with you." : "%s compartiu »%s« contigo.",
+ "Click the button below to open it." : "Prema no botón máis abaixo para abrilo.",
+ "Open »%s«" : "Abrir »%s«",
"%s via %s" : "%s vía %s",
- "Password to access »%s« shared to you by %s" : "O contrasinal para acceder a «%s» foi compartido con vostede por %s",
- "%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s compartiu «%s» con vostede.\nDebería ter recibido un correo por separado cunha ligazón acceder.\n",
- "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s compartiu «%s» con vostede. Debería ter recibido un correo por separado cunha ligazón acceder.",
- "Password to access »%s«" : "Contrasinal para acceder a «%s»",
+ "%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s compartiu »%s« contigo.\nDebes ter recibido xa un correo por separado cun enlace para acceder a él.\n",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s compartiu »%s« contigo. Debes ter recibido xa un correo por separado cun enlace para acceder a él.",
+ "Password to access »%s« shared to you by %s" : "Contrasinal para acceder »%s« compartido contigo por %s",
+ "Password to access »%s«" : "Contrasinal para acceder »%s«",
"It is protected with the following password: %s" : "Está protexido co seguinte contrasinal: %s",
- "Password to access »%s« shared with %s" : "Contrasinal para acceder a «%s» compartida con %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." : "Ven de de compartir «%s» con %s. O recurso compartido xa foi enviado ao destinatario. Por mor das regras de seguridade definidas polo administrador de %s cada recurso compartido necesita ser protexido por un contrasinal e non está permitido que vostede envíe o contrasinal directamente ao destinatario. Polo tanto, necesita enviar manualmente o contrasinal ao destinatario.",
+ "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." : "Compartiu »%s« con %s. O recurso a compartir foi xa enviado ó destinatario. Debido ás políticas de seguridade definidas polo administrador de %s cada recurso a compartir precisa ser protexido por contrasinal e non está permitido enviar o contrasinal directamente ó destinatario. Polo tanto precisa reenviar o contrasinal ó destinatario manualmente.",
+ "Password to access »%s« shared with %s" : "Contrasinal para acceder a »%s« compartido con %s",
"This is the password: %s" : "Este é o contrasinal: %s",
- "You can choose a different password at any time in the share dialog." : "Pode escoller un contrasinal diferente en calquera momento no diálogo de compartir.",
- "Could not find share" : "Non foi posíbel atopar o recurso compartido",
- "Share by mail" : "Compartido por correo",
- "Allows users to share a personalized link to a file or folder by putting in an email address." : "Permite que os usuarios compartan unha ligazón personalizada ou un ficheiro ou cartafol enviándoo a un enderezo de correo.",
+ "You can choose a different password at any time in the share dialog." : "Pode elexir un contrasinal diferente en calquer momento no diálogo compartir.",
+ "Could not find share" : "Non puiden atopar o recurso a compartir",
+ "Share by mail" : "Compartir por correo",
+ "Allows users to share a personalized link to a file or folder by putting in an email address." : "Permite a usuarios compartir un enlace personalizado a un ficheiro ou carpeta indicando unha dirección de correo ",
"Send password by mail" : "Enviar contrasinal por correo",
- "Enforce password protection" : "Forzar a protección por contrasinal",
- "Failed to send share by E-mail" : "Fallou o envío do recurso compartido por correo",
- "%s shared »%s« with you on behalf of %s" : "%s compartiu «%s» con vostede no nome de %s",
- "Failed to create the E-mail" : "Non foi posíbel crear o correo",
- "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Ola!,\n\n%s compartiu «%s» con vostede no nome de %s.\n\n%s\n\n",
- "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Ola!,\n\n%s compartiu «%s» con vostede.\n\n%s\n\n",
- "Cheers!" : "Saúdos!",
- "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Ola!,<br><br>%s compartiu <a href=\"%s\">%s</a> con vostede no nome de %s.<br><br>",
- "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Ola!,<br><br>%s compartiu <a href=\"%s\">%s</a> con vostede.<br><br>"
+ "Enforce password protection" : "Aplicar protección por contrasinal",
+ "Failed to send share by E-mail" : "Fallou ó compartir por correo",
+ "%s shared »%s« with you on behalf of %s" : "%s compartiu »%s« contigo en representación de %s",
+ "Failed to create the E-mail" : "Fallo ó crear o correo",
+ "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Hola,\n\n%s compartiu »%s« contigo en representación de %s.\n\n%s\n\n",
+ "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Hola,\n\n%s compartiu »%s« contigo.\n\n%s\n\n",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Hola, <br><br>%s compartiu <a href=\"%s\">%s</a> contigo en representación de %s. <br><br>",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Hola, <br><br>%s compartiu <a href=\"%s\">%s</a>contigo, <br><br>"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/sharebymail/l10n/gl.json b/apps/sharebymail/l10n/gl.json
index d378a2017e2..0e2e007d9ab 100644
--- a/apps/sharebymail/l10n/gl.json
+++ b/apps/sharebymail/l10n/gl.json
@@ -1,48 +1,47 @@
{ "translations": {
- "Shared with %1$s" : "Compartido con %1$s",
+ "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}Compartido con {email} por {actor}",
- "Password for mail share sent to %1$s" : "Enviouse un contrasinal para compartir por correo a %1$s",
- "Password for mail share sent to {email}" : "Enviouse un contrasinal para compartir por correo a {email}",
- "Password for mail share sent to you" : "Envióuselle un contrasinal para compartir por correo",
+ "Shared with %1$s by %2$s" : "Compartido con %1$spor %2$s",
+ "Shared with {email} by {actor}" : "Compartido con {email} por {actor}",
+ "Password for mail share sent to %1$s" : "Contrasinal para compartir por correo enviada a %1$s",
+ "Password for mail share sent to {email}" : "Contrasinal para compartir por correo enviada a {email}",
+ "Password for mail share sent to you" : "Contrasinal para compartir por correo enviada a tí mesmo",
"You shared %1$s with %2$s by mail" : "Compartiu %1$s con %2$s por correo",
"You shared {file} with {email} by mail" : "Compartiu {file} con {email} por correo",
- "%3$s shared %1$s with %2$s by mail" : "%3$s compartiu %1$s con %2$s por correo",
+ "%3$s shared %1$s with %2$s by mail" : "%3$s compartido %1$scon %2$s por correo",
"{actor} shared {file} with {email} by mail" : "{actor} compartiu {file} con {email} por correo",
- "Password to access %1$s was sent to %2s" : "Envióuselle a %2s un contrasinal para acceder a %1$s",
- "Password to access {file} was sent to {email}" : "Envióuselle a {email} un contrasinal para acceder a {file}",
- "Password to access %1$s was sent to you" : "Envióuselle a vostede un correo para acceder a %1$s",
- "Password to access {file} was sent to you" : "Envióuselle a vostede un correo para acceder a {file}",
- "Sharing %s failed, this item is already shared with %s" : "Fallou a compartición de %s, este elemento xa está 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." : "Non é posíbel enviarlle o contrasinal xerado automaticamente. Estabeleza un enderezo de correo correcto nos seus axustes persoais e ténteo de novo.",
- "Failed to send share by email" : "Fallou o envío do recurso compartido por correo",
- "%s shared »%s« with you" : "%s compartiu «%s» con vostede",
- "%s shared »%s« with you." : "%s compartiu «%s» con vostede.",
- "Click the button below to open it." : "Prema no botón de embaixo para abrilo.",
- "Open »%s«" : "Abrir «%s»",
+ "Password to access %1$s was sent to %2s" : "Contrasinal para acceder a %1$s foi enviada a %2s",
+ "Password to access {file} was sent to {email}" : "Contrasinal para acceder a {file} foi enviada a {email}",
+ "Password to access %1$s was sent to you" : "Contrasinal para acceder a %1$s foi enviada a tí mesmo",
+ "Password to access {file} was sent to you" : "Contrasinal para acceder a {file} foi enviada a tí mesmo",
+ "Sharing %s failed, this item is already shared with %s" : "Compartir %s fallou, este obxecto xa está 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." : "Non podemos enviarte o contrasinal auto-xenerado. Por favor indica unha dirección de correo válida nas túas preferencias persoais e proba de novo.",
+ "Failed to send share by email" : "Fallou ó envío para compartir por correo",
+ "%s shared »%s« with you" : "%s compartiu »%s« contigo",
+ "%s shared »%s« with you." : "%s compartiu »%s« contigo.",
+ "Click the button below to open it." : "Prema no botón máis abaixo para abrilo.",
+ "Open »%s«" : "Abrir »%s«",
"%s via %s" : "%s vía %s",
- "Password to access »%s« shared to you by %s" : "O contrasinal para acceder a «%s» foi compartido con vostede por %s",
- "%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s compartiu «%s» con vostede.\nDebería ter recibido un correo por separado cunha ligazón acceder.\n",
- "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s compartiu «%s» con vostede. Debería ter recibido un correo por separado cunha ligazón acceder.",
- "Password to access »%s«" : "Contrasinal para acceder a «%s»",
+ "%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s compartiu »%s« contigo.\nDebes ter recibido xa un correo por separado cun enlace para acceder a él.\n",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s compartiu »%s« contigo. Debes ter recibido xa un correo por separado cun enlace para acceder a él.",
+ "Password to access »%s« shared to you by %s" : "Contrasinal para acceder »%s« compartido contigo por %s",
+ "Password to access »%s«" : "Contrasinal para acceder »%s«",
"It is protected with the following password: %s" : "Está protexido co seguinte contrasinal: %s",
- "Password to access »%s« shared with %s" : "Contrasinal para acceder a «%s» compartida con %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." : "Ven de de compartir «%s» con %s. O recurso compartido xa foi enviado ao destinatario. Por mor das regras de seguridade definidas polo administrador de %s cada recurso compartido necesita ser protexido por un contrasinal e non está permitido que vostede envíe o contrasinal directamente ao destinatario. Polo tanto, necesita enviar manualmente o contrasinal ao destinatario.",
+ "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." : "Compartiu »%s« con %s. O recurso a compartir foi xa enviado ó destinatario. Debido ás políticas de seguridade definidas polo administrador de %s cada recurso a compartir precisa ser protexido por contrasinal e non está permitido enviar o contrasinal directamente ó destinatario. Polo tanto precisa reenviar o contrasinal ó destinatario manualmente.",
+ "Password to access »%s« shared with %s" : "Contrasinal para acceder a »%s« compartido con %s",
"This is the password: %s" : "Este é o contrasinal: %s",
- "You can choose a different password at any time in the share dialog." : "Pode escoller un contrasinal diferente en calquera momento no diálogo de compartir.",
- "Could not find share" : "Non foi posíbel atopar o recurso compartido",
- "Share by mail" : "Compartido por correo",
- "Allows users to share a personalized link to a file or folder by putting in an email address." : "Permite que os usuarios compartan unha ligazón personalizada ou un ficheiro ou cartafol enviándoo a un enderezo de correo.",
+ "You can choose a different password at any time in the share dialog." : "Pode elexir un contrasinal diferente en calquer momento no diálogo compartir.",
+ "Could not find share" : "Non puiden atopar o recurso a compartir",
+ "Share by mail" : "Compartir por correo",
+ "Allows users to share a personalized link to a file or folder by putting in an email address." : "Permite a usuarios compartir un enlace personalizado a un ficheiro ou carpeta indicando unha dirección de correo ",
"Send password by mail" : "Enviar contrasinal por correo",
- "Enforce password protection" : "Forzar a protección por contrasinal",
- "Failed to send share by E-mail" : "Fallou o envío do recurso compartido por correo",
- "%s shared »%s« with you on behalf of %s" : "%s compartiu «%s» con vostede no nome de %s",
- "Failed to create the E-mail" : "Non foi posíbel crear o correo",
- "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Ola!,\n\n%s compartiu «%s» con vostede no nome de %s.\n\n%s\n\n",
- "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Ola!,\n\n%s compartiu «%s» con vostede.\n\n%s\n\n",
- "Cheers!" : "Saúdos!",
- "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Ola!,<br><br>%s compartiu <a href=\"%s\">%s</a> con vostede no nome de %s.<br><br>",
- "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Ola!,<br><br>%s compartiu <a href=\"%s\">%s</a> con vostede.<br><br>"
+ "Enforce password protection" : "Aplicar protección por contrasinal",
+ "Failed to send share by E-mail" : "Fallou ó compartir por correo",
+ "%s shared »%s« with you on behalf of %s" : "%s compartiu »%s« contigo en representación de %s",
+ "Failed to create the E-mail" : "Fallo ó crear o correo",
+ "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Hola,\n\n%s compartiu »%s« contigo en representación de %s.\n\n%s\n\n",
+ "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Hola,\n\n%s compartiu »%s« contigo.\n\n%s\n\n",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Hola, <br><br>%s compartiu <a href=\"%s\">%s</a> contigo en representación de %s. <br><br>",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Hola, <br><br>%s compartiu <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/hu.js b/apps/sharebymail/l10n/hu.js
new file mode 100644
index 00000000000..fc68b5676b2
--- /dev/null
+++ b/apps/sharebymail/l10n/hu.js
@@ -0,0 +1,50 @@
+OC.L10N.register(
+ "sharebymail",
+ {
+ "Shared with %1$s" : "Megosztva vele: %1$s",
+ "Shared with {email}" : "Megosztva: {email}",
+ "Shared with %1$s by %2$s" : "%2$s megosztotta vele: %1$s",
+ "Shared with {email} by {actor}" : "Shared with {email} by {actor}",
+ "Password for mail share sent to %1$s" : "A levelezési megosztáshoz szükséges jelszó elküldve ide: %1$s",
+ "Password for mail share sent to {email}" : "A levelezési megosztáshoz szükséges jelszó elküldve ide: {email}",
+ "Password for mail share sent to you" : "A levelezési megosztáshoz szükséges jelszó elküldve neked",
+ "You shared %1$s with %2$s by mail" : "Megosztottad: %1$s vele: %2$s e-mailben",
+ "You shared {file} with {email} by mail" : "{file} megosztva e-mailen keresztül: {email}",
+ "%3$s shared %1$s with %2$s by mail" : "%3$smegosztotta ezt: %1$s vele: %2$s e-mailben",
+ "{actor} shared {file} with {email} by mail" : "{actor} megosztotta ezt: {file} vele: {email} e-mailben",
+ "Password to access %1$s was sent to %2s" : "A %1$s eléréséhez szükséges jelszót elküldtük ide: %2s",
+ "Password to access {file} was sent to {email}" : "A {file} eléréséhez szükséges jelszót elküldtük ide: {email}",
+ "Password to access %1$s was sent to you" : "A %1$s eléréséhez szükséges jelszót elküldtük neked",
+ "Password to access {file} was sent to you" : "A {file} eléréséhez szükséges jelszót elküldtük neked",
+ "Sharing %s failed, this item is already shared with %s" : "%s megosztás sikertelen, mert már meg van osztva vele: %s",
+ "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Nem tudtuk elküldeni neked az automatikusan generált jelszót. Kérlek állíts be egy érvényes e-mail címet a profilodban és próbáld meg újra.",
+ "Failed to send share by email" : "Nem sikerült elküldeni a megosztó e-mailt",
+ "%s shared »%s« with you" : "%s megosztotta Önnel: »%s«.",
+ "%s shared »%s« with you." : "%s megosztotta veled ezt: »%s«.",
+ "Click the button below to open it." : "Kattints a lenti gombra a megnyitásához",
+ "Open »%s«" : "»%s« megnyitása",
+ "%s via %s" : "%s ezen keresztül: %s",
+ "%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s megosztotta ezt: »%s« veled.\nMár meg is kellett kapj egy e-mailt a hozzáférési linkkel.\n",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%smegosztotta ezt: »%s« veled. Már meg is kellett kapj egy e-mailt a hozzáférési linkkel.",
+ "Password to access »%s« shared to you by %s" : "Jelszó ehhez: »%s« megosztva veled általa: %s",
+ "Password to access »%s«" : "Jelszó »%s« eléréséhez",
+ "It is protected with the following password: %s" : "A következő jelszóval védve: %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." : "Épp megosztottad ezt: »%s« vele: %s. A megosztás már el is lett küldve a fogadónak. A%s rendszergazdája által meghatározott biztonsági szabályok miatt minden megosztást jelszóval kell védeni és a jelszót nem lehet közvetlenül elküldeni. Ezért a jelszót magadnak kell továbbítanod a fogadónak.",
+ "Password to access »%s« shared with %s" : "Jelszó ehhez: »%s« megosztva vele: %s",
+ "This is the password: %s" : "Ez a jelszó: %s",
+ "You can choose a different password at any time in the share dialog." : "Bármikor választhatsz másik jelszót a megosztási ablakban.",
+ "Could not find share" : "Nem található a megosztás",
+ "Share by mail" : "Küldés e-mailben",
+ "Allows users to share a personalized link to a file or folder by putting in an email address." : "Segítségével személyre szabott megosztási linket hozhatsz létre egy fájlhoz vagy mappához az e-mail cím beleírásával.",
+ "Send password by mail" : "Jelszó kiküldése e-mailben",
+ "Enforce password protection" : "Jelszóvédelem kényszerítése",
+ "Failed to send share by E-mail" : "Nem sikerült elküldeni a megosztó e-mailt!",
+ "%s shared »%s« with you on behalf of %s" : "%s megosztotta ezt: »%s« veled %s nevében.",
+ "Failed to create the E-mail" : "Nem sikerült létrehozni az e-mailt.",
+ "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Üdv,\n\n%s megosztotta ezt: »%s« veled %s nevében.\n\n%s\n\n",
+ "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Üdvözöljük!\n\nÉrtesítjük, hogy %s megosztotta Önnel a következőt: »%s«.\n\n%s\n",
+ "Cheers!" : "Üdvözlettel,",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Üdv,<br><br>%s megosztotta ezt: <a href=\"%s\">%s</a> veled %s nevében.<br><br>",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Üdvözöljük!<br><br>Értesítjük, hogy %s megosztotta Önnel a következőt: <a href=\"%s\">%s</a>.<br><br>"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/sharebymail/l10n/hu.json b/apps/sharebymail/l10n/hu.json
new file mode 100644
index 00000000000..3c2227c842f
--- /dev/null
+++ b/apps/sharebymail/l10n/hu.json
@@ -0,0 +1,48 @@
+{ "translations": {
+ "Shared with %1$s" : "Megosztva vele: %1$s",
+ "Shared with {email}" : "Megosztva: {email}",
+ "Shared with %1$s by %2$s" : "%2$s megosztotta vele: %1$s",
+ "Shared with {email} by {actor}" : "Shared with {email} by {actor}",
+ "Password for mail share sent to %1$s" : "A levelezési megosztáshoz szükséges jelszó elküldve ide: %1$s",
+ "Password for mail share sent to {email}" : "A levelezési megosztáshoz szükséges jelszó elküldve ide: {email}",
+ "Password for mail share sent to you" : "A levelezési megosztáshoz szükséges jelszó elküldve neked",
+ "You shared %1$s with %2$s by mail" : "Megosztottad: %1$s vele: %2$s e-mailben",
+ "You shared {file} with {email} by mail" : "{file} megosztva e-mailen keresztül: {email}",
+ "%3$s shared %1$s with %2$s by mail" : "%3$smegosztotta ezt: %1$s vele: %2$s e-mailben",
+ "{actor} shared {file} with {email} by mail" : "{actor} megosztotta ezt: {file} vele: {email} e-mailben",
+ "Password to access %1$s was sent to %2s" : "A %1$s eléréséhez szükséges jelszót elküldtük ide: %2s",
+ "Password to access {file} was sent to {email}" : "A {file} eléréséhez szükséges jelszót elküldtük ide: {email}",
+ "Password to access %1$s was sent to you" : "A %1$s eléréséhez szükséges jelszót elküldtük neked",
+ "Password to access {file} was sent to you" : "A {file} eléréséhez szükséges jelszót elküldtük neked",
+ "Sharing %s failed, this item is already shared with %s" : "%s megosztás sikertelen, mert már meg van osztva vele: %s",
+ "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Nem tudtuk elküldeni neked az automatikusan generált jelszót. Kérlek állíts be egy érvényes e-mail címet a profilodban és próbáld meg újra.",
+ "Failed to send share by email" : "Nem sikerült elküldeni a megosztó e-mailt",
+ "%s shared »%s« with you" : "%s megosztotta Önnel: »%s«.",
+ "%s shared »%s« with you." : "%s megosztotta veled ezt: »%s«.",
+ "Click the button below to open it." : "Kattints a lenti gombra a megnyitásához",
+ "Open »%s«" : "»%s« megnyitása",
+ "%s via %s" : "%s ezen keresztül: %s",
+ "%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s megosztotta ezt: »%s« veled.\nMár meg is kellett kapj egy e-mailt a hozzáférési linkkel.\n",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%smegosztotta ezt: »%s« veled. Már meg is kellett kapj egy e-mailt a hozzáférési linkkel.",
+ "Password to access »%s« shared to you by %s" : "Jelszó ehhez: »%s« megosztva veled általa: %s",
+ "Password to access »%s«" : "Jelszó »%s« eléréséhez",
+ "It is protected with the following password: %s" : "A következő jelszóval védve: %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." : "Épp megosztottad ezt: »%s« vele: %s. A megosztás már el is lett küldve a fogadónak. A%s rendszergazdája által meghatározott biztonsági szabályok miatt minden megosztást jelszóval kell védeni és a jelszót nem lehet közvetlenül elküldeni. Ezért a jelszót magadnak kell továbbítanod a fogadónak.",
+ "Password to access »%s« shared with %s" : "Jelszó ehhez: »%s« megosztva vele: %s",
+ "This is the password: %s" : "Ez a jelszó: %s",
+ "You can choose a different password at any time in the share dialog." : "Bármikor választhatsz másik jelszót a megosztási ablakban.",
+ "Could not find share" : "Nem található a megosztás",
+ "Share by mail" : "Küldés e-mailben",
+ "Allows users to share a personalized link to a file or folder by putting in an email address." : "Segítségével személyre szabott megosztási linket hozhatsz létre egy fájlhoz vagy mappához az e-mail cím beleírásával.",
+ "Send password by mail" : "Jelszó kiküldése e-mailben",
+ "Enforce password protection" : "Jelszóvédelem kényszerítése",
+ "Failed to send share by E-mail" : "Nem sikerült elküldeni a megosztó e-mailt!",
+ "%s shared »%s« with you on behalf of %s" : "%s megosztotta ezt: »%s« veled %s nevében.",
+ "Failed to create the E-mail" : "Nem sikerült létrehozni az e-mailt.",
+ "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Üdv,\n\n%s megosztotta ezt: »%s« veled %s nevében.\n\n%s\n\n",
+ "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Üdvözöljük!\n\nÉrtesítjük, hogy %s megosztotta Önnel a következőt: »%s«.\n\n%s\n",
+ "Cheers!" : "Üdvözlettel,",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Üdv,<br><br>%s megosztotta ezt: <a href=\"%s\">%s</a> veled %s nevében.<br><br>",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Üdvözöljük!<br><br>Értesítjük, hogy %s megosztotta Önnel a következőt: <a href=\"%s\">%s</a>.<br><br>"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/sharebymail/l10n/is.js b/apps/sharebymail/l10n/is.js
index 1a1a4feb92e..6fc01805d9b 100644
--- a/apps/sharebymail/l10n/is.js
+++ b/apps/sharebymail/l10n/is.js
@@ -24,13 +24,13 @@ OC.L10N.register(
"Click the button below to open it." : "Smelltu á tengilinn hér fyrir neðan til að opna það.",
"Open »%s«" : "Opna »%s«",
"%s via %s" : "%s með %s",
- "Password to access »%s« shared to you by %s" : "Lykilorð fyrir aðgang að »%s« deilt með þér af %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s deildi »%s« með þér.\nÞú ættir að hafa fengið sérstakan tölvupóst með tengli sem vísar á gögnin.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s deildi »%s« með þér.\nÞú ættir að hafa fengið sérstakan tölvupóst með tengli sem vísar á gögnin.",
+ "Password to access »%s« shared to you by %s" : "Lykilorð fyrir aðgang að »%s« deilt með þér af %s",
"Password to access »%s«" : "Lykilorð fyrir aðgang að »%s«",
"It is protected with the following password: %s" : "Það er varið með eftirfarandi lykilorði: %s",
- "Password to access »%s« shared with %s" : "Lykilorð fyrir aðgang að »%s« deilt með %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." : "Þú varst í þessu að deila »%s« með %s. Sameignin var þegar send til viðtakandans. Vegna öryggisskilmála sem skilgreindir hafa verið af kerfisstjóra %s þarf hver sameign að vera varin með lykilorði og að ekki er leyfilegt að senda það lykilorð beint til viðtakandans. Því er nauðsynlegt að þú homir lykilorðinu beint til sjálfs viðtakandans.",
+ "Password to access »%s« shared with %s" : "Lykilorð fyrir aðgang að »%s« deilt með %s",
"This is the password: %s" : "Þetta er lykilorðið: %s",
"You can choose a different password at any time in the share dialog." : "Þú getur hvenær sem er valið annað lykilorð með því að fara í deilingargluggann.",
"Could not find share" : "Gat ekki fundið sameign",
diff --git a/apps/sharebymail/l10n/is.json b/apps/sharebymail/l10n/is.json
index 8ed632b9424..e4ce4e63092 100644
--- a/apps/sharebymail/l10n/is.json
+++ b/apps/sharebymail/l10n/is.json
@@ -22,13 +22,13 @@
"Click the button below to open it." : "Smelltu á tengilinn hér fyrir neðan til að opna það.",
"Open »%s«" : "Opna »%s«",
"%s via %s" : "%s með %s",
- "Password to access »%s« shared to you by %s" : "Lykilorð fyrir aðgang að »%s« deilt með þér af %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s deildi »%s« með þér.\nÞú ættir að hafa fengið sérstakan tölvupóst með tengli sem vísar á gögnin.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s deildi »%s« með þér.\nÞú ættir að hafa fengið sérstakan tölvupóst með tengli sem vísar á gögnin.",
+ "Password to access »%s« shared to you by %s" : "Lykilorð fyrir aðgang að »%s« deilt með þér af %s",
"Password to access »%s«" : "Lykilorð fyrir aðgang að »%s«",
"It is protected with the following password: %s" : "Það er varið með eftirfarandi lykilorði: %s",
- "Password to access »%s« shared with %s" : "Lykilorð fyrir aðgang að »%s« deilt með %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." : "Þú varst í þessu að deila »%s« með %s. Sameignin var þegar send til viðtakandans. Vegna öryggisskilmála sem skilgreindir hafa verið af kerfisstjóra %s þarf hver sameign að vera varin með lykilorði og að ekki er leyfilegt að senda það lykilorð beint til viðtakandans. Því er nauðsynlegt að þú homir lykilorðinu beint til sjálfs viðtakandans.",
+ "Password to access »%s« shared with %s" : "Lykilorð fyrir aðgang að »%s« deilt með %s",
"This is the password: %s" : "Þetta er lykilorðið: %s",
"You can choose a different password at any time in the share dialog." : "Þú getur hvenær sem er valið annað lykilorð með því að fara í deilingargluggann.",
"Could not find share" : "Gat ekki fundið sameign",
diff --git a/apps/sharebymail/l10n/it.js b/apps/sharebymail/l10n/it.js
index 9fb612b2677..705dd042ff1 100644
--- a/apps/sharebymail/l10n/it.js
+++ b/apps/sharebymail/l10n/it.js
@@ -24,13 +24,13 @@ OC.L10N.register(
"Click the button below to open it." : "Fai clic sul pulsante sotto per aprirlo.",
"Open »%s«" : "Apri «%s»",
"%s via %s" : "%s tramite %s",
- "Password to access »%s« shared to you by %s" : "Password per accedere a «%s» condivisa con te da %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s ha condiviso «%s» con te.\nDovresti aver ricevuto un messaggio separato con un collegamento per accedervi.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s ha condiviso «%s» con te. Dovresti aver ricevuto un messaggio separato con un collegamento per accedervi.",
+ "Password to access »%s« shared to you by %s" : "Password per accedere a «%s» condivisa con te da %s",
"Password to access »%s«" : "Password per accedere a «%s»",
"It is protected with the following password: %s" : "È protetta con la password seguente: %s",
- "Password to access »%s« shared with %s" : "Password per accedere a «%s» condivisa con %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." : "Hai appena condiviso «%s» con %s. La condivisione è stata già inviata al destinatario. A causa dei criteri di sicurezza definiti dall'amministratore di %s, ogni condivisione deve essere protetta da password e non è consentito l'invio diretto della password al destinatario. Perciò, devi inoltrare manualmente la password al destinatario.",
+ "Password to access »%s« shared with %s" : "Password per accedere a «%s» condivisa con %s",
"This is the password: %s" : "Questa è la password: %s",
"You can choose a different password at any time in the share dialog." : "Puoi scegliere una password diversa in qualsiasi momento nella finestra di condivisione.",
"Could not find share" : "Non è stato possibile trovare la condivisione",
diff --git a/apps/sharebymail/l10n/it.json b/apps/sharebymail/l10n/it.json
index e2000275c39..f2096a3e91a 100644
--- a/apps/sharebymail/l10n/it.json
+++ b/apps/sharebymail/l10n/it.json
@@ -22,13 +22,13 @@
"Click the button below to open it." : "Fai clic sul pulsante sotto per aprirlo.",
"Open »%s«" : "Apri «%s»",
"%s via %s" : "%s tramite %s",
- "Password to access »%s« shared to you by %s" : "Password per accedere a «%s» condivisa con te da %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s ha condiviso «%s» con te.\nDovresti aver ricevuto un messaggio separato con un collegamento per accedervi.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s ha condiviso «%s» con te. Dovresti aver ricevuto un messaggio separato con un collegamento per accedervi.",
+ "Password to access »%s« shared to you by %s" : "Password per accedere a «%s» condivisa con te da %s",
"Password to access »%s«" : "Password per accedere a «%s»",
"It is protected with the following password: %s" : "È protetta con la password seguente: %s",
- "Password to access »%s« shared with %s" : "Password per accedere a «%s» condivisa con %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." : "Hai appena condiviso «%s» con %s. La condivisione è stata già inviata al destinatario. A causa dei criteri di sicurezza definiti dall'amministratore di %s, ogni condivisione deve essere protetta da password e non è consentito l'invio diretto della password al destinatario. Perciò, devi inoltrare manualmente la password al destinatario.",
+ "Password to access »%s« shared with %s" : "Password per accedere a «%s» condivisa con %s",
"This is the password: %s" : "Questa è la password: %s",
"You can choose a different password at any time in the share dialog." : "Puoi scegliere una password diversa in qualsiasi momento nella finestra di condivisione.",
"Could not find share" : "Non è stato possibile trovare la condivisione",
diff --git a/apps/sharebymail/l10n/ja.js b/apps/sharebymail/l10n/ja.js
index 91d1000194a..29fb7e59be8 100644
--- a/apps/sharebymail/l10n/ja.js
+++ b/apps/sharebymail/l10n/ja.js
@@ -24,13 +24,13 @@ OC.L10N.register(
"Click the button below to open it." : "クリックすると下が開きます",
"Open »%s«" : "»%s«を開く",
"%s via %s" : "%s に %s から",
- "Password to access »%s« shared to you by %s" : "%sへの共有アクセスのパスワードが %s から共有されました",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s により »%s« が共有されました\nアクセスするためのリンクは別途メールで受信してください。\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s により »%s« が共有されました。アクセスするためのリンクは別途メールで受信してください。",
+ "Password to access »%s« shared to you by %s" : "%sへの共有アクセスのパスワードが %s から共有されました",
"Password to access »%s«" : "»%s« にアクセスするパスワード",
"It is protected with the following password: %s" : "次のパスワードで保護されています: %s",
- "Password to access »%s« shared with %s" : "»%s« にアクセスするパスワードが %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." : "%sを%sと共有しました。共有は受信者に送信されています。セキュリティポリシーにより%sの管理者が共有はパスワードで保護されるべきで、直接受信者に送信するべきではないと定めている場合、手動で受信者にメールを転送する必要があります。",
+ "Password to access »%s« shared with %s" : "»%s« にアクセスするパスワードが %s から共有されました",
"This is the password: %s" : "パスワード: %s",
"You can choose a different password at any time in the share dialog." : "共有ダイアログからいつでも違うパスワードに変更できます。",
"Could not find share" : "共有が見つかりませんでした",
diff --git a/apps/sharebymail/l10n/ja.json b/apps/sharebymail/l10n/ja.json
index 668810a581b..61c31c40e7d 100644
--- a/apps/sharebymail/l10n/ja.json
+++ b/apps/sharebymail/l10n/ja.json
@@ -22,13 +22,13 @@
"Click the button below to open it." : "クリックすると下が開きます",
"Open »%s«" : "»%s«を開く",
"%s via %s" : "%s に %s から",
- "Password to access »%s« shared to you by %s" : "%sへの共有アクセスのパスワードが %s から共有されました",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s により »%s« が共有されました\nアクセスするためのリンクは別途メールで受信してください。\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s により »%s« が共有されました。アクセスするためのリンクは別途メールで受信してください。",
+ "Password to access »%s« shared to you by %s" : "%sへの共有アクセスのパスワードが %s から共有されました",
"Password to access »%s«" : "»%s« にアクセスするパスワード",
"It is protected with the following password: %s" : "次のパスワードで保護されています: %s",
- "Password to access »%s« shared with %s" : "»%s« にアクセスするパスワードが %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." : "%sを%sと共有しました。共有は受信者に送信されています。セキュリティポリシーにより%sの管理者が共有はパスワードで保護されるべきで、直接受信者に送信するべきではないと定めている場合、手動で受信者にメールを転送する必要があります。",
+ "Password to access »%s« shared with %s" : "»%s« にアクセスするパスワードが %s から共有されました",
"This is the password: %s" : "パスワード: %s",
"You can choose a different password at any time in the share dialog." : "共有ダイアログからいつでも違うパスワードに変更できます。",
"Could not find share" : "共有が見つかりませんでした",
diff --git a/apps/sharebymail/l10n/ko.js b/apps/sharebymail/l10n/ko.js
index b3f275e47f2..3c0d9e5a270 100644
--- a/apps/sharebymail/l10n/ko.js
+++ b/apps/sharebymail/l10n/ko.js
@@ -23,13 +23,13 @@ OC.L10N.register(
"Click the button below to open it." : "아래 단추를 눌러서 열 수 있습니다.",
"Open »%s«" : "%s 열기",
"%s via %s" : "%s(%s 경유)",
- "Password to access »%s« shared to you by %s" : "%s에 접근할 수 있는 암호를 %s 님이 보냄",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s 님이 %s을(를) 공유했습니다.\n접근할 수 있는 링크가 포함된 별도의 이메일을 같이 전송했습니다.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s 님이 %s을(를) 공유했습니다. 접근할 수 있는 링크가 포함된 별도의 이메일을 같이 전송했습니다.",
+ "Password to access »%s« shared to you by %s" : "%s에 접근할 수 있는 암호를 %s 님이 보냄",
"Password to access »%s«" : "%s에 접근할 수 있는 암호",
"It is protected with the following password: %s" : "다음 암호로 보호되어 있습니다: %s",
- "Password to access »%s« shared with %s" : "%s에 접근할 수 있는 암호를 %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." : "%s을(를) %s 님과 공유했습니다. 공유 정보를 이메일로 전송했습니다. %s 관리자의 보안 정책에 의하여 각각 공유 항목은 암호로 보호되어야 하며, 해당 암호를 직접 이메일로 보낼 수 없습니다. 수신자에게 이 암호를 다른 방법으로 직접 전달하십시오.",
+ "Password to access »%s« shared with %s" : "%s에 접근할 수 있는 암호를 %s 님과 공유함",
"This is the password: %s" : "다음은 암호입니다: %s",
"You can choose a different password at any time in the share dialog." : "공유 대화 상자에서 언제든지 다른 암호를 선택할 수 있습니다.",
"Could not find share" : "공유를 찾을 수 없음",
diff --git a/apps/sharebymail/l10n/ko.json b/apps/sharebymail/l10n/ko.json
index 26af9862c7a..17c438f2a49 100644
--- a/apps/sharebymail/l10n/ko.json
+++ b/apps/sharebymail/l10n/ko.json
@@ -21,13 +21,13 @@
"Click the button below to open it." : "아래 단추를 눌러서 열 수 있습니다.",
"Open »%s«" : "%s 열기",
"%s via %s" : "%s(%s 경유)",
- "Password to access »%s« shared to you by %s" : "%s에 접근할 수 있는 암호를 %s 님이 보냄",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s 님이 %s을(를) 공유했습니다.\n접근할 수 있는 링크가 포함된 별도의 이메일을 같이 전송했습니다.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s 님이 %s을(를) 공유했습니다. 접근할 수 있는 링크가 포함된 별도의 이메일을 같이 전송했습니다.",
+ "Password to access »%s« shared to you by %s" : "%s에 접근할 수 있는 암호를 %s 님이 보냄",
"Password to access »%s«" : "%s에 접근할 수 있는 암호",
"It is protected with the following password: %s" : "다음 암호로 보호되어 있습니다: %s",
- "Password to access »%s« shared with %s" : "%s에 접근할 수 있는 암호를 %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." : "%s을(를) %s 님과 공유했습니다. 공유 정보를 이메일로 전송했습니다. %s 관리자의 보안 정책에 의하여 각각 공유 항목은 암호로 보호되어야 하며, 해당 암호를 직접 이메일로 보낼 수 없습니다. 수신자에게 이 암호를 다른 방법으로 직접 전달하십시오.",
+ "Password to access »%s« shared with %s" : "%s에 접근할 수 있는 암호를 %s 님과 공유함",
"This is the password: %s" : "다음은 암호입니다: %s",
"You can choose a different password at any time in the share dialog." : "공유 대화 상자에서 언제든지 다른 암호를 선택할 수 있습니다.",
"Could not find share" : "공유를 찾을 수 없음",
diff --git a/apps/sharebymail/l10n/lt_LT.js b/apps/sharebymail/l10n/lt_LT.js
index 2e8465a46c9..2c3fb59305f 100644
--- a/apps/sharebymail/l10n/lt_LT.js
+++ b/apps/sharebymail/l10n/lt_LT.js
@@ -24,13 +24,13 @@ OC.L10N.register(
"Click the button below to open it." : "Norėdami atverti failą, spustelėkite mygtuką žemiau.",
"Open »%s«" : "Atverti »%s«",
"%s via %s" : "%s per %s",
- "Password to access »%s« shared to you by %s" : "Slaptažodis, skirtas prieigai prie »%s« pasidalintas su jumis per %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s pasidalintas »%s«  su Jumis.\nJūs turėjote gauti elektroninį laišką su prieigos nuoroda.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s pasidalintas »%s«  su Jumis. Jūs turėjote gauti elektroninį laišką su prieigos nuoroda.",
+ "Password to access »%s« shared to you by %s" : "Slaptažodis, skirtas prieigai prie »%s« pasidalintas su jumis per %s",
"Password to access »%s«" : "Slaptažodis, skirtas prieigai prie »%s«",
"It is protected with the following password: %s" : "Apsaugotas slaptažodžiu: %s",
- "Password to access »%s« shared with %s" : "Slaptažodis prieigai prie »%s« pasidalintas su %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." : "Jūs ką tik pasidalinote »%s« su %s. Dalinimosi nuoroda buvo išsiųsta adresatui. Pagal saugumo taisykles, kurias nustatė %s administratorius, kiekvienas dalinimasis turi būti apsaugotas slaptažodžiu. Kadangi slaptažodžio negalima tiesiogiai siųsti adresatui, jūs turite jį perduoti gyvai.",
+ "Password to access »%s« shared with %s" : "Slaptažodis prieigai prie »%s« pasidalintas su %s",
"This is the password: %s" : "Štai yra slaptažodis: %s",
"You can choose a different password at any time in the share dialog." : "Bendrinimo dialoge bet kuriuo metu galite pasirinkti kitą slaptažodį.",
"Could not find share" : "Nepavyko rasti viešinio",
diff --git a/apps/sharebymail/l10n/lt_LT.json b/apps/sharebymail/l10n/lt_LT.json
index e1859589e08..625265c468b 100644
--- a/apps/sharebymail/l10n/lt_LT.json
+++ b/apps/sharebymail/l10n/lt_LT.json
@@ -22,13 +22,13 @@
"Click the button below to open it." : "Norėdami atverti failą, spustelėkite mygtuką žemiau.",
"Open »%s«" : "Atverti »%s«",
"%s via %s" : "%s per %s",
- "Password to access »%s« shared to you by %s" : "Slaptažodis, skirtas prieigai prie »%s« pasidalintas su jumis per %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s pasidalintas »%s«  su Jumis.\nJūs turėjote gauti elektroninį laišką su prieigos nuoroda.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s pasidalintas »%s«  su Jumis. Jūs turėjote gauti elektroninį laišką su prieigos nuoroda.",
+ "Password to access »%s« shared to you by %s" : "Slaptažodis, skirtas prieigai prie »%s« pasidalintas su jumis per %s",
"Password to access »%s«" : "Slaptažodis, skirtas prieigai prie »%s«",
"It is protected with the following password: %s" : "Apsaugotas slaptažodžiu: %s",
- "Password to access »%s« shared with %s" : "Slaptažodis prieigai prie »%s« pasidalintas su %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." : "Jūs ką tik pasidalinote »%s« su %s. Dalinimosi nuoroda buvo išsiųsta adresatui. Pagal saugumo taisykles, kurias nustatė %s administratorius, kiekvienas dalinimasis turi būti apsaugotas slaptažodžiu. Kadangi slaptažodžio negalima tiesiogiai siųsti adresatui, jūs turite jį perduoti gyvai.",
+ "Password to access »%s« shared with %s" : "Slaptažodis prieigai prie »%s« pasidalintas su %s",
"This is the password: %s" : "Štai yra slaptažodis: %s",
"You can choose a different password at any time in the share dialog." : "Bendrinimo dialoge bet kuriuo metu galite pasirinkti kitą slaptažodį.",
"Could not find share" : "Nepavyko rasti viešinio",
diff --git a/apps/sharebymail/l10n/nb.js b/apps/sharebymail/l10n/nb.js
index 6770711a972..e02b698f536 100644
--- a/apps/sharebymail/l10n/nb.js
+++ b/apps/sharebymail/l10n/nb.js
@@ -24,13 +24,13 @@ OC.L10N.register(
"Click the button below to open it." : "Klikk på knappen nedenfor for å åpne den.",
"Open »%s«" : "Åpne »%s«",
"%s via %s" : "%s via %s",
- "Password to access »%s« shared to you by %s" : "Passord for å benytte »%s« tildelt deg av %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s delte «%s» med deg.\nDu skal allerede ha mottatt en annen e-post med en lenke til innholdet.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s delte «%s» med deg. Du skal allerede ha mottatt en annen e-post med en lenke til innholdet.",
+ "Password to access »%s« shared to you by %s" : "Passord for å benytte »%s« tildelt deg av %s",
"Password to access »%s«" : "Passord for å benytte »%s«",
"It is protected with the following password: %s" : "Den er beskyttet med følgende passord: %s",
- "Password to access »%s« shared with %s" : "Passord for å benytte »%s« delt med %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." : "Du delte akkurat »%s« med %s. Lageret har allerede blitt sendt til mottakeren. På grunn av sikkerhetspraksisen definert av administratoren for %s må hvert lager beskyttes med et passord, og det tillates ikke sendt direkte til mottakeren. Derfor trenger du å sende passordet manuelt til mottakeren.",
+ "Password to access »%s« shared with %s" : "Passord for å benytte »%s« delt med %s",
"This is the password: %s" : "Dette er passordet: %s",
"You can choose a different password at any time in the share dialog." : "Du kan velge et annet passord når som helst i delingsdialogvinduet.",
"Could not find share" : "Delingen ble ikke funnet",
diff --git a/apps/sharebymail/l10n/nb.json b/apps/sharebymail/l10n/nb.json
index 80c0b760b66..c6ba8fb4eff 100644
--- a/apps/sharebymail/l10n/nb.json
+++ b/apps/sharebymail/l10n/nb.json
@@ -22,13 +22,13 @@
"Click the button below to open it." : "Klikk på knappen nedenfor for å åpne den.",
"Open »%s«" : "Åpne »%s«",
"%s via %s" : "%s via %s",
- "Password to access »%s« shared to you by %s" : "Passord for å benytte »%s« tildelt deg av %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s delte «%s» med deg.\nDu skal allerede ha mottatt en annen e-post med en lenke til innholdet.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s delte «%s» med deg. Du skal allerede ha mottatt en annen e-post med en lenke til innholdet.",
+ "Password to access »%s« shared to you by %s" : "Passord for å benytte »%s« tildelt deg av %s",
"Password to access »%s«" : "Passord for å benytte »%s«",
"It is protected with the following password: %s" : "Den er beskyttet med følgende passord: %s",
- "Password to access »%s« shared with %s" : "Passord for å benytte »%s« delt med %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." : "Du delte akkurat »%s« med %s. Lageret har allerede blitt sendt til mottakeren. På grunn av sikkerhetspraksisen definert av administratoren for %s må hvert lager beskyttes med et passord, og det tillates ikke sendt direkte til mottakeren. Derfor trenger du å sende passordet manuelt til mottakeren.",
+ "Password to access »%s« shared with %s" : "Passord for å benytte »%s« delt med %s",
"This is the password: %s" : "Dette er passordet: %s",
"You can choose a different password at any time in the share dialog." : "Du kan velge et annet passord når som helst i delingsdialogvinduet.",
"Could not find share" : "Delingen ble ikke funnet",
diff --git a/apps/sharebymail/l10n/nl.js b/apps/sharebymail/l10n/nl.js
index 9bbeeefdf72..498e5eca913 100644
--- a/apps/sharebymail/l10n/nl.js
+++ b/apps/sharebymail/l10n/nl.js
@@ -24,20 +24,20 @@ OC.L10N.register(
"Click the button below to open it." : "Klik op onderstaande link om te openen.",
"Open »%s«" : "Open »%s«",
"%s via %s" : "%s via %s",
- "Password to access »%s« shared to you by %s" : "Toegangswachtwoord »%s« gedeeld met je door %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%sdeelde »%s« met jou.\nJe moet al een apart bericht hebben ontvangen met een linkje voor toegang.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s deelde »%s« met jou. Je zou al een apart mailbericht moeten hebben ontvangen met een link om er te komen.",
+ "Password to access »%s« shared to you by %s" : "Toegangswachtwoord »%s« gedeeld met je door %s",
"Password to access »%s«" : "Wachtwoord om binnen te komen »%s«",
"It is protected with the following password: %s" : "Het is beveiligd met het volgende wachtwoord: %s",
- "Password to access »%s« shared with %s" : "Wachtwoord voor toegang »%s« gedeeld met %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." : "Je deelde »%s« met %s. De link is al gestuurd naar de geadresseerde. Vanwege de beveiligingsinstellingen, zoals ingesteld door de beheerder van %s, moet het delen worden beveiligd met een wachtwoord en is het niet toegestaan het wachtwoord rechtstreeks naar de ontvanger te versturen. Hierdoor moet je het wachtwoord zelf handmatig naar de ontvanger sturen.",
+ "Password to access »%s« shared with %s" : "Wachtwoord voor toegang »%s« gedeeld met %s",
"This is the password: %s" : "Dit is het wachtwoord: %s",
"You can choose a different password at any time in the share dialog." : "Je kunt in de Delen-dialoog altijd een ander wachtwoord kiezen.",
"Could not find share" : "Kon gedeeld niet vinden",
"Share by mail" : "Gedeeld per email",
"Allows users to share a personalized link to a file or folder by putting in an email address." : "Staat gebruikers toe om een gepersonaliseerde link of map te delen door een emailadres in te voegen.",
"Send password by mail" : "Wachtwoord per email verzenden",
- "Enforce password protection" : "Afdwingenwachtwoordbeveiliging",
+ "Enforce password protection" : "Afdwingen wachtwoord beveiliging",
"Failed to send share by E-mail" : "delen per email is mislukt",
"%s shared »%s« with you on behalf of %s" : "%s deelde »%s« met jou in naam van %s",
"Failed to create the E-mail" : "Maken van de mail is mislukt",
diff --git a/apps/sharebymail/l10n/nl.json b/apps/sharebymail/l10n/nl.json
index fbd47e92bbb..eaac09dc208 100644
--- a/apps/sharebymail/l10n/nl.json
+++ b/apps/sharebymail/l10n/nl.json
@@ -22,20 +22,20 @@
"Click the button below to open it." : "Klik op onderstaande link om te openen.",
"Open »%s«" : "Open »%s«",
"%s via %s" : "%s via %s",
- "Password to access »%s« shared to you by %s" : "Toegangswachtwoord »%s« gedeeld met je door %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%sdeelde »%s« met jou.\nJe moet al een apart bericht hebben ontvangen met een linkje voor toegang.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s deelde »%s« met jou. Je zou al een apart mailbericht moeten hebben ontvangen met een link om er te komen.",
+ "Password to access »%s« shared to you by %s" : "Toegangswachtwoord »%s« gedeeld met je door %s",
"Password to access »%s«" : "Wachtwoord om binnen te komen »%s«",
"It is protected with the following password: %s" : "Het is beveiligd met het volgende wachtwoord: %s",
- "Password to access »%s« shared with %s" : "Wachtwoord voor toegang »%s« gedeeld met %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." : "Je deelde »%s« met %s. De link is al gestuurd naar de geadresseerde. Vanwege de beveiligingsinstellingen, zoals ingesteld door de beheerder van %s, moet het delen worden beveiligd met een wachtwoord en is het niet toegestaan het wachtwoord rechtstreeks naar de ontvanger te versturen. Hierdoor moet je het wachtwoord zelf handmatig naar de ontvanger sturen.",
+ "Password to access »%s« shared with %s" : "Wachtwoord voor toegang »%s« gedeeld met %s",
"This is the password: %s" : "Dit is het wachtwoord: %s",
"You can choose a different password at any time in the share dialog." : "Je kunt in de Delen-dialoog altijd een ander wachtwoord kiezen.",
"Could not find share" : "Kon gedeeld niet vinden",
"Share by mail" : "Gedeeld per email",
"Allows users to share a personalized link to a file or folder by putting in an email address." : "Staat gebruikers toe om een gepersonaliseerde link of map te delen door een emailadres in te voegen.",
"Send password by mail" : "Wachtwoord per email verzenden",
- "Enforce password protection" : "Afdwingenwachtwoordbeveiliging",
+ "Enforce password protection" : "Afdwingen wachtwoord beveiliging",
"Failed to send share by E-mail" : "delen per email is mislukt",
"%s shared »%s« with you on behalf of %s" : "%s deelde »%s« met jou in naam van %s",
"Failed to create the E-mail" : "Maken van de mail is mislukt",
diff --git a/apps/sharebymail/l10n/pl.js b/apps/sharebymail/l10n/pl.js
index 3602b8b23f8..a267d0b8daf 100644
--- a/apps/sharebymail/l10n/pl.js
+++ b/apps/sharebymail/l10n/pl.js
@@ -24,13 +24,13 @@ OC.L10N.register(
"Click the button below to open it." : "Kliknij przycisk poniżej, żeby to otworzyć.",
"Open »%s«" : "Otwórz »%s«",
"%s via %s" : "%s przez %s",
- "Password to access »%s« shared to you by %s" : "Hasło dostępu do »%s« jest udostępnione Tobie przez %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s współdzieli z Tobą »%s«.\nPowinieneś już otrzymać osobny e-mail zawierający link dostępowy.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s współdzieli »%s« z Tobą. Powinieneś już otrzymać osobnego e-maila z linkiem do dostępu.",
+ "Password to access »%s« shared to you by %s" : "Hasło dostępu do »%s« jest udostępnione Tobie przez %s",
"Password to access »%s«" : "Hasło do dostępu »%s«",
"It is protected with the following password: %s" : "To jest chronione z nstępującym hasłem: %s",
- "Password to access »%s« shared with %s" : "Hasło dostępu do »%s« zostało udostępnione %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." : "Właśnie udostępniłeś »%s« użytkownikowi %s. Udostępniony udział został już wysłany do odbiorcy, jednak zgodnie z polityką bezpieczeństwa ustanowioną przez administratora %s każdy udział musi zostać zabezpieczony hasłem. Wysyłanie hasła bezpośrednio do odbiorcy jest zabronione, dlatego też musisz mu je przekazać w klasyczny sposób.",
+ "Password to access »%s« shared with %s" : "Hasło dostępu do »%s« zostało udostępnione %s",
"This is the password: %s" : "To jest hasło: %s",
"You can choose a different password at any time in the share dialog." : "Możesz zmienić hasło w okienku współdzielenia w dowolnym momencie.",
"Could not find share" : "Nie można odnaleźć współdzielonego obiektu",
diff --git a/apps/sharebymail/l10n/pl.json b/apps/sharebymail/l10n/pl.json
index 7a04b7c6a6b..f9e72eb5f69 100644
--- a/apps/sharebymail/l10n/pl.json
+++ b/apps/sharebymail/l10n/pl.json
@@ -22,13 +22,13 @@
"Click the button below to open it." : "Kliknij przycisk poniżej, żeby to otworzyć.",
"Open »%s«" : "Otwórz »%s«",
"%s via %s" : "%s przez %s",
- "Password to access »%s« shared to you by %s" : "Hasło dostępu do »%s« jest udostępnione Tobie przez %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s współdzieli z Tobą »%s«.\nPowinieneś już otrzymać osobny e-mail zawierający link dostępowy.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s współdzieli »%s« z Tobą. Powinieneś już otrzymać osobnego e-maila z linkiem do dostępu.",
+ "Password to access »%s« shared to you by %s" : "Hasło dostępu do »%s« jest udostępnione Tobie przez %s",
"Password to access »%s«" : "Hasło do dostępu »%s«",
"It is protected with the following password: %s" : "To jest chronione z nstępującym hasłem: %s",
- "Password to access »%s« shared with %s" : "Hasło dostępu do »%s« zostało udostępnione %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." : "Właśnie udostępniłeś »%s« użytkownikowi %s. Udostępniony udział został już wysłany do odbiorcy, jednak zgodnie z polityką bezpieczeństwa ustanowioną przez administratora %s każdy udział musi zostać zabezpieczony hasłem. Wysyłanie hasła bezpośrednio do odbiorcy jest zabronione, dlatego też musisz mu je przekazać w klasyczny sposób.",
+ "Password to access »%s« shared with %s" : "Hasło dostępu do »%s« zostało udostępnione %s",
"This is the password: %s" : "To jest hasło: %s",
"You can choose a different password at any time in the share dialog." : "Możesz zmienić hasło w okienku współdzielenia w dowolnym momencie.",
"Could not find share" : "Nie można odnaleźć współdzielonego obiektu",
diff --git a/apps/sharebymail/l10n/pt_BR.js b/apps/sharebymail/l10n/pt_BR.js
index 173abe70dc4..d2508731e9e 100644
--- a/apps/sharebymail/l10n/pt_BR.js
+++ b/apps/sharebymail/l10n/pt_BR.js
@@ -24,13 +24,13 @@ OC.L10N.register(
"Click the button below to open it." : "Clique no botão abaixo para abrí-lo.",
"Open »%s«" : "Abrir »%s«",
"%s via %s" : "%s via %s",
- "Password to access »%s« shared to you by %s" : "Senha para acessar %s compartilhado com você por %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s compartilhou »%s« com você.\nVocê já deve ter recebido um e-mail com um link para acessá-lo.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s compartilhou »%s« com você. Você já deve ter recebido um e-mail com um link para acessá-lo.",
+ "Password to access »%s« shared to you by %s" : "Senha para acessar %s compartilhado com você por %s",
"Password to access »%s«" : "Senha para acessar »%s«",
"It is protected with the following password: %s" : "Está protegido com a seguinte senha: %s",
- "Password to access »%s« shared with %s" : "Senha para acessar »%s« compartilhado com %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." : "Você compartilhou »%s« com %s. O compartilhamento já foi enviado ao destinatário. Devido às políticas de segurança definidas pelo administrador de %s, cada compartilhamento necessita ser protegido por senha e não é permitido enviar a senha diretamente ao destinatário. Portanto você necessita enviar a senha manualmente ao destinatário.",
+ "Password to access »%s« shared with %s" : "Senha para acessar »%s« compartilhado com %s",
"This is the password: %s" : "Essa é a senha: %s",
"You can choose a different password at any time in the share dialog." : "Você pode escolher uma senha diferente a qualquer momento no diálogo compartilhamento.",
"Could not find share" : "Não foi possível encontrar o compartilhamento",
diff --git a/apps/sharebymail/l10n/pt_BR.json b/apps/sharebymail/l10n/pt_BR.json
index 8c2964ef257..25c84b332da 100644
--- a/apps/sharebymail/l10n/pt_BR.json
+++ b/apps/sharebymail/l10n/pt_BR.json
@@ -22,13 +22,13 @@
"Click the button below to open it." : "Clique no botão abaixo para abrí-lo.",
"Open »%s«" : "Abrir »%s«",
"%s via %s" : "%s via %s",
- "Password to access »%s« shared to you by %s" : "Senha para acessar %s compartilhado com você por %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s compartilhou »%s« com você.\nVocê já deve ter recebido um e-mail com um link para acessá-lo.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s compartilhou »%s« com você. Você já deve ter recebido um e-mail com um link para acessá-lo.",
+ "Password to access »%s« shared to you by %s" : "Senha para acessar %s compartilhado com você por %s",
"Password to access »%s«" : "Senha para acessar »%s«",
"It is protected with the following password: %s" : "Está protegido com a seguinte senha: %s",
- "Password to access »%s« shared with %s" : "Senha para acessar »%s« compartilhado com %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." : "Você compartilhou »%s« com %s. O compartilhamento já foi enviado ao destinatário. Devido às políticas de segurança definidas pelo administrador de %s, cada compartilhamento necessita ser protegido por senha e não é permitido enviar a senha diretamente ao destinatário. Portanto você necessita enviar a senha manualmente ao destinatário.",
+ "Password to access »%s« shared with %s" : "Senha para acessar »%s« compartilhado com %s",
"This is the password: %s" : "Essa é a senha: %s",
"You can choose a different password at any time in the share dialog." : "Você pode escolher uma senha diferente a qualquer momento no diálogo compartilhamento.",
"Could not find share" : "Não foi possível encontrar o compartilhamento",
diff --git a/apps/sharebymail/l10n/ru.js b/apps/sharebymail/l10n/ru.js
index 5e9db6c57e7..ecbb3381cac 100644
--- a/apps/sharebymail/l10n/ru.js
+++ b/apps/sharebymail/l10n/ru.js
@@ -24,13 +24,13 @@ OC.L10N.register(
"Click the button below to open it." : "Для открытия нажмите на кнопку, расположенную ниже.",
"Open »%s«" : "Открыть «%s»",
"%s via %s" : "%s через %s",
- "Password to access »%s« shared to you by %s" : "Пароль для «%s», общий доступ к которому предоставлен Вам пользователем %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s предоставил(а) Вам общий доступ к «%s».\nВы, скорее всего, уже получили отдельное письмо, содержащую ссылку для получения доступа.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s предоставил(а) Вам доступ к «%s». Вы, скорее всего, уже получили отдельное письмо, содержащее ссылку для получения доступа.",
+ "Password to access »%s« shared to you by %s" : "Пароль для «%s», общий доступ к которому предоставлен Вам пользователем %s",
"Password to access »%s«" : "Пароль для доступа «%s»",
"It is protected with the following password: %s" : "Доступ защищён следующим паролем: %s",
- "Password to access »%s« shared with %s" : "Паролем для доступа к «%s» поделились с %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." : "Вы только что предоставили общий доступ к «%s» пользователю %s. Информация о предоставлении доступа была отправлен получателю. В соответствии с политиками безопасности, заданными администратором %s, каждый общий ресурс должен быть защищён паролем, а так же не допускается непосредственное отправление пароля получателю. Поэтому вам потребуется самостоятельно перенаправить пароль получателю.",
+ "Password to access »%s« shared with %s" : "Паролем для доступа к «%s» поделились с %s",
"This is the password: %s" : "Пароль: %s",
"You can choose a different password at any time in the share dialog." : "В любой момент можно выбрать другой пароль в диалоге «Общий доступ».",
"Could not find share" : "Не удалось найти общий ресурс",
diff --git a/apps/sharebymail/l10n/ru.json b/apps/sharebymail/l10n/ru.json
index 901e4925866..f5967e67906 100644
--- a/apps/sharebymail/l10n/ru.json
+++ b/apps/sharebymail/l10n/ru.json
@@ -22,13 +22,13 @@
"Click the button below to open it." : "Для открытия нажмите на кнопку, расположенную ниже.",
"Open »%s«" : "Открыть «%s»",
"%s via %s" : "%s через %s",
- "Password to access »%s« shared to you by %s" : "Пароль для «%s», общий доступ к которому предоставлен Вам пользователем %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s предоставил(а) Вам общий доступ к «%s».\nВы, скорее всего, уже получили отдельное письмо, содержащую ссылку для получения доступа.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s предоставил(а) Вам доступ к «%s». Вы, скорее всего, уже получили отдельное письмо, содержащее ссылку для получения доступа.",
+ "Password to access »%s« shared to you by %s" : "Пароль для «%s», общий доступ к которому предоставлен Вам пользователем %s",
"Password to access »%s«" : "Пароль для доступа «%s»",
"It is protected with the following password: %s" : "Доступ защищён следующим паролем: %s",
- "Password to access »%s« shared with %s" : "Паролем для доступа к «%s» поделились с %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." : "Вы только что предоставили общий доступ к «%s» пользователю %s. Информация о предоставлении доступа была отправлен получателю. В соответствии с политиками безопасности, заданными администратором %s, каждый общий ресурс должен быть защищён паролем, а так же не допускается непосредственное отправление пароля получателю. Поэтому вам потребуется самостоятельно перенаправить пароль получателю.",
+ "Password to access »%s« shared with %s" : "Паролем для доступа к «%s» поделились с %s",
"This is the password: %s" : "Пароль: %s",
"You can choose a different password at any time in the share dialog." : "В любой момент можно выбрать другой пароль в диалоге «Общий доступ».",
"Could not find share" : "Не удалось найти общий ресурс",
diff --git a/apps/sharebymail/l10n/sq.js b/apps/sharebymail/l10n/sq.js
index 2d30b819d74..18d251b26a8 100644
--- a/apps/sharebymail/l10n/sq.js
+++ b/apps/sharebymail/l10n/sq.js
@@ -24,13 +24,13 @@ OC.L10N.register(
"Click the button below to open it." : "Klikoni butonin poshtë për ta hapur.",
"Open »%s«" : "Hap »%s«",
"%s via %s" : "%s përmes %s",
- "Password to access »%s« shared to you by %s" : "Fjalëkalimi për të hyrë »%s« ndarë me ju nda %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%sndau »%s« me ju. \nJu duhet të keni marrë tashmë një mail të veçantë me një lidhje për të aksesuar atë.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s ndau »%s« me ju. Ju duhet të keni marrë tashmë një mail të veçantë me një lidhje për të aksesuar atë.",
+ "Password to access »%s« shared to you by %s" : "Fjalëkalimi për të hyrë »%s« ndarë me ju nda %s",
"Password to access »%s«" : "Fjalëkalimi për akses »%s«",
"It is protected with the following password: %s" : "Është i mbrojtur me fjalëkalimin e mëposhtëm: %s",
- "Password to access »%s« shared with %s" : "Fjalëkalimi për të hyrë »%s« ndarë me %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." : "Ju sapo ndatë »« me %s%s. Pjesa ishte dërguar tashmë tek marrësi. Për shkak të politikave të sigurisë të përcaktuara nga administratori %s secila ndarje duhet të mbrohet me fjalëkalim dhe nuk lejohet të dërgojë fjalëkalimin drejtpërdrejt te marrësi. Prandaj ju duhet ta kaloni fjalëkalimin manualisht tek marrësi.",
+ "Password to access »%s« shared with %s" : "Fjalëkalimi për të hyrë »%s« ndarë me %s",
"This is the password: %s" : "Ky është fjalëkalimi: %s",
"You can choose a different password at any time in the share dialog." : "Ju mund të zgjidhni një fjalëkalim tjetër në çdo kohë në dialogun e ndarjes.",
"Could not find share" : "Nuk mund të gjej shpërndarje",
diff --git a/apps/sharebymail/l10n/sq.json b/apps/sharebymail/l10n/sq.json
index 1027fe6a677..e80fa8819fd 100644
--- a/apps/sharebymail/l10n/sq.json
+++ b/apps/sharebymail/l10n/sq.json
@@ -22,13 +22,13 @@
"Click the button below to open it." : "Klikoni butonin poshtë për ta hapur.",
"Open »%s«" : "Hap »%s«",
"%s via %s" : "%s përmes %s",
- "Password to access »%s« shared to you by %s" : "Fjalëkalimi për të hyrë »%s« ndarë me ju nda %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%sndau »%s« me ju. \nJu duhet të keni marrë tashmë një mail të veçantë me një lidhje për të aksesuar atë.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s ndau »%s« me ju. Ju duhet të keni marrë tashmë një mail të veçantë me një lidhje për të aksesuar atë.",
+ "Password to access »%s« shared to you by %s" : "Fjalëkalimi për të hyrë »%s« ndarë me ju nda %s",
"Password to access »%s«" : "Fjalëkalimi për akses »%s«",
"It is protected with the following password: %s" : "Është i mbrojtur me fjalëkalimin e mëposhtëm: %s",
- "Password to access »%s« shared with %s" : "Fjalëkalimi për të hyrë »%s« ndarë me %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." : "Ju sapo ndatë »« me %s%s. Pjesa ishte dërguar tashmë tek marrësi. Për shkak të politikave të sigurisë të përcaktuara nga administratori %s secila ndarje duhet të mbrohet me fjalëkalim dhe nuk lejohet të dërgojë fjalëkalimin drejtpërdrejt te marrësi. Prandaj ju duhet ta kaloni fjalëkalimin manualisht tek marrësi.",
+ "Password to access »%s« shared with %s" : "Fjalëkalimi për të hyrë »%s« ndarë me %s",
"This is the password: %s" : "Ky është fjalëkalimi: %s",
"You can choose a different password at any time in the share dialog." : "Ju mund të zgjidhni një fjalëkalim tjetër në çdo kohë në dialogun e ndarjes.",
"Could not find share" : "Nuk mund të gjej shpërndarje",
diff --git a/apps/sharebymail/l10n/sr.js b/apps/sharebymail/l10n/sr.js
new file mode 100644
index 00000000000..f2af39e921d
--- /dev/null
+++ b/apps/sharebymail/l10n/sr.js
@@ -0,0 +1,50 @@
+OC.L10N.register(
+ "sharebymail",
+ {
+ "Shared with %1$s" : "Подељено са %1$s",
+ "Shared with {email}" : "Подељено са {email}",
+ "Shared with %1$s by %2$s" : "%2$s поделио са %1$s",
+ "Shared with {email} by {actor}" : "{actor} поделио са {email}",
+ "Password for mail share sent to %1$s" : "Лозинка за дељење е-поштом послата на %1$s",
+ "Password for mail share sent to {email}" : "Лозинка за дељење е-поштом послата на {email}",
+ "Password for mail share sent to you" : "Лозинка за дељење е-поштом послата Вама",
+ "You shared %1$s with %2$s by mail" : "Поделили сте %1$s са %2$s е-поштом",
+ "You shared {file} with {email} by mail" : "Поделили сте {file} са {email} е-поштом",
+ "%3$s shared %1$s with %2$s by mail" : "%3$s је поделио %1$s са %2$s е-поштом",
+ "{actor} shared {file} with {email} by mail" : "{actor} је поделио {file} са {email} е-поштом",
+ "Password to access %1$s was sent to %2s" : "Лозинка за приступ %1$s је послата на %2s",
+ "Password to access {file} was sent to {email}" : "Лозинка за приступ {file} је послата на {email}",
+ "Password to access %1$s was sent to you" : "Лозинка за приступ %1$sВам је послата",
+ "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." : "Не можемо Вам послати ауто-генерисану лозинку. Подесите исправну адресу е-поште у личним поставкама и покушајте поново.",
+ "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." : "Кликните на дугме испод да га отворите.",
+ "Open »%s«" : "Отвори »%s«",
+ "%s via %s" : "%s преко %s",
+ "%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s је поделио »%s« са Вама.\nТреба да сте до сад добили посебни мејл са везом како да му приступите.\n",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s је поделио »%s« са Вама. Треба да сте до сад добили посебни мејл са везом како да му приступите.",
+ "Password to access »%s« shared to you by %s" : "%s Вам је поделио лозинку за приступ »%s«",
+ "Password to access »%s«" : "Лозинка за приступ »%s«",
+ "It is protected with the following password: %s" : "Заштићена је следећом лозинком: %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." : "Управо сте поделили »%s« са корисником %s. Дељење је већ послато примаоцу. Због безбедоносне политике коју је дефинисао администратор инстанце %s , свако дељење мора бити заштићено лозинком и није дозвољено да пошаљете лозинку директно кориснику. Због тога морате ручно послати лозинку примаоцу.",
+ "Password to access »%s« shared with %s" : "Лозинка за приступ »%s« подељена са корисником %s",
+ "This is the password: %s" : "Ово је лозинка: %s",
+ "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." : "Дозвољава корисницима да поделе персонализовану везу до фајла или фасцикле преко е-поште.",
+ "Send password by mail" : "Пошаљи лозинку е-поштом",
+ "Enforce password protection" : "Захтевај заштиту лозинком",
+ "Failed to send share by E-mail" : "Грешка у слању дељења е-поштом",
+ "%s shared »%s« with you on behalf of %s" : "%s је поделио »%s« са Вама у име корисника %s",
+ "Failed to create the E-mail" : "Грешка при креирању е-поште",
+ "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Поздрав,\n\n%s је поделио »%s« са Вама у име корисника %s.\n\n%s\n",
+ "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Поздрав,\n\n%s је поделио »%s« са Вама.\n\n%s\n",
+ "Cheers!" : "Здраво!",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Поздрав, <br><br>%s је поделио <a href=\"%s\">%s</a> са Вама у име корисника %s.<br><br>",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Поздрав,<br><br>%sје поделио <a href=\"%s\">%s</a>са Вама.<br><br>"
+},
+"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/sharebymail/l10n/sr.json b/apps/sharebymail/l10n/sr.json
new file mode 100644
index 00000000000..b074abe4253
--- /dev/null
+++ b/apps/sharebymail/l10n/sr.json
@@ -0,0 +1,48 @@
+{ "translations": {
+ "Shared with %1$s" : "Подељено са %1$s",
+ "Shared with {email}" : "Подељено са {email}",
+ "Shared with %1$s by %2$s" : "%2$s поделио са %1$s",
+ "Shared with {email} by {actor}" : "{actor} поделио са {email}",
+ "Password for mail share sent to %1$s" : "Лозинка за дељење е-поштом послата на %1$s",
+ "Password for mail share sent to {email}" : "Лозинка за дељење е-поштом послата на {email}",
+ "Password for mail share sent to you" : "Лозинка за дељење е-поштом послата Вама",
+ "You shared %1$s with %2$s by mail" : "Поделили сте %1$s са %2$s е-поштом",
+ "You shared {file} with {email} by mail" : "Поделили сте {file} са {email} е-поштом",
+ "%3$s shared %1$s with %2$s by mail" : "%3$s је поделио %1$s са %2$s е-поштом",
+ "{actor} shared {file} with {email} by mail" : "{actor} је поделио {file} са {email} е-поштом",
+ "Password to access %1$s was sent to %2s" : "Лозинка за приступ %1$s је послата на %2s",
+ "Password to access {file} was sent to {email}" : "Лозинка за приступ {file} је послата на {email}",
+ "Password to access %1$s was sent to you" : "Лозинка за приступ %1$sВам је послата",
+ "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." : "Не можемо Вам послати ауто-генерисану лозинку. Подесите исправну адресу е-поште у личним поставкама и покушајте поново.",
+ "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." : "Кликните на дугме испод да га отворите.",
+ "Open »%s«" : "Отвори »%s«",
+ "%s via %s" : "%s преко %s",
+ "%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s је поделио »%s« са Вама.\nТреба да сте до сад добили посебни мејл са везом како да му приступите.\n",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s је поделио »%s« са Вама. Треба да сте до сад добили посебни мејл са везом како да му приступите.",
+ "Password to access »%s« shared to you by %s" : "%s Вам је поделио лозинку за приступ »%s«",
+ "Password to access »%s«" : "Лозинка за приступ »%s«",
+ "It is protected with the following password: %s" : "Заштићена је следећом лозинком: %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." : "Управо сте поделили »%s« са корисником %s. Дељење је већ послато примаоцу. Због безбедоносне политике коју је дефинисао администратор инстанце %s , свако дељење мора бити заштићено лозинком и није дозвољено да пошаљете лозинку директно кориснику. Због тога морате ручно послати лозинку примаоцу.",
+ "Password to access »%s« shared with %s" : "Лозинка за приступ »%s« подељена са корисником %s",
+ "This is the password: %s" : "Ово је лозинка: %s",
+ "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." : "Дозвољава корисницима да поделе персонализовану везу до фајла или фасцикле преко е-поште.",
+ "Send password by mail" : "Пошаљи лозинку е-поштом",
+ "Enforce password protection" : "Захтевај заштиту лозинком",
+ "Failed to send share by E-mail" : "Грешка у слању дељења е-поштом",
+ "%s shared »%s« with you on behalf of %s" : "%s је поделио »%s« са Вама у име корисника %s",
+ "Failed to create the E-mail" : "Грешка при креирању е-поште",
+ "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Поздрав,\n\n%s је поделио »%s« са Вама у име корисника %s.\n\n%s\n",
+ "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Поздрав,\n\n%s је поделио »%s« са Вама.\n\n%s\n",
+ "Cheers!" : "Здраво!",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Поздрав, <br><br>%s је поделио <a href=\"%s\">%s</a> са Вама у име корисника %s.<br><br>",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Поздрав,<br><br>%sје поделио <a href=\"%s\">%s</a>са Вама.<br><br>"
+},"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/sharebymail/l10n/sv.js b/apps/sharebymail/l10n/sv.js
index 0d650e96725..eb3b8451e6b 100644
--- a/apps/sharebymail/l10n/sv.js
+++ b/apps/sharebymail/l10n/sv.js
@@ -24,13 +24,13 @@ OC.L10N.register(
"Click the button below to open it." : "Klicka knappen nedan för att öppna det.",
"Open »%s«" : "Öppna »%s«",
"%s via %s" : "%s via %s",
- "Password to access »%s« shared to you by %s" : "Lösenord för att få tillgång till »%s« delat med dig av %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s delade »%s« med dig.\nDu ska redan ha fått ett separat epost med en länk för att nå det.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s delade »%s« med dig. Du ska redan ha fått ett separat e-post med en länk för att nå det.",
+ "Password to access »%s« shared to you by %s" : "Lösenord för att få tillgång till »%s« delat med dig av %s",
"Password to access »%s«" : "Lösenord för att nå »%s«",
"It is protected with the following password: %s" : "Den är skyddad med följande lösenord: %s",
- "Password to access »%s« shared with %s" : "Lösenord för att få tillgång till »%s« delade med %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." : "Du delade precis »%s« med %s. Delningen var redan skickat till mottagaren. På grund av säkerhetspolicyn definierad av administratören av %s måste varje delning vara lösenordsskyddad och det är inte tillåtet att skicka lösenordet direkt till mottagaren. Därför behöver du vidarebefordra lösenordet manuellt till mottagaren.",
+ "Password to access »%s« shared with %s" : "Lösenord för att få tillgång till »%s« delade med %s",
"This is the password: %s" : "Detta är lösenordet: %s",
"You can choose a different password at any time in the share dialog." : "Du kan välja ett annat lösenord när som helst i delningsdialogen.",
"Could not find share" : "Kunde inte hitta delning",
diff --git a/apps/sharebymail/l10n/sv.json b/apps/sharebymail/l10n/sv.json
index 31a28f427ed..75e3bb9d299 100644
--- a/apps/sharebymail/l10n/sv.json
+++ b/apps/sharebymail/l10n/sv.json
@@ -22,13 +22,13 @@
"Click the button below to open it." : "Klicka knappen nedan för att öppna det.",
"Open »%s«" : "Öppna »%s«",
"%s via %s" : "%s via %s",
- "Password to access »%s« shared to you by %s" : "Lösenord för att få tillgång till »%s« delat med dig av %s",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s delade »%s« med dig.\nDu ska redan ha fått ett separat epost med en länk för att nå det.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s delade »%s« med dig. Du ska redan ha fått ett separat e-post med en länk för att nå det.",
+ "Password to access »%s« shared to you by %s" : "Lösenord för att få tillgång till »%s« delat med dig av %s",
"Password to access »%s«" : "Lösenord för att nå »%s«",
"It is protected with the following password: %s" : "Den är skyddad med följande lösenord: %s",
- "Password to access »%s« shared with %s" : "Lösenord för att få tillgång till »%s« delade med %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." : "Du delade precis »%s« med %s. Delningen var redan skickat till mottagaren. På grund av säkerhetspolicyn definierad av administratören av %s måste varje delning vara lösenordsskyddad och det är inte tillåtet att skicka lösenordet direkt till mottagaren. Därför behöver du vidarebefordra lösenordet manuellt till mottagaren.",
+ "Password to access »%s« shared with %s" : "Lösenord för att få tillgång till »%s« delade med %s",
"This is the password: %s" : "Detta är lösenordet: %s",
"You can choose a different password at any time in the share dialog." : "Du kan välja ett annat lösenord när som helst i delningsdialogen.",
"Could not find share" : "Kunde inte hitta delning",
diff --git a/apps/sharebymail/l10n/tr.js b/apps/sharebymail/l10n/tr.js
index e84ac60c1d4..904ab5365ff 100644
--- a/apps/sharebymail/l10n/tr.js
+++ b/apps/sharebymail/l10n/tr.js
@@ -24,13 +24,13 @@ OC.L10N.register(
"Click the button below to open it." : "Açmak için aşağıdaki düğmeye tıklayın.",
"Open »%s«" : "»%s« Aç",
"%s via %s" : "%s, %s aracılığıyla",
- "Password to access »%s« shared to you by %s" : "»%s« için sizin tarafınızdan %s üzerinden paylaşılan erişim parolası",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s sizinle »%s« ögesini paylaştı.\nErişim bağlantısını içeren başka bir e-posta daha almış olmalısınız.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s sizinle »%s« ögesini paylaştı. Erişim bağlantısını içeren başka bir e-posta daha almış olmalısınız.",
+ "Password to access »%s« shared to you by %s" : "»%s« için sizin tarafınızdan %s üzerinden paylaşılan erişim parolası",
"Password to access »%s«" : "»%s« erişim parolası",
"It is protected with the following password: %s" : "Öge şu parola ile korunuyor: %s",
- "Password to access »%s« shared with %s" : "»%s« için %s üzerinden paylaşılan erişim parolası",
"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." : "»%s« ögesini %s ile paylaştınız. Paylaşım alıcıya gönderildi. %s yöneticisi tarafından belirlenmiş güvenlik ilkelerine göre her bir paylaşım için bir parola belirtilmesi ve bu parolanın alıcıya doğrudan gönderilmemesi gerekiyor. Bu nedenle parolayı alıcıya el ile siz iletmelisiniz.",
+ "Password to access »%s« shared with %s" : "»%s« için %s üzerinden paylaşılan erişim parolası",
"This is the password: %s" : "İleteceğiniz parola: %s",
"You can choose a different password at any time in the share dialog." : "İstediğiniz zaman paylaşım bölümünden farklı bir parola belirtebilirsiniz.",
"Could not find share" : "Paylaşım bulunamadı",
diff --git a/apps/sharebymail/l10n/tr.json b/apps/sharebymail/l10n/tr.json
index 87c39b3ff3e..657db4036f8 100644
--- a/apps/sharebymail/l10n/tr.json
+++ b/apps/sharebymail/l10n/tr.json
@@ -22,13 +22,13 @@
"Click the button below to open it." : "Açmak için aşağıdaki düğmeye tıklayın.",
"Open »%s«" : "»%s« Aç",
"%s via %s" : "%s, %s aracılığıyla",
- "Password to access »%s« shared to you by %s" : "»%s« için sizin tarafınızdan %s üzerinden paylaşılan erişim parolası",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s sizinle »%s« ögesini paylaştı.\nErişim bağlantısını içeren başka bir e-posta daha almış olmalısınız.\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s sizinle »%s« ögesini paylaştı. Erişim bağlantısını içeren başka bir e-posta daha almış olmalısınız.",
+ "Password to access »%s« shared to you by %s" : "»%s« için sizin tarafınızdan %s üzerinden paylaşılan erişim parolası",
"Password to access »%s«" : "»%s« erişim parolası",
"It is protected with the following password: %s" : "Öge şu parola ile korunuyor: %s",
- "Password to access »%s« shared with %s" : "»%s« için %s üzerinden paylaşılan erişim parolası",
"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." : "»%s« ögesini %s ile paylaştınız. Paylaşım alıcıya gönderildi. %s yöneticisi tarafından belirlenmiş güvenlik ilkelerine göre her bir paylaşım için bir parola belirtilmesi ve bu parolanın alıcıya doğrudan gönderilmemesi gerekiyor. Bu nedenle parolayı alıcıya el ile siz iletmelisiniz.",
+ "Password to access »%s« shared with %s" : "»%s« için %s üzerinden paylaşılan erişim parolası",
"This is the password: %s" : "İleteceğiniz parola: %s",
"You can choose a different password at any time in the share dialog." : "İstediğiniz zaman paylaşım bölümünden farklı bir parola belirtebilirsiniz.",
"Could not find share" : "Paylaşım bulunamadı",
diff --git a/apps/sharebymail/l10n/zh_CN.js b/apps/sharebymail/l10n/zh_CN.js
index 97afec66870..1e21de4d9d2 100644
--- a/apps/sharebymail/l10n/zh_CN.js
+++ b/apps/sharebymail/l10n/zh_CN.js
@@ -24,13 +24,13 @@ OC.L10N.register(
"Click the button below to open it." : "点击下面的按钮打开它。",
"Open »%s«" : "打开 »%s«",
"%s via %s" : "%s通过%s",
- "Password to access »%s« shared to you by %s" : "使用密码访问»%s«由%s分享",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s与您共享了%s\n访问链接已另外以邮件方式发送到您的邮箱\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s与您共享了%s。访问链接已另外以邮件方式发送到您的邮箱。",
+ "Password to access »%s« shared to you by %s" : "使用密码访问»%s«由%s分享",
"Password to access »%s«" : "访问 »%s« 的密码",
"It is protected with the following password: %s" : "已被已下密码保护:%s",
- "Password to access »%s« shared with %s" : "使用密码访问»%s«与%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." : "您与%s共享»%s«已发送给收件人。由于%s管理员定义的安全策略, 每个共享都需要受密码保护, 并且不允许直接向收件人发送密码。因此, 您需要将密码手动转发给收件人。",
+ "Password to access »%s« shared with %s" : "使用密码访问»%s«与%s分享",
"This is the password: %s" : "这是密码: %s",
"You can choose a different password at any time in the share dialog." : "您可以随时在共享对话框中选择不同的密码。",
"Could not find share" : "没有发现共享",
diff --git a/apps/sharebymail/l10n/zh_CN.json b/apps/sharebymail/l10n/zh_CN.json
index 339edbcd096..b435c7c2aa1 100644
--- a/apps/sharebymail/l10n/zh_CN.json
+++ b/apps/sharebymail/l10n/zh_CN.json
@@ -22,13 +22,13 @@
"Click the button below to open it." : "点击下面的按钮打开它。",
"Open »%s«" : "打开 »%s«",
"%s via %s" : "%s通过%s",
- "Password to access »%s« shared to you by %s" : "使用密码访问»%s«由%s分享",
"%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s与您共享了%s\n访问链接已另外以邮件方式发送到您的邮箱\n",
"%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s与您共享了%s。访问链接已另外以邮件方式发送到您的邮箱。",
+ "Password to access »%s« shared to you by %s" : "使用密码访问»%s«由%s分享",
"Password to access »%s«" : "访问 »%s« 的密码",
"It is protected with the following password: %s" : "已被已下密码保护:%s",
- "Password to access »%s« shared with %s" : "使用密码访问»%s«与%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." : "您与%s共享»%s«已发送给收件人。由于%s管理员定义的安全策略, 每个共享都需要受密码保护, 并且不允许直接向收件人发送密码。因此, 您需要将密码手动转发给收件人。",
+ "Password to access »%s« shared with %s" : "使用密码访问»%s«与%s分享",
"This is the password: %s" : "这是密码: %s",
"You can choose a different password at any time in the share dialog." : "您可以随时在共享对话框中选择不同的密码。",
"Could not find share" : "没有发现共享",
diff --git a/apps/sharebymail/lib/ShareByMailProvider.php b/apps/sharebymail/lib/ShareByMailProvider.php
index 516e4e243bf..f610a1a5fa9 100644
--- a/apps/sharebymail/lib/ShareByMailProvider.php
+++ b/apps/sharebymail/lib/ShareByMailProvider.php
@@ -380,8 +380,6 @@ class ShareByMailProvider implements IShareProvider {
\DateTime $expiration = null) {
$initiatorUser = $this->userManager->get($initiator);
$initiatorDisplayName = ($initiatorUser instanceof IUser) ? $initiatorUser->getDisplayName() : $initiator;
- $subject = (string)$this->l->t('%s shared »%s« with you', array($initiatorDisplayName, $filename));
-
$message = $this->mailer->createMessage();
$emailTemplate = $this->mailer->createEMailTemplate('sharebymail.RecipientNotification', [
@@ -392,6 +390,7 @@ class ShareByMailProvider implements IShareProvider {
'shareWith' => $shareWith,
]);
+ $emailTemplate->setSubject($this->l->t('%s shared »%s« with you', array($initiatorDisplayName, $filename)));
$emailTemplate->addHeader();
$emailTemplate->addHeading($this->l->t('%s shared »%s« with you', [$initiatorDisplayName, $filename]), false);
$text = $this->l->t('%s shared »%s« with you.', [$initiatorDisplayName, $filename]);
@@ -428,9 +427,7 @@ class ShareByMailProvider implements IShareProvider {
$emailTemplate->addFooter();
}
- $message->setSubject($subject);
- $message->setPlainBody($emailTemplate->renderText());
- $message->setHtmlBody($emailTemplate->renderHtml());
+ $message->useTemplate($emailTemplate);
$this->mailer->send($message);
}
@@ -455,7 +452,6 @@ class ShareByMailProvider implements IShareProvider {
$initiatorDisplayName = ($initiatorUser instanceof IUser) ? $initiatorUser->getDisplayName() : $initiator;
$initiatorEmailAddress = ($initiatorUser instanceof IUser) ? $initiatorUser->getEMailAddress() : null;
- $subject = (string)$this->l->t('Password to access »%s« shared to you by %s', [$filename, $initiatorDisplayName]);
$plainBodyPart = $this->l->t("%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n", [$initiatorDisplayName, $filename]);
$htmlBodyPart = $this->l->t('%s shared »%s« with you. You should have already received a separate mail with a link to access it.', [$initiatorDisplayName, $filename]);
@@ -468,6 +464,8 @@ class ShareByMailProvider implements IShareProvider {
'initiatorEmail' => $initiatorEmailAddress,
'shareWith' => $shareWith,
]);
+
+ $emailTemplate->setSubject($this->l->t('Password to access »%s« shared to you by %s', [$filename, $initiatorDisplayName]));
$emailTemplate->addHeader();
$emailTemplate->addHeading($this->l->t('Password to access »%s«', [$filename]), false);
$emailTemplate->addBodyText($htmlBodyPart, $plainBodyPart);
@@ -491,9 +489,7 @@ class ShareByMailProvider implements IShareProvider {
}
$message->setTo([$shareWith]);
- $message->setSubject($subject);
- $message->setBody($emailTemplate->renderText(), 'text/plain');
- $message->setHtmlBody($emailTemplate->renderHtml());
+ $message->useTemplate($emailTemplate);
$this->mailer->send($message);
$this->createPasswordSendActivity($share, $shareWith, false);
@@ -524,7 +520,6 @@ class ShareByMailProvider implements IShareProvider {
);
}
- $subject = (string)$this->l->t('Password to access »%s« shared with %s', [$filename, $shareWith]);
$bodyPart = $this->l->t("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.", [$filename, $shareWith, $this->defaults->getName()]);
$message = $this->mailer->createMessage();
@@ -536,6 +531,7 @@ class ShareByMailProvider implements IShareProvider {
'shareWith' => $shareWith,
]);
+ $emailTemplate->setSubject($this->l->t('Password to access »%s« shared with %s', [$filename, $shareWith]));
$emailTemplate->addHeader();
$emailTemplate->addHeading($this->l->t('Password to access »%s«', [$filename]), false);
$emailTemplate->addBodyText($bodyPart);
@@ -547,9 +543,7 @@ class ShareByMailProvider implements IShareProvider {
$message->setFrom([$initiatorEMailAddress => $initiatorDisplayName]);
}
$message->setTo([$initiatorEMailAddress => $initiatorDisplayName]);
- $message->setSubject($subject);
- $message->setBody($emailTemplate->renderText(), 'text/plain');
- $message->setHtmlBody($emailTemplate->renderHtml());
+ $message->useTemplate($emailTemplate);
$this->mailer->send($message);
$this->createPasswordSendActivity($share, $shareWith, true);
diff --git a/apps/sharebymail/tests/ShareByMailProviderTest.php b/apps/sharebymail/tests/ShareByMailProviderTest.php
index 23e61ee58f1..95d746cfb46 100644
--- a/apps/sharebymail/tests/ShareByMailProviderTest.php
+++ b/apps/sharebymail/tests/ShareByMailProviderTest.php
@@ -103,18 +103,18 @@ class ShareByMailProviderTest extends TestCase {
$this->shareManager = \OC::$server->getShareManager();
$this->connection = \OC::$server->getDatabaseConnection();
- $this->l = $this->getMockBuilder('OCP\IL10N')->getMock();
+ $this->l = $this->getMockBuilder(IL10N::class)->getMock();
$this->l->method('t')
->will($this->returnCallback(function($text, $parameters = []) {
return vsprintf($text, $parameters);
}));
- $this->logger = $this->getMockBuilder('OCP\ILogger')->getMock();
+ $this->logger = $this->getMockBuilder(ILogger::class)->getMock();
$this->rootFolder = $this->getMockBuilder('OCP\Files\IRootFolder')->getMock();
- $this->userManager = $this->getMockBuilder('OCP\IUserManager')->getMock();
+ $this->userManager = $this->getMockBuilder(IUserManager::class)->getMock();
$this->secureRandom = $this->getMockBuilder('\OCP\Security\ISecureRandom')->getMock();
$this->mailer = $this->getMockBuilder('\OCP\Mail\IMailer')->getMock();
- $this->urlGenerator = $this->getMockBuilder('\OCP\IUrlGenerator')->getMock();
- $this->share = $this->getMockBuilder('\OCP\Share\IShare')->getMock();
+ $this->urlGenerator = $this->getMockBuilder(IURLGenerator::class)->getMock();
+ $this->share = $this->getMockBuilder(IShare::class)->getMock();
$this->activityManager = $this->getMockBuilder('OCP\Activity\IManager')->getMock();
$this->settingsManager = $this->getMockBuilder(SettingsManager::class)->disableOriginalConstructor()->getMock();
$this->defaults = $this->createMock(Defaults::class);
@@ -181,7 +181,7 @@ class ShareByMailProviderTest extends TestCase {
}
public function testCreate() {
- $share = $this->getMockBuilder('\OCP\Share\IShare')->getMock();
+ $share = $this->getMockBuilder(IShare::class)->getMock();
$share->expects($this->any())->method('getSharedWith')->willReturn('user1');
$node = $this->getMockBuilder(File::class)->getMock();
@@ -835,26 +835,14 @@ class ShareByMailProviderTest extends TestCase {
->expects($this->once())
->method('addFooter')
->with('UnitTestCloud - Testing like 1990');
- $message
- ->expects($this->once())
- ->method('setSubject')
- ->willReturn('Mrs. Owner User shared »file.txt« with you');
$template
->expects($this->once())
- ->method('renderText')
- ->willReturn('Text Render');
- $message
- ->expects($this->once())
- ->method('setPlainBody')
- ->with('Text Render');
- $template
- ->expects($this->once())
- ->method('renderHtml')
- ->willReturn('HTML Render');
+ ->method('setSubject')
+ ->with('Mrs. Owner User shared »file.txt« with you');
$message
->expects($this->once())
- ->method('setHtmlBody')
- ->with('HTML Render');
+ ->method('useTemplate')
+ ->with($template);
$this->mailer
->expects($this->once())
->method('send')
@@ -936,26 +924,14 @@ class ShareByMailProviderTest extends TestCase {
->expects($this->once())
->method('addFooter')
->with('');
- $message
- ->expects($this->once())
- ->method('setSubject')
- ->willReturn('Mr. Initiator User shared »file.txt« with you');
$template
->expects($this->once())
- ->method('renderText')
- ->willReturn('Text Render');
- $message
- ->expects($this->once())
- ->method('setPlainBody')
- ->with('Text Render');
- $template
- ->expects($this->once())
- ->method('renderHtml')
- ->willReturn('HTML Render');
+ ->method('setSubject')
+ ->with('Mr. Initiator User shared »file.txt« with you');
$message
->expects($this->once())
- ->method('setHtmlBody')
- ->with('HTML Render');
+ ->method('useTemplate')
+ ->with($template);
$this->mailer
->expects($this->once())
->method('send')
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/composer/autoload.php b/apps/systemtags/composer/autoload.php
new file mode 100644
index 00000000000..30f4cd27d40
--- /dev/null
+++ b/apps/systemtags/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitSystemTags::getLoader();
diff --git a/apps/systemtags/composer/composer.json b/apps/systemtags/composer/composer.json
new file mode 100644
index 00000000000..06b4e7f1df4
--- /dev/null
+++ b/apps/systemtags/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "SystemTags"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\SystemTags\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/systemtags/composer/composer/ClassLoader.php b/apps/systemtags/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/systemtags/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/systemtags/composer/composer/LICENSE b/apps/systemtags/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/systemtags/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/systemtags/composer/composer/autoload_classmap.php b/apps/systemtags/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..9bf1f0cdaa4
--- /dev/null
+++ b/apps/systemtags/composer/composer/autoload_classmap.php
@@ -0,0 +1,14 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\SystemTags\\Activity\\Listener' => $baseDir . '/../lib/Activity/Listener.php',
+ 'OCA\\SystemTags\\Activity\\Provider' => $baseDir . '/../lib/Activity/Provider.php',
+ 'OCA\\SystemTags\\Activity\\Setting' => $baseDir . '/../lib/Activity/Setting.php',
+ 'OCA\\SystemTags\\Controller\\LastUsedController' => $baseDir . '/../lib/Controller/LastUsedController.php',
+ 'OCA\\SystemTags\\Settings\\Admin' => $baseDir . '/../lib/Settings/Admin.php',
+);
diff --git a/apps/systemtags/composer/composer/autoload_namespaces.php b/apps/systemtags/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/systemtags/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/systemtags/composer/composer/autoload_psr4.php b/apps/systemtags/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..cec8aaf3650
--- /dev/null
+++ b/apps/systemtags/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\SystemTags\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/systemtags/composer/composer/autoload_real.php b/apps/systemtags/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..a085cdeb46d
--- /dev/null
+++ b/apps/systemtags/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitSystemTags
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitSystemTags', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitSystemTags', 'loadClassLoader'));
+
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitSystemTags::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/systemtags/composer/composer/autoload_static.php b/apps/systemtags/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..40615430f93
--- /dev/null
+++ b/apps/systemtags/composer/composer/autoload_static.php
@@ -0,0 +1,40 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitSystemTags
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\SystemTags\\' => 15,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\SystemTags\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\SystemTags\\Activity\\Listener' => __DIR__ . '/..' . '/../lib/Activity/Listener.php',
+ 'OCA\\SystemTags\\Activity\\Provider' => __DIR__ . '/..' . '/../lib/Activity/Provider.php',
+ 'OCA\\SystemTags\\Activity\\Setting' => __DIR__ . '/..' . '/../lib/Activity/Setting.php',
+ 'OCA\\SystemTags\\Controller\\LastUsedController' => __DIR__ . '/..' . '/../lib/Controller/LastUsedController.php',
+ 'OCA\\SystemTags\\Settings\\Admin' => __DIR__ . '/..' . '/../lib/Settings/Admin.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitSystemTags::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitSystemTags::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitSystemTags::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/systemtags/js/systemtagsfilelist.js b/apps/systemtags/js/systemtagsfilelist.js
index a40eb548d9f..ad6bf7dd78d 100644
--- a/apps/systemtags/js/systemtagsfilelist.js
+++ b/apps/systemtags/js/systemtagsfilelist.js
@@ -234,6 +234,9 @@
},
reload: function() {
+ // there is only root
+ this._setCurrentDir('/', false);
+
if (!this._systemTagIds.length) {
// don't reload
this.updateEmptyContent();
diff --git a/apps/systemtags/l10n/es_CO.js b/apps/systemtags/l10n/es_CO.js
new file mode 100644
index 00000000000..77f45fe1268
--- /dev/null
+++ b/apps/systemtags/l10n/es_CO.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_CO.json b/apps/systemtags/l10n/es_CO.json
new file mode 100644
index 00000000000..9a8e4adf3f8
--- /dev/null
+++ b/apps/systemtags/l10n/es_CO.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_CR.js b/apps/systemtags/l10n/es_CR.js
new file mode 100644
index 00000000000..77f45fe1268
--- /dev/null
+++ b/apps/systemtags/l10n/es_CR.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_CR.json b/apps/systemtags/l10n/es_CR.json
new file mode 100644
index 00000000000..9a8e4adf3f8
--- /dev/null
+++ b/apps/systemtags/l10n/es_CR.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_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/l10n/hu.js b/apps/systemtags/l10n/hu.js
index e2cc831e08c..a8843c60538 100644
--- a/apps/systemtags/l10n/hu.js
+++ b/apps/systemtags/l10n/hu.js
@@ -42,6 +42,7 @@ OC.L10N.register(
"%s (invisible)" : "%s (láthatatlan)",
"<strong>System tags</strong> for a file have been modified" : "A fájl <strong>rendszer címkéje</strong> módosítva lett",
"Collaborative tags" : "Együttműködési címkék",
+ "Create and edit collaborative tags. These tags affect all users." : "Kollaboratív címke létrehozása és szerkesztése. Ezek minden felhasználóra érvényesülnek.",
"Select tag …" : "Címke választás...",
"Name" : "Név",
"Delete" : "Törlés",
diff --git a/apps/systemtags/l10n/hu.json b/apps/systemtags/l10n/hu.json
index 8e1cff657ce..42b0b7df129 100644
--- a/apps/systemtags/l10n/hu.json
+++ b/apps/systemtags/l10n/hu.json
@@ -40,6 +40,7 @@
"%s (invisible)" : "%s (láthatatlan)",
"<strong>System tags</strong> for a file have been modified" : "A fájl <strong>rendszer címkéje</strong> módosítva lett",
"Collaborative tags" : "Együttműködési címkék",
+ "Create and edit collaborative tags. These tags affect all users." : "Kollaboratív címke létrehozása és szerkesztése. Ezek minden felhasználóra érvényesülnek.",
"Select tag …" : "Címke választás...",
"Name" : "Név",
"Delete" : "Törlés",
diff --git a/apps/systemtags/l10n/sr.js b/apps/systemtags/l10n/sr.js
index 623fdf3bfa4..815e319acc6 100644
--- a/apps/systemtags/l10n/sr.js
+++ b/apps/systemtags/l10n/sr.js
@@ -2,18 +2,57 @@ OC.L10N.register(
"systemtags",
{
"Tags" : "Ознаке",
+ "Update" : "Ажурирај",
+ "Create" : "Направи",
+ "Select tag…" : "Одабери ознаку…",
"Tagged files" : "Означени фајлови",
- "<strong>System tags</strong> for a file have been modified" : "<strong>Системске ознаке</strong> за фајл су измењене",
- "%1$s assigned system tag %3$s" : "%1$s додели системску ознаку %3$s",
- "%1$s created system tag %2$s" : "%1$s направи системску ознаку %2$s",
- "%1$s deleted system tag %2$s" : "%1$s обриса системску ознаку %2$s",
- "%1$s updated system tag %3$s to %2$s" : "%1$s ажурира системску ознаку %3$s на %2$s",
- "%1$s assigned system tag %3$s to %2$s" : "%1$s додели системску ознаку %3$s на %2$s",
+ "Select tags to filter by" : "Одаберите ознаке по којима да се филтрира",
+ "No tags found" : "Нису нађене ознаке",
+ "Please select tags to filter by" : "Одаберите ознаке по којима да се филтрира",
+ "No files found for the selected tags" : "Ниједан фајл није нађен за одабране ознаке",
+ "Added system tag %1$s" : "Додата системска ознака %1$s",
+ "Added system tag {systemtag}" : "Додата системска ознака {systemtag}",
+ "%1$s added system tag %2$s" : "%1$s је додао системску ознаку %2$s",
+ "{actor} added system tag {systemtag}" : "{actor} је додао системску ознаку {systemtag}",
+ "Removed system tag %1$s" : "Уклоњена системска ознака %1$s",
+ "Removed system tag {systemtag}" : "Уклоњена системска ознака {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$sуклонио системску ознаку %2$s",
+ "{actor} removed system tag {systemtag}" : "{actor} уклонио системску ознаку {systemtag}",
+ "You created system tag %1$s" : "Направили сте системску ознаку %1$s",
+ "You created system tag {systemtag}" : "Направили сте системску ознаку {systemtag}",
+ "%1$s created system tag %2$s" : "%1$s направио системску ознаку %2$s",
+ "{actor} created system tag {systemtag}" : "{actor} направио системску ознаку {systemtag}",
+ "You deleted system tag %1$s" : "Избрисали сте системску ознаку %1$s",
+ "You deleted system tag {systemtag}" : "Избрисали сте системску ознаку {systemtag}",
+ "%1$s deleted system tag %2$s" : "%1$s обрисао системску ознаку %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} обрисао системску ознаку {systemtag}",
+ "You updated system tag %2$s to %1$s" : "Ажурирали сте системску ознаку %2$s на %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Ажурирали сте системску ознаку {oldsystemtag} на {newsystemtag}",
+ "%1$s updated system tag %3$s to %2$s" : "%1$s ажурирао системску ознаку %3$s на %2$s",
+ "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} ажурирао системску ознаку {oldsystemtag} на {newsystemtag}",
+ "You added system tag %2$s to %1$s" : "Додали сте системску ознаку %2$s на %1$s",
+ "You added system tag {systemtag} to {file}" : "Додали сте системску ознаку {systemtag} на {file}",
+ "%1$s added system tag %3$s to %2$s" : "%1$s додао системску ознаку %3$s на %2$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} додао системску ознаку {systemtag} на {file}",
+ "You removed system tag %2$s from %1$s" : "Уклонили сте системску ознаку %2$s са %1$s",
+ "You removed system tag {systemtag} from {file}" : "Уклонили сте системску ознаку {systemtag} са {file}",
+ "%1$s removed system tag %3$s from %2$s" : "%1$s уклонио системску ознаку %3$s са %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} уклонио системску ознаку {systemtag} са {file}",
+ "%s (restricted)" : "%s (ограничена)",
"%s (invisible)" : "%s (невидљива)",
+ "<strong>System tags</strong> for a file have been modified" : "<strong>Системске ознаке</strong> за фајл су измењене",
+ "Collaborative tags" : "Тимске ознаке",
+ "Create and edit collaborative tags. These tags affect all users." : "Правите и мењајте тимске ознаке. Ове ознаке се тичу свих корисника.",
+ "Select tag …" : "Одаберите ознаку …",
+ "Name" : "Назив",
+ "Delete" : "Обриши",
+ "Public" : "Јавна",
+ "Restricted" : "Ограничена",
+ "Invisible" : "Невидљива",
+ "Reset" : "Ресетуј",
"No files in here" : "Овде нема фајлова",
"No entries found in this folder" : "Нема ничега у овој фасцикли",
- "Name" : "назив",
- "Size" : "величина",
+ "Size" : "Величина",
"Modified" : "Измењен"
},
"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/systemtags/l10n/sr.json b/apps/systemtags/l10n/sr.json
index 2ea8c679e9e..3a90fe870eb 100644
--- a/apps/systemtags/l10n/sr.json
+++ b/apps/systemtags/l10n/sr.json
@@ -1,17 +1,56 @@
{ "translations": {
"Tags" : "Ознаке",
+ "Update" : "Ажурирај",
+ "Create" : "Направи",
+ "Select tag…" : "Одабери ознаку…",
"Tagged files" : "Означени фајлови",
- "<strong>System tags</strong> for a file have been modified" : "<strong>Системске ознаке</strong> за фајл су измењене",
- "%1$s assigned system tag %3$s" : "%1$s додели системску ознаку %3$s",
- "%1$s created system tag %2$s" : "%1$s направи системску ознаку %2$s",
- "%1$s deleted system tag %2$s" : "%1$s обриса системску ознаку %2$s",
- "%1$s updated system tag %3$s to %2$s" : "%1$s ажурира системску ознаку %3$s на %2$s",
- "%1$s assigned system tag %3$s to %2$s" : "%1$s додели системску ознаку %3$s на %2$s",
+ "Select tags to filter by" : "Одаберите ознаке по којима да се филтрира",
+ "No tags found" : "Нису нађене ознаке",
+ "Please select tags to filter by" : "Одаберите ознаке по којима да се филтрира",
+ "No files found for the selected tags" : "Ниједан фајл није нађен за одабране ознаке",
+ "Added system tag %1$s" : "Додата системска ознака %1$s",
+ "Added system tag {systemtag}" : "Додата системска ознака {systemtag}",
+ "%1$s added system tag %2$s" : "%1$s је додао системску ознаку %2$s",
+ "{actor} added system tag {systemtag}" : "{actor} је додао системску ознаку {systemtag}",
+ "Removed system tag %1$s" : "Уклоњена системска ознака %1$s",
+ "Removed system tag {systemtag}" : "Уклоњена системска ознака {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$sуклонио системску ознаку %2$s",
+ "{actor} removed system tag {systemtag}" : "{actor} уклонио системску ознаку {systemtag}",
+ "You created system tag %1$s" : "Направили сте системску ознаку %1$s",
+ "You created system tag {systemtag}" : "Направили сте системску ознаку {systemtag}",
+ "%1$s created system tag %2$s" : "%1$s направио системску ознаку %2$s",
+ "{actor} created system tag {systemtag}" : "{actor} направио системску ознаку {systemtag}",
+ "You deleted system tag %1$s" : "Избрисали сте системску ознаку %1$s",
+ "You deleted system tag {systemtag}" : "Избрисали сте системску ознаку {systemtag}",
+ "%1$s deleted system tag %2$s" : "%1$s обрисао системску ознаку %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} обрисао системску ознаку {systemtag}",
+ "You updated system tag %2$s to %1$s" : "Ажурирали сте системску ознаку %2$s на %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Ажурирали сте системску ознаку {oldsystemtag} на {newsystemtag}",
+ "%1$s updated system tag %3$s to %2$s" : "%1$s ажурирао системску ознаку %3$s на %2$s",
+ "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} ажурирао системску ознаку {oldsystemtag} на {newsystemtag}",
+ "You added system tag %2$s to %1$s" : "Додали сте системску ознаку %2$s на %1$s",
+ "You added system tag {systemtag} to {file}" : "Додали сте системску ознаку {systemtag} на {file}",
+ "%1$s added system tag %3$s to %2$s" : "%1$s додао системску ознаку %3$s на %2$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} додао системску ознаку {systemtag} на {file}",
+ "You removed system tag %2$s from %1$s" : "Уклонили сте системску ознаку %2$s са %1$s",
+ "You removed system tag {systemtag} from {file}" : "Уклонили сте системску ознаку {systemtag} са {file}",
+ "%1$s removed system tag %3$s from %2$s" : "%1$s уклонио системску ознаку %3$s са %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} уклонио системску ознаку {systemtag} са {file}",
+ "%s (restricted)" : "%s (ограничена)",
"%s (invisible)" : "%s (невидљива)",
+ "<strong>System tags</strong> for a file have been modified" : "<strong>Системске ознаке</strong> за фајл су измењене",
+ "Collaborative tags" : "Тимске ознаке",
+ "Create and edit collaborative tags. These tags affect all users." : "Правите и мењајте тимске ознаке. Ове ознаке се тичу свих корисника.",
+ "Select tag …" : "Одаберите ознаку …",
+ "Name" : "Назив",
+ "Delete" : "Обриши",
+ "Public" : "Јавна",
+ "Restricted" : "Ограничена",
+ "Invisible" : "Невидљива",
+ "Reset" : "Ресетуј",
"No files in here" : "Овде нема фајлова",
"No entries found in this folder" : "Нема ничега у овој фасцикли",
- "Name" : "назив",
- "Size" : "величина",
+ "Size" : "Величина",
"Modified" : "Измењен"
},"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/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/composer/autoload.php b/apps/testing/composer/autoload.php
new file mode 100644
index 00000000000..dc2a7034ffa
--- /dev/null
+++ b/apps/testing/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitTesting::getLoader();
diff --git a/apps/testing/composer/composer.json b/apps/testing/composer/composer.json
new file mode 100644
index 00000000000..4cee66ac094
--- /dev/null
+++ b/apps/testing/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "Testing"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\Testing\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/testing/composer/composer/ClassLoader.php b/apps/testing/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/testing/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/testing/composer/composer/LICENSE b/apps/testing/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/testing/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/testing/composer/composer/autoload_classmap.php b/apps/testing/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..ce8f4948cad
--- /dev/null
+++ b/apps/testing/composer/composer/autoload_classmap.php
@@ -0,0 +1,15 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Testing\\AlternativeHomeUserBackend' => $baseDir . '/../lib/AlternativeHomeUserBackend.php',
+ 'OCA\\Testing\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\Testing\\Controller\\ConfigController' => $baseDir . '/../lib/Controller/ConfigController.php',
+ 'OCA\\Testing\\Controller\\LockingController' => $baseDir . '/../lib/Controller/LockingController.php',
+ 'OCA\\Testing\\Controller\\RateLimitTestController' => $baseDir . '/../lib/Controller/RateLimitTestController.php',
+ 'OCA\\Testing\\Locking\\FakeDBLockingProvider' => $baseDir . '/../lib/Locking/FakeDBLockingProvider.php',
+);
diff --git a/apps/testing/composer/composer/autoload_namespaces.php b/apps/testing/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/testing/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/testing/composer/composer/autoload_psr4.php b/apps/testing/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..4ac8da6cc69
--- /dev/null
+++ b/apps/testing/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Testing\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/testing/composer/composer/autoload_real.php b/apps/testing/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..71369dc8a05
--- /dev/null
+++ b/apps/testing/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitTesting
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitTesting', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitTesting', 'loadClassLoader'));
+
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitTesting::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/testing/composer/composer/autoload_static.php b/apps/testing/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..0a6c8665f4e
--- /dev/null
+++ b/apps/testing/composer/composer/autoload_static.php
@@ -0,0 +1,41 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitTesting
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\Testing\\' => 12,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\Testing\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\Testing\\AlternativeHomeUserBackend' => __DIR__ . '/..' . '/../lib/AlternativeHomeUserBackend.php',
+ 'OCA\\Testing\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\Testing\\Controller\\ConfigController' => __DIR__ . '/..' . '/../lib/Controller/ConfigController.php',
+ 'OCA\\Testing\\Controller\\LockingController' => __DIR__ . '/..' . '/../lib/Controller/LockingController.php',
+ 'OCA\\Testing\\Controller\\RateLimitTestController' => __DIR__ . '/..' . '/../lib/Controller/RateLimitTestController.php',
+ 'OCA\\Testing\\Locking\\FakeDBLockingProvider' => __DIR__ . '/..' . '/../lib/Locking/FakeDBLockingProvider.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitTesting::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitTesting::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitTesting::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
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/css/settings-admin.css b/apps/theming/css/settings-admin.css
index b32ed189ceb..7270ec59b83 100644
--- a/apps/theming/css/settings-admin.css
+++ b/apps/theming/css/settings-admin.css
@@ -78,6 +78,7 @@ form.uploadButton {
#theming_settings_msg {
vertical-align: middle;
+ border-radius: 3px;
}
#theming-preview-logo {
diff --git a/apps/theming/js/settings-admin.js b/apps/theming/js/settings-admin.js
index d9e66284d14..44a799a19b4 100644
--- a/apps/theming/js/settings-admin.js
+++ b/apps/theming/js/settings-admin.js
@@ -141,6 +141,7 @@ $(document).ready(function () {
fail: function (e, response){
OC.msg.finishedError('#theming_settings_msg', response._response.jqXHR.responseJSON.data.message);
$('label#uploadlogo').addClass('icon-upload').removeClass('icon-loading-small');
+ $('#theming_settings_loading').hide();
}
};
var uploadParamsLogin = {
@@ -159,6 +160,7 @@ $(document).ready(function () {
fail: function (e, response){
$('label#upload-login-background').removeClass('icon-loading-small').addClass('icon-upload');
OC.msg.finishedError('#theming_settings_msg', response._response.jqXHR.responseJSON.data.message);
+ $('#theming_settings_loading').hide();
}
};
diff --git a/apps/theming/l10n/da.js b/apps/theming/l10n/da.js
index 120dab0521a..14e7bf8b0bd 100644
--- a/apps/theming/l10n/da.js
+++ b/apps/theming/l10n/da.js
@@ -9,6 +9,14 @@ OC.L10N.register(
"The given web address is too long" : "Webadressen er for lang",
"The given slogan is too long" : "Sloganet er for langt",
"The given color is invalid" : "Farven er ikke gyldig",
+ "There is no error, the file uploaded with success" : "Der skete ingen fejl, filen blev succesfuldt uploadet",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Den uploadede fil overstiger upload_max_filesize direktivet i php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Den uploadede fil overstiger MAX_FILE_SIZE indstilingen, som specificeret i HTML formularen",
+ "The uploaded file was only partially uploaded" : "Filen blev kun delvist uploadet.",
+ "No file was uploaded" : "Ingen fil uploadet",
+ "Missing a temporary folder" : "Manglende midlertidig mappe.",
+ "Failed to write file to disk." : "Fejl ved skrivning af fil til disk.",
+ "A PHP extension stopped the file upload." : "En PHP-udvidelse stoppede file uploaden.",
"No file uploaded" : "Ingen fil uploadet",
"Unsupported image type" : "Ikke-understøttet billede format",
"You are already using a custom theme" : "Du bruger allerede et brugerdefineret tema",
diff --git a/apps/theming/l10n/da.json b/apps/theming/l10n/da.json
index 8403820fab2..8c2cac7b07e 100644
--- a/apps/theming/l10n/da.json
+++ b/apps/theming/l10n/da.json
@@ -7,6 +7,14 @@
"The given web address is too long" : "Webadressen er for lang",
"The given slogan is too long" : "Sloganet er for langt",
"The given color is invalid" : "Farven er ikke gyldig",
+ "There is no error, the file uploaded with success" : "Der skete ingen fejl, filen blev succesfuldt uploadet",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Den uploadede fil overstiger upload_max_filesize direktivet i php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Den uploadede fil overstiger MAX_FILE_SIZE indstilingen, som specificeret i HTML formularen",
+ "The uploaded file was only partially uploaded" : "Filen blev kun delvist uploadet.",
+ "No file was uploaded" : "Ingen fil uploadet",
+ "Missing a temporary folder" : "Manglende midlertidig mappe.",
+ "Failed to write file to disk." : "Fejl ved skrivning af fil til disk.",
+ "A PHP extension stopped the file upload." : "En PHP-udvidelse stoppede file uploaden.",
"No file uploaded" : "Ingen fil uploadet",
"Unsupported image type" : "Ikke-understøttet billede format",
"You are already using a custom theme" : "Du bruger allerede et brugerdefineret tema",
diff --git a/apps/theming/l10n/de.js b/apps/theming/l10n/de.js
index 52c12d1f093..86226c364b1 100644
--- a/apps/theming/l10n/de.js
+++ b/apps/theming/l10n/de.js
@@ -9,6 +9,14 @@ OC.L10N.register(
"The given web address is too long" : "Die eingegebene Adresse ist zu lang",
"The given slogan is too long" : "Der eingegebene Slogan ist zu lang",
"The given color is invalid" : "Die gewählte Farbe ist ungültig",
+ "There is no error, the file uploaded with success" : "Es ist kein Fehler aufgetreten. Die Datei wurde erfolgreich hochgeladen.",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Die hochgeladene Datei überschreitet die upload_max_filesize-Vorgabe in php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Die Datei ist größer, als die MAX_FILE_SIZE-Vorgabe erlaubt, die im HTML-Formular spezifiziert ist",
+ "The uploaded file was only partially uploaded" : "Die Datei konnte nur teilweise übertragen werden",
+ "No file was uploaded" : "Es wurde keine Datei hochgeladen",
+ "Missing a temporary folder" : "Kein temporärer Ordner vorhanden",
+ "Failed to write file to disk." : "Fehler beim Schreiben der Datei auf die Festplatte.",
+ "A PHP extension stopped the file upload." : "Eine PHP-Erweiterung hat das Hochladen der Datei gestoppt.",
"No file uploaded" : "Keine Datei hochgeladen",
"Unsupported image type" : "Nicht unterstütztes Bild-Format",
"You are already using a custom theme" : "Du benutzt bereits ein eigenes Thema",
diff --git a/apps/theming/l10n/de.json b/apps/theming/l10n/de.json
index b9684f0a672..dc88a7be984 100644
--- a/apps/theming/l10n/de.json
+++ b/apps/theming/l10n/de.json
@@ -7,6 +7,14 @@
"The given web address is too long" : "Die eingegebene Adresse ist zu lang",
"The given slogan is too long" : "Der eingegebene Slogan ist zu lang",
"The given color is invalid" : "Die gewählte Farbe ist ungültig",
+ "There is no error, the file uploaded with success" : "Es ist kein Fehler aufgetreten. Die Datei wurde erfolgreich hochgeladen.",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Die hochgeladene Datei überschreitet die upload_max_filesize-Vorgabe in php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Die Datei ist größer, als die MAX_FILE_SIZE-Vorgabe erlaubt, die im HTML-Formular spezifiziert ist",
+ "The uploaded file was only partially uploaded" : "Die Datei konnte nur teilweise übertragen werden",
+ "No file was uploaded" : "Es wurde keine Datei hochgeladen",
+ "Missing a temporary folder" : "Kein temporärer Ordner vorhanden",
+ "Failed to write file to disk." : "Fehler beim Schreiben der Datei auf die Festplatte.",
+ "A PHP extension stopped the file upload." : "Eine PHP-Erweiterung hat das Hochladen der Datei gestoppt.",
"No file uploaded" : "Keine Datei hochgeladen",
"Unsupported image type" : "Nicht unterstütztes Bild-Format",
"You are already using a custom theme" : "Du benutzt bereits ein eigenes Thema",
diff --git a/apps/theming/l10n/de_DE.js b/apps/theming/l10n/de_DE.js
index 8e9ec2fe8d9..88dab08c44a 100644
--- a/apps/theming/l10n/de_DE.js
+++ b/apps/theming/l10n/de_DE.js
@@ -9,6 +9,14 @@ OC.L10N.register(
"The given web address is too long" : "Die eingegebene Adresse ist zu lang",
"The given slogan is too long" : "Der eingegebene Slogan ist zu lang",
"The given color is invalid" : "Die gewählte Farbe ist ungültig",
+ "There is no error, the file uploaded with success" : "Es ist kein Fehler aufgetreten. Die Datei wurde erfolgreich hochgeladen.",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Die hochgeladene Datei überschreitet die upload_max_filesize-Vorgabe in php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Die Datei ist größer, als die MAX_FILE_SIZE-Vorgabe erlaubt, die im HTML-Formular spezifiziert ist",
+ "The uploaded file was only partially uploaded" : "Die Datei konnte nur teilweise übertragen werden",
+ "No file was uploaded" : "Es wurde keine Datei hochgeladen",
+ "Missing a temporary folder" : "Kein temporärer Ordner vorhanden",
+ "Failed to write file to disk." : "Fehler beim Schreiben der Datei auf die Festplatte.",
+ "A PHP extension stopped the file upload." : "Eine PHP-Erweiterung hat das Hochladen der Datei gestoppt.",
"No file uploaded" : "Keine Datei hochgeladen",
"Unsupported image type" : "Nicht unterstütztes Bild-Format",
"You are already using a custom theme" : "Sie benutzen bereits ein eigenes Thema",
diff --git a/apps/theming/l10n/de_DE.json b/apps/theming/l10n/de_DE.json
index f4dfa4d6bba..14043ad1fd6 100644
--- a/apps/theming/l10n/de_DE.json
+++ b/apps/theming/l10n/de_DE.json
@@ -7,6 +7,14 @@
"The given web address is too long" : "Die eingegebene Adresse ist zu lang",
"The given slogan is too long" : "Der eingegebene Slogan ist zu lang",
"The given color is invalid" : "Die gewählte Farbe ist ungültig",
+ "There is no error, the file uploaded with success" : "Es ist kein Fehler aufgetreten. Die Datei wurde erfolgreich hochgeladen.",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Die hochgeladene Datei überschreitet die upload_max_filesize-Vorgabe in php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Die Datei ist größer, als die MAX_FILE_SIZE-Vorgabe erlaubt, die im HTML-Formular spezifiziert ist",
+ "The uploaded file was only partially uploaded" : "Die Datei konnte nur teilweise übertragen werden",
+ "No file was uploaded" : "Es wurde keine Datei hochgeladen",
+ "Missing a temporary folder" : "Kein temporärer Ordner vorhanden",
+ "Failed to write file to disk." : "Fehler beim Schreiben der Datei auf die Festplatte.",
+ "A PHP extension stopped the file upload." : "Eine PHP-Erweiterung hat das Hochladen der Datei gestoppt.",
"No file uploaded" : "Keine Datei hochgeladen",
"Unsupported image type" : "Nicht unterstütztes Bild-Format",
"You are already using a custom theme" : "Sie benutzen bereits ein eigenes Thema",
diff --git a/apps/theming/l10n/en_GB.js b/apps/theming/l10n/en_GB.js
index 8d18b1ff95c..768cf51aba5 100644
--- a/apps/theming/l10n/en_GB.js
+++ b/apps/theming/l10n/en_GB.js
@@ -9,6 +9,14 @@ OC.L10N.register(
"The given web address is too long" : "The given web address is too long",
"The given slogan is too long" : "The given slogan is too long",
"The given color is invalid" : "The given colour is invalid",
+ "There is no error, the file uploaded with success" : "There is no error, the file uploaded with success",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "The uploaded file exceeds the upload_max_filesize directive in php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
+ "The uploaded file was only partially uploaded" : "The uploaded file was only partially uploaded",
+ "No file was uploaded" : "No file was uploaded",
+ "Missing a temporary folder" : "Missing a temporary folder",
+ "Failed to write file to disk." : "Failed to write file to disk.",
+ "A PHP extension stopped the file upload." : "A PHP extension stopped the file upload.",
"No file uploaded" : "No file uploaded",
"Unsupported image type" : "Unsupported image type",
"You are already using a custom theme" : "You are already using a custom theme",
diff --git a/apps/theming/l10n/en_GB.json b/apps/theming/l10n/en_GB.json
index ace85849a36..cd6f2d72ab0 100644
--- a/apps/theming/l10n/en_GB.json
+++ b/apps/theming/l10n/en_GB.json
@@ -7,6 +7,14 @@
"The given web address is too long" : "The given web address is too long",
"The given slogan is too long" : "The given slogan is too long",
"The given color is invalid" : "The given colour is invalid",
+ "There is no error, the file uploaded with success" : "There is no error, the file uploaded with success",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "The uploaded file exceeds the upload_max_filesize directive in php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
+ "The uploaded file was only partially uploaded" : "The uploaded file was only partially uploaded",
+ "No file was uploaded" : "No file was uploaded",
+ "Missing a temporary folder" : "Missing a temporary folder",
+ "Failed to write file to disk." : "Failed to write file to disk.",
+ "A PHP extension stopped the file upload." : "A PHP extension stopped the file upload.",
"No file uploaded" : "No file uploaded",
"Unsupported image type" : "Unsupported image type",
"You are already using a custom theme" : "You are already using a custom theme",
diff --git a/apps/theming/l10n/es.js b/apps/theming/l10n/es.js
index dbcaed2cfe4..e9a7e3efb37 100644
--- a/apps/theming/l10n/es.js
+++ b/apps/theming/l10n/es.js
@@ -9,6 +9,14 @@ OC.L10N.register(
"The given web address is too long" : "La dirección provista es muy larga",
"The given slogan is too long" : "El eslogan provisto es muy largo",
"The given color is invalid" : "El color provisto es inválido",
+ "There is no error, the file uploaded with success" : "No ha habido errores, el archivo ha subido satisfactoriamente",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El archivo para subir excede la directiva upload_max_filesize en php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo para subir excede la directiva MAX_FILE_SIZE que se especifió en el formulario HTML",
+ "The uploaded file was only partially uploaded" : "El archivo para subir ha sido solo parcialmente subido",
+ "No file was uploaded" : "No se ha subido ningún archivo",
+ "Missing a temporary folder" : "Falta una carpeta temporal",
+ "Failed to write file to disk." : "Fallo al escribir el archivo al disco.",
+ "A PHP extension stopped the file upload." : "Una extensión de PHP ha detenido la subida del archivo.",
"No file uploaded" : "No se ha subido archivo",
"Unsupported image type" : "Tipo de imagen no soportado",
"You are already using a custom theme" : "Usted ya usa un tema personalizado",
diff --git a/apps/theming/l10n/es.json b/apps/theming/l10n/es.json
index 0c183dc78e5..32a2cfca9cb 100644
--- a/apps/theming/l10n/es.json
+++ b/apps/theming/l10n/es.json
@@ -7,6 +7,14 @@
"The given web address is too long" : "La dirección provista es muy larga",
"The given slogan is too long" : "El eslogan provisto es muy largo",
"The given color is invalid" : "El color provisto es inválido",
+ "There is no error, the file uploaded with success" : "No ha habido errores, el archivo ha subido satisfactoriamente",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El archivo para subir excede la directiva upload_max_filesize en php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo para subir excede la directiva MAX_FILE_SIZE que se especifió en el formulario HTML",
+ "The uploaded file was only partially uploaded" : "El archivo para subir ha sido solo parcialmente subido",
+ "No file was uploaded" : "No se ha subido ningún archivo",
+ "Missing a temporary folder" : "Falta una carpeta temporal",
+ "Failed to write file to disk." : "Fallo al escribir el archivo al disco.",
+ "A PHP extension stopped the file upload." : "Una extensión de PHP ha detenido la subida del archivo.",
"No file uploaded" : "No se ha subido archivo",
"Unsupported image type" : "Tipo de imagen no soportado",
"You are already using a custom theme" : "Usted ya usa un tema personalizado",
diff --git a/apps/theming/l10n/es_CO.js b/apps/theming/l10n/es_CO.js
new file mode 100644
index 00000000000..4f98160b142
--- /dev/null
+++ b/apps/theming/l10n/es_CO.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_CO.json b/apps/theming/l10n/es_CO.json
new file mode 100644
index 00000000000..866eb07f7fa
--- /dev/null
+++ b/apps/theming/l10n/es_CO.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_CR.js b/apps/theming/l10n/es_CR.js
new file mode 100644
index 00000000000..4f98160b142
--- /dev/null
+++ b/apps/theming/l10n/es_CR.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_CR.json b/apps/theming/l10n/es_CR.json
new file mode 100644
index 00000000000..866eb07f7fa
--- /dev/null
+++ b/apps/theming/l10n/es_CR.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_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/l10n/es_MX.js b/apps/theming/l10n/es_MX.js
index 9e846a5eb92..4f98160b142 100644
--- a/apps/theming/l10n/es_MX.js
+++ b/apps/theming/l10n/es_MX.js
@@ -9,6 +9,14 @@ OC.L10N.register(
"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",
diff --git a/apps/theming/l10n/es_MX.json b/apps/theming/l10n/es_MX.json
index eb2632daf68..866eb07f7fa 100644
--- a/apps/theming/l10n/es_MX.json
+++ b/apps/theming/l10n/es_MX.json
@@ -7,6 +7,14 @@
"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",
diff --git a/apps/theming/l10n/fi.js b/apps/theming/l10n/fi.js
index 2fc502c9ba3..882231db1f8 100644
--- a/apps/theming/l10n/fi.js
+++ b/apps/theming/l10n/fi.js
@@ -9,6 +9,10 @@ OC.L10N.register(
"The given web address is too long" : "Verkko-osoite on liian pitkä",
"The given slogan is too long" : "Slogani on liian pitkä",
"The given color is invalid" : "Väri on virheellinen",
+ "No file was uploaded" : "Tiedostoa ei lähetetty",
+ "Missing a temporary folder" : "Väliaikaiskansio puuttuu",
+ "Failed to write file to disk." : "Levylle kirjoittaminen epäonnistui.",
+ "A PHP extension stopped the file upload." : "PHP-laajennus pysäytti tiedoston lähetyksen.",
"No file uploaded" : "Ei tiedostoa lähetetty",
"Unsupported image type" : "Ei-tuettu kuvatiedostomuoto",
"You are already using a custom theme" : "Käytät jo kustomoitua ulkoasua",
diff --git a/apps/theming/l10n/fi.json b/apps/theming/l10n/fi.json
index bf4fd40620e..3ac21388f16 100644
--- a/apps/theming/l10n/fi.json
+++ b/apps/theming/l10n/fi.json
@@ -7,6 +7,10 @@
"The given web address is too long" : "Verkko-osoite on liian pitkä",
"The given slogan is too long" : "Slogani on liian pitkä",
"The given color is invalid" : "Väri on virheellinen",
+ "No file was uploaded" : "Tiedostoa ei lähetetty",
+ "Missing a temporary folder" : "Väliaikaiskansio puuttuu",
+ "Failed to write file to disk." : "Levylle kirjoittaminen epäonnistui.",
+ "A PHP extension stopped the file upload." : "PHP-laajennus pysäytti tiedoston lähetyksen.",
"No file uploaded" : "Ei tiedostoa lähetetty",
"Unsupported image type" : "Ei-tuettu kuvatiedostomuoto",
"You are already using a custom theme" : "Käytät jo kustomoitua ulkoasua",
diff --git a/apps/theming/l10n/fr.js b/apps/theming/l10n/fr.js
index ed5ac6af520..634f4a6f8a2 100644
--- a/apps/theming/l10n/fr.js
+++ b/apps/theming/l10n/fr.js
@@ -9,6 +9,14 @@ OC.L10N.register(
"The given web address is too long" : "L'adresse web donnée est trop longue",
"The given slogan is too long" : "Le slogan donné est trop long",
"The given color is invalid" : "La couleur donnée est invalide",
+ "There is no error, the file uploaded with success" : "Aucune erreur, le fichier a été téléversé avec succès",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Le fichier téléversé dépasse la valeur upload_max_filesize située dans le fichier php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Le fichier téléversé dépasse la valeur MAX_FILE_SIZE spécifiée dans le formulaire HTML",
+ "The uploaded file was only partially uploaded" : "Le fichier n'a été que partiellement téléversé",
+ "No file was uploaded" : "Aucun fichier téléversé",
+ "Missing a temporary folder" : "Absence de dossier temporaire",
+ "Failed to write file to disk." : "Erreur d'écriture du fichier sur le disque.",
+ "A PHP extension stopped the file upload." : "Une extension PHP a arrêté le téléversement du fichier.",
"No file uploaded" : "Aucun fichier téléversé",
"Unsupported image type" : "Ce type d'image n'est pas pris en charge",
"You are already using a custom theme" : "Vous utilisez déjà un thème personnalisé",
diff --git a/apps/theming/l10n/fr.json b/apps/theming/l10n/fr.json
index a6d45297e25..aac3b06b6d3 100644
--- a/apps/theming/l10n/fr.json
+++ b/apps/theming/l10n/fr.json
@@ -7,6 +7,14 @@
"The given web address is too long" : "L'adresse web donnée est trop longue",
"The given slogan is too long" : "Le slogan donné est trop long",
"The given color is invalid" : "La couleur donnée est invalide",
+ "There is no error, the file uploaded with success" : "Aucune erreur, le fichier a été téléversé avec succès",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Le fichier téléversé dépasse la valeur upload_max_filesize située dans le fichier php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Le fichier téléversé dépasse la valeur MAX_FILE_SIZE spécifiée dans le formulaire HTML",
+ "The uploaded file was only partially uploaded" : "Le fichier n'a été que partiellement téléversé",
+ "No file was uploaded" : "Aucun fichier téléversé",
+ "Missing a temporary folder" : "Absence de dossier temporaire",
+ "Failed to write file to disk." : "Erreur d'écriture du fichier sur le disque.",
+ "A PHP extension stopped the file upload." : "Une extension PHP a arrêté le téléversement du fichier.",
"No file uploaded" : "Aucun fichier téléversé",
"Unsupported image type" : "Ce type d'image n'est pas pris en charge",
"You are already using a custom theme" : "Vous utilisez déjà un thème personnalisé",
diff --git a/apps/theming/l10n/hu.js b/apps/theming/l10n/hu.js
index c9fb5581ae8..6bf53bc5293 100644
--- a/apps/theming/l10n/hu.js
+++ b/apps/theming/l10n/hu.js
@@ -9,6 +9,14 @@ OC.L10N.register(
"The given web address is too long" : "A bevitt webcím túl hosszú",
"The given slogan is too long" : "A bevitt szlogen túl hosszú",
"The given color is invalid" : "A bevitt szín érvénytelen",
+ "There is no error, the file uploaded with success" : "Nincs hiba, a feltöltés sikeres",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "A feltöltés mérete meghaladja a php.ini upload_max_filesize direktívájában meghatározottat.",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "A HTML-ben megadott MAX_FILE_SIZE méretét meghaladja a feltöltés mérete",
+ "The uploaded file was only partially uploaded" : "Csak részben került feltöltésre a fájl",
+ "No file was uploaded" : "Nincs feltöltött fájl",
+ "Missing a temporary folder" : "Átmeneti mappa hiányzik",
+ "Failed to write file to disk." : "Lemezre írás sikertelen.",
+ "A PHP extension stopped the file upload." : "Egy PHP kiterjesztés megakadályozta a feltöltést.",
"No file uploaded" : "Nincs fájl feltöltve",
"Unsupported image type" : "Nem támogatott képtípus",
"You are already using a custom theme" : "Már egyedi témát használ",
diff --git a/apps/theming/l10n/hu.json b/apps/theming/l10n/hu.json
index 1868959ef65..3bb00c37414 100644
--- a/apps/theming/l10n/hu.json
+++ b/apps/theming/l10n/hu.json
@@ -7,6 +7,14 @@
"The given web address is too long" : "A bevitt webcím túl hosszú",
"The given slogan is too long" : "A bevitt szlogen túl hosszú",
"The given color is invalid" : "A bevitt szín érvénytelen",
+ "There is no error, the file uploaded with success" : "Nincs hiba, a feltöltés sikeres",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "A feltöltés mérete meghaladja a php.ini upload_max_filesize direktívájában meghatározottat.",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "A HTML-ben megadott MAX_FILE_SIZE méretét meghaladja a feltöltés mérete",
+ "The uploaded file was only partially uploaded" : "Csak részben került feltöltésre a fájl",
+ "No file was uploaded" : "Nincs feltöltött fájl",
+ "Missing a temporary folder" : "Átmeneti mappa hiányzik",
+ "Failed to write file to disk." : "Lemezre írás sikertelen.",
+ "A PHP extension stopped the file upload." : "Egy PHP kiterjesztés megakadályozta a feltöltést.",
"No file uploaded" : "Nincs fájl feltöltve",
"Unsupported image type" : "Nem támogatott képtípus",
"You are already using a custom theme" : "Már egyedi témát használ",
diff --git a/apps/theming/l10n/is.js b/apps/theming/l10n/is.js
index 1c97194763f..b09f2bf2801 100644
--- a/apps/theming/l10n/is.js
+++ b/apps/theming/l10n/is.js
@@ -9,6 +9,14 @@ OC.L10N.register(
"The given web address is too long" : "Uppgefið veffang er of langt",
"The given slogan is too long" : "Uppgefið slagorð er of langt",
"The given color is invalid" : "Uppgefinn litur er ógildur",
+ "There is no error, the file uploaded with success" : "Engin villa, innsending heppnaðist",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Innsend skrá er stærri en upload_max stillingin í php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Innsenda skráin er stærri en MAX_FILE_SIZE sem skilgreint er í HTML sniðinu",
+ "The uploaded file was only partially uploaded" : "Einungis hluti af innsendri skrá skilaði sér",
+ "No file was uploaded" : "Engin skrá skilaði sér",
+ "Missing a temporary folder" : "Vantar bráðabirgðamöppu",
+ "Failed to write file to disk." : "Tókst ekki að skrifa skrá á disk.",
+ "A PHP extension stopped the file upload." : "PHP-viðbót stöðvaði innsendingu skráar.",
"No file uploaded" : "Engin skrá var send inn",
"Unsupported image type" : "Óstudd gerð myndar",
"You are already using a custom theme" : "Þú ert nú þegar að nota sérsniðið þema",
diff --git a/apps/theming/l10n/is.json b/apps/theming/l10n/is.json
index 0e75a583c11..2489448cb78 100644
--- a/apps/theming/l10n/is.json
+++ b/apps/theming/l10n/is.json
@@ -7,6 +7,14 @@
"The given web address is too long" : "Uppgefið veffang er of langt",
"The given slogan is too long" : "Uppgefið slagorð er of langt",
"The given color is invalid" : "Uppgefinn litur er ógildur",
+ "There is no error, the file uploaded with success" : "Engin villa, innsending heppnaðist",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Innsend skrá er stærri en upload_max stillingin í php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Innsenda skráin er stærri en MAX_FILE_SIZE sem skilgreint er í HTML sniðinu",
+ "The uploaded file was only partially uploaded" : "Einungis hluti af innsendri skrá skilaði sér",
+ "No file was uploaded" : "Engin skrá skilaði sér",
+ "Missing a temporary folder" : "Vantar bráðabirgðamöppu",
+ "Failed to write file to disk." : "Tókst ekki að skrifa skrá á disk.",
+ "A PHP extension stopped the file upload." : "PHP-viðbót stöðvaði innsendingu skráar.",
"No file uploaded" : "Engin skrá var send inn",
"Unsupported image type" : "Óstudd gerð myndar",
"You are already using a custom theme" : "Þú ert nú þegar að nota sérsniðið þema",
diff --git a/apps/theming/l10n/it.js b/apps/theming/l10n/it.js
index 06747e43aa7..33e18252f2b 100644
--- a/apps/theming/l10n/it.js
+++ b/apps/theming/l10n/it.js
@@ -9,6 +9,14 @@ OC.L10N.register(
"The given web address is too long" : "Questo indirizzo web è troppo lungo",
"The given slogan is too long" : "Questo slogan è troppo lungo",
"The given color is invalid" : "Questo colore non è valido",
+ "There is no error, the file uploaded with success" : "Non ci sono errori, il file è stato caricato correttamente",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Il file caricato supera la direttiva upload_max_filesize in php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Il file caricato supera la direttiva MAX_FILE_SIZE specificata nel modulo HTML",
+ "The uploaded file was only partially uploaded" : "Il file è stato caricato solo parzialmente",
+ "No file was uploaded" : "Non è stato caricato alcun file",
+ "Missing a temporary folder" : "Manca una cartella temporanea",
+ "Failed to write file to disk." : "Scrittura su disco non riuscita",
+ "A PHP extension stopped the file upload." : "Un'estensione PHP ha fermato il caricamento del file.",
"No file uploaded" : "Nessun file caricato",
"Unsupported image type" : "Tipo di immagine non supportato",
"You are already using a custom theme" : "Stai già usando un tema personalizzato",
diff --git a/apps/theming/l10n/it.json b/apps/theming/l10n/it.json
index 54517d5ba47..56c1a122765 100644
--- a/apps/theming/l10n/it.json
+++ b/apps/theming/l10n/it.json
@@ -7,6 +7,14 @@
"The given web address is too long" : "Questo indirizzo web è troppo lungo",
"The given slogan is too long" : "Questo slogan è troppo lungo",
"The given color is invalid" : "Questo colore non è valido",
+ "There is no error, the file uploaded with success" : "Non ci sono errori, il file è stato caricato correttamente",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Il file caricato supera la direttiva upload_max_filesize in php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Il file caricato supera la direttiva MAX_FILE_SIZE specificata nel modulo HTML",
+ "The uploaded file was only partially uploaded" : "Il file è stato caricato solo parzialmente",
+ "No file was uploaded" : "Non è stato caricato alcun file",
+ "Missing a temporary folder" : "Manca una cartella temporanea",
+ "Failed to write file to disk." : "Scrittura su disco non riuscita",
+ "A PHP extension stopped the file upload." : "Un'estensione PHP ha fermato il caricamento del file.",
"No file uploaded" : "Nessun file caricato",
"Unsupported image type" : "Tipo di immagine non supportato",
"You are already using a custom theme" : "Stai già usando un tema personalizzato",
diff --git a/apps/theming/l10n/nb.js b/apps/theming/l10n/nb.js
index 9b286698355..f3ae7b15a97 100644
--- a/apps/theming/l10n/nb.js
+++ b/apps/theming/l10n/nb.js
@@ -9,6 +9,14 @@ OC.L10N.register(
"The given web address is too long" : "Nettadressen er for lang",
"The given slogan is too long" : "Slagordet er for langt",
"The given color is invalid" : "Fargen er ugyldig",
+ "There is no error, the file uploaded with success" : "Det er ingen feil, opplastingen av filen var vellykket",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Filen er større enn grensen satt i upload_max_filesize i php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Filen du prøvde å laste opp er større enn grensen satt i MAX_FILE_SIZE i HTML-skjemaet",
+ "The uploaded file was only partially uploaded" : "Filen ble bare delvis lastet opp",
+ "No file was uploaded" : "Ingen filer ble lastet opp",
+ "Missing a temporary folder" : "Mangler midlertidig mappe",
+ "Failed to write file to disk." : "Klarte ikke å skrive til disk.",
+ "A PHP extension stopped the file upload." : "En PHP-utvidelse stoppet filopplastingen.",
"No file uploaded" : "Ingen fil lastet opp",
"Unsupported image type" : "Filtypen støttes ikke",
"You are already using a custom theme" : "Du bruker allerede en egendefinert drakt",
diff --git a/apps/theming/l10n/nb.json b/apps/theming/l10n/nb.json
index 6557edea2b8..841c215d0d9 100644
--- a/apps/theming/l10n/nb.json
+++ b/apps/theming/l10n/nb.json
@@ -7,6 +7,14 @@
"The given web address is too long" : "Nettadressen er for lang",
"The given slogan is too long" : "Slagordet er for langt",
"The given color is invalid" : "Fargen er ugyldig",
+ "There is no error, the file uploaded with success" : "Det er ingen feil, opplastingen av filen var vellykket",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Filen er større enn grensen satt i upload_max_filesize i php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Filen du prøvde å laste opp er større enn grensen satt i MAX_FILE_SIZE i HTML-skjemaet",
+ "The uploaded file was only partially uploaded" : "Filen ble bare delvis lastet opp",
+ "No file was uploaded" : "Ingen filer ble lastet opp",
+ "Missing a temporary folder" : "Mangler midlertidig mappe",
+ "Failed to write file to disk." : "Klarte ikke å skrive til disk.",
+ "A PHP extension stopped the file upload." : "En PHP-utvidelse stoppet filopplastingen.",
"No file uploaded" : "Ingen fil lastet opp",
"Unsupported image type" : "Filtypen støttes ikke",
"You are already using a custom theme" : "Du bruker allerede en egendefinert drakt",
diff --git a/apps/theming/l10n/nl.js b/apps/theming/l10n/nl.js
index 5ba8066a63e..ceb5ce0a8c7 100644
--- a/apps/theming/l10n/nl.js
+++ b/apps/theming/l10n/nl.js
@@ -9,6 +9,14 @@ OC.L10N.register(
"The given web address is too long" : "Het opgegeven internetadres is te lang",
"The given slogan is too long" : "De opgegeven slagzin is te lang",
"The given color is invalid" : "De opgegeven kleur is ongeldig",
+ "There is no error, the file uploaded with success" : "Het bestand is succesvol geüpload.",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Het geüploade bestand overschrijdt de upload_max_filesize richtlijn in php.ini:",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Het bestand overschrijdt de MAX_FILE_SIZE richtlijn die is opgegeven in het HTML formulier",
+ "The uploaded file was only partially uploaded" : "Het bestand is slechts gedeeltelijk geüpload",
+ "No file was uploaded" : "Er is geen bestand geüpload",
+ "Missing a temporary folder" : "Er ontbreekt een tijdelijke map",
+ "Failed to write file to disk." : "Schrijven van het bestand naar schijf mislukte.",
+ "A PHP extension stopped the file upload." : "Een PHP extensie heeft de upload gestopt.",
"No file uploaded" : "Geen bestand geüpload",
"Unsupported image type" : "Afbeeldingstype wordt niet ondersteund",
"You are already using a custom theme" : "Je gebruikt al een maatwerkthema",
diff --git a/apps/theming/l10n/nl.json b/apps/theming/l10n/nl.json
index f04bc21f250..ec031703cf2 100644
--- a/apps/theming/l10n/nl.json
+++ b/apps/theming/l10n/nl.json
@@ -7,6 +7,14 @@
"The given web address is too long" : "Het opgegeven internetadres is te lang",
"The given slogan is too long" : "De opgegeven slagzin is te lang",
"The given color is invalid" : "De opgegeven kleur is ongeldig",
+ "There is no error, the file uploaded with success" : "Het bestand is succesvol geüpload.",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Het geüploade bestand overschrijdt de upload_max_filesize richtlijn in php.ini:",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Het bestand overschrijdt de MAX_FILE_SIZE richtlijn die is opgegeven in het HTML formulier",
+ "The uploaded file was only partially uploaded" : "Het bestand is slechts gedeeltelijk geüpload",
+ "No file was uploaded" : "Er is geen bestand geüpload",
+ "Missing a temporary folder" : "Er ontbreekt een tijdelijke map",
+ "Failed to write file to disk." : "Schrijven van het bestand naar schijf mislukte.",
+ "A PHP extension stopped the file upload." : "Een PHP extensie heeft de upload gestopt.",
"No file uploaded" : "Geen bestand geüpload",
"Unsupported image type" : "Afbeeldingstype wordt niet ondersteund",
"You are already using a custom theme" : "Je gebruikt al een maatwerkthema",
diff --git a/apps/theming/l10n/pl.js b/apps/theming/l10n/pl.js
index a623a2bbcbf..3743426eb37 100644
--- a/apps/theming/l10n/pl.js
+++ b/apps/theming/l10n/pl.js
@@ -9,6 +9,14 @@ OC.L10N.register(
"The given web address is too long" : "Wpisany adres internetowy jest zbyt długi",
"The given slogan is too long" : "Wpisany slogan jest zbyt długi",
"The given color is invalid" : "Podany kolor jest nieprawidłowy",
+ "There is no error, the file uploaded with success" : "Brak błędów, plik wysłano poprawnie.",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Wgrany plik przekracza wartość upload_max_filesize zdefiniowaną w php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Wysłany plik przekracza wielkość dyrektywy MAX_FILE_SIZE określonej w formularzu HTML",
+ "The uploaded file was only partially uploaded" : "Załadowany plik został wysłany tylko częściowo.",
+ "No file was uploaded" : "Nie wysłano żadnego pliku",
+ "Missing a temporary folder" : "Brak folderu tymczasowego",
+ "Failed to write file to disk." : "Błąd zapisu na dysk.",
+ "A PHP extension stopped the file upload." : "Rozszerzenie PHP zatrzymało wysyłanie pliku.",
"No file uploaded" : "Nie wysłano pliku",
"Unsupported image type" : "Nieobsługiwany typ zdjęcia",
"You are already using a custom theme" : "Używasz już motywu niestandarowego",
diff --git a/apps/theming/l10n/pl.json b/apps/theming/l10n/pl.json
index 241f45ea2e2..58d0fb4c877 100644
--- a/apps/theming/l10n/pl.json
+++ b/apps/theming/l10n/pl.json
@@ -7,6 +7,14 @@
"The given web address is too long" : "Wpisany adres internetowy jest zbyt długi",
"The given slogan is too long" : "Wpisany slogan jest zbyt długi",
"The given color is invalid" : "Podany kolor jest nieprawidłowy",
+ "There is no error, the file uploaded with success" : "Brak błędów, plik wysłano poprawnie.",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Wgrany plik przekracza wartość upload_max_filesize zdefiniowaną w php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Wysłany plik przekracza wielkość dyrektywy MAX_FILE_SIZE określonej w formularzu HTML",
+ "The uploaded file was only partially uploaded" : "Załadowany plik został wysłany tylko częściowo.",
+ "No file was uploaded" : "Nie wysłano żadnego pliku",
+ "Missing a temporary folder" : "Brak folderu tymczasowego",
+ "Failed to write file to disk." : "Błąd zapisu na dysk.",
+ "A PHP extension stopped the file upload." : "Rozszerzenie PHP zatrzymało wysyłanie pliku.",
"No file uploaded" : "Nie wysłano pliku",
"Unsupported image type" : "Nieobsługiwany typ zdjęcia",
"You are already using a custom theme" : "Używasz już motywu niestandarowego",
diff --git a/apps/theming/l10n/pt_BR.js b/apps/theming/l10n/pt_BR.js
index 1f05a513bd4..6ea5b601ae9 100644
--- a/apps/theming/l10n/pt_BR.js
+++ b/apps/theming/l10n/pt_BR.js
@@ -9,6 +9,14 @@ OC.L10N.register(
"The given web address is too long" : "O endereço web fornecido é muito longo",
"The given slogan is too long" : "O slogan dado é muito longo",
"The given color is invalid" : "A cor fornecida é inválida",
+ "There is no error, the file uploaded with success" : "Sem erros. Arquivo enviado com sucesso",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "O arquivo enviado excede a diretiva upload_max_filesize do php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "O arquivo enviado excede a diretiva MAX_FILE_SIZE especificada no formulário HTML",
+ "The uploaded file was only partially uploaded" : "O arquivo foi enviado parcialmente",
+ "No file was uploaded" : "Nenhum arquivo foi enviado",
+ "Missing a temporary folder" : "Falta uma pasta temporária",
+ "Failed to write file to disk." : "Falha ao escrever no disco.",
+ "A PHP extension stopped the file upload." : "Uma extensão PHP parou o envio do arquivo.",
"No file uploaded" : "Nenhum arquivo enviado",
"Unsupported image type" : "Tipo de imagem não suportado",
"You are already using a custom theme" : "Você já está usando um tema personalizado",
diff --git a/apps/theming/l10n/pt_BR.json b/apps/theming/l10n/pt_BR.json
index 41b06d8316f..a1d07f342f0 100644
--- a/apps/theming/l10n/pt_BR.json
+++ b/apps/theming/l10n/pt_BR.json
@@ -7,6 +7,14 @@
"The given web address is too long" : "O endereço web fornecido é muito longo",
"The given slogan is too long" : "O slogan dado é muito longo",
"The given color is invalid" : "A cor fornecida é inválida",
+ "There is no error, the file uploaded with success" : "Sem erros. Arquivo enviado com sucesso",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "O arquivo enviado excede a diretiva upload_max_filesize do php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "O arquivo enviado excede a diretiva MAX_FILE_SIZE especificada no formulário HTML",
+ "The uploaded file was only partially uploaded" : "O arquivo foi enviado parcialmente",
+ "No file was uploaded" : "Nenhum arquivo foi enviado",
+ "Missing a temporary folder" : "Falta uma pasta temporária",
+ "Failed to write file to disk." : "Falha ao escrever no disco.",
+ "A PHP extension stopped the file upload." : "Uma extensão PHP parou o envio do arquivo.",
"No file uploaded" : "Nenhum arquivo enviado",
"Unsupported image type" : "Tipo de imagem não suportado",
"You are already using a custom theme" : "Você já está usando um tema personalizado",
diff --git a/apps/theming/l10n/ru.js b/apps/theming/l10n/ru.js
index b1ba315a349..2a46add3c0d 100644
--- a/apps/theming/l10n/ru.js
+++ b/apps/theming/l10n/ru.js
@@ -9,6 +9,14 @@ OC.L10N.register(
"The given web address is too long" : "Указанный веб адрес слишком длинный",
"The given slogan is too long" : "Указанный слоган слишком длинный",
"The given color is invalid" : "Задан неправильный цвет",
+ "There is no error, the file uploaded with success" : "Файл загружен успешно. Ошибок нет.",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Размер загруженного файла превышает установленный предел upload_max_filesize в php.ini:",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Размер загруженного файла превышает установленный предел MAX_FILE_SIZE в HTML-форме",
+ "The uploaded file was only partially uploaded" : "Файл загружен лишь частично",
+ "No file was uploaded" : "Не было загружено ни одного файла",
+ "Missing a temporary folder" : "Отсутствует временный каталог",
+ "Failed to write file to disk." : "Ошибка записи на диск.",
+ "A PHP extension stopped the file upload." : "PHP прервало загрузку файла.",
"No file uploaded" : "Нет загруженных файлов",
"Unsupported image type" : "Неподдерживаемый тип изображения",
"You are already using a custom theme" : "Вы уже используете настраиваемую тему",
diff --git a/apps/theming/l10n/ru.json b/apps/theming/l10n/ru.json
index 17c559141e7..f363f3ab151 100644
--- a/apps/theming/l10n/ru.json
+++ b/apps/theming/l10n/ru.json
@@ -7,6 +7,14 @@
"The given web address is too long" : "Указанный веб адрес слишком длинный",
"The given slogan is too long" : "Указанный слоган слишком длинный",
"The given color is invalid" : "Задан неправильный цвет",
+ "There is no error, the file uploaded with success" : "Файл загружен успешно. Ошибок нет.",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Размер загруженного файла превышает установленный предел upload_max_filesize в php.ini:",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Размер загруженного файла превышает установленный предел MAX_FILE_SIZE в HTML-форме",
+ "The uploaded file was only partially uploaded" : "Файл загружен лишь частично",
+ "No file was uploaded" : "Не было загружено ни одного файла",
+ "Missing a temporary folder" : "Отсутствует временный каталог",
+ "Failed to write file to disk." : "Ошибка записи на диск.",
+ "A PHP extension stopped the file upload." : "PHP прервало загрузку файла.",
"No file uploaded" : "Нет загруженных файлов",
"Unsupported image type" : "Неподдерживаемый тип изображения",
"You are already using a custom theme" : "Вы уже используете настраиваемую тему",
diff --git a/apps/theming/l10n/sr.js b/apps/theming/l10n/sr.js
index 186d82d74ae..49344ec96ce 100644
--- a/apps/theming/l10n/sr.js
+++ b/apps/theming/l10n/sr.js
@@ -9,6 +9,14 @@ OC.L10N.register(
"The given web address is too long" : "Адреса је предугачка",
"The given slogan is too long" : "Слоган је предугачак",
"The given color is invalid" : "Задата боја није исправна",
+ "There is no error, the file uploaded with success" : "Нема грешке, фајл је отпремљен успешно",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Отпремани фајл превазилази смерницу upload_max_filesize у фајлу php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Отпремани фајл превазилази смерницу MAX_FILE_SIZE која је наведена у HTML обрасцу",
+ "The uploaded file was only partially uploaded" : "Отпремани фајл је само делимично отпремљен",
+ "No file was uploaded" : "Ниједан фајл није отпремљен",
+ "Missing a temporary folder" : "Недостаје привремена фасцикла",
+ "Failed to write file to disk." : "Не могу да пишем фајл на диск",
+ "A PHP extension stopped the file upload." : "PHP екстензија је зауставила отпремање фајла.",
"No file uploaded" : "Ниједан фајл није отпремљен",
"Unsupported image type" : "Неподржани тип слике",
"You are already using a custom theme" : "Већ користите прилагођену тему",
diff --git a/apps/theming/l10n/sr.json b/apps/theming/l10n/sr.json
index dac1603b3d9..db82d478ee7 100644
--- a/apps/theming/l10n/sr.json
+++ b/apps/theming/l10n/sr.json
@@ -7,6 +7,14 @@
"The given web address is too long" : "Адреса је предугачка",
"The given slogan is too long" : "Слоган је предугачак",
"The given color is invalid" : "Задата боја није исправна",
+ "There is no error, the file uploaded with success" : "Нема грешке, фајл је отпремљен успешно",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Отпремани фајл превазилази смерницу upload_max_filesize у фајлу php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Отпремани фајл превазилази смерницу MAX_FILE_SIZE која је наведена у HTML обрасцу",
+ "The uploaded file was only partially uploaded" : "Отпремани фајл је само делимично отпремљен",
+ "No file was uploaded" : "Ниједан фајл није отпремљен",
+ "Missing a temporary folder" : "Недостаје привремена фасцикла",
+ "Failed to write file to disk." : "Не могу да пишем фајл на диск",
+ "A PHP extension stopped the file upload." : "PHP екстензија је зауставила отпремање фајла.",
"No file uploaded" : "Ниједан фајл није отпремљен",
"Unsupported image type" : "Неподржани тип слике",
"You are already using a custom theme" : "Већ користите прилагођену тему",
diff --git a/apps/theming/l10n/tr.js b/apps/theming/l10n/tr.js
index e720ccaa005..89f01f4eb54 100644
--- a/apps/theming/l10n/tr.js
+++ b/apps/theming/l10n/tr.js
@@ -9,6 +9,14 @@ OC.L10N.register(
"The given web address is too long" : "Belirtilen web adresi çok uzun",
"The given slogan is too long" : "Belirtilen slogan çok uzun",
"The given color is invalid" : "Belirtilen renk geçersiz",
+ "There is no error, the file uploaded with success" : "Herhangi bir sorun yok, dosya yüklendi",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Yüklenen dosya php.ini dosyasındaki yüklenebilecek dosya boyutunu belirten upload_max_filesize değişkeninin değerini aşıyor",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Yüklenen dosya HTML formundaki yüklenebilecek dosya boyutunu belirten MAX_FILE_SIZE değişkeninin değerini aşıyor",
+ "The uploaded file was only partially uploaded" : "Dosyanın yalnızca bir bölümü yüklenebildi",
+ "No file was uploaded" : "Herhangi bir dosya yüklenmedi",
+ "Missing a temporary folder" : "Geçici klasör bulunamadı",
+ "Failed to write file to disk." : "Dosya diske yazılamadı.",
+ "A PHP extension stopped the file upload." : "Bir PHP eklentisi dosyanın yüklenmesini engelledi.",
"No file uploaded" : "Herhangi bir dosya yüklenmemiş",
"Unsupported image type" : "Görsel türü desteklenmiyor",
"You are already using a custom theme" : "Zaten özel bir tema kullanıyorsunuz",
diff --git a/apps/theming/l10n/tr.json b/apps/theming/l10n/tr.json
index 03de74cbb4c..b77802476d4 100644
--- a/apps/theming/l10n/tr.json
+++ b/apps/theming/l10n/tr.json
@@ -7,6 +7,14 @@
"The given web address is too long" : "Belirtilen web adresi çok uzun",
"The given slogan is too long" : "Belirtilen slogan çok uzun",
"The given color is invalid" : "Belirtilen renk geçersiz",
+ "There is no error, the file uploaded with success" : "Herhangi bir sorun yok, dosya yüklendi",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Yüklenen dosya php.ini dosyasındaki yüklenebilecek dosya boyutunu belirten upload_max_filesize değişkeninin değerini aşıyor",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Yüklenen dosya HTML formundaki yüklenebilecek dosya boyutunu belirten MAX_FILE_SIZE değişkeninin değerini aşıyor",
+ "The uploaded file was only partially uploaded" : "Dosyanın yalnızca bir bölümü yüklenebildi",
+ "No file was uploaded" : "Herhangi bir dosya yüklenmedi",
+ "Missing a temporary folder" : "Geçici klasör bulunamadı",
+ "Failed to write file to disk." : "Dosya diske yazılamadı.",
+ "A PHP extension stopped the file upload." : "Bir PHP eklentisi dosyanın yüklenmesini engelledi.",
"No file uploaded" : "Herhangi bir dosya yüklenmemiş",
"Unsupported image type" : "Görsel türü desteklenmiyor",
"You are already using a custom theme" : "Zaten özel bir tema kullanıyorsunuz",
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 06c2c430b7f..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
*
@@ -207,12 +212,34 @@ class ThemingController extends Controller {
}
$newLogo = $this->request->getUploadedFile('uploadlogo');
$newBackgroundLogo = $this->request->getUploadedFile('upload-login-background');
+ $error = null;
+ $phpFileUploadErrors = [
+ UPLOAD_ERR_OK => $this->l10n->t('There is no error, the file uploaded with success'),
+ UPLOAD_ERR_INI_SIZE => $this->l10n->t('The uploaded file exceeds the upload_max_filesize directive in php.ini'),
+ UPLOAD_ERR_FORM_SIZE => $this->l10n->t('The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form'),
+ UPLOAD_ERR_PARTIAL => $this->l10n->t('The uploaded file was only partially uploaded'),
+ UPLOAD_ERR_NO_FILE => $this->l10n->t('No file was uploaded'),
+ UPLOAD_ERR_NO_TMP_DIR => $this->l10n->t('Missing a temporary folder'),
+ UPLOAD_ERR_CANT_WRITE => $this->l10n->t('Failed to write file to disk.'),
+ UPLOAD_ERR_EXTENSION => $this->l10n->t('A PHP extension stopped the file upload.'),
+ ];
if (empty($newLogo) && empty($newBackgroundLogo)) {
+ $error = $this->l10n->t('No file uploaded');
+ }
+ if (!empty($newLogo) && array_key_exists('error', $newLogo) && $newLogo['error'] !== UPLOAD_ERR_OK) {
+ $error = $phpFileUploadErrors[$newLogo['error']];
+ }
+ if (!empty($newBackgroundLogo) && array_key_exists('error', $newBackgroundLogo) && $newBackgroundLogo['error'] !== UPLOAD_ERR_OK) {
+ $error = $phpFileUploadErrors[$newBackgroundLogo['error']];
+ }
+
+ if ($error !== null) {
return new DataResponse(
[
'data' => [
- 'message' => $this->l10n->t('No file uploaded')
- ]
+ 'message' => $error
+ ],
+ 'status' => 'failure',
],
Http::STATUS_UNPROCESSABLE_ENTITY
);
@@ -227,6 +254,18 @@ class ThemingController extends Controller {
if (!empty($newLogo)) {
$target = $folder->newFile('logo');
+ $supportedFormats = ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml', 'text/svg'];
+ if (!in_array($newLogo['type'], $supportedFormats)) {
+ return new DataResponse(
+ [
+ 'data' => [
+ 'message' => $this->l10n->t('Unsupported image type'),
+ ],
+ 'status' => 'failure',
+ ],
+ Http::STATUS_UNPROCESSABLE_ENTITY
+ );
+ }
$target->putContent(file_get_contents($newLogo['tmp_name'], 'r'));
$this->themingDefaults->set('logoMime', $newLogo['type']);
$name = $newLogo['name'];
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 97e889a2140..eb1051b13c8 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 c6a40b5942e..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;
@@ -61,7 +64,7 @@ class IconControllerTest extends TestCase {
private $imageManager;
public function setUp() {
- $this->request = $this->getMockBuilder('OCP\IRequest')->getMock();
+ $this->request = $this->getMockBuilder(IRequest::class)->getMock();
$this->themingDefaults = $this->getMockBuilder('OCA\Theming\ThemingDefaults')
->disableOriginalConstructor()->getMock();
$this->util = $this->getMockBuilder('\OCA\Theming\Util')->disableOriginalConstructor()
@@ -69,7 +72,7 @@ class IconControllerTest extends TestCase {
$this->timeFactory = $this->getMockBuilder('OCP\AppFramework\Utility\ITimeFactory')
->disableOriginalConstructor()
->getMock();
- $this->config = $this->getMockBuilder('OCP\IConfig')->getMock();
+ $this->config = $this->getMockBuilder(IConfig::class)->getMock();
$this->iconBuilder = $this->getMockBuilder('OCA\Theming\IconBuilder')
->disableOriginalConstructor()->getMock();
$this->imageManager = $this->getMockBuilder('OCA\Theming\ImageManager')->disableOriginalConstructor()->getMock();
diff --git a/apps/theming/tests/Controller/ThemingControllerTest.php b/apps/theming/tests/Controller/ThemingControllerTest.php
index c03eccb6eef..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
*
@@ -131,8 +137,9 @@ class ThemingControllerTest extends TestCase {
$this->l10n
->expects($this->once())
->method('t')
- ->with($message)
- ->willReturn($message);
+ ->will($this->returnCallback(function($str) {
+ return $str;
+ }));
$this->scssCacher
->expects($this->once())
->method('getCachedSCSS')
@@ -183,8 +190,9 @@ class ThemingControllerTest extends TestCase {
$this->l10n
->expects($this->once())
->method('t')
- ->with($message)
- ->willReturn($message);
+ ->will($this->returnCallback(function($str) {
+ return $str;
+ }));
$expected = new DataResponse(
[
@@ -215,10 +223,11 @@ class ThemingControllerTest extends TestCase {
->with('upload-login-background')
->willReturn(null);
$this->l10n
- ->expects($this->once())
+ ->expects($this->any())
->method('t')
- ->with('No file uploaded')
- ->willReturn('No file uploaded');
+ ->will($this->returnCallback(function($str) {
+ return $str;
+ }));
$expected = new DataResponse(
[
@@ -226,6 +235,56 @@ class ThemingControllerTest extends TestCase {
[
'message' => 'No file uploaded',
],
+ 'status' => 'failure',
+ ],
+ Http::STATUS_UNPROCESSABLE_ENTITY
+ );
+
+ $this->assertEquals($expected, $this->themingController->updateLogo());
+ }
+
+ public function testUpdateLogoInvalidMimeType() {
+ $this->request
+ ->expects($this->at(0))
+ ->method('getParam')
+ ->with('backgroundColor')
+ ->willReturn(false);
+ $this->request
+ ->expects($this->at(1))
+ ->method('getUploadedFile')
+ ->with('uploadlogo')
+ ->willReturn([
+ 'tmp_name' => 'logo.pdf',
+ 'type' => 'application/pdf',
+ 'name' => 'logo.pdf',
+ 'error' => 0,
+ ]);
+ $this->request
+ ->expects($this->at(2))
+ ->method('getUploadedFile')
+ ->with('upload-login-background')
+ ->willReturn(null);
+ $this->l10n
+ ->expects($this->any())
+ ->method('t')
+ ->will($this->returnCallback(function($str) {
+ return $str;
+ }));
+
+ $folder = $this->createMock(ISimpleFolder::class);
+ $this->appData
+ ->expects($this->once())
+ ->method('getFolder')
+ ->with('images')
+ ->willReturn($folder);
+
+ $expected = new DataResponse(
+ [
+ 'data' =>
+ [
+ 'message' => 'Unsupported image type',
+ ],
+ 'status' => 'failure'
],
Http::STATUS_UNPROCESSABLE_ENTITY
);
@@ -258,13 +317,17 @@ class ThemingControllerTest extends TestCase {
public function dataUpdateImages() {
return [
- [false],
- [true]
+ ['image/jpeg', false],
+ ['image/jpeg', true],
+ ['image/gif'],
+ ['image/png'],
+ ['image/svg+xml'],
+ ['text/svg'],
];
}
/** @dataProvider dataUpdateImages */
- public function testUpdateLogoNormalLogoUpload($folderExists) {
+ public function testUpdateLogoNormalLogoUpload($mimeType, $folderExists=true) {
$tmpLogo = \OC::$server->getTempManager()->getTemporaryFolder() . '/logo.svg';
$destination = \OC::$server->getTempManager()->getTemporaryFolder();
@@ -280,8 +343,9 @@ class ThemingControllerTest extends TestCase {
->with('uploadlogo')
->willReturn([
'tmp_name' => $tmpLogo,
- 'type' => 'text/svg',
+ 'type' => $mimeType,
'name' => 'logo.svg',
+ 'error' => 0,
]);
$this->request
->expects($this->at(2))
@@ -289,10 +353,11 @@ class ThemingControllerTest extends TestCase {
->with('upload-login-background')
->willReturn(null);
$this->l10n
- ->expects($this->once())
+ ->expects($this->any())
->method('t')
- ->with('Saved')
- ->willReturn('Saved');
+ ->will($this->returnCallback(function($str) {
+ return $str;
+ }));
$file = $this->createMock(ISimpleFile::class);
@@ -357,12 +422,14 @@ class ThemingControllerTest extends TestCase {
'tmp_name' => $tmpLogo,
'type' => 'text/svg',
'name' => 'logo.svg',
+ 'error' => 0,
]);
$this->l10n
- ->expects($this->once())
+ ->expects($this->any())
->method('t')
- ->with('Saved')
- ->willReturn('Saved');
+ ->will($this->returnCallback(function($str) {
+ return $str;
+ }));
$file = $this->createMock(ISimpleFile::class);
$folder = $this->createMock(ISimpleFolder::class);
@@ -425,12 +492,14 @@ class ThemingControllerTest extends TestCase {
'tmp_name' => $tmpLogo,
'type' => 'text/svg',
'name' => 'logo.svg',
+ 'error' => 0,
]);
$this->l10n
- ->expects($this->once())
+ ->expects($this->any())
->method('t')
- ->with('Unsupported image type')
- ->willReturn('Unsupported image type');
+ ->will($this->returnCallback(function($str) {
+ return $str;
+ }));
$folder = $this->createMock(ISimpleFolder::class);
$this->appData
@@ -452,6 +521,106 @@ class ThemingControllerTest extends TestCase {
$this->assertEquals($expected, $this->themingController->updateLogo());
}
+ public function dataPhpUploadErrors() {
+ return [
+ [UPLOAD_ERR_INI_SIZE, 'The uploaded file exceeds the upload_max_filesize directive in php.ini'],
+ [UPLOAD_ERR_FORM_SIZE, 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form'],
+ [UPLOAD_ERR_PARTIAL, 'The uploaded file was only partially uploaded'],
+ [UPLOAD_ERR_NO_FILE, 'No file was uploaded'],
+ [UPLOAD_ERR_NO_TMP_DIR, 'Missing a temporary folder'],
+ [UPLOAD_ERR_CANT_WRITE, 'Failed to write file to disk.'],
+ [UPLOAD_ERR_EXTENSION, 'A PHP extension stopped the file upload.'],
+ ];
+ }
+
+ /**
+ * @dataProvider dataPhpUploadErrors
+ */
+ public function testUpdateLogoLoginScreenUploadWithInvalidImageUpload($error, $expectedErrorMessage) {
+ $this->request
+ ->expects($this->at(0))
+ ->method('getParam')
+ ->with('backgroundColor')
+ ->willReturn(false);
+ $this->request
+ ->expects($this->at(1))
+ ->method('getUploadedFile')
+ ->with('uploadlogo')
+ ->willReturn(null);
+ $this->request
+ ->expects($this->at(2))
+ ->method('getUploadedFile')
+ ->with('upload-login-background')
+ ->willReturn([
+ 'tmp_name' => '',
+ 'type' => 'text/svg',
+ 'name' => 'logo.svg',
+ 'error' => $error,
+ ]);
+ $this->l10n
+ ->expects($this->any())
+ ->method('t')
+ ->will($this->returnCallback(function($str) {
+ return $str;
+ }));
+
+ $expected = new DataResponse(
+ [
+ 'data' =>
+ [
+ 'message' => $expectedErrorMessage,
+ ],
+ 'status' => 'failure'
+ ],
+ Http::STATUS_UNPROCESSABLE_ENTITY
+ );
+ $this->assertEquals($expected, $this->themingController->updateLogo());
+ }
+
+ /**
+ * @dataProvider dataPhpUploadErrors
+ */
+ public function testUpdateLogoUploadWithInvalidImageUpload($error, $expectedErrorMessage) {
+ $this->request
+ ->expects($this->at(0))
+ ->method('getParam')
+ ->with('backgroundColor')
+ ->willReturn(false);
+ $this->request
+ ->expects($this->at(1))
+ ->method('getUploadedFile')
+ ->with('uploadlogo')
+ ->willReturn([
+ 'tmp_name' => '',
+ 'type' => 'text/svg',
+ 'name' => 'logo.svg',
+ 'error' => $error,
+ ]);
+ $this->request
+ ->expects($this->at(2))
+ ->method('getUploadedFile')
+ ->with('upload-login-background')
+ ->willReturn(null);
+ $this->l10n
+ ->expects($this->any())
+ ->method('t')
+ ->will($this->returnCallback(function($str) {
+ return $str;
+ }));
+
+ $expected = new DataResponse(
+ [
+ 'data' =>
+ [
+ 'message' => $expectedErrorMessage
+ ],
+ 'status' => 'failure'
+ ],
+ Http::STATUS_UNPROCESSABLE_ENTITY
+ );
+ $this->assertEquals($expected, $this->themingController->updateLogo());
+ }
+
public function testUndo() {
$this->l10n
->expects($this->once())
diff --git a/apps/theming/tests/IconBuilderTest.php b/apps/theming/tests/IconBuilderTest.php
index 9b5b1933201..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;
@@ -51,7 +54,7 @@ class IconBuilderTest extends TestCase {
protected function setUp() {
parent::setUp();
- $this->config = $this->getMockBuilder('\OCP\IConfig')->getMock();
+ $this->config = $this->getMockBuilder(IConfig::class)->getMock();
$this->appData = $this->createMock(IAppData::class);
$this->themingDefaults = $this->getMockBuilder('OCA\Theming\ThemingDefaults')
->disableOriginalConstructor()->getMock();
diff --git a/apps/theming/tests/ImageManagerTest.php b/apps/theming/tests/ImageManagerTest.php
index 4df49633d80..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;
@@ -40,7 +41,7 @@ class ImageManager extends TestCase {
protected function setUp() {
parent::setUp();
- $this->config = $this->getMockBuilder('\OCP\IConfig')->getMock();
+ $this->config = $this->getMockBuilder(IConfig::class)->getMock();
$this->appData = $this->getMockBuilder('OCP\Files\IAppData')->getMock();
$this->imageManager = new \OCA\Theming\ImageManager(
$this->config,
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 70939677582..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
*
@@ -45,10 +49,10 @@ class AdminTest extends TestCase {
public function setUp() {
parent::setUp();
- $this->config = $this->getMockBuilder('\OCP\IConfig')->getMock();
- $this->l10n = $this->getMockBuilder('\OCP\IL10N')->getMock();
+ $this->config = $this->getMockBuilder(IConfig::class)->getMock();
+ $this->l10n = $this->getMockBuilder(IL10N::class)->getMock();
$this->themingDefaults = $this->getMockBuilder('\OCA\Theming\ThemingDefaults')->disableOriginalConstructor()->getMock();
- $this->urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')->getMock();
+ $this->urlGenerator = $this->getMockBuilder(IURLGenerator::class)->getMock();
$this->admin = new Admin(
$this->config,
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 6fbf3a2529d..52bf88e51dd 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/composer/autoload.php b/apps/twofactor_backupcodes/composer/autoload.php
new file mode 100644
index 00000000000..03a8800c318
--- /dev/null
+++ b/apps/twofactor_backupcodes/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitTwoFactorBackupCodes::getLoader();
diff --git a/apps/twofactor_backupcodes/composer/composer.json b/apps/twofactor_backupcodes/composer/composer.json
new file mode 100644
index 00000000000..ef521965208
--- /dev/null
+++ b/apps/twofactor_backupcodes/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "TwoFactorBackupCodes"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\TwoFactorBackupCodes\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/twofactor_backupcodes/composer/composer/ClassLoader.php b/apps/twofactor_backupcodes/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/twofactor_backupcodes/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/twofactor_backupcodes/composer/composer/LICENSE b/apps/twofactor_backupcodes/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/twofactor_backupcodes/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/twofactor_backupcodes/composer/composer/autoload_classmap.php b/apps/twofactor_backupcodes/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..a9d9d3b5d4e
--- /dev/null
+++ b/apps/twofactor_backupcodes/composer/composer/autoload_classmap.php
@@ -0,0 +1,21 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\TwoFactorBackupCodes\\Activity\\Provider' => $baseDir . '/../lib/Activity/Provider.php',
+ 'OCA\\TwoFactorBackupCodes\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\TwoFactorBackupCodes\\Controller\\SettingsController' => $baseDir . '/../lib/Controller/SettingsController.php',
+ 'OCA\\TwoFactorBackupCodes\\Db\\BackupCode' => $baseDir . '/../lib/Db/BackupCode.php',
+ 'OCA\\TwoFactorBackupCodes\\Db\\BackupCodeMapper' => $baseDir . '/../lib/Db/BackupCodeMapper.php',
+ 'OCA\\TwoFactorBackupCodes\\Migration\\Version1002Date20170607104347' => $baseDir . '/../lib/Migration/Version1002Date20170607104347.php',
+ 'OCA\\TwoFactorBackupCodes\\Migration\\Version1002Date20170607113030' => $baseDir . '/../lib/Migration/Version1002Date20170607113030.php',
+ 'OCA\\TwoFactorBackupCodes\\Migration\\Version1002Date20170919123342' => $baseDir . '/../lib/Migration/Version1002Date20170919123342.php',
+ 'OCA\\TwoFactorBackupCodes\\Migration\\Version1002Date20170926101419' => $baseDir . '/../lib/Migration/Version1002Date20170926101419.php',
+ 'OCA\\TwoFactorBackupCodes\\Provider\\BackupCodesProvider' => $baseDir . '/../lib/Provider/BackupCodesProvider.php',
+ 'OCA\\TwoFactorBackupCodes\\Service\\BackupCodeStorage' => $baseDir . '/../lib/Service/BackupCodeStorage.php',
+ 'OCA\\TwoFactorBackupCodes\\Settings\\Personal' => $baseDir . '/../lib/Settings/Personal.php',
+);
diff --git a/apps/twofactor_backupcodes/composer/composer/autoload_namespaces.php b/apps/twofactor_backupcodes/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/twofactor_backupcodes/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/twofactor_backupcodes/composer/composer/autoload_psr4.php b/apps/twofactor_backupcodes/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..c54d4c9819c
--- /dev/null
+++ b/apps/twofactor_backupcodes/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\TwoFactorBackupCodes\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/twofactor_backupcodes/composer/composer/autoload_real.php b/apps/twofactor_backupcodes/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..435d883ffa0
--- /dev/null
+++ b/apps/twofactor_backupcodes/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitTwoFactorBackupCodes
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitTwoFactorBackupCodes', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitTwoFactorBackupCodes', 'loadClassLoader'));
+
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitTwoFactorBackupCodes::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/twofactor_backupcodes/composer/composer/autoload_static.php b/apps/twofactor_backupcodes/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..abde37697ee
--- /dev/null
+++ b/apps/twofactor_backupcodes/composer/composer/autoload_static.php
@@ -0,0 +1,47 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitTwoFactorBackupCodes
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\TwoFactorBackupCodes\\' => 25,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\TwoFactorBackupCodes\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\TwoFactorBackupCodes\\Activity\\Provider' => __DIR__ . '/..' . '/../lib/Activity/Provider.php',
+ 'OCA\\TwoFactorBackupCodes\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\TwoFactorBackupCodes\\Controller\\SettingsController' => __DIR__ . '/..' . '/../lib/Controller/SettingsController.php',
+ 'OCA\\TwoFactorBackupCodes\\Db\\BackupCode' => __DIR__ . '/..' . '/../lib/Db/BackupCode.php',
+ 'OCA\\TwoFactorBackupCodes\\Db\\BackupCodeMapper' => __DIR__ . '/..' . '/../lib/Db/BackupCodeMapper.php',
+ 'OCA\\TwoFactorBackupCodes\\Migration\\Version1002Date20170607104347' => __DIR__ . '/..' . '/../lib/Migration/Version1002Date20170607104347.php',
+ 'OCA\\TwoFactorBackupCodes\\Migration\\Version1002Date20170607113030' => __DIR__ . '/..' . '/../lib/Migration/Version1002Date20170607113030.php',
+ 'OCA\\TwoFactorBackupCodes\\Migration\\Version1002Date20170919123342' => __DIR__ . '/..' . '/../lib/Migration/Version1002Date20170919123342.php',
+ 'OCA\\TwoFactorBackupCodes\\Migration\\Version1002Date20170926101419' => __DIR__ . '/..' . '/../lib/Migration/Version1002Date20170926101419.php',
+ 'OCA\\TwoFactorBackupCodes\\Provider\\BackupCodesProvider' => __DIR__ . '/..' . '/../lib/Provider/BackupCodesProvider.php',
+ 'OCA\\TwoFactorBackupCodes\\Service\\BackupCodeStorage' => __DIR__ . '/..' . '/../lib/Service/BackupCodeStorage.php',
+ 'OCA\\TwoFactorBackupCodes\\Settings\\Personal' => __DIR__ . '/..' . '/../lib/Settings/Personal.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitTwoFactorBackupCodes::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitTwoFactorBackupCodes::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitTwoFactorBackupCodes::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/twofactor_backupcodes/l10n/es_CO.js b/apps/twofactor_backupcodes/l10n/es_CO.js
new file mode 100644
index 00000000000..925894cb77d
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/es_CO.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_CO.json b/apps/twofactor_backupcodes/l10n/es_CO.json
new file mode 100644
index 00000000000..3cfd05bcd37
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/es_CO.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_CR.js b/apps/twofactor_backupcodes/l10n/es_CR.js
new file mode 100644
index 00000000000..925894cb77d
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/es_CR.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_CR.json b/apps/twofactor_backupcodes/l10n/es_CR.json
new file mode 100644
index 00000000000..3cfd05bcd37
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/es_CR.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_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/twofactor_backupcodes/l10n/hu.js b/apps/twofactor_backupcodes/l10n/hu.js
index c5e10d26f2d..0d168f9f62b 100644
--- a/apps/twofactor_backupcodes/l10n/hu.js
+++ b/apps/twofactor_backupcodes/l10n/hu.js
@@ -10,6 +10,7 @@ OC.L10N.register(
"If you regenerate backup codes, you automatically invalidate old codes." : "Ha újra generálod a biztonsági kódokat, akkor a régiek automatikusan érvénytelenítve lesznek.",
"An error occurred while generating your backup codes" : "Hiba történt a biztonsági kódok generálása közben",
"Nextcloud backup codes" : "Nextcloud biztonsági kódok",
+ "You created two-factor backup codes for your account" : "Kétfaktoros helyreállítási kódot hoztál létre a fiókodhoz",
"Backup code" : "Biztonsági kód",
"Use backup code" : "Biztonsági kód használata",
"Second-factor backup codes" : "Második lépcsős biztonsági kódok"
diff --git a/apps/twofactor_backupcodes/l10n/hu.json b/apps/twofactor_backupcodes/l10n/hu.json
index 1afa0a6ac84..4e981a9acc6 100644
--- a/apps/twofactor_backupcodes/l10n/hu.json
+++ b/apps/twofactor_backupcodes/l10n/hu.json
@@ -8,6 +8,7 @@
"If you regenerate backup codes, you automatically invalidate old codes." : "Ha újra generálod a biztonsági kódokat, akkor a régiek automatikusan érvénytelenítve lesznek.",
"An error occurred while generating your backup codes" : "Hiba történt a biztonsági kódok generálása közben",
"Nextcloud backup codes" : "Nextcloud biztonsági kódok",
+ "You created two-factor backup codes for your account" : "Kétfaktoros helyreállítási kódot hoztál létre a fiókodhoz",
"Backup code" : "Biztonsági kód",
"Use backup code" : "Biztonsági kód használata",
"Second-factor backup codes" : "Második lépcsős biztonsági kódok"
diff --git a/apps/twofactor_backupcodes/l10n/sr.js b/apps/twofactor_backupcodes/l10n/sr.js
new file mode 100644
index 00000000000..41a9ff302c6
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/sr.js
@@ -0,0 +1,18 @@
+OC.L10N.register(
+ "twofactor_backupcodes",
+ {
+ "Generate backup codes" : "Генериши резервне кодове",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Резервни кодови су изгенерисани. {{used}} од {{total}} кодова је искоришћено.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Ово су Ваши резервни кодови. Сачувајте их и/или их одштампајте пошто више нећете моћи да их прочитате.",
+ "Save backup codes" : "Сачувај резервне кодове",
+ "Print backup codes" : "Одштампај резервне кодове",
+ "Regenerate backup codes" : "Регенериши резервне кодове",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Ако се резервни кодови регенериши, стари аутоматски престају да важе.",
+ "An error occurred while generating your backup codes" : "Десила се грешка приликом генерисања резервних кодова",
+ "Nextcloud backup codes" : "Некстклауд резервни кодови",
+ "You created two-factor backup codes for your account" : "Направили сте двофакторске резервне кодове за Ваш налог",
+ "Backup code" : "Резервни код",
+ "Use backup code" : "Искористи резервни код",
+ "Second-factor backup codes" : "Двофакторски резервни кодови"
+},
+"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/twofactor_backupcodes/l10n/sr.json b/apps/twofactor_backupcodes/l10n/sr.json
new file mode 100644
index 00000000000..8b39a42c237
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/sr.json
@@ -0,0 +1,16 @@
+{ "translations": {
+ "Generate backup codes" : "Генериши резервне кодове",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Резервни кодови су изгенерисани. {{used}} од {{total}} кодова је искоришћено.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Ово су Ваши резервни кодови. Сачувајте их и/или их одштампајте пошто више нећете моћи да их прочитате.",
+ "Save backup codes" : "Сачувај резервне кодове",
+ "Print backup codes" : "Одштампај резервне кодове",
+ "Regenerate backup codes" : "Регенериши резервне кодове",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Ако се резервни кодови регенериши, стари аутоматски престају да важе.",
+ "An error occurred while generating your backup codes" : "Десила се грешка приликом генерисања резервних кодова",
+ "Nextcloud backup codes" : "Некстклауд резервни кодови",
+ "You created two-factor backup codes for your account" : "Направили сте двофакторске резервне кодове за Ваш налог",
+ "Backup code" : "Резервни код",
+ "Use backup code" : "Искористи резервни код",
+ "Second-factor backup codes" : "Двофакторски резервни кодови"
+},"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/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/composer/autoload.php b/apps/updatenotification/composer/autoload.php
new file mode 100644
index 00000000000..47cc4d587a5
--- /dev/null
+++ b/apps/updatenotification/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitUpdateNotification::getLoader();
diff --git a/apps/updatenotification/composer/composer.json b/apps/updatenotification/composer/composer.json
new file mode 100644
index 00000000000..3e14337eb69
--- /dev/null
+++ b/apps/updatenotification/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "UpdateNotification"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\UpdateNotification\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/updatenotification/composer/composer/ClassLoader.php b/apps/updatenotification/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/updatenotification/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/updatenotification/composer/composer/LICENSE b/apps/updatenotification/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/updatenotification/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/updatenotification/composer/composer/autoload_classmap.php b/apps/updatenotification/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..e1833548bcf
--- /dev/null
+++ b/apps/updatenotification/composer/composer/autoload_classmap.php
@@ -0,0 +1,15 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\UpdateNotification\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\UpdateNotification\\Controller\\AdminController' => $baseDir . '/../lib/Controller/AdminController.php',
+ 'OCA\\UpdateNotification\\Notification\\BackgroundJob' => $baseDir . '/../lib/Notification/BackgroundJob.php',
+ 'OCA\\UpdateNotification\\Notification\\Notifier' => $baseDir . '/../lib/Notification/Notifier.php',
+ 'OCA\\UpdateNotification\\ResetTokenBackgroundJob' => $baseDir . '/../lib/ResetTokenBackgroundJob.php',
+ 'OCA\\UpdateNotification\\UpdateChecker' => $baseDir . '/../lib/UpdateChecker.php',
+);
diff --git a/apps/updatenotification/composer/composer/autoload_namespaces.php b/apps/updatenotification/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/updatenotification/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/updatenotification/composer/composer/autoload_psr4.php b/apps/updatenotification/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..361c205335a
--- /dev/null
+++ b/apps/updatenotification/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\UpdateNotification\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/updatenotification/composer/composer/autoload_real.php b/apps/updatenotification/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..41580edbf38
--- /dev/null
+++ b/apps/updatenotification/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitUpdateNotification
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitUpdateNotification', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitUpdateNotification', 'loadClassLoader'));
+
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitUpdateNotification::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/updatenotification/composer/composer/autoload_static.php b/apps/updatenotification/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..1c63a2d234b
--- /dev/null
+++ b/apps/updatenotification/composer/composer/autoload_static.php
@@ -0,0 +1,41 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitUpdateNotification
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\UpdateNotification\\' => 23,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\UpdateNotification\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\UpdateNotification\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\UpdateNotification\\Controller\\AdminController' => __DIR__ . '/..' . '/../lib/Controller/AdminController.php',
+ 'OCA\\UpdateNotification\\Notification\\BackgroundJob' => __DIR__ . '/..' . '/../lib/Notification/BackgroundJob.php',
+ 'OCA\\UpdateNotification\\Notification\\Notifier' => __DIR__ . '/..' . '/../lib/Notification/Notifier.php',
+ 'OCA\\UpdateNotification\\ResetTokenBackgroundJob' => __DIR__ . '/..' . '/../lib/ResetTokenBackgroundJob.php',
+ 'OCA\\UpdateNotification\\UpdateChecker' => __DIR__ . '/..' . '/../lib/UpdateChecker.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitUpdateNotification::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitUpdateNotification::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitUpdateNotification::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/updatenotification/l10n/es_CO.js b/apps/updatenotification/l10n/es_CO.js
new file mode 100644
index 00000000000..7753f5b5a04
--- /dev/null
+++ b/apps/updatenotification/l10n/es_CO.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_CO.json b/apps/updatenotification/l10n/es_CO.json
new file mode 100644
index 00000000000..5dea8ca3eec
--- /dev/null
+++ b/apps/updatenotification/l10n/es_CO.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_CR.js b/apps/updatenotification/l10n/es_CR.js
new file mode 100644
index 00000000000..7753f5b5a04
--- /dev/null
+++ b/apps/updatenotification/l10n/es_CR.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_CR.json b/apps/updatenotification/l10n/es_CR.json
new file mode 100644
index 00000000000..5dea8ca3eec
--- /dev/null
+++ b/apps/updatenotification/l10n/es_CR.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_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/l10n/hu.js b/apps/updatenotification/l10n/hu.js
index b87e09c68db..ff5f2ba62a7 100644
--- a/apps/updatenotification/l10n/hu.js
+++ b/apps/updatenotification/l10n/hu.js
@@ -5,16 +5,21 @@ OC.L10N.register(
"Could not start updater, please try the manual update" : "Nem sikerült elindítani a frissítőt, kérlek próbáld a manuális frissítést",
"{version} is available. Get more information on how to update." : "{version} rendelkezésre áll. További információ a frissítéshez.",
"Channel updated" : "Csatorna frissítve",
+ "The update server could not be reached since %d days to check for new updates." : "A frissítési szerver %d napja nem elérhető a frissítések kereséséhez.",
+ "Please check the Nextcloud and server log files for errors." : "Kérlek nézd meg a Nextcloud és a szervernaplókat a hibák miatt.",
"Update to %1$s is available." : "%1$s frissítés elérhető.",
"Update for %1$s to version %2$s is available." : "%1$s frissíthető %2$s verzióra.",
"Update for {app} to version %s is available." : "{app} %s verzió frissítése elérhető",
"A new version is available: %s" : "Új verzió érhető el: %s",
"Open updater" : "Frissítő megnyitása",
"Download now" : "Letöltés most",
+ "The update check is not yet finished. Please refresh the page." : "A frissítéskeresés még nem ért véget. Kérjük frissítsd az oldalt.",
"Your version is up to date." : "Verzió frissítve.",
"Checked on %s" : "Ellenőrizve: %s",
+ "A non-default update server is in use to be checked for updates:" : "Egy nem alapértelmezett szervert használunk a frissítések kereséséhez:",
"Update channel:" : "Frissítési csatorna:",
"You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Mindig frissíthetsz az újabb verzióra vagy kísérleti csatornára, de visszafelé sosem frissíthetsz egy jóval stabilabb verzióra.",
+ "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." : "Vedd figyelembe, hogy egy firssítés megjelenése után eltarthat egy darabig míg itt megjelenik. Fokozatosan juttatjuk el a frissítéseket a felhaszálóinkhoz és néha kihagyunk egy-egy verziót, ha problémák merülnek fel.",
"Notify members of the following groups about available updates:" : "A következő csoport tagjainak értesítése az elérhető frissítésekről:",
"Only notification for app updates are available." : "Csak az értesítő alkalmazás frissítései érhetők el.",
"The selected update channel makes dedicated notifications for the server obsolete." : "A kiválasztott frissítési csatorna dedikált értesítéseket jelenít meg a szerver elavulásakor.",
diff --git a/apps/updatenotification/l10n/hu.json b/apps/updatenotification/l10n/hu.json
index 7f803b00268..2eaacdff14e 100644
--- a/apps/updatenotification/l10n/hu.json
+++ b/apps/updatenotification/l10n/hu.json
@@ -3,16 +3,21 @@
"Could not start updater, please try the manual update" : "Nem sikerült elindítani a frissítőt, kérlek próbáld a manuális frissítést",
"{version} is available. Get more information on how to update." : "{version} rendelkezésre áll. További információ a frissítéshez.",
"Channel updated" : "Csatorna frissítve",
+ "The update server could not be reached since %d days to check for new updates." : "A frissítési szerver %d napja nem elérhető a frissítések kereséséhez.",
+ "Please check the Nextcloud and server log files for errors." : "Kérlek nézd meg a Nextcloud és a szervernaplókat a hibák miatt.",
"Update to %1$s is available." : "%1$s frissítés elérhető.",
"Update for %1$s to version %2$s is available." : "%1$s frissíthető %2$s verzióra.",
"Update for {app} to version %s is available." : "{app} %s verzió frissítése elérhető",
"A new version is available: %s" : "Új verzió érhető el: %s",
"Open updater" : "Frissítő megnyitása",
"Download now" : "Letöltés most",
+ "The update check is not yet finished. Please refresh the page." : "A frissítéskeresés még nem ért véget. Kérjük frissítsd az oldalt.",
"Your version is up to date." : "Verzió frissítve.",
"Checked on %s" : "Ellenőrizve: %s",
+ "A non-default update server is in use to be checked for updates:" : "Egy nem alapértelmezett szervert használunk a frissítések kereséséhez:",
"Update channel:" : "Frissítési csatorna:",
"You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Mindig frissíthetsz az újabb verzióra vagy kísérleti csatornára, de visszafelé sosem frissíthetsz egy jóval stabilabb verzióra.",
+ "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." : "Vedd figyelembe, hogy egy firssítés megjelenése után eltarthat egy darabig míg itt megjelenik. Fokozatosan juttatjuk el a frissítéseket a felhaszálóinkhoz és néha kihagyunk egy-egy verziót, ha problémák merülnek fel.",
"Notify members of the following groups about available updates:" : "A következő csoport tagjainak értesítése az elérhető frissítésekről:",
"Only notification for app updates are available." : "Csak az értesítő alkalmazás frissítései érhetők el.",
"The selected update channel makes dedicated notifications for the server obsolete." : "A kiválasztott frissítési csatorna dedikált értesítéseket jelenít meg a szerver elavulásakor.",
diff --git a/apps/updatenotification/l10n/lt_LT.js b/apps/updatenotification/l10n/lt_LT.js
index d53d4b00c53..dd29887f985 100644
--- a/apps/updatenotification/l10n/lt_LT.js
+++ b/apps/updatenotification/l10n/lt_LT.js
@@ -16,6 +16,7 @@ OC.L10N.register(
"The update check is not yet finished. Please refresh the page." : "Atnaujinimų patikrinimas dar neužbaigtas. Prašome įkelti puslapį iš naujo.",
"Your version is up to date." : "Jūsų versija yra naujausia.",
"Checked on %s" : "Tikrinta %s",
+ "A non-default update server is in use to be checked for updates:" : "Atnaujinimų aptikimui yra naudojamas ne nenumatytasis serveris: ",
"Update channel:" : "Atnaujinimo kanalas:",
"You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Visada galite atnaujinti į naujesnę versiją / eksperimentinį kanalą. Tačiau niekada negalite sendinti versijos ar persijungti į stabilų kanalą.",
"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." : "Turėkite omenyje, kad po naujos versijos išleidimo, gali praeiti šiek tiek laiko, kol ji čia taps matoma. Mes išleidžiame naujas versijas paskirstytas pagal laiką savo naudotojams ir, kartais, pastebėjus klaidas, praleidžiame versiją.",
diff --git a/apps/updatenotification/l10n/lt_LT.json b/apps/updatenotification/l10n/lt_LT.json
index 675dfeba3e8..e652fe57b91 100644
--- a/apps/updatenotification/l10n/lt_LT.json
+++ b/apps/updatenotification/l10n/lt_LT.json
@@ -14,6 +14,7 @@
"The update check is not yet finished. Please refresh the page." : "Atnaujinimų patikrinimas dar neužbaigtas. Prašome įkelti puslapį iš naujo.",
"Your version is up to date." : "Jūsų versija yra naujausia.",
"Checked on %s" : "Tikrinta %s",
+ "A non-default update server is in use to be checked for updates:" : "Atnaujinimų aptikimui yra naudojamas ne nenumatytasis serveris: ",
"Update channel:" : "Atnaujinimo kanalas:",
"You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Visada galite atnaujinti į naujesnę versiją / eksperimentinį kanalą. Tačiau niekada negalite sendinti versijos ar persijungti į stabilų kanalą.",
"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." : "Turėkite omenyje, kad po naujos versijos išleidimo, gali praeiti šiek tiek laiko, kol ji čia taps matoma. Mes išleidžiame naujas versijas paskirstytas pagal laiką savo naudotojams ir, kartais, pastebėjus klaidas, praleidžiame versiją.",
diff --git a/apps/updatenotification/l10n/sr.js b/apps/updatenotification/l10n/sr.js
index de9cb470268..e47b86840bb 100644
--- a/apps/updatenotification/l10n/sr.js
+++ b/apps/updatenotification/l10n/sr.js
@@ -1,14 +1,28 @@
OC.L10N.register(
"updatenotification",
{
+ "Update notifications" : "Обавештења о ажурирању",
+ "Could not start updater, please try the manual update" : "Не могу да покренем програм за ажурирање, покушајте ручно ажурирање",
"{version} is available. Get more information on how to update." : "Верзија {version} је доступна. Сазнајте како да ажурирате.",
- "Updated channel" : "Канал ажуриран",
- "Updater" : "Ажурирање",
+ "Channel updated" : "Канал ажуриран",
+ "The update server could not be reached since %d days to check for new updates." : "Сервер за ажурирања није доступан пошто је прошло %d дана од последње провере ажурирања.",
+ "Please check the Nextcloud and server log files for errors." : "Проверите логове од сервера и од Некстклауда за грешке.",
+ "Update to %1$s is available." : "Доступно је ажурирање на %1$s. ",
+ "Update for %1$s to version %2$s is available." : "Доступно је ажурирање апликације %1$s на верзију %2$s.",
+ "Update for {app} to version %s is available." : "Доступно је ажурирање апликације {app} на верзију %s.",
"A new version is available: %s" : "Доступна је нова верзија: %s",
- "Open updater" : "Отвори ажурирање",
+ "Open updater" : "Отвори програм за ажурирање",
+ "Download now" : "Скини сада",
+ "The update check is not yet finished. Please refresh the page." : "Провера за новим верзијама још није готова. Освежите страну.",
"Your version is up to date." : "Ваша верзија је ажурна.",
"Checked on %s" : "Проверено %s",
+ "A non-default update server is in use to be checked for updates:" : "Неподразумевани сервер за ажурирање је коришћен да провери нове верзије:",
"Update channel:" : "Канал за ажурирање:",
- "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Увек можете да надоградите на новију верзију/експериментални канал. Али не можете се вратити на стабилни канал."
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Увек можете да надоградите на новију верзију/експериментални канал. Али не можете се вратити на стабилни канал.",
+ "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." : "После издавања нове верзије, може да прође неко време пре него што се верзија појави овде. Ми избацујемо нове верзије постепено и можемо некад да прескочимо верзију ако наиђемо на проблеме.",
+ "Notify members of the following groups about available updates:" : "Обавести чланове следећих група о доступности нових верзија:",
+ "Only notification for app updates are available." : "Доступна су само обавештења о новим верзијама апликација.",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "Уз означени канал за ажурирање нема смисла да имате обавештења о новим верзијама.",
+ "The selected update channel does not support updates of the server." : "Означени канал за ажурирање не подржава обавештења о новим верзијама."
},
"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/updatenotification/l10n/sr.json b/apps/updatenotification/l10n/sr.json
index 90ec0169399..70d2143eec5 100644
--- a/apps/updatenotification/l10n/sr.json
+++ b/apps/updatenotification/l10n/sr.json
@@ -1,12 +1,26 @@
{ "translations": {
+ "Update notifications" : "Обавештења о ажурирању",
+ "Could not start updater, please try the manual update" : "Не могу да покренем програм за ажурирање, покушајте ручно ажурирање",
"{version} is available. Get more information on how to update." : "Верзија {version} је доступна. Сазнајте како да ажурирате.",
- "Updated channel" : "Канал ажуриран",
- "Updater" : "Ажурирање",
+ "Channel updated" : "Канал ажуриран",
+ "The update server could not be reached since %d days to check for new updates." : "Сервер за ажурирања није доступан пошто је прошло %d дана од последње провере ажурирања.",
+ "Please check the Nextcloud and server log files for errors." : "Проверите логове од сервера и од Некстклауда за грешке.",
+ "Update to %1$s is available." : "Доступно је ажурирање на %1$s. ",
+ "Update for %1$s to version %2$s is available." : "Доступно је ажурирање апликације %1$s на верзију %2$s.",
+ "Update for {app} to version %s is available." : "Доступно је ажурирање апликације {app} на верзију %s.",
"A new version is available: %s" : "Доступна је нова верзија: %s",
- "Open updater" : "Отвори ажурирање",
+ "Open updater" : "Отвори програм за ажурирање",
+ "Download now" : "Скини сада",
+ "The update check is not yet finished. Please refresh the page." : "Провера за новим верзијама још није готова. Освежите страну.",
"Your version is up to date." : "Ваша верзија је ажурна.",
"Checked on %s" : "Проверено %s",
+ "A non-default update server is in use to be checked for updates:" : "Неподразумевани сервер за ажурирање је коришћен да провери нове верзије:",
"Update channel:" : "Канал за ажурирање:",
- "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Увек можете да надоградите на новију верзију/експериментални канал. Али не можете се вратити на стабилни канал."
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Увек можете да надоградите на новију верзију/експериментални канал. Али не можете се вратити на стабилни канал.",
+ "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." : "После издавања нове верзије, може да прође неко време пре него што се верзија појави овде. Ми избацујемо нове верзије постепено и можемо некад да прескочимо верзију ако наиђемо на проблеме.",
+ "Notify members of the following groups about available updates:" : "Обавести чланове следећих група о доступности нових верзија:",
+ "Only notification for app updates are available." : "Доступна су само обавештења о новим верзијама апликација.",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "Уз означени канал за ажурирање нема смисла да имате обавештења о новим верзијама.",
+ "The selected update channel does not support updates of the server." : "Означени канал за ажурирање не подржава обавештења о новим верзијама."
},"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/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/autoload.php b/apps/user_ldap/composer/autoload.php
new file mode 100644
index 00000000000..24824c188e5
--- /dev/null
+++ b/apps/user_ldap/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitUser_LDAP::getLoader();
diff --git a/apps/user_ldap/composer/composer.json b/apps/user_ldap/composer/composer.json
new file mode 100644
index 00000000000..0af0b6bea39
--- /dev/null
+++ b/apps/user_ldap/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "User_LDAP"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\User_LDAP\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/user_ldap/composer/composer/ClassLoader.php b/apps/user_ldap/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/user_ldap/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/user_ldap/composer/composer/LICENSE b/apps/user_ldap/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/user_ldap/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/user_ldap/composer/composer/autoload_classmap.php b/apps/user_ldap/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..0962fe2c4eb
--- /dev/null
+++ b/apps/user_ldap/composer/composer/autoload_classmap.php
@@ -0,0 +1,64 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\User_LDAP\\Access' => $baseDir . '/../lib/Access.php',
+ 'OCA\\User_LDAP\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\User_LDAP\\BackendUtility' => $baseDir . '/../lib/BackendUtility.php',
+ 'OCA\\User_LDAP\\Command\\CheckUser' => $baseDir . '/../lib/Command/CheckUser.php',
+ 'OCA\\User_LDAP\\Command\\CreateEmptyConfig' => $baseDir . '/../lib/Command/CreateEmptyConfig.php',
+ 'OCA\\User_LDAP\\Command\\DeleteConfig' => $baseDir . '/../lib/Command/DeleteConfig.php',
+ 'OCA\\User_LDAP\\Command\\Search' => $baseDir . '/../lib/Command/Search.php',
+ 'OCA\\User_LDAP\\Command\\SetConfig' => $baseDir . '/../lib/Command/SetConfig.php',
+ 'OCA\\User_LDAP\\Command\\ShowConfig' => $baseDir . '/../lib/Command/ShowConfig.php',
+ 'OCA\\User_LDAP\\Command\\ShowRemnants' => $baseDir . '/../lib/Command/ShowRemnants.php',
+ 'OCA\\User_LDAP\\Command\\TestConfig' => $baseDir . '/../lib/Command/TestConfig.php',
+ 'OCA\\User_LDAP\\Configuration' => $baseDir . '/../lib/Configuration.php',
+ 'OCA\\User_LDAP\\Connection' => $baseDir . '/../lib/Connection.php',
+ 'OCA\\User_LDAP\\Controller\\ConfigAPIController' => $baseDir . '/../lib/Controller/ConfigAPIController.php',
+ 'OCA\\User_LDAP\\Controller\\RenewPasswordController' => $baseDir . '/../lib/Controller/RenewPasswordController.php',
+ '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',
+ 'OCA\\User_LDAP\\Jobs\\UpdateGroups' => $baseDir . '/../lib/Jobs/UpdateGroups.php',
+ 'OCA\\User_LDAP\\LDAP' => $baseDir . '/../lib/LDAP.php',
+ 'OCA\\User_LDAP\\LDAPProvider' => $baseDir . '/../lib/LDAPProvider.php',
+ 'OCA\\User_LDAP\\LDAPProviderFactory' => $baseDir . '/../lib/LDAPProviderFactory.php',
+ 'OCA\\User_LDAP\\LDAPUtility' => $baseDir . '/../lib/LDAPUtility.php',
+ 'OCA\\User_LDAP\\LogWrapper' => $baseDir . '/../lib/LogWrapper.php',
+ 'OCA\\User_LDAP\\Mapping\\AbstractMapping' => $baseDir . '/../lib/Mapping/AbstractMapping.php',
+ 'OCA\\User_LDAP\\Mapping\\GroupMapping' => $baseDir . '/../lib/Mapping/GroupMapping.php',
+ 'OCA\\User_LDAP\\Mapping\\UserMapping' => $baseDir . '/../lib/Mapping/UserMapping.php',
+ 'OCA\\User_LDAP\\Migration\\UUIDFix' => $baseDir . '/../lib/Migration/UUIDFix.php',
+ 'OCA\\User_LDAP\\Migration\\UUIDFixGroup' => $baseDir . '/../lib/Migration/UUIDFixGroup.php',
+ 'OCA\\User_LDAP\\Migration\\UUIDFixInsert' => $baseDir . '/../lib/Migration/UUIDFixInsert.php',
+ 'OCA\\User_LDAP\\Migration\\UUIDFixUser' => $baseDir . '/../lib/Migration/UUIDFixUser.php',
+ 'OCA\\User_LDAP\\Notification\\Notifier' => $baseDir . '/../lib/Notification/Notifier.php',
+ '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',
+ 'OCA\\User_LDAP\\User\\OfflineUser' => $baseDir . '/../lib/User/OfflineUser.php',
+ 'OCA\\User_LDAP\\User\\User' => $baseDir . '/../lib/User/User.php',
+ 'OCA\\User_LDAP\\User_LDAP' => $baseDir . '/../lib/User_LDAP.php',
+ 'OCA\\User_LDAP\\User_Proxy' => $baseDir . '/../lib/User_Proxy.php',
+ 'OCA\\User_LDAP\\Wizard' => $baseDir . '/../lib/Wizard.php',
+ 'OCA\\User_LDAP\\WizardResult' => $baseDir . '/../lib/WizardResult.php',
+);
diff --git a/apps/user_ldap/composer/composer/autoload_namespaces.php b/apps/user_ldap/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/user_ldap/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/user_ldap/composer/composer/autoload_psr4.php b/apps/user_ldap/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..5251e2c1f81
--- /dev/null
+++ b/apps/user_ldap/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\User_LDAP\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/user_ldap/composer/composer/autoload_real.php b/apps/user_ldap/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..ab7adf2412f
--- /dev/null
+++ b/apps/user_ldap/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitUser_LDAP
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitUser_LDAP', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitUser_LDAP', 'loadClassLoader'));
+
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitUser_LDAP::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/user_ldap/composer/composer/autoload_static.php b/apps/user_ldap/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..ece7dd69d27
--- /dev/null
+++ b/apps/user_ldap/composer/composer/autoload_static.php
@@ -0,0 +1,90 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitUser_LDAP
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\User_LDAP\\' => 14,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\User_LDAP\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\User_LDAP\\Access' => __DIR__ . '/..' . '/../lib/Access.php',
+ 'OCA\\User_LDAP\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\User_LDAP\\BackendUtility' => __DIR__ . '/..' . '/../lib/BackendUtility.php',
+ 'OCA\\User_LDAP\\Command\\CheckUser' => __DIR__ . '/..' . '/../lib/Command/CheckUser.php',
+ 'OCA\\User_LDAP\\Command\\CreateEmptyConfig' => __DIR__ . '/..' . '/../lib/Command/CreateEmptyConfig.php',
+ 'OCA\\User_LDAP\\Command\\DeleteConfig' => __DIR__ . '/..' . '/../lib/Command/DeleteConfig.php',
+ 'OCA\\User_LDAP\\Command\\Search' => __DIR__ . '/..' . '/../lib/Command/Search.php',
+ 'OCA\\User_LDAP\\Command\\SetConfig' => __DIR__ . '/..' . '/../lib/Command/SetConfig.php',
+ 'OCA\\User_LDAP\\Command\\ShowConfig' => __DIR__ . '/..' . '/../lib/Command/ShowConfig.php',
+ 'OCA\\User_LDAP\\Command\\ShowRemnants' => __DIR__ . '/..' . '/../lib/Command/ShowRemnants.php',
+ 'OCA\\User_LDAP\\Command\\TestConfig' => __DIR__ . '/..' . '/../lib/Command/TestConfig.php',
+ 'OCA\\User_LDAP\\Configuration' => __DIR__ . '/..' . '/../lib/Configuration.php',
+ 'OCA\\User_LDAP\\Connection' => __DIR__ . '/..' . '/../lib/Connection.php',
+ 'OCA\\User_LDAP\\Controller\\ConfigAPIController' => __DIR__ . '/..' . '/../lib/Controller/ConfigAPIController.php',
+ 'OCA\\User_LDAP\\Controller\\RenewPasswordController' => __DIR__ . '/..' . '/../lib/Controller/RenewPasswordController.php',
+ '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',
+ 'OCA\\User_LDAP\\Jobs\\UpdateGroups' => __DIR__ . '/..' . '/../lib/Jobs/UpdateGroups.php',
+ 'OCA\\User_LDAP\\LDAP' => __DIR__ . '/..' . '/../lib/LDAP.php',
+ 'OCA\\User_LDAP\\LDAPProvider' => __DIR__ . '/..' . '/../lib/LDAPProvider.php',
+ 'OCA\\User_LDAP\\LDAPProviderFactory' => __DIR__ . '/..' . '/../lib/LDAPProviderFactory.php',
+ 'OCA\\User_LDAP\\LDAPUtility' => __DIR__ . '/..' . '/../lib/LDAPUtility.php',
+ 'OCA\\User_LDAP\\LogWrapper' => __DIR__ . '/..' . '/../lib/LogWrapper.php',
+ 'OCA\\User_LDAP\\Mapping\\AbstractMapping' => __DIR__ . '/..' . '/../lib/Mapping/AbstractMapping.php',
+ 'OCA\\User_LDAP\\Mapping\\GroupMapping' => __DIR__ . '/..' . '/../lib/Mapping/GroupMapping.php',
+ 'OCA\\User_LDAP\\Mapping\\UserMapping' => __DIR__ . '/..' . '/../lib/Mapping/UserMapping.php',
+ 'OCA\\User_LDAP\\Migration\\UUIDFix' => __DIR__ . '/..' . '/../lib/Migration/UUIDFix.php',
+ 'OCA\\User_LDAP\\Migration\\UUIDFixGroup' => __DIR__ . '/..' . '/../lib/Migration/UUIDFixGroup.php',
+ 'OCA\\User_LDAP\\Migration\\UUIDFixInsert' => __DIR__ . '/..' . '/../lib/Migration/UUIDFixInsert.php',
+ 'OCA\\User_LDAP\\Migration\\UUIDFixUser' => __DIR__ . '/..' . '/../lib/Migration/UUIDFixUser.php',
+ 'OCA\\User_LDAP\\Notification\\Notifier' => __DIR__ . '/..' . '/../lib/Notification/Notifier.php',
+ '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',
+ 'OCA\\User_LDAP\\User\\OfflineUser' => __DIR__ . '/..' . '/../lib/User/OfflineUser.php',
+ 'OCA\\User_LDAP\\User\\User' => __DIR__ . '/..' . '/../lib/User/User.php',
+ 'OCA\\User_LDAP\\User_LDAP' => __DIR__ . '/..' . '/../lib/User_LDAP.php',
+ 'OCA\\User_LDAP\\User_Proxy' => __DIR__ . '/..' . '/../lib/User_Proxy.php',
+ 'OCA\\User_LDAP\\Wizard' => __DIR__ . '/..' . '/../lib/Wizard.php',
+ 'OCA\\User_LDAP\\WizardResult' => __DIR__ . '/..' . '/../lib/WizardResult.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitUser_LDAP::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitUser_LDAP::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitUser_LDAP::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/user_ldap/l10n/es_CO.js b/apps/user_ldap/l10n/es_CO.js
new file mode 100644
index 00000000000..63d3d71e0a9
--- /dev/null
+++ b/apps/user_ldap/l10n/es_CO.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_CO.json b/apps/user_ldap/l10n/es_CO.json
new file mode 100644
index 00000000000..eefeb9a037f
--- /dev/null
+++ b/apps/user_ldap/l10n/es_CO.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_CR.js b/apps/user_ldap/l10n/es_CR.js
new file mode 100644
index 00000000000..63d3d71e0a9
--- /dev/null
+++ b/apps/user_ldap/l10n/es_CR.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_CR.json b/apps/user_ldap/l10n/es_CR.json
new file mode 100644
index 00000000000..eefeb9a037f
--- /dev/null
+++ b/apps/user_ldap/l10n/es_CR.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_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/l10n/lt_LT.js b/apps/user_ldap/l10n/lt_LT.js
index c8ef3aaea84..fa9bfa8b255 100644
--- a/apps/user_ldap/l10n/lt_LT.js
+++ b/apps/user_ldap/l10n/lt_LT.js
@@ -150,6 +150,7 @@ OC.L10N.register(
"Group Search Attributes" : "Grupės paieškos atributai",
"Group-Member association" : "Grupės-Nario sąsaja",
"Dynamic Group Member URL" : "Dinaminio grupės nario URL",
+ "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.)" : "LDAP atributas, kuris grupės objektuose turi LDAP ieškos URL, nustatantį kokie objektai priklauso grupei. (Tuščias parametras išjungia dinaminės grupės narystės funkciją.)",
"Nested Groups" : "Įdėtinės grupės",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Kai įjungta, yra palaikomos grupes turinčios grupės.(Veikia tik, jei grupės nario atributas turi DN.)",
"Enable LDAP password changes per user" : "Įjungti LDAP slaptažodžio keitimus kiekvienam naudotojui.",
@@ -164,7 +165,9 @@ OC.L10N.register(
"Email Field" : "El. pašto laukas",
"Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Naudotojų el. paštą nustatykite pagal jų LDAP atributą. Palikite tuščią jei norite, kad veiktų pagal numatytuosius parametrus.",
"User Home Folder Naming Rule" : "Naudotojo namų aplanko pavadinimo taisyklė",
+ "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Palikite tuščią naudotojo vardui (numatytoji reikšmė). Kitu atveju, nurodykite LDAP/AD atributą.",
"Internal Username" : "Vidinis naudotojo vardas",
+ "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." : "Pagal nutylėjimą vidinis naudotojo vardas bus sukurtas iš UUID atributo. Tai užtikrina naudotojo vardo unikalumą ir kad nereikia konvertuoti simbolių. Vidinis naudotojo vardas turi apribojimą, leidžiantį tik šiuos simbolius: [a-zA-Z0-9 _. @ -]. Kiti simboliai pakeičiami ASCII atitikmenimis arba tiesiog praleidžiami. Sutapimų konflikto atveju yra pridedamas/padidinamas skaičius. Vidinis naudotojo vardas naudojamas yra naudojamas identifikuoti naudotoją viduje. Tai kartu yra numatytasis vartotojo aplanko pavadinimas. Taip pat tai nuotolinių URL dalis, pavyzdžiui, visoms *DAV paslaugoms. Naudojant šį nustatymą, numatytoji elgsena gali būti panaikinta. Palikite tuščią, jei norite kad galiotų numatytąjį reikšmė. Pakeitimai įtakoja tik naujai priskirtiems (pridedamiems) LDAP vartotojams.",
"Internal Username Attribute:" : "Vidinis naudotojo vardo atributas:",
"Override UUID detection" : "Perrašyti UUID aptikimą",
"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." : "naudotojo vardasnaudotojo vardasPagal nutylėjimą, UUID atributas yra automatiškai aptinkamas. UUID atributas yra naudojamas identifikuoti LDAP vartotojus ir grupes. Taigi, vidinis naudotojo vardas bus sukurtas remiantis UUID, jei nenurodyta kitaip. Jūs galite pakeisti nustatymus ir perduoti pasirinktus atributus. Turite įsitikinti, kad jūsų pasirinktas atributas gali būti rastas tiek prie vartotojų, tiek prie grupių, ir yra unikalus. Jei norite, kad veiktų pagal numatytuosius parametrus, palikite tuščią. Pakeitimai turės įtakos tik naujai susietiems (pridedamiems) LDAP naudotojams ir grupėms.",
diff --git a/apps/user_ldap/l10n/lt_LT.json b/apps/user_ldap/l10n/lt_LT.json
index 3376dcb7986..5167464235e 100644
--- a/apps/user_ldap/l10n/lt_LT.json
+++ b/apps/user_ldap/l10n/lt_LT.json
@@ -148,6 +148,7 @@
"Group Search Attributes" : "Grupės paieškos atributai",
"Group-Member association" : "Grupės-Nario sąsaja",
"Dynamic Group Member URL" : "Dinaminio grupės nario URL",
+ "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.)" : "LDAP atributas, kuris grupės objektuose turi LDAP ieškos URL, nustatantį kokie objektai priklauso grupei. (Tuščias parametras išjungia dinaminės grupės narystės funkciją.)",
"Nested Groups" : "Įdėtinės grupės",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Kai įjungta, yra palaikomos grupes turinčios grupės.(Veikia tik, jei grupės nario atributas turi DN.)",
"Enable LDAP password changes per user" : "Įjungti LDAP slaptažodžio keitimus kiekvienam naudotojui.",
@@ -162,7 +163,9 @@
"Email Field" : "El. pašto laukas",
"Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Naudotojų el. paštą nustatykite pagal jų LDAP atributą. Palikite tuščią jei norite, kad veiktų pagal numatytuosius parametrus.",
"User Home Folder Naming Rule" : "Naudotojo namų aplanko pavadinimo taisyklė",
+ "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Palikite tuščią naudotojo vardui (numatytoji reikšmė). Kitu atveju, nurodykite LDAP/AD atributą.",
"Internal Username" : "Vidinis naudotojo vardas",
+ "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." : "Pagal nutylėjimą vidinis naudotojo vardas bus sukurtas iš UUID atributo. Tai užtikrina naudotojo vardo unikalumą ir kad nereikia konvertuoti simbolių. Vidinis naudotojo vardas turi apribojimą, leidžiantį tik šiuos simbolius: [a-zA-Z0-9 _. @ -]. Kiti simboliai pakeičiami ASCII atitikmenimis arba tiesiog praleidžiami. Sutapimų konflikto atveju yra pridedamas/padidinamas skaičius. Vidinis naudotojo vardas naudojamas yra naudojamas identifikuoti naudotoją viduje. Tai kartu yra numatytasis vartotojo aplanko pavadinimas. Taip pat tai nuotolinių URL dalis, pavyzdžiui, visoms *DAV paslaugoms. Naudojant šį nustatymą, numatytoji elgsena gali būti panaikinta. Palikite tuščią, jei norite kad galiotų numatytąjį reikšmė. Pakeitimai įtakoja tik naujai priskirtiems (pridedamiems) LDAP vartotojams.",
"Internal Username Attribute:" : "Vidinis naudotojo vardo atributas:",
"Override UUID detection" : "Perrašyti UUID aptikimą",
"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." : "naudotojo vardasnaudotojo vardasPagal nutylėjimą, UUID atributas yra automatiškai aptinkamas. UUID atributas yra naudojamas identifikuoti LDAP vartotojus ir grupes. Taigi, vidinis naudotojo vardas bus sukurtas remiantis UUID, jei nenurodyta kitaip. Jūs galite pakeisti nustatymus ir perduoti pasirinktus atributus. Turite įsitikinti, kad jūsų pasirinktas atributas gali būti rastas tiek prie vartotojų, tiek prie grupių, ir yra unikalus. Jei norite, kad veiktų pagal numatytuosius parametrus, palikite tuščią. Pakeitimai turės įtakos tik naujai susietiems (pridedamiems) LDAP naudotojams ir grupėms.",
diff --git a/apps/user_ldap/l10n/sr.js b/apps/user_ldap/l10n/sr.js
index baf33ae64dd..1f47189d31d 100644
--- a/apps/user_ldap/l10n/sr.js
+++ b/apps/user_ldap/l10n/sr.js
@@ -2,17 +2,25 @@ OC.L10N.register(
"user_ldap",
{
"Failed to clear the mappings." : "Неуспело чишћење мапирања.",
- "Failed to delete the server configuration" : "Неуспело брисање поставе сервера",
- "The configuration is invalid: anonymous bind is not allowed." : "Неисправна подешавања. Анонимна веза није дозвољена.",
- "The configuration is valid and the connection could be established!" : "Конфигурација је исправна и веза може да се успостави!",
- "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Конфигурација је важећа, али Bind није успео. Проверите подешавања сервера и акредитиве.",
- "The configuration is invalid. Please have a look at the logs for further details." : "Конфигурација је неисправна. Погледајте у дневнику записа за додатне детаље.",
+ "Failed to delete the server configuration" : "Неуспело брисање конфигурације сервера",
+ "Invalid configuration: Anonymous binding is not allowed." : "Неисправна конфигурација: Анонимно везивање није дозвољено.",
+ "Valid configuration, connection established!" : "Исправна конфигурација, веза успостављена!",
+ "Valid configuration, but binding failed. Please check the server settings and credentials." : "Исправна конфигурација, али везивање није успело. Проверите поставке сервера и акредитиве.",
+ "Invalid configuration. Please have a look at the logs for further details." : "Неисправна конфигурација. Погледајте дневник за више детаља.",
"No action specified" : "Није наведена радња",
"No configuration specified" : "Није наведена постава",
"No data specified" : "Нису наведени подаци",
" Could not set configuration %s" : "Нисам могао да подесим конфигурацију %s",
"Action does not exist" : "Радња не постоји",
+ "LDAP user and group backend" : "Позадински мотор за LDAP корисника и групу",
+ "Renewing …" : "Обнављам …",
+ "Very weak password" : "Веома слаба лозинка",
+ "Weak password" : "Слаба лозинка",
+ "So-so password" : "Осредња лозинка",
+ "Good password" : "Добра лозинка",
+ "Strong password" : "Јака лозинка",
"The Base DN appears to be wrong" : "Базни ДН је изгледа погрешан",
+ "Testing configuration…" : "Тестирам конфигурацију…",
"Configuration incorrect" : "Конфигурација је неисправна",
"Configuration incomplete" : "Конфигурација није комплетна",
"Configuration OK" : "Конфигурација је у реду",
@@ -32,24 +40,32 @@ OC.L10N.register(
"Mappings cleared successfully!" : "Мапирања успешно очишћена!",
"Error while clearing the mappings." : "Грешка при чишћењу мапирања.",
"Anonymous bind is not allowed. Please provide a User DN and Password." : "Анонимно везивање није дозвољено. Дајте кориснички ДН и лозинку.",
- "LDAP Operations error. Anonymous bind might not be allowed." : "Грешка ЛДАП радње. Анонимна веза можда није дозвољена.",
+ "LDAP Operations error. Anonymous bind might not be allowed." : "Грешка LDAP радње. Анонимна веза можда није дозвољена.",
"Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Упис није успео. Проверите да је база у функцији. Поново учитајте пре настављања.",
- "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?" : "Пребацивање режима укључиће аутоматске ЛДАП упите. Зависно од ЛДАП величине то може потрајати. Заиста желите да промените режим?",
+ "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?" : "Пребацивање режима укључиће аутоматске LDAP упите. Зависно од LDAP величине то може потрајати. Заиста желите да промените режим?",
"Mode switch" : "Промена режима",
"Select attributes" : "Изаберите атрибуте",
- "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Корисник није нађен. Проверите пријавне атрибуте и корисничко име. Важећи филтер (за копирај-налепи за оверу командне линије): <br/>",
+ "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Корисник није нађен. Проверите атрибуте пријаве и корисничко име. Ефективни филтер (да копирате и налепите за верификацију у конзоли):<br/>",
"User found and settings verified." : "Корисник нађен и поставке проверене.",
- "An unspecified error occurred. Please check the settings and the log." : "Десила се неодређана грешка. Проверите поставке и записник.",
+ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Размислите и да смањите претрагу, пошто обухвата много корисника, од којих ће само први моћи да се пријави.",
+ "An unspecified error occurred. Please check log and settings." : "Десила се непозната грешка. Погледајте дневник и подешавања.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Филтер претраге је неисправан, вероватно због синтаксе попут неједнаког броја отворених и затворених заграда. Проверите.",
- "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Дошло је до грешке ЛДАП / АД везе. Проверите домаћина, порт и акредитиве.",
+ "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Дошло је до грешке LDAP / AD везе. Проверите домаћина, порт и акредитиве.",
+ "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "\"%uid\" резервисано поље недостаје. Биће замењено са корисничким именом када се ради упит над LDAP / AD-ом.",
"Please provide a login name to test against" : "Наведите пријавно име за тест са",
- "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Поље групе је искључено јер ЛДАП / АД сервер не подржава припадност групи.",
- "_%s group found_::_%s groups found_" : ["нађена %s група","нађене %s групе","нађено %s група"],
- "_%s user found_::_%s users found_" : ["нађен %s корисник","нађена %s корисника","нађено %s корисника"],
- "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Немогу да откријем особину приказивања корисниковог имена. Наведите је у напредним поставкама LDAP-a",
+ "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Поље групе је искључено јер LDAP / AD сервер не подржава припадност групи.",
+ "Password change rejected. Hint: " : "Промена лозинке није прихваћена. Смерница:",
+ "Please login with the new password" : "Пријавите се са новом лозинком",
+ "Your password will expire tomorrow." : "Ваша лозинка ће истећи сутра.",
+ "Your password will expire today." : "Ваша лозинка ће истећи данас.",
+ "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Ваша лозинка ће истећи за %n дан.","Ваша лозинка ће истећи за %n дана.","Ваша лозинка ће истећи за %n дана."],
+ "LDAP / AD integration" : "LDAP / AD интеграција",
+ "_%s group found_::_%s groups found_" : ["нађена %s група","нађене %s групе","Нађено %s група"],
+ "_%s user found_::_%s users found_" : ["нађен %s корисник","нађена %s корисника","Нађено %s корисника"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Не могу да пронађем атрибут имена за приказ корисника. Молимо сами га наведите у LDAP напредним подешавањима.",
"Could not find the desired feature" : "Не могу да пронађем жељену особину",
"Invalid Host" : "Неисправан домаћин",
- "Test Configuration" : "Испробај поставу",
+ "Test Configuration" : "Испробај поставку",
"Help" : "Помоћ",
"Groups meeting these criteria are available in %s:" : "Групе које испуњавају ове критеријуме су доступне у %s:",
"Only these object classes:" : "Само ове класе објеката:",
@@ -57,40 +73,54 @@ OC.L10N.register(
"Search groups" : "Претражи групе",
"Available groups" : "Доступне групе",
"Selected groups" : "Изабране групе",
- "Edit LDAP Query" : "Уреди ЛДАП упит",
- "LDAP Filter:" : "ЛДАП филтер:",
+ "Edit LDAP Query" : "Уреди LDAP упит",
+ "LDAP Filter:" : "LDAP филтер:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "Филтер прецизира које ће LDAP групе требају имати приступ %s случају.",
+ "Verify settings and count the groups" : "Верификуј поставке и преброј групе",
"When logging in, %s will find the user based on the following attributes:" : "При пријављивању, %s ће пронаћи корисника на основу следећих атрибута:",
- "LDAP / AD Username:" : "ЛДАП / АД корисничко име:",
- "LDAP / AD Email Address:" : "ЛДАП / АД е-адреса:",
- "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Дозволи пријаву уз атрибут е-поште. Mail и mailPrimaryAddress биће дозвољени.",
- "Other Attributes:" : "Остали параметри:",
- "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Одређује филтер који ће се применити при покушају пријављивања. %%uid замењује корисничко име при пријављивању. Пример: \"uid=%%uid\"",
+ "LDAP / AD Username:" : "LDAP / AD корисничко име:",
+ "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Дозволи пријављивање преко LDAP / AD корисничког имена, које је или \"uid\" или \"sAMAccountName\" и биће детектовано.",
+ "LDAP / AD Email Address:" : "LDAP / AD адреса е-поште:",
+ "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Дозволи пријављивање преко атрибута адресе е-поште. \"mail\" и \"mailPrimaryAddress\" су дозвољени.",
+ "Other Attributes:" : "Остали атрибути:",
+ "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Дефинише филтер који ће се применити, када се покуша пријава. \"%%uid\" замењује корисничко име у пријави. Example: \"uid=%%uid\"",
"Test Loginname" : "Испробај име за пријаву",
"Verify settings" : "Провери поставке",
"1. Server" : "1. сервер",
"%s. Server:" : "%s. Сервер:",
+ "Add a new configuration" : "Додај нову поставку",
"Copy current configuration into new directory binding" : "Копирај тренутну поставу у везивање новог директоријума",
"Delete the current configuration" : "Обриши тренутне поставке",
"Host" : "Домаћин",
+ "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Можете да изоставите протокол, осим ако не захтевате SSL. Ако је потребан, почните са ldaps://",
"Port" : "Порт",
"Detect Port" : "Откриј порт",
"User DN" : "Корисников DN",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "DN корисника клијента са којим треба да се успостави веза, нпр. uid=agent,dc=example,dc=com. За анониман приступ, оставите поља DN и лозинка празним.",
"Password" : "Лозинка",
"For anonymous access, leave DN and Password empty." : "За анониман приступ, оставите поља DN и лозинка празним.",
- "One Base DN per line" : "Једна Base DN по линији",
+ "One Base DN per line" : "Један Base DN по линији",
"You can specify Base DN for users and groups in the Advanced tab" : "Можете навести Base DN за кориснике и групе у картици Напредно",
- "Detect Base DN" : "Откриј базни ДН",
- "Test Base DN" : "Тестирај базни ДН",
+ "Detect Base DN" : "Откриј Base DN",
+ "Test Base DN" : "Тестирај Base DN",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Избегава аутоматске LDAP захтеве. Боље за веће поставке, али тражи мало више познавања LDAP-а.",
"Manually enter LDAP filters (recommended for large directories)" : "Унесите ручно LDAP филтере (препоручено за велике директоријуме)",
+ "Listing and searching for users is constrained by these criteria:" : "Излиставање и претраживање корисника је ограничено следећим условима:",
"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." : "Најчешће класе објеката за кориснике су organizationalPerson, person, user и inetOrgPerson. Ако нисте сигурни шта да изаберете, питајте администратора именика.",
"The filter specifies which LDAP users shall have access to the %s instance." : "Филтер одређује који ЛДАП корисници ће имати приступ на %s.",
"Verify settings and count users" : "Провери поставке и преброј кориснике",
"Saving" : "Снимам",
"Back" : "Назад",
"Continue" : "Настави",
+ "Please renew your password." : "Молимо обновите Вашу лозинку.",
+ "An internal error occurred." : "Догодила се интерна грешка.",
+ "Please try again or contact your administrator." : "Покушајте поново или контактирајте администратора.",
+ "Current password" : "Тренутна лозинка",
+ "New password" : "Нова лозинка",
+ "Renew password" : "Обнови лозинку",
+ "Wrong password. Reset it?" : "Погрешна лозинка. Желите ли да је ресетујете?",
+ "Wrong password." : "Лоша лозинка.",
+ "Cancel" : "Одустани",
"LDAP" : "LDAP",
"Server" : "Сервер",
"Users" : "Корисници",
@@ -98,22 +128,24 @@ OC.L10N.register(
"Groups" : "Групе",
"Expert" : "Стручњак",
"Advanced" : "Напредно",
- "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Упозорење:</b> ПХП ЛДАП модул није инсталиран и зачеље неће радити. Питајте систем администратора да га инсталира.",
+ "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Упозорење:</b> PHP LDAP модул није инсталиран и зачеље неће радити. Питајте систем администратора да га инсталира.",
"Connection Settings" : "Поставке везе",
"Configuration Active" : "Конфигурација активна",
"When unchecked, this configuration will be skipped." : "Када није штриклирано, ова конфигурација ће бити прескочена.",
"Backup (Replica) Host" : "Домаћин Резервне копије (Реплике)",
- "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Наведите опционог домаћина за резервне копије. Он мора бити реплика главног ЛДАП/АД сервера.",
+ "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Наведите опционог домаћина за резервне копије. Он мора бити реплика главног LDAP/AD сервера.",
"Backup (Replica) Port" : "Порт Резервне копије (Реплике)",
"Disable Main Server" : "Онемогући главни сервер",
"Only connect to the replica server." : "Повезано само на сервер за копирање.",
- "Turn off SSL certificate validation." : "Искључите потврду ССЛ сертификата.",
+ "Turn off SSL certificate validation." : "Искључите потврду 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." : "Није препоручено, користите само за тестирање! Ако веза ради само са овом опцијом, увезите SSL сертификате LDAP сервера на ваш %s сервер.",
"Cache Time-To-Live" : "Трајност кеша",
"in seconds. A change empties the cache." : "у секундама. Промена празни кеш меморију.",
"Directory Settings" : "Подешавања директоријума",
"User Display Name Field" : "Име приказа корисника",
- "The LDAP attribute to use to generate the user's display name." : "LDAP особина за стварање имена за приказ корисника.",
+ "The LDAP attribute to use to generate the user's display name." : "LDAP атрибут за стварање имена за приказ корисника.",
+ "2nd User Display Name Field" : "2. поље за приказ имена корисника",
+ "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Опционо. LDAP атрибут који се додаје на име у заградама. Коначно име за приказ ће бити нешто попут »Петар Петровић (pera@example.org)«.",
"Base User Tree" : "Основно стабло корисника",
"One User Base DN per line" : "Један Корисников јединствени назив DN по линији",
"User Search Attributes" : "Параметри претраге корисника",
@@ -124,17 +156,28 @@ OC.L10N.register(
"One Group Base DN per line" : "Један Групни јединствени назив DN по линији",
"Group Search Attributes" : "Параметри претраге група",
"Group-Member association" : "Придруживање чланова у групу",
+ "Dynamic Group Member URL" : "Динамична адреса члана групе",
+ "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.)" : "LDAP атрибут који на групном објекту садржи адресу LDAP претраге којом се одређује да ли објекат припада групи. (празно подешавање искључује могућност динамичких припадности групама.) ",
"Nested Groups" : "Угнеждене групе",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Када је укључено, подржане су групе унутар групе. (Ради само ако особина члана групе садржи DN-ове.)",
"Paging chunksize" : "Величина делића странице",
"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.)" : "Величина делића се користи за страничење ЛДАП претрага које могу вратити гомилу резултата попут набрајања корисника или група. (постављање на 0 у таквим ситуацијама искључује приказ претраге по страницама)",
+ "Enable LDAP password changes per user" : "Укључи промену LDAP лозинке по кориснику",
+ "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." : "Дозволи LDAP корисницима да мењају своју лозинку и дозволи супер администраторима и администраторима група да мењају лозинке њихових LDAP корисника. Ради само када је контрола права приступа подешена према LDAP серверу. Пошто се лозинке шаљу као обичан тест ка LDAP серверу, мора се користити протокол са шифровањем, као и укључивање хеширања на LDAP серверу.",
+ "(New password is sent as plain text to LDAP)" : "(нова лозинка се шаље као обичан текст на LDAP)",
+ "Default password policy DN" : "Подразумевана политика промене DN лозинки",
+ "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." : "Подразумевана политика промене лозинки ће се користити када лозинка истиче. Може се користити само када се укључи промена лозинке по кориснику и подржава је само OpenLDAP. Оставите празно да искључите шта се дешава када лозинка истиче.",
"Special Attributes" : "Посебни параметри",
"Quota Field" : "Поље квоте",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Оставите празно за подразумевану квоту корисника. У супротном, ставите LDAP/AD атрибут.",
"Quota Default" : "Подразумевана квота",
- "Email Field" : "Поље е-поште",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Редефинише подразумевану квоту за LDAP кориснике који немају постављену квоту у Quota пољу.",
+ "Email Field" : "Поље адресе е-поште",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Поставља адресу е-поште корисника из LDAP атрибута. Оставите празно за подразумевано понашање.",
"User Home Folder Naming Rule" : "Правило именовања корисничке фасцикле",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Оставите празно за корисничко име (подразумевано). У супротном, наведите особину LDAP/AD.",
"Internal Username" : "Интерно корисничко име:",
+ "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." : "Подразумевано се интерно корисничко име креира од UUID атрибута. Тиме се гарантује да се корисничко име јединствено и да карактери не морају да се конвертују. Интерно корисничко име има ограничења да су дозвољени само следећи карактери: [ a-zA-Z0-9_.@- ]. Остали карактери ће или бити замењени ASCII еквивалентима или ће бити прескочени. Ако се деси поклапање са постојећим корисничким именом, додаће се број на крај имена. Интерно корисничко име се користи да идентификује корисника интерно. Такође се користи и као подразумевано име за име корисничку фасцикле, а и део је удаљених адреса, нпр. свих *DAV сервиса. Уз помоћ овог подешавања, може да се промени подразумевано понашање. Оставите га празним за подразумевано понашање. Промене ће се тицати само новомапираних (додатих) LDAP корисника.",
"Internal Username Attribute:" : "Интерни параметри корисничког имена:",
"Override UUID detection" : "Прескочи 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." : "Подразумевано, атрибут UUID се аутоматски детектује. Атрибут UUID се користи за сигурну идентификацију LDAP корисника и група. Такође, локално корисничко име ће бити креирано на основу UUID-a, ако није другачије назначено. Можете заобићи поставке и проследити други атрибут по вашем избору. Морате бити сигурни да је изабрани атрибут јединствен и да га корисници и групе могу преносити. Оставите празно за подразумевано понашање. Промене ће имати дејство само на новомапираним (доданим) LDAP корисницима и групама.",
@@ -146,7 +189,6 @@ OC.L10N.register(
"Clear Groupname-LDAP Group Mapping" : "Очисти Groupname-LDAP мапирање група",
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Недостаје %uid местодржач. Биће замењен са пријавним именом при ЛДАП / АД упиту.",
"Verify settings and count groups" : "Провери поставке и преброј групе",
- "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Дозволи пријаву уз ЛДАП / АД корисичко име које је или uid или samaccountname и биће откривено.",
"Add a new and blank configuration" : "Додај нову празну поставу",
"You can omit the protocol, except you require SSL. Then start with ldaps://" : "Можете да изоставите протокол, осим ако захтевате ССЛ. У том случају почните са 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>Упозорење:</b> Апликације user_ldap и user_webdavauth нису компатибилне. Можете имати проблема. Питајте систем администратора да искључи једну од њих.",
diff --git a/apps/user_ldap/l10n/sr.json b/apps/user_ldap/l10n/sr.json
index a9ad3314d7a..c3787ce0909 100644
--- a/apps/user_ldap/l10n/sr.json
+++ b/apps/user_ldap/l10n/sr.json
@@ -1,16 +1,24 @@
{ "translations": {
"Failed to clear the mappings." : "Неуспело чишћење мапирања.",
- "Failed to delete the server configuration" : "Неуспело брисање поставе сервера",
- "The configuration is invalid: anonymous bind is not allowed." : "Неисправна подешавања. Анонимна веза није дозвољена.",
- "The configuration is valid and the connection could be established!" : "Конфигурација је исправна и веза може да се успостави!",
- "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Конфигурација је важећа, али Bind није успео. Проверите подешавања сервера и акредитиве.",
- "The configuration is invalid. Please have a look at the logs for further details." : "Конфигурација је неисправна. Погледајте у дневнику записа за додатне детаље.",
+ "Failed to delete the server configuration" : "Неуспело брисање конфигурације сервера",
+ "Invalid configuration: Anonymous binding is not allowed." : "Неисправна конфигурација: Анонимно везивање није дозвољено.",
+ "Valid configuration, connection established!" : "Исправна конфигурација, веза успостављена!",
+ "Valid configuration, but binding failed. Please check the server settings and credentials." : "Исправна конфигурација, али везивање није успело. Проверите поставке сервера и акредитиве.",
+ "Invalid configuration. Please have a look at the logs for further details." : "Неисправна конфигурација. Погледајте дневник за више детаља.",
"No action specified" : "Није наведена радња",
"No configuration specified" : "Није наведена постава",
"No data specified" : "Нису наведени подаци",
" Could not set configuration %s" : "Нисам могао да подесим конфигурацију %s",
"Action does not exist" : "Радња не постоји",
+ "LDAP user and group backend" : "Позадински мотор за LDAP корисника и групу",
+ "Renewing …" : "Обнављам …",
+ "Very weak password" : "Веома слаба лозинка",
+ "Weak password" : "Слаба лозинка",
+ "So-so password" : "Осредња лозинка",
+ "Good password" : "Добра лозинка",
+ "Strong password" : "Јака лозинка",
"The Base DN appears to be wrong" : "Базни ДН је изгледа погрешан",
+ "Testing configuration…" : "Тестирам конфигурацију…",
"Configuration incorrect" : "Конфигурација је неисправна",
"Configuration incomplete" : "Конфигурација није комплетна",
"Configuration OK" : "Конфигурација је у реду",
@@ -30,24 +38,32 @@
"Mappings cleared successfully!" : "Мапирања успешно очишћена!",
"Error while clearing the mappings." : "Грешка при чишћењу мапирања.",
"Anonymous bind is not allowed. Please provide a User DN and Password." : "Анонимно везивање није дозвољено. Дајте кориснички ДН и лозинку.",
- "LDAP Operations error. Anonymous bind might not be allowed." : "Грешка ЛДАП радње. Анонимна веза можда није дозвољена.",
+ "LDAP Operations error. Anonymous bind might not be allowed." : "Грешка LDAP радње. Анонимна веза можда није дозвољена.",
"Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Упис није успео. Проверите да је база у функцији. Поново учитајте пре настављања.",
- "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?" : "Пребацивање режима укључиће аутоматске ЛДАП упите. Зависно од ЛДАП величине то може потрајати. Заиста желите да промените режим?",
+ "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?" : "Пребацивање режима укључиће аутоматске LDAP упите. Зависно од LDAP величине то може потрајати. Заиста желите да промените режим?",
"Mode switch" : "Промена режима",
"Select attributes" : "Изаберите атрибуте",
- "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Корисник није нађен. Проверите пријавне атрибуте и корисничко име. Важећи филтер (за копирај-налепи за оверу командне линије): <br/>",
+ "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Корисник није нађен. Проверите атрибуте пријаве и корисничко име. Ефективни филтер (да копирате и налепите за верификацију у конзоли):<br/>",
"User found and settings verified." : "Корисник нађен и поставке проверене.",
- "An unspecified error occurred. Please check the settings and the log." : "Десила се неодређана грешка. Проверите поставке и записник.",
+ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Размислите и да смањите претрагу, пошто обухвата много корисника, од којих ће само први моћи да се пријави.",
+ "An unspecified error occurred. Please check log and settings." : "Десила се непозната грешка. Погледајте дневник и подешавања.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Филтер претраге је неисправан, вероватно због синтаксе попут неједнаког броја отворених и затворених заграда. Проверите.",
- "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Дошло је до грешке ЛДАП / АД везе. Проверите домаћина, порт и акредитиве.",
+ "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Дошло је до грешке LDAP / AD везе. Проверите домаћина, порт и акредитиве.",
+ "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "\"%uid\" резервисано поље недостаје. Биће замењено са корисничким именом када се ради упит над LDAP / AD-ом.",
"Please provide a login name to test against" : "Наведите пријавно име за тест са",
- "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Поље групе је искључено јер ЛДАП / АД сервер не подржава припадност групи.",
- "_%s group found_::_%s groups found_" : ["нађена %s група","нађене %s групе","нађено %s група"],
- "_%s user found_::_%s users found_" : ["нађен %s корисник","нађена %s корисника","нађено %s корисника"],
- "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Немогу да откријем особину приказивања корисниковог имена. Наведите је у напредним поставкама LDAP-a",
+ "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Поље групе је искључено јер LDAP / AD сервер не подржава припадност групи.",
+ "Password change rejected. Hint: " : "Промена лозинке није прихваћена. Смерница:",
+ "Please login with the new password" : "Пријавите се са новом лозинком",
+ "Your password will expire tomorrow." : "Ваша лозинка ће истећи сутра.",
+ "Your password will expire today." : "Ваша лозинка ће истећи данас.",
+ "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Ваша лозинка ће истећи за %n дан.","Ваша лозинка ће истећи за %n дана.","Ваша лозинка ће истећи за %n дана."],
+ "LDAP / AD integration" : "LDAP / AD интеграција",
+ "_%s group found_::_%s groups found_" : ["нађена %s група","нађене %s групе","Нађено %s група"],
+ "_%s user found_::_%s users found_" : ["нађен %s корисник","нађена %s корисника","Нађено %s корисника"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Не могу да пронађем атрибут имена за приказ корисника. Молимо сами га наведите у LDAP напредним подешавањима.",
"Could not find the desired feature" : "Не могу да пронађем жељену особину",
"Invalid Host" : "Неисправан домаћин",
- "Test Configuration" : "Испробај поставу",
+ "Test Configuration" : "Испробај поставку",
"Help" : "Помоћ",
"Groups meeting these criteria are available in %s:" : "Групе које испуњавају ове критеријуме су доступне у %s:",
"Only these object classes:" : "Само ове класе објеката:",
@@ -55,40 +71,54 @@
"Search groups" : "Претражи групе",
"Available groups" : "Доступне групе",
"Selected groups" : "Изабране групе",
- "Edit LDAP Query" : "Уреди ЛДАП упит",
- "LDAP Filter:" : "ЛДАП филтер:",
+ "Edit LDAP Query" : "Уреди LDAP упит",
+ "LDAP Filter:" : "LDAP филтер:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "Филтер прецизира које ће LDAP групе требају имати приступ %s случају.",
+ "Verify settings and count the groups" : "Верификуј поставке и преброј групе",
"When logging in, %s will find the user based on the following attributes:" : "При пријављивању, %s ће пронаћи корисника на основу следећих атрибута:",
- "LDAP / AD Username:" : "ЛДАП / АД корисничко име:",
- "LDAP / AD Email Address:" : "ЛДАП / АД е-адреса:",
- "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Дозволи пријаву уз атрибут е-поште. Mail и mailPrimaryAddress биће дозвољени.",
- "Other Attributes:" : "Остали параметри:",
- "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Одређује филтер који ће се применити при покушају пријављивања. %%uid замењује корисничко име при пријављивању. Пример: \"uid=%%uid\"",
+ "LDAP / AD Username:" : "LDAP / AD корисничко име:",
+ "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Дозволи пријављивање преко LDAP / AD корисничког имена, које је или \"uid\" или \"sAMAccountName\" и биће детектовано.",
+ "LDAP / AD Email Address:" : "LDAP / AD адреса е-поште:",
+ "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Дозволи пријављивање преко атрибута адресе е-поште. \"mail\" и \"mailPrimaryAddress\" су дозвољени.",
+ "Other Attributes:" : "Остали атрибути:",
+ "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Дефинише филтер који ће се применити, када се покуша пријава. \"%%uid\" замењује корисничко име у пријави. Example: \"uid=%%uid\"",
"Test Loginname" : "Испробај име за пријаву",
"Verify settings" : "Провери поставке",
"1. Server" : "1. сервер",
"%s. Server:" : "%s. Сервер:",
+ "Add a new configuration" : "Додај нову поставку",
"Copy current configuration into new directory binding" : "Копирај тренутну поставу у везивање новог директоријума",
"Delete the current configuration" : "Обриши тренутне поставке",
"Host" : "Домаћин",
+ "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Можете да изоставите протокол, осим ако не захтевате SSL. Ако је потребан, почните са ldaps://",
"Port" : "Порт",
"Detect Port" : "Откриј порт",
"User DN" : "Корисников DN",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "DN корисника клијента са којим треба да се успостави веза, нпр. uid=agent,dc=example,dc=com. За анониман приступ, оставите поља DN и лозинка празним.",
"Password" : "Лозинка",
"For anonymous access, leave DN and Password empty." : "За анониман приступ, оставите поља DN и лозинка празним.",
- "One Base DN per line" : "Једна Base DN по линији",
+ "One Base DN per line" : "Један Base DN по линији",
"You can specify Base DN for users and groups in the Advanced tab" : "Можете навести Base DN за кориснике и групе у картици Напредно",
- "Detect Base DN" : "Откриј базни ДН",
- "Test Base DN" : "Тестирај базни ДН",
+ "Detect Base DN" : "Откриј Base DN",
+ "Test Base DN" : "Тестирај Base DN",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Избегава аутоматске LDAP захтеве. Боље за веће поставке, али тражи мало више познавања LDAP-а.",
"Manually enter LDAP filters (recommended for large directories)" : "Унесите ручно LDAP филтере (препоручено за велике директоријуме)",
+ "Listing and searching for users is constrained by these criteria:" : "Излиставање и претраживање корисника је ограничено следећим условима:",
"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." : "Најчешће класе објеката за кориснике су organizationalPerson, person, user и inetOrgPerson. Ако нисте сигурни шта да изаберете, питајте администратора именика.",
"The filter specifies which LDAP users shall have access to the %s instance." : "Филтер одређује који ЛДАП корисници ће имати приступ на %s.",
"Verify settings and count users" : "Провери поставке и преброј кориснике",
"Saving" : "Снимам",
"Back" : "Назад",
"Continue" : "Настави",
+ "Please renew your password." : "Молимо обновите Вашу лозинку.",
+ "An internal error occurred." : "Догодила се интерна грешка.",
+ "Please try again or contact your administrator." : "Покушајте поново или контактирајте администратора.",
+ "Current password" : "Тренутна лозинка",
+ "New password" : "Нова лозинка",
+ "Renew password" : "Обнови лозинку",
+ "Wrong password. Reset it?" : "Погрешна лозинка. Желите ли да је ресетујете?",
+ "Wrong password." : "Лоша лозинка.",
+ "Cancel" : "Одустани",
"LDAP" : "LDAP",
"Server" : "Сервер",
"Users" : "Корисници",
@@ -96,22 +126,24 @@
"Groups" : "Групе",
"Expert" : "Стручњак",
"Advanced" : "Напредно",
- "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Упозорење:</b> ПХП ЛДАП модул није инсталиран и зачеље неће радити. Питајте систем администратора да га инсталира.",
+ "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Упозорење:</b> PHP LDAP модул није инсталиран и зачеље неће радити. Питајте систем администратора да га инсталира.",
"Connection Settings" : "Поставке везе",
"Configuration Active" : "Конфигурација активна",
"When unchecked, this configuration will be skipped." : "Када није штриклирано, ова конфигурација ће бити прескочена.",
"Backup (Replica) Host" : "Домаћин Резервне копије (Реплике)",
- "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Наведите опционог домаћина за резервне копије. Он мора бити реплика главног ЛДАП/АД сервера.",
+ "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Наведите опционог домаћина за резервне копије. Он мора бити реплика главног LDAP/AD сервера.",
"Backup (Replica) Port" : "Порт Резервне копије (Реплике)",
"Disable Main Server" : "Онемогући главни сервер",
"Only connect to the replica server." : "Повезано само на сервер за копирање.",
- "Turn off SSL certificate validation." : "Искључите потврду ССЛ сертификата.",
+ "Turn off SSL certificate validation." : "Искључите потврду 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." : "Није препоручено, користите само за тестирање! Ако веза ради само са овом опцијом, увезите SSL сертификате LDAP сервера на ваш %s сервер.",
"Cache Time-To-Live" : "Трајност кеша",
"in seconds. A change empties the cache." : "у секундама. Промена празни кеш меморију.",
"Directory Settings" : "Подешавања директоријума",
"User Display Name Field" : "Име приказа корисника",
- "The LDAP attribute to use to generate the user's display name." : "LDAP особина за стварање имена за приказ корисника.",
+ "The LDAP attribute to use to generate the user's display name." : "LDAP атрибут за стварање имена за приказ корисника.",
+ "2nd User Display Name Field" : "2. поље за приказ имена корисника",
+ "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Опционо. LDAP атрибут који се додаје на име у заградама. Коначно име за приказ ће бити нешто попут »Петар Петровић (pera@example.org)«.",
"Base User Tree" : "Основно стабло корисника",
"One User Base DN per line" : "Један Корисников јединствени назив DN по линији",
"User Search Attributes" : "Параметри претраге корисника",
@@ -122,17 +154,28 @@
"One Group Base DN per line" : "Један Групни јединствени назив DN по линији",
"Group Search Attributes" : "Параметри претраге група",
"Group-Member association" : "Придруживање чланова у групу",
+ "Dynamic Group Member URL" : "Динамична адреса члана групе",
+ "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.)" : "LDAP атрибут који на групном објекту садржи адресу LDAP претраге којом се одређује да ли објекат припада групи. (празно подешавање искључује могућност динамичких припадности групама.) ",
"Nested Groups" : "Угнеждене групе",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Када је укључено, подржане су групе унутар групе. (Ради само ако особина члана групе садржи DN-ове.)",
"Paging chunksize" : "Величина делића странице",
"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.)" : "Величина делића се користи за страничење ЛДАП претрага које могу вратити гомилу резултата попут набрајања корисника или група. (постављање на 0 у таквим ситуацијама искључује приказ претраге по страницама)",
+ "Enable LDAP password changes per user" : "Укључи промену LDAP лозинке по кориснику",
+ "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." : "Дозволи LDAP корисницима да мењају своју лозинку и дозволи супер администраторима и администраторима група да мењају лозинке њихових LDAP корисника. Ради само када је контрола права приступа подешена према LDAP серверу. Пошто се лозинке шаљу као обичан тест ка LDAP серверу, мора се користити протокол са шифровањем, као и укључивање хеширања на LDAP серверу.",
+ "(New password is sent as plain text to LDAP)" : "(нова лозинка се шаље као обичан текст на LDAP)",
+ "Default password policy DN" : "Подразумевана политика промене DN лозинки",
+ "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." : "Подразумевана политика промене лозинки ће се користити када лозинка истиче. Може се користити само када се укључи промена лозинке по кориснику и подржава је само OpenLDAP. Оставите празно да искључите шта се дешава када лозинка истиче.",
"Special Attributes" : "Посебни параметри",
"Quota Field" : "Поље квоте",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Оставите празно за подразумевану квоту корисника. У супротном, ставите LDAP/AD атрибут.",
"Quota Default" : "Подразумевана квота",
- "Email Field" : "Поље е-поште",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Редефинише подразумевану квоту за LDAP кориснике који немају постављену квоту у Quota пољу.",
+ "Email Field" : "Поље адресе е-поште",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Поставља адресу е-поште корисника из LDAP атрибута. Оставите празно за подразумевано понашање.",
"User Home Folder Naming Rule" : "Правило именовања корисничке фасцикле",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Оставите празно за корисничко име (подразумевано). У супротном, наведите особину LDAP/AD.",
"Internal Username" : "Интерно корисничко име:",
+ "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." : "Подразумевано се интерно корисничко име креира од UUID атрибута. Тиме се гарантује да се корисничко име јединствено и да карактери не морају да се конвертују. Интерно корисничко име има ограничења да су дозвољени само следећи карактери: [ a-zA-Z0-9_.@- ]. Остали карактери ће или бити замењени ASCII еквивалентима или ће бити прескочени. Ако се деси поклапање са постојећим корисничким именом, додаће се број на крај имена. Интерно корисничко име се користи да идентификује корисника интерно. Такође се користи и као подразумевано име за име корисничку фасцикле, а и део је удаљених адреса, нпр. свих *DAV сервиса. Уз помоћ овог подешавања, може да се промени подразумевано понашање. Оставите га празним за подразумевано понашање. Промене ће се тицати само новомапираних (додатих) LDAP корисника.",
"Internal Username Attribute:" : "Интерни параметри корисничког имена:",
"Override UUID detection" : "Прескочи 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." : "Подразумевано, атрибут UUID се аутоматски детектује. Атрибут UUID се користи за сигурну идентификацију LDAP корисника и група. Такође, локално корисничко име ће бити креирано на основу UUID-a, ако није другачије назначено. Можете заобићи поставке и проследити други атрибут по вашем избору. Морате бити сигурни да је изабрани атрибут јединствен и да га корисници и групе могу преносити. Оставите празно за подразумевано понашање. Промене ће имати дејство само на новомапираним (доданим) LDAP корисницима и групама.",
@@ -144,7 +187,6 @@
"Clear Groupname-LDAP Group Mapping" : "Очисти Groupname-LDAP мапирање група",
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Недостаје %uid местодржач. Биће замењен са пријавним именом при ЛДАП / АД упиту.",
"Verify settings and count groups" : "Провери поставке и преброј групе",
- "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Дозволи пријаву уз ЛДАП / АД корисичко име које је или uid или samaccountname и биће откривено.",
"Add a new and blank configuration" : "Додај нову празну поставу",
"You can omit the protocol, except you require SSL. Then start with ldaps://" : "Можете да изоставите протокол, осим ако захтевате ССЛ. У том случају почните са 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>Упозорење:</b> Апликације user_ldap и user_webdavauth нису компатибилне. Можете имати проблема. Питајте систем администратора да искључи једну од њих.",
diff --git a/apps/user_ldap/lib/Access.php b/apps/user_ldap/lib/Access.php
index b6674cf0332..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
*
@@ -1853,20 +1856,19 @@ class Access extends LDAPUtility implements IUserTools {
$cookie = $this->getPagedResultCookie($base, $filter, $limit, $offset);
if(empty($cookie) && $cookie !== "0" && ($offset > 0)) {
- // no cookie known, although the offset is not 0. Maybe cache run out. We need
- // to start all over *sigh* (btw, Dear Reader, did you know LDAP paged
- // searching was designed by MSFT?)
- // Lukas: No, but thanks to reading that source I finally know!
- // '0' is valid, because 389ds
- $reOffset = ($offset - $limit) < 0 ? 0 : $offset - $limit;
- //a bit recursive, $offset of 0 is the exit
- \OCP\Util::writeLog('user_ldap', 'Looking for cookie L/O '.$limit.'/'.$reOffset, \OCP\Util::INFO);
- $this->search($filter, array($base), $attr, $limit, $reOffset, true);
+ // no cookie known from a potential previous search. We need
+ // to start from 0 to come to the desired page. cookie value
+ // of '0' is valid, because 389ds
+ $reOffset = 0;
+ while($reOffset < $offset) {
+ $this->search($filter, array($base), $attr, $limit, $reOffset, true);
+ $reOffset += $limit;
+ }
$cookie = $this->getPagedResultCookie($base, $filter, $limit, $offset);
//still no cookie? obviously, the server does not like us. Let's skip paging efforts.
+ // '0' is valid, because 389ds
//TODO: remember this, probably does not change in the next request...
if(empty($cookie) && $cookie !== '0') {
- // '0' is valid, because 389ds
$cookie = null;
}
}
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 440f5d2444e..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
@@ -122,7 +126,7 @@ class Connection extends LDAPUtility {
/**
* @param string $name
- * @return bool|mixed|void
+ * @return bool|mixed
*/
public function __get($name) {
if(!$this->configured) {
@@ -436,8 +440,8 @@ class Connection extends LDAPUtility {
|| ($agent !== '' && $pwd === '')
) {
\OCP\Util::writeLog('user_ldap',
- $errorStr.'either no password is given for the'.
- 'user agent or a password is given, but not an'.
+ $errorStr.'either no password is given for the '.
+ 'user agent or a password is given, but not an '.
'LDAP agent.',
\OCP\Util::WARN);
$configurationOK = false;
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 96bb670b789..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
@@ -65,7 +67,7 @@ abstract class Proxy {
static $db;
static $coreUserManager;
static $coreNotificationManager;
- if(is_null($fs)) {
+ if($fs === null) {
$ocConfig = \OC::$server->getConfig();
$fs = new FilesystemHelper();
$log = new LogWrapper();
@@ -158,7 +160,7 @@ abstract class Proxy {
*/
private function getCacheKey($key) {
$prefix = 'LDAP-Proxy-';
- if(is_null($key)) {
+ if($key === null) {
return $prefix;
}
return $prefix.md5($key);
@@ -169,24 +171,17 @@ abstract class Proxy {
* @return mixed|null
*/
public function getFromCache($key) {
- if(is_null($this->cache) || !$this->isCached($key)) {
+ if($this->cache === null) {
return null;
}
- $key = $this->getCacheKey($key);
-
- return json_decode(base64_decode($this->cache->get($key)));
- }
- /**
- * @param string $key
- * @return bool
- */
- public function isCached($key) {
- if(is_null($this->cache)) {
- return false;
- }
$key = $this->getCacheKey($key);
- return $this->cache->hasKey($key);
+ $value = $this->cache->get($key);
+ if ($value === null) {
+ return null;
+ }
+
+ return json_decode(base64_decode($value));
}
/**
@@ -194,16 +189,16 @@ abstract class Proxy {
* @param mixed $value
*/
public function writeToCache($key, $value) {
- if(is_null($this->cache)) {
+ if($this->cache === null) {
return;
}
$key = $this->getCacheKey($key);
$value = base64_encode(json_encode($value));
- $this->cache->set($key, $value, '2592000');
+ $this->cache->set($key, $value, 2592000);
}
public function clearCache() {
- if(is_null($this->cache)) {
+ if($this->cache === null) {
return;
}
$this->cache->clear($this->getCacheKey(null));
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 5017f35ed0a..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
*
@@ -529,7 +532,6 @@ class User {
$targetUser->setQuota($quota);
} else {
$this->log->log('not suitable default quota found for user ' . $this->uid . ': [' . $defaultQuota . ']', \OCP\Util::WARN);
- $targetUser->setQuota('default');
}
} else {
$this->log->log('trying to set a quota for user ' . $this->uid . ' but the user is missing', \OCP\Util::ERROR);
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 cd06b27f913..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
*
@@ -43,7 +45,7 @@ class AdminTest extends TestCase {
public function setUp() {
parent::setUp();
- $this->l10n = $this->getMockBuilder('\OCP\IL10N')->getMock();
+ $this->l10n = $this->getMockBuilder(IL10N::class)->getMock();
$this->admin = new Admin(
$this->l10n
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 637842d9ac7..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
*
@@ -38,6 +42,7 @@ use OCP\Image;
use OCP\IUser;
use OCP\IUserManager;
use OCP\Notification\IManager as INotificationManager;
+use OCP\Notification\INotification;
/**
* Class UserTest
@@ -134,7 +139,7 @@ class UserTest extends \Test\TestCase {
$uid = 'alice';
$dn = 'uid=alice,dc=foo,dc=bar';
- $uuser = $this->getMockBuilder('\OCP\IUser')
+ $uuser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$uuser->expects($this->once())
@@ -453,9 +458,8 @@ class UserTest extends \Test\TestCase {
->will($this->returnValue(false));
$user = $this->createMock('\OCP\IUser');
- $user->expects($this->once())
- ->method('setQuota')
- ->with('default');
+ $user->expects($this->never())
+ ->method('setQuota');
$userMgr->expects($this->once())
->method('get')
@@ -495,9 +499,8 @@ class UserTest extends \Test\TestCase {
->method('__get');
$user = $this->createMock('\OCP\IUser');
- $user->expects($this->once())
- ->method('setQuota')
- ->with('default');
+ $user->expects($this->never())
+ ->method('setQuota');
$userMgr->expects($this->once())
->method('get')
@@ -633,9 +636,8 @@ class UserTest extends \Test\TestCase {
->will($this->returnValue(false));
$user = $this->createMock('\OCP\IUser');
- $user->expects($this->once())
- ->method('setQuota')
- ->with('default');
+ $user->expects($this->never())
+ ->method('setQuota');
$userMgr->expects($this->once())
->method('get')
@@ -681,9 +683,8 @@ class UserTest extends \Test\TestCase {
->will($this->returnValue(array('23 flush')));
$user = $this->createMock('\OCP\IUser');
- $user->expects($this->once())
- ->method('setQuota')
- ->with('default');
+ $user->expects($this->never())
+ ->method('setQuota');
$userMgr->expects($this->once())
->method('get')
@@ -726,9 +727,8 @@ class UserTest extends \Test\TestCase {
->method('readAttribute');
$user = $this->createMock('\OCP\IUser');
- $user->expects($this->once())
- ->method('setQuota')
- ->with('default');
+ $user->expects($this->never())
+ ->method('setQuota');
$userMgr->expects($this->once())
->method('get')
@@ -1284,7 +1284,7 @@ class UserTest extends \Test\TestCase {
return array();
}));
- $notification = $this->getMockBuilder('OCP\Notification\INotification')
+ $notification = $this->getMockBuilder(INotification::class)
->disableOriginalConstructor()
->getMock();
$notification->expects($this->any())
@@ -1358,7 +1358,7 @@ class UserTest extends \Test\TestCase {
return array();
}));
- $notification = $this->getMockBuilder('OCP\Notification\INotification')
+ $notification = $this->getMockBuilder(INotification::class)
->disableOriginalConstructor()
->getMock();
$notification->expects($this->any())
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_CO.js b/apps/workflowengine/l10n/es_CO.js
new file mode 100644
index 00000000000..a67dbc8472f
--- /dev/null
+++ b/apps/workflowengine/l10n/es_CO.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_CO.json b/apps/workflowengine/l10n/es_CO.json
new file mode 100644
index 00000000000..1ae425f4e19
--- /dev/null
+++ b/apps/workflowengine/l10n/es_CO.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_CR.js b/apps/workflowengine/l10n/es_CR.js
new file mode 100644
index 00000000000..a67dbc8472f
--- /dev/null
+++ b/apps/workflowengine/l10n/es_CR.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_CR.json b/apps/workflowengine/l10n/es_CR.json
new file mode 100644
index 00000000000..1ae425f4e19
--- /dev/null
+++ b/apps/workflowengine/l10n/es_CR.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_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
diff --git a/apps/workflowengine/l10n/id.js b/apps/workflowengine/l10n/id.js
index f1505694a22..2e22dd57a98 100644
--- a/apps/workflowengine/l10n/id.js
+++ b/apps/workflowengine/l10n/id.js
@@ -1,9 +1,9 @@
OC.L10N.register(
"workflowengine",
{
- "Successfully saved" : "Berhasil disimpan",
+ "Saved" : "Disimpan",
"Saving failed:" : "Penyimpanan gagal:",
- "File mime type" : "Tipe MIME berkas",
+ "File MIME type" : "Berkas tipe MIME",
"is" : "adalah",
"is not" : "bukan",
"matches" : "cocok dengan",
@@ -50,6 +50,24 @@ OC.L10N.register(
"The given time span is invalid" : "Rentang waktu yang diberikan tidak sah",
"The given start time is invalid" : "Waktu mulai yang diberikan tidak sah",
"The given end time is invalid" : "Waktu selesai yang diberikan tidak sah",
- "The given group does not exist" : "Grup yang diberikan tidak ada"
+ "The given group does not exist" : "Grup yang diberikan tidak ada",
+ "Check %s is invalid or does not exist" : "Cek %s tidak valid atau tidak ada",
+ "Operation #%s does not exist" : "Operasi #%s tidak ada",
+ "Operation %s does not exist" : "Operasi %s tidak ada",
+ "Operation %s is invalid" : "Operasi %s tidak valid",
+ "Check %s does not exist" : "Cek %s tidak ada",
+ "Check %s is invalid" : "Cek %s tidak valid",
+ "Check #%s does not exist" : "Cek #%s tidak ada",
+ "Workflow" : "Alur kerja",
+ "Open documentation" : "Buka dokumentasi",
+ "Add rule group" : "Tambahkan aturan grup ",
+ "Short rule description" : "Deskripsi aturan singkat",
+ "Add rule" : "Tambahkan aturan",
+ "Reset" : "Setel ulang",
+ "Save" : "Simpan",
+ "Saving…" : "Menyimpan...",
+ "Loading…" : "Memuat...",
+ "Successfully saved" : "Berhasil disimpan",
+ "File mime type" : "Tipe MIME berkas"
},
"nplurals=1; plural=0;");
diff --git a/apps/workflowengine/l10n/id.json b/apps/workflowengine/l10n/id.json
index 5091cd67bd3..319caa1ba6e 100644
--- a/apps/workflowengine/l10n/id.json
+++ b/apps/workflowengine/l10n/id.json
@@ -1,7 +1,7 @@
{ "translations": {
- "Successfully saved" : "Berhasil disimpan",
+ "Saved" : "Disimpan",
"Saving failed:" : "Penyimpanan gagal:",
- "File mime type" : "Tipe MIME berkas",
+ "File MIME type" : "Berkas tipe MIME",
"is" : "adalah",
"is not" : "bukan",
"matches" : "cocok dengan",
@@ -48,6 +48,24 @@
"The given time span is invalid" : "Rentang waktu yang diberikan tidak sah",
"The given start time is invalid" : "Waktu mulai yang diberikan tidak sah",
"The given end time is invalid" : "Waktu selesai yang diberikan tidak sah",
- "The given group does not exist" : "Grup yang diberikan tidak ada"
+ "The given group does not exist" : "Grup yang diberikan tidak ada",
+ "Check %s is invalid or does not exist" : "Cek %s tidak valid atau tidak ada",
+ "Operation #%s does not exist" : "Operasi #%s tidak ada",
+ "Operation %s does not exist" : "Operasi %s tidak ada",
+ "Operation %s is invalid" : "Operasi %s tidak valid",
+ "Check %s does not exist" : "Cek %s tidak ada",
+ "Check %s is invalid" : "Cek %s tidak valid",
+ "Check #%s does not exist" : "Cek #%s tidak ada",
+ "Workflow" : "Alur kerja",
+ "Open documentation" : "Buka dokumentasi",
+ "Add rule group" : "Tambahkan aturan grup ",
+ "Short rule description" : "Deskripsi aturan singkat",
+ "Add rule" : "Tambahkan aturan",
+ "Reset" : "Setel ulang",
+ "Save" : "Simpan",
+ "Saving…" : "Menyimpan...",
+ "Loading…" : "Memuat...",
+ "Successfully saved" : "Berhasil disimpan",
+ "File mime type" : "Tipe MIME berkas"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/sr.js b/apps/workflowengine/l10n/sr.js
new file mode 100644
index 00000000000..2a0c0118e16
--- /dev/null
+++ b/apps/workflowengine/l10n/sr.js
@@ -0,0 +1,73 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "Saved" : "Снимљено",
+ "Saving failed:" : "Снимање није успело:",
+ "File MIME type" : "MIME тип фајла",
+ "is" : "је",
+ "is not" : "није",
+ "matches" : "се поклапа са",
+ "does not match" : "се не поклапа са",
+ "Example: {placeholder}" : "Пример: {placeholder}",
+ "File size (upload)" : "Величина фајла (отпремање)",
+ "less" : "је мања од",
+ "less or equals" : "мања или једнака од",
+ "greater or equals" : "већа или једнака од",
+ "greater" : "већа од",
+ "File system tag" : "Системска ознака фајла",
+ "is tagged with" : "је означен са",
+ "is not tagged with" : "није означен са",
+ "Select tag…" : "Одаберите ознаку…",
+ "Request remote address" : "Захтевај удаљену адресу",
+ "matches IPv4" : "поклапа се са IPv4 адресом",
+ "does not match IPv4" : "не поклапа се са IPv4 адресом",
+ "matches IPv6" : "поклапа се са IPv6 адресом",
+ "does not match IPv6" : "не поклапа се са IPv6 адресом",
+ "Request time" : "Време захтева",
+ "between" : "између",
+ "not between" : "није између",
+ "Start" : "Почетак",
+ "End" : "Крај",
+ "Select timezone…" : "Одаберите временску зону…",
+ "Request URL" : "Адреса захтева",
+ "Predefined URLs" : "Предефинисане адресе",
+ "Files WebDAV" : "WebDAV фајлови",
+ "Request user agent" : "Кориснички агент захтева",
+ "Sync clients" : "Синхронизовани клијенти",
+ "Android client" : "Андроид клијент",
+ "iOS client" : "iOS клијент",
+ "Desktop client" : "Десктоп клијент",
+ "User group membership" : "Припадност групи",
+ "is member of" : "је члан групе",
+ "is not member of" : "није члан групе",
+ "The given operator is invalid" : "Дати оператор није исправан",
+ "The given regular expression is invalid" : "Дати регуларни израз није исправан",
+ "The given file size is invalid" : "Дата величина фајла није исправна",
+ "The given tag id is invalid" : "Дати ИД ознаке није исправан",
+ "The given IP range is invalid" : "Дати опсег ИП адреса није исправан",
+ "The given IP range is not valid for IPv4" : "Дати опсег ИП адреса није исправан за IPv4",
+ "The given IP range is not valid for IPv6" : "Дати опсег ИП адреса није исправан за IPv6",
+ "The given time span is invalid" : "Дати временски оквир није исправан",
+ "The given start time is invalid" : "Дато време почетка није исправно",
+ "The given end time is invalid" : "Дато време краја није исправно",
+ "The given group does not exist" : "Дата група не постоји",
+ "Check %s is invalid or does not exist" : "Проверите да ли је %s неисправно или не постоји",
+ "Operation #%s does not exist" : "Операција #%s не постоји",
+ "Operation %s does not exist" : "Операција %s не постоји",
+ "Operation %s is invalid" : "Операција %s није исправна",
+ "Check %s does not exist" : "Проверите да ли %s постоји",
+ "Check %s is invalid" : "Проверите да ли је %s исправно",
+ "Check #%s does not exist" : "Проверите да ли #%s постоји",
+ "Workflow" : "Процес рада",
+ "Open documentation" : "Отвори документацију",
+ "Add rule group" : "Додај групу правила",
+ "Short rule description" : "Кратки опис правила",
+ "Add rule" : "Додај правило",
+ "Reset" : "Ресетуј",
+ "Save" : "Сачувај",
+ "Saving…" : "Чувам…",
+ "Loading…" : "Учитавање…",
+ "Successfully saved" : "Успешно сачувано",
+ "File mime type" : "MIME тип фајла"
+},
+"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/workflowengine/l10n/sr.json b/apps/workflowengine/l10n/sr.json
new file mode 100644
index 00000000000..ea34207a608
--- /dev/null
+++ b/apps/workflowengine/l10n/sr.json
@@ -0,0 +1,71 @@
+{ "translations": {
+ "Saved" : "Снимљено",
+ "Saving failed:" : "Снимање није успело:",
+ "File MIME type" : "MIME тип фајла",
+ "is" : "је",
+ "is not" : "није",
+ "matches" : "се поклапа са",
+ "does not match" : "се не поклапа са",
+ "Example: {placeholder}" : "Пример: {placeholder}",
+ "File size (upload)" : "Величина фајла (отпремање)",
+ "less" : "је мања од",
+ "less or equals" : "мања или једнака од",
+ "greater or equals" : "већа или једнака од",
+ "greater" : "већа од",
+ "File system tag" : "Системска ознака фајла",
+ "is tagged with" : "је означен са",
+ "is not tagged with" : "није означен са",
+ "Select tag…" : "Одаберите ознаку…",
+ "Request remote address" : "Захтевај удаљену адресу",
+ "matches IPv4" : "поклапа се са IPv4 адресом",
+ "does not match IPv4" : "не поклапа се са IPv4 адресом",
+ "matches IPv6" : "поклапа се са IPv6 адресом",
+ "does not match IPv6" : "не поклапа се са IPv6 адресом",
+ "Request time" : "Време захтева",
+ "between" : "између",
+ "not between" : "није између",
+ "Start" : "Почетак",
+ "End" : "Крај",
+ "Select timezone…" : "Одаберите временску зону…",
+ "Request URL" : "Адреса захтева",
+ "Predefined URLs" : "Предефинисане адресе",
+ "Files WebDAV" : "WebDAV фајлови",
+ "Request user agent" : "Кориснички агент захтева",
+ "Sync clients" : "Синхронизовани клијенти",
+ "Android client" : "Андроид клијент",
+ "iOS client" : "iOS клијент",
+ "Desktop client" : "Десктоп клијент",
+ "User group membership" : "Припадност групи",
+ "is member of" : "је члан групе",
+ "is not member of" : "није члан групе",
+ "The given operator is invalid" : "Дати оператор није исправан",
+ "The given regular expression is invalid" : "Дати регуларни израз није исправан",
+ "The given file size is invalid" : "Дата величина фајла није исправна",
+ "The given tag id is invalid" : "Дати ИД ознаке није исправан",
+ "The given IP range is invalid" : "Дати опсег ИП адреса није исправан",
+ "The given IP range is not valid for IPv4" : "Дати опсег ИП адреса није исправан за IPv4",
+ "The given IP range is not valid for IPv6" : "Дати опсег ИП адреса није исправан за IPv6",
+ "The given time span is invalid" : "Дати временски оквир није исправан",
+ "The given start time is invalid" : "Дато време почетка није исправно",
+ "The given end time is invalid" : "Дато време краја није исправно",
+ "The given group does not exist" : "Дата група не постоји",
+ "Check %s is invalid or does not exist" : "Проверите да ли је %s неисправно или не постоји",
+ "Operation #%s does not exist" : "Операција #%s не постоји",
+ "Operation %s does not exist" : "Операција %s не постоји",
+ "Operation %s is invalid" : "Операција %s није исправна",
+ "Check %s does not exist" : "Проверите да ли %s постоји",
+ "Check %s is invalid" : "Проверите да ли је %s исправно",
+ "Check #%s does not exist" : "Проверите да ли #%s постоји",
+ "Workflow" : "Процес рада",
+ "Open documentation" : "Отвори документацију",
+ "Add rule group" : "Додај групу правила",
+ "Short rule description" : "Кратки опис правила",
+ "Add rule" : "Додај правило",
+ "Reset" : "Ресетуј",
+ "Save" : "Сачувај",
+ "Saving…" : "Чувам…",
+ "Loading…" : "Учитавање…",
+ "Successfully saved" : "Успешно сачувано",
+ "File mime type" : "MIME тип фајла"
+},"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/workflowengine/tests/Check/AbstractStringCheckTest.php b/apps/workflowengine/tests/Check/AbstractStringCheckTest.php
index 91da8931604..b7051870115 100644
--- a/apps/workflowengine/tests/Check/AbstractStringCheckTest.php
+++ b/apps/workflowengine/tests/Check/AbstractStringCheckTest.php
@@ -21,11 +21,12 @@
namespace OCA\WorkflowEngine\Tests\Check;
+use OCP\IL10N;
class AbstractStringCheckTest extends \Test\TestCase {
protected function getCheckMock() {
- $l = $this->getMockBuilder('OCP\IL10N')
+ $l = $this->getMockBuilder(IL10N::class)
->disableOriginalConstructor()
->getMock();
$l->expects($this->any())
diff --git a/apps/workflowengine/tests/Check/RequestRemoteAddressTest.php b/apps/workflowengine/tests/Check/RequestRemoteAddressTest.php
index efe8f6372dd..9e313122a1f 100644
--- a/apps/workflowengine/tests/Check/RequestRemoteAddressTest.php
+++ b/apps/workflowengine/tests/Check/RequestRemoteAddressTest.php
@@ -21,6 +21,8 @@
namespace OCA\WorkflowEngine\Tests\Check;
+use OCP\IL10N;
+use OCP\IRequest;
class RequestRemoteAddressTest extends \Test\TestCase {
@@ -31,7 +33,7 @@ class RequestRemoteAddressTest extends \Test\TestCase {
* @return \OCP\IL10N|\PHPUnit_Framework_MockObject_MockObject
*/
protected function getL10NMock() {
- $l = $this->getMockBuilder('OCP\IL10N')
+ $l = $this->getMockBuilder(IL10N::class)
->disableOriginalConstructor()
->getMock();
$l->expects($this->any())
@@ -45,7 +47,7 @@ class RequestRemoteAddressTest extends \Test\TestCase {
protected function setUp() {
parent::setUp();
- $this->request = $this->getMockBuilder('OCP\IRequest')
+ $this->request = $this->getMockBuilder(IRequest::class)
->getMock();
}
diff --git a/apps/workflowengine/tests/Check/RequestTimeTest.php b/apps/workflowengine/tests/Check/RequestTimeTest.php
index c07b4bf8775..7249f5109f2 100644
--- a/apps/workflowengine/tests/Check/RequestTimeTest.php
+++ b/apps/workflowengine/tests/Check/RequestTimeTest.php
@@ -21,6 +21,7 @@
namespace OCA\WorkflowEngine\Tests\Check;
+use OCP\IL10N;
class RequestTimeTest extends \Test\TestCase {
@@ -31,7 +32,7 @@ class RequestTimeTest extends \Test\TestCase {
* @return \OCP\IL10N|\PHPUnit_Framework_MockObject_MockObject
*/
protected function getL10NMock() {
- $l = $this->getMockBuilder('OCP\IL10N')
+ $l = $this->getMockBuilder(IL10N::class)
->disableOriginalConstructor()
->getMock();
$l->expects($this->any())