notesAdd.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /**
  2. * ДОБАВЛЕНИЕ ЗАМЕТКИ ДЛЯ УЧАЩЕГОСЯ И РОДИТЕЛЕЙ
  3. * Copyright © 2020, А.М.Гольдин. Modified BSD License
  4. */
  5. "use strict";
  6. // Аргументы: ["ivanov", "Плохое поведение!", "petrov"]
  7. // ivanov (вместо него может быть, например, 8Б-мальч) - для кого заметка
  8. // petrov - логин отправителя заметки (с фронтенда не передается,
  9. // подписывается скриптом index.js)
  10. // Возвращает "success" или "none"
  11. module.exports = async (args) => {
  12. try {
  13. if (args.length != 3) return "none";
  14. let rcpt = args[0].substr(0, 20).trim(),
  15. text = args[1].substr(0, 500).trim(),
  16. author = args[2].substr(0, 20).trim();
  17. if (!rcpt || !text || !author) return "none";
  18. text = text.replace(/[^а-яёА-ЯЁa-zA-Z0-9.,:;()\/\-—–_@=&!?№ ]/g, '');
  19. // Определяем полномочия отправителя (сотрудник ли он) и его имя
  20. let res = await dbFind("staff", {Ulogin: author});
  21. if (!res.length) return "none";
  22. let authorF =
  23. `${res[0].Ufamil} ${(res[0].Uname)[0]}. ${(res[0].Uotch)[0]}.`;
  24. // Определяем имя адресата (если это не целый класс)
  25. let rcptF = rcpt;
  26. if (!/^[0-9]{1,2}[А-ЯЁ]/.test(rcpt)) {
  27. let res = await dbFind("pupils", {Ulogin: rcpt});
  28. if (!res.length) return "none";
  29. rcptF = `${res[0].Ufamil} ${(res[0].Uname)[0]}. (${res[0].Uclass})`;
  30. }
  31. let dt = new Date(),
  32. y = dt.getFullYear(),
  33. m = (dt.getMonth() + 1).toString().padStart(2, '0'),
  34. d = dt.getDate().toString().padStart(2, '0'),
  35. h = dt.getHours().toString().padStart(2, '0'),
  36. i = dt.getMinutes().toString().padStart(2, '0'),
  37. now = `${y}-${m}-${d} ${h}:${i}`;
  38. // Пишем новую заметку в базу
  39. await db.notes.insert({
  40. dt:now, r:rcpt, rf:rcptF, t:text, a:author, af:authorF
  41. });
  42. return "success";
  43. }
  44. catch(e) {return "none";}
  45. };