Merge remote-tracking branch 'origin/develop' into activitypub

This commit is contained in:
Julian Lam
2024-01-02 11:58:25 -05:00
20 changed files with 120 additions and 69 deletions

View File

@@ -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

View File

@@ -2,7 +2,7 @@
"name": "nodebb",
"license": "GPL-3.0",
"description": "NodeBB Forum",
"version": "3.6.0",
"version": "3.6.1",
"homepage": "https://www.nodebb.org",
"repository": {
"type": "git",
@@ -34,7 +34,7 @@
"@fortawesome/fontawesome-free": "6.5.1",
"@isaacs/ttlcache": "1.4.1",
"@popperjs/core": "2.11.8",
"ace-builds": "1.32.2",
"ace-builds": "1.32.3",
"archiver": "6.0.1",
"async": "3.2.5",
"autoprefixer": "10.4.16",
@@ -63,7 +63,7 @@
"csrf-sync": "4.0.3",
"daemon": "1.1.0",
"diff": "5.1.0",
"esbuild": "0.19.10",
"esbuild": "0.19.11",
"express": "4.18.2",
"express-session": "1.17.3",
"express-useragent": "1.0.15",
@@ -103,12 +103,12 @@
"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.107",
"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",
"nodemailer": "6.9.8",
"nprogress": "0.2.0",
"passport": "0.7.0",
"passport-http-bearer": "1.0.1",
@@ -124,7 +124,7 @@
"rss": "1.2.2",
"rtlcss": "4.1.1",
"sanitize-html": "2.11.0",
"sass": "1.69.5",
"sass": "1.69.6",
"semver": "7.5.4",
"serve-favicon": "2.5.0",
"sharp": "0.33.1",
@@ -135,7 +135,7 @@
"sortablejs": "1.15.1",
"spdx-license-list": "6.8.0",
"spider-detector": "2.0.1",
"terser-webpack-plugin": "5.3.9",
"terser-webpack-plugin": "5.3.10",
"textcomplete": "0.18.2",
"textcomplete.contenteditable": "0.1.1",
"timeago": "1.6.7",
@@ -172,7 +172,7 @@
"smtp-server": "3.13.0"
},
"optionalDependencies": {
"sass-embedded": "1.69.5"
"sass-embedded": "1.69.6"
},
"resolutions": {
"*/jquery": "3.7.1"

View File

@@ -32,7 +32,7 @@
"folder-exists": "Ordner existiert",
"invalid-pagination-value": "Ungültige Seitennummerierung, muss mindestens %1 und maximal %2 sein",
"username-taken": "Der Benutzername ist bereits vergeben",
"email-taken": "Email address is already taken.",
"email-taken": "Die E-Mail-Adresse ist bereits vergeben.",
"email-nochange": "Die eingegebene E-Mail ist die gleiche wie die bereits hinterlegte E-Mail.",
"email-invited": "E-Mail wurde bereits eingeladen",
"email-not-confirmed": "Das Schreiben von Beiträgen in einigen Kategorien oder Themen ist erst möglich, wenn Ihre E-Mail bestätigt wurde. Bitte klicken Sie hier, um eine Bestätigungs-E-Mail zu senden.",

View File

@@ -4,15 +4,15 @@
"acp-title": "%1 | NodeBB Admin Kontrollpanel",
"settings-header-contents": "Innhold",
"changes-saved": "Changes Saved",
"changes-saved": "Endringer lagret",
"changes-saved-message": "Your changes to the NodeBB configuration have been saved.",
"changes-not-saved": "Endringer ikke lagret",
"changes-not-saved-message": "NodeBB støtte på et problem ved lagring av endringer. (%1)",
"save-changes": "Save changes",
"save-changes": "Lagre endringer",
"min": "Min:",
"max": "Max:",
"view": "View",
"edit": "Edit",
"add": "Add",
"select-icon": "Select Icon"
"view": "Se",
"edit": "Rediger",
"add": "Legg til",
"select-icon": "Velg ikon"
}

View File

@@ -79,7 +79,7 @@
"follow-replied-topics": "Følg tråder du svarer på",
"default-notification-settings": "Standard varslingsinnstillinger",
"categoryWatchState": "Default category watch state",
"categoryWatchState.tracking": "Tracking",
"categoryWatchState.tracking": "Sporing",
"categoryWatchState.notwatching": "Overvåker ikke",
"categoryWatchState.ignoring": "Ignorerer",
"restrictions-new": "Nye brukerbegrensninger ",

View File

@@ -10,7 +10,7 @@
"watch": "Overvåk",
"ignore": "Ignorer",
"watching": "Følger",
"tracking": "Tracking",
"tracking": "Sporing",
"not-watching": "Følger ikke",
"ignoring": "Ignorerer",
"watching.description": "Notify me of new topics.<br/>Show topics in unread & recent",

