#19084: Handling publishing/unpublishing event for Content Menu Items

When a content item is removed, its menu items are also.
When a content item is unpublished, its menu items are also.
When a content item is published, its menu items are also.

Work Item: 19084

--HG--
branch : 1.x
This commit is contained in:
Sebastien Ros
2012-10-11 18:17:10 -07:00
parent 48cfa18254
commit feeabef479
2 changed files with 70 additions and 0 deletions

View File

@@ -0,0 +1,65 @@
using JetBrains.Annotations;
using Orchard.ContentManagement;
using Orchard.Core.Navigation.Models;
using Orchard.Data;
using Orchard.ContentManagement.Handlers;
namespace Orchard.Core.Navigation.Handlers {
[UsedImplicitly]
public class NavigationPartHandler : ContentHandler {
private readonly IContentManager _contentManager;
private readonly IRepository<ContentMenuItemPartRecord> _repository;
public NavigationPartHandler(IContentManager contentManager, IRepository<ContentMenuItemPartRecord> repository) {
_contentManager = contentManager;
_repository = repository;
OnRemoving<NavigationPart>((context, part) => RemoveContentItems(part));
OnUnpublished<NavigationPart>((context, part) => UnpublishContentItems(part));
OnPublished<NavigationPart>((context, part) => PublishContentItems(part));
}
public void RemoveContentItems(NavigationPart part) {
// look for ContentMenuItemPart with this content
var contentMenuItemRecords = _repository.Fetch(x => x.ContentMenuItemRecord == part.ContentItem.Record);
// delete all menu items linking to this content item
foreach (var contentMenuItemRecord in contentMenuItemRecords) {
// look for any version
var contentItem = _contentManager.Get(contentMenuItemRecord.Id, VersionOptions.AllVersions);
if (contentItem != null) {
_contentManager.Remove(contentItem);
}
}
}
public void UnpublishContentItems(NavigationPart part) {
// look for ContentMenuItemPart with this content
var contentMenuItemRecords = _repository.Fetch(x => x.ContentMenuItemRecord == part.ContentItem.Record);
// delete all menu items linking to this content item
foreach (var contentMenuItemRecord in contentMenuItemRecords) {
// look for a published version only
var contentItem = _contentManager.Get(contentMenuItemRecord.Id);
if (contentItem != null) {
_contentManager.Unpublish(contentItem);
}
}
}
public void PublishContentItems(NavigationPart part) {
// look for ContentMenuItemPart with this content
var contentMenuItemRecords = _repository.Fetch(x => x.ContentMenuItemRecord == part.ContentItem.Record);
// delete all menu items linking to this content item
foreach (var contentMenuItemRecord in contentMenuItemRecords) {
// even look for an unpublished version
var contentItem = _contentManager.Get(contentMenuItemRecord.Id, VersionOptions.Latest);
if(contentItem != null) {
_contentManager.Publish(contentItem);
}
}
}
}
}

View File

@@ -21,6 +21,10 @@
</UpgradeBackupLocation>
<TargetFrameworkProfile />
<UseIISExpress>false</UseIISExpress>
<IISExpressSSLPort />
<IISExpressAnonymousAuthentication />
<IISExpressWindowsAuthentication />
<IISExpressUseClassicPipelineMode />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
@@ -138,6 +142,7 @@
<Compile Include="Navigation\Drivers\MenuWidgetPartDriver.cs" />
<Compile Include="Navigation\Handlers\AdminMenuPartHandler.cs" />
<Compile Include="Navigation\Handlers\ContentMenuItemPartHandler.cs" />
<Compile Include="Navigation\Handlers\NavigationPartHandler.cs" />
<Compile Include="Navigation\Handlers\MenuHandler.cs" />
<Compile Include="Navigation\Handlers\MenuWidgetPartHandler.cs" />
<Compile Include="Navigation\Models\AdminMenuPart.cs" />