Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
 public static T ToABRuleSettingEntity <T>(this ABRuleSetting model)
     where T : IABRuleSettingEntity, new()
 {
     return(ToABRuleSettingEntity(model, new T()));
 }