From c255feeeefa3077439721535a32f8130c12efd07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Tue, 17 Dec 2019 17:07:40 +0100 Subject: [PATCH] MOBILE-3213 assign: Discard grade drafts after successful sync --- src/addon/mod/assign/providers/assign-sync.ts | 38 ++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/src/addon/mod/assign/providers/assign-sync.ts b/src/addon/mod/assign/providers/assign-sync.ts index 41b43f74e..8b5bcfbb1 100644 --- a/src/addon/mod/assign/providers/assign-sync.ts +++ b/src/addon/mod/assign/providers/assign-sync.ts @@ -29,6 +29,7 @@ import { CoreSyncBaseProvider } from '@classes/base-sync'; import { AddonModAssignProvider, AddonModAssignAssign } from './assign'; import { AddonModAssignOfflineProvider } from './assign-offline'; import { AddonModAssignSubmissionDelegate } from './submission-delegate'; +import { AddonModAssignFeedbackDelegate } from './feedback-delegate'; /** * Data returned by an assign sync. @@ -55,13 +56,22 @@ export class AddonModAssignSyncProvider extends CoreSyncBaseProvider { protected componentTranslate: string; - constructor(loggerProvider: CoreLoggerProvider, sitesProvider: CoreSitesProvider, appProvider: CoreAppProvider, - syncProvider: CoreSyncProvider, textUtils: CoreTextUtilsProvider, translate: TranslateService, - private courseProvider: CoreCourseProvider, private eventsProvider: CoreEventsProvider, - private assignProvider: AddonModAssignProvider, private assignOfflineProvider: AddonModAssignOfflineProvider, - private utils: CoreUtilsProvider, private submissionDelegate: AddonModAssignSubmissionDelegate, - private gradesHelper: CoreGradesHelperProvider, timeUtils: CoreTimeUtilsProvider, - private logHelper: CoreCourseLogHelperProvider) { + constructor(loggerProvider: CoreLoggerProvider, + sitesProvider: CoreSitesProvider, + appProvider: CoreAppProvider, + syncProvider: CoreSyncProvider, + textUtils: CoreTextUtilsProvider, + translate: TranslateService, + timeUtils: CoreTimeUtilsProvider, + protected courseProvider: CoreCourseProvider, + protected eventsProvider: CoreEventsProvider, + protected assignProvider: AddonModAssignProvider, + protected assignOfflineProvider: AddonModAssignOfflineProvider, + protected utils: CoreUtilsProvider, + protected submissionDelegate: AddonModAssignSubmissionDelegate, + protected feedbackDelegate: AddonModAssignFeedbackDelegate, + protected gradesHelper: CoreGradesHelperProvider, + protected logHelper: CoreCourseLogHelperProvider) { super('AddonModAssignSyncProvider', loggerProvider, sitesProvider, appProvider, syncProvider, textUtils, translate, timeUtils); @@ -403,9 +413,19 @@ export class AddonModAssignSyncProvider extends CoreSyncBaseProvider { return this.assignProvider.submitGradingFormOnline(assign.id, userId, offlineData.grade, offlineData.attemptnumber, offlineData.addattempt, offlineData.workflowstate, offlineData.applytoall, offlineData.outcomes, offlineData.plugindata, siteId).then(() => { + // Grades sent. + // Discard grades drafts. + const promises = []; + if (status.feedback && status.feedback.plugins) { + status.feedback.plugins.forEach((plugin) => { + promises.push(this.feedbackDelegate.discardPluginFeedbackData(assign.id, userId, plugin, siteId)); + }); + } - // Grades sent, update cached data. No need to block the user for this. - this.assignProvider.getSubmissionStatus(assign.id, userId, undefined, false, true, true, siteId); + // Update cached data. + promises.push(this.assignProvider.getSubmissionStatus(assign.id, userId, undefined, false, true, true, siteId)); + + return Promise.all(promises); }).catch((error) => { if (error && this.utils.isWebServiceError(error)) { // The WebService has thrown an error, this means it cannot be submitted. Discard the offline data.