diff --git a/src/Umbraco.Core/Constants-Conventions.cs b/src/Umbraco.Core/Constants-Conventions.cs
index cc6421c888..17d3eb69a3 100644
--- a/src/Umbraco.Core/Constants-Conventions.cs
+++ b/src/Umbraco.Core/Constants-Conventions.cs
@@ -105,8 +105,7 @@ namespace Umbraco.Core
///
/// Constants for Umbraco Member property aliases.
- ///
-
+ ///
public static class Member
{
///
@@ -121,63 +120,63 @@ namespace Umbraco.Core
///
/// Property alias for a Members Password Question
///
- public const string PasswordQuestion = "umbracoPasswordRetrievalQuestionPropertyTypeAlias";
+ public const string PasswordQuestion = "umbracoMemberPasswordRetrievalQuestion";
public const string PasswordQuestionLabel = "Password Question";
///
/// Property alias for Members Password Answer
///
- public const string PasswordAnswer = "umbracoPasswordRetrievalAnswerPropertyTypeAlias";
+ public const string PasswordAnswer = "umbracoMemberPasswordRetrievalAnswer";
public const string PasswordAnswerLabel = "Password Answer";
///
/// Property alias for the Comments on a Member
///
- public const string Comments = "umbracoCommentPropertyTypeAlias";
+ public const string Comments = "umbracoMemberComments";
public const string CommentsLabel = "Comments";
///
/// Property alias for the Approved boolean of a Member
///
- public const string IsApproved = "umbracoApprovePropertyTypeAlias";
+ public const string IsApproved = "umbracoMemberApproved";
public const string IsApprovedLabel = "Is Approved";
///
/// Property alias for the Locked out boolean of a Member
///
- public const string IsLockedOut = "umbracoLockPropertyTypeAlias";
+ public const string IsLockedOut = "umbracoMemberLockedOut";
public const string IsLockedOutLabel = "Is Locked Out";
///
/// Property alias for the last date the Member logged in
///
- public const string LastLoginDate = "umbracoLastLoginPropertyTypeAlias";
+ public const string LastLoginDate = "umbracoMemberLastLogin";
public const string LastLoginDateLabel = "Last Login Date";
///
/// Property alias for the last date a Member changed its password
///
- public const string LastPasswordChangeDate = "umbracoMemberLastPasswordChange";
+ public const string LastPasswordChangeDate = "umbracoMemberLastPasswordChangeDate";
public const string LastPasswordChangeDateLabel = "Last Password Change Date";
///
/// Property alias for the last date a Member was locked out
///
- public const string LastLockoutDate = "umbracoMemberLastLockout";
+ public const string LastLockoutDate = "umbracoMemberLastLockoutDate";
public const string LastLockoutDateLabel = "Last Lockout Date";
///
/// Property alias for the number of failed login attemps
///
- public const string FailedPasswordAttempts = "umbracoFailedPasswordAttemptsPropertyTypeAlias";
+ public const string FailedPasswordAttempts = "umbracoMemberFailedPasswordAttempts";
public const string FailedPasswordAttemptsLabel = "Failed Password Attempts";
@@ -274,7 +273,7 @@ namespace Umbraco.Core
///
/// MemberType alias for default member type.
///
- public const string Member = "Member";
+ public const string DefaultAlias = "Member";
public const string SystemDefaultProtectType = "_umbracoSystemDefaultProtectType";
}
diff --git a/src/Umbraco.Core/Models/Member.cs b/src/Umbraco.Core/Models/Member.cs
index 0ea6b5b0d3..ddb3f95e77 100644
--- a/src/Umbraco.Core/Models/Member.cs
+++ b/src/Umbraco.Core/Models/Member.cs
@@ -142,7 +142,7 @@ namespace Umbraco.Core.Models
/// Gets or sets the Password Question
///
///
- /// Alias: umbracoPasswordRetrievalQuestionPropertyTypeAlias
+ /// Alias: umbracoMemberPasswordRetrievalQuestion
/// Part of the standard properties collection.
///
[IgnoreDataMember]
@@ -171,7 +171,7 @@ namespace Umbraco.Core.Models
/// Gets or sets the Password Answer
///
///
- /// Alias: umbracoPasswordRetrievalAnswerPropertyTypeAlias
+ /// Alias: umbracoMemberPasswordRetrievalAnswer
/// Part of the standard properties collection.
///
[IgnoreDataMember]
@@ -200,7 +200,7 @@ namespace Umbraco.Core.Models
/// Gets or set the comments for the member
///
///
- /// Alias: umbracoCommentPropertyTypeAlias
+ /// Alias: umbracoMemberComments
/// Part of the standard properties collection.
///
[IgnoreDataMember]
@@ -229,7 +229,7 @@ namespace Umbraco.Core.Models
/// Gets or sets a boolean indicating whether the Member is approved
///
///
- /// Alias: umbracoApprovePropertyTypeAlias
+ /// Alias: umbracoMemberApproved
/// Part of the standard properties collection.
///
[IgnoreDataMember]
@@ -264,7 +264,7 @@ namespace Umbraco.Core.Models
/// Gets or sets a boolean indicating whether the Member is locked out
///
///
- /// Alias: umbracoLockPropertyTypeAlias
+ /// Alias: umbracoMemberLockedOut
/// Part of the standard properties collection.
///
[IgnoreDataMember]
@@ -297,7 +297,7 @@ namespace Umbraco.Core.Models
/// Gets or sets the date for last login
///
///
- /// Alias: umbracoLastLoginPropertyTypeAlias
+ /// Alias: umbracoMemberLastLogin
/// Part of the standard properties collection.
///
[IgnoreDataMember]
@@ -330,7 +330,7 @@ namespace Umbraco.Core.Models
/// Gest or sets the date for last password change
///
///
- /// Alias: umbracoMemberLastPasswordChange
+ /// Alias: umbracoMemberLastPasswordChangeDate
/// Part of the standard properties collection.
///
[IgnoreDataMember]
@@ -363,7 +363,7 @@ namespace Umbraco.Core.Models
/// Gets or sets the date for when Member was locked out
///
///
- /// Alias: umbracoMemberLastLockout
+ /// Alias: umbracoMemberLastLockoutDate
/// Part of the standard properties collection.
///
[IgnoreDataMember]
@@ -397,7 +397,7 @@ namespace Umbraco.Core.Models
/// This is the number of times the password was entered incorrectly upon login.
///
///
- /// Alias: umbracoFailedPasswordAttemptsPropertyTypeAlias
+ /// Alias: umbracoMemberFailedPasswordAttempts
/// Part of the standard properties collection.
///
[IgnoreDataMember]
diff --git a/src/Umbraco.Core/Models/Membership/IMembershipUser.cs b/src/Umbraco.Core/Models/Membership/IMembershipUser.cs
index d6e3294c72..dcd83de767 100644
--- a/src/Umbraco.Core/Models/Membership/IMembershipUser.cs
+++ b/src/Umbraco.Core/Models/Membership/IMembershipUser.cs
@@ -24,7 +24,7 @@ namespace Umbraco.Core.Models.Membership
/// This is the number of times the password was entered incorrectly upon login.
///
///
- /// Alias: umbracoFailedPasswordAttemptsPropertyTypeAlias
+ /// Alias: umbracoMemberFailedPasswordAttempts
/// Part of the standard properties collection.
///
int FailedPasswordAttempts { get; set; }
diff --git a/src/Umbraco.Core/Models/Membership/MembershipExtensions.cs b/src/Umbraco.Core/Models/Membership/MembershipExtensions.cs
index d41cea5936..6754ce0f57 100644
--- a/src/Umbraco.Core/Models/Membership/MembershipExtensions.cs
+++ b/src/Umbraco.Core/Models/Membership/MembershipExtensions.cs
@@ -36,7 +36,7 @@ namespace Umbraco.Core.Models.Membership
{
return MembershipScenario.NativeUmbraco;
}
- var memberType = ApplicationContext.Current.Services.MemberTypeService.Get(Constants.Conventions.MemberTypes.Member);
+ var memberType = ApplicationContext.Current.Services.MemberTypeService.Get(Constants.Conventions.MemberTypes.DefaultAlias);
return memberType != null
? MembershipScenario.CustomProviderWithUmbracoLink
: MembershipScenario.StandaloneCustomProvider;
diff --git a/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs b/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs
index db3fbdcd4c..ace2178a55 100644
--- a/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs
+++ b/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs
@@ -120,7 +120,7 @@ namespace Umbraco.Core.Persistence.Migrations.Initial
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1036, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1036", SortOrder = 2, UniqueId = new Guid("2b24165f-9782-4aa3-b459-1de4a4d21f60"), Text = "Member Picker", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1040, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1040", SortOrder = 2, UniqueId = new Guid("21e798da-e06e-4eda-a511-ed257f78d4fa"), Text = "Related Links", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1041, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1041", SortOrder = 2, UniqueId = new Guid("b6b73142-b9c1-4bf8-a16d-e1c23320b549"), Text = "Tags", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
- _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1044, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1044", SortOrder = 0, UniqueId = new Guid("d59be02f-1df9-4228-aa1e-01917d806cda"), Text = Constants.Conventions.MemberTypes.Member, NodeObjectType = new Guid(Constants.ObjectTypes.MemberType), CreateDate = DateTime.Now });
+ _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1044, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1044", SortOrder = 0, UniqueId = new Guid("d59be02f-1df9-4228-aa1e-01917d806cda"), Text = Constants.Conventions.MemberTypes.DefaultAlias, NodeObjectType = new Guid(Constants.ObjectTypes.MemberType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1045, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1045", SortOrder = 2, UniqueId = new Guid("7E3962CC-CE20-4FFC-B661-5897A894BA7E"), Text = "Multiple Media Picker", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
//TODO: We're not creating these for 7.0
@@ -135,7 +135,7 @@ namespace Umbraco.Core.Persistence.Migrations.Initial
_database.Insert("cmsContentType", "pk", false, new ContentTypeDto { PrimaryKey = 532, NodeId = 1031, Alias = Constants.Conventions.MediaTypes.Folder, Icon = "icon-folder", Thumbnail = "folder.png", IsContainer = false, AllowAtRoot = true });
_database.Insert("cmsContentType", "pk", false, new ContentTypeDto { PrimaryKey = 533, NodeId = 1032, Alias = Constants.Conventions.MediaTypes.Image, Icon = "icon-picture", Thumbnail = "mediaPhoto.png" });
_database.Insert("cmsContentType", "pk", false, new ContentTypeDto { PrimaryKey = 534, NodeId = 1033, Alias = Constants.Conventions.MediaTypes.File, Icon = "icon-document", Thumbnail = "mediaFile.png" });
- _database.Insert("cmsContentType", "pk", false, new ContentTypeDto { PrimaryKey = 531, NodeId = 1044, Alias = Constants.Conventions.MemberTypes.Member, Icon = "icon-user", Thumbnail = "folder.png" });
+ _database.Insert("cmsContentType", "pk", false, new ContentTypeDto { PrimaryKey = 531, NodeId = 1044, Alias = Constants.Conventions.MemberTypes.DefaultAlias, Icon = "icon-user", Thumbnail = "folder.png" });
}
private void CreateUmbracoUserData()
diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenOne/UpdateToNewMemberPropertyAliases.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenOne/UpdateToNewMemberPropertyAliases.cs
new file mode 100644
index 0000000000..7e5b1eb792
--- /dev/null
+++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenOne/UpdateToNewMemberPropertyAliases.cs
@@ -0,0 +1,96 @@
+using System;
+using System.Collections.Generic;
+using System.Deployment.Internal;
+using System.Dynamic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Web.Script.Serialization;
+using System.Xml;
+using Newtonsoft.Json;
+using Umbraco.Core.Configuration;
+using Umbraco.Core.Logging;
+using Umbraco.Core.Models.Rdbms;
+
+namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenOne
+{
+ [Migration("7.1.0", 1, GlobalSettings.UmbracoMigrationName)]
+ public class UpdateToNewMemberPropertyAliases : MigrationBase
+ {
+ public override void Up()
+ {
+ Execute.Code(Update);
+ }
+
+ internal static string Update(Database database)
+ {
+ if (database != null)
+ {
+ var aliasMap = new Dictionary
+ {
+ {"umbracoPasswordRetrievalQuestionPropertyTypeAlias", Constants.Conventions.Member.PasswordQuestion},
+ {"umbracoPasswordRetrievalAnswerPropertyTypeAlias", Constants.Conventions.Member.PasswordAnswer},
+ {"umbracoCommentPropertyTypeAlias", Constants.Conventions.Member.Comments},
+ {"umbracoApprovePropertyTypeAlias", Constants.Conventions.Member.IsApproved},
+ {"umbracoLockPropertyTypeAlias", Constants.Conventions.Member.IsLockedOut},
+ {"umbracoLastLoginPropertyTypeAlias", Constants.Conventions.Member.LastLoginDate},
+ {"umbracoMemberLastPasswordChange", Constants.Conventions.Member.LastPasswordChangeDate},
+ {"umbracoMemberLastLockout", Constants.Conventions.Member.LastLockoutDate},
+ {"umbracoFailedPasswordAttemptsPropertyTypeAlias", Constants.Conventions.Member.FailedPasswordAttempts}
+ };
+
+ const string propertyTypeUpdateSql = @"UPDATE cmsPropertyType
+SET Alias = @newAlias
+WHERE Alias = @oldAlias AND contentTypeId IN (
+SELECT DISTINCT cmsContentType.nodeId FROM cmsPropertyType
+INNER JOIN cmsContentType ON cmsPropertyType.contentTypeId = cmsContentType.nodeId
+INNER JOIN umbracoNode ON cmsContentType.nodeId = umbracoNode.id
+WHERE umbracoNode.nodeObjectType = @objectType)";
+
+ const string xmlSelectSql = @"SELECT cmsContentXml.* FROM cmsContentXml
+INNER JOIN umbracoNode ON cmsContentXml.nodeId = umbracoNode.id
+WHERE umbracoNode.nodeObjectType = @objectType";
+
+ using (var trans = database.GetTransaction())
+ {
+ try
+ {
+
+ //Upate all of the property type aliases
+ foreach (var map in aliasMap)
+ {
+ database.Execute(propertyTypeUpdateSql, new { newAlias = map.Value, oldAlias = map.Key, objectType = Constants.ObjectTypes.MemberType });
+ }
+
+ //Update all of the XML
+ var items = database.Fetch(xmlSelectSql, new {objectType = Constants.ObjectTypes.Member});
+ foreach (var item in items)
+ {
+ foreach (var map in aliasMap)
+ {
+ item.Xml = item.Xml.Replace("<" + map.Key + ">", "<" + map.Value + ">");
+ item.Xml = item.Xml.Replace("" + map.Key + ">", "" + map.Value + ">");
+ }
+ database.Update(item);
+ }
+
+ trans.Complete();
+ }
+ catch (Exception ex)
+ {
+ LogHelper.Error("Exception was thrown when trying to upgrade old member aliases to the new ones", ex);
+ throw;
+ }
+ }
+
+
+ }
+ return string.Empty;
+ }
+
+ public override void Down()
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj
index 9e08a02dbc..f9837f32f0 100644
--- a/src/Umbraco.Core/Umbraco.Core.csproj
+++ b/src/Umbraco.Core/Umbraco.Core.csproj
@@ -355,6 +355,7 @@
+
diff --git a/src/Umbraco.Web.UI.Client/src/common/services/util.service.js b/src/Umbraco.Web.UI.Client/src/common/services/util.service.js
index b0d2e96480..786668812b 100644
--- a/src/Umbraco.Web.UI.Client/src/common/services/util.service.js
+++ b/src/Umbraco.Web.UI.Client/src/common/services/util.service.js
@@ -530,13 +530,13 @@ function umbDataFormatter() {
//we know the current property matches an alias, now we need to determine which membership provider property it was for
// by looking at the key
switch (foundAlias[0]) {
- case "umbracoLockPropertyTypeAlias":
+ case "umbracoMemberLockedOut":
saveModel.isLockedOut = prop.value.toString() === "1" ? true : false;
break;
- case "umbracoApprovePropertyTypeAlias":
+ case "umbracoMemberApproved":
saveModel.isApproved = prop.value.toString() === "1" ? true : false;
break;
- case "umbracoCommentPropertyTypeAlias":
+ case "umbracoMemberComments":
saveModel.comments = prop.value;
break;
}
diff --git a/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs b/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs
index 6ab887a448..d20c325914 100644
--- a/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs
+++ b/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs
@@ -298,7 +298,7 @@ namespace Umbraco.Web.Models.Mapping
{
return MembershipScenario.NativeUmbraco;
}
- var memberType = _memberTypeService.Value.Get(Constants.Conventions.MemberTypes.Member);
+ var memberType = _memberTypeService.Value.Get(Constants.Conventions.MemberTypes.DefaultAlias);
return memberType != null
? MembershipScenario.CustomProviderWithUmbracoLink
: MembershipScenario.StandaloneCustomProvider;
diff --git a/src/Umbraco.Web/Models/RegisterModel.cs b/src/Umbraco.Web/Models/RegisterModel.cs
index 5d210d020d..eced070082 100644
--- a/src/Umbraco.Web/Models/RegisterModel.cs
+++ b/src/Umbraco.Web/Models/RegisterModel.cs
@@ -24,7 +24,7 @@ namespace Umbraco.Web.Models
private RegisterModel(bool doLookup)
{
- MemberTypeAlias = Constants.Conventions.MemberTypes.Member;
+ MemberTypeAlias = Constants.Conventions.MemberTypes.DefaultAlias;
RedirectOnSucces = false;
RedirectUrl = "/";
UsernameIsEmail = true;
diff --git a/src/Umbraco.Web/Security/MembershipHelper.cs b/src/Umbraco.Web/Security/MembershipHelper.cs
index 78f7ab09a8..fb5c0d9f6d 100644
--- a/src/Umbraco.Web/Security/MembershipHelper.cs
+++ b/src/Umbraco.Web/Security/MembershipHelper.cs
@@ -263,7 +263,7 @@ namespace Umbraco.Web.Security
{
if (Membership.Provider.IsUmbracoMembershipProvider())
{
- memberTypeAlias = memberTypeAlias ?? Constants.Conventions.MemberTypes.Member;
+ memberTypeAlias = memberTypeAlias ?? Constants.Conventions.MemberTypes.DefaultAlias;
var memberType = _applicationContext.Services.MemberTypeService.Get(memberTypeAlias);
if (memberType == null)
throw new InvalidOperationException("Could not find a member type with alias " + memberTypeAlias);
diff --git a/src/Umbraco.Web/WebApi/Binders/MemberBinder.cs b/src/Umbraco.Web/WebApi/Binders/MemberBinder.cs
index 828520c0b3..70b39a3fb5 100644
--- a/src/Umbraco.Web/WebApi/Binders/MemberBinder.cs
+++ b/src/Umbraco.Web/WebApi/Binders/MemberBinder.cs
@@ -138,7 +138,7 @@ namespace Umbraco.Web.WebApi.Binders
//If the default Member type exists, we'll use that to create the IMember - that way we can associate the custom membership
// provider to our data - eventually we can support editing custom properties with a custom provider.
- var memberType = ApplicationContext.Services.MemberTypeService.Get(Constants.Conventions.MemberTypes.Member);
+ var memberType = ApplicationContext.Services.MemberTypeService.Get(Constants.Conventions.MemberTypes.DefaultAlias);
if (memberType != null)
{
FilterContentTypeProperties(memberType, memberType.PropertyTypes.Select(x => x.Alias).ToArray());