puplication.js 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /**
  2. * ПУБЛИКАЦИЯ СТАТЬИ
  3. * Copyright © 2021, А.М.Гольдин. ISC license
  4. */
  5. "use strict";
  6. // Возвращает success или none
  7. // id - id статьи
  8. // user - это данные клиента [3, "ivanov", "Иванов", "Ян", "Карлович"]
  9. const pubApi = require("./loadArticle");
  10. module.exports = async (id, user) => {
  11. try {
  12. // Запрос действительно от редактора?
  13. let roles = "000";
  14. let staff = await dbFind("staff", {login: user[1]});
  15. if (staff[0]) roles = staff[0].roles.toString(2).padStart(3, '0');
  16. if (user[1] == ADMIN) roles = "111";
  17. if (!roles[0]) return "none";
  18. // Есть ли такая статья и не опубликована ли она уже?
  19. let res = await dbFind("articles", {_id: id});
  20. if (!res.length) return "none";
  21. if (res[0].status == 7) return "none";
  22. let title = res[0].head,
  23. fio = res[0].author,
  24. eml = res[0].eml;
  25. // Генерируем html
  26. let html = await pubApi(id, user);
  27. if (html == "none") return "none";
  28. const reg = new RegExp(`\\?draft_${id}\\/`, "g");
  29. html = html.replace(reg, '');
  30. // Перемещаем статью из черновиков в pub
  31. await fs.promises.rename(
  32. __dirname + "/../draft/" + id,
  33. __dirname + "/../www/pub/" + id
  34. );
  35. await fs.promises.writeFile(
  36. __dirname + "/../www/pub/" + id + "/index.html", html
  37. );
  38. // Удаляем лишние файлы
  39. await fs.promises.rm(__dirname + "/../www/pub/" + id + "/article.txt");
  40. try {
  41. await fs.promises.rm(
  42. __dirname + "/../www/pub/" + id + "/editor.txt");
  43. } catch(e) {;}
  44. try {
  45. await fs.promises.rm(
  46. __dirname + "/../www/pub/" + id + "/reviewer.txt",
  47. {recursive: true}
  48. );
  49. } catch(e) {;}
  50. // Вносим изменения в базу
  51. let now = (new Date()).toISOString().split('T')[0]
  52. . replace(/(\d+)-(\d+)-(\d+)/, "$3.$2.$1");
  53. await db.articles.update(
  54. {_id: id}, {$set: {status: 7, dt2: now}}, {},
  55. );
  56. // Посылаем письмо автору
  57. await sendEml(eml, "Ваша статья опубликована",
  58. `Уважаемый(ая) ${fio}!\n\nВаша статья «${title}» опубликована. `
  59. + `Статья доступна по ссылке http://lycarch.urfu.ru/pub/${id} `
  60. + `Если вы (или ваши соавторы) хотите получить сертификат о `
  61. + `публикации, воспользуйтесь инструкцией `
  62. + `http://lycarch.urfu.ru/?m#cert`
  63. );
  64. return "success";
  65. }
  66. catch(e) {return "none";}
  67. };