mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-01 19:46:01 +01:00
exposing thread tools to users in the "administrators" set, fixing up
Topics methods to call the "editable" method first instead of just checking rep thresholds. Also changed the limit on thread length from 10 to infinity (for now, until infinite scrolling makes it in)
This commit is contained in:
24
src/posts.js
24
src/posts.js
@@ -15,7 +15,7 @@ marked.setOptions({
|
|||||||
Posts.get = function(callback, tid, current_user, start, end) {
|
Posts.get = function(callback, tid, current_user, start, end) {
|
||||||
|
|
||||||
if (start == null) start = 0;
|
if (start == null) start = 0;
|
||||||
if (end == null) end = start + 10;
|
if (end == null) end = -1;//start + 10;
|
||||||
|
|
||||||
var post_data, user_data, thread_data, vote_data, viewer_data;
|
var post_data, user_data, thread_data, vote_data, viewer_data;
|
||||||
|
|
||||||
@@ -30,8 +30,11 @@ marked.setOptions({
|
|||||||
|
|
||||||
var posts = [],
|
var posts = [],
|
||||||
main_posts = [],
|
main_posts = [],
|
||||||
manage_content = viewer_data.reputation >= config.privilege_thresholds.manage_content;
|
manage_content = (
|
||||||
|
viewer_data.reputation >= config.privilege_thresholds.manage_content ||
|
||||||
|
viewer_data.isModerator ||
|
||||||
|
viewer_data.isAdministrator
|
||||||
|
);
|
||||||
|
|
||||||
for (var i=0, ii= post_data.pid.length; i<ii; i++) {
|
for (var i=0, ii= post_data.pid.length; i<ii; i++) {
|
||||||
var uid = post_data.uid[i],
|
var uid = post_data.uid[i],
|
||||||
@@ -70,7 +73,7 @@ marked.setOptions({
|
|||||||
'deleted': parseInt(thread_data.deleted) || 0,
|
'deleted': parseInt(thread_data.deleted) || 0,
|
||||||
'pinned': parseInt(thread_data.pinned) || 0,
|
'pinned': parseInt(thread_data.pinned) || 0,
|
||||||
'topic_id': tid,
|
'topic_id': tid,
|
||||||
'expose_tools': (manage_content || viewer_data.isModerator) ? 1 : 0,
|
'expose_tools': manage_content ? 1 : 0,
|
||||||
'posts': posts,
|
'posts': posts,
|
||||||
'main_posts': main_posts
|
'main_posts': main_posts
|
||||||
});
|
});
|
||||||
@@ -174,8 +177,15 @@ marked.setOptions({
|
|||||||
callback(null);
|
callback(null);
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
function(callback) {
|
||||||
|
user.isAdministrator(current_user, function(isAdmin) {
|
||||||
|
viewer_data = viewer_data || {};
|
||||||
|
viewer_data.isAdministrator = isAdmin;
|
||||||
|
callback(null);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
], function(err, results) {
|
], function(err) {
|
||||||
generateThread();
|
generateThread();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -201,6 +211,10 @@ marked.setOptions({
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
}, function(next) {
|
||||||
|
user.isAdministrator(uid, function(err, isAdmin) {
|
||||||
|
next(null, isAdmin);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
], function(err, results) {
|
], function(err, results) {
|
||||||
// If any return true, allow the edit
|
// If any return true, allow the edit
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ var RDB = require('./redis.js'),
|
|||||||
posts = require('./posts.js'),
|
posts = require('./posts.js'),
|
||||||
utils = require('./utils.js'),
|
utils = require('./utils.js'),
|
||||||
user = require('./user.js'),
|
user = require('./user.js'),
|
||||||
configs = require('../config.js'),
|
config = require('../config.js'),
|
||||||
categories = require('./categories.js'),
|
categories = require('./categories.js'),
|
||||||
marked = require('marked'),
|
marked = require('marked'),
|
||||||
async = require('async');
|
async = require('async');
|
||||||
@@ -169,6 +169,30 @@ marked.setOptions({
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Topics.editable = function(tid, uid, callback) {
|
||||||
|
async.parallel([
|
||||||
|
function(next) {
|
||||||
|
user.getUserField(uid, 'reputation', function(reputation) {
|
||||||
|
next(null, reputation >= config.privilege_thresholds.manage_thread);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
function(next) {
|
||||||
|
Topics.get_cid_by_tid(tid, function(cid) {
|
||||||
|
user.isModerator(uid, cid, function(isMod) {
|
||||||
|
next(null, isMod);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}, function(next) {
|
||||||
|
user.isAdministrator(uid, function(isAdmin) {
|
||||||
|
next(null, isAdmin);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
], function(err, results) {
|
||||||
|
// If any return true, allow the edit
|
||||||
|
if (results.indexOf(true) !== -1) callback(true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
Topics.get_topic = function(tid, uid, callback) {
|
Topics.get_topic = function(tid, uid, callback) {
|
||||||
var topicData = {};
|
var topicData = {};
|
||||||
|
|
||||||
@@ -223,7 +247,7 @@ marked.setOptions({
|
|||||||
}
|
}
|
||||||
|
|
||||||
Topics.get_cid_by_tid = function(tid, callback) {
|
Topics.get_cid_by_tid = function(tid, callback) {
|
||||||
RDB.get('tid:' + pid + ':cid', function(err, cid) {
|
RDB.get('tid:' + tid + ':cid', function(err, cid) {
|
||||||
if (cid && parseInt(cid) > 0) callback(cid);
|
if (cid && parseInt(cid) > 0) callback(cid);
|
||||||
else callback(false);
|
else callback(false);
|
||||||
});
|
});
|
||||||
@@ -359,8 +383,8 @@ marked.setOptions({
|
|||||||
};
|
};
|
||||||
|
|
||||||
Topics.lock = function(tid, uid, socket) {
|
Topics.lock = function(tid, uid, socket) {
|
||||||
user.getUserField(uid, 'reputation', function(rep) {
|
Topics.editable(tid, uid, function(editable) {
|
||||||
if (rep >= configs.privilege_thresholds.manage_thread) {
|
if (editable) {
|
||||||
// Mark thread as locked
|
// Mark thread as locked
|
||||||
RDB.set('tid:' + tid + ':locked', 1);
|
RDB.set('tid:' + tid + ':locked', 1);
|
||||||
|
|
||||||
@@ -375,8 +399,8 @@ marked.setOptions({
|
|||||||
}
|
}
|
||||||
|
|
||||||
Topics.unlock = function(tid, uid, socket) {
|
Topics.unlock = function(tid, uid, socket) {
|
||||||
user.getUserField(uid, 'reputation', function(rep) {
|
Topics.editable(tid, uid, function(editable) {
|
||||||
if (rep >= configs.privilege_thresholds.manage_thread) {
|
if (editable) {
|
||||||
// Mark thread as unlocked
|
// Mark thread as unlocked
|
||||||
RDB.del('tid:' + tid + ':locked');
|
RDB.del('tid:' + tid + ':locked');
|
||||||
|
|
||||||
@@ -391,8 +415,8 @@ marked.setOptions({
|
|||||||
}
|
}
|
||||||
|
|
||||||
Topics.delete = function(tid, uid, socket) {
|
Topics.delete = function(tid, uid, socket) {
|
||||||
user.getUserField(uid, 'reputation', function(rep) {
|
Topics.editable(tid, uid, function(editable) {
|
||||||
if (rep >= configs.privilege_thresholds.manage_thread) {
|
if (editable) {
|
||||||
// Mark thread as deleted
|
// Mark thread as deleted
|
||||||
RDB.set('tid:' + tid + ':deleted', 1);
|
RDB.set('tid:' + tid + ':deleted', 1);
|
||||||
Topics.lock(tid, uid);
|
Topics.lock(tid, uid);
|
||||||
@@ -408,8 +432,8 @@ marked.setOptions({
|
|||||||
}
|
}
|
||||||
|
|
||||||
Topics.restore = function(tid, uid, socket) {
|
Topics.restore = function(tid, uid, socket) {
|
||||||
user.getUserField(uid, 'reputation', function(rep) {
|
Topics.editable(tid, uid, function(editable) {
|
||||||
if (rep >= configs.privilege_thresholds.manage_thread) {
|
if (editable) {
|
||||||
// Mark thread as restored
|
// Mark thread as restored
|
||||||
RDB.del('tid:' + tid + ':deleted');
|
RDB.del('tid:' + tid + ':deleted');
|
||||||
Topics.unlock(tid, uid);
|
Topics.unlock(tid, uid);
|
||||||
@@ -425,8 +449,8 @@ marked.setOptions({
|
|||||||
}
|
}
|
||||||
|
|
||||||
Topics.pin = function(tid, uid, socket) {
|
Topics.pin = function(tid, uid, socket) {
|
||||||
user.getUserField(uid, 'reputation', function(rep) {
|
Topics.editable(tid, uid, function(editable) {
|
||||||
if (rep >= configs.privilege_thresholds.manage_thread) {
|
if (editable) {
|
||||||
// Mark thread as pinned
|
// Mark thread as pinned
|
||||||
RDB.set('tid:' + tid + ':pinned', 1);
|
RDB.set('tid:' + tid + ':pinned', 1);
|
||||||
|
|
||||||
@@ -441,8 +465,8 @@ marked.setOptions({
|
|||||||
}
|
}
|
||||||
|
|
||||||
Topics.unpin = function(tid, uid, socket) {
|
Topics.unpin = function(tid, uid, socket) {
|
||||||
user.getUserField(uid, 'reputation', function(rep) {
|
Topics.editable(tid, uid, function(editable) {
|
||||||
if (rep >= configs.privilege_thresholds.manage_thread) {
|
if (editable) {
|
||||||
// Mark thread as unpinned
|
// Mark thread as unpinned
|
||||||
RDB.del('tid:' + tid + ':pinned');
|
RDB.del('tid:' + tid + ':pinned');
|
||||||
|
|
||||||
|
|||||||
10
src/user.js
10
src/user.js
@@ -264,7 +264,7 @@ var config = require('../config.js'),
|
|||||||
|
|
||||||
User.exists(username, function(exists) {
|
User.exists(username, function(exists) {
|
||||||
RDB.incr('global:next_user_id', function(err, uid) {
|
RDB.incr('global:next_user_id', function(err, uid) {
|
||||||
RDB.handle(err);
|
RDB.handfle(err);
|
||||||
|
|
||||||
var gravatar = User.createGravatarURLFromEmail(email);
|
var gravatar = User.createGravatarURLFromEmail(email);
|
||||||
|
|
||||||
@@ -524,7 +524,13 @@ var config = require('../config.js'),
|
|||||||
|
|
||||||
User.isModerator = function(uid, cid, callback) {
|
User.isModerator = function(uid, cid, callback) {
|
||||||
RDB.sismember('cid:' + cid + ':moderators', uid, function(err, exists) {
|
RDB.sismember('cid:' + cid + ':moderators', uid, function(err, exists) {
|
||||||
callback(exists);
|
callback(!!exists);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
User.isAdministrator = function(uid, callback) {
|
||||||
|
RDB.sismember('administrators', uid, function(err, exists) {
|
||||||
|
callback(!!exists);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user