File

src/app/models/supervision-requests.ts

Constructor

constructor(lrsService: LrsService, page: SupervisionPage, http: HttpClient)

Methods

getUsers
getUsers(idsList: any)
Returns: any
getNbUsers
getNbUsers()
Returns: void
getNbExercisesCompletedByUsers
getNbExercisesCompletedByUsers()
Returns: void
getUserStat
getUserStat(uid: any)
Returns: void
getSessionStat
getSessionStat(session: any)
Returns: void
getNbExercisesCompletedByClasses
getNbExercisesCompletedByClasses()
Returns: void
addMandatoryFilter
addMandatoryFilter(match: any[])
Returns: void
addDefaultSort
addDefaultSort(request: any)
Returns: void
getClassData
getClassData(codeClasse: any)
Returns: void
import { HttpClient } from "@angular/common/http";
import { addMonths, format, parseISO } from "date-fns";
import { SupervisionPage } from "../pages/supervision/supervision.page";
import { LrsService } from "../services/lrs.service";
import { LrsUtils } from "./lrs/lrsUtils";
import { environment } from "src/environments/environment";
export class SupervisionRequests {
	constructor(private lrsService: LrsService, private page: SupervisionPage, private http: HttpClient) {}

	getUsers(idsList): Promise<Array<{ level; teacher_id; uid; codeClasse }>> {
		return new Promise(resolve => {
			if (!environment.kidaia) {
				const formData = new FormData();
				formData.append("token", "f}wucm8IB}d|5B`qh}Sx5FlD??E{[&Y&");
				// tslint:disable-next-line: triple-equals
				formData.append("ids", "'" + idsList.join("','") + "'");
				this.http.post("https://api.mathia.education/users", formData).subscribe((data: any) => {
					resolve(data);
				});
			} else {
				const formData = new FormData();
				formData.append("token", "f}wucm8IB}d|5B`qh}Sx5FlD??E{[&Y&");
				// tslint:disable-next-line: triple-equals
				formData.append("ids", idsList.join(",").replace(/os_/g, ''));
				this.http.post(this.lrsService.globalService.postOpenSteamOSE + "?controller=kidaia&action=users", formData).subscribe((data: any) => {
					resolve(data);
				});
			}
		});
	}

	getNbUsers() {
		return new Promise<any>(resolve => {
			const date = new Date();
			const startdate = addMonths(date, -12);

			const request = [];
			const match: Array<any> = [];

			this.addMandatoryFilter(match);
			request.push({
				$match: {
					$and: match
				}
			});
			const $project = {
				$project: {
					value: "$statement.actor.account.name"
				}
			};
			request.push($project);
			request.push({
				$group: {
					_id: "$value"
				}
			});
			this.lrsService.request(request).then(async (results: any) => {
				resolve(results.map(e => e._id));
			});
		});
	}

	getNbExercisesCompletedByUsers() {
		return new Promise<any>(resolve => {
			const request = [];
			const match: Array<any> = [
				{
					"statement.verb.id": {
						$in: [(environment.kidaia ? "https://xapi.ose" : "https://xapi.mathia.education")+"/verbs/initialized"]
					}
				}
			];
			this.addMandatoryFilter(match);

			request.push({
				$match: {
					$and: match
				}
			});
			const $project = {
				$project: {
					uid: "$statement.actor.account.name",
					value: "$statement.context.extensions."+(environment.kidaia ? "https://xapi&46;ose" : "https://xapi&46;mathia&46;education")+"/extensions/id_session"
				}
			};
			request.push($project);
			request.push({
				$group: {
					_id: { uid: "$uid" },
					value: {
						//compte le nombre d'exercices terminées
						$sum: 1
					}
				}
			});
			this.lrsService.request(request).then(async (results: any) => {
				console.log(results);
				resolve(results);
			});
		});
	}

	getUserStat(uid) {
		return new Promise<any>(resolve => {
			const date = new Date();
			const startdate = addMonths(date, -12);

			const request = [];
			const match: Array<any> = [
				{
					"statement.actor.account.name": {
						$in: [uid]
					}
				},
				{
					"statement.verb.id": {
						$in: ["https://xapi.mathia.education/verbs/initialized", "https://xapi.mathia.education/verbs/completed"]
					}
				},
				{
					"statement.object.definition.type": {
						$in: ["https://xapi.mathia.education/objectType/exercise"]
					}
				}
			];
			this.addMandatoryFilter(match);

			request.push({
				$match: {
					$and: match
				}
			});
			const $project = {
				$project: {
					verb: "$statement.verb.id",
					date: {
						$dateToString: {
							format: "%Y-%m-%d %H:%M:%S",
							date: {
								$toDate: "$statement.timestamp"
							}
						}
					},
					session: "$statement.context.extensions.https://xapi&46;mathia&46;education/extensions/id_session",
					story: "$statement.context.extensions.https://xapi&46;mathia&46;education/extensions/story",
					modeJeu: "$statement.context.extensions.https://xapi&46;mathia&46;education/extensions/mode_jeu",
					holo: "$statement.context.extensions.https://xapi&46;mathia&46;education/extensions/holo",
					nomActivite: "$statement.context.extensions.https://xapi&46;mathia&46;education/extensions/nom_activite",
					modeReponse: "$statement.context.extensions.https://xapi&46;mathia&46;education/extensions/mode_reponse",
					nomExercice: "$statement.context.extensions.https://xapi&46;mathia&46;education/extensions/nom_exercice",
					txSuccess: "$statement.context.extensions.https://xapi&46;mathia&46;education/extensions/pourcentage_bonnes_reponses"
				}
			};
			request.push($project);
			this.addDefaultSort(request);
			this.lrsService.request(request).then(async (results: any) => {
				console.log(results);
				const exercices = [];
				results.forEach(r => {
					if (r.verb === "https://xapi.mathia.education/verbs/initialized") {
						r.jour = format(parseISO(r.date), "dd / MM / yyyy");
						r.heure = format(parseISO(r.date), "HH:mm:ss");
						r.completed = false;
						exercices.push(r);
					} else {
						const e = exercices.find(e => e.session === r.session);
						e.completed = true;
						e.verb = r.verb;
						e.txSuccess = r.txSuccess;
					}
				});
				resolve(exercices);
			});
		});
	}

