#19515: Moving ContentMenuItemPart to Content.Picker

Work Item: 19515

--HG--
branch : 1.x
This commit is contained in:
Sebastien Ros
2013-03-13 12:08:00 -07:00
parent 5cbbaca0dc
commit 875b28b6c5
32 changed files with 167 additions and 112 deletions

View File

@@ -1,40 +0,0 @@
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 ContentMenuItemPartHandler : ContentHandler {
private readonly IContentManager _contentManager;
public ContentMenuItemPartHandler(IContentManager contentManager, IRepository<ContentMenuItemPartRecord> repository) {
_contentManager = contentManager;
Filters.Add(new ActivatingFilter<ContentMenuItemPart>("ContentMenuItem"));
Filters.Add(StorageFilter.For(repository));
OnLoading<ContentMenuItemPart>((context, part) => part._content.Loader(p => contentManager.Get(part.Record.ContentMenuItemRecord.Id)));
}
protected override void GetItemMetadata(GetContentItemMetadataContext context) {
base.GetItemMetadata(context);
if (context.ContentItem.ContentType != "ContentMenuItem") {
return;
}
var contentMenuItemPart = context.ContentItem.As<ContentMenuItemPart>();
// the display route for the menu item is the one for the referenced content item
if(contentMenuItemPart != null) {
// if the content doesn't exist anymore
if(contentMenuItemPart.Content == null) {
return;
}
context.Metadata.DisplayRouteValues = _contentManager.GetItemMetadata(contentMenuItemPart.Content).DisplayRouteValues;
}
}
}
}

View File

@@ -1,65 +0,0 @@
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);
}
}
}
}
}