Exemple #1
0
        public static void ExecuteRule(SiteDb sitedb, KScript.k kcontext, IFrontEvent theevent, Kooboo.Sites.Models.IFElseRule rule)
        {
            if (rule.Do != null && rule.Do.Count() > 0)
            {
                foreach (var item in rule.Do)
                {
                    var code = sitedb.Code.Get(item.CodeId);
                    if (code != null && !string.IsNullOrWhiteSpace(code.Body))
                    {
                        kcontext.config = new KDictionary(CopySetting(item.Setting));

                        var outputstring = Kooboo.Sites.Scripting.Manager.ExecuteCode(kcontext.RenderContext, code.Body, code.Id);

                        if (!string.IsNullOrEmpty(outputstring))
                        {
                            kcontext.RenderContext.Response.AppendString(outputstring);
                        }
                        kcontext.config = null;
                    }
                }
            }

            if (rule.IF != null && rule.IF.Count() > 0)
            {
                var check = EvaluteCondition(theevent, rule.IF);

                if (check)
                {
                    if (rule.Then != null && rule.Then.Count() > 0)
                    {
                        foreach (var item in rule.Then)
                        {
                            ExecuteRule(sitedb, kcontext, theevent, item);
                        }
                    }
                }
                else
                {
                    if (rule.Else != null && rule.Else.Count() > 0)
                    {
                        foreach (var item in rule.Else)
                        {
                            ExecuteRule(sitedb, kcontext, theevent, item);
                        }
                    }
                }
            }

            else if (rule.Then != null && rule.Then.Count > 0)
            {
                foreach (var item in rule.Then)
                {
                    ExecuteRule(sitedb, kcontext, theevent, item);
                }
            }
        }
Exemple #2
0
 public static bool EvaluteCondition(IFrontEvent theevent, List <Condition> conditions)
 {
     foreach (var item in conditions)
     {
         if (!FrontEvent.ConditionManager.Evaluate(theevent, item))
         {
             return(false);
         }
     }
     return(true);
 }
Exemple #3
0
        public static void RaiseEvent(RenderContext context, IFrontEvent theevent)
        {
            var sitedb = context.WebSite.SiteDb();
            var list   = sitedb.Rules.ListByEventType(theevent.EventType);

            if (list == null || list.Count() == 0)
            {
                return;
            }
            RaiseEvent(context, theevent, list);
        }
Exemple #4
0
        public static void RaiseEvent(RenderContext context, IFrontEvent theevent, List <Sites.Models.BusinessRule> rules)
        {
            var sitedb = context.WebSite.SiteDb();

            var engine   = Kooboo.Sites.Scripting.Manager.GetJsEngine(context);
            var kcontext = context.GetItem <k>();

            kcontext.@event = theevent;

            foreach (var item in rules)
            {
                if (item.Rule != null)
                {
                    ExecuteRule(sitedb, kcontext, theevent, item.Rule);
                }
            }

            kcontext.@event = null;
        }
Exemple #5
0
        public static void ExecuteRule(SiteDb sitedb, Kooboo.Sites.Scripting.k kcontext, IFrontEvent theevent, Kooboo.Sites.Models.IFElseRule rule)
        {
            if (rule.Do != null && rule.Do.Count() > 0)
            {
                foreach (var item in rule.Do)
                {
                    var code = sitedb.Code.Get(item.CodeId);
                    if (code != null && !string.IsNullOrWhiteSpace(code.Body))
                    {
                        kcontext.config = CopySetting(item.Setting);

                        Kooboo.Sites.Scripting.Manager.ExecuteCode(kcontext.RenderContext, code.Body, code.Id);
                        //TODO.... Get the debugger to work...
                        //engine.Execute(code.Body);

                        kcontext.config = null;
                    }
                }
            }

            if (rule.IF != null && rule.IF.Count() > 0)
            {
                var check = EvaluteCondition(theevent, rule.IF);

                if (check)
                {
                    if (rule.Then != null && rule.Then.Count() > 0)
                    {
                        foreach (var item in rule.Then)
                        {
                            ExecuteRule(sitedb, kcontext, theevent, item);
                        }
                    }
                }
                else
                {
                    if (rule.Else != null && rule.Else.Count() > 0)
                    {
                        foreach (var item in rule.Else)
                        {
                            ExecuteRule(sitedb, kcontext, theevent, item);
                        }
                    }
                }
            }

            else if (rule.Then != null && rule.Then.Count > 0)
            {
                foreach (var item in rule.Then)
                {
                    ExecuteRule(sitedb, kcontext, theevent, item);
                }
            }
        }
