Skip to content

Instantly share code, notes, and snippets.

@davidknipe
davidknipe / PostClickInterceptor.cs
Last active August 6, 2019 07:34
Episerver tracking data interceptor to create Episerver Campaign post clicks from Episerver Insight tracking events
using System.Configuration;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Hosting;
using Episerver.Marketing.Common.Helpers;
using EPiServer.ServiceLocation;
using EPiServer.Tracking.Commerce.Data;
using EPiServer.Tracking.Core;
using EPiServer.Tracking.PageView;
public static void TrackEmailClick(HttpContextBase httpContext, EPiServer.Tracking.Core.ITrackingService trackingService)
{
try
{
var email = GetCurrentUserEmail();
// If you know the users name and/or additional information
// like company name it's also possible to associate here
var userData = new UserData() { Name = email, Email = email };
var trackingData = new TrackingData<object>
{
@davidknipe
davidknipe / index.js
Last active June 19, 2018 19:36
Alexa skill for Episerver Music Festival to show of the Content Delivery API
'use strict';
// --------------- Helpers that build all of the responses -----------------------
var http = require('http');
var axios = require('axios');
var striptags = require('striptags');
function buildSpeechletResponse(title, output, repromptText, shouldEndSession) {
return {
@davidknipe
davidknipe / MigrateDynamicContentToBlocks.cs
Created April 11, 2018 21:34
Migrate Episerver Dynamic content to Episerver blocks
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.IO;
using david_tec.Models.Blocks;
using david_tec.Models.Pages;
using EPi.Blog.Templates.PlugIn;
using EPiServer;
using EPiServer.Core;
using EPiServer.Core.Html.StringParsing;
using EPiServer.ServiceLocation;
using EPiServer.Tracking.Core;
namespace InsightScopes.Business.ChangeScope
{
[ServiceConfiguration(ServiceType = typeof(ITrackingDataInterceptor), Lifecycle = ServiceInstanceScope.Singleton)]
public class CustomScopeInterceptor : ITrackingDataInterceptor
{
public int SortOrder => int.MaxValue; // Ensure the interceptor fires last
@davidknipe
davidknipe / InsightCommandLine.cs
Last active October 12, 2018 17:44
Example of using the Episerver Profile store API
using Newtonsoft.Json.Linq;
using RestSharp;
namespace InsightClient
{
class Program
{
private static string deviceId = "<deviceid>"; // retrive from _madid cookie value
private static string apiRootUrl = "<apiRootUrl>"; // get from Insight / Profile store developer portal
private static string subscriptionKey = "<subscriptionKey>"; // get from Insight / Profile store developer portal
using System.Web;
using EPiServer.Core;
using EPiServer.Tracking.Core;
namespace AlloyDemoKit.Business.Insight
{
public class TrackingExample
{
private readonly ITrackingService _trackingService;
private readonly HttpContextBase _httpContextBase;
@davidknipe
davidknipe / ReplacementTokenProperty.cs
Last active March 27, 2019 11:44
Tokenised Content in Episerver
using System.ComponentModel.DataAnnotations;
using EPiServer.Core;
using EPiServer.PlugIn;
namespace TokenisedContent.Features.TokenisedContent
{
[PropertyDefinitionTypePlugIn]
public class ReplacementTokenProperty : PropertyList<ReplacementToken> { }
public class ReplacementToken
@davidknipe
davidknipe / CampaignCouponFilter.cs
Last active June 17, 2021 07:24
Custom promotion to allow unique coupon codes created in Episerver Campaign to be used in Episerver Commerce discounts
using System;
using System.Collections.Generic;
using System.Linq;
using Campaign.CouponServices.Interfaces;
using EPiServer.Commerce.Marketing;
using EPiServer.Reference.Commerce.Site.Features.CampaignCoupons.Discount;
using EPiServer.Security;
using Mediachase.Commerce.Security;
namespace EPiServer.Reference.Commerce.Site.Features.CampaignCoupons.CouponFilter
@davidknipe
davidknipe / ValidatingApprovalEngine.cs
Created October 8, 2017 20:04
Approval Engine that throws an exception if a user tries to approve their own content
using EPiServer.Approvals;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using EPiServer.Framework;
using EPiServer.ServiceLocation;
using EPiServer.Framework.Initialization;
using EPiServer.Security;
namespace ApprovalSequences