diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Module.txt b/src/Orchard.Web/Modules/Orchard.AuditTrail/Module.txt index 2817a7e3b..8a2564d11 100644 --- a/src/Orchard.Web/Modules/Orchard.AuditTrail/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Module.txt @@ -10,4 +10,4 @@ Features: Name: AuditTrail Description: Provides the core audit trail framework. Category: Security - Dependencies: Orchard.Users, Orchard.Roles \ No newline at end of file + Dependencies: Orchard.Users, Orchard.Roles, Orchard.ContentTypes \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Orchard.AuditTrail.csproj b/src/Orchard.Web/Modules/Orchard.AuditTrail/Orchard.AuditTrail.csproj index a936c5b63..03330ad3e 100644 --- a/src/Orchard.Web/Modules/Orchard.AuditTrail/Orchard.AuditTrail.csproj +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Orchard.AuditTrail.csproj @@ -91,6 +91,18 @@ + + + + + + + + + + + + @@ -106,6 +118,11 @@ + + + + + diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/ContentDefinitionEventHandler.cs b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/ContentDefinitionEventHandler.cs new file mode 100644 index 000000000..bb79ed7d0 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/ContentDefinitionEventHandler.cs @@ -0,0 +1,80 @@ +using System.Collections.Generic; +using Orchard.AuditTrail.Services; +using Orchard.ContentManagement.MetaData.Models; + +namespace Orchard.AuditTrail.Providers.ContentDefinition { + public class ContentDefinitionEventHandler : IContentDefinitionEventHandler { + private readonly IAuditTrailManager _auditTrailManager; + private readonly IWorkContextAccessor _wca; + + public ContentDefinitionEventHandler(IAuditTrailManager auditTrailManager, IWorkContextAccessor wca) { + _auditTrailManager = auditTrailManager; + _wca = wca; + } + + public void ContentTypeCreated(dynamic context) { + RecordContentTypeAuditTrail(ContentTypeAuditTrailEventProvider.Created, context.ContentTypeDefinition); + } + + public void ContentTypeRemoved(dynamic context) { + RecordContentTypeAuditTrail(ContentTypeAuditTrailEventProvider.Removed, context.ContentTypeDefinition); + } + + public void ContentPartCreated(dynamic context) { + RecordContentPartAuditTrail(ContentPartAuditTrailEventProvider.Created, context.ContentPartDefinition); + } + + public void ContentPartRemoved(dynamic context) { + RecordContentPartAuditTrail(ContentPartAuditTrailEventProvider.Removed, context.ContentPartDefinition); + } + + public void ContentPartAttached(dynamic context) { + RecordContentTypePartAuditTrail(ContentTypeAuditTrailEventProvider.PartAdded, context.ContentTypeName, context.ContentPartName); + } + + public void ContentPartDetached(dynamic context) { + RecordContentTypePartAuditTrail(ContentTypeAuditTrailEventProvider.PartRemoved, context.ContentTypeName, context.ContentPartName); + } + + public void ContentFieldAttached(dynamic context) { + var eventData = new Dictionary { + {"ContentPartName", context.ContentPartName}, + {"ContentFieldName", context.ContentFieldName}, + {"ContentFieldTypeName", context.ContentFieldTypeName}, + {"ContentFieldDisplayName", context.ContentFieldDisplayName} + }; + _auditTrailManager.Record(ContentPartAuditTrailEventProvider.FieldAdded, _wca.GetContext().CurrentUser, properties: null, eventData: eventData, eventFilterKey: "contentpart", eventFilterData: context.ContentPartName); + } + + public void ContentFieldDetached(dynamic context) { + var eventData = new Dictionary { + {"ContentPartName", context.ContentPartName}, + {"ContentFieldName", context.ContentFieldName} + }; + _auditTrailManager.Record(ContentPartAuditTrailEventProvider.FieldRemoved, _wca.GetContext().CurrentUser, properties: null, eventData: eventData, eventFilterKey: "contentpart", eventFilterData: context.ContentPartName); + } + + private void RecordContentTypeAuditTrail(string eventName, ContentTypeDefinition contentTypeDefinition) { + var eventData = new Dictionary { + {"ContentTypeName", contentTypeDefinition.Name}, + {"ContentTypeDisplayName", contentTypeDefinition.DisplayName}, + }; + _auditTrailManager.Record(eventName, _wca.GetContext().CurrentUser, properties: null, eventData: eventData, eventFilterKey: "contenttype", eventFilterData: contentTypeDefinition.Name); + } + + private void RecordContentPartAuditTrail(string eventName, ContentPartDefinition contentPartDefinition) { + var eventData = new Dictionary { + {"ContentPartName", contentPartDefinition.Name} + }; + _auditTrailManager.Record(eventName, _wca.GetContext().CurrentUser, properties: null, eventData: eventData, eventFilterKey: "contentpart", eventFilterData: contentPartDefinition.Name); + } + + private void RecordContentTypePartAuditTrail(string eventName, string contentTypeName, string contentPartName) { + var eventData = new Dictionary { + {"ContentTypeName", contentTypeName}, + {"ContentPartName", contentPartName} + }; + _auditTrailManager.Record(eventName, _wca.GetContext().CurrentUser, properties: null, eventData: eventData, eventFilterKey: "contenttype", eventFilterData: contentTypeName); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/ContentPartAuditTrailEventProvider.cs b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/ContentPartAuditTrailEventProvider.cs new file mode 100644 index 000000000..6b5427a3a --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/ContentPartAuditTrailEventProvider.cs @@ -0,0 +1,25 @@ +using Orchard.AuditTrail.Models; +using Orchard.AuditTrail.Services; + +namespace Orchard.AuditTrail.Providers.ContentDefinition { + public class ContentPartAuditTrailEventProvider : AuditTrailEventProviderBase { + public const string Created = "Created"; + public const string Removed = "Removed"; + public const string DescriptionChanged = "DescriptionChanged"; + public const string FieldAdded = "FieldAdded"; + public const string FieldRemoved = "FieldRemoved"; + public const string PartSettingsUpdated = "PartSettingsUpdated"; + public const string FieldSettingsUpdated = "FieldSettingsUpdated"; + + public override void Describe(DescribeContext context) { + context.For("ContentPart", T("Content Part")) + .Event(this, Created, T("Created"), T("Content Type was created."), enableByDefault: true) + .Event(this, Removed, T("Removed"), T("Content Type was removed."), enableByDefault: true) + .Event(this, DescriptionChanged, T("Description changed"), T("Content Part description was changed."), enableByDefault: true) + .Event(this, FieldAdded, T("Field added"), T("Content Field was added."), enableByDefault: true) + .Event(this, FieldRemoved, T("Field removed"), T("Content Field was removed."), enableByDefault: true) + .Event(this, PartSettingsUpdated, T("Part settings updated"), T("Content Part settings were updated."), enableByDefault: true) + .Event(this, FieldSettingsUpdated, T("Field settings updated"), T("Content Field settings were updated."), enableByDefault: true); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/ContentTypeAuditTrailEventProvider.cs b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/ContentTypeAuditTrailEventProvider.cs new file mode 100644 index 000000000..4ef7a0222 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/ContentTypeAuditTrailEventProvider.cs @@ -0,0 +1,23 @@ +using Orchard.AuditTrail.Models; +using Orchard.AuditTrail.Services; + +namespace Orchard.AuditTrail.Providers.ContentDefinition { + public class ContentTypeAuditTrailEventProvider : AuditTrailEventProviderBase { + public const string Created = "Created"; + public const string Removed = "Removed"; + public const string PartAdded = "PartAdded"; + public const string PartRemoved = "PartRemoved"; + public const string TypeSettingsUpdated = "TypeSettingsUpdated"; + public const string PartSettingsUpdated = "PartSettingsUpdated"; + + public override void Describe(DescribeContext context) { + context.For("ContentType", T("Content Type")) + .Event(this, Created, T("Created"), T("Content Type was created."), enableByDefault: true) + .Event(this, Removed, T("Removed"), T("Content Type was removed."), enableByDefault: true) + .Event(this, PartAdded, T("Part added"), T("Content Part was added."), enableByDefault: true) + .Event(this, PartRemoved, T("Part removed"), T("Content Part was removed."), enableByDefault: true) + .Event(this, TypeSettingsUpdated, T("Type Settings updated"), T("Content Type settings were updated."), enableByDefault: true) + .Event(this, PartSettingsUpdated, T("Part Settings updated"), T("Content Part settings were updated."), enableByDefault: true); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/GlobalContentDefinitionEditorEvents.cs b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/GlobalContentDefinitionEditorEvents.cs new file mode 100644 index 000000000..b04a62333 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/GlobalContentDefinitionEditorEvents.cs @@ -0,0 +1,61 @@ +using System.Collections.Generic; +using Orchard.AuditTrail.Services; +using Orchard.ContentManagement; +using Orchard.ContentManagement.MetaData; +using Orchard.ContentManagement.MetaData.Builders; +using Orchard.ContentManagement.ViewModels; + +namespace Orchard.AuditTrail.Providers.ContentDefinition { + public class GlobalContentDefinitionEditorEvents : ContentDefinitionEditorEventsBase { + private readonly IAuditTrailManager _auditTrailManager; + private readonly IWorkContextAccessor _wca; + + public GlobalContentDefinitionEditorEvents(IAuditTrailManager auditTrailManager, IWorkContextAccessor wca) { + _auditTrailManager = auditTrailManager; + _wca = wca; + } + + public override IEnumerable TypeEditorUpdate(ContentTypeDefinitionBuilder builder, IUpdateModel updateModel) { + var eventData = new Dictionary { + {"ContentTypeName", builder.Name} + }; + RecordContentTypeAuditTrail(ContentTypeAuditTrailEventProvider.TypeSettingsUpdated, eventData, builder.Name); + yield break; + } + + public override IEnumerable TypePartEditorUpdate(ContentTypePartDefinitionBuilder builder, IUpdateModel updateModel) { + var eventData = new Dictionary { + {"ContentPartName", builder.Name}, + {"ContentTypeName", builder.TypeName} + }; + RecordContentTypeAuditTrail(ContentTypeAuditTrailEventProvider.PartSettingsUpdated, eventData, builder.TypeName); + yield break; + } + + public override IEnumerable PartEditorUpdate(ContentPartDefinitionBuilder builder, IUpdateModel updateModel) { + var eventData = new Dictionary { + {"ContentPartName", builder.Name} + }; + RecordContentPartAuditTrail(ContentPartAuditTrailEventProvider.PartSettingsUpdated, eventData, builder.Name); + yield break; + } + + public override IEnumerable PartFieldEditorUpdate(ContentPartFieldDefinitionBuilder builder, IUpdateModel updateModel) { + var eventData = new Dictionary { + {"ContentFieldName", builder.Name}, + {"ContentFieldType", builder.FieldType}, + {"ContentPartName", builder.PartName} + }; + RecordContentPartAuditTrail(ContentPartAuditTrailEventProvider.FieldSettingsUpdated, eventData, builder.PartName); + yield break; + } + + private void RecordContentTypeAuditTrail(string eventName, IDictionary eventData, string contentTypeName) { + _auditTrailManager.Record(eventName, _wca.GetContext().CurrentUser, properties: null, eventData: eventData, eventFilterKey: "contenttype", eventFilterData: contentTypeName); + } + + private void RecordContentPartAuditTrail(string eventName, IDictionary eventData, string contentPartName) { + _auditTrailManager.Record(eventName, _wca.GetContext().CurrentUser, properties: null, eventData: eventData, eventFilterKey: "contentpart", eventFilterData: contentPartName); + } + } +} diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/IContentDefinitionEventHandler.cs b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/IContentDefinitionEventHandler.cs new file mode 100644 index 000000000..e5f921f7c --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/IContentDefinitionEventHandler.cs @@ -0,0 +1,14 @@ +using Orchard.Events; + +namespace Orchard.AuditTrail.Providers.ContentDefinition { + public interface IContentDefinitionEventHandler : IEventHandler { + void ContentTypeCreated(dynamic context); + void ContentTypeRemoved(dynamic context); + void ContentPartCreated(dynamic context); + void ContentPartRemoved(dynamic context); + void ContentPartAttached(dynamic context); + void ContentPartDetached(dynamic context); + void ContentFieldAttached(dynamic context); + void ContentFieldDetached(dynamic context); + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-Created.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-Created.SummaryAdmin.cshtml new file mode 100644 index 000000000..9e6b51388 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-Created.SummaryAdmin.cshtml @@ -0,0 +1,9 @@ +@using Orchard.AuditTrail.Helpers +@{ + var eventData = (IDictionary) Model.EventData; + var contentPartName = eventData.Get("ContentPartName"); +} + +
+ @T("Created the {0} content part.", contentPartName) +
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-FieldAdded.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-FieldAdded.SummaryAdmin.cshtml new file mode 100644 index 000000000..6f61b5602 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-FieldAdded.SummaryAdmin.cshtml @@ -0,0 +1,12 @@ +@using Orchard.AuditTrail.Helpers +@{ + var eventData = (IDictionary) Model.EventData; + var contentPartName = eventData.Get("ContentPartName"); + var contentFieldName = eventData.Get("ContentFieldName"); + var contentFieldTypeName = eventData.Get("ContentFieldTypeName"); + var contentDisplayName = eventData.Get("ContentDisplayName"); +} + +
+ @T("Added the {0} content field of type {1} to the {2} content part.", contentFieldName, contentFieldTypeName, contentPartName) +
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-FieldRemoved.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-FieldRemoved.SummaryAdmin.cshtml new file mode 100644 index 000000000..a88e8c570 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-FieldRemoved.SummaryAdmin.cshtml @@ -0,0 +1,10 @@ +@using Orchard.AuditTrail.Helpers +@{ + var eventData = (IDictionary) Model.EventData; + var contentPartName = eventData.Get("ContentPartName"); + var contentFieldName = eventData.Get("ContentFieldName"); +} + +
+ @T("Removed the {0} content field from the {1} content part.", contentFieldName, contentPartName) +
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-FieldSettingsUpdated.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-FieldSettingsUpdated.SummaryAdmin.cshtml new file mode 100644 index 000000000..efff40e3f --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-FieldSettingsUpdated.SummaryAdmin.cshtml @@ -0,0 +1,10 @@ +@using Orchard.AuditTrail.Helpers +@{ + var eventData = (IDictionary) Model.EventData; + var contentPartName = eventData.Get("ContentPartName"); + var contentFieldName = eventData.Get("ContentFieldName"); +} + +
+ @T("Settings for the {0} content field of the {1} content part were updated.", contentFieldName, contentPartName) +
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-PartSettingsUpdated.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-PartSettingsUpdated.SummaryAdmin.cshtml new file mode 100644 index 000000000..6bd2ffc76 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-PartSettingsUpdated.SummaryAdmin.cshtml @@ -0,0 +1,9 @@ +@using Orchard.AuditTrail.Helpers +@{ + var eventData = (IDictionary) Model.EventData; + var contentPartName = eventData.Get("ContentPartName"); +} + +
+ @T("Settings for the {0} content part were updated.", contentPartName) +
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-Removed.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-Removed.SummaryAdmin.cshtml new file mode 100644 index 000000000..e3b7718a1 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-Removed.SummaryAdmin.cshtml @@ -0,0 +1,9 @@ +@using Orchard.AuditTrail.Helpers +@{ + var eventData = (IDictionary) Model.EventData; + var contentPartName = eventData.Get("ContentPartName"); +} + +
+ @T("Removed the {0} content part.", contentPartName) +
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-Created.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-Created.SummaryAdmin.cshtml new file mode 100644 index 000000000..3a4e0ef90 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-Created.SummaryAdmin.cshtml @@ -0,0 +1,10 @@ +@using Orchard.AuditTrail.Helpers +@{ + var eventData = (IDictionary) Model.EventData; + var contentTypeName = eventData.Get("ContentTypeName"); + var contentTypeDisplayName = eventData.Get("ContentTypeDisplayName"); +} + +
+ @T("Created the {0} content type.", contentTypeName) +
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-PartAdded.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-PartAdded.SummaryAdmin.cshtml new file mode 100644 index 000000000..5532bcf39 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-PartAdded.SummaryAdmin.cshtml @@ -0,0 +1,10 @@ +@using Orchard.AuditTrail.Helpers +@{ + var eventData = (IDictionary) Model.EventData; + var contentTypeName = eventData.Get("ContentTypeName"); + var contentPartName = eventData.Get("ContentPartName"); +} + +
+ @T("Added the {0} content part to the {1} content type.", contentPartName, contentTypeName) +
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-PartRemoved.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-PartRemoved.SummaryAdmin.cshtml new file mode 100644 index 000000000..137a210a0 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-PartRemoved.SummaryAdmin.cshtml @@ -0,0 +1,10 @@ +@using Orchard.AuditTrail.Helpers +@{ + var eventData = (IDictionary) Model.EventData; + var contentTypeName = eventData.Get("ContentTypeName"); + var contentPartName = eventData.Get("ContentPartName"); +} + +
+ @T("Removed the {0} content part from the {1} content type.", contentPartName, contentTypeName) +
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-PartSettingsUpdated.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-PartSettingsUpdated.SummaryAdmin.cshtml new file mode 100644 index 000000000..364d52744 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-PartSettingsUpdated.SummaryAdmin.cshtml @@ -0,0 +1,10 @@ +@using Orchard.AuditTrail.Helpers +@{ + var eventData = (IDictionary) Model.EventData; + var contentTypeName = eventData.Get("ContentTypeName"); + var contentPartName = eventData.Get("ContentPartName"); +} + +
+ @T("Settings for the {0} content part attached to the {1} content type were updated.", contentPartName, contentTypeName) +
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-Removed.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-Removed.SummaryAdmin.cshtml new file mode 100644 index 000000000..eb9545a7b --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-Removed.SummaryAdmin.cshtml @@ -0,0 +1,10 @@ +@using Orchard.AuditTrail.Helpers +@{ + var eventData = (IDictionary) Model.EventData; + var contentTypeName = eventData.Get("ContentTypeName"); + var contentTypeDisplayName = eventData.Get("ContentTypeDisplayName"); +} + +
+ @T("Removed the {0} content type.", contentTypeName) +
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-TypeSettingsUpdated.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-TypeSettingsUpdated.SummaryAdmin.cshtml new file mode 100644 index 000000000..1f6832afd --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-TypeSettingsUpdated.SummaryAdmin.cshtml @@ -0,0 +1,9 @@ +@using Orchard.AuditTrail.Helpers +@{ + var eventData = (IDictionary) Model.EventData; + var contentTypeName = eventData.Get("ContentTypeName"); +} + +
+ @T("Settings for the {0} content type were updated.", contentTypeName) +
\ No newline at end of file