	getSessionStat(session) {
		return new Promise<any>(resolve => {
			const date = new Date();
			const startdate = addMonths(date, -12);

			const request = [];
			const match: Array<any> = [
				{
					"statement.context.extensions.https://xapi&46;mathia&46;education/extensions/id_session": {
						$in: [session]
					}
				},
				{
					"statement.verb.id": {
						$nin: [
							"https://xapi.mathia.education/verbs/initialized",
							"https://xapi.mathia.education/verbs/completed",
							"https://xapi.mathia.education/verbs/finished"
						]
					}
				}
			];

			request.push({
				$match: {
					$and: match
				}
			});
			const $project = {
				$project: {
					verb: "$statement.verb.id",
					date: {
						$dateToString: {
							format: "%Y-%m-%d %H:%M:%S",
							date: {
								$toDate: "$statement.timestamp"
							}
						}
					},
					name: "$statement.object.definition.name.en-US",
					modeReponse: "$statement.context.extensions.https://xapi&46;mathia&46;education/extensions/mode_reponse",
					success: "$statement.result.success"
				}
			};
			request.push($project);
			this.addDefaultSort(request);
			this.lrsService.request(request).then(async (results: any) => {
				resolve(results);
			});
		});
	}

	getNbExercisesCompletedByClasses() {
		return new Promise<any>(resolve => {
			const date = new Date();
			const startdate = addMonths(date, -12);

			const request = [];
			const match: Array<any> = [
				{
					"statement.verb.id": {
						$in: [(environment.kidaia ? "https://xapi.ose" : "https://xapi.mathia.education")+"/verbs/initialized"]
					}
			}];
			
			if(!environment.kidaia){

				match.push({
					"statement.object.definition.type": {
						$in: [(environment.kidaia ? "https://xapi.ose" : "https://xapi.mathia.education")+"/objectType/exercise"]
					}
				});
			}

			this.addMandatoryFilter(match);
			request.push({
				$match: {
					$and: match
				}
			});
			const $project = {
				$project: {
					uid: "$statement.context.extensions."+(environment.kidaia ? "https://xapi&46;ose" : "https://xapi&46;mathia&46;education")+"/extensions/codeclasse",
					value: "$statement.context.extensions."+(environment.kidaia ? "https://xapi&46;ose" : "https://xapi&46;mathia&46;education")+"/extensions/id_session"
				}
			};
			request.push($project);
			request.push({
				$group: {
					_id: { uid: "$uid" },
					value: {
						//compte le nombre d'exercices terminées
						$sum: 1
					}
				}
			});
			this.lrsService.request(request).then(async (results: any) => {
				console.log(results);
				resolve(results);
			});
		});
	}
	addMandatoryFilter(match: any[]) {
		//
		// date filters
		//
		if (this.page.rangeDate.start || this.page.rangeDate.end) {
			if (this.page.rangeDate.start) {
				match.push({
					timestamp: {
						$gte: {
							$dte: this.page.rangeDate.start
						}
					}
				});
			}
			if (this.page.rangeDate.end) {
				match.push({
					timestamp: {
						$lte: {
							$dte: this.page.rangeDate.end
						}
					}
				});
			}
		} else {
			match.push({
				timestamp: {
					$gte: {
						$dte: "2021-01-01T08:09:00.000Z"
					}
				}
			});
		}

		//
		// black list and environment
		//
		match.push(
			{
				"statement.actor.account.name": {
					$nin: LrsUtils.idUsersBlacklist
				}
			}
		);
		if (!environment.kidaia) {
			match.push({
				"statement.context.extensions.https://xapi&46;mathia&46;education/extensions/kidaia": {
					$nin: [!environment.kidaia]
				}
			},
			{
				"statement.context.extensions.https://xapi&46;mathia&46;education/extensions/codeclasse": {
					$nin: LrsUtils.codeClassBlacklist
				}
			});
		}
	}
	addDefaultSort(request) {
		request.push({
			$sort: {
				date: 1
			}
		});
	}
	getClassData(codeClasse) {
		return new Promise<any>(resolve => {
			if(!environment.kidaia){
				this.http.get("https://lms-mathia.api.tralalere.com/api/groups-detail/" + codeClasse).subscribe((data: any) => {
					let classeData = data.data[0];
					this.http.get("https://lms-mathia.api.tralalere.com/api/users/" + classeData.uid).subscribe((teacher: any) => {
						classeData = Object.assign(classeData, teacher.data[0]) as any;
						classeData.members = classeData.members.filter(m => m.role !== "trainer");
						resolve(classeData);
					});
				});
			} else {
				const formData = new FormData();
				formData.append("token", "f}wucm8IB}d|5B`qh}Sx5FlD??E{[&Y&");
				// tslint:disable-next-line: triple-equals
				formData.append("codeclasse", codeClasse);
				this.http.post(this.lrsService.globalService.postOpenSteamOSE + "?controller=kidaia&action=classedata", formData).subscribe((data: any) => {
					const result = {
						id: codeClasse,
						email: data[0].email,
						members: [{id: data[0].id}]
					};
					data.forEach(element => {
						result.members.push({id: element.id_user});
					});
					console.log(result);
					resolve(result);
				});
			}
		});
	}
}

results matching ""

    No results matching ""