refactor: socket.io/admin/categories async/await
parent
6a4a9e26a2
commit
71e50bbf4e
@ -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…
Reference in New Issue