-
-
Save kunalshetye/426e5cd4fba58208ae52a921f66b84fa to your computer and use it in GitHub Desktop.
Add filtered VisitorGroups
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Net.Http; | |
using EPiServer.Personalization.VisitorGroups; | |
using EPiServer.Personalization.VisitorGroups.Internal; | |
using EPiServer.Web; | |
using Microsoft.AspNetCore.Http; | |
using Microsoft.AspNetCore.Mvc.Controllers; | |
using Microsoft.AspNetCore.Mvc.Rendering; | |
using Microsoft.Extensions.DependencyInjection; | |
namespace Alloy.Helpers | |
{ | |
// In Startup.cs add the following: | |
// services.AddFilteredVisitorGroups() | |
public static class VisitorGroupsExtensions | |
{ | |
public static IServiceCollection AddFilteredVisitorGroups(this IServiceCollection services) | |
{ | |
return services.Intercept<IVisitorGroupRepository>((a, b) => new FilteredVisitorGroupStore(a, b)); | |
} | |
} | |
public class FilteredVisitorGroupStore : IVisitorGroupRepository | |
{ | |
private static readonly string _visitorGroupStoreName = "VisitorGroup"; | |
private readonly IServiceProvider _serviceProvider; | |
private readonly IVisitorGroupRepository _instance; | |
public FilteredVisitorGroupStore(IServiceProvider serviceProvider, IVisitorGroupRepository instance) | |
{ | |
_serviceProvider = serviceProvider; | |
_instance = instance; | |
} | |
public VisitorGroup Load(Guid visitorGroupsId) | |
{ | |
return _instance.Load(visitorGroupsId); | |
} | |
public IEnumerable<VisitorGroup> List() | |
{ | |
var list = _instance.List().ToList(); | |
var httpContextAccessor = _serviceProvider.GetService<IHttpContextAccessor>(); | |
if (httpContextAccessor != null && httpContextAccessor.HttpContext != null) | |
{ | |
var host = httpContextAccessor.HttpContext.Request.Host.Value; | |
// filter groups for current website | |
var filteredList = list.Where(item => item.Name.StartsWith(host)).ToList(); | |
// remove the tagging from the name when displaying it | |
filteredList.ForEach(item => item.Name = item.Name.Replace(host,"")); | |
return filteredList; | |
} | |
return list; | |
} | |
public void Delete(Guid visitorGroupsId) | |
{ | |
_instance.Delete(visitorGroupsId); | |
} | |
public void Save(VisitorGroup visitorGroup) | |
{ | |
var httpContextAccessor = _serviceProvider.GetService<IHttpContextAccessor>(); | |
if (httpContextAccessor != null && httpContextAccessor.HttpContext != null) | |
{ | |
var host = httpContextAccessor.HttpContext.Request.Host.Value; | |
if (!visitorGroup.Name.StartsWith(host)) | |
{ | |
// add hostname to name visitorgroups unique | |
visitorGroup.Name = $"{host}{visitorGroup.Name}"; | |
} | |
} | |
_instance.Save(visitorGroup); | |
} | |
public VisitorGroup Copy(VisitorGroup visitorGroup, string copySuffix) | |
{ | |
return _instance.Copy(visitorGroup, copySuffix); | |
} | |
public string GetRepositoryName() | |
{ | |
return _visitorGroupStoreName; | |
} | |
public void Initialize() | |
{ | |
_instance.Initialize(); | |
} | |
public void Uninitialize() | |
{ | |
_instance.Uninitialize(); | |
} | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment