Updated controller, more flexible, moved UmbracoProperty to Umbraco.Web.Helpers
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<UmbracoProperty>();
|
||||
|
||||
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)
|
||||
|
||||
@@ -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<UmbracoProperty>();
|
||||
|
||||
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<UmbracoProperty> 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<UmbracoProperty> MemberProperties { get; set; }
|
||||
public string Username { get; set; }
|
||||
|
||||
public bool UsernameIsEmail { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace Umbraco.Web
|
||||
namespace Umbraco.Web.Models
|
||||
{
|
||||
public class UmbracoProperty
|
||||
{
|
||||
@@ -298,6 +298,7 @@
|
||||
<Compile Include="Controllers\RegisterController.cs" />
|
||||
<Compile Include="Models\ProfileModel.cs" />
|
||||
<Compile Include="Models\LoginStatusModel.cs" />
|
||||
<Compile Include="Models\UmbracoProperty.cs" />
|
||||
<Compile Include="Routing\ContentLastChanceFinderByNotFoundHandlers.cs" />
|
||||
<Compile Include="Models\RegisterModel.cs" />
|
||||
<Compile Include="Models\LoginModel.cs" />
|
||||
@@ -401,7 +402,6 @@
|
||||
<SubType>ASPXCodeBehind</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Controllers\LoginController.cs" />
|
||||
<Compile Include="UmbracoProperty.cs" />
|
||||
<Compile Include="UrlHelperExtensions.cs" />
|
||||
<Compile Include="WebApi\MemberAuthorizeAttribute.cs" />
|
||||
<Compile Include="WebApi\UmbracoApiController.cs" />
|
||||
|
||||
Reference in New Issue
Block a user