You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1015 B
JavaScript

'use strict';
var async = require('async');
module.exports = function (Topics) {
Topics.merge = function (tids, uid, callback) {
var mergeIntoTid = findOldestTopic(tids);
var otherTids = tids.filter(function (tid) {
return tid && parseInt(tid, 10) !== parseInt(mergeIntoTid, 10);
});
async.eachSeries(otherTids, function (tid, next) {
async.waterfall([
function (next) {
Topics.getPids(tid, next);
},
function (pids, next) {
async.eachSeries(pids, function (pid, next) {
Topics.movePostToTopic(pid, mergeIntoTid, next);
}, next);
},
function (next) {
Topics.setTopicField(tid, 'mainPid', 0, next);
},
function (next) {
Topics.delete(tid, uid, next);
},
function (next) {
Topics.setTopicFields(tid, {
mergeIntoTid: mergeIntoTid,
mergerUid: uid,
mergedTimestamp: Date.now(),
}, next);
},
], next);
}, callback);
};
function findOldestTopic(tids) {
return Math.min.apply(null, tids);
}
};