enigma-bbs/core/user_list.js

86 lines
3.0 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);
}
);
});
}
};