Moved controllers and models as per Shannon's suggestion

Added LoginStatus and updated Register
Updated to use CDF instead of <script> tags
This commit is contained in:
Sebastiaan Janssen
2013-08-28 13:36:04 +02:00
parent 8274883fa5
commit f26d759c84
14 changed files with 183 additions and 86 deletions

View File

@@ -187,6 +187,25 @@ namespace Umbraco.Core
return String.Empty;
}
/// <summary>
/// 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
/// </summary>
/// <param name="d"></param>
/// <param name="key"></param>
/// <param name="defaultValue"></param>
/// <returns></returns>
public static string GetValueAsString<TKey, TVal>(this IDictionary<TKey, TVal> d, TKey key, string defaultValue)
{
if (d.ContainsKey(key))
{
var value = d[key].ToString();
if (value != string.Empty)
return value;
}
return defaultValue;
}
/// <summary>contains key ignore case.</summary>
/// <param name="dictionary">The dictionary.</param>
/// <param name="key">The key.</param>

View File

@@ -2137,6 +2137,7 @@
<Content Include="Umbraco\PartialViews\Templates\Login.cshtml" />
<Content Include="Umbraco\PartialViews\Templates\EmptyTemplate.cshtml" />
<Content Include="Umbraco\PartialViews\Templates\RegisterMember.cshtml" />
<Content Include="Umbraco\PartialViews\Templates\LoginStatus.cshtml" />
<None Include="Umbraco_client\CodeMirror\js\mode\coffeescript\LICENSE" />
<None Include="Umbraco_client\CodeMirror\js\mode\pascal\LICENSE" />
<None Include="Umbraco_client\CodeMirror\js\mode\perl\LICENSE" />

View File

@@ -1 +1 @@
@using Umbraco.Web.Macros.PartialViewMacroPage
@inherits Umbraco.Web.Macros.PartialViewMacroPage

View File

@@ -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");
}
<script src="@Url.Content("~/umbraco_client/ui/jquery.js")" type="text/javascript"></script>
<script src="@Url.Content("~/umbraco_client/Application/JQuery/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/umbraco_client/Application/JQuery/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@Html.RenderJsHere()
@using (Html.BeginUmbracoForm<LoginController>("HandleLogin"))
{

View File

@@ -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)
{
<p>You are currently logged in as @loginStatusModel.Name</p>
using (Html.BeginUmbracoForm<LoginStatusController>("HandleLogout"))
{
<fieldset>
<legend>Logout</legend>
<button>Logout</button>
</fieldset>
}
}

View File

@@ -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<UmbracoProperty>(),
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");
}
<script src="@Url.Content("~/umbraco_client/ui/jquery.js")" type="text/javascript"></script>
<script src="@Url.Content("~/umbraco_client/Application/JQuery/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/umbraco_client/Application/JQuery/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@Html.RenderJsHere()
@using (Html.BeginUmbracoForm<RegisterController>("HandleRegisterMember"))
{

View File

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

View File

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

View File

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

View File

@@ -1,7 +1,6 @@
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace Umbraco.Web.UmbracoModels
namespace Umbraco.Web.Models
{
public class LoginModel
{

View File

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

View File

@@ -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<UmbracoProperty> MemberProperties { get; set; }
public void FillModel(RegisterModel registerModel, IDictionary<string, object> macroParameters)
{
registerModel.MemberTypeAlias = macroParameters.GetValueAsString("memberTypeAlias", "UmbracoMember");
registerModel.MemberProperties = new List<UmbracoProperty>();
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; }
}
}

View File

@@ -291,11 +291,13 @@
<Compile Include="Cache\UserPermissionsCacheRefresher.cs" />
<Compile Include="Cache\UserTypeCacheRefresher.cs" />
<Compile Include="Configuration\WebRouting.cs" />
<Compile Include="Controllers\LoginStatusController.cs" />
<Compile Include="Editors\MediaController.cs" />
<Compile Include="Models\ContentEditing\ContentSortOrder.cs" />
<Compile Include="UmbracoControllers\RegisterController.cs" />
<Compile Include="UmbracoModels\RegisterModel.cs" />
<Compile Include="UmbracoModels\LoginModel.cs" />
<Compile Include="Controllers\RegisterController.cs" />
<Compile Include="Models\LoginStatusModel.cs" />
<Compile Include="Models\RegisterModel.cs" />
<Compile Include="Models\LoginModel.cs" />
<Compile Include="Security\Providers\MembersMembershipProvider.cs" />
<Compile Include="Security\Providers\UsersMembershipProvider.cs" />
<Compile Include="Standalone\ServiceContextManager.cs" />
@@ -395,7 +397,7 @@
<Compile Include="umbraco.presentation\umbraco\settings\stylesheet\property\EditStyleSheetProperty.aspx.cs">
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="UmbracoControllers\LoginController.cs" />
<Compile Include="Controllers\LoginController.cs" />
<Compile Include="UrlHelperExtensions.cs" />
<Compile Include="WebApi\MemberAuthorizeAttribute.cs" />
<Compile Include="WebApi\UmbracoApiController.cs" />

View File

@@ -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<UmbracoProperty> MemberProperties { get; set; }
}
public class UmbracoProperty
{
public string Alias { get; set; }
public string Value { get; set; }
public string Name { get; set; }
}
}