MOBILE-2969 quiz: Fix review attempt when it shouldn't

main
Dani Palou 2019-05-17 15:59:19 +02:00
parent 73f8b5a729
commit 072d6dde3e
3 changed files with 19 additions and 3 deletions

View File

@ -119,7 +119,12 @@ export class AddonModQuizAttemptPage implements OnInit {
accessInfo = quizAccessInfo;
if (accessInfo.canreviewmyattempts) {
return this.quizProvider.getAttemptReview(this.attemptId, -1).catch(() => {
// Check if the user can review the attempt.
return this.quizProvider.invalidateAttemptReviewForPage(this.attemptId, -1).catch(() => {
// Ignore errors.
}).then(() => {
return this.quizProvider.getAttemptReview(this.attemptId, -1);
}).catch(() => {
// Error getting the review, assume the user cannot review the attempt.
accessInfo.canreviewmyattempts = false;
});

View File

@ -403,7 +403,8 @@ export class AddonModQuizProvider {
page: page
},
preSets: CoreSiteWSPreSets = {
cacheKey: this.getAttemptReviewCacheKey(attemptId, page)
cacheKey: this.getAttemptReviewCacheKey(attemptId, page),
cacheErrors: ['noreview']
};
if (ignoreCache) {

View File

@ -124,6 +124,11 @@ export interface CoreSiteWSPreSets {
* Whether the request will be be sent immediately as a single request. Defaults to false.
*/
skipQueue?: boolean;
/**
* Cache the response if it returns an errorcode present in this list.
*/
cacheErrors?: string[];
}
/**
@ -713,6 +718,11 @@ export class CoreSite {
} else if (typeof preSets.emergencyCache !== 'undefined' && !preSets.emergencyCache) {
this.logger.debug(`WS call '${method}' failed. Emergency cache is forbidden, rejecting.`);
return Promise.reject(error);
} else if (preSets.cacheErrors && preSets.cacheErrors.indexOf(error.errorcode) != -1) {
// Save the error instead of deleting the cache entry so the same content is displayed in offline.
this.saveToCache(method, data, error, preSets);
return Promise.reject(error);
}
@ -735,7 +745,7 @@ export class CoreSite {
});
}).then((response) => {
// Check if the response is an error, this happens if the error was stored in the cache.
if (response && typeof response.exception !== 'undefined') {
if (response && (typeof response.exception != 'undefined' || typeof response.errorcode != 'undefined')) {
return Promise.reject(response);
}