From 13623a620b677a453612aa6b8f92a4e80fa1c3dc Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 26 Feb 2016 14:27:03 -0500 Subject: [PATCH] fixed #4277 --- public/src/client/account/edit.js | 29 ++++++++++++++++++++--------- src/socket.io/user/picture.js | 18 ++++++++++-------- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/public/src/client/account/edit.js b/public/src/client/account/edit.js index cd97196ad0..a436b2c6dd 100644 --- a/public/src/client/account/edit.js +++ b/public/src/client/account/edit.js @@ -78,10 +78,15 @@ define('forum/account/edit', ['forum/account/header', 'uploader', 'translator'], if (err) { return app.alertError(err.message); } + + // boolean to signify whether an uploaded picture is present in the pictures list + var uploaded = pictures.reduce(function(memo, cur) { + return memo || cur.type === 'uploaded' + }, false); templates.parse('partials/modals/change_picture_modal', { pictures: pictures, - uploaded: !!ajaxify.data.uploadedpicture, + uploaded: uploaded, allowProfileImageUploads: ajaxify.data.allowProfileImageUploads }, function(html) { translator.translate(html, function(html) { @@ -189,15 +194,21 @@ define('forum/account/edit', ['forum/account/header', 'uploader', 'translator'], function onUploadComplete(urlOnServer) { urlOnServer = urlOnServer + '?' + new Date().getTime(); - $('#user-current-picture, img.avatar').attr('src', urlOnServer); updateHeader(urlOnServer); - uploadedPicture = urlOnServer; + + if (ajaxify.data.picture.length) { + $('#user-current-picture, img.avatar').attr('src', urlOnServer); + uploadedPicture = urlOnServer; + } else { + ajaxify.refresh(); + } } - function onRemoveComplete(urlOnServer) { - $('#user-current-picture').attr('src', urlOnServer); - updateHeader(urlOnServer); - uploadedPicture = ''; + function onRemoveComplete() { + if (ajaxify.data.uploadedpicture === ajaxify.data.picture) { + ajaxify.refresh(); + updateHeader(); + } } modal.find('[data-action="upload"]').on('click', function() { @@ -239,12 +250,12 @@ define('forum/account/edit', ['forum/account/header', 'uploader', 'translator'], }); modal.find('[data-action="remove-uploaded"]').on('click', function() { - socket.emit('user.removeUploadedPicture', {uid: ajaxify.data.theirid}, function(err, imageUrlOnServer) { + socket.emit('user.removeUploadedPicture', {uid: ajaxify.data.theirid}, function(err) { modal.modal('hide'); if (err) { return app.alertError(err.message); } - onRemoveComplete(imageUrlOnServer); + onRemoveComplete(); }); }); } diff --git a/src/socket.io/user/picture.js b/src/socket.io/user/picture.js index 6149eff50d..55caa37857 100644 --- a/src/socket.io/user/picture.js +++ b/src/socket.io/user/picture.js @@ -2,6 +2,7 @@ var async = require('async'); var winston = require('winston'); +var path = require('path'); var user = require('../../user'); var plugins = require('../../plugins'); @@ -73,20 +74,21 @@ module.exports = function(SocketUser) { user.isAdminOrSelf(socket.uid, data.uid, next); }, function (next) { - user.getUserField(data.uid, 'uploadedpicture', next); + user.getUserFields(data.uid, ['uploadedpicture', 'picture'], next); }, - function(uploadedPicture, next) { - if (!uploadedPicture.startsWith('http')) { - require('fs').unlink(uploadedPicture, function(err) { + function(userData, next) { + if (!userData.uploadedpicture.startsWith('http')) { + require('fs').unlink(path.join(__dirname, '../../../public', userData.uploadedpicture), function(err) { if (err) { winston.error(err); } }); } - user.setUserField(data.uid, 'uploadedpicture', '', next); - }, - function(next) { - user.getUserField(data.uid, 'picture', next); + + user.setUserFields(data.uid, { + uploadedpicture: '', + picture: userData.uploadedpicture === userData.picture ? '' : userData.picture // if current picture is uploaded picture, reset to user icon + }, next); } ], callback); };