private void UpdateOrAdd(ABRuleSetting item, ABRuleSetting oldItem) { ((IPersistable)item).OnSaving(); var dummy = _dbContext.ABRuleSettings.Where(it => it.UUID.Equals(oldItem.UUID, StringComparison.OrdinalIgnoreCase)); if (null == oldItem.Site) { dummy = dummy.Where(it => String.IsNullOrEmpty(it.SiteName)); } else { dummy = dummy.Where(it => it.SiteName.Equals(oldItem.Site.FullName, StringComparison.OrdinalIgnoreCase)); } var temp = dummy.FirstOrDefault(); if (null != temp) { item.ToABRuleSettingEntity <ABRuleSettingEntity>(temp); } else { temp = item.ToABRuleSettingEntity <ABRuleSettingEntity>(); _dbContext.ABRuleSettings.Add(temp); } _dbContext.SaveChanges(); ((IPersistable)item).OnSaved(); }
public virtual Page MatchRule(Site site, Page page, HttpContextBase httpContext) { var matchedPage = page; var ruleName = page.FullName; //string abpageRuleInCookie = null; //string abPageInCookie = null; //ABPageTestTrackingHelper.TryGetABTestPage(httpContext.Request, site, out abpageRuleInCookie, out abPageInCookie); //var matchedRuleInCookie = false; //if (!string.IsNullOrEmpty(abpageRuleInCookie)) //{ // matchedRuleInCookie = abpageRuleInCookie.EqualsOrNullEmpty(ruleName, StringComparison.OrdinalIgnoreCase); //} var visitRule = Get(site, ruleName); if (visitRule != null) { ABPageRuleItem matchedRuleItem = null; var ruleSetting = new ABRuleSetting(site, visitRule.RuleName).AsActual(); if (ruleSetting != null && ruleSetting.RuleItems != null) { foreach (var item in visitRule.Items) { var isMatched = false; //if (matchedRuleInCookie && abPageInCookie.EqualsOrNullEmpty(item.PageName, StringComparison.OrdinalIgnoreCase)) //{ // isMatched = true; //} //else //{ var ruleItem = ruleSetting.RuleItems.Where(it => it.Name.EqualsOrNullEmpty(item.RuleItemName, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); if (ruleItem != null) { isMatched = (ruleItem.IsMatch(httpContext.Request)); //} if (isMatched && !string.IsNullOrEmpty(item.PageName)) { var rulePage = new Page(site, item.PageName).LastVersion().AsActual(); if (rulePage != null) { matchedPage = rulePage; matchedRuleItem = item; break; } } } } OnRuleMatch(new PageMatchedContext() { HttpContext = httpContext, Site = site, RawPage = page, MatchedPage = matchedPage, ABPageSetting = visitRule, MatchedRuleItem = matchedRuleItem }); } } return(matchedPage); }
public static T ToABRuleSettingEntity <T>(this ABRuleSetting model, T entity) where T : IABRuleSettingEntity { entity.UUID = model.UUID; if (null != model.Site) { entity.SiteName = model.Site.FullName; } entity.ObjectXml = DataContractSerializationHelper.SerializeAsXml(model, KnownTypes); return(entity); }
public static ABRuleSetting ToABRuleSetting(this IABRuleSettingEntity entity) { if (entity == null) { return(null); } var dummy = new ABRuleSetting(); dummy.UUID = entity.UUID; if (!String.IsNullOrEmpty(entity.SiteName)) { dummy.Site = new Site(entity.SiteName); } var result = DataContractSerializationHelper.DeserializeFromXml <ABRuleSetting>(entity.ObjectXml, KnownTypes); ((IPersistable)result).Init(dummy); return(result); }
public virtual Site MatchRule(Site site, HttpContextBase httpContext, out ABSiteSetting abSiteSetting) { var matchedSite = site; var ruleName = site.FullName; var visitRule = abSiteSetting = Get(ruleName); if (visitRule != null) { ABSiteRuleItem matchedRuleItem = null; var ruleSetting = new ABRuleSetting(null, visitRule.RuleName).AsActual(); if (ruleSetting != null && ruleSetting.RuleItems != null) { foreach (var item in visitRule.Items) { var ruleItem = ruleSetting.RuleItems.Where(it => it.Name.EqualsOrNullEmpty(item.RuleItemName, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); if (ruleItem.IsMatch(httpContext.Request)) { if (!string.IsNullOrEmpty(item.SiteName)) { var ruleSite = new Site(item.SiteName).AsActual(); if (ruleSite != null) { matchedSite = ruleSite; matchedRuleItem = item; break; } } } } OnRuleMatch(new SiteMatchedContext() { HttpContext = httpContext, RawSite = site, MatchedSite = matchedSite, SiteVisitRule = visitRule, MatchedRuleItem = matchedRuleItem }); } } return(matchedSite); }
public static T ToABRuleSettingEntity <T>(this ABRuleSetting model) where T : IABRuleSettingEntity, new() { return(ToABRuleSettingEntity(model, new T())); }