/* 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); } ); }); } };