Ejemplo n.º 1
0
        public async Task <IViewComponentResult> InvokeAsync(PageComponentContext context)
        {
            ErpPage currentPage = null;

            try
            {
                #region << Init >>
                if (context.Node == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: The node Id is required to be set as query parameter 'nid', when requesting this component")));
                }

                var pageFromModel = context.DataModel.GetProperty("Page");
                if (pageFromModel == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel cannot be null")));
                }
                else if (pageFromModel is ErpPage)
                {
                    currentPage = (ErpPage)pageFromModel;
                }
                else
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel does not have Page property or it is not from ErpPage Type")));
                }

                var instanceOptions = new PcApplicationsOptions();
                if (context.Options != null)
                {
                    instanceOptions = JsonConvert.DeserializeObject <PcApplicationsOptions>(context.Options.ToString());
                }

                var componentMeta = new PageComponentLibraryService().GetComponentMeta(context.Node.ComponentName);
                #endregion

                ViewBag.Options          = instanceOptions;
                ViewBag.Node             = context.Node;
                ViewBag.ComponentMeta    = componentMeta;
                ViewBag.RequestContext   = ErpRequestContext;
                ViewBag.AppContext       = ErpAppContext.Current;
                ViewBag.ComponentContext = context;

                if (context.Mode != ComponentMode.Options && context.Mode != ComponentMode.Help)
                {
                    var currentUser = AuthService.GetUser(HttpContext.User);

                    var currentUserRoles = currentUser.Roles.Select(x => x.Id);
                    var apps             = new AppService().GetAllApplications().OrderBy(x => x.Weight).ToList();
                    var allowedApps      = new List <App>();
                    if (apps != null)
                    {
                        foreach (var app in apps)
                        {
                            if (app.Access == null || app.Access.Count == 0)
                            {
                                continue;
                            }

                            IEnumerable <Guid> accessRoles = app.Access.Intersect(currentUserRoles);
                            if (accessRoles.Any())
                            {
                                allowedApps.Add(app);
                            }
                        }
                    }
                    //Generate Url
                    foreach (var app in allowedApps)
                    {
                        app.HomePages = app.HomePages.FindAll(x => x.Weight < 1000).OrderBy(x => x.Weight).ToList();
                        foreach (var area in app.Sitemap.Areas)
                        {
                            foreach (var node in area.Nodes)
                            {
                                node.Url = PageUtils.GenerateSitemapNodeUrl(node, area, app);
                            }
                        }
                        app.Sitemap = new AppService().OrderSitemap(app.Sitemap);
                    }
                    ViewBag.Apps = allowedApps;
                }


                switch (context.Mode)
                {
                case ComponentMode.Display:
                    return(await Task.FromResult <IViewComponentResult>(View("Display")));

                case ComponentMode.Design:
                    return(await Task.FromResult <IViewComponentResult>(View("Design")));

                case ComponentMode.Options:
                    return(await Task.FromResult <IViewComponentResult>(View("Options")));

                case ComponentMode.Help:
                    return(await Task.FromResult <IViewComponentResult>(View("Help")));

                default:
                    ViewBag.Error = new ValidationException()
                    {
                        Message = "Unknown component mode"
                    };
                    return(await Task.FromResult <IViewComponentResult>(View("Error")));
                }
            }
            catch (ValidationException ex)
            {
                ViewBag.Error = ex;
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
            catch (Exception ex)
            {
                ViewBag.Error = new ValidationException()
                {
                    Message = ex.Message
                };
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
        }
Ejemplo n.º 2
0
        public async Task <IViewComponentResult> InvokeAsync( )
        {
            var currentNode = ErpRequestContext.SitemapNode;
            var currentArea = ErpRequestContext.SitemapArea;

            var nodesWithExistingGroups    = new List <SitemapNode>();
            var nodesWithoutExistingGroups = new List <SitemapNode>();
            var existingGroupsHashset      = new HashSet <string>();
            var groupNameHashset           = new HashSet <string>();
            var groupWithNodesCount        = 0;

            if (currentNode != null && currentArea != null)
            {
                foreach (var group in currentArea.Groups)
                {
                    existingGroupsHashset.Add(group.Name);
                }

                foreach (var node in currentArea.Nodes)
                {
                    //Exclude current node; //Boz-it is more convinient not to exclude it
                    //if (node.Id == currentNode.Id) {
                    //	continue;
                    //}

                    //Generate the url for the node based on the route convention
                    node.Url = PageUtils.GenerateSitemapNodeUrl(node, currentArea, ErpRequestContext.App);

                    if (existingGroupsHashset.Contains(node.GroupName))
                    {
                        nodesWithExistingGroups.Add(node);
                        if (!groupNameHashset.Contains(node.GroupName))
                        {
                            groupWithNodesCount++;
                            groupNameHashset.Add(node.GroupName);
                        }
                    }
                    else
                    {
                        nodesWithoutExistingGroups.Add(node);
                    }
                }

                if (nodesWithExistingGroups.Count > 1)
                {
                    nodesWithExistingGroups = nodesWithExistingGroups.OrderBy(x => x.Weight).ThenBy(x => x.Label).ToList();
                }

                if (nodesWithoutExistingGroups.Count > 1)
                {
                    nodesWithoutExistingGroups = nodesWithoutExistingGroups.OrderBy(x => x.Weight).ThenBy(x => x.Label).ToList();
                }
            }

            //Render methods
            var ddRenderSpan    = 3;
            var ddWidth         = "45rem";
            var columnsRendered = groupWithNodesCount + (nodesWithoutExistingGroups.Count > 0 ? 1 : 0);

            if (columnsRendered == 1)
            {
                ddRenderSpan = 12;
                ddWidth      = "15rem";
            }
            else if (columnsRendered == 2)
            {
                ddRenderSpan = 6;
                ddWidth      = "25rem";
            }
            else if (columnsRendered == 3)
            {
                ddRenderSpan = 4;
                ddWidth      = "35rem";
            }


            ViewBag.NodesWithExistingGroups    = nodesWithExistingGroups;
            ViewBag.NodesWithoutExistingGroups = nodesWithoutExistingGroups;
            ViewBag.CurrentNode  = currentNode;
            ViewBag.CurrentArea  = currentArea;
            ViewBag.DDRenderSpan = ddRenderSpan;
            ViewBag.DDWidth      = ddWidth;
            return(await Task.FromResult <IViewComponentResult>(View("NodeNav.Default")));
        }