Exemple #6
0
        public static bool Evaluate(IFrontEvent TheEvent, Condition condition)
        {
            var value = Lib.Reflection.Dynamic.GetObjectMember(TheEvent, condition.Left);

            if (value == null)
            {
                return(false);
            }
            var    type     = value.GetType();
            string Operator = condition.Operator.ToLower();

            if (Operator == ">" || Operator == ">=" || Operator == "<" || Operator == "<=")
            {
                if (type == typeof(Int32) || type == typeof(byte) || type == typeof(Int16) || type == typeof(Int64))
                {
                    long leftvalue = Convert.ToInt64(value);
                    long rightvalue;

                    if (long.TryParse(condition.Right, out rightvalue))
                    {
                        if (Operator == ">")
                        {
                            return(leftvalue > rightvalue);
                        }
                        else if (Operator == ">=")
                        {
                            return(leftvalue >= rightvalue);
                        }
                        else if (Operator == "<")
                        {
                            return(leftvalue < rightvalue);
                        }
                        else if (Operator == "<=")
                        {
                            return(leftvalue <= rightvalue);
                        }
                    }
                }
                else if (type == typeof(decimal) || type == typeof(float) || type == typeof(double))
                {
                    decimal leftvalue = Convert.ToDecimal(value);
                    decimal rightvalue;
                    if (decimal.TryParse(condition.Right, out rightvalue))
                    {
                        if (Operator == ">")
                        {
                            return(leftvalue > rightvalue);
                        }
                        else if (Operator == ">=")
                        {
                            return(leftvalue >= rightvalue);
                        }
                        else if (Operator == "<")
                        {
                            return(leftvalue < rightvalue);
                        }
                        else if (Operator == "<=")
                        {
                            return(leftvalue <= rightvalue);
                        }
                    }
                }
            }
            else if (Operator == "=" || Operator == "==" || Operator == "!=")
            {
                if (type == typeof(Guid))
                {
                    Guid leftvalue = (Guid)value;
                    Guid rightvalue;
                    if (Guid.TryParse(condition.Right, out rightvalue))
                    {
                        if (Operator == "=" || Operator == "==")
                        {
                            return(leftvalue == rightvalue);
                        }
                        else if (Operator == "!=")
                        {
                            return(leftvalue != rightvalue);
                        }
                    }
                }

                else if (type == typeof(bool))
                {
                    bool leftvalue = (bool)value;
                    bool rightvalue;
                    if (bool.TryParse(condition.Right, out rightvalue))
                    {
                        if (Operator == "=" || Operator == "==")
                        {
                            return(leftvalue == rightvalue);
                        }
                        else if (Operator == "!=")
                        {
                            return(leftvalue != rightvalue);
                        }
                    }
                }

                else
                {
                    string leftvalue = value.ToString();
                    if (Operator == "=" || Operator == "==")
                    {
                        return(leftvalue == condition.Right);
                    }
                    else if (Operator == "!=")
                    {
                        return(leftvalue != condition.Right);
                    }
                }
            }

            else
            {
                //Operators.Add("Contains");
                //Operators.Add("NotContains");
                //Operators.Add("Startwith");
                //Operators.Add("NotStartwith");

                string leftvalue = value.ToString();

                if (Operator == "contains")
                {
                    return(leftvalue.Contains(condition.Right));
                }
                else if (Operator == "startwith")
                {
                    return(leftvalue.StartsWith(condition.Right));
                }
                else if (Operator == "notcontains")
                {
                    return(!leftvalue.Contains(condition.Right));
                }
                else if (Operator == "notstartwith")
                {
                    return(!leftvalue.StartsWith(condition.Right));
                }
            }
            return(false);
        }