This repository has been archived by the owner on Apr 10, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 11
/
sigaa-quiz-activity.ts
128 lines (112 loc) · 2.62 KB
/
sigaa-quiz-activity.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import { Quiz } from '@attachments/sigaa-quiz-student';
import { StudentBond } from '@bonds/sigaa-student-bond';
import { CourseStudent } from '@courses/sigaa-course-student';
import { SigaaForm } from '@session/sigaa-page';
/**
*
* @category Internal
*/
export interface ActivityQuizData {
courseTitle: string;
quizTitle: string;
id: string;
form: SigaaForm;
date: Date;
done: boolean;
}
/**
*
* @category Public
*/
export interface ActivityQuiz {
readonly type: 'quiz';
/**
* Return the activity course.
*/
getCourse(): Promise<CourseStudent>;
getQuiz(): Promise<Quiz>;
/* Quiz id */
quizId: string;
/* Quiz title*/
quizTitle: string;
/* Quiz course ID */
courseId: string;
/* Quiz course title */
courseTitle: string;
/* Activity date */
readonly date: Date;
/* If the quiz deadline has expired has expired or if it has already been sent */
readonly done: boolean;
}
export class SigaaActivityQuiz implements ActivityQuiz {
public readonly type = 'quiz';
constructor(
private activityData: ActivityQuizData,
private studentBond: StudentBond
) {}
/**
* @inheritdoc
*/
get quizId(): string {
if (!this.activityData.form.postValues)
throw new Error('SIGAA: Activity Quiz form without id.');
return this.activityData.form.postValues['id'];
}
/**
* @inheritdoc
*/
get quizTitle(): string {
return this.activityData.quizTitle;
}
/**
* @inheritdoc
*/
get courseId(): string {
if (!this.activityData.form.postValues['idTurma'])
throw new Error('SIGAA: Activity Quiz form without idTurma.');
return this.activityData.form.postValues['idTurma'];
}
/**
* @inheritdoc
*/
get courseTitle(): string {
return this.activityData.courseTitle;
}
/**
* @inheritdoc
*/
async getCourse(): Promise<CourseStudent> {
const courses = await this.studentBond.getCourses();
const course = courses.find((course) => course.id === this.courseId);
if (!course)
throw new Error(
'SIGAA: Cannot find the course referenced by the activity.'
);
return course;
}
/**
* @inheritdoc
*/
async getQuiz(): Promise<Quiz> {
const course = await this.getCourse();
const quizzes = await course.getQuizzes();
const quiz = quizzes.find((quiz) => quiz.id === this.quizId);
if (!quiz)
throw new Error(
'SIGAA: Cannot find the quiz referenced by the activity.'
);
return quiz;
}
/**
* @inheritdoc
*/
get date(): Date {
return this.activityData.date;
}
/**
* @inheritdoc
*/
get done(): boolean {
return this.activityData.done;
}
}