@ikb42 I'm sorry, I didn't see your post sooner.
No, I didn't write a plugin. I tried, really, really hard, but I just can't understand how a plugin works on NodeBB. Sorry.
@ikb42 I'm sorry, I didn't see your post sooner.
No, I didn't write a plugin. I tried, really, really hard, but I just can't understand how a plugin works on NodeBB. Sorry.
@Topper Sorry, finally I figured out how to look at the database ! I just switched to PostgreSQL and used Beekeeper to actually see it. Thanks !
Multiple fields, but yeah it could be a solution. I'm gonna look into that, thank you !
Sorry, I'm still trying to do this and since I saw many topics on the subject, I thought I'd share my process, even if I think I'm not qualified to do this - maybe it'll help someone some day.
I found in src\user\data.js
:
User.setUserField = async function (uid, field, value) {
await User.setUserFields(uid, { [field]: value });
};
User.setUserFields = async function (uid, data) {
await db.setObject(`user:${uid}`, data);
for (const [field, value] of Object.entries(data)) {
plugins.hooks.fire('action:user.set', { uid, field, value, type: 'set' });
}
};
src\user\profile.js
:
User.updateProfile = async function (uid, data, extraFields) {
let fields = [
'username', 'email', 'fullname', 'website', 'location',
'groupTitle', 'birthday', 'signature', 'aboutme',
];
if (Array.isArray(extraFields)) {
fields = _.uniq(fields.concat(extraFields));
}
if (!data.uid) {
throw new Error('[[error:invalid-update-uid]]');
}
const updateUid = data.uid;
const result = await plugins.hooks.fire('filter:user.updateProfile', {
uid: uid,
data: data,
fields: fields,
});
fields = result.fields;
data = result.data;
await validateData(uid, data);
const oldData = await User.getUserFields(updateUid, fields);
const updateData = {};
await Promise.all(fields.map(async (field) => {
if (!(data[field] !== undefined && typeof data[field] === 'string')) {
return;
}
data[field] = data[field].trim();
if (field === 'email') {
return await updateEmail(updateUid, data.email);
} else if (field === 'username') {
return await updateUsername(updateUid, data.username);
} else if (field === 'fullname') {
return await updateFullname(updateUid, data.fullname);
}
updateData[field] = data[field];
}));
if (Object.keys(updateData).length) {
await User.setUserFields(updateUid, updateData);
}
plugins.hooks.fire('action:user.updateProfile', {
uid: uid,
data: data,
fields: fields,
oldData: oldData,
});
return await User.getUserFields(updateUid, [
'email', 'username', 'userslug',
'picture', 'icon:text', 'icon:bgColor',
]);
};
I've also tried to read three plugins that were interesting to me, see how they did it : Cash mod, OpenFantasy & Custom Fields. But eventhough I tried a lot I haven't been able to reproduce anything they did in the quickstart plugin. Even my console.log("hello world")
wasn't working, hahah. They're not working either anyway...
I know it's not good to edit core files, but I'm really getting frustrated. If I can't add custom fields, I can't use NodeBB and I'll be back on Forumotion, which is a pain in the ass.
I thought of creating another table which would have all the custom fields and a column that would get the UID of the user those fields are related to. But I was having such a hard time finding how to show tables in MongoDB, especially user tables and switched to PostgreSQL, only to find out there isn't any user table, just data stored in a row...
So yeah, is there anyone to give me like hints on how I could do that ? I know I have to do a plugin, but I just don't know where to start and I can't seem to replicate what others did before.
Thanks
@Topper said in Can I see nodeBB database in MongoDBCompass?:
should the database nodebb be visible in MongoDBCompass? It is not under the localhost adress
Hi !
Saw this thread on Google while searching for the same thing.
Did you find an answer ?
Thank you !
@julian Sorry, just to be clear : you're writing a Developer FAQ on how to add custom fields or ... ? sorry I'm just making sure I understood right.
I'd love to write a plugin but even with the quickstart plugin, I really don't know where to start on how I could achieve custom fields
Okay so I dug a little and was searching for something like an User model to edit so I can add my custom fields, but I seem to be unable to find it. I saw a whitelist for fields, but that's all ...
Does anyone know where to start at least ? Even if it's not on the ACP & a whole plugin, it's not that big deal if I can edit the files myself.
Oh I actually already made an issue on github, he said that the plugin was very likely to be incompatible with my NodeBB version (2.8.6).
Hi !
I just switched from phpBB to nodeBB.
I must say as a disclaimer that I'm a front-end dev with little to no experience on consoles, using Node.js, error logs, etc etc - and english isn't my first language. Please talk to me as though I am 5.
I need to add custom fields to users profile because I'm building a textual RPG on forum. I found a plugin, nodebb-plugin-ns-custom-fields, but it seems like it's not compatible with the latest NodeBB version.
If I'm not mistaken, it's not possible to add any custom fields directly on the ACP without any plugin : is that right ?
If so, does someone have any hint on how I could achieve that ?
Thank you !