| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var async = require('async'), | 
					
						
							| 
									
										
										
										
											2015-09-25 13:11:11 -04:00
										 |  |  | 	fs = require('fs'), | 
					
						
							|  |  |  | 	nconf = require('nconf'), | 
					
						
							|  |  |  | 	winston = require('winston'), | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 	db = require('../../database'), | 
					
						
							| 
									
										
										
										
											2015-09-25 13:11:11 -04:00
										 |  |  | 	user = require('../../user'), | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 	meta = require('../../meta'), | 
					
						
							|  |  |  | 	helpers = require('../helpers'), | 
					
						
							|  |  |  | 	accountHelpers = require('./helpers'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var editController = {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | editController.get = function(req, res, callback) { | 
					
						
							| 
									
										
										
										
											2015-10-09 17:52:55 -04:00
										 |  |  | 	accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, function(err, userData) { | 
					
						
							|  |  |  | 		if (err || !userData) { | 
					
						
							|  |  |  | 			return callback(err); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		userData.title = '[[pages:account/edit, ' + userData.username + ']]'; | 
					
						
							|  |  |  | 		userData.breadcrumbs = helpers.buildBreadcrumbs([{text: userData.username, url: '/user/' + userData.userslug}, {text: '[[user:edit]]'}]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		res.render('account/edit', userData); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | editController.password = function(req, res, next) { | 
					
						
							|  |  |  | 	renderRoute('password', req, res, next); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | editController.username = function(req, res, next) { | 
					
						
							|  |  |  | 	renderRoute('username', req, res, next); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | editController.email = function(req, res, next) { | 
					
						
							|  |  |  | 	renderRoute('email', req, res, next); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function renderRoute(name, req, res, next) { | 
					
						
							|  |  |  | 	getUserData(req, next, function(err, userData) { | 
					
						
							|  |  |  | 		if (err) { | 
					
						
							|  |  |  | 			return next(err); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		userData.title = '[[pages:account/edit/' + name + ', ' + userData.username + ']]'; | 
					
						
							|  |  |  | 		userData.breadcrumbs = helpers.buildBreadcrumbs([ | 
					
						
							|  |  |  | 			{text: userData.username, url: '/user/' + userData.userslug}, | 
					
						
							|  |  |  | 			{text: '[[user:edit]]', url: '/user/' + userData.userslug + '/edit'}, | 
					
						
							|  |  |  | 			{text: '[[user:' + name + ']]'} | 
					
						
							|  |  |  | 		]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		res.render('account/edit/' + name, userData); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function getUserData(req, next, callback) { | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 	var userData; | 
					
						
							|  |  |  | 	async.waterfall([ | 
					
						
							|  |  |  | 		function(next) { | 
					
						
							|  |  |  | 			accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, next); | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		function(data, next) { | 
					
						
							|  |  |  | 			userData = data; | 
					
						
							|  |  |  | 			if (!userData) { | 
					
						
							| 
									
										
										
										
											2015-10-09 17:52:55 -04:00
										 |  |  | 				return next(); | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			db.getObjectField('user:' + userData.uid, 'password', next); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	], function(err, password) { | 
					
						
							|  |  |  | 		if (err) { | 
					
						
							|  |  |  | 			return callback(err); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		userData['username:disableEdit'] = parseInt(meta.config['username:disableEdit'], 10) === 1; | 
					
						
							|  |  |  | 		userData.hasPassword = !!password; | 
					
						
							| 
									
										
										
										
											2015-10-09 17:52:55 -04:00
										 |  |  | 		callback(null, userData); | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2015-10-09 17:52:55 -04:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2015-09-25 13:11:11 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | editController.uploadPicture = function (req, res, next) { | 
					
						
							|  |  |  | 	var userPhoto = req.files.files[0]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var updateUid = req.uid; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	async.waterfall([ | 
					
						
							|  |  |  | 		function(next) { | 
					
						
							|  |  |  | 			user.getUidByUserslug(req.params.userslug, next); | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		function(uid, next) { | 
					
						
							|  |  |  | 			if (parseInt(updateUid, 10) === parseInt(uid, 10)) { | 
					
						
							|  |  |  | 				return next(); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			user.isAdministrator(req.uid, function(err, isAdmin) { | 
					
						
							|  |  |  | 				if (err) { | 
					
						
							|  |  |  | 					return next(err); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				if (!isAdmin) { | 
					
						
							|  |  |  | 					return helpers.notAllowed(req, res); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				updateUid = uid; | 
					
						
							|  |  |  | 				next(); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		function(next) { | 
					
						
							|  |  |  | 			user.uploadPicture(updateUid, userPhoto, next); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	], function(err, image) { | 
					
						
							|  |  |  | 		fs.unlink(userPhoto.path, function(err) { | 
					
						
							|  |  |  | 			winston.error('unable to delete picture ' + userPhoto.path, err); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 		if (err) { | 
					
						
							|  |  |  | 			return next(err); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		res.json([{name: userPhoto.name, url: image.url.startsWith('http') ? image.url : nconf.get('relative_path') + image.url}]); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | module.exports = editController; |