mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-02 12:05:57 +01:00
removing static saving of recent post, and added in dynamic pulling on Topics.get
This commit is contained in:
@@ -21,8 +21,8 @@
|
|||||||
<div class="span11 topic-row img-polaroid">
|
<div class="span11 topic-row img-polaroid">
|
||||||
<div class="latest-post visible-desktop">
|
<div class="latest-post visible-desktop">
|
||||||
<div class="pull-right">
|
<div class="pull-right">
|
||||||
<img style="width: 48px; height: 48px; /*temporary*/" src="/graph/users/{topics.recent_author}/picture" />
|
<img style="width: 48px; height: 48px; /*temporary*/" src="/graph/users/{topics.teaser_username}/picture" />
|
||||||
<p><strong>{topics.recent_author}</strong>: {topics.recent_post}</p>
|
<p><strong>{topics.teaser_username}</strong>: {topics.teaser_text}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ marked.setOptions({
|
|||||||
var uid = post_data.uid[i],
|
var uid = post_data.uid[i],
|
||||||
pid = post_data.pid[i];
|
pid = post_data.pid[i];
|
||||||
|
|
||||||
console.log(current_user, uid);
|
|
||||||
if (post_data.deleted[i] === null || (post_data.deleted[i] === '1' && manage_content) || current_user === uid) {
|
if (post_data.deleted[i] === null || (post_data.deleted[i] === '1' && manage_content) || current_user === uid) {
|
||||||
var post_obj = {
|
var post_obj = {
|
||||||
'pid' : pid,
|
'pid' : pid,
|
||||||
@@ -307,9 +306,6 @@ marked.setOptions({
|
|||||||
|
|
||||||
|
|
||||||
user.getUserFields(uid, ['username'], function(data){
|
user.getUserFields(uid, ['username'], function(data){
|
||||||
RDB.set('tid:' + tid + ':recent:post', content);
|
|
||||||
RDB.set('tid:' + tid + ':recent:author', data.username);
|
|
||||||
|
|
||||||
//add active users to this category
|
//add active users to this category
|
||||||
RDB.get('tid:' + tid + ':cid', function(err, cid) {
|
RDB.get('tid:' + tid + ':cid', function(err, cid) {
|
||||||
RDB.handle(err);
|
RDB.handle(err);
|
||||||
|
|||||||
@@ -3,7 +3,13 @@ var RDB = require('./redis.js'),
|
|||||||
utils = require('./utils.js'),
|
utils = require('./utils.js'),
|
||||||
user = require('./user.js'),
|
user = require('./user.js'),
|
||||||
configs = require('../config.js'),
|
configs = require('../config.js'),
|
||||||
categories = require('./categories.js');
|
categories = require('./categories.js'),
|
||||||
|
marked = require('marked')
|
||||||
|
async = require('async');
|
||||||
|
|
||||||
|
marked.setOptions({
|
||||||
|
breaks: true
|
||||||
|
});
|
||||||
|
|
||||||
(function(Topics) {
|
(function(Topics) {
|
||||||
|
|
||||||
@@ -30,8 +36,6 @@ var RDB = require('./redis.js'),
|
|||||||
locked = [],
|
locked = [],
|
||||||
deleted = [],
|
deleted = [],
|
||||||
pinned = [],
|
pinned = [],
|
||||||
recent_post = [],
|
|
||||||
recent_author = [];
|
|
||||||
|
|
||||||
for (var i=0, ii=tids.length; i<ii; i++) {
|
for (var i=0, ii=tids.length; i<ii; i++) {
|
||||||
title.push('tid:' + tids[i] + ':title');
|
title.push('tid:' + tids[i] + ':title');
|
||||||
@@ -42,8 +46,6 @@ var RDB = require('./redis.js'),
|
|||||||
locked.push('tid:' + tids[i] + ':locked');
|
locked.push('tid:' + tids[i] + ':locked');
|
||||||
deleted.push('tid:' + tids[i] + ':deleted');
|
deleted.push('tid:' + tids[i] + ':deleted');
|
||||||
pinned.push('tid:' + tids[i] + ':pinned');
|
pinned.push('tid:' + tids[i] + ':pinned');
|
||||||
recent_post.push('tid:' + tids[i] + ':recent:post');
|
|
||||||
recent_author.push('tid:' + tids[i] + ':recent:author');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var multi = RDB.multi()
|
var multi = RDB.multi()
|
||||||
@@ -60,8 +62,6 @@ var RDB = require('./redis.js'),
|
|||||||
.mget(locked)
|
.mget(locked)
|
||||||
.mget(deleted)
|
.mget(deleted)
|
||||||
.mget(pinned)
|
.mget(pinned)
|
||||||
.mget(recent_post)
|
|
||||||
.mget(recent_author)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -84,18 +84,17 @@ var RDB = require('./redis.js'),
|
|||||||
locked = replies[7];
|
locked = replies[7];
|
||||||
deleted = replies[8];
|
deleted = replies[8];
|
||||||
pinned = replies[9];
|
pinned = replies[9];
|
||||||
recent_post = replies[10];
|
|
||||||
recent_author = replies[11];
|
|
||||||
|
|
||||||
var usernames,
|
var usernames,
|
||||||
has_read,
|
has_read,
|
||||||
moderators;
|
moderators,
|
||||||
|
teaser_info;
|
||||||
|
|
||||||
function generate_topic() {
|
function generate_topic() {
|
||||||
if (!usernames || !has_read || !moderators) return;
|
if (!usernames || !has_read || !moderators || !teaser_info) return;
|
||||||
|
|
||||||
|
|
||||||
for (var i=0, ii=title.length; i<ii; i++) {
|
for (var i=0, ii=title.length; i<ii; i++) {
|
||||||
|
console.log(teaser_info[i]);
|
||||||
topics.push({
|
topics.push({
|
||||||
'title' : title[i],
|
'title' : title[i],
|
||||||
'uid' : uid[i],
|
'uid' : uid[i],
|
||||||
@@ -109,9 +108,10 @@ var RDB = require('./redis.js'),
|
|||||||
'pinned': parseInt(pinned[i] || 0), // For sorting purposes
|
'pinned': parseInt(pinned[i] || 0), // For sorting purposes
|
||||||
'pin-icon': pinned[i] === '1' ? 'icon-pushpin' : 'none',
|
'pin-icon': pinned[i] === '1' ? 'icon-pushpin' : 'none',
|
||||||
'badgeclass' : (has_read[i] && current_user !=0) ? '' : 'badge-important',
|
'badgeclass' : (has_read[i] && current_user !=0) ? '' : 'badge-important',
|
||||||
'recent_post' : recent_post[i],
|
'teaser_text': teaser_info[i].text,
|
||||||
'recent_author' : recent_author[i]
|
'teaser_username': teaser_info[i].username
|
||||||
});
|
});
|
||||||
|
console.log(teaser_info[i].text, teaser_info[i].username);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Float pinned topics to the top
|
// Float pinned topics to the top
|
||||||
@@ -152,7 +152,12 @@ var RDB = require('./redis.js'),
|
|||||||
categories.getModerators(category_id, function(mods) {
|
categories.getModerators(category_id, function(mods) {
|
||||||
moderators = mods;
|
moderators = mods;
|
||||||
generate_topic();
|
generate_topic();
|
||||||
})
|
});
|
||||||
|
|
||||||
|
Topics.get_teasers(tids, function(teasers) {
|
||||||
|
teaser_info = teasers;
|
||||||
|
generate_topic();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
callback({
|
callback({
|
||||||
@@ -189,6 +194,42 @@ var RDB = require('./redis.js'),
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Topics.get_teasers = function(tids, callback) {
|
||||||
|
var requests = [];
|
||||||
|
if (Array.isArray(tids)) {
|
||||||
|
for(x=0,numTids=tids.length;x<numTids;x++) {
|
||||||
|
(function(x) {
|
||||||
|
requests.push(function(next) {
|
||||||
|
Topics.get_teaser(tids[x], function(teaser_info) {
|
||||||
|
next(null, teaser_info);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})(x);
|
||||||
|
}
|
||||||
|
async.parallel(requests, function(err, teasers) {
|
||||||
|
callback(teasers);
|
||||||
|
});
|
||||||
|
} else callback([]);
|
||||||
|
}
|
||||||
|
|
||||||
|
Topics.get_teaser = function(tid, callback) {
|
||||||
|
RDB.lrange('tid:' + tid + ':posts', -1, -1, function(err, pid) {
|
||||||
|
if (pid !== null) {
|
||||||
|
RDB.mget([
|
||||||
|
'pid:' + pid + ':content',
|
||||||
|
'pid:' + pid + ':uid'
|
||||||
|
], function(err, content) {
|
||||||
|
user.getUserField(content[1], 'username', function(username) {
|
||||||
|
callback({
|
||||||
|
"text": utils.strip_tags(marked(content[0])),
|
||||||
|
"username": username
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
Topics.post = function(socket, uid, title, content, category_id) {
|
Topics.post = function(socket, uid, title, content, category_id) {
|
||||||
if (!category_id) throw new Error('Attempted to post without a category_id');
|
if (!category_id) throw new Error('Attempted to post without a category_id');
|
||||||
|
|
||||||
|
|||||||
12
src/utils.js
12
src/utils.js
@@ -47,8 +47,18 @@ var utils = {
|
|||||||
.replace(/-+/g, '-'); // collapse dashes
|
.replace(/-+/g, '-'); // collapse dashes
|
||||||
|
|
||||||
return str;
|
return str;
|
||||||
}
|
},
|
||||||
|
|
||||||
|
// Willingly stolen from: http://phpjs.org/functions/strip_tags/
|
||||||
|
'strip_tags': function(input, allowed) {
|
||||||
|
allowed = (((allowed || "") + "").toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join(''); // making sure the allowed arg is a string containing only tags in lowercase (<a><b><c>)
|
||||||
|
var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi,
|
||||||
|
commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
|
||||||
|
|
||||||
|
return input.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) {
|
||||||
|
return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = utils;
|
module.exports = utils;
|
||||||
@@ -227,13 +227,12 @@ var express = require('express'),
|
|||||||
app.get('/api/:method/:id*', api_method);
|
app.get('/api/:method/:id*', api_method);
|
||||||
|
|
||||||
app.get('/test', function(req, res) {
|
app.get('/test', function(req, res) {
|
||||||
categories.getModerators(2, function(mods) {
|
topics.get_teasers([1, 2, 3], function(teasers) {
|
||||||
res.send(JSON.stringify(mods));
|
res.send(JSON.stringify(teasers));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//START TODO: MOVE TO GRAPH.JS
|
//START TODO: MOVE TO GRAPH.JS
|
||||||
|
|
||||||
app.get('/graph/users/:username/picture', function(req, res) {
|
app.get('/graph/users/:username/picture', function(req, res) {
|
||||||
|
|||||||
Reference in New Issue
Block a user