tabelGet.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /**
  2. * ВЫДАЧА ДАННЫХ ДЛЯ ФОРМИРОВАНИЯ ТАБЕЛЯ ИТОГОВЫХ ОТМЕТОК
  3. * Copyright © 2019, А.М.Гольдин. Modified BSD License
  4. */
  5. "use strict";
  6. // В аргументах приходит массив типа ["ivanov", "petrov"],
  7. // где ivanov - логин ученика, чьи отметки запрашиваются,
  8. // petrov - логин юзера, который запрашивает эти отметки
  9. // (логин юзера с фронтенда не передается, подписывается скриптом index.js).
  10. // Возвращает none или объект с итоговыми отметками по предметам
  11. // {
  12. // "s410": {d628a: "5", d831b: "0", ...}
  13. // ...
  14. // }
  15. // Если предмет равен "s000" (внеурочная деятельность), вместо "s000" ключом
  16. // будет "23Б" (имя группы внеурочной деятельности)
  17. module.exports = async (argArr) => {
  18. let resp = {};
  19. try {
  20. // Логины учащегося и запрашивающего юзера
  21. if (argArr.length != 2) return "none";
  22. let pupil = argArr[0].substr(0, 20).trim(),
  23. user = argArr[1].substr(0, 20).trim(),
  24. patt = /^[a-z0-9]+$/;
  25. if (!patt.test(pupil) || !patt.test(user)) return "none";
  26. // Администратор ли он?
  27. let admRes = await dbFind("staff", {Ulogin: user});
  28. if (!admRes.length) admRes = [{}];
  29. // Проверяем полномочия юзера на запрос отметок этого ученика
  30. if (pupil != user && !admRes[0].admin) {
  31. // Определяем класс ребенка
  32. let pupRes = await dbFind("pupils", {Ulogin: pupil});
  33. if (!pupRes.length) return "none";
  34. let pupClass = pupRes[0].Uclass;
  35. // Проверяем полномочия классного руководителя на запрашиваемый класс
  36. let clRes = await dbFind("curric", {type: "class", className: pupClass});
  37. if (!clRes.length) return "none";
  38. if (clRes[0].tutor != user) return "none";
  39. }
  40. // Получаем итоговые отметки и подписываем их в объект resp
  41. // (для внеурочной деятельности имя предмета заменяем на имя группы)
  42. let res = await dbFind("grades", {p: pupil, d: RegExp("\\w{5}")});
  43. for (let otm of res)
  44. if (otm.g) {
  45. let subj = otm.s;
  46. if (subj == "s000") subj = otm.c;
  47. if (!resp[subj]) resp[subj] = {};
  48. resp[subj][otm.d] = otm.g;
  49. }
  50. return JSON.stringify(resp);
  51. }
  52. catch(e) {return "none";}
  53. };