diff options
Diffstat (limited to 'lib')
56 files changed, 821 insertions, 250 deletions
diff --git a/lib/base.php b/lib/base.php index 90fa5496200..1c9aaaf7b01 100644 --- a/lib/base.php +++ b/lib/base.php @@ -285,7 +285,7 @@ class OC { public static function checkMaintenanceMode() { // Allow ajax update script to execute without being stopped - if (\OC::$server->getSystemConfig()->getValue('maintenance', false) && OC::$SUBURI != '/core/ajax/update.php') { + if (((bool) \OC::$server->getSystemConfig()->getValue('maintenance', false)) && OC::$SUBURI != '/core/ajax/update.php') { // send http status 503 http_response_code(503); header('Retry-After: 120'); @@ -456,20 +456,6 @@ class OC { return \OC::$server->getConfig()->getSystemValue('session_lifetime', 60 * 60 * 24); } - public static function loadAppClassPaths() { - foreach (OC_App::getEnabledApps() as $app) { - $appPath = OC_App::getAppPath($app); - if ($appPath === false) { - continue; - } - - $file = $appPath . '/appinfo/classpath.php'; - if (file_exists($file)) { - require_once $file; - } - } - } - /** * Try to set some values to the required Nextcloud default */ @@ -905,9 +891,6 @@ class OC { \OC::$server->getEventLogger()->start('handle_request', 'Handle request'); $systemConfig = \OC::$server->getSystemConfig(); - // load all the classpaths from the enabled apps so they are available - // in the routing files of each app - OC::loadAppClassPaths(); // Check if Nextcloud is installed or in maintenance (update) mode if (!$systemConfig->getValue('installed', false)) { @@ -938,7 +921,7 @@ class OC { if (function_exists('opcache_reset')) { opcache_reset(); } - if (!$systemConfig->getValue('maintenance', false)) { + if (!((bool) $systemConfig->getValue('maintenance', false))) { self::printUpgradePage($systemConfig); exit(); } @@ -966,7 +949,7 @@ class OC { // Load minimum set of apps if (!\OCP\Util::needUpgrade() - && !$systemConfig->getValue('maintenance', false)) { + && !((bool) $systemConfig->getValue('maintenance', false))) { // For logged-in users: Load everything if(\OC::$server->getUserSession()->isLoggedIn()) { OC_App::loadApps(); @@ -979,7 +962,7 @@ class OC { if (!self::$CLI) { try { - if (!$systemConfig->getValue('maintenance', false) && !\OCP\Util::needUpgrade()) { + if (!((bool) $systemConfig->getValue('maintenance', false)) && !\OCP\Util::needUpgrade()) { OC_App::loadApps(array('filesystem', 'logging')); OC_App::loadApps(); } diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php index afa82f95856..e1f5e2b8c9c 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -44,6 +44,7 @@ return array( 'OCP\\AppFramework\\Http\\NotFoundResponse' => $baseDir . '/lib/public/AppFramework/Http/NotFoundResponse.php', 'OCP\\AppFramework\\Http\\OCSResponse' => $baseDir . '/lib/public/AppFramework/Http/OCSResponse.php', 'OCP\\AppFramework\\Http\\RedirectResponse' => $baseDir . '/lib/public/AppFramework/Http/RedirectResponse.php', + 'OCP\\AppFramework\\Http\\RedirectToDefaultAppResponse' => $baseDir . '/lib/public/AppFramework/Http/RedirectToDefaultAppResponse.php', 'OCP\\AppFramework\\Http\\Response' => $baseDir . '/lib/public/AppFramework/Http/Response.php', 'OCP\\AppFramework\\Http\\StandaloneTemplateResponse' => $baseDir . '/lib/public/AppFramework/Http/StandaloneTemplateResponse.php', 'OCP\\AppFramework\\Http\\StreamResponse' => $baseDir . '/lib/public/AppFramework/Http/StreamResponse.php', @@ -104,6 +105,7 @@ return array( 'OCP\\Calendar\\Room\\IRoom' => $baseDir . '/lib/public/Calendar/Room/IRoom.php', 'OCP\\Capabilities\\ICapability' => $baseDir . '/lib/public/Capabilities/ICapability.php', 'OCP\\Capabilities\\IPublicCapability' => $baseDir . '/lib/public/Capabilities/IPublicCapability.php', + 'OCP\\Collaboration\\AutoComplete\\AutoCompleteEvent' => $baseDir . '/lib/public/Collaboration/AutoComplete/AutoCompleteEvent.php', 'OCP\\Collaboration\\AutoComplete\\IManager' => $baseDir . '/lib/public/Collaboration/AutoComplete/IManager.php', 'OCP\\Collaboration\\AutoComplete\\ISorter' => $baseDir . '/lib/public/Collaboration/AutoComplete/ISorter.php', 'OCP\\Collaboration\\Collaborators\\ISearch' => $baseDir . '/lib/public/Collaboration/Collaborators/ISearch.php', @@ -174,8 +176,10 @@ return array( 'OCP\\Files' => $baseDir . '/lib/public/Files.php', 'OCP\\Files\\AlreadyExistsException' => $baseDir . '/lib/public/Files/AlreadyExistsException.php', 'OCP\\Files\\Cache\\CacheInsertEvent' => $baseDir . '/lib/public/Files/Cache/CacheInsertEvent.php', + 'OCP\\Files\\Cache\\CacheUpdateEvent' => $baseDir . '/lib/public/Files/Cache/CacheUpdateEvent.php', 'OCP\\Files\\Cache\\ICache' => $baseDir . '/lib/public/Files/Cache/ICache.php', 'OCP\\Files\\Cache\\ICacheEntry' => $baseDir . '/lib/public/Files/Cache/ICacheEntry.php', + 'OCP\\Files\\Cache\\ICacheEvent' => $baseDir . '/lib/public/Files/Cache/ICacheEvent.php', 'OCP\\Files\\Cache\\IPropagator' => $baseDir . '/lib/public/Files/Cache/IPropagator.php', 'OCP\\Files\\Cache\\IScanner' => $baseDir . '/lib/public/Files/Cache/IScanner.php', 'OCP\\Files\\Cache\\IUpdater' => $baseDir . '/lib/public/Files/Cache/IUpdater.php', @@ -264,6 +268,7 @@ return array( 'OCP\\Group\\Backend\\ICreateGroupBackend' => $baseDir . '/lib/public/Group/Backend/ICreateGroupBackend.php', 'OCP\\Group\\Backend\\IDeleteGroupBackend' => $baseDir . '/lib/public/Group/Backend/IDeleteGroupBackend.php', 'OCP\\Group\\Backend\\IGroupDetailsBackend' => $baseDir . '/lib/public/Group/Backend/IGroupDetailsBackend.php', + 'OCP\\Group\\Backend\\IHideFromCollaborationBackend' => $baseDir . '/lib/public/Group/Backend/IHideFromCollaborationBackend.php', 'OCP\\Group\\Backend\\IIsAdminBackend' => $baseDir . '/lib/public/Group/Backend/IIsAdminBackend.php', 'OCP\\Group\\Backend\\IRemoveFromGroupBackend' => $baseDir . '/lib/public/Group/Backend/IRemoveFromGroupBackend.php', 'OCP\\Group\\ISubAdmin' => $baseDir . '/lib/public/Group/ISubAdmin.php', @@ -563,6 +568,7 @@ return array( 'OC\\Contacts\\ContactsMenu\\Providers\\EMailProvider' => $baseDir . '/lib/private/Contacts/ContactsMenu/Providers/EMailProvider.php', 'OC\\Core\\Application' => $baseDir . '/core/Application.php', 'OC\\Core\\BackgroundJobs\\BackgroundCleanupUpdaterBackupsJob' => $baseDir . '/core/BackgroundJobs/BackgroundCleanupUpdaterBackupsJob.php', + 'OC\\Core\\BackgroundJobs\\CleanupLoginFlowV2' => $baseDir . '/core/BackgroundJobs/CleanupLoginFlowV2.php', 'OC\\Core\\Command\\App\\CheckCode' => $baseDir . '/core/Command/App/CheckCode.php', 'OC\\Core\\Command\\App\\Disable' => $baseDir . '/core/Command/App/Disable.php', 'OC\\Core\\Command\\App\\Enable' => $baseDir . '/core/Command/App/Enable.php', @@ -652,6 +658,7 @@ return array( 'OC\\Core\\Controller\\AvatarController' => $baseDir . '/core/Controller/AvatarController.php', 'OC\\Core\\Controller\\CSRFTokenController' => $baseDir . '/core/Controller/CSRFTokenController.php', 'OC\\Core\\Controller\\ClientFlowLoginController' => $baseDir . '/core/Controller/ClientFlowLoginController.php', + 'OC\\Core\\Controller\\ClientFlowLoginV2Controller' => $baseDir . '/core/Controller/ClientFlowLoginV2Controller.php', 'OC\\Core\\Controller\\ContactsMenuController' => $baseDir . '/core/Controller/ContactsMenuController.php', 'OC\\Core\\Controller\\CssController' => $baseDir . '/core/Controller/CssController.php', 'OC\\Core\\Controller\\GuestAvatarController' => $baseDir . '/core/Controller/GuestAvatarController.php', @@ -669,6 +676,11 @@ return array( 'OC\\Core\\Controller\\UserController' => $baseDir . '/core/Controller/UserController.php', 'OC\\Core\\Controller\\WalledGardenController' => $baseDir . '/core/Controller/WalledGardenController.php', 'OC\\Core\\Controller\\WhatsNewController' => $baseDir . '/core/Controller/WhatsNewController.php', + 'OC\\Core\\Data\\LoginFlowV2Credentials' => $baseDir . '/core/Data/LoginFlowV2Credentials.php', + 'OC\\Core\\Data\\LoginFlowV2Tokens' => $baseDir . '/core/Data/LoginFlowV2Tokens.php', + 'OC\\Core\\Db\\LoginFlowV2' => $baseDir . '/core/Db/LoginFlowV2.php', + 'OC\\Core\\Db\\LoginFlowV2Mapper' => $baseDir . '/core/Db/LoginFlowV2Mapper.php', + 'OC\\Core\\Exception\\LoginFlowV2NotFoundException' => $baseDir . '/core/Exception/LoginFlowV2NotFoundException.php', 'OC\\Core\\Middleware\\TwoFactorMiddleware' => $baseDir . '/core/Middleware/TwoFactorMiddleware.php', 'OC\\Core\\Migrations\\Version13000Date20170705121758' => $baseDir . '/core/Migrations/Version13000Date20170705121758.php', 'OC\\Core\\Migrations\\Version13000Date20170718121200' => $baseDir . '/core/Migrations/Version13000Date20170718121200.php', @@ -686,6 +698,8 @@ return array( 'OC\\Core\\Migrations\\Version15000Date20180926101451' => $baseDir . '/core/Migrations/Version15000Date20180926101451.php', 'OC\\Core\\Migrations\\Version15000Date20181015062942' => $baseDir . '/core/Migrations/Version15000Date20181015062942.php', 'OC\\Core\\Migrations\\Version15000Date20181029084625' => $baseDir . '/core/Migrations/Version15000Date20181029084625.php', + 'OC\\Core\\Migrations\\Version16000Date20190212081545' => $baseDir . '/core/Migrations/Version16000Date20190212081545.php', + 'OC\\Core\\Service\\LoginFlowV2Service' => $baseDir . '/core/Service/LoginFlowV2Service.php', 'OC\\DB\\Adapter' => $baseDir . '/lib/private/DB/Adapter.php', 'OC\\DB\\AdapterMySQL' => $baseDir . '/lib/private/DB/AdapterMySQL.php', 'OC\\DB\\AdapterOCI8' => $baseDir . '/lib/private/DB/AdapterOCI8.php', @@ -759,6 +773,7 @@ return array( 'OC\\Federation\\CloudIdManager' => $baseDir . '/lib/private/Federation/CloudIdManager.php', 'OC\\Files\\AppData\\AppData' => $baseDir . '/lib/private/Files/AppData/AppData.php', 'OC\\Files\\AppData\\Factory' => $baseDir . '/lib/private/Files/AppData/Factory.php', + 'OC\\Files\\Cache\\AbstractCacheEvent' => $baseDir . '/lib/private/Files/Cache/AbstractCacheEvent.php', 'OC\\Files\\Cache\\Cache' => $baseDir . '/lib/private/Files/Cache/Cache.php', 'OC\\Files\\Cache\\CacheEntry' => $baseDir . '/lib/private/Files/Cache/CacheEntry.php', 'OC\\Files\\Cache\\FailedCache' => $baseDir . '/lib/private/Files/Cache/FailedCache.php', @@ -838,7 +853,6 @@ return array( 'OC\\Files\\Storage\\Wrapper\\PermissionsMask' => $baseDir . '/lib/private/Files/Storage/Wrapper/PermissionsMask.php', 'OC\\Files\\Storage\\Wrapper\\Quota' => $baseDir . '/lib/private/Files/Storage/Wrapper/Quota.php', 'OC\\Files\\Storage\\Wrapper\\Wrapper' => $baseDir . '/lib/private/Files/Storage/Wrapper/Wrapper.php', - 'OC\\Files\\Stream\\CountReadStream' => $baseDir . '/lib/private/Files/Stream/CountReadStream.php', 'OC\\Files\\Stream\\Encryption' => $baseDir . '/lib/private/Files/Stream/Encryption.php', 'OC\\Files\\Stream\\Quota' => $baseDir . '/lib/private/Files/Stream/Quota.php', 'OC\\Files\\Type\\Detection' => $baseDir . '/lib/private/Files/Type/Detection.php', @@ -983,6 +997,7 @@ return array( 'OC\\Repair\\NC14\\AddPreviewBackgroundCleanupJob' => $baseDir . '/lib/private/Repair/NC14/AddPreviewBackgroundCleanupJob.php', 'OC\\Repair\\NC14\\RepairPendingCronJobs' => $baseDir . '/lib/private/Repair/NC14/RepairPendingCronJobs.php', 'OC\\Repair\\NC15\\SetVcardDatabaseUID' => $baseDir . '/lib/private/Repair/NC15/SetVcardDatabaseUID.php', + 'OC\\Repair\\NC16\\AddClenupLoginFlowV2BackgroundJob' => $baseDir . '/lib/private/Repair/NC16/AddClenupLoginFlowV2BackgroundJob.php', 'OC\\Repair\\NC16\\CleanupCardDAVPhotoCache' => $baseDir . '/lib/private/Repair/NC16/CleanupCardDAVPhotoCache.php', 'OC\\Repair\\OldGroupMembershipShares' => $baseDir . '/lib/private/Repair/OldGroupMembershipShares.php', 'OC\\Repair\\Owncloud\\DropAccountTermsTable' => $baseDir . '/lib/private/Repair/Owncloud/DropAccountTermsTable.php', diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index 8d612edda58..3f7132316ad 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -74,6 +74,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OCP\\AppFramework\\Http\\NotFoundResponse' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Http/NotFoundResponse.php', 'OCP\\AppFramework\\Http\\OCSResponse' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Http/OCSResponse.php', 'OCP\\AppFramework\\Http\\RedirectResponse' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Http/RedirectResponse.php', + 'OCP\\AppFramework\\Http\\RedirectToDefaultAppResponse' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Http/RedirectToDefaultAppResponse.php', 'OCP\\AppFramework\\Http\\Response' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Http/Response.php', 'OCP\\AppFramework\\Http\\StandaloneTemplateResponse' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Http/StandaloneTemplateResponse.php', 'OCP\\AppFramework\\Http\\StreamResponse' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Http/StreamResponse.php', @@ -134,6 +135,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OCP\\Calendar\\Room\\IRoom' => __DIR__ . '/../../..' . '/lib/public/Calendar/Room/IRoom.php', 'OCP\\Capabilities\\ICapability' => __DIR__ . '/../../..' . '/lib/public/Capabilities/ICapability.php', 'OCP\\Capabilities\\IPublicCapability' => __DIR__ . '/../../..' . '/lib/public/Capabilities/IPublicCapability.php', + 'OCP\\Collaboration\\AutoComplete\\AutoCompleteEvent' => __DIR__ . '/../../..' . '/lib/public/Collaboration/AutoComplete/AutoCompleteEvent.php', 'OCP\\Collaboration\\AutoComplete\\IManager' => __DIR__ . '/../../..' . '/lib/public/Collaboration/AutoComplete/IManager.php', 'OCP\\Collaboration\\AutoComplete\\ISorter' => __DIR__ . '/../../..' . '/lib/public/Collaboration/AutoComplete/ISorter.php', 'OCP\\Collaboration\\Collaborators\\ISearch' => __DIR__ . '/../../..' . '/lib/public/Collaboration/Collaborators/ISearch.php', @@ -204,8 +206,10 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OCP\\Files' => __DIR__ . '/../../..' . '/lib/public/Files.php', 'OCP\\Files\\AlreadyExistsException' => __DIR__ . '/../../..' . '/lib/public/Files/AlreadyExistsException.php', 'OCP\\Files\\Cache\\CacheInsertEvent' => __DIR__ . '/../../..' . '/lib/public/Files/Cache/CacheInsertEvent.php', + 'OCP\\Files\\Cache\\CacheUpdateEvent' => __DIR__ . '/../../..' . '/lib/public/Files/Cache/CacheUpdateEvent.php', 'OCP\\Files\\Cache\\ICache' => __DIR__ . '/../../..' . '/lib/public/Files/Cache/ICache.php', 'OCP\\Files\\Cache\\ICacheEntry' => __DIR__ . '/../../..' . '/lib/public/Files/Cache/ICacheEntry.php', + 'OCP\\Files\\Cache\\ICacheEvent' => __DIR__ . '/../../..' . '/lib/public/Files/Cache/ICacheEvent.php', 'OCP\\Files\\Cache\\IPropagator' => __DIR__ . '/../../..' . '/lib/public/Files/Cache/IPropagator.php', 'OCP\\Files\\Cache\\IScanner' => __DIR__ . '/../../..' . '/lib/public/Files/Cache/IScanner.php', 'OCP\\Files\\Cache\\IUpdater' => __DIR__ . '/../../..' . '/lib/public/Files/Cache/IUpdater.php', @@ -294,6 +298,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OCP\\Group\\Backend\\ICreateGroupBackend' => __DIR__ . '/../../..' . '/lib/public/Group/Backend/ICreateGroupBackend.php', 'OCP\\Group\\Backend\\IDeleteGroupBackend' => __DIR__ . '/../../..' . '/lib/public/Group/Backend/IDeleteGroupBackend.php', 'OCP\\Group\\Backend\\IGroupDetailsBackend' => __DIR__ . '/../../..' . '/lib/public/Group/Backend/IGroupDetailsBackend.php', + 'OCP\\Group\\Backend\\IHideFromCollaborationBackend' => __DIR__ . '/../../..' . '/lib/public/Group/Backend/IHideFromCollaborationBackend.php', 'OCP\\Group\\Backend\\IIsAdminBackend' => __DIR__ . '/../../..' . '/lib/public/Group/Backend/IIsAdminBackend.php', 'OCP\\Group\\Backend\\IRemoveFromGroupBackend' => __DIR__ . '/../../..' . '/lib/public/Group/Backend/IRemoveFromGroupBackend.php', 'OCP\\Group\\ISubAdmin' => __DIR__ . '/../../..' . '/lib/public/Group/ISubAdmin.php', @@ -593,6 +598,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Contacts\\ContactsMenu\\Providers\\EMailProvider' => __DIR__ . '/../../..' . '/lib/private/Contacts/ContactsMenu/Providers/EMailProvider.php', 'OC\\Core\\Application' => __DIR__ . '/../../..' . '/core/Application.php', 'OC\\Core\\BackgroundJobs\\BackgroundCleanupUpdaterBackupsJob' => __DIR__ . '/../../..' . '/core/BackgroundJobs/BackgroundCleanupUpdaterBackupsJob.php', + 'OC\\Core\\BackgroundJobs\\CleanupLoginFlowV2' => __DIR__ . '/../../..' . '/core/BackgroundJobs/CleanupLoginFlowV2.php', 'OC\\Core\\Command\\App\\CheckCode' => __DIR__ . '/../../..' . '/core/Command/App/CheckCode.php', 'OC\\Core\\Command\\App\\Disable' => __DIR__ . '/../../..' . '/core/Command/App/Disable.php', 'OC\\Core\\Command\\App\\Enable' => __DIR__ . '/../../..' . '/core/Command/App/Enable.php', @@ -682,6 +688,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Core\\Controller\\AvatarController' => __DIR__ . '/../../..' . '/core/Controller/AvatarController.php', 'OC\\Core\\Controller\\CSRFTokenController' => __DIR__ . '/../../..' . '/core/Controller/CSRFTokenController.php', 'OC\\Core\\Controller\\ClientFlowLoginController' => __DIR__ . '/../../..' . '/core/Controller/ClientFlowLoginController.php', + 'OC\\Core\\Controller\\ClientFlowLoginV2Controller' => __DIR__ . '/../../..' . '/core/Controller/ClientFlowLoginV2Controller.php', 'OC\\Core\\Controller\\ContactsMenuController' => __DIR__ . '/../../..' . '/core/Controller/ContactsMenuController.php', 'OC\\Core\\Controller\\CssController' => __DIR__ . '/../../..' . '/core/Controller/CssController.php', 'OC\\Core\\Controller\\GuestAvatarController' => __DIR__ . '/../../..' . '/core/Controller/GuestAvatarController.php', @@ -699,6 +706,11 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Core\\Controller\\UserController' => __DIR__ . '/../../..' . '/core/Controller/UserController.php', 'OC\\Core\\Controller\\WalledGardenController' => __DIR__ . '/../../..' . '/core/Controller/WalledGardenController.php', 'OC\\Core\\Controller\\WhatsNewController' => __DIR__ . '/../../..' . '/core/Controller/WhatsNewController.php', + 'OC\\Core\\Data\\LoginFlowV2Credentials' => __DIR__ . '/../../..' . '/core/Data/LoginFlowV2Credentials.php', + 'OC\\Core\\Data\\LoginFlowV2Tokens' => __DIR__ . '/../../..' . '/core/Data/LoginFlowV2Tokens.php', + 'OC\\Core\\Db\\LoginFlowV2' => __DIR__ . '/../../..' . '/core/Db/LoginFlowV2.php', + 'OC\\Core\\Db\\LoginFlowV2Mapper' => __DIR__ . '/../../..' . '/core/Db/LoginFlowV2Mapper.php', + 'OC\\Core\\Exception\\LoginFlowV2NotFoundException' => __DIR__ . '/../../..' . '/core/Exception/LoginFlowV2NotFoundException.php', 'OC\\Core\\Middleware\\TwoFactorMiddleware' => __DIR__ . '/../../..' . '/core/Middleware/TwoFactorMiddleware.php', 'OC\\Core\\Migrations\\Version13000Date20170705121758' => __DIR__ . '/../../..' . '/core/Migrations/Version13000Date20170705121758.php', 'OC\\Core\\Migrations\\Version13000Date20170718121200' => __DIR__ . '/../../..' . '/core/Migrations/Version13000Date20170718121200.php', @@ -716,6 +728,8 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Core\\Migrations\\Version15000Date20180926101451' => __DIR__ . '/../../..' . '/core/Migrations/Version15000Date20180926101451.php', 'OC\\Core\\Migrations\\Version15000Date20181015062942' => __DIR__ . '/../../..' . '/core/Migrations/Version15000Date20181015062942.php', 'OC\\Core\\Migrations\\Version15000Date20181029084625' => __DIR__ . '/../../..' . '/core/Migrations/Version15000Date20181029084625.php', + 'OC\\Core\\Migrations\\Version16000Date20190212081545' => __DIR__ . '/../../..' . '/core/Migrations/Version16000Date20190212081545.php', + 'OC\\Core\\Service\\LoginFlowV2Service' => __DIR__ . '/../../..' . '/core/Service/LoginFlowV2Service.php', 'OC\\DB\\Adapter' => __DIR__ . '/../../..' . '/lib/private/DB/Adapter.php', 'OC\\DB\\AdapterMySQL' => __DIR__ . '/../../..' . '/lib/private/DB/AdapterMySQL.php', 'OC\\DB\\AdapterOCI8' => __DIR__ . '/../../..' . '/lib/private/DB/AdapterOCI8.php', @@ -789,6 +803,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Federation\\CloudIdManager' => __DIR__ . '/../../..' . '/lib/private/Federation/CloudIdManager.php', 'OC\\Files\\AppData\\AppData' => __DIR__ . '/../../..' . '/lib/private/Files/AppData/AppData.php', 'OC\\Files\\AppData\\Factory' => __DIR__ . '/../../..' . '/lib/private/Files/AppData/Factory.php', + 'OC\\Files\\Cache\\AbstractCacheEvent' => __DIR__ . '/../../..' . '/lib/private/Files/Cache/AbstractCacheEvent.php', 'OC\\Files\\Cache\\Cache' => __DIR__ . '/../../..' . '/lib/private/Files/Cache/Cache.php', 'OC\\Files\\Cache\\CacheEntry' => __DIR__ . '/../../..' . '/lib/private/Files/Cache/CacheEntry.php', 'OC\\Files\\Cache\\FailedCache' => __DIR__ . '/../../..' . '/lib/private/Files/Cache/FailedCache.php', @@ -868,7 +883,6 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Files\\Storage\\Wrapper\\PermissionsMask' => __DIR__ . '/../../..' . '/lib/private/Files/Storage/Wrapper/PermissionsMask.php', 'OC\\Files\\Storage\\Wrapper\\Quota' => __DIR__ . '/../../..' . '/lib/private/Files/Storage/Wrapper/Quota.php', 'OC\\Files\\Storage\\Wrapper\\Wrapper' => __DIR__ . '/../../..' . '/lib/private/Files/Storage/Wrapper/Wrapper.php', - 'OC\\Files\\Stream\\CountReadStream' => __DIR__ . '/../../..' . '/lib/private/Files/Stream/CountReadStream.php', 'OC\\Files\\Stream\\Encryption' => __DIR__ . '/../../..' . '/lib/private/Files/Stream/Encryption.php', 'OC\\Files\\Stream\\Quota' => __DIR__ . '/../../..' . '/lib/private/Files/Stream/Quota.php', 'OC\\Files\\Type\\Detection' => __DIR__ . '/../../..' . '/lib/private/Files/Type/Detection.php', @@ -1013,6 +1027,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Repair\\NC14\\AddPreviewBackgroundCleanupJob' => __DIR__ . '/../../..' . '/lib/private/Repair/NC14/AddPreviewBackgroundCleanupJob.php', 'OC\\Repair\\NC14\\RepairPendingCronJobs' => __DIR__ . '/../../..' . '/lib/private/Repair/NC14/RepairPendingCronJobs.php', 'OC\\Repair\\NC15\\SetVcardDatabaseUID' => __DIR__ . '/../../..' . '/lib/private/Repair/NC15/SetVcardDatabaseUID.php', + 'OC\\Repair\\NC16\\AddClenupLoginFlowV2BackgroundJob' => __DIR__ . '/../../..' . '/lib/private/Repair/NC16/AddClenupLoginFlowV2BackgroundJob.php', 'OC\\Repair\\NC16\\CleanupCardDAVPhotoCache' => __DIR__ . '/../../..' . '/lib/private/Repair/NC16/CleanupCardDAVPhotoCache.php', 'OC\\Repair\\OldGroupMembershipShares' => __DIR__ . '/../../..' . '/lib/private/Repair/OldGroupMembershipShares.php', 'OC\\Repair\\Owncloud\\DropAccountTermsTable' => __DIR__ . '/../../..' . '/lib/private/Repair/Owncloud/DropAccountTermsTable.php', diff --git a/lib/l10n/af.js b/lib/l10n/af.js new file mode 100644 index 00000000000..fa351f824bd --- /dev/null +++ b/lib/l10n/af.js @@ -0,0 +1,16 @@ +OC.L10N.register( + "lib", + { + "__language_name__" : "Afrikaans", + "Help" : "Hulp", + "Apps" : "Toeps", + "Settings" : "Instellings", + "Log out" : "Meld af", + "Users" : "Gebruikers", + "Unknown user" : "Onbekende gebruiker", + "Create" : "Skep", + "Delete" : "Skrap", + "Share" : "Deel", + "Security" : "Sekuriteit" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/af.json b/lib/l10n/af.json new file mode 100644 index 00000000000..469d41e913a --- /dev/null +++ b/lib/l10n/af.json @@ -0,0 +1,14 @@ +{ "translations": { + "__language_name__" : "Afrikaans", + "Help" : "Hulp", + "Apps" : "Toeps", + "Settings" : "Instellings", + "Log out" : "Meld af", + "Users" : "Gebruikers", + "Unknown user" : "Onbekende gebruiker", + "Create" : "Skep", + "Delete" : "Skrap", + "Share" : "Deel", + "Security" : "Sekuriteit" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/lib/l10n/nb.js b/lib/l10n/nb.js index a2c6dc740d7..9654f0fb77b 100644 --- a/lib/l10n/nb.js +++ b/lib/l10n/nb.js @@ -2,10 +2,10 @@ OC.L10N.register( "lib", { "Cannot write into \"config\" directory!" : "Kan ikke skrive til «config»-mappen!", - "This can usually be fixed by giving the webserver write access to the config directory" : "Dette kan vanligvis ordnes ved å gi vev-tjeneren skrivetilgang til config-mappen", + "This can usually be fixed by giving the webserver write access to the config directory" : "Dette kan vanligvis ordnes ved å gi webserveren skrivetilgang til config-mappen", "See %s" : "Se %s", - "This can usually be fixed by giving the webserver write access to the config directory. See %s" : "Dette kan vanligvis ordnes ved å gi vev-tjeneren skrivetilgang til config-mappen. Se %s", - "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Filene i appen %$1s ble ikke erstattet skikkelig. Sjekk at versjonen er kompatibel med tjeneren.", + "This can usually be fixed by giving the webserver write access to the config directory. See %s" : "Dette kan vanligvis ordnes ved å gi webserveren skrivetilgang til config-mappen. Se %s", + "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Filene i appen %$1s ble ikke erstattet skikkelig. Sjekk at versjonen er kompatibel med serveren.", "Sample configuration detected" : "Eksempeloppsett oppdaget", "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Det ble oppdaget at eksempeloppsettet er blitt kopiert. Dette kan ødelegge installasjonen din og støttes ikke. Les dokumentasjonen før du gjør endringer i config.php", "%1$s and %2$s" : "%1$s og %2$s", @@ -23,8 +23,9 @@ OC.L10N.register( "The command line tool %s could not be found" : "Kommandolinjeverktøyet %s ble ikke funnet", "The library %s is not available." : "Biblioteket %s er ikke tilgjengelig.", "Following platforms are supported: %s" : "Følgende plattformer støttes: %s", - "Server version %s or higher is required." : "Tjenerversjon %s eller høyere kreves.", - "Server version %s or lower is required." : "Tjenerversjon %s eller lavere kreves.", + "Server version %s or higher is required." : "Serverversjon %s eller høyere kreves.", + "Server version %s or lower is required." : "Serverversjon %s eller lavere kreves.", + "Logged in user must be an admin" : "Innlogget bruker må være administrator", "Unknown filetype" : "Ukjent filtype", "Invalid image" : "Ugyldig bilde", "Avatar image is not square" : "Avatarbilde er ikke firkantet", @@ -47,18 +48,18 @@ OC.L10N.register( "_%n minute ago_::_%n minutes ago_" : ["for %n minutt siden","for %n minutter siden"], "in a few seconds" : "om noen sekunder", "seconds ago" : "for få sekunder siden", - "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul med ID: %s finnes ikke. Skru den på i programinnstillingene eller kontakt en administrator.", + "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul med ID: %s finnes ikke. Skru den på i app-innstillingene eller kontakt en administrator.", "File name is a reserved word" : "Filnavnet er et reservert ord", "File name contains at least one invalid character" : "Filnavnet inneholder minst ett ulovlig tegn", "File name is too long" : "Filnavnet er for langt", "Dot files are not allowed" : "Punktum-filer er ikke tillatt", "Empty filename is not allowed" : "Tomt filnavn er ikke tillatt", - "App \"%s\" cannot be installed because appinfo file cannot be read." : "Programmet \"%s\" kan ikke installeres på grunn av at appinfo-filen ikke kan leses.", - "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Programmet \"%s\" kan ikke installere fordi det ikke er kompatibel med denne tjenerversjonen.", + "App \"%s\" cannot be installed because appinfo file cannot be read." : "Appen \"%s\" kan ikke installeres på grunn av at appinfo-filen ikke kan leses.", + "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Appen \"%s\" kan ikke installeres fordi det ikke er kompatibel med denne serverversjonen.", "__language_name__" : "Norsk bokmål", "This is an automatically sent email, please do not reply." : "Dette er en automatisk sendt e-post, ikke svar.", "Help" : "Hjelp", - "Apps" : "Programmer", + "Apps" : "Apper", "Settings" : "Innstillinger", "Log out" : "Logg ut", "Users" : "Brukere", @@ -67,9 +68,11 @@ OC.L10N.register( "Change" : "Endre", "Delete" : "Slett", "Share" : "Del", + "Overview" : "Oversikt", "Basic settings" : "Grunninnstillinger", "Sharing" : "Deling", "Security" : "Sikkerhet", + "Groupware" : "Gruppevare", "Additional settings" : "Flere innstillinger", "Personal info" : "Personlig informasjon", "Unlimited" : "Ubegrenset", @@ -85,14 +88,14 @@ OC.L10N.register( "PostgreSQL username and/or password not valid" : "PostgreSQL-brukernavn og/eller passord er ikke gyldig", "You need to enter details of an existing account." : "Du må legge in detaljene til en eksisterende konto.", "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X støttes ikke og %s vil ikke fungere korrekt på denne plattformen. Bruk på egen risiko!", - "For the best results, please consider using a GNU/Linux server instead." : "For beste resultat, vurder å bruke en GNU/Linux-tjener i stedet.", + "For the best results, please consider using a GNU/Linux server instead." : "For beste resultat, vurder å bruke en GNU/Linux-server i stedet.", "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Det ser ut for at %s-instansen kjører i et 32-bit PHP-miljø med open_basedir satt opp i php.ini. Dette vil føre til problemer med filer over 4 GB og frarådes på det sterkeste.", "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Fjern innstillingen open_basedir i php.ini eller bytt til 64-bit PHP.", "Set an admin username." : "Sett et admin-brukernavn.", "Set an admin password." : "Sett et admin-passord.", "Can't create or write into the data directory %s" : "Kan ikke opprette eller skrive i datamappen %s", "Invalid Federated Cloud ID" : "Ugyldig ID for sammenknyttet sky", - "Sharing %s failed, because the backend does not allow shares from type %i" : "Deling av %s mislyktes, fordi tjeneren ikke tillater delinger fra type %i", + "Sharing %s failed, because the backend does not allow shares from type %i" : "Deling av %s mislyktes, fordi serveren ikke tillater delinger fra type %i", "Sharing %s failed, because the file does not exist" : "Deling av %s mislyktes, fordi filen ikke eksisterer", "You are not allowed to share %s" : "Du har ikke lov til å dele %s", "Sharing %s failed, because you can not share with yourself" : "Deling av %s mislyktes fordi du ikke kan dele med deg selv", @@ -101,9 +104,9 @@ OC.L10N.register( "Not allowed to create a federated share with the same user" : "Ikke tillatt å opprette en sammenknyttet sky-deling med den samme brukeren", "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Kan ikke sette utøpsdato. Delinger kan ikke utløpe senere enn %s etter at de har blitt delt", "Cannot set expiration date. Expiration date is in the past" : "Kan ikke sette utløpsdato. Utløpsdato er tilbake i tid", - "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Delings-tjener %s må implementere grensesnittet OCP\\Share_Backend", - "Sharing backend %s not found" : "Delings-tjener %s ikke funnet", - "Sharing backend for %s not found" : "Delings-tjener for %s ikke funnet", + "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Delings-server %s må implementere grensesnittet OCP\\Share_Backend", + "Sharing backend %s not found" : "Delings-server %s ikke funnet", + "Sharing backend for %s not found" : "Delings-server for %s ikke funnet", "Sharing failed, because the user %s is the original sharer" : "Deling mislyktes fordi brukeren %s er den som delte opprinnelig", "Sharing %s failed, because resharing is not allowed" : "Deling av %s mislyktes, fordi videre-deling ikke er tillatt", "Sharing %s failed, because the file could not be found in the file cache" : "Deling av %s mislyktes, fordi filen ikke ble funnet i fil-hurtiglageret", @@ -173,30 +176,30 @@ OC.L10N.register( "a safe home for all your data" : "et sikkert hjem for alle dine data", "File is currently busy, please try again later" : "Filen er opptatt for øyeblikket, prøv igjen senere", "Can't read file" : "Kan ikke lese fil", - "Application is not enabled" : "Programmet er ikke påslått", + "Application is not enabled" : "Appen er ikke påslått", "Authentication error" : "Autentikasjonsfeil", "Token expired. Please reload page." : "Symbol utløpt. Last inn siden på nytt.", "No database drivers (sqlite, mysql, or postgresql) installed." : "Ingen databasedrivere (sqlite, mysql, or postgresql) installert.", "Cannot write into \"config\" directory" : "Kan ikke skrive i \"config\"-mappen", "Cannot write into \"apps\" directory" : "Kan ikke skrive i \"apps\"-mappen", - "This can usually be fixed by giving the webserver write access to the apps directory or disabling the appstore in the config file. See %s" : "Dette kan vanligvis ordnes ved å gi vev-tjeneren skrivetilgang til apps-mappen eller ved å skru av programbutikken i config-filen. Se %s", + "This can usually be fixed by giving the webserver write access to the apps directory or disabling the appstore in the config file. See %s" : "Dette kan vanligvis ordnes ved å gi webserveren skrivetilgang til apps-mappen eller ved å skru av app-butikken i config-filen. Se %s", "Cannot create \"data\" directory" : "Kan ikke opprette \"data\"-mappe", - "This can usually be fixed by giving the webserver write access to the root directory. See %s" : "Dette kan vanligvis ordnes ved å gi vev-tjeneren skrivetilgang til root-mappen. Se %s", - "Permissions can usually be fixed by giving the webserver write access to the root directory. See %s." : "Tillatelser kan vanligvis ordnes ved å gi vevtjeneren skrivetilgang til rotmappa. Se %s.", + "This can usually be fixed by giving the webserver write access to the root directory. See %s" : "Dette kan vanligvis ordnes ved å gi webserveren skrivetilgang til rotmappen. Se %s", + "Permissions can usually be fixed by giving the webserver write access to the root directory. See %s." : "Tillatelser kan vanligvis ordnes ved å gi webserveren skrivetilgang til rotmappen. Se %s.", "Setting locale to %s failed" : "Setting av nasjonale innstillinger til %s mislyktes.", - "Please install one of these locales on your system and restart your webserver." : "Installer en av disse nasjonale innstillingene på systemet ditt og start vevtjeneren på nytt.", - "Please ask your server administrator to install the module." : "Be tjener-administratoren om å installere modulen.", + "Please install one of these locales on your system and restart your webserver." : "Installer en av disse nasjonale innstillingene på systemet ditt og start webserveren på nytt.", + "Please ask your server administrator to install the module." : "Be server-administratoren om å installere modulen.", "PHP module %s not installed." : "PHP-modul %s er ikke installert.", "PHP setting \"%s\" is not set to \"%s\"." : "PHP-innstilling \"%s\" er ikke satt til \"%s\".", "Adjusting this setting in php.ini will make Nextcloud run again" : "Ved å endre denne innstillingen i php.ini gjør at Nextcloud vil kjøre igjen.", "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload er satt til \"%s\" i stedet for den forventede verdien \"0\"", "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Sett <code>mbstring.func_overload</code> til <code>0</code> in php.ini for å fikse dette problemet", "libxml2 2.7.0 is at least required. Currently %s is installed." : "Krever minst libxml2 2.7.0. Per nå er %s installert.", - "To fix this issue update your libxml2 version and restart your web server." : "For å fikse dette problemet, oppdater din libxml2 versjon og omstart vevtjeneren.", + "To fix this issue update your libxml2 version and restart your web server." : "For å fikse dette problemet, oppdater din libxml2 versjon og start webserveren på nytt.", "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Det ser ut til at at PHP er satt opp til å fjerne innebygde doc-blokker. Dette gjør at flere av kjerneapplikasjonene blir utilgjengelige.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette forårsakes sannsynligvis av hurtiglager/akselerator, som f.eks. Zend OPcache eller eAccelerator.", "PHP modules have been installed, but they are still listed as missing?" : "PHP-moduler har blitt installert, men de listes fortsatt som fraværende?", - "Please ask your server administrator to restart the web server." : "Be tjener-administratoren om å starte vevtjeneren på nytt.", + "Please ask your server administrator to restart the web server." : "Be server-administratoren om å starte webserveren på nytt.", "PostgreSQL >= 9 required" : "PostgreSQL >= 9 kreves", "Please upgrade your database version" : "Oppgrader databaseversjonen din", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Endre tillatelsene til 0770 slik at mappen ikke kan listes av andre brukere.", @@ -224,15 +227,15 @@ OC.L10N.register( "Sharing %s failed, because this item is already shared with user %s" : "Deling av %s mislyktes, fordi dette elementet allerede er delt med bruker %s", "Sharing %s failed, because the group %s does not exist" : "Deling av %s mislyktes, fordi gruppen %s ikke finnes", "Sharing %s failed, because %s is not a member of the group %s" : "Deling av %s mislyktes, fordi %s ikke er medlem av gruppen %s", - "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deling %s mislyktes, fant ikke %s, kanskje tjeneren er utilgjengelig for øyeblikket.", + "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deling %s mislyktes, fant ikke %s, kanskje serveren er utilgjengelig for øyeblikket.", "Share type %s is not valid for %s" : "Delingstype %s er ikke gyldig for %s", "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Deling av %s mislyktes, fordi tillatelsene går utover tillatelsene som er gitt til %s", "Sharing %s failed, because the sharing backend for %s could not find its source" : "Deling av %s mislyktes, fordi delings-bakenden for %s ikke kunne finne kilden", "%s shared »%s« with you" : "%s delte »%s« med deg", "%s shared »%s« with you." : "%s delte \"%s\" med deg.", "%s via %s" : "%s via %s", - "No app name specified" : "Intet programnavn spesifisert", - "App '%s' could not be installed!" : "Programmet '%s' kunne ikke installeres!", - "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Programmet \"%s\" kan ikke installeres fordi følgende avhengigheter ikke er tilfredsstilt: %s" + "No app name specified" : "Intet app-navn spesifisert", + "App '%s' could not be installed!" : "Appen '%s' kunne ikke installeres!", + "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Appen \"%s\" kan ikke installeres fordi følgende krav ikke er tilfredsstilt: %s" }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/nb.json b/lib/l10n/nb.json index 95df1d06ae5..a44b4768b71 100644 --- a/lib/l10n/nb.json +++ b/lib/l10n/nb.json @@ -1,9 +1,9 @@ { "translations": { "Cannot write into \"config\" directory!" : "Kan ikke skrive til «config»-mappen!", - "This can usually be fixed by giving the webserver write access to the config directory" : "Dette kan vanligvis ordnes ved å gi vev-tjeneren skrivetilgang til config-mappen", + "This can usually be fixed by giving the webserver write access to the config directory" : "Dette kan vanligvis ordnes ved å gi webserveren skrivetilgang til config-mappen", "See %s" : "Se %s", - "This can usually be fixed by giving the webserver write access to the config directory. See %s" : "Dette kan vanligvis ordnes ved å gi vev-tjeneren skrivetilgang til config-mappen. Se %s", - "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Filene i appen %$1s ble ikke erstattet skikkelig. Sjekk at versjonen er kompatibel med tjeneren.", + "This can usually be fixed by giving the webserver write access to the config directory. See %s" : "Dette kan vanligvis ordnes ved å gi webserveren skrivetilgang til config-mappen. Se %s", + "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Filene i appen %$1s ble ikke erstattet skikkelig. Sjekk at versjonen er kompatibel med serveren.", "Sample configuration detected" : "Eksempeloppsett oppdaget", "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Det ble oppdaget at eksempeloppsettet er blitt kopiert. Dette kan ødelegge installasjonen din og støttes ikke. Les dokumentasjonen før du gjør endringer i config.php", "%1$s and %2$s" : "%1$s og %2$s", @@ -21,8 +21,9 @@ "The command line tool %s could not be found" : "Kommandolinjeverktøyet %s ble ikke funnet", "The library %s is not available." : "Biblioteket %s er ikke tilgjengelig.", "Following platforms are supported: %s" : "Følgende plattformer støttes: %s", - "Server version %s or higher is required." : "Tjenerversjon %s eller høyere kreves.", - "Server version %s or lower is required." : "Tjenerversjon %s eller lavere kreves.", + "Server version %s or higher is required." : "Serverversjon %s eller høyere kreves.", + "Server version %s or lower is required." : "Serverversjon %s eller lavere kreves.", + "Logged in user must be an admin" : "Innlogget bruker må være administrator", "Unknown filetype" : "Ukjent filtype", "Invalid image" : "Ugyldig bilde", "Avatar image is not square" : "Avatarbilde er ikke firkantet", @@ -45,18 +46,18 @@ "_%n minute ago_::_%n minutes ago_" : ["for %n minutt siden","for %n minutter siden"], "in a few seconds" : "om noen sekunder", "seconds ago" : "for få sekunder siden", - "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul med ID: %s finnes ikke. Skru den på i programinnstillingene eller kontakt en administrator.", + "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul med ID: %s finnes ikke. Skru den på i app-innstillingene eller kontakt en administrator.", "File name is a reserved word" : "Filnavnet er et reservert ord", "File name contains at least one invalid character" : "Filnavnet inneholder minst ett ulovlig tegn", "File name is too long" : "Filnavnet er for langt", "Dot files are not allowed" : "Punktum-filer er ikke tillatt", "Empty filename is not allowed" : "Tomt filnavn er ikke tillatt", - "App \"%s\" cannot be installed because appinfo file cannot be read." : "Programmet \"%s\" kan ikke installeres på grunn av at appinfo-filen ikke kan leses.", - "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Programmet \"%s\" kan ikke installere fordi det ikke er kompatibel med denne tjenerversjonen.", + "App \"%s\" cannot be installed because appinfo file cannot be read." : "Appen \"%s\" kan ikke installeres på grunn av at appinfo-filen ikke kan leses.", + "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Appen \"%s\" kan ikke installeres fordi det ikke er kompatibel med denne serverversjonen.", "__language_name__" : "Norsk bokmål", "This is an automatically sent email, please do not reply." : "Dette er en automatisk sendt e-post, ikke svar.", "Help" : "Hjelp", - "Apps" : "Programmer", + "Apps" : "Apper", "Settings" : "Innstillinger", "Log out" : "Logg ut", "Users" : "Brukere", @@ -65,9 +66,11 @@ "Change" : "Endre", "Delete" : "Slett", "Share" : "Del", + "Overview" : "Oversikt", "Basic settings" : "Grunninnstillinger", "Sharing" : "Deling", "Security" : "Sikkerhet", + "Groupware" : "Gruppevare", "Additional settings" : "Flere innstillinger", "Personal info" : "Personlig informasjon", "Unlimited" : "Ubegrenset", @@ -83,14 +86,14 @@ "PostgreSQL username and/or password not valid" : "PostgreSQL-brukernavn og/eller passord er ikke gyldig", "You need to enter details of an existing account." : "Du må legge in detaljene til en eksisterende konto.", "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X støttes ikke og %s vil ikke fungere korrekt på denne plattformen. Bruk på egen risiko!", - "For the best results, please consider using a GNU/Linux server instead." : "For beste resultat, vurder å bruke en GNU/Linux-tjener i stedet.", + "For the best results, please consider using a GNU/Linux server instead." : "For beste resultat, vurder å bruke en GNU/Linux-server i stedet.", "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Det ser ut for at %s-instansen kjører i et 32-bit PHP-miljø med open_basedir satt opp i php.ini. Dette vil føre til problemer med filer over 4 GB og frarådes på det sterkeste.", "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Fjern innstillingen open_basedir i php.ini eller bytt til 64-bit PHP.", "Set an admin username." : "Sett et admin-brukernavn.", "Set an admin password." : "Sett et admin-passord.", "Can't create or write into the data directory %s" : "Kan ikke opprette eller skrive i datamappen %s", "Invalid Federated Cloud ID" : "Ugyldig ID for sammenknyttet sky", - "Sharing %s failed, because the backend does not allow shares from type %i" : "Deling av %s mislyktes, fordi tjeneren ikke tillater delinger fra type %i", + "Sharing %s failed, because the backend does not allow shares from type %i" : "Deling av %s mislyktes, fordi serveren ikke tillater delinger fra type %i", "Sharing %s failed, because the file does not exist" : "Deling av %s mislyktes, fordi filen ikke eksisterer", "You are not allowed to share %s" : "Du har ikke lov til å dele %s", "Sharing %s failed, because you can not share with yourself" : "Deling av %s mislyktes fordi du ikke kan dele med deg selv", @@ -99,9 +102,9 @@ "Not allowed to create a federated share with the same user" : "Ikke tillatt å opprette en sammenknyttet sky-deling med den samme brukeren", "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Kan ikke sette utøpsdato. Delinger kan ikke utløpe senere enn %s etter at de har blitt delt", "Cannot set expiration date. Expiration date is in the past" : "Kan ikke sette utløpsdato. Utløpsdato er tilbake i tid", - "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Delings-tjener %s må implementere grensesnittet OCP\\Share_Backend", - "Sharing backend %s not found" : "Delings-tjener %s ikke funnet", - "Sharing backend for %s not found" : "Delings-tjener for %s ikke funnet", + "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Delings-server %s må implementere grensesnittet OCP\\Share_Backend", + "Sharing backend %s not found" : "Delings-server %s ikke funnet", + "Sharing backend for %s not found" : "Delings-server for %s ikke funnet", "Sharing failed, because the user %s is the original sharer" : "Deling mislyktes fordi brukeren %s er den som delte opprinnelig", "Sharing %s failed, because resharing is not allowed" : "Deling av %s mislyktes, fordi videre-deling ikke er tillatt", "Sharing %s failed, because the file could not be found in the file cache" : "Deling av %s mislyktes, fordi filen ikke ble funnet i fil-hurtiglageret", @@ -171,30 +174,30 @@ "a safe home for all your data" : "et sikkert hjem for alle dine data", "File is currently busy, please try again later" : "Filen er opptatt for øyeblikket, prøv igjen senere", "Can't read file" : "Kan ikke lese fil", - "Application is not enabled" : "Programmet er ikke påslått", + "Application is not enabled" : "Appen er ikke påslått", "Authentication error" : "Autentikasjonsfeil", "Token expired. Please reload page." : "Symbol utløpt. Last inn siden på nytt.", "No database drivers (sqlite, mysql, or postgresql) installed." : "Ingen databasedrivere (sqlite, mysql, or postgresql) installert.", "Cannot write into \"config\" directory" : "Kan ikke skrive i \"config\"-mappen", "Cannot write into \"apps\" directory" : "Kan ikke skrive i \"apps\"-mappen", - "This can usually be fixed by giving the webserver write access to the apps directory or disabling the appstore in the config file. See %s" : "Dette kan vanligvis ordnes ved å gi vev-tjeneren skrivetilgang til apps-mappen eller ved å skru av programbutikken i config-filen. Se %s", + "This can usually be fixed by giving the webserver write access to the apps directory or disabling the appstore in the config file. See %s" : "Dette kan vanligvis ordnes ved å gi webserveren skrivetilgang til apps-mappen eller ved å skru av app-butikken i config-filen. Se %s", "Cannot create \"data\" directory" : "Kan ikke opprette \"data\"-mappe", - "This can usually be fixed by giving the webserver write access to the root directory. See %s" : "Dette kan vanligvis ordnes ved å gi vev-tjeneren skrivetilgang til root-mappen. Se %s", - "Permissions can usually be fixed by giving the webserver write access to the root directory. See %s." : "Tillatelser kan vanligvis ordnes ved å gi vevtjeneren skrivetilgang til rotmappa. Se %s.", + "This can usually be fixed by giving the webserver write access to the root directory. See %s" : "Dette kan vanligvis ordnes ved å gi webserveren skrivetilgang til rotmappen. Se %s", + "Permissions can usually be fixed by giving the webserver write access to the root directory. See %s." : "Tillatelser kan vanligvis ordnes ved å gi webserveren skrivetilgang til rotmappen. Se %s.", "Setting locale to %s failed" : "Setting av nasjonale innstillinger til %s mislyktes.", - "Please install one of these locales on your system and restart your webserver." : "Installer en av disse nasjonale innstillingene på systemet ditt og start vevtjeneren på nytt.", - "Please ask your server administrator to install the module." : "Be tjener-administratoren om å installere modulen.", + "Please install one of these locales on your system and restart your webserver." : "Installer en av disse nasjonale innstillingene på systemet ditt og start webserveren på nytt.", + "Please ask your server administrator to install the module." : "Be server-administratoren om å installere modulen.", "PHP module %s not installed." : "PHP-modul %s er ikke installert.", "PHP setting \"%s\" is not set to \"%s\"." : "PHP-innstilling \"%s\" er ikke satt til \"%s\".", "Adjusting this setting in php.ini will make Nextcloud run again" : "Ved å endre denne innstillingen i php.ini gjør at Nextcloud vil kjøre igjen.", "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload er satt til \"%s\" i stedet for den forventede verdien \"0\"", "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Sett <code>mbstring.func_overload</code> til <code>0</code> in php.ini for å fikse dette problemet", "libxml2 2.7.0 is at least required. Currently %s is installed." : "Krever minst libxml2 2.7.0. Per nå er %s installert.", - "To fix this issue update your libxml2 version and restart your web server." : "For å fikse dette problemet, oppdater din libxml2 versjon og omstart vevtjeneren.", + "To fix this issue update your libxml2 version and restart your web server." : "For å fikse dette problemet, oppdater din libxml2 versjon og start webserveren på nytt.", "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Det ser ut til at at PHP er satt opp til å fjerne innebygde doc-blokker. Dette gjør at flere av kjerneapplikasjonene blir utilgjengelige.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette forårsakes sannsynligvis av hurtiglager/akselerator, som f.eks. Zend OPcache eller eAccelerator.", "PHP modules have been installed, but they are still listed as missing?" : "PHP-moduler har blitt installert, men de listes fortsatt som fraværende?", - "Please ask your server administrator to restart the web server." : "Be tjener-administratoren om å starte vevtjeneren på nytt.", + "Please ask your server administrator to restart the web server." : "Be server-administratoren om å starte webserveren på nytt.", "PostgreSQL >= 9 required" : "PostgreSQL >= 9 kreves", "Please upgrade your database version" : "Oppgrader databaseversjonen din", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Endre tillatelsene til 0770 slik at mappen ikke kan listes av andre brukere.", @@ -222,15 +225,15 @@ "Sharing %s failed, because this item is already shared with user %s" : "Deling av %s mislyktes, fordi dette elementet allerede er delt med bruker %s", "Sharing %s failed, because the group %s does not exist" : "Deling av %s mislyktes, fordi gruppen %s ikke finnes", "Sharing %s failed, because %s is not a member of the group %s" : "Deling av %s mislyktes, fordi %s ikke er medlem av gruppen %s", - "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deling %s mislyktes, fant ikke %s, kanskje tjeneren er utilgjengelig for øyeblikket.", + "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deling %s mislyktes, fant ikke %s, kanskje serveren er utilgjengelig for øyeblikket.", "Share type %s is not valid for %s" : "Delingstype %s er ikke gyldig for %s", "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Deling av %s mislyktes, fordi tillatelsene går utover tillatelsene som er gitt til %s", "Sharing %s failed, because the sharing backend for %s could not find its source" : "Deling av %s mislyktes, fordi delings-bakenden for %s ikke kunne finne kilden", "%s shared »%s« with you" : "%s delte »%s« med deg", "%s shared »%s« with you." : "%s delte \"%s\" med deg.", "%s via %s" : "%s via %s", - "No app name specified" : "Intet programnavn spesifisert", - "App '%s' could not be installed!" : "Programmet '%s' kunne ikke installeres!", - "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Programmet \"%s\" kan ikke installeres fordi følgende avhengigheter ikke er tilfredsstilt: %s" + "No app name specified" : "Intet app-navn spesifisert", + "App '%s' could not be installed!" : "Appen '%s' kunne ikke installeres!", + "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Appen \"%s\" kan ikke installeres fordi følgende krav ikke er tilfredsstilt: %s" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/lib/l10n/pl.js b/lib/l10n/pl.js index 3b51f335860..2a66333f692 100644 --- a/lib/l10n/pl.js +++ b/lib/l10n/pl.js @@ -64,7 +64,7 @@ OC.L10N.register( "Create" : "Utwórz", "Change" : "Zmień", "Delete" : "Usuń", - "Share" : "Udział", + "Share" : "Udostępnianie", "Overview" : "Przegląd", "Basic settings" : "Ustawienia podstawowe", "Sharing" : "Udostępnianie", @@ -93,10 +93,10 @@ OC.L10N.register( "Set an admin password." : "Ustaw hasło administratora.", "Can't create or write into the data directory %s" : "Nie można tworzyć ani zapisywać w katalogu %s", "Invalid Federated Cloud ID" : "Nieprawidłowy ID Stowarzyszonej Chmury", - "Sharing %s failed, because the backend does not allow shares from type %i" : "Współdzielenie %s nie udało się, ponieważ backend nie pozwala na współdzielenie takiego typu jak %i.", + "Sharing %s failed, because the backend does not allow shares from type %i" : "Udostępnianie %s nie udało się, ponieważ backend nie pozwala na współdzielenie takiego typu jak %i.", "Sharing %s failed, because the file does not exist" : "Wspóldzielenie %s nie powiodło się. ponieważ plik nie istnieje", "You are not allowed to share %s" : "Nie masz uprawnień aby udostępnić %s", - "Sharing %s failed, because you can not share with yourself" : "Współdzielenie %s nie udało się, ponieważ nie możesz współdzielić sam ze sobą", + "Sharing %s failed, because you can not share with yourself" : "Udostępnienie %s nie udało się, ponieważ nie możesz współdzielić sam ze sobą", "You need to provide a password to create a public link, only protected links are allowed" : "Musisz zapewnić hasło aby utworzyć link publiczny, dozwolone są tylko linki chronione", "Sharing %s failed, because sharing with links is not allowed" : "Współdzielenie %s nie powiodło się, ponieważ współdzielenie z linkami nie jest dozwolone", "Not allowed to create a federated share with the same user" : "Nie jest dozwolone tworzenie współdzielenia stowarzyszonego z tym samym użytkownikiem", diff --git a/lib/l10n/pl.json b/lib/l10n/pl.json index 5a525f4895d..f1b332567ec 100644 --- a/lib/l10n/pl.json +++ b/lib/l10n/pl.json @@ -62,7 +62,7 @@ "Create" : "Utwórz", "Change" : "Zmień", "Delete" : "Usuń", - "Share" : "Udział", + "Share" : "Udostępnianie", "Overview" : "Przegląd", "Basic settings" : "Ustawienia podstawowe", "Sharing" : "Udostępnianie", @@ -91,10 +91,10 @@ "Set an admin password." : "Ustaw hasło administratora.", "Can't create or write into the data directory %s" : "Nie można tworzyć ani zapisywać w katalogu %s", "Invalid Federated Cloud ID" : "Nieprawidłowy ID Stowarzyszonej Chmury", - "Sharing %s failed, because the backend does not allow shares from type %i" : "Współdzielenie %s nie udało się, ponieważ backend nie pozwala na współdzielenie takiego typu jak %i.", + "Sharing %s failed, because the backend does not allow shares from type %i" : "Udostępnianie %s nie udało się, ponieważ backend nie pozwala na współdzielenie takiego typu jak %i.", "Sharing %s failed, because the file does not exist" : "Wspóldzielenie %s nie powiodło się. ponieważ plik nie istnieje", "You are not allowed to share %s" : "Nie masz uprawnień aby udostępnić %s", - "Sharing %s failed, because you can not share with yourself" : "Współdzielenie %s nie udało się, ponieważ nie możesz współdzielić sam ze sobą", + "Sharing %s failed, because you can not share with yourself" : "Udostępnienie %s nie udało się, ponieważ nie możesz współdzielić sam ze sobą", "You need to provide a password to create a public link, only protected links are allowed" : "Musisz zapewnić hasło aby utworzyć link publiczny, dozwolone są tylko linki chronione", "Sharing %s failed, because sharing with links is not allowed" : "Współdzielenie %s nie powiodło się, ponieważ współdzielenie z linkami nie jest dozwolone", "Not allowed to create a federated share with the same user" : "Nie jest dozwolone tworzenie współdzielenia stowarzyszonego z tym samym użytkownikiem", diff --git a/lib/l10n/zh_CN.js b/lib/l10n/zh_CN.js index bab3b63c82c..1995f215992 100644 --- a/lib/l10n/zh_CN.js +++ b/lib/l10n/zh_CN.js @@ -76,6 +76,7 @@ OC.L10N.register( "Basic settings" : "基本设置", "Sharing" : "共享", "Security" : "安全", + "Theming" : "主题", "Groupware" : "组件", "Additional settings" : "其他设置", "Personal info" : "个人信息", @@ -105,23 +106,38 @@ OC.L10N.register( "You are not allowed to share %s" : "您无权共享 %s", "Sharing %s failed, because you can not share with yourself" : "共享 %s 失败,因为您不能共享给自己", "Sharing %1$s failed, because the user %2$s does not exist" : "共享 %1$s 失败,因为 %2$s 用户不存在", + "Sharing %1$s failed, because the user %2$s is not a member of any groups that %3$s is a member of" : "共享 %1$s失败, 因为用户 %2$s 不是%3$s 所属的任何组的用户", + "Sharing %1$s failed, because this item is already shared with %2$s" : "共享 %1$s 失败,因为该项已经共享给 %2$s", + "Sharing %1$s failed, because this item is already shared with user %2$s" : "共享 %1$s 失败, 因为该项已经共享给用户 %2$s", + "Sharing %1$s failed, because the group %2$s does not exist" : "共享 %1$s 失败,因为 %2$s 分组不存在", + "Sharing %1$s failed, because %2$s is not a member of the group %3$s" : "共享 %1$s 失败,因为 %2$s 不是 %3$s 分组的成员", "You need to provide a password to create a public link, only protected links are allowed" : "您需要提供密码以创建公开链接,因为只允许创建受保护的链接", "Sharing %s failed, because sharing with links is not allowed" : "共享 %s 失败,因为不允许使用链接共享", "Not allowed to create a federated share with the same user" : "不允许创建对相同用户的联合共享", + "Sharing %1$s failed, could not find %2$s, maybe the server is currently unreachable." : "共享 %1$s 失败,无法找到 %2$s,该服务当前无法连接。", + "Share type %1$s is not valid for %2$s" : "%1$s 不是 %2$s 合法的共享类型", "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "无法设置过期时间。过期时间不能晚于其共享时间 %s", "Cannot set expiration date. Expiration date is in the past" : "无法设置过期时间。过期时间不能为过去", "Sharing backend %s must implement the interface OCP\\Share_Backend" : "共享后端 %s 必须实现 OCP\\Share_Backend 接口", "Sharing backend %s not found" : "%s 的共享后端未找到", "Sharing backend for %s not found" : "%s 的共享后端未找到", "Sharing failed, because the user %s is the original sharer" : "共享失败,因为用户 %s 是原始的共享者", + "Sharing %1$s failed, because the permissions exceed permissions granted to %2$s" : "共享 %1$s 失败, 因为已经超出了 %2$s 的权限。", "Sharing %s failed, because resharing is not allowed" : "共享 %s 失败,因为不允许二次共享", + "Sharing %1$s failed, because the sharing backend for %2$s could not find its source" : "共享 %1$s失败,因为无法找到 %2$s 共享后端的来源", "Sharing %s failed, because the file could not be found in the file cache" : "共享 %s 失败,因为文件缓存中找不到该文件", + "%1$s shared »%2$s« with you and wants to add:" : "%1$s 与您共享了 »%2$s« 并希望添加:", + "%1$s shared »%2$s« with you and wants to add" : "%1$s 与您共享了 »%2$s« 并希望添加", + "»%s« added a note to a file shared with you" : "»%s« 在与您共享的文件中添加了备注", "Open »%s«" : "打开 »%s«", + "%1$s via %2$s" : "%1$s 通过 %2$s", "Can’t increase permissions of %s" : "无法增加%s的权限。", "Files can’t be shared with delete permissions" : "无法共享有删除权限的文件", "Files can’t be shared with create permissions" : "无法共享有创建权限的文件", "Expiration date is in the past" : "到期日期已过", "Can’t set expiration date more than %s days in the future" : "无法将过期日期设置为超过 %s 天。", + "%1$s shared »%2$s« with you" : "%1$s 与您分享了 »%2$s«", + "%1$s shared »%2$s« with you." : "%1$s 与您分享了 »%2$s«。", "Click the button below to open it." : "点击下方按钮可打开它。", "The requested share does not exist anymore" : "当前请求的共享已经不存在", "Could not find category \"%s\"" : "无法找到分类 \"%s\"", diff --git a/lib/l10n/zh_CN.json b/lib/l10n/zh_CN.json index 17e1ed1f50f..b729038c92e 100644 --- a/lib/l10n/zh_CN.json +++ b/lib/l10n/zh_CN.json @@ -74,6 +74,7 @@ "Basic settings" : "基本设置", "Sharing" : "共享", "Security" : "安全", + "Theming" : "主题", "Groupware" : "组件", "Additional settings" : "其他设置", "Personal info" : "个人信息", @@ -103,23 +104,38 @@ "You are not allowed to share %s" : "您无权共享 %s", "Sharing %s failed, because you can not share with yourself" : "共享 %s 失败,因为您不能共享给自己", "Sharing %1$s failed, because the user %2$s does not exist" : "共享 %1$s 失败,因为 %2$s 用户不存在", + "Sharing %1$s failed, because the user %2$s is not a member of any groups that %3$s is a member of" : "共享 %1$s失败, 因为用户 %2$s 不是%3$s 所属的任何组的用户", + "Sharing %1$s failed, because this item is already shared with %2$s" : "共享 %1$s 失败,因为该项已经共享给 %2$s", + "Sharing %1$s failed, because this item is already shared with user %2$s" : "共享 %1$s 失败, 因为该项已经共享给用户 %2$s", + "Sharing %1$s failed, because the group %2$s does not exist" : "共享 %1$s 失败,因为 %2$s 分组不存在", + "Sharing %1$s failed, because %2$s is not a member of the group %3$s" : "共享 %1$s 失败,因为 %2$s 不是 %3$s 分组的成员", "You need to provide a password to create a public link, only protected links are allowed" : "您需要提供密码以创建公开链接,因为只允许创建受保护的链接", "Sharing %s failed, because sharing with links is not allowed" : "共享 %s 失败,因为不允许使用链接共享", "Not allowed to create a federated share with the same user" : "不允许创建对相同用户的联合共享", + "Sharing %1$s failed, could not find %2$s, maybe the server is currently unreachable." : "共享 %1$s 失败,无法找到 %2$s,该服务当前无法连接。", + "Share type %1$s is not valid for %2$s" : "%1$s 不是 %2$s 合法的共享类型", "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "无法设置过期时间。过期时间不能晚于其共享时间 %s", "Cannot set expiration date. Expiration date is in the past" : "无法设置过期时间。过期时间不能为过去", "Sharing backend %s must implement the interface OCP\\Share_Backend" : "共享后端 %s 必须实现 OCP\\Share_Backend 接口", "Sharing backend %s not found" : "%s 的共享后端未找到", "Sharing backend for %s not found" : "%s 的共享后端未找到", "Sharing failed, because the user %s is the original sharer" : "共享失败,因为用户 %s 是原始的共享者", + "Sharing %1$s failed, because the permissions exceed permissions granted to %2$s" : "共享 %1$s 失败, 因为已经超出了 %2$s 的权限。", "Sharing %s failed, because resharing is not allowed" : "共享 %s 失败,因为不允许二次共享", + "Sharing %1$s failed, because the sharing backend for %2$s could not find its source" : "共享 %1$s失败,因为无法找到 %2$s 共享后端的来源", "Sharing %s failed, because the file could not be found in the file cache" : "共享 %s 失败,因为文件缓存中找不到该文件", + "%1$s shared »%2$s« with you and wants to add:" : "%1$s 与您共享了 »%2$s« 并希望添加:", + "%1$s shared »%2$s« with you and wants to add" : "%1$s 与您共享了 »%2$s« 并希望添加", + "»%s« added a note to a file shared with you" : "»%s« 在与您共享的文件中添加了备注", "Open »%s«" : "打开 »%s«", + "%1$s via %2$s" : "%1$s 通过 %2$s", "Can’t increase permissions of %s" : "无法增加%s的权限。", "Files can’t be shared with delete permissions" : "无法共享有删除权限的文件", "Files can’t be shared with create permissions" : "无法共享有创建权限的文件", "Expiration date is in the past" : "到期日期已过", "Can’t set expiration date more than %s days in the future" : "无法将过期日期设置为超过 %s 天。", + "%1$s shared »%2$s« with you" : "%1$s 与您分享了 »%2$s«", + "%1$s shared »%2$s« with you." : "%1$s 与您分享了 »%2$s«。", "Click the button below to open it." : "点击下方按钮可打开它。", "The requested share does not exist anymore" : "当前请求的共享已经不存在", "Could not find category \"%s\"" : "无法找到分类 \"%s\"", diff --git a/lib/private/Activity/Manager.php b/lib/private/Activity/Manager.php index 3381c23e31c..ba2d1147bc8 100644 --- a/lib/private/Activity/Manager.php +++ b/lib/private/Activity/Manager.php @@ -58,7 +58,7 @@ class Manager implements IManager { protected $formattingObjectId; /** @var bool */ - protected $requirePNG; + protected $requirePNG = false; /** @var string */ protected $currentUserId; diff --git a/lib/private/AllConfig.php b/lib/private/AllConfig.php index 09520aae2a9..05ac1bad64b 100644 --- a/lib/private/AllConfig.php +++ b/lib/private/AllConfig.php @@ -126,6 +126,42 @@ class AllConfig implements \OCP\IConfig { } /** + * Looks up a boolean system wide defined value + * + * @param string $key the key of the value, under which it was saved + * @param mixed $default the default value to be returned if the value isn't set + * @return mixed the value or $default + * @since 16.0.0 + */ + public function getSystemValueBool(string $key, bool $default = false): bool { + return (bool) $this->getSystemValue($key, $default); + } + + /** + * Looks up an integer system wide defined value + * + * @param string $key the key of the value, under which it was saved + * @param mixed $default the default value to be returned if the value isn't set + * @return mixed the value or $default + * @since 16.0.0 + */ + public function getSystemValueInt(string $key, int $default = 0): int { + return (int) $this->getSystemValue($key, $default); + } + + /** + * Looks up a string system wide defined value + * + * @param string $key the key of the value, under which it was saved + * @param mixed $default the default value to be returned if the value isn't set + * @return mixed the value or $default + * @since 16.0.0 + */ + public function getSystemValueString(string $key, string $default = ''): string { + return (string) $this->getSystemValue($key, $default); + } + + /** * Looks up a system wide defined value and filters out sensitive data * * @param string $key the key of the value, under which it was saved diff --git a/lib/private/App/InfoParser.php b/lib/private/App/InfoParser.php index e0ed63fc784..ef96156dfed 100644 --- a/lib/private/App/InfoParser.php +++ b/lib/private/App/InfoParser.php @@ -52,7 +52,7 @@ class InfoParser { return null; } - if(!is_null($this->cache)) { + if ($this->cache !== null) { $fileCacheKey = $file . filemtime($file); if ($cachedValue = $this->cache->get($fileCacheKey)) { return json_decode($cachedValue, true); @@ -205,13 +205,25 @@ class InfoParser { $array['settings']['personal-section'] = [$array['settings']['personal-section']]; } - if(!is_null($this->cache)) { + if (isset($array['navigations']['navigation']) && $this->isNavigationItem($array['navigations']['navigation'])) { + $array['navigations']['navigation'] = [$array['navigations']['navigation']]; + } + + if ($this->cache !== null) { $this->cache->set($fileCacheKey, json_encode($array)); } return $array; } /** + * @param $data + * @return bool + */ + private function isNavigationItem($data): bool { + return isset($data['name'], $data['route']); + } + + /** * @param \SimpleXMLElement $xml * @return array */ diff --git a/lib/private/Collaboration/Collaborators/GroupPlugin.php b/lib/private/Collaboration/Collaborators/GroupPlugin.php index 7eee042076e..b1e331132be 100644 --- a/lib/private/Collaboration/Collaborators/GroupPlugin.php +++ b/lib/private/Collaboration/Collaborators/GroupPlugin.php @@ -73,6 +73,10 @@ class GroupPlugin implements ISearchPlugin { $lowerSearch = strtolower($search); foreach ($groups as $group) { + if ($group->hideFromCollaboration()) { + continue; + } + // FIXME: use a more efficient approach $gid = $group->getGID(); if (!in_array($gid, $groupIds)) { diff --git a/lib/private/Collaboration/Collaborators/LookupPlugin.php b/lib/private/Collaboration/Collaborators/LookupPlugin.php index fb7c872c30c..438985ef0d3 100644 --- a/lib/private/Collaboration/Collaborators/LookupPlugin.php +++ b/lib/private/Collaboration/Collaborators/LookupPlugin.php @@ -62,11 +62,11 @@ class LookupPlugin implements ISearchPlugin { public function search($search, $limit, $offset, ISearchResult $searchResult) { $isGlobalScaleEnabled = $this->config->getSystemValue('gs.enabled', false); - $isLookupServerEnabled = $this->config->getAppValue('files_sharing', 'lookupServerEnabled', 'no') === 'yes'; + $isLookupServerEnabled = $this->config->getAppValue('files_sharing', 'lookupServerEnabled', 'yes') === 'yes'; $hasInternetConnection = (bool)$this->config->getSystemValue('has_internet_connection', true); // if case of Global Scale we always search the lookup server - if ((!$isLookupServerEnabled && !$isGlobalScaleEnabled) || !$hasInternetConnection) { + if (!$isGlobalScaleEnabled && (!$isLookupServerEnabled || !$hasInternetConnection)) { return false; } diff --git a/lib/private/Console/Application.php b/lib/private/Console/Application.php index 0e30fa02b94..d7c047527f1 100644 --- a/lib/private/Console/Application.php +++ b/lib/private/Console/Application.php @@ -91,10 +91,10 @@ class Application { $inputDefinition = $application->getDefinition(); $inputDefinition->addOption( new InputOption( - 'no-warnings', - null, - InputOption::VALUE_NONE, - 'Skip global warnings, show command output only', + 'no-warnings', + null, + InputOption::VALUE_NONE, + 'Skip global warnings, show command output only', null ) ); @@ -119,7 +119,7 @@ class Application { if ($this->config->getSystemValue('installed', false)) { if (\OCP\Util::needUpgrade()) { throw new NeedsUpdateException(); - } elseif ($this->config->getSystemValue('maintenance', false)) { + } elseif ($this->config->getSystemValueBool('maintenance')) { $this->writeMaintenanceModeInfo($input, $output); } else { OC_App::loadApps(); diff --git a/lib/private/Federation/CloudFederationProviderManager.php b/lib/private/Federation/CloudFederationProviderManager.php index 94b2f052747..c2944f410b3 100644 --- a/lib/private/Federation/CloudFederationProviderManager.php +++ b/lib/private/Federation/CloudFederationProviderManager.php @@ -134,7 +134,6 @@ class CloudFederationProviderManager implements ICloudFederationProviderManager public function sendShare(ICloudFederationShare $share) { $cloudID = $this->cloudIdManager->resolveCloudId($share->getShareWith()); $ocmEndPoint = $this->getOCMEndPoint($cloudID->getRemote()); - if (empty($ocmEndPoint)) { return false; } @@ -142,7 +141,8 @@ class CloudFederationProviderManager implements ICloudFederationProviderManager $client = $this->httpClientService->newClient(); try { $response = $client->post($ocmEndPoint . '/shares', [ - 'body' => $share->getShare(), + 'body' => json_encode($share->getShare()), + 'headers' => ['content-type' => 'application/json'], 'timeout' => 10, 'connect_timeout' => 10, ]); @@ -181,7 +181,8 @@ class CloudFederationProviderManager implements ICloudFederationProviderManager $client = $this->httpClientService->newClient(); try { $response = $client->post($ocmEndPoint . '/notifications', [ - 'body' => $notification->getMessage(), + 'body' => json_encode($notification->getMessage()), + 'headers' => ['content-type' => 'application/json'], 'timeout' => 10, 'connect_timeout' => 10, ]); diff --git a/lib/private/Files/Cache/AbstractCacheEvent.php b/lib/private/Files/Cache/AbstractCacheEvent.php new file mode 100644 index 00000000000..c8a41ce54d8 --- /dev/null +++ b/lib/private/Files/Cache/AbstractCacheEvent.php @@ -0,0 +1,68 @@ +<?php declare(strict_types=1); +/** + * @copyright Copyright (c) 2019 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/>. + * + */ + +namespace OC\Files\Cache; + +use OCP\Files\Cache\ICacheEvent; +use OCP\Files\Storage\IStorage; +use Symfony\Component\EventDispatcher\Event; + +class AbstractCacheEvent extends Event implements ICacheEvent { + protected $storage; + protected $path; + protected $fileId; + + /** + * @param IStorage $storage + * @param string $path + * @param int $fileId + * @since 16.0.0 + */ + public function __construct(IStorage $storage, string $path, int $fileId) { + $this->storage = $storage; + $this->path = $path; + $this->fileId = $fileId; + } + + /** + * @return IStorage + * @since 16.0.0 + */ + public function getStorage(): IStorage { + return $this->storage; + } + + /** + * @return string + * @since 16.0.0 + */ + public function getPath(): string { + return $this->path; + } + + /** + * @return int + * @since 16.0.0 + */ + public function getFileId(): int { + return $this->fileId; + } +} diff --git a/lib/private/Files/Cache/Cache.php b/lib/private/Files/Cache/Cache.php index 17e870bcbb4..7b42cc2aa57 100644 --- a/lib/private/Files/Cache/Cache.php +++ b/lib/private/Files/Cache/Cache.php @@ -41,6 +41,7 @@ use Doctrine\DBAL\Exception\UniqueConstraintViolationException; use OCP\DB\QueryBuilder\IQueryBuilder; use Doctrine\DBAL\Driver\Statement; use OCP\Files\Cache\CacheInsertEvent; +use OCP\Files\Cache\CacheUpdateEvent; use OCP\Files\Cache\ICache; use OCP\Files\Cache\ICacheEntry; use \OCP\Files\IMimeTypeLoader; @@ -230,7 +231,7 @@ class Cache implements ICache { */ public function put($file, array $data) { if (($id = $this->getId($file)) > -1) { - $this->update($id, $data); + $this->update($id, $data, $file); return $id; } else { return $this->insert($file, $data); @@ -337,6 +338,11 @@ class Cache implements ICache { ') AND `fileid` = ? '; $this->connection->executeQuery($sql, $params); + $path = $this->getPathById($id); + // path can still be null if the file doesn't exist + if ($path !== null) { + $this->eventDispatcher->dispatch(CacheUpdateEvent::class, new CacheUpdateEvent($this->storage, $path, $id)); + } } /** diff --git a/lib/private/Files/FileInfo.php b/lib/private/Files/FileInfo.php index 575af56ceb5..19b95cd0355 100644 --- a/lib/private/Files/FileInfo.php +++ b/lib/private/Files/FileInfo.php @@ -81,6 +81,13 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess { private $subMountsUsed = false; /** + * The size of the file/folder without any sub mount + * + * @var int + */ + private $rawSize = 0; + + /** * @param string|boolean $path * @param Storage\Storage $storage * @param string $internalPath @@ -95,6 +102,7 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess { $this->data = $data; $this->mount = $mount; $this->owner = $owner; + $this->rawSize = $this->data['size'] ?? 0; } public function offsetSet($offset, $value) { @@ -194,9 +202,13 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess { /** * @return int */ - public function getSize() { - $this->updateEntryfromSubMounts(); - return isset($this->data['size']) ? 0 + $this->data['size'] : 0; + public function getSize($includeMounts = true) { + if ($includeMounts) { + $this->updateEntryfromSubMounts(); + return isset($this->data['size']) ? 0 + $this->data['size'] : 0; + } else { + return $this->rawSize; + } } /** diff --git a/lib/private/Files/Node/LazyRoot.php b/lib/private/Files/Node/LazyRoot.php index 389a1a9f0ff..01b4ca52765 100644 --- a/lib/private/Files/Node/LazyRoot.php +++ b/lib/private/Files/Node/LazyRoot.php @@ -214,7 +214,7 @@ class LazyRoot implements IRootFolder { /** * @inheritDoc */ - public function getSize() { + public function getSize($includeMounts = true) { return $this->__call(__FUNCTION__, func_get_args()); } diff --git a/lib/private/Files/Node/Node.php b/lib/private/Files/Node/Node.php index 590f1080617..41e8bf75242 100644 --- a/lib/private/Files/Node/Node.php +++ b/lib/private/Files/Node/Node.php @@ -190,12 +190,13 @@ class Node implements \OCP\Files\Node { } /** + * @param bool $includeMounts * @return int * @throws InvalidPathException * @throws NotFoundException */ - public function getSize() { - return $this->getFileInfo()->getSize(); + public function getSize($includeMounts = true) { + return $this->getFileInfo()->getSize($includeMounts); } /** diff --git a/lib/private/Files/Node/NonExistingFile.php b/lib/private/Files/Node/NonExistingFile.php index fbfb67749bb..5183102483f 100644 --- a/lib/private/Files/Node/NonExistingFile.php +++ b/lib/private/Files/Node/NonExistingFile.php @@ -66,9 +66,9 @@ class NonExistingFile extends File { } } - public function getSize() { + public function getSize($includeMounts = true) { if ($this->fileInfo) { - return parent::getSize(); + return parent::getSize($includeMounts); } else { throw new NotFoundException(); } diff --git a/lib/private/Files/Node/NonExistingFolder.php b/lib/private/Files/Node/NonExistingFolder.php index efc359181c6..f6a1794a531 100644 --- a/lib/private/Files/Node/NonExistingFolder.php +++ b/lib/private/Files/Node/NonExistingFolder.php @@ -67,9 +67,9 @@ class NonExistingFolder extends Folder { } } - public function getSize() { + public function getSize($includeMounts = true) { if ($this->fileInfo) { - return parent::getSize(); + return parent::getSize($includeMounts); } else { throw new NotFoundException(); } diff --git a/lib/private/Files/Node/Root.php b/lib/private/Files/Node/Root.php index 189c2863a34..390d29edb31 100644 --- a/lib/private/Files/Node/Root.php +++ b/lib/private/Files/Node/Root.php @@ -282,9 +282,10 @@ class Root extends Folder implements IRootFolder { } /** + * @param bool $includeMounts * @return int */ - public function getSize() { + public function getSize($includeMounts = true) { return null; } diff --git a/lib/private/Files/ObjectStore/ObjectStoreStorage.php b/lib/private/Files/ObjectStore/ObjectStoreStorage.php index 7ee1c8e2055..83a649e6084 100644 --- a/lib/private/Files/ObjectStore/ObjectStoreStorage.php +++ b/lib/private/Files/ObjectStore/ObjectStoreStorage.php @@ -26,9 +26,9 @@ namespace OC\Files\ObjectStore; use Icewind\Streams\CallbackWrapper; +use Icewind\Streams\CountWrapper; use Icewind\Streams\IteratorDirectory; use OC\Files\Cache\CacheEntry; -use OC\Files\Stream\CountReadStream; use OCP\Files\NotFoundException; use OCP\Files\ObjectStore\IObjectStore; @@ -443,7 +443,7 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common { try { //upload to object storage if ($size === null) { - $countStream = CountReadStream::wrap($stream, function ($writtenSize) use ($fileId, &$size) { + $countStream = CountWrapper::wrap($stream, function ($writtenSize) use ($fileId, &$size) { $this->getCache()->update($fileId, [ 'size' => $writtenSize ]); diff --git a/lib/private/Files/ObjectStore/S3ObjectTrait.php b/lib/private/Files/ObjectStore/S3ObjectTrait.php index 0b55c319ea8..7c46ba25c11 100644 --- a/lib/private/Files/ObjectStore/S3ObjectTrait.php +++ b/lib/private/Files/ObjectStore/S3ObjectTrait.php @@ -23,8 +23,11 @@ namespace OC\Files\ObjectStore; +use Aws\S3\Exception\S3MultipartUploadException; use Aws\S3\MultipartUploader; +use Aws\S3\ObjectUploader; use Aws\S3\S3Client; +use Icewind\Streams\CallbackWrapper; const S3_UPLOAD_PART_SIZE = 524288000; // 500MB @@ -73,12 +76,30 @@ trait S3ObjectTrait { * @since 7.0.0 */ function writeObject($urn, $stream) { - $uploader = new MultipartUploader($this->getConnection(), $stream, [ + $count = 0; + $countStream = CallbackWrapper::wrap($stream, function ($read) use (&$count) { + $count += $read; + }); + + $uploader = new MultipartUploader($this->getConnection(), $countStream, [ 'bucket' => $this->bucket, 'key' => $urn, 'part_size' => S3_UPLOAD_PART_SIZE ]); - $uploader->upload(); + + try { + $uploader->upload(); + } catch (S3MultipartUploadException $e) { + // This is an emty file so just touch it then + if ($count === 0 && feof($countStream)) { + $uploader = new ObjectUploader($this->getConnection(), $this->bucket, $urn, ''); + $uploader->upload(); + } else { + throw $e; + } + } + + fclose($countStream); } /** diff --git a/lib/private/Files/Stream/CountReadStream.php b/lib/private/Files/Stream/CountReadStream.php deleted file mode 100644 index 93cadf8f214..00000000000 --- a/lib/private/Files/Stream/CountReadStream.php +++ /dev/null @@ -1,65 +0,0 @@ -<?php declare(strict_types=1); -/** - * @copyright Copyright (c) 2018 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/>. - * - */ - -namespace OC\Files\Stream; - -use Icewind\Streams\Wrapper; - -class CountReadStream extends Wrapper { - /** @var int */ - private $count; - - /** @var callback */ - private $callback; - - public static function wrap($source, $callback) { - $context = stream_context_create(array( - 'count' => array( - 'source' => $source, - 'callback' => $callback, - ) - )); - return Wrapper::wrapSource($source, $context, 'count', self::class); - } - - public function dir_opendir($path, $options) { - return false; - } - - public function stream_open($path, $mode, $options, &$opened_path) { - $context = $this->loadContext('count'); - - $this->callback = $context['callback']; - return true; - } - - public function stream_read($count) { - $result = parent::stream_read($count); - $this->count += strlen($result); - return $result; - } - - public function stream_close() { - $result = parent::stream_close(); - call_user_func($this->callback, $this->count); - return $result; - } -} diff --git a/lib/private/Group/Group.php b/lib/private/Group/Group.php index 0d54cf8e35a..df8de7af5d5 100644 --- a/lib/private/Group/Group.php +++ b/lib/private/Group/Group.php @@ -30,6 +30,7 @@ namespace OC\Group; +use OCP\Group\Backend\IHideFromCollaborationBackend; use OCP\GroupInterface; use OCP\IGroup; use OCP\IUser; @@ -350,4 +351,14 @@ class Group implements IGroup { } return false; } + + /** + * @return bool + * @since 16.0.0 + */ + public function hideFromCollaboration(): bool { + return array_reduce($this->backends, function(bool $hide, GroupInterface $backend) { + return $hide | ($backend instanceof IHideFromCollaborationBackend && $backend->hideGroup($this->gid)); + }, false); + } } diff --git a/lib/private/IntegrityCheck/Iterator/ExcludeFileByNameFilterIterator.php b/lib/private/IntegrityCheck/Iterator/ExcludeFileByNameFilterIterator.php index e0ad6a550e5..26f4a56d15a 100644 --- a/lib/private/IntegrityCheck/Iterator/ExcludeFileByNameFilterIterator.php +++ b/lib/private/IntegrityCheck/Iterator/ExcludeFileByNameFilterIterator.php @@ -26,7 +26,7 @@ namespace OC\IntegrityCheck\Iterator; /** * Class ExcludeFileByNameFilterIterator provides a custom iterator which excludes - * entries with the specified file name from the file list. + * entries with the specified file name from the file list. These file names are matched exactly. * * @package OC\Integritycheck\Iterator */ @@ -42,21 +42,42 @@ class ExcludeFileByNameFilterIterator extends \RecursiveFilterIterator { '.DS_Store', // Mac OS X 'Thumbs.db', // Microsoft Windows '.directory', // Dolphin (KDE) - '.webapp', // Gentoo/Funtoo & derivatives use a tool known as webapp-config to manager wep-apps. + '.webapp', // Gentoo/Funtoo & derivatives use a tool known as webapp-config to manage web-apps. ]; /** + * Array of excluded file name parts. Those are not scanned by the integrity checker. + * These strings are regular expressions and any file names + * matching these expressions are ignored. + * + * @var array + */ + private $excludedFilenamePatterns = [ + '/^\.webapp-nextcloud-(\d+\.){2}(\d+)(-r\d+)?$/', // Gentoo/Funtoo & derivatives use a tool known as webapp-config to manage wep-apps. + ]; + + /** * @return bool */ public function accept() { - if($this->isDir()) { + /** @var \SplFileInfo $current */ + $current = $this->current(); + + if ($current->isDir()) { return true; } - return !\in_array( - $this->current()->getFilename(), - $this->excludedFilenames, - true - ); + $currentFileName = $current->getFilename(); + if (in_array($currentFileName, $this->excludedFilenames, true)){ + return false; + } + + foreach ($this->excludedFilenamePatterns as $pattern){ + if (preg_match($pattern, $currentFileName) > 0){ + return false; + } + } + + return true; } } diff --git a/lib/private/Mail/EMailTemplate.php b/lib/private/Mail/EMailTemplate.php index 05a884a67fa..b3654f30382 100644 --- a/lib/private/Mail/EMailTemplate.php +++ b/lib/private/Mail/EMailTemplate.php @@ -435,6 +435,7 @@ EOF; $text = htmlspecialchars($text); } + $this->ensureBodyListClosed(); $this->ensureBodyIsOpened(); $this->htmlBody .= vsprintf($this->bodyText, [$text]); diff --git a/lib/private/NavigationManager.php b/lib/private/NavigationManager.php index 1874cd0e4ff..2c41fbd88c2 100644 --- a/lib/private/NavigationManager.php +++ b/lib/private/NavigationManager.php @@ -271,10 +271,10 @@ class NavigationManager implements INavigationManager { // load plugins and collections from info.xml $info = $this->appManager->getAppInfo($app); - if (empty($info['navigations'])) { + if (!isset($info['navigations']['navigation'])) { continue; } - foreach ($info['navigations'] as $nav) { + foreach ($info['navigations']['navigation'] as $key => $nav) { if (!isset($nav['name'])) { continue; } @@ -286,7 +286,7 @@ class NavigationManager implements INavigationManager { continue; } $l = $this->l10nFac->get($app); - $id = isset($nav['id']) ? $nav['id'] : $app; + $id = $nav['id'] ?? $app . ($key === 0 ? '' : $key); $order = isset($nav['order']) ? $nav['order'] : 100; $type = isset($nav['type']) ? $nav['type'] : 'link'; $route = $nav['route'] !== '' ? $this->urlGenerator->linkToRoute($nav['route']) : ''; diff --git a/lib/private/Repair.php b/lib/private/Repair.php index 72995a96132..e4eb4cfcc16 100644 --- a/lib/private/Repair.php +++ b/lib/private/Repair.php @@ -43,6 +43,7 @@ use OC\Repair\NC13\RepairInvalidPaths; use OC\Repair\NC14\AddPreviewBackgroundCleanupJob; use OC\Repair\NC14\RepairPendingCronJobs; use OC\Repair\NC15\SetVcardDatabaseUID; +use OC\Repair\NC16\AddClenupLoginFlowV2BackgroundJob; use OC\Repair\NC16\CleanupCardDAVPhotoCache; use OC\Repair\OldGroupMembershipShares; use OC\Repair\Owncloud\DropAccountTermsTable; @@ -150,6 +151,7 @@ class Repair implements IOutput { new RepairPendingCronJobs(\OC::$server->getDatabaseConnection(), \OC::$server->getConfig()), new SetVcardDatabaseUID(\OC::$server->getDatabaseConnection(), \OC::$server->getConfig(), \OC::$server->getLogger()), new CleanupCardDAVPhotoCache(\OC::$server->getConfig(), \OC::$server->getAppDataDir('dav-photocache'), \OC::$server->getLogger()), + new AddClenupLoginFlowV2BackgroundJob(\OC::$server->getJobList()), ]; } diff --git a/lib/private/Repair/NC16/AddClenupLoginFlowV2BackgroundJob.php b/lib/private/Repair/NC16/AddClenupLoginFlowV2BackgroundJob.php new file mode 100644 index 00000000000..9f8bdef9b1f --- /dev/null +++ b/lib/private/Repair/NC16/AddClenupLoginFlowV2BackgroundJob.php @@ -0,0 +1,49 @@ +<?php +declare(strict_types=1); +/** + * @copyright Copyright (c) 2019, Roeland Jago Douma <roeland@famdouma.nl> + * + * @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 OC\Repair\NC16; + +use OC\Core\BackgroundJobs\CleanupLoginFlowV2; +use OCP\BackgroundJob\IJobList; +use OCP\Migration\IOutput; +use OCP\Migration\IRepairStep; + +class AddClenupLoginFlowV2BackgroundJob implements IRepairStep { + + /** @var IJobList */ + private $jobList; + + public function __construct(IJobList $jobList) { + $this->jobList = $jobList; + } + + public function getName(): string { + return 'Add background job to cleanup login flow v2 tokens'; + } + + public function run(IOutput $output) { + $this->jobList->add(CleanupLoginFlowV2::class); + } + +} diff --git a/lib/private/Route/Router.php b/lib/private/Route/Router.php index b44b3f7c2ce..1839b356424 100644 --- a/lib/private/Route/Router.php +++ b/lib/private/Route/Router.php @@ -260,7 +260,7 @@ class Router implements IRouter { $this->loadRoutes($app); } else if (substr($url, 0, 6) === '/core/' or substr($url, 0, 10) === '/settings/') { \OC::$REQUESTEDAPP = $url; - if (!\OC::$server->getConfig()->getSystemValue('maintenance', false) && !Util::needUpgrade()) { + if (!\OC::$server->getConfig()->getSystemValueBool('maintenance') && !Util::needUpgrade()) { \OC_App::loadApps(); } $this->loadRoutes('core'); diff --git a/lib/private/Server.php b/lib/private/Server.php index 89f55fcc9f3..8a49a8a8a94 100644 --- a/lib/private/Server.php +++ b/lib/private/Server.php @@ -964,7 +964,8 @@ class Server extends ServerContainer implements IServerContainer { $c->getMemCacheFactory(), new Util($c->getConfig(), $this->getAppManager(), $c->getAppDataDir('theming')), new ImageManager($c->getConfig(), $c->getAppDataDir('theming'), $c->getURLGenerator(), $this->getMemCacheFactory(), $this->getLogger()), - $c->getAppManager() + $c->getAppManager(), + $c->getNavigationManager() ); } return new \OC_Defaults(); diff --git a/lib/private/Settings/Admin/Security.php b/lib/private/Settings/Admin/Security.php index dd80d4d3ae6..21e18883cc0 100644 --- a/lib/private/Settings/Admin/Security.php +++ b/lib/private/Settings/Admin/Security.php @@ -25,25 +25,35 @@ namespace OC\Settings\Admin; +use OC\Authentication\TwoFactorAuth\MandatoryTwoFactor; use OCP\AppFramework\Http\TemplateResponse; use OCP\Encryption\IManager; +use OCP\IInitialStateService; use OCP\IUserManager; use OCP\Settings\ISettings; class Security implements ISettings { + /** @var IManager */ private $manager; /** @var IUserManager */ private $userManager; - /** - * @param IManager $manager - * @param IUserManager $userManager - */ - public function __construct(IManager $manager, IUserManager $userManager) { + /** @var MandatoryTwoFactor */ + private $mandatoryTwoFactor; + + /** @var IInitialStateService */ + private $initialState; + + public function __construct(IManager $manager, + IUserManager $userManager, + MandatoryTwoFactor $mandatoryTwoFactor, + IInitialStateService $initialState) { $this->manager = $manager; $this->userManager = $userManager; + $this->mandatoryTwoFactor = $mandatoryTwoFactor; + $this->initialState = $initialState; } /** @@ -61,6 +71,12 @@ class Security implements ISettings { } } + $this->initialState->provideInitialState( + 'settings', + 'mandatory2FAState', + $this->mandatoryTwoFactor->getState() + ); + $parameters = [ // Encryption API 'encryptionEnabled' => $this->manager->isEnabled(), diff --git a/lib/private/Setup.php b/lib/private/Setup.php index 0278191587a..5b2f71e69c5 100644 --- a/lib/private/Setup.php +++ b/lib/private/Setup.php @@ -517,6 +517,7 @@ class Setup { $content .= "\n RewriteCond %{REQUEST_FILENAME} !/robots.txt"; $content .= "\n RewriteCond %{REQUEST_FILENAME} !/updater/"; $content .= "\n RewriteCond %{REQUEST_FILENAME} !/ocs-provider/"; + $content .= "\n RewriteCond %{REQUEST_FILENAME} !/ocm-provider/"; $content .= "\n RewriteCond %{REQUEST_URI} !^/\\.well-known/(acme-challenge|pki-validation)/.*"; $content .= "\n RewriteRule . index.php [PT,E=PATH_INFO:$1]"; $content .= "\n RewriteBase " . $rewriteBase; diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php index b04f1acbd87..884ab4754f5 100644 --- a/lib/private/Share20/Manager.php +++ b/lib/private/Share20/Manager.php @@ -1419,10 +1419,12 @@ class Manager implements IManager { return $al; } - //Get node for the owner + //Get node for the owner and correct the owner in case of external storages $userFolder = $this->rootFolder->getUserFolder($owner); if ($path->getId() !== $userFolder->getId() && !$userFolder->isSubNode($path)) { - $path = $userFolder->getById($path->getId())[0]; + $nodes = $userFolder->getById($path->getId()); + $path = array_shift($nodes); + $owner = $path->getOwner()->getUID(); } $providers = $this->factory->getAllProviders(); diff --git a/lib/private/TemplateLayout.php b/lib/private/TemplateLayout.php index e4a2724de67..f23ec97119f 100644 --- a/lib/private/TemplateLayout.php +++ b/lib/private/TemplateLayout.php @@ -67,7 +67,7 @@ class TemplateLayout extends \OC_Template { } // Decide which page we show - if($renderAs == 'user') { + if($renderAs === 'user') { parent::__construct( 'core', 'layout.user' ); if(in_array(\OC_App::getCurrentApp(), ['settings','admin', 'help']) !== false) { $this->assign('bodyid', 'body-settings'); @@ -115,14 +115,20 @@ class TemplateLayout extends \OC_Template { $this->assign('themingInvertMenu', false); } - } else if ($renderAs == 'error') { + } else if ($renderAs === 'error') { parent::__construct('core', 'layout.guest', '', false); $this->assign('bodyid', 'body-login'); - } else if ($renderAs == 'guest') { + $this->assign('user_displayname', ''); + $this->assign('user_uid', ''); + } else if ($renderAs === 'guest') { parent::__construct('core', 'layout.guest'); \OC_Util::addStyle('guest'); $this->assign('bodyid', 'body-login'); - } else if ($renderAs == 'public') { + + $userDisplayName = \OC_User::getDisplayName(); + $this->assign('user_displayname', $userDisplayName); + $this->assign('user_uid', \OC_User::getUser()); + } else if ($renderAs === 'public') { parent::__construct('core', 'layout.public'); $this->assign( 'appid', $appId ); $this->assign('bodyid', 'body-public'); diff --git a/lib/private/Updater.php b/lib/private/Updater.php index 4b4723be94f..313cfc82ffa 100644 --- a/lib/private/Updater.php +++ b/lib/private/Updater.php @@ -104,7 +104,7 @@ class Updater extends BasicEmitter { $this->emit('\OC\Updater', 'setDebugLogLevel', [ $logLevel, $this->logLevelNames[$logLevel] ]); $this->config->setSystemValue('loglevel', ILogger::DEBUG); - $wasMaintenanceModeEnabled = $this->config->getSystemValue('maintenance', false); + $wasMaintenanceModeEnabled = $this->config->getSystemValueBool('maintenance'); if(!$wasMaintenanceModeEnabled) { $this->config->setSystemValue('maintenance', true); @@ -614,4 +614,3 @@ class Updater extends BasicEmitter { } } - diff --git a/lib/private/legacy/app.php b/lib/private/legacy/app.php index 4cab92eba64..9b4a83de349 100644 --- a/lib/private/legacy/app.php +++ b/lib/private/legacy/app.php @@ -106,7 +106,7 @@ class OC_App { * if $types is set to non-empty array, only apps of those types will be loaded */ public static function loadApps(array $types = []): bool { - if (\OC::$server->getSystemConfig()->getValue('maintenance', false)) { + if ((bool) \OC::$server->getSystemConfig()->getValue('maintenance', false)) { return false; } // Load the enabled apps here diff --git a/lib/public/AppFramework/Http/RedirectToDefaultAppResponse.php b/lib/public/AppFramework/Http/RedirectToDefaultAppResponse.php new file mode 100644 index 00000000000..2ec50137ef9 --- /dev/null +++ b/lib/public/AppFramework/Http/RedirectToDefaultAppResponse.php @@ -0,0 +1,40 @@ +<?php +declare(strict_types=1); +/** + * @copyright Copyright (c) 2019 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 + * 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 OCP\AppFramework\Http; + + +/** + * Redirects to the default app + * @since 16.0.0 + */ +class RedirectToDefaultAppResponse extends RedirectResponse { + + + /** + * Creates a response that redirects to the default app + * @since 16.0.0 + */ + public function __construct() { + parent::__construct(\OC_Util::getDefaultPageUrl()); + } + +} diff --git a/lib/public/Collaboration/AutoComplete/AutoCompleteEvent.php b/lib/public/Collaboration/AutoComplete/AutoCompleteEvent.php new file mode 100644 index 00000000000..59dbafcb56f --- /dev/null +++ b/lib/public/Collaboration/AutoComplete/AutoCompleteEvent.php @@ -0,0 +1,99 @@ +<?php +declare(strict_types=1); +/** + * @copyright Copyright (c) 2019 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 + * 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 OCP\Collaboration\AutoComplete; + + +use Symfony\Component\EventDispatcher\GenericEvent; + +/** + * @since 16.0.0 + */ +class AutoCompleteEvent extends GenericEvent { + + /** + * @param array $arguments + * @since 16.0.0 + */ + public function __construct(array $arguments) { + parent::__construct(null, $arguments); + } + + /** + * @since 16.0.0 + */ + public function getResults(): array { + return $this->getArgument('results'); + } + + /** + * @param array $results + * @since 16.0.0 + */ + public function setResults(array $results): void { + $this->setArgument('results', $results); + } + + /** + * @since 16.0.0 + */ + public function getSearchTerm(): string { + return $this->getArgument('search'); + } + + /** + * @return int[] + * @since 16.0.0 + */ + public function getShareTypes(): array { + return $this->getArgument('shareTypes'); + } + + /** + * @since 16.0.0 + */ + public function getItemType(): string { + return $this->getArgument('itemType'); + } + + /** + * @since 16.0.0 + */ + public function getItemId(): string { + return $this->getArgument('itemId'); + } + + /** + * @since 16.0.0 + */ + public function getSorter(): string { + return $this->getArgument('sorter'); + } + + /** + * @since 16.0.0 + */ + public function getLimit(): int { + return $this->getArgument('limit'); + } + +} diff --git a/lib/public/Files/Cache/CacheInsertEvent.php b/lib/public/Files/Cache/CacheInsertEvent.php index 071f039d45f..6c2e3f34c72 100644 --- a/lib/public/Files/Cache/CacheInsertEvent.php +++ b/lib/public/Files/Cache/CacheInsertEvent.php @@ -21,52 +21,12 @@ namespace OCP\Files\Cache; -use OCP\Files\Storage\IStorage; -use Symfony\Component\EventDispatcher\Event; +use OC\Files\Cache\AbstractCacheEvent; /** + * Event for when a new entry gets added to the cache + * * @since 16.0.0 */ -class CacheInsertEvent extends Event { - private $storage; - private $path; - private $fileId; - - /** - * CacheInsertEvent constructor. - * - * @param IStorage $storage - * @param string $path - * @param int $fileId - * @since 16.0.0 - */ - public function __construct(IStorage $storage, string $path, int $fileId) { - $this->storage = $storage; - $this->path = $path; - $this->fileId = $fileId; - } - - /** - * @return IStorage - * @since 16.0.0 - */ - public function getStorage(): IStorage { - return $this->storage; - } - - /** - * @return string - * @since 16.0.0 - */ - public function getPath(): string { - return $this->path; - } - - /** - * @return int - * @since 16.0.0 - */ - public function getFileId(): int { - return $this->fileId; - } +class CacheInsertEvent extends AbstractCacheEvent { } diff --git a/lib/public/Files/Cache/CacheUpdateEvent.php b/lib/public/Files/Cache/CacheUpdateEvent.php new file mode 100644 index 00000000000..e750c0bf8fc --- /dev/null +++ b/lib/public/Files/Cache/CacheUpdateEvent.php @@ -0,0 +1,32 @@ +<?php declare(strict_types=1); +/** + * @copyright Copyright (c) 2019 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/>. + * + */ + +namespace OCP\Files\Cache; + +use OC\Files\Cache\AbstractCacheEvent; + +/** + * Event for when an existing entry in the cache gets updated + * + * @since 16.0.0 + */ +class CacheUpdateEvent extends AbstractCacheEvent { +} diff --git a/lib/public/Files/Cache/ICacheEvent.php b/lib/public/Files/Cache/ICacheEvent.php new file mode 100644 index 00000000000..f3ad9c03ac1 --- /dev/null +++ b/lib/public/Files/Cache/ICacheEvent.php @@ -0,0 +1,47 @@ +<?php declare(strict_types=1); +/** + * @copyright Copyright (c) 2019 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/>. + * + */ + +namespace OCP\Files\Cache; + +use OCP\Files\Storage\IStorage; + +/** + * @since 16.0.0 + */ +interface ICacheEvent { + /** + * @return IStorage + * @since 16.0.0 + */ + public function getStorage(): IStorage; + + /** + * @return string + * @since 16.0.0 + */ + public function getPath(): string; + + /** + * @return int + * @since 16.0.0 + */ + public function getFileId(): int; +} diff --git a/lib/public/Files/FileInfo.php b/lib/public/Files/FileInfo.php index e25a47e83cd..c256f0980f0 100644 --- a/lib/public/Files/FileInfo.php +++ b/lib/public/Files/FileInfo.php @@ -81,10 +81,11 @@ interface FileInfo { /** * Get the size in bytes for the file or folder * + * @param bool $includeMounts whether or not to include the size of any sub mounts, since 16.0.0 * @return int * @since 7.0.0 */ - public function getSize(); + public function getSize($includeMounts = true); /** * Get the last modified date as timestamp for the file or folder diff --git a/lib/public/Files/Node.php b/lib/public/Files/Node.php index 59bd0e193c6..016b217afc3 100644 --- a/lib/public/Files/Node.php +++ b/lib/public/Files/Node.php @@ -136,12 +136,13 @@ interface Node extends FileInfo { /** * Get the size of the file or folder in bytes * + * @param bool $includeMounts * @return int * @throws InvalidPathException * @throws NotFoundException * @since 6.0.0 */ - public function getSize(); + public function getSize($includeMounts = true); /** * Get the Etag of the file or folder diff --git a/lib/public/FullTextSearch/Model/ISearchResult.php b/lib/public/FullTextSearch/Model/ISearchResult.php index a7dcba82f5c..453ec61e7de 100644 --- a/lib/public/FullTextSearch/Model/ISearchResult.php +++ b/lib/public/FullTextSearch/Model/ISearchResult.php @@ -93,7 +93,7 @@ interface ISearchResult { * * @since 15.0.0 * - * @return array + * @return IndexDocument[] */ public function getDocuments(): array; diff --git a/lib/public/FullTextSearch/Model/IndexDocument.php b/lib/public/FullTextSearch/Model/IndexDocument.php index 78679ac6225..d00a8461ee8 100644 --- a/lib/public/FullTextSearch/Model/IndexDocument.php +++ b/lib/public/FullTextSearch/Model/IndexDocument.php @@ -183,6 +183,17 @@ class IndexDocument implements JsonSerializable { return $this->index; } + /** + * return if Index is defined. + * + * @since 16.0.0 + * + * @return bool + */ + final public function hasIndex(): bool { + return $this->index !== null; + } + /** * Set the modified time of the original document. diff --git a/lib/public/Group/Backend/IHideFromCollaborationBackend.php b/lib/public/Group/Backend/IHideFromCollaborationBackend.php new file mode 100644 index 00000000000..81afbc3d568 --- /dev/null +++ b/lib/public/Group/Backend/IHideFromCollaborationBackend.php @@ -0,0 +1,38 @@ +<?php declare(strict_types=1); +/** + * @copyright Copyright (c) 2019 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/>. + * + */ + +namespace OCP\Group\Backend; + +/** + * @since 16.0.0 + * + * Allow the backend to mark groups to be excluded from being shown in search dialogs + */ +interface IHideFromCollaborationBackend { + /** + * Check if a group should be hidden from search dialogs + * + * @param string $groupId + * @return bool + * @since 16.0.0 + */ + public function hideGroup(string $groupId): bool; +} diff --git a/lib/public/IConfig.php b/lib/public/IConfig.php index e4cd158f872..878c0acf0c3 100644 --- a/lib/public/IConfig.php +++ b/lib/public/IConfig.php @@ -75,6 +75,36 @@ interface IConfig { public function getSystemValue($key, $default = ''); /** + * Looks up a boolean system wide defined value + * + * @param string $key the key of the value, under which it was saved + * @param bool $default the default value to be returned if the value isn't set + * @return bool the value or $default + * @since 16.0.0 + */ + public function getSystemValueBool(string $key, bool $default = false): bool; + + /** + * Looks up an integer system wide defined value + * + * @param string $key the key of the value, under which it was saved + * @param int $default the default value to be returned if the value isn't set + * @return int the value or $default + * @since 16.0.0 + */ + public function getSystemValueInt(string $key, int $default = 0): int; + + /** + * Looks up a string system wide defined value + * + * @param string $key the key of the value, under which it was saved + * @param string $default the default value to be returned if the value isn't set + * @return string the value or $default + * @since 16.0.0 + */ + public function getSystemValueString(string $key, string $default = ''): string; + + /** * Looks up a system wide defined value and filters out sensitive data * * @param string $key the key of the value, under which it was saved diff --git a/lib/public/IGroup.php b/lib/public/IGroup.php index 8fa87e35ce3..48fa84df393 100644 --- a/lib/public/IGroup.php +++ b/lib/public/IGroup.php @@ -138,4 +138,10 @@ interface IGroup { * @since 14.0.0 */ public function canAddUser(); + + /** + * @return bool + * @since 16.0.0 + */ + public function hideFromCollaboration(): bool; } diff --git a/lib/public/INavigationManager.php b/lib/public/INavigationManager.php index 77b881b8b15..f840bc8c8a5 100644 --- a/lib/public/INavigationManager.php +++ b/lib/public/INavigationManager.php @@ -39,6 +39,25 @@ namespace OCP; * @since 6.0.0 */ interface INavigationManager { + + /** + * Navigation entries of the app navigation + * @since 16.0.0 + */ + const TYPE_APPS = 'link'; + + /** + * Navigation entries of the settings navigation + * @since 16.0.0 + */ + const TYPE_SETTINGS = 'settings'; + + /** + * Navigation entries for public page footer navigation + * @since 16.0.0 + */ + const TYPE_GUEST = 'guest'; + /** * Creates a new navigation entry * @@ -65,5 +84,5 @@ interface INavigationManager { * @return array * @since 14.0.0 */ - public function getAll(string $type = 'link'): array; + public function getAll(string $type = self::TYPE_APPS): array; } |