using System.Collections.Generic; using AutoMapper; using Umbraco.Web.Models.ContentEditing; using Umbraco.Web.Mvc; using System.Linq; using Umbraco.Web.Trees; namespace Umbraco.Web.Editors { /// /// The API controller used for using the list of sections /// [PluginController("UmbracoApi")] public class SectionController : UmbracoAuthorizedJsonController { public IEnumerable
GetSections() { var sections = Services.SectionService.GetAllowedSections(Security.GetUserId()); var sectionModels = sections.Select(Mapper.Map).ToArray(); //Check if there are empty dashboards or dashboards that will end up empty based on the current user's access //and add the meta data about them var dashboardHelper = new DashboardHelper(Services.SectionService); //this is a bit nasty since we'll be proxying via the app tree controller but we sort of have to do that //since tree's by nature are controllers and require request contextual data. var appTreeController = new ApplicationTreeController { ControllerContext = ControllerContext }; var dashboards = dashboardHelper.GetDashboards(Security.CurrentUser); //now we can add metadata for each section so that the UI knows if there's actually anything at all to render for //a dashboard for a given section, then the UI can deal with it accordingly (i.e. redirect to the first tree) foreach (var section in sectionModels) { var hasDashboards = false; IEnumerable> dashboardsForSection; if (dashboards.TryGetValue(section.Alias, out dashboardsForSection)) { if (dashboardsForSection.Any()) hasDashboards = true; } if (hasDashboards == false) { //get the first tree in the section and get it's root node route path var sectionTrees = appTreeController.GetApplicationTrees(section.Alias, null, null).Result; section.RoutePath = sectionTrees.IsContainer == false ? sectionTrees.RoutePath : sectionTrees.Children[0].RoutePath; } } return sectionModels; } public IEnumerable
GetAllSections() { var sections = Services.SectionService.GetSections(); return sections.Select(Mapper.Map); } } }