feat: convert "All Votes Are Public" toggle to vote visibility

closes #12597
This commit is contained in:
Barış Soner Uşaklı
2024-05-24 17:12:44 -04:00
parent 56ef2bdd67
commit e0515080a0
5 changed files with 36 additions and 6 deletions

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

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

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

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