diff --git a/src/postTools.js b/src/postTools.js index ca3dd2dae0..bdf69943d6 100644 --- a/src/postTools.js +++ b/src/postTools.js @@ -61,9 +61,20 @@ var RDB = require('./redis.js'), PostTools.edit = function(uid, pid, title, content) { var success = function() { - posts.setPostField(pid, 'content', content); - posts.setPostField(pid, 'edited', Date.now()); - posts.setPostField(pid, 'editor', uid); + async.waterfall([ + function(next) { + posts.setPostField(pid, 'edited', Date.now()); + next(null); + }, + function(next) { + posts.setPostField(pid, 'editor', uid); + next(null); + }, + function(next) { + posts.setPostField(pid, 'content', content); + next(null); + } + ]); postSearch.remove(pid, function() { postSearch.index(content, pid); diff --git a/src/posts.js b/src/posts.js index ef285a8bcd..248e042d1e 100644 --- a/src/posts.js +++ b/src/posts.js @@ -24,9 +24,16 @@ var RDB = require('./redis.js'), RDB.handle(err); if (pids.length) { - Posts.getPostsByPids(pids, function(err, posts) { - callback(posts); - }); + plugins.fireHook('filter:post.getTopic', pids, function(err, posts) { + if (!err & 0 < posts.length) { + Posts.getPostsByPids(pids, function(err, posts) { + plugins.fireHook('action:post.gotTopic', posts); + callback(posts); + }); + } else { + callback(posts); + } + }); } else { callback([]); } @@ -131,6 +138,7 @@ var RDB = require('./redis.js'), }); } + // TODO: this function is never called except from some debug route. clean up? Posts.getPostData = function(pid, callback) { RDB.hgetall('post:' + pid, function(err, data) { if (err === null) { @@ -146,7 +154,14 @@ var RDB = require('./redis.js'), Posts.getPostFields = function(pid, fields, callback) { RDB.hmgetObject('post:' + pid, fields, function(err, data) { if (err === null) { - callback(data); + // TODO: I think the plugins system needs an optional 'parameters' paramter so I don't have to do this: + data = data || {}; + data.pid = pid; + data.fields = fields; + + plugins.fireHook('filter:post.getFields', data, function(err, data) { + callback(data); + }); } else { console.log(err); } @@ -155,15 +170,28 @@ var RDB = require('./redis.js'), Posts.getPostField = function(pid, field, callback) { RDB.hget('post:' + pid, field, function(err, data) { - if (err === null) - callback(data); - else + if (err === null) { + // TODO: I think the plugins system needs an optional 'parameters' paramter so I don't have to do this: + data = data || {}; + data.pid = pid; + data.field = field; + + plugins.fireHook('filter:post.getField', data, function(err, data) { + callback(data); + }); + } else { console.log(err); + } }); } - Posts.setPostField = function(pid, field, value) { + Posts.setPostField = function(pid, field, value, done) { RDB.hset('post:' + pid, field, value); + plugins.fireHook('action:post.setField', { + 'pid': pid, + 'field': field, + 'value': value + }, done); } Posts.getPostsByPids = function(pids, callback) { @@ -402,11 +430,16 @@ var RDB = require('./redis.js'), Posts.getPostsByUid = function(uid, start, end, callback) { user.getPostIds(uid, start, end, function(pids) { - if (pids && pids.length) { - - Posts.getPostsByPids(pids, function(err, posts) { - callback(posts); + plugins.fireHook('filter:post.getTopic', pids, function(err, posts) { + if (!err & 0 < posts.length) { + Posts.getPostsByPids(pids, function(err, posts) { + plugins.fireHook('action:post.gotTopic', posts); + callback(posts); + }); + } else { + callback(posts); + } }); } else callback([]); diff --git a/src/threadTools.js b/src/threadTools.js index 478f25fd7e..e375876ef0 100644 --- a/src/threadTools.js +++ b/src/threadTools.js @@ -303,7 +303,7 @@ var RDB = require('./redis.js'), pids.reverse(); async.detectSeries(pids, function(pid, next) { - RDB.hget('post:' + pid, 'deleted', function(err, deleted) { + posts.getPostField(pid, 'deleted', function(deleted) { if (deleted === '0') next(true); else next(false); });