diff --git a/src/addons/badges/badges-lazy.module.ts b/src/addons/badges/badges-lazy.module.ts index e23e2d26c..bd6cd1392 100644 --- a/src/addons/badges/badges-lazy.module.ts +++ b/src/addons/badges/badges-lazy.module.ts @@ -19,8 +19,8 @@ import { conditionalRoutes } from '@/app/app-routing.module'; import { CoreScreen } from '@services/screen'; import { CoreSharedModule } from '@/core/shared.module'; -import { AddonBadgesIssuedBadgePage } from './pages/issued-badge/issued-badge'; -import { AddonBadgesUserBadgesPage } from './pages/user-badges/user-badges'; +import { AddonBadgesIssuedBadgePage } from './pages/issued-badge/issued-badge.page'; +import { AddonBadgesUserBadgesPage } from './pages/user-badges/user-badges.page'; const mobileRoutes: Routes = [ { diff --git a/src/addons/badges/pages/issued-badge/issued-badge.ts b/src/addons/badges/pages/issued-badge/issued-badge.page.ts similarity index 100% rename from src/addons/badges/pages/issued-badge/issued-badge.ts rename to src/addons/badges/pages/issued-badge/issued-badge.page.ts diff --git a/src/addons/badges/pages/user-badges/user-badges.ts b/src/addons/badges/pages/user-badges/user-badges.page.ts similarity index 91% rename from src/addons/badges/pages/user-badges/user-badges.ts rename to src/addons/badges/pages/user-badges/user-badges.page.ts index 79c621e77..4a145fb4b 100644 --- a/src/addons/badges/pages/user-badges/user-badges.ts +++ b/src/addons/badges/pages/user-badges/user-badges.page.ts @@ -20,8 +20,9 @@ import { CoreDomUtils } from '@services/utils/dom'; import { CoreSites } from '@services/sites'; import { CoreUtils } from '@services/utils/utils'; import { CorePageItemsListManager } from '@classes/page-items-list-manager'; -import { ActivatedRoute, ActivatedRouteSnapshot, Params } from '@angular/router'; +import { ActivatedRouteSnapshot, Params } from '@angular/router'; import { CoreSplitViewComponent } from '@components/split-view/split-view'; +import { CoreNavigator } from '@services/navigator'; /** * Page that displays the list of calendar events. @@ -37,9 +38,9 @@ export class AddonBadgesUserBadgesPage implements AfterViewInit, OnDestroy { @ViewChild(CoreSplitViewComponent) splitView!: CoreSplitViewComponent; - constructor(route: ActivatedRoute) { - const courseId = parseInt(route.snapshot.queryParams.courseId ?? 0); // Use 0 for site badges. - const userId = parseInt(route.snapshot.queryParams.userId ?? CoreSites.getCurrentSiteUserId()); + constructor() { + const courseId = CoreNavigator.getRouteNumberParam('courseId') ?? 0; // Use 0 for site badges. + const userId = CoreNavigator.getRouteNumberParam('userId') ?? CoreSites.getCurrentSiteUserId(); this.badges = new AddonBadgesUserBadgesManager(AddonBadgesUserBadgesPage, courseId, userId); } diff --git a/src/addons/block/activitymodules/components/activitymodules/activitymodules.ts b/src/addons/block/activitymodules/components/activitymodules/activitymodules.ts index 373344396..c377040b5 100644 --- a/src/addons/block/activitymodules/components/activitymodules/activitymodules.ts +++ b/src/addons/block/activitymodules/components/activitymodules/activitymodules.ts @@ -131,9 +131,8 @@ export class AddonBlockActivityModulesComponent extends CoreBlockBaseComponent i * @param entry Selected entry. */ gotoCoureListModType(entry: AddonBlockActivityModuleEntry): void { - CoreNavigator.navigateToSitePath('course/list-mod-type', { + CoreNavigator.navigateToSitePath('course/' + this.getCourseId() + '/list-mod-type', { params: { - courseId: this.getCourseId(), modName: entry.modName, title: entry.name, }, diff --git a/src/core/features/contentlinks/classes/module-list-handler.ts b/src/core/features/contentlinks/classes/module-list-handler.ts index 6b4f5528c..9d4089b4f 100644 --- a/src/core/features/contentlinks/classes/module-list-handler.ts +++ b/src/core/features/contentlinks/classes/module-list-handler.ts @@ -61,9 +61,8 @@ export class CoreContentLinksModuleListHandler extends CoreContentLinksHandlerBa return [{ action: (siteId): void => { - CoreNavigator.navigateToSitePath('course/list-mod-type', { + CoreNavigator.navigateToSitePath('course/' + params.id + '/list-mod-type', { params: { - courseId: params.id, modName: this.modName, title: this.title || Translate.instant('addon.mod_' + this.modName + '.modulenameplural'), }, diff --git a/src/core/features/course/course-lazy.module.ts b/src/core/features/course/course-lazy.module.ts index a6b626437..fec984b70 100644 --- a/src/core/features/course/course-lazy.module.ts +++ b/src/core/features/course/course-lazy.module.ts @@ -22,18 +22,23 @@ const routes: Routes = [ pathMatch: 'full', }, { - path: 'index', + path: ':courseId', loadChildren: () => import('./pages/index/index.module').then( m => m.CoreCourseIndexPageModule), }, { - path: 'unsupported-module', + path: ':courseId/unsupported-module', loadChildren: () => import('./pages/unsupported-module/unsupported-module.module') .then( m => m.CoreCourseUnsupportedModulePageModule), }, { - path: 'list-mod-type', + path: ':courseId/list-mod-type', loadChildren: () => import('./pages/list-mod-type/list-mod-type.module').then(m => m.CoreCourseListModTypePageModule), }, + { + path: ':courseId/preview', + loadChildren: () => + import('./pages/preview/preview.module').then(m => m.CoreCoursePreviewPageModule), + }, ]; @NgModule({ diff --git a/src/core/features/course/pages/contents/contents.ts b/src/core/features/course/pages/contents/contents.ts index 1a3c4823c..bbc5ac7b0 100644 --- a/src/core/features/course/pages/contents/contents.ts +++ b/src/core/features/course/pages/contents/contents.ts @@ -460,7 +460,10 @@ export class CoreCourseContentsPage implements OnInit, OnDestroy { * Open the course summary */ openCourseSummary(): void { - CoreNavigator.navigateToSitePath('/courses/preview', { params: { course: this.course, avoidOpenCourse: true } }); + CoreNavigator.navigateToSitePath( + '/course/' + this.course.id + '/preview', + { params: { course: this.course, avoidOpenCourse: true } }, + ); } /** diff --git a/src/core/features/course/pages/index/index.module.ts b/src/core/features/course/pages/index/index.module.ts index 5cdcf4b04..b8a598869 100644 --- a/src/core/features/course/pages/index/index.module.ts +++ b/src/core/features/course/pages/index/index.module.ts @@ -17,7 +17,7 @@ import { RouterModule, ROUTES, Routes } from '@angular/router'; import { resolveModuleRoutes } from '@/app/app-routing.module'; import { CoreSharedModule } from '@/core/shared.module'; -import { CoreCourseIndexPage } from './index'; +import { CoreCourseIndexPage } from './index.page'; import { COURSE_INDEX_ROUTES } from './index-routing.module'; function buildRoutes(injector: Injector): Routes { diff --git a/src/core/features/course/pages/index/index.ts b/src/core/features/course/pages/index/index.page.ts similarity index 99% rename from src/core/features/course/pages/index/index.ts rename to src/core/features/course/pages/index/index.page.ts index 3ef58db7d..9a2eae993 100644 --- a/src/core/features/course/pages/index/index.ts +++ b/src/core/features/course/pages/index/index.page.ts @@ -123,7 +123,6 @@ export class CoreCourseIndexPage implements OnInit, OnDestroy { handlers.forEach((handler, index) => { handler.data.page = CoreTextUtils.concatenatePaths(this.currentPagePath, handler.data.page); handler.data.pageParams = handler.data.pageParams || {}; - handler.data.pageParams.courseId = this.course!.id; // Check if this handler should be the first selected tab. if (this.firstTabName && handler.name == this.firstTabName) { diff --git a/src/core/features/course/pages/list-mod-type/list-mod-type.module.ts b/src/core/features/course/pages/list-mod-type/list-mod-type.module.ts index 5070cacda..4102b1136 100644 --- a/src/core/features/course/pages/list-mod-type/list-mod-type.module.ts +++ b/src/core/features/course/pages/list-mod-type/list-mod-type.module.ts @@ -16,7 +16,7 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { CoreSharedModule } from '@/core/shared.module'; -import { CoreCourseListModTypePage } from './list-mod-type'; +import { CoreCourseListModTypePage } from './list-mod-type.page'; import { CoreCourseComponentsModule } from '@features/course/components/components.module'; const routes: Routes = [ diff --git a/src/core/features/course/pages/list-mod-type/list-mod-type.ts b/src/core/features/course/pages/list-mod-type/list-mod-type.page.ts similarity index 100% rename from src/core/features/course/pages/list-mod-type/list-mod-type.ts rename to src/core/features/course/pages/list-mod-type/list-mod-type.page.ts diff --git a/src/core/features/courses/pages/course-preview/course-preview.html b/src/core/features/course/pages/preview/preview.html similarity index 98% rename from src/core/features/courses/pages/course-preview/course-preview.html rename to src/core/features/course/pages/preview/preview.html index 2b6c3bcbf..d035d22a2 100644 --- a/src/core/features/courses/pages/course-preview/course-preview.html +++ b/src/core/features/course/pages/preview/preview.html @@ -13,8 +13,8 @@ -
-
+
+
diff --git a/src/core/features/courses/pages/course-preview/course-preview.module.ts b/src/core/features/course/pages/preview/preview.module.ts similarity index 75% rename from src/core/features/courses/pages/course-preview/course-preview.module.ts rename to src/core/features/course/pages/preview/preview.module.ts index d8e0a8879..168aed845 100644 --- a/src/core/features/courses/pages/course-preview/course-preview.module.ts +++ b/src/core/features/course/pages/preview/preview.module.ts @@ -16,13 +16,12 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { CoreSharedModule } from '@/core/shared.module'; -import { CoreCoursesCoursePreviewPage } from './course-preview'; -import { CoreCoursesComponentsModule } from '../../components/components.module'; +import { CoreCoursePreviewPage } from './preview.page'; const routes: Routes = [ { path: '', - component: CoreCoursesCoursePreviewPage, + component: CoreCoursePreviewPage, }, ]; @@ -30,11 +29,10 @@ const routes: Routes = [ imports: [ RouterModule.forChild(routes), CoreSharedModule, - CoreCoursesComponentsModule, ], declarations: [ - CoreCoursesCoursePreviewPage, + CoreCoursePreviewPage, ], exports: [RouterModule], }) -export class CoreCoursesCoursePreviewPageModule { } +export class CoreCoursePreviewPageModule { } diff --git a/src/core/features/courses/pages/course-preview/course-preview.ts b/src/core/features/course/pages/preview/preview.page.ts similarity index 97% rename from src/core/features/courses/pages/course-preview/course-preview.ts rename to src/core/features/course/pages/preview/preview.page.ts index 0b95eb3bc..ef7569fd2 100644 --- a/src/core/features/courses/pages/course-preview/course-preview.ts +++ b/src/core/features/course/pages/preview/preview.page.ts @@ -15,7 +15,7 @@ import { Component, OnDestroy, NgZone, OnInit } from '@angular/core'; import { ModalController, IonRefresher } from '@ionic/angular'; import { CoreApp } from '@services/app'; -import { CoreEventCourseStatusChanged, CoreEventObserver, CoreEvents } from '@singletons/events'; +import { CoreEventObserver, CoreEvents } from '@singletons/events'; import { CoreSites } from '@services/sites'; import { CoreDomUtils } from '@services/utils/dom'; import { CoreTextUtils } from '@services/utils/text'; @@ -32,18 +32,18 @@ import { CoreCourse, CoreCourseProvider } from '@features/course/services/course import { CoreCourseHelper, CorePrefetchStatusInfo } from '@features/course/services/course-helper'; import { Translate } from '@singletons'; import { CoreConstants } from '@/core/constants'; -import { CoreCoursesSelfEnrolPasswordComponent } from '../../components/self-enrol-password/self-enrol-password'; +import { CoreCoursesSelfEnrolPasswordComponent } from '../../../courses/components/self-enrol-password/self-enrol-password'; import { CoreNavigator } from '@services/navigator'; /** * Page that allows "previewing" a course and enrolling in it if enabled and not enrolled. */ @Component({ - selector: 'page-core-courses-course-preview', - templateUrl: 'course-preview.html', - styleUrls: ['course-preview.scss'], + selector: 'page-core-course-preview', + templateUrl: 'preview.html', + styleUrls: ['preview.scss'], }) -export class CoreCoursesCoursePreviewPage implements OnInit, OnDestroy { +export class CoreCoursePreviewPage implements OnInit, OnDestroy { course?: CoreCourseSearchedData; isEnrolled = false; @@ -84,7 +84,7 @@ export class CoreCoursesCoursePreviewPage implements OnInit, OnDestroy { if (this.downloadCourseEnabled) { // Listen for status change in course. - this.courseStatusObserver = CoreEvents.on(CoreEvents.COURSE_STATUS_CHANGED, (data: CoreEventCourseStatusChanged) => { + this.courseStatusObserver = CoreEvents.on(CoreEvents.COURSE_STATUS_CHANGED, (data) => { if (data.courseId == this.course!.id || data.courseId == CoreCourseProvider.ALL_COURSES_CLEARED) { this.updateCourseStatus(data.status); } diff --git a/src/core/features/courses/pages/course-preview/course-preview.scss b/src/core/features/course/pages/preview/preview.scss similarity index 100% rename from src/core/features/courses/pages/course-preview/course-preview.scss rename to src/core/features/course/pages/preview/preview.scss diff --git a/src/core/features/course/pages/unsupported-module/unsupported-module.module.ts b/src/core/features/course/pages/unsupported-module/unsupported-module.module.ts index 82a9e5afd..596d96650 100644 --- a/src/core/features/course/pages/unsupported-module/unsupported-module.module.ts +++ b/src/core/features/course/pages/unsupported-module/unsupported-module.module.ts @@ -16,7 +16,7 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { CoreSharedModule } from '@/core/shared.module'; -import { CoreCourseUnsupportedModulePage } from './unsupported-module'; +import { CoreCourseUnsupportedModulePage } from './unsupported-module.page'; import { CoreCourseComponentsModule } from '@features/course/components/components.module'; const routes: Routes = [ diff --git a/src/core/features/course/pages/unsupported-module/unsupported-module.ts b/src/core/features/course/pages/unsupported-module/unsupported-module.page.ts similarity index 100% rename from src/core/features/course/pages/unsupported-module/unsupported-module.ts rename to src/core/features/course/pages/unsupported-module/unsupported-module.page.ts diff --git a/src/core/features/course/services/course-helper.ts b/src/core/features/course/services/course-helper.ts index 88d7bbb4b..2fbc9701f 100644 --- a/src/core/features/course/services/course-helper.ts +++ b/src/core/features/course/services/course-helper.ts @@ -1848,7 +1848,7 @@ export class CoreCourseHelperProvider { params = params || {}; Object.assign(params, { course: course }); - await CoreNavigator.navigateToSitePath('course', { siteId, params }); + await CoreNavigator.navigateToSitePath('course/' + course.id, { siteId, params }); } } diff --git a/src/core/features/course/services/handlers/default-format.ts b/src/core/features/course/services/handlers/default-format.ts index 35c02270e..d0e800932 100644 --- a/src/core/features/course/services/handlers/default-format.ts +++ b/src/core/features/course/services/handlers/default-format.ts @@ -177,7 +177,7 @@ export class CoreCourseFormatDefaultHandler implements CoreCourseFormatHandler { Object.assign(params, { course: course }); // Don't return the .push promise, we don't want to display a loading modal during the page transition. - CoreNavigator.navigateToSitePath('course', { params }); + CoreNavigator.navigateToSitePath('course/' + course.id, { params }); } /** diff --git a/src/core/features/course/services/handlers/default-module.ts b/src/core/features/course/services/handlers/default-module.ts index 483c3cb5c..052878766 100644 --- a/src/core/features/course/services/handlers/default-module.ts +++ b/src/core/features/course/services/handlers/default-module.ts @@ -64,9 +64,9 @@ export class CoreCourseModuleDefaultHandler implements CoreCourseModuleHandler { event.stopPropagation(); options = options || {}; - options.params = { module, courseId }; + options.params = { module }; - CoreNavigator.navigateToSitePath('course/unsupported-module', options); + CoreNavigator.navigateToSitePath('course/' + courseId + '/unsupported-module', options); }, }; diff --git a/src/core/features/courses/components/course-list-item/course-list-item.ts b/src/core/features/courses/components/course-list-item/course-list-item.ts index c3d92b871..5f3ef4cb7 100644 --- a/src/core/features/courses/components/course-list-item/course-list-item.ts +++ b/src/core/features/courses/components/course-list-item/course-list-item.ts @@ -94,7 +94,10 @@ export class CoreCoursesCourseListItemComponent implements OnInit { if (this.isEnrolled) { CoreCourseHelper.openCourse(this.course); } else { - CoreNavigator.navigate('courses/preview', { params: { course: this.course } }); + CoreNavigator.navigate( + '/course/' + this.course.id + '/preview', + { params: { course: this.course } }, + ); } } diff --git a/src/core/features/courses/courses-lazy.module.ts b/src/core/features/courses/courses-lazy.module.ts index 09095bed1..0fa55f3fb 100644 --- a/src/core/features/courses/courses-lazy.module.ts +++ b/src/core/features/courses/courses-lazy.module.ts @@ -50,12 +50,6 @@ const routes: Routes = [ import('./pages/my-courses/my-courses.module') .then(m => m.CoreCoursesMyCoursesPageModule), }, - { - path: 'preview', - loadChildren: () => - import('./pages/course-preview/course-preview.module') - .then(m => m.CoreCoursesCoursePreviewPageModule), - }, ]; @NgModule({ diff --git a/src/core/features/courses/services/handlers/enrol-push-click.ts b/src/core/features/courses/services/handlers/enrol-push-click.ts index 0731e2463..c606d3384 100644 --- a/src/core/features/courses/services/handlers/enrol-push-click.ts +++ b/src/core/features/courses/services/handlers/enrol-push-click.ts @@ -59,18 +59,14 @@ export class CoreCoursesEnrolPushClickHandlerService implements CorePushNotifica const params: Params = { course: result.course, }; - let page: string; + let page = 'course/' + courseId; if (notification.contexturl?.indexOf('user/index.php') != -1) { // Open the participants tab. - page = 'course'; - params.selectedTab = 'user_participants'; // @todo: Set this when participants is done. - } else if (result.enrolled) { - // User is still enrolled, open the course. - page = 'course'; - } else { + params.selectedTab = 'participants'; // @todo: Set this when participants is done. + } else if (!result.enrolled) { // User not enrolled anymore, open the preview page. - page = 'courses/preview';; + page += '/preview'; } await CoreNavigator.navigateToSitePath(page, { params, siteId: notification.site }); diff --git a/src/core/features/courses/services/handlers/request-push-click.ts b/src/core/features/courses/services/handlers/request-push-click.ts index e361fc0ee..92fdea4fc 100644 --- a/src/core/features/courses/services/handlers/request-push-click.ts +++ b/src/core/features/courses/services/handlers/request-push-click.ts @@ -75,14 +75,11 @@ export class CoreCoursesRequestPushClickHandlerService implements CorePushNotifi const params: Params = { course: result.course, }; - let page: string; + let page = 'course/' + courseId; - if (result.enrolled) { - // User is still enrolled, open the course. - page = 'course'; - } else { + if (!result.enrolled) { // User not enrolled (shouldn't happen), open the preview page. - page = 'courses/preview'; + page += '/preview'; } await CoreNavigator.navigateToSitePath(page, { params, siteId: notification.site }); diff --git a/src/core/features/grades/grades-lazy.module.ts b/src/core/features/grades/grades-lazy.module.ts index f97dfa538..64d960301 100644 --- a/src/core/features/grades/grades-lazy.module.ts +++ b/src/core/features/grades/grades-lazy.module.ts @@ -21,8 +21,8 @@ import { CoreSharedModule } from '@/core/shared.module'; import { CoreGradesCoursePage } from './pages/course/course.page'; import { CoreGradesCoursePageModule } from './pages/course/course.module'; -import { CoreGradesCoursesPage } from './pages/courses/courses'; -import { CoreGradesGradePage } from './pages/grade/grade'; +import { CoreGradesCoursesPage } from './pages/courses/courses.page'; +import { CoreGradesGradePage } from './pages/grade/grade.page'; const mobileRoutes: Routes = [ { diff --git a/src/core/features/grades/pages/courses/courses.ts b/src/core/features/grades/pages/courses/courses.page.ts similarity index 84% rename from src/core/features/grades/pages/courses/courses.ts rename to src/core/features/grades/pages/courses/courses.page.ts index df98d2033..603253f58 100644 --- a/src/core/features/grades/pages/courses/courses.ts +++ b/src/core/features/grades/pages/courses/courses.page.ts @@ -16,10 +16,11 @@ import { AfterViewInit, Component, OnDestroy, ViewChild } from '@angular/core'; import { ActivatedRouteSnapshot } from '@angular/router'; import { CorePageItemsListManager } from '@classes/page-items-list-manager'; -import { CoreSplitViewComponent } from '@components/split-view/split-view'; +import { CoreSplitViewComponent, CoreSplitViewMode } from '@components/split-view/split-view'; import { CoreGrades } from '@features/grades/services/grades'; import { CoreGradesGradeOverviewWithCourseData, CoreGradesHelper } from '@features/grades/services/grades-helper'; import { IonRefresher } from '@ionic/angular'; +import { CoreNavigator } from '@services/navigator'; import { CoreDomUtils } from '@services/utils/dom'; import { CoreUtils } from '@services/utils/utils'; @@ -33,13 +34,27 @@ import { CoreUtils } from '@services/utils/utils'; export class CoreGradesCoursesPage implements OnDestroy, AfterViewInit { courses: CoreGradesCoursesManager = new CoreGradesCoursesManager(CoreGradesCoursesPage); + splitViewMode?: CoreSplitViewMode; @ViewChild(CoreSplitViewComponent) splitView!: CoreSplitViewComponent; + constructor() { + const userId = CoreNavigator.getRouteNumberParam('userId'); + const courseId = CoreNavigator.getRouteNumberParam('courseId'); + + // If courseId and userId is set, show only the content page. + this.splitViewMode = courseId && userId ? undefined : CoreSplitViewMode.ContentOnly; + } + /** * @inheritdoc */ async ngAfterViewInit(): Promise { + if (this.splitViewMode) { + // Won't be shown, do nothing. + return; + } + await this.fetchInitialCourses(); this.courses.start(this.splitView); diff --git a/src/core/features/grades/pages/grade/grade.html b/src/core/features/grades/pages/grade/grade.html index 3e9993a8a..db2e2ee0e 100644 --- a/src/core/features/grades/pages/grade/grade.html +++ b/src/core/features/grades/pages/grade/grade.html @@ -11,7 +11,7 @@ - +