mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-01 19:46:01 +01:00
* Better fix for #5993 Also a nice newline so the line doesn't get overwritten when running `./nodebb upgrade` * Optimizations for custom homepage Move it into a separate module
This commit is contained in:
committed by
Barış Soner Uşaklı
parent
9728b80c38
commit
bbdc55cb3a
2
nodebb
2
nodebb
@@ -466,7 +466,7 @@ var commands = {
|
|||||||
next();
|
next();
|
||||||
},
|
},
|
||||||
function (next) {
|
function (next) {
|
||||||
process.stdout.write('1. '.bold + 'Bringing base dependencies up to date... '.yellow);
|
process.stdout.write('1. '.bold + 'Bringing base dependencies up to date... \n'.yellow);
|
||||||
packageInstall.npmInstallProduction();
|
packageInstall.npmInstallProduction();
|
||||||
next();
|
next();
|
||||||
},
|
},
|
||||||
|
|||||||
62
src/controllers/home.js
Normal file
62
src/controllers/home.js
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
var plugins = require('../plugins');
|
||||||
|
var meta = require('../meta');
|
||||||
|
var user = require('../user');
|
||||||
|
var pubsub = require('../pubsub');
|
||||||
|
|
||||||
|
var adminHomePageRoute;
|
||||||
|
var getRoute;
|
||||||
|
|
||||||
|
function configUpdated() {
|
||||||
|
adminHomePageRoute = (meta.config.homePageRoute || meta.config.homePageCustom || '').replace(/^\/+/, '') || 'categories';
|
||||||
|
getRoute = parseInt(meta.config.allowUserHomePage, 10) ? getRouteAllowUserHomePage : getRouteDisableUserHomePage;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getRouteDisableUserHomePage(uid, next) {
|
||||||
|
next(null, adminHomePageRoute);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getRouteAllowUserHomePage(uid, next) {
|
||||||
|
user.getSettings(uid, function (err, settings) {
|
||||||
|
if (err) {
|
||||||
|
return next(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
var route = adminHomePageRoute;
|
||||||
|
|
||||||
|
if (settings.homePageRoute !== 'undefined' && settings.homePageRoute !== 'none') {
|
||||||
|
route = settings.homePageRoute || route;
|
||||||
|
}
|
||||||
|
|
||||||
|
next(null, route);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
pubsub.on('config:update', configUpdated);
|
||||||
|
configUpdated();
|
||||||
|
|
||||||
|
module.exports = function (req, res, next) {
|
||||||
|
if (req.path !== '/' && req.path !== '/api/') {
|
||||||
|
return next();
|
||||||
|
}
|
||||||
|
|
||||||
|
getRoute(req.uid, function (err, route) {
|
||||||
|
if (err) {
|
||||||
|
return next(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
var hook = 'action:homepage.get:' + route;
|
||||||
|
|
||||||
|
if (plugins.hasListeners(hook)) {
|
||||||
|
return plugins.fireHook(hook, {
|
||||||
|
req: req,
|
||||||
|
res: res,
|
||||||
|
next: next,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
req.url = req.path + route;
|
||||||
|
next();
|
||||||
|
});
|
||||||
|
};
|
||||||
@@ -3,7 +3,6 @@
|
|||||||
var async = require('async');
|
var async = require('async');
|
||||||
var nconf = require('nconf');
|
var nconf = require('nconf');
|
||||||
var validator = require('validator');
|
var validator = require('validator');
|
||||||
var request = require('request');
|
|
||||||
|
|
||||||
var meta = require('../meta');
|
var meta = require('../meta');
|
||||||
var user = require('../user');
|
var user = require('../user');
|
||||||
@@ -13,6 +12,7 @@ var helpers = require('./helpers');
|
|||||||
|
|
||||||
var Controllers = module.exports;
|
var Controllers = module.exports;
|
||||||
|
|
||||||
|
Controllers.home = require('./home');
|
||||||
Controllers.topics = require('./topics');
|
Controllers.topics = require('./topics');
|
||||||
Controllers.posts = require('./posts');
|
Controllers.posts = require('./posts');
|
||||||
Controllers.categories = require('./categories');
|
Controllers.categories = require('./categories');
|
||||||
@@ -36,52 +36,6 @@ Controllers.osd = require('./osd');
|
|||||||
Controllers['404'] = require('./404');
|
Controllers['404'] = require('./404');
|
||||||
Controllers.errors = require('./errors');
|
Controllers.errors = require('./errors');
|
||||||
|
|
||||||
Controllers.home = function (req, res, next) {
|
|
||||||
var route = meta.config.homePageRoute || (meta.config.homePageCustom || '').replace(/^\/+/, '') || 'categories';
|
|
||||||
|
|
||||||
async.waterfall([
|
|
||||||
function (next) {
|
|
||||||
user.getSettings(req.uid, next);
|
|
||||||
},
|
|
||||||
function (settings, next) {
|
|
||||||
if (parseInt(meta.config.allowUserHomePage, 10) === 1 && settings.homePageRoute !== 'undefined' && settings.homePageRoute !== 'none') {
|
|
||||||
route = settings.homePageRoute || route;
|
|
||||||
}
|
|
||||||
|
|
||||||
var hook = 'action:homepage.get:' + route;
|
|
||||||
|
|
||||||
if (plugins.hasListeners(hook)) {
|
|
||||||
return plugins.fireHook(hook, {
|
|
||||||
req: req,
|
|
||||||
res: res,
|
|
||||||
next: next,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (route === 'categories' || route === '/') {
|
|
||||||
Controllers.categories.list(req, res, next);
|
|
||||||
} else if (route === 'unread') {
|
|
||||||
Controllers.unread.get(req, res, next);
|
|
||||||
} else if (route === 'recent') {
|
|
||||||
Controllers.recent.get(req, res, next);
|
|
||||||
} else if (route === 'popular') {
|
|
||||||
Controllers.popular.get(req, res, next);
|
|
||||||
} else {
|
|
||||||
var match = /^category\/(\d+)\/(.*)$/.exec(route);
|
|
||||||
|
|
||||||
if (match) {
|
|
||||||
req.params.topic_index = '1';
|
|
||||||
req.params.category_id = match[1];
|
|
||||||
req.params.slug = match[2];
|
|
||||||
Controllers.category.get(req, res, next);
|
|
||||||
} else {
|
|
||||||
request.get(nconf.get('url') + '/' + route).pipe(res);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
], next);
|
|
||||||
};
|
|
||||||
|
|
||||||
Controllers.reset = function (req, res, next) {
|
Controllers.reset = function (req, res, next) {
|
||||||
if (req.params.code) {
|
if (req.params.code) {
|
||||||
async.waterfall([
|
async.waterfall([
|
||||||
|
|||||||
@@ -121,11 +121,7 @@ function updateConfig(config) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateLocalConfig(config) {
|
function updateLocalConfig(config) {
|
||||||
for (var field in config) {
|
Object.assign(Meta.config, config);
|
||||||
if (config.hasOwnProperty(field)) {
|
|
||||||
Meta.config[field] = config[field];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pubsub.on('config:update', function onConfigReceived(config) {
|
pubsub.on('config:update', function onConfigReceived(config) {
|
||||||
|
|||||||
@@ -22,8 +22,6 @@ var helpers = require('./helpers');
|
|||||||
var setupPageRoute = helpers.setupPageRoute;
|
var setupPageRoute = helpers.setupPageRoute;
|
||||||
|
|
||||||
function mainRoutes(app, middleware, controllers) {
|
function mainRoutes(app, middleware, controllers) {
|
||||||
setupPageRoute(app, '/', middleware, [], controllers.home);
|
|
||||||
|
|
||||||
var loginRegisterMiddleware = [middleware.redirectToAccountIfLoggedIn];
|
var loginRegisterMiddleware = [middleware.redirectToAccountIfLoggedIn];
|
||||||
|
|
||||||
setupPageRoute(app, '/login', middleware, loginRegisterMiddleware, controllers.login);
|
setupPageRoute(app, '/login', middleware, loginRegisterMiddleware, controllers.login);
|
||||||
@@ -123,6 +121,9 @@ module.exports = function (app, middleware, hotswapIds, callback) {
|
|||||||
|
|
||||||
app.use(middleware.stripLeadingSlashes);
|
app.use(middleware.stripLeadingSlashes);
|
||||||
|
|
||||||
|
// handle custom homepage routes
|
||||||
|
app.use(relativePath, controllers.home);
|
||||||
|
|
||||||
adminRoutes(router, middleware, controllers);
|
adminRoutes(router, middleware, controllers);
|
||||||
metaRoutes(router, middleware, controllers);
|
metaRoutes(router, middleware, controllers);
|
||||||
apiRoutes(router, middleware, controllers);
|
apiRoutes(router, middleware, controllers);
|
||||||
|
|||||||
@@ -69,62 +69,80 @@ describe('Controllers', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should load unread as home route', function (done) {
|
it('should load unread as home route', function (done) {
|
||||||
meta.config.homePageRoute = 'unread';
|
meta.configs.set('homePageRoute', 'unread', function (err) {
|
||||||
request(nconf.get('url'), function (err, res, body) {
|
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
assert.equal(res.statusCode, 200);
|
|
||||||
assert(body);
|
request(nconf.get('url'), function (err, res, body) {
|
||||||
done();
|
assert.ifError(err);
|
||||||
|
assert.equal(res.statusCode, 200);
|
||||||
|
assert(body);
|
||||||
|
done();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should load recent as home route', function (done) {
|
it('should load recent as home route', function (done) {
|
||||||
meta.config.homePageRoute = 'recent';
|
meta.configs.set('homePageRoute', 'recent', function (err) {
|
||||||
request(nconf.get('url'), function (err, res, body) {
|
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
assert.equal(res.statusCode, 200);
|
|
||||||
assert(body);
|
request(nconf.get('url'), function (err, res, body) {
|
||||||
done();
|
assert.ifError(err);
|
||||||
|
assert.equal(res.statusCode, 200);
|
||||||
|
assert(body);
|
||||||
|
done();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should load popular as home route', function (done) {
|
it('should load popular as home route', function (done) {
|
||||||
meta.config.homePageRoute = 'popular';
|
meta.configs.set('homePageRoute', 'popular', function (err) {
|
||||||
request(nconf.get('url'), function (err, res, body) {
|
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
assert.equal(res.statusCode, 200);
|
|
||||||
assert(body);
|
request(nconf.get('url'), function (err, res, body) {
|
||||||
done();
|
assert.ifError(err);
|
||||||
|
assert.equal(res.statusCode, 200);
|
||||||
|
assert(body);
|
||||||
|
done();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should load category as home route', function (done) {
|
it('should load category as home route', function (done) {
|
||||||
meta.config.homePageRoute = 'category/1/test-category';
|
meta.configs.set('homePageRoute', 'category/1/test-category', function (err) {
|
||||||
request(nconf.get('url'), function (err, res, body) {
|
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
assert.equal(res.statusCode, 200);
|
|
||||||
assert(body);
|
request(nconf.get('url'), function (err, res, body) {
|
||||||
done();
|
assert.ifError(err);
|
||||||
|
assert.equal(res.statusCode, 200);
|
||||||
|
assert(body);
|
||||||
|
done();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should redirect to custom homepage', function (done) {
|
it('should redirect to custom homepage', function (done) {
|
||||||
meta.config.homePageRoute = 'groups';
|
meta.configs.set('homePageRoute', 'groups', function (err) {
|
||||||
request(nconf.get('url'), function (err, res, body) {
|
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
assert.equal(res.statusCode, 200);
|
|
||||||
assert(body);
|
request(nconf.get('url'), function (err, res, body) {
|
||||||
done();
|
assert.ifError(err);
|
||||||
|
assert.equal(res.statusCode, 200);
|
||||||
|
assert(body);
|
||||||
|
done();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should 404 if custom homepage does not exist', function (done) {
|
it('should 404 if custom homepage does not exist', function (done) {
|
||||||
meta.config.homePageRoute = 'thisroutedoesnotexist';
|
meta.configs.set('homePageRoute', 'this-route-does-not-exist', function (err) {
|
||||||
request(nconf.get('url'), function (err, res, body) {
|
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
assert.equal(res.statusCode, 404);
|
|
||||||
assert(body);
|
request(nconf.get('url'), function (err, res, body) {
|
||||||
done();
|
assert.ifError(err);
|
||||||
|
assert.equal(res.statusCode, 404);
|
||||||
|
assert(body);
|
||||||
|
done();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -139,13 +157,16 @@ describe('Controllers', function () {
|
|||||||
hook: 'action:homepage.get:custom',
|
hook: 'action:homepage.get:custom',
|
||||||
method: hookMethod,
|
method: hookMethod,
|
||||||
});
|
});
|
||||||
meta.config.homePageRoute = 'custom';
|
meta.configs.set('homePageRoute', 'custom', function (err) {
|
||||||
request(nconf.get('url'), function (err, res, body) {
|
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
assert.equal(res.statusCode, 200);
|
|
||||||
assert.equal(body, '"works"');
|
request(nconf.get('url'), function (err, res, body) {
|
||||||
plugins.unregisterHook('myTestPlugin', 'action:homepage.get:custom', hookMethod);
|
assert.ifError(err);
|
||||||
done();
|
assert.equal(res.statusCode, 200);
|
||||||
|
assert.equal(body, '"works"');
|
||||||
|
plugins.unregisterHook('myTestPlugin', 'action:homepage.get:custom', hookMethod);
|
||||||
|
done();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user