Example #1
0
        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));
        }
Example #2
0
        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);
        }
Example #3
0
        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;
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        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));
        }
Example #7
0
        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);
        }
Example #8
0
        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));
        }
Example #9
0
        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);
        }
Example #10
0
        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));
        }
Example #11
0
        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);
                    }
                }
            }
        }
Example #12
0
        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);
            }
        }
Example #13
0
        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);
                }
            }
        }
Example #14
0
        /// <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);
                }
            }
        }
Example #15
0
        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;
        }