View File

@@ -13,14 +13,14 @@
"all": "Alle",
"topics": "Emner",
"tags": "Tags",
"categories": "Categories",
"categories": "Kategorier",
"replies": "Svar",
"chat": "Samtaler",
"group-chat": "Gruppesamtaler",
"public-chat": "Public Chats",
"follows": "Følger",
"upvote": "Oppstemmer",
"awards": "Awards",
"awards": "Tildelninger",
"new-flags": "Nye flagg",
"my-flags": "Flagg som er tildelt til meg",
"bans": "Forbud",
@@ -56,7 +56,7 @@
"user-posted-topic-with-tag-dual": "<strong>%1</strong> has posted a new topic with tags <strong>%2</strong> and <strong>%3</strong>",
"user-posted-topic-with-tag-triple": "<strong>%1</strong> has posted a new topic with tags <strong>%2</strong>, <strong>%3</strong> and <strong>%4</strong>",
"user-posted-topic-with-tag-multiple": "<strong>%1</strong> has posted a new topic with tags <strong>%2</strong>",
"user-posted-topic-in-category": "<strong>%1</strong> has posted a new topic in <strong>%2</strong>",
"user-posted-topic-in-category": "<strong>%1</strong> har publisert et nytt innlegg i <strong>%2</strong>",
"user-started-following-you": "<strong>%1</strong> begynte å følge deg.",
"user-started-following-you-dual": "<strong>%1</strong> og <strong>2%</strong> har begynt å følge deg.",
"user-started-following-you-triple": "<strong>%1</strong>, <strong>%2</strong> and <strong>%3</strong> started following you.",
@@ -83,7 +83,7 @@
"notificationType-upvote": "Når noen stemmer opp innlegget ditt",
"notificationType-new-topic": "Når noen du følger følger legger ut et emne",
"notificationType-new-topic-with-tag": "When a topic is posted with a tag you follow",
"notificationType-new-topic-in-category": "When a topic is posted in a category you are watching",
"notificationType-new-topic-in-category": "Når et emne er lagt ut i en kategori du ser på",
"notificationType-new-reply": "Når et nytt svar er lagt ut i et emne du overvåker",
"notificationType-post-edit": "Når et innlegg er redigert i et emne du overvåker",
"notificationType-follow": "Når noen starter å følge deg",
@@ -97,5 +97,5 @@
"notificationType-post-queue": "Når et nytt innlegg er satt i kø",
"notificationType-new-post-flag": "Når ett nytt innlegg er flagget",
"notificationType-new-user-flag": "Når en bruker er flagget",
"notificationType-new-reward": "When you earn a new reward"
"notificationType-new-reward": "Når du får en ny tildelning "
}

View File

@@ -48,7 +48,7 @@
"account/topics": "Emner opprettet av %1",
"account/groups": "%1 sine grupper",
"account/watched-categories": "%1's overvåkede kategorier",
"account/watched-tags": "%1's Watched Tags",
"account/watched-tags": "%1's overvåkede tagger",
"account/bookmarks": "%1's bokmerkede innlegg",
"account/settings": "Brukerinnstillinger",
"account/settings-of": "Changing settings of %1",
@@ -62,7 +62,7 @@
"account/uploads": "Opplastninger av %1",
"account/sessions": "Påloggingsøkter",
"confirm": "E-post bekreftet",
"maintenance.text": "%1 is currently undergoing maintenance.<br/>Please come back another time.",
"maintenance.text": "%1 er for øyeblikket under vedlikehold. <br/>Vennligst kom tilbake en annen gang.",
"maintenance.messageIntro": "I tillegg har administratoren skrevet denne meldingen:",
"throttled.text": "%1 er for øyeblikket ikke tilgjengelig på grunn av overdreven belastning. Kom tilbake en annen gang."
}

View File

