diff --git a/package.json b/package.json index 8a316d6b0a..89456f495d 100644 --- a/package.json +++ b/package.json @@ -66,9 +66,9 @@ "nodebb-plugin-spam-be-gone": "0.5.1", "nodebb-rewards-essentials": "0.0.9", "nodebb-theme-lavender": "4.1.1", - "nodebb-theme-persona": "6.1.2", + "nodebb-theme-persona": "6.1.3", "nodebb-theme-slick": "1.1.1", - "nodebb-theme-vanilla": "7.1.1", + "nodebb-theme-vanilla": "7.1.2", "nodebb-widget-essentials": "3.0.7", "nodemailer": "4.1.1", "passport": "^0.4.0", diff --git a/public/language/en-GB/admin/settings/pagination.json b/public/language/en-GB/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/en-GB/admin/settings/pagination.json +++ b/public/language/en-GB/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/en-GB/user.json b/public/language/en-GB/user.json index 2f5e588881..ba61113160 100644 --- a/public/language/en-GB/user.json +++ b/public/language/en-GB/user.json @@ -102,6 +102,7 @@ "paginate_description" : "Paginate topics and posts instead of using infinite scroll", "topics_per_page": "Topics per Page", "posts_per_page": "Posts per Page", + "max_items_per_page": "Maximum %1", "notification_sounds" : "Play a sound when you receive a notification", "notifications_and_sounds": "Notifications & Sounds", diff --git a/src/controllers/accounts/settings.js b/src/controllers/accounts/settings.js index 2285f5e2dc..515cb33a4e 100644 --- a/src/controllers/accounts/settings.js +++ b/src/controllers/accounts/settings.js @@ -12,9 +12,7 @@ var db = require('../../database'); var helpers = require('../helpers'); var accountHelpers = require('./helpers'); - -var settingsController = {}; - +var settingsController = module.exports; settingsController.get = function (req, res, callback) { var userData; @@ -91,67 +89,64 @@ settingsController.get = function (req, res, callback) { next(err, data); }); }, - function (data, next) { + function (data) { userData.customSettings = data.customSettings; userData.disableEmailSubscriptions = parseInt(meta.config.disableEmailSubscriptions, 10) === 1; - next(); + + userData.dailyDigestFreqOptions = [ + { value: 'off', name: '[[user:digest_off]]', selected: userData.settings.dailyDigestFreq === 'off' }, + { value: 'day', name: '[[user:digest_daily]]', selected: userData.settings.dailyDigestFreq === 'day' }, + { value: 'week', name: '[[user:digest_weekly]]', selected: userData.settings.dailyDigestFreq === 'week' }, + { value: 'month', name: '[[user:digest_monthly]]', selected: userData.settings.dailyDigestFreq === 'month' }, + ]; + + userData.bootswatchSkinOptions = [ + { name: 'No skin', value: 'noskin' }, + { name: 'Default', value: 'default' }, + { name: 'Cerulean', value: 'cerulean' }, + { name: 'Cosmo', value: 'cosmo' }, + { name: 'Cyborg', value: 'cyborg' }, + { name: 'Darkly', value: 'darkly' }, + { name: 'Flatly', value: 'flatly' }, + { name: 'Journal', value: 'journal' }, + { name: 'Lumen', value: 'lumen' }, + { name: 'Paper', value: 'paper' }, + { name: 'Readable', value: 'readable' }, + { name: 'Sandstone', value: 'sandstone' }, + { name: 'Simplex', value: 'simplex' }, + { name: 'Slate', value: 'slate' }, + { name: 'Spacelab', value: 'spacelab' }, + { name: 'Superhero', value: 'superhero' }, + { name: 'United', value: 'united' }, + { name: 'Yeti', value: 'yeti' }, + ]; + + userData.bootswatchSkinOptions.forEach(function (skin) { + skin.selected = skin.value === userData.settings.bootswatchSkin; + }); + + userData.languages.forEach(function (language) { + language.selected = language.code === userData.settings.userLang; + }); + + userData.disableCustomUserSkins = parseInt(meta.config.disableCustomUserSkins, 10) === 1; + + userData.allowUserHomePage = parseInt(meta.config.allowUserHomePage, 10) === 1; + + userData.hideFullname = parseInt(meta.config.hideFullname, 10) === 1; + userData.hideEmail = parseInt(meta.config.hideEmail, 10) === 1; + + userData.inTopicSearchAvailable = plugins.hasListeners('filter:topic.search'); + + userData.maxTopicsPerPage = parseInt(meta.config.maxTopicsPerPage, 10) || 20; + userData.maxPostsPerPage = parseInt(meta.config.maxPostsPerPage, 10) || 20; + + userData.title = '[[pages:account/settings]]'; + userData.breadcrumbs = helpers.buildBreadcrumbs([{ text: userData.username, url: '/user/' + userData.userslug }, { text: '[[user:settings]]' }]); + + res.render('account/settings', userData); }, - ], function (err) { - if (err) { - return callback(err); - } - - userData.dailyDigestFreqOptions = [ - { value: 'off', name: '[[user:digest_off]]', selected: userData.settings.dailyDigestFreq === 'off' }, - { value: 'day', name: '[[user:digest_daily]]', selected: userData.settings.dailyDigestFreq === 'day' }, - { value: 'week', name: '[[user:digest_weekly]]', selected: userData.settings.dailyDigestFreq === 'week' }, - { value: 'month', name: '[[user:digest_monthly]]', selected: userData.settings.dailyDigestFreq === 'month' }, - ]; - - - userData.bootswatchSkinOptions = [ - { name: 'No skin', value: 'noskin' }, - { name: 'Default', value: 'default' }, - { name: 'Cerulean', value: 'cerulean' }, - { name: 'Cosmo', value: 'cosmo' }, - { name: 'Cyborg', value: 'cyborg' }, - { name: 'Darkly', value: 'darkly' }, - { name: 'Flatly', value: 'flatly' }, - { name: 'Journal', value: 'journal' }, - { name: 'Lumen', value: 'lumen' }, - { name: 'Paper', value: 'paper' }, - { name: 'Readable', value: 'readable' }, - { name: 'Sandstone', value: 'sandstone' }, - { name: 'Simplex', value: 'simplex' }, - { name: 'Slate', value: 'slate' }, - { name: 'Spacelab', value: 'spacelab' }, - { name: 'Superhero', value: 'superhero' }, - { name: 'United', value: 'united' }, - { name: 'Yeti', value: 'yeti' }, - ]; - - userData.bootswatchSkinOptions.forEach(function (skin) { - skin.selected = skin.value === userData.settings.bootswatchSkin; - }); - - userData.languages.forEach(function (language) { - language.selected = language.code === userData.settings.userLang; - }); - - userData.disableCustomUserSkins = parseInt(meta.config.disableCustomUserSkins, 10) === 1; - - userData.allowUserHomePage = parseInt(meta.config.allowUserHomePage, 10) === 1; - - userData.hideFullname = parseInt(meta.config.hideFullname, 10) === 1; - userData.hideEmail = parseInt(meta.config.hideEmail, 10) === 1; - - userData.inTopicSearchAvailable = plugins.hasListeners('filter:topic.search'); - - userData.title = '[[pages:account/settings]]'; - userData.breadcrumbs = helpers.buildBreadcrumbs([{ text: userData.username, url: '/user/' + userData.userslug }, { text: '[[user:settings]]' }]); - - res.render('account/settings', userData); - }); + ], callback); }; diff --git a/src/user/settings.js b/src/user/settings.js index 42c78a54ba..6ab1ba6816 100644 --- a/src/user/settings.js +++ b/src/user/settings.js @@ -135,12 +135,14 @@ module.exports = function (User) { } User.saveSettings = function (uid, data, callback) { - if (!data.postsPerPage || parseInt(data.postsPerPage, 10) <= 1 || parseInt(data.postsPerPage, 10) > meta.config.postsPerPage) { - return callback(new Error('[[error:invalid-pagination-value, 2, ' + meta.config.postsPerPage + ']]')); + var maxPostsPerPage = meta.config.maxPostsPerPage || 20; + if (!data.postsPerPage || parseInt(data.postsPerPage, 10) <= 1 || parseInt(data.postsPerPage, 10) > maxPostsPerPage) { + return callback(new Error('[[error:invalid-pagination-value, 2, ' + maxPostsPerPage + ']]')); } - if (!data.topicsPerPage || parseInt(data.topicsPerPage, 10) <= 1 || parseInt(data.topicsPerPage, 10) > meta.config.topicsPerPage) { - return callback(new Error('[[error:invalid-pagination-value, 2, ' + meta.config.topicsPerPage + ']]')); + var maxTopicsPerPage = meta.config.maxTopicsPerPage || 20; + if (!data.topicsPerPage || parseInt(data.topicsPerPage, 10) <= 1 || parseInt(data.topicsPerPage, 10) > maxTopicsPerPage) { + return callback(new Error('[[error:invalid-pagination-value, 2, ' + maxTopicsPerPage + ']]')); } data.userLang = data.userLang || meta.config.defaultLang; @@ -153,8 +155,8 @@ module.exports = function (User) { openOutgoingLinksInNewTab: data.openOutgoingLinksInNewTab, dailyDigestFreq: data.dailyDigestFreq || 'off', usePagination: data.usePagination, - topicsPerPage: Math.min(data.topicsPerPage, parseInt(meta.config.topicsPerPage, 10) || 20), - postsPerPage: Math.min(data.postsPerPage, parseInt(meta.config.postsPerPage, 10) || 20), + topicsPerPage: Math.min(data.topicsPerPage, parseInt(maxTopicsPerPage, 10) || 20), + postsPerPage: Math.min(data.postsPerPage, parseInt(maxPostsPerPage, 10) || 20), userLang: data.userLang || meta.config.defaultLang, followTopicsOnCreate: data.followTopicsOnCreate, followTopicsOnReply: data.followTopicsOnReply, diff --git a/src/views/admin/settings/pagination.tpl b/src/views/admin/settings/pagination.tpl index 5caa8d99cd..5f4d77bde3 100644 --- a/src/views/admin/settings/pagination.tpl +++ b/src/views/admin/settings/pagination.tpl @@ -18,7 +18,8 @@