Updated controller, more flexible, moved UmbracoProperty to Umbraco.Web.Helpers

This commit is contained in:
Sebastiaan Janssen
2013-08-29 16:12:50 +02:00
parent 23517d0c36
commit 2bdbd6c7d9
5 changed files with 78 additions and 46 deletions

View File

@@ -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;
}
}
}

View File

@@ -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)

View File

@@ -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; }
}
}

View File

@@ -1,4 +1,4 @@
namespace Umbraco.Web
namespace Umbraco.Web.Models
{
public class UmbracoProperty
{

View File

@@ -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" />