Skip to content

Instantly share code, notes, and snippets.

@khurramkhang
Created December 22, 2016 13:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save khurramkhang/9c0c1fbf25e6a453cd7e9b3045ecfcbf to your computer and use it in GitHub Desktop.
Save khurramkhang/9c0c1fbf25e6a453cd7e9b3045ecfcbf to your computer and use it in GitHub Desktop.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.Serialization;
using System.Text;
using System.Web;
using System.Web.Mvc;
using EPiServer;
using EPiServer.Core;
using EPiServer.Marketing.KPI.Manager.DataClass;
using EPiServer.Marketing.KPI.Results;
using EPiServer.ServiceLocation;
namespace AlloyDemoKit.Business
{
[DataContract]
public class ContainsCookieKpi : IKpi
{
private readonly IServiceLocator serviceLocator;
public ContainsCookieKpi()
{
CookieKpiModel = new CookieKpiModel();
serviceLocator = ServiceLocator.Current;
}
public void Validate(Dictionary<string, string> kpiData)
{
if (kpiData["CookieName"] != null)
{
CookieKpiModel.CookieName = kpiData["CookieName"];
if (kpiData["CookieValue"] != null)
{
CookieKpiModel.CookieValue = kpiData["CookieValue"];
return;
}
return;
}
throw new Exception("Cookie name is required");
}
public IKpiResult Evaluate(object sender, EventArgs e)
{
var result = new KpiConversionResult { HasConverted = false, KpiId = Id };
if (HttpContext.Current.Request.Cookies.AllKeys.Contains(CookieKpiModel.CookieName))
{
result.HasConverted = true;
HttpContext.Current.Request.Cookies.Remove(CookieKpiModel.CookieName);
}
return result;
}
[DataMember]
public Guid Id { get; set; }
[DataMember]
public string FriendlyName
{
get { return "Matches Cookie Exist"; }
}
[DataMember]
public string Description {
get { return "Can be used where Conversion Goal is some javascript execution."; }
}
[DataMember]
public string UiMarkup
{
get
{
string markUp = File.ReadAllText(HttpContext.Current.Server.MapPath(@"~/Views/CookieKpiModel/model.cshtml"));
return markUp;
}
}
[DataMember]
public string UiReadOnlyMarkup
{
get
{
if (CookieKpiModel == null)
{
return string.Empty;
}
return "<div>Cookie Name: <h3>" + WebUtility.HtmlEncode(CookieKpiModel.CookieName) + "</h3></div><div>Cookie Value: <h3>" + WebUtility.HtmlEncode(CookieKpiModel.CookieValue) + "</h3></div>";
}
}
[DataMember]
public CookieKpiModel CookieKpiModel { get; set; }
[DataMember]
public DateTime CreatedDate { get; set; }
[DataMember]
public DateTime ModifiedDate { get; set; }
private EventHandler<ContentEventArgs> eventHandler;
public event EventHandler EvaluateProxyEvent
{
add
{
eventHandler = new EventHandler<ContentEventArgs>(value);
var service = serviceLocator.GetInstance<IContentEvents>();
service.LoadedContent += eventHandler;
}
remove
{
var service = serviceLocator.GetInstance<IContentEvents>();
service.LoadedContent -= eventHandler;
}
}
}
}
namespace AlloyDemoKit.Business
{
public class CookieKpiModel
{
public string CookieName { get; set; }
public string CookieValue { get; set; }
}
}
<div>Users who contains this Cookie will be marked as a conversion goal: <input type="text" name="CookieName" id="CookieName"/></div>
<div>Cookie Value: <input type="text" name="CookieValue" id="CookieValue" /></div>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment