enigma-bbs/core/user_list.js

104 lines
3.4 KiB
JavaScript

/* jslint node: true */
'use strict';
// ENiGMA½
const { MenuModule } = require('./menu_module.js');
const { getUserList } = require('./user.js');
const { Errors } = require('./enig_error.js');
const UserProps = require('./user_property.js');
// deps
const moment = require('moment');
const async = require('async');
const _ = require('lodash');
exports.moduleInfo = {
name: 'User List',
desc: 'Lists all system users',
author: 'NuSkooler',
};
const MciViewIds = {
userList: 1,
};
exports.getModule = class UserListModule extends MenuModule {
constructor(options) {
super(options);
}
mciReady(mciData, cb) {
super.mciReady(mciData, err => {
if (err) {
return cb(err);
}
async.series(
[
next => {
return this.prepViewController('userList', 0, mciData.menu, next);
},
next => {
const userListView = this.viewControllers.userList.getView(
MciViewIds.userList
);
if (!userListView) {
return cb(
Errors.MissingMci(
`Missing user list MCI ${MciViewIds.userList}`
)
);
}
const fetchOpts = {
properties: [
UserProps.RealName,
UserProps.Location,
UserProps.Affiliations,
UserProps.LastLoginTs,
],
propsCamelCase: true, // e.g. real_name -> realName
};
getUserList(fetchOpts, (err, userList) => {
if (err) {
return next(err);
}
const dateTimeFormat = _.get(
this,
'menuConfig.config.dateTimeFormat',
this.client.currentTheme.helpers.getDateTimeFormat(
'short'
)
);
userList = userList.map(entry => {
return Object.assign(entry, {
text: entry.userName,
affils: entry.affiliation,
lastLoginTs: moment(entry.lastLoginTimestamp).format(
dateTimeFormat
),
});
});
userListView.setItems(userList);
userListView.redraw();
return next(null);
});
},
],
err => {
if (err) {
this.client.log.error(
{ error: err.message },
'Error loading user list'
);
}
return cb(err);
}
);
});
}
};