diff --git a/src/Umbraco.Core/Constants-Conventions.cs b/src/Umbraco.Core/Constants-Conventions.cs index b3a328a029..850b23b8b7 100644 --- a/src/Umbraco.Core/Constants-Conventions.cs +++ b/src/Umbraco.Core/Constants-Conventions.cs @@ -183,6 +183,7 @@ namespace Umbraco.Core { Comments, new PropertyType(PropertyEditors.TextboxMultipleAlias, DataTypeDatabaseType.Ntext) + new PropertyType(new Guid(PropertyEditors.TextboxMultiple), DataTypeDatabaseType.Ntext, true) { Alias = Comments, Name = CommentsLabel @@ -191,6 +192,7 @@ namespace Umbraco.Core { FailedPasswordAttempts, new PropertyType(PropertyEditors.NoEditAlias, DataTypeDatabaseType.Integer) + new PropertyType(new Guid(PropertyEditors.NoEdit), DataTypeDatabaseType.Integer, true) { Alias = FailedPasswordAttempts, Name = FailedPasswordAttemptsLabel @@ -199,6 +201,7 @@ namespace Umbraco.Core { IsApproved, new PropertyType(PropertyEditors.TrueFalseAlias, DataTypeDatabaseType.Integer) + new PropertyType(new Guid(PropertyEditors.TrueFalse), DataTypeDatabaseType.Integer, true) { Alias = IsApproved, Name = IsApprovedLabel @@ -207,6 +210,7 @@ namespace Umbraco.Core { IsLockedOut, new PropertyType(PropertyEditors.TrueFalseAlias, DataTypeDatabaseType.Integer) + new PropertyType(new Guid(PropertyEditors.TrueFalse), DataTypeDatabaseType.Integer, true) { Alias = IsLockedOut, Name = IsLockedOutLabel @@ -215,6 +219,7 @@ namespace Umbraco.Core { LastLockoutDate, new PropertyType(PropertyEditors.NoEditAlias, DataTypeDatabaseType.Date) + new PropertyType(new Guid(PropertyEditors.NoEdit), DataTypeDatabaseType.Date, true) { Alias = LastLockoutDate, Name = LastLockoutDateLabel @@ -223,6 +228,7 @@ namespace Umbraco.Core { LastLoginDate, new PropertyType(PropertyEditors.NoEditAlias, DataTypeDatabaseType.Date) + new PropertyType(new Guid(PropertyEditors.NoEdit), DataTypeDatabaseType.Date, true) { Alias = LastLoginDate, Name = LastLoginDateLabel @@ -231,6 +237,7 @@ namespace Umbraco.Core { LastPasswordChangeDate, new PropertyType(PropertyEditors.NoEditAlias, DataTypeDatabaseType.Date) + new PropertyType(new Guid(PropertyEditors.NoEdit), DataTypeDatabaseType.Date, true) { Alias = LastPasswordChangeDate, Name = LastPasswordChangeDateLabel @@ -239,6 +246,7 @@ namespace Umbraco.Core { PasswordAnswer, new PropertyType(PropertyEditors.NoEditAlias, DataTypeDatabaseType.Nvarchar) + new PropertyType(new Guid(PropertyEditors.NoEdit), DataTypeDatabaseType.Nvarchar, true) { Alias = PasswordAnswer, Name = PasswordAnswerLabel @@ -247,6 +255,7 @@ namespace Umbraco.Core { PasswordQuestion, new PropertyType(PropertyEditors.NoEditAlias, DataTypeDatabaseType.Nvarchar) + new PropertyType(new Guid(PropertyEditors.NoEdit), DataTypeDatabaseType.Nvarchar, true) { Alias = PasswordQuestion, Name = PasswordQuestionLabel diff --git a/src/Umbraco.Core/DateTimeExtensions.cs b/src/Umbraco.Core/DateTimeExtensions.cs index 458f858902..1851eded9f 100644 --- a/src/Umbraco.Core/DateTimeExtensions.cs +++ b/src/Umbraco.Core/DateTimeExtensions.cs @@ -18,5 +18,30 @@ namespace Umbraco.Core return dt.ToString("yyyy-MM-dd HH:mm:ss"); } + public static DateTime TruncateTo(this DateTime dt, DateTruncate truncateTo) + { + if (truncateTo == DateTruncate.Year) + return new DateTime(dt.Year, 0, 0); + if (truncateTo == DateTruncate.Month) + return new DateTime(dt.Year, dt.Month, 0); + if (truncateTo == DateTruncate.Day) + return new DateTime(dt.Year, dt.Month, dt.Day); + if (truncateTo == DateTruncate.Hour) + return new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, 0, 0); + if (truncateTo == DateTruncate.Minute) + return new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, 0); + return new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second); + } + + public enum DateTruncate + { + Year, + Month, + Day, + Hour, + Minute, + Second + } + } } diff --git a/src/Umbraco.Core/Models/Property.cs b/src/Umbraco.Core/Models/Property.cs index 3b2801aa24..1721efe5de 100644 --- a/src/Umbraco.Core/Models/Property.cs +++ b/src/Umbraco.Core/Models/Property.cs @@ -44,7 +44,7 @@ namespace Umbraco.Core.Models private static readonly PropertyInfo ValueSelector = ExpressionHelper.GetPropertyInfo(x => x.Value); private static readonly PropertyInfo VersionSelector = ExpressionHelper.GetPropertyInfo(x => x.Version); - + /// /// Returns the instance of the tag support, by default tags are not enabled /// @@ -68,9 +68,14 @@ namespace Umbraco.Core.Models /// /// Returns the DatabaseType that the underlaying DataType is using to store its values /// - /// Only used internally when saving the property value + /// + /// Only used internally when saving the property value. + /// [IgnoreDataMember] - internal DataTypeDatabaseType DataTypeDatabaseType { get { return _propertyType.DataTypeDatabaseType; } } + internal DataTypeDatabaseType DataTypeDatabaseType + { + get { return _propertyType.DataTypeDatabaseType; } + } /// /// Returns the PropertyType, which this Property is based on diff --git a/src/Umbraco.Core/Models/PropertyType.cs b/src/Umbraco.Core/Models/PropertyType.cs index 1d34c5f991..9846792279 100644 --- a/src/Umbraco.Core/Models/PropertyType.cs +++ b/src/Umbraco.Core/Models/PropertyType.cs @@ -15,6 +15,7 @@ namespace Umbraco.Core.Models [DataContract(IsReference = true)] public class PropertyType : Entity, IEquatable { + private readonly bool _isExplicitDbType; private string _name; private string _alias; private string _description; @@ -30,16 +31,30 @@ namespace Umbraco.Core.Models public PropertyType(IDataTypeDefinition dataTypeDefinition) { if(dataTypeDefinition.HasIdentity) - DataTypeDefinitionId = dataTypeDefinition.Id; + _dataTypeDefinitionId = dataTypeDefinition.Id; PropertyEditorAlias = dataTypeDefinition.PropertyEditorAlias; - DataTypeDatabaseType = dataTypeDefinition.DatabaseType; + _dataTypeId = dataTypeDefinition.ControlId; + _dataTypeDatabaseType = dataTypeDefinition.DatabaseType; } internal PropertyType(string propertyEditorAlias, DataTypeDatabaseType dataTypeDatabaseType) + : this(dataTypeControlId, dataTypeDatabaseType, false) { PropertyEditorAlias = propertyEditorAlias; - DataTypeDatabaseType = dataTypeDatabaseType; + } + + /// + /// Used internally to assign an explicity database type for this property type regardless of what the underlying data type/property editor is. + /// + /// + /// + /// + internal PropertyType(Guid dataTypeControlId, DataTypeDatabaseType dataTypeDatabaseType, bool isExplicitDbType) + { + _isExplicitDbType = isExplicitDbType; + _dataTypeId = dataTypeControlId; + _dataTypeDatabaseType = dataTypeDatabaseType; } private static readonly PropertyInfo NameSelector = ExpressionHelper.GetPropertyInfo(x => x.Name); @@ -165,6 +180,9 @@ namespace Umbraco.Core.Models get { return _dataTypeDatabaseType; } set { + //don't allow setting this if an explicit declaration has been made in the ctor + if (_isExplicitDbType) return; + SetPropertyValueAndDetectChanges(o => { _dataTypeDatabaseType = value; diff --git a/src/Umbraco.Core/Persistence/Factories/MemberTypeReadOnlyFactory.cs b/src/Umbraco.Core/Persistence/Factories/MemberTypeReadOnlyFactory.cs index 56d9f4cff9..7c2dc8dab7 100644 --- a/src/Umbraco.Core/Persistence/Factories/MemberTypeReadOnlyFactory.cs +++ b/src/Umbraco.Core/Persistence/Factories/MemberTypeReadOnlyFactory.cs @@ -11,6 +11,8 @@ namespace Umbraco.Core.Persistence.Factories { public IMemberType BuildEntity(MemberTypeReadOnlyDto dto) { + var standardPropertyTypes = Constants.Conventions.Member.GetStandardPropertyTypeStubs(); + var memberType = new MemberType(dto.ParentId) { Alias = dto.Alias, @@ -32,13 +34,12 @@ namespace Umbraco.Core.Persistence.Factories AllowedContentTypes = Enumerable.Empty() }; - var propertyTypeGroupCollection = GetPropertyTypeGroupCollection(dto, memberType); + var propertyTypeGroupCollection = GetPropertyTypeGroupCollection(dto, memberType, standardPropertyTypes); memberType.PropertyGroups = propertyTypeGroupCollection; - var propertyTypes = GetPropertyTypes(dto, memberType); + var propertyTypes = GetPropertyTypes(dto, memberType, standardPropertyTypes); - //By Convention we add 9 stnd PropertyTypes - This is only here to support loading of types that didn't have these conventions before. - var standardPropertyTypes = Constants.Conventions.Member.GetStandardPropertyTypeStubs(); + //By Convention we add 9 stnd PropertyTypes - This is only here to support loading of types that didn't have these conventions before. foreach (var standardPropertyType in standardPropertyTypes) { if(dto.PropertyTypes.Any(x => x.Alias.Equals(standardPropertyType.Key))) continue; @@ -55,10 +56,10 @@ namespace Umbraco.Core.Persistence.Factories return memberType; } - private PropertyGroupCollection GetPropertyTypeGroupCollection(MemberTypeReadOnlyDto dto, MemberType memberType) + private PropertyGroupCollection GetPropertyTypeGroupCollection(MemberTypeReadOnlyDto dto, MemberType memberType, Dictionary standardProps) { - var propertyGroups = new PropertyGroupCollection(); - var standardProps = Constants.Conventions.Member.GetStandardPropertyTypeStubs(); + var propertyGroups = new PropertyGroupCollection(); + foreach (var groupDto in dto.PropertyTypeGroups.Where(x => x.Id.HasValue)) { var group = new PropertyGroup(); @@ -92,13 +93,19 @@ namespace Umbraco.Core.Persistence.Factories var tempGroupDto = groupDto; - var propertyType = new PropertyType(typeDto.PropertyEditorAlias, - //ensures that any built-in membership properties have their correct dbtype assigned no matter - //what the underlying data type is - MemberTypeRepository.GetDbTypeForBuiltInProperty( - typeDto.Alias, - typeDto.DbType.EnumParse(true), - standardProps).Result) + //ensures that any built-in membership properties have their correct dbtype assigned no matter + //what the underlying data type is + var propDbType = MemberTypeRepository.GetDbTypeForBuiltInProperty( + typeDto.Alias, + typeDto.DbType.EnumParse(true), + standardProps); + + var propertyType = new PropertyType( + typeDto.ControlId, + propDbType.Result, + //This flag tells the property type that it has an explicit dbtype and that it cannot be changed + // which is what we want for the built-in properties. + propDbType.Success) { Alias = typeDto.Alias, DataTypeDefinitionId = typeDto.DataTypeId, @@ -127,34 +134,47 @@ namespace Umbraco.Core.Persistence.Factories return propertyGroups; } - - private List GetPropertyTypes(MemberTypeReadOnlyDto dto, MemberType memberType) + + private List GetPropertyTypes(MemberTypeReadOnlyDto dto, MemberType memberType, Dictionary standardProps) { //Find PropertyTypes that does not belong to a PropertyTypeGroup var propertyTypes = new List(); - foreach (var propertyType in dto.PropertyTypes.Where(x => (x.PropertyTypeGroupId.HasValue == false || x.PropertyTypeGroupId.Value == 0) && x.Id.HasValue)) + foreach (var typeDto in dto.PropertyTypes.Where(x => (x.PropertyTypeGroupId.HasValue == false || x.PropertyTypeGroupId.Value == 0) && x.Id.HasValue)) { //Internal dictionary for adding "MemberCanEdit" and "VisibleOnProfile" properties to each PropertyType - memberType.MemberTypePropertyTypes.Add(propertyType.Alias, - new MemberTypePropertyProfileAccess(propertyType.ViewOnProfile, propertyType.CanEdit)); - //PropertyType Collection - propertyTypes.Add(new PropertyType(propertyType.PropertyEditorAlias, - propertyType.DbType.EnumParse(true)) - { - Alias = propertyType.Alias, - DataTypeDefinitionId = propertyType.DataTypeId, - Description = propertyType.Description, - HelpText = propertyType.HelpText, - Id = propertyType.Id.Value, - Mandatory = propertyType.Mandatory, - Name = propertyType.Name, - SortOrder = propertyType.SortOrder, - ValidationRegExp = propertyType.ValidationRegExp, - PropertyGroupId = new Lazy(() => default(int)), - CreateDate = dto.CreateDate, - UpdateDate = dto.CreateDate - }); + memberType.MemberTypePropertyTypes.Add(typeDto.Alias, + new MemberTypePropertyProfileAccess(typeDto.ViewOnProfile, typeDto.CanEdit)); + + //ensures that any built-in membership properties have their correct dbtype assigned no matter + //what the underlying data type is + var propDbType = MemberTypeRepository.GetDbTypeForBuiltInProperty( + typeDto.Alias, + typeDto.DbType.EnumParse(true), + standardProps); + + var propertyType = new PropertyType( + typeDto.ControlId, + propDbType.Result, + //This flag tells the property type that it has an explicit dbtype and that it cannot be changed + // which is what we want for the built-in properties. + propDbType.Success) + { + Alias = typeDto.Alias, + DataTypeDefinitionId = typeDto.DataTypeId, + Description = typeDto.Description, + HelpText = typeDto.HelpText, + Id = typeDto.Id.Value, + Mandatory = typeDto.Mandatory, + Name = typeDto.Name, + SortOrder = typeDto.SortOrder, + ValidationRegExp = typeDto.ValidationRegExp, + PropertyGroupId = new Lazy(() => default(int)), + CreateDate = dto.CreateDate, + UpdateDate = dto.CreateDate + }; + + propertyTypes.Add(propertyType); } return propertyTypes; } diff --git a/src/Umbraco.Core/Persistence/Factories/PropertyGroupFactory.cs b/src/Umbraco.Core/Persistence/Factories/PropertyGroupFactory.cs index adbb3ad7f5..b3382df1e3 100644 --- a/src/Umbraco.Core/Persistence/Factories/PropertyGroupFactory.cs +++ b/src/Umbraco.Core/Persistence/Factories/PropertyGroupFactory.cs @@ -11,17 +11,21 @@ namespace Umbraco.Core.Persistence.Factories private readonly int _id; private readonly DateTime _createDate; private readonly DateTime _updateDate; + //a callback to create a property type which can be injected via a contructor + private readonly Func _propertyTypeCtor; public PropertyGroupFactory(int id) { _id = id; + _propertyTypeCtor = (guid, dbType, alias) => new PropertyType(guid, dbType); } - - public PropertyGroupFactory(int id, DateTime createDate, DateTime updateDate) + + public PropertyGroupFactory(int id, DateTime createDate, DateTime updateDate, Func propertyTypeCtor) { _id = id; _createDate = createDate; _updateDate = updateDate; + _propertyTypeCtor = propertyTypeCtor; } #region Implementation of IEntityFactory,IEnumerable> @@ -55,22 +59,23 @@ namespace Umbraco.Core.Persistence.Factories foreach (var typeDto in typeDtos) { var tempGroupDto = groupDto; - var propertyType = new PropertyType(typeDto.DataTypeDto.PropertyEditorAlias, - typeDto.DataTypeDto.DbType.EnumParse(true)) - { - Alias = typeDto.Alias, - DataTypeDefinitionId = typeDto.DataTypeId, - Description = typeDto.Description, - Id = typeDto.Id, - Name = typeDto.Name, - HelpText = typeDto.HelpText, - Mandatory = typeDto.Mandatory, - SortOrder = typeDto.SortOrder, - ValidationRegExp = typeDto.ValidationRegExp, - PropertyGroupId = new Lazy(() => tempGroupDto.Id), - CreateDate = _createDate, - UpdateDate = _updateDate - }; + var propertyType = _propertyTypeCtor(typeDto.DataTypeDto.ControlId, + typeDto.DataTypeDto.DbType.EnumParse(true), + typeDto.Alias); + + propertyType.Alias = typeDto.Alias; + propertyType.DataTypeDefinitionId = typeDto.DataTypeId; + propertyType.Description = typeDto.Description; + propertyType.Id = typeDto.Id; + propertyType.Name = typeDto.Name; + propertyType.HelpText = typeDto.HelpText; + propertyType.Mandatory = typeDto.Mandatory; + propertyType.SortOrder = typeDto.SortOrder; + propertyType.ValidationRegExp = typeDto.ValidationRegExp; + propertyType.PropertyGroupId = new Lazy(() => tempGroupDto.Id); + propertyType.CreateDate = _createDate; + propertyType.UpdateDate = _updateDate; + //on initial construction we don't want to have dirty properties tracked // http://issues.umbraco.org/issue/U4-1946 propertyType.ResetDirtyProperties(false); diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs index 58852e6058..b626177ce3 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs @@ -288,7 +288,7 @@ namespace Umbraco.Core.Persistence.Repositories from p in perm.AssignedPermissions select new Tuple(perm.UserId, p)).ToList(); - permissionsRepo.AssignEntityPermissions(entity, userPermissions); + permissionsRepo.ReplaceEntityPermissions(entity, userPermissions); //flag the entity's permissions changed flag so we can track those changes. //Currently only used for the cache refreshers to detect if we should refresh all user permissions cache. ((Content) entity).PermissionsChanged = true; @@ -559,15 +559,15 @@ namespace Umbraco.Core.Persistence.Repositories } /// - /// Assigns one permission to an entity for multiple users + /// Assigns a single permission to the current content item for the specified user ids /// /// /// - /// - public void AssignEntityPermissions(IContent entity, char permission, IEnumerable userIds) + /// + public void AssignEntityPermission(IContent entity, char permission, IEnumerable userIds) { var repo = new PermissionRepository(UnitOfWork, _cacheHelper); - repo.AssignEntityPermissions(entity, permission, userIds); + repo.AssignEntityPermission(entity, permission, userIds); } public IEnumerable GetPermissionsForEntity(int entityId) diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs index 487c43b89c..f2070fae8f 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs @@ -56,6 +56,11 @@ namespace Umbraco.Core.Persistence.Repositories } } + protected virtual PropertyType CreatePropertyType(Guid dataTypeId, DataTypeDatabaseType dbType, string propertyTypeAlias) + { + return new PropertyType(dataTypeId, dbType); + } + protected void PersistNewBaseContentType(ContentTypeDto dto, IContentTypeComposition entity) { //Logic for setting Path, Level and SortOrder @@ -344,7 +349,7 @@ namespace Umbraco.Core.Persistence.Repositories var dtos = Database.Fetch(new GroupPropertyTypeRelator().Map, sql); - var propertyGroupFactory = new PropertyGroupFactory(id, createDate, updateDate); + var propertyGroupFactory = new PropertyGroupFactory(id, createDate, updateDate, CreatePropertyType); var propertyGroups = propertyGroupFactory.BuildEntity(dtos); return new PropertyGroupCollection(propertyGroups); } @@ -361,25 +366,23 @@ namespace Umbraco.Core.Persistence.Repositories var dtos = Database.Fetch(sql); //TODO Move this to a PropertyTypeFactory - var list = (from dto in dtos - where (dto.PropertyTypeGroupId > 0) == false - select - new PropertyType(dto.DataTypeDto.PropertyEditorAlias, - dto.DataTypeDto.DbType.EnumParse(true)) - { - Alias = dto.Alias, - DataTypeDefinitionId = dto.DataTypeId, - Description = dto.Description, - Id = dto.Id, - Name = dto.Name, - HelpText = dto.HelpText, - Mandatory = dto.Mandatory, - SortOrder = dto.SortOrder, - ValidationRegExp = dto.ValidationRegExp, - CreateDate = createDate, - UpdateDate = updateDate - }).ToList(); - + var list = new List(); + foreach (var dto in dtos.Where(x => (x.PropertyTypeGroupId > 0) == false)) + { + var propType = CreatePropertyType(dto.DataTypeDto.ControlId, dto.DataTypeDto.DbType.EnumParse(true), dto.Alias); + propType.Alias = dto.Alias; + propType.DataTypeDefinitionId = dto.DataTypeId; + propType.Description = dto.Description; + propType.Id = dto.Id; + propType.Name = dto.Name; + propType.HelpText = dto.HelpText; + propType.Mandatory = dto.Mandatory; + propType.SortOrder = dto.SortOrder; + propType.ValidationRegExp = dto.ValidationRegExp; + propType.CreateDate = createDate; + propType.UpdateDate = updateDate; + list.Add(propType); + } //Reset dirty properties Parallel.ForEach(list, currentFile => currentFile.ResetDirtyProperties(false)); diff --git a/src/Umbraco.Core/Persistence/Repositories/Interfaces/IContentRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Interfaces/IContentRepository.cs index 16044a313d..3a343febae 100644 --- a/src/Umbraco.Core/Persistence/Repositories/Interfaces/IContentRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/Interfaces/IContentRepository.cs @@ -29,7 +29,7 @@ namespace Umbraco.Core.Persistence.Repositories /// /// /// - void AssignEntityPermissions(IContent entity, char permission, IEnumerable userIds); + void AssignEntityPermission(IContent entity, char permission, IEnumerable userIds); /// /// Gets the list of permissions for the content item diff --git a/src/Umbraco.Core/Persistence/Repositories/Interfaces/IUserRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Interfaces/IUserRepository.cs index 90e6e49c2f..e40d996637 100644 --- a/src/Umbraco.Core/Persistence/Repositories/Interfaces/IUserRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/Interfaces/IUserRepository.cs @@ -38,7 +38,7 @@ namespace Umbraco.Core.Persistence.Repositories /// /// IEnumerable GetPagedResultsByQuery(IQuery query, int pageIndex, int pageSize, out int totalRecords, Expression> orderBy); - + /// /// Gets the user permissions for the specified entities @@ -49,11 +49,11 @@ namespace Umbraco.Core.Persistence.Repositories IEnumerable GetUserPermissionsForEntities(int userId, params int[] entityIds); /// - /// Assigns the same permission set for a single user to any number of entities + /// Replaces the same permission set for a single user to any number of entities /// /// /// /// - void AssignUserPermissions(int userId, IEnumerable permissions, params int[] entityIds); + void ReplaceUserPermissions(int userId, IEnumerable permissions, params int[] entityIds); } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberTypeRepository.cs index 7c0deb1edc..4867628aab 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MemberTypeRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MemberTypeRepository.cs @@ -18,17 +18,17 @@ namespace Umbraco.Core.Persistence.Repositories /// internal class MemberTypeRepository : ContentTypeBaseRepository, IMemberTypeRepository { - public MemberTypeRepository(IDatabaseUnitOfWork work) + public MemberTypeRepository(IDatabaseUnitOfWork work) : base(work) { } - public MemberTypeRepository(IDatabaseUnitOfWork work, IRepositoryCacheProvider cache) + public MemberTypeRepository(IDatabaseUnitOfWork work, IRepositoryCacheProvider cache) : base(work, cache) { } - #region Overrides of RepositoryBase + #region Overrides of RepositoryBase protected override IMemberType PerformGet(int id) { @@ -40,13 +40,13 @@ namespace Umbraco.Core.Persistence.Repositories Database.Fetch( new PropertyTypePropertyGroupRelator().Map, sql); - if (dtos == null || dtos.Any() == false) - return null; + if (dtos == null || dtos.Any() == false) + return null; - var factory = new MemberTypeReadOnlyFactory(); - var member = factory.BuildEntity(dtos.First()); + var factory = new MemberTypeReadOnlyFactory(); + var member = factory.BuildEntity(dtos.First()); - return member; + return member; } protected override IEnumerable PerformGetAll(params int[] ids) @@ -99,7 +99,7 @@ namespace Umbraco.Core.Persistence.Repositories return sql; } - sql.Select("umbracoNode.*", "cmsContentType.*", "cmsPropertyType.id AS PropertyTypeId", "cmsPropertyType.Alias", + sql.Select("umbracoNode.*", "cmsContentType.*", "cmsPropertyType.id AS PropertyTypeId", "cmsPropertyType.Alias", "cmsPropertyType.Name", "cmsPropertyType.Description", "cmsPropertyType.helpText", "cmsPropertyType.mandatory", "cmsPropertyType.validationRegExp", "cmsPropertyType.dataTypeId", "cmsPropertyType.sortOrder AS PropertyTypeSortOrder", "cmsPropertyType.propertyTypeGroupId AS PropertyTypesGroupId", "cmsMemberType.memberCanEdit", "cmsMemberType.viewOnProfile", @@ -179,10 +179,10 @@ namespace Umbraco.Core.Persistence.Repositories var factory = new MemberTypeFactory(NodeObjectTypeId); var dto = factory.BuildDto(entity); - EnsureCorrectDbTypeForBuiltInProperties(entity); + EnsureExplicitDataTypeForBuiltInProperties(entity); PersistNewBaseContentType(dto, entity); - + //Handles the MemberTypeDto (cmsMemberType table) var memberTypeDtos = factory.BuildMemberTypeDtos(entity); foreach (var memberTypeDto in memberTypeDtos) @@ -216,12 +216,12 @@ namespace Umbraco.Core.Persistence.Repositories var factory = new MemberTypeFactory(NodeObjectTypeId); var dto = factory.BuildDto(entity); - EnsureCorrectDbTypeForBuiltInProperties(entity); + EnsureExplicitDataTypeForBuiltInProperties(entity); PersistUpdatedBaseContentType(dto, entity); //Remove existing entries before inserting new ones - Database.Delete("WHERE NodeId = @Id", new {Id = entity.Id}); + Database.Delete("WHERE NodeId = @Id", new { Id = entity.Id }); //Handles the MemberTypeDto (cmsMemberType table) var memberTypeDtos = factory.BuildMemberTypeDtos(entity); @@ -236,11 +236,29 @@ namespace Umbraco.Core.Persistence.Repositories #endregion /// - /// Ensure that all the built-in membership provider properties have their correct db types - /// and property editors assigned. + /// Override so we can specify explicit db type's on any property types that are built-in. + /// + /// + /// + /// + /// + protected override PropertyType CreatePropertyType(Guid dataTypeId, DataTypeDatabaseType dbType, string propertyTypeAlias) + { + //custom property type constructor logic to set explicit dbtype's for built in properties + var stdProps = Constants.Conventions.Member.GetStandardPropertyTypeStubs(); + var propDbType = GetDbTypeForBuiltInProperty(propertyTypeAlias, dbType, stdProps); + return new PropertyType(dataTypeId, propDbType.Result, + //This flag tells the property type that it has an explicit dbtype and that it cannot be changed + // which is what we want for the built-in properties. + propDbType.Success); + } + + /// + /// Ensure that all the built-in membership provider properties have their correct data type + /// and property editors assigned. This occurs prior to saving so that the correct values are persisted. /// /// - private static void EnsureCorrectDbTypeForBuiltInProperties(IContentTypeBase memberType) + private static void EnsureExplicitDataTypeForBuiltInProperties(IContentTypeBase memberType) { var stdProps = Constants.Conventions.Member.GetStandardPropertyTypeStubs(); foreach (var propertyType in memberType.PropertyTypes) @@ -248,7 +266,6 @@ namespace Umbraco.Core.Persistence.Repositories var dbTypeAttempt = GetDbTypeForBuiltInProperty(propertyType.Alias, propertyType.DataTypeDatabaseType, stdProps); if (dbTypeAttempt) { - propertyType.DataTypeDatabaseType = dbTypeAttempt.Result; //this reset's it's current data type reference which will be re-assigned based on the property editor assigned on the next line propertyType.DataTypeDefinitionId = 0; propertyType.DataTypeId = GetPropertyEditorForBuiltInProperty(propertyType.Alias, propertyType.DataTypeId, stdProps).Result; @@ -281,7 +298,7 @@ namespace Umbraco.Core.Persistence.Repositories /// Successful attempt if it was a built in property /// internal static Attempt GetDbTypeForBuiltInProperty( - string propAlias, + string propAlias, DataTypeDatabaseType dbType, Dictionary standardProps) { @@ -307,7 +324,7 @@ namespace Umbraco.Core.Persistence.Repositories /// Successful attempt if it was a built in property /// internal static Attempt GetPropertyEditorForBuiltInProperty( - string propAlias, + string propAlias, Guid propertyEditor, Dictionary standardProps) { diff --git a/src/Umbraco.Core/Persistence/Repositories/PermissionRepository.cs b/src/Umbraco.Core/Persistence/Repositories/PermissionRepository.cs index bb23401488..d3b6a586fe 100644 --- a/src/Umbraco.Core/Persistence/Repositories/PermissionRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/PermissionRepository.cs @@ -117,7 +117,10 @@ namespace Umbraco.Core.Persistence.Repositories /// /// /// - public void AssignUserPermissions(int userId, IEnumerable permissions, params int[] entityIds) + /// + /// This will first clear the permissions for this user and entities and recreate them + /// + public void ReplaceUserPermissions(int userId, IEnumerable permissions, params int[] entityIds) { var db = _unitOfWork.Database; using (var trans = db.GetTransaction()) @@ -155,15 +158,18 @@ namespace Umbraco.Core.Persistence.Repositories /// /// /// - /// - /// This will first clear the permissions for this entity then re-create them - /// - public void AssignEntityPermissions(TEntity entity, char permission, IEnumerable userIds) + public void AssignEntityPermission(TEntity entity, char permission, IEnumerable userIds) { var db = _unitOfWork.Database; using (var trans = db.GetTransaction()) { - db.Execute("DELETE FROM umbracoUser2NodePermission WHERE nodeId=@nodeId", new {nodeId = entity.Id}); + db.Execute("DELETE FROM umbracoUser2NodePermission WHERE nodeId=@nodeId AND permission=@permission AND userId in (@userIds)", + new + { + nodeId = entity.Id, + permission = permission.ToString(CultureInfo.InvariantCulture), + userIds = userIds + }); var actions = userIds.Select(id => new User2NodePermissionDto { @@ -192,7 +198,7 @@ namespace Umbraco.Core.Persistence.Repositories /// /// This will first clear the permissions for this entity then re-create them /// - public void AssignEntityPermissions(TEntity entity, IEnumerable> userPermissions) + public void ReplaceEntityPermissions(TEntity entity, IEnumerable> userPermissions) { var db = _unitOfWork.Database; using (var trans = db.GetTransaction()) @@ -206,7 +212,9 @@ namespace Umbraco.Core.Persistence.Repositories UserId = p.Item1 }).ToArray(); - _unitOfWork.Database.BulkInsertRecords(actions); + _unitOfWork.Database.BulkInsertRecords(actions, trans); + + trans.Complete(); //Raise the event AssignedPermissions.RaiseEvent( diff --git a/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs b/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs index 64ac1c36bf..e797057b60 100644 --- a/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs @@ -325,15 +325,15 @@ namespace Umbraco.Core.Persistence.Repositories } /// - /// Assigns the same permission set for a single user to any number of entities + /// Replaces the same permission set for a single user to any number of entities /// /// /// /// - public void AssignUserPermissions(int userId, IEnumerable permissions, params int[] entityIds) + public void ReplaceUserPermissions(int userId, IEnumerable permissions, params int[] entityIds) { var repo = new PermissionRepository(UnitOfWork, _cacheHelper); - repo.AssignUserPermissions(userId, permissions, entityIds); + repo.ReplaceUserPermissions(userId, permissions, entityIds); } #endregion diff --git a/src/Umbraco.Core/Security/UmbracoMembersMembershipProviderBase.cs b/src/Umbraco.Core/Security/UmbracoMembersMembershipProviderBase.cs index ce56c2708e..fc07abc896 100644 --- a/src/Umbraco.Core/Security/UmbracoMembersMembershipProviderBase.cs +++ b/src/Umbraco.Core/Security/UmbracoMembersMembershipProviderBase.cs @@ -6,7 +6,7 @@ namespace Umbraco.Core.Security /// An interface for exposing the content type properties for storing membership data in when /// a membership provider's data is backed by an Umbraco content type. /// - public interface IUmbracoContentTypeMembershipProvider + public interface IUmbracoMemberTypeMembershipProvider { string LockPropertyTypeAlias { get; } diff --git a/src/Umbraco.Core/Services/ContentService.cs b/src/Umbraco.Core/Services/ContentService.cs index ee786659d5..1b5309cc11 100644 --- a/src/Umbraco.Core/Services/ContentService.cs +++ b/src/Umbraco.Core/Services/ContentService.cs @@ -65,12 +65,12 @@ namespace Umbraco.Core.Services /// /// /// - public void AssignContentPermissions(IContent entity, char permission, IEnumerable userIds) + public void AssignContentPermission(IContent entity, char permission, IEnumerable userIds) { var uow = _uowProvider.GetUnitOfWork(); using (var repository = _repositoryFactory.CreateContentRepository(uow)) { - repository.AssignEntityPermissions(entity, permission, userIds); + repository.AssignEntityPermission(entity, permission, userIds); } } diff --git a/src/Umbraco.Core/Services/IContentService.cs b/src/Umbraco.Core/Services/IContentService.cs index 672973a3ca..f26ec77b53 100644 --- a/src/Umbraco.Core/Services/IContentService.cs +++ b/src/Umbraco.Core/Services/IContentService.cs @@ -17,7 +17,7 @@ namespace Umbraco.Core.Services /// /// /// - void AssignContentPermissions(IContent entity, char permission, IEnumerable userIds); + void AssignContentPermission(IContent entity, char permission, IEnumerable userIds); /// /// Gets the list of permissions for the content item diff --git a/src/Umbraco.Core/Services/IMembershipMemberService.cs b/src/Umbraco.Core/Services/IMembershipMemberService.cs index 807b250ea7..35c996f51a 100644 --- a/src/Umbraco.Core/Services/IMembershipMemberService.cs +++ b/src/Umbraco.Core/Services/IMembershipMemberService.cs @@ -48,7 +48,7 @@ namespace Umbraco.Core.Services /// /// /// - T CreateMemberWithIdentity(string username, string email, string password, string memberTypeAlias, bool raiseEvents = true); + T CreateWithIdentity(string username, string email, string password, string memberTypeAlias, bool raiseEvents = true); /// /// Gets the member by the provider key @@ -68,19 +68,19 @@ namespace Umbraco.Core.Services void Delete(T membershipUser); - void Save(T membershipUser, bool raiseEvents = true); + void Save(T entity, bool raiseEvents = true); - void Save(IEnumerable members, bool raiseEvents = true); + void Save(IEnumerable entities, bool raiseEvents = true); - IEnumerable FindMembersByEmail(string emailStringToMatch, int pageIndex, int pageSize, out int totalRecords, StringPropertyMatchType matchType = StringPropertyMatchType.StartsWith); + IEnumerable FindByEmail(string emailStringToMatch, int pageIndex, int pageSize, out int totalRecords, StringPropertyMatchType matchType = StringPropertyMatchType.StartsWith); - IEnumerable FindMembersByUsername(string login, int pageIndex, int pageSize, out int totalRecords, StringPropertyMatchType matchType = StringPropertyMatchType.StartsWith); + IEnumerable FindByUsername(string login, int pageIndex, int pageSize, out int totalRecords, StringPropertyMatchType matchType = StringPropertyMatchType.StartsWith); /// /// Gets the total number of members based on the count type /// /// - int GetMemberCount(MemberCountType countType); + int GetCount(MemberCountType countType); /// /// Gets a list of paged member data @@ -89,6 +89,6 @@ namespace Umbraco.Core.Services /// /// /// - IEnumerable GetAllMembers(int pageIndex, int pageSize, out int totalRecords); + IEnumerable GetAll(int pageIndex, int pageSize, out int totalRecords); } } \ No newline at end of file diff --git a/src/Umbraco.Core/Services/IUserService.cs b/src/Umbraco.Core/Services/IUserService.cs index 772d399dc9..ba401b0e10 100644 --- a/src/Umbraco.Core/Services/IUserService.cs +++ b/src/Umbraco.Core/Services/IUserService.cs @@ -54,12 +54,12 @@ namespace Umbraco.Core.Services IEnumerable GetPermissions(IUser user, params int[] nodeIds); /// - /// Assigns the same permission set for a single user to any number of entities + /// Replaces the same permission set for a single user to any number of entities /// /// /// /// - void AssignUserPermissions(int userId, IEnumerable permissions, params int[] entityIds); + void ReplaceUserPermissions(int userId, IEnumerable permissions, params int[] entityIds); #region User types diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs index eff1b1b3bd..3191baa319 100644 --- a/src/Umbraco.Core/Services/MemberService.cs +++ b/src/Umbraco.Core/Services/MemberService.cs @@ -254,7 +254,7 @@ namespace Umbraco.Core.Services /// /// /// - public IEnumerable FindMembersByEmail(string emailStringToMatch, int pageIndex, int pageSize, out int totalRecords, StringPropertyMatchType matchType = StringPropertyMatchType.StartsWith) + public IEnumerable FindByEmail(string emailStringToMatch, int pageIndex, int pageSize, out int totalRecords, StringPropertyMatchType matchType = StringPropertyMatchType.StartsWith) { var uow = _uowProvider.GetUnitOfWork(); using (var repository = _repositoryFactory.CreateMemberRepository(uow)) @@ -286,7 +286,7 @@ namespace Umbraco.Core.Services } } - public IEnumerable FindMembersByUsername(string login, int pageIndex, int pageSize, out int totalRecords, StringPropertyMatchType matchType = StringPropertyMatchType.StartsWith) + public IEnumerable FindByUsername(string login, int pageIndex, int pageSize, out int totalRecords, StringPropertyMatchType matchType = StringPropertyMatchType.StartsWith) { var uow = _uowProvider.GetUnitOfWork(); using (var repository = _repositoryFactory.CreateMemberRepository(uow)) @@ -527,7 +527,7 @@ namespace Umbraco.Core.Services /// that have their last active date within the Membership.UserIsOnlineTimeWindow (which is in minutes). It isn't exact science /// but that is how MS have made theirs so we'll follow that principal. /// - public int GetMemberCount(MemberCountType countType) + public int GetCount(MemberCountType countType) { using (var repository = _repositoryFactory.CreateMemberRepository(_uowProvider.GetUnitOfWork())) { @@ -567,7 +567,7 @@ namespace Umbraco.Core.Services } - public IEnumerable GetAllMembers(int pageIndex, int pageSize, out int totalRecords) + public IEnumerable GetAll(int pageIndex, int pageSize, out int totalRecords) { var uow = _uowProvider.GetUnitOfWork(); using (var repository = _repositoryFactory.CreateMemberRepository(uow)) @@ -617,7 +617,7 @@ namespace Umbraco.Core.Services /// /// /// - public IMember CreateMemberWithIdentity(string username, string email, string password, string memberTypeAlias, bool raiseEvents = true) + public IMember CreateWithIdentity(string username, string email, string password, string memberTypeAlias, bool raiseEvents = true) { var uow = _uowProvider.GetUnitOfWork(); IMemberType memberType; @@ -716,13 +716,13 @@ namespace Umbraco.Core.Services /// /// Saves an updated Member /// - /// + /// /// - public void Save(IMember member, bool raiseEvents = true) + public void Save(IMember entity, bool raiseEvents = true) { if (raiseEvents) { - if (Saving.IsRaisedEventCancelled(new SaveEventArgs(member), this)) + if (Saving.IsRaisedEventCancelled(new SaveEventArgs(entity), this)) { return; } @@ -732,22 +732,22 @@ namespace Umbraco.Core.Services var uow = _uowProvider.GetUnitOfWork(); using (var repository = _repositoryFactory.CreateMemberRepository(uow)) { - repository.AddOrUpdate(member); + repository.AddOrUpdate(entity); uow.Commit(); - var xml = member.ToXml(); - CreateAndSaveMemberXml(xml, member.Id, uow.Database); + var xml = entity.ToXml(); + CreateAndSaveMemberXml(xml, entity.Id, uow.Database); } if (raiseEvents) - Saved.RaiseEvent(new SaveEventArgs(member, false), this); + Saved.RaiseEvent(new SaveEventArgs(entity, false), this); } - public void Save(IEnumerable members, bool raiseEvents = true) + public void Save(IEnumerable entities, bool raiseEvents = true) { if (raiseEvents) { - if (Saving.IsRaisedEventCancelled(new SaveEventArgs(members), this)) + if (Saving.IsRaisedEventCancelled(new SaveEventArgs(entities), this)) return; } using (new WriteLock(Locker)) @@ -755,7 +755,7 @@ namespace Umbraco.Core.Services var uow = _uowProvider.GetUnitOfWork(); using (var repository = _repositoryFactory.CreateMemberRepository(uow)) { - foreach (var member in members) + foreach (var member in entities) { repository.AddOrUpdate(member); } @@ -763,14 +763,14 @@ namespace Umbraco.Core.Services //commit the whole lot in one go uow.Commit(); - foreach (var member in members) + foreach (var member in entities) { CreateAndSaveMemberXml(member.ToXml(), member.Id, uow.Database); } } if (raiseEvents) - Saved.RaiseEvent(new SaveEventArgs(members, false), this); + Saved.RaiseEvent(new SaveEventArgs(entities, false), this); } } diff --git a/src/Umbraco.Core/Services/NotificationService.cs b/src/Umbraco.Core/Services/NotificationService.cs index 2e4ff7a9ec..b59f672590 100644 --- a/src/Umbraco.Core/Services/NotificationService.cs +++ b/src/Umbraco.Core/Services/NotificationService.cs @@ -58,7 +58,7 @@ namespace Umbraco.Core.Services IContent[] allVersions = null; int totalUsers; - var allUsers = _userService.GetAllMembers(0, int.MaxValue, out totalUsers); + var allUsers = _userService.GetAll(0, int.MaxValue, out totalUsers); foreach (var u in allUsers) { if (u.IsApproved == false) continue; diff --git a/src/Umbraco.Core/Services/UserService.cs b/src/Umbraco.Core/Services/UserService.cs index 04344dd131..c5167b5bce 100644 --- a/src/Umbraco.Core/Services/UserService.cs +++ b/src/Umbraco.Core/Services/UserService.cs @@ -121,7 +121,7 @@ namespace Umbraco.Core.Services } } - public IUser CreateMemberWithIdentity(string username, string email, string password, string memberTypeAlias, bool raiseEvents = true) + public IUser CreateWithIdentity(string username, string email, string password, string memberTypeAlias, bool raiseEvents = true) { var userType = GetUserTypeByAlias(memberTypeAlias); if (userType == null) @@ -220,37 +220,37 @@ namespace Umbraco.Core.Services } } - public void Save(IUser membershipUser, bool raiseEvents = true) + public void Save(IUser entity, bool raiseEvents = true) { if (raiseEvents) { - if (SavingUser.IsRaisedEventCancelled(new SaveEventArgs(membershipUser), this)) + if (SavingUser.IsRaisedEventCancelled(new SaveEventArgs(entity), this)) return; } var uow = _uowProvider.GetUnitOfWork(); using (var repository = _repositoryFactory.CreateUserRepository(uow)) { - repository.AddOrUpdate(membershipUser); + repository.AddOrUpdate(entity); uow.Commit(); } if (raiseEvents) - SavedUser.RaiseEvent(new SaveEventArgs(membershipUser, false), this); + SavedUser.RaiseEvent(new SaveEventArgs(entity, false), this); } - public void Save(IEnumerable members, bool raiseEvents = true) + public void Save(IEnumerable entities, bool raiseEvents = true) { if (raiseEvents) { - if (SavingUser.IsRaisedEventCancelled(new SaveEventArgs(members), this)) + if (SavingUser.IsRaisedEventCancelled(new SaveEventArgs(entities), this)) return; } var uow = _uowProvider.GetUnitOfWork(); using (var repository = _repositoryFactory.CreateUserRepository(uow)) { - foreach (var member in members) + foreach (var member in entities) { repository.AddOrUpdate(member); } @@ -259,10 +259,10 @@ namespace Umbraco.Core.Services } if (raiseEvents) - SavedUser.RaiseEvent(new SaveEventArgs(members, false), this); + SavedUser.RaiseEvent(new SaveEventArgs(entities, false), this); } - public IEnumerable FindMembersByEmail(string emailStringToMatch, int pageIndex, int pageSize, out int totalRecords, StringPropertyMatchType matchType = StringPropertyMatchType.StartsWith) + public IEnumerable FindByEmail(string emailStringToMatch, int pageIndex, int pageSize, out int totalRecords, StringPropertyMatchType matchType = StringPropertyMatchType.StartsWith) { var uow = _uowProvider.GetUnitOfWork(); using (var repository = _repositoryFactory.CreateUserRepository(uow)) @@ -294,7 +294,7 @@ namespace Umbraco.Core.Services } } - public IEnumerable FindMembersByUsername(string login, int pageIndex, int pageSize, out int totalRecords, StringPropertyMatchType matchType = StringPropertyMatchType.StartsWith) + public IEnumerable FindByUsername(string login, int pageIndex, int pageSize, out int totalRecords, StringPropertyMatchType matchType = StringPropertyMatchType.StartsWith) { var uow = _uowProvider.GetUnitOfWork(); using (var repository = _repositoryFactory.CreateUserRepository(uow)) @@ -326,7 +326,7 @@ namespace Umbraco.Core.Services } } - public int GetMemberCount(MemberCountType countType) + public int GetCount(MemberCountType countType) { using (var repository = _repositoryFactory.CreateUserRepository(_uowProvider.GetUnitOfWork())) { @@ -362,7 +362,7 @@ namespace Umbraco.Core.Services } } - public IEnumerable GetAllMembers(int pageIndex, int pageSize, out int totalRecords) + public IEnumerable GetAll(int pageIndex, int pageSize, out int totalRecords) { var uow = _uowProvider.GetUnitOfWork(); using (var repository = _repositoryFactory.CreateUserRepository(uow)) @@ -401,17 +401,17 @@ namespace Umbraco.Core.Services } /// - /// Assigns the same permission set for a single user to any number of entities + /// Replaces the same permission set for a single user to any number of entities /// /// /// /// - public void AssignUserPermissions(int userId, IEnumerable permissions, params int[] entityIds) + public void ReplaceUserPermissions(int userId, IEnumerable permissions, params int[] entityIds) { var uow = _uowProvider.GetUnitOfWork(); using (var repository = _repositoryFactory.CreateUserRepository(uow)) { - repository.AssignUserPermissions(userId, permissions, entityIds); + repository.ReplaceUserPermissions(userId, permissions, entityIds); } } diff --git a/src/Umbraco.Tests/App.config b/src/Umbraco.Tests/App.config index 321da0e17d..43b0da67a4 100644 --- a/src/Umbraco.Tests/App.config +++ b/src/Umbraco.Tests/App.config @@ -1,4 +1,4 @@ - + @@ -71,9 +71,9 @@ - + - + @@ -91,4 +91,36 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Umbraco.Tests/Membership/UmbracoServiceMembershipProviderTests.cs b/src/Umbraco.Tests/Membership/UmbracoServiceMembershipProviderTests.cs index b39bdeeab2..0053dc758e 100644 --- a/src/Umbraco.Tests/Membership/UmbracoServiceMembershipProviderTests.cs +++ b/src/Umbraco.Tests/Membership/UmbracoServiceMembershipProviderTests.cs @@ -94,7 +94,7 @@ namespace Umbraco.Tests.Membership mServiceMock.Setup(service => service.GetByEmail("test@test.com")).Returns(() => null); mServiceMock.Setup(service => service.GetDefaultMemberType()).Returns("Member"); mServiceMock.Setup( - service => service.CreateMemberWithIdentity(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + service => service.CreateWithIdentity(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) .Callback((string u, string e, string p, string m, bool b) => { createdMember = new Member("test", e, u, p, memberType); @@ -125,7 +125,7 @@ namespace Umbraco.Tests.Membership mServiceMock.Setup(service => service.GetByEmail("test@test.com")).Returns(() => null); mServiceMock.Setup(service => service.GetDefaultMemberType()).Returns("Member"); mServiceMock.Setup( - service => service.CreateMemberWithIdentity(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + service => service.CreateWithIdentity(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) .Callback((string u, string e, string p, string m, bool b) => { createdMember = new Member("test", e, u, p, memberType); @@ -158,7 +158,7 @@ namespace Umbraco.Tests.Membership mServiceMock.Setup(service => service.GetByEmail("test@test.com")).Returns(() => null); mServiceMock.Setup(service => service.GetDefaultMemberType()).Returns("Member"); mServiceMock.Setup( - service => service.CreateMemberWithIdentity(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + service => service.CreateWithIdentity(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) .Callback((string u, string e, string p, string m, bool b) => { createdMember = new Member("test", e, u, p, memberType); diff --git a/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs index cb0eb78aa2..c4b848bdaa 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs @@ -70,7 +70,7 @@ namespace Umbraco.Tests.Persistence.Repositories unitOfWork.Commit(); // Act - repository.AssignEntityPermissions(parentPage, 'A', new int[] { 0 }); + repository.AssignEntityPermission(parentPage, 'A', new int[] { 0 }); var childPage = MockedContent.CreateSimpleContent(contentType, "child", parentPage); repository.AddOrUpdate(childPage); unitOfWork.Commit(); diff --git a/src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs index e16cee6a68..91d54ea650 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs @@ -61,7 +61,7 @@ namespace Umbraco.Tests.Persistence.Repositories var standardProps = Constants.Conventions.Member.GetStandardPropertyTypeStubs(); Assert.That(sut, Is.Not.Null); - Assert.That(sut.PropertyGroups.Count(), Is.EqualTo(1)); + Assert.That(sut.PropertyGroups.Count(), Is.EqualTo(2)); Assert.That(sut.PropertyTypes.Count(), Is.EqualTo(3 + standardProps.Count)); Assert.That(sut.PropertyGroups.Any(x => x.HasIdentity == false || x.Id == 0), Is.False); @@ -149,7 +149,7 @@ namespace Umbraco.Tests.Persistence.Repositories memberType = repository.Get(memberType.Id); Assert.That(memberType.PropertyTypes.Count(), Is.EqualTo(3 + Constants.Conventions.Member.GetStandardPropertyTypeStubs().Count)); - Assert.That(memberType.PropertyGroups.Count(), Is.EqualTo(1)); + Assert.That(memberType.PropertyGroups.Count(), Is.EqualTo(2)); } } diff --git a/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs b/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs index 4b13acf7ee..794c9b0401 100644 --- a/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs +++ b/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs @@ -79,7 +79,8 @@ namespace Umbraco.Tests.Routing var docRequest = new PublishedContentRequest(routingContext.UmbracoContext.CleanedUmbracoUrl, routingContext) { PublishedContent = routingContext.UmbracoContext.ContentCache.GetById(1174), - TemplateModel = template + TemplateModel = template, + RenderingEngine = RenderingEngine.Mvc }; var handler = new RenderRouteHandler(new TestControllerFactory(), routingContext.UmbracoContext); diff --git a/src/Umbraco.Tests/Services/MemberServiceTests.cs b/src/Umbraco.Tests/Services/MemberServiceTests.cs index 1176e9bd44..b26373ef86 100644 --- a/src/Umbraco.Tests/Services/MemberServiceTests.cs +++ b/src/Umbraco.Tests/Services/MemberServiceTests.cs @@ -5,6 +5,7 @@ using Umbraco.Core; using Umbraco.Core.Models; using Umbraco.Core.Models.Membership; using Umbraco.Core.Models.Rdbms; +using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Services; using Umbraco.Tests.TestHelpers.Entities; @@ -380,7 +381,7 @@ namespace Umbraco.Tests.Services ServiceContext.MemberService.Save(members); int totalRecs; - var found = ServiceContext.MemberService.GetAllMembers(0, 2, out totalRecs); + var found = ServiceContext.MemberService.GetAll(0, 2, out totalRecs); Assert.AreEqual(2, found.Count()); Assert.AreEqual(10, totalRecs); @@ -400,7 +401,7 @@ namespace Umbraco.Tests.Services ServiceContext.MemberService.Save(customMember); int totalRecs; - var found = ServiceContext.MemberService.FindMembersByEmail("tes", 0, 100, out totalRecs, StringPropertyMatchType.StartsWith); + var found = ServiceContext.MemberService.FindByEmail("tes", 0, 100, out totalRecs, StringPropertyMatchType.StartsWith); Assert.AreEqual(10, found.Count()); } @@ -417,7 +418,7 @@ namespace Umbraco.Tests.Services ServiceContext.MemberService.Save(customMember); int totalRecs; - var found = ServiceContext.MemberService.FindMembersByEmail("test.com", 0, 100, out totalRecs, StringPropertyMatchType.EndsWith); + var found = ServiceContext.MemberService.FindByEmail("test.com", 0, 100, out totalRecs, StringPropertyMatchType.EndsWith); Assert.AreEqual(11, found.Count()); } @@ -434,7 +435,7 @@ namespace Umbraco.Tests.Services ServiceContext.MemberService.Save(customMember); int totalRecs; - var found = ServiceContext.MemberService.FindMembersByEmail("test", 0, 100, out totalRecs, StringPropertyMatchType.Contains); + var found = ServiceContext.MemberService.FindByEmail("test", 0, 100, out totalRecs, StringPropertyMatchType.Contains); Assert.AreEqual(11, found.Count()); } @@ -451,7 +452,7 @@ namespace Umbraco.Tests.Services ServiceContext.MemberService.Save(customMember); int totalRecs; - var found = ServiceContext.MemberService.FindMembersByEmail("hello@test.com", 0, 100, out totalRecs, StringPropertyMatchType.Exact); + var found = ServiceContext.MemberService.FindByEmail("hello@test.com", 0, 100, out totalRecs, StringPropertyMatchType.Exact); Assert.AreEqual(1, found.Count()); } @@ -468,7 +469,7 @@ namespace Umbraco.Tests.Services ServiceContext.MemberService.Save(customMember); int totalRecs; - var found = ServiceContext.MemberService.FindMembersByUsername("tes", 0, 100, out totalRecs, StringPropertyMatchType.StartsWith); + var found = ServiceContext.MemberService.FindByUsername("tes", 0, 100, out totalRecs, StringPropertyMatchType.StartsWith); Assert.AreEqual(10, found.Count()); } @@ -485,7 +486,7 @@ namespace Umbraco.Tests.Services ServiceContext.MemberService.Save(customMember); int totalRecs; - var found = ServiceContext.MemberService.FindMembersByUsername("llo", 0, 100, out totalRecs, StringPropertyMatchType.EndsWith); + var found = ServiceContext.MemberService.FindByUsername("llo", 0, 100, out totalRecs, StringPropertyMatchType.EndsWith); Assert.AreEqual(1, found.Count()); } @@ -502,7 +503,7 @@ namespace Umbraco.Tests.Services ServiceContext.MemberService.Save(customMember); int totalRecs; - var found = ServiceContext.MemberService.FindMembersByUsername("test", 0, 100, out totalRecs, StringPropertyMatchType.Contains); + var found = ServiceContext.MemberService.FindByUsername("test", 0, 100, out totalRecs, StringPropertyMatchType.Contains); Assert.AreEqual(11, found.Count()); } @@ -519,7 +520,7 @@ namespace Umbraco.Tests.Services ServiceContext.MemberService.Save(customMember); int totalRecs; - var found = ServiceContext.MemberService.FindMembersByUsername("hello", 0, 100, out totalRecs, StringPropertyMatchType.Exact); + var found = ServiceContext.MemberService.FindByUsername("hello", 0, 100, out totalRecs, StringPropertyMatchType.Exact); Assert.AreEqual(1, found.Count()); } @@ -849,7 +850,7 @@ namespace Umbraco.Tests.Services var customMember = MockedMember.CreateSimpleMember(memberType, "hello", "hello@test.com", "hello", "hello"); ServiceContext.MemberService.Save(customMember); - var found = ServiceContext.MemberService.GetMemberCount(MemberCountType.All); + var found = ServiceContext.MemberService.GetCount(MemberCountType.All); Assert.AreEqual(11, found); } @@ -866,7 +867,7 @@ namespace Umbraco.Tests.Services customMember.SetValue(Constants.Conventions.Member.LastLoginDate, DateTime.Now); ServiceContext.MemberService.Save(customMember); - var found = ServiceContext.MemberService.GetMemberCount(MemberCountType.Online); + var found = ServiceContext.MemberService.GetCount(MemberCountType.Online); Assert.AreEqual(9, found); } @@ -883,7 +884,7 @@ namespace Umbraco.Tests.Services customMember.SetValue(Constants.Conventions.Member.IsLockedOut, true); ServiceContext.MemberService.Save(customMember); - var found = ServiceContext.MemberService.GetMemberCount(MemberCountType.LockedOut); + var found = ServiceContext.MemberService.GetCount(MemberCountType.LockedOut); Assert.AreEqual(6, found); } @@ -900,7 +901,7 @@ namespace Umbraco.Tests.Services customMember.SetValue(Constants.Conventions.Member.IsApproved, false); ServiceContext.MemberService.Save(customMember); - var found = ServiceContext.MemberService.GetMemberCount(MemberCountType.Approved); + var found = ServiceContext.MemberService.GetCount(MemberCountType.Approved); Assert.AreEqual(5, found); } @@ -924,5 +925,41 @@ namespace Umbraco.Tests.Services Assert.IsTrue(found.Comments.IsNullOrWhiteSpace()); } + /// + /// Because we are forcing some of the built-ins to be Labels which have an underlying db type as nvarchar but we need + /// to ensure that the dates/int get saved to the correct column anyways. + /// + [Test] + public void Setting_DateTime_Property_On_Built_In_Member_Property_Saves_To_Correct_Column() + { + IMemberType memberType = MockedContentTypes.CreateSimpleMemberType(); + ServiceContext.MemberTypeService.Save(memberType); + var member = MockedMember.CreateSimpleMember(memberType, "test", "test@test.com", "test", "test"); + var date = DateTime.Now; + member.LastLoginDate = DateTime.Now; + ServiceContext.MemberService.Save(member); + + var result = ServiceContext.MemberService.GetById(member.Id); + Assert.AreEqual( + date.TruncateTo(DateTimeExtensions.DateTruncate.Second), + result.LastLoginDate.TruncateTo(DateTimeExtensions.DateTruncate.Second)); + + //now ensure the col is correct + var sql = new Sql().Select("cmsPropertyData.*") + .From() + .InnerJoin() + .On(dto => dto.PropertyTypeId, dto => dto.Id) + .Where(dto => dto.NodeId == member.Id) + .Where(dto => dto.Alias == Constants.Conventions.Member.LastLoginDate); + + var colResult = DatabaseContext.Database.Fetch(sql); + + Assert.AreEqual(1, colResult.Count); + Assert.IsTrue(colResult.First().Date.HasValue); + Assert.IsFalse(colResult.First().Integer.HasValue); + Assert.IsNull(colResult.First().Text); + Assert.IsNull(colResult.First().VarChar); + } + } } \ No newline at end of file diff --git a/src/Umbraco.Tests/Services/UserServiceTests.cs b/src/Umbraco.Tests/Services/UserServiceTests.cs index 5a76ffc4bb..a56736774c 100644 --- a/src/Umbraco.Tests/Services/UserServiceTests.cs +++ b/src/Umbraco.Tests/Services/UserServiceTests.cs @@ -76,14 +76,14 @@ namespace Umbraco.Tests.Services MockedContent.CreateSimpleContent(contentType) }; ServiceContext.ContentService.Save(content); - ServiceContext.ContentService.AssignContentPermissions(content.ElementAt(0), ActionBrowse.Instance.Letter, new int[] { user.Id }); - ServiceContext.ContentService.AssignContentPermissions(content.ElementAt(0), ActionDelete.Instance.Letter, new int[] { user.Id }); - ServiceContext.ContentService.AssignContentPermissions(content.ElementAt(0), ActionMove.Instance.Letter, new int[] { user.Id }); + ServiceContext.ContentService.AssignContentPermission(content.ElementAt(0), ActionBrowse.Instance.Letter, new int[] { user.Id }); + ServiceContext.ContentService.AssignContentPermission(content.ElementAt(0), ActionDelete.Instance.Letter, new int[] { user.Id }); + ServiceContext.ContentService.AssignContentPermission(content.ElementAt(0), ActionMove.Instance.Letter, new int[] { user.Id }); - ServiceContext.ContentService.AssignContentPermissions(content.ElementAt(1), ActionBrowse.Instance.Letter, new int[] { user.Id }); - ServiceContext.ContentService.AssignContentPermissions(content.ElementAt(1), ActionDelete.Instance.Letter, new int[] { user.Id }); + ServiceContext.ContentService.AssignContentPermission(content.ElementAt(1), ActionBrowse.Instance.Letter, new int[] { user.Id }); + ServiceContext.ContentService.AssignContentPermission(content.ElementAt(1), ActionDelete.Instance.Letter, new int[] { user.Id }); - ServiceContext.ContentService.AssignContentPermissions(content.ElementAt(2), ActionBrowse.Instance.Letter, new int[] { user.Id }); + ServiceContext.ContentService.AssignContentPermission(content.ElementAt(2), ActionBrowse.Instance.Letter, new int[] { user.Id }); // Act var permissions = userService.GetPermissions(user, content.ElementAt(0).Id, content.ElementAt(1).Id, content.ElementAt(2).Id); @@ -191,7 +191,7 @@ namespace Umbraco.Tests.Services ServiceContext.UserService.Save(customUser); int totalRecs; - var found = ServiceContext.UserService.FindMembersByEmail("tes", 0, 100, out totalRecs, StringPropertyMatchType.StartsWith); + var found = ServiceContext.UserService.FindByEmail("tes", 0, 100, out totalRecs, StringPropertyMatchType.StartsWith); Assert.AreEqual(10, found.Count()); } @@ -209,7 +209,7 @@ namespace Umbraco.Tests.Services ServiceContext.UserService.Save(customUser); int totalRecs; - var found = ServiceContext.UserService.FindMembersByEmail("test.com", 0, 100, out totalRecs, StringPropertyMatchType.EndsWith); + var found = ServiceContext.UserService.FindByEmail("test.com", 0, 100, out totalRecs, StringPropertyMatchType.EndsWith); Assert.AreEqual(11, found.Count()); } @@ -227,7 +227,7 @@ namespace Umbraco.Tests.Services ServiceContext.UserService.Save(customUser); int totalRecs; - var found = ServiceContext.UserService.FindMembersByEmail("test", 0, 100, out totalRecs, StringPropertyMatchType.Contains); + var found = ServiceContext.UserService.FindByEmail("test", 0, 100, out totalRecs, StringPropertyMatchType.Contains); Assert.AreEqual(11, found.Count()); } @@ -245,7 +245,7 @@ namespace Umbraco.Tests.Services ServiceContext.UserService.Save(customUser); int totalRecs; - var found = ServiceContext.UserService.FindMembersByEmail("hello@test.com", 0, 100, out totalRecs, StringPropertyMatchType.Exact); + var found = ServiceContext.UserService.FindByEmail("hello@test.com", 0, 100, out totalRecs, StringPropertyMatchType.Exact); Assert.AreEqual(1, found.Count()); } @@ -259,7 +259,7 @@ namespace Umbraco.Tests.Services ServiceContext.UserService.Save(users); int totalRecs; - var found = ServiceContext.UserService.GetAllMembers(0, 2, out totalRecs); + var found = ServiceContext.UserService.GetAll(0, 2, out totalRecs); Assert.AreEqual(2, found.Count()); // + 1 because of the built in admin user @@ -278,7 +278,7 @@ namespace Umbraco.Tests.Services var customUser = MockedUser.CreateUser(userType); ServiceContext.UserService.Save(customUser); - var found = ServiceContext.UserService.GetMemberCount(MemberCountType.All); + var found = ServiceContext.UserService.GetCount(MemberCountType.All); // + 1 because of the built in admin user Assert.AreEqual(12, found); @@ -309,7 +309,7 @@ namespace Umbraco.Tests.Services customUser.IsLockedOut = true; ServiceContext.UserService.Save(customUser); - var found = ServiceContext.UserService.GetMemberCount(MemberCountType.LockedOut); + var found = ServiceContext.UserService.GetCount(MemberCountType.LockedOut); Assert.AreEqual(6, found); } @@ -326,7 +326,7 @@ namespace Umbraco.Tests.Services customUser.IsApproved = false; ServiceContext.UserService.Save(customUser); - var found = ServiceContext.UserService.GetMemberCount(MemberCountType.Approved); + var found = ServiceContext.UserService.GetCount(MemberCountType.Approved); // + 1 because of the built in admin user Assert.AreEqual(6, found); diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index d807c3fc2e..833d891a0b 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -60,7 +60,7 @@ False - ..\packages\Examine.0.1.53.2941\lib\Examine.dll + ..\packages\Examine.0.1.55.2941\lib\Examine.dll False diff --git a/src/Umbraco.Tests/packages.config b/src/Umbraco.Tests/packages.config index 218eaad3aa..75568278b4 100644 --- a/src/Umbraco.Tests/packages.config +++ b/src/Umbraco.Tests/packages.config @@ -1,7 +1,7 @@  - + diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj index 7cbc525e55..3cfadc34bf 100644 --- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj +++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj @@ -125,7 +125,7 @@ False - ..\packages\Examine.0.1.53.2941\lib\Examine.dll + ..\packages\Examine.0.1.55.2941\lib\Examine.dll ..\packages\ImageProcessor.1.8.3.0\lib\net45\ImageProcessor.dll diff --git a/src/Umbraco.Web.UI/packages.config b/src/Umbraco.Web.UI/packages.config index 0910c927f1..f0ee661ee6 100644 --- a/src/Umbraco.Web.UI/packages.config +++ b/src/Umbraco.Web.UI/packages.config @@ -3,7 +3,7 @@ - + diff --git a/src/Umbraco.Web/Security/MembershipHelper.cs b/src/Umbraco.Web/Security/MembershipHelper.cs index 899661ead6..78f7ab09a8 100644 --- a/src/Umbraco.Web/Security/MembershipHelper.cs +++ b/src/Umbraco.Web/Security/MembershipHelper.cs @@ -227,7 +227,10 @@ namespace Umbraco.Web.Security var memberType = member.ContentType; - foreach (var prop in memberType.PropertyTypes.Where(x => memberType.MemberCanEditProperty(x.Alias))) + var builtIns = Constants.Conventions.Member.GetStandardPropertyTypeStubs().Select(x => x.Key).ToArray(); + + foreach (var prop in memberType.PropertyTypes + .Where(x => builtIns.Contains(x.Alias) == false && memberType.MemberCanEditProperty(x.Alias))) { var value = string.Empty; var propValue = member.Properties[prop.Alias]; diff --git a/src/Umbraco.Web/Security/Providers/MembersMembershipProvider.cs b/src/Umbraco.Web/Security/Providers/MembersMembershipProvider.cs index 0fc70a2ce4..1dc88b4b51 100644 --- a/src/Umbraco.Web/Security/Providers/MembersMembershipProvider.cs +++ b/src/Umbraco.Web/Security/Providers/MembersMembershipProvider.cs @@ -18,7 +18,7 @@ namespace Umbraco.Web.Security.Providers /// /// Custom Membership Provider for Umbraco Members (User authentication for Frontend applications NOT umbraco CMS) /// - public class MembersMembershipProvider : UmbracoServiceMembershipProvider, IUmbracoContentTypeMembershipProvider + public class MembersMembershipProvider : UmbracoMembershipProvider, IUmbracoMemberTypeMembershipProvider { public MembersMembershipProvider() : this(ApplicationContext.Current.Services.MemberService) diff --git a/src/Umbraco.Web/Security/Providers/UmbracoServiceMembershipProvider.cs b/src/Umbraco.Web/Security/Providers/UmbracoMembershipProvider.cs similarity index 93% rename from src/Umbraco.Web/Security/Providers/UmbracoServiceMembershipProvider.cs rename to src/Umbraco.Web/Security/Providers/UmbracoMembershipProvider.cs index 84bd8dc65b..6b6e3e96fa 100644 --- a/src/Umbraco.Web/Security/Providers/UmbracoServiceMembershipProvider.cs +++ b/src/Umbraco.Web/Security/Providers/UmbracoMembershipProvider.cs @@ -19,14 +19,14 @@ namespace Umbraco.Web.Security.Providers /// /// Abstract Membership Provider that users any implementation of IMembershipMemberService{TEntity} service /// - public abstract class UmbracoServiceMembershipProvider : UmbracoMembershipProviderBase + public abstract class UmbracoMembershipProvider : UmbracoMembershipProviderBase where T : IMembershipMemberService where TEntity : class, IMembershipUser { protected IMembershipMemberService MemberService { get; private set; } - protected UmbracoServiceMembershipProvider(IMembershipMemberService memberService) + protected UmbracoMembershipProvider(IMembershipMemberService memberService) { MemberService = memberService; } @@ -134,7 +134,7 @@ namespace Umbraco.Web.Security.Providers if (MemberService.Exists(username)) { status = MembershipCreateStatus.DuplicateUserName; - LogHelper.Warn>("Cannot create member as username already exists: " + username); + LogHelper.Warn>("Cannot create member as username already exists: " + username); return null; } @@ -142,7 +142,7 @@ namespace Umbraco.Web.Security.Providers if (MemberService.GetByEmail(email) != null && RequiresUniqueEmail) { status = MembershipCreateStatus.DuplicateEmail; - LogHelper.Warn>( + LogHelper.Warn>( "Cannot create member as a member with the same email address exists: " + email); return null; } @@ -150,7 +150,7 @@ namespace Umbraco.Web.Security.Providers string salt; var encodedPassword = EncryptOrHashNewPassword(password, out salt); - var member = MemberService.CreateMemberWithIdentity( + var member = MemberService.CreateWithIdentity( username, email, FormatPasswordForStorage(encodedPassword, salt), @@ -199,7 +199,7 @@ namespace Umbraco.Web.Security.Providers /// public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords) { - var byEmail = MemberService.FindMembersByEmail(emailToMatch, pageIndex, pageSize, out totalRecords, StringPropertyMatchType.Wildcard).ToArray(); + var byEmail = MemberService.FindByEmail(emailToMatch, pageIndex, pageSize, out totalRecords, StringPropertyMatchType.Wildcard).ToArray(); var collection = new MembershipUserCollection(); foreach (var m in byEmail) @@ -221,7 +221,7 @@ namespace Umbraco.Web.Security.Providers /// public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords) { - var byEmail = MemberService.FindMembersByUsername(usernameToMatch, pageIndex, pageSize, out totalRecords, StringPropertyMatchType.Wildcard).ToArray(); + var byEmail = MemberService.FindByUsername(usernameToMatch, pageIndex, pageSize, out totalRecords, StringPropertyMatchType.Wildcard).ToArray(); var collection = new MembershipUserCollection(); foreach (var m in byEmail) @@ -244,7 +244,7 @@ namespace Umbraco.Web.Security.Providers { var membersList = new MembershipUserCollection(); - var pagedMembers = MemberService.GetAllMembers(pageIndex, pageSize, out totalRecords); + var pagedMembers = MemberService.GetAll(pageIndex, pageSize, out totalRecords); foreach (var m in pagedMembers) { @@ -266,7 +266,7 @@ namespace Umbraco.Web.Security.Providers /// public override int GetNumberOfUsersOnline() { - return MemberService.GetMemberCount(MemberCountType.Online); + return MemberService.GetCount(MemberCountType.Online); } /// @@ -463,7 +463,7 @@ namespace Umbraco.Web.Security.Providers if (RequiresUniqueEmail && user.Email.Trim().IsNullOrWhiteSpace() == false) { int totalRecs; - var byEmail = MemberService.FindMembersByEmail(user.Email.Trim(), 0, int.MaxValue, out totalRecs, StringPropertyMatchType.Exact); + var byEmail = MemberService.FindByEmail(user.Email.Trim(), 0, int.MaxValue, out totalRecs, StringPropertyMatchType.Exact); if (byEmail.Count(x => x.Id != m.Id) > 0) { throw new ProviderException(string.Format("A member with the email '{0}' already exists", user.Email)); @@ -498,12 +498,12 @@ namespace Umbraco.Web.Security.Providers if (member.IsApproved == false) { - LogHelper.Info>("Cannot validate member " + username + " because they are not approved"); + LogHelper.Info>("Cannot validate member " + username + " because they are not approved"); return false; } if (member.IsLockedOut) { - LogHelper.Info>("Cannot validate member " + username + " because they are currently locked out"); + LogHelper.Info>("Cannot validate member " + username + " because they are currently locked out"); return false; } @@ -521,7 +521,7 @@ namespace Umbraco.Web.Security.Providers { member.IsLockedOut = true; member.LastLockoutDate = DateTime.Now; - LogHelper.Info>("Member " + username + " is now locked out, max invalid password attempts exceeded"); + LogHelper.Info>("Member " + username + " is now locked out, max invalid password attempts exceeded"); } } else diff --git a/src/Umbraco.Web/Security/Providers/UsersMembershipProvider.cs b/src/Umbraco.Web/Security/Providers/UsersMembershipProvider.cs index e3ede8f6d8..2dbce6a350 100644 --- a/src/Umbraco.Web/Security/Providers/UsersMembershipProvider.cs +++ b/src/Umbraco.Web/Security/Providers/UsersMembershipProvider.cs @@ -13,7 +13,7 @@ namespace Umbraco.Web.Security.Providers /// /// Custom Membership Provider for Umbraco Users (User authentication for Umbraco Backend CMS) /// - public class UsersMembershipProvider : UmbracoServiceMembershipProvider, IUsersMembershipProvider + public class UsersMembershipProvider : UmbracoMembershipProvider, IUsersMembershipProvider { public UsersMembershipProvider() diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 55c5b18bb0..797f3a392b 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -1,4 +1,4 @@ - + @@ -112,7 +112,7 @@ False - ..\packages\Examine.0.1.53.2941\lib\Examine.dll + ..\packages\Examine.0.1.55.2941\lib\Examine.dll False @@ -548,7 +548,7 @@ - + diff --git a/src/Umbraco.Web/app.config b/src/Umbraco.Web/app.config index 3d21b70e9c..9890828504 100644 --- a/src/Umbraco.Web/app.config +++ b/src/Umbraco.Web/app.config @@ -1,4 +1,4 @@ - + @@ -25,4 +25,20 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Umbraco.Web/packages.config b/src/Umbraco.Web/packages.config index 26a530678d..6f10577a4b 100644 --- a/src/Umbraco.Web/packages.config +++ b/src/Umbraco.Web/packages.config @@ -3,7 +3,7 @@ - + diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/developer/Xslt/xsltInsertValueOf.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/developer/Xslt/xsltInsertValueOf.aspx.cs index b8fbdf25a5..f2298089a2 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/developer/Xslt/xsltInsertValueOf.aspx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/developer/Xslt/xsltInsertValueOf.aspx.cs @@ -3,6 +3,7 @@ using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; +using System.Linq; using System.Web; using System.Web.SessionState; using System.Web.UI; @@ -10,6 +11,7 @@ using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using Umbraco.Core.Configuration; using umbraco.cms.businesslogic.propertytype; +using Umbraco.Core; namespace umbraco.developer { @@ -35,7 +37,9 @@ namespace umbraco.developer // generic properties string existingGenProps = ","; - foreach (PropertyType pt in PropertyType.GetAll()) + var exclude = Constants.Conventions.Member.GetStandardPropertyTypeStubs().Select(x => x.Key).ToArray(); + foreach (PropertyType pt in PropertyType.GetAll().Where(x => exclude.Contains(x.Alias) == false)) + { if (!existingGenProps.Contains("," + pt.Alias + ",")) { if(UmbracoConfig.For.UmbracoSettings().Content.UseLegacyXmlSchema) @@ -45,6 +49,8 @@ namespace umbraco.developer existingGenProps += pt.Alias + ","; } + } + preValuesSource.Sort(); preValues.DataSource = preValuesSource; @@ -57,24 +63,5 @@ namespace umbraco.developer valueOf.Text = Request.QueryString["value"]; } - #region Web Form Designer generated code - override protected void OnInit(EventArgs e) - { - // - // CODEGEN: This call is required by the ASP.NET Web Form Designer. - // - InitializeComponent(); - base.OnInit(e); - } - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - - } - #endregion } } diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/umbracoField.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/umbracoField.aspx.cs index 3204058780..d875b856e9 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/umbracoField.aspx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/umbracoField.aspx.cs @@ -3,12 +3,15 @@ using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; +using System.Linq; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using Umbraco.Core.Configuration; +using Umbraco.Core; +using Umbraco.Core.Persistence.SqlSyntax; using umbraco.DataLayer; namespace umbraco.dialogs @@ -56,7 +59,13 @@ namespace umbraco.dialogs } else { - fieldSql = "select distinct alias from cmsPropertyType order by alias"; + //exclude built-in memberhip properties from showing up here + var exclude = Constants.Conventions.Member.GetStandardPropertyTypeStubs() + .Select(x => SqlSyntaxContext.SqlSyntaxProvider.GetQuotedValue(x.Key)).ToArray(); + + fieldSql = string.Format( + "select distinct alias from cmsPropertyType where alias not in ({0}) order by alias", + string.Join(",", exclude)); pp_insertField.Text = ui.Text("templateEditor", "chooseField"); } @@ -96,24 +105,6 @@ namespace umbraco.dialogs } - #region Web Form Designer generated code - override protected void OnInit(EventArgs e) - { - // - // CODEGEN: This call is required by the ASP.NET Web Form Designer. - // - InitializeComponent(); - base.OnInit(e); - } - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - } - #endregion /// /// JsInclude1 control. diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/users/UserPermissions.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/users/UserPermissions.cs index 8a5308a24a..33818d43df 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/users/UserPermissions.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/users/UserPermissions.cs @@ -80,14 +80,14 @@ namespace umbraco.cms.presentation.user //if permissions are to be assigned, then assign them if (permissions.Count > 0) { - ApplicationContext.Current.Services.UserService.AssignUserPermissions( + ApplicationContext.Current.Services.UserService.ReplaceUserPermissions( _user.Id, permissions.Select(x => x.Letter), allNodes.ToArray()); } else { //If there are NO permissions for this node, we need to assign the ActionNull permission otherwise //the node will inherit from it's parent. - ApplicationContext.Current.Services.UserService.AssignUserPermissions( + ApplicationContext.Current.Services.UserService.ReplaceUserPermissions( _user.Id, new[] { ActionNull.Instance.Letter }, allNodes.ToArray()); } diff --git a/src/UmbracoExamine.Azure/UmbracoExamine.Azure.csproj b/src/UmbracoExamine.Azure/UmbracoExamine.Azure.csproj index b6334d6a5e..0e163249ba 100644 --- a/src/UmbracoExamine.Azure/UmbracoExamine.Azure.csproj +++ b/src/UmbracoExamine.Azure/UmbracoExamine.Azure.csproj @@ -42,7 +42,7 @@ False - ..\packages\Examine.0.1.53.2941\lib\Examine.dll + ..\packages\Examine.0.1.55.2941\lib\Examine.dll False @@ -88,6 +88,7 @@ + diff --git a/src/UmbracoExamine.Azure/app.config b/src/UmbracoExamine.Azure/app.config new file mode 100644 index 0000000000..e72c720717 --- /dev/null +++ b/src/UmbracoExamine.Azure/app.config @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/UmbracoExamine.Azure/packages.config b/src/UmbracoExamine.Azure/packages.config index f159081ad4..4dce0f43bc 100644 --- a/src/UmbracoExamine.Azure/packages.config +++ b/src/UmbracoExamine.Azure/packages.config @@ -2,7 +2,7 @@ - + diff --git a/src/UmbracoExamine.PDF.Azure/UmbracoExamine.PDF.Azure.csproj b/src/UmbracoExamine.PDF.Azure/UmbracoExamine.PDF.Azure.csproj index 7dc3ae5ae2..56d666f9b2 100644 --- a/src/UmbracoExamine.PDF.Azure/UmbracoExamine.PDF.Azure.csproj +++ b/src/UmbracoExamine.PDF.Azure/UmbracoExamine.PDF.Azure.csproj @@ -42,7 +42,7 @@ False - ..\packages\Examine.0.1.53.2941\lib\Examine.dll + ..\packages\Examine.0.1.55.2941\lib\Examine.dll False @@ -89,6 +89,7 @@ + diff --git a/src/UmbracoExamine.PDF.Azure/app.config b/src/UmbracoExamine.PDF.Azure/app.config new file mode 100644 index 0000000000..e72c720717 --- /dev/null +++ b/src/UmbracoExamine.PDF.Azure/app.config @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/UmbracoExamine.PDF.Azure/packages.config b/src/UmbracoExamine.PDF.Azure/packages.config index f159081ad4..4dce0f43bc 100644 --- a/src/UmbracoExamine.PDF.Azure/packages.config +++ b/src/UmbracoExamine.PDF.Azure/packages.config @@ -2,7 +2,7 @@ - + diff --git a/src/UmbracoExamine.PDF/UmbracoExamine.PDF.csproj b/src/UmbracoExamine.PDF/UmbracoExamine.PDF.csproj index 1c65905ee9..217c735bc5 100644 --- a/src/UmbracoExamine.PDF/UmbracoExamine.PDF.csproj +++ b/src/UmbracoExamine.PDF/UmbracoExamine.PDF.csproj @@ -48,7 +48,7 @@ False - ..\packages\Examine.0.1.53.2941\lib\Examine.dll + ..\packages\Examine.0.1.55.2941\lib\Examine.dll ..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll @@ -78,6 +78,7 @@ + diff --git a/src/UmbracoExamine.PDF/app.config b/src/UmbracoExamine.PDF/app.config new file mode 100644 index 0000000000..e72c720717 --- /dev/null +++ b/src/UmbracoExamine.PDF/app.config @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/UmbracoExamine.PDF/packages.config b/src/UmbracoExamine.PDF/packages.config index 0ea9c20ae7..1169a8ab9c 100644 --- a/src/UmbracoExamine.PDF/packages.config +++ b/src/UmbracoExamine.PDF/packages.config @@ -1,6 +1,6 @@  - + diff --git a/src/UmbracoExamine/UmbracoExamine.csproj b/src/UmbracoExamine/UmbracoExamine.csproj index b6e8292094..5a0df8800a 100644 --- a/src/UmbracoExamine/UmbracoExamine.csproj +++ b/src/UmbracoExamine/UmbracoExamine.csproj @@ -84,7 +84,7 @@ False - ..\packages\Examine.0.1.53.2941\lib\Examine.dll + ..\packages\Examine.0.1.55.2941\lib\Examine.dll False @@ -171,6 +171,7 @@ + diff --git a/src/UmbracoExamine/app.config b/src/UmbracoExamine/app.config new file mode 100644 index 0000000000..e72c720717 --- /dev/null +++ b/src/UmbracoExamine/app.config @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/UmbracoExamine/packages.config b/src/UmbracoExamine/packages.config index 1bb39ddebc..e923fba924 100644 --- a/src/UmbracoExamine/packages.config +++ b/src/UmbracoExamine/packages.config @@ -1,6 +1,6 @@  - + \ No newline at end of file diff --git a/src/umbraco.MacroEngines/RazorDynamicNode/DynamicNode.cs b/src/umbraco.MacroEngines/RazorDynamicNode/DynamicNode.cs index b46187ef94..6bcdf16cc3 100644 --- a/src/umbraco.MacroEngines/RazorDynamicNode/DynamicNode.cs +++ b/src/umbraco.MacroEngines/RazorDynamicNode/DynamicNode.cs @@ -683,8 +683,8 @@ namespace umbraco.MacroEngines { //if we cannot get with the current alias, try changing it's case attempt = alias[0].IsUpperCase() - ? getMember(alias.ToCleanString(CleanStringType.Ascii | CleanStringType.Alias | CleanStringType.CamelCase)) - : getMember(alias.ToCleanString(CleanStringType.Ascii | CleanStringType.Alias | CleanStringType.PascalCase)); + ? getMember(alias.ToCleanString(CleanStringType.Ascii | CleanStringType.ConvertCase | CleanStringType.CamelCase)) + : getMember(alias.ToCleanString(CleanStringType.Ascii | CleanStringType.ConvertCase | CleanStringType.PascalCase)); } return attempt.Success ? attempt.Result : null; diff --git a/src/umbraco.MacroEngines/packages.config b/src/umbraco.MacroEngines/packages.config index d321df1e85..f608422148 100644 --- a/src/umbraco.MacroEngines/packages.config +++ b/src/umbraco.MacroEngines/packages.config @@ -1,6 +1,6 @@  - + diff --git a/src/umbraco.MacroEngines/umbraco.MacroEngines.csproj b/src/umbraco.MacroEngines/umbraco.MacroEngines.csproj index e2dffc276a..04cb76a544 100644 --- a/src/umbraco.MacroEngines/umbraco.MacroEngines.csproj +++ b/src/umbraco.MacroEngines/umbraco.MacroEngines.csproj @@ -47,7 +47,7 @@ False - ..\packages\Examine.0.1.53.2941\lib\Examine.dll + ..\packages\Examine.0.1.55.2941\lib\Examine.dll False diff --git a/src/umbraco.businesslogic/User.cs b/src/umbraco.businesslogic/User.cs index e47022e863..f827e76bc4 100644 --- a/src/umbraco.businesslogic/User.cs +++ b/src/umbraco.businesslogic/User.cs @@ -341,7 +341,7 @@ namespace umbraco.BusinessLogic public static User[] getAll() { int totalRecs; - var users = ApplicationContext.Current.Services.UserService.GetAllMembers( + var users = ApplicationContext.Current.Services.UserService.GetAll( 0, int.MaxValue, out totalRecs); return users.Select(x => new User(x)) @@ -390,14 +390,14 @@ namespace umbraco.BusinessLogic int totalRecs; if (useExactMatch) { - return ApplicationContext.Current.Services.UserService.FindMembersByEmail( + return ApplicationContext.Current.Services.UserService.FindByEmail( email, 0, int.MaxValue, out totalRecs, StringPropertyMatchType.Exact) .Select(x => new User(x)) .ToArray(); } else { - return ApplicationContext.Current.Services.UserService.FindMembersByEmail( + return ApplicationContext.Current.Services.UserService.FindByEmail( string.Format("%{0}%", email), 0, int.MaxValue, out totalRecs, StringPropertyMatchType.Wildcard) .Select(x => new User(x)) .ToArray(); @@ -430,14 +430,14 @@ namespace umbraco.BusinessLogic int totalRecs; if (partialMatch) { - return ApplicationContext.Current.Services.UserService.FindMembersByUsername( + return ApplicationContext.Current.Services.UserService.FindByUsername( string.Format("%{0}%", login), 0, int.MaxValue, out totalRecs, StringPropertyMatchType.Wildcard) .Select(x => new User(x)) .ToArray(); } else { - return ApplicationContext.Current.Services.UserService.FindMembersByUsername( + return ApplicationContext.Current.Services.UserService.FindByUsername( login, 0, int.MaxValue, out totalRecs, StringPropertyMatchType.Exact) .Select(x => new User(x)) .ToArray(); diff --git a/src/umbraco.cms/businesslogic/Permission.cs b/src/umbraco.cms/businesslogic/Permission.cs index 91fb96630e..ba0ad56b14 100644 --- a/src/umbraco.cms/businesslogic/Permission.cs +++ b/src/umbraco.cms/businesslogic/Permission.cs @@ -191,7 +191,7 @@ namespace umbraco.BusinessLogic [MethodImpl(MethodImplOptions.Synchronized)] public static void UpdateCruds(User user, CMSNode node, string permissions) { - ApplicationContext.Current.Services.UserService.AssignUserPermissions( + ApplicationContext.Current.Services.UserService.ReplaceUserPermissions( user.Id, permissions.ToCharArray(), node.Id); diff --git a/src/umbraco.cms/businesslogic/member/Member.cs b/src/umbraco.cms/businesslogic/member/Member.cs index 0f26027fe2..7fd0850bbd 100644 --- a/src/umbraco.cms/businesslogic/member/Member.cs +++ b/src/umbraco.cms/businesslogic/member/Member.cs @@ -114,7 +114,7 @@ namespace umbraco.cms.businesslogic.member public static IEnumerable GetAllAsList() { int totalRecs; - return ApplicationContext.Current.Services.MemberService.GetAllMembers(0, int.MaxValue, out totalRecs) + return ApplicationContext.Current.Services.MemberService.GetAll(0, int.MaxValue, out totalRecs) .Select(x => new Member(x)) .ToArray(); } @@ -154,7 +154,7 @@ namespace umbraco.cms.businesslogic.member public static Member[] getMemberFromFirstLetter(char letter) { int totalRecs; - return ApplicationContext.Current.Services.MemberService.FindMembersByUsername( + return ApplicationContext.Current.Services.MemberService.FindByUsername( letter.ToString(CultureInfo.InvariantCulture), 0, int.MaxValue, out totalRecs, StringPropertyMatchType.StartsWith) .Select(x => new Member(x)) .ToArray(); @@ -171,7 +171,7 @@ namespace umbraco.cms.businesslogic.member } else { - var found = ApplicationContext.Current.Services.MemberService.FindMembersByUsername( + var found = ApplicationContext.Current.Services.MemberService.FindByUsername( usernameToMatch, 0, int.MaxValue, out totalRecs, StringPropertyMatchType.StartsWith); return found.Select(x => new Member(x)).ToArray(); } @@ -291,7 +291,7 @@ namespace umbraco.cms.businesslogic.member return null; int totalRecs; - var found = ApplicationContext.Current.Services.MemberService.FindMembersByEmail( + var found = ApplicationContext.Current.Services.MemberService.FindByEmail( email, 0, int.MaxValue, out totalRecs, StringPropertyMatchType.Exact); return found.Select(x => new Member(x)).ToArray(); diff --git a/src/umbraco.editorControls/app.config b/src/umbraco.editorControls/app.config new file mode 100644 index 0000000000..568750da9c --- /dev/null +++ b/src/umbraco.editorControls/app.config @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/umbraco.editorControls/umbraco.editorControls.csproj b/src/umbraco.editorControls/umbraco.editorControls.csproj index 9a2c47fabd..3e01b3bc73 100644 --- a/src/umbraco.editorControls/umbraco.editorControls.csproj +++ b/src/umbraco.editorControls/umbraco.editorControls.csproj @@ -1,4 +1,4 @@ - + Local @@ -483,6 +483,7 @@ + diff --git a/src/umbraco.providers/members/UmbracoMembershipProvider.cs b/src/umbraco.providers/members/UmbracoMembershipProvider.cs index 2968f95b95..9c78014de9 100644 --- a/src/umbraco.providers/members/UmbracoMembershipProvider.cs +++ b/src/umbraco.providers/members/UmbracoMembershipProvider.cs @@ -30,7 +30,7 @@ namespace umbraco.providers.members /// Custom Membership Provider for Umbraco Members (User authentication for Frontend applications NOT umbraco CMS) /// [Obsolete("This has been superceded by Umbraco.Web.Security.Providers.MembersMembershipProvider")] - public class UmbracoMembershipProvider : UmbracoMembershipProviderBase, IUmbracoContentTypeMembershipProvider + public class UmbracoMembershipProvider : UmbracoMembershipProviderBase, IUmbracoMemberTypeMembershipProvider { public UmbracoMembershipProvider() @@ -351,7 +351,7 @@ namespace umbraco.providers.members /// public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords) { - var byEmail = ApplicationContext.Current.Services.MemberService.FindMembersByEmail(emailToMatch, pageIndex, pageSize, out totalRecords, StringPropertyMatchType.Wildcard).ToArray(); + var byEmail = ApplicationContext.Current.Services.MemberService.FindByEmail(emailToMatch, pageIndex, pageSize, out totalRecords, StringPropertyMatchType.Wildcard).ToArray(); var collection = new MembershipUserCollection(); foreach (var m in byEmail) @@ -373,7 +373,7 @@ namespace umbraco.providers.members /// public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords) { - var byEmail = ApplicationContext.Current.Services.MemberService.FindMembersByUsername(usernameToMatch, pageIndex, pageSize, out totalRecords, StringPropertyMatchType.Wildcard).ToArray(); + var byEmail = ApplicationContext.Current.Services.MemberService.FindByUsername(usernameToMatch, pageIndex, pageSize, out totalRecords, StringPropertyMatchType.Wildcard).ToArray(); var collection = new MembershipUserCollection(); foreach (var m in byEmail) @@ -396,7 +396,7 @@ namespace umbraco.providers.members { var membersList = new MembershipUserCollection(); - var pagedMembers = ApplicationContext.Current.Services.MemberService.GetAllMembers(pageIndex, pageSize, out totalRecords); + var pagedMembers = ApplicationContext.Current.Services.MemberService.GetAll(pageIndex, pageSize, out totalRecords); foreach (var m in pagedMembers) { @@ -413,7 +413,7 @@ namespace umbraco.providers.members /// public override int GetNumberOfUsersOnline() { - return ApplicationContext.Current.Services.MemberService.GetMemberCount(MemberCountType.Online); + return ApplicationContext.Current.Services.MemberService.GetCount(MemberCountType.Online); } ///