diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/EditProfile.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/EditProfile.cshtml index 1994917f2f..433eb6050e 100644 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/EditProfile.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/EditProfile.cshtml @@ -38,11 +38,11 @@ @Html.ValidationMessageFor(m => profileModel.Email)
- @foreach (var prop in profileModel.MemberProperties) + @for (var i = 0; i < profileModel.MemberProperties.Count; i++) { - @Html.LabelFor(m => prop.Value, prop.Name) - @Html.EditorFor(m => prop.Value) - @Html.HiddenFor(m => prop.Alias) + @Html.LabelFor(m => profileModel.MemberProperties[i].Value, profileModel.MemberProperties[i].Name) + @Html.EditorFor(m => profileModel.MemberProperties[i].Value) + @Html.HiddenFor(m => profileModel.MemberProperties[i].Alias)
} diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/RegisterMember.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/RegisterMember.cshtml index a978ed7332..2a2e3e069d 100644 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/RegisterMember.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/RegisterMember.cshtml @@ -70,12 +70,12 @@ else @Html.ValidationMessageFor(m => registerModel.Password)
- @if (registerModel.MemberProperties != null) { - foreach (var prop in registerModel.MemberProperties) + @if (registerModel.MemberProperties != null) { + for (var i = 0; i < registerModel.MemberProperties.Count; i++) { - @Html.LabelFor(m => prop.Value, prop.Name) - @Html.EditorFor(m => prop.Value) - @Html.HiddenFor(m => prop.Alias) + @Html.LabelFor(m => registerModel.MemberProperties[i].Value, registerModel.MemberProperties[i].Name) + @Html.EditorFor(m => registerModel.MemberProperties[i].Value) + @Html.HiddenFor(m => registerModel.MemberProperties[i].Alias)
} } diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/EditProfile.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/EditProfile.cshtml index 1994917f2f..43b7521b8d 100644 --- a/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/EditProfile.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/EditProfile.cshtml @@ -1,4 +1,4 @@ -@inherits Umbraco.Web.Macros.PartialViewMacroPage +@inherits Umbraco.Web.Mvc.UmbracoTemplatePage @using System.Web.Mvc.Html @using ClientDependency.Core.Mvc @@ -38,11 +38,11 @@ @Html.ValidationMessageFor(m => profileModel.Email)
- @foreach (var prop in profileModel.MemberProperties) + @for (var i = 0; i < profileModel.MemberProperties.Count; i++) { - @Html.LabelFor(m => prop.Value, prop.Name) - @Html.EditorFor(m => prop.Value) - @Html.HiddenFor(m => prop.Alias) + @Html.LabelFor(m => profileModel.MemberProperties[i].Value, profileModel.MemberProperties[i].Name) + @Html.EditorFor(m => profileModel.MemberProperties[i].Value) + @Html.HiddenFor(m => profileModel.MemberProperties[i].Alias)
} diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/RegisterMember.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/RegisterMember.cshtml index 1243d1b604..98b1dcb20f 100644 --- a/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/RegisterMember.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/RegisterMember.cshtml @@ -71,11 +71,11 @@ else
@if (registerModel.MemberProperties != null) { - foreach (var prop in registerModel.MemberProperties) + for (var i = 0; i < registerModel.MemberProperties.Count; i++) { - @Html.LabelFor(m => prop.Value, prop.Name) - @Html.EditorFor(m => prop.Value) - @Html.HiddenFor(m => prop.Alias) + @Html.LabelFor(m => registerModel.MemberProperties[i].Value, registerModel.MemberProperties[i].Name) + @Html.EditorFor(m => registerModel.MemberProperties[i].Value) + @Html.HiddenFor(m => registerModel.MemberProperties[i].Alias)
} } @@ -86,6 +86,6 @@ else @Html.HiddenFor(m => registerModel.UsernameIsEmail) - + } } \ No newline at end of file diff --git a/src/Umbraco.Web/Controllers/UmbRegisterController.cs b/src/Umbraco.Web/Controllers/UmbRegisterController.cs index e7ca7facae..8cc7722037 100644 --- a/src/Umbraco.Web/Controllers/UmbRegisterController.cs +++ b/src/Umbraco.Web/Controllers/UmbRegisterController.cs @@ -4,6 +4,7 @@ using System.Web.Mvc; using System.Web.Security; using umbraco.BusinessLogic; using umbraco.cms.businesslogic.member; +using Umbraco.Core.Security; using Umbraco.Web.Models; using Umbraco.Web.Mvc; @@ -19,32 +20,18 @@ namespace Umbraco.Web.Controllers return CurrentUmbracoPage(); } - model.Username = (model.UsernameIsEmail || model.Username == null) ? model.Email : model.Username; - MembershipCreateStatus status; - var member = Membership.CreateUser(model.Username, model.Password, model.Email, - //TODO: Support q/a http://issues.umbraco.org/issue/U4-3213 - null, null, - true, out status); + var member = Members.RegisterMember(model, out status, model.LoginOnSuccess); switch (status) { case MembershipCreateStatus.Success: - - //Set member online - Membership.GetUser(model.Username, true); - //Log them in - FormsAuthentication.SetAuthCookie(member.UserName, true); - if (model.RedirectOnSucces) { return Redirect(model.RedirectUrl); } - TempData.Add("FormSuccess", true); return RedirectToCurrentUmbracoPage(); - - break; case MembershipCreateStatus.InvalidUserName: ModelState.AddModelError((model.UsernameIsEmail || model.Username == null) ? "registerModel.Email" diff --git a/src/Umbraco.Web/Models/RegisterModel.cs b/src/Umbraco.Web/Models/RegisterModel.cs index 0e46e2b13e..818c66dfd4 100644 --- a/src/Umbraco.Web/Models/RegisterModel.cs +++ b/src/Umbraco.Web/Models/RegisterModel.cs @@ -28,6 +28,7 @@ namespace Umbraco.Web.Models RedirectUrl = "/"; UsernameIsEmail = true; MemberProperties = new List(); + LoginOnSuccess = true; if (doLookup && HttpContext.Current != null && ApplicationContext.Current != null) { @@ -67,5 +68,11 @@ namespace Umbraco.Web.Models public string Username { get; set; } public bool UsernameIsEmail { get; set; } + + /// + /// Specifies if the member should be logged in if they are succesfully created + /// + public bool LoginOnSuccess { get; set; } + } } diff --git a/src/Umbraco.Web/Security/MembershipHelper.cs b/src/Umbraco.Web/Security/MembershipHelper.cs index f7fb3ef912..126c3ea8cf 100644 --- a/src/Umbraco.Web/Security/MembershipHelper.cs +++ b/src/Umbraco.Web/Security/MembershipHelper.cs @@ -47,6 +47,57 @@ namespace Umbraco.Web.Security return Membership.Provider.IsUmbracoMembershipProvider(); } + /// + /// Registers a new member + /// + /// + /// + /// + /// true to log the member in upon successful registration + /// + /// + public MembershipUser RegisterMember(RegisterModel model, out MembershipCreateStatus status, bool logMemberIn = true) + { + model.Username = (model.UsernameIsEmail || model.Username == null) ? model.Email : model.Username; + + var membershipUser = Membership.CreateUser(model.Username, model.Password, model.Email, + //TODO: Support q/a http://issues.umbraco.org/issue/U4-3213 + null, null, + true, out status); + + if (status != MembershipCreateStatus.Success) return null; + + //update their real name + if (Membership.Provider.IsUmbracoMembershipProvider()) + { + var member = _applicationContext.Services.MemberService.GetByUsername(membershipUser.UserName); + member.Name = model.Name; + + if (model.MemberProperties != null) + { + foreach (var property in model.MemberProperties.Where(p => p.Value != null) + .Where(property => member.Properties.Contains(property.Alias))) + { + member.Properties[property.Alias].Value = property.Value; + } + } + + _applicationContext.Services.MemberService.Save(member); + } + else + { + //TODO: Support this scenario! + } + + //Set member online + Membership.GetUser(model.Username, true); + + //Log them in + FormsAuthentication.SetAuthCookie(membershipUser.UserName, true); + + return membershipUser; + } + /// /// A helper method to perform the validation and logging in of a member - this is simply wrapping standard membership provider and asp.net forms auth logic. /// @@ -161,15 +212,19 @@ namespace Umbraco.Web.Security /// public LoginStatusModel GetCurrentLoginStatus() { - if (IsLoggedIn() == false) - return null; - var model = LoginStatusModel.CreateModel(); + + if (IsLoggedIn() == false) + { + model.IsLoggedIn = false; + return model; + } + if (Membership.Provider.IsUmbracoMembershipProvider()) { var member = GetCurrentMember(); //this shouldn't happen - if (member == null) return null; + if (member == null) return model; model.Name = member.Name; model.Username = member.Username; model.Email = member.Email;