U4-10227 Users section should start in the user tree

This commit is contained in:
Shannon
2017-08-10 17:25:16 +10:00
parent 62e467d860
commit 72495b3eaf
8 changed files with 178 additions and 68 deletions

View File

@@ -5,6 +5,8 @@ using Umbraco.Web.Models.ContentEditing;
using Umbraco.Web.Mvc;
using Umbraco.Web.WebApi;
using System.Linq;
using System.Net.Http.Formatting;
using Umbraco.Web.Trees;
namespace Umbraco.Web.Editors
{
@@ -15,9 +17,45 @@ namespace Umbraco.Web.Editors
public class SectionController : UmbracoAuthorizedJsonController
{
public IEnumerable<Section> GetSections()
{
var sections = Services.SectionService.GetAllowedSections(UmbracoUser.Id);
return sections.Select(Mapper.Map<Core.Models.Section, Section>);
{
var sections = Services.SectionService.GetAllowedSections(Security.GetUserId());
var sectionModels = sections.Select(Mapper.Map<Core.Models.Section, Section>).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<Tab<DashboardControl>> 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<Section> GetAllSections()