Skip to content

Commit e5ef453

Browse files
authored
Merge pull request #1049 from crazyserver/MOBILE-2103
Mobile 2103
2 parents e892c97 + bee6cf3 commit e5ef453

File tree

8 files changed

+52
-33
lines changed

8 files changed

+52
-33
lines changed

upgrade.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ information provided here is intended especially for developers.
1515
* The function $mmUtil#getMimeType has been deprecated. Please use $mmUtil#getMimeTypeFromUrl instead.
1616
* The functions $mmFilepool#invalidateAllFiles and $mmFilepool#invalidateFilesByComponent now accept a new param onlyUnknown which defaults to true, so it only invalidates some of the files. It is advised to use onlyUnknown=true to decrease the network usage and improve the app's performance.
1717
* The directive mm-loading no longer accepts the param loadingPaddingTop since now the spinner is centered vertically.
18+
* Assignment feedback delegates hasDataChanged now accepts userId in order to manage offline data.
1819

1920
=== 3.2.1 ===
2021

www/addons/mod/assign/controllers/feedbackedit.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ angular.module('mm.addons.mod_assign')
5353

5454
// Check if data has changed.
5555
function hasDataChanged() {
56-
return $mmaModAssignFeedbackDelegate.hasPluginDataChanged($scope.assign, $scope.plugin, getInputData()).catch(function() {
56+
return $mmaModAssignFeedbackDelegate.hasPluginDataChanged($scope.assign, $scope.userId, $scope.plugin, getInputData()).catch(function() {
5757
// Ignore errors.
5858
return true;
5959
});

www/addons/mod/assign/directives/submission.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -233,12 +233,8 @@ angular.module('mm.addons.mod_assign')
233233

234234
if (!scope.feedback || !scope.feedback.plugins) {
235235
scope.feedback = {};
236-
237236
// Feedback plugins not present, we have to use assign configs to detect the plugins used.
238237
scope.feedback.plugins = $mmaModAssignHelper.getPluginsEnabled(assign, 'assignfeedback');
239-
console.error(assign, scope.feedback.plugins);
240-
} else {
241-
console.error(scope.feedback);
242238
}
243239

244240
// Check if there's any offline data for this submission.
@@ -254,17 +250,21 @@ angular.module('mm.addons.mod_assign')
254250
scope.grade.grade = data.grade;
255251
scope.gradingStatusTranslationId = 'mma.mod_assign.gradenotsynced';
256252
scope.gradingClass = "";
253+
originalGrades.grade = scope.grade.grade;
257254
}
258255

259256
scope.grade.applyToAll = data.applytoall;
260257
scope.grade.addAttempt = data.addattempt;
258+
originalGrades.applyToAll = scope.grade.applyToAll;
259+
originalGrades.addAttempt = scope.grade.addAttempt;
261260

262261
if (data.outcomes && Object.keys(data.outcomes).length) {
263262
angular.forEach(scope.gradeInfo.outcomes, function(outcome) {
264263
if (typeof data.outcomes[outcome.itemNumber] != "undefined") {
265264
// If outcome has been modified from gradebook, do not use offline.
266265
if (outcome.modified < data.timemodified) {
267266
outcome.selectedId = data.outcomes[outcome.itemNumber];
267+
originalGrades.outcomes[outcome.id] = outcome.selectedId;
268268
}
269269
}
270270
});
@@ -822,7 +822,7 @@ angular.module('mm.addons.mod_assign')
822822
}
823823

824824
if (scope.feedback && scope.feedback.plugins) {
825-
return $mmaModAssignHelper.hasFeedbackDraftData(scope.assign.id, submitId, scope.feedback).catch(function() {
825+
return $mmaModAssignHelper.hasFeedbackDataChanged(scope.assign, submitId, scope.feedback).catch(function() {
826826
// Error ocurred, omit error as not modified.
827827
return $q.when(false);
828828
});

www/addons/mod/assign/feedback/comments/handlers.js

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ angular.module('mm.addons.mod_assign')
2121
* @ngdoc service
2222
* @name $mmaModAssignFeedbackCommentsHandler
2323
*/
24-
.factory('$mmaModAssignFeedbackCommentsHandler', function($mmText, $mmSite, $mmUtil) {
24+
.factory('$mmaModAssignFeedbackCommentsHandler', function($mmText, $mmSite, $mmUtil, $mmaModAssignOffline) {
2525

2626
var self = {},
2727
drafts = {};
@@ -97,15 +97,29 @@ angular.module('mm.addons.mod_assign')
9797
* @param {Object} assign Assignment.
9898
* @param {Object} plugin Plugin.
9999
* @param {Object} inputData Data entered in the feedback form.
100+
* @param {Number} userId User Id.
100101
* @return {Promise} Promise resolved with true if data has changed, resolved with false otherwise.
101102
*/
102-
self.hasDataChanged = function(assign, plugin, inputData) {
103-
// Check if text has changed.
104-
if (typeof plugin.originalText != 'undefined') {
105-
return plugin.originalText != inputData.assignfeedbackcomments_editor;
106-
} else {
107-
return false;
108-
}
103+
self.hasDataChanged = function(assign, plugin, inputData, userId) {
104+
// Get it from plugin or offline.
105+
return $mmaModAssignOffline.getSubmissionGrade(assign.id, userId).catch(function() {
106+
// No offline data found.
107+
}).then(function(data) {
108+
if (data && data.plugindata && data.plugindata.assignfeedbackcomments_editor) {
109+
return data.plugindata.assignfeedbackcomments_editor.text;
110+
}
111+
// No offline data found, get text from plugin.
112+
return plugin.originalText || "";
113+
}).then(function(initialText) {
114+
var text = getTextToSubmit(plugin, inputData);
115+
if (typeof text == "undefined") {
116+
return false;
117+
}
118+
text = text.text || text;
119+
120+
// Check if text has changed.
121+
return initialText != text;
122+
});
109123
};
110124

111125
/**

www/addons/mod/assign/services/feedbackdelegate.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,14 +118,15 @@ angular.module('mm.addons.mod_assign')
118118
* @ngdoc method
119119
* @name $mmaModAssignFeedbackDelegate#hasPluginDataChanged
120120
* @param {Object} assign Assignment.
121+
* @param {Number} userId User Id.
121122
* @param {Object} plugin Plugin.
122123
* @param {Object} inputData Data entered in the submission form.
123124
* @return {Promise} Promise resolved with true if data has changed, resolved with false otherwise.
124125
*/
125-
self.hasPluginDataChanged = function(assign, plugin, inputData) {
126+
self.hasPluginDataChanged = function(assign, userId, plugin, inputData) {
126127
var handler = self.getPluginHandler(plugin.type);
127128
if (handler && handler.hasDataChanged) {
128-
return $q.when(handler.hasDataChanged(assign, plugin, inputData));
129+
return $q.when(handler.hasDataChanged(assign, plugin, inputData, userId));
129130
}
130131
return $q.when(false);
131132
};
@@ -343,7 +344,7 @@ angular.module('mm.addons.mod_assign')
343344
* based in the draft data saved.
344345
* - getFeedbackDataToDraft(plugin, inputData) Optional.
345346
* Get feedback data base in the input data to save as draft.
346-
* - hasDataChanged(assign, plugin, inputData) (Promise|Boolean) Optional.
347+
* - hasDataChanged(assign, plugin, inputData, userId) (Promise|Boolean) Optional.
347348
* Check if the feedback data has changed for this plugin.
348349
* - getDraft(assignId, userId, siteId) (Object|Boolean) Optional.
349350
* Return the draft saved data of the feedback plugin.

www/addons/mod/assign/services/helper.js

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -271,34 +271,35 @@ angular.module('mm.addons.mod_assign')
271271
};
272272

273273
/**
274-
* Check if the feedback has draft data for a certain submission and assign.
274+
* Check if the feedback data has changed for a certain submission and assign.
275275
*
276276
* @module mm.addons.mod_assign
277277
* @ngdoc method
278-
* @name $mmaModAssignHelper#hasFeedbackDraftData
279-
* @param {Number} assignId Assignment Id.
278+
* @name $mmaModAssignHelper#hasFeedbackDataChanged
279+
* @param {Object} assign Assignment.
280280
* @param {Number} userId User Id.
281281
* @param {Object} feedback Feedback data.
282-
* @param {String} [siteId] Site ID. If not defined, current site.
283282
* @return {Promise} Promise resolved with true if data has changed, resolved with false otherwise.
284283
*/
285-
self.hasFeedbackDraftData = function(assignId, userId, feedback, siteId) {
286-
var hasDraft = false,
284+
self.hasFeedbackDataChanged = function(assign, userId, feedback) {
285+
var hasChanged = false,
287286
promises = [];
288287

289288
angular.forEach(feedback.plugins, function(plugin) {
290-
promises.push($mmaModAssignFeedbackDelegate.hasPluginDraftData(assignId, userId, plugin, siteId)
291-
.then(function(draft) {
292-
if (draft) {
293-
hasDraft = true;
294-
}
295-
}).catch(function() {
296-
// Ignore errors.
289+
promises.push(self.prepareFeedbackPluginData(assign.id, userId, feedback).then(function(inputData) {
290+
return $mmaModAssignFeedbackDelegate.hasPluginDataChanged(assign, userId, plugin, inputData)
291+
.then(function(changed) {
292+
if (changed) {
293+
hasChanged = true;
294+
}
295+
}).catch(function() {
296+
// Ignore errors.
297+
});
297298
}));
298299
});
299300

300301
return $mmUtil.allPromises(promises).then(function() {
301-
return hasDraft;
302+
return hasChanged;
302303
});
303304
};
304305

www/addons/mod/feedback/services/feedback.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -566,8 +566,10 @@ angular.module('mm.addons.mod_feedback')
566566
return self.getCurrentValues(feedbackId, offline, ignoreCache, siteId).then(function(valuesArray) {
567567
if (valuesArray.length == 0) {
568568
// Try sending empty values to get the last completed attempt values.
569-
return self.processPage(feedbackId, 0, {}).then(function() {
569+
return self.processPageOnline(feedbackId, 0, {}, undefined, siteId).then(function() {
570570
return self.getCurrentValues(feedbackId, offline, ignoreCache, siteId);
571+
}).catch(function() {
572+
// Ignore errors
571573
});
572574
}
573575
return valuesArray;

www/addons/mod/feedback/services/prefetch_handler.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ angular.module('mm.addons.mod_feedback')
237237

238238
if (accessData.cancomplete && accessData.cansubmit && !accessData.isempty) {
239239
// Send empty data, so it will recover last completed feedback attempt values.
240-
p2.push($mmaModFeedback.processPage(feedback.id, 0, {}, undefined, undefined, undefined, siteId).finally(function() {
240+
p2.push($mmaModFeedback.processPageOnline(feedback.id, 0, {}, undefined, siteId).finally(function() {
241241
var p4 = [];
242242

243243
p4.push($mmaModFeedback.getCurrentValues(feedback.id, false, true, siteId));

0 commit comments

Comments
 (0)