diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj index c5cb983dba..56e7e3389d 100644 --- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj +++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj @@ -2136,6 +2136,7 @@ + diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/RegisterMember.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/RegisterMember.cshtml new file mode 100644 index 0000000000..46422928a6 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/RegisterMember.cshtml @@ -0,0 +1,74 @@ +@inherits Umbraco.Web.Macros.PartialViewMacroPage + +@using System.Web.Mvc.Html +@using ClientDependency.Core.Mvc +@using umbraco.cms.businesslogic.member +@using Umbraco.Web.UmbracoModels +@using Umbraco.Web.UmbracoControllers + +@{ + Html.EnableClientValidation(); + Html.EnableUnobtrusiveJavaScript(); + + // TODO: CDF doesn't work at the moment, Shannon is looking at it + //Html.RequiresJs("/umbraco_client/ui/jquery.js"); + //Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.min.js"); + //Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.unobtrusive.min.js"); + + // TODO: Make a helper for this + var memberTypeAlias = "UmbracoMember"; + if (Model.MacroParameters.Any() && Model.MacroParameters.ContainsKey("memberTypeAlias")) + { + var alias = Model.MacroParameters["memberTypeAlias"]; + if (string.IsNullOrWhiteSpace(alias.ToString()) == false) + { + memberTypeAlias = alias.ToString(); + } + } + + var registerModel = new RegisterModel + { + MemberProperties = new List(), + MemberTypeAlias = memberTypeAlias + }; + + // TODO: Fill model somewhere else + var memberType = MemberType.GetByAlias(registerModel.MemberTypeAlias); + foreach (var prop in memberType.PropertyTypes.Where(memberType.MemberCanEdit)) + { + registerModel.MemberProperties.Add(new UmbracoProperty {Alias = prop.Alias, Name = prop.Name, Value = string.Empty}); + } +} + + + + + +@using (Html.BeginUmbracoForm("HandleRegisterMember")) +{ +
+ Register Member + + @Html.LabelFor(m => registerModel.Email) + @Html.TextBoxFor(m => registerModel.Email) + @Html.ValidationMessageFor(m => registerModel.Email) +
+ + @Html.LabelFor(m => registerModel.Password) + @Html.PasswordFor(m => registerModel.Password) + @Html.ValidationMessageFor(m => registerModel.Password) +
+ + @for (var i = 0; i < registerModel.MemberProperties.Count; i++) + { + @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) +
+ } + + @Html.HiddenFor(m => registerModel.MemberTypeAlias) + + +
+} \ No newline at end of file diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index f8ea9e4b15..0674411598 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -293,6 +293,8 @@ + + diff --git a/src/Umbraco.Web/UmbracoControllers/LoginController.cs b/src/Umbraco.Web/UmbracoControllers/LoginController.cs index f9c592eae9..0b58073c70 100644 --- a/src/Umbraco.Web/UmbracoControllers/LoginController.cs +++ b/src/Umbraco.Web/UmbracoControllers/LoginController.cs @@ -11,6 +11,7 @@ namespace Umbraco.Web.UmbracoControllers [HttpPost] public ActionResult HandleLogin([Bind(Prefix="loginModel")]LoginModel model) { + // TODO: Use new Member API if (ModelState.IsValid) { var m = Member.GetMemberFromLoginNameAndPassword(model.Username, model.Password); diff --git a/src/Umbraco.Web/UmbracoControllers/RegisterController.cs b/src/Umbraco.Web/UmbracoControllers/RegisterController.cs new file mode 100644 index 0000000000..e3b9e66d3b --- /dev/null +++ b/src/Umbraco.Web/UmbracoControllers/RegisterController.cs @@ -0,0 +1,45 @@ +using System.Linq; +using System.Web.Mvc; +using System.Xml; +using umbraco.BusinessLogic; +using umbraco.cms.businesslogic.member; +using Umbraco.Web.Mvc; +using Umbraco.Web.UmbracoModels; + +namespace Umbraco.Web.UmbracoControllers +{ + public class RegisterController : SurfaceController + { + [HttpPost] + public ActionResult HandleRegisterMember([Bind(Prefix="registerModel")]RegisterModel model) + { + //TODO: Use new Member API + if (ModelState.IsValid) + { + var user = new User(0); + + var mt = MemberType.GetByAlias(model.MemberTypeAlias) ?? MemberType.MakeNew(user, model.MemberTypeAlias); + + var member = Member.MakeNew(model.Email, mt, user); + member.Email = model.Email; + member.LoginName = model.Email; + member.Password = model.Password; + + foreach (var property in model.MemberProperties) + { + member.getProperty(property.Alias).Value = property.Value; + } + + member.Save(); + + member.XmlGenerate(new XmlDocument()); + + Member.AddMemberToCache(member); + + Response.Redirect("/"); + } + + return CurrentUmbracoPage(); + } + } +} diff --git a/src/Umbraco.Web/UmbracoModels/RegisterModel.cs b/src/Umbraco.Web/UmbracoModels/RegisterModel.cs new file mode 100644 index 0000000000..498b68db90 --- /dev/null +++ b/src/Umbraco.Web/UmbracoModels/RegisterModel.cs @@ -0,0 +1,28 @@ +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; + +namespace Umbraco.Web.UmbracoModels +{ + public class RegisterModel + { + [Required] + [RegularExpression(@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", + ErrorMessage = "Please enter a valid e-mail address")] + public string Email { get; set; } + + [Required] + public string Password { get; set; } + + public string MemberTypeAlias { get; set; } + + public List MemberProperties { get; set; } + } + + public class UmbracoProperty + { + public string Alias { get; set; } + public string Value { get; set; } + public string Name { get; set; } + } +}