Browse Source

implemented user profile badges

pull/1/head
Rob Colbert 3 years ago
parent
commit
8f1d14b185
  1. 14
      app/models/core-user.js
  2. 14
      app/models/user.js
  3. 7
      app/services/core-node.js
  4. 7
      app/services/user.js
  5. 5
      app/views/admin/core-user/form.pug
  6. 5
      app/views/admin/user/form.pug
  7. 18
      app/views/user/profile.pug

14
app/models/core-user.js

@ -7,8 +7,17 @@
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const { ResourceStats, ResourceStatsDefaults } = require('./lib/resource-stats');
const { DTP_THEME_LIST, UserFlagsSchema, UserPermissionsSchema, UserOptInSchema } = require('./lib/user-types');
const {
ResourceStats,
ResourceStatsDefaults,
} = require('./lib/resource-stats');
const {
DTP_THEME_LIST,
UserFlagsSchema,
UserPermissionsSchema,
UserOptInSchema,
} = require('./lib/user-types');
const CoreUserSchema = new Schema({
created: { type: Date, default: Date.now, required: true, index: -1 },
@ -19,6 +28,7 @@ const CoreUserSchema = new Schema({
username_lc: { type: String, required: true, lowercase: true, index: 1 },
displayName: { type: String },
bio: { type: String, maxlength: 300 },
badges: { type: [String] },
flags: { type: UserFlagsSchema, select: false },
permissions: { type: UserPermissionsSchema, select: false },
optIn: { type: UserOptInSchema, required: true, select: false },

14
app/models/user.js

@ -8,8 +8,17 @@ const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const { ResourceStats, ResourceStatsDefaults } = require('./lib/resource-stats');
const { DTP_THEME_LIST, UserFlagsSchema, UserPermissionsSchema, UserOptInSchema } = require('./lib/user-types');
const {
ResourceStats,
ResourceStatsDefaults,
} = require('./lib/resource-stats');
const {
DTP_THEME_LIST,
UserFlagsSchema,
UserPermissionsSchema,
UserOptInSchema,
} = require('./lib/user-types');
const UserSchema = new Schema({
created: { type: Date, default: Date.now, required: true, index: -1 },
@ -24,6 +33,7 @@ const UserSchema = new Schema({
large: { type: Schema.ObjectId, ref: 'Image' },
small: { type: Schema.ObjectId, ref: 'Image' },
},
badges: { type: [String] },
flags: { type: UserFlagsSchema, select: false },
permissions: { type: UserPermissionsSchema, select: false },
optIn: { type: UserOptInSchema, required: true, select: false },

7
app/services/core-node.js

@ -485,6 +485,12 @@ class CoreNodeService extends SiteService {
settings.username = striptags(settings.username.trim());
settings.username_lc = settings.username.toLowerCase();
if (settings.badges) {
settings.badges = settings.badges.split(',').map((badge) => striptags(badge.trim()));
} else {
settings.badges = [ ];
}
await CoreUser.updateOne(
{ _id: user._id },
{
@ -495,6 +501,7 @@ class CoreNodeService extends SiteService {
username_lc: settings.username_lc,
displayName: striptags(settings.displayName.trim()),
bio: striptags(settings.bio.trim()),
badges: settings.badges,
'flags.isAdmin': settings.isAdmin === 'on',
'flags.isModerator': settings.isModerator === 'on',

7
app/services/user.js

@ -222,6 +222,12 @@ class UserService extends SiteService {
userDefinition.displayName = striptags(userDefinition.displayName.trim());
if (userDefinition.badges) {
userDefinition.badges = userDefinition.badges.split(',').map((badge) => striptags(badge.trim()));
} else {
userDefinition.badges = [ ];
}
this.log.info('updating user for admin', { userDefinition });
await User.updateOne(
{ _id: user._id },
@ -231,6 +237,7 @@ class UserService extends SiteService {
username_lc,
displayName: userDefinition.displayName,
bio: striptags(userDefinition.bio.trim()),
badges: userDefinition.badges,
'flags.isAdmin': userDefinition.isAdmin === 'on',
'flags.isModerator': userDefinition.isModerator === 'on',

5
app/views/admin/core-user/form.pug

@ -60,6 +60,11 @@ block content
input(id="optin-marketing", name="optInMarketing", type="checkbox", checked= userAccount.optIn.marketing)
| Marketing
.uk-margin
label.uk-form-label Badges
input(id="badges", name="badges", type="text", placeholder="Enter badges", value= (userAccount.badges || [ ]).join(', ')).uk-input
.uk-text-small.uk-text-muted Enter badge labels separated by commas
.uk-card-footer
div(uk-grid).uk-grid-small
.uk-width-expand

5
app/views/admin/user/form.pug

@ -66,6 +66,11 @@ block content
input(id="optin-marketing", name="optInMarketing", type="checkbox", checked= userAccount.optIn.marketing)
| Marketing
.uk-margin
label.uk-form-label Badges
input(id="badges", name="badges", type="text", placeholder="Enter badges", value= (userAccount.badges || [ ]).join(', ')).uk-input
.uk-text-small.uk-text-muted Enter badge labels separated by commas
.uk-card-footer
div(uk-grid).uk-grid-small
.uk-width-expand

18
app/views/user/profile.pug

@ -7,7 +7,21 @@ block content
.uk-container
div(uk-grid)
.uk-width-auto
+renderProfileIcon(user, user.displayName || user.username, 'large')
+renderProfileIcon(userProfile, userProfile.displayName || userProfile.username, 'large')
.uk-width-expand
h1= user.displayName || user.username || user.email
h1(style="line-height: 1em;").uk-margin-remove= userProfile.displayName || userProfile.username || userProfile.email
if Array.isArray(userProfile.badges) && (userProfile.badges.length > 0)
div(uk-grid).uk-grid-small
if userProfile.flags.isAdmin
.uk-width-auto
alert.uk-label.uk-label-danger Admin
if userProfile.flags.isModerator
.uk-width-auto
alert.uk-label.uk-label-danger Moderator
each badge in userProfile.badges
.uk-width-auto
alert.uk-label= badge
p Welcome to #[+renderSiteLink()]. This app/site really doesn't do anything at all other than provide everything needed for building distributed communities of web applications that all talk to each other and share information in new and easy ways.
Loading…
Cancel
Save