diff --git a/src/Umbraco.Core/DictionaryExtensions.cs b/src/Umbraco.Core/DictionaryExtensions.cs index 73866f2c9b..de12e0b3b1 100644 --- a/src/Umbraco.Core/DictionaryExtensions.cs +++ b/src/Umbraco.Core/DictionaryExtensions.cs @@ -187,6 +187,25 @@ namespace Umbraco.Core return String.Empty; } + /// + /// Returns the value of the key value based on the key as it's string value, if the key is not found or is an empty string, then the provided default value is returned + /// + /// + /// + /// + /// + public static string GetValueAsString(this IDictionary d, TKey key, string defaultValue) + { + if (d.ContainsKey(key)) + { + var value = d[key].ToString(); + if (value != string.Empty) + return value; + } + + return defaultValue; + } + /// contains key ignore case. /// The dictionary. /// The key. diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj index fb88c64d3a..3a7efed60c 100644 --- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj +++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj @@ -2137,6 +2137,7 @@ + diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/EmptyTemplate.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/EmptyTemplate.cshtml index f8e40a5677..dda3a17f51 100644 --- a/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/EmptyTemplate.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/EmptyTemplate.cshtml @@ -1 +1 @@ -@using Umbraco.Web.Macros.PartialViewMacroPage \ No newline at end of file +@inherits Umbraco.Web.Macros.PartialViewMacroPage \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/Login.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/Login.cshtml index 032a3c4283..62b9632ad5 100644 --- a/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/Login.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/Login.cshtml @@ -2,24 +2,20 @@ @using System.Web.Mvc.Html @using ClientDependency.Core.Mvc -@using Umbraco.Web.UmbracoModels -@using Umbraco.Web.UmbracoControllers +@using Umbraco.Web.Models +@using Umbraco.Web.Controllers @{ + var loginModel = new LoginModel(); + 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"); - - var loginModel = new LoginModel(); + 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"); } - - - +@Html.RenderJsHere() @using (Html.BeginUmbracoForm("HandleLogin")) { diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/LoginStatus.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/LoginStatus.cshtml new file mode 100644 index 0000000000..72d63e2857 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/LoginStatus.cshtml @@ -0,0 +1,29 @@ +@inherits Umbraco.Web.Macros.PartialViewMacroPage +@using ClientDependency.Core.Mvc +@using Umbraco.Web.Models +@using Umbraco.Web.Controllers + +@{ + var loginStatusModel = new LoginStatusModel(); + + Html.EnableClientValidation(); + Html.EnableUnobtrusiveJavaScript(); + 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"); +} + +@Html.RenderJsHere() + +@if (loginStatusModel.IsLoggedIn) +{ +

You are currently logged in as @loginStatusModel.Name

