diff --git a/src/Orchard.Web/Core/Common/Drivers/IdentityPartDriver.cs b/src/Orchard.Web/Core/Common/Drivers/IdentityPartDriver.cs index fba2ec68d..ea24001db 100644 --- a/src/Orchard.Web/Core/Common/Drivers/IdentityPartDriver.cs +++ b/src/Orchard.Web/Core/Common/Drivers/IdentityPartDriver.cs @@ -28,5 +28,6 @@ namespace Orchard.Core.Common.Drivers { protected override void Exporting(IdentityPart part, ContentManagement.Handlers.ExportContentContext context) { context.Element(part.PartDefinition.Name).SetAttributeValue("Identifier", part.Identifier); } + } } \ No newline at end of file diff --git a/src/Orchard.Web/Core/Common/Handlers/IdentityPartHandler.cs b/src/Orchard.Web/Core/Common/Handlers/IdentityPartHandler.cs index f1521a20e..66356eefa 100644 --- a/src/Orchard.Web/Core/Common/Handlers/IdentityPartHandler.cs +++ b/src/Orchard.Web/Core/Common/Handlers/IdentityPartHandler.cs @@ -9,17 +9,21 @@ namespace Orchard.Core.Common.Handlers { public IdentityPartHandler(IRepository identityRepository, IContentManager contentManager) { Filters.Add(StorageFilter.For(identityRepository)); - OnInitializing(AssignIdentity); + OnInitializing((ctx, part) => AssignIdentity(part)); + OnCloning((ctx, part) => AssignIdentity(part)); OnIndexing((context, part) => { context.DocumentIndex.Add("identifier", part.Identifier).Store(); }); } - protected void AssignIdentity(InitializingContentContext context, IdentityPart part) { + protected void AssignIdentity(IdentityPart part) { part.Identifier = Guid.NewGuid().ToString("n"); } + protected override void Cloning(CloneContentContext context) { + } + protected override void GetItemMetadata(GetContentItemMetadataContext context) { var part = context.ContentItem.As(); diff --git a/src/Orchard/ContentManagement/Handlers/CloneContentContext.cs b/src/Orchard/ContentManagement/Handlers/CloneContentContext.cs new file mode 100644 index 000000000..e449f9469 --- /dev/null +++ b/src/Orchard/ContentManagement/Handlers/CloneContentContext.cs @@ -0,0 +1,6 @@ +namespace Orchard.ContentManagement.Handlers { + public class CloneContentContext : ContentContextBase { + public CloneContentContext(ContentItem contentItem) : base(contentItem) { + } + } +} diff --git a/src/Orchard/ContentManagement/Handlers/ContentHandler.cs b/src/Orchard/ContentManagement/Handlers/ContentHandler.cs index 5631c389f..d3b2c159e 100644 --- a/src/Orchard/ContentManagement/Handlers/ContentHandler.cs +++ b/src/Orchard/ContentManagement/Handlers/ContentHandler.cs @@ -96,6 +96,14 @@ namespace Orchard.ContentManagement.Handlers { protected void OnIndexed(Action handler) where TPart : class, IContent { Filters.Add(new InlineStorageFilter { OnIndexed = handler }); } + protected void OnCloning(Action handler) where TPart : class, IContent { + Filters.Add(new InlineStorageFilter { OnCloning = handler }); + } + + protected void OnCloned(Action handler) where TPart : class, IContent { + Filters.Add(new InlineStorageFilter { OnCloned = handler }); + } + protected void OnImporting(Action handler) where TPart : class, IContent { Filters.Add(new InlineStorageFilter { OnImporting = handler }); } @@ -159,6 +167,8 @@ namespace Orchard.ContentManagement.Handlers { public Action OnRemoved { get; set; } public Action OnIndexing { get; set; } public Action OnIndexed { get; set; } + public Action OnCloning { get; set; } + public Action OnCloned { get; set; } public Action OnImporting { get; set; } public Action OnImported { get; set; } public Action OnImportCompleted { get; set; } @@ -227,6 +237,14 @@ namespace Orchard.ContentManagement.Handlers { if (OnIndexed != null) OnIndexed(context, instance); } + protected override void Cloning(CloneContentContext context, TPart instance) { + if (OnCloning != null) + OnCloning(context, instance); + } + protected override void Cloned(CloneContentContext context, TPart instance) { + if (OnCloned != null) + OnCloned(context, instance); + } protected override void Importing(ImportContentContext context, TPart instance) { if (OnImporting != null) OnImporting(context, instance); @@ -410,6 +428,18 @@ namespace Orchard.ContentManagement.Handlers { Importing(context); } + void IContentHandler.Cloned(CloneContentContext context) { + foreach (var filter in Filters.OfType()) + filter.Cloned(context); + Cloned(context); + } + + void IContentHandler.Cloning(CloneContentContext context) { + foreach (var filter in Filters.OfType()) + filter.Cloning(context); + Cloning(context); + } + void IContentHandler.Imported(ImportContentContext context) { foreach (var filter in Filters.OfType()) filter.Imported(context); @@ -509,6 +539,8 @@ namespace Orchard.ContentManagement.Handlers { protected virtual void Indexing(IndexContentContext context) { } protected virtual void Indexed(IndexContentContext context) { } + protected virtual void Cloning(CloneContentContext context) { } + protected virtual void Cloned(CloneContentContext context) { } protected virtual void Importing(ImportContentContext context) { } protected virtual void Imported(ImportContentContext context) { } protected virtual void ImportCompleted(ImportContentContext context) { } diff --git a/src/Orchard/ContentManagement/Handlers/ContentHandlerBase.cs b/src/Orchard/ContentManagement/Handlers/ContentHandlerBase.cs index d7e4a057a..5e1b39220 100644 --- a/src/Orchard/ContentManagement/Handlers/ContentHandlerBase.cs +++ b/src/Orchard/ContentManagement/Handlers/ContentHandlerBase.cs @@ -20,8 +20,10 @@ public virtual void Removed(RemoveContentContext context) {} public virtual void Indexing(IndexContentContext context) {} public virtual void Indexed(IndexContentContext context) {} - public virtual void Importing(ImportContentContext context) {} - public virtual void Imported(ImportContentContext context) {} + public virtual void Cloning(CloneContentContext context) { } + public virtual void Cloned(CloneContentContext context) { } + public virtual void Importing(ImportContentContext context) { } + public virtual void Imported(ImportContentContext context) { } public virtual void ImportCompleted(ImportContentContext importContentContext) {} public virtual void Exporting(ExportContentContext context) {} public virtual void Exported(ExportContentContext context) {} diff --git a/src/Orchard/ContentManagement/Handlers/IContentHandler.cs b/src/Orchard/ContentManagement/Handlers/IContentHandler.cs index 727a1ee56..917324116 100644 --- a/src/Orchard/ContentManagement/Handlers/IContentHandler.cs +++ b/src/Orchard/ContentManagement/Handlers/IContentHandler.cs @@ -22,6 +22,8 @@ void Indexed(IndexContentContext context); void Importing(ImportContentContext context); void Imported(ImportContentContext context); + void Cloning(CloneContentContext context); + void Cloned(CloneContentContext context); void ImportCompleted(ImportContentContext importContentContext); void Exporting(ExportContentContext context); void Exported(ExportContentContext context); diff --git a/src/Orchard/ContentManagement/Handlers/IContentStorageFilter.cs b/src/Orchard/ContentManagement/Handlers/IContentStorageFilter.cs index 5a4abda62..d0e25e516 100644 --- a/src/Orchard/ContentManagement/Handlers/IContentStorageFilter.cs +++ b/src/Orchard/ContentManagement/Handlers/IContentStorageFilter.cs @@ -19,6 +19,8 @@ namespace Orchard.ContentManagement.Handlers { void Removed(RemoveContentContext context); void Indexing(IndexContentContext context); void Indexed(IndexContentContext context); + void Cloning(CloneContentContext context); + void Cloned(CloneContentContext context); void Importing(ImportContentContext context); void Imported(ImportContentContext context); void ImportCompleted(ImportContentContext context); diff --git a/src/Orchard/ContentManagement/Handlers/StorageFilterBase.cs b/src/Orchard/ContentManagement/Handlers/StorageFilterBase.cs index df909592d..4ade68d0a 100644 --- a/src/Orchard/ContentManagement/Handlers/StorageFilterBase.cs +++ b/src/Orchard/ContentManagement/Handlers/StorageFilterBase.cs @@ -21,6 +21,8 @@ namespace Orchard.ContentManagement.Handlers { protected virtual void Removed(RemoveContentContext context, TPart instance) { } protected virtual void Indexing(IndexContentContext context, TPart instance) { } protected virtual void Indexed(IndexContentContext context, TPart instance) { } + protected virtual void Cloning(CloneContentContext context, TPart instance) { } + protected virtual void Cloned(CloneContentContext context, TPart instance) { } protected virtual void Importing(ImportContentContext context, TPart instance) { } protected virtual void Imported(ImportContentContext context, TPart instance) { } protected virtual void ImportCompleted(ImportContentContext context, TPart instance) { } @@ -126,6 +128,16 @@ namespace Orchard.ContentManagement.Handlers { Indexed(context, context.ContentItem.As()); } + void IContentStorageFilter.Cloning(CloneContentContext context) { + if (context.ContentItem.Is()) + Cloning(context, context.ContentItem.As()); + } + + void IContentStorageFilter.Cloned(CloneContentContext context) { + if (context.ContentItem.Is()) + Cloned(context, context.ContentItem.As()); + } + void IContentStorageFilter.Importing(ImportContentContext context) { if (context.ContentItem.Is()) Importing(context, context.ContentItem.As()); diff --git a/src/Orchard/Orchard.Framework.csproj b/src/Orchard/Orchard.Framework.csproj index 958a44cac..594db8da5 100644 --- a/src/Orchard/Orchard.Framework.csproj +++ b/src/Orchard/Orchard.Framework.csproj @@ -169,6 +169,7 @@ +