diff --git a/src/Umbraco.Web/Controllers/RegisterController.cs b/src/Umbraco.Web/Controllers/RegisterController.cs index ef9c8d9e03..b19395db18 100644 --- a/src/Umbraco.Web/Controllers/RegisterController.cs +++ b/src/Umbraco.Web/Controllers/RegisterController.cs @@ -1,6 +1,5 @@ using System.Linq; using System.Web.Mvc; -using System.Xml; using umbraco.BusinessLogic; using umbraco.cms.businesslogic.member; using Umbraco.Web.Models; @@ -11,44 +10,75 @@ namespace Umbraco.Web.Controllers public class RegisterController : SurfaceController { [HttpPost] - public ActionResult HandleRegisterMember([Bind(Prefix="registerModel")]RegisterModel model) + public ActionResult HandleRegisterMember([Bind(Prefix = "registerModel")]RegisterModel model) { - //TODO: Use new Member API + //TODO: Use new Member API and use the MemberShipProvider variables for validating password strength etc if (ModelState.IsValid) { - var user = new User(0); + model.Username = (model.UsernameIsEmail || model.Username == null) ? model.Email : model.Username; - var mt = MemberType.GetByAlias(model.MemberTypeAlias) ?? MemberType.MakeNew(user, model.MemberTypeAlias); - - var member = Member.MakeNew(model.Email, mt, user); - - if (model.Name != null) + var member = Member.GetMemberFromLoginName(model.Username); + if (member != null) { - member.Text = model.Name; + ModelState.AddModelError((model.UsernameIsEmail || model.Username == null) + ? "registerModel.Email" + : "registerModel.Username", + "A member with this username already exists."); + + return CurrentUmbracoPage(); } - member.Email = model.Email; - member.LoginName = model.Email; - member.Password = model.Password; - - if (model.MemberProperties != null) + member = Member.GetMemberFromEmail(model.Email); + if (member != null) { - foreach (var property in model.MemberProperties.Where(p => p.Value != null)) - { - member.getProperty(property.Alias).Value = property.Value; - } + ModelState.AddModelError("registerModel.Email", "A member with this e-mail address already exists."); + + return CurrentUmbracoPage(); } - member.Save(); - - member.XmlGenerate(new XmlDocument()); + member = CreateNewMember(model); + // Log member in Member.AddMemberToCache(member); - Response.Redirect("/"); + if (model.RedirectOnSucces) + { + return Redirect(model.RedirectUrl); + } + + TempData.Add("FormSuccess", true); + return RedirectToCurrentUmbracoPage(); } return CurrentUmbracoPage(); } + + private static Member CreateNewMember(RegisterModel model) + { + var user = new User(0); + + var mt = MemberType.GetByAlias(model.MemberTypeAlias) ?? MemberType.MakeNew(user, model.MemberTypeAlias); + + var member = Member.MakeNew(model.Username, mt, user); + + if (model.Name != null) + { + member.Text = model.Name; + } + + member.Email = model.Email; + member.Password = model.Password; + + if (model.MemberProperties != null) + { + foreach (var property in model.MemberProperties.Where(p => p.Value != null)) + { + member.getProperty(property.Alias).Value = property.Value; + } + } + + member.Save(); + return member; + } } } diff --git a/src/Umbraco.Web/Models/ProfileModel.cs b/src/Umbraco.Web/Models/ProfileModel.cs index 437a53972c..00dde77c50 100644 --- a/src/Umbraco.Web/Models/ProfileModel.cs +++ b/src/Umbraco.Web/Models/ProfileModel.cs @@ -13,6 +13,7 @@ namespace Umbraco.Web.Models { //TODO Use new Member API var member = Member.GetCurrentMember(); + if (member != null) { this.Name = member.Text; @@ -22,16 +23,9 @@ namespace Umbraco.Web.Models this.MemberProperties = new List(); var memberType = MemberType.GetByAlias(member.ContentType.Alias); - var memberTypeProperties = memberType.PropertyTypes.ToList(); - if (memberTypeProperties.Where(memberType.MemberCanEdit).Any()) + foreach (var prop in memberType.PropertyTypes.Where(memberType.MemberCanEdit)) { - memberTypeProperties = memberTypeProperties.Where(memberType.MemberCanEdit).ToList(); - } - - foreach (var prop in memberTypeProperties) - { - var value = string.Empty; var propValue = member.getProperty(prop.Alias); if (propValue != null) diff --git a/src/Umbraco.Web/Models/RegisterModel.cs b/src/Umbraco.Web/Models/RegisterModel.cs index be3c314ebe..c71edf7f77 100644 --- a/src/Umbraco.Web/Models/RegisterModel.cs +++ b/src/Umbraco.Web/Models/RegisterModel.cs @@ -2,6 +2,7 @@ using System.ComponentModel.DataAnnotations; using System.Linq; using umbraco.cms.businesslogic.member; +using Umbraco.Core; namespace Umbraco.Web.Models { @@ -9,7 +10,13 @@ namespace Umbraco.Web.Models { public RegisterModel() { - this.MemberTypeAlias = "UmbracoMember"; + this.MemberTypeAlias = Constants.Conventions.MemberTypes.Member; + + this.RedirectOnSucces = false; + + this.RedirectUrl = "/"; + + this.UsernameIsEmail = true; var memberType = MemberType.GetByAlias(this.MemberTypeAlias); @@ -17,14 +24,7 @@ namespace Umbraco.Web.Models { this.MemberProperties = new List(); - var memberTypeProperties = memberType.PropertyTypes.ToList(); - - if (memberTypeProperties.Where(memberType.MemberCanEdit).Any()) - { - memberTypeProperties = memberTypeProperties.Where(memberType.MemberCanEdit).ToList(); - } - - foreach (var prop in memberTypeProperties) + foreach (var prop in memberType.PropertyTypes.Where(memberType.MemberCanEdit)) { this.MemberProperties.Add(new UmbracoProperty { @@ -41,13 +41,21 @@ namespace Umbraco.Web.Models ErrorMessage = "Please enter a valid e-mail address")] public string Email { get; set; } - [Required] - public string Password { get; set; } + public List MemberProperties { get; set; } + + public string MemberTypeAlias { get; set; } public string Name { get; set; } - public string MemberTypeAlias { get; set; } + [Required] + public string Password { get; set; } + + public bool RedirectOnSucces { get; set; } + + public string RedirectUrl { get; set; } - public List MemberProperties { get; set; } + public string Username { get; set; } + + public bool UsernameIsEmail { get; set; } } } diff --git a/src/Umbraco.Web/UmbracoProperty.cs b/src/Umbraco.Web/Models/UmbracoProperty.cs similarity index 84% rename from src/Umbraco.Web/UmbracoProperty.cs rename to src/Umbraco.Web/Models/UmbracoProperty.cs index 4e7f17953e..cb81829cee 100644 --- a/src/Umbraco.Web/UmbracoProperty.cs +++ b/src/Umbraco.Web/Models/UmbracoProperty.cs @@ -1,4 +1,4 @@ -namespace Umbraco.Web +namespace Umbraco.Web.Models { public class UmbracoProperty { diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 66be5f0a6b..249849013f 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -298,6 +298,7 @@ + @@ -401,7 +402,6 @@ ASPXCodeBehind -