setRevCorr.js 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /**
  2. * НАЗНАЧЕНИЕ СТАТЬЕ РЕЦЕНЗЕНТА ИЛИ КОРРЕКТОРА
  3. * Copyright © 2021, А.М.Гольдин. ISC license
  4. */
  5. "use strict";
  6. // Возвращает success или none
  7. // data - это массив вида ["rev", id, login], где
  8. // "rev" - рецензент, "corr" - корректор
  9. // id - id статьи
  10. // login - логин назначаемого рецензента или корректора (или ADMIN)
  11. // user - это данные клиента [3, "ivanov", "Иванов", "Ян", "Карлович"]
  12. module.exports = async (data, user) => {
  13. const id = data[1] ? data[1] : '',
  14. login = data[2] ? data[2] : '';
  15. if (!id || !login) return "none";
  16. try {
  17. // Запрос действительно от редактора?
  18. let roles = "000";
  19. let staff = await dbFind("staff", {login: user[1]});
  20. if (staff[0]) roles = staff[0].roles.toString(2).padStart(3, '0');
  21. if (user[1] == ADMIN) roles = "111";
  22. if (!roles[0]) return "none";
  23. // Есть ли такая статья и не опубликована ли она уже?
  24. let res = await dbFind("articles", {_id: id});
  25. if (!res.length) return "none";
  26. if (res[0].status == 7) return "none";
  27. let title = res[0].head,
  28. author = res[0].author,
  29. authEml = res[0].eml;
  30. // Определяем фио и почту рецензента или корректора
  31. let fio = '', eml = '';
  32. if (login != "ADMIN") {
  33. let staff = await dbFind("staff", {login: login});
  34. if (!staff.length) return "none";
  35. fio = staff[0].fio.split(' ').slice(1).join(' ');
  36. eml = staff[0].eml;
  37. }
  38. // Пишем рецензента или корректора, новые статус и время в базу статей
  39. let who = "корректор", whoBrief = "КОРР";
  40. let now = (new Date()).toISOString().split('T')[0]
  41. . replace(/(\d+)-(\d+)-(\d+)/, "$3.$2.$1");
  42. if (data[0] == "rev") {
  43. who = "рецензент";
  44. whoBrief = "РЕЦ";
  45. await db.articles.update(
  46. {_id: id}, {$set: {rev: login, status: 3, dt2: now}}, {}
  47. );
  48. }
  49. else {
  50. await db.articles.update(
  51. {_id: id}, {$set: {corr: login, status: 5, dt2: now}}, {}
  52. );
  53. }
  54. // Посылаем письмо автору
  55. await sendEml(authEml, `Статья направлена ${who}у`,
  56. `Уважаемый(ая) ${author}!\n\n`
  57. + `Ваша статья «${title}» направлена ${who}у. О результатах его `
  58. + `работы со статьей вы будете проинформированы по электронной почте.`
  59. );
  60. // Посылаем письмо рецензенту или корректору
  61. if (!eml) return "success";
  62. await sendEml(eml, "Новая статья",
  63. `Уважаемый(ая) ${fio}!\n\nВам (как ${who}у) направлена статья `
  64. + `${id.toUpperCase()} «${title}». Для работы со статьей `
  65. + `авторизуйтесь на сайте и зайдите в раздел «${whoBrief}».`
  66. );
  67. return "success";
  68. }
  69. catch(e) {return "none";}
  70. };