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); } } }
public static bool EvaluteCondition(IFrontEvent theevent, List <Condition> conditions) { foreach (var item in conditions) { if (!FrontEvent.ConditionManager.Evaluate(theevent, item)) { return(false); } } return(true); }
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); }
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; }
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); } } }
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); }