Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#8808: Fixing Container admin navigation #8809

Open
wants to merge 4 commits into
base: 1.10.x
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
93 changes: 93 additions & 0 deletions src/Orchard.Web/Core/Containers/AdminMenu.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
using System.Linq;
using Orchard.ContentManagement;
using Orchard.Core.Containers.Models;
using Orchard.Core.Containers.Services;
using Orchard.Localization;
using Orchard.Security;
using Orchard.UI.Navigation;
using Orchard.Utility.Extensions;

namespace Orchard.Core.Containers {
public class AdminMenu : INavigationProvider {
private readonly IContainerService _containerService;
private readonly IContentManager _contentManager;
private readonly IAuthorizationService _authorizationService;
private readonly IWorkContextAccessor _workContextAccessor;

public AdminMenu(
IContainerService containerService,
IContentManager contentManager,
IAuthorizationService authorizationService,
IWorkContextAccessor workContextAccessor) {
_containerService = containerService;
_contentManager = contentManager;
_authorizationService = authorizationService;
_workContextAccessor = workContextAccessor;
}

public Localizer T { get; set; }
public string MenuName { get { return "admin"; } }

public void GetNavigation(NavigationBuilder builder) {
builder.AddImageSet("container");

var containers = _containerService
.GetContainersQuery(VersionOptions.Latest)
.Where<ContainerPartRecord>(x => x.ShowOnAdminMenu)
.List()
.Where(content => _authorizationService.TryCheckAccess(
Contents.Permissions.EditContent,
_workContextAccessor.GetContext().CurrentUser,
content))
.ToList();

foreach (var container in containers) {
var closureContainer = container;

if (!string.IsNullOrWhiteSpace(container.AdminMenuImageSet)) {
builder.AddImageSet(container.AdminMenuImageSet.Trim());
}

builder.Add(T(container.AdminMenuText), container.AdminMenuPosition, item => {
var containedItems = _containerService.GetContentItems(closureContainer.Id, VersionOptions.Latest).ToList();
var actualContainer = closureContainer;
var position = 0;

// If the list has just a single item that happens to be a container itself,
// we will treat that one as the actual container to provide a nice & quick way to manage that list.
if (containedItems.Count == 1) {
var containedItem = containedItems.First().As<ContainerPart>();

if (containedItem != null) {
actualContainer = containedItem;
foreach (var itemContentType in containedItem.ItemContentTypes) {
var closureItemContentType = itemContentType;
item.Add(T("New {0}", itemContentType.DisplayName), string.Format("1.{0}", position++), subItem => subItem
.Action("Create", "Admin", new {
id = closureItemContentType.Name,
containerid = containedItem.Id,
area = "Contents"
}));
}
}
}

item.Action(_contentManager.GetItemMetadata(actualContainer).AdminRouteValues)
.AddClass("section-container")
.AddClass(closureContainer.AdminMenuText.HtmlClassify())
.LinkToFirstChild(false);

foreach (var itemContentType in closureContainer.ItemContentTypes) {
var closureItemContentType = itemContentType;
item.Add(T("New {0}", itemContentType.DisplayName), string.Format("1.{0}", position++), subItem => subItem
.Action("Create", "Admin", new {
id = closureItemContentType.Name,
containerid = container.Id,
area = "Contents"
}));
}
});
}
}
}
}
12 changes: 12 additions & 0 deletions src/Orchard.Web/Core/Containers/Styles/Web.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" />
</staticContent>
<handlers accessPolicy="Script,Read">
<!-- For any request to a file exists on disk, return it via native http module. AccessPolicy="Script" above is to allow for a managed 404 page. -->
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule" preCondition="integratedMode" resourceType="File" requireAccess="Read" />
</handlers>
</system.webServer>
</configuration>
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
.menu-admin > .section-container > h3 > a {
background-image: url(images/menu.container.png) !important;
}

.menu-admin > .section-container > h3 > a:hover {
background-position: 0 -30px !important;
}
6 changes: 6 additions & 0 deletions src/Orchard.Web/Core/Orchard.Core.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@
<Compile Include="Common\ViewModels\DateTimeEditor.cs" />
<Compile Include="Common\ViewModels\TextFieldDriverViewModel.cs" />
<Compile Include="Common\ViewModels\TextFieldSettingsEventsViewModel.cs" />
<Compile Include="Containers\AdminMenu.cs" />
<Compile Include="Containers\Controllers\ItemController.cs" />
<Compile Include="Containers\Drivers\ContainablePartDriver.cs" />
<Compile Include="Containers\Drivers\ContainerPartDriver.cs" />
Expand Down Expand Up @@ -318,6 +319,8 @@
<Content Include="Common\Views\Parts.Common.Metadata.cshtml" />
<Content Include="Common\Views\CommonMetadataLastModified.cshtml" />
<Content Include="Containers\Module.txt" />
<Content Include="Containers\Styles\images\menu.container.png" />
<Content Include="Containers\Styles\menu.container-admin.css" />
<Content Include="Shapes\Scripts\admin-localnavigation.js" />
<Content Include="Contents\Styles\images\menu.content.png" />
<Content Include="Contents\Styles\menu.content-admin.css" />
Expand Down Expand Up @@ -610,6 +613,9 @@
<Content Include="Navigation\Views\Admin\Edit.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Containers\Styles\Web.config">
<SubType>Designer</SubType>
</Content>
<None Include="packages.config" />
<Content Include="Title\Views\DefinitionTemplates\TitlePartSettings.cshtml" />
</ItemGroup>
Expand Down
97 changes: 7 additions & 90 deletions src/Orchard.Web/Modules/Orchard.Lists/AdminMenu.cs
Original file line number Diff line number Diff line change
@@ -1,98 +1,15 @@
using System;
using System.Linq;
using Orchard.ContentManagement;
using Orchard.Core.Containers.Models;
using Orchard.Core.Containers.Services;
using Orchard.Localization;
using Orchard.Security;
using Orchard.Localization;
using Orchard.UI.Navigation;
using Orchard.Utility.Extensions;

namespace Orchard.Lists {
public class AdminMenu : INavigationProvider {
private readonly IContainerService _containerService;
private readonly IContentManager _contentManager;
private readonly IAuthorizationService _authorizationService;
private readonly IWorkContextAccessor _workContextAccessor;

public AdminMenu(
IContainerService containerService,
IContentManager contentManager,
IAuthorizationService authorizationService,
IWorkContextAccessor workContextAccessor
) {
_containerService = containerService;
_contentManager = contentManager;
_authorizationService = authorizationService;
_workContextAccessor = workContextAccessor;
}

public Localizer T { get; set; }
public string MenuName { get { return "admin"; } }

public void GetNavigation(NavigationBuilder builder) {
builder.AddImageSet("list");

CreateListManagementMenuItem(builder);
CreateListMenuItems(builder);
}

private void CreateListManagementMenuItem(NavigationBuilder builder) {
builder.Add(T("Lists"), "11", item => item
.Action("Index", "Admin", new {area = "Orchard.Lists"}).Permission(Permissions.ManageLists)
);
}

private void CreateListMenuItems(NavigationBuilder builder) {
var containers = _containerService
.GetContainersQuery(VersionOptions.Latest)
.Where<ContainerPartRecord>(x => x.ShowOnAdminMenu)
.List()
.Where(x => _authorizationService.TryCheckAccess(Orchard.Core.Contents.Permissions.EditContent, _workContextAccessor.GetContext().CurrentUser, x))
.ToList();

foreach (var container in containers) {
var closureContainer = container;

if (!String.IsNullOrWhiteSpace(container.AdminMenuImageSet)) {
builder.AddImageSet(container.AdminMenuImageSet.Trim());
}

builder.Add(T(container.AdminMenuText), container.AdminMenuPosition, item => {
var containedItems = _containerService.GetContentItems(closureContainer.Id, VersionOptions.Latest).ToList();
var actualContainer = closureContainer;
var position = 0;

// If the list has just a single item that happens to be a container itself,
// we will treat that one as the actual container to provide a nice & quick way to manage that list.
if (containedItems.Count == 1) {
var containedItem = containedItems.First().As<ContainerPart>();

if (containedItem != null) {
actualContainer = containedItem;
foreach (var itemContentType in containedItem.ItemContentTypes) {
var closureItemContentType = itemContentType;
item.Add(T("New {0}", itemContentType.DisplayName), String.Format("1.{0}", position++), subItem => subItem
.Action("Create", "Admin", new { id = closureItemContentType.Name, containerid = containedItem.Id, area = "Contents" }));
}
}
}

var containerMetadata = _contentManager.GetItemMetadata(actualContainer);
item.Action(containerMetadata.AdminRouteValues);

item.Action(containerMetadata.AdminRouteValues);
item.AddClass("nav-list");
item.AddClass(closureContainer.AdminMenuText.HtmlClassify());
item.LinkToFirstChild(false);

foreach (var itemContentType in closureContainer.ItemContentTypes) {
var closureItemContentType = itemContentType;
item.Add(T("New {0}", itemContentType.DisplayName), String.Format("1.{0}", position++), subItem => subItem
.Action("Create", "Admin", new { id = closureItemContentType.Name, containerid = container.Id, area = "Contents" }));
}
});
}
}
public void GetNavigation(NavigationBuilder builder) =>
builder
.AddImageSet("lists")
.Add(T("Lists"), "11", item => item
.Action("Index", "Admin", new { area = "Orchard.Lists" }).Permission(Permissions.ManageLists));
}
}
}
7 changes: 3 additions & 4 deletions src/Orchard.Web/Modules/Orchard.Lists/Orchard.Lists.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@
<Content Include="Styles\images\icons.png" />
<Content Include="Styles\images\view.default.png" />
<Content Include="Styles\images\view.condensed.png" />
<Content Include="Styles\menu.lists-admin.css" />
<Content Include="Styles\nprogress.css" />
<Content Include="Scripts\nprogress.js" />
<Content Include="Scripts\orchard-lists-admin.js" />
Expand Down Expand Up @@ -143,16 +144,14 @@
<Content Include="Scripts\orchard-lists-admin.min.js">
<DependentUpon>orchard-lists-admin.js</DependentUpon>
</Content>
<Content Include="Styles\images\menu.list-definition.png" />
<Content Include="Styles\images\menu.lists.png" />
<Content Include="Styles\images\move.gif" />
<Content Include="Styles\images\offline.gif" />
<Content Include="Styles\images\online.gif" />
<Content Include="Styles\list-admin.css" />
<Content Include="Styles\images\menu.list.png" />
<Content Include="Styles\list-admin.min.css">
<DependentUpon>list-admin.css</DependentUpon>
</Content>
<Content Include="Styles\menu.list-admin.css" />
</ItemGroup>
<ItemGroup>
<Content Include="Web.config">
Expand Down Expand Up @@ -272,4 +271,4 @@
</FlavorProperties>
</VisualStudio>
</ProjectExtensions>
</Project>
</Project>
22 changes: 0 additions & 22 deletions src/Orchard.Web/Modules/Orchard.Lists/Styles/menu.list-admin.css

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
.navicon-lists {
background-image: url(images/menu.lists.png) !important;
}

.navicon-lists:hover {
background-position: 0 -30px !important;
}