@@ -40,11 +40,11 @@
"copy-ip": "Kopier IP",
"ban-ip": "Forby IP",
"view-history": "Redigere historie",
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
"user-locked-topic-ago": "%1 locked this topic %2",
"wrote-ago": "skrev <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
"wrote-on": "skrev på <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
"replied-to-user-ago": "svarte på <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
"replied-to-user-on": "svarte på <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
"user-locked-topic-ago": "%1 låste dette emnet %2",
"user-locked-topic-on": "%1 locked this topic on %2",
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
"user-unlocked-topic-on": "%1 unlocked this topic on %2",
@@ -123,14 +123,14 @@
"post-restore-confirm": "Er du sikker på at du vil gjenopprette dette innlegget?",
"post-purge-confirm": "Er du sikker på at du vil renske dette innlegget?",
"pin-modal-expiry": "Utløpsdato",
"pin-modal-help": "Du kan eventuelt angi en utløpsdato for de festede emnene her. Alternativt kan du la dette feltet stå tomt for å holde emnet festet til det manuelt løsnes.",
"pin-modal-help": "Du kan eventuelt angi en utløpsdato for de festede emne(ne) her. Alternativt kan du la dette feltet stå tomt for å holde emnet festet til det manuelt løsnes.",
"load-categories": "Laster kategorier",
"confirm-move": "Flytt",
"confirm-fork": "Forgren",
"bookmark": "Bokmerke",
"bookmarks": "Bokmerker",
"bookmarks.has-no-bookmarks": "Du har ikke bokmerket noen innlegg ennå.",
"copy-permalink": "Copy Permalink",
"copy-permalink": "Kopier permalink",
"loading-more-posts": "Laster flere innlegg",
"move-topic": "Flytt tård",
"move-topics": "Flytt tråder",
@@ -138,7 +138,7 @@
"post-moved": "Innlegg flyttet!",
"fork-topic": "Forgren tråd",
"enter-new-topic-title": "Tast inn tittel på emne",
"fork-topic-instruction": "Click the posts you want to fork, enter a title for the new topic and click fork topic",
"fork-topic-instruction": "Klikk på innleggene du vil dele, skriv inn en tittel for det nye emnet og klikk på emnet",
"fork-no-pids": "Ingen innlegg valgt!",
"no-posts-selected": "Ingen innlegg valgt.",
"x-posts-selected": "%1 innlegg valgt",
@@ -157,7 +157,7 @@
"change-owner-instruction": "Klikk på innleggene du vil tildele til en annen bruker",
"composer.title-placeholder": "Skriv din tråd-tittel her",
"composer.handle-placeholder": "Skriv inn navnet ditt / signatur her",
"composer.hide": "Hide",
"composer.hide": "Gjem",
"composer.discard": "Forkast",
"composer.submit": "Send",
"composer.additional-options": "Ytterligere alternativer",
@@ -204,7 +204,7 @@
"last-post": "Seneste innlegg",
"go-to-my-next-post": "Gå til mitt neste innlegg",
"no-more-next-post": "Du har ikke flere innlegg i dette emnet",
"post-quick-reply": "Quick reply",
"navigator.index": "Post %1 of %2",
"navigator.unread": "%1 unread"
"post-quick-reply": "Raskt svar",
"navigator.index": "Innlegg %1 av %2",
"navigator.unread": "%1 ulest"
}

View File