+ + using (Html.BeginUmbracoForm("HandleLogout")) + { +
+ Logout + +
+ } +} \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/RegisterMember.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/RegisterMember.cshtml index 46422928a6..2c94c04acc 100644 --- a/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/RegisterMember.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/RegisterMember.cshtml @@ -2,47 +2,21 @@ @using System.Web.Mvc.Html @using ClientDependency.Core.Mvc -@using umbraco.cms.businesslogic.member -@using Umbraco.Web.UmbracoModels -@using Umbraco.Web.UmbracoControllers +@using Umbraco.Web.Models +@using Umbraco.Web.Controllers @{ + var registerModel = new RegisterModel(); + registerModel.FillModel(registerModel, Model.MacroParameters); + 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}); - } + 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"); } - - - +@Html.RenderJsHere() @using (Html.BeginUmbracoForm("HandleRegisterMember")) { diff --git a/src/Umbraco.Web/UmbracoControllers/LoginController.cs b/src/Umbraco.Web/Controllers/LoginController.cs similarity index 90% rename from src/Umbraco.Web/UmbracoControllers/LoginController.cs rename to src/Umbraco.Web/Controllers/LoginController.cs index 0b58073c70..df6675dfd8 100644 --- a/src/Umbraco.Web/UmbracoControllers/LoginController.cs +++ b/src/Umbraco.Web/Controllers/LoginController.cs @@ -1,10 +1,10 @@ using System.Linq; using System.Web.Mvc; using umbraco.cms.businesslogic.member; +using Umbraco.Web.Models; using Umbraco.Web.Mvc; -using Umbraco.Web.UmbracoModels; -namespace Umbraco.Web.UmbracoControllers +namespace Umbraco.Web.Controllers { public class LoginController : SurfaceController { diff --git a/src/Umbraco.Web/Controllers/LoginStatusController.cs b/src/Umbraco.Web/Controllers/LoginStatusController.cs new file mode 100644 index 0000000000..428348f9bb --- /dev/null +++ b/src/Umbraco.Web/Controllers/LoginStatusController.cs @@ -0,0 +1,30 @@ +using System.Linq; +using System.Web.Mvc; +using umbraco.cms.businesslogic.member; +using Umbraco.Web.Models; +using Umbraco.Web.Mvc; + +namespace Umbraco.Web.Controllers +{ + public class LoginStatusController : SurfaceController + { + [HttpPost] + public ActionResult HandleLogout([Bind(Prefix = "loginStatusModel")]LoginStatusModel model) + { + // TODO: Use new Member API + if (ModelState.IsValid) + { + if (Member.IsLoggedOn()) + { + var memberId = Member.CurrentMemberId(); + Member.RemoveMemberFromCache(memberId); + Member.ClearMemberFromClient(memberId); + } + + return Redirect("/"); + } + + return CurrentUmbracoPage(); + } + } +} diff --git a/src/Umbraco.Web/UmbracoControllers/RegisterController.cs b/src/Umbraco.Web/Controllers/RegisterController.cs similarity index 94% rename from src/Umbraco.Web/UmbracoControllers/RegisterController.cs rename to src/Umbraco.Web/Controllers/RegisterController.cs index e3b9e66d3b..402a88b1b9 100644 --- a/src/Umbraco.Web/UmbracoControllers/RegisterController.cs +++ b/src/Umbraco.Web/Controllers/RegisterController.cs @@ -3,10 +3,10 @@ using System.Web.Mvc; using System.Xml; using umbraco.BusinessLogic; using umbraco.cms.businesslogic.member; +using Umbraco.Web.Models; using Umbraco.Web.Mvc; -using Umbraco.Web.UmbracoModels; -namespace Umbraco.Web.UmbracoControllers +namespace Umbraco.Web.Controllers { public class RegisterController : SurfaceController { diff --git a/src/Umbraco.Web/UmbracoModels/LoginModel.cs b/src/Umbraco.Web/Models/LoginModel.cs similarity index 80% rename from src/Umbraco.Web/UmbracoModels/LoginModel.cs rename to src/Umbraco.Web/Models/LoginModel.cs index 4cd627e490..f0cea26b0e 100644 --- a/src/Umbraco.Web/UmbracoModels/LoginModel.cs +++ b/src/Umbraco.Web/Models/LoginModel.cs @@ -1,7 +1,6 @@ using System.ComponentModel.DataAnnotations; -using System.Linq; -namespace Umbraco.Web.UmbracoModels +namespace Umbraco.Web.Models { public class LoginModel { diff --git a/src/Umbraco.Web/Models/LoginStatusModel.cs b/src/Umbraco.Web/Models/LoginStatusModel.cs new file mode 100644 index 0000000000..853d265c5e --- /dev/null +++ b/src/Umbraco.Web/Models/LoginStatusModel.cs @@ -0,0 +1,24 @@ +using umbraco.cms.businesslogic.member; + +namespace Umbraco.Web.Models +{ + public class LoginStatusModel + { + public LoginStatusModel() + { + //TODO Use new Member API + if (Member.IsLoggedOn()) + { + this.Name = Member.GetCurrentMember().Text; + this.Username = Member.GetCurrentMember().LoginName; + this.Email = Member.GetCurrentMember().Email; + this.IsLoggedIn = true; + } + } + + public string Name { get; set; } + public string Username { get; set; } + public string Email { get; set; } + public bool IsLoggedIn { get; set; } + } +} \ No newline at end of file diff --git a/src/Umbraco.Web/Models/RegisterModel.cs b/src/Umbraco.Web/Models/RegisterModel.cs new file mode 100644 index 0000000000..276170bb6f --- /dev/null +++ b/src/Umbraco.Web/Models/RegisterModel.cs @@ -0,0 +1,51 @@ +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using umbraco.cms.businesslogic.member; +using Umbraco.Core; + +namespace Umbraco.Web.Models +{ + 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 void FillModel(RegisterModel registerModel, IDictionary macroParameters) + { + registerModel.MemberTypeAlias = macroParameters.GetValueAsString("memberTypeAlias", "UmbracoMember"); + + registerModel.MemberProperties = new List(); + + var memberType = MemberType.GetByAlias(registerModel.MemberTypeAlias); + + var memberTypeProperties = memberType.PropertyTypes.ToList(); + + if (memberTypeProperties.Where(memberType.MemberCanEdit).Any()) + { + memberTypeProperties = memberTypeProperties.Where(memberType.MemberCanEdit).ToList(); + } + + foreach (var prop in memberTypeProperties) + { + registerModel.MemberProperties.Add(new UmbracoProperty { Alias = prop.Alias, Name = prop.Name, Value = string.Empty }); + } + } + } + + public class UmbracoProperty + { + public string Alias { get; set; } + public string Value { get; set; } + public string Name { get; set; } + } +} diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 0674411598..486ec8cad1 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -291,11 +291,13 @@ + - - - + + + + @@ -395,7 +397,7 @@ ASPXCodeBehind - + diff --git a/src/Umbraco.Web/UmbracoModels/RegisterModel.cs b/src/Umbraco.Web/UmbracoModels/RegisterModel.cs deleted file mode 100644 index 498b68db90..0000000000 --- a/src/Umbraco.Web/UmbracoModels/RegisterModel.cs +++ /dev/null @@ -1,28 +0,0 @@ -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; } - } -}