Skip to content

Commit 98118f0

Browse files
authored
Merge pull request #588 from dpalou/MOBILE-1701
Mobile 1701
2 parents e2db79e + 01490ad commit 98118f0

File tree

35 files changed

+677
-259
lines changed

35 files changed

+677
-259
lines changed

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,7 @@ angular.module('mm.addons.mod_assign')
5151
return $q.reject($translate.instant('mm.core.nopermissions', {$a: editStr}));
5252
}
5353

54-
$scope.userSubmission = assign.teamsubmission ?
55-
response.lastattempt.teamsubmission : response.lastattempt.submission;
54+
$scope.userSubmission = $mmaModAssign.getSubmissionObjectFromAttempt(assign, response.lastattempt);
5655

5756
// Only show submission statement if we are editing our own submission.
5857
if (assign.requiresubmissionstatement && !assign.submissiondrafts && userId == $mmSite.getUserId()) {
@@ -138,7 +137,7 @@ angular.module('mm.addons.mod_assign')
138137
// Function called when user wants to leave view without saving.
139138
function leaveView() {
140139
// Check that we're leaving the current view, since the user can navigate to other views from here.
141-
if ($ionicHistory.currentView() !== currentView) {
140+
if ($ionicHistory.currentView() !== currentView || !$scope.userSubmission) {
142141
// It's another view.
143142
originalBackFunction();
144143
return;

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

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,7 @@ angular.module('mm.addons.mod_assign')
8383
submitId == $mmSite.getUserId();
8484
scope.showErrorStatementSubmit = submissionStatementMissing && assign.submissiondrafts;
8585

86-
scope.userSubmission = assign.teamsubmission ?
87-
response.lastattempt.teamsubmission : response.lastattempt.submission;
86+
scope.userSubmission = $mmaModAssign.getSubmissionObjectFromAttempt(assign, response.lastattempt);
8887

8988
if (assign.attemptreopenmethod != mmaModAssignAttemptReopenMethodNone) {
9089
if (scope.userSubmission) {
@@ -311,14 +310,19 @@ angular.module('mm.addons.mod_assign')
311310
controller: controller,
312311
templateUrl: 'addons/mod/assign/templates/submission.html',
313312
link: function(scope, element, attributes, controller) {
314-
scope.isGrading = !!attributes.submitid;
313+
var moduleId = parseInt(attributes.moduleid, 10),
314+
courseId = parseInt(attributes.courseid, 10),
315+
submitId = parseInt(attributes.submitid, 10),
316+
blindId = parseInt(attributes.blindid, 10);
317+
318+
scope.isGrading = !!submitId;
315319
scope.statusNew = mmaModAssignSubmissionStatusNew;
316320
scope.statusReopened = mmaModAssignSubmissionStatusReopened;
317321
scope.loaded = false;
318322
scope.submitModel = {};
319323

320324
var obsLoaded = scope.$on(mmaModAssignSubmissionInvalidatedEvent, function() {
321-
controller.load(scope, attributes.moduleid, attributes.courseid, attributes.submitid, attributes.blindid);
325+
controller.load(scope, moduleId, courseId, submitId, blindId);
322326
});
323327

324328
// Check if submit through app is supported.
@@ -328,15 +332,15 @@ angular.module('mm.addons.mod_assign')
328332

329333
scope.$on('$destroy', obsLoaded);
330334

331-
controller.load(scope, attributes.moduleid, attributes.courseid, attributes.submitid, attributes.blindid);
335+
controller.load(scope, moduleId, courseId, submitId, blindId);
332336

333337
// Add or edit submission.
334338
scope.goToEdit = function() {
335339
$state.go('site.mod_assign-submission-edit', {
336-
moduleid: attributes.moduleid,
337-
courseid: attributes.courseid,
338-
userid: attributes.submitid,
339-
blindid: attributes.blindid
340+
moduleid: moduleId,
341+
courseid: courseId,
342+
userid: submitId,
343+
blindid: blindId
340344
});
341345
};
342346

@@ -355,8 +359,7 @@ angular.module('mm.addons.mod_assign')
355359

356360
var modal = $mmUtil.showModalLoading(),
357361
previousAttempt = scope.previousAttempts[scope.previousAttempts.length - 1],
358-
previousSubmission = scope.assign.teamsubmission ?
359-
previousAttempt.teamsubmission : previousAttempt.submission;
362+
previousSubmission = $mmaModAssign.getSubmissionObjectFromAttempt(scope.assign, previousAttempt);
360363

361364
$mmaModAssignHelper.getSubmissionSizeForCopy(scope.assign, previousSubmission).catch(function() {
362365
// Error calculating size, return -1.
@@ -429,14 +432,14 @@ angular.module('mm.addons.mod_assign')
429432
function invalidateAndRefresh() {
430433
scope.loaded = false;
431434

432-
var promises = [$mmaModAssign.invalidateAssignmentData(attributes.courseid)];
435+
var promises = [$mmaModAssign.invalidateAssignmentData(courseId)];
433436
if (scope.assign) {
434437
promises.push($mmaModAssign.invalidateAllSubmissionData(scope.assign.id));
435438
promises.push($mmaModAssign.invalidateAssignmentUserMappingsData(scope.assign.id));
436439
}
437440

438441
$q.all(promises).finally(function() {
439-
controller.load(scope, attributes.moduleid, attributes.courseid, attributes.submitid, attributes.blindid);
442+
controller.load(scope, moduleId, courseId, submitId, blindId);
440443
});
441444
}
442445
}

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ angular.module('mm.addons.mod_assign')
2121
* @ngdoc service
2222
* @name $mmaModAssignFeedbackEditpdfHandler
2323
*/
24-
.factory('$mmaModAssignFeedbackEditpdfHandler', function() {
24+
.factory('$mmaModAssignFeedbackEditpdfHandler', function($mmaModAssign, $mmFilepool, $q, mmaModAssignComponent) {
2525

2626
var self = {};
2727

@@ -43,6 +43,20 @@ angular.module('mm.addons.mod_assign')
4343
return 'mma-mod-assign-feedback-editpdf';
4444
};
4545

46+
/**
47+
* Get files used by this plugin.
48+
* The files returned by this function will be prefetched when the user prefetches the assign.
49+
*
50+
* @param {Object} assign Assignment.
51+
* @param {Object} submission Data returned by $mmaModAssign#getSubmissionStatus.
52+
* @param {Object} plugin Plugin.
53+
* @param {String} [siteId] Site ID. If not defined, current site.
54+
* @return {Promise} Promise resolved when prefetch is done.
55+
*/
56+
self.getPluginFiles = function(assign, submission, plugin, siteId) {
57+
return $mmaModAssign.getSubmissionPluginAttachments(plugin);
58+
};
59+
4660
return self;
4761
})
4862

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
<div class="item item-text-wrap" ng-if="files.length">
22
<h2>{{plugin.name}}</h2>
3-
<mm-file ng-repeat="file in files" file="file" component="{{assignComponent}}" component-id="{{assign.id}}"></mm-file>
3+
<mm-file ng-repeat="file in files" file="file" component="{{assignComponent}}" component-id="{{assign.id}}" always-download="true"></mm-file>
44
</div>

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ angular.module('mm.addons.mod_assign')
2121
* @ngdoc service
2222
* @name $mmaModAssignFeedbackFileHandler
2323
*/
24-
.factory('$mmaModAssignFeedbackFileHandler', function() {
24+
.factory('$mmaModAssignFeedbackFileHandler', function($mmaModAssign, $mmFilepool, $q, mmaModAssignComponent) {
2525

2626
var self = {};
2727

@@ -43,6 +43,20 @@ angular.module('mm.addons.mod_assign')
4343
return 'mma-mod-assign-feedback-file';
4444
};
4545

46+
/**
47+
* Get files used by this plugin.
48+
* The files returned by this function will be prefetched when the user prefetches the assign.
49+
*
50+
* @param {Object} assign Assignment.
51+
* @param {Object} submission Data returned by $mmaModAssign#getSubmissionStatus.
52+
* @param {Object} plugin Plugin.
53+
* @param {String} [siteId] Site ID. If not defined, current site.
54+
* @return {Promise} Promise resolved when prefetch is done.
55+
*/
56+
self.getPluginFiles = function(assign, submission, plugin, siteId) {
57+
return $mmaModAssign.getSubmissionPluginAttachments(plugin);
58+
};
59+
4660
return self;
4761
})
4862

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
<div class="item item-text-wrap" ng-if="files.length">
22
<h2>{{plugin.name}}</h2>
3-
<mm-file ng-repeat="file in files" file="file" component="{{assignComponent}}" component-id="{{assign.id}}"></mm-file>
3+
<mm-file ng-repeat="file in files" file="file" component="{{assignComponent}}" component-id="{{assign.id}}" always-download="true"></mm-file>
44
</div>

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,20 @@ angular.module('mm.addons.mod_assign')
168168
});
169169
};
170170

171+
/**
172+
* Get the submission object from an attempt.
173+
*
174+
* @module mm.addons.mod_assign
175+
* @ngdoc method
176+
* @name $mmaModAssign#getSubmissionObjectFromAttempt
177+
* @param {Object} assign Assign.
178+
* @param {Object} attempt Attempt.
179+
* @return {Object} Submission object.
180+
*/
181+
self.getSubmissionObjectFromAttempt = function(assign, attempt) {
182+
return assign.teamsubmission ? attempt.teamsubmission : attempt.submission;
183+
};
184+
171185
/**
172186
* Get attachments of a submission Submission.
173187
*
@@ -742,7 +756,7 @@ angular.module('mm.addons.mod_assign')
742756
return $mmSite.write('mod_assign_save_submission', params).then(function(warnings) {
743757
if (warnings && warnings.length) {
744758
// The WebService returned warnings, reject.
745-
return $q.reject(warnings[0].message);
759+
return $q.reject(warnings[0].item);
746760
}
747761
});
748762
};

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

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,29 @@ angular.module('mm.addons.mod_assign')
8383
}
8484
};
8585

86+
/**
87+
* Get files used by this plugin.
88+
* The files returned by this function will be prefetched when the user prefetches the assign.
89+
*
90+
* @module mm.addons.mod_assign
91+
* @ngdoc method
92+
* @name $mmaModAssignFeedbackDelegate#getPluginFiles
93+
* @param {Object} assign Assignment.
94+
* @param {Object} submission Data returned by $mmaModAssign#getSubmissionStatus.
95+
* @param {Object} plugin Plugin.
96+
* @param {String} [siteId] Site ID. If not defined, current site.
97+
* @return {Promise} Promise resolved with the files.
98+
*/
99+
self.getPluginFiles = function(assign, submission, plugin, siteId) {
100+
siteId = siteId || $mmSite.getId();
101+
102+
var handler = self.getPluginHandler(plugin.type);
103+
if (handler && handler.getPluginFiles) {
104+
return $q.when(handler.getPluginFiles(assign, submission, plugin, siteId));
105+
}
106+
return $q.when([]);
107+
};
108+
86109
/**
87110
* Check if a time belongs to the last update handlers call.
88111
* This is to handle the cases where updateHandlers don't finish in the same order as they're called.
@@ -113,6 +136,28 @@ angular.module('mm.addons.mod_assign')
113136
return typeof enabledHandlers[pluginType] != 'undefined';
114137
};
115138

139+
/**
140+
* Prefetch any required data for a feedback plugin.
141+
*
142+
* @module mm.addons.mod_assign
143+
* @ngdoc method
144+
* @name $mmaModAssignFeedbackDelegate#prefetch
145+
* @param {Object} assign Assignment.
146+
* @param {Object} submission Data returned by $mmaModAssign#getSubmissionStatus.
147+
* @param {Object} plugin Plugin.
148+
* @param {String} [siteId] Site ID. If not defined, current site.
149+
* @return {Promise} Promise resolved when data has been prefetched.
150+
*/
151+
self.prefetch = function(assign, submission, plugin, siteId) {
152+
siteId = siteId || $mmSite.getId();
153+
154+
var handler = self.getPluginHandler(plugin.type);
155+
if (handler && handler.prefetch) {
156+
return $q.when(handler.prefetch(assign, submission, plugin, siteId));
157+
}
158+
return $q.when();
159+
};
160+
116161
/**
117162
* Register a feedback plugin handler. The handler will be used when submitting an assign.
118163
*

0 commit comments

Comments
 (0)