diff --git a/src/Umbraco.Web/Controllers/UmbProfileController.cs b/src/Umbraco.Web/Controllers/UmbProfileController.cs index 564a56c0d4..f84a5cfbac 100644 --- a/src/Umbraco.Web/Controllers/UmbProfileController.cs +++ b/src/Umbraco.Web/Controllers/UmbProfileController.cs @@ -25,38 +25,7 @@ namespace Umbraco.Web.Controllers return CurrentUmbracoPage(); } - if (Members.IsLoggedIn() == false) - { - throw new NotSupportedException("No member is currently logged in"); - } - - var member = Services.MemberService.GetByUsername(HttpContext.User.Identity.Name); - if (member == null) - { - //this should never happen - throw new InvalidOperationException("No member found with username: " + HttpContext.User.Identity.Name); - } - - if (model.Name != null) - { - member.Name = model.Name; - } - member.Email = model.Email; - member.Username = model.Email; - if (model.MemberProperties != null) - { - //TODO: Shouldn't we ensure that none of these properties are flagged as non-editable to the member?? - foreach (var property in model.MemberProperties.Where(p => p.Value != null)) - { - if (member.Properties.Contains(property.Alias)) - { - member.Properties[property.Alias].Value = property.Value; - } - } - } - Services.MemberService.Save(member); - //reset the FormsAuth cookie since the username might have changed - FormsAuthentication.SetAuthCookie(member.Username, true); + Members.UpdateMemberProfile(model); //TODO: Why are we redirecting to home again here?? return Redirect("/"); diff --git a/src/Umbraco.Web/Security/MembershipHelper.cs b/src/Umbraco.Web/Security/MembershipHelper.cs index 126c3ea8cf..24acddaaba 100644 --- a/src/Umbraco.Web/Security/MembershipHelper.cs +++ b/src/Umbraco.Web/Security/MembershipHelper.cs @@ -47,6 +47,47 @@ namespace Umbraco.Web.Security return Membership.Provider.IsUmbracoMembershipProvider(); } + /// + /// Updates the currently logged in members profile + /// + /// + public void UpdateMemberProfile(ProfileModel model) + { + if (IsLoggedIn() == false) + { + throw new NotSupportedException("No member is currently logged in"); + } + + var member = GetCurrentMember(); + + if (model.Name != null) + { + member.Name = model.Name; + } + member.Email = model.Email; + member.Username = model.Email; + + if (model.MemberProperties != null) + { + foreach (var property in model.MemberProperties + //ensure the property they are posting exists + .Where(p => member.ContentType.PropertyTypeExists(p.Alias)) + .Where(property => member.Properties.Contains(property.Alias)) + //needs to be editable + .Where(p => member.ContentType.MemberCanEditProperty(p.Alias)) + //needs to have a value + .Where(p => p.Value != null)) + { + member.Properties[property.Alias].Value = property.Value; + } + } + + _applicationContext.Services.MemberService.Save(member); + + //reset the FormsAuth cookie since the username might have changed + FormsAuthentication.SetAuthCookie(member.Username, true); + } + /// /// Registers a new member ///