1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- /**
- * ВЫДАЧА ПОЛЕЙ НЕОПУБЛИКОВАННОЙ СТАТЬИ ДЛЯ ЗАГРУЗКИ В ФОРМУ РЕДАКТИРОВАНИЯ
- * Copyright © 2021, А.М.Гольдин. ISC license
- */
- "use strict";
- // Возвращает объект со статьей, либо "new", если статья создана,
- // но еще не загружена, либо "none" в случае ошибки
- // id - это id запрашиваемой статьи :)
- // user - это данные клиента [3, "ivanov", "Иванов", "Ян", "Карлович"]
- module.exports = async (id, user) => {
- try {
- if (!/^\w{3,20}$/.test(id)) return "none";
- // Промисификатор чтения файла
- const rFile = fl => {
- return new Promise((resolve, reject) => {
- fs.readFile(fl, (e, cnt) => {
- if (e) reject("none"); else resolve(cnt.toString());
- })
- })
- };
- // Проверяем его роль
- 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";
- // Загружаем данные статьи из базы
- let arts = await dbFind("articles", {_id: id});
- if (!arts[0]) return "none";
- let artObj = arts[0];
- if (artObj.status == 7) return "none";
- if (!artObj.status) return "new";
- artObj.coauth = Object.keys(artObj.coauth).join(' ');
- // Данные отдаем только редактору, корректору и автору
- if (!roles[0] && !roles[1] && artObj.us != user[1]) return "none";
- // Загружаем текстовый файл со статьей
- let art;
- try {art = await rFile( __dirname + `/../draft/${id}/article.txt`);}
- catch(e) {art = "¤¤";}
-
- // Формируем объект статьи
- let fileObj = {};
- [fileObj.annot, fileObj.text, fileObj.bibl] = art.split('¤');
- let res = {...artObj, ...fileObj};
- // Удаляем поле "рецензент"
- delete res.rev;
-
- return JSON.stringify(res);
- }
- catch(e) {return "none";}
- };
|