@@ -22,7 +22,7 @@
"delete-account-confirm": "Er du sikker på at du vil anonymisere alle innleggene dine og slette brukerkonten?<br /><strong>Denne handlingen er irreversibel, og du vil ikke kunne gjenopprette noen av dataene dine</strong><br /><br />Skriv inn passordet ditt for å bekrefte at du ønsker å slette denne brukerkontoen.",
"delete-this-account-confirm": "Er du sikker på at du vil slette denne brukerkontoen og la innholdet ligge igjen?<br /><strong>Denne handlingen er irreversibel, innlegg blir anonymisert, og du vil ikke kunne gjenopprette innleggsassosiasjoner med den slettede kontoen</strong><br /><br />",
"delete-account-content-confirm": "Er du sikker på at du vil slette innholdet på denne brukerkontoen (innlegg / emner / opplastinger)? <br /><strong>Denne handlingen er irreversibel, og du vil ikke kunne gjenopprette data</strong><br /><br />",
"delete-all-confirm": "<br />Er du sikker på at du vil slette denne kontoen og alt innholdet (innlegg / emner / opplastinger)?<strong>Denne handlingen er irreversibel, og du vil ikke kunne gjenopprette data\n</strong><br /><br />",
"delete-all-confirm": "<br />Er du sikker på at du vil slette denne kontoen og alt innholdet (innlegg / emner / opplastinger)?<strong>Denne handlingen er irreversibel, og du vil ikke kunne gjenopprette data</strong><br /><br />",
"account-deleted": "Konto slettet",
"account-content-deleted": "Kontoinnhold slettet",
"fullname": "Fullt navn",
@@ -62,7 +62,7 @@
"change-picture": "Bytt bilde",
"change-username": "Endre brukernavn",
"change-email": "Endre e-post",
"email-updated": "Email Updated",
"email-updated": "E-post oppdatert",
"email-same-as-password": "Skriv inn ditt nåværende passord for å fortsette &ndash; du har skrevet inn den nye e-posten din igjen",
"edit": "Endre",
"edit-profile": "Rediger profil",
@@ -71,7 +71,7 @@
"upload-new-picture": "Last opp nytt bidle",
"upload-new-picture-from-url": "Last opp nytt bilde fra URL",
"current-password": "Gjeldende passord",
"new-password": "New Password",
"new-password": "Nytt passord",
"change-password": "Endre passord",
"change-password-error": "Ugyldig passord!",
"change-password-error-wrong-current": "Ditt gjeldende passord er ikke korrekt!",
@@ -119,8 +119,8 @@
"paginate-description": "Bruk sidevelger for tråder og innlegg istedet for uendelig scrolling",
"topics-per-page": "Tråd per side",
"posts-per-page": "Innlegg per side",
"category-topic-sort": "Category topic sort",
"topic-post-sort": "Topic post sort",
"category-topic-sort": "Kategorsortering",
"topic-post-sort": "Sortering av emneinnlegg",
"max-items-per-page": "Maksimum %1",
"acp-language": "Administrer sidespråk",
"notifications": "Notifikasjoner",
@@ -143,14 +143,14 @@
"group-order-help": "Velg en gruppe og bruk pilene for å gi titler",
"no-group-title": "Ingen gruppetittel",
"select-skin": "Velg et skin",
"default": "Default (%1)",
"no-skin": "No Skin",
"default": "Normalverdi (%1)",
"no-skin": "Ingen skin",
"select-homepage": "Velg en hjemmeside",
"homepage": "Hjemmeside",
"homepage-description": "Velg en side du vil bruke som forumets hjemmeside, eller 'Ingen' for å bruke standardhjemmesiden.",
"custom-route": "Tilpasset hjemmeside-rute",
"custom-route-help": "Skriv inn et rutenavn her uten noen forrige skråstrek (f.eks. \"Nylig\" eller \"kategori / 2 / generell diskusjon\")",
"sso.title": "Single Sign-on Services",
"sso.title": "Enkel innloggingstjenester",
"sso.associated": "Assosiert med",
"sso.not-associated": "Klikk her for å assosiere med",
"sso.dissociate": "Separer",
@@ -176,8 +176,8 @@
"info.moderation-note.success": "Moderasjonsnotat ikke lagret",
"info.moderation-note.add": "Legg til notat",
"sessions.description": "Denne siden lar deg se alle aktivitetsøkter på dette forumet og tilbakekalle dem om nødvendig. Du kan tilbakekalle din egen økt ved å logge av brukerkontoen din.",
"revoke-session": "Revoke Session",
"browser-version-on-platform": "%1 %2 on %3",
"revoke-session": "Gjenopprett økten",
"browser-version-on-platform": "%1 %2 %3",
"consent.title": "Dine rettigheter & amp; Samtykke",
"consent.lead": "Dette forumet samler inn og behandler dine personopplysninger.",
"consent.intro": "Vi bruker kun denne informasjonen for å tilpasse brukeropplevelsen din i dette nettforumet, og for å knytte innleggene du lager til brukerkontoen din. Under registreringstrinnet i Felles brukerhåndtering ble du bedt om å oppgi fullt navn og en e-postadresse. Du kan også velge å oppgi tilleggsinformasjon for å fullføre brukerprofilen din på dette nettstedet.<br /><br />Vi oppbevarer denne informasjonen så lenge brukerprofilen din er aktiv, og du kan når som helst trekke tilbake samtykke ved å slette kontoen din. Du kan når som helst be om en kopi av ditt bidrag til dette nettstedet, via dine rettigheter &amp; Samtykkeside.<br /><br />Hvis du har spørsmål eller bekymringer, oppfordrer vi deg til å ta kontakt med forumets administrative team.",

View File

@@ -1,5 +1,5 @@
{
"all-users": "All Users",
"all-users": "Alle brukere",
"latest-users": "Seneste brukere",
"top-posters": "Flest innlegg",
"most-reputation": "Best omdømme",

View File

@@ -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,

View File

@@ -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);
});

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -236,7 +236,6 @@ module.exports = function (Categories) {
const notification = await notifications.create({
type: 'new-topic-in-category',
nid: `new_topic:tid:${postData.topic.tid}:uid:${exceptUid}`,
subject: bodyShort,
bodyShort: bodyShort,
bodyLong: postData.content,
pid: postData.pid,

View File

@@ -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;
}

View File

@@ -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' ?

View File

@@ -620,7 +620,6 @@ module.exports = function (Topics) {
const notification = await notifications.create({
type: 'new-topic-with-tag',
nid: `new_topic:tid:${postData.topic.tid}:uid:${exceptUid}`,
subject: bodyShort,
bodyShort: bodyShort,
bodyLong: postData.content,
pid: postData.pid,

View File

@@ -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) {