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