mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 19:15:58 +01:00 
			
		
		
		
	
		
			
	
	
		
			277 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			277 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | var accountsController = {}, | ||
|  | 	user = require('./../user'), | ||
|  | 	posts = require('./../posts'); | ||
|  | 
 | ||
|  | 
 | ||
|  | function userNotFound(res) { | ||
|  | 	if (res.locals.isAPI) { | ||
|  | 		return res.json(404, { | ||
|  | 			error: 'User not found!' | ||
|  | 		}); | ||
|  | 	} else { | ||
|  | 		return res.render('404', { | ||
|  | 			error: 'User not found!' | ||
|  | 		}); | ||
|  | 	}  | ||
|  | } | ||
|  | 
 | ||
|  | function userNotAllowed(res) { | ||
|  | 	if (res.locals.isAPI) { | ||
|  | 		return res.json(403, { | ||
|  | 			error: 'Not allowed.' | ||
|  | 		}); | ||
|  | 	} else { | ||
|  | 		return res.render('403', { | ||
|  | 			error: 'Not allowed.' | ||
|  | 		}); | ||
|  | 	}  | ||
|  | } | ||
|  | 
 | ||
|  | accountsController.getAccount = function(req, res, next) { | ||
|  | 	var callerUID = req.user ? parseInt(req.user.uid, 10) : 0; | ||
|  | 
 | ||
|  | 	getUserDataByUserSlug(req.params.userslug, callerUID, function (err, userData) { | ||
|  | 		if(err) { | ||
|  | 			return next(err); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if(!userData) { | ||
|  | 			return res.json(404, { | ||
|  | 				error: 'User not found!' | ||
|  | 			}); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		user.isFollowing(callerUID, userData.theirid, function (isFollowing) { | ||
|  | 			posts.getPostsByUid(callerUID, userData.theirid, 0, 9, function (err, userPosts) { | ||
|  | 				if(err) { | ||
|  | 					return next(err); | ||
|  | 				} | ||
|  | 
 | ||
|  | 				userData.posts = userPosts.posts.filter(function (p) { | ||
|  | 					return p && parseInt(p.deleted, 10) !== 1; | ||
|  | 				}); | ||
|  | 
 | ||
|  | 				userData.isFollowing = isFollowing; | ||
|  | 
 | ||
|  | 				if (!userData.profileviews) { | ||
|  | 					userData.profileviews = 1; | ||
|  | 				} | ||
|  | 
 | ||
|  | 				if (callerUID !== parseInt(userData.uid, 10) && callerUID) { | ||
|  | 					user.incrementUserFieldBy(userData.uid, 'profileviews', 1); | ||
|  | 				} | ||
|  | 
 | ||
|  | 				postTools.parse(userData.signature, function (err, signature) { | ||
|  | 					userData.signature = signature; | ||
|  | 
 | ||
|  | 					if (res.locals.isAPI) { | ||
|  | 						res.json({}); | ||
|  | 					} else { | ||
|  | 						res.render('account', {}); | ||
|  | 					}; | ||
|  | 				}); | ||
|  | 			}); | ||
|  | 		}); | ||
|  | 	}); | ||
|  | }; | ||
|  | 
 | ||
|  | accountsController.getFollowing = function(req, res, next) { | ||
|  | 	var callerUID = req.user ? parseInt(req.user.uid, 10) : 0; | ||
|  | 
 | ||
|  | 	getUserDataByUserSlug(req.params.userslug, callerUID, function (err, userData) { | ||
|  | 		if(err) { | ||
|  | 			return next(err); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if (userData) { | ||
|  | 			user.getFollowing(userData.uid, function (err, followingData) { | ||
|  | 				if(err) { | ||
|  | 					return next(err); | ||
|  | 				} | ||
|  | 				userData.following = followingData; | ||
|  | 				userData.followingCount = followingData.length; | ||
|  | 				 | ||
|  | 				if (res.locals.isAPI) { | ||
|  | 					res.json(userData); | ||
|  | 				} else { | ||
|  | 					res.render('following', userData); | ||
|  | 				} | ||
|  | 			}); | ||
|  | 
 | ||
|  | 		} else { | ||
|  | 			return userNotFound(); | ||
|  | 		} | ||
|  | 	}); | ||
|  | }; | ||
|  | 
 | ||
|  | accountsController.getFollowers = function(req, res, next) { | ||
|  | 	var callerUID = req.user ? parseInt(req.user.uid, 10) : 0; | ||
|  | 
 | ||
|  | 	getUserDataByUserSlug(req.params.userslug, callerUID, function (err, userData) { | ||
|  | 		if(err) { | ||
|  | 			return next(err); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if (userData) { | ||
|  | 			user.getFollowers(userData.uid, function (err, followersData) { | ||
|  | 				if(err) { | ||
|  | 					return next(err); | ||
|  | 				} | ||
|  | 				userData.followers = followersData; | ||
|  | 				userData.followersCount = followersData.length; | ||
|  | 				 | ||
|  | 				if (res.locals.isAPI) { | ||
|  | 					res.json(userData); | ||
|  | 				} else { | ||
|  | 					res.render('followers', userData); | ||
|  | 				} | ||
|  | 			}); | ||
|  | 		} else { | ||
|  | 			return userNotFound(); | ||
|  | 		} | ||
|  | 	}); | ||
|  | }; | ||
|  | 
 | ||
|  | accountsController.getFavourites = function(req, res, next) { | ||
|  | 	var callerUID = req.user ? parseInt(req.user.uid, 10) : 0; | ||
|  | 
 | ||
|  | 	user.getUidByUserslug(req.params.userslug, function (err, uid) { | ||
|  | 		if (!uid) { | ||
|  | 			return userNotFound(); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if (parseInt(uid, 10) !== callerUID) { | ||
|  | 			return userNotAllowed(); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		user.getUserFields(uid, ['username', 'userslug'], function (err, userData) { | ||
|  | 			if (err) { | ||
|  | 				return next(err); | ||
|  | 			} | ||
|  | 
 | ||
|  | 			if (!userData) { | ||
|  | 				return userNotFound(); | ||
|  | 			} | ||
|  | 
 | ||
|  | 			posts.getFavourites(uid, 0, 9, function (err, favourites) { | ||
|  | 				if (err) { | ||
|  | 					return next(err); | ||
|  | 				} | ||
|  | 
 | ||
|  | 				userData.theirid = uid; | ||
|  | 				userData.yourid = callerUID; | ||
|  | 				userData.posts = favourites.posts; | ||
|  | 				userData.nextStart = favourites.nextStart; | ||
|  | 
 | ||
|  | 				if (res.locals.isAPI) { | ||
|  | 					res.json(userData); | ||
|  | 				} else { | ||
|  | 					res.render('favourites', userData); | ||
|  | 				} | ||
|  | 			}); | ||
|  | 		}); | ||
|  | 	}); | ||
|  | }; | ||
|  | 
 | ||
|  | accountsController.getPosts = function(req, res, next) { | ||
|  | 	var callerUID = req.user ? parseInt(req.user.uid, 10) : 0; | ||
|  | 
 | ||
|  | 	user.getUidByUserslug(req.params.userslug, function (err, uid) { | ||
|  | 		if (!uid) { | ||
|  | 			return userNotFound(); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		user.getUserFields(uid, ['username', 'userslug'], function (err, userData) { | ||
|  | 			if (err) { | ||
|  | 				return next(err); | ||
|  | 			} | ||
|  | 
 | ||
|  | 			if (!userData) { | ||
|  | 				return userNotFound(); | ||
|  | 			} | ||
|  | 
 | ||
|  | 			posts.getPostsByUid(callerUID, uid, 0, 19, function (err, userPosts) { | ||
|  | 				if (err) { | ||
|  | 					return next(err); | ||
|  | 				} | ||
|  | 				userData.uid = uid; | ||
|  | 				userData.theirid = uid; | ||
|  | 				userData.yourid = callerUID; | ||
|  | 				userData.posts = userPosts.posts; | ||
|  | 				userData.nextStart = userPosts.nextStart; | ||
|  | 
 | ||
|  | 				if (res.locals.isAPI) { | ||
|  | 					res.json(userData); | ||
|  | 				} else { | ||
|  | 					res.render('accountposts', userData); | ||
|  | 				} | ||
|  | 			}); | ||
|  | 		}); | ||
|  | 	}); | ||
|  | }; | ||
|  | 
 | ||
|  | accountsController.accountEdit = function(req, res, next) { | ||
|  | 	var callerUID = req.user ? parseInt(req.user.uid, 10) : 0; | ||
|  | 
 | ||
|  | 	getUserDataByUserSlug(req.params.userslug, callerUID, function (err, userData) { | ||
|  | 		if(err) { | ||
|  | 			return next(err); | ||
|  | 		} | ||
|  | 		 | ||
|  | 		if (res.locals.isAPI) { | ||
|  | 			res.json(userData); | ||
|  | 		} else { | ||
|  | 			res.render('accountedit', userData); | ||
|  | 		} | ||
|  | 	}); | ||
|  | }; | ||
|  | 
 | ||
|  | accountsController.accountSettings = function(req, res, next) { | ||
|  | 	var callerUID = req.user ? parseInt(req.user.uid, 10) : 0; | ||
|  | 
 | ||
|  | 	user.getUidByUserslug(req.params.userslug, function(err, uid) { | ||
|  | 		if (err) { | ||
|  | 			return next(err); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if (!uid) { | ||
|  | 			return userNotFound(); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if (parseInt(uid, 10) !== callerUID) { | ||
|  | 			return userNotAllowed(); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		plugins.fireHook('filter:user.settings', [], function(err, settings) { | ||
|  | 			if (err) { | ||
|  | 				return next(err); | ||
|  | 			} | ||
|  | 
 | ||
|  | 			user.getUserFields(uid, ['username', 'userslug'], function(err, userData) { | ||
|  | 				if (err) { | ||
|  | 					return next(err); | ||
|  | 				} | ||
|  | 
 | ||
|  | 				if(!userData) { | ||
|  | 					return userNotFound(); | ||
|  | 				} | ||
|  | 				userData.yourid = req.user.uid; | ||
|  | 				userData.theirid = uid; | ||
|  | 				userData.settings = settings; | ||
|  | 				 | ||
|  | 				if (res.locals.isAPI) { | ||
|  | 					res.json(userData); | ||
|  | 				} else { | ||
|  | 					res.render('accountsettings', userData); | ||
|  | 				} | ||
|  | 			}); | ||
|  | 		}); | ||
|  | 
 | ||
|  | 	}); | ||
|  | 
 | ||
|  | 	 | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | module.exports = accountsController; |