Skip to content

Commit

Permalink
Merge branch 'master' of github.com:designcreateplay/NodeBB
Browse files Browse the repository at this point in the history
  • Loading branch information
julianlam committed Mar 9, 2014
2 parents 820cdf8 + ec86aaf commit 4309fe3
Show file tree
Hide file tree
Showing 6 changed files with 99 additions and 80 deletions.
4 changes: 2 additions & 2 deletions public/templates/category.tpl
Expand Up @@ -48,8 +48,8 @@
todo: fix this nesting if issue#1065 is a win
todo: add a check for config.allowTopicsThumbnail if issue#1066 is a win
-->
<a href="../../user/{topics.userslug}" class="pull-left">
<img src="<!-- IF topics.thumb -->{topics.thumb}<!-- ELSE -->{topics.picture}<!-- ENDIF topics.thumb -->" class="img-rounded user-img" title="{topics.username}"/>
<a href="../../user/{topics.user.userslug}" class="pull-left">
<img src="<!-- IF topics.thumb -->{topics.thumb}<!-- ELSE -->{topics.user.picture}<!-- ENDIF topics.thumb -->" class="img-rounded user-img" title="{topics.user.username}"/>
</a>

<h3>
Expand Down
4 changes: 2 additions & 2 deletions public/templates/popular.tpl
Expand Up @@ -26,8 +26,8 @@
<!-- BEGIN topics -->
<li class="category-item <!-- IF topics.deleted --> deleted<!-- ENDIF topics.deleted --><!-- IF topics.unread --> unread<!-- ENDIF topics.unread -->">
<div class="col-md-12 col-xs-12 panel panel-default topic-row">
<a href="{relative_path}/user/{topics.userslug}" class="pull-left">
<img class="img-rounded user-img" src="{topics.picture}" title="{topics.username}" />
<a href="{relative_path}/user/{topics.user.userslug}" class="pull-left">
<img class="img-rounded user-img" src="{topics.user.picture}" title="{topics.user.username}" />
</a>

<h3>
Expand Down
4 changes: 2 additions & 2 deletions public/templates/recent.tpl
Expand Up @@ -27,8 +27,8 @@
<!-- BEGIN topics -->
<li class="category-item <!-- IF topics.deleted --> deleted<!-- ENDIF topics.deleted --><!-- IF topics.unread --> unread<!-- ENDIF topics.unread -->">
<div class="col-md-12 col-xs-12 panel panel-default topic-row">
<a href="{relative_path}/user/{topics.userslug}" class="pull-left">
<img class="img-rounded user-img" src="{topics.picture}" title="{topics.username}" />
<a href="{relative_path}/user/{topics.user.userslug}" class="pull-left">
<img class="img-rounded user-img" src="{topics.user.picture}" title="{topics.user.username}" />
</a>

<h3>
Expand Down
4 changes: 2 additions & 2 deletions public/templates/unread.tpl
Expand Up @@ -21,8 +21,8 @@
<!-- BEGIN topics -->
<li class="category-item<!-- IF topics.deleted --> deleted<!-- ENDIF topics.deleted -->" data-tid="{topics.tid}">
<div class="col-md-12 col-xs-12 panel panel-default topic-row">
<a href="{relative_path}/user/{topics.userslug}" class="pull-left">
<img class="img-rounded user-img" src="{topics.picture}" title="{topics.username}" />
<a href="{relative_path}/user/{topics.user.userslug}" class="pull-left">
<img class="img-rounded user-img" src="{topics.user.picture}" title="{topics.user.username}" />
</a>
<h3>
<a href="{relative_path}/topic/{topics.slug}">
Expand Down
25 changes: 5 additions & 20 deletions src/database/mongo.js
Expand Up @@ -82,18 +82,6 @@
//
// helper functions
//
function removeHiddenFields(item) {
if(item) {
if(item._id) {
delete item._id;
}
if(item._key) {
delete item._key;
}
}
return item;
}

