refactor: socket.io/admin/categories async/await

v1.18.x
Baris Usakli 6 years ago
parent 6a4a9e26a2
commit 71e50bbf4e

@ -1,17 +1,17 @@
'use strict'; 'use strict';
var async = require('async'); const async = require('async');
var db = require('../database'); const db = require('../database');
var meta = require('../meta'); const meta = require('../meta');
var utils = require('../utils'); const utils = require('../utils');
var translator = require('../translator'); const translator = require('../translator');
var plugins = require('../plugins'); const plugins = require('../plugins');
var cache = require('../cache'); const cache = require('../cache');
module.exports = function (Categories) { module.exports = function (Categories) {
Categories.update = async function (modified) { Categories.update = async function (modified) {
var cids = Object.keys(modified); const cids = Object.keys(modified);
await Promise.all(cids.map(cid => updateCategory(cid, modified[cid]))); await Promise.all(cids.map(cid => updateCategory(cid, modified[cid])));
return cids; return cids;
}; };

@ -1,152 +1,111 @@
'use strict'; 'use strict';
var async = require('async'); const groups = require('../../groups');
const categories = require('../../categories');
const privileges = require('../../privileges');
const plugins = require('../../plugins');
const events = require('../../events');
var groups = require('../../groups'); const Categories = module.exports;
var categories = require('../../categories');
var privileges = require('../../privileges');
var plugins = require('../../plugins');
var events = require('../../events');
var Categories = module.exports; Categories.create = async function (socket, data) {
Categories.create = function (socket, data, callback) {
if (!data) { if (!data) {
return callback(new Error('[[error:invalid-data]]')); throw new Error('[[error:invalid-data]]');
} }
categories.create(data, callback); return await categories.create(data);
}; };
Categories.getAll = function (socket, data, callback) { Categories.getAll = async function () {
async.waterfall([ const cids = await categories.getAllCidsFromSet('categories:cid');
async.apply(categories.getAllCidsFromSet, 'categories:cid'), const categoriesData = await categories.getCategoriesData(cids);
async.apply(categories.getCategoriesData), const result = await plugins.fireHook('filter:admin.categories.get', { categories: categoriesData });
function (categories, next) { return categories.getTree(result.categories, 0);
// Hook changes, there is no req, and res
plugins.fireHook('filter:admin.categories.get', { categories: categories }, next);
},
function (result, next) {
next(null, categories.getTree(result.categories, 0));
},
], callback);
}; };
Categories.getNames = function (socket, data, callback) { Categories.getNames = async function () {
categories.getAllCategoryFields(['cid', 'name'], callback); return await categories.getAllCategoryFields(['cid', 'name']);
}; };
Categories.purge = function (socket, cid, callback) { Categories.purge = async function (socket, cid) {
var name; const name = await categories.getCategoryField(cid, 'name');
async.waterfall([ await categories.purge(cid, socket.uid);
function (next) { await events.log({
categories.getCategoryField(cid, 'name', next); type: 'category-purge',
}, uid: socket.uid,
function (_name, next) { ip: socket.ip,
name = _name; cid: cid,
categories.purge(cid, socket.uid, next); name: name,
}, });
function (next) {
events.log({
type: 'category-purge',
uid: socket.uid,
ip: socket.ip,
cid: cid,
name: name,
});
setImmediate(next);
},
], callback);
}; };
Categories.update = function (socket, data, callback) { Categories.update = async function (socket, data) {
if (!data) { if (!data) {
return callback(new Error('[[error:invalid-data]]')); throw new Error('[[error:invalid-data]]');
} }
categories.update(data, callback); return await categories.update(data);
}; };
Categories.setPrivilege = function (socket, data, callback) { Categories.setPrivilege = async function (socket, data) {
if (!data) { if (!data) {
return callback(new Error('[[error:invalid-data]]')); throw new Error('[[error:invalid-data]]');
} }
if (Array.isArray(data.privilege)) { if (Array.isArray(data.privilege)) {
async.each(data.privilege, function (privilege, next) { await Promise.all(data.privilege.map(privilege => groups[data.set ? 'join' : 'leave']('cid:' + data.cid + ':privileges:' + privilege, data.member)));
groups[data.set ? 'join' : 'leave']('cid:' + data.cid + ':privileges:' + privilege, data.member, next);
}, onSetComplete);
} else { } else {
groups[data.set ? 'join' : 'leave']('cid:' + data.cid + ':privileges:' + data.privilege, data.member, onSetComplete); await groups[data.set ? 'join' : 'leave']('cid:' + data.cid + ':privileges:' + data.privilege, data.member);
} }
function onSetComplete() { await events.log({
events.log({ uid: socket.uid,
uid: socket.uid, type: 'privilege-change',
type: 'privilege-change', ip: socket.ip,
ip: socket.ip, privilege: data.privilege.toString(),
privilege: data.privilege.toString(), cid: data.cid,
cid: data.cid, action: data.set ? 'grant' : 'rescind',
action: data.set ? 'grant' : 'rescind', target: data.member,
target: data.member, });
}, callback);
}
}; };
Categories.getPrivilegeSettings = function (socket, cid, callback) { Categories.getPrivilegeSettings = async function (socket, cid) {
if (!parseInt(cid, 10)) { if (!parseInt(cid, 10)) {
privileges.global.list(callback); return await privileges.global.list();
} else {
privileges.categories.list(cid, callback);
} }
return await privileges.categories.list(cid);
}; };
Categories.copyPrivilegesToChildren = function (socket, data, callback) { Categories.copyPrivilegesToChildren = async function (socket, data) {
async.waterfall([ const result = await categories.getChildren([data.cid], socket.uid);
function (next) { const children = result[0];
categories.getChildren([data.cid], socket.uid, next); for (const child of children) {
}, // eslint-disable-next-line no-await-in-loop
function (children, next) { await copyPrivilegesToChildrenRecursive(data.cid, child, data.group);
children = children[0]; }
async.eachSeries(children, function (child, next) {
copyPrivilegesToChildrenRecursive(data.cid, child, data.group, next);
}, next);
},
], callback);
}; };
function copyPrivilegesToChildrenRecursive(parentCid, category, group, callback) { async function copyPrivilegesToChildrenRecursive(parentCid, category, group) {
async.waterfall([ await categories.copyPrivilegesFrom(parentCid, category.cid, group);
function (next) { for (const child of category.children) {
categories.copyPrivilegesFrom(parentCid, category.cid, group, next); // eslint-disable-next-line no-await-in-loop
}, await copyPrivilegesToChildrenRecursive(parentCid, child, group);
function (next) { }
async.eachSeries(category.children, function (child, next) {
copyPrivilegesToChildrenRecursive(parentCid, child, group, next);
}, next);
},
], callback);
} }
Categories.copySettingsFrom = function (socket, data, callback) { Categories.copySettingsFrom = async function (socket, data) {
categories.copySettingsFrom(data.fromCid, data.toCid, data.copyParent, callback); return await categories.copySettingsFrom(data.fromCid, data.toCid, data.copyParent);
}; };
Categories.copyPrivilegesFrom = function (socket, data, callback) { Categories.copyPrivilegesFrom = async function (socket, data) {
categories.copyPrivilegesFrom(data.fromCid, data.toCid, data.group, callback); await categories.copyPrivilegesFrom(data.fromCid, data.toCid, data.group);
}; };
Categories.copyPrivilegesToAllCategories = function (socket, data, callback) { Categories.copyPrivilegesToAllCategories = async function (socket, data) {
async.waterfall([ let cids = await categories.getAllCidsFromSet('categories:cid');
function (next) { cids = cids.filter(cid => parseInt(cid, 10) !== parseInt(data.cid, 10));
categories.getAllCidsFromSet('categories:cid', next); for (const toCid of cids) {
}, // eslint-disable-next-line no-await-in-loop
function (cids, next) { await categories.copyPrivilegesFrom(data.cid, toCid, data.group);
cids = cids.filter(cid => parseInt(cid, 10) !== parseInt(data.cid, 10)); }
async.eachSeries(cids, function (toCid, next) {
categories.copyPrivilegesFrom(data.cid, toCid, data.group, next);
}, next);
},
], callback);
}; };

Loading…
Cancel
Save