/// <summary> /// Gets engangement plan data /// </summary> /// <param name="engagementId">The id of the engangement plan</param> /// <returns></returns> public static PlanData GetPlanData(Guid engagementId) { // this is the only thing there is needed right now, should be changed to a sql statement, if there are properties //See Sitecore.Modules.EmailCampaign.Core.Analytics.GetPlanData and Sitecore.Modules.EmailCampaign.Core.Analytics.GetPlanData var properties = typeof(PlanData).GetProperties().Where(t => Attribute.IsDefined(t, typeof(StateNameAttribute))); var database = Sitecore.Context.ContentDatabase ?? Sitecore.Context.Database; var engagementPlan = database.GetItem(ID.Parse(engagementId)); var childList = engagementPlan.Children; var planData = new PlanData(); foreach (var propertyInfo in properties) { var attribute = propertyInfo.GetCustomAttributes(typeof(StateNameAttribute), true).First() as StateNameAttribute; var stateItem = childList.FirstOrDefault(t => t.Name == attribute.StateName); Assert.IsNotNull(stateItem, "StateItem could not be found on {0} engangement plan", engagementId); var numberStateVisitors = VisitorManager.GetNumberStateVisitors(stateItem.ID); propertyInfo.SetValue(planData, numberStateVisitors); } return(planData); }