diff options
Diffstat (limited to 'client/components/users')
-rw-r--r-- | client/components/users/userHeader.jade | 8 | ||||
-rw-r--r-- | client/components/users/userHeader.js | 43 |
2 files changed, 49 insertions, 2 deletions
diff --git a/client/components/users/userHeader.jade b/client/components/users/userHeader.jade index 84ef5a09..f67f82ee 100644 --- a/client/components/users/userHeader.jade +++ b/client/components/users/userHeader.jade @@ -36,6 +36,14 @@ template(name="editProfilePopup") label | {{_ 'initials'}} input.js-profile-initials(type="text" value=profile.initials) + label + | {{_ 'email'}} + span.error.hide.email-taken + | {{_ 'error-email-taken'}} + if allowEmailChange + input.js-profile-email(type="email" value="{{emails.[0].address}}") + else + input.js-profile-email(type="email" value="{{emails.[0].address}}" readonly) input.primary.wide(type="submit" value="{{_ 'save'}}") template(name="editNotificationPopup") diff --git a/client/components/users/userHeader.js b/client/components/users/userHeader.js index 0580092e..90205ee1 100644 --- a/client/components/users/userHeader.js +++ b/client/components/users/userHeader.js @@ -20,18 +20,47 @@ Template.memberMenuPopup.events({ }, }); +Template.editProfilePopup.helpers({ + allowEmailChange() { + return AccountSettings.findOne('accounts-allowEmailChange').booleanValue; + }, +}); + Template.editProfilePopup.events({ submit(evt, tpl) { evt.preventDefault(); const fullname = tpl.find('.js-profile-fullname').value.trim(); const username = tpl.find('.js-profile-username').value.trim(); const initials = tpl.find('.js-profile-initials').value.trim(); + const email = tpl.find('.js-profile-email').value.trim(); + let isChangeUserName = false; + let isChangeEmail = false; Users.update(Meteor.userId(), {$set: { 'profile.fullname': fullname, 'profile.initials': initials, }}); - - if (username !== Meteor.user().username) { + isChangeUserName = username !== Meteor.user().username; + isChangeEmail = email.toLowerCase() !== Meteor.user().emails[0].address.toLowerCase(); + if (isChangeUserName && isChangeEmail) { + Meteor.call('setUsernameAndEmail', username, email.toLowerCase(), function(error) { + const usernameMessageElement = tpl.$('.username-taken'); + const emailMessageElement = tpl.$('.email-taken'); + if (error) { + const errorElement = error.error; + if (errorElement === 'username-already-taken') { + usernameMessageElement.show(); + emailMessageElement.hide(); + } else if (errorElement === 'email-already-taken') { + usernameMessageElement.hide(); + emailMessageElement.show(); + } + } else { + usernameMessageElement.hide(); + emailMessageElement.hide(); + Popup.back(); + } + }); + } else if (isChangeUserName) { Meteor.call('setUsername', username, function(error) { const messageElement = tpl.$('.username-taken'); if (error) { @@ -41,6 +70,16 @@ Template.editProfilePopup.events({ Popup.back(); } }); + } else if (isChangeEmail) { + Meteor.call('setEmail', email.toLowerCase(), function(error) { + const messageElement = tpl.$('.email-taken'); + if (error) { + messageElement.show(); + } else { + messageElement.hide(); + Popup.back(); + } + }); } else Popup.back(); }, }); |