public async Task <IActionResult> List(string id)
        {
            if (!await _authorizationService.AuthorizeAsync(User, Permissions.ManageAdminMenu))
            {
                return(Unauthorized());
            }

            var adminMenuList = await _mainMenuService.GetMainMenuListAsync();

            var adminMenu = _mainMenuService.GetMainMenuById(adminMenuList, id);

            if (adminMenu == null)
            {
                return(NotFound());
            }

            return(View(await BuildDisplayViewModel(adminMenu)));
        }
Beispiel #2
0
        // We only add them if the caller uses the string "adminMenu").
        // todo: use a public constant for the string
        public async Task BuildNavigationAsync(string name, NavigationBuilder builder)
        {
            if (!String.Equals(name, "mainMenu", StringComparison.OrdinalIgnoreCase))
            {
                return;
            }

            var trees = ((await _mainMenuService.GetMainMenuListAsync()).AdminMenu)
                        .Where(m => m.Enabled && m.MenuItems.Count > 0);

            foreach (var tree in trees)
            {
                if (await _authorizationService.AuthorizeAsync(
                        _httpContextAccessor.HttpContext?.User,
                        Permissions.CreatePermissionForAdminMenu(tree.Name)))
                {
                    await BuildTreeAsync(tree, builder);
                }
            }
        }
Beispiel #3
0
        public async Task <IActionResult> List(AdminMenuListOptions options, PagerParameters pagerParameters)
        {
            if (!await _authorizationService.AuthorizeAsync(User, Permissions.ManageAdminMenu))
            {
                return(Unauthorized());
            }

            var siteSettings = await _siteService.GetSiteSettingsAsync();

            var pager = new Pager(pagerParameters, siteSettings.PageSize);

            // default options
            if (options == null)
            {
                options = new AdminMenuListOptions();
            }

            var adminMenuList = (await _adminMenuService.GetMainMenuListAsync()).AdminMenu;

            if (!string.IsNullOrWhiteSpace(options.Search))
            {
                adminMenuList = adminMenuList.Where(dp => dp.Name.Contains(options.Search)).ToList();
            }

            var count = adminMenuList.Count();

            var startIndex = pager.GetStartIndex();
            var pageSize   = pager.PageSize;
            IEnumerable <Models.AdminMenu> results = new List <Models.AdminMenu>();

            //todo: handle the case where there is a deserialization exception on some of the presets.
            // load at least the ones without error. Provide a way to delete the ones on error.
            try
            {
                results = adminMenuList
                          .Skip(startIndex)
                          .Take(pageSize)
                          .ToList();
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error when retrieving the list of admin menus");
                _notifier.Error(H["Error when retrieving the list of admin menus"]);
            }


            // Maintain previous route data when generating page links
            var routeData = new RouteData();

            routeData.Values.Add("Options.Search", options.Search);

            var pagerShape = (await New.Pager(pager)).TotalItemCount(count).RouteData(routeData);

            var model = new AdminMenuListViewModel
            {
                AdminMenu = results.Select(x => new AdminMenuEntry {
                    AdminMenu = x
                }).ToList(),
                Options = options,
                Pager   = pagerShape
            };

            return(View(model));
        }