Skip to content

Instantly share code, notes, and snippets.

View AThraen's full-sized avatar

Allan Thraen AThraen

View GitHub Profile
@AThraen
AThraen / CustomContentRecommendation.cs
Last active November 3, 2023 09:31
Updated Suggested Types Rules for CMS 12
using EPiServer.Cms.Shell.UI.Rest;
using EPiServer.Core;
using EPiServer.DataAbstraction;
using EPiServer.ServiceLocation;
using EPiServer;
using System.Collections.Generic;
using CodeArt.Web.Models.Pages;
namespace CodeArt.Web.Business.SuggestedTypes
{
@AThraen
AThraen / VisitorGroupSyncService.cs
Created March 7, 2023 15:01
Episerver/Optimizely VisitorGroupSyncService
public class VisitorGroupSyncService
{
private readonly IVisitorGroupRepository _visitorGroupRepository;
private readonly IVisitorGroupCriterionRepository _visitorGroupCriterionRepository;
public VisitorGroupSyncService(IVisitorGroupRepository visitorGroupRepository, IVisitorGroupCriterionRepository visitorGroupCriterionRepository)
{
_visitorGroupRepository = visitorGroupRepository;
_visitorGroupCriterionRepository = visitorGroupCriterionRepository;
}
@AThraen
AThraen / CustomStringConversionJsonConverter.cs
Created March 7, 2023 14:59
Useful JsonConverters for serializing with System.Text.Json.
public class CustomStringConversionJsonConverter<G> : JsonConverter<G>
{
private readonly Func<G, string> _convertToString;
private readonly Func<string, G> _convertFromString;
public CustomStringConversionJsonConverter(Func<G,string> ConvertToString, Func<string,G> ConvertFromString)
{
_convertFromString = ConvertFromString;
_convertToString = ConvertToString;
}
@AThraen
AThraen / DownloadableDocument.cs
Created March 2, 2023 13:58
Trick to make PDF files automatically download using the Digizuite integration to Optimizely (Episerver) CMS
//Register the PDF's as a specific content type in Optimizely. Ensure Guid is unique.
//Connect to Digizuite asset-types using the DigizuiteType attribute.
[ContentType(DisplayName = "Downloadable Digizuite File", GUID = "a4ca5288-35ce-4ee5-b094-72f76ca8e07b", Description = "", AvailableInEditMode = false)]
[DigizuiteType(AssetTypeIds = new[] { Digizuite.Optimizely.Constants.GlobalConstants.AssetTypes.PDF })]
public class DownloadableDocument : DigizuiteFile
{
}
@AThraen
AThraen / keybase.md
Created February 22, 2023 12:46
Keybase proof

Keybase proof

I hereby claim:

  • I am athraen on github.
  • I am athraen (https://keybase.io/athraen) on keybase.
  • I have a public key ASASD5YWua_P7z_A2vOv5Tes43qtiJ77ruZdycI3Oa2HBgo

To claim this, I am signing this object:

@AThraen
AThraen / ContentCreationRule.cs
Created December 30, 2022 12:45
Content Creation rules for Optimizely CMS. Support rules defining where certain content types should be created. So you don't end up with a lot of banners in "for this page" folders.
using EPiServer.PlugIn;
using EPiServer.Shell.ObjectEditing;
using System.ComponentModel.DataAnnotations;
/// <summary>
/// Rule that specifies where a certain type of content should be put on creation
/// </summary>
public class ContentCreationRule
{
[Display(Name = "Content Type", Order = 10)]
@AThraen
AThraen / GenericEnumSelectionFactory.cs
Created December 2, 2022 15:33
Optimizely/Episerver CMS Generic Enum Selection Factory
public class GenericEnumSelectionFactory<TEnum> : EnumSelectionFactory where TEnum : Enum
{
protected override Type EnumType => typeof(TEnum);
public GenericEnumSelectionFactory() : this(LocalizationService.Current)
{
}
public GenericEnumSelectionFactory(LocalizationService localization) : base(localization)
{
@AThraen
AThraen / DependentPropertyAttribute.cs
Last active November 9, 2022 09:42
Optimizely CMS - Property Dependency (one property is dependent on another)
public class DependentPropertyAttribute : Attribute
{
public string DependentProperty { get; set; }
public object Value { get; set; }
public bool Compare(object value)
{
if (value == null)
{
return Value == null;
@AThraen
AThraen / Chunkify.cs
Created October 2, 2022 18:03
Chunkify, breaks up a generic enumerator into batches (chunks) of a given size
protected IEnumerable<List<G>> Chunkify<G>(IEnumerable<G> Source,int ChunkSize)
{
List<G> chunk=new List<G>(ChunkSize);
foreach(var e in Source)
{
chunk.Add(e);
if(chunk.Count > ChunkSize)
{
yield return chunk;
chunk.Clear();
@AThraen
AThraen / StartUp.cs
Created September 26, 2022 12:39
Visitor Group impersonation through Quick Navigation in Optimizely Content Cloud
public class Startup{
//...
public void ConfigureServices(IServiceCollection services)
{
//...
services.AddSingleton<IQuickNavigatorItemProvider, VisitorGroupQuickNavigationProvider>();