Merge pull request #480 from NuSkooler/479-nua-optional-fields
Make real name and other properties optional - pass 1
This commit is contained in:
commit
de918dd338
|
@ -9,6 +9,7 @@ This document attempts to track **major** changes and additions in ENiGMA½. For
|
||||||
* Finally, the system will search for `index.html` and `index.htm` in that order, if another suitable route cannot be established.
|
* Finally, the system will search for `index.html` and `index.htm` in that order, if another suitable route cannot be established.
|
||||||
* CombatNet has shut down, so the module (`combatnet.js`) has been removed.
|
* CombatNet has shut down, so the module (`combatnet.js`) has been removed.
|
||||||
* The Menu Flag `popParent` has been removed and `noHistory` has been updated to work as expected. In general things should "Just Work", but check your `menu.hjson` entries if you see menu stack issues.
|
* The Menu Flag `popParent` has been removed and `noHistory` has been updated to work as expected. In general things should "Just Work", but check your `menu.hjson` entries if you see menu stack issues.
|
||||||
|
* Various New User Application (NUA) properties are now optional. If you would like to reduce the information users are required, remove optional fields from NUA artwork and collect less. These properties will be stored as "" (empty). Optional properties are as follows: Real name, Birth date, Sex, Location, Affiliations (Affils), Email, and Web address.
|
||||||
* Art handling has been changed to respect the art width contained in SAUCE when present in the case where the terminal width is greater than the art width. This fixes art files that assume wrapping at 80 columns on wide (mostly new utf8) terminals.
|
* Art handling has been changed to respect the art width contained in SAUCE when present in the case where the terminal width is greater than the art width. This fixes art files that assume wrapping at 80 columns on wide (mostly new utf8) terminals.
|
||||||
|
|
||||||
## 0.0.13-beta
|
## 0.0.13-beta
|
||||||
|
|
|
@ -505,9 +505,9 @@ class Achievements {
|
||||||
getFormatObject(info) {
|
getFormatObject(info) {
|
||||||
return {
|
return {
|
||||||
userName: info.user.username,
|
userName: info.user.username,
|
||||||
userRealName: info.user.properties[UserProps.RealName],
|
userRealName: info.user.realName(false) || 'N/A',
|
||||||
userLocation: info.user.properties[UserProps.Location],
|
userLocation: info.user.properties[UserProps.Location] || 'N/A',
|
||||||
userAffils: info.user.properties[UserProps.Affiliations],
|
userAffils: info.user.properties[UserProps.Affiliations] || 'N/A',
|
||||||
nodeId: info.client.node,
|
nodeId: info.client.node,
|
||||||
title: info.details.title,
|
title: info.details.title,
|
||||||
//text : info.global ? info.details.globalText : info.details.text,
|
//text : info.global ? info.details.globalText : info.details.text,
|
||||||
|
|
|
@ -87,7 +87,7 @@ function getActiveConnectionList(
|
||||||
//
|
//
|
||||||
entry.text = ac.user?.username || 'N/A';
|
entry.text = ac.user?.username || 'N/A';
|
||||||
entry.userName = ac.user?.username || 'N/A';
|
entry.userName = ac.user?.username || 'N/A';
|
||||||
entry.realName = ac.user?.getProperty(UserProps.RealName) || 'N/A';
|
entry.realName = ac.user?.realName(false) || 'N/A';
|
||||||
entry.location = ac.user?.getProperty(UserProps.Location) || 'N/A';
|
entry.location = ac.user?.getProperty(UserProps.Location) || 'N/A';
|
||||||
entry.affils = entry.affiliation =
|
entry.affils = entry.affiliation =
|
||||||
ac.user?.getProperty(UserProps.Affiliations) || 'N/A';
|
ac.user?.getProperty(UserProps.Affiliations) || 'N/A';
|
||||||
|
|
|
@ -982,11 +982,7 @@ exports.FullScreenEditorModule =
|
||||||
const area = getMessageAreaByTag(self.messageAreaTag);
|
const area = getMessageAreaByTag(self.messageAreaTag);
|
||||||
if (fromView !== undefined) {
|
if (fromView !== undefined) {
|
||||||
if (area && area.realNames) {
|
if (area && area.realNames) {
|
||||||
fromView.setText(
|
fromView.setText(self.client.user.realName());
|
||||||
self.client.user.properties[
|
|
||||||
UserProps.RealName
|
|
||||||
] || self.client.user.username
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
fromView.setText(self.client.user.username);
|
fromView.setText(self.client.user.username);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,10 +21,7 @@ exports.getModule = class MyMessagesModule extends MenuModule {
|
||||||
|
|
||||||
initSequence() {
|
initSequence() {
|
||||||
const filter = {
|
const filter = {
|
||||||
toUserName: [
|
toUserName: [this.client.user.username, this.client.user.realName()],
|
||||||
this.client.user.username,
|
|
||||||
this.client.user.getProperty(UserProps.RealName),
|
|
||||||
],
|
|
||||||
sort: 'modTimestamp',
|
sort: 'modTimestamp',
|
||||||
resultType: 'messageList',
|
resultType: 'messageList',
|
||||||
limit: 1024 * 16, // we want some sort of limit...
|
limit: 1024 * 16, // we want some sort of limit...
|
||||||
|
|
15
core/nua.js
15
core/nua.js
|
@ -13,6 +13,7 @@ const UserProps = require('./user_property.js');
|
||||||
|
|
||||||
// deps
|
// deps
|
||||||
const _ = require('lodash');
|
const _ = require('lodash');
|
||||||
|
const moment = require('moment');
|
||||||
|
|
||||||
exports.moduleInfo = {
|
exports.moduleInfo = {
|
||||||
name: 'NUA',
|
name: 'NUA',
|
||||||
|
@ -95,15 +96,15 @@ exports.getModule = class NewUserAppModule extends MenuModule {
|
||||||
areaTag = areaTag || '';
|
areaTag = areaTag || '';
|
||||||
|
|
||||||
newUser.properties = {
|
newUser.properties = {
|
||||||
[UserProps.RealName]: formData.value.realName,
|
[UserProps.RealName]: formData.value.realName || '',
|
||||||
[UserProps.Birthdate]: getISOTimestampString(
|
[UserProps.Birthdate]: getISOTimestampString(
|
||||||
formData.value.birthdate
|
formData.value.birthdate || moment()
|
||||||
),
|
),
|
||||||
[UserProps.Sex]: formData.value.sex,
|
[UserProps.Sex]: formData.value.sex || '',
|
||||||
[UserProps.Location]: formData.value.location,
|
[UserProps.Location]: formData.value.location || '',
|
||||||
[UserProps.Affiliations]: formData.value.affils,
|
[UserProps.Affiliations]: formData.value.affils || '',
|
||||||
[UserProps.EmailAddress]: formData.value.email,
|
[UserProps.EmailAddress]: formData.value.email || '',
|
||||||
[UserProps.WebAddress]: formData.value.web,
|
[UserProps.WebAddress]: formData.value.web || '',
|
||||||
[UserProps.AccountCreated]: getISOTimestampString(),
|
[UserProps.AccountCreated]: getISOTimestampString(),
|
||||||
|
|
||||||
[UserProps.MessageConfTag]: confTag,
|
[UserProps.MessageConfTag]: confTag,
|
||||||
|
|
21
core/user.js
21
core/user.js
|
@ -124,12 +124,29 @@ module.exports = class User {
|
||||||
return isMember;
|
return isMember;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
realName(withUsernameFallback = true) {
|
||||||
|
const realName = this.getProperty(UserProps.RealName);
|
||||||
|
if (realName) {
|
||||||
|
return realName;
|
||||||
|
}
|
||||||
|
if (withUsernameFallback) {
|
||||||
|
return this.username;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
getSanitizedName(type = 'username') {
|
getSanitizedName(type = 'username') {
|
||||||
const name =
|
const name = 'real' === type ? this.realName(true) : this.username;
|
||||||
'real' === type ? this.getProperty(UserProps.RealName) : this.username;
|
|
||||||
return sanatizeFilename(name) || `user${this.userId.toString()}`;
|
return sanatizeFilename(name) || `user${this.userId.toString()}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
emailAddress() {
|
||||||
|
const email = this.getProperty(UserProps.EmailAddress);
|
||||||
|
if (email) {
|
||||||
|
const realName = this.realName(false);
|
||||||
|
return realName ? `${realName} <${email}>` : email;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
isAvailable() {
|
isAvailable() {
|
||||||
return (this.statusFlags & User.StatusFlags.NotAvailable) == 0;
|
return (this.statusFlags & User.StatusFlags.NotAvailable) == 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -93,9 +93,7 @@ module.exports = class User2FA_OTPWebRegister {
|
||||||
}
|
}
|
||||||
|
|
||||||
const message = {
|
const message = {
|
||||||
to: `${
|
to: user.emailAddress(),
|
||||||
user.getProperty(UserProps.RealName) || user.username
|
|
||||||
} <${user.getProperty(UserProps.EmailAddress)}>`,
|
|
||||||
// from will be filled in
|
// from will be filled in
|
||||||
subject: '2-Factor Authentication Registration',
|
subject: '2-Factor Authentication Registration',
|
||||||
text: textTemplate,
|
text: textTemplate,
|
||||||
|
|
|
@ -115,15 +115,15 @@ exports.getModule = class UserConfigModule extends MenuModule {
|
||||||
formData = _.clone(formData);
|
formData = _.clone(formData);
|
||||||
|
|
||||||
const newProperties = {
|
const newProperties = {
|
||||||
[UserProps.RealName]: formData.value.realName,
|
[UserProps.RealName]: formData.value.realName || '',
|
||||||
[UserProps.Birthdate]: getISOTimestampString(
|
[UserProps.Birthdate]: getISOTimestampString(
|
||||||
formData.value.birthdate
|
formData.value.birthdate || moment()
|
||||||
),
|
),
|
||||||
[UserProps.Sex]: formData.value.sex,
|
[UserProps.Sex]: formData.value.sex || '',
|
||||||
[UserProps.Location]: formData.value.location,
|
[UserProps.Location]: formData.value.location || '',
|
||||||
[UserProps.Affiliations]: formData.value.affils,
|
[UserProps.Affiliations]: formData.value.affils || '',
|
||||||
[UserProps.EmailAddress]: formData.value.email,
|
[UserProps.EmailAddress]: formData.value.email || '',
|
||||||
[UserProps.WebAddress]: formData.value.web,
|
[UserProps.WebAddress]: formData.value.web || '',
|
||||||
[UserProps.TermHeight]: formData.value.termHeight.toString(),
|
[UserProps.TermHeight]: formData.value.termHeight.toString(),
|
||||||
[UserProps.ThemeId]:
|
[UserProps.ThemeId]:
|
||||||
self.availThemeInfo[formData.value.theme].themeId,
|
self.availThemeInfo[formData.value.theme].themeId,
|
||||||
|
@ -233,11 +233,7 @@ exports.getModule = class UserConfigModule extends MenuModule {
|
||||||
function populateViews(callback) {
|
function populateViews(callback) {
|
||||||
const user = self.client.user;
|
const user = self.client.user;
|
||||||
|
|
||||||
self.setViewText(
|
self.setViewText('menu', MciCodeIds.RealName, user.realName(false) || '');
|
||||||
'menu',
|
|
||||||
MciCodeIds.RealName,
|
|
||||||
user.properties[UserProps.RealName]
|
|
||||||
);
|
|
||||||
self.setViewText(
|
self.setViewText(
|
||||||
'menu',
|
'menu',
|
||||||
MciCodeIds.BirthDate,
|
MciCodeIds.BirthDate,
|
||||||
|
|
|
@ -143,9 +143,7 @@ class WebPasswordReset {
|
||||||
}
|
}
|
||||||
|
|
||||||
const message = {
|
const message = {
|
||||||
to: `${user.properties[UserProps.RealName] || user.username} <${
|
to: user.emailAddress(),
|
||||||
user.properties[UserProps.EmailAddress]
|
|
||||||
}>`,
|
|
||||||
// from will be filled in
|
// from will be filled in
|
||||||
subject: 'Forgot Password',
|
subject: 'Forgot Password',
|
||||||
text: textTemplate,
|
text: textTemplate,
|
||||||
|
|
|
@ -506,9 +506,7 @@ exports.getModule = class WaitingForCallerModule extends MenuModule {
|
||||||
|
|
||||||
// Current
|
// Current
|
||||||
currentUserName: this.client.user.username,
|
currentUserName: this.client.user.username,
|
||||||
currentUserRealName:
|
currentUserRealName: this.client.user.realName(false) || 'N/A',
|
||||||
this.client.user.getProperty(UserProps.RealName) ||
|
|
||||||
this.client.user.username,
|
|
||||||
availIndicator: availIndicator,
|
availIndicator: availIndicator,
|
||||||
visIndicator: visIndicator,
|
visIndicator: visIndicator,
|
||||||
lastLoginUserName: lastLoginStats.userName,
|
lastLoginUserName: lastLoginStats.userName,
|
||||||
|
|
Loading…
Reference in New Issue