mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-01 19:46:01 +01:00
@@ -62,6 +62,9 @@
|
|||||||
"users": "Users",
|
"users": "Users",
|
||||||
"topics": "Topics",
|
"topics": "Topics",
|
||||||
"posts": "Posts",
|
"posts": "Posts",
|
||||||
|
"best": "Best",
|
||||||
|
"upvoted": "Upvoted",
|
||||||
|
"downvoted": "Downvoted",
|
||||||
"views": "Views",
|
"views": "Views",
|
||||||
"reputation": "Reputation",
|
"reputation": "Reputation",
|
||||||
|
|
||||||
|
|||||||
@@ -40,6 +40,9 @@
|
|||||||
"account/favourites": "%1's Favourite Posts",
|
"account/favourites": "%1's Favourite Posts",
|
||||||
"account/settings": "User Settings",
|
"account/settings": "User Settings",
|
||||||
"account/watched": "Topics watched by %1",
|
"account/watched": "Topics watched by %1",
|
||||||
|
"account/upvoted": "Posts upvoted by %1",
|
||||||
|
"account/downvoted": "Posts downvoted by %1",
|
||||||
|
"account/best": "Best posts made by %1",
|
||||||
|
|
||||||
"maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.",
|
"maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.",
|
||||||
"maintenance.messageIntro": "Additionally, the administrator has left this message:",
|
"maintenance.messageIntro": "Additionally, the administrator has left this message:",
|
||||||
|
|||||||
@@ -83,6 +83,9 @@
|
|||||||
"has_no_posts": "This user hasn't posted anything yet.",
|
"has_no_posts": "This user hasn't posted anything yet.",
|
||||||
"has_no_topics": "This user hasn't posted any topics yet.",
|
"has_no_topics": "This user hasn't posted any topics yet.",
|
||||||
"has_no_watched_topics": "This user hasn't watched any topics yet.",
|
"has_no_watched_topics": "This user hasn't watched any topics yet.",
|
||||||
|
"has_no_upvoted_posts": "This user hasn't upvoted any posts yet.",
|
||||||
|
"has_no_downvoted_posts": "This user hasn't downvoted any posts yet.",
|
||||||
|
"has_no_voted_posts": "This user has no voted posts",
|
||||||
|
|
||||||
"email_hidden": "Email Hidden",
|
"email_hidden": "Email Hidden",
|
||||||
"hidden": "hidden",
|
"hidden": "hidden",
|
||||||
|
|||||||
17
public/src/client/account/best.js
Normal file
17
public/src/client/account/best.js
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
/* globals define */
|
||||||
|
|
||||||
|
define('forum/account/best', ['forum/account/header', 'forum/account/posts'], function(header, posts) {
|
||||||
|
var Best = {};
|
||||||
|
|
||||||
|
Best.init = function() {
|
||||||
|
header.init();
|
||||||
|
|
||||||
|
$('[component="post/content"] img:not(.not-responsive)').addClass('img-responsive');
|
||||||
|
|
||||||
|
posts.handleInfiniteScroll('posts.loadMoreBestPosts', 'account/best');
|
||||||
|
};
|
||||||
|
|
||||||
|
return Best;
|
||||||
|
});
|
||||||
17
public/src/client/account/downvoted.js
Normal file
17
public/src/client/account/downvoted.js
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
/* globals define */
|
||||||
|
|
||||||
|
define('forum/account/downvoted', ['forum/account/header', 'forum/account/posts'], function(header, posts) {
|
||||||
|
var Downvoted = {};
|
||||||
|
|
||||||
|
Downvoted.init = function() {
|
||||||
|
header.init();
|
||||||
|
|
||||||
|
$('[component="post/content"] img:not(.not-responsive)').addClass('img-responsive');
|
||||||
|
|
||||||
|
posts.handleInfiniteScroll('posts.loadMoreDownVotedPosts', 'account/downvoted');
|
||||||
|
};
|
||||||
|
|
||||||
|
return Downvoted;
|
||||||
|
});
|
||||||
17
public/src/client/account/upvoted.js
Normal file
17
public/src/client/account/upvoted.js
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
/* globals define */
|
||||||
|
|
||||||
|
define('forum/account/upvoted', ['forum/account/header', 'forum/account/posts'], function(header, posts) {
|
||||||
|
var Upvoted = {};
|
||||||
|
|
||||||
|
Upvoted.init = function() {
|
||||||
|
header.init();
|
||||||
|
|
||||||
|
$('[component="post/content"] img:not(.not-responsive)').addClass('img-responsive');
|
||||||
|
|
||||||
|
posts.handleInfiniteScroll('posts.loadMoreUpVotedPosts', 'account/upvoted');
|
||||||
|
};
|
||||||
|
|
||||||
|
return Upvoted;
|
||||||
|
});
|
||||||
@@ -14,22 +14,90 @@ var async = require('async'),
|
|||||||
var postsController = {};
|
var postsController = {};
|
||||||
|
|
||||||
postsController.getFavourites = function(req, res, next) {
|
postsController.getFavourites = function(req, res, next) {
|
||||||
getFromUserSet('account/favourites', 'favourites', '[[user:favourites]]', posts.getPostSummariesFromSet, 'posts', req, res, next);
|
var data = {
|
||||||
|
template: 'account/favourites',
|
||||||
|
set: 'favourites',
|
||||||
|
type: 'posts',
|
||||||
|
noItemsFoundKey: '[[topic:favourites.has_no_favourites]]',
|
||||||
|
method: posts.getPostSummariesFromSet,
|
||||||
|
crumb: '[[user:favourites]]'
|
||||||
|
};
|
||||||
|
getFromUserSet(data, req, res, next);
|
||||||
};
|
};
|
||||||
|
|
||||||
postsController.getPosts = function(req, res, next) {
|
postsController.getPosts = function(req, res, next) {
|
||||||
getFromUserSet('account/posts', 'posts', '[[global:posts]]', posts.getPostSummariesFromSet, 'posts', req, res, next);
|
var data = {
|
||||||
|
template: 'account/posts',
|
||||||
|
set: 'posts',
|
||||||
|
type: 'posts',
|
||||||
|
noItemsFoundKey: '[[user:has_no_posts]]',
|
||||||
|
method: posts.getPostSummariesFromSet,
|
||||||
|
crumb: '[[global:posts]]'
|
||||||
|
};
|
||||||
|
getFromUserSet(data, req, res, next);
|
||||||
|
};
|
||||||
|
|
||||||
|
postsController.getUpVotedPosts = function(req, res, next) {
|
||||||
|
var data = {
|
||||||
|
template: 'account/upvoted',
|
||||||
|
set: 'upvote',
|
||||||
|
type: 'posts',
|
||||||
|
noItemsFoundKey: '[[user:has_no_upvoted_posts]]',
|
||||||
|
method: posts.getPostSummariesFromSet,
|
||||||
|
crumb: '[[global:upvoted]]'
|
||||||
|
};
|
||||||
|
getFromUserSet(data, req, res, next);
|
||||||
|
};
|
||||||
|
|
||||||
|
postsController.getDownVotedPosts = function(req, res, next) {
|
||||||
|
var data = {
|
||||||
|
template: 'account/downvoted',
|
||||||
|
set: 'downvote',
|
||||||
|
type: 'posts',
|
||||||
|
noItemsFoundKey: '[[user:has_no_downvoted_posts]]',
|
||||||
|
method: posts.getPostSummariesFromSet,
|
||||||
|
crumb: '[[global:downvoted]]'
|
||||||
|
};
|
||||||
|
getFromUserSet(data, req, res, next);
|
||||||
|
};
|
||||||
|
|
||||||
|
postsController.getBestPosts = function(req, res, next) {
|
||||||
|
var data = {
|
||||||
|
template: 'account/best',
|
||||||
|
set: 'posts:votes',
|
||||||
|
type: 'posts',
|
||||||
|
noItemsFoundKey: '[[user:has_no_voted_posts]]',
|
||||||
|
method: posts.getPostSummariesFromSet,
|
||||||
|
crumb: '[[global:best]]'
|
||||||
|
};
|
||||||
|
getFromUserSet(data, req, res, next);
|
||||||
};
|
};
|
||||||
|
|
||||||
postsController.getWatchedTopics = function(req, res, next) {
|
postsController.getWatchedTopics = function(req, res, next) {
|
||||||
getFromUserSet('account/watched', 'followed_tids', '[[user:watched]]',topics.getTopicsFromSet, 'topics', req, res, next);
|
var data = {
|
||||||
|
template: 'account/watched',
|
||||||
|
set: 'followed_tids',
|
||||||
|
type: 'topics',
|
||||||
|
noItemsFoundKey: '[[user:has_no_watched_topics]]',
|
||||||
|
method: topics.getTopicsFromSet,
|
||||||
|
crumb: '[[user:watched]]'
|
||||||
|
};
|
||||||
|
getFromUserSet(data, req, res, next);
|
||||||
};
|
};
|
||||||
|
|
||||||
postsController.getTopics = function(req, res, next) {
|
postsController.getTopics = function(req, res, next) {
|
||||||
getFromUserSet('account/topics', 'topics', '[[global:topics]]', topics.getTopicsFromSet, 'topics', req, res, next);
|
var data = {
|
||||||
|
template: 'account/topics',
|
||||||
|
set: 'topics',
|
||||||
|
type: 'topics',
|
||||||
|
noItemsFoundKey: '[[user:has_no_topics]]',
|
||||||
|
method: topics.getTopicsFromSet,
|
||||||
|
crumb: '[[global:topics]]'
|
||||||
|
};
|
||||||
|
getFromUserSet(data, req, res, next);
|
||||||
};
|
};
|
||||||
|
|
||||||
function getFromUserSet(tpl, set, crumb, method, type, req, res, next) {
|
function getFromUserSet(data, req, res, next) {
|
||||||
async.parallel({
|
async.parallel({
|
||||||
settings: function(next) {
|
settings: function(next) {
|
||||||
user.getSettings(req.uid, next);
|
user.getSettings(req.uid, next);
|
||||||
@@ -44,10 +112,10 @@ function getFromUserSet(tpl, set, crumb, method, type, req, res, next) {
|
|||||||
|
|
||||||
var userData = results.userData;
|
var userData = results.userData;
|
||||||
|
|
||||||
var setName = 'uid:' + userData.uid + ':' + set;
|
var setName = 'uid:' + userData.uid + ':' + data.set;
|
||||||
|
|
||||||
var page = Math.max(1, parseInt(req.query.page, 10) || 1);
|
var page = Math.max(1, parseInt(req.query.page, 10) || 1);
|
||||||
var itemsPerPage = (tpl === 'account/topics' || tpl === 'account/watched') ? results.settings.topicsPerPage : results.settings.postsPerPage;
|
var itemsPerPage = (data.template === 'account/topics' || data.template === 'account/watched') ? results.settings.topicsPerPage : results.settings.postsPerPage;
|
||||||
|
|
||||||
async.parallel({
|
async.parallel({
|
||||||
itemCount: function(next) {
|
itemCount: function(next) {
|
||||||
@@ -60,23 +128,24 @@ function getFromUserSet(tpl, set, crumb, method, type, req, res, next) {
|
|||||||
data: function(next) {
|
data: function(next) {
|
||||||
var start = (page - 1) * itemsPerPage;
|
var start = (page - 1) * itemsPerPage;
|
||||||
var stop = start + itemsPerPage - 1;
|
var stop = start + itemsPerPage - 1;
|
||||||
method(setName, req.uid, start, stop, next);
|
data.method(setName, req.uid, start, stop, next);
|
||||||
}
|
}
|
||||||
}, function(err, results) {
|
}, function(err, results) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next(err);
|
return next(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
userData[type] = results.data[type];
|
userData[data.type] = results.data[data.type];
|
||||||
userData.nextStart = results.data.nextStart;
|
userData.nextStart = results.data.nextStart;
|
||||||
|
|
||||||
var pageCount = Math.ceil(results.itemCount / itemsPerPage);
|
var pageCount = Math.ceil(results.itemCount / itemsPerPage);
|
||||||
userData.pagination = pagination.create(page, pageCount);
|
userData.pagination = pagination.create(page, pageCount);
|
||||||
|
|
||||||
userData.title = '[[pages:' + tpl + ', ' + userData.username + ']]';
|
userData.noItemsFoundKey = data.noItemsFoundKey;
|
||||||
userData.breadcrumbs = helpers.buildBreadcrumbs([{text: userData.username, url: '/user/' + userData.userslug}, {text: crumb}]);
|
userData.title = '[[pages:' + data.template + ', ' + userData.username + ']]';
|
||||||
|
userData.breadcrumbs = helpers.buildBreadcrumbs([{text: userData.username, url: '/user/' + userData.userslug}, {text: data.crumb}]);
|
||||||
|
|
||||||
res.render(tpl, userData);
|
res.render(data.template, userData);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var async = require('async'),
|
var async = require('async');
|
||||||
winston = require('winston'),
|
var db = require('./database');
|
||||||
db = require('./database'),
|
var posts = require('./posts');
|
||||||
posts = require('./posts'),
|
var user = require('./user');
|
||||||
user = require('./user'),
|
var plugins = require('./plugins');
|
||||||
plugins = require('./plugins'),
|
var meta = require('./meta');
|
||||||
meta = require('./meta');
|
|
||||||
|
|
||||||
(function (Favourites) {
|
(function (Favourites) {
|
||||||
|
|
||||||
@@ -19,7 +18,7 @@ var async = require('async'),
|
|||||||
return callback(new Error('[[error:not-logged-in]]'));
|
return callback(new Error('[[error:not-logged-in]]'));
|
||||||
}
|
}
|
||||||
|
|
||||||
posts.getPostFields(pid, ['pid', 'uid'], function (err, postData) {
|
posts.getPostFields(pid, ['pid', 'uid', 'tid'], function (err, postData) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
@@ -47,7 +46,7 @@ var async = require('async'),
|
|||||||
db.sortedSetAdd('users:reputation', newreputation, postData.uid);
|
db.sortedSetAdd('users:reputation', newreputation, postData.uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
adjustPostVotes(pid, uid, type, unvote, function(err, votes) {
|
adjustPostVotes(postData, uid, type, unvote, function(err, votes) {
|
||||||
postData.votes = votes;
|
postData.votes = votes;
|
||||||
callback(err, {
|
callback(err, {
|
||||||
user: {
|
user: {
|
||||||
@@ -62,19 +61,19 @@ var async = require('async'),
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function adjustPostVotes(pid, uid, type, unvote, callback) {
|
function adjustPostVotes(postData, uid, type, unvote, callback) {
|
||||||
var notType = (type === 'upvote' ? 'downvote' : 'upvote');
|
var notType = (type === 'upvote' ? 'downvote' : 'upvote');
|
||||||
|
|
||||||
async.series([
|
async.series([
|
||||||
function(next) {
|
function(next) {
|
||||||
if (unvote) {
|
if (unvote) {
|
||||||
db.setRemove('pid:' + pid + ':' + type, uid, next);
|
db.setRemove('pid:' + postData.pid + ':' + type, uid, next);
|
||||||
} else {
|
} else {
|
||||||
db.setAdd('pid:' + pid + ':' + type, uid, next);
|
db.setAdd('pid:' + postData.pid + ':' + type, uid, next);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
function(next) {
|
function(next) {
|
||||||
db.setRemove('pid:' + pid + ':' + notType, uid, next);
|
db.setRemove('pid:' + postData.pid + ':' + notType, uid, next);
|
||||||
}
|
}
|
||||||
], function(err) {
|
], function(err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
@@ -83,18 +82,19 @@ var async = require('async'),
|
|||||||
|
|
||||||
async.parallel({
|
async.parallel({
|
||||||
upvotes: function(next) {
|
upvotes: function(next) {
|
||||||
db.setCount('pid:' + pid + ':upvote', next);
|
db.setCount('pid:' + postData.pid + ':upvote', next);
|
||||||
},
|
},
|
||||||
downvotes: function(next) {
|
downvotes: function(next) {
|
||||||
db.setCount('pid:' + pid + ':downvote', next);
|
db.setCount('pid:' + postData.pid + ':downvote', next);
|
||||||
}
|
}
|
||||||
}, function(err, results) {
|
}, function(err, results) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
var voteCount = parseInt(results.upvotes, 10) - parseInt(results.downvotes, 10);
|
var voteCount = parseInt(results.upvotes, 10) - parseInt(results.downvotes, 10);
|
||||||
|
console.log("WE ARE HERE")
|
||||||
posts.updatePostVoteCount(pid, voteCount, function(err) {
|
posts.updatePostVoteCount(postData, voteCount, function(err) {
|
||||||
|
console.log("NOT HERE")
|
||||||
callback(err, voteCount);
|
callback(err, voteCount);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
43
src/posts.js
43
src/posts.js
@@ -219,28 +219,37 @@ var async = require('async'),
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
Posts.updatePostVoteCount = function(pid, voteCount, callback) {
|
Posts.updatePostVoteCount = function(postData, voteCount, callback) {
|
||||||
|
if (!postData || !postData.pid || !postData.tid) {
|
||||||
|
return callback();
|
||||||
|
}
|
||||||
async.parallel([
|
async.parallel([
|
||||||
function(next) {
|
function (next) {
|
||||||
Posts.getPostField(pid, 'tid', function(err, tid) {
|
if (postData.uid) {
|
||||||
if (err) {
|
db.sortedSetAdd('uid:' + postData.uid + ':posts:votes', voteCount, postData.pid, next);
|
||||||
return next(err);
|
} else {
|
||||||
}
|
next();
|
||||||
topics.getTopicField(tid, 'mainPid', function(err, mainPid) {
|
}
|
||||||
if (err) {
|
},
|
||||||
return next(err);
|
function (next) {
|
||||||
}
|
async.waterfall([
|
||||||
if (parseInt(mainPid, 10) === parseInt(pid, 10)) {
|
function (next) {
|
||||||
|
topics.getTopicField(postData.tid, 'mainPid', next);
|
||||||
|
},
|
||||||
|
function (mainPid, next) {
|
||||||
|
if (parseInt(mainPid, 10) === parseInt(postData.pid, 10)) {
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
db.sortedSetAdd('tid:' + tid + ':posts:votes', voteCount, pid, next);
|
db.sortedSetAdd('tid:' + postData.tid + ':posts:votes', voteCount, postData.pid, next);
|
||||||
});
|
}
|
||||||
});
|
], next);
|
||||||
},
|
},
|
||||||
function(next) {
|
function (next) {
|
||||||
Posts.setPostField(pid, 'votes', voteCount, next);
|
Posts.setPostField(postData.pid, 'votes', voteCount, next);
|
||||||
}
|
}
|
||||||
], callback);
|
], function(err) {
|
||||||
|
callback(err);
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
}(exports));
|
}(exports));
|
||||||
|
|||||||
@@ -12,10 +12,13 @@ module.exports = function (app, middleware, controllers) {
|
|||||||
setupPageRoute(app, '/user/:userslug/followers', middleware, middlewares, controllers.accounts.follow.getFollowers);
|
setupPageRoute(app, '/user/:userslug/followers', middleware, middlewares, controllers.accounts.follow.getFollowers);
|
||||||
setupPageRoute(app, '/user/:userslug/posts', middleware, middlewares, controllers.accounts.posts.getPosts);
|
setupPageRoute(app, '/user/:userslug/posts', middleware, middlewares, controllers.accounts.posts.getPosts);
|
||||||
setupPageRoute(app, '/user/:userslug/topics', middleware, middlewares, controllers.accounts.posts.getTopics);
|
setupPageRoute(app, '/user/:userslug/topics', middleware, middlewares, controllers.accounts.posts.getTopics);
|
||||||
|
setupPageRoute(app, '/user/:userslug/best', middleware, middlewares, controllers.accounts.posts.getBestPosts);
|
||||||
setupPageRoute(app, '/user/:userslug/groups', middleware, middlewares, controllers.accounts.groups.get);
|
setupPageRoute(app, '/user/:userslug/groups', middleware, middlewares, controllers.accounts.groups.get);
|
||||||
|
|
||||||
setupPageRoute(app, '/user/:userslug/favourites', middleware, accountMiddlewares, controllers.accounts.posts.getFavourites);
|
setupPageRoute(app, '/user/:userslug/favourites', middleware, accountMiddlewares, controllers.accounts.posts.getFavourites);
|
||||||
setupPageRoute(app, '/user/:userslug/watched', middleware, accountMiddlewares, controllers.accounts.posts.getWatchedTopics);
|
setupPageRoute(app, '/user/:userslug/watched', middleware, accountMiddlewares, controllers.accounts.posts.getWatchedTopics);
|
||||||
|
setupPageRoute(app, '/user/:userslug/upvoted', middleware, accountMiddlewares, controllers.accounts.posts.getUpVotedPosts);
|
||||||
|
setupPageRoute(app, '/user/:userslug/downvoted', middleware, accountMiddlewares, controllers.accounts.posts.getDownVotedPosts);
|
||||||
setupPageRoute(app, '/user/:userslug/edit', middleware, accountMiddlewares, controllers.accounts.edit.get);
|
setupPageRoute(app, '/user/:userslug/edit', middleware, accountMiddlewares, controllers.accounts.edit.get);
|
||||||
setupPageRoute(app, '/user/:userslug/edit/username', middleware, accountMiddlewares, controllers.accounts.edit.username);
|
setupPageRoute(app, '/user/:userslug/edit/username', middleware, accountMiddlewares, controllers.accounts.edit.username);
|
||||||
setupPageRoute(app, '/user/:userslug/edit/email', middleware, accountMiddlewares, controllers.accounts.edit.email);
|
setupPageRoute(app, '/user/:userslug/edit/email', middleware, accountMiddlewares, controllers.accounts.edit.email);
|
||||||
|
|||||||
@@ -85,6 +85,18 @@ SocketPosts.loadMoreUserPosts = function(socket, data, callback) {
|
|||||||
loadMorePosts('uid:' + data.uid + ':posts', socket.uid, data, callback);
|
loadMorePosts('uid:' + data.uid + ':posts', socket.uid, data, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
SocketPosts.loadMoreBestPosts = function(socket, data, callback) {
|
||||||
|
loadMorePosts('uid:' + data.uid + ':posts:votes', socket.uid, data, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
SocketPosts.loadMoreUpVotedPosts = function(socket, data, callback) {
|
||||||
|
loadMorePosts('uid:' + data.uid + ':upvote', socket.uid, data, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
SocketPosts.loadMoreDownVotedPosts = function(socket, data, callback) {
|
||||||
|
loadMorePosts('uid:' + data.uid + ':downvote', socket.uid, data, callback);
|
||||||
|
};
|
||||||
|
|
||||||
function loadMorePosts(set, uid, data, callback) {
|
function loadMorePosts(set, uid, data, callback) {
|
||||||
if (!data || !utils.isNumber(data.uid) || !utils.isNumber(data.after)) {
|
if (!data || !utils.isNumber(data.uid) || !utils.isNumber(data.after)) {
|
||||||
return callback(new Error('[[error:invalid-data]]'));
|
return callback(new Error('[[error:invalid-data]]'));
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ var db = require('./database'),
|
|||||||
schemaDate, thisSchemaDate,
|
schemaDate, thisSchemaDate,
|
||||||
|
|
||||||
// IMPORTANT: REMEMBER TO UPDATE VALUE OF latestSchema
|
// IMPORTANT: REMEMBER TO UPDATE VALUE OF latestSchema
|
||||||
latestSchema = Date.UTC(2016, 0, 11);
|
latestSchema = Date.UTC(2016, 0, 14);
|
||||||
|
|
||||||
Upgrade.check = function(callback) {
|
Upgrade.check = function(callback) {
|
||||||
db.get('schemaDate', function(err, value) {
|
db.get('schemaDate', function(err, value) {
|
||||||
@@ -296,11 +296,45 @@ Upgrade.upgrade = function(callback) {
|
|||||||
|
|
||||||
winston.info('[2015/12/23] Adding theme to active plugins sorted set done!');
|
winston.info('[2015/12/23] Adding theme to active plugins sorted set done!');
|
||||||
Upgrade.update(thisSchemaDate, next);
|
Upgrade.update(thisSchemaDate, next);
|
||||||
})
|
});
|
||||||
} else {
|
} else {
|
||||||
winston.info('[2015/12/23] Adding theme to active plugins sorted set skipped!');
|
winston.info('[2015/12/23] Adding theme to active plugins sorted set skipped!');
|
||||||
next();
|
next();
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
function(next) {
|
||||||
|
thisSchemaDate = Date.UTC(2016, 0, 14);
|
||||||
|
|
||||||
|
if (schemaDate < thisSchemaDate || 1) {
|
||||||
|
updatesMade = true;
|
||||||
|
winston.info('[2016/01/14] Creating user best post sorted sets');
|
||||||
|
|
||||||
|
var batch = require('./batch');
|
||||||
|
|
||||||
|
batch.processSortedSet('posts:pid', function(ids, next) {
|
||||||
|
async.eachSeries(ids, function(id, next) {
|
||||||
|
db.getObjectFields('post:' + id, ['pid', 'uid', 'votes'], function(err, postData) {
|
||||||
|
if (err) {
|
||||||
|
return next(err);
|
||||||
|
}
|
||||||
|
if (!postData || !parseInt(postData.votes, 10) || !parseInt(postData.uid, 10)) {
|
||||||
|
return next();
|
||||||
|
}
|
||||||
|
winston.info('processing pid: ' + postData.pid + ' uid: ' + postData.uid + ' votes: ' + postData.votes);
|
||||||
|
db.sortedSetAdd('uid:' + postData.uid + ':posts:votes', postData.votes, postData.pid, next);
|
||||||
|
});
|
||||||
|
}, next);
|
||||||
|
}, {}, function(err) {
|
||||||
|
if (err) {
|
||||||
|
return next(err);
|
||||||
|
}
|
||||||
|
winston.info('[2016/01/14] Creating user best post sorted sets done!');
|
||||||
|
Upgrade.update(thisSchemaDate, next);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
winston.info('[2016/01/14] Creating user best post sorted sets skipped!');
|
||||||
|
next();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Add new schema updates here
|
// Add new schema updates here
|
||||||
// IMPORTANT: REMEMBER TO UPDATE VALUE OF latestSchema IN LINE 24!!!
|
// IMPORTANT: REMEMBER TO UPDATE VALUE OF latestSchema IN LINE 24!!!
|
||||||
|
|||||||
Reference in New Issue
Block a user