|
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; |
|
} |
|
} |
|
} |
|
} |