Updating the Member and MemberProfile class to include the standard UmbracoEntity properties.

Refactoring the sql query and the dtos to use the PropertyType as Primary and Property as secondary as a Property might be empty for a defined type.
Adding labels to the conventional Member PropertyType aliases.
This commit is contained in:
Morten Christensen
2013-08-28 14:17:16 +02:00
parent 3f0dc7f652
commit 6f63369e11
6 changed files with 376 additions and 65 deletions

View File

@@ -42,7 +42,7 @@ namespace Umbraco.Core.Models.Membership
/// Integer Id
/// </summary>
[DataMember]
public new int Id
public override int Id
{
get
{
@@ -65,7 +65,7 @@ namespace Umbraco.Core.Models.Membership
/// <remarks>The key is currectly used to store the Unique Id from the
/// umbracoNode table, which many of the entities are based on.</remarks>
[DataMember]
public Guid Key
public override Guid Key
{
get
{
@@ -88,7 +88,7 @@ namespace Umbraco.Core.Models.Membership
/// Gets or sets the Created Date
/// </summary>
[DataMember]
public DateTime CreateDate
public override DateTime CreateDate
{
get { return _createDate; }
set
@@ -105,7 +105,7 @@ namespace Umbraco.Core.Models.Membership
/// Gets or sets the Modified Date
/// </summary>
[DataMember]
public DateTime UpdateDate
public override DateTime UpdateDate
{
get { return _updateDate; }
set
@@ -122,7 +122,7 @@ namespace Umbraco.Core.Models.Membership
/// Indicates whether the current entity has an identity, eg. Id.
/// </summary>
[IgnoreDataMember]
public virtual bool HasIdentity
public override bool HasIdentity
{
get
{
@@ -168,7 +168,9 @@ namespace Umbraco.Core.Models.Membership
{
get
{
return Properties[Constants.Conventions.Member.PasswordQuestion].Value.ToString();
return Properties[Constants.Conventions.Member.PasswordQuestion].Value == null
? string.Empty
: Properties[Constants.Conventions.Member.PasswordQuestion].Value.ToString();
}
set
{
@@ -188,7 +190,9 @@ namespace Umbraco.Core.Models.Membership
{
get
{
return Properties[Constants.Conventions.Member.PasswordAnswer].Value.ToString();
return Properties[Constants.Conventions.Member.PasswordAnswer].Value == null
? string.Empty
: Properties[Constants.Conventions.Member.PasswordAnswer].Value.ToString();
}
set
{
@@ -208,7 +212,9 @@ namespace Umbraco.Core.Models.Membership
{
get
{
return Properties[Constants.Conventions.Member.Comments].Value.ToString();
return Properties[Constants.Conventions.Member.Comments].Value == null
? string.Empty
: Properties[Constants.Conventions.Member.Comments].Value.ToString();
}
set
{
@@ -228,6 +234,9 @@ namespace Umbraco.Core.Models.Membership
{
get
{
if (Properties[Constants.Conventions.Member.IsApproved].Value == null)
return default(bool);
if (Properties[Constants.Conventions.Member.IsApproved].Value is bool)
return (bool)Properties[Constants.Conventions.Member.IsApproved].Value;
@@ -251,6 +260,9 @@ namespace Umbraco.Core.Models.Membership
{
get
{
if (Properties[Constants.Conventions.Member.IsLockedOut].Value == null)
return default(bool);
if (Properties[Constants.Conventions.Member.IsLockedOut].Value is bool)
return (bool)Properties[Constants.Conventions.Member.IsLockedOut].Value;
@@ -274,6 +286,9 @@ namespace Umbraco.Core.Models.Membership
{
get
{
if (Properties[Constants.Conventions.Member.LastLoginDate].Value == null)
return default(DateTime);
if (Properties[Constants.Conventions.Member.LastLoginDate].Value is DateTime)
return (DateTime)Properties[Constants.Conventions.Member.LastLoginDate].Value;
@@ -297,6 +312,9 @@ namespace Umbraco.Core.Models.Membership
{
get
{
if (Properties[Constants.Conventions.Member.LastPasswordChangeDate].Value == null)
return default(DateTime);
if (Properties[Constants.Conventions.Member.LastPasswordChangeDate].Value is DateTime)
return (DateTime)Properties[Constants.Conventions.Member.LastPasswordChangeDate].Value;
@@ -320,6 +338,9 @@ namespace Umbraco.Core.Models.Membership
{
get
{
if (Properties[Constants.Conventions.Member.LastLockoutDate].Value == null)
return default(DateTime);
if (Properties[Constants.Conventions.Member.LastLockoutDate].Value is DateTime)
return (DateTime)Properties[Constants.Conventions.Member.LastLockoutDate].Value;
@@ -344,6 +365,9 @@ namespace Umbraco.Core.Models.Membership
{
get
{
if (Properties[Constants.Conventions.Member.FailedPasswordAttempts].Value == null)
return default(int);
if (Properties[Constants.Conventions.Member.FailedPasswordAttempts].Value is int)
return (int)Properties[Constants.Conventions.Member.FailedPasswordAttempts].Value;

View File

@@ -1,7 +1,133 @@
namespace Umbraco.Core.Models.Membership
using System;
using System.Reflection;
using Umbraco.Core.Models.EntityBase;
namespace Umbraco.Core.Models.Membership
{
internal class MemberProfile : Profile
internal abstract class MemberProfile : Profile, IUmbracoEntity
{
private Lazy<int> _parentId;
private int _sortOrder;
private int _level;
private string _path;
private int _creatorId;
private bool _trashed;
private static readonly PropertyInfo ParentIdSelector = ExpressionHelper.GetPropertyInfo<MemberProfile, int>(x => ((IUmbracoEntity)x).ParentId);
private static readonly PropertyInfo SortOrderSelector = ExpressionHelper.GetPropertyInfo<MemberProfile, int>(x => ((IUmbracoEntity)x).SortOrder);
private static readonly PropertyInfo LevelSelector = ExpressionHelper.GetPropertyInfo<MemberProfile, int>(x => ((IUmbracoEntity)x).Level);
private static readonly PropertyInfo PathSelector = ExpressionHelper.GetPropertyInfo<MemberProfile, string>(x => ((IUmbracoEntity)x).Path);
private static readonly PropertyInfo CreatorIdSelector = ExpressionHelper.GetPropertyInfo<MemberProfile, int>(x => ((IUmbracoEntity)x).CreatorId);
private static readonly PropertyInfo TrashedSelector = ExpressionHelper.GetPropertyInfo<MemberProfile, bool>(x => x.Trashed);
public abstract new int Id { get; set; }
public abstract Guid Key { get; set; }
public abstract DateTime CreateDate { get; set; }
public abstract DateTime UpdateDate { get; set; }
public abstract bool HasIdentity { get; protected set; }
/// <summary>
/// Profile of the user who created this Content
/// </summary>
int IUmbracoEntity.CreatorId
{
get
{
return _creatorId;
}
set
{
SetPropertyValueAndDetectChanges(o =>
{
_creatorId = value;
return _creatorId;
}, _creatorId, CreatorIdSelector);
}
}
/// <summary>
/// Gets or sets the level of the content entity
/// </summary>
int IUmbracoEntity.Level
{
get { return _level; }
set
{
SetPropertyValueAndDetectChanges(o =>
{
_level = value;
return _level;
}, _level, LevelSelector);
} }
/// <summary>
/// Gets or sets the Id of the Parent entity
/// </summary>
int IUmbracoEntity.ParentId
{
get
{
var val = _parentId.Value;
if (val == 0)
{
throw new InvalidOperationException("The ParentId cannot have a value of 0. Perhaps the parent object used to instantiate this object has not been persisted to the data store.");
}
return val;
}
set
{
_parentId = new Lazy<int>(() => value);
OnPropertyChanged(ParentIdSelector);
}
}
/// <summary>
/// Gets or sets the path
/// </summary>
string IUmbracoEntity.Path
{
get { return _path; }
set
{
SetPropertyValueAndDetectChanges(o =>
{
_path = value;
return _path;
}, _path, PathSelector);
}
}
/// <summary>
/// Gets or sets the sort order of the content entity
/// </summary>
int IUmbracoEntity.SortOrder
{
get { return _sortOrder; }
set
{
SetPropertyValueAndDetectChanges(o =>
{
_sortOrder = value;
return _sortOrder;
}, _sortOrder, SortOrderSelector);
}
}
/// <summary>
/// Boolean indicating whether this Content is Trashed or not.
/// If Content is Trashed it will be located in the Recyclebin.
/// </summary>
public virtual bool Trashed
{
get { return _trashed; }
internal set
{
SetPropertyValueAndDetectChanges(o =>
{
_trashed = value;
return _trashed;
}, _trashed, TrashedSelector);
}
}
}
}

View File

@@ -3,34 +3,15 @@ using Umbraco.Core.Persistence;
namespace Umbraco.Core.Models.Rdbms
{
[TableName("cmsPropertyData")]
[TableName("cmsPropertyType")]
[PrimaryKey("id")]
[ExplicitColumns]
public class PropertyDataReadOnlyDto
{
/* cmsPropertyData */
/* cmsPropertyType */
[Column("id")]
public int Id { get; set; }
[Column("VersionId")]
public Guid? VersionId { get; set; }
[Column("propertytypeid")]
public int PropertyTypeId { get; set; }
[Column("dataInt")]
public int? Integer { get; set; }
[Column("dataDate")]
public DateTime? Date { get; set; }
[Column("dataNvarchar")]
public string VarChar { get; set; }
[Column("dataNtext")]
public string Text { get; set; }
/* cmsPropertyType */
[Column("dataTypeId")]
public int DataTypeId { get; set; }
@@ -55,6 +36,9 @@ namespace Umbraco.Core.Models.Rdbms
[Column("Description")]
public string Description { get; set; }
[Column("PropertyTypeSortOrder")]
public int SortOrder { get; set; }
/* cmsDataType */
[Column("controlId")]
public Guid ControlId { get; set; }
@@ -62,6 +46,28 @@ namespace Umbraco.Core.Models.Rdbms
[Column("dbType")]
public string DbType { get; set; }
/* cmsPropertyData */
[Column("PropertyDataId")]
public int? PropertyDataId { get; set; }
[Column("propertytypeid")]
public int? PropertyTypeId { get; set; }
[Column("VersionId")]
public Guid VersionId { get; set; }
[Column("dataInt")]
public int? Integer { get; set; }
[Column("dataDate")]
public DateTime? Date { get; set; }
[Column("dataNvarchar")]
public string VarChar { get; set; }
[Column("dataNtext")]
public string Text { get; set; }
[Ignore]
public object GetValue
{
@@ -87,7 +93,7 @@ namespace Umbraco.Core.Models.Rdbms
return Text;
}
return null;
return string.Empty;
}
}
}