MOBILE-3754 quiz: Display grade to pass
parent
2f8333d516
commit
9fa3e77436
|
@ -1645,6 +1645,7 @@
|
|||
"core.grades.feedback": "grades",
|
||||
"core.grades.grade": "grades",
|
||||
"core.grades.gradeitem": "grades",
|
||||
"core.grades.gradepass": "grades",
|
||||
"core.grades.grades": "grades",
|
||||
"core.grades.lettergrade": "grades",
|
||||
"core.grades.manualitem": "grades",
|
||||
|
|
|
@ -49,6 +49,15 @@
|
|||
<p>{{ gradeMethodReadable }}</p>
|
||||
</ion-label>
|
||||
</ion-item>
|
||||
<ion-item class="ion-text-wrap" *ngIf="bestGrade && bestGrade.gradetopass && quiz && quiz.gradeFormatted">
|
||||
<ion-label>
|
||||
<h3>{{ 'core.grades.gradepass' | translate }}</h3>
|
||||
<p>{{ 'addon.mod_quiz.outof' | translate: { $a: {
|
||||
grade: bestGrade.gradetopass,
|
||||
maxgrade: quiz.gradeFormatted
|
||||
} } }}</p>
|
||||
</ion-label>
|
||||
</ion-item>
|
||||
<ion-item class="ion-text-wrap" *ngIf="syncTime">
|
||||
<ion-label>
|
||||
<h3>{{ 'core.lastsync' | translate }}</h3>
|
||||
|
|
|
@ -79,6 +79,7 @@ export class AddonModQuizIndexComponent extends CoreCourseModuleMainActivityComp
|
|||
gradeMethodReadable?: string; // Grade method in a readable format.
|
||||
showReviewColumn = false; // Whether to show the review column.
|
||||
attempts: AddonModQuizAttempt[] = []; // List of attempts the user has made.
|
||||
bestGrade?: AddonModQuizGetUserBestGradeWSResponse; // Best grade data.
|
||||
|
||||
protected fetchContentDefaultError = 'addon.mod_quiz.errorgetquiz'; // Default error to show when loading contents.
|
||||
protected syncEventName = AddonModQuizSyncProvider.AUTO_SYNCED;
|
||||
|
@ -89,7 +90,6 @@ export class AddonModQuizIndexComponent extends CoreCourseModuleMainActivityComp
|
|||
protected attemptAccessInfo?: AddonModQuizGetAttemptAccessInformationWSResponse; // Last attempt access info.
|
||||
protected moreAttempts = false; // Whether user can create/continue attempts.
|
||||
protected options?: AddonModQuizCombinedReviewOptions; // Combined review options.
|
||||
protected bestGrade?: AddonModQuizGetUserBestGradeWSResponse; // Best grade data.
|
||||
protected gradebookData?: { grade?: number; feedback?: string }; // The gradebook grade and feedback.
|
||||
protected overallStats = false; // Equivalent to overallstats in mod_quiz_view_object in Moodle.
|
||||
protected finishedObserver?: CoreEventObserver; // It will observe attempt finished events.
|
||||
|
@ -264,6 +264,8 @@ export class AddonModQuizIndexComponent extends CoreCourseModuleMainActivityComp
|
|||
* @return Promise resolved when done.
|
||||
*/
|
||||
protected async getAttempts(quiz: AddonModQuizQuizData): Promise<void> {
|
||||
// Always get the best grade because it includes the grade to pass.
|
||||
this.bestGrade = await AddonModQuiz.getUserBestGrade(quiz.id, { cmId: this.module.id });
|
||||
|
||||
// Get access information of last attempt (it also works if no attempts made).
|
||||
this.attemptAccessInfo = await AddonModQuiz.getAttemptAccessInformation(quiz.id, 0, { cmId: this.module.id });
|
||||
|
@ -343,7 +345,6 @@ export class AddonModQuizIndexComponent extends CoreCourseModuleMainActivityComp
|
|||
* @return Promise resolved when done.
|
||||
*/
|
||||
protected async getResultInfo(quiz: AddonModQuizQuizData): Promise<void> {
|
||||
|
||||
if (!this.attempts.length || !quiz.showGradeColumn || !this.bestGrade?.hasgrade ||
|
||||
this.gradebookData?.grade === undefined) {
|
||||
this.showResults = false;
|
||||
|
@ -584,6 +585,8 @@ export class AddonModQuizIndexComponent extends CoreCourseModuleMainActivityComp
|
|||
): Promise<AddonModQuizAttempt[]> {
|
||||
if (!attempts || !attempts.length) {
|
||||
// There are no attempts to treat.
|
||||
quiz.gradeFormatted = AddonModQuiz.formatGrade(quiz.grade, quiz.decimalpoints);
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
|
@ -607,7 +610,7 @@ export class AddonModQuizIndexComponent extends CoreCourseModuleMainActivityComp
|
|||
}));
|
||||
|
||||
// Get best grade.
|
||||
promises.push(this.getQuizGrade(quiz));
|
||||
promises.push(this.getQuizGrade());
|
||||
|
||||
await Promise.all(promises);
|
||||
|
||||
|
@ -635,12 +638,9 @@ export class AddonModQuizIndexComponent extends CoreCourseModuleMainActivityComp
|
|||
/**
|
||||
* Get quiz grade data.
|
||||
*
|
||||
* @param quiz Quiz.
|
||||
* @return Promise resolved when done.
|
||||
*/
|
||||
protected async getQuizGrade(quiz: AddonModQuizQuizData): Promise<void> {
|
||||
this.bestGrade = await AddonModQuiz.getUserBestGrade(quiz.id, { cmId: this.module.id });
|
||||
|
||||
protected async getQuizGrade(): Promise<void> {
|
||||
try {
|
||||
// Get gradebook grade.
|
||||
const data = await AddonModQuiz.getGradeFromGradebook(this.courseId, this.module.id);
|
||||
|
@ -654,7 +654,7 @@ export class AddonModQuizIndexComponent extends CoreCourseModuleMainActivityComp
|
|||
} catch {
|
||||
// Fallback to quiz best grade if failure or not found.
|
||||
this.gradebookData = {
|
||||
grade: this.bestGrade.grade,
|
||||
grade: this.bestGrade?.grade,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2295,6 +2295,7 @@ export type AddonModQuizGetUserBestGradeWSParams = {
|
|||
export type AddonModQuizGetUserBestGradeWSResponse = {
|
||||
hasgrade: boolean; // Whether the user has a grade on the given quiz.
|
||||
grade?: number; // The grade (only if the user has a grade).
|
||||
gradetopass?: number; // @since 3.11. The grade to pass the quiz (only if set).
|
||||
warnings?: CoreWSExternalWarning[];
|
||||
};
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
"feedback": "Feedback",
|
||||
"grade": "Grade",
|
||||
"gradeitem": "Grade item",
|
||||
"gradepass": "Grade to pass",
|
||||
"grades": "Grades",
|
||||
"lettergrade": "Letter grade",
|
||||
"manualitem": "Manual item",
|
||||
|
|
Loading…
Reference in New Issue