function findItem(data, key) {
if(!data) {
return null;
Expand Down Expand Up @@ -261,11 +249,7 @@
};

module.getObject = function(key, callback) {
db.collection('objects').findOne({_key:key}, function(err, item) {
removeHiddenFields(item);

callback(err, item);
});
db.collection('objects').findOne({_key:key}, {_id:0, _key:0}, callback);
};

module.getObjects = function(keys, callback) {
Expand Down Expand Up @@ -302,7 +286,9 @@

module.getObjectFields = function(key, fields, callback) {

var _fields = {};
var _fields = {
_id: 0
};
for(var i=0; i<fields.length; ++i) {
if (typeof fields[i] !== 'string') {
fields[i] = fields[i].toString();
Expand All @@ -312,6 +298,7 @@
_fields[fields[i]] = 1;
}


db.collection('objects').findOne({_key:key}, _fields, function(err, item) {

if(err) {
Expand All @@ -328,8 +315,6 @@
}
}

removeHiddenFields(item);

callback(null, item);
});
};
Expand Down
138 changes: 86 additions & 52 deletions src/topics.js
Expand Up @@ -323,17 +323,35 @@ var async = require('async'),
};

Topics.getTopicData = function(tid, callback) {
db.getObject('topic:' + tid, function(err, data) {
if(err) {
return callback(err, null);
Topics.getTopicsData([tid], function(err, topics) {
if (err) {
return callback(err);
}

callback(null, topics ? topics[0] : null);
});
};

Topics.getTopicsData = function(tids, callback) {
var keys = [];

for (var i=0; i<tids.length; ++i) {
keys.push('topic:' + tids[i]);
}

db.getObjects(keys, function(err, topics) {
if (err) {
return callback(err);
}

if(data) {
data.title = validator.escape(data.title);
data.relativeTime = utils.toISOString(data.timestamp);
for (var i=0; i<tids.length; ++i) {
if(topics[i]) {
topics[i].title = validator.escape(topics[i].title);
topics[i].relativeTime = utils.toISOString(topics[i].timestamp);
}
}

callback(null, data);
callback(null, topics);
});
};

Expand All @@ -352,9 +370,12 @@ var async = require('async'),
userData = {};
}

topic.username = userData.username || 'Anonymous';
topic.userslug = userData.userslug || '';
topic.picture = userData.picture || gravatar.url('', {}, true);
topic.user = {
username: userData.username || 'Anonymous',
userslug: userData.userslug || '',
picture: userData.picture || gravatar.url('', {}, true)
};

callback(null, topic);
});
});
Expand Down Expand Up @@ -671,73 +692,86 @@ var async = require('async'),
return callback(null, []);
}

function getTopicInfo(topicData, callback) {
var categoryCache = {},
privilegeCache = {},
userCache = {};

function loadTopicInfo(topicData, next) {

function isTopicVisible(topicData, topicInfo) {
var deleted = parseInt(topicData.deleted, 10) !== 0;
return !deleted || (deleted && topicInfo.privileges.view_deleted) || parseInt(topicData.uid, 10) === parseInt(uid, 10);
}

async.parallel({
hasread : function (next) {
hasread: function(next) {
Topics.hasReadTopic(topicData.tid, uid, next);
},
teaser : function (next) {
teaser: function(next) {
Topics.getTeaser(topicData.tid, next);
},
privileges : function (next) {
privileges: function(next) {
if (privilegeCache[topicData.cid]) {
return next(null, privilegeCache[topicData.cid]);
}
categoryTools.privileges(topicData.cid, uid, next);
},
categoryData : function (next) {
categoryData: function(next) {
if (categoryCache[topicData.cid]) {
return next(null, categoryCache[topicData.cid]);
}
categories.getCategoryFields(topicData.cid, ['name', 'slug', 'icon'], next);
},
user: function(next) {
if (userCache[topicData.uid]) {
return next(null, userCache[topicData.uid]);
}
user.getUserFields(topicData.uid, ['username', 'userslug', 'picture'], next);
}
}, callback);
}

function isTopicVisible(topicData, topicInfo) {
var deleted = parseInt(topicData.deleted, 10) !== 0;

return !deleted || (deleted && topicInfo.privileges.view_deleted) || parseInt(topicData.uid, 10) === parseInt(uid, 10);
}

function loadTopic(tid, next) {

Topics.getTopicDataWithUser(tid, function(err, topicData) {
}, function(err, topicInfo) {
if(err) {
return next(err);
}

if (!topicData) {
privilegeCache[topicData.cid] = topicInfo.privileges;
categoryCache[topicData.cid] = topicInfo.categoryData;
userCache[topicData.uid] = topicInfo.user;

if (!isTopicVisible(topicData, topicInfo)) {
topicData = null;
return next();
}

getTopicInfo(topicData, function(err, topicInfo) {
if(err) {
return next(err);
}

if (!isTopicVisible(topicData, topicInfo)) {
return next();
}

topicData.pinned = parseInt(topicData.pinned, 10) === 1;
topicData.locked = parseInt(topicData.locked, 10) === 1;
topicData.deleted = parseInt(topicData.deleted, 10) === 1;
topicData.unread = !(topicInfo.hasread && parseInt(uid, 10) !== 0);
topicData.unreplied = parseInt(topicData.postcount, 10) === 1;
topicData.pinned = parseInt(topicData.pinned, 10) === 1;
topicData.locked = parseInt(topicData.locked, 10) === 1;
topicData.deleted = parseInt(topicData.deleted, 10) === 1;
topicData.unread = !(topicInfo.hasread && parseInt(uid, 10) !== 0);
topicData.unreplied = parseInt(topicData.postcount, 10) === 1;

topicData.category = topicInfo.categoryData;
topicData.teaser = topicInfo.teaser;
topicData.category = topicInfo.categoryData;
topicData.teaser = topicInfo.teaser;
topicData.user = topicInfo.user;

next(null, topicData);
});
next();
});
}

async.map(tids, loadTopic, function(err, topics) {
if(err) {
Topics.getTopicsData(tids, function(err, topics) {
if (err) {
return callback(err);
}

topics = topics.filter(function(topic) {
return !!topic;
});
async.eachSeries(topics, loadTopicInfo, function(err) {
if(err) {
return callback(err);
}

callback(null, topics);
topics = topics.filter(function(topic) {
return !!topic;
});

callback(null, topics);
});
});
};

Expand Down

0 comments on commit 4309fe3

Please sign in to comment.