Merge branch 'master' into develop

This commit is contained in:
Barış Soner Uşaklı
2024-05-25 12:28:53 -04:00
11 changed files with 60 additions and 23 deletions

View File

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

View File

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

View File

@@ -137,7 +137,7 @@
"sitemapTopics": 500,
"maintenanceMode": 0,
"maintenanceModeStatus": 503,
"votesArePublic": 0,
"voteVisibility": "privileged",
"maximumInvites": 0,
"username:disableEdit": 0,
"email:disableEdit": 0,

View File

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

View File

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

View File

@@ -156,6 +156,8 @@ TopicObject:
type: boolean
ignored:
type: boolean
followed:
type: boolean
unread:
type: boolean
bookmark:

View File

@@ -176,6 +176,8 @@ get:
type: boolean
ignored:
type: boolean
followed:
type: boolean
unread:
type: boolean
bookmark:

View File

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

View File

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

View File

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

View File

@@ -14,9 +14,13 @@
<input type="checkbox" class="form-check-input" id="downvote:disabled" data-field="downvote:disabled">
<label for="downvote:disabled" class="form-check-label">[[admin/settings/reputation:disable-down-voting]]</label>
</div>
<div class="form-check form-switch mb-3">
<input type="checkbox" class="form-check-input" id="votesArePublic" data-field="votesArePublic">
<label for="votesArePublic" class="form-check-label">[[admin/settings/reputation:votes-are-public]]</label>
<div>
<label for="voteVisibility" class="form-check-label">[[admin/settings/reputation:vote-visibility]]</label>
<select id="voteVisibility" data-field="voteVisibility" class="form-select">
<option value="all">[[admin/settings/reputation:vote-visibility-all]]</option>
<option value="loggedin">[[admin/settings/reputation:vote-visibility-loggedin]]</option>
<option value="privileged">[[admin/settings/reputation:vote-visibility-privileged]]</option>
</select>
</div>
</div>