Skip to content

Commit e4392f1

Browse files
committed
MOBILE-1576 quiz: Unblock quiz if JS exception is thrown
1 parent b24e3e4 commit e4392f1

File tree

3 files changed

+32
-19
lines changed

3 files changed

+32
-19
lines changed

www/addons/mod_quiz/lang/en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"errorrulesnotsupported": "This quiz can't be attempted in the app because it has active rules not supported by the app:",
2424
"errorsaveattempt": "An error occurred while saving the attempt data.",
2525
"errorsyncquiz": "An error occurred while synchronizing. Please try again.",
26+
"errorsyncquizblocked": "This quiz cannot be synchronized right now because there's an ongoing operation. Please try again later. If the problem persists, please restart the app.",
2627
"feedback": "Feedback",
2728
"finishattemptdots": "Finish attempt...",
2829
"finishnotsynced": "Finished but not synchronized",

www/addons/mod_quiz/services/quiz.js

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2078,17 +2078,23 @@ angular.module('mm.addons.mod_quiz')
20782078
self.processAttempt = function(quiz, attempt, data, preflightData, finish, timeup, offline, siteId) {
20792079
var promise;
20802080

2081-
self.blockQuiz(siteId, quiz.id); // Block quiz so it cannot be synced.
2081+
try {
2082+
self.blockQuiz(siteId, quiz.id); // Block quiz so it cannot be synced.
20822083

2083-
if (offline) {
2084-
promise = processOfflineAttempt(quiz, attempt, data, preflightData, finish, siteId);
2085-
} else {
2086-
promise = $mmaModQuizOnline.processAttempt(attempt.id, data, preflightData, finish, timeup, siteId);
2087-
}
2084+
if (offline) {
2085+
promise = processOfflineAttempt(quiz, attempt, data, preflightData, finish, siteId);
2086+
} else {
2087+
promise = $mmaModQuizOnline.processAttempt(attempt.id, data, preflightData, finish, timeup, siteId);
2088+
}
20882089

2089-
return promise.finally(function() {
2090+
return promise.finally(function() {
2091+
self.unblockQuiz(siteId, quiz.id);
2092+
});
2093+
} catch(ex) {
20902094
self.unblockQuiz(siteId, quiz.id);
2091-
});
2095+
console.error(ex);
2096+
return $q.reject();
2097+
}
20922098
};
20932099

20942100
/**
@@ -2180,17 +2186,23 @@ angular.module('mm.addons.mod_quiz')
21802186
self.saveAttempt = function(quiz, attempt, data, preflightData, offline, siteId) {
21812187
var promise;
21822188

2183-
self.blockQuiz(siteId, quiz.id); // Block quiz so it cannot be synced.
2189+
try {
2190+
self.blockQuiz(siteId, quiz.id); // Block quiz so it cannot be synced.
21842191

2185-
if (offline) {
2186-
promise = processOfflineAttempt(quiz, attempt, data, preflightData, false, siteId);
2187-
} else {
2188-
promise = $mmaModQuizOnline.saveAttempt(attempt.id, data, preflightData, siteId);
2189-
}
2192+
if (offline) {
2193+
promise = processOfflineAttempt(quiz, attempt, data, preflightData, false, siteId);
2194+
} else {
2195+
promise = $mmaModQuizOnline.saveAttempt(attempt.id, data, preflightData, siteId);
2196+
}
21902197

2191-
return promise.finally(function() {
2198+
return promise.finally(function() {
2199+
self.unblockQuiz(siteId, quiz.id);
2200+
});
2201+
} catch(ex) {
21922202
self.unblockQuiz(siteId, quiz.id);
2193-
});
2203+
console.error(ex);
2204+
return $q.reject();
2205+
}
21942206
};
21952207

21962208
/**

www/addons/mod_quiz/services/quiz_sync.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ angular.module('mm.addons.mod_quiz')
4040
* @ngdoc service
4141
* @name $mmaModQuizSync
4242
*/
43-
.factory('$mmaModQuizSync', function($log, $mmaModQuiz, $mmSite, $mmSitesManager, $q, $mmaModQuizOffline, $mmQuestion,
43+
.factory('$mmaModQuizSync', function($log, $mmaModQuiz, $mmSite, $mmSitesManager, $q, $mmaModQuizOffline, $mmQuestion, $mmLang,
4444
$mmQuestionDelegate, $mmApp, $mmConfig, $mmEvents, $translate, mmaModQuizSynchronizationStore, mmaModQuizSyncTime,
4545
mmaModQuizEventAutomSynced, mmCoreSettingsSyncOnlyOnWifi, mmaModQuizSynchronizationWarningsStore) {
4646

@@ -75,7 +75,7 @@ angular.module('mm.addons.mod_quiz')
7575
*
7676
* @module mm.addons.mod_quiz
7777
* @ngdoc method
78-
* @name $mmaModQuizSync#getQuizSyncTime
78+
* @name $mmaModQuizSync#getQuizSyncWarnings
7979
* @param {Number} quizId Quiz ID.
8080
* @param {String} [siteId] Site ID. If not defined, current site.
8181
* @return {Promise} Promise resolved with the time.
@@ -290,7 +290,7 @@ angular.module('mm.addons.mod_quiz')
290290
// Verify that quiz isn't blocked.
291291
if ($mmaModQuiz.isQuizBlocked(siteId, quiz.id)) {
292292
$log.debug('Cannot sync quiz ' + quiz.id + ' because it is blocked.');
293-
return $q.reject();
293+
return $mmLang.translateAndReject('mma.mod_quiz.errorsyncquizblocked');
294294
}
295295

296296
$log.debug('Try to sync quiz ' + quiz.id + ' in site ' + siteId);

0 commit comments

Comments
 (0)