Updates IMemberService with methods to search on string properties with an option to define how to match the string property, adds all supporting unit tests.
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Umbraco.Core.Models;
|
||||
using Umbraco.Core.Persistence.Querying;
|
||||
|
||||
namespace Umbraco.Core.Services
|
||||
{
|
||||
@@ -22,10 +23,13 @@ namespace Umbraco.Core.Services
|
||||
IEnumerable<IMember> GetMembersByMemberType(int memberTypeId);
|
||||
IEnumerable<IMember> GetMembersByGroup(string memberGroupName);
|
||||
IEnumerable<IMember> GetAllMembers(params int[] ids);
|
||||
|
||||
//TODO: Need to get all members that start with a certain letter
|
||||
|
||||
|
||||
void DeleteMembersOfType(int memberTypeId);
|
||||
|
||||
IEnumerable<IMember> GetMembersByPropertyValue(string propertyTypeAlias, string value, StringPropertyMatchType matchType = StringPropertyMatchType.Exact);
|
||||
IEnumerable<IMember> GetMembersByPropertyValue(string propertyTypeAlias, int value);
|
||||
IEnumerable<IMember> GetMembersByPropertyValue(string propertyTypeAlias, bool value);
|
||||
IEnumerable<IMember> GetMembersByPropertyValue(string propertyTypeAlias, DateTime value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -43,6 +47,14 @@ namespace Umbraco.Core.Services
|
||||
/// <returns></returns>
|
||||
bool Exists(string username);
|
||||
|
||||
/// <summary>
|
||||
/// Creates and persists a new member
|
||||
/// </summary>
|
||||
/// <param name="username"></param>
|
||||
/// <param name="email"></param>
|
||||
/// <param name="password"></param>
|
||||
/// <param name="memberTypeAlias"></param>
|
||||
/// <returns></returns>
|
||||
IMember CreateMember(string username, string email, string password, string memberTypeAlias);
|
||||
|
||||
IMember GetById(object id);
|
||||
@@ -55,6 +67,10 @@ namespace Umbraco.Core.Services
|
||||
|
||||
void Save(IMember membershipUser, bool raiseEvents = true);
|
||||
|
||||
IEnumerable<IMember> FindMembersByEmail(string emailStringToMatch);
|
||||
void Save(IEnumerable<IMember> members, bool raiseEvents = true);
|
||||
|
||||
IEnumerable<IMember> FindMembersByEmail(string emailStringToMatch, StringPropertyMatchType matchType = StringPropertyMatchType.StartsWith);
|
||||
|
||||
IEnumerable<IMember> FindMembersByUsername(string login, StringPropertyMatchType matchType = StringPropertyMatchType.StartsWith);
|
||||
}
|
||||
}
|
||||
@@ -760,30 +760,31 @@ namespace Umbraco.Core.Services
|
||||
if (Saving.IsRaisedEventCancelled(new SaveEventArgs<IMedia>(medias), this))
|
||||
return;
|
||||
}
|
||||
using (new WriteLock(Locker))
|
||||
{
|
||||
var uow = _uowProvider.GetUnitOfWork();
|
||||
using (var repository = _repositoryFactory.CreateMediaRepository(uow))
|
||||
{
|
||||
foreach (var media in medias)
|
||||
{
|
||||
media.CreatorId = userId;
|
||||
repository.AddOrUpdate(media);
|
||||
}
|
||||
|
||||
var mediaXml = new Dictionary<int, Lazy<XElement>>();
|
||||
var uow = _uowProvider.GetUnitOfWork();
|
||||
using (var repository = _repositoryFactory.CreateMediaRepository(uow))
|
||||
{
|
||||
foreach (var media in medias)
|
||||
{
|
||||
media.CreatorId = userId;
|
||||
repository.AddOrUpdate(media);
|
||||
}
|
||||
//commit the whole lot in one go
|
||||
uow.Commit();
|
||||
|
||||
//commit the whole lot in one go
|
||||
uow.Commit();
|
||||
foreach (var media in medias)
|
||||
{
|
||||
CreateAndSaveMediaXml(media.ToXml(), media.Id, uow.Database);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var media in medias)
|
||||
{
|
||||
CreateAndSaveMediaXml(media.ToXml(), media.Id, uow.Database);
|
||||
}
|
||||
}
|
||||
if (raiseEvents)
|
||||
Saved.RaiseEvent(new SaveEventArgs<IMedia>(medias, false), this);
|
||||
|
||||
if(raiseEvents)
|
||||
Saved.RaiseEvent(new SaveEventArgs<IMedia>(medias, false), this);
|
||||
|
||||
Audit.Add(AuditTypes.Save, "Save Media items performed by user", userId, -1);
|
||||
Audit.Add(AuditTypes.Save, "Save Media items performed by user", userId, -1);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -183,16 +183,61 @@ namespace Umbraco.Core.Services
|
||||
/// Does a search for members that contain the specified string in their email address
|
||||
/// </summary>
|
||||
/// <param name="emailStringToMatch"></param>
|
||||
/// <param name="matchType"></param>
|
||||
/// <returns></returns>
|
||||
public IEnumerable<IMember> FindMembersByEmail(string emailStringToMatch)
|
||||
public IEnumerable<IMember> FindMembersByEmail(string emailStringToMatch, StringPropertyMatchType matchType = StringPropertyMatchType.StartsWith)
|
||||
{
|
||||
var uow = _uowProvider.GetUnitOfWork();
|
||||
using (var repository = _repositoryFactory.CreateMemberRepository(uow))
|
||||
{
|
||||
var query = new Query<IMember>();
|
||||
|
||||
switch (matchType)
|
||||
{
|
||||
case StringPropertyMatchType.Exact:
|
||||
query.Where(member => member.Email.Equals(emailStringToMatch));
|
||||
break;
|
||||
case StringPropertyMatchType.Contains:
|
||||
query.Where(member => member.Email.Contains(emailStringToMatch));
|
||||
break;
|
||||
case StringPropertyMatchType.StartsWith:
|
||||
query.Where(member => member.Email.StartsWith(emailStringToMatch));
|
||||
break;
|
||||
case StringPropertyMatchType.EndsWith:
|
||||
query.Where(member => member.Email.EndsWith(emailStringToMatch));
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException("matchType");
|
||||
}
|
||||
|
||||
query.Where(member => member.Email.Contains(emailStringToMatch));
|
||||
return repository.GetByQuery(query);
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerable<IMember> FindMembersByUsername(string login, StringPropertyMatchType matchType = StringPropertyMatchType.StartsWith)
|
||||
{
|
||||
var uow = _uowProvider.GetUnitOfWork();
|
||||
using (var repository = _repositoryFactory.CreateMemberRepository(uow))
|
||||
{
|
||||
var query = new Query<IMember>();
|
||||
|
||||
switch (matchType)
|
||||
{
|
||||
case StringPropertyMatchType.Exact:
|
||||
query.Where(member => member.Username.Equals(login));
|
||||
break;
|
||||
case StringPropertyMatchType.Contains:
|
||||
query.Where(member => member.Username.Contains(login));
|
||||
break;
|
||||
case StringPropertyMatchType.StartsWith:
|
||||
query.Where(member => member.Username.StartsWith(login));
|
||||
break;
|
||||
case StringPropertyMatchType.EndsWith:
|
||||
query.Where(member => member.Username.EndsWith(login));
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException("matchType");
|
||||
}
|
||||
|
||||
return repository.GetByQuery(query);
|
||||
}
|
||||
@@ -203,17 +248,51 @@ namespace Umbraco.Core.Services
|
||||
/// </summary>
|
||||
/// <param name="propertyTypeAlias"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <param name="matchType"></param>
|
||||
/// <returns></returns>
|
||||
public IEnumerable<IMember> GetMembersByPropertyValue(string propertyTypeAlias, string value)
|
||||
public IEnumerable<IMember> GetMembersByPropertyValue(string propertyTypeAlias, string value, StringPropertyMatchType matchType = StringPropertyMatchType.Exact)
|
||||
{
|
||||
using (var repository = _repositoryFactory.CreateMemberRepository(_uowProvider.GetUnitOfWork()))
|
||||
{
|
||||
var query =
|
||||
Query<IMember>.Builder.Where(
|
||||
x =>
|
||||
((Member)x).PropertyTypeAlias == propertyTypeAlias &&
|
||||
(((Member)x).LongStringPropertyValue.Contains(value) ||
|
||||
((Member)x).ShortStringPropertyValue.Contains(value)));
|
||||
IQuery<IMember> query;
|
||||
|
||||
switch (matchType)
|
||||
{
|
||||
case StringPropertyMatchType.Exact:
|
||||
query =
|
||||
Query<IMember>.Builder.Where(
|
||||
x =>
|
||||
((Member) x).PropertyTypeAlias == propertyTypeAlias &&
|
||||
(((Member)x).LongStringPropertyValue.SqlEquals(value, TextColumnType.NText) ||
|
||||
((Member)x).ShortStringPropertyValue.SqlEquals(value, TextColumnType.NVarchar)));
|
||||
break;
|
||||
case StringPropertyMatchType.Contains:
|
||||
query =
|
||||
Query<IMember>.Builder.Where(
|
||||
x =>
|
||||
((Member) x).PropertyTypeAlias == propertyTypeAlias &&
|
||||
(((Member)x).LongStringPropertyValue.SqlContains(value, TextColumnType.NText) ||
|
||||
((Member)x).ShortStringPropertyValue.SqlContains(value, TextColumnType.NVarchar)));
|
||||
break;
|
||||
case StringPropertyMatchType.StartsWith:
|
||||
query =
|
||||
Query<IMember>.Builder.Where(
|
||||
x =>
|
||||
((Member) x).PropertyTypeAlias == propertyTypeAlias &&
|
||||
(((Member)x).LongStringPropertyValue.SqlStartsWith(value, TextColumnType.NText) ||
|
||||
((Member)x).ShortStringPropertyValue.SqlStartsWith(value, TextColumnType.NVarchar)));
|
||||
break;
|
||||
case StringPropertyMatchType.EndsWith:
|
||||
query =
|
||||
Query<IMember>.Builder.Where(
|
||||
x =>
|
||||
((Member) x).PropertyTypeAlias == propertyTypeAlias &&
|
||||
(((Member)x).LongStringPropertyValue.SqlEndsWith(value, TextColumnType.NText) ||
|
||||
((Member)x).ShortStringPropertyValue.SqlEndsWith(value, TextColumnType.NVarchar)));
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException("matchType");
|
||||
}
|
||||
|
||||
var members = repository.GetByQuery(query);
|
||||
return members;
|
||||
@@ -352,7 +431,7 @@ namespace Umbraco.Core.Services
|
||||
{
|
||||
using (var repository = _repositoryFactory.CreateMemberRepository(_uowProvider.GetUnitOfWork()))
|
||||
{
|
||||
var query = Query<IMember>.Builder.Where(x => x.Email == email);
|
||||
var query = Query<IMember>.Builder.Where(x => x.Email.Equals(email));
|
||||
var member = repository.GetByQuery(query).FirstOrDefault();
|
||||
|
||||
return member;
|
||||
@@ -381,12 +460,17 @@ namespace Umbraco.Core.Services
|
||||
/// <param name="member"></param>
|
||||
public void Delete(IMember member)
|
||||
{
|
||||
if (Deleting.IsRaisedEventCancelled(new DeleteEventArgs<IMember>(member), this))
|
||||
return;
|
||||
|
||||
var uow = _uowProvider.GetUnitOfWork();
|
||||
using (var repository = _repositoryFactory.CreateMemberRepository(uow))
|
||||
{
|
||||
repository.Delete(member);
|
||||
uow.Commit();
|
||||
}
|
||||
|
||||
Deleted.RaiseEvent(new DeleteEventArgs<IMember>(member, false), this);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -416,6 +500,37 @@ namespace Umbraco.Core.Services
|
||||
Saved.RaiseEvent(new SaveEventArgs<IMember>(member, false), this);
|
||||
}
|
||||
|
||||
public void Save(IEnumerable<IMember> members, bool raiseEvents = true)
|
||||
{
|
||||
if (raiseEvents)
|
||||
{
|
||||
if (Saving.IsRaisedEventCancelled(new SaveEventArgs<IMember>(members), this))
|
||||
return;
|
||||
}
|
||||
using (new WriteLock(Locker))
|
||||
{
|
||||
var uow = _uowProvider.GetUnitOfWork();
|
||||
using (var repository = _repositoryFactory.CreateMemberRepository(uow))
|
||||
{
|
||||
foreach (var member in members)
|
||||
{
|
||||
repository.AddOrUpdate(member);
|
||||
}
|
||||
|
||||
//commit the whole lot in one go
|
||||
uow.Commit();
|
||||
|
||||
foreach (var member in members)
|
||||
{
|
||||
CreateAndSaveMemberXml(member.ToXml(), member.Id, uow.Database);
|
||||
}
|
||||
}
|
||||
|
||||
if (raiseEvents)
|
||||
Saved.RaiseEvent(new SaveEventArgs<IMember>(members, false), this);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user