mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-05-07 18:16:36 +02:00
Merge commit '42a5a127b6a55483c800a7f459b12fc62c63c6a5' into v4.x
This commit is contained in:
31
CHANGELOG.md
31
CHANGELOG.md
@@ -1,3 +1,34 @@
|
||||
#### v4.2.1 (2025-04-10)
|
||||
|
||||
##### Chores
|
||||
|
||||
* up harmony (d161eb6f)
|
||||
* up persona (2237e17a)
|
||||
* up persona (75f1f6fb)
|
||||
* incrementing version number - v4.2.0 (87581958)
|
||||
* update changelog for v4.2.0 (c9e0198d)
|
||||
* incrementing version number - v4.1.1 (b2afbb16)
|
||||
* incrementing version number - v4.1.0 (36c80850)
|
||||
* incrementing version number - v4.0.6 (4a52fb2e)
|
||||
* incrementing version number - v4.0.5 (1792a62b)
|
||||
* incrementing version number - v4.0.4 (b1125cce)
|
||||
* incrementing version number - v4.0.3 (2b65c735)
|
||||
* incrementing version number - v4.0.2 (73fe5fcf)
|
||||
* incrementing version number - v4.0.1 (a461b758)
|
||||
* incrementing version number - v4.0.0 (c1eaee45)
|
||||
|
||||
##### Bug Fixes
|
||||
|
||||
* closes #13317, fix email confirm for changing email (33d50637)
|
||||
* check if latestversion is valid before using semver.gt (6fe066ce)
|
||||
* closes #13256, allow keyboard access to icon colors (c6620170)
|
||||
|
||||
##### Refactors
|
||||
|
||||
* get rid of async.parallel (e722e869)
|
||||
* remove pointless true (747457d7)
|
||||
* make register intro heading (c258f597)
|
||||
|
||||
#### v4.2.0 (2025-03-19)
|
||||
|
||||
##### Chores
|
||||
|
||||
@@ -31,6 +31,8 @@ define('forum/topic/delete-posts', [
|
||||
postSelect.init(function () {
|
||||
checkButtonEnable();
|
||||
showPostsSelected();
|
||||
}, {
|
||||
allowMainPostSelect: true,
|
||||
});
|
||||
showPostsSelected();
|
||||
|
||||
|
||||
@@ -151,7 +151,15 @@ module.exports = function (Categories) {
|
||||
}
|
||||
|
||||
async function generateHandle(slug) {
|
||||
let taken = await meta.slugTaken(slug);
|
||||
let taken;
|
||||
try {
|
||||
taken = await meta.slugTaken(slug);
|
||||
} catch (e) {
|
||||
// invalid slug passed in
|
||||
slug = 'category';
|
||||
taken = true;
|
||||
}
|
||||
|
||||
let suffix;
|
||||
while (taken) {
|
||||
suffix = utils.generateUUID().slice(0, 8);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
'use strict';
|
||||
|
||||
const validator = require('validator');
|
||||
const _ = require('lodash');
|
||||
const nconf = require('nconf');
|
||||
const db = require('../database');
|
||||
@@ -107,7 +108,13 @@ function renderUser(event) {
|
||||
if (!event.user || event.user.system) {
|
||||
return '[[global:system-user]]';
|
||||
}
|
||||
return `${helpers.buildAvatar(event.user, '16px', true)} <a href="${relative_path}/user/${event.user.userslug}">${event.user.displayname}</a>`;
|
||||
|
||||
const user = {
|
||||
...event.user,
|
||||
displayname: validator.escape(String(event.user.displayname)),
|
||||
};
|
||||
|
||||
return `${helpers.buildAvatar(user, '16px', true)} <a href="${relative_path}/user/${user.userslug}">${user.displayname}</a>`;
|
||||
}
|
||||
|
||||
function renderTimeago(event) {
|
||||
|
||||
@@ -58,11 +58,8 @@ module.exports = function (User) {
|
||||
]);
|
||||
}
|
||||
|
||||
const [followingCount, followingRemoteCount, followerCount, followerRemoteCount] = await Promise.all([
|
||||
db.sortedSetCard(`following:${uid}`),
|
||||
db.sortedSetCard(`followingRemote:${uid}`),
|
||||
db.sortedSetCard(`followers:${theiruid}`),
|
||||
db.sortedSetCard(`followersRemote:${theiruid}`),
|
||||
const [followingCount, followingRemoteCount, followerCount, followerRemoteCount] = await db.sortedSetsCard([
|
||||
`following:${uid}`, `followingRemote:${uid}`, `followers:${theiruid}`, `followersRemote:${theiruid}`,
|
||||
]);
|
||||
await Promise.all([
|
||||
User.setUserField(uid, 'followingCount', followingCount + followingRemoteCount),
|
||||
|
||||
Reference in New Issue
Block a user