Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static Segment GetUserSegment() {
- Segment firstMatchingSegment = null;
- var personalizationService = new PersonalizationService();
- var personalizationConfig = Config.Get<PersonalizationConfig>();
- var personalizationManager = PersonalizationManager.GetManager();
- var activeSegments = personalizationManager.GetSegments().Where(o => o.IsActive).OrderBy(o => o.Priority).ToList();
- //Reflection... :(
- var validateModuleItemMethod = typeof(SystemManager).GetMethod("ValidateModuleItem", BindingFlags.Static | BindingFlags.NonPublic);
- var isCriteriaMatchMethod = personalizationService.GetType().GetMethod("IsCriteriaMatch", BindingFlags.Instance | BindingFlags.NonPublic);
- var buildTestContextMethod = personalizationService.GetType().GetMethod("BuildTestContext", BindingFlags.Instance | BindingFlags.NonPublic);
- var testContext = buildTestContextMethod.Invoke(personalizationService, null) as IPersonalizationTestContext;
- //Test Segment is easy
- if (testContext.IsInTestMode && testContext.SelectedSegmentId != Guid.Empty) {
- return personalizationManager.GetSegments().SingleOrDefault(o => o.Id == testContext.SelectedSegmentId);
- }
- //Validate which segments are valid for assessment
- var validSegments = activeSegments.Where(
- segment => segment.CriteriaGroups.All(
- criteriaGroup => criteriaGroup.Criteria.All(
- criteria => {
- var item = personalizationConfig.Criteria[criteria.CriterionName];
- return item == null ? false : (bool)validateModuleItemMethod.Invoke(null, new[] { item });
- }
- )
- )
- );
- //Pick first matching (priority is set in the Sitefinity UI)
- firstMatchingSegment = validSegments.FirstOrDefault(
- segment => segment.CriteriaGroups.All(
- criteriaGroup => criteriaGroup.Criteria.Any(
- criteria => (bool)isCriteriaMatchMethod.Invoke(personalizationService, new object[] { criteria, testContext })
- )
- )
- );
- return firstMatchingSegment;
- }
Advertisement
Add Comment
Please, Sign In to add comment