mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-03-06 20:41:17 +01:00
Merge commit 'ef8f8db7bd91f8f0988a2dbe57a5141ade806c11' into v3.x
This commit is contained in:
44
CHANGELOG.md
44
CHANGELOG.md
@@ -1,3 +1,47 @@
|
||||
#### v3.6.1 (2023-12-22)
|
||||
|
||||
##### Chores
|
||||
|
||||
* incrementing version number - v3.6.0 (4cdf85f8)
|
||||
* update changelog for v3.6.0 (eb92cee6)
|
||||
* incrementing version number - v3.5.3 (ed0e8783)
|
||||
* incrementing version number - v3.5.2 (52fbb2da)
|
||||
* incrementing version number - v3.5.1 (4c543488)
|
||||
* incrementing version number - v3.5.0 (d06fb4f0)
|
||||
* incrementing version number - v3.4.3 (5c984250)
|
||||
* incrementing version number - v3.4.2 (3f0dac38)
|
||||
* incrementing version number - v3.4.1 (01e69574)
|
||||
* incrementing version number - v3.4.0 (fd9247c5)
|
||||
* incrementing version number - v3.3.9 (5805e770)
|
||||
* incrementing version number - v3.3.8 (a5603565)
|
||||
* incrementing version number - v3.3.7 (b26f1744)
|
||||
* incrementing version number - v3.3.6 (7fb38792)
|
||||
* incrementing version number - v3.3.4 (a67f84ea)
|
||||
* incrementing version number - v3.3.3 (f94d239b)
|
||||
* incrementing version number - v3.3.2 (ec9dac97)
|
||||
* incrementing version number - v3.3.1 (151cc68f)
|
||||
* incrementing version number - v3.3.0 (fc1ad70f)
|
||||
* incrementing version number - v3.2.3 (b06d3e63)
|
||||
* incrementing version number - v3.2.2 (758ecfcd)
|
||||
* incrementing version number - v3.2.1 (20145074)
|
||||
* incrementing version number - v3.2.0 (9ecac38e)
|
||||
* incrementing version number - v3.1.7 (0b4e81ab)
|
||||
* incrementing version number - v3.1.6 (b3a3b130)
|
||||
* incrementing version number - v3.1.5 (ec19343a)
|
||||
* incrementing version number - v3.1.4 (2452783c)
|
||||
* incrementing version number - v3.1.3 (3b4e9d3f)
|
||||
* incrementing version number - v3.1.2 (40fa3489)
|
||||
* incrementing version number - v3.1.1 (40250733)
|
||||
* incrementing version number - v3.1.0 (0cb386bd)
|
||||
* incrementing version number - v3.0.1 (26f6ea49)
|
||||
* incrementing version number - v3.0.0 (224e08cd)
|
||||
|
||||
##### Bug Fixes
|
||||
|
||||
* #12243, don' set process.env.config if it doesnt exist (788404c1)
|
||||
* lang key for move notification closes #12241 (48a2b5f7)
|
||||
* dont send topic notification to poster (e72b26f5)
|
||||
|
||||
#### v3.6.0 (2023-12-20)
|
||||
|
||||
##### Chores
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
"multiparty": "4.2.3",
|
||||
"nconf": "0.12.1",
|
||||
"nodebb-plugin-2factor": "7.4.0",
|
||||
"nodebb-plugin-composer-default": "10.2.29",
|
||||
"nodebb-plugin-composer-default": "10.2.31",
|
||||
"nodebb-plugin-dbsearch": "6.2.3",
|
||||
"nodebb-plugin-emoji": "5.1.13",
|
||||
"nodebb-plugin-emoji-android": "4.0.0",
|
||||
@@ -103,10 +103,10 @@
|
||||
"nodebb-plugin-ntfy": "1.7.3",
|
||||
"nodebb-plugin-spam-be-gone": "2.2.0",
|
||||
"nodebb-rewards-essentials": "1.0.0",
|
||||
"nodebb-theme-harmony": "1.1.105",
|
||||
"nodebb-theme-lavender": "7.1.5",
|
||||
"nodebb-theme-peace": "2.1.25",
|
||||
"nodebb-theme-persona": "13.2.49",
|
||||
"nodebb-theme-harmony": "1.1.108",
|
||||
"nodebb-theme-lavender": "7.1.7",
|
||||
"nodebb-theme-peace": "2.1.26",
|
||||
"nodebb-theme-persona": "13.2.50",
|
||||
"nodebb-widget-essentials": "7.0.14",
|
||||
"nodemailer": "6.9.7",
|
||||
"nprogress": "0.2.0",
|
||||
|
||||
@@ -127,7 +127,6 @@ define('forum/category', [
|
||||
hooks.fire('action:topics.loading');
|
||||
const params = utils.params();
|
||||
infinitescroll.loadMore(`/categories/${ajaxify.data.cid}/topics`, {
|
||||
cid: ajaxify.data.cid,
|
||||
after: after,
|
||||
direction: direction,
|
||||
query: params,
|
||||
|
||||
@@ -35,7 +35,7 @@ define('forum/chats/recent', ['alerts', 'api', 'chat'], function (alerts, api, c
|
||||
return;
|
||||
}
|
||||
recentChats.attr('loading', 1);
|
||||
app.get(`/chats`, {
|
||||
api.get(`/chats`, {
|
||||
uid: ajaxify.data.uid,
|
||||
after: recentChats.attr('data-nextstart'),
|
||||
}).then(({ rooms, nextStart }) => {
|
||||
|
||||
@@ -10,7 +10,8 @@ define('forum/topic/events', [
|
||||
'components',
|
||||
'translator',
|
||||
'hooks',
|
||||
], function (postTools, threadTools, posts, images, components, translator, hooks) {
|
||||
'helpers',
|
||||
], function (postTools, threadTools, posts, images, components, translator, hooks, helpers) {
|
||||
const Events = {};
|
||||
|
||||
const events = {
|
||||
@@ -152,7 +153,7 @@ define('forum/topic/events', [
|
||||
editorEl.replaceWith(html);
|
||||
postContainer.find('[component="post/edit-indicator"]')
|
||||
.removeClass('hidden')
|
||||
.translateAttr('title', `[[global:edited-timestamp, ${editData.editedISO}]]`);
|
||||
.translateAttr('title', `[[global:edited-timestamp, ${helpers.isoTimeToLocaleString(editData.editedISO, config.userLang)}]]`);
|
||||
postContainer.find('[component="post/editor"] .timeago').timeago();
|
||||
hooks.fire('action:posts.edited', data);
|
||||
});
|
||||
|
||||
@@ -12,8 +12,8 @@ define('sort', ['components'], function (components) {
|
||||
currentSetting.find('i').addClass('fa-check');
|
||||
|
||||
$('body')
|
||||
.off('click', '[component="thread/sort"] a')
|
||||
.on('click', '[component="thread/sort"] a', function () {
|
||||
.off('click', '[component="thread/sort"] a[data-sort]')
|
||||
.on('click', '[component="thread/sort"] a[data-sort]', function () {
|
||||
const newSetting = $(this).attr('data-sort');
|
||||
const urlParams = utils.params();
|
||||
urlParams.sort = newSetting;
|
||||
|
||||
@@ -128,7 +128,7 @@ categoriesAPI.getTopics = async (caller, data) => {
|
||||
|
||||
let start = Math.max(0, parseInt(data.after || 0, 10));
|
||||
|
||||
if (data.direction === -1) {
|
||||
if (parseInt(data.direction, 10) === -1) {
|
||||
start -= infScrollTopicsPerPage;
|
||||
}
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ module.exports = function (SocketTopics) {
|
||||
parseInt(data.count, 10) || meta.config.postsPerPage || 20
|
||||
));
|
||||
|
||||
if (data.direction === -1) {
|
||||
if (parseInt(data.direction, 10) === -1) {
|
||||
start -= infScrollPostsPerPage;
|
||||
}
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ module.exports = function (Topics) {
|
||||
tids = await Topics.filterWatchedTids(tids, params.uid);
|
||||
}
|
||||
} else if (params.filter === 'watched') {
|
||||
tids = await db.getSortedSetRevRange(`uid:${params.uid}:followed_tids`, 0, -1);
|
||||
tids = await getWatchedTopics(params);
|
||||
} else if (params.cids) {
|
||||
tids = await getCidTids(params);
|
||||
} else if (params.tags.length) {
|
||||
@@ -63,6 +63,17 @@ module.exports = function (Topics) {
|
||||
return tids;
|
||||
}
|
||||
|
||||
async function getWatchedTopics(params) {
|
||||
const sortSet = ['recent', 'old'].includes(params.sort) ? 'topics:recent' : `topics:${params.sort}`;
|
||||
const method = params.sort === 'old' ? 'getSortedSetIntersect' : 'getSortedSetRevIntersect';
|
||||
return await db[method]({
|
||||
sets: [sortSet, `uid:${params.uid}:followed_tids`],
|
||||
weights: [1, 0],
|
||||
start: 0,
|
||||
stop: meta.config.recentMaxTopics - 1,
|
||||
});
|
||||
}
|
||||
|
||||
async function getTagTids(params) {
|
||||
const sets = [
|
||||
params.sort === 'old' ?
|
||||
|
||||
@@ -210,15 +210,13 @@ module.exports = function (Topics) {
|
||||
}
|
||||
|
||||
async function getFollowedTids(params) {
|
||||
let tids = await db.getSortedSetMembers(`uid:${params.uid}:followed_tids`);
|
||||
const filterCids = params.cid && params.cid.map(cid => parseInt(cid, 10));
|
||||
if (filterCids) {
|
||||
const topicData = await Topics.getTopicsFields(tids, ['tid', 'cid']);
|
||||
tids = topicData.filter(t => filterCids.includes(t.cid)).map(t => t.tid);
|
||||
}
|
||||
const scores = await db.sortedSetScores('topics:recent', tids);
|
||||
const data = tids.map((tid, index) => ({ value: String(tid), score: scores[index] }));
|
||||
return data.filter(item => item.score > params.cutoff);
|
||||
const keys = params.cid ?
|
||||
params.cid.map(cid => `cid:${cid}:tids:lastposttime`) :
|
||||
'topics:recent';
|
||||
|
||||
const recentTopicData = await db.getSortedSetRevRangeByScoreWithScores(keys, 0, -1, '+inf', params.cutoff);
|
||||
const isFollowed = await db.isSortedSetMembers(`uid:${params.uid}:followed_tids`, recentTopicData.map(t => t.tid));
|
||||
return recentTopicData.filter((t, i) => isFollowed[i]);
|
||||
}
|
||||
|
||||
async function filterTidsThatHaveBlockedPosts(params) {
|
||||
|
||||
Reference in New Issue
Block a user