diff --git a/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj b/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj index a7de95fd7..7878803b5 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj +++ b/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj @@ -79,6 +79,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.Users/Services/UserResolverSelector.cs b/src/Orchard.Web/Modules/Orchard.Users/Services/UserResolverSelector.cs new file mode 100644 index 000000000..1c6feb7c5 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Users/Services/UserResolverSelector.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using System.Linq; +using Orchard.ContentManagement; +using Orchard.Users.Models; + +namespace Orchard.Users.Services { + public class UserResolverSelector : IIdentityResolverSelector { + private readonly IContentManager _contentManager; + + public UserResolverSelector(IContentManager contentManager) { + _contentManager = contentManager; + } + + public IdentityResolverSelectorResult GetResolver(ContentIdentity contentIdentity) { + if (contentIdentity.Has("User.UserName")) { + return new IdentityResolverSelectorResult { + Priority = 0, + Resolve = ResolveIdentity + }; + } + + return null; + } + + private IEnumerable ResolveIdentity(ContentIdentity identity) { + var identifier = identity.Get("User.UserName"); + + if (identifier == null) { + return null; + } + + var comparer = new ContentIdentity.ContentIdentityEqualityComparer(); + return _contentManager + .Query() + .Where(p => p.UserName == identifier) + .List() + .Where(c => comparer.Equals(identity, _contentManager.GetItemMetadata(c).Identity)); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj b/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj index 0a4534ae1..e357b8a46 100644 --- a/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj @@ -85,6 +85,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Services/LayerResolverSelector.cs b/src/Orchard.Web/Modules/Orchard.Widgets/Services/LayerResolverSelector.cs new file mode 100644 index 000000000..1324e1007 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Services/LayerResolverSelector.cs @@ -0,0 +1,41 @@ +using System.Collections.Generic; +using System.Linq; +using Orchard.ContentManagement; +using Orchard.Core.Common.Models; +using Orchard.Widgets.Models; + +namespace Orchard.Widgets.Services { + public class LayerResolverSelector : IIdentityResolverSelector { + private readonly IContentManager _contentManager; + + public LayerResolverSelector(IContentManager contentManager) { + _contentManager = contentManager; + } + + public IdentityResolverSelectorResult GetResolver(ContentIdentity contentIdentity) { + if (contentIdentity.Has("Layer.LayerName")) { + return new IdentityResolverSelectorResult { + Priority = 0, + Resolve = ResolveIdentity + }; + } + + return null; + } + + private IEnumerable ResolveIdentity(ContentIdentity identity) { + var identifier = identity.Get("Layer.LayerName"); + + if (identifier == null) { + return null; + } + + var comparer = new ContentIdentity.ContentIdentityEqualityComparer(); + return _contentManager + .Query() + .Where(p => p.Name == identifier) + .List() + .Where(c => comparer.Equals(identity, _contentManager.GetItemMetadata(c).Identity)); + } + } +} \ No newline at end of file