From 56ef2bdd67c0e0f6015db804140c3ee3c58e5c32 Mon Sep 17 00:00:00 2001 From: Opliko Date: Thu, 23 May 2024 23:52:33 +0200 Subject: [PATCH 1/3] fix: reduce docker image size again and speed up build it really was just order of operations... resolves #12582 --- Dockerfile | 11 ++++++----- dev.Dockerfile | 13 +++++++------ 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9778513430..f3b76ab35b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -46,15 +46,16 @@ ENV NODE_ENV=production \ WORKDIR /usr/src/app/ -COPY --from=build --chown=${USER}:${USER} /usr/src/app/ /usr/src/app/install/docker/setup.json /usr/src/app/ -COPY --from=build --chown=${USER}:${USER} /usr/bin/tini /usr/src/app/install/docker/entrypoint.sh /usr/local/bin/ - RUN corepack enable \ && groupadd --gid ${GID} ${USER} \ && useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \ && mkdir -p /usr/src/app/logs/ /opt/config/ \ - && chown -R ${USER}:${USER} /usr/src/app/ /opt/config/ \ - && chmod +x /usr/local/bin/entrypoint.sh \ + && chown -R ${USER}:${USER} /usr/src/app/ /opt/config/ + +COPY --from=build --chown=${USER}:${USER} /usr/src/app/ /usr/src/app/install/docker/setup.json /usr/src/app/ +COPY --from=build --chown=${USER}:${USER} /usr/bin/tini /usr/src/app/install/docker/entrypoint.sh /usr/local/bin/ + +RUN chmod +x /usr/local/bin/entrypoint.sh \ && chmod +x /usr/local/bin/tini # TODO: Have docker-compose use environment variables to create files like setup.json and config.json. diff --git a/dev.Dockerfile b/dev.Dockerfile index a2b3867ed5..bab7d800c5 100644 --- a/dev.Dockerfile +++ b/dev.Dockerfile @@ -51,17 +51,18 @@ ENV NODE_ENV=development \ WORKDIR /usr/src/app/ +RUN corepack enable \ + && groupadd --gid ${GID} ${USER} \ + && useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \ + && mkdir -p /usr/src/app/logs/ /opt/config/ \ + && chown -R ${USER}:${USER} /usr/src/app/ /opt/config/ + COPY --from=build --chown=${USER}:${USER} /usr/src/app/ /usr/src/app/install/docker/setup.json /usr/src/app/ COPY --from=build --chown=${USER}:${USER} /usr/bin/tini /usr/src/app/install/docker/entrypoint.sh /usr/local/bin/ COPY --from=node_modules_touch --chown=${USER}:${USER} /usr/src/app/ /usr/src/app/ COPY --from=git --chown=${USER}:${USER} /usr/src/app/ /usr/src/app/ -RUN corepack enable \ - && groupadd --gid ${GID} ${USER} \ - && useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \ - && mkdir -p /usr/src/app/logs/ /opt/config/ \ - && chown -R ${USER}:${USER} /usr/src/app/ /opt/config/ \ - && chmod +x /usr/local/bin/entrypoint.sh \ +RUN chmod +x /usr/local/bin/entrypoint.sh \ && chmod +x /usr/local/bin/tini # TODO: Have docker-compose use environment variables to create files like setup.json and config.json. From e0515080a087b453289a76f5c1ae40d19063d889 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Fri, 24 May 2024 17:12:44 -0400 Subject: [PATCH 2/3] feat: convert "All Votes Are Public" toggle to vote visibility closes #12597 --- install/data/defaults.json | 2 +- .../en-GB/admin/settings/reputation.json | 5 ++++- src/socket.io/posts/votes.js | 9 ++++++++- src/upgrades/3.8.2/vote-visibility-config.js | 16 ++++++++++++++++ src/views/admin/settings/reputation.tpl | 10 +++++++--- 5 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 src/upgrades/3.8.2/vote-visibility-config.js diff --git a/install/data/defaults.json b/install/data/defaults.json index 6884f351b5..076a1435d0 100644 --- a/install/data/defaults.json +++ b/install/data/defaults.json @@ -137,7 +137,7 @@ "sitemapTopics": 500, "maintenanceMode": 0, "maintenanceModeStatus": 503, - "votesArePublic": 0, + "voteVisibility": "privileged", "maximumInvites": 0, "username:disableEdit": 0, "email:disableEdit": 0, diff --git a/public/language/en-GB/admin/settings/reputation.json b/public/language/en-GB/admin/settings/reputation.json index e4fff22620..a78d0e3fd5 100644 --- a/public/language/en-GB/admin/settings/reputation.json +++ b/public/language/en-GB/admin/settings/reputation.json @@ -2,7 +2,10 @@ "reputation": "Reputation Settings", "disable": "Disable Reputation System", "disable-down-voting": "Disable Down Voting", - "votes-are-public": "All Votes Are Public", + "vote-visibility": "Vote visibility", + "vote-visibility-all": "Everyone can see votes", + "vote-visibility-loggedin": "Only logged in users can see votes", + "vote-visibility-privileged": "Only privileged users like admins & moderators can see votes", "thresholds": "Activity Thresholds", "min-rep-upvote": "Minimum reputation to upvote posts", "upvotes-per-day": "Upvotes per day (set to 0 for unlimited upvotes)", diff --git a/src/socket.io/posts/votes.js b/src/socket.io/posts/votes.js index 05e2ce5198..cd0b6f3b9b 100644 --- a/src/socket.io/posts/votes.js +++ b/src/socket.io/posts/votes.js @@ -91,7 +91,14 @@ module.exports = function (SocketPosts) { ]); const cidToAllowed = _.zipObject(uniqCids, canRead); const checks = cids.map( - (cid, index) => isAdmin || isMod[index] || (cidToAllowed[cid] && !!meta.config.votesArePublic) + (cid, index) => isAdmin || isMod[index] || + ( + cidToAllowed[cid] && + ( + meta.config.voteVisibility === 'all' || + (meta.config.voteVisibility === 'loggedin' && parseInt(uid, 10) > 0) + ) + ) ); return isArray ? checks : checks[0]; } diff --git a/src/upgrades/3.8.2/vote-visibility-config.js b/src/upgrades/3.8.2/vote-visibility-config.js new file mode 100644 index 0000000000..e39b8738fa --- /dev/null +++ b/src/upgrades/3.8.2/vote-visibility-config.js @@ -0,0 +1,16 @@ +/* eslint-disable no-await-in-loop */ + +'use strict'; + +const db = require('../../database'); + +module.exports = { + name: 'Add vote visibility config field', + timestamp: Date.UTC(2024, 4, 24), + method: async function () { + const current = await db.getObjectField('config', 'votesArePublic'); + const isPublic = parseInt(current, 10) === 1; + await db.setObjectField('config', 'voteVisibility', isPublic ? 'all' : 'privileged'); + await db.deleteObjectField('config', 'votesArePublic'); + }, +}; diff --git a/src/views/admin/settings/reputation.tpl b/src/views/admin/settings/reputation.tpl index 1786596c30..b086439498 100644 --- a/src/views/admin/settings/reputation.tpl +++ b/src/views/admin/settings/reputation.tpl @@ -14,9 +14,13 @@ -
- - +
+ +
From 29dbe92d6efdf946f42dcae9f015c0d170ec792b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Sat, 25 May 2024 12:28:39 -0400 Subject: [PATCH 3/3] feat: show ignored/watched topics in topic list, closes #10974 --- install/package.json | 4 ++-- public/openapi/components/schemas/TopicObject.yaml | 2 ++ public/openapi/read/unread.yaml | 2 ++ src/topics/index.js | 9 +++++---- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/install/package.json b/install/package.json index 926c7532e3..fcfa3e1668 100644 --- a/install/package.json +++ b/install/package.json @@ -103,10 +103,10 @@ "nodebb-plugin-ntfy": "1.7.4", "nodebb-plugin-spam-be-gone": "2.2.2", "nodebb-rewards-essentials": "1.0.0", - "nodebb-theme-harmony": "1.2.56", + "nodebb-theme-harmony": "1.2.57", "nodebb-theme-lavender": "7.1.8", "nodebb-theme-peace": "2.2.5", - "nodebb-theme-persona": "13.3.19", + "nodebb-theme-persona": "13.3.20", "nodebb-widget-essentials": "7.0.16", "nodemailer": "6.9.13", "nprogress": "0.2.0", diff --git a/public/openapi/components/schemas/TopicObject.yaml b/public/openapi/components/schemas/TopicObject.yaml index ad337379f7..ee34558ffc 100644 --- a/public/openapi/components/schemas/TopicObject.yaml +++ b/public/openapi/components/schemas/TopicObject.yaml @@ -156,6 +156,8 @@ TopicObject: type: boolean ignored: type: boolean + followed: + type: boolean unread: type: boolean bookmark: diff --git a/public/openapi/read/unread.yaml b/public/openapi/read/unread.yaml index e63242729c..307a85b3b6 100644 --- a/public/openapi/read/unread.yaml +++ b/public/openapi/read/unread.yaml @@ -176,6 +176,8 @@ get: type: boolean ignored: type: boolean + followed: + type: boolean unread: type: boolean bookmark: diff --git a/src/topics/index.js b/src/topics/index.js index 3d313d08e6..59e731affe 100644 --- a/src/topics/index.js +++ b/src/topics/index.js @@ -116,10 +116,10 @@ Topics.getTopicsByTids = async function (tids, options) { }; } - const [result, hasRead, isIgnored, bookmarks, callerSettings] = await Promise.all([ + const [result, hasRead, followData, bookmarks, callerSettings] = await Promise.all([ loadTopics(), Topics.hasReadTopics(tids, uid), - Topics.isIgnoring(tids, uid), + Topics.getFollowData(tids, uid), Topics.getUserBookmarks(tids, uid), user.getSettings(uid), ]); @@ -136,8 +136,9 @@ Topics.getTopicsByTids = async function (tids, options) { } topic.teaser = result.teasers[i] || null; topic.isOwner = topic.uid === parseInt(uid, 10); - topic.ignored = isIgnored[i]; - topic.unread = parseInt(uid, 10) <= 0 || (!hasRead[i] && !isIgnored[i]); + topic.ignored = followData[i].ignoring; + topic.followed = followData[i].following; + topic.unread = parseInt(uid, 10) <= 0 || (!hasRead[i] && !topic.ignored[i]); topic.bookmark = bookmarks[i] && (sortNewToOld ? Math.max(1, topic.postcount + 2 - bookmarks[i]) : Math.min(topic.postcount, bookmarks[i] + 1));