mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-02 20:16:04 +01:00
changed categories to hash
This commit is contained in:
@@ -11,14 +11,17 @@ var RDB = require('./../redis.js'),
|
||||
var slug = cid + '/' + utils.slugify(data.name);
|
||||
RDB.rpush('categories:cid', cid);
|
||||
|
||||
// Topic Info
|
||||
RDB.set('cid:' + cid + ':name', data.name);
|
||||
RDB.set('cid:' + cid + ':description', data.description);
|
||||
RDB.set('cid:' + cid + ':icon', data.icon);
|
||||
RDB.set('cid:' + cid + ':blockclass', data.blockclass);
|
||||
RDB.set('cid:' + cid + ':slug', slug);
|
||||
RDB.hmset('category:' + cid, {
|
||||
cid: cid,
|
||||
name: data.name,
|
||||
description: data.description,
|
||||
icon: data.icon,
|
||||
blockclass: data.blockclass,
|
||||
slug: slug,
|
||||
topic_count: 0
|
||||
});
|
||||
|
||||
RDB.set('category:slug:' + slug + ':cid', cid);
|
||||
RDB.set('categoryslug:' + slug + ':cid', cid);
|
||||
|
||||
if (callback) callback({'status': 1});
|
||||
});
|
||||
@@ -36,8 +39,8 @@ var RDB = require('./../redis.js'),
|
||||
if (key == 'name') {
|
||||
// reset slugs if name is updated
|
||||
var slug = cid + '/' + utils.slugify(category[key]);
|
||||
RDB.set('cid:' + cid + ':slug', slug);
|
||||
RDB.set('category:slug:' + slug + ':cid', cid);
|
||||
RDB.hset('category:' + cid, 'slug', slug);
|
||||
RDB.set('categoryslug:' + slug + ':cid', cid);
|
||||
|
||||
RDB.smembers('categories:' + cid + ':tid', function(err, tids) {
|
||||
var pipe = RDB.multi();
|
||||
|
||||
@@ -9,14 +9,13 @@ var RDB = require('./redis.js'),
|
||||
|
||||
Categories.getCategoryById = function(category_id, current_user, callback) {
|
||||
RDB.smembers('categories:' + category_id + ':tid', function(err, tids) {
|
||||
RDB.multi()
|
||||
.get('cid:' + category_id + ':name')
|
||||
.smembers('cid:' + category_id + ':active_users')
|
||||
.get('cid:' + category_id + ':slug')
|
||||
.exec(function(err, replies) {
|
||||
var category_name = replies[0],
|
||||
active_users = replies[1],
|
||||
category_slug = replies[2];
|
||||
|
||||
Categories.getCategoryData(category_id, function(categoryData) {
|
||||
|
||||
var category_name = categoryData.name;
|
||||
category_slug = categoryData.slug;
|
||||
|
||||
RDB.smembers('cid:' + category_id + ':active_users', function(err, active_users) {
|
||||
|
||||
if (category_name === null) {
|
||||
callback(false);
|
||||
@@ -85,6 +84,7 @@ var RDB = require('./redis.js'),
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -115,6 +115,7 @@ var RDB = require('./redis.js'),
|
||||
|
||||
// not the permanent location for this function
|
||||
Categories.getTopicsByTids = function(tids, current_user, callback, category_id /*temporary*/) {
|
||||
|
||||
var retrieved_topics = [];
|
||||
var topicCountToLoad = tids.length;
|
||||
|
||||
@@ -271,6 +272,14 @@ var RDB = require('./redis.js'),
|
||||
});
|
||||
}
|
||||
|
||||
Categories.hasReadCategory = function(cid, uid, callback) {
|
||||
RDB.sismember('cid:' + cid + ':read_by_uid', uid, function(err, hasRead) {
|
||||
RDB.handle(err);
|
||||
|
||||
callback(hasRead);
|
||||
});
|
||||
}
|
||||
|
||||
Categories.getRecentReplies = function(cid, callback) {
|
||||
RDB.zrevrange('categories:recent_posts:cid:' + cid, 0, 4, function(err, pids) {
|
||||
|
||||
@@ -284,69 +293,40 @@ var RDB = require('./redis.js'),
|
||||
});
|
||||
}
|
||||
|
||||
Categories.getCategoryData = function(cid, callback) {
|
||||
RDB.hgetall('category:' + cid, function(err, data) {
|
||||
if(err === null)
|
||||
callback(data);
|
||||
else
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
|
||||
Categories.getCategories = function(cids, callback, current_user) {
|
||||
if (cids.length === 0) {
|
||||
callback({'categories' : []});
|
||||
return;
|
||||
}
|
||||
|
||||
var name = [],
|
||||
description = [],
|
||||
icon = [],
|
||||
blockclass = [],
|
||||
slug = [],
|
||||
topic_count = [],
|
||||
has_read = {};
|
||||
var categories = [];
|
||||
|
||||
for (var i=0, ii=cids.length; i<ii; i++) {
|
||||
name.push('cid:' + cids[i] + ':name');
|
||||
description.push('cid:' + cids[i] + ':description');
|
||||
icon.push('cid:' + cids[i] + ':icon');
|
||||
blockclass.push('cid:' + cids[i] + ':blockclass');
|
||||
slug.push('cid:' + cids[i] + ':slug');
|
||||
topic_count.push('cid:' + cids[i] + ':topiccount');
|
||||
}
|
||||
for(var i=0; i<cids.length; ++i) {
|
||||
Categories.getCategoryData(cids[i], function(categoryData) {
|
||||
|
||||
RDB.multi()
|
||||
.mget(name)
|
||||
.mget(description)
|
||||
.mget(icon)
|
||||
.mget(blockclass)
|
||||
.mget(slug)
|
||||
.mget(topic_count)
|
||||
.exec(function(err, replies) {
|
||||
name = replies[0];
|
||||
description = replies[1];
|
||||
icon = replies[2];
|
||||
blockclass = replies[3];
|
||||
slug = replies[4];
|
||||
topic_count = replies[5];
|
||||
if(!categoryData)
|
||||
return;
|
||||
|
||||
Categories.hasReadCategory(categoryData.cid, current_user, function(hasRead) {
|
||||
categoryData['badgeclass'] = (parseInt(categoryData.topic_count,10) === 0 || (hasRead && current_user != 0)) ? '' : 'badge-important';
|
||||
|
||||
function generateCategories() {
|
||||
var categories = [];
|
||||
for (var i=0, ii=cids.length; i<ii; i++) {
|
||||
categories.push({
|
||||
'name' : name[i],
|
||||
'cid' : cids[i],
|
||||
'slug' : slug[i],
|
||||
'description' : description[i],
|
||||
'blockclass' : blockclass[i],
|
||||
'icon' : icon[i],
|
||||
'badgeclass' : (!topic_count[i] || (has_read[i] && current_user !=0)) ? '' : 'badge-important',
|
||||
'topic_count' : topic_count[i] || 0
|
||||
});
|
||||
}
|
||||
categories.push(categoryData);
|
||||
|
||||
callback({'categories': categories});
|
||||
}
|
||||
|
||||
Categories.hasReadCategories(cids, current_user, function(read_data) {
|
||||
has_read = read_data;
|
||||
generateCategories();
|
||||
});
|
||||
if(categories.length === cids.length)
|
||||
callback({'categories': categories});
|
||||
|
||||
}) ;
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
}(exports));
|
||||
@@ -139,7 +139,6 @@ marked.setOptions({
|
||||
}
|
||||
|
||||
function getReadStatus(next) {
|
||||
// posts.create calls this function - should be an option to skip this because its always true
|
||||
if (uid && parseInt(uid) > 0) {
|
||||
RDB.sismember(schema.topics(tid).read_by_uid, uid, function(err, read) {
|
||||
next(null, read);
|
||||
@@ -400,7 +399,7 @@ marked.setOptions({
|
||||
Topics.setTopicField(tid, 'category_slug', data.categories[0].slug);
|
||||
});
|
||||
|
||||
RDB.incr('cid:' + category_id + ':topiccount');
|
||||
RDB.hincrby('category:' + category_id, 'topic_count', 1);
|
||||
RDB.incr('totaltopiccount');
|
||||
|
||||
feed.updateCategory(category_id);
|
||||
|
||||
@@ -314,9 +314,12 @@ var express = require('express'),
|
||||
|
||||
app.all('/test', function(req, res) {
|
||||
|
||||
topics.getTopicById(24, 1, function(data) {
|
||||
/*topics.getTopicById(24, 1, function(data) {
|
||||
res.send(data);
|
||||
});
|
||||
});*/
|
||||
categories.getCategoryById(1,1, function(data) {
|
||||
res.send(data);
|
||||
},1);
|
||||
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user