mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 02:55:58 +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-rewards-essentials": "0.0.8", | ||||
|     "nodebb-theme-lavender": "3.0.9", | ||||
|     "nodebb-theme-persona": "4.0.118", | ||||
|     "nodebb-theme-vanilla": "5.0.63", | ||||
|     "nodebb-theme-persona": "4.0.119", | ||||
|     "nodebb-theme-vanilla": "5.0.64", | ||||
|     "nodebb-widget-essentials": "2.0.9", | ||||
|     "nodemailer": "2.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_create": "Follow topics you create", | ||||
|  | ||||
| 	"grouptitle": "Select the group title you would like to display", | ||||
| 	"grouptitle": "Group Title", | ||||
| 	"no-group-title": "No group title", | ||||
|  | ||||
| 	"select-skin": "Select a Skin", | ||||
|   | ||||
| @@ -36,6 +36,7 @@ define('forum/account/edit', ['forum/account/header', 'uploader', 'translator'], | ||||
| 			website: $('#inputWebsite').val(), | ||||
| 			birthday: $('#inputBirthday').val(), | ||||
| 			location: $('#inputLocation').val(), | ||||
| 			groupTitle: $('#groupTitle').val(), | ||||
| 			signature: $('#inputSignature').val(), | ||||
| 			aboutme: $('#inputAboutMe').val() | ||||
| 		}; | ||||
|   | ||||
| @@ -10,6 +10,7 @@ var user = require('../../user'); | ||||
| var meta = require('../../meta'); | ||||
| var plugins = require('../../plugins'); | ||||
| var helpers = require('../helpers'); | ||||
| var groups = require('../../groups'); | ||||
| var accountHelpers = require('./helpers'); | ||||
|  | ||||
| var editController = {}; | ||||
| @@ -26,6 +27,12 @@ editController.get = function(req, res, callback) { | ||||
| 		userData.allowProfileImageUploads = parseInt(meta.config.allowProfileImageUploads) === 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.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) { | ||||
| 			if (err) { | ||||
| 				return next(err); | ||||
| 				return callback(err); | ||||
| 			} | ||||
|  | ||||
| 			res.render('account/edit', userData); | ||||
|   | ||||
| @@ -133,7 +133,7 @@ helpers.getBaseUser = function(userslug, callerUID, callback) { | ||||
|  | ||||
| 			async.parallel({ | ||||
| 				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) { | ||||
| 					user.isAdministrator(callerUID, next); | ||||
|   | ||||
| @@ -1,16 +1,17 @@ | ||||
| 'use strict'; | ||||
|  | ||||
| var	async = require('async'), | ||||
| 	winston = require('winston'), | ||||
| 	_ = require('underscore'), | ||||
| var	async = require('async'); | ||||
| var winston = require('winston'); | ||||
| var _ = require('underscore'); | ||||
|  | ||||
| 	user = require('../user'), | ||||
| 	utils = require('../../public/src/utils'), | ||||
| 	plugins = require('../plugins'), | ||||
| 	notifications = require('../notifications'), | ||||
| 	db = require('./../database'); | ||||
| var user = require('../user'); | ||||
| var utils = require('../../public/src/utils'); | ||||
| var plugins = require('../plugins'); | ||||
| var notifications = require('../notifications'); | ||||
| var db = require('./../database'); | ||||
|  | ||||
| module.exports = function(Groups) { | ||||
|  | ||||
| 	Groups.join = function(groupName, uid, callback) { | ||||
| 		function join() { | ||||
| 			var tasks = [ | ||||
| @@ -39,7 +40,7 @@ module.exports = function(Groups) { | ||||
| 					async.parallel(tasks, next); | ||||
| 				}, | ||||
| 				function(results, next) { | ||||
| 					user.setGroupTitle(groupName, uid, next); | ||||
| 					setGroupTitleIfNotSet(groupName, uid, next); | ||||
| 				}, | ||||
| 				function(next) { | ||||
| 					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) { | ||||
| 		async.waterfall([ | ||||
| 			async.apply(inviteOrRequestMembership, groupName, uid, 'request'), | ||||
|   | ||||
| @@ -1,41 +1,36 @@ | ||||
| 'use strict'; | ||||
|  | ||||
| var async = require('async'), | ||||
| 	validator = require('validator'), | ||||
|  | ||||
| 	db = require('../database'), | ||||
| 	user = require('../user'), | ||||
| 	groups = require('../groups'), | ||||
| 	meta = require('../meta'), | ||||
| 	plugins = require('../plugins'); | ||||
| var async = require('async'); | ||||
| var validator = require('validator'); | ||||
|  | ||||
| var user = require('../user'); | ||||
| var groups = require('../groups'); | ||||
| var meta = require('../meta'); | ||||
| var plugins = require('../plugins'); | ||||
|  | ||||
| module.exports = function(Posts) { | ||||
|  | ||||
| 	Posts.getUserInfoForPosts = function(uids, uid, callback) { | ||||
| 		var groupsMap = {}; | ||||
| 		var userSettings; | ||||
| 		async.parallel({ | ||||
| 			groupTitles: function(next) { | ||||
| 				var keys = uids.map(function(uid) { | ||||
| 					return 'user:' + uid + ':settings'; | ||||
| 				}); | ||||
| 		var userData; | ||||
| 		async.waterfall([ | ||||
| 					function (next) { | ||||
| 						db.getObjectsFields(keys, ['groupTitle'], next); | ||||
| 			function(next) { | ||||
| 				user.getUsersFields(uids, ['uid', 'username', 'fullname', 'userslug', 'reputation', 'postcount', 'picture', 'signature', 'banned', 'status', 'lastonline', 'groupTitle'], next); | ||||
| 			}, | ||||
| 					function (_userSettings, next) { | ||||
| 						userSettings = _userSettings; | ||||
| 						var groupKeys = userSettings.filter(function(userSetting) { | ||||
| 							return userSetting && userSetting.groupTitle; | ||||
| 						}).map(function(userSetting) { | ||||
| 							return userSetting.groupTitle; | ||||
| 			function(_userData, next) { | ||||
| 				userData = _userData; | ||||
| 				var groupTitles = userData.map(function(userData) { | ||||
| 					return userData && userData.groupTitle; | ||||
| 				}).filter(function(groupTitle, index, array) { | ||||
| 					return groupTitle && array.indexOf(groupTitle) === index; | ||||
| 				}); | ||||
| 						groups.getGroupsData(groupKeys, next); | ||||
| 					}, | ||||
| 					function (groupsData, next) { | ||||
| 				groups.getGroupsData(groupTitles, next); | ||||
| 			} | ||||
| 		], function(err, groupsData) { | ||||
| 			if (err) { | ||||
| 				return callback(err); | ||||
| 			} | ||||
|  | ||||
| 			groupsData.forEach(function(group) { | ||||
| 				if (group && group.userTitleEnabled) { | ||||
| 					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, i) { | ||||
| 			userData.forEach(function(userData) { | ||||
| 				userData.uid = userData.uid || 0; | ||||
| 				userData.username = userData.username || '[[global:guest]]'; | ||||
| 				userData.userslug = userData.userslug || ''; | ||||
| @@ -69,7 +52,6 @@ module.exports = function(Posts) { | ||||
| 				userData.banned = parseInt(userData.banned, 10) === 1; | ||||
| 				userData.picture = userData.picture || ''; | ||||
| 				userData.status = user.getStatus(userData); | ||||
| 				userData.groupTitle = results.groupTitles[i].groupTitle; | ||||
| 				userData.signature = validator.escape(userData.signature || ''); | ||||
| 				userData.fullname = validator.escape(userData.fullname || ''); | ||||
| 			}); | ||||
| @@ -77,7 +59,7 @@ module.exports = function(Posts) { | ||||
| 			async.map(userData, function(userData, next) { | ||||
| 				async.parallel({ | ||||
| 					isMemberOfGroup: function (next) { | ||||
| 						if (!userData.groupTitle) { | ||||
| 						if (!userData.groupTitle || !groupsMap[userData.groupTitle]) { | ||||
| 							return next(); | ||||
| 						} | ||||
| 						groups.isMember(userData.uid, userData.groupTitle, next); | ||||
|   | ||||
| @@ -10,7 +10,7 @@ var db = require('./database'), | ||||
| 	schemaDate, thisSchemaDate, | ||||
|  | ||||
| 	// IMPORTANT: REMEMBER TO UPDATE VALUE OF latestSchema | ||||
| 	latestSchema = Date.UTC(2016, 1, 25); | ||||
| 	latestSchema = Date.UTC(2016, 3, 14); | ||||
|  | ||||
| Upgrade.check = function(callback) { | ||||
| 	db.get('schemaDate', function(err, value) { | ||||
| @@ -438,6 +438,44 @@ Upgrade.upgrade = function(callback) { | ||||
| 				winston.info('[2016/02/25] Social: Post Sharing skipped!'); | ||||
| 				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 | ||||
| 		// IMPORTANT: REMEMBER TO UPDATE VALUE OF latestSchema IN LINE 24!!! | ||||
|   | ||||
| @@ -12,7 +12,7 @@ var plugins = require('../plugins'); | ||||
| module.exports = function(User) { | ||||
|  | ||||
| 	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) { | ||||
| 			if (err) { | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
|  | ||||
| 'use strict'; | ||||
|  | ||||
| var	async = require('async'), | ||||
| 	meta = require('../meta'), | ||||
| 	db = require('../database'), | ||||
| 	plugins = require('../plugins'); | ||||
| var	async = require('async'); | ||||
| var meta = require('../meta'); | ||||
| var db = require('../database'); | ||||
| var plugins = require('../plugins'); | ||||
|  | ||||
| module.exports = function(User) { | ||||
|  | ||||
| @@ -162,17 +162,4 @@ module.exports = function(User) { | ||||
| 	User.setSetting = function(uid, 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