MOBILE-3833 completion: Remove course name from completion objects
This commit is contained in:
		
							parent
							
								
									49a1d1d806
								
							
						
					
					
						commit
						5794b66cd9
					
				@ -256,7 +256,10 @@ export class CoreCourseContentsPage implements OnInit, OnDestroy {
 | 
			
		||||
        if (sync) {
 | 
			
		||||
            // Try to synchronize the course data.
 | 
			
		||||
            // For now we don't allow manual syncing, so ignore errors.
 | 
			
		||||
            const result = await CoreUtils.ignoreErrors(CoreCourseSync.syncCourse(this.course.id));
 | 
			
		||||
            const result = await CoreUtils.ignoreErrors(CoreCourseSync.syncCourse(
 | 
			
		||||
                this.course.id,
 | 
			
		||||
                this.course.displayname || this.course.fullname,
 | 
			
		||||
            ));
 | 
			
		||||
            if (result?.warnings?.length) {
 | 
			
		||||
                CoreDomUtils.showErrorModal(result.warnings[0]);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -164,7 +164,7 @@ export class CoreCourseHelperProvider {
 | 
			
		||||
     * @param sections List of sections to treat modules.
 | 
			
		||||
     * @param courseId Course ID of the modules.
 | 
			
		||||
     * @param completionStatus List of completion status.
 | 
			
		||||
     * @param courseName Course name. Recommended if completionStatus is supplied.
 | 
			
		||||
     * @param courseName Not used since 4.0
 | 
			
		||||
     * @param forCoursePage Whether the data will be used to render the course page.
 | 
			
		||||
     * @return Whether the sections have content.
 | 
			
		||||
     */
 | 
			
		||||
@ -210,7 +210,6 @@ export class CoreCourseHelperProvider {
 | 
			
		||||
                        valueused: activityStatus.valueused,
 | 
			
		||||
                        tracking: activityStatus.tracking,
 | 
			
		||||
                        courseId,
 | 
			
		||||
                        courseName,
 | 
			
		||||
                        cmid: module.id,
 | 
			
		||||
                    };
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
@ -81,7 +81,7 @@ export class CoreCourseOfflineProvider {
 | 
			
		||||
     * @param cmId The module ID to store the completion.
 | 
			
		||||
     * @param completed Whether the module is completed or not.
 | 
			
		||||
     * @param courseId Course ID the module belongs to.
 | 
			
		||||
     * @param courseName Course name. Recommended, it is used to display a better warning message.
 | 
			
		||||
     * @param courseName Not used since 4.0.
 | 
			
		||||
     * @param siteId Site ID. If not defined, current site.
 | 
			
		||||
     * @return Promise resolved when completion is successfully stored.
 | 
			
		||||
     */
 | 
			
		||||
@ -99,7 +99,6 @@ export class CoreCourseOfflineProvider {
 | 
			
		||||
            cmid: cmId,
 | 
			
		||||
            completed: completed ? 1 : 0,
 | 
			
		||||
            courseid: courseId,
 | 
			
		||||
            coursename: courseName || '',
 | 
			
		||||
            timecompleted: Date.now(),
 | 
			
		||||
        };
 | 
			
		||||
        await site.getDb().insertRecord(MANUAL_COMPLETION_TABLE, entry);
 | 
			
		||||
 | 
			
		||||
@ -1041,7 +1041,7 @@ export class CoreCourseProvider {
 | 
			
		||||
     * @param cmId The module ID.
 | 
			
		||||
     * @param completed Whether the module is completed or not.
 | 
			
		||||
     * @param courseId Course ID the module belongs to.
 | 
			
		||||
     * @param courseName Course name. Recommended, it is used to display a better warning message.
 | 
			
		||||
     * @param courseName Not used since 4.0.
 | 
			
		||||
     * @param siteId Site ID. If not defined, current site.
 | 
			
		||||
     * @return Promise resolved when completion is successfully sent or stored.
 | 
			
		||||
     */
 | 
			
		||||
@ -1057,7 +1057,7 @@ export class CoreCourseProvider {
 | 
			
		||||
 | 
			
		||||
        // Convenience function to store a completion to be synchronized later.
 | 
			
		||||
        const storeOffline = (): Promise<CoreStatusWithWarningsWSResponse> =>
 | 
			
		||||
            CoreCourseOffline.markCompletedManually(cmId, completed, courseId, courseName, siteId);
 | 
			
		||||
            CoreCourseOffline.markCompletedManually(cmId, completed, courseId, undefined, siteId);
 | 
			
		||||
 | 
			
		||||
        // The offline function requires a courseId and it could be missing because it's a calculated field.
 | 
			
		||||
        if (!CoreApp.isOnline()) {
 | 
			
		||||
 | 
			
		||||
@ -81,7 +81,7 @@ export const OFFLINE_SITE_SCHEMA: CoreSiteSchema = {
 | 
			
		||||
                    type: 'INTEGER',
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    name: 'coursename',
 | 
			
		||||
                    name: 'coursename', // Not used  since 4.0 it can be safely removed.
 | 
			
		||||
                    type: 'TEXT',
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
@ -106,6 +106,5 @@ export type CoreCourseManualCompletionDBRecord = {
 | 
			
		||||
    cmid: number;
 | 
			
		||||
    completed: number;
 | 
			
		||||
    courseid: number;
 | 
			
		||||
    coursename: string;
 | 
			
		||||
    timecompleted: number;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -28,6 +28,7 @@ import { CoreCourseManualCompletionDBRecord } from './database/course';
 | 
			
		||||
import { CoreNetworkError } from '@classes/errors/network-error';
 | 
			
		||||
import { makeSingleton, Translate } from '@singletons';
 | 
			
		||||
import { CoreEvents } from '@singletons/events';
 | 
			
		||||
import { CoreCourses } from '@features/courses/services/courses';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Service to sync course offline data. This only syncs the offline data of the course itself, not the offline data of
 | 
			
		||||
@ -77,10 +78,18 @@ export class CoreCourseSyncProvider extends CoreSyncBaseProvider<CoreCourseSyncR
 | 
			
		||||
    protected async syncCoursesCompletion(siteId: string, force: boolean): Promise<void> {
 | 
			
		||||
        const completions = await CoreCourseOffline.getAllManualCompletions(siteId);
 | 
			
		||||
 | 
			
		||||
        const courseNames: Record<number, string | undefined> = {};
 | 
			
		||||
 | 
			
		||||
        // Sync all courses.
 | 
			
		||||
        await Promise.all(completions.map(async (completion) => {
 | 
			
		||||
            const result = await (force ? this.syncCourse(completion.courseid, siteId) :
 | 
			
		||||
                this.syncCourseIfNeeded(completion.courseid, siteId));
 | 
			
		||||
            if (courseNames[completion.courseid] === undefined) {
 | 
			
		||||
                const course = await CoreUtils.ignoreErrors(CoreCourses.getUserCourse(completion.courseid, true, siteId));
 | 
			
		||||
 | 
			
		||||
                courseNames[completion.courseid] = course?.displayname || course?.fullname;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            const result = await (force ? this.syncCourse(completion.courseid, courseNames[completion.courseid], siteId) :
 | 
			
		||||
                this.syncCourseIfNeeded(completion.courseid, courseNames[completion.courseid], siteId));
 | 
			
		||||
 | 
			
		||||
            if (!result || !result.updated) {
 | 
			
		||||
                return;
 | 
			
		||||
@ -98,23 +107,25 @@ export class CoreCourseSyncProvider extends CoreSyncBaseProvider<CoreCourseSyncR
 | 
			
		||||
     * Sync a course if it's needed.
 | 
			
		||||
     *
 | 
			
		||||
     * @param courseId Course ID to be synced.
 | 
			
		||||
     * @param courseName Course Name to be synced.
 | 
			
		||||
     * @param siteId Site ID. If not defined, current site.
 | 
			
		||||
     * @return Promise resolved when the course is synced or it doesn't need to be synced.
 | 
			
		||||
     */
 | 
			
		||||
    syncCourseIfNeeded(courseId: number, siteId?: string): Promise<CoreCourseSyncResult> {
 | 
			
		||||
    syncCourseIfNeeded(courseId: number, courseName?: string, siteId?: string): Promise<CoreCourseSyncResult> {
 | 
			
		||||
        // Usually we call isSyncNeeded to check if a certain time has passed.
 | 
			
		||||
        // However, since we barely send data for now just sync the course.
 | 
			
		||||
        return this.syncCourse(courseId, siteId);
 | 
			
		||||
        return this.syncCourse(courseId, courseName, siteId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Synchronize a course.
 | 
			
		||||
     *
 | 
			
		||||
     * @param courseId Course ID to be synced.
 | 
			
		||||
     * @param courseName Course Name to be synced.
 | 
			
		||||
     * @param siteId Site ID. If not defined, current site.
 | 
			
		||||
     * @return Promise resolved if sync is successful, rejected otherwise.
 | 
			
		||||
     */
 | 
			
		||||
    async syncCourse(courseId: number, siteId?: string): Promise<CoreCourseSyncResult> {
 | 
			
		||||
    async syncCourse(courseId: number, courseName?: string, siteId?: string): Promise<CoreCourseSyncResult> {
 | 
			
		||||
        siteId = siteId || CoreSites.getCurrentSiteId();
 | 
			
		||||
 | 
			
		||||
        const currentSyncPromise = this.getOngoingSync(courseId, siteId);
 | 
			
		||||
@ -125,17 +136,18 @@ export class CoreCourseSyncProvider extends CoreSyncBaseProvider<CoreCourseSyncR
 | 
			
		||||
 | 
			
		||||
        this.logger.debug(`Try to sync course '${courseId}'`);
 | 
			
		||||
 | 
			
		||||
        return this.addOngoingSync(courseId, this.syncCourseCompletion(courseId, siteId), siteId);
 | 
			
		||||
        return this.addOngoingSync(courseId, this.syncCourseCompletion(courseId, courseName, siteId), siteId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sync course offline completion.
 | 
			
		||||
     *
 | 
			
		||||
     * @param courseId Course ID to be synced.
 | 
			
		||||
     * @param courseName Course Name to be synced.
 | 
			
		||||
     * @param siteId Site ID. If not defined, current site.
 | 
			
		||||
     * @return Promise resolved if sync is successful, rejected otherwise.
 | 
			
		||||
     */
 | 
			
		||||
    protected async syncCourseCompletion(courseId: number, siteId?: string): Promise<CoreCourseSyncResult> {
 | 
			
		||||
    protected async syncCourseCompletion(courseId: number, courseName?: string, siteId?: string): Promise<CoreCourseSyncResult> {
 | 
			
		||||
        const result: CoreCourseSyncResult = {
 | 
			
		||||
            warnings: [],
 | 
			
		||||
            updated: false,
 | 
			
		||||
@ -182,7 +194,7 @@ export class CoreCourseSyncProvider extends CoreSyncBaseProvider<CoreCourseSyncR
 | 
			
		||||
                // Completion deleted, add a warning if the completion status doesn't match.
 | 
			
		||||
                if (onlineComp.state != entry.completed) {
 | 
			
		||||
                    result.warnings.push(Translate.instant('core.course.warningofflinemanualcompletiondeleted', {
 | 
			
		||||
                        name: entry.coursename || courseId,
 | 
			
		||||
                        name: courseName || courseId,
 | 
			
		||||
                        error: Translate.instant('core.course.warningmanualcompletionmodified'),
 | 
			
		||||
                    }));
 | 
			
		||||
                }
 | 
			
		||||
@ -209,7 +221,7 @@ export class CoreCourseSyncProvider extends CoreSyncBaseProvider<CoreCourseSyncR
 | 
			
		||||
 | 
			
		||||
                // Completion deleted, add a warning.
 | 
			
		||||
                result.warnings.push(Translate.instant('core.course.warningofflinemanualcompletiondeleted', {
 | 
			
		||||
                    name: entry.coursename || courseId,
 | 
			
		||||
                    name: courseName || courseId,
 | 
			
		||||
                    error: CoreTextUtils.getErrorMessageFromError(error),
 | 
			
		||||
                }));
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user