| 
									
										
										
										
											2014-03-02 23:07:16 -05:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-28 15:33:25 -05:00
										 |  |  | var accountsController = {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var fs = require('fs'), | 
					
						
							|  |  |  | 	path = require('path'), | 
					
						
							|  |  |  | 	winston = require('winston'), | 
					
						
							|  |  |  | 	nconf = require('nconf'), | 
					
						
							|  |  |  | 	async= require('async'), | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | 	user = require('./../user'), | 
					
						
							| 
									
										
										
										
											2014-02-28 15:26:39 -05:00
										 |  |  | 	posts = require('./../posts'), | 
					
						
							| 
									
										
										
										
											2014-04-03 12:42:40 -04:00
										 |  |  | 	topics = require('./../topics'), | 
					
						
							| 
									
										
										
										
											2014-02-28 15:33:25 -05:00
										 |  |  | 	postTools = require('../postTools'), | 
					
						
							|  |  |  | 	utils = require('./../../public/src/utils'), | 
					
						
							|  |  |  | 	meta = require('./../meta'), | 
					
						
							| 
									
										
										
										
											2014-02-28 15:26:39 -05:00
										 |  |  | 	plugins = require('./../plugins'), | 
					
						
							| 
									
										
										
										
											2014-02-28 15:33:25 -05:00
										 |  |  | 	image = require('./../image'), | 
					
						
							|  |  |  | 	file = require('./../file'); | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | function userNotFound(res) { | 
					
						
							| 
									
										
										
										
											2014-03-09 20:05:14 -04:00
										 |  |  | 	return res.render('404', { | 
					
						
							|  |  |  | 		error: 'User not found!' | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function userNotAllowed(res) { | 
					
						
							| 
									
										
										
										
											2014-03-09 20:05:14 -04:00
										 |  |  | 	return res.render('403', { | 
					
						
							|  |  |  | 		error: 'Not allowed.' | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-28 14:22:49 -05:00
										 |  |  | function getUserDataByUserSlug(userslug, callerUID, callback) { | 
					
						
							|  |  |  | 	user.getUidByUserslug(userslug, function(err, uid) { | 
					
						
							|  |  |  | 		if(err || !uid) { | 
					
						
							| 
									
										
										
										
											2014-04-09 21:56:30 -04:00
										 |  |  | 			return callback(err || new Error('[[error:invalid-uid]]')); | 
					
						
							| 
									
										
										
										
											2014-02-28 14:22:49 -05:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		async.parallel({ | 
					
						
							|  |  |  | 			userData : function(next) { | 
					
						
							|  |  |  | 				user.getUserData(uid, next); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			userSettings : function(next) { | 
					
						
							|  |  |  | 				user.getSettings(uid, next); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			isAdmin : function(next) { | 
					
						
							|  |  |  | 				user.isAdministrator(callerUID, next); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			followStats: function(next) { | 
					
						
							|  |  |  | 				user.getFollowStats(uid, next); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			ips: function(next) { | 
					
						
							|  |  |  | 				user.getIPs(uid, 4, next); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}, function(err, results) { | 
					
						
							|  |  |  | 			if(err || !results.userData) { | 
					
						
							| 
									
										
										
										
											2014-04-09 21:56:30 -04:00
										 |  |  | 				return callback(err || new Error('[[error:invalid-uid]]')); | 
					
						
							| 
									
										
										
										
											2014-02-28 14:22:49 -05:00
										 |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			var userData = results.userData; | 
					
						
							|  |  |  | 			var userSettings = results.userSettings; | 
					
						
							|  |  |  | 			var isAdmin = results.isAdmin; | 
					
						
							|  |  |  | 			var self = parseInt(callerUID, 10) === parseInt(userData.uid, 10); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			userData.joindate = utils.toISOString(userData.joindate); | 
					
						
							|  |  |  | 			if(userData.lastonline) { | 
					
						
							|  |  |  | 				userData.lastonline = utils.toISOString(userData.lastonline); | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				userData.lastonline = userData.joindate; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if (!userData.birthday) { | 
					
						
							|  |  |  | 				userData.age = ''; | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				userData.age = Math.floor((new Date().getTime() - new Date(userData.birthday).getTime()) / 31536000000); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if (!(isAdmin || self || (userData.email && userSettings.showemail))) { | 
					
						
							|  |  |  | 				userData.email = ""; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if (self && !userSettings.showemail) { | 
					
						
							|  |  |  | 				userData.emailClass = ""; | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				userData.emailClass = "hide"; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if (isAdmin || self) { | 
					
						
							|  |  |  | 				userData.ips = results.ips; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			userData.websiteName = userData.website.replace('http://', '').replace('https://', ''); | 
					
						
							|  |  |  | 			userData.banned = parseInt(userData.banned, 10) === 1; | 
					
						
							|  |  |  | 			userData.uid = userData.uid; | 
					
						
							|  |  |  | 			userData.yourid = callerUID; | 
					
						
							|  |  |  | 			userData.theirid = userData.uid; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			userData.disableSignatures = meta.config.disableSignatures !== undefined && parseInt(meta.config.disableSignatures, 10) === 1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			userData.followingCount = results.followStats.followingCount; | 
					
						
							|  |  |  | 			userData.followerCount = results.followStats.followerCount; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			callback(null, userData); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-28 15:33:25 -05:00
										 |  |  | accountsController.getUserByUID = function(req, res, next) { | 
					
						
							|  |  |  | 	var uid = req.params.uid ? req.params.uid : 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	user.getUserData(uid, function(err, userData) { | 
					
						
							|  |  |  | 		res.json(userData); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | 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!' | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-11 03:39:41 -04:00
										 |  |  | 		user.isFollowing(callerUID, userData.theirid, function (err, isFollowing) { | 
					
						
							|  |  |  | 			if(err) { | 
					
						
							|  |  |  | 				return next(err); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | 			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; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-09 20:05:14 -04:00
										 |  |  | 					res.render('account', userData); | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | 				}); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | accountsController.getFollowing = function(req, res, next) { | 
					
						
							| 
									
										
										
										
											2014-03-11 04:33:08 -04:00
										 |  |  | 	getFollow('following', req, res, next); | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | accountsController.getFollowers = function(req, res, next) { | 
					
						
							| 
									
										
										
										
											2014-03-11 04:33:08 -04:00
										 |  |  | 	getFollow('followers', req, res, next); | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-11 04:33:08 -04:00
										 |  |  | function getFollow(name, req, res, next) { | 
					
						
							|  |  |  | 	var callerUID = req.user ? parseInt(req.user.uid, 10) : 0; | 
					
						
							|  |  |  | 	var userData; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	async.waterfall([ | 
					
						
							|  |  |  | 		function(next) { | 
					
						
							|  |  |  | 			getUserDataByUserSlug(req.params.userslug, callerUID, next); | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		function(data, next) { | 
					
						
							|  |  |  | 			userData = data; | 
					
						
							|  |  |  | 			if (!userData) { | 
					
						
							|  |  |  | 				return userNotFound(); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			var method = name === 'following' ? 'getFollowing' : 'getFollowers'; | 
					
						
							|  |  |  | 			user[method](userData.uid, next); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	], function(err, users) { | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | 		if(err) { | 
					
						
							|  |  |  | 			return next(err); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-03-11 04:33:08 -04:00
										 |  |  | 		userData[name] = users; | 
					
						
							|  |  |  | 		userData[name + 'Count'] = users.length; | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-11 04:33:08 -04:00
										 |  |  | 		res.render(name, userData); | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2014-03-11 04:33:08 -04:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-09 20:05:14 -04:00
										 |  |  | 				res.render('favourites', userData); | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | accountsController.getPosts = function(req, res, next) { | 
					
						
							|  |  |  | 	var callerUID = req.user ? parseInt(req.user.uid, 10) : 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-03 12:42:40 -04:00
										 |  |  | 	getBaseUser(req.params.userslug, function(err, userData) { | 
					
						
							|  |  |  | 		if (err) { | 
					
						
							|  |  |  | 			return next(err); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (!userData) { | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | 			return userNotFound(); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-03 12:42:40 -04:00
										 |  |  | 		posts.getPostsByUid(callerUID, userData.uid, 0, 19, function (err, userPosts) { | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | 			if (err) { | 
					
						
							|  |  |  | 				return next(err); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-03 12:42:40 -04:00
										 |  |  | 			userData.theirid = userData.uid; | 
					
						
							|  |  |  | 			userData.yourid = callerUID; | 
					
						
							|  |  |  | 			userData.posts = userPosts.posts; | 
					
						
							|  |  |  | 			userData.nextStart = userPosts.nextStart; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			res.render('accountposts', userData); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | accountsController.getTopics = function(req, res, next) { | 
					
						
							|  |  |  | 	var callerUID = req.user ? parseInt(req.user.uid, 10) : 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	getBaseUser(req.params.userslug, function(err, userData) { | 
					
						
							|  |  |  | 		if (err) { | 
					
						
							|  |  |  | 			return next(err); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (!userData) { | 
					
						
							|  |  |  | 			return userNotFound(); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		var set = 'uid:' + userData.uid + ':topics'; | 
					
						
							|  |  |  | 		topics.getTopicsFromSet(callerUID, set, 0, 19, function(err, userTopics) { | 
					
						
							|  |  |  | 			if(err) { | 
					
						
							|  |  |  | 				return next(err); | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-03 12:42:40 -04:00
										 |  |  | 			userData.theirid = userData.uid; | 
					
						
							|  |  |  | 			userData.yourid = callerUID; | 
					
						
							|  |  |  | 			userData.topics = userTopics.topics; | 
					
						
							|  |  |  | 			userData.nextStart = userTopics.nextStart; | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-03 12:42:40 -04:00
										 |  |  | 			res.render('accounttopics', userData); | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-03 12:42:40 -04:00
										 |  |  | function getBaseUser(userslug, callback) { | 
					
						
							|  |  |  | 	user.getUidByUserslug(userslug, function (err, uid) { | 
					
						
							|  |  |  | 		if (err || !uid) { | 
					
						
							|  |  |  | 			return callback(err); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		user.getUserFields(uid, ['uid', 'username', 'userslug'], callback); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | 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); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-03-11 03:39:41 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-09 20:05:14 -04:00
										 |  |  | 		res.render('accountedit', userData); | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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; | 
					
						
							| 
									
										
										
										
											2014-03-11 03:39:41 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-09 20:05:14 -04:00
										 |  |  | 				res.render('accountsettings', userData); | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-11 03:39:41 -04:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-28 15:26:39 -05:00
										 |  |  | accountsController.uploadPicture = function (req, res, next) { | 
					
						
							|  |  |  | 	var uploadSize = parseInt(meta.config.maximumProfileImageSize, 10) || 256; | 
					
						
							|  |  |  | 	if (req.files.userPhoto.size > uploadSize * 1024) { | 
					
						
							| 
									
										
										
										
											2014-03-06 00:52:12 -05:00
										 |  |  | 		fs.unlink(req.files.userPhoto.path); | 
					
						
							| 
									
										
										
										
											2014-02-28 15:26:39 -05:00
										 |  |  | 		return res.json({ | 
					
						
							|  |  |  | 			error: 'Images must be smaller than ' + uploadSize + ' kb!' | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var allowedTypes = ['image/png', 'image/jpeg', 'image/jpg', 'image/gif']; | 
					
						
							|  |  |  | 	if (allowedTypes.indexOf(req.files.userPhoto.type) === -1) { | 
					
						
							| 
									
										
										
										
											2014-03-06 00:52:12 -05:00
										 |  |  | 		fs.unlink(req.files.userPhoto.path); | 
					
						
							| 
									
										
										
										
											2014-02-28 15:26:39 -05:00
										 |  |  | 		return res.json({ | 
					
						
							|  |  |  | 			error: 'Allowed image types are png, jpg and gif!' | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var extension = path.extname(req.files.userPhoto.name); | 
					
						
							|  |  |  | 	if (!extension) { | 
					
						
							| 
									
										
										
										
											2014-03-06 00:52:12 -05:00
										 |  |  | 		fs.unlink(req.files.userPhoto.path); | 
					
						
							| 
									
										
										
										
											2014-02-28 15:26:39 -05:00
										 |  |  | 		return res.json({ | 
					
						
							|  |  |  | 			error: 'Error uploading file! Error : Invalid extension!' | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var updateUid = req.user.uid; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	async.waterfall([ | 
					
						
							|  |  |  | 		function(next) { | 
					
						
							|  |  |  | 			image.resizeImage(req.files.userPhoto.path, extension, 128, 128, next); | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		function(next) { | 
					
						
							|  |  |  | 			image.convertImageToPng(req.files.userPhoto.path, extension, next); | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		function(next) { | 
					
						
							|  |  |  | 			try { | 
					
						
							|  |  |  | 				var params = JSON.parse(req.body.params); | 
					
						
							|  |  |  | 				if(parseInt(updateUid, 10) === parseInt(params.uid, 10)) { | 
					
						
							|  |  |  | 					return next(); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				user.isAdministrator(req.user.uid, function(err, isAdmin) { | 
					
						
							|  |  |  | 					if(err) { | 
					
						
							|  |  |  | 						return next(err); | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					if(!isAdmin) { | 
					
						
							|  |  |  | 						return userNotAllowed(); | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 					updateUid = params.uid; | 
					
						
							|  |  |  | 					next(); | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 			} catch(err) { | 
					
						
							|  |  |  | 				next(err); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	], function(err, result) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		function done(err, image) { | 
					
						
							|  |  |  | 			fs.unlink(req.files.userPhoto.path); | 
					
						
							|  |  |  | 			if(err) { | 
					
						
							|  |  |  | 				return res.json({error: err.message}); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			user.setUserField(updateUid, 'uploadedpicture', image.url); | 
					
						
							|  |  |  | 			user.setUserField(updateUid, 'picture', image.url); | 
					
						
							|  |  |  | 			res.json({ | 
					
						
							|  |  |  | 				path: image.url | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if(err) { | 
					
						
							| 
									
										
										
										
											2014-03-06 00:52:12 -05:00
										 |  |  | 			fs.unlink(req.files.userPhoto.path); | 
					
						
							| 
									
										
										
										
											2014-02-28 15:26:39 -05:00
										 |  |  | 			return res.json({error:err.message}); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-28 15:26:39 -05:00
										 |  |  | 		if(plugins.hasListeners('filter:uploadImage')) { | 
					
						
							|  |  |  | 			return plugins.fireHook('filter:uploadImage', req.files.userPhoto, done); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		var convertToPNG = parseInt(meta.config['profile:convertProfileImageToPNG'], 10); | 
					
						
							|  |  |  | 		var filename = updateUid + '-profileimg' + (convertToPNG ? '.png' : extension); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		user.getUserField(updateUid, 'uploadedpicture', function (err, oldpicture) { | 
					
						
							|  |  |  | 			if (!oldpicture) { | 
					
						
							|  |  |  | 				file.saveFileToLocal(filename, req.files.userPhoto.path, done); | 
					
						
							|  |  |  | 				return; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			var absolutePath = path.join(nconf.get('base_dir'), nconf.get('upload_path'), path.basename(oldpicture)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			fs.unlink(absolutePath, function (err) { | 
					
						
							|  |  |  | 				if (err) { | 
					
						
							|  |  |  | 					winston.err(err); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				file.saveFileToLocal(filename, req.files.userPhoto.path, done); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2014-02-28 15:58:29 -05:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-03 12:30:27 -05:00
										 |  |  | accountsController.getNotifications = function(req, res, next) { | 
					
						
							|  |  |  | 	user.notifications.getAll(req.user.uid, null, null, function(err, notifications) { | 
					
						
							| 
									
										
										
										
											2014-03-09 20:05:14 -04:00
										 |  |  | 		res.render('notifications', { | 
					
						
							|  |  |  | 			notifications: notifications | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2014-03-03 12:30:27 -05:00
										 |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-28 14:08:06 -05:00
										 |  |  | module.exports = accountsController; |