1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /**
- * ПУБЛИКАЦИЯ СТАТЬИ
- * Copyright © 2021, А.М.Гольдин. ISC license
- */
- "use strict";
- // Возвращает success или none
- // id - id статьи
- // user - это данные клиента [3, "ivanov", "Иванов", "Ян", "Карлович"]
- const pubApi = require("./loadArticle");
- module.exports = async (id, user) => {
- try {
- // Запрос действительно от редактора?
- 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";
- if (!roles[0]) return "none";
-
- // Есть ли такая статья и не опубликована ли она уже?
- let res = await dbFind("articles", {_id: id});
- if (!res.length) return "none";
- if (res[0].status == 7) return "none";
- let title = res[0].head,
- fio = res[0].author,
- eml = res[0].eml;
-
- // Генерируем html
- let html = await pubApi(id, user);
- if (html == "none") return "none";
- const reg = new RegExp(`\\?draft_${id}\\/`, "g");
- html = html.replace(reg, '');
- // Перемещаем статью из черновиков в pub
- await fs.promises.rename(
- __dirname + "/../draft/" + id,
- __dirname + "/../www/pub/" + id
- );
- await fs.promises.writeFile(
- __dirname + "/../www/pub/" + id + "/index.html", html
- );
- // Удаляем лишние файлы
- await fs.promises.rm(__dirname + "/../www/pub/" + id + "/article.txt");
- try {
- await fs.promises.rm(
- __dirname + "/../www/pub/" + id + "/editor.txt");
- } catch(e) {;}
- try {
- await fs.promises.rm(
- __dirname + "/../www/pub/" + id + "/reviewer.txt",
- {recursive: true}
- );
- } catch(e) {;}
- // Вносим изменения в базу
- let now = (new Date()).toISOString().split('T')[0]
- . replace(/(\d+)-(\d+)-(\d+)/, "$3.$2.$1");
- await db.articles.update(
- {_id: id}, {$set: {status: 7, dt2: now}}, {},
- );
- // Посылаем письмо автору
- await sendEml(eml, "Ваша статья опубликована",
- `Уважаемый(ая) ${fio}!\n\nВаша статья «${title}» опубликована. `
- + `Статья доступна по ссылке http://lycarch.urfu.ru/pub/${id} `
- + `Если вы (или ваши соавторы) хотите получить сертификат о `
- + `публикации, воспользуйтесь инструкцией `
- + `http://lycarch.urfu.ru/?m#cert`
- );
- return "success";
- }
- catch(e) {return "none";}
- };
|