Fixes up and implements more if the IMemberService, repository and membership providers (both legacy and what seems to be the new one).
This commit is contained in:
@@ -99,6 +99,10 @@ namespace Umbraco.Core
|
||||
/// </summary>
|
||||
public static class Member
|
||||
{
|
||||
public static readonly string UmbracoMemberProviderName = "UmbracoMembershipProvider";
|
||||
|
||||
public static readonly string UmbracoRoleProviderName = "UmbracoRoleProvider";
|
||||
|
||||
/// <summary>
|
||||
/// Property alias for a Members Password Question
|
||||
/// </summary>
|
||||
|
||||
63
src/Umbraco.Core/Models/PagedResult.cs
Normal file
63
src/Umbraco.Core/Models/PagedResult.cs
Normal file
@@ -0,0 +1,63 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Umbraco.Core.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a paged result for a model collection
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
[DataContract(Name = "pagedCollection", Namespace = "")]
|
||||
public class PagedResult<T>
|
||||
{
|
||||
public PagedResult(long totalItems, long pageNumber, long pageSize)
|
||||
{
|
||||
TotalItems = totalItems;
|
||||
PageNumber = pageNumber;
|
||||
PageSize = pageSize;
|
||||
|
||||
if (pageSize > 0)
|
||||
{
|
||||
TotalPages = (long) Math.Ceiling(totalItems/(Decimal) pageSize);
|
||||
}
|
||||
else
|
||||
{
|
||||
TotalPages = 1;
|
||||
}
|
||||
}
|
||||
|
||||
[DataMember(Name = "pageNumber")]
|
||||
public long PageNumber { get; private set; }
|
||||
|
||||
[DataMember(Name = "pageSize")]
|
||||
public long PageSize { get; private set; }
|
||||
|
||||
[DataMember(Name = "totalPages")]
|
||||
public long TotalPages { get; private set; }
|
||||
|
||||
[DataMember(Name = "totalItems")]
|
||||
public long TotalItems { get; private set; }
|
||||
|
||||
[DataMember(Name = "items")]
|
||||
public IEnumerable<T> Items { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Calculates the skip size based on the paged parameters specified
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Returns 0 if the page number or page size is zero
|
||||
/// </remarks>
|
||||
internal int SkipSize
|
||||
{
|
||||
get
|
||||
{
|
||||
if (PageNumber > 0 && PageSize > 0)
|
||||
{
|
||||
return Convert.ToInt32((PageNumber - 1)*PageSize);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using Umbraco.Core.Logging;
|
||||
using Umbraco.Core.Models.Rdbms;
|
||||
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
|
||||
@@ -17,6 +18,19 @@ namespace Umbraco.Core.Persistence
|
||||
|
||||
internal static event CreateTableEventHandler NewTable;
|
||||
|
||||
/// <summary>
|
||||
/// This will escape single @ symbols for peta poco values so it doesn't think it's a parameter
|
||||
/// </summary>
|
||||
/// <param name="db"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
public static string EscapeAtSymbols(this Database db, string value)
|
||||
{
|
||||
//this fancy regex will only match a single @ not a double, etc...
|
||||
var regex = new Regex("(?<!@)@(?!@)");
|
||||
return regex.Replace(value, "@@");
|
||||
}
|
||||
|
||||
public static void CreateTable<T>(this Database db)
|
||||
where T : new()
|
||||
{
|
||||
|
||||
@@ -11,5 +11,7 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
/// <param name="groupName"></param>
|
||||
/// <returns></returns>
|
||||
IEnumerable<IMember> GetByMemberGroup(string groupName);
|
||||
|
||||
IEnumerable<IMember> GetMembersByEmails(params string[] emails);
|
||||
}
|
||||
}
|
||||
@@ -404,6 +404,28 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
return BuildFromDtos(dtos);
|
||||
}
|
||||
|
||||
public IEnumerable<IMember> GetMembersByEmails(params string[] emails)
|
||||
{
|
||||
var sql = GetBaseQuery(false);
|
||||
if (emails.Any())
|
||||
{
|
||||
var statement = string.Join(" OR ",
|
||||
emails.Select(x =>
|
||||
string.Format(
|
||||
"cmsMember.Email='{0}'",
|
||||
//we have to escape the @ symbol for petapoco to work!! with 2 @@ symbols
|
||||
Database.EscapeAtSymbols(x))));
|
||||
sql.Where(statement);
|
||||
}
|
||||
sql.OrderByDescending<ContentVersionDto>(x => x.VersionDate);
|
||||
|
||||
var dtos =
|
||||
Database.Fetch<MemberReadOnlyDto, PropertyDataReadOnlyDto, MemberReadOnlyDto>(
|
||||
new PropertyDataRelator().Map, sql);
|
||||
|
||||
return BuildFromDtos(dtos);
|
||||
}
|
||||
|
||||
private IMember BuildFromDto(List<MemberReadOnlyDto> dtos)
|
||||
{
|
||||
if (dtos == null || dtos.Any() == false)
|
||||
|
||||
@@ -43,4 +43,5 @@ using System.Security.Permissions;
|
||||
|
||||
[assembly: InternalsVisibleTo("Concorde.Sync")]
|
||||
[assembly: InternalsVisibleTo("Umbraco.Belle")]
|
||||
[assembly: InternalsVisibleTo("Umbraco.VisualStudio")]
|
||||
[assembly: InternalsVisibleTo("Umbraco.VisualStudio")]
|
||||
[assembly: InternalsVisibleTo("umbraco.providers")]
|
||||
@@ -35,5 +35,7 @@ namespace Umbraco.Core.Services
|
||||
void Delete(IMember membershipUser);
|
||||
|
||||
void Save(IMember membershipUser);
|
||||
|
||||
IEnumerable<IMember> GetMembersByEmails(params string[] emails);
|
||||
}
|
||||
}
|
||||
@@ -108,6 +108,14 @@ namespace Umbraco.Core.Services
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerable<IMember> GetMembersByEmails(params string[] emails)
|
||||
{
|
||||
using (var repository = _repositoryFactory.CreateMemberRepository(_uowProvider.GetUnitOfWork()))
|
||||
{
|
||||
return repository.GetMembersByEmails(emails);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a list of Members with a certain string property value
|
||||
/// </summary>
|
||||
|
||||
@@ -209,6 +209,7 @@
|
||||
<Compile Include="Models\Membership\UmbracoMembershipMember.cs" />
|
||||
<Compile Include="Models\Membership\UmbracoMembershipUser.cs" />
|
||||
<Compile Include="Models\MemberType.cs" />
|
||||
<Compile Include="Models\PagedResult.cs" />
|
||||
<Compile Include="Models\Rdbms\MemberReadOnlyDto.cs" />
|
||||
<Compile Include="Models\Rdbms\MemberTypeReadOnlyDto.cs" />
|
||||
<Compile Include="Models\Rdbms\PropertyDataReadOnlyDto.cs" />
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Specialized;
|
||||
using System.Configuration.Provider;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
@@ -8,6 +9,7 @@ using System.Web.Hosting;
|
||||
using System.Web.Security;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Logging;
|
||||
using Umbraco.Core.Models;
|
||||
using Umbraco.Core.Services;
|
||||
using Umbraco.Core.Models.Membership;
|
||||
|
||||
@@ -687,7 +689,16 @@ namespace Umbraco.Web.Security.Providers
|
||||
/// </returns>
|
||||
public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords)
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
var byEmail = MemberService.GetMembersByEmails(emailToMatch).ToArray();
|
||||
totalRecords = byEmail.Length;
|
||||
var pagedResult = new PagedResult<IMember>(totalRecords, pageIndex, pageSize);
|
||||
|
||||
var collection = new MembershipUserCollection();
|
||||
foreach (var m in byEmail.Skip(pagedResult.SkipSize).Take(pageSize))
|
||||
{
|
||||
collection.Add(m.AsConcreteMembershipUser());
|
||||
}
|
||||
return collection;
|
||||
}
|
||||
|
||||
#region Private methods
|
||||
|
||||
@@ -30,8 +30,8 @@ namespace umbraco.cms.businesslogic.member
|
||||
public class Member : Content
|
||||
{
|
||||
#region Constants and static members
|
||||
public static readonly string UmbracoMemberProviderName = "UmbracoMembershipProvider";
|
||||
public static readonly string UmbracoRoleProviderName = "UmbracoRoleProvider";
|
||||
public static readonly string UmbracoMemberProviderName = Constants.Conventions.Member.UmbracoMemberProviderName;
|
||||
public static readonly string UmbracoRoleProviderName = Constants.Conventions.Member.UmbracoRoleProviderName;
|
||||
public static readonly Guid _objectType = new Guid(Constants.ObjectTypes.Member);
|
||||
|
||||
private static readonly object m_Locker = new object();
|
||||
|
||||
@@ -1,20 +1,26 @@
|
||||
#region namespace
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Web.Security;
|
||||
using System.Configuration;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Models;
|
||||
using umbraco.BusinessLogic;
|
||||
using System.Security.Cryptography;
|
||||
using System.Web.Util;
|
||||
using System.Collections.Specialized;
|
||||
using System.Configuration.Provider;
|
||||
using umbraco.cms.businesslogic;
|
||||
using umbraco.cms.businesslogic.member;
|
||||
|
||||
using System.Security;
|
||||
using System.Security.Permissions;
|
||||
using System.Runtime.CompilerServices;
|
||||
using Member = umbraco.cms.businesslogic.member.Member;
|
||||
using MemberType = umbraco.cms.businesslogic.member.MemberType;
|
||||
using Umbraco.Core.Models.Membership;
|
||||
using User = umbraco.BusinessLogic.User;
|
||||
|
||||
#endregion
|
||||
|
||||
namespace umbraco.providers.members
|
||||
@@ -439,7 +445,16 @@ namespace umbraco.providers.members
|
||||
/// </returns>
|
||||
public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords)
|
||||
{
|
||||
throw new Exception("The method or operation is not implemented.");
|
||||
var byEmail = ApplicationContext.Current.Services.MemberService.GetMembersByEmails(emailToMatch).ToArray();
|
||||
totalRecords = byEmail.Length;
|
||||
var pagedResult = new PagedResult<IMember>(totalRecords, pageIndex, pageSize);
|
||||
|
||||
var collection = new MembershipUserCollection();
|
||||
foreach (var m in byEmail.Skip(pagedResult.SkipSize).Take(pageSize))
|
||||
{
|
||||
collection.Add(m.AsConcreteMembershipUser());
|
||||
}
|
||||
return collection;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -751,7 +766,7 @@ namespace umbraco.providers.members
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Verifies that the specified user name and password exist in the data source.
|
||||
/// </summary>
|
||||
@@ -973,6 +988,7 @@ namespace umbraco.providers.members
|
||||
DateTime.Now, DateTime.Now, DateTime.Now);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -97,6 +97,10 @@
|
||||
<Project>{ccd75ec3-63db-4184-b49d-51c1dd337230}</Project>
|
||||
<Name>umbraco.cms</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Umbraco.Core\Umbraco.Core.csproj">
|
||||
<Project>{31785bc3-256c-4613-b2f5-a1b0bdded8c1}</Project>
|
||||
<Name>Umbraco.Core</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\umbraco.datalayer\umbraco.datalayer.csproj">
|
||||
<Project>{C7CB79F0-1C97-4B33-BFA7-00731B579AE2}</Project>
|
||||
<Name>umbraco.datalayer</Name>
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2013
|
||||
VisualStudioVersion = 12.0.20827.3
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
# Visual Studio 2012
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{2849E9D4-3B4E-40A3-A309-F3CB4F0E125F}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
..\build\Build.bat = ..\build\Build.bat
|
||||
@@ -159,4 +157,7 @@ Global
|
||||
{73529637-28F5-419C-A6BB-D094E39DE614} = {DD32977B-EF54-475B-9A1B-B97A502C6E58}
|
||||
{B555AAE6-0F56-442F-AC9F-EF497DB38DE7} = {DD32977B-EF54-475B-9A1B-B97A502C6E58}
|
||||
EndGlobalSection
|
||||
GlobalSection(Performance) = preSolution
|
||||
HasPerformanceSessions = true
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
||||
Reference in New Issue
Block a user