|
|
@ -9,7 +9,7 @@ var meta = require('../meta');
|
|
|
|
var _ = require('lodash');
|
|
|
|
var _ = require('lodash');
|
|
|
|
var plugins = require('../plugins');
|
|
|
|
var plugins = require('../plugins');
|
|
|
|
var utils = require('../utils');
|
|
|
|
var utils = require('../utils');
|
|
|
|
|
|
|
|
var batch = require('../batch');
|
|
|
|
|
|
|
|
|
|
|
|
module.exports = function (Topics) {
|
|
|
|
module.exports = function (Topics) {
|
|
|
|
Topics.createTags = function (tags, tid, timestamp, callback) {
|
|
|
|
Topics.createTags = function (tags, tid, timestamp, callback) {
|
|
|
@ -96,13 +96,61 @@ module.exports = function (Topics) {
|
|
|
|
], callback);
|
|
|
|
], callback);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
Topics.updateTag = function (tag, data, callback) {
|
|
|
|
Topics.updateTags = function (data, callback) {
|
|
|
|
if (!tag) {
|
|
|
|
async.eachSeries(data, function (tagData, next) {
|
|
|
|
return setImmediate(callback, new Error('[[error:invalid-tag]]'));
|
|
|
|
db.setObject('tag:' + tagData.value, {
|
|
|
|
}
|
|
|
|
color: tagData.color,
|
|
|
|
db.setObject('tag:' + tag, data, callback);
|
|
|
|
bgColor: tagData.bgColor,
|
|
|
|
|
|
|
|
}, next);
|
|
|
|
|
|
|
|
}, callback);
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Topics.renameTags = function (data, callback) {
|
|
|
|
|
|
|
|
async.eachSeries(data, function (tagData, next) {
|
|
|
|
|
|
|
|
renameTag(tagData.value, tagData.newName, next);
|
|
|
|
|
|
|
|
}, callback);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function renameTag(tag, newTagName, callback) {
|
|
|
|
|
|
|
|
if (!newTagName || tag === newTagName) {
|
|
|
|
|
|
|
|
return setImmediate(callback);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
async.waterfall([
|
|
|
|
|
|
|
|
function (next) {
|
|
|
|
|
|
|
|
Topics.createEmptyTag(newTagName, next);
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
function (next) {
|
|
|
|
|
|
|
|
batch.processSortedSet('tag:' + tag + ':topics', function (tids, next) {
|
|
|
|
|
|
|
|
async.waterfall([
|
|
|
|
|
|
|
|
function (next) {
|
|
|
|
|
|
|
|
db.sortedSetScores('tag:' + tag + ':topics', tids, next);
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
function (scores, next) {
|
|
|
|
|
|
|
|
db.sortedSetAdd('tag:' + newTagName + ':topics', scores, tids, next);
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
function (next) {
|
|
|
|
|
|
|
|
var keys = tids.map(function (tid) {
|
|
|
|
|
|
|
|
return 'topic:' + tid + ':tags';
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async.series([
|
|
|
|
|
|
|
|
async.apply(db.sortedSetRemove, 'tag:' + tag + ':topics', tids),
|
|
|
|
|
|
|
|
async.apply(db.setsRemove, keys, tag),
|
|
|
|
|
|
|
|
async.apply(db.setsAdd, keys, newTagName),
|
|
|
|
|
|
|
|
], next);
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
], next);
|
|
|
|
|
|
|
|
}, next);
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
function (next) {
|
|
|
|
|
|
|
|
Topics.deleteTag(tag, next);
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
function (next) {
|
|
|
|
|
|
|
|
updateTagCount(newTagName, next);
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
], callback);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function updateTagCount(tag, callback) {
|
|
|
|
function updateTagCount(tag, callback) {
|
|
|
|
callback = callback || function () {};
|
|
|
|
callback = callback || function () {};
|
|
|
|
async.waterfall([
|
|
|
|
async.waterfall([
|
|
|
@ -148,7 +196,9 @@ module.exports = function (Topics) {
|
|
|
|
return 'tag:' + tag;
|
|
|
|
return 'tag:' + tag;
|
|
|
|
}), next);
|
|
|
|
}), next);
|
|
|
|
},
|
|
|
|
},
|
|
|
|
], callback);
|
|
|
|
], function (err) {
|
|
|
|
|
|
|
|
callback(err);
|
|
|
|
|
|
|
|
});
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
function removeTagsFromTopics(tags, callback) {
|
|
|
|
function removeTagsFromTopics(tags, callback) {
|
|
|
@ -266,7 +316,7 @@ module.exports = function (Topics) {
|
|
|
|
], callback);
|
|
|
|
], callback);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
Topics.updateTags = function (tid, tags, callback) {
|
|
|
|
Topics.updateTopicTags = function (tid, tags, callback) {
|
|
|
|
callback = callback || function () {};
|
|
|
|
callback = callback || function () {};
|
|
|
|
async.waterfall([
|
|
|
|
async.waterfall([
|
|
|
|
function (next) {
|
|
|
|
function (next) {
|
|
|
|