Skip to content

Instantly share code, notes, and snippets.

@kunalshetye
Last active May 16, 2022 23:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save kunalshetye/426e5cd4fba58208ae52a921f66b84fa to your computer and use it in GitHub Desktop.
Save kunalshetye/426e5cd4fba58208ae52a921f66b84fa to your computer and use it in GitHub Desktop.
Add filtered VisitorGroups
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