123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- /**
- * ОТПРАВКА АВТОРУ ЗАМЕЧАНИЙ РЕДАКТОРА ИЛИ РЕЦЕНЗЕНТА
- * Copyright © 2021, А.М.Гольдин. ISC license
- */
- "use strict";
- // Возвращает success или none
- // data - это массив вида ["editor", id, notes, resol], где
- // "editor" - редактор, "reviewer" - рецензент
- // id - id статьи
- // notes - собственно замечания
- // resol - необязательный аргумент, резолюция рецензента:
- // "disc", "edit" или "print"
- // user - это данные клиента [3, "ivanov", "Иванов", "Ян", "Карлович"]
- module.exports = async (data, user) => {
- const flName = data[0] == "editor" ? "editor.txt" : "reviewer.txt",
- who = data[0] == "editor" ? "редактора" : "рецензента",
- id = data[1] ? data[1] : '',
- notes = data[2] ? data[2].substr(0, 10000).trim() : '';
- if (!id || !notes) return "none";
- try {
- // Промисификатор записи файла
- const wrFile = cont => {
- return new Promise((resolve, reject) => {
- fs.writeFile(__dirname + `/../draft/${id}/${flName}`, cont, e => {
- if (e) reject("none"); else resolve("yes");
- })
- })
- };
- // Запрос действительно от редактора или рецензента?
- let roles = "000";
- let staff = await dbFind("staff", {login: user[1]});
- if (staff[0]) roles = staff[0].roles.toString(2).padStart(3, '0');
- if (user[1] == ADMIN) {
- roles = "111";
- staff[0] = {login: ADMIN};
- }
- if (!roles[0] && !roles[2]) return "none";
-
- // Есть ли такая статья и не опубликована ли она уже?
- let res = await dbFind("articles", {_id: id});
- if (!res.length) return "none";
- if (res[0].status == 7) return "none";
- // Определяем автора статьи и его почту, заголовок статьи
- let author = res[0].author,
- sved = res[0].sved,
- eml = res[0].eml,
- title = res[0].head;
- // Пишем файл с замечаниями
- let resWrite = await wrFile(notes);
- if (resWrite != "yes") return "none";
- // Посылаем письмо автору
- let text = `Уважаемый(ая) ${author}!\n\n`
- + `Ваша статья «${title}» рассмотрена. Получены замечания ${who}:\n\n`
- + `===НАЧАЛО ЗАМЕЧАНИЙ\n${notes}\n===КОНЕЦ ЗАМЕЧАНИЙ`;
- let zagol = "Статья отклонена";
- if (!data[3] || data[3] == "edit") {
- zagol = `Замечания ${who}`;
- text += "\n\nДля доработки статьи зайдите в раздел сайта "
- + "«Мои статьи» и кликните на значке карандаша справа от "
- + "названия статьи. После внесения вами изменений статья "
- + "будет рассмотрена повторно.";
- }
- if (data[3] == "print") zagol = "Статья одобрена";
- let resEml = await sendEml(eml, zagol, text);
- // Новые статус и дата для записи в базу
- let now = (new Date()).toISOString().split('T')[0]
- . replace(/(\d+)-(\d+)-(\d+)/, "$3.$2.$1");
- let newStatus = data[0] == "editor" ? 2 : 4;
- // Если рецензент предлагает удалить или опубликовать статью,
- // пишем письмо главному редактору
- let resEmlRed = 'a';
- if (data[3] == "disc") {
- resEmlRed = await sendEml(ADMEML, "Статья к удалению",
- `Статья ${id} рекомендована к удалению рецензентом `
- + `${staff[0].login}.\nАвтор статьи: ${author}, ${sved}.\n`
- + `Заголовок статьи: ${title}.\nЗамечания рецензента:\n\n${notes}`
- );
- }
- if (data[3] == "print") {
- resEmlRed = await sendEml(ADMEML, "Статья к корректуре",
- `Статья ${id} одобрена рецензентом ${staff[0].login}.\n`
- + `Необходимо направить статью корректору.`
- );
- newStatus = 5;
- }
- if (!resEml || !resEmlRed) return "none";
-
- // Меняем статус и время последней операции в базе статей
- await db.articles.update(
- {_id: id}, {$set: {status: newStatus, dt2: now}}, {}
- );
- return "success";
- }
- catch(e) {return "none";}
- };
|