internal static object Execute(Render.FrontContext context, DataMethodCompiled CompiledMethod) { List <object> paras = ParameterBinder.Bind(CompiledMethod.Parameters, CompiledMethod.ParameterBindings, context.RenderContext.DataContext); CheckAndAssignDefaultValue(paras, CompiledMethod, context, default(Guid)); return(Execute(CompiledMethod, paras.ToArray(), context)); }
private static DataMethodResult ExecuteSubViewDataMethod(Render.FrontContext Context, object itemvalue, List <ViewDataMethod> Children) { DataMethodResult dataresult = new DataMethodResult(); dataresult.Value = itemvalue; DataContext parentcontext = new DataContext(Context.RenderContext); parentcontext.Push("", itemvalue); foreach (var item in Children) { var subResult = ExecuteViewDataMethod(Context, item, parentcontext); if (subResult != null) { if (subResult is DataMethodResult) { dataresult.Children.Add(item.AliasName, subResult as DataMethodResult); } else { DataMethodResult subMethodResult = new DataMethodResult(); subMethodResult.Value = subResult; dataresult.Children.Add(item.AliasName, subMethodResult); } } } return(dataresult); }
public static void Parse(Render.FrontContext context) { Route foundroute = null; var nameOrId = string.Empty; if (context.RenderContext.WebSite.EnableFrontEvents && context.RenderContext.IsSiteBinding) { foundroute = FrontEvent.Manager.RaiseRouteEvent(FrontEvent.enumEventType.RouteFinding, context.RenderContext); if (foundroute == null) { foundroute = GetRoute(context, context.RenderContext.Request.RelativeUrl); if (foundroute != null && foundroute.objectId != default(Guid)) { var foundRouteEventResult = FrontEvent.Manager.RaiseRouteEvent(FrontEvent.enumEventType.RouteFound, context.RenderContext, foundroute); if (foundRouteEventResult != null && foundRouteEventResult.objectId != default(Guid)) { foundroute = foundRouteEventResult; } } else { foundroute = FrontEvent.Manager.RaiseRouteEvent(FrontEvent.enumEventType.RouteNotFound, context.RenderContext, null); } } } if (foundroute == null) { foundroute = GetRoute(context, context.RenderContext.Request.RelativeUrl); } if (foundroute == null) { return; } foundroute = VerifyRoute(context.SiteDb, foundroute); if (foundroute == null) { return; } var newroute = CopyRouteWithoutParameter(foundroute); newroute.Parameters = ParseParameters(foundroute, context.RenderContext.Request.RelativeUrl); if (!string.IsNullOrEmpty(nameOrId)) { newroute.Parameters.Add("nameOrId", nameOrId); } context.Route = newroute; context.Log.ConstType = foundroute.DestinationConstType; context.Log.ObjectId = foundroute.objectId; }
private string RenderPageRoute(RenderContext context, Route route, Dictionary <string, string> urlpara = null) { Render.FrontContext frontContext = context.GetItem <Render.FrontContext>(); string result; string tempurl = route.Name; Dictionary <string, string> Parameters = CopyParameters(route.Parameters); int questionmark = Url.IndexOf("?"); if (questionmark > 0) { string querystring = Url.Substring(questionmark + 1); var namevalues = System.Web.HttpUtility.ParseQueryString(querystring); foreach (var item in namevalues.AllKeys) { if (string.IsNullOrWhiteSpace(item)) { continue; } string value = namevalues.Get(item); Parameters[item] = value; } } if (urlpara != null && urlpara.Count > 0) { foreach (var item in urlpara) { var value = urlpara[item.Key]; if (!DataSources.ParameterBinder.IsValueBinding(value)) { if (Parameters.ContainsKey(item.Key)) { var paravalue = Parameters[item.Key]; if (DataSources.ParameterBinder.IsValueBinding(paravalue)) { Parameters[item.Key] = value; } } } else { // if (!Parameters.ContainsKey(item.Key)) //{ Parameters[item.Key] = item.Value; // } } } } result = Routing.PageRoute.GetRelativeUrl(route.Name, Parameters, frontContext); return(result); }
public string RenderSystemLink(RenderContext context, Routing.Route route) { Render.FrontContext frontContext = context.GetItem <Render.FrontContext>(); route.Parameters = ObjectRoute.ParseParameters(route, this.Url); var constTypeString = route.Parameters.GetValue("objecttype"); byte constType = ConstObjectType.Unknown; if (!byte.TryParse(constTypeString, out constType)) { constType = ConstTypeContainer.GetConstType(constTypeString); } var id = route.Parameters.GetValue("nameorid"); if (constType == ConstObjectType.View) { var view = context.WebSite.SiteDb().Views.GetByNameOrId(id); if (view != null) { var relation = context.WebSite.SiteDb().Relations.GetReferredBy(view, ConstObjectType.Page); if (relation != null && relation.Count > 0) { var pageid = relation[0].objectXId; var pageroute = context.WebSite.SiteDb().Routes.GetByObjectId(pageid); if (pageroute != null) { return(RenderPageRoute(context, pageroute)); } } /// if view was not rendered within and by the page... try to render with rendercode. if (frontContext.Page != null && frontContext.ExecutingView != null) { string currenturl = context.Request.RelativeUrl; var values = PageRoute.GetViewParameterValues(context.WebSite.SiteDb(), view, frontContext); var alternativeviewcode = Cache.ViewInSamePosition.GetAlternativeCode(frontContext.ExecutingView.Id, view.Id); values.Add(SiteConstants.AlternativeViewQueryName, alternativeviewcode.ToString()); return(Kooboo.Lib.Helper.UrlHelper.AppendQueryString(currenturl, values)); } else if (frontContext.Page == null) { var values = PageRoute.GetViewParameterValues(context.WebSite.SiteDb(), view, frontContext); return(Kooboo.Lib.Helper.UrlHelper.AppendQueryString(this.Url, values)); } } } return(null); }
public static string GetRelativeUrl(string RelativeUrl, Render.FrontContext context) { var route = ObjectRoute.GetRoute(context.SiteDb, RelativeUrl); if (route == null) { return(RelativeUrl); } return(GetRelativeUrl(route, context)); }
private static object GetDefaultValue(DataMethodCompiled CompiledMethod, Render.FrontContext context, Guid CurrentMethodId, string paraname, Guid folderid) { object value = null; var defaultcontent = GetDefaultContentNew(folderid, context, CurrentMethodId); if (defaultcontent != null) { var key = GetBindingKey(paraname, CompiledMethod.ParameterBindings); value = Kooboo.Lib.Reflection.Dynamic.GetObjectMember(defaultcontent, key); } return(value); }
private static object ExecuteDataMethod(Render.FrontContext context, Guid MethodId) { var CompiledMethod = CompileMethodCache.GetCompiledMethod(context.SiteDb, MethodId); if (CompiledMethod == null) { return(null); } var ParameterBindings = CompiledMethod.ParameterBindings; List <object> paras = ParameterBinder.Bind(CompiledMethod.Parameters, ParameterBindings, context.RenderContext.DataContext); CheckAndAssignDefaultValue(paras, CompiledMethod, context, MethodId); return(Execute(CompiledMethod, paras.ToArray(), context)); }
private static Route GetRoute(Render.FrontContext context, string url) { Route foundroute = GetRoute(context.WebSite.SiteDb(), url); if (foundroute == null || foundroute.objectId == default(Guid)) { if (string.IsNullOrEmpty(url) || url == "/" || url == "\\" || url.StartsWith("/?")) { var route = GetDefaultRoute(context.RenderContext.WebSite.SiteDb()); if (route != null) { foundroute = route; context.RenderContext.Request.RelativeUrl = foundroute.Name; } } } return(foundroute); }
internal static TextContentViewModel GetDefaultContentNew(Guid FolderId, Render.FrontContext context, Guid CurrentMethodId = default(Guid)) { List <DataMethodSetting> CorrectMethods = new List <DataMethodSetting>(); var allmethods = context.SiteDb.DataMethodSettings.GetByFolder(FolderId); foreach (var item in allmethods) { if (item.Id != CurrentMethodId) { var type = Kooboo.Data.TypeCache.GetType(item.ReturnType); if (type != null && Kooboo.Lib.Reflection.TypeHelper.IsGenericCollection(type)) { CorrectMethods.Add(item); } } } if (CorrectMethods.Count > 0) { // first execute on the same page... if (context.Page != null) { var pagemethods = context.SiteDb.Pages.GetAllMethodIds(context.Page.Id); var withinmethod = CorrectMethods.FindAll(o => pagemethods.Contains(o.Id)); foreach (var item in withinmethod) { var result = DataMethodExecutor.ExecuteDataMethod(context, item.Id); if (result != null) { var itemcollection = ((IEnumerable)result).Cast <object>().ToList(); if (itemcollection != null && itemcollection.Count() > 0) { var contentitem = itemcollection[0]; if (contentitem is TextContentViewModel) { return(contentitem as TextContentViewModel); } } } CorrectMethods.Remove(item); } ///execute pages that link to current page... var allotherpages = context.SiteDb.Relations.GetReferredBy(context.Page, ConstObjectType.Page); foreach (var item in allotherpages) { var otherpagemethods = context.SiteDb.Pages.GetAllMethodIds(item.objectXId); var otherwithinmethod = CorrectMethods.FindAll(o => otherpagemethods.Contains(o.Id)); foreach (var otheritem in otherwithinmethod) { var result = DataMethodExecutor.ExecuteDataMethod(context, otheritem.Id); if (result != null) { var itemcollection = ((IEnumerable)result).Cast <object>().ToList(); if (itemcollection != null && itemcollection.Count() > 0) { var contentitem = itemcollection[0]; if (contentitem is TextContentViewModel) { return(contentitem as TextContentViewModel); } } } CorrectMethods.Remove(otheritem); } } } foreach (var item in CorrectMethods) { var result = DataMethodExecutor.ExecuteDataMethod(context, item.Id); if (result != null) { List <object> itemcollection; if (result is PagedResult) { var paged = result as PagedResult; itemcollection = ((IEnumerable)paged.DataList).Cast <object>().ToList(); if (itemcollection != null && itemcollection.Count() > 0) { var contentitem = itemcollection[0]; if (contentitem is TextContentViewModel) { return(contentitem as TextContentViewModel); } } } else { itemcollection = ((IEnumerable)result).Cast <object>().ToList(); if (itemcollection != null && itemcollection.Count() > 0) { var contentitem = itemcollection[0]; if (contentitem is TextContentViewModel) { return(contentitem as TextContentViewModel); } } } } } } return(context.SiteDb.TextContent.GetDefaultContentFromFolder(FolderId, context.RenderContext.Culture)); }
internal static void CheckAndAssignDefaultValue(List <object> values, DataMethodCompiled CompiledMethod, Render.FrontContext context, Guid CurrentMethodId) { if (!values.Where(o => o == null).Any()) { return; } int count = CompiledMethod.Parameters.Count(); var keylist = CompiledMethod.Parameters.Keys.ToList(); bool IsContentList = CompiledMethod.DeclareType == typeof(Kooboo.Sites.DataSources.ContentList); bool IsContentQueried = false; bool IsTextContentMethod = CompiledMethod.ReturnType == typeof(TextContentViewModel) || Kooboo.Lib.Reflection.TypeHelper.GetGenericType(CompiledMethod.ReturnType) == typeof(TextContentViewModel); TextContentViewModel samplecontent = null; bool IsByCategory = IsQueryByCategory(CompiledMethod); for (int i = 0; i < count; i++) { if (values[i] == null) { var paraname = keylist[i]; if (IsContentList) { //int PageSize, int PageNumber, string SortField, Boolean IsAscending if (paraname == "PageSize" || paraname == "PageNumber" || paraname == "SortField" || paraname == "IsAscending") { var x = keylist[i]; var paratype = CompiledMethod.Parameters[x]; values[i] = GetDefaultValueForDataType(paratype); } } if (IsByCategory) { if (paraname.ToLower() == "id") { values[i] = default(Guid); continue; } else if (paraname.ToLower() == "userkey") { values[i] = string.Empty; continue; } } if (!IsContentQueried) { if (IsTextContentMethod) { var folderid = TryGetFolderGuid(CompiledMethod.ParameterBindings); samplecontent = context.SiteDb.TextContent.GetDefaultContentFromFolder(folderid, context.RenderContext.Culture); } IsContentQueried = true; } if (samplecontent != null) { var key = GetBindingKey(paraname, CompiledMethod.ParameterBindings); var value = Kooboo.Lib.Reflection.Dynamic.GetObjectMember(samplecontent, key); if (value != null) { values[i] = value; } } if (values[i] == null) { var x = keylist[i]; var paratype = CompiledMethod.Parameters[x]; values[i] = GetDefaultValueForDataType(paratype); } } } }
public static object ExecuteViewDataMethod(Render.FrontContext context, ViewDataMethod ViewMethod, DataContext parentDataContext = null) { var CompiledMethod = CompileMethodCache.GetCompiledMethod(context.SiteDb, ViewMethod.MethodId); if (CompiledMethod == null) { return(null); } var ParameterBindings = CompiledMethod.ParameterBindings; DataContext dataContext = parentDataContext == null ? context.RenderContext.DataContext : parentDataContext; if (CompiledMethod.IsKScript) { var dictparas = ParameterBinder.BindKScript(CompiledMethod.Parameters, ParameterBindings, dataContext); return(Kooboo.Sites.Scripting.Manager.ExecuteDataSource(context.RenderContext, CompiledMethod.CodeId, dictparas)); } List <object> paras = ParameterBinder.Bind(CompiledMethod.Parameters, ParameterBindings, dataContext); CheckAndAssignDefaultValue(paras, CompiledMethod, context, ViewMethod.MethodId); var result = Execute(CompiledMethod, paras.ToArray(), context); if (result == null) { return(null); } if (ViewMethod.HasChildren) { var type = result.GetType(); if (Kooboo.Lib.Reflection.TypeHelper.IsGenericCollection(type)) { List <DataMethodResult> results = new List <DataMethodResult>(); var itemcollection = ((IEnumerable)result).Cast <object>().ToList(); foreach (var item in itemcollection) { var itemresult = ExecuteSubViewDataMethod(context, item, ViewMethod.Children); results.Add(itemresult); } return(results); } else if (result is PagedResult) { var pagedresult = result as PagedResult; List <DataMethodResult> results = new List <DataMethodResult>(); var itemcollection = ((IEnumerable)pagedresult.DataList).Cast <object>().ToList(); foreach (var item in itemcollection) { var itemresult = ExecuteSubViewDataMethod(context, item, ViewMethod.Children); results.Add(itemresult); } pagedresult.DataList = results.ToList <object>(); return(pagedresult); } else { return(ExecuteSubViewDataMethod(context, result, ViewMethod.Children)); } } else { return(result); } }
internal static object Execute(DataMethodCompiled method, object[] Paras, Render.FrontContext Context) { // assign default values. object result; if (method.IsStatic) { if (method.IsVoid) { method.StaticVoid(Paras); return(null); } else { result = method.StaticFunc(Paras); } } else { var instance = Activator.CreateInstance(method.DeclareType); if (instance is SiteDataSource) { var datasource = instance as SiteDataSource; datasource.Context = Context; if (method.IsVoid) { method.Void(datasource, Paras); return(null); } else { result = method.Func(datasource, Paras); } } else { if (method.IsVoid) { method.Void(instance, Paras); return(null); } else { result = method.Func(instance, Paras); } } } if (result == null) { return(null); } else { var resultAsTask = result as Task; if (resultAsTask != null) { if (method.ReturnType == typeof(Task)) { ThrowIfWrappedTaskInstance(resultAsTask.GetType(), "Not getted", method.DeclareType); resultAsTask.Wait(); return(null); } var taskValueType = GetTaskInnerTypeOrNull(method.ReturnType); if (taskValueType != null) { // for: public Task<T> Action() // constructs: return (Task<object>)Convert<T>((Task<T>)result) var genericMethodInfo = _convertOfTMethod.MakeGenericMethod(taskValueType); var convertedResult = genericMethodInfo.Invoke(null, new object[] { result }); return(convertedResult); } // This will be the case for: // 1. Types which have derived from Task and Task<T>, // 2. Action methods which use dynamic keyword but return a Task or Task<T>. throw new InvalidOperationException( String.Format("The method '{0}' on type '{1}' returned a Task instance even though it is not an asynchronous method.", "Not getted", method.DeclareType ) ); } else { return(result); } } }
/// <summary> /// Render current menu and output the string. /// </summary> /// <returns></returns> public static string Render(Menu Menu, Render.FrontContext context = null) { string template = null; if (!string.IsNullOrEmpty(Menu.Url) && !string.IsNullOrEmpty(Menu.Name)) { EnsureMenuRenderData(Menu); var renderdata = Menu.TempRenderData; template = renderdata.FineTemplate; template = template.Replace(MenuHelper.MarkHref, Menu.Url); template = template.Replace(MenuHelper.MarkAnchorText, Menu.Name); if (renderdata.RenderId) { string parentid = null; if (Menu.Parent != null) { parentid = Menu.Parent.Id.ToString(); } if (!string.IsNullOrEmpty(parentid)) { template = template.Replace(MenuHelper.MarkParentId, parentid); } template = template.Replace(MenuHelper.MarkCurrentId, Menu.Id.ToString()); } if (renderdata.HasActiveClass) { string activeclassname = string.Empty; if (MenuHelper.IsActive(Menu, context.RenderContext)) { activeclassname = renderdata.ActiveClass; } template = template.Replace(MenuHelper.MarkActiveClassReplacer, activeclassname); } } string submenustring = string.Empty; foreach (var item in Menu.children) { if (item.Parent == null) { item.Parent = Menu; } string rendermenu = Render(item, context); submenustring += rendermenu; } string subitemcontainer = MenuHelper.PraseSubItemContainer(Menu); if (!string.IsNullOrEmpty(subitemcontainer) && subitemcontainer.Contains(MenuHelper.MarkSubItems) && !string.IsNullOrEmpty(submenustring)) { submenustring = subitemcontainer.Replace(MenuHelper.MarkSubItems, submenustring); } if (!string.IsNullOrEmpty(template) && template.Contains(MenuHelper.MarkSubItems)) { return(template.Replace(MenuHelper.MarkSubItems, submenustring)); } else { if (string.IsNullOrEmpty(template)) { return(submenustring); } else { return(template); } } }
public static void Parse(Render.FrontContext context) { Route foundroute = null; var nameOrId = string.Empty; if (context.RenderContext.WebSite.EnableFrontEvents && context.RenderContext.IsSiteBinding) { foundroute = FrontEvent.Manager.RaiseRouteEvent(FrontEvent.enumEventType.RouteFinding, context.RenderContext); if (foundroute == null) { foundroute = GetRoute(context, context.RenderContext.Request.RelativeUrl); if (foundroute == null) { var relativeUrl = context.RenderContext.Request.RelativeUrl; int questionMarkIndex = relativeUrl.IndexOf("?"); if (questionMarkIndex > 0) { relativeUrl = relativeUrl.Substring(0, questionMarkIndex); } var lastSlashIndex = relativeUrl.LastIndexOf("/"); if (lastSlashIndex > 1) { var url = relativeUrl.Substring(0, lastSlashIndex); if (!string.IsNullOrWhiteSpace(url)) { foundroute = GetRoute(context, url); if (foundroute != null) { nameOrId = relativeUrl.Substring(lastSlashIndex + 1); } } } } if (foundroute != null && foundroute.objectId != default(Guid)) // if (foundroute != null) { var foundRouteEventResult = FrontEvent.Manager.RaiseRouteEvent(FrontEvent.enumEventType.RouteFound, context.RenderContext, foundroute); if (foundRouteEventResult != null && foundRouteEventResult.objectId != default(Guid)) { foundroute = foundRouteEventResult; } } else { foundroute = FrontEvent.Manager.RaiseRouteEvent(FrontEvent.enumEventType.RouteNotFound, context.RenderContext, null); } } } if (foundroute == null) { foundroute = GetRoute(context, context.RenderContext.Request.RelativeUrl); } if (foundroute == null) { return; } foundroute = VerifyRoute(context.SiteDb, foundroute); if (foundroute == null) { return; } var newroute = CopyRouteWithoutParameter(foundroute); newroute.Parameters = ParseParameters(foundroute, context.RenderContext.Request.RelativeUrl); if (!string.IsNullOrEmpty(nameOrId)) { newroute.Parameters.Add("nameOrId", nameOrId); } context.Route = newroute; context.Log.ConstType = foundroute.DestinationConstType; context.Log.ObjectId = foundroute.objectId; }