From f1818aae1b3f8711ce487537b10df159a8d17fc4 Mon Sep 17 00:00:00 2001 From: Morten Christensen Date: Mon, 26 Aug 2013 16:58:08 +0200 Subject: [PATCH] Updating the Profile and Member classes --- src/Umbraco.Core/Models/Membership/Member.cs | 131 +++++++++++++++++- src/Umbraco.Core/Models/Membership/Profile.cs | 22 ++- 2 files changed, 143 insertions(+), 10 deletions(-) diff --git a/src/Umbraco.Core/Models/Membership/Member.cs b/src/Umbraco.Core/Models/Membership/Member.cs index e1d7224623..3fa26af085 100644 --- a/src/Umbraco.Core/Models/Membership/Member.cs +++ b/src/Umbraco.Core/Models/Membership/Member.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics; +using System.Reflection; using System.Runtime.Serialization; namespace Umbraco.Core.Models.Membership @@ -13,11 +15,123 @@ namespace Umbraco.Core.Models.Membership /// [Serializable] [DataContract(IsReference = true)] + [DebuggerDisplay("Id: {Id}")] internal class Member : MemberProfile, IMembershipUser { - public int Id { get; set; } + private bool _hasIdentity; + private int _id; + private Guid _key; + private DateTime _createDate; + private DateTime _updateDate; + + private static readonly PropertyInfo IdSelector = ExpressionHelper.GetPropertyInfo(x => x.Id); + private static readonly PropertyInfo KeySelector = ExpressionHelper.GetPropertyInfo(x => x.Key); + private static readonly PropertyInfo CreateDateSelector = ExpressionHelper.GetPropertyInfo(x => x.CreateDate); + private static readonly PropertyInfo UpdateDateSelector = ExpressionHelper.GetPropertyInfo(x => x.UpdateDate); + private static readonly PropertyInfo HasIdentitySelector = ExpressionHelper.GetPropertyInfo(x => x.HasIdentity); + + /// + /// Integer Id + /// + [DataMember] + public new int Id + { + get + { + return _id; + } + set + { + SetPropertyValueAndDetectChanges(o => + { + _id = value; + HasIdentity = true; //set the has Identity + return _id; + }, _id, IdSelector); + } + } + + /// + /// Guid based Id + /// + /// The key is currectly used to store the Unique Id from the + /// umbracoNode table, which many of the entities are based on. + [DataMember] + public Guid Key + { + get + { + if (_key == Guid.Empty) + return _id.ToGuid(); + + return _key; + } + set + { + SetPropertyValueAndDetectChanges(o => + { + _key = value; + return _key; + }, _key, KeySelector); + } + } + + /// + /// Gets or sets the Created Date + /// + [DataMember] + public DateTime CreateDate + { + get { return _createDate; } + set + { + SetPropertyValueAndDetectChanges(o => + { + _createDate = value; + return _createDate; + }, _createDate, CreateDateSelector); + } + } + + /// + /// Gets or sets the Modified Date + /// + [DataMember] + public DateTime UpdateDate + { + get { return _updateDate; } + set + { + SetPropertyValueAndDetectChanges(o => + { + _updateDate = value; + return _updateDate; + }, _updateDate, UpdateDateSelector); + } + } + + /// + /// Indicates whether the current entity has an identity, eg. Id. + /// + public virtual bool HasIdentity + { + get + { + return _hasIdentity; + } + protected set + { + SetPropertyValueAndDetectChanges(o => + { + _hasIdentity = value; + return _hasIdentity; + }, _hasIdentity, HasIdentitySelector); + } + } + public string Username { get; set; } public string Email { get; set; } + public string Password { get; set; } public string PasswordQuestion { get; set; } public string PasswordAnswer { get; set; } @@ -28,11 +142,18 @@ namespace Umbraco.Core.Models.Membership public DateTime LastLoginDate { get; set; } public DateTime LastPasswordChangeDate { get; set; } public DateTime LastLockoutDate { get; set; } + public object ProfileId { get; set; } public IEnumerable Groups { get; set; } - public Guid Key { get; set; } - public DateTime CreateDate { get; set; } - public DateTime UpdateDate { get; set; } - public bool HasIdentity { get; private set; } + + #region Internal methods + + internal virtual void ResetIdentity() + { + _hasIdentity = false; + _id = default(int); + } + + #endregion } } \ No newline at end of file diff --git a/src/Umbraco.Core/Models/Membership/Profile.cs b/src/Umbraco.Core/Models/Membership/Profile.cs index a1c4d54e1b..b3959bb9cd 100644 --- a/src/Umbraco.Core/Models/Membership/Profile.cs +++ b/src/Umbraco.Core/Models/Membership/Profile.cs @@ -15,7 +15,7 @@ namespace Umbraco.Core.Models.Membership /// /// Initializes a new instance of the class. /// - public Profile() + protected Profile() { ProviderUserKeyType = typeof(int); } @@ -29,14 +29,16 @@ namespace Umbraco.Core.Models.Membership private object _id; private string _name; + private object _providerUserKey; private Type _userTypeKey; private static readonly PropertyInfo IdSelector = ExpressionHelper.GetPropertyInfo(x => x.Id); private static readonly PropertyInfo NameSelector = ExpressionHelper.GetPropertyInfo(x => x.Name); + private static readonly PropertyInfo ProviderUserKeySelector = ExpressionHelper.GetPropertyInfo(x => x.ProviderUserKey); private static readonly PropertyInfo UserTypeKeySelector = ExpressionHelper.GetPropertyInfo(x => x.ProviderUserKeyType); [DataMember] - public object Id + public virtual object Id { get { @@ -53,7 +55,7 @@ namespace Umbraco.Core.Models.Membership } [DataMember] - public string Name + public virtual string Name { get { @@ -72,8 +74,18 @@ namespace Umbraco.Core.Models.Membership [IgnoreDataMember] public virtual object ProviderUserKey { - get { throw new System.NotImplementedException(); } - set { throw new System.NotImplementedException(); } + get + { + return _providerUserKey; + } + set + { + SetPropertyValueAndDetectChanges(o => + { + _providerUserKey = value; + return _id; + }, _providerUserKey, ProviderUserKeySelector); + } } ///