mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-01-22 07:23:01 +01:00
Merge branch 'master' of https://github.com/designcreateplay/NodeBB
This commit is contained in:
@@ -132,8 +132,8 @@ var RDB = require('./redis.js'),
|
||||
}
|
||||
|
||||
function getTeaserInfo(next) {
|
||||
topics.getTeaser(topicData.tid, function(teaser) {
|
||||
next(null, teaser);
|
||||
topics.getTeaser(topicData.tid, function(err, teaser) {
|
||||
next(null, teaser || {});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -178,10 +178,10 @@ var RDB = require('./redis.js'),
|
||||
|
||||
topicData.username = topicInfo.username;
|
||||
topicData.badgeclass = (topicInfo.hasread && current_user != 0) ? '' : 'badge-important';
|
||||
topicData.teaser_text = topicInfo.teaserInfo.text,
|
||||
topicData.teaser_username = topicInfo.teaserInfo.username;
|
||||
topicData.teaser_userpicture = topicInfo.teaserInfo.picture;
|
||||
topicData.teaser_timestamp = utils.relativeTime(topicInfo.teaserInfo.timestamp);
|
||||
topicData.teaser_text = topicInfo.teaserInfo.text || '',
|
||||
topicData.teaser_username = topicInfo.teaserInfo.username || '';
|
||||
topicData.teaser_userpicture = topicInfo.teaserInfo.picture || '';
|
||||
topicData.teaser_timestamp = topicInfo.teaserInfo.timestamp ? utils.relativeTime(topicInfo.teaserInfo.timestamp) : '';
|
||||
|
||||
if (isTopicVisible(topicData, topicInfo))
|
||||
retrieved_topics.push(topicData);
|
||||
|
||||
@@ -88,6 +88,15 @@ marked.setOptions({
|
||||
io.sockets.in('topic_' + tid).emit('event:post_deleted', {
|
||||
pid: pid
|
||||
});
|
||||
|
||||
// Delete the thread if it is the last undeleted post
|
||||
threadTools.get_latest_undeleted_pid(tid, function(err, pid) {
|
||||
if (err && err.message === 'no-undeleted-pids-found') {
|
||||
threadTools.delete(tid, -1, function(err) {
|
||||
if (err) console.log('Error: Could not delete topic (tid: ' + tid + ')');
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -3,7 +3,8 @@ var RDB = require('./redis.js'),
|
||||
categories = require('./categories.js'),
|
||||
user = require('./user.js'),
|
||||
async = require('async'),
|
||||
notifications = require('./notifications.js');
|
||||
notifications = require('./notifications.js'),
|
||||
posts = require('./posts');
|
||||
|
||||
(function(ThreadTools) {
|
||||
|
||||
@@ -80,25 +81,20 @@ var RDB = require('./redis.js'),
|
||||
});
|
||||
}
|
||||
|
||||
ThreadTools.delete = function(tid, uid, socket) {
|
||||
ThreadTools.delete = function(tid, uid, callback) {
|
||||
ThreadTools.privileges(tid, uid, function(privileges) {
|
||||
if (privileges.editable) {
|
||||
if (privileges.editable || uid === -1) {
|
||||
|
||||
topics.setTopicField(tid, 'deleted', 1);
|
||||
ThreadTools.lock(tid, uid);
|
||||
|
||||
if (socket) {
|
||||
io.sockets.in('topic_' + tid).emit('event:topic_deleted', {
|
||||
tid: tid,
|
||||
status: 'ok'
|
||||
});
|
||||
io.sockets.in('topic_' + tid).emit('event:topic_deleted', {
|
||||
tid: tid,
|
||||
status: 'ok'
|
||||
});
|
||||
|
||||
socket.emit('api:topic.delete', {
|
||||
status: 'ok',
|
||||
tid: tid
|
||||
});
|
||||
}
|
||||
}
|
||||
callback(null);
|
||||
} else callback(new Error('not-enough-privs'));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -243,10 +239,12 @@ var RDB = require('./redis.js'),
|
||||
function(next) {
|
||||
|
||||
topics.getTopicField(tid, 'title', function(title) {
|
||||
topics.getTeaser(tid, function(teaser) {
|
||||
topics.getTeaser(tid, function(err, teaser) {
|
||||
if (!err) {
|
||||
notifications.create(teaser.username + ' has posted a reply to: "' + title + '"', null, '/topic/' + tid, 'topic:' + tid, function(nid) {
|
||||
next(null, nid);
|
||||
});
|
||||
next(null, nid);
|
||||
});
|
||||
} else next(err);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -259,10 +257,28 @@ var RDB = require('./redis.js'),
|
||||
});
|
||||
}
|
||||
], function(err, results) {
|
||||
if (!err) {
|
||||
notifications.push(results[0], results[1]);
|
||||
}
|
||||
if (!err) notifications.push(results[0], results[1]);
|
||||
// Otherwise, do nothing
|
||||
});
|
||||
}
|
||||
|
||||
ThreadTools.get_latest_undeleted_pid = function(tid, callback) {
|
||||
|
||||
posts.getPostsByTid(tid, 0, -1, function(posts) {
|
||||
|
||||
var numPosts = posts.length;
|
||||
if(!numPosts)
|
||||
return callback(new Error('no-undeleted-pids-found'));
|
||||
|
||||
while(numPosts--) {
|
||||
if(posts[numPosts].deleted !== '1') {
|
||||
callback(null, posts[numPosts].pid);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// If we got here, nothing was found...
|
||||
callback(new Error('no-undeleted-pids-found'));
|
||||
});
|
||||
}
|
||||
}(exports));
|
||||
@@ -153,7 +153,8 @@ marked.setOptions({
|
||||
}
|
||||
|
||||
function getTeaser(next) {
|
||||
Topics.getTeaser(tid, function(teaser) {
|
||||
Topics.getTeaser(tid, function(err, teaser) {
|
||||
if (err) teaser = {};
|
||||
next(null, teaser);
|
||||
});
|
||||
}
|
||||
@@ -169,9 +170,9 @@ marked.setOptions({
|
||||
|
||||
topicData.relativeTime = utils.relativeTime(topicData.timestamp);
|
||||
topicData.badgeclass = hasRead ? '' : 'badge-important';
|
||||
topicData.teaser_text = teaser.text;
|
||||
topicData.teaser_username = teaser.username;
|
||||
topicData.teaser_timestamp = utils.relativeTime(teaser.timestamp);
|
||||
topicData.teaser_text = teaser.text || '';
|
||||
topicData.teaser_username = teaser.username || '';
|
||||
topicData.teaser_timestamp = teaser.timestamp ? utils.relativeTime(teaser.timestamp) : '';
|
||||
|
||||
callback(topicData);
|
||||
});
|
||||
@@ -262,52 +263,23 @@ marked.setOptions({
|
||||
}
|
||||
|
||||
Topics.getTeasers = function(tids, callback) {
|
||||
var requests = [];
|
||||
var teasers = [];
|
||||
if (Array.isArray(tids)) {
|
||||
for(x=0,numTids=tids.length;x<numTids;x++) {
|
||||
(function(tid) {
|
||||
requests.push(function(next) {
|
||||
Topics.getTeaser(tid, function(teaser_info) {
|
||||
next(null, teaser_info);
|
||||
});
|
||||
});
|
||||
})(tids[x]);
|
||||
}
|
||||
async.parallel(requests, function(err, teasers) {
|
||||
async.each(tids, function(tid, next) {
|
||||
Topics.getTeaser(tid, function(err, teaser_info) {
|
||||
if (err) teaser_info = {};
|
||||
teasers.push(teaser_info);
|
||||
next();
|
||||
});
|
||||
}, function() {
|
||||
callback(teasers);
|
||||
});
|
||||
} else {
|
||||
callback([]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Topics.get_latest_undeleted_pid = function(tid, callback) {
|
||||
|
||||
posts.getPostsByTid(tid, 0, -1, function(posts) {
|
||||
|
||||
var numPosts = posts.length;
|
||||
if(!numPosts)
|
||||
callback(null);
|
||||
|
||||
while(numPosts--) {
|
||||
if(posts[numPosts].deleted !== '1') {
|
||||
callback(posts[numPosts].pid);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if(posts.length > 0)
|
||||
callback(posts[0].pid);
|
||||
else
|
||||
callback(null);
|
||||
});
|
||||
} else callback(teasers);
|
||||
}
|
||||
|
||||
Topics.getTeaser = function(tid, callback) {
|
||||
Topics.get_latest_undeleted_pid(tid, function(pid) {
|
||||
|
||||
if (pid !== null) {
|
||||
|
||||
threadTools.get_latest_undeleted_pid(tid, function(err, pid) {
|
||||
if (!err) {
|
||||
posts.getPostFields(pid, ['content', 'uid', 'timestamp'], function(postData) {
|
||||
|
||||
user.getUserFields(postData.uid, ['username', 'picture'], function(userData) {
|
||||
@@ -317,7 +289,7 @@ marked.setOptions({
|
||||
if(postData.content)
|
||||
stripped = utils.strip_tags(marked(postData.content));
|
||||
|
||||
callback({
|
||||
callback(null, {
|
||||
"text": stripped,
|
||||
"username": userData.username,
|
||||
"picture": userData.picture,
|
||||
@@ -325,14 +297,7 @@ marked.setOptions({
|
||||
});
|
||||
});
|
||||
});
|
||||
} else {
|
||||
callback({
|
||||
"text": "",
|
||||
"username": "",
|
||||
"picture": "",
|
||||
"timestamp" : ""
|
||||
});
|
||||
}
|
||||
} else callback(new Error('no-teaser-found'));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -336,7 +336,14 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }),
|
||||
});
|
||||
|
||||
socket.on('api:topic.delete', function(data) {
|
||||
threadTools.delete(data.tid, uid, socket);
|
||||
threadTools.delete(data.tid, uid, function(err) {
|
||||
if (!err) {
|
||||
socket.emit('api:topic.delete', {
|
||||
status: 'ok',
|
||||
tid: data.tid
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
socket.on('api:topic.restore', function(data) {
|
||||
|
||||
Reference in New Issue
Block a user