private List <MenuViewModel.MenuItem> PopulateMenuItems(IEnumerable <MenuItem> source, Guid parentId, Guid languageId) { var result = new List <MenuViewModel.MenuItem>(); foreach (var menuItem in source.Where(x => x.ParentId == parentId).OrderBy(x => x.SortOrder).ToList()) { var text = menuItem.Text; var title = menuItem.Title; var url = "#"; if (languageId != Guid.Empty) { var menuItemLocalisation = menuItem.MenuItemLocalisations.FirstOrDefault(x => x.LanguageId == languageId); if (menuItemLocalisation != null) { text = !string.IsNullOrWhiteSpace(menuItemLocalisation.Text) ? menuItemLocalisation.Text : text; title = !string.IsNullOrWhiteSpace(menuItemLocalisation.Title) ? menuItemLocalisation.Title : title; } } if (menuItem.MenuItemType == MenuItemType.Page) { var page = _pageRepository.GetById(menuItem.PageId); if (page == null || page.Status != PageStatus.Active) { continue; } url = $"/{page.Url}"; } else if (menuItem.MenuItemType == MenuItemType.Link && !string.IsNullOrWhiteSpace(menuItem.Link)) { url = menuItem.Link; } var menuItemModel = new MenuViewModel.MenuItem { Text = text, Title = title, Url = url }; menuItemModel.Children.AddRange(PopulateMenuItems(source, menuItem.Id, languageId)); result.Add(menuItemModel); } return(result); }
private List <MenuViewModel.MenuItem> PopulateMenuItems(IEnumerable <MenuItem> source, Guid parentId, Language language) { var result = new List <MenuViewModel.MenuItem>(); var menuItems = source as IList <MenuItem> ?? source.ToList(); foreach (var menuItem in menuItems.Where(x => x.ParentId == parentId).OrderBy(x => x.SortOrder).ToList()) { var menuItemRoleIds = menuItem.MenuItemPermissions.Select(x => x.RoleId); var text = menuItem.Text; var title = menuItem.Title; var url = "#"; if (language != null) { var menuItemLocalisation = menuItem.MenuItemLocalisations.FirstOrDefault(x => x.LanguageId == language.Id); if (menuItemLocalisation != null) { text = !string.IsNullOrWhiteSpace(menuItemLocalisation.Text) ? menuItemLocalisation.Text : text; title = !string.IsNullOrWhiteSpace(menuItemLocalisation.Title) ? menuItemLocalisation.Title : title; } } if (menuItem.Type == MenuItemType.Page) { var page = _pageRepository.GetById(menuItem.PageId); if (page == null) { continue; } url = language == null ? $"/{page.Url}" : $"/{language.Url}/{page.Url}"; if (language != null) { var pageLocalisation = page.PageLocalisations.FirstOrDefault(x => x.LanguageId == language.Id); if (pageLocalisation != null) { url = !string.IsNullOrEmpty(pageLocalisation.Url) ? $"/{language.Url}/{pageLocalisation.Url}" : url; } } menuItemRoleIds = page.PagePermissions.Where(x => x.Type == PermissionType.View).Select(x => x.RoleId); } else if (menuItem.Type == MenuItemType.Link && !string.IsNullOrWhiteSpace(menuItem.Link)) { url = menuItem.Link; } var menuItemRoles = _roleService.GetRolesFromIds(menuItemRoleIds); var menuItemModel = new MenuViewModel.MenuItem { Text = text, Title = title, Url = url, ViewRoles = menuItemRoles.Select(x => x.Name) }; menuItemModel.Children.AddRange(PopulateMenuItems(menuItems, menuItem.Id, language)); result.Add(menuItemModel); } return(result); }