mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 11:05:54 +01:00 
			
		
		
		
	moved groupTitle from user settings to user profile/edit
This commit is contained in:
		| @@ -56,8 +56,8 @@ | |||||||
|     "nodebb-plugin-spam-be-gone": "0.4.6", |     "nodebb-plugin-spam-be-gone": "0.4.6", | ||||||
|     "nodebb-rewards-essentials": "0.0.8", |     "nodebb-rewards-essentials": "0.0.8", | ||||||
|     "nodebb-theme-lavender": "3.0.9", |     "nodebb-theme-lavender": "3.0.9", | ||||||
|     "nodebb-theme-persona": "4.0.118", |     "nodebb-theme-persona": "4.0.119", | ||||||
|     "nodebb-theme-vanilla": "5.0.63", |     "nodebb-theme-vanilla": "5.0.64", | ||||||
|     "nodebb-widget-essentials": "2.0.9", |     "nodebb-widget-essentials": "2.0.9", | ||||||
|     "nodemailer": "2.0.0", |     "nodemailer": "2.0.0", | ||||||
|     "nodemailer-sendmail-transport": "1.0.0", |     "nodemailer-sendmail-transport": "1.0.0", | ||||||
|   | |||||||
| @@ -112,7 +112,7 @@ | |||||||
| 	"follow_topics_you_reply_to": "Follow topics that you reply to", | 	"follow_topics_you_reply_to": "Follow topics that you reply to", | ||||||
| 	"follow_topics_you_create": "Follow topics you create", | 	"follow_topics_you_create": "Follow topics you create", | ||||||
|  |  | ||||||
| 	"grouptitle": "Select the group title you would like to display", | 	"grouptitle": "Group Title", | ||||||
| 	"no-group-title": "No group title", | 	"no-group-title": "No group title", | ||||||
|  |  | ||||||
| 	"select-skin": "Select a Skin", | 	"select-skin": "Select a Skin", | ||||||
|   | |||||||
| @@ -36,6 +36,7 @@ define('forum/account/edit', ['forum/account/header', 'uploader', 'translator'], | |||||||
| 			website: $('#inputWebsite').val(), | 			website: $('#inputWebsite').val(), | ||||||
| 			birthday: $('#inputBirthday').val(), | 			birthday: $('#inputBirthday').val(), | ||||||
| 			location: $('#inputLocation').val(), | 			location: $('#inputLocation').val(), | ||||||
|  | 			groupTitle: $('#groupTitle').val(), | ||||||
| 			signature: $('#inputSignature').val(), | 			signature: $('#inputSignature').val(), | ||||||
| 			aboutme: $('#inputAboutMe').val() | 			aboutme: $('#inputAboutMe').val() | ||||||
| 		}; | 		}; | ||||||
|   | |||||||
| @@ -10,6 +10,7 @@ var user = require('../../user'); | |||||||
| var meta = require('../../meta'); | var meta = require('../../meta'); | ||||||
| var plugins = require('../../plugins'); | var plugins = require('../../plugins'); | ||||||
| var helpers = require('../helpers'); | var helpers = require('../helpers'); | ||||||
|  | var groups = require('../../groups'); | ||||||
| var accountHelpers = require('./helpers'); | var accountHelpers = require('./helpers'); | ||||||
|  |  | ||||||
| var editController = {}; | var editController = {}; | ||||||
| @@ -26,6 +27,12 @@ editController.get = function(req, res, callback) { | |||||||
| 		userData.allowProfileImageUploads = parseInt(meta.config.allowProfileImageUploads) === 1; | 		userData.allowProfileImageUploads = parseInt(meta.config.allowProfileImageUploads) === 1; | ||||||
| 		userData.allowAccountDelete = parseInt(meta.config.allowAccountDelete, 10) === 1; | 		userData.allowAccountDelete = parseInt(meta.config.allowAccountDelete, 10) === 1; | ||||||
|  |  | ||||||
|  | 		userData.groups = userData.groups.filter(function(group) { | ||||||
|  | 			return group && group.userTitleEnabled && !groups.isPrivilegeGroup(group.name) && group.name !== 'registered-users'; | ||||||
|  | 		}); | ||||||
|  | 		userData.groups.forEach(function(group) { | ||||||
|  | 			group.selected = group.name === userData.groupTitle; | ||||||
|  | 		}); | ||||||
|  |  | ||||||
| 		userData.title = '[[pages:account/edit, ' + userData.username + ']]'; | 		userData.title = '[[pages:account/edit, ' + userData.username + ']]'; | ||||||
| 		userData.breadcrumbs = helpers.buildBreadcrumbs([{text: userData.username, url: '/user/' + userData.userslug}, {text: '[[user:edit]]'}]); | 		userData.breadcrumbs = helpers.buildBreadcrumbs([{text: userData.username, url: '/user/' + userData.userslug}, {text: '[[user:edit]]'}]); | ||||||
| @@ -33,7 +40,7 @@ editController.get = function(req, res, callback) { | |||||||
|  |  | ||||||
| 		plugins.fireHook('filter:user.account.edit', userData, function(err, userData) { | 		plugins.fireHook('filter:user.account.edit', userData, function(err, userData) { | ||||||
| 			if (err) { | 			if (err) { | ||||||
| 				return next(err); | 				return callback(err); | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 			res.render('account/edit', userData); | 			res.render('account/edit', userData); | ||||||
|   | |||||||
| @@ -133,7 +133,7 @@ helpers.getBaseUser = function(userslug, callerUID, callback) { | |||||||
|  |  | ||||||
| 			async.parallel({ | 			async.parallel({ | ||||||
| 				user: function(next) { | 				user: function(next) { | ||||||
| 					user.getUserFields(uid, ['uid', 'username', 'userslug', 'picture', 'cover:url', 'cover:position', 'status', 'lastonline'], next); | 					user.getUserFields(uid, ['uid', 'username', 'userslug', 'picture', 'cover:url', 'cover:position', 'status', 'lastonline', 'groupTitle'], next); | ||||||
| 				}, | 				}, | ||||||
| 				isAdmin: function(next) { | 				isAdmin: function(next) { | ||||||
| 					user.isAdministrator(callerUID, next); | 					user.isAdministrator(callerUID, next); | ||||||
|   | |||||||
| @@ -1,16 +1,17 @@ | |||||||
| 'use strict'; | 'use strict'; | ||||||
|  |  | ||||||
| var	async = require('async'), | var	async = require('async'); | ||||||
| 	winston = require('winston'), | var winston = require('winston'); | ||||||
| 	_ = require('underscore'), | var _ = require('underscore'); | ||||||
|  |  | ||||||
| 	user = require('../user'), | var user = require('../user'); | ||||||
| 	utils = require('../../public/src/utils'), | var utils = require('../../public/src/utils'); | ||||||
| 	plugins = require('../plugins'), | var plugins = require('../plugins'); | ||||||
| 	notifications = require('../notifications'), | var notifications = require('../notifications'); | ||||||
| 	db = require('./../database'); | var db = require('./../database'); | ||||||
|  |  | ||||||
| module.exports = function(Groups) { | module.exports = function(Groups) { | ||||||
|  |  | ||||||
| 	Groups.join = function(groupName, uid, callback) { | 	Groups.join = function(groupName, uid, callback) { | ||||||
| 		function join() { | 		function join() { | ||||||
| 			var tasks = [ | 			var tasks = [ | ||||||
| @@ -39,7 +40,7 @@ module.exports = function(Groups) { | |||||||
| 					async.parallel(tasks, next); | 					async.parallel(tasks, next); | ||||||
| 				}, | 				}, | ||||||
| 				function(results, next) { | 				function(results, next) { | ||||||
| 					user.setGroupTitle(groupName, uid, next); | 					setGroupTitleIfNotSet(groupName, uid, next); | ||||||
| 				}, | 				}, | ||||||
| 				function(next) { | 				function(next) { | ||||||
| 					plugins.fireHook('action:group.join', { | 					plugins.fireHook('action:group.join', { | ||||||
| @@ -80,6 +81,20 @@ module.exports = function(Groups) { | |||||||
| 		}); | 		}); | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
|  | 	function setGroupTitleIfNotSet(groupName, uid, callback) { | ||||||
|  | 		if (groupName === 'registered-users') { | ||||||
|  | 			return callback(); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		db.getObjectField('user:' + uid, 'groupTitle', function(err, currentTitle) { | ||||||
|  | 			if (err || (currentTitle || currentTitle === '')) { | ||||||
|  | 				return callback(err); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			user.setUserField(uid, 'groupTitle', groupName, callback); | ||||||
|  | 		}); | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	Groups.requestMembership = function(groupName, uid, callback) { | 	Groups.requestMembership = function(groupName, uid, callback) { | ||||||
| 		async.waterfall([ | 		async.waterfall([ | ||||||
| 			async.apply(inviteOrRequestMembership, groupName, uid, 'request'), | 			async.apply(inviteOrRequestMembership, groupName, uid, 'request'), | ||||||
|   | |||||||
| @@ -1,41 +1,36 @@ | |||||||
| 'use strict'; | 'use strict'; | ||||||
|  |  | ||||||
| var async = require('async'), | var async = require('async'); | ||||||
| 	validator = require('validator'), | var validator = require('validator'); | ||||||
|  |  | ||||||
| 	db = require('../database'), |  | ||||||
| 	user = require('../user'), |  | ||||||
| 	groups = require('../groups'), |  | ||||||
| 	meta = require('../meta'), |  | ||||||
| 	plugins = require('../plugins'); |  | ||||||
|  |  | ||||||
|  | var user = require('../user'); | ||||||
|  | var groups = require('../groups'); | ||||||
|  | var meta = require('../meta'); | ||||||
|  | var plugins = require('../plugins'); | ||||||
|  |  | ||||||
| module.exports = function(Posts) { | module.exports = function(Posts) { | ||||||
|  |  | ||||||
| 	Posts.getUserInfoForPosts = function(uids, uid, callback) { | 	Posts.getUserInfoForPosts = function(uids, uid, callback) { | ||||||
| 		var groupsMap = {}; | 		var groupsMap = {}; | ||||||
| 		var userSettings; | 		var userData; | ||||||
| 		async.parallel({ |  | ||||||
| 			groupTitles: function(next) { |  | ||||||
| 				var keys = uids.map(function(uid) { |  | ||||||
| 					return 'user:' + uid + ':settings'; |  | ||||||
| 				}); |  | ||||||
| 		async.waterfall([ | 		async.waterfall([ | ||||||
| 					function (next) { | 			function(next) { | ||||||
| 						db.getObjectsFields(keys, ['groupTitle'], next); | 				user.getUsersFields(uids, ['uid', 'username', 'fullname', 'userslug', 'reputation', 'postcount', 'picture', 'signature', 'banned', 'status', 'lastonline', 'groupTitle'], next); | ||||||
| 			}, | 			}, | ||||||
| 					function (_userSettings, next) { | 			function(_userData, next) { | ||||||
| 						userSettings = _userSettings; | 				userData = _userData; | ||||||
| 						var groupKeys = userSettings.filter(function(userSetting) { | 				var groupTitles = userData.map(function(userData) { | ||||||
| 							return userSetting && userSetting.groupTitle; | 					return userData && userData.groupTitle; | ||||||
| 						}).map(function(userSetting) { |  | ||||||
| 							return userSetting.groupTitle; |  | ||||||
| 				}).filter(function(groupTitle, index, array) { | 				}).filter(function(groupTitle, index, array) { | ||||||
| 					return groupTitle && array.indexOf(groupTitle) === index; | 					return groupTitle && array.indexOf(groupTitle) === index; | ||||||
| 				}); | 				}); | ||||||
| 						groups.getGroupsData(groupKeys, next); | 				groups.getGroupsData(groupTitles, next); | ||||||
| 					}, | 			} | ||||||
| 					function (groupsData, next) { | 		], function(err, groupsData) { | ||||||
|  | 			if (err) { | ||||||
|  | 				return callback(err); | ||||||
|  | 			} | ||||||
|  |  | ||||||
| 			groupsData.forEach(function(group) { | 			groupsData.forEach(function(group) { | ||||||
| 				if (group && group.userTitleEnabled) { | 				if (group && group.userTitleEnabled) { | ||||||
| 					groupsMap[group.name] = { | 					groupsMap[group.name] = { | ||||||
| @@ -47,20 +42,8 @@ module.exports = function(Posts) { | |||||||
| 					}; | 					}; | ||||||
| 				} | 				} | ||||||
| 			}); | 			}); | ||||||
| 						next(null, userSettings); |  | ||||||
| 					} |  | ||||||
| 				], next); |  | ||||||
| 			}, |  | ||||||
| 			userData: function(next) { |  | ||||||
| 				user.getUsersFields(uids, ['uid', 'username', 'fullname', 'userslug', 'reputation', 'postcount', 'picture', 'signature', 'banned', 'status', 'lastonline'], next); |  | ||||||
| 			} |  | ||||||
| 		}, function(err, results) { |  | ||||||
| 			if (err) { |  | ||||||
| 				return callback(err); |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			var userData = results.userData; | 			userData.forEach(function(userData) { | ||||||
| 			userData.forEach(function(userData, i) { |  | ||||||
| 				userData.uid = userData.uid || 0; | 				userData.uid = userData.uid || 0; | ||||||
| 				userData.username = userData.username || '[[global:guest]]'; | 				userData.username = userData.username || '[[global:guest]]'; | ||||||
| 				userData.userslug = userData.userslug || ''; | 				userData.userslug = userData.userslug || ''; | ||||||
| @@ -69,7 +52,6 @@ module.exports = function(Posts) { | |||||||
| 				userData.banned = parseInt(userData.banned, 10) === 1; | 				userData.banned = parseInt(userData.banned, 10) === 1; | ||||||
| 				userData.picture = userData.picture || ''; | 				userData.picture = userData.picture || ''; | ||||||
| 				userData.status = user.getStatus(userData); | 				userData.status = user.getStatus(userData); | ||||||
| 				userData.groupTitle = results.groupTitles[i].groupTitle; |  | ||||||
| 				userData.signature = validator.escape(userData.signature || ''); | 				userData.signature = validator.escape(userData.signature || ''); | ||||||
| 				userData.fullname = validator.escape(userData.fullname || ''); | 				userData.fullname = validator.escape(userData.fullname || ''); | ||||||
| 			}); | 			}); | ||||||
| @@ -77,7 +59,7 @@ module.exports = function(Posts) { | |||||||
| 			async.map(userData, function(userData, next) { | 			async.map(userData, function(userData, next) { | ||||||
| 				async.parallel({ | 				async.parallel({ | ||||||
| 					isMemberOfGroup: function (next) { | 					isMemberOfGroup: function (next) { | ||||||
| 						if (!userData.groupTitle) { | 						if (!userData.groupTitle || !groupsMap[userData.groupTitle]) { | ||||||
| 							return next(); | 							return next(); | ||||||
| 						} | 						} | ||||||
| 						groups.isMember(userData.uid, userData.groupTitle, next); | 						groups.isMember(userData.uid, userData.groupTitle, next); | ||||||
|   | |||||||
| @@ -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, 1, 25); | 	latestSchema = Date.UTC(2016, 3, 14); | ||||||
|  |  | ||||||
| Upgrade.check = function(callback) { | Upgrade.check = function(callback) { | ||||||
| 	db.get('schemaDate', function(err, value) { | 	db.get('schemaDate', function(err, value) { | ||||||
| @@ -438,6 +438,44 @@ Upgrade.upgrade = function(callback) { | |||||||
| 				winston.info('[2016/02/25] Social: Post Sharing skipped!'); | 				winston.info('[2016/02/25] Social: Post Sharing skipped!'); | ||||||
| 				next(); | 				next(); | ||||||
| 			} | 			} | ||||||
|  | 		}, | ||||||
|  | 		function(next) { | ||||||
|  | 			thisSchemaDate = Date.UTC(2016, 3, 14); | ||||||
|  |  | ||||||
|  | 			if (schemaDate < thisSchemaDate) { | ||||||
|  | 				updatesMade = true; | ||||||
|  | 				winston.info('[2016/04/14] Group title from settings to user profile'); | ||||||
|  |  | ||||||
|  | 				var user = require('./user'); | ||||||
|  | 				var batch = require('./batch'); | ||||||
|  | 				var count = 0; | ||||||
|  | 				batch.processSortedSet('users:joindate', function(uids, next) { | ||||||
|  | 					winston.info('upgraded ' + count + ' users'); | ||||||
|  | 					user.getMultipleUserSettings(uids, function(err, settings) { | ||||||
|  | 						if (err) { | ||||||
|  | 							return next(err); | ||||||
|  | 						} | ||||||
|  | 						count += uids.length; | ||||||
|  | 						settings = settings.filter(function(setting) { | ||||||
|  | 							return setting && setting.groupTitle; | ||||||
|  | 						}); | ||||||
|  |  | ||||||
|  | 						async.each(settings, function(setting, next) { | ||||||
|  | 							db.setObjectField('user:' + setting.uid, 'groupTitle', setting.groupTitle, next); | ||||||
|  | 						}, next); | ||||||
|  | 					}); | ||||||
|  | 				}, {}, function(err) { | ||||||
|  | 					if (err) { | ||||||
|  | 						return next(err); | ||||||
|  | 					} | ||||||
|  |  | ||||||
|  | 					winston.info('[2016/04/14] Group title from settings to user profile done'); | ||||||
|  | 					Upgrade.update(thisSchemaDate, next); | ||||||
|  | 				}); | ||||||
|  | 			} else { | ||||||
|  | 				winston.info('[2016/04/14] Group title from settings to user profile 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!!! | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ var plugins = require('../plugins'); | |||||||
| module.exports = function(User) { | module.exports = function(User) { | ||||||
|  |  | ||||||
| 	User.updateProfile = function(uid, data, callback) { | 	User.updateProfile = function(uid, data, callback) { | ||||||
| 		var fields = ['username', 'email', 'fullname', 'website', 'location', 'birthday', 'signature', 'aboutme']; | 		var fields = ['username', 'email', 'fullname', 'website', 'location', 'groupTitle', 'birthday', 'signature', 'aboutme']; | ||||||
|  |  | ||||||
| 		plugins.fireHook('filter:user.updateProfile', {uid: uid, data: data, fields: fields}, function(err, data) { | 		plugins.fireHook('filter:user.updateProfile', {uid: uid, data: data, fields: fields}, function(err, data) { | ||||||
| 			if (err) { | 			if (err) { | ||||||
|   | |||||||
| @@ -1,10 +1,10 @@ | |||||||
|  |  | ||||||
| 'use strict'; | 'use strict'; | ||||||
|  |  | ||||||
| var	async = require('async'), | var	async = require('async'); | ||||||
| 	meta = require('../meta'), | var meta = require('../meta'); | ||||||
| 	db = require('../database'), | var db = require('../database'); | ||||||
| 	plugins = require('../plugins'); | var plugins = require('../plugins'); | ||||||
|  |  | ||||||
| module.exports = function(User) { | module.exports = function(User) { | ||||||
|  |  | ||||||
| @@ -162,17 +162,4 @@ module.exports = function(User) { | |||||||
| 	User.setSetting = function(uid, key, value, callback) { | 	User.setSetting = function(uid, key, value, callback) { | ||||||
| 		db.setObjectField('user:' + uid + ':settings', key, value, callback); | 		db.setObjectField('user:' + uid + ':settings', key, value, callback); | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
| 	User.setGroupTitle = function(groupName, uid, callback) { |  | ||||||
| 		if (groupName === 'registered-users') { |  | ||||||
| 			return callback(); |  | ||||||
| 		} |  | ||||||
| 		db.getObjectField('user:' + uid + ':settings', 'groupTitle', function(err, currentTitle) { |  | ||||||
| 			if (err || (currentTitle || currentTitle === '')) { |  | ||||||
| 				return callback(err); |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			User.setSetting(uid, 'groupTitle', groupName, callback); |  | ||||||
| 		}); |  | ||||||
| 	}; |  | ||||||
| }; | }; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user