Files
NodeBB/src/topics/data.js

131 lines
3.0 KiB
JavaScript
Raw Normal View History

2015-09-25 17:38:58 -04:00
'use strict';
2017-05-26 00:02:20 -04:00
var async = require('async');
2015-09-25 17:38:58 -04:00
var validator = require('validator');
var db = require('../database');
var categories = require('../categories');
var utils = require('../utils');
var translator = require('../translator');
function escapeTitle(topicData) {
if (!topicData) {
return;
}
if (topicData.title) {
2017-04-15 04:22:28 -06:00
topicData.title = translator.escape(validator.escape(topicData.title.toString()));
}
if (topicData.titleRaw) {
topicData.titleRaw = translator.escape(topicData.titleRaw);
}
}
2015-09-25 17:38:58 -04:00
module.exports = function (Topics) {
Topics.getTopicField = function (tid, field, callback) {
2017-05-26 00:02:20 -04:00
async.waterfall([
function (next) {
db.getObjectField('topic:' + tid, field, next);
},
function (value, next) {
if (field === 'title') {
value = translator.escape(validator.escape(String(value)));
}
next(null, value);
},
], callback);
2015-09-25 17:38:58 -04:00
};
Topics.getTopicFields = function (tid, fields, callback) {
2017-05-26 00:02:20 -04:00
async.waterfall([
function (next) {
db.getObjectFields('topic:' + tid, fields, next);
},
function (topic, next) {
escapeTitle(topic);
next(null, topic);
},
], callback);
2015-09-25 17:38:58 -04:00
};
Topics.getTopicsFields = function (tids, fields, callback) {
2015-09-25 17:38:58 -04:00
if (!Array.isArray(tids) || !tids.length) {
return callback(null, []);
}
var keys = tids.map(function (tid) {
2015-09-25 17:38:58 -04:00
return 'topic:' + tid;
});
2017-05-26 00:02:20 -04:00
async.waterfall([
function (next) {
if (fields.length) {
db.getObjectsFields(keys, fields, next);
} else {
db.getObjects(keys, next);
}
},
function (topics, next) {
topics.forEach(modifyTopic);
next(null, topics);
},
], callback);
2015-09-25 17:38:58 -04:00
};
Topics.getTopicData = function (tid, callback) {
2017-05-26 00:02:20 -04:00
async.waterfall([
function (next) {
db.getObject('topic:' + tid, next);
},
function (topic, next) {
if (!topic) {
return next(null, null);
}
modifyTopic(topic);
next(null, topic);
},
], callback);
2015-09-25 17:38:58 -04:00
};
Topics.getTopicsData = function (tids, callback) {
2017-05-26 00:02:20 -04:00
Topics.getTopicsFields(tids, [], callback);
2015-09-25 17:38:58 -04:00
};
2015-10-06 15:16:50 -04:00
function modifyTopic(topic) {
2015-09-25 17:38:58 -04:00
if (!topic) {
2015-10-06 15:16:50 -04:00
return;
2015-09-25 17:38:58 -04:00
}
2016-02-18 20:26:09 +02:00
topic.titleRaw = topic.title;
topic.title = String(topic.title);
escapeTitle(topic);
2016-03-03 20:13:30 +02:00
topic.timestampISO = utils.toISOString(topic.timestamp);
2015-09-25 17:38:58 -04:00
topic.lastposttimeISO = utils.toISOString(topic.lastposttime);
}
Topics.getCategoryData = function (tid, callback) {
2017-05-26 00:02:20 -04:00
async.waterfall([
function (next) {
Topics.getTopicField(tid, 'cid', next);
},
function (cid, next) {
categories.getCategoryData(cid, next);
},
], callback);
2015-09-25 17:38:58 -04:00
};
Topics.setTopicField = function (tid, field, value, callback) {
2015-09-25 17:38:58 -04:00
db.setObjectField('topic:' + tid, field, value, callback);
};
Topics.setTopicFields = function (tid, data, callback) {
callback = callback || function () {};
db.setObject('topic:' + tid, data, callback);
};
Topics.deleteTopicField = function (tid, field, callback) {
2016-03-01 17:53:16 -05:00
db.deleteObjectField('topic:' + tid, field, callback);
};
2017-03-10 13:36:24 -05:00
Topics.deleteTopicFields = function (tid, fields, callback) {
db.deleteObjectFields('topic:' + tid, fields, callback);
};
2017-02-18 02:30:48 -07:00
};