diff --git a/src/core/classes/site.ts b/src/core/classes/site.ts index 31e0b300558..26377eb39b6 100644 --- a/src/core/classes/site.ts +++ b/src/core/classes/site.ts @@ -95,7 +95,7 @@ export class CoreSite { '3.9': 2020061500, '3.10': 2020110900, '3.11': 2021051700, - '4.0': 2021100300, // @todo [4.0] replace with right value when released. Using a tmp value to be able to test new things. + '4.0': 2022041900, }; // Possible cache update frequencies. diff --git a/src/core/features/block/services/block-delegate.ts b/src/core/features/block/services/block-delegate.ts index 593b4edbba5..38d2aaa6758 100644 --- a/src/core/features/block/services/block-delegate.ts +++ b/src/core/features/block/services/block-delegate.ts @@ -194,7 +194,9 @@ export class CoreBlockDelegateService extends CoreDelegate { * @return Whether is enabled or disabled in site. */ protected isFeatureDisabled(handler: CoreBlockHandler, site: CoreSite): boolean { - return this.areBlocksDisabledInSite(site) || super.isFeatureDisabled(handler, site); + // Allow displaying my overview even if all blocks are disabled, to avoid having an empty My Courses. + return (this.areBlocksDisabledInSite(site) && handler.blockName !== 'myoverview') || + super.isFeatureDisabled(handler, site); } /** diff --git a/src/core/features/courses/pages/my/my.ts b/src/core/features/courses/pages/my/my.ts index 5bc3723d363..a2ea4790130 100644 --- a/src/core/features/courses/pages/my/my.ts +++ b/src/core/features/courses/pages/my/my.ts @@ -15,6 +15,7 @@ import { AddonBlockMyOverviewComponent } from '@addons/block/myoverview/components/myoverview/myoverview'; import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core'; import { CoreBlockComponent } from '@features/block/components/block/block'; +import { CoreBlockDelegate } from '@features/block/services/block-delegate'; import { CoreCourseBlock } from '@features/course/services/course'; import { CoreCoursesDashboard, CoreCoursesDashboardProvider } from '@features/courses/services/dashboard'; import { CoreMainMenuDeepLinkManager } from '@features/mainmenu/classes/deep-link-manager'; @@ -80,17 +81,29 @@ export class CoreCoursesMyCoursesPage implements OnInit, OnDestroy { const available = await CoreCoursesDashboard.isAvailable(); const disabled = await CoreCourses.isMyCoursesDisabled(); + const supportsMyParam = !!CoreSites.getCurrentSite()?.isVersionGreaterEqualThan('4.0'); + if (available && !disabled) { try { - const blocks = await CoreCoursesDashboard.getDashboardBlocks(undefined, undefined, this.myPageCourses); + const blocks = await CoreCoursesDashboard.getDashboardBlocks( + undefined, + undefined, + supportsMyParam ? this.myPageCourses : undefined, + ); // My overview block should always be in main blocks, but check side blocks too just in case. this.loadedBlock = blocks.mainBlocks.concat(blocks.sideBlocks).find((block) => block.name == 'myoverview'); - this.hasSideBlocks = blocks.sideBlocks.length > 0; + this.hasSideBlocks = supportsMyParam && CoreBlockDelegate.hasSupportedBlock(blocks.sideBlocks); await CoreUtils.nextTicks(2); this.myOverviewBlock = this.block?.dynamicComponent?.instance as AddonBlockMyOverviewComponent; + + if (!this.loadedBlock && !supportsMyParam) { + // In old sites, display the block even if not found in Dashboard. + // This is because the "My courses" page doesn't exist in the site so it can't be configured. + this.loadFallbackBlock(); + } } catch (error) { CoreDomUtils.showErrorModal(error); @@ -98,10 +111,9 @@ export class CoreCoursesMyCoursesPage implements OnInit, OnDestroy { this.loadFallbackBlock(); } } else if (!available) { - // WS not available, or my courses page not available. show fallback block. + // WS not available, show fallback block. this.loadFallbackBlock(); } else { - // Disabled. this.loadedBlock = undefined; }