MOBILE-3919 assign: Display activity instructions
parent
1da073eefa
commit
b793a9dbe9
|
@ -11,7 +11,7 @@
|
||||||
<!-- Activity info. -->
|
<!-- Activity info. -->
|
||||||
<core-course-module-info [module]="module" [description]="description" [component]="component" [componentId]="componentId"
|
<core-course-module-info [module]="module" [description]="description" [component]="component" [componentId]="componentId"
|
||||||
[courseId]="courseId" [hasDataToSync]="hasOffline" (completionChanged)="onCompletionChange()">
|
[courseId]="courseId" [hasDataToSync]="hasOffline" (completionChanged)="onCompletionChange()">
|
||||||
<ion-list inset="true" description *ngIf="assign && assign.introattachments && assign.introattachments.length">
|
<ion-list inset="true" description *ngIf="assign && assign.introattachments?.length && !assign.submissionattachments">
|
||||||
<core-file *ngFor="let file of assign.introattachments" [file]="file" [component]="component" [componentId]="componentId">
|
<core-file *ngFor="let file of assign.introattachments" [file]="file" [component]="component" [componentId]="componentId">
|
||||||
</core-file>
|
</core-file>
|
||||||
</ion-list>
|
</ion-list>
|
||||||
|
|
|
@ -25,6 +25,20 @@
|
||||||
[underTimeClassThresholds]="[300, 900]" class="ion-margin-horizontal">
|
[underTimeClassThresholds]="[300, 900]" class="ion-margin-horizontal">
|
||||||
</core-timer>
|
</core-timer>
|
||||||
|
|
||||||
|
<!-- Assign activity instructions and attachments if needed. -->
|
||||||
|
<ion-item class="ion-text-wrap" *ngIf="activityInstructions">
|
||||||
|
<ion-label>
|
||||||
|
<core-format-text [text]="activityInstructions" [component]="component" [componentId]="moduleId" contextLevel="module"
|
||||||
|
[contextInstanceId]="moduleId" [courseId]="courseId" [maxHeight]="120">
|
||||||
|
</core-format-text>
|
||||||
|
</ion-label>
|
||||||
|
</ion-item>
|
||||||
|
|
||||||
|
<ng-container *ngIf="assign?.submissionattachments">
|
||||||
|
<core-file *ngFor="let file of introAttachments" [file]="file" [component]="component" [componentId]="moduleId">
|
||||||
|
</core-file>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
<form name="addon-mod_assign-edit-form" #editSubmissionForm>
|
<form name="addon-mod_assign-edit-form" #editSubmissionForm>
|
||||||
<!-- Submission statement. -->
|
<!-- Submission statement. -->
|
||||||
<ion-item class="ion-text-wrap" *ngIf="submissionStatement">
|
<ion-item class="ion-text-wrap" *ngIf="submissionStatement">
|
||||||
|
|
|
@ -38,6 +38,7 @@ import { AddonModAssignHelper } from '../../services/assign-helper';
|
||||||
import { AddonModAssignOffline } from '../../services/assign-offline';
|
import { AddonModAssignOffline } from '../../services/assign-offline';
|
||||||
import { AddonModAssignSync } from '../../services/assign-sync';
|
import { AddonModAssignSync } from '../../services/assign-sync';
|
||||||
import { CoreUtils } from '@services/utils/utils';
|
import { CoreUtils } from '@services/utils/utils';
|
||||||
|
import { CoreWSExternalFile } from '@services/ws';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Page that allows adding or editing an assigment submission.
|
* Page that allows adding or editing an assigment submission.
|
||||||
|
@ -61,6 +62,9 @@ export class AddonModAssignEditPage implements OnInit, OnDestroy, CanLeave {
|
||||||
submissionStatementAccepted = false; // Whether submission statement is accepted.
|
submissionStatementAccepted = false; // Whether submission statement is accepted.
|
||||||
loaded = false; // Whether data has been loaded.
|
loaded = false; // Whether data has been loaded.
|
||||||
timeLimitEndTime = 0; // If time limit is enabled, the end time for the timer.
|
timeLimitEndTime = 0; // If time limit is enabled, the end time for the timer.
|
||||||
|
activityInstructions?: string; // Activity instructions.
|
||||||
|
introAttachments?: CoreWSExternalFile[]; // Intro attachments.
|
||||||
|
component = AddonModAssignProvider.COMPONENT;
|
||||||
|
|
||||||
protected userId: number; // User doing the submission.
|
protected userId: number; // User doing the submission.
|
||||||
protected isBlind = false; // Whether blind is used.
|
protected isBlind = false; // Whether blind is used.
|
||||||
|
@ -184,6 +188,20 @@ export class AddonModAssignEditPage implements OnInit, OnDestroy, CanLeave {
|
||||||
|
|
||||||
submissionStatus = await this.startSubmissionIfNeeded(submissionStatus, options);
|
submissionStatus = await this.startSubmissionIfNeeded(submissionStatus, options);
|
||||||
|
|
||||||
|
if (submissionStatus.assignmentdata?.activity) {
|
||||||
|
// There are activity instructions. Make sure to display it with filters applied.
|
||||||
|
const filteredSubmissionStatus = options.filter ?
|
||||||
|
submissionStatus :
|
||||||
|
await AddonModAssign.getSubmissionStatus(this.assign.id, {
|
||||||
|
...options,
|
||||||
|
filter: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
this.activityInstructions = filteredSubmissionStatus.assignmentdata?.activity;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.introAttachments = submissionStatus.assignmentdata?.attachments?.intro ?? this.assign.introattachments;
|
||||||
|
|
||||||
this.allowOffline = true; // If offline isn't allowed we shouldn't have reached this point.
|
this.allowOffline = true; // If offline isn't allowed we shouldn't have reached this point.
|
||||||
// Only show submission statement if we are editing our own submission.
|
// Only show submission statement if we are editing our own submission.
|
||||||
if (this.assign.requiresubmissionstatement && !this.assign.submissiondrafts && this.userId == currentUserId) {
|
if (this.assign.requiresubmissionstatement && !this.assign.submissiondrafts && this.userId == currentUserId) {
|
||||||
|
|
|
@ -101,19 +101,26 @@ export class AddonModAssignPrefetchHandlerService extends CoreCourseActivityPref
|
||||||
await AddonModAssignHelper.getSubmissionsUserData(assign, submissionData.submissions, 0, { siteId });
|
await AddonModAssignHelper.getSubmissionsUserData(assign, submissionData.submissions, 0, { siteId });
|
||||||
|
|
||||||
// Get all the files in the submissions.
|
// Get all the files in the submissions.
|
||||||
const promises = submissions.map((submission) =>
|
const promises = submissions.map(async (submission) => {
|
||||||
this.getSubmissionFiles(assign, submission.submitid!, !!submission.blindid, siteId).then((submissionFiles) => {
|
try {
|
||||||
files = files.concat(submissionFiles);
|
const submissionFiles = await this.getSubmissionFiles(
|
||||||
|
assign,
|
||||||
|
submission.submitid!,
|
||||||
|
!!submission.blindid,
|
||||||
|
true,
|
||||||
|
siteId,
|
||||||
|
);
|
||||||
|
|
||||||
return;
|
files = files.concat(submissionFiles);
|
||||||
}).catch((error) => {
|
} catch (error) {
|
||||||
if (error && error.errorcode == 'nopermission') {
|
if (error && error.errorcode == 'nopermission') {
|
||||||
// The user does not have persmission to view this submission, ignore it.
|
// The user does not have persmission to view this submission, ignore it.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
throw error;
|
throw error;
|
||||||
}));
|
}
|
||||||
|
});
|
||||||
|
|
||||||
await Promise.all(promises);
|
await Promise.all(promises);
|
||||||
} else {
|
} else {
|
||||||
|
@ -121,7 +128,7 @@ export class AddonModAssignPrefetchHandlerService extends CoreCourseActivityPref
|
||||||
const userId = CoreSites.getCurrentSiteUserId();
|
const userId = CoreSites.getCurrentSiteUserId();
|
||||||
const blindMarking = !!assign.blindmarking && !assign.revealidentities;
|
const blindMarking = !!assign.blindmarking && !assign.revealidentities;
|
||||||
|
|
||||||
const submissionFiles = await this.getSubmissionFiles(assign, userId, blindMarking, siteId);
|
const submissionFiles = await this.getSubmissionFiles(assign, userId, blindMarking, false, siteId);
|
||||||
files = files.concat(submissionFiles);
|
files = files.concat(submissionFiles);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,6 +145,7 @@ export class AddonModAssignPrefetchHandlerService extends CoreCourseActivityPref
|
||||||
* @param assign Assign.
|
* @param assign Assign.
|
||||||
* @param submitId User ID of the submission to get.
|
* @param submitId User ID of the submission to get.
|
||||||
* @param blindMarking True if blind marking, false otherwise.
|
* @param blindMarking True if blind marking, false otherwise.
|
||||||
|
* @param canViewAllSubmissions Whether the user can view all submissions.
|
||||||
* @param siteId Site ID. If not defined, current site.
|
* @param siteId Site ID. If not defined, current site.
|
||||||
* @return Promise resolved with array of files.
|
* @return Promise resolved with array of files.
|
||||||
*/
|
*/
|
||||||
|
@ -145,6 +153,7 @@ export class AddonModAssignPrefetchHandlerService extends CoreCourseActivityPref
|
||||||
assign: AddonModAssignAssign,
|
assign: AddonModAssignAssign,
|
||||||
submitId: number,
|
submitId: number,
|
||||||
blindMarking: boolean,
|
blindMarking: boolean,
|
||||||
|
canViewAllSubmissions: boolean,
|
||||||
siteId?: string,
|
siteId?: string,
|
||||||
): Promise<CoreWSFile[]> {
|
): Promise<CoreWSFile[]> {
|
||||||
|
|
||||||
|
@ -155,8 +164,15 @@ export class AddonModAssignPrefetchHandlerService extends CoreCourseActivityPref
|
||||||
});
|
});
|
||||||
const userSubmission = AddonModAssign.getSubmissionObjectFromAttempt(assign, submissionStatus.lastattempt);
|
const userSubmission = AddonModAssign.getSubmissionObjectFromAttempt(assign, submissionStatus.lastattempt);
|
||||||
|
|
||||||
|
// Get intro and activity files from the submission status if it's a student.
|
||||||
|
// It's ok if they were already obtained from the assignment instance, they won't be downloaded twice.
|
||||||
|
const files = canViewAllSubmissions ?
|
||||||
|
[] :
|
||||||
|
(submissionStatus.assignmentdata?.attachments?.intro || [])
|
||||||
|
.concat(submissionStatus.assignmentdata?.attachments?.activity || []);
|
||||||
|
|
||||||
if (!submissionStatus.lastattempt || !userSubmission) {
|
if (!submissionStatus.lastattempt || !userSubmission) {
|
||||||
return [];
|
return files;
|
||||||
}
|
}
|
||||||
|
|
||||||
const promises: Promise<CoreWSFile[]>[] = [];
|
const promises: Promise<CoreWSFile[]>[] = [];
|
||||||
|
@ -177,7 +193,7 @@ export class AddonModAssignPrefetchHandlerService extends CoreCourseActivityPref
|
||||||
|
|
||||||
const filesLists = await Promise.all(promises);
|
const filesLists = await Promise.all(promises);
|
||||||
|
|
||||||
return [].concat.apply([], filesLists);
|
return files.concat.apply(files, filesLists);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue