Adding NavigationPart to display the menus a content item is on

--HG--
branch : 1.x
This commit is contained in:
Sebastien Ros
2012-06-01 17:30:06 -07:00
parent 696cc68191
commit 1e64869955
9 changed files with 101 additions and 2 deletions

View File

@@ -9,4 +9,4 @@ cfc264d41c1d299c104d76c5032d8ffee3047dcd src/Orchard.Web/Modules/Orchard.Rules
f6fecd1702066225a84a482ac029e3e6daff38f3 src/Orchard.Web/Modules/Orchard.ViewPermissions
4ed51e0e76c2aacc2de90ce9984fd00cfdfae2ce src/orchard.web/Modules/Orchard.Alias
29857523c5275b8566ee3a6f4ba2a3d641e7fa0c src/orchard.web/Modules/Orchard.Projections
e8d6ad7df228083093e57d5b5d489a949bd68cfb src/orchard.web/modules/Orchard.Fields
279e1454557e7c36b3c0d87d6dc9b3b553511dd7 src/orchard.web/modules/Orchard.Fields

View File

@@ -16,6 +16,10 @@ namespace Orchard.Core.Navigation.Drivers {
}
protected override DriverResult Editor(MenuItemPart part, dynamic shapeHelper) {
var currentUser = _workContextAccessor.GetContext().CurrentUser;
if (!_authorizationService.TryCheckAccess(Permissions.ManageMainMenu, currentUser, part))
return null;
return ContentShape("Parts_MenuItem_Edit",
() => shapeHelper.EditorTemplate(TemplateName: "Parts.MenuItem.Edit", Model: part, Prefix: Prefix));
}

View File

@@ -0,0 +1,41 @@
using Orchard.ContentManagement;
using Orchard.ContentManagement.Drivers;
using Orchard.Core.Navigation.Models;
using Orchard.Core.Navigation.ViewModels;
using Orchard.Security;
namespace Orchard.Core.Navigation.Drivers {
public class NavigationPartDriver : ContentPartDriver<NavigationPart> {
private readonly IAuthorizationService _authorizationService;
private readonly IWorkContextAccessor _workContextAccessor;
private readonly IContentManager _contentManager;
public NavigationPartDriver(
IAuthorizationService authorizationService,
IWorkContextAccessor workContextAccessor,
IContentManager contentManager) {
_authorizationService = authorizationService;
_workContextAccessor = workContextAccessor;
_contentManager = contentManager;
}
protected override DriverResult Editor(NavigationPart part, dynamic shapeHelper) {
var currentUser = _workContextAccessor.GetContext().CurrentUser;
if (!_authorizationService.TryCheckAccess(Permissions.ManageMainMenu, currentUser, part))
return null;
return ContentShape("Parts_Navigation_Edit",
() => {
// loads all menu part of type ContentMenuItem linking to the current content item
var model = new NavigationPartViewModel() {
Part = part,
ContentMenuItems = _contentManager.Query<MenuPart>()
.Join<ContentMenuItemPartRecord>().Where(x => x.ContentMenuItemRecord == part.ContentItem.Record).List()
};
return shapeHelper.EditorTemplate(TemplateName: "Parts.Navigation.Edit", Model: model, Prefix: Prefix);
});
}
}
}

View File

@@ -7,6 +7,7 @@ namespace Orchard.Core.Navigation {
public int Create() {
ContentDefinitionManager.AlterPartDefinition("MenuPart", builder => builder.Attachable());
ContentDefinitionManager.AlterPartDefinition("NavigationPart", builder => builder.Attachable());
ContentDefinitionManager.AlterTypeDefinition("Page", cfg => cfg.WithPart("MenuPart"));
SchemaBuilder.CreateTable("MenuItemPartRecord",
@@ -138,7 +139,7 @@ namespace Orchard.Core.Navigation {
;
ContentDefinitionManager.AlterTypeDefinition("HtmlMenuItem", cfg => cfg
.WithPart("MenuPart")
.WithPart("MenuPart")
.WithPart("BodyPart")
.WithPart("CommonPart")
.DisplayedAs("Html Menu Item")
@@ -147,6 +148,8 @@ namespace Orchard.Core.Navigation {
.WithSetting("Stereotype", "MenuItem")
);
ContentDefinitionManager.AlterPartDefinition("NavigationPart", builder => builder.Attachable());
return 3;
}
}

View File

@@ -0,0 +1,9 @@
using Orchard.ContentManagement;
namespace Orchard.Core.Navigation.Models {
/// <summary>
/// Allows the management of Content Menu Items associated with a Content Item
/// </summary>
public class NavigationPart : ContentPart {
}
}

View File

@@ -1,6 +1,7 @@
<Placement>
<Place Parts_Navigation_Menu_Edit="Content:9"/>
<Place Parts_Navigation_AdminMenu_Edit="Content:9.1"/>
<Place Parts_Navigation_Edit="Content:10"/>
<Place Parts_MenuItem_Edit="Content:10"/>
<Place Parts_ContentMenuItem_Edit="Content:10"/>
<Place Parts_MenuWidget_Edit="Content:10"/>

View File

@@ -0,0 +1,9 @@
using System.Collections.Generic;
using Orchard.Core.Navigation.Models;
namespace Orchard.Core.Navigation.ViewModels {
public class NavigationPartViewModel {
public IEnumerable<MenuPart> ContentMenuItems { get; set; }
public NavigationPart Part { get; set; }
}
}

View File

@@ -0,0 +1,26 @@
@model Orchard.Core.Navigation.ViewModels.NavigationPartViewModel
@using Orchard.ContentManagement
@{
var contentManager = WorkContext.Resolve<IContentManager>();
}
<fieldset>
<label>@T("Menu Items")</label>
<span class="hint">@T("The menu items linking to this content item.")</span>
@if(Model.ContentMenuItems.Any()) {
<ul>
@foreach(var menuPart in Model.ContentMenuItems) {
var menuContentItem = contentManager.Get(menuPart.Menu.Id);
var menuName = Html.ItemDisplayText(menuContentItem).ToString();
<li>
<div><span>@menuPart.MenuText</span> @T("on") <span>@Html.ActionLink(menuName, "Index", "Admin", new { area = "Navigation", menuId = menuContentItem.Id }, new {}) </span></div>
</li>
}
</ul>
}
else {
@T("Not displayed in any menu.")
}
</fieldset>

View File

@@ -131,6 +131,7 @@
<Compile Include="Dashboard\Services\CompilationErrorBanner.cs" />
<Compile Include="Navigation\Commands\MenuCommands.cs" />
<Compile Include="Navigation\Drivers\AdminMenuPartDriver.cs" />
<Compile Include="Navigation\Drivers\NavigationPartDriver.cs" />
<Compile Include="Navigation\Drivers\MenuItemPartDriver.cs" />
<Compile Include="Navigation\Drivers\MenuWidgetPartDriver.cs" />
<Compile Include="Navigation\Handlers\AdminMenuPartHandler.cs" />
@@ -140,6 +141,7 @@
<Compile Include="Navigation\Models\AdminMenuPartRecord.cs" />
<Compile Include="Navigation\Models\ContentMenuItemPartRecord.cs" />
<Compile Include="Navigation\Models\ContentMenuItemPart.cs" />
<Compile Include="Navigation\Models\NavigationPart.cs" />
<Compile Include="Navigation\Models\MenuWidgetPartRecord.cs" />
<Compile Include="Navigation\Models\MenuWidgetPart.cs" />
<Compile Include="Navigation\Services\AdminMenuNavigationProvider.cs" />
@@ -150,6 +152,7 @@
<Compile Include="Contents\ViewModels\ListContentsViewModel.cs" />
<Compile Include="Contents\ViewModels\ListContentTypesViewModel.cs" />
<Compile Include="Navigation\ViewModels\ContentMenuItemEditViewModel.cs" />
<Compile Include="Navigation\ViewModels\NavigationPartViewModel.cs" />
<Compile Include="Navigation\ViewModels\MenuPartViewModel.cs" />
<Compile Include="Navigation\ViewModels\MenuWidgetViewModel.cs" />
<Compile Include="Reports\AdminMenu.cs" />
@@ -538,6 +541,9 @@
<ItemGroup>
<Content Include="Navigation\Views\MenuItemLink-ContentMenuItem.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Navigation\Views\EditorTemplates\Parts.Navigation.Edit.cshtml" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.