mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-21 03:14:10 +08:00
#19515: Moving ContentMenuItemPart to Content.Picker
Work Item: 19515 --HG-- branch : 